Merge branch 'master' into feature/METRON-1416-upgrade-solr
diff --git a/metron-deployment/packaging/ambari/metron-mpack/src/main/resources/common-services/METRON/CURRENT/configuration/metron-enrichment-env.xml b/metron-deployment/packaging/ambari/metron-mpack/src/main/resources/common-services/METRON/CURRENT/configuration/metron-enrichment-env.xml
index 81b135c..b41c455 100644
--- a/metron-deployment/packaging/ambari/metron-mpack/src/main/resources/common-services/METRON/CURRENT/configuration/metron-enrichment-env.xml
+++ b/metron-deployment/packaging/ambari/metron-mpack/src/main/resources/common-services/METRON/CURRENT/configuration/metron-enrichment-env.xml
@@ -89,6 +89,18 @@
<value>indexing</value>
<display-name>Threat Intel Error Topic</display-name>
</property>
+ <property>
+ <name>enrichment_kafka_writer_batch_size</name>
+ <value>15</value>
+ <description>The number of records to batch when writing to Kakfa.</description>
+ <display-name>Kafka Writer Batch Size</display-name>
+ </property>
+ <property>
+ <name>enrichment_kafka_writer_batch_timeout</name>
+ <value>0</value>
+ <description>The timeout in milliseconds after which a batch will be written to Kafka, even if the batch size has not been met. If unspecified, or set to `0`, this defaults to a system-determined duration.</description>
+ <display-name>Kafka Writer Batch Timeout</display-name>
+ </property>
<!--
hbase parameters
diff --git a/metron-deployment/packaging/ambari/metron-mpack/src/main/resources/common-services/METRON/CURRENT/configuration/metron-profiler-env.xml b/metron-deployment/packaging/ambari/metron-mpack/src/main/resources/common-services/METRON/CURRENT/configuration/metron-profiler-env.xml
index 8546b56..07b8d11 100644
--- a/metron-deployment/packaging/ambari/metron-mpack/src/main/resources/common-services/METRON/CURRENT/configuration/metron-profiler-env.xml
+++ b/metron-deployment/packaging/ambari/metron-mpack/src/main/resources/common-services/METRON/CURRENT/configuration/metron-profiler-env.xml
@@ -221,4 +221,16 @@
<description>The profiler storm topology acker executors</description>
<display-name>Number of Acker Executors</display-name>
</property>
+ <property>
+ <name>profiler_kafka_writer_batch_size</name>
+ <value>15</value>
+ <description>The number of records to batch when writing to Kakfa.</description>
+ <display-name>Kafka Writer Batch Size</display-name>
+ </property>
+ <property>
+ <name>profiler_kafka_writer_batch_timeout</name>
+ <value>0</value>
+ <description>The timeout in milliseconds after which a batch will be written to Kafka, even if the batch size has not been met. If unspecified, or set to `0`, this defaults to a system-determined duration.</description>
+ <display-name>Kafka Writer Batch Timeout</display-name>
+ </property>
</configuration>
diff --git a/metron-deployment/packaging/ambari/metron-mpack/src/main/resources/common-services/METRON/CURRENT/package/scripts/metron_service.py b/metron-deployment/packaging/ambari/metron-mpack/src/main/resources/common-services/METRON/CURRENT/package/scripts/metron_service.py
index 58d581f..9d15e93 100644
--- a/metron-deployment/packaging/ambari/metron-mpack/src/main/resources/common-services/METRON/CURRENT/package/scripts/metron_service.py
+++ b/metron-deployment/packaging/ambari/metron-mpack/src/main/resources/common-services/METRON/CURRENT/package/scripts/metron_service.py
@@ -148,6 +148,26 @@
"op": "add",
"path": "/threat.triage.score.field",
"value": "{{threat_triage_score_field}}"
+ },
+ {
+ "op": "add",
+ "path": "/enrichment.writer.batchSize",
+ "value": "{{enrichment_kafka_writer_batch_size}}"
+ },
+ {
+ "op": "add",
+ "path": "/enrichment.writer.batchTimeout",
+ "value": "{{enrichment_kafka_writer_batch_timeout}}"
+ },
+ {
+ "op": "add",
+ "path": "/profiler.writer.batchSize",
+ "value": "{{profiler_kafka_writer_batch_size}}"
+ },
+ {
+ "op": "add",
+ "path": "/profiler.writer.batchTimeout",
+ "value": "{{profiler_kafka_writer_batch_timeout}}"
}
"""
patch_template = ambari_format(
diff --git a/metron-deployment/packaging/ambari/metron-mpack/src/main/resources/common-services/METRON/CURRENT/package/scripts/params/params_linux.py b/metron-deployment/packaging/ambari/metron-mpack/src/main/resources/common-services/METRON/CURRENT/package/scripts/params/params_linux.py
index dc1b450..07132a0 100755
--- a/metron-deployment/packaging/ambari/metron-mpack/src/main/resources/common-services/METRON/CURRENT/package/scripts/params/params_linux.py
+++ b/metron-deployment/packaging/ambari/metron-mpack/src/main/resources/common-services/METRON/CURRENT/package/scripts/params/params_linux.py
@@ -286,6 +286,8 @@
enrichment_output_topic = config['configurations']['metron-enrichment-env']['enrichment_output_topic']
enrichment_error_topic = config['configurations']['metron-enrichment-env']['enrichment_error_topic']
threatintel_error_topic = config['configurations']['metron-enrichment-env']['threatintel_error_topic']
+enrichment_kafka_writer_batch_size = config['configurations']['metron-enrichment-env']['enrichment_kafka_writer_batch_size']
+enrichment_kafka_writer_batch_timeout = config['configurations']['metron-enrichment-env']['enrichment_kafka_writer_batch_timeout']
# Enrichment - Storm common parameters
enrichment_workers = config['configurations']['metron-enrichment-env']['enrichment_workers']
@@ -346,6 +348,8 @@
profiler_window_lag_units=config['configurations']['metron-profiler-env']['profiler_window_lag_units']
profiler_topology_message_timeout_secs=config['configurations']['metron-profiler-env']['profiler_topology_message_timeout_secs']
profiler_topology_max_spout_pending=config['configurations']['metron-profiler-env']['profiler_topology_max_spout_pending']
+profiler_kafka_writer_batch_size = config['configurations']['metron-profiler-env']['profiler_kafka_writer_batch_size']
+profiler_kafka_writer_batch_timeout = config['configurations']['metron-profiler-env']['profiler_kafka_writer_batch_timeout']
# Indexing
ra_indexing_kafka_start = config['configurations']['metron-indexing-env']['ra_indexing_kafka_start']
diff --git a/metron-deployment/packaging/ambari/metron-mpack/src/main/resources/common-services/METRON/CURRENT/themes/metron_theme.json b/metron-deployment/packaging/ambari/metron-mpack/src/main/resources/common-services/METRON/CURRENT/themes/metron_theme.json
index 2b2d648..17b4460 100644
--- a/metron-deployment/packaging/ambari/metron-mpack/src/main/resources/common-services/METRON/CURRENT/themes/metron_theme.json
+++ b/metron-deployment/packaging/ambari/metron-mpack/src/main/resources/common-services/METRON/CURRENT/themes/metron_theme.json
@@ -488,6 +488,14 @@
"subsection-name": "subsection-enrichment-kafka"
},
{
+ "config": "metron-enrichment-env/enrichment_kafka_writer_batch_size",
+ "subsection-name": "subsection-enrichment-kafka"
+ },
+ {
+ "config": "metron-enrichment-env/enrichment_kafka_writer_batch_timeout",
+ "subsection-name": "subsection-enrichment-kafka"
+ },
+ {
"config": "metron-enrichment-env/enrichment_workers",
"subsection-name": "subsection-enrichment-storm"
},
@@ -672,6 +680,14 @@
"subsection-name": "subsection-profiler-kafka"
},
{
+ "config": "metron-profiler-env/profiler_kafka_writer_batch_size",
+ "subsection-name": "subsection-profiler-kafka"
+ },
+ {
+ "config": "metron-profiler-env/profiler_kafka_writer_batch_timeout",
+ "subsection-name": "subsection-profiler-kafka"
+ },
+ {
"config": "metron-profiler-env/profiler_period_duration",
"subsection-name": "subsection-profiler-setup"
},
@@ -874,7 +890,6 @@
"type": "text-field"
}
},
-
{
"config": "metron-enrichment-env/geoip_url",
"widget": {
@@ -918,6 +933,18 @@
}
},
{
+ "config": "metron-enrichment-env/enrichment_kafka_writer_batch_size",
+ "widget": {
+ "type": "text-field"
+ }
+ },
+ {
+ "config": "metron-enrichment-env/enrichment_kafka_writer_batch_timeout",
+ "widget": {
+ "type": "text-field"
+ }
+ },
+ {
"config": "metron-enrichment-env/enrichment_workers",
"widget": {
"type": "text-field"
@@ -1196,6 +1223,18 @@
}
},
{
+ "config": "metron-profiler-env/profiler_kafka_writer_batch_size",
+ "widget": {
+ "type": "text-field"
+ }
+ },
+ {
+ "config": "metron-profiler-env/profiler_kafka_writer_batch_timeout",
+ "widget": {
+ "type": "text-field"
+ }
+ },
+ {
"config": "metron-profiler-env/profiler_period_duration",
"widget": {
"type": "text-field"
diff --git a/metron-interface/metron-alerts/README.md b/metron-interface/metron-alerts/README.md
index d349c16..528878c 100644
--- a/metron-interface/metron-alerts/README.md
+++ b/metron-interface/metron-alerts/README.md
@@ -137,20 +137,27 @@
## E2E Tests
-An expressjs server is available for mocking the elastic search api.
+### Caveats
+1. E2E tests uses data from full-dev wherever applicable. The tests assume rest-api's are available @http://node1:8082. It is recommended to shutdown all other Metron services while running the E2E tests including Parsers, Enrichment, Indexing and the Profiler.
-1. Run e2e webserver :
+1. E2E tests are run on headless chrome. To see the chrome browser in action, remove the '--headless' parameter of chromeOptions in metron/metron-interface/metron-alerts/protractor.conf.js file
+
+1. E2E tests delete all the data in HBase table 'metron_update' and Elastic search index 'meta_alerts_index' for testing against its test data
+
+1. E2E tests use [protractor-flake](https://github.com/NickTomlin/protractor-flake) to re-run flaky tests.
+
+### Steps to run
+
+1. An Express.js server is available for accessing the rest api. Run the e2e webserver:
```
cd metron/metron-interface/metron-alerts
sh ./scripts/start-server-for-e2e.sh
```
-1. run e2e test using the following command
+1. Run e2e tests using the following command:
```
cd metron/metron-interface/metron-alerts
npm run e2e
```
-1. E2E tests uses data from full-dev wherever applicable. The tests assume rest-api's are available @http://node1:8082
-
-**NOTE**: *e2e tests covers all the general workflows and we will extend them as we need*
+**NOTE**: *e2e tests cover all the general workflows and we will extend them as we need*
diff --git a/metron-interface/metron-alerts/e2e/alert-details/alert-details.po.ts b/metron-interface/metron-alerts/e2e/alert-details/alert-details.po.ts
index 18cb273..8279ad9 100644
--- a/metron-interface/metron-alerts/e2e/alert-details/alert-details.po.ts
+++ b/metron-interface/metron-alerts/e2e/alert-details/alert-details.po.ts
@@ -17,77 +17,84 @@
*/
import {browser, element, by, protractor} from 'protractor';
-import {waitForElementInVisibility, waitForElementPresence, waitForElementVisibility} from '../utils/e2e_util';
+import {
+ scrollIntoView, waitForElementInVisibility, waitForElementPresence,
+ waitForElementVisibility, waitForStalenessOf
+} from '../utils/e2e_util';
export class MetronAlertDetailsPage {
navigateTo(alertId: string) {
- browser.waitForAngularEnabled(false);
- browser.get('/alerts-list(dialog:details/alerts_ui_e2e/'+ alertId +'/alerts_ui_e2e_index)');
- browser.sleep(2000);
+ return browser.waitForAngularEnabled(false)
+ .then(() => browser.get('/alerts-list(dialog:details/alerts_ui_e2e/'+ alertId +'/alerts_ui_e2e_index)'))
+ .then(() => browser.sleep(1000));
}
addCommentAndSave(comment: string, index: number) {
let textAreaElement = element(by.css('app-alert-details textarea'));
let addCommentButtonElement = element(by.buttonText('ADD COMMENT'));
- let latestCommentEle = element.all(by.css('.comment-container .comment')).get(index);
+ let latestCommentEle = element.all(by.cssContainingText('.comment-container .comment', comment));
- textAreaElement.clear()
+ return textAreaElement.clear()
.then(() => textAreaElement.sendKeys(comment))
.then(() => addCommentButtonElement.click())
- .then(() => waitForElementPresence(latestCommentEle));
+ .then(() => waitForElementVisibility(latestCommentEle));
}
clickNew() {
- element.all(by.css('.metron-slider-pane-details table tbody tr')).get(1).all(by.css('td')).get(0).click();
+ return element.all(by.css('.metron-slider-pane-details table tbody tr')).get(1).all(by.css('td')).get(0).click();
}
clickOpen() {
- element.all(by.css('.metron-slider-pane-details table tbody tr')).get(1).all(by.css('td')).get(1).click();
+ return element.all(by.css('.metron-slider-pane-details table tbody tr')).get(1).all(by.css('td')).get(1).click();
}
clickDismiss() {
- element.all(by.css('.metron-slider-pane-details table tbody tr')).get(1).all(by.css('td')).get(2).click();
+ return element.all(by.css('.metron-slider-pane-details table tbody tr')).get(1).all(by.css('td')).get(2).click();
}
clickEscalate() {
- element.all(by.css('.metron-slider-pane-details table tbody tr')).get(0).all(by.css('td')).get(1).click();
+ return element.all(by.css('.metron-slider-pane-details table tbody tr')).get(0).all(by.css('td')).get(1).click();
}
clickResolve() {
- element.all(by.css('.metron-slider-pane-details table tbody tr')).get(2).all(by.css('td')).get(1).click();
+ return element.all(by.css('.metron-slider-pane-details table tbody tr')).get(2).all(by.css('td')).get(1).click();
}
clickCommentsInSideNav() {
- return element(by.css('app-alert-details .fa.fa-comment')).click();
+ let commentIcon = element(by.css('app-alert-details .fa.fa-comment'));
+ return waitForElementVisibility(commentIcon)
+ .then(() => commentIcon.click())
+ .then(() => waitForElementVisibility(element(by.buttonText('ADD COMMENT'))));
}
clickNoForConfirmation() {
- browser.sleep(1000);
- let dialogElement = element(by.css('.metron-dialog .modal-header .close'));
- let maskElement = element(by.css('.modal-backdrop.fade'));
- waitForElementVisibility(dialogElement).then(() => element(by.css('.metron-dialog')).element(by.buttonText('Cancel')).click())
+ let cancelButton = element(by.css('.metron-dialog')).element(by.buttonText('Cancel'));
+ let maskElement = element(by.css('.modal-backdrop'));
+ waitForElementVisibility(cancelButton).then(() => element(by.css('.metron-dialog')).element(by.buttonText('Cancel')).click())
.then(() => waitForElementInVisibility(maskElement));
}
- clickYesForConfirmation() {
- browser.sleep(1000);
- let dialogElement = element(by.css('.metron-dialog .modal-header .close'));
- let maskElement = element(by.css('.modal-backdrop.fade'));
- waitForElementVisibility(dialogElement).then(() => element(by.css('.metron-dialog')).element(by.buttonText('OK')).click())
+ clickYesForConfirmation(comment) {
+ let okButton = element(by.css('.metron-dialog')).element(by.buttonText('OK'));
+ let maskElement = element(by.css('.modal-backdrop'));
+ waitForElementVisibility(okButton).then(() => element(by.css('.metron-dialog')).element(by.buttonText('OK')).click())
.then(() => waitForElementInVisibility(maskElement));
}
closeDetailPane() {
- element(by.css('app-alert-details .close-button')).click();
- browser.sleep(2000);
- }
+ let dialogElement = element(by.css('.metron-dialog.modal.show'));
+ return waitForElementInVisibility(dialogElement).then(() => scrollIntoView(element(by.css('app-alert-details .close-button')), true)
+ .then(() => element(by.css('app-alert-details .close-button')).click())
+ .then(() => waitForElementInVisibility(element(by.css('app-alert-details')))));
+}
deleteComment() {
let scrollToEle = element.all(by.css('.comment-container')).get(0);
let trashIcon = element.all(by.css('.fa.fa-trash-o')).get(0);
browser.actions().mouseMove(scrollToEle).perform().then(() => waitForElementVisibility(trashIcon))
- .then(() => element.all(by.css('.fa.fa-trash-o')).get(0).click());
+ .then(() => trashIcon.click())
+ .then(() => waitForElementVisibility(element(by.css('.modal-backdrop'))));
}
getAlertStatus(previousText) {
@@ -126,19 +133,19 @@
}
clickRenameMetaAlert() {
- element(by.css('app-alert-details .editable-text')).click();
+ return element(by.css('app-alert-details .editable-text')).click();
}
renameMetaAlert(name: string) {
- element(by.css('app-alert-details input.form-control')).sendKeys(name);
+ return element(by.css('app-alert-details input.form-control')).sendKeys(name);
}
cancelRename() {
- element(by.css('app-alert-details .input-group .fa.fa-times')).click();
+ return element(by.css('app-alert-details .input-group .fa.fa-times')).click();
}
saveRename() {
- element(by.css('app-alert-details .fa.fa-check')).click();
+ return element(by.css('app-alert-details .fa.fa-check')).click();
}
getAlertDetailsCount() {
diff --git a/metron-interface/metron-alerts/e2e/alert-details/alert-status/alert-details-status.e2e-spec.ts b/metron-interface/metron-alerts/e2e/alert-details/alert-status/alert-details-status.e2e-spec.ts
index d051a78..28d9ed0 100644
--- a/metron-interface/metron-alerts/e2e/alert-details/alert-status/alert-details-status.e2e-spec.ts
+++ b/metron-interface/metron-alerts/e2e/alert-details/alert-status/alert-details-status.e2e-spec.ts
@@ -23,24 +23,25 @@
import { MetronAlertsPage } from '../../alerts-list/alerts-list.po';
import {TreeViewPage} from '../../alerts-list/tree-view/tree-view.po';
-describe('metron-alerts alert status', function() {
+describe('Test spec for metron details page', function() {
let page: MetronAlertDetailsPage;
let listPage: MetronAlertsPage;
let treePage: TreeViewPage;
let loginPage: LoginPage;
- beforeAll(() => {
- loadTestData();
+ beforeAll(async function() : Promise<any> {
loginPage = new LoginPage();
listPage = new MetronAlertsPage();
treePage = new TreeViewPage();
- loginPage.login();
+
+ await loadTestData();
+ await loginPage.login();
});
- afterAll(() => {
+ afterAll(async function() : Promise<any> {
new MetronAlertsPage().navigateTo();
- loginPage.logout();
- deleteTestData();
+ await loginPage.logout();
+ await deleteTestData();
});
beforeEach(() => {
@@ -48,99 +49,104 @@
jasmine.addMatchers(customMatchers);
});
- it('should change alert statuses', () => {
- let alertId = 'c4c5e418-3938-099e-bb0d-37028a98dca8';
+ it('should change alert statuses', async function() : Promise<any> {
+ let alertId = '2cc174d7-c049-aaf4-d0d6-138073777309';
- page.navigateTo(alertId);
- page.clickNew();
- expect(page.getAlertStatus('ANY')).toEqual('NEW');
- page.clickOpen();
- expect(page.getAlertStatus('NEW')).toEqual('OPEN');
- expect(listPage.getAlertStatusById(alertId)).toEqual('OPEN');
- page.clickDismiss();
- expect(page.getAlertStatus('OPEN')).toEqual('DISMISS');
- expect(listPage.getAlertStatusById(alertId)).toEqual('DISMISS');
- page.clickEscalate();
- expect(page.getAlertStatus('DISMISS')).toEqual('ESCALATE');
- expect(listPage.getAlertStatusById(alertId)).toEqual('ESCALATE');
- page.clickResolve();
- expect(page.getAlertStatus('ESCALATE')).toEqual('RESOLVE');
- expect(listPage.getAlertStatusById(alertId)).toEqual('RESOLVE');
- page.clickNew();
+ await page.navigateTo(alertId);
+ expect(await page.getAlertStatus('ANY')).toEqual('NEW');
+ await page.clickOpen();
+ expect(await page.getAlertStatus('NEW')).toEqual('OPEN');
+ expect(await listPage.getAlertStatusById(alertId)).toEqual('OPEN');
+ await page.clickDismiss();
+ expect(await page.getAlertStatus('OPEN')).toEqual('DISMISS');
+ expect(await listPage.getAlertStatusById(alertId)).toEqual('DISMISS');
+ await page.clickEscalate();
+ expect(await page.getAlertStatus('DISMISS')).toEqual('ESCALATE');
+ expect(await listPage.getAlertStatusById(alertId)).toEqual('ESCALATE');
+ await page.clickResolve();
+ expect(await page.getAlertStatus('ESCALATE')).toEqual('RESOLVE');
+ expect(await listPage.getAlertStatusById(alertId)).toEqual('RESOLVE');
+ await page.clickNew();
});
- it('should add comments for table view', () => {
- let comment1 = 'This is a sample comment';
- let comment2 = 'This is a sample comment again';
- let userNameAndTimestamp = '- admin - a few seconds ago';
+ // The below code will fail until this issue is resolved in Protractor: https://github.com/angular/protractor/issues/4693
+ // This is because the connection resets before deleting the test comment, which causes the assertion to be false
- page.clickCommentsInSideNav();
- page.addCommentAndSave(comment1, 0);
+ // it('should add comments for table view', async function() : Promise<any> {
+ // let comment1 = 'This is a sample comment';
+ // let comment2 = 'This is a sample comment again';
+ // let userNameAndTimestamp = '- admin - a few seconds ago';
+ // let alertId = '2cc174d7-c049-aaf4-d0d6-138073777309';
- expect(page.getCommentsText()).toEqual([comment1]);
- expect(page.getCommentsUserNameAndTimeStamp()).toEqual([userNameAndTimestamp]);
+ // page.navigateTo(alertId);
- page.addCommentAndSave(comment2, 1);
- expect(page.getCommentsText()).toEqual([comment2, comment1]);
- expect(page.getCommentsUserNameAndTimeStamp()).toEqual([userNameAndTimestamp, userNameAndTimestamp]);
+ // await page.clickCommentsInSideNav();
+ // await page.addCommentAndSave(comment1, 0);
- page.deleteComment();
- page.clickNoForConfirmation();
- expect(page.getCommentsText()).toEqual([comment2, comment1]);
+ // expect(await page.getCommentsText()).toEqual([comment1]);
+ // expect(await page.getCommentsUserNameAndTimeStamp()).toEqual([userNameAndTimestamp]);
- page.deleteComment();
- page.clickYesForConfirmation();
- expect(page.getCommentsText()).toEqual([comment1]);
+ // await page.addCommentAndSave(comment2, 0);
+ // expect(await page.getCommentsText()).toEqual([comment2, comment1]);
+ // expect(await page.getCommentsUserNameAndTimeStamp()).toEqual([userNameAndTimestamp, userNameAndTimestamp]);
- expect(page.getCommentIconCountInListView()).toEqual(1);
+ // await page.deleteComment();
+ // await page.clickNoForConfirmation();
+ // expect(await page.getCommentsText()).toEqual([comment2, comment1]);
- page.deleteComment();
- page.clickYesForConfirmation();
- expect(page.getCommentsText()).toEqual([]);
+ // await page.deleteComment();
+ // await page.clickYesForConfirmation(comment2);
+ // expect(await page.getCommentsText()).toEqual([comment1]);
- page.closeDetailPane();
- });
+ // expect(await page.getCommentIconCountInListView()).toEqual(1);
- it('should add comments for tree view', () => {
- let comment1 = 'This is a sample comment';
- let comment2 = 'This is a sample comment again';
- let userNameAndTimestamp = '- admin - a few seconds ago';
+ // await page.deleteComment();
+ // await page.clickYesForConfirmation(comment1);
+ // expect(await page.getCommentsText()).toEqual([]);
- treePage.selectGroup('source:type');
- treePage.expandDashGroup('alerts_ui_e2e');
+ // await page.closeDetailPane();
+ // });
- treePage.clickOnRow('acf5a641-9cdb-d7ec-c309-6ea316e14fbe');
- page.clickCommentsInSideNav();
- page.addCommentAndSave(comment1, 0);
+ // it('should add comments for tree view', async function(): Promise<any> {
+ // let comment1 = 'This is a sample comment';
+ // let comment2 = 'This is a sample comment again';
+ // let userNameAndTimestamp = '- admin - a few seconds ago';
- expect(page.getCommentsText()).toEqual([comment1]);
- expect(page.getCommentsUserNameAndTimeStamp()).toEqual([userNameAndTimestamp]);
- expect(page.getCommentIconCountInTreeView()).toEqual(1);
+ // await treePage.navigateToAlertsList();
+ // await treePage.selectGroup('source:type');
+ // await treePage.expandDashGroup('alerts_ui_e2e');
- page.deleteComment();
- page.clickYesForConfirmation();
- expect(page.getCommentsText()).toEqual([]);
- page.closeDetailPane();
+ // await treePage.clickOnRow('acf5a641-9cdb-d7ec-c309-6ea316e14fbe');
+ // await page.clickCommentsInSideNav();
+ // await page.addCommentAndSave(comment1, 0);
- treePage.unGroup();
+ // expect(await page.getCommentsText()).toEqual([comment1]);
+ // expect(await page.getCommentsUserNameAndTimeStamp()).toEqual([userNameAndTimestamp]);
+ // expect(await page.getCommentIconCountInTreeView()).toEqual(1);
- treePage.selectGroup('source:type');
- treePage.selectGroup('enrichments:geo:ip_dst_addr:country');
- treePage.expandDashGroup('alerts_ui_e2e');
- treePage.expandSubGroup('alerts_ui_e2e', 'FR');
+ // await page.deleteComment();
+ // await page.clickYesForConfirmation(comment1);
+ // expect(await page.getCommentsText()).toEqual([]);
+ // await page.closeDetailPane();
- treePage.clickOnRow('7cd91565-132f-3340-db76-3ade5be54a6e');
- page.clickCommentsInSideNav();
- page.addCommentAndSave(comment2, 0);
+ // await treePage.unGroup();
- expect(page.getCommentsText()).toEqual([comment2]);
- expect(page.getCommentsUserNameAndTimeStamp()).toEqual([userNameAndTimestamp]);
- expect(page.getCommentIconCountInTreeView()).toEqual(1);
+ // await treePage.selectGroup('source:type');
+ // await treePage.selectGroup('enrichments:geo:ip_dst_addr:country');
+ // await treePage.expandDashGroup('alerts_ui_e2e');
+ // await treePage.expandSubGroup('alerts_ui_e2e', 'FR');
- page.deleteComment();
- page.clickYesForConfirmation();
- expect(page.getCommentsText()).toEqual([]);
- page.closeDetailPane();
- });
+ // await treePage.clickOnRow('07b29c29-9ab0-37dd-31d3-08ff19eaa888');
+ // await page.clickCommentsInSideNav();
+ // await page.addCommentAndSave(comment2, 0);
+
+ // expect(await page.getCommentsText()).toEqual(comment2);
+ // expect(await page.getCommentsUserNameAndTimeStamp()).toEqual(userNameAndTimestamp);
+ // expect(await page.getCommentIconCountInTreeView()).toEqual(1);
+
+ // await page.deleteComment();
+ // await page.clickYesForConfirmation(comment2);
+ // await page.closeDetailPane();
+ // });
});
diff --git a/metron-interface/metron-alerts/e2e/alerts-list/alert-filters/alert-filters.e2e-spec.ts b/metron-interface/metron-alerts/e2e/alerts-list/alert-filters/alert-filters.e2e-spec.ts
index b21e316..d9caf7c 100644
--- a/metron-interface/metron-alerts/e2e/alerts-list/alert-filters/alert-filters.e2e-spec.ts
+++ b/metron-interface/metron-alerts/e2e/alerts-list/alert-filters/alert-filters.e2e-spec.ts
@@ -21,20 +21,24 @@
import {LoginPage} from '../../login/login.po';
import {AlertFacetsPage} from './alert-filters.po';
import {loadTestData, deleteTestData} from '../../utils/e2e_util';
+import {MetronAlertsPage} from '../alerts-list.po';
-describe('metron-alerts facets', function() {
+describe('Test spec for facet filters', function() {
let page: AlertFacetsPage;
+ let tablePage: MetronAlertsPage;
let loginPage: LoginPage;
- beforeAll(() => {
- loadTestData();
+ beforeAll(async function() : Promise<any> {
loginPage = new LoginPage();
- loginPage.login();
+ tablePage = new MetronAlertsPage();
+
+ await loadTestData();
+ await loginPage.login();
});
- afterAll(() => {
- loginPage.logout();
- deleteTestData();
+ afterAll(async function() : Promise<any> {
+ await loginPage.logout();
+ await deleteTestData();
});
beforeEach(() => {
@@ -42,63 +46,21 @@
jasmine.addMatchers(customMatchers);
});
- it('should display facets data', () => {
+ it('should display facets data', async function() : Promise<any> {
let facetValues = [ 'enrichm...:country 3', 'ip_dst_addr 8', 'ip_src_addr 2', 'source:type 1' ];
- page.navgateToAlertList();
- expect(page.getFacetsTitle()).toEqualBcoz(['Filters'], 'for Title as Filters');
- expect(page.getFacetsValues()).toEqual(facetValues, 'for Facet values');
+ await page.navgateToAlertList();
+ expect(await page.getFacetsTitle()).toEqualBcoz('Filters', 'for Title as Filters');
+ expect(await page.getFacetsValues()).toEqual(facetValues, 'for Facet values');
});
- it('should expand all facets', () => {
- expect(page.getFacetState(0)).toEqualBcoz('collapse', 'for first facet');
- expect(page.getFacetState(1)).toEqualBcoz('collapse', 'for second facet');
- expect(page.getFacetState(2)).toEqualBcoz('collapse', 'for third facet');
- expect(page.getFacetState(3)).toEqualBcoz('collapse', 'for fourth facet');
+ it('should search when facet is selected', async function() : Promise<any> {
+ await page.toggleFacetState(1);
+ expect(await page.getFacetState(1)).toEqualBcoz('collapse show', 'for second facet');
- page.toggleFacetState(0);
- page.toggleFacetState(1);
- page.toggleFacetState(2);
- page.toggleFacetState(3);
+ await page.selectFilter('95.163.121.204');
+ expect(await tablePage.getChangesAlertTableTitle('Alerts (169)')).toEqual('Alerts (44)');
- expect(page.getFacetState(0)).toEqualBcoz('collapse show', 'for first facet');
- expect(page.getFacetState(1)).toEqualBcoz('collapse show', 'for second facet');
- expect(page.getFacetState(2)).toEqualBcoz('collapse show', 'for third facet');
- expect(page.getFacetState(3)).toEqualBcoz('collapse show', 'for fourth facet');
- });
-
- it('should have all facet values', () => {
- let hostMap = {
- 'comarks...rity.com': '9' ,
- '7oqnsnz...ysun.com': '44' ,
- 'node1': '36' ,
- '62.75.195.236': '18' ,
- 'runlove.us': '13' ,
- 'ip-addr.es': '2' ,
- 'ubb67.3...grams.in': '1' ,
- 'r03afd2...grams.in': '3' ,
- 'va872g....grams.in': '1'
- };
-
- expect(page.getFacetValues(0)).toEqualBcoz({ US: '22', RU: '44', FR: '25' }, 'for enrichment facet');
- expect(page.getFacetValues(3)).toEqual({ alerts_ui_e2e: '169' }, 'for source:type facet');
- });
-
- it('should collapse all facets', () => {
- expect(page.getFacetState(0)).toEqualBcoz('collapse show', 'for first facet');
- expect(page.getFacetState(1)).toEqualBcoz('collapse show', 'for second facet');
- expect(page.getFacetState(2)).toEqualBcoz('collapse show', 'for third facet');
- expect(page.getFacetState(3)).toEqualBcoz('collapse show', 'for fourth facet');
-
- page.toggleFacetState(0);
- page.toggleFacetState(1);
- page.toggleFacetState(2);
- page.toggleFacetState(3);
-
- expect(page.getFacetState(0)).toEqualBcoz('collapse', 'for first facet');
- expect(page.getFacetState(1)).toEqualBcoz('collapse', 'for second facet');
- expect(page.getFacetState(2)).toEqualBcoz('collapse', 'for third facet');
- expect(page.getFacetState(3)).toEqualBcoz('collapse', 'for fourth facet');
});
});
diff --git a/metron-interface/metron-alerts/e2e/alerts-list/alert-filters/alert-filters.po.ts b/metron-interface/metron-alerts/e2e/alerts-list/alert-filters/alert-filters.po.ts
index 7d675e5..3d17db6 100644
--- a/metron-interface/metron-alerts/e2e/alerts-list/alert-filters/alert-filters.po.ts
+++ b/metron-interface/metron-alerts/e2e/alerts-list/alert-filters/alert-filters.po.ts
@@ -17,39 +17,43 @@
*/
import {browser, element, by} from 'protractor';
-import {waitForElementPresence} from '../../utils/e2e_util';
+import {
+ reduce_for_get_all, waitForElementPresence,
+ waitForElementVisibility
+} from '../../utils/e2e_util';
export class AlertFacetsPage {
private sleepTime = 500;
navgateToAlertList() {
- browser.waitForAngularEnabled(false);
- return browser.get('/alerts-list');
+ return browser.waitForAngularEnabled(false).then(() => browser.get('/alerts-list'));
}
getFacetsTitle() {
- return waitForElementPresence(element.all(by.css('app-alert-filters metron-collapse'))).then(() => {
- return element.all(by.css('app-alert-filters .title')).getText();
+ return waitForElementVisibility(element(by.css('app-alert-filters .title'))).then(() => {
+ return element(by.css('app-alert-filters .title')).getText();
});
}
getFacetsValues() {
- return element.all(by.css('app-alert-filters metron-collapse')).getText();
+ return waitForElementVisibility(element(by.css('app-alert-filters metron-collapse:first-child'))).then(() => {
+ return element.all(by.css('app-alert-filters metron-collapse')).reduce(reduce_for_get_all(), []);
+ });
}
getFacetState(id: number) {
- browser.sleep(this.sleepTime);
let collpaseElement = element.all(by.css('metron-collapse')).get(id);
- browser.actions().mouseMove(collpaseElement).perform();
- return collpaseElement.element(by.css('div.collapse')).getAttribute('class');
+ return browser.actions().mouseMove(collpaseElement).perform()
+ .then(() => collpaseElement.element(by.css('div.collapse')).getAttribute('class'))
}
toggleFacetState(id: number) {
- browser.sleep(this.sleepTime);
let collpaseElement = element.all(by.css('metron-collapse')).get(id);
- browser.actions().mouseMove(collpaseElement).perform();
- return collpaseElement.element(by.css('a')).click();
+ return browser.actions().mouseMove(collpaseElement).perform()
+ .then(() => collpaseElement.element(by.css('a')).click())
+ .then(() => waitForElementVisibility(collpaseElement.element(by.css('div.collapse'))))
+
}
getFacetValues(id: number) {
@@ -64,5 +68,8 @@
});
}
+ selectFilter(filterTitle: string) {
+ return element(by.css(`li[title="${filterTitle}"]`)).click();
+ }
}
diff --git a/metron-interface/metron-alerts/e2e/alerts-list/alert-status/alerts-list-status.e2e-spec.ts b/metron-interface/metron-alerts/e2e/alerts-list/alert-status/alerts-list-status.e2e-spec.ts
index 828f290..e421c6e 100644
--- a/metron-interface/metron-alerts/e2e/alerts-list/alert-status/alerts-list-status.e2e-spec.ts
+++ b/metron-interface/metron-alerts/e2e/alerts-list/alert-status/alerts-list-status.e2e-spec.ts
@@ -22,20 +22,21 @@
import {loadTestData, deleteTestData} from '../../utils/e2e_util';
import {TreeViewPage} from '../tree-view/tree-view.po';
-describe('metron-alerts alert status', function() {
+describe('Test spec for changing alert status in list view & tree view', function() {
let page: MetronAlertsPage;
let treePage: TreeViewPage;
let loginPage: LoginPage;
- beforeAll(() => {
- loadTestData();
+ beforeAll(async function() : Promise<any> {
loginPage = new LoginPage();
- loginPage.login();
+
+ await loadTestData();
+ await loginPage.login();
});
- afterAll(() => {
- loginPage.logout();
- deleteTestData();
+ afterAll(async function() : Promise<any> {
+ await loginPage.logout();
+ await deleteTestData();
});
beforeEach(() => {
@@ -44,81 +45,81 @@
jasmine.addMatchers(customMatchers);
});
- it('should change alert status for multiple alerts to OPEN', () => {
- page.navigateTo();
- page.toggleAlertInList(0);
- page.toggleAlertInList(1);
- page.toggleAlertInList(2);
- page.clickActionDropdownOption('Open');
- expect(page.getAlertStatus(0, 'NEW')).toEqual('OPEN');
- expect(page.getAlertStatus(1, 'NEW')).toEqual('OPEN');
- expect(page.getAlertStatus(2, 'NEW')).toEqual('OPEN');
+ it('should change alert status for multiple alerts to OPEN', async function() : Promise<any> {
+ await page.navigateTo();
+ await page.toggleAlertInList(0);
+ await page.toggleAlertInList(1);
+ await page.toggleAlertInList(2);
+ await page.clickActionDropdownOption('Open');
+ expect(await page.getAlertStatus(0, 'NEW')).toEqual('OPEN');
+ expect(await page.getAlertStatus(1, 'NEW')).toEqual('OPEN');
+ expect(await page.getAlertStatus(2, 'NEW')).toEqual('OPEN');
});
- it('should change alert status for multiple alerts to DISMISS', () => {
- page.toggleAlertInList(3);
- page.toggleAlertInList(4);
- page.toggleAlertInList(5);
- page.clickActionDropdownOption('Dismiss');
- expect(page.getAlertStatus(3, 'NEW')).toEqual('DISMISS');
- expect(page.getAlertStatus(4, 'NEW')).toEqual('DISMISS');
- expect(page.getAlertStatus(5, 'NEW')).toEqual('DISMISS');
+ it('should change alert status for multiple alerts to DISMISS', async function() : Promise<any> {
+ await page.toggleAlertInList(3);
+ await page.toggleAlertInList(4);
+ await page.toggleAlertInList(5);
+ await page.clickActionDropdownOption('Dismiss');
+ expect(await page.getAlertStatus(3, 'NEW')).toEqual('DISMISS');
+ expect(await page.getAlertStatus(4, 'NEW')).toEqual('DISMISS');
+ expect(await page.getAlertStatus(5, 'NEW')).toEqual('DISMISS');
});
- it('should change alert status for multiple alerts to ESCALATE', () => {
- page.toggleAlertInList(6);
- page.toggleAlertInList(7);
- page.toggleAlertInList(8);
- page.clickActionDropdownOption('Escalate');
- expect(page.getAlertStatus(6, 'NEW')).toEqual('ESCALATE');
- expect(page.getAlertStatus(7, 'NEW')).toEqual('ESCALATE');
- expect(page.getAlertStatus(8, 'NEW')).toEqual('ESCALATE');
+ it('should change alert status for multiple alerts to ESCALATE', async function() : Promise<any> {
+ await page.toggleAlertInList(6);
+ await page.toggleAlertInList(7);
+ await page.toggleAlertInList(8);
+ await page.clickActionDropdownOption('Escalate');
+ expect(await page.getAlertStatus(6, 'NEW')).toEqual('ESCALATE');
+ expect(await page.getAlertStatus(7, 'NEW')).toEqual('ESCALATE');
+ expect(await page.getAlertStatus(8, 'NEW')).toEqual('ESCALATE');
});
- it('should change alert status for multiple alerts to RESOLVE', () => {
- page.toggleAlertInList(9);
- page.toggleAlertInList(10);
- page.toggleAlertInList(11);
- page.clickActionDropdownOption('Resolve');
- expect(page.getAlertStatus(9, 'NEW')).toEqual('RESOLVE');
- expect(page.getAlertStatus(10, 'NEW')).toEqual('RESOLVE');
- expect(page.getAlertStatus(11, 'NEW')).toEqual('RESOLVE');
+ it('should change alert status for multiple alerts to RESOLVE', async function() : Promise<any> {
+ await page.toggleAlertInList(9);
+ await page.toggleAlertInList(10);
+ await page.toggleAlertInList(11);
+ await page.clickActionDropdownOption('Resolve');
+ expect(await page.getAlertStatus(9, 'NEW')).toEqual('RESOLVE');
+ expect(await page.getAlertStatus(10, 'NEW')).toEqual('RESOLVE');
+ expect(await page.getAlertStatus(11, 'NEW')).toEqual('RESOLVE');
});
- it('should change alert status for multiple alerts to OPEN in tree view', () => {
- treePage.selectGroup('source:type');
- treePage.selectGroup('enrichments:geo:ip_dst_addr:country');
-
- treePage.expandDashGroup('alerts_ui_e2e');
- treePage.expandSubGroup('alerts_ui_e2e', 'US');
- treePage.expandSubGroup('alerts_ui_e2e', 'RU');
- treePage.expandSubGroup('alerts_ui_e2e', 'FR');
+ it('should change alert status for multiple alerts to OPEN in tree view', async function() : Promise<any> {
+ await treePage.selectGroup('source:type');
+ await treePage.selectGroup('enrichments:geo:ip_dst_addr:country');
- treePage.toggleAlertInTree(1);
- treePage.toggleAlertInTree(2);
- treePage.toggleAlertInTree(3);
- page.clickActionDropdownOption('Open');
+ await treePage.expandDashGroup('alerts_ui_e2e');
+ await treePage.expandSubGroup('alerts_ui_e2e', 'US');
+ await treePage.expandSubGroup('alerts_ui_e2e', 'RU');
+ await treePage.expandSubGroup('alerts_ui_e2e', 'FR');
+
+ await treePage.toggleAlertInTree(1);
+ await treePage.toggleAlertInTree(2);
+ await treePage.toggleAlertInTree(3);
+ await page.clickActionDropdownOption('Open');
expect(treePage.getAlertStatusForTreeView(1, 'NEW')).toEqual('OPEN');
expect(treePage.getAlertStatusForTreeView(2, 'NEW')).toEqual('OPEN');
expect(treePage.getAlertStatusForTreeView(3, 'NEW')).toEqual('OPEN');
- treePage.toggleAlertInTree(4);
- treePage.toggleAlertInTree(5);
- page.clickActionDropdownOption('Dismiss');
+ await treePage.toggleAlertInTree(4);
+ await treePage.toggleAlertInTree(5);
+ await page.clickActionDropdownOption('Dismiss');
expect(treePage.getAlertStatusForTreeView(4, 'NEW')).toEqual('DISMISS');
expect(treePage.getAlertStatusForTreeView(5, 'NEW')).toEqual('DISMISS');
- treePage.toggleAlertInTree(8);
- treePage.toggleAlertInTree(9);
- page.clickActionDropdownOption('Escalate');
+ await treePage.toggleAlertInTree(8);
+ await treePage.toggleAlertInTree(9);
+ await page.clickActionDropdownOption('Escalate');
expect(treePage.getAlertStatusForTreeView(8, 'NEW')).toEqual('ESCALATE');
expect(treePage.getAlertStatusForTreeView(9, 'NEW')).toEqual('ESCALATE');
- treePage.toggleAlertInTree(10);
- treePage.toggleAlertInTree(11);
- treePage.toggleAlertInTree(12);
- page.clickActionDropdownOption('Resolve');
+ await treePage.toggleAlertInTree(10);
+ await treePage.toggleAlertInTree(11);
+ await treePage.toggleAlertInTree(12);
+ await page.clickActionDropdownOption('Resolve');
expect(treePage.getAlertStatusForTreeView(10, 'NEW')).toEqual('RESOLVE');
expect(treePage.getAlertStatusForTreeView(11, 'NEW')).toEqual('RESOLVE');
expect(treePage.getAlertStatusForTreeView(12, 'NEW')).toEqual('RESOLVE');
diff --git a/metron-interface/metron-alerts/e2e/alerts-list/alerts-list.e2e-spec.ts b/metron-interface/metron-alerts/e2e/alerts-list/alerts-list.e2e-spec.ts
index 358878d..e3709ab 100644
--- a/metron-interface/metron-alerts/e2e/alerts-list/alerts-list.e2e-spec.ts
+++ b/metron-interface/metron-alerts/e2e/alerts-list/alerts-list.e2e-spec.ts
@@ -21,7 +21,7 @@
import { LoginPage } from '../login/login.po';
import { loadTestData, deleteTestData } from '../utils/e2e_util';
-describe('metron-alerts App', function() {
+describe('Test spec for all ui elements & list view', function() {
let page: MetronAlertsPage;
let loginPage: LoginPage;
let columnNames = [ '', 'Score', 'id', 'timestamp', 'source:type', 'ip_src_addr', 'enrichm...:country',
@@ -29,15 +29,16 @@
let colNamesColumnConfig = [ 'score', 'id', 'timestamp', 'source:type', 'ip_src_addr', 'enrichments:geo:ip_dst_addr:country',
'ip_dst_addr', 'host', 'alert_status' ];
- beforeAll(() => {
- loadTestData();
+ beforeAll(async function() : Promise<any> {
loginPage = new LoginPage();
- loginPage.login();
+
+ await loadTestData();
+ await loginPage.login();
});
- afterAll(() => {
- loginPage.logout();
- deleteTestData();
+ afterAll(async function() : Promise<any> {
+ await loginPage.logout();
+ await deleteTestData();
});
beforeEach(() => {
@@ -45,110 +46,109 @@
jasmine.addMatchers(customMatchers);
});
- it('should have all the UI elements', () => {
- page.navigateTo();
- page.clearLocalStorage();
+ it('should have all the UI elements', async function() : Promise<any> {
+ await page.navigateTo();
+ await page.clearLocalStorage();
- expect(page.isMetronLogoPresent()).toEqualBcoz(true, 'for Metron Logo');
- expect(page.isSavedSearchButtonPresent()).toEqualBcoz(true, 'for SavedSearch Button');
- expect(page.isClearSearchPresent()).toEqualBcoz(true, 'for Clear Search');
- expect(page.isSearchButtonPresent()).toEqualBcoz(true, 'for Search Button');
- expect(page.isSaveSearchButtonPresent()).toEqualBcoz(true, 'for Save Search Button');
- expect(page.isTableSettingsButtonPresent()).toEqualBcoz(true, 'for table settings button');
- expect(page.isPausePlayRefreshButtonPresent()).toEqualBcoz(true, 'for pause/play button');
- expect(page.isConfigureTableColumnsPresent()).toEqualBcoz(true, 'for alerts table column configure button');
+ expect(await page.getChangesAlertTableTitle('Alerts (0)')).toEqualBcoz('Alerts (169)', 'for alerts title');
- expect(page.getChangesAlertTableTitle('Alerts (0)')).toEqualBcoz('Alerts (169)', 'for alerts title');
- expect(page.getActionDropdownItems()).toEqualBcoz([ 'Open', 'Dismiss', 'Escalate', 'Resolve', 'Add to Alert' ],
+ expect(await page.isMetronLogoPresent()).toEqualBcoz(true, 'for Metron Logo');
+ expect(await page.isSavedSearchButtonPresent()).toEqualBcoz(true, 'for SavedSearch Button');
+ expect(await page.isClearSearchPresent()).toEqualBcoz(true, 'for Clear Search');
+ expect(await page.isSearchButtonPresent()).toEqualBcoz(true, 'for Search Button');
+ expect(await page.isSaveSearchButtonPresent()).toEqualBcoz(true, 'for Save Search Button');
+ expect(await page.isTableSettingsButtonPresent()).toEqualBcoz(true, 'for table settings button');
+ expect(await page.isPausePlayRefreshButtonPresent()).toEqualBcoz(true, 'for pause/play button');
+ expect(await page.isConfigureTableColumnsPresent()).toEqualBcoz(true, 'for alerts table column configure button');
+
+ expect(await page.getActionDropdownItems()).toEqualBcoz([ 'Open', 'Dismiss', 'Escalate', 'Resolve', 'Add to Alert' ],
'for default dropdown actions');
- expect(page.getTableColumnNames()).toEqualBcoz(columnNames, 'for default column names for alert list table');
+ expect(await page.getTableColumnNames()).toEqualBcoz(columnNames, 'for default column names for alert list table');
});
- it('should have all pagination controls and they should be working', () => {
- expect(page.isChevronLeftEnabled()).toEqualBcoz(false, 'for left chevron to be disabled for first page');
- expect(page.getPaginationText()).toEqualBcoz('1 - 25 of 169', 'for pagination text');
- expect(page.isChevronRightEnabled()).toEqualBcoz(true, 'for right chevron to be enabled for first page');
+ it('should have all pagination controls and they should be working', async function() : Promise<any> {
- page.clickChevronRight();
+ await page.clickSettings();
+ await page.clickPageSize('100');
- expect(page.isChevronLeftEnabled()).toEqualBcoz(true, 'for left chevron to be enabled for second page');
- expect(page.getPaginationText()).toEqualBcoz('26 - 50 of 169', 'for pagination text');
- expect(page.isChevronRightEnabled()).toEqualBcoz(true, 'for right chevron to be enabled for second page');
+ expect(await page.getChangedPaginationText('1 - 25 of 169')).toEqualBcoz('1 - 100 of 169', 'for pagination text');
+ expect(await page.isChevronLeftEnabled()).toEqualBcoz(false, 'for left chevron to be disabled for first page');
+ expect(await page.isChevronRightEnabled()).toEqualBcoz(true, 'for right chevron to be enabled for first page');
- page.clickChevronRight();
+ await page.clickChevronRight();
+ expect(await page.getChangedPaginationText('1 - 100 of 169')).toEqualBcoz('101 - 169 of 169', 'for pagination text');
+ expect(await page.isChevronLeftEnabled()).toEqualBcoz(true, 'for left chevron to be disabled for first page');
+ expect(await page.isChevronRightEnabled()).toEqualBcoz(false, 'for right chevron to be enabled for first page');
- expect(page.isChevronLeftEnabled()).toEqualBcoz(true, 'for left chevron to be enabled for third page');
- expect(page.getPaginationText()).toEqualBcoz('51 - 75 of 169', 'for pagination text');
- expect(page.isChevronRightEnabled()).toEqualBcoz(true, 'for right chevron to be enabled for third page');
+ await page.clickChevronLeft();
+ expect(await page.getChangedPaginationText('101 - 169 of 169')).toEqualBcoz('1 - 100 of 169', 'for pagination text');
+ expect(await page.isChevronLeftEnabled()).toEqualBcoz(false, 'for left chevron to be disabled for first page');
+ expect(await page.isChevronRightEnabled()).toEqualBcoz(true, 'for right chevron to be enabled for first page');
- page.clickChevronRight(4);
+ await page.clickSettings();
+ await page.clickPageSize('25');
+ expect(await page.getChangedPaginationText('1 - 100 of 169')).toEqualBcoz('1 - 25 of 169', 'for pagination text');
- expect(page.isChevronLeftEnabled()).toEqualBcoz(true, 'for left chevron to be enabled for last page');
- expect(page.getPaginationText()).toEqualBcoz('151 - 169 of 169', 'for pagination text');
- expect(page.isChevronRightEnabled()).toEqualBcoz(false, 'for right chevron to be disabled for last page');
-
- page.clickChevronLeft(7);
-
- expect(page.isChevronLeftEnabled()).toEqualBcoz(false, 'for left chevron to be disabled for first page again');
- expect(page.getPaginationText()).toEqualBcoz('1 - 25 of 169', 'for pagination text');
- expect(page.isChevronRightEnabled()).toEqualBcoz(true, 'for right chevron to be enabled for first page again');
-
+ await page.clickSettings();
});
- it('should have all settings controls and they should be working', () => {
+ it('should have all settings controls and they should be working', async function() : Promise<any> {
let settingsPaneLbelNames = [ 'REFRESH RATE', 'ROWS PER PAGE', 'HIDE Resolved Alerts', 'HIDE Dismissed Alerts' ];
let settingPaneRefreshIntervals = [ '5s', '10s', '15s', '30s', '1m', '10m', '1h' ];
let settingsPanePageSize = [ '10', '25', '50', '100', '250', '500', '1000' ];
- page.clickSettings();
+ await page.clickSettings();
- expect(page.getSettingsLabels()).toEqualBcoz(settingsPaneLbelNames, 'for table settings labels');
+ expect(await page.getSettingsLabels()).toEqualBcoz(settingsPaneLbelNames, 'for table settings labels');
- expect(page.getRefreshRateOptions()).toEqualBcoz(settingPaneRefreshIntervals, 'for table settings refresh rate labels');
- expect(page.getRefreshRateSelectedOption()).toEqualBcoz([ '1m' ], 'for table settings default refresh rate');
+ expect(await page.getRefreshRateOptions()).toEqualBcoz(settingPaneRefreshIntervals, 'for table settings refresh rate labels');
+ expect(await page.getRefreshRateSelectedOption()).toEqualBcoz([ '1m' ], 'for table settings default refresh rate');
- page.clickRefreshInterval('10s');
- expect(page.getRefreshRateSelectedOption()).toEqualBcoz([ '10s' ], 'for refresh interval 10s');
+ await page.clickRefreshInterval('10s');
+ expect(await page.getRefreshRateSelectedOption()).toEqualBcoz([ '10s' ], 'for refresh interval 10s');
- page.clickRefreshInterval('1h');
- expect(page.getRefreshRateSelectedOption()).toEqualBcoz([ '1h' ], 'for refresh interval 1h');
+ await page.clickRefreshInterval('1h');
+ expect(await page.getRefreshRateSelectedOption()).toEqualBcoz([ '1h' ], 'for refresh interval 1h');
- expect(page.getPageSizeOptions()).toEqualBcoz(settingsPanePageSize, 'for table settings refresh rate labels');
- expect(page.getPageSizeSelectedOption()).toEqualBcoz([ '25' ], 'for table settings default page size');
+ expect(await page.getPageSizeOptions()).toEqualBcoz(settingsPanePageSize, 'for table settings refresh rate labels');
+ expect(await page.getPageSizeSelectedOption()).toEqualBcoz([ '25' ], 'for table settings default page size');
- page.clickPageSize('10');
- expect(page.getPageSizeSelectedOption()).toEqualBcoz([ '10' ], 'for page size 10');
+ await page.clickPageSize('50');
+ expect(await page.getPageSizeSelectedOption()).toEqualBcoz([ '50' ], 'for page size 50');
- page.clickPageSize('100');
- expect(page.getPageSizeSelectedOption()).toEqualBcoz([ '100' ], 'for page size 100');
+ await page.clickPageSize('100');
+ expect(await page.getPageSizeSelectedOption()).toEqualBcoz([ '100' ], 'for page size 100');
- page.clickSettings();
+ await page.clickPageSize('25');
+ expect(await page.getPageSizeSelectedOption()).toEqualBcoz([ '25' ], 'for page size 100');
+
+ await page.clickSettings();
});
- it('play pause should start polling and stop polling ', () => {
- expect(page.getPlayPauseState()).toEqual('fa fa-pause', 'for default pause option');
+ it('play pause should start polling and stop polling ', async function() : Promise<any> {
+ expect(await page.getPlayPauseState()).toEqual('fa fa-play', 'for default pause option');
- page.clickPlayPause();
- expect(page.getPlayPauseState()).toEqual('fa fa-play', 'for default pause option');
+ await page.clickPlayPause('fa-pause');
+ expect(await page.getPlayPauseState()).toEqual('fa fa-pause', 'for default pause option');
- page.clickPlayPause();
- expect(page.getPlayPauseState()).toEqual('fa fa-pause', 'for default pause option');
+ await page.clickPlayPause('fa-play');
+ expect(await page.getPlayPauseState()).toEqual('fa fa-play', 'for default pause option');
});
- it('should select columns from table configuration', () => {
+ it('should select columns from table configuration', async function() : Promise<any> {
let newColNamesColumnConfig = [ 'score', 'timestamp', 'source:type', 'ip_src_addr', 'enrichments:geo:ip_dst_addr:country',
'ip_dst_addr', 'host', 'alert_status', 'guid' ];
- page.clickConfigureTable();
- expect(page.getSelectedColumnNames()).toEqual(colNamesColumnConfig, 'for default selected column names');
- page.toggleSelectCol('id');
- page.toggleSelectCol('guid', 'method');
- expect(page.getSelectedColumnNames()).toEqual(newColNamesColumnConfig, 'for guid added to selected column names');
- page.saveConfigureColumns();
+ await page.clickConfigureTable();
+ expect(await page.getSelectedColumnNames()).toEqual(colNamesColumnConfig, 'for default selected column names');
+ await page.toggleSelectCol('id');
+ await page.toggleSelectCol('guid');
+ expect(await page.getSelectedColumnNames()).toEqual(newColNamesColumnConfig, 'for guid added to selected column names');
+ await page.saveConfigureColumns();
});
- it('should have all time-range controls', () => {
+ it('should have all time-range controls', async function() : Promise<any> {
let quickRanges = [
'Last 7 days', 'Last 30 days', 'Last 60 days', 'Last 90 days', 'Last 6 months', 'Last 1 year', 'Last 2 years', 'Last 5 years',
'Yesterday', 'Day before yesterday', 'This day last week', 'Previous week', 'Previous month', 'Previous year', 'All time',
@@ -156,191 +156,168 @@
'Last 5 minutes', 'Last 15 minutes', 'Last 30 minutes', 'Last 1 hour', 'Last 3 hours', 'Last 6 hours', 'Last 12 hours', 'Last 24 hours'
];
- page.clickDateSettings();
- expect(page.getTimeRangeTitles()).toEqual(['Time Range', 'Quick Ranges']);
- expect(page.getQuickTimeRanges()).toEqual(quickRanges);
- expect(page.getValueForManualTimeRange()).toEqual([ 'now', 'now' ]);
- expect(page.isManulaTimeRangeApplyButtonPresent()).toEqual(true);
- expect(page.getTimeRangeButtonText()).toEqual('All time');
- page.clickDateSettings();
+ await page.clickDateSettings();
+ expect(await page.getTimeRangeTitles()).toEqual(['Time Range', 'Quick Ranges']);
+ expect(await page.getQuickTimeRanges()).toEqual(quickRanges);
+ expect(await page.getValueForManualTimeRange()).toEqual([ 'now', 'now' ]);
+ expect(await page.isManulaTimeRangeApplyButtonPresent()).toEqual(true);
+ expect(await page.getTimeRangeButtonText()).toEqual('All time');
+ await page.hideDateSettings();
});
- it('should have all time range values populated - 1', () => {
+ it('should have all time range values populated - 1', async function() : Promise<any> {
let secInADay = (24 * 60 * 60 * 1000);
- page.clickClearSearch();
- expect(page.getTimeRangeButtonAndSubText()).toEqualBcoz(['All time'], 'for all-time');
+ await page.clickDateSettings();
+ expect(await page.selectQuickTimeRangeAndGetTimeRangeAndTimeText('Last 7 days').catch(e => console.log(e))).toEqualBcoz(['Last 7 days', String(secInADay * 7)], 'for last 7 days');
- page.clickDateSettings();
- page.selectQuickTimeRange('Last 7 days');
- expect(page.getTimeRangeButtonAndSubText()).toEqualBcoz(['Last 7 days', String(secInADay * 7)], 'for last 7 days');
+ await page.clickDateSettings();
+ expect(await page.selectQuickTimeRangeAndGetTimeRangeAndTimeText('Last 30 days').catch(e => console.log(e))).toEqualBcoz(['Last 30 days', String(secInADay * 30)], 'for last 30 days');
- page.clickDateSettings();
- page.selectQuickTimeRange('Last 30 days');
- expect(page.getTimeRangeButtonAndSubText()).toEqualBcoz(['Last 30 days', String(secInADay * 30)], 'for last 30 days');
+ await page.clickDateSettings();
+ expect(await page.selectQuickTimeRangeAndGetTimeRangeAndTimeText('Last 60 days').catch(e => console.log(e))).toEqualBcoz(['Last 60 days', String(secInADay * 60)], 'for last 60 days');
- page.clickDateSettings();
- page.selectQuickTimeRange('Last 60 days');
- expect(page.getTimeRangeButtonAndSubText()).toEqualBcoz(['Last 60 days', String(secInADay * 60)], 'for last 60 days');
+ await page.clickDateSettings();
+ expect(await page.selectQuickTimeRangeAndGetTimeRangeAndTimeText('Last 90 days').catch(e => console.log(e))).toEqualBcoz(['Last 90 days', String(secInADay * 90)], 'for last 90 days');
- page.clickDateSettings();
- page.selectQuickTimeRange('Last 90 days');
- expect(page.getTimeRangeButtonAndSubText()).toEqualBcoz(['Last 90 days', String(secInADay * 90)], 'for last 90 days');
+ await page.clickDateSettings();
+ expect(await page.selectQuickTimeRangeAndGetTimeRangeAndTimeText('Last 1 year').catch(e => console.log(e))).toEqualBcoz(['Last 1 year', String(secInADay * 365)], 'for last 1 year');
+ await page.clickDateSettings();
+ expect(await page.selectQuickTimeRangeAndGetTimeRangeAndTimeText('Last 2 years').catch(e => console.log(e))).toEqualBcoz(['Last 2 years', String((secInADay * 365 * 2))], 'for last 2 years');
- page.clickDateSettings();
- page.selectQuickTimeRange('Last 1 year');
- expect(page.getTimeRangeButtonAndSubText()).toEqualBcoz(['Last 1 year', String(secInADay * 365)], 'for last 1 year');
+ await page.clickDateSettings();
+ expect(await page.selectQuickTimeRangeAndGetTimeRangeAndTimeText('Last 5 years').catch(e => console.log(e))).toEqualBcoz(['Last 5 years', String((secInADay * 365 * 5) + secInADay)], 'for last 5 years');
- page.clickDateSettings();
- page.selectQuickTimeRange('Last 2 years');
- expect(page.getTimeRangeButtonAndSubText()).toEqualBcoz(['Last 2 years', String((secInADay * 365 * 2) + secInADay)], 'for last 2 years');
-
- page.clickDateSettings();
- page.selectQuickTimeRange('Last 5 years');
- expect(page.getTimeRangeButtonAndSubText()).toEqualBcoz(['Last 5 years', String((secInADay * 365 * 5) + secInADay)], 'for last 5 years');
-
- page.clickClearSearch();
});
- it('should have all time range values populated - 2', () => {
+ it('should have all time range values populated - 2', async function() : Promise<any> {
let secInADay = (24*60*60*1000);
- page.clickDateSettings();
- page.selectQuickTimeRange('Yesterday');
- expect(page.getTimeRangeButtonAndSubText()).toEqualBcoz([ 'Yesterday', String(secInADay - 1000)], 'yesterday');
+ await page.clickDateSettings();
+ expect(await page.selectQuickTimeRangeAndGetTimeRangeAndTimeText('Yesterday').catch(e => console.log(e))).toEqualBcoz([ 'Yesterday', String(secInADay - 1000)], 'yesterday');
- page.clickDateSettings();
- page.selectQuickTimeRange('Day before yesterday');
- expect(page.getTimeRangeButtonAndSubText()).toEqualBcoz([ 'Day before yesterday', String(secInADay - 1000)], 'day before yesterday');
+ await page.clickDateSettings();
+ expect(await page.selectQuickTimeRangeAndGetTimeRangeAndTimeText('Day before yesterday').catch(e => console.log(e))).toEqualBcoz([ 'Day before yesterday', String(secInADay - 1000)], 'day before yesterday');
- page.clickDateSettings();
- page.selectQuickTimeRange('This day last week');
- expect(page.getTimeRangeButtonAndSubText()).toEqualBcoz([ 'This day last week', String(secInADay - 1000)], 'this day last week');
+ await page.clickDateSettings();
+ expect(await page.selectQuickTimeRangeAndGetTimeRangeAndTimeText('This day last week').catch(e => console.log(e))).toEqualBcoz([ 'This day last week', String(secInADay - 1000)], 'this day last week');
- page.clickDateSettings();
- page.selectQuickTimeRange('Previous week');
- expect(page.getTimeRangeButtonAndSubText()).toEqualBcoz([ 'Previous week', String((secInADay * 7) - (1000))], 'for previous week');
+ await page.clickDateSettings();
+ expect(await page.selectQuickTimeRangeAndGetTimeRangeAndTimeText('Previous week').catch(e => console.log(e))).toEqualBcoz([ 'Previous week', String((secInADay * 7) - (1000))], 'for previous week');
- page.clickClearSearch();
});
- it('should have all time range values populated - 3', () => {
+ it('should have all time range values populated - 3', async function() : Promise<any> {
let secInADay = (24*60*60*1000);
- page.clickDateSettings();
- page.selectQuickTimeRange('Today');
- expect(page.getTimeRangeButtonAndSubText()).toEqualBcoz([ 'Today', String(secInADay - 1000)], 'for today');
+ await page.clickDateSettings();
+ expect(await page.selectQuickTimeRangeAndGetTimeRangeAndTimeText('Today').catch(e => console.log(e))).toEqualBcoz([ 'Today', String(secInADay - 1000)], 'for today');
- page.clickDateSettings();
- page.selectQuickTimeRange('This week');
- expect(page.getTimeRangeButtonAndSubText()).toEqualBcoz([ 'This week', String((secInADay*7) - 1000)], 'for this week');
+ await page.clickDateSettings();
+ expect(await page.selectQuickTimeRangeAndGetTimeRangeAndTimeText('This week').catch(e => console.log(e))).toEqualBcoz([ 'This week', String((secInADay*7) - 1000)], 'for this week');
- page.clickClearSearch();
});
- it('should have all time range values populated - 4', () => {
- let secInADay = (24*60*60*1000);
+ it('should have all time range values populated - 4', async function() : Promise<any> {
- page.clickDateSettings();
- page.selectQuickTimeRange('Last 5 minutes');
- expect(page.getTimeRangeButtonAndSubText()).toEqualBcoz([ 'Last 5 minutes', String(5 * 60 * 1000)], 'for last 5 minutes');
+ await page.clickDateSettings();
+ expect(await page.selectQuickTimeRangeAndGetTimeRangeAndTimeText('Last 5 minutes').catch(e => console.log(e))).toEqualBcoz([ 'Last 5 minutes', String(5 * 60 * 1000)], 'for last 5 minutes');
- page.clickDateSettings();
- page.selectQuickTimeRange('Last 15 minutes');
- expect(page.getTimeRangeButtonAndSubText()).toEqualBcoz([ 'Last 15 minutes', String(15 * 60 * 1000)], 'for last 15 minutes');
+ await page.clickDateSettings();
+ expect(await page.selectQuickTimeRangeAndGetTimeRangeAndTimeText('Last 15 minutes').catch(e => console.log(e))).toEqualBcoz([ 'Last 15 minutes', String(15 * 60 * 1000)], 'for last 15 minutes');
- page.clickDateSettings();
- page.selectQuickTimeRange('Last 30 minutes');
- expect(page.getTimeRangeButtonAndSubText()).toEqualBcoz([ 'Last 30 minutes', String(30 * 60 * 1000)], 'for last 30 minutes');
+ await page.clickDateSettings();
+ expect(await page.selectQuickTimeRangeAndGetTimeRangeAndTimeText('Last 30 minutes').catch(e => console.log(e))).toEqualBcoz([ 'Last 30 minutes', String(30 * 60 * 1000)], 'for last 30 minutes');
- page.clickDateSettings();
- page.selectQuickTimeRange('Last 1 hour');
- expect(page.getTimeRangeButtonAndSubText()).toEqualBcoz([ 'Last 1 hour', String(60 * 60 * 1000)], 'for last 1 hour');
+ await page.clickDateSettings();
+ expect(await page.selectQuickTimeRangeAndGetTimeRangeAndTimeText('Last 1 hour').catch(e => console.log(e))).toEqualBcoz([ 'Last 1 hour', String(60 * 60 * 1000)], 'for last 1 hour');
- page.clickDateSettings();
- page.selectQuickTimeRange('Last 3 hours');
- expect(page.getTimeRangeButtonAndSubText()).toEqualBcoz([ 'Last 3 hours', String(3 * 60 * 60 * 1000)], 'for last 3 hours');
+ await page.clickDateSettings();
+ expect(await page.selectQuickTimeRangeAndGetTimeRangeAndTimeText('Last 3 hours').catch(e => console.log(e))).toEqualBcoz([ 'Last 3 hours', String(3 * 60 * 60 * 1000)], 'for last 3 hours');
- page.clickDateSettings();
- page.selectQuickTimeRange('Last 6 hours');
- expect(page.getTimeRangeButtonAndSubText()).toEqualBcoz([ 'Last 6 hours', String(6 * 60 * 60 * 1000)], 'for last 6 hours');
+ await page.clickDateSettings();
+ expect(await page.selectQuickTimeRangeAndGetTimeRangeAndTimeText('Last 6 hours').catch(e => console.log(e))).toEqualBcoz([ 'Last 6 hours', String(6 * 60 * 60 * 1000)], 'for last 6 hours');
- page.clickDateSettings();
- page.selectQuickTimeRange('Last 12 hours');
- expect(page.getTimeRangeButtonAndSubText()).toEqualBcoz([ 'Last 12 hours', String(12 * 60 * 60 * 1000)], 'for last 12 hours');
+ await page.clickDateSettings();
+ expect(await page.selectQuickTimeRangeAndGetTimeRangeAndTimeText('Last 12 hours').catch(e => console.log(e))).toEqualBcoz([ 'Last 12 hours', String(12 * 60 * 60 * 1000)], 'for last 12 hours');
- page.clickDateSettings();
- page.selectQuickTimeRange('Last 24 hours');
- expect(page.getTimeRangeButtonAndSubText()).toEqualBcoz([ 'Last 24 hours', String(24 * 60 * 60 * 1000)], 'for last 24 hours');
+ await page.clickDateSettings();
+ expect(await page.selectQuickTimeRangeAndGetTimeRangeAndTimeText('Last 24 hours').catch(e => console.log(e))).toEqualBcoz([ 'Last 24 hours', String(24 * 60 * 60 * 1000)], 'for last 24 hours');
- page.clickClearSearch();
});
- it('should disable date picker when timestamp is present in search', () => {
- page.clickTableText('2017-09-13 18:02:20');
- expect(page.isDateSeettingDisabled()).toEqual(true);
+ it('should disable date picker when timestamp is present in search', async function() : Promise<any> {
+ await page.setSearchText('timestamp:1505325740512');
+ expect(await page.getChangesAlertTableTitle('Alerts (169)')).toEqual('Alerts (1)');
+ expect(await page.isDateSeettingDisabled()).toEqual(true);
- page.clickClearSearch();
- expect(page.isDateSeettingDisabled()).toEqual(false);
+ await page.clickClearSearch();
+ expect(await page.getChangesAlertTableTitle('Alerts (1)')).toEqual('Alerts (169)');
+ expect(await page.isDateSeettingDisabled()).toEqual(false);
- page.clickTableText('alerts_ui_e2e');
- expect(page.isDateSeettingDisabled()).toEqual(false);
+ await expect(page.clickTableTextAndGetSearchText('FR', 'enrichments:geo:ip_dst_addr:country:FR')).toEqual('enrichments:geo:ip_dst_addr:country:FR');
+ expect(await page.getChangesAlertTableTitle('Alerts (169)')).toEqual('Alerts (25)');
+ expect(await page.isDateSeettingDisabled()).toEqual(false);
- page.clickClearSearch();
+ await page.clickClearSearch();
+ expect(await page.getChangesAlertTableTitle('Alerts (25)')).toEqual('Alerts (169)');
});
- it('should have now included when to date is empty', () => {
- page.clickDateSettings();
- page.setDate(0, '2017', 'September', '13', '23', '29', '35');
- page.selectTimeRangeApplyButton();
- expect(page.getTimeRangeButtonTextForNow()).toEqual([ 'Date Range', '2017-09-13 23:29:35 to now' ]);
+ it('should have now included when to date is empty', async function() : Promise<any> {
+ await page.clickDateSettings();
+ await page.setDate(0, '2017', 'September', '13', '23', '29', '35');
+ await page.selectTimeRangeApplyButton();
+ expect(await page.getTimeRangeButtonTextForNow()).toEqual([ 'Date Range', '2017-09-13 23:29:35 to now' ]);
- page.clickClearSearch();
+ await page.clickClearSearch();
});
-
- it('should have all time-range included while searching', () => {
+
+ it('should have all time-range included while searching', async function() : Promise<any> {
let startDate = new Date(1505325575000);
let endDate = new Date(1505325580000);
- page.clearLocalStorage();
- page.clickDateSettings();
+ await page.clearLocalStorage();
+ await page.clickDateSettings();
/* Select Last 5years for time range */
- page.selectQuickTimeRange('Last 5 years');
- expect(page.getTimeRangeButtonText()).toEqual('Last 5 years');
+ expect(await page.selectQuickTimeRangeAndGetTimeRangeText('Last 5 years')).toEqual('Last 5 years');
/* Select custom date for time range */
- page.clickDateSettings();
- page.setDate(0, String(startDate.getFullYear()), startDate.toLocaleString('en-us', { month: "long" }), String(startDate.getDate()),
+ await page.clickDateSettings();
+ await page.setDate(0, String(startDate.getFullYear()), startDate.toLocaleString('en-us', { month: "long" }), String(startDate.getDate()),
String(startDate.getHours()), String(startDate.getMinutes()), String(startDate.getSeconds()));
- page.setDate(1, String(endDate.getFullYear()), endDate.toLocaleString('en-us', { month: "long" }), String(endDate.getDate()),
+ await page.setDate(1, String(endDate.getFullYear()), endDate.toLocaleString('en-us', { month: "long" }), String(endDate.getDate()),
String(endDate.getHours()), String(endDate.getMinutes()), String(endDate.getSeconds()));
- page.selectTimeRangeApplyButton();
- expect(page.getChangesAlertTableTitle('Alerts (169)')).toEqual('Alerts (5)');
+ await page.selectTimeRangeApplyButton();
+ expect(await page.getChangesAlertTableTitle('Alerts (169)')).toEqual('Alerts (5)');
/* Save custom date in saved searches */
- page.saveSearch('e2e-2');
- page.clickSavedSearch();
- expect(page.getRecentSearchOptions()).toContain('timestamp:last-5-years', 'for recent search options');
- expect(page.getSavedSearchOptions()).toEqual(['e2e-2'],
+ await page.saveSearch('e2e-2');
+ await page.clickSavedSearch();
+
+ // The below expect statement will fail until this issue is resolved in Protractor: https://github.com/angular/protractor/issues/4693
+ // This is because the connection resets before deleting the test comment, which causes the assertion to be false
+
+ // expect(await page.getRecentSearchOptions()).toContain('timestamp:last-5-years', 'for recent search options');
+ expect(await page.getSavedSearchOptions()).toEqual(['e2e-2'],
'for saved search options');
- page.clickCloseSavedSearch();
+ await page.clickCloseSavedSearch();
/* Clear Search should should show all rows */
- page.clickClearSearch();
- expect(page.getChangesAlertTableTitle('Alerts (5)')).toEqual('Alerts (169)');
+ await page.clickClearSearch();
+ expect(await page.getChangesAlertTableTitle('Alerts (5)')).toEqual('Alerts (169)');
/* Load the saved search */
- page.clickSavedSearch();
- page.loadSavedSearch('e2e-2');
- expect(page.getChangesAlertTableTitle('Alerts (169)')).toEqual('Alerts (5)');
+ await page.clickSavedSearch();
+ await page.loadSavedSearch('e2e-2');
+ expect(await page.getChangesAlertTableTitle('Alerts (169)')).toEqual('Alerts (5)');
/* Load recent search */
- page.clickSavedSearch();
- page.loadRecentSearch('last-5-years');
- expect(page.getChangesAlertTableTitle('Alerts (5)')).toEqual('Alerts (169)');
+ await page.clickSavedSearch();
+ await page.loadRecentSearch('last-5-years');
+ expect(await page.getChangesAlertTableTitle('Alerts (5)')).toEqual('Alerts (169)');
});
diff --git a/metron-interface/metron-alerts/e2e/alerts-list/alerts-list.po.ts b/metron-interface/metron-alerts/e2e/alerts-list/alerts-list.po.ts
index 45f4fee..13aeb27 100644
--- a/metron-interface/metron-alerts/e2e/alerts-list/alerts-list.po.ts
+++ b/metron-interface/metron-alerts/e2e/alerts-list/alerts-list.po.ts
@@ -18,16 +18,23 @@
import {browser, element, by, protractor} from 'protractor';
import * as moment from 'moment/moment';
-import {waitForElementVisibility, waitForElementPresence, waitForElementInVisibility} from '../utils/e2e_util';
+import {
+ waitForElementVisibility, waitForElementPresence, waitForElementInVisibility,
+ waitForText, waitForCssClass, waitForCssClassNotToBePresent, waitForTextChange,
+ waitForStalenessOf, reduce_for_get_all, waitForElementCountGreaterThan, scrollIntoView,
+ waitForNonEmptyText, catchNoSuchElementError
+} from '../utils/e2e_util';
export class MetronAlertsPage {
+ private EC = protractor.ExpectedConditions;
+
navigateTo() {
- browser.waitForAngularEnabled(false);
- return browser.get('/alerts-list');
+ return browser.waitForAngularEnabled(false)
+ .then(() => browser.get('/alerts-list'));
}
clearLocalStorage() {
- browser.executeScript('window.localStorage.clear();');
+ return browser.executeScript('window.localStorage.clear();');
}
isMetronLogoPresent() {
@@ -72,23 +79,29 @@
clickActionDropdown() {
let actionsDropDown = element(by.buttonText('ACTIONS'));
- browser.actions().mouseMove(actionsDropDown).perform();
- return actionsDropDown.click();
+ return scrollIntoView(actionsDropDown, true)
+ .then(() => actionsDropDown.click());
}
clickActionDropdownOption(option: string) {
- this.clickActionDropdown().then(() => {
- element(by.cssContainingText('.dropdown-menu span', option)).click();
- browser.sleep(2000);
- });
+ return this.clickActionDropdown()
+ .then(() => element(by.cssContainingText('.dropdown-menu span', option)).click())
+ .then(() => waitForCssClassNotToBePresent(element(by.css('#table-actions')), 'show'));
}
getActionDropdownItems() {
- return this.clickActionDropdown().then(() => element.all(by.css('.dropdown-menu .dropdown-item.disabled')).getText());
+ return this.clickActionDropdown()
+ .then(() => element.all(by.css('.dropdown-menu .dropdown-item.disabled')).reduce(reduce_for_get_all(), []));
}
getTableColumnNames() {
- return element.all(by.css('app-alerts-list .table th')).getText();
+ return element.all(by.css('app-alerts-list .table th')).reduce(reduce_for_get_all(), []);
+ }
+
+ getChangedPaginationText(previousText: string) {
+ let paginationElement = element(by.css('metron-table-pagination span'));
+ return waitForTextChange(paginationElement, previousText)
+ .then(() => paginationElement.getText());
}
getPaginationText() {
@@ -107,16 +120,18 @@
});
}
- clickChevronRight(times = 1) {
- for (let i = 0; i < times; i++) {
- element(by.css('metron-table-pagination .fa.fa-chevron-right')).click();
- }
+ clickChevronRight() {
+ let paginationEle = element(by.css('metron-table-pagination .fa.fa-chevron-right'));
+ return waitForElementVisibility(paginationEle)
+ .then(() => browser.actions().mouseMove(paginationEle).perform())
+ .then(() => paginationEle.click())
}
clickChevronLeft(times = 1) {
- for (let i = 0; i < times; i++) {
- element(by.css('metron-table-pagination .fa.fa-chevron-left')).click();
- }
+ let paginationEle = element(by.css('metron-table-pagination .fa.fa-chevron-left'));
+ return waitForElementVisibility(paginationEle)
+ .then(() => browser.actions().mouseMove(paginationEle).perform())
+ .then(() => paginationEle.click());
}
clickSettings() {
@@ -125,23 +140,23 @@
}
getSettingsLabels() {
- return element.all(by.css('app-configure-rows form label:not(.switch)')).getText();
+ return element.all(by.css('app-configure-rows form label:not(.switch)')).reduce(reduce_for_get_all() ,[]);
}
getRefreshRateOptions() {
- return element.all(by.css('.preset-row.refresh-interval .preset-cell')).getText();
+ return element.all(by.css('.preset-row.refresh-interval .preset-cell')).reduce(reduce_for_get_all() ,[]);
}
getRefreshRateSelectedOption() {
- return element.all(by.css('.preset-row.refresh-interval .preset-cell.is-active')).getText();
+ return element.all(by.css('.preset-row.refresh-interval .preset-cell.is-active')).reduce(reduce_for_get_all() ,[]);
}
getPageSizeOptions() {
- return element.all(by.css('.preset-row.page-size .preset-cell')).getText();
+ return element.all(by.css('.preset-row.page-size .preset-cell')).reduce(reduce_for_get_all() ,[]);
}
getPageSizeSelectedOption() {
- return element.all(by.css('.preset-row.page-size .preset-cell.is-active')).getText();
+ return element.all(by.css('.preset-row.page-size .preset-cell.is-active')).reduce(reduce_for_get_all() ,[]);
}
clickRefreshInterval(intervalText: string) {
@@ -154,30 +169,46 @@
clickConfigureTable() {
let gearIcon = element(by.css('app-alerts-list .fa.fa-cog.configure-table-icon'));
- waitForElementVisibility(gearIcon).then(() => gearIcon.click());
- browser.sleep(1000);
+ return waitForElementVisibility(gearIcon)
+ .then(() => scrollIntoView(gearIcon, true))
+ .then(() => gearIcon.click())
+ .then(() => waitForElementCountGreaterThan('app-configure-table tr', 282));
}
clickCloseSavedSearch() {
- element(by.css('app-saved-searches .close-button')).click();
- browser.sleep(2000);
+ return element(by.css('app-saved-searches .close-button')).click()
+ .then(() => waitForStalenessOf(element(by.css('app-saved-searches'))));
}
clickSavedSearch() {
- element(by.buttonText('Searches')).click();
- browser.sleep(1000);
+ return element(by.buttonText('Searches')).click()
+ .then(() => waitForElementVisibility(element(by.css('app-saved-searches'))))
+ .then(() => browser.sleep(1000));
}
- clickPlayPause() {
- element(by.css('.btn.pause-play')).click();
+ clickPlayPause(waitForPreviousClass: string) {
+ let playPauseButton = element(by.css('.btn.pause-play'));
+ return browser.actions().mouseMove(playPauseButton).perform()
+ .then(() => playPauseButton.click())
+ .then(() => waitForCssClass(element(by.css('.btn.pause-play i')), waitForPreviousClass));
}
- clickTableText(name: string) {
- waitForElementPresence(element.all(by.linkText(name))).then(() => element.all(by.linkText(name)).get(0).click());
+ clickTableTextAndGetSearchText(name: string, textToWaitFor: string) {
+ browser.sleep(500);
+ return waitForElementVisibility(element.all(by.cssContainingText('table tr td a', name)).get(0))
+ .then(() => element.all(by.cssContainingText('table tr td a', name)).get(0).click())
+ .then(() => waitForText('.ace_line', textToWaitFor))
+ .then(() => element(by.css('.ace_line')).getText());
}
- clickClearSearch() {
- element(by.css('.btn-search-clear')).click();
+ private clickTableText(name: string) {
+ waitForElementVisibility(element.all(by.linkText(name))).then(() => element.all(by.linkText(name)).get(0).click());
+ }
+
+ clickClearSearch(alertCount = '169') {
+ return element(by.css('.btn-search-clear')).click()
+ .then(() => waitForText('.ace_line', '*'))
+ .then(() => waitForText('.col-form-label-lg', `Alerts (${alertCount})`));
}
getSavedSearchTitle() {
@@ -197,36 +228,37 @@
}
getRecentSearchOptions() {
- browser.sleep(1000);
- return element(by.linkText('Recent Searches')).element(by.xpath('..')).all(by.css('li')).getText();
+ return element.all(by.css('[data-name="recent-searches"] li')).getText();
}
getDefaultRecentSearchValue() {
- browser.sleep(1000);
- return element(by.linkText('Recent Searches')).element(by.xpath('..')).all(by.css('i')).getText();
+ return element.all(by.css('[data-name="recent-searches"] i')).getText();
}
getSavedSearchOptions() {
- browser.sleep(1000);
- return element(by.linkText('Saved Searches')).element(by.xpath('..')).all(by.css('li')).getText();
+ return element.all(by.css('[data-name="saved-searches"] li')).getText();
}
getDefaultSavedSearchValue() {
- browser.sleep(1000);
- return element(by.linkText('Saved Searches')).element(by.xpath('..')).all(by.css('i')).getText();
+ return element.all(by.css('[data-name="saved-searches"] i')).getText();
}
getSelectedColumnNames() {
- return element.all(by.css('app-configure-table input[type="checkbox"]:checked')).map(ele => {
- return ele.getAttribute('id').then(id => id.replace(/select-deselect-/, ''));
- });
+ return element.all(by.css('app-configure-table input[type="checkbox"]:checked')).reduce((acc, ele) => {
+ return ele.getAttribute('id').then(id => {
+ acc.push(id.replace(/select-deselect-/, ''));
+ return acc;
+ })
+ }, []);
}
- toggleSelectCol(name: string, scrollTo = '') {
- scrollTo = scrollTo === '' ? name : scrollTo;
- let ele = element(by.css('app-configure-table label[for="select-deselect-' + name + '"]'));
- let scrollToEle = element(by.css('app-configure-table label[for="select-deselect-' + scrollTo + '"]'));
- browser.actions().mouseMove(scrollToEle).perform().then(() => ele.click());
+ toggleSelectCol(name: string) {
+ const selector = `app-configure-table label[for=\"select-deselect-${name}\"]`;
+ const ele = element(by.css(selector));
+ return waitForElementVisibility(ele)
+ .then(() => scrollIntoView(ele, true))
+ .then(() => (element(by.css(selector)).click()))
+ .catch(err => console.log(err));
}
saveSearch(name: string) {
@@ -235,28 +267,41 @@
}
saveConfigureColumns() {
- element(by.css('app-configure-table')).element(by.buttonText('SAVE')).click();
+ return element(by.css('app-configure-table')).element(by.buttonText('SAVE')).click();
}
- clickRemoveSearchChip() {
+ clickRemoveSearchChipAndGetSearchText(expectedSearchText: string) {
+ return this.clickRemoveSearchChip()
+ .then(() => waitForText('.ace_line', expectedSearchText))
+ .then(() => element(by.css('.ace_line')).getText())
+ }
+
+ private clickRemoveSearchChip(): any {
let aceLine = element.all(by.css('.ace_keyword')).get(0);
/* - Focus on the search text box by sending a empty string
- move the mouse to the text in search bos so that delete buttons become visible
- wait for delete buttons become visible
- click on delete button
*/
- element(by.css('app-alerts-list .ace_text-input')).sendKeys('')
+ return element(by.css('app-alerts-list .ace_text-input')).sendKeys('')
.then(() => browser.actions().mouseMove(aceLine).perform())
.then(() => this.waitForElementPresence(element(by.css('.ace_value i'))))
.then(() => element.all(by.css('.ace_value i')).get(0).click());
}
- setSearchText(search: string) {
- this.clickClearSearch();
- element(by.css('app-alerts-list .ace_text-input')).sendKeys(protractor.Key.BACK_SPACE);
- element(by.css('app-alerts-list .ace_text-input')).sendKeys(search);
- element(by.css('app-alerts-list .ace_text-input')).sendKeys(protractor.Key.ENTER);
- browser.sleep(2000);
+ setSearchText(search: string, alertCount = '169') {
+ // It is required to click on a visible element of Ace editor in order to
+ // bring focus to the input: https://stackoverflow.com/questions/37809915/element-not-visible-error-not-able-to-click-an-element
+ let EC = protractor.ExpectedConditions;
+ let aceInput = element(by.css('app-alerts-list .ace_text-input'));
+ let aceScroller = element(by.css('app-alerts-list .ace_scroller'));
+ return this.clickClearSearch(alertCount)
+ .then(() => browser.wait(EC.presenceOf(aceScroller)))
+ .then(() => aceScroller.click())
+ .then(() => aceInput.sendKeys(protractor.Key.BACK_SPACE))
+ .then(() => aceInput.sendKeys(search))
+ .then(() => aceInput.sendKeys(protractor.Key.ENTER))
+ .then(() => browser.sleep(10000));
}
waitForElementPresence (element ) {
@@ -272,25 +317,31 @@
toggleAlertInList(index: number) {
let selector = by.css('app-alerts-list tbody tr label');
let checkbox = element.all(selector).get(index);
- this.waitForElementPresence(checkbox).then(() => {
- browser.actions().mouseMove(checkbox).perform().then(() => {
- checkbox.click();
- });
- });
+ return this.waitForElementPresence(checkbox)
+ .then(() => scrollIntoView(checkbox, true))
+ .then(() => checkbox.click());
}
getAlertStatus(rowIndex: number, previousText: string, colIndex = 8) {
let row = element.all(by.css('app-alerts-list tbody tr')).get(rowIndex);
let column = row.all(by.css('td a')).get(colIndex);
- return this.waitForTextChange(column, previousText).then(() => {
- return column.getText();
- });
+ return this.waitForTextChange(column, previousText).then(() => column.getText());
}
- waitForMetaAlert() {
- browser.sleep(2000);
- return element(by.css('button[data-name="search"]')).click()
- .then(() => waitForElementPresence(element(by.css('.icon-cell.dropdown-cell'))));
+ waitForMetaAlert(expectedCount) {
+ let title = element(by.css('.col-form-label-lg'));
+ function waitForMetaAlert$()
+ {
+ return function () {
+ return browser.sleep(2000)
+ .then(() => element(by.css('button[data-name="search"]')).click())
+ .then(() => waitForTextChange(title, `Alerts (169)`))
+ .then(() => title.getText())
+ .then((text) => text === `Alerts (${expectedCount})`)
+ .catch(catchNoSuchElementError())
+ }
+ }
+ return browser.wait(waitForMetaAlert$()).catch(catchNoSuchElementError());
}
isDateSeettingDisabled() {
@@ -298,37 +349,74 @@
}
clickDateSettings() {
- element(by.css('app-time-range button.btn-search')).click();
- browser.sleep(2000);
+ return scrollIntoView(element(by.css('app-time-range button.btn-search')), true)
+ .then(() => element(by.css('app-time-range button.btn-search')).click())
+ .then(() => waitForCssClass(element(by.css('app-time-range #time-range')), 'show'));
+ }
+
+ hideDateSettings() {
+ return element(by.css('app-time-range button.btn-search')).click()
+ .then(() => waitForCssClassNotToBePresent(element(by.css('app-time-range #time-range')), 'show'))
+ .then(() => waitForElementInVisibility(element(by.css('app-time-range #time-range'))));
}
getTimeRangeTitles() {
- return element.all(by.css('app-time-range .title')).getText();
+ return element.all(by.css('app-time-range .title')).reduce(reduce_for_get_all(), []);
}
getQuickTimeRanges() {
- return element.all(by.css('app-time-range .quick-ranges span')).getText();
+ return element.all(by.css('app-time-range .quick-ranges span')).reduce(reduce_for_get_all(), []);
}
getValueForManualTimeRange() {
- return element.all(by.css('app-time-range input.form-control')). getAttribute('value');
+ return element.all(by.css('app-time-range input.form-control')).reduce((acc, ele) => {
+ return ele.getAttribute('value').then(value => {
+ acc.push(value);
+ return acc;
+ });
+ }, []);
}
isManulaTimeRangeApplyButtonPresent() {
return element.all(by.css('app-time-range')).all(by.buttonText('APPLY')).count().then(count => count === 1);
}
+ waitForTextAndSubTextInTimeRange(currentTimeRangeVal) {
+ return waitForTextChange(element(by.css('app-time-range .time-range-value')), currentTimeRangeVal[1])
+ .then(() => waitForTextChange(element(by.css('app-time-range .time-range-text')), currentTimeRangeVal[0]))
+ }
+
+ async selectQuickTimeRangeAndGetTimeRangeAndTimeText(quickRange: string) {
+ let currentTimeRangeVal: any = [];
+ let timeRangeVal = '', timeRangeText = '';
+ await element(by.css('app-time-range .time-range-value')).getText().then(text => timeRangeVal = text.trim());
+ await element(by.css('app-time-range .time-range-text')).getText().then(text => timeRangeText = text.trim());
+
+ await this.selectQuickTimeRange(quickRange);
+ await waitForCssClassNotToBePresent(element(by.css('app-time-range #time-range')), 'show');
+ await waitForTextChange(element(by.css('app-time-range .time-range-value')), timeRangeVal);
+ await waitForTextChange(element(by.css('app-time-range .time-range-text')), timeRangeText);
+
+ return this.getTimeRangeButtonAndSubText();
+ }
+
+ selectQuickTimeRangeAndGetTimeRangeText(quickRange: string) {
+ return this.selectQuickTimeRange(quickRange)
+ .then(() => waitForElementInVisibility(element(by.css('#time-range'))))
+ .then(() => browser.wait(this.EC.textToBePresentInElement(element(by.css('app-time-range .time-range-text')), quickRange)))
+ .then(() => element.all(by.css('app-time-range button span')).get(0).getText());
+ }
+
selectQuickTimeRange(quickRange: string) {
- element.all(by.cssContainingText('.quick-ranges span', quickRange)).get(0).click();
- browser.sleep(2000);
+ return element(by.id(quickRange.toLowerCase().replace(/ /g,'-'))).click();
}
getTimeRangeButtonText() {
- return element.all(by.css('app-time-range button.btn-search span')).get(0).getText();
+ return element(by.css('app-time-range .time-range-text')).getText();
}
setDate(index: number, year: string, month: string, day: string, hour: string, min: string, sec: string) {
- element.all(by.css('app-time-range .calendar')).get(index).click()
+ return element.all(by.css('app-time-range .calendar')).get(index).click()
.then(() => element.all(by.css('.pika-select.pika-select-hour')).get(index).click())
.then(() => element.all(by.css('.pika-select.pika-select-hour')).get(index).element(by.cssContainingText('option', hour)).click())
.then(() => element.all(by.css('.pika-select.pika-select-minute')).get(index).click())
@@ -341,8 +429,6 @@
.then(() => element.all(by.css('.pika-select.pika-select-month')).get(index).element(by.cssContainingText('option', month)).click())
.then(() => element.all(by.css('.pika-table')).get(index).element(by.buttonText(day)).click())
.then(() => waitForElementInVisibility(element.all(by.css('.pika-single')).get(index)));
-
- browser.sleep(1000);
}
selectTimeRangeApplyButton() {
@@ -350,11 +436,9 @@
}
getChangesAlertTableTitle(previousText: string) {
- // browser.pause();
let title = element(by.css('.col-form-label-lg'));
- return this.waitForTextChange(title, previousText).then(() => {
- return title.getText();
- });
+ return waitForTextChange(title, previousText)
+ .then(() => title.getText());
}
getAlertStatusById(id: string) {
@@ -372,7 +456,7 @@
}
expandMetaAlert(rowIndex: number) {
- element.all(by.css('table tbody tr')).get(rowIndex).element(by.css('.icon-cell.dropdown-cell')).click();
+ return element.all(by.css('table tbody tr')).get(rowIndex).element(by.css('.icon-cell.dropdown-cell')).click();
}
getHiddenRowCount() {
@@ -388,8 +472,8 @@
}
clickOnMetaAlertRow(rowIndex: number) {
- element.all(by.css('table tbody tr')).get(rowIndex).all(by.css('td')).get(5).click();
- browser.sleep(2000);
+ return element.all(by.css('table tbody tr')).get(rowIndex).all(by.css('td')).get(5).click()
+ .then(() => browser.sleep(2000));
}
removeAlert(rowIndex: number) {
@@ -397,42 +481,38 @@
}
loadSavedSearch(name: string) {
- element.all(by.css('app-saved-searches metron-collapse')).get(1).element(by.css('li[title="'+ name +'"]')).click();
- browser.sleep(1000);
+ return element.all(by.css('app-saved-searches metron-collapse')).get(1).element(by.css('li[title="'+ name +'"]')).click();
}
loadRecentSearch(name: string) {
- element.all(by.css('app-saved-searches metron-collapse')).get(0).all(by.css('li')).get(2).click();
- browser.sleep(1000);
+ return element.all(by.css('app-saved-searches metron-collapse')).get(0).all(by.css('li')).get(2).click();
}
getTimeRangeButtonTextForNow() {
- return element.all(by.css('app-time-range button span')).getText();
+ return element.all(by.css('app-time-range button span')).reduce(reduce_for_get_all(), []);
}
- getTimeRangeButtonAndSubText() {
- return waitForElementInVisibility(element(by.css('#time-range')))
- .then(() => element.all(by.css('app-time-range button span')).getText())
- .then(arr => {
- let retArr = [arr[0]];
- for (let i=1; i < arr.length; i++) {
- let dateStr = arr[i].split(' to ');
- let fromTime = moment.utc(dateStr[0], 'YYYY-MM-DD HH:mm:ss Z').unix() * 1000;
- let toTime = moment.utc(dateStr[1], 'YYYY-MM-DD HH:mm:ss Z').unix() * 1000;
- retArr.push((toTime - fromTime) + '');
- }
- return retArr;
- });
+ async getTimeRangeButtonAndSubText() {
+ let timeRangetext = '', timeRangeValue = '';
+
+ await element(by.css('app-time-range .time-range-text')).getText().then(text => timeRangetext = text);
+ await element(by.css('app-time-range .time-range-value')).getText().then(text => timeRangeValue = text);
+
+ let retArr = [timeRangetext];
+ let dateStr = timeRangeValue.split(' to ');
+ let fromTime = moment.utc(dateStr[0], 'YYYY-MM-DD HH:mm:ss Z').unix() * 1000;
+ let toTime = moment.utc(dateStr[1], 'YYYY-MM-DD HH:mm:ss Z').unix() * 1000;
+ retArr.push((toTime - fromTime) + '');
+ return retArr;
}
renameColumn(name: string, value: string) {
- element(by.cssContainingText('app-configure-table span', name))
+ return element(by.cssContainingText('app-configure-table span', name))
.element(by.xpath('../..'))
.element(by.css('.input')).sendKeys(value);
}
getTableCellValues(cellIndex: number, startRowIndex: number, endRowIndex: number): any {
- return element.all(by.css('table tbody tr td:nth-child(' + cellIndex + ')')).getText()
- .then(val => val.slice(startRowIndex, endRowIndex));
+ return element.all(by.css('table tbody tr td:nth-child(' + cellIndex + ')')).reduce(reduce_for_get_all(), [])
}
}
diff --git a/metron-interface/metron-alerts/e2e/alerts-list/configure-table/configure-table.e2e-spec.ts b/metron-interface/metron-alerts/e2e/alerts-list/configure-table/configure-table.e2e-spec.ts
index 6741e2f..c3636f5 100644
--- a/metron-interface/metron-alerts/e2e/alerts-list/configure-table/configure-table.e2e-spec.ts
+++ b/metron-interface/metron-alerts/e2e/alerts-list/configure-table/configure-table.e2e-spec.ts
@@ -21,21 +21,22 @@
import {LoginPage} from '../../login/login.po';
import {loadTestData, deleteTestData} from '../../utils/e2e_util';
-describe('metron-alerts configure table', function() {
+describe('Test spec for table column configuration', function() {
let page: MetronAlertsPage;
let loginPage: LoginPage;
let colNamesColumnConfig = [ 'score', 'id', 'timestamp', 'source:type', 'ip_src_addr', 'enrichments:geo:ip_dst_addr:country',
'ip_dst_addr', 'host', 'alert_status' ];
- beforeAll(() => {
- loadTestData();
+ beforeAll(async function() : Promise<any> {
loginPage = new LoginPage();
- loginPage.login();
+
+ await loadTestData();
+ await loginPage.login();
});
- afterAll(() => {
- loginPage.logout();
- deleteTestData();
+ afterAll(async function() : Promise<any> {
+ await loginPage.logout();
+ await deleteTestData();
});
beforeEach(() => {
@@ -43,40 +44,39 @@
jasmine.addMatchers(customMatchers);
});
- it('should select columns from table configuration', () => {
+ it('should select columns from table configuration', async function() : Promise<any> {
let newColNamesColumnConfig = [ 'score', 'timestamp', 'source:type', 'ip_src_addr', 'enrichments:geo:ip_dst_addr:country',
'ip_dst_addr', 'host', 'alert_status', 'guid' ];
- page.clearLocalStorage();
- page.navigateTo();
+ await page.clearLocalStorage();
+ await page.navigateTo();
- page.clickConfigureTable();
- expect(page.getSelectedColumnNames()).toEqualBcoz(colNamesColumnConfig, 'for default selected column names');
- page.toggleSelectCol('id');
- page.toggleSelectCol('guid', 'method');
- expect(page.getSelectedColumnNames()).toEqualBcoz(newColNamesColumnConfig, 'for guid added to selected column names');
- page.saveConfigureColumns();
+ await page.clickConfigureTable();
+ expect(await page.getSelectedColumnNames()).toEqualBcoz(colNamesColumnConfig, 'for default selected column names');
+ await page.toggleSelectCol('id');
+ await page.toggleSelectCol('guid');
+ expect(await page.getSelectedColumnNames()).toEqualBcoz(newColNamesColumnConfig, 'for guid added to selected column names');
+ await page.saveConfigureColumns();
});
- it('should rename columns from table configuration', () => {
- page.clearLocalStorage();
- page.navigateTo();
+ it('should rename columns from table configuration', async function() : Promise<any> {
+ await page.clearLocalStorage();
+ await page.navigateTo();
- page.clickConfigureTable();
- page.renameColumn('enrichments:geo:ip_dst_addr:country', 'Country');
- page.saveConfigureColumns();
+ await page.clickConfigureTable();
+ await page.renameColumn('enrichments:geo:ip_dst_addr:country', 'Country');
+ await page.saveConfigureColumns();
- page.clickTableText('FR');
- expect(page.getSearchText()).toEqual('Country:FR');
- expect(page.getChangesAlertTableTitle('Alerts (169)')).toEqual('Alerts (25)');
- page.clickClearSearch();
+ expect(await page.clickTableTextAndGetSearchText('FR', 'Country:FR')).toEqual('Country:FR');
+ expect(await page.getChangesAlertTableTitle('Alerts (169)')).toEqual('Alerts (25)');
+ await page.clickClearSearch();
- expect(page.getChangesAlertTableTitle('Alerts (25)')).toEqual('Alerts (169)');
- page.setSearchText('Country:FR');
- expect(page.getChangesAlertTableTitle('Alerts (169)')).toEqual('Alerts (25)');
- page.clickClearSearch();
+ expect(await page.getChangesAlertTableTitle('Alerts (25)')).toEqual('Alerts (169)');
+ await page.setSearchText('Country:FR');
+ expect(await page.getChangesAlertTableTitle('Alerts (169)')).toEqual('Alerts (25)');
+ await page.clickClearSearch();
- expect(page.getTableColumnNames()).toContain('Country', 'for renamed column names for alert list table');
+ expect(await page.getTableColumnNames()).toContain('Country', 'for renamed column names for alert list table');
});
diff --git a/metron-interface/metron-alerts/e2e/alerts-list/meta-alerts/meta-alert.e2e-spec.ts b/metron-interface/metron-alerts/e2e/alerts-list/meta-alerts/meta-alert.e2e-spec.ts
index 00d677e..5425523 100644
--- a/metron-interface/metron-alerts/e2e/alerts-list/meta-alerts/meta-alert.e2e-spec.ts
+++ b/metron-interface/metron-alerts/e2e/alerts-list/meta-alerts/meta-alert.e2e-spec.ts
@@ -19,13 +19,14 @@
import { MetronAlertsPage } from '../alerts-list.po';
import {customMatchers} from '../../matchers/custom-matchers';
import {LoginPage} from '../../login/login.po';
-import {loadTestData, deleteTestData} from '../../utils/e2e_util';
+import {loadTestData, deleteTestData, createMetaAlertsIndex} from '../../utils/e2e_util';
import {TreeViewPage} from '../tree-view/tree-view.po';
import {MetronAlertDetailsPage} from '../../alert-details/alert-details.po';
import {MetaAlertPage} from './meta-alert.po';
import {AlertFacetsPage} from '../alert-filters/alert-filters.po';
+import {browser} from 'protractor';
-describe('meta-alerts workflow', function() {
+describe('Test spec for meta alerts workflow', function() {
let detailsPage: MetronAlertDetailsPage;
let tablePage: MetronAlertsPage;
let metaAlertPage: MetaAlertPage;
@@ -33,122 +34,126 @@
let loginPage: LoginPage;
let alertFacetsPage: AlertFacetsPage;
- beforeAll(() => {
- loadTestData();
-
+ beforeAll(async function() : Promise<any> {
loginPage = new LoginPage();
- loginPage.login();
tablePage = new MetronAlertsPage();
treePage = new TreeViewPage();
tablePage = new MetronAlertsPage();
metaAlertPage = new MetaAlertPage();
detailsPage = new MetronAlertDetailsPage();
alertFacetsPage = new AlertFacetsPage();
+
+ await createMetaAlertsIndex();
+ await loadTestData();
+ await loginPage.login();
});
- afterAll(() => {
- loginPage.logout();
- deleteTestData();
+ afterAll(async function() : Promise<any> {
+ await loginPage.logout();
+ await deleteTestData();
});
beforeEach(() => {
jasmine.addMatchers(customMatchers);
});
- it('should have all the steps for meta alerts workflow', () => {
+ it('should have all the steps for meta alerts workflow', async function() : Promise<any> {
let comment1 = 'This is a sample comment';
let userNameAndTimestamp = '- admin - a few seconds ago';
- let confirmText = 'Do you wish to create a meta alert with 113 selected alerts?';
+ let confirmText = 'Do you wish to create a meta alert with 22 selected alerts?';
let dashRowValues = {
- 'firstDashRow': ['0', '192.168.138.158', 'ALERTS', '113'],
- 'secondDashRow': ['0', '192.168.66.1', 'ALERTS', '56']
+ 'firstDashRow': ['0', '192.168.138.2', 'ALERTS', '22']
};
- tablePage.navigateTo();
+ await tablePage.navigateTo();
+ expect(await tablePage.getChangesAlertTableTitle('Alerts (0)')).toEqual('Alerts (169)');
/* Create Meta Alert */
- treePage.selectGroup('ip_src_addr');
- expect(treePage.getDashGroupValues('192.168.138.158')).toEqualBcoz(dashRowValues.firstDashRow, 'First Dashrow to be present');
- expect(treePage.getDashGroupValues('192.168.66.1')).toEqualBcoz(dashRowValues.secondDashRow, 'Second Dashrow to be present');
+ await treePage.selectGroup('ip_dst_addr');
+ // Test cannot pass until issue with missing dash score is resolved: https://issues.apache.org/jira/browse/METRON-1631
+ // expect(await treePage.getDashGroupValues('192.168.138.2')).toEqualBcoz(dashRowValues.firstDashRow, 'First Dashrow to be present');
- treePage.clickOnMergeAlerts('192.168.138.158');
- expect(treePage.getConfirmationText()).toEqualBcoz(confirmText, 'confirmation text to be present');
- treePage.clickNoForConfirmation();
+ await treePage.clickOnMergeAlerts('192.168.138.2');
+ expect(await treePage.getConfirmationText()).toEqualBcoz(confirmText, 'confirmation text to be present');
+ await treePage.clickNoForConfirmation();
- treePage.clickOnMergeAlerts('192.168.138.158');
- treePage.clickYesForConfirmation();
+ await treePage.clickOnMergeAlerts('192.168.138.2');
+ await treePage.clickYesForConfirmation();
- treePage.waitForElementToDisappear('192.168.138.158');
+ await treePage.waitForElementToDisappear('192.168.138.2');
- treePage.unGroup();
+ await treePage.unGroup();
/* Table should have all alerts */
- tablePage.waitForMetaAlert();
- expect(tablePage.getPaginationText()).toEqualBcoz('1 - 25 of 57', 'pagination text to be present');
- expect(tablePage.getCellValue(0, 2, '(114)')).toContain('(113)', 'number of alerts in a meta alert should be correct');
- expect(tablePage.getNonHiddenRowCount()).toEqualBcoz(25, '25 rows to be visible');
- expect(tablePage.getAllRowsCount()).toEqualBcoz(138, '138 rows to be available');
- expect(tablePage.getHiddenRowCount()).toEqualBcoz(113, '113 rows to be hidden');
- tablePage.expandMetaAlert(0);
- expect(tablePage.getNonHiddenRowCount()).toEqualBcoz(138, '138 rows to be visible after group expand');
- expect(tablePage.getAllRowsCount()).toEqualBcoz(138, '138 rows to be available after group expand');
- expect(tablePage.getHiddenRowCount()).toEqualBcoz(0, '0 rows to be hidden after group expand');
+ await tablePage.waitForMetaAlert(148);
+ expect(await tablePage.getChangedPaginationText('1 - 25 of 169')).toEqualBcoz('1 - 25 of 148', 'pagination text to be present');
+ expect(await tablePage.getCellValue(0, 2, '(14)')).toContain('(22)');
+ expect(await tablePage.getNonHiddenRowCount()).toEqualBcoz(25, '25 rows to be visible');
+ expect(await tablePage.getAllRowsCount()).toEqualBcoz(47, '47 rows to be available');
+ expect(await tablePage.getHiddenRowCount()).toEqualBcoz(22, '22 rows to be hidden');
+ await tablePage.expandMetaAlert(0);
+ expect(await tablePage.getNonHiddenRowCount()).toEqualBcoz(47, '47 rows to be visible after group expand');
+ expect(await tablePage.getAllRowsCount()).toEqualBcoz(47, '47 rows to be available after group expand');
+ expect(await tablePage.getHiddenRowCount()).toEqualBcoz(0, '0 rows to be hidden after group expand');
/* Meta Alert Status Change */
- tablePage.toggleAlertInList(0);
- tablePage.clickActionDropdownOption('Open');
- expect(tablePage.getAlertStatus(0, 'NEW', 2)).toEqual('OPEN');
- expect(tablePage.getAlertStatus(1, 'NEW')).toEqual('OPEN');
- expect(tablePage.getAlertStatus(2, 'NEW')).toEqual('OPEN');
+ await tablePage.toggleAlertInList(0);
+ await tablePage.clickActionDropdownOption('Open');
+ expect(await tablePage.getAlertStatus(0, 'NEW', 2)).toEqual('OPEN');
+ expect(await tablePage.getAlertStatus(1, 'NEW')).toEqual('OPEN');
+ expect(await tablePage.getAlertStatus(2, 'NEW')).toEqual('OPEN');
- /* Details Edit Should work - add comments - remove comments - multiple alerts */
- tablePage.clickOnMetaAlertRow(0);
- expect(detailsPage.getAlertDetailsCount()).toEqualBcoz(113, '113 alert details should be present');
- detailsPage.clickRenameMetaAlert();
- detailsPage.renameMetaAlert('e2e-meta-alert');
- detailsPage.cancelRename();
- expect(detailsPage.getAlertNameOrId()).not.toEqual('e2e-meta-alert');
- detailsPage.clickRenameMetaAlert();
- detailsPage.renameMetaAlert('e2e-meta-alert');
- detailsPage.saveRename();
+ /* Details Edit - add comments - remove comments - multiple alerts */
+ await tablePage.clickOnMetaAlertRow(0);
+ expect(await detailsPage.getAlertDetailsCount()).toEqualBcoz(22, '22 alert details should be present');
+ await detailsPage.clickRenameMetaAlert();
+ await detailsPage.renameMetaAlert('e2e-meta-alert');
+ await detailsPage.cancelRename();
+ expect(await detailsPage.getAlertNameOrId()).not.toEqual('e2e-meta-alert');
+ await detailsPage.clickRenameMetaAlert();
+ await detailsPage.renameMetaAlert('e2e-meta-alert');
+ await detailsPage.saveRename();
expect(detailsPage.getAlertNameOrId()).toEqual('e2e-meta-alert');
- detailsPage.clickCommentsInSideNav();
- detailsPage.addCommentAndSave(comment1, 0);
- expect(detailsPage.getCommentsText()).toEqual([comment1]);
- expect(detailsPage.getCommentsUserNameAndTimeStamp()).toEqual([userNameAndTimestamp]);
- expect(detailsPage.getCommentIconCountInListView()).toEqual(1);
+ // The below code will fail until this issue is resolved in Protractor: https://github.com/angular/protractor/issues/4693
+ // This is because the connection resets before deleting the test comment, which causes the assertion to be false
- detailsPage.deleteComment();
- detailsPage.clickYesForConfirmation();
+ // await detailsPage.clickCommentsInSideNav();
+ // await detailsPage.addCommentAndSave(comment1, 0);
+ // expect(await detailsPage.getCommentsText()).toEqual([comment1]);
+ // expect(await detailsPage.getCommentsUserNameAndTimeStamp()).toEqual([userNameAndTimestamp]);
+ // expect(await detailsPage.getCommentIconCountInListView()).toEqual(1);
- detailsPage.closeDetailPane();
+ // await detailsPage.deleteComment();
+ // await detailsPage.clickYesForConfirmation(comment1);
+ await detailsPage.closeDetailPane();
/* Add to alert */
- tablePage.toggleAlertInList(3);
- tablePage.clickActionDropdownOption('Add to Alert');
- expect(metaAlertPage.getPageTitle()).toEqualBcoz('Add to Alert', 'Add Alert Title should be present');
- expect(metaAlertPage.getMetaAlertsTitle()).toEqualBcoz('SELECT OPEN ALERT', 'select open alert title should be present');
- expect(metaAlertPage.getAvailableMetaAlerts()).toEqualBcoz('e2e-meta-alert (113)', 'Meta alert should be present');
- metaAlertPage.selectRadio();
- metaAlertPage.addToMetaAlert();
- expect(tablePage.getCellValue(0, 2, '(113')).toContain('(114)', 'alert count should be incremented');
+ await tablePage.toggleAlertInList(3);
+ await tablePage.clickActionDropdownOption('Add to Alert');
+ await metaAlertPage.waitForDialog();
+ expect(await metaAlertPage.getPageTitle()).toEqualBcoz('Add to Alert', 'Add Alert Title should be present');
+ expect(await metaAlertPage.getMetaAlertsTitle()).toEqualBcoz('SELECT OPEN ALERT', 'select open alert title should be present');
+ expect(await metaAlertPage.getAvailableMetaAlerts()).toEqualBcoz('e2e-meta-alert (22)', 'Meta alert should be present');
+ await metaAlertPage.selectRadio();
+ await metaAlertPage.addToMetaAlert();
+ expect(await tablePage.getCellValue(0, 2, '(22')).toContain('(23)', 'alert count should be incremented');
- /* Remove from alert */
+ // /* Remove from alert */
let removAlertConfirmText = 'Do you wish to remove the alert from the meta alert?';
- tablePage.removeAlert(2);
- expect(treePage.getConfirmationText()).toEqualBcoz(removAlertConfirmText, 'confirmation text to remove alert from meta alert');
- treePage.clickYesForConfirmation();
- expect(tablePage.getCellValue(0, 2, '(114')).toContain('(113)', 'alert count should be decremented');
+ await tablePage.removeAlert(2);
+ expect(await treePage.getConfirmationText()).toEqualBcoz(removAlertConfirmText, 'confirmation text to remove alert from meta alert');
+ await treePage.clickYesForConfirmation();
+ expect(await tablePage.getCellValue(0, 2, '(23')).toContain('(22)', 'alert count should be decremented');
- /* Delete Meta Alert */
+ // /* Delete Meta Alert */
let removeMetaAlertConfirmText = 'Do you wish to remove all the alerts from meta alert?';
- tablePage.removeAlert(0);
- expect(treePage.getConfirmationText()).toEqualBcoz(removeMetaAlertConfirmText, 'confirmation text to remove meta alert');
- treePage.clickYesForConfirmation();
+ await tablePage.removeAlert(0);
+ expect(await treePage.getConfirmationText()).toEqualBcoz(removeMetaAlertConfirmText, 'confirmation text to remove meta alert');
+ await treePage.clickYesForConfirmation();
});
- it('should create a meta alert from nesting of more than one level', () => {
+ it('should create a meta alert from nesting of more than one level', async function() : Promise<any> {
let groupByItems = {
'source:type': '1',
'ip_dst_addr': '7',
@@ -178,70 +183,73 @@
'a5e95569-a...0e2613b29a'
];
- let alertsAfterDeletedInMetaAlerts = [
- '82f8046d-d...03b17480dd',
- '5c1825f6-7...da3abe3aec',
- '9041285e-9...a04a885b53',
- 'ed906df7-2...91cc54c2f3',
- 'e63ff7ae-d...cddbe0c0b3',
- '3c346bf9-b...cb04b43210',
- 'dcc483af-c...7bb802b652',
- 'b71f085d-6...a4904d8fcf',
- '754b4f63-3...b39678207f',
- 'd9430af3-e...9a18600ab2',
- '9a943c94-c...3b9046b782',
- 'f39dc401-3...1f9cf02cd9',
- 'd887fe69-c...2fdba06dbc',
- 'e38be207-b...60a43e3378',
- 'eba8eccb-b...0005325a90',
- 'adca96e3-1...979bf0b5f1',
+ let alertsAfterDeletedInMetaAlerts = [ '3c346bf9-b...cb04b43210',
'42f4ce28-8...b3d575b507',
+ '5c1825f6-7...da3abe3aec',
+ '754b4f63-3...b39678207f',
+ '82f8046d-d...03b17480dd',
+ '9041285e-9...a04a885b53',
+ '9a943c94-c...3b9046b782',
+ 'a5e95569-a...0e2613b29a',
+ 'adca96e3-1...979bf0b5f1',
'aed3d10f-b...8b8a139f25',
- 'a5e95569-a...0e2613b29a'
- ];
+ 'b71f085d-6...a4904d8fcf',
+ 'c894bbcf-3...74cf0cc1fe',
+ 'd887fe69-c...2fdba06dbc',
+ 'd9430af3-e...9a18600ab2',
+ 'dcc483af-c...7bb802b652',
+ 'e63ff7ae-d...cddbe0c0b3',
+ 'eba8eccb-b...0005325a90',
+ 'ed906df7-2...91cc54c2f3',
+ 'f39dc401-3...1f9cf02cd9' ];
// Create a meta alert from a group that is nested by more than 1 level
- treePage.selectGroup('source:type');
- treePage.selectGroup('ip_dst_addr');
- treePage.expandDashGroup('alerts_ui_e2e');
+ await treePage.selectGroup('source:type');
+ await treePage.selectGroup('ip_dst_addr');
+ await treePage.expandDashGroup('alerts_ui_e2e');
- treePage.clickOnMergeAlertsInTable('alerts_ui_e2e', '224.0.0.251', 0);
- treePage.clickYesForConfirmation();
+ await treePage.clickOnMergeAlertsInTable('alerts_ui_e2e', '224.0.0.251', 0);
+ await treePage.clickYesForConfirmation();
- treePage.unGroup();
- tablePage.waitForMetaAlert();
+ await treePage.unGroup();
+ await tablePage.waitForMetaAlert(150);
- expect(tablePage.getPaginationText()).toEqualBcoz('1 - 25 of 150', 'pagination text to be present');
+ expect(await tablePage.getChangedPaginationText('1 - 25 of 169')).toEqualBcoz('1 - 25 of 150', 'pagination text to be present');
// Meta Alert should appear in Filters
- alertFacetsPage.toggleFacetState(3);
- expect(alertFacetsPage.getFacetValues(3)).toEqual({'metaalert': '1' }, 'for source:type facet');
+ await alertFacetsPage.toggleFacetState(3);
+ let facetValues = await alertFacetsPage.getFacetValues(3);
+ expect(await facetValues['metaalert']).toEqual('1', 'for source:type facet');
// Meta Alert should not appear in Groups
- expect(treePage.getGroupByItemNames()).toEqualBcoz(Object.keys(groupByItems), 'Group By Elements names should be present');
- expect(treePage.getGroupByItemCounts()).toEqualBcoz(Object.keys(groupByItems).map(key => groupByItems[key]),
+ expect(await treePage.getGroupByItemNames()).toEqualBcoz(Object.keys(groupByItems), 'Group By Elements names should be present');
+ expect(await treePage.getGroupByItemCounts()).toEqualBcoz(Object.keys(groupByItems).map(key => groupByItems[key]),
'5 Group By Elements values should be present');
- tablePage.setSearchText('guid:c894bbcf-3195-0708-aebe-0574cf0cc1fe');
- expect(tablePage.getChangesAlertTableTitle('Alerts (150)')).toEqual('Alerts (1)');
- tablePage.expandMetaAlert(0);
- expect(tablePage.getAllRowsCount()).toEqual(21);
- tablePage.expandMetaAlert(0);
- tablePage.clickClearSearch();
- expect(tablePage.getChangesAlertTableTitle('Alerts (1)')).toEqual('Alerts (150)');
+ await tablePage.setSearchText('guid:c894bbcf-3195-0708-aebe-0574cf0cc1fe', '150');
+ expect(await tablePage.getChangesAlertTableTitle('Alerts (150)')).toEqual('Alerts (1)');
+ await tablePage.expandMetaAlert(0);
+ expect(await tablePage.getAllRowsCount()).toEqual(21);
+ await tablePage.expandMetaAlert(0);
+ await tablePage.clickClearSearch('150');
+ expect(await tablePage.getChangesAlertTableTitle('Alerts (1)')).toEqual('Alerts (150)');
// Delete a meta alert from the middle and check the data
- tablePage.expandMetaAlert(0);
- expect(tablePage.getTableCellValues(3, 1, 21)).toEqual(alertsInMetaAlerts);
- tablePage.removeAlert(5);
- treePage.clickYesForConfirmation();
- expect(tablePage.getCellValue(0, 2, '(20')).toContain('(19)', 'alert count should be decremented');
- expect(tablePage.getTableCellValues(3, 1, 20)).toEqual(alertsAfterDeletedInMetaAlerts);
+ await tablePage.expandMetaAlert(0);
+ let guidValues = await tablePage.getTableCellValues(3, 1, 21);
+ guidValues = guidValues.slice(1, 21).sort();
+ expect(guidValues).toEqual(alertsInMetaAlerts.sort());
+ await tablePage.removeAlert(5);
+ await treePage.clickYesForConfirmation();
+ expect(await tablePage.getCellValue(0, 2, '(20')).toContain('(19)', 'alert count should be decremented');
+ let guidValuesAfterDeleteOp = await tablePage.getTableCellValues(3, 1, 20);
+ guidValuesAfterDeleteOp = guidValuesAfterDeleteOp.slice(1, 20).sort();
+ expect(guidValuesAfterDeleteOp).toEqual(alertsAfterDeletedInMetaAlerts.sort());
//Remove the meta alert
- tablePage.removeAlert(0);
- treePage.clickYesForConfirmation();
+ await tablePage.removeAlert(0);
+ await treePage.clickYesForConfirmation();
});
});
diff --git a/metron-interface/metron-alerts/e2e/alerts-list/meta-alerts/meta-alert.po.ts b/metron-interface/metron-alerts/e2e/alerts-list/meta-alerts/meta-alert.po.ts
index 762deb8..7f8f13e 100644
--- a/metron-interface/metron-alerts/e2e/alerts-list/meta-alerts/meta-alert.po.ts
+++ b/metron-interface/metron-alerts/e2e/alerts-list/meta-alerts/meta-alert.po.ts
@@ -17,27 +17,36 @@
*/
import {browser, element, by} from 'protractor';
+import {waitForElementInVisibility, waitForElementVisibility} from '../../utils/e2e_util';
export class MetaAlertPage {
+ waitForDialog() {
+ return waitForElementVisibility(element(by.css('app-meta-alerts')))
+ .then(() => browser.sleep(2000));
+ }
+
getPageTitle() {
- return element(by.css('app-meta-alerts .form-title')).getText();
+ let elementFinder = element(by.css('app-meta-alerts .form-title'));
+ return waitForElementVisibility(elementFinder).then(() => elementFinder.getText())
}
getMetaAlertsTitle() {
- return element(by.css('app-meta-alerts .title')).getText();
+ let elementFinder = element(by.css('app-meta-alerts .title'));
+ return waitForElementVisibility(elementFinder).then(() => elementFinder.getText());
}
getAvailableMetaAlerts() {
- return element(by.css('app-meta-alerts .guid-name-container div')).getText();
+ return waitForElementVisibility(element(by.css('app-meta-alerts .guid-name-container div')))
+ .then(() => element(by.css('app-meta-alerts .guid-name-container div')).getText());
}
selectRadio() {
- return element.all(by.css('app-meta-alerts .checkmark')).click();
+ return element.all(by.css('app-meta-alerts .checkmark')).get(0).click();
}
addToMetaAlert() {
- element.all(by.css('app-meta-alerts')).get(0).element(by.buttonText('ADD')).click();
- browser.sleep(2000);
+ return element.all(by.css('app-meta-alerts')).get(0).element(by.buttonText('ADD')).click()
+ .then(() => waitForElementInVisibility(element(by.css('app-meta-alerts'))));
}
}
diff --git a/metron-interface/metron-alerts/e2e/alerts-list/save-search/save-search.e2e-spec.ts b/metron-interface/metron-alerts/e2e/alerts-list/save-search/save-search.e2e-spec.ts
index 350f11e..cab8455 100644
--- a/metron-interface/metron-alerts/e2e/alerts-list/save-search/save-search.e2e-spec.ts
+++ b/metron-interface/metron-alerts/e2e/alerts-list/save-search/save-search.e2e-spec.ts
@@ -21,19 +21,20 @@
import {LoginPage} from '../../login/login.po';
import {loadTestData, deleteTestData} from '../../utils/e2e_util';
-describe('metron-alerts Search', function() {
+describe('Test spec for search and save search', function() {
let page: MetronAlertsPage;
let loginPage: LoginPage;
- beforeAll(() => {
- loadTestData();
+ beforeAll(async function() : Promise<any> {
loginPage = new LoginPage();
- loginPage.login();
+
+ await loadTestData();
+ await loginPage.login();
});
- afterAll(() => {
- loginPage.logout();
- deleteTestData();
+ afterAll(async function() : Promise<any> {
+ await loginPage.logout();
+ await deleteTestData();
});
beforeEach(() => {
@@ -41,57 +42,57 @@
jasmine.addMatchers(customMatchers);
});
- it('should display all the default values for saved searches', () => {
- page.clearLocalStorage();
- page.navigateTo();
+ it('should display all the default values for saved searches', async function() : Promise<any> {
+ await page.clearLocalStorage();
+ await page.navigateTo();
- page.clickSavedSearch();
- expect(page.getSavedSearchTitle()).toEqualBcoz('Searches', 'for saved searches title');
- expect(page.getRecentSearchOptions()).toEqualBcoz([], 'for recent search options');
- expect(page.getSavedSearchOptions()).toEqualBcoz([], 'for saved search options');
- expect(page.getDefaultRecentSearchValue()).toEqualBcoz([ 'No Recent Searches' ], 'for recent search default value');
- expect(page.getDefaultSavedSearchValue()).toEqualBcoz([ 'No Saved Searches' ], 'for saved search default value');
- page.clickCloseSavedSearch();
+ await page.clickSavedSearch();
+ expect(await page.getSavedSearchTitle()).toEqualBcoz('Searches', 'for saved searches title');
+ expect(await page.getRecentSearchOptions()).toEqualBcoz([], 'for recent search options');
+ expect(await page.getSavedSearchOptions()).toEqualBcoz([], 'for saved search options');
+ expect(await page.getDefaultRecentSearchValue()).toEqualBcoz([ 'No Recent Searches' ], 'for recent search default value');
+ expect(await page.getDefaultSavedSearchValue()).toEqualBcoz([ 'No Saved Searches' ], 'for saved search default value');
+ await page.clickCloseSavedSearch();
});
- it('should have all save search controls and they save search should be working', () => {
- page.saveSearch('e2e-1');
- page.clickSavedSearch();
- expect(page.getSavedSearchOptions()).toEqualBcoz([ 'e2e-1' ], 'for saved search options e2e-1');
- page.clickCloseSavedSearch();
+ it('should have all save search controls and they save search should be working', async function() : Promise<any> {
+ await page.saveSearch('e2e-1');
+ await page.clickSavedSearch();
+ expect(await page.getSavedSearchOptions()).toEqualBcoz([ 'e2e-1' ], 'for saved search options e2e-1');
+ await page.clickCloseSavedSearch();
});
- it('should populate search items when selected on table', () => {
- page.clickTableText('US');
- expect(page.getSearchText()).toEqualBcoz('enrichments:geo:ip_dst_addr:country:US', 'for search text ip_dst_addr_country US');
- page.clickClearSearch();
- expect(page.getSearchText()).toEqualBcoz('*', 'for clear search');
+ it('should delete search items from search box', async function() : Promise<any> {
+ await page.clickClearSearch();
+ expect(await page.getSearchText()).toEqual('*');
+ expect(await page.getChangesAlertTableTitle('')).toEqual('Alerts (169)');
+
+ expect(await page.clickTableTextAndGetSearchText('FR', 'enrichments:geo:ip_dst_addr:country:FR')).toEqualBcoz('enrichments:geo:ip_dst_addr:country:FR', 'for search text ip_dst_addr_country FR');
+ expect(await page.clickRemoveSearchChipAndGetSearchText('*')).toEqualBcoz('*', 'for search chip remove');
});
- it('should delete search items from search box', () => {
- page.clickTableText('US');
- expect(page.getSearchText()).toEqualBcoz('enrichments:geo:ip_dst_addr:country:US', 'for search text ip_dst_addr_country US');
- page.clickRemoveSearchChip();
- expect(page.getSearchText()).toEqualBcoz('*', 'for search chip remove');
+ it('should delete first search items from search box having multiple search fields', async function() : Promise<any> {
+ await page.clickClearSearch();
+ expect(await page.getSearchText()).toEqual('*');
+ expect(await page.getChangesAlertTableTitle('')).toEqual('Alerts (169)');
+
+ expect(await page.clickTableTextAndGetSearchText('FR', 'enrichments:geo:ip_dst_addr:country:FR')).toEqual('enrichments:geo:ip_dst_addr:country:FR');
+ expect(await page.clickTableTextAndGetSearchText('alerts_ui_e2e', 'enrichments:geo:ip_dst_addr:country:FR AND source:type:alerts_ui_e2e')).toEqual('enrichments:geo:ip_dst_addr:country:FR AND source:type:alerts_ui_e2e');
+
+ expect(await page.clickRemoveSearchChipAndGetSearchText('source:type:alerts_ui_e2e')).toEqual('source:type:alerts_ui_e2e');
+ expect(await page.clickRemoveSearchChipAndGetSearchText('*')).toEqual('*');
});
- it('should delete first search items from search box having multiple search fields', () => {
- page.clickTableText('US');
- page.clickTableText('alerts_ui_e2e');
- expect(page.getSearchText()).toEqual('enrichments:geo:ip_dst_addr:country:US AND source:type:alerts_ui_e2e', 'for search text US and alerts_ui_e2e');
- page.clickRemoveSearchChip();
- expect(page.getSearchText()).toEqual('source:type:alerts_ui_e2e', 'for search text alerts_ui_e2e after US is removed');
- page.clickRemoveSearchChip();
- expect(page.getSearchText()).toEqualBcoz('*', 'for search chip remove for two search texts');
- });
-
- it('manually entering search queries to search box and pressing enter key should search', () => {
- page.setSearchText('enrichments:geo:ip_dst_addr:country:US');
- expect(page.getPaginationText()).toEqualBcoz('1 - 22 of 22',
+ it('manually entering search queries to search box and pressing enter key should search', async function() : Promise<any> {
+ await page.setSearchText('enrichments:geo:ip_dst_addr:country:US');
+ expect(await page.getChangesAlertTableTitle('Alerts (169)')).toEqual('Alerts (22)');
+ expect(await page.getPaginationText()).toEqualBcoz('1 - 22 of 22',
'for pagination text with search text enrichments:geo:ip_dst_addr:country:US');
- page.setSearchText('enrichments:geo:ip_dst_addr:country:RU');
- expect(page.getPaginationText()).toEqualBcoz('1 - 25 of 44',
+
+ await page.setSearchText('enrichments:geo:ip_dst_addr:country:RU');
+ expect(await page.getChangesAlertTableTitle('Alerts (169)')).toEqual('Alerts (44)');
+ expect(await page.getPaginationText()).toEqualBcoz('1 - 25 of 44',
'for pagination text with search text enrichments:geo:ip_dst_addr:country:RU as text');
});
diff --git a/metron-interface/metron-alerts/e2e/alerts-list/tree-view/tree-view.e2e-spec.ts b/metron-interface/metron-alerts/e2e/alerts-list/tree-view/tree-view.e2e-spec.ts
index 339b19f..3129674 100644
--- a/metron-interface/metron-alerts/e2e/alerts-list/tree-view/tree-view.e2e-spec.ts
+++ b/metron-interface/metron-alerts/e2e/alerts-list/tree-view/tree-view.e2e-spec.ts
@@ -19,46 +19,55 @@
import {customMatchers} from '../../matchers/custom-matchers';
import {LoginPage} from '../../login/login.po';
import {TreeViewPage} from './tree-view.po';
-import {loadTestData, deleteTestData} from '../../utils/e2e_util';
import {MetronAlertsPage} from '../alerts-list.po';
-describe('metron-alerts tree view', function () {
+import {loadTestData, deleteTestData} from '../../utils/e2e_util';
+
+describe('Test spec for tree view', function () {
let page: TreeViewPage;
let listPage: MetronAlertsPage;
let loginPage: LoginPage;
- beforeAll(() => {
- loadTestData();
+ beforeAll(async function() : Promise<any> {
loginPage = new LoginPage();
page = new TreeViewPage();
listPage = new MetronAlertsPage();
- loginPage.login();
- page.navigateToAlertsList();
- });
- afterAll(() => {
- loginPage.logout();
- deleteTestData();
- });
-
- beforeEach(() => {
+ await loadTestData();
+ await loginPage.login();
jasmine.addMatchers(customMatchers);
});
- it('should have all group by elements', () => {
+
+ afterAll(async function() : Promise<any> {
+ await loginPage.logout();
+ await deleteTestData();
+ });
+
+ beforeEach(() => {
+
+ });
+
+ it('should have all group by elements', async function() : Promise<any> {
let groupByItems = {
'source:type': '1',
'ip_dst_addr': '8',
'enrichm...:country': '3',
'ip_src_addr': '2'
};
- expect(page.getGroupByCount()).toEqualBcoz(Object.keys(groupByItems).length, '4 Group By Elements should be present');
- expect(page.getGroupByItemNames()).toEqualBcoz(Object.keys(groupByItems), 'Group By Elements names should be present');
- expect(page.getGroupByItemCounts()).toEqualBcoz(Object.keys(groupByItems).map(key => groupByItems[key]),
+
+ expect(await listPage.getChangesAlertTableTitle('Alerts (0)')).toEqualBcoz('Alerts (169)', 'for alerts title');
+
+ expect(await page.getGroupByCount()).toEqualBcoz(Object.keys(groupByItems).length, '4 Group By Elements should be present');
+ expect(await page.getGroupByItemNames()).toEqualBcoz(Object.keys(groupByItems), 'Group By Elements names should be present');
+ expect(await page.getGroupByItemCounts()).toEqualBcoz(Object.keys(groupByItems).map(key => groupByItems[key]),
'4 Group By Elements values should be present');
});
- it('drag and drop should change group order', () => {
+// HTML5 Drag and Drop with Selenium Webdriver issue effects this test:
+// https://github.com/SeleniumHQ/selenium-google-code-issue-archive/issues/3604
+
+ xit('drag and drop should change group order', async function() : Promise<any> {
let before = {
'firstDashRow': ['0', 'alerts_ui_e2e', 'ALERTS', '169'],
'firstSubGroup': '0 US (22)',
@@ -75,105 +84,110 @@
'thirdDashSubGroup': '0 alerts_ui_e2e (25)'
};
- page.selectGroup('source:type');
- page.selectGroup('enrichments:geo:ip_dst_addr:country');
- page.expandDashGroup('alerts_ui_e2e');
- expect(page.getDashGroupValues('alerts_ui_e2e')).toEqualBcoz(before.firstDashRow, 'First Dash Row should be correct');
- expect(page.getSubGroupValues('alerts_ui_e2e', 'US')).toEqualBcoz(before.firstSubGroup,
+ await page.selectGroup('source:type');
+ await page.selectGroup('enrichments:geo:ip_dst_addr:country');
+ expect(await page.getDashGroupValues('alerts_ui_e2e')).toEqualBcoz(before.firstDashRow, 'First Dash Row should be correct');
+
+ await page.expandDashGroup('alerts_ui_e2e');
+ expect(await page.getSubGroupValues('alerts_ui_e2e', 'US')).toEqualBcoz(before.firstSubGroup,
'Dash Group Values should be correct for US');
- expect(page.getSubGroupValues('alerts_ui_e2e', 'RU')).toEqualBcoz(before.secondSubGroup,
+ expect(await page.getSubGroupValues('alerts_ui_e2e', 'RU')).toEqualBcoz(before.secondSubGroup,
'Dash Group Values should be present for RU');
- expect(page.getSubGroupValues('alerts_ui_e2e', 'FR')).toEqualBcoz(before.thirdSubGroup,
+ expect(await page.getSubGroupValues('alerts_ui_e2e', 'FR')).toEqualBcoz(before.thirdSubGroup,
'Dash Group Values should be present for FR');
- page.dragGroup('source:type', 'ip_src_addr');
- //page.selectGroup('source:type');
- expect(page.getDashGroupValues('US')).toEqualBcoz(after.firstDashRow, 'First Dash Row after ' +
+ await page.simulateDragAndDrop('source:type', 'ip_src_addr');
+
+ expect(await page.getDashGroupValues('US')).toEqualBcoz(after.firstDashRow, 'First Dash Row after ' +
'reorder should be correct');
- expect(page.getDashGroupValues('RU')).toEqualBcoz(after.secondDashRow, 'Second Dash Row after ' +
+ expect(await page.getDashGroupValues('RU')).toEqualBcoz(after.secondDashRow, 'Second Dash Row after ' +
'reorder should be correct');
- expect(page.getDashGroupValues('FR')).toEqualBcoz(after.thirdDashRow, 'Third Dash Row after ' +
+ expect(await page.getDashGroupValues('FR')).toEqualBcoz(after.thirdDashRow, 'Third Dash Row after ' +
'reorder should be correct');
- page.expandDashGroup('US');
- expect(page.getSubGroupValues('US', 'alerts_ui_e2e')).toEqualBcoz(after.firstDashSubGroup,
+ await page.expandDashGroup('US');
+ expect(await page.getSubGroupValues('US', 'alerts_ui_e2e')).toEqualBcoz(after.firstDashSubGroup,
'First Dash Group Values should be present for alerts_ui_e2e');
- page.expandDashGroup('RU');
- expect(page.getSubGroupValues('RU', 'alerts_ui_e2e')).toEqualBcoz(after.secondDashSubGroup,
+ await page.expandDashGroup('RU');
+ expect(await page.getSubGroupValues('RU', 'alerts_ui_e2e')).toEqualBcoz(after.secondDashSubGroup,
'Second Dash Group Values should be present for alerts_ui_e2e');
- page.expandDashGroup('FR');
- expect(page.getSubGroupValues('FR', 'alerts_ui_e2e')).toEqualBcoz(after.thirdDashSubGroup,
+ await page.expandDashGroup('FR');
+ expect(await page.getSubGroupValues('FR', 'alerts_ui_e2e')).toEqualBcoz(after.thirdDashSubGroup,
'Third Dash Group Values should be present for alerts_ui_e2e');
- page.dragGroup('source:type', 'ip_dst_addr');
- page.unGroup();
+ await page.simulateDragAndDrop('source:type', 'ip_dst_addr');
+ await page.unGroup();
+
});
- it('should have group details for single group by', () => {
+ // Test cannot pass until issue with missing dash score is resolved: https://issues.apache.org/jira/browse/METRON-1631
+ xit('should have group details for single group by', async function() : Promise<any> {
let dashRowValues = ['0', 'alerts_ui_e2e', 'ALERTS', '169'];
- let row1_page1 = ['-', 'dcda4423-7...0962fafc47', '2017-09-13 17:59:32', 'alerts_ui_e2e',
- '192.168.138.158', 'US', '72.34.49.86', 'comarksecurity.com', 'NEW', '', ''];
- let row1_page2 = ['-', '07b29c29-9...ff19eaa888', '2017-09-13 17:59:37', 'alerts_ui_e2e',
- '192.168.138.158', 'FR', '62.75.195.236', '62.75.195.236', 'NEW', '', ''];
+ let row1_page1 = ['-','acf5a641-9...a316e14fbe', '2017-09-13 17:59:35', 'alerts_ui_e2e',
+ '192.168.66.1', '', '192.168.66.121', 'node1', 'NEW'];
+ let row1_page2 = ['-', '3097a3d9-f...1cfb870355', '2017-09-13 18:00:22', 'alerts_ui_e2e',
+ '192.168.66.1', '','192.168.66.121', 'node1', 'NEW'];
- page.selectGroup('source:type');
- expect(page.getActiveGroups()).toEqualBcoz(['source:type'], 'only source type group should be selected');
- expect(page.getDashGroupValues('alerts_ui_e2e')).toEqualBcoz(dashRowValues, 'Dash Group Values should be present');
+ await page.unGroup();
+ await page.selectGroup('source:type');
+ expect(await page.getActiveGroups()).toEqualBcoz(['source:type'], 'only source type group should be selected');
+ expect(await page.getDashGroupValues('alerts_ui_e2e')).toEqualBcoz(dashRowValues, 'Dash Group Values should be present');
- page.expandDashGroup('alerts_ui_e2e');
- expect(page.getDashGroupTableValuesForRow('alerts_ui_e2e', 0)).toEqualBcoz(row1_page1, 'Dash Group Values should be present');
+ await page.expandDashGroup('alerts_ui_e2e');
+ expect(await page.getTableValuesByRowId('alerts_ui_e2e', 0, 'acf5a641-9...a316e14fbe')).toEqualBcoz(row1_page1, 'Dash Group Values should be present');
- page.clickOnNextPage('alerts_ui_e2e');
- expect(page.getTableValuesByRowId('alerts_ui_e2e', 0, 'FR')).toEqualBcoz(row1_page2, 'Dash Group Values should be present');
+ await page.clickOnNextPage('alerts_ui_e2e');
+ expect(await page.getTableValuesByRowId('alerts_ui_e2e', 0, '3097a3d9-f...1cfb870355')).toEqualBcoz(row1_page2, 'Dash Group Values should be present');
- page.unGroup();
- expect(page.getActiveGroups()).toEqualBcoz([], 'no groups should be selected');
+ await page.unGroup();
+ expect(await page.getActiveGroups()).toEqualBcoz([], 'no groups should be selected');
});
- it('should have group details for multiple group by', () => {
+ it('should have group details for multiple group by', async function() : Promise<any> {
- let usGroupIds = ['9a969c64-b...001cb011a3','a651f7c3-1...a97d4966c9','afc36901-3...d931231ab2','d860ac35-1...f9e282d571','04a5c3d0-9...af17c06fbc'];
- let frGroupIds = ['07b29c29-9...ff19eaa888','7cd91565-1...de5be54a6e','ca5bde58-a...f3a88d2df4','5d6faf83-8...b88a407647','e2883424-f...79bb8b0606'];
+ let usGroupIds = ['a651f7c3-1...a97d4966c9', '5cfff1c7-6...ef3d766fc7', '7022e863-5...3c1fb629ed', '5404950f-9...86ce704b22', '8eb077ae-3...b77fed1ab4'];
+ let frGroupIds = ['07b29c29-9...ff19eaa888', 'c27f0bd2-3...697eaf8692', 'ba44eb73-6...6f9c15b261', '6a437817-e...dd0b37d280', '48fc3a55-4...3479974d34'];
- page.selectGroup('source:type');
- page.selectGroup('ip_dst_addr');
- page.selectGroup('enrichments:geo:ip_dst_addr:country');
- expect(page.getActiveGroups()).toEqualBcoz(['source:type', 'ip_dst_addr', 'enrichments:geo:ip_dst_addr:country'], '3 groups should be selected');
+ await page.unGroup();
+ await page.selectGroup('source:type');
+ await page.selectGroup('ip_dst_addr');
+ await page.selectGroup('enrichments:geo:ip_dst_addr:country');
+ expect(await page.getActiveGroups()).toEqualBcoz(['source:type', 'ip_dst_addr', 'enrichm...:country'], '3 groups should be selected');
- expect(page.getDashGroupValues('alerts_ui_e2e')).toEqualBcoz(['0', 'alerts_ui_e2e', 'ALERTS', '169'],
+ expect(await page.getDashGroupValues('alerts_ui_e2e')).toEqualBcoz(['0', 'alerts_ui_e2e', 'ALERTS', '169'],
'Top Level Group Values should be present for alerts_ui_e2e');
- page.expandDashGroup('alerts_ui_e2e');
- expect(page.getSubGroupValuesByPosition('alerts_ui_e2e', '204.152.254.221', 0)).toEqualBcoz('0 204.152.254.221 (13)',
+ await page.expandDashGroup('alerts_ui_e2e');
+ expect(await page.getSubGroupValuesByPosition('alerts_ui_e2e', '204.152.254.221', 0)).toEqualBcoz('0 204.152.254.221 (13)',
'Second Level Group Values should be present for 204.152.254.221');
- page.expandSubGroupByPosition('alerts_ui_e2e', '204.152.254.221', 0);
- expect(page.getSubGroupValuesByPosition('alerts_ui_e2e', 'US', 0)).toEqualBcoz('0 US (13)',
+ await page.expandSubGroupByPosition('alerts_ui_e2e', '204.152.254.221', 0);
+ expect(await page.getSubGroupValuesByPosition('alerts_ui_e2e', 'US', 0)).toEqualBcoz('0 US (13)',
'Third Level Group Values should be present for US');
- page.expandSubGroup('alerts_ui_e2e', 'US');
- expect(page.getSubGroupValuesByPosition('alerts_ui_e2e', 'US', 0)).toEqualBcoz('0 US (13)',
+ await page.expandSubGroup('alerts_ui_e2e', 'US');
+ expect(await page.getSubGroupValuesByPosition('alerts_ui_e2e', 'US', 0)).toEqualBcoz('0 US (13)',
'Third Level Group Values should not change when expanded for US');
- expect(page.getCellValuesFromTable('alerts_ui_e2e', 'id', '04a5c3d0-9...af17c06fbc')).toEqual(usGroupIds, 'rows should be present for US');
+ expect(await page.getCellValuesFromTable('alerts_ui_e2e', 'id', 'a651f7c3-1...a97d4966c9')).toEqual(usGroupIds, 'rows should be present for US');
- page.expandSubGroup('alerts_ui_e2e', '62.75.195.236');
- expect(page.getSubGroupValuesByPosition('alerts_ui_e2e', 'FR', 1)).toEqualBcoz('0 FR (23)',
+ await page.expandSubGroup('alerts_ui_e2e', '62.75.195.236');
+ expect(await page.getSubGroupValuesByPosition('alerts_ui_e2e', 'FR', 1)).toEqualBcoz('0 FR (23)',
'Third Level Group Values should be present for FR');
- page.expandSubGroupByPosition('alerts_ui_e2e', 'FR', 1);
- expect(page.getSubGroupValuesByPosition('alerts_ui_e2e', 'FR', 1)).toEqualBcoz('0 FR (23)',
+ await page.expandSubGroupByPosition('alerts_ui_e2e', 'FR', 1);
+ expect(await page.getSubGroupValuesByPosition('alerts_ui_e2e', 'FR', 1)).toEqualBcoz('0 FR (23)',
'Third Level Group Values should not change when expanded for FR');
- expect(page.getCellValuesFromTable('alerts_ui_e2e', 'id', 'e2883424-f...79bb8b0606')).toEqual(usGroupIds.concat(frGroupIds), 'rows should be present for FR');
-
- page.unGroup();
- expect(page.getActiveGroups()).toEqualBcoz([], 'no groups should be selected');
+ expect(await page.getCellValuesFromTable('alerts_ui_e2e', 'id', '07b29c29-9...ff19eaa888')).toEqual(usGroupIds.concat(frGroupIds), 'rows should be present for FR');
+
+ await page.unGroup();
+ expect(await page.getActiveGroups()).toEqualBcoz([], 'no groups should be selected');
});
- it('should have sort working for group details for multiple sub groups', () => {
+ it('should have sort working for group details for multiple sub groups', async function() : Promise<any> {
let usTSCol = ['2017-09-13 17:59:32', '2017-09-13 17:59:42', '2017-09-13 17:59:53', '2017-09-13 18:00:02', '2017-09-13 18:00:14'];
let ruTSCol = ['2017-09-13 17:59:33', '2017-09-13 17:59:48', '2017-09-13 17:59:51', '2017-09-13 17:59:54', '2017-09-13 17:59:57'];
@@ -183,50 +197,52 @@
let ruSortedTSCol = ['2017-09-14 06:29:40', '2017-09-14 06:29:40', '2017-09-14 06:29:40', '2017-09-14 06:29:40', '2017-09-13 18:02:13'];
let frSortedTSCol = ['2017-09-14 06:29:40', '2017-09-14 04:29:40', '2017-09-13 18:02:20', '2017-09-13 18:02:05', '2017-09-13 18:02:04'];
- page.selectGroup('source:type');
- page.selectGroup('enrichments:geo:ip_dst_addr:country');
+ await page.unGroup();
+ await page.selectGroup('source:type');
+ await page.selectGroup('enrichments:geo:ip_dst_addr:country');
- page.expandDashGroup('alerts_ui_e2e');
- page.expandSubGroup('alerts_ui_e2e', 'US');
- page.expandSubGroup('alerts_ui_e2e', 'RU');
- page.expandSubGroup('alerts_ui_e2e', 'FR');
+ await page.expandDashGroup('alerts_ui_e2e');
+ await page.expandSubGroup('alerts_ui_e2e', 'US');
+ await page.expandSubGroup('alerts_ui_e2e', 'RU');
+ await page.expandSubGroup('alerts_ui_e2e', 'FR');
let unsortedTS = [...usTSCol, ...ruTSCol, ...frTSCol];
let sortedTS = [...usSortedTSCol, ...ruSortedTSCol, ...frSortedTSCol];
- page.sortSubGroup('alerts_ui_e2e', 'timestamp');
+ await page.sortSubGroup('alerts_ui_e2e', 'timestamp');
- expect(page.getCellValuesFromTable('alerts_ui_e2e', 'timestamp', '2017-09-13 18:00:37')).toEqual(unsortedTS,
+ expect(await page.getCellValuesFromTable('alerts_ui_e2e', 'timestamp', '2017-09-13 18:00:37')).toEqual(unsortedTS,
'timestamp should be sorted asc');
- page.sortSubGroup('alerts_ui_e2e', 'timestamp');
+ await page.sortSubGroup('alerts_ui_e2e', 'timestamp');
- expect(page.getCellValuesFromTable('alerts_ui_e2e', 'timestamp', '2017-09-13 18:02:04')).toEqual(sortedTS,
+ expect(await page.getCellValuesFromTable('alerts_ui_e2e', 'timestamp', '2017-09-13 18:02:04')).toEqual(sortedTS,
'timestamp should be sorted dsc');
- page.unGroup();
+ await page.unGroup();
expect(page.getActiveGroups()).toEqualBcoz([], 'no groups should be selected');
});
- it('should have search working for group details for multiple sub groups', () => {
+ it('should have search working for group details for multiple sub groups', async function() : Promise<any> {
- page.selectGroup('source:type');
- page.selectGroup('enrichments:geo:ip_dst_addr:country');
+ await page.unGroup();
+ await listPage.setSearchText('enrichments:geo:ip_dst_addr:country:FR');
- page.expandDashGroup('alerts_ui_e2e');
- expect(page.getNumOfSubGroups('alerts_ui_e2e')).toEqual(3, 'three sub groups should be present');
+ expect(await listPage.getChangesAlertTableTitle('Alerts (169)')).toEqual('Alerts (25)');
- listPage.setSearchText('enrichments:geo:ip_dst_addr:country:FR');
+ await page.selectGroup('source:type');
+ await page.selectGroup('enrichments:geo:ip_dst_addr:country');
- expect(page.getNumOfSubGroups('alerts_ui_e2e')).toEqual(1, 'one sub groups should be present');
- page.expandSubGroup('alerts_ui_e2e', 'FR');
+ await page.expandDashGroup('alerts_ui_e2e');
+ expect(await page.getNumOfSubGroups('alerts_ui_e2e')).toEqual(1, 'three sub groups should be present');
+
+
+ await page.expandSubGroup('alerts_ui_e2e', 'FR');
let expected = ['FR', 'FR', 'FR', 'FR', 'FR'];
- expect(page.getCellValuesFromTable('alerts_ui_e2e', 'enrichments:geo:ip_dst_addr:country', 'FR')).toEqual(expected,
+ expect(await page.getCellValuesFromTable('alerts_ui_e2e', 'enrichments:geo:ip_dst_addr:country', 'FR')).toEqual(expected,
'id should be sorted');
-
- page.unGroup();
- expect(page.getActiveGroups()).toEqualBcoz([], 'no groups should be selected');
+ await page.unGroup();
});
});
diff --git a/metron-interface/metron-alerts/e2e/alerts-list/tree-view/tree-view.po.ts b/metron-interface/metron-alerts/e2e/alerts-list/tree-view/tree-view.po.ts
index 368f709..047578a 100644
--- a/metron-interface/metron-alerts/e2e/alerts-list/tree-view/tree-view.po.ts
+++ b/metron-interface/metron-alerts/e2e/alerts-list/tree-view/tree-view.po.ts
@@ -16,42 +16,47 @@
* limitations under the License.
*/
-import {browser, element, by} from 'protractor';
+import { browser, element, by } from 'protractor';
import {
waitForElementPresence, waitForTextChange, waitForElementVisibility,
- waitForElementInVisibility
+ waitForElementInVisibility, waitForCssClass, waitForStalenessOf,
+ waitForElementCountGreaterThan, reduce_for_get_all, scrollIntoView
} from '../../utils/e2e_util';
export class TreeViewPage {
navigateToAlertsList() {
- browser.waitForAngularEnabled(false);
return browser.get('/alerts-list');
}
clickOnRow(id: string) {
let idElement = element(by.css('a[title="' + id +'"]'));
- waitForElementPresence(idElement)
+ let td = idElement.element(by.xpath('../..')).all(by.css('td')).get(9);
+ let detailsPane = element(by.css('.metron-slider-pane-details'));
+ return waitForElementPresence(idElement)
.then(() => browser.actions().mouseMove(idElement).perform())
- .then(() => idElement.element(by.xpath('../..')).all(by.css('td')).get(9).click());
- browser.sleep(2000);
+ .then(() => browser.actions().mouseMove(td).perform())
+ .then(() => browser.actions().click().perform())
+ .then(() => waitForElementVisibility(detailsPane))
+ .then(() => browser.sleep(2000));
}
getActiveGroups() {
- return element.all(by.css('app-group-by .group-by-items.active')).getAttribute('data-name');
+ return waitForElementCountGreaterThan('app-group-by .group-by-items .name', 4)
+ .then(() => element.all(by.css('app-group-by .group-by-items.active .name')).reduce(reduce_for_get_all(), []));
}
getGroupByCount() {
- return waitForElementPresence(element.all(by.css('app-group-by .group-by-items'))).then(() => {
+ return waitForElementPresence(element(by.css('app-group-by .group-by-items'))).then(() => {
return element.all(by.css('app-group-by .group-by-items')).count();
});
}
getGroupByItemNames() {
- return element.all(by.css('app-group-by .group-by-items .name')).getText();
+ return element.all(by.css('app-group-by .group-by-items .name')).reduce(reduce_for_get_all(), []);
}
getGroupByItemCounts() {
- return element.all(by.css('app-group-by .group-by-items .count')).getText();
+ return element.all(by.css('app-group-by .group-by-items .count')).reduce(reduce_for_get_all(), []);
}
getSubGroupValues(name: string, rowName: string) {
@@ -63,31 +68,79 @@
}
selectGroup(name: string) {
- return element(by.css('app-group-by div[data-name="' + name + '"]')).click();
+ return element(by.css('app-group-by div[data-name="' + name + '"]')).click()
+ .then(() => waitForCssClass(element(by.css('app-group-by div[data-name="' + name + '"]')), 'active'))
+ .then(() => browser.waitForAngular());
}
- dragGroup(from: string, to: string) {
- browser.actions().dragAndDrop(
- element(by.css('app-group-by div[data-name="' + from + '"]')),
- element(by.css('app-group-by div[data-name="' + to + '"]'))
- ).perform();
+ async simulateDragAndDrop(target: string, destination: string) {
+ target = `app-group-by div[data-name=\"${target}\"]`;
+ destination = `app-group-by div[data-name=\"${destination}\"]`;
+ return await browser.executeScript((target, destination) => {
+ let getEventOptions = (el, relatedElement) => {
+ //coordinates from destination element
+ const coords = el.getBoundingClientRect();
+ const x = coords.x || coords.left;
+ const y = coords.y || coords.top;
+ return {
+ x: x,
+ y: y,
+ clientX: x,
+ clientY: y,
+ screenX: x,
+ screenY: y,
+ //target reference
+ relatedTarget: relatedElement
+ };
+ };
+
+ let raise = (el, type, options?) => {
+ const o = options || { which: 1 };
+ const e = document.createEvent('Event');
+ e.initEvent(type, true, true);
+ Object.keys(o).forEach(apply);
+ el.dispatchEvent(e);
+ function apply(key) {
+ e[key] = o[key];
+ }
+ };
+
+
+ let targetEl = document.querySelector(target);
+ let destinationEl = document.querySelector(destination);
+ let options = getEventOptions(destinationEl, targetEl);
+
+ //start drag
+ raise(targetEl, 'mousedown');
+ raise(targetEl, 'mousemove');
+ //set event on location
+ raise(destinationEl, 'mousemove', options);
+ //drop
+ raise(destinationEl, 'mouseup', options);
+
+ }, target, destination);
}
- getDashGroupValues(name: string) {
- return waitForElementPresence(element(by.css('[data-name="' + name + '"] .card-header span'))).then(() => {
- return element.all(by.css('[data-name="' + name + '"] .card-header span')).getText();
- });
+ async getDashGroupValues(name: string) {
+ let dashScore = await element(by.css('[data-name="' + name + '"] .dash-score')).getText();
+ let groupName = await element(by.css('[data-name="' + name + '"] .text-light.severity-padding .title')).getText();
+ let title = await element(by.css('[data-name="' + name + '"] .text-light.two-line .text-dark')).getText();
+ let count = await element(by.css('[data-name="' + name + '"] .text-light.two-line .title')).getText();
+
+ return Promise.all([dashScore, groupName, title, count]);
}
expandDashGroup(name: string) {
let cardElement = element(by.css('.card[data-name="' + name +'"]'));
- let downArrowElement = element(by.css('.card[data-name="' + name + '"] .mrow.top-group'));
+ let cardHeader = element(by.css('.card[data-name="' + name + '"] .card-header'));
+ let cardBody = element(by.css('.card[data-name="' + name + '"] .collapse'));
- return waitForElementVisibility(cardElement)
- .then(() => browser.actions().mouseMove(cardElement).perform())
- .then(() => waitForElementVisibility(downArrowElement))
- .then(() => downArrowElement.click())
- .then(() => browser.sleep(2000));
+ return waitForElementPresence(cardBody)
+ .then(() => waitForElementVisibility(cardHeader))
+ .then(() => browser.actions().mouseMove(element(by.css('.card[data-name="' + name + '"] .card-header .down-arrow'))).perform())
+ .then(() => cardHeader.click())
+ .then(() => waitForCssClass(cardBody, 'show'))
+ .then(() => waitForElementVisibility(element(by.css('.card[data-name="' + name + '"] .collapse table tbody tr:nth-child(1)'))));
}
expandSubGroup(groupName: string, rowName: string) {
@@ -97,21 +150,14 @@
expandSubGroupByPosition(groupName: string, rowName: string, position: number) {
let subGroupElement = element.all(by.css('[data-name="' + groupName + '"] tr[data-name="' + rowName + '"]')).get(position);
return waitForElementVisibility(subGroupElement)
- .then(() => browser.actions().mouseMove(subGroupElement).perform())
- .then(() => subGroupElement.click());
+ .then(() => scrollIntoView(subGroupElement.element(by.css('.fa-caret-right')), true))
+ .then(() => subGroupElement.click())
+ .then(() => waitForElementVisibility(subGroupElement.element(by.css('.fa-caret-down'))));
}
- getDashGroupTableValuesForRow(name: string, rowId: number) {
- this.scrollToDashRow(name);
- return waitForElementPresence(element(by.css('[data-name="' + name + '"] table tbody tr'))).then(() => {
- return element.all(by.css('[data-name="' + name + '"] table tbody tr')).get(rowId).all(by.css('td')).getText();
- });
- }
-
- getTableValuesByRowId(name: string, rowId: number, waitForAnchor: string) {
- return waitForElementPresence(element(by. cssContainingText('[data-name="' + name + '"] a', waitForAnchor))).then(() => {
- return element.all(by.css('[data-name="' + name + '"] table tbody tr')).get(rowId).all(by.css('td')).getText();
- });
+ async getTableValuesByRowId(name: string, rowId: number, waitForAnchor: string) {
+ await waitForElementPresence(element(by. cssContainingText('[data-name="' + name + '"] a', waitForAnchor)));
+ return element.all(by.css('[data-name="' + name + '"] table tbody tr')).get(rowId).all(by.css('td a')).reduce(reduce_for_get_all(), []);
}
getTableValuesForRow(name: string, rowName: string, waitForAnchor: string) {
@@ -122,9 +168,7 @@
scrollToDashRow(name: string) {
let scrollToEle = element(by.css('[data-name="' + name + '"] .card-header'));
- waitForElementPresence(scrollToEle).then(() => {
- return browser.actions().mouseMove(scrollToEle).perform();
- });
+ return scrollIntoView(scrollToEle, true);
}
clickOnNextPage(name: string) {
@@ -132,12 +176,12 @@
}
unGroup() {
- return element(by.css('app-group-by .ungroup-button')).click();
+ return element(by.css('app-group-by .ungroup-button')).click()
+ .then(() => waitForStalenessOf(element(by.css('app-tree-view'))));
}
getIdOfAllExpandedRows() {
return element.all(by.css('[data-name="' + name + '"] table tbody tr')).then(row => {
- browser.pause();
});
}
@@ -146,26 +190,23 @@
}
getCellValuesFromTable(groupName: string, cellName: string, waitForAnchor: string) {
- return waitForElementPresence(element(by.cssContainingText('[data-name="' + cellName + '"] a', waitForAnchor))).then(() => {
- return element.all(by.css('[data-name="' + groupName + '"] table tbody [data-name="' + cellName + '"]')).map(element => {
- browser.actions().mouseMove(element).perform();
- return (element.getText());
- });
- });
+ let waitForEle = element.all(by.cssContainingText(`[data-name="${cellName}"] a`, waitForAnchor)).get(0);
+ return waitForElementPresence(waitForEle)
+ .then(() => scrollIntoView(waitForEle, true))
+ .then(() => element.all(by.css(`[data-name="${groupName}"] [data-name="${cellName}"]`)).reduce(reduce_for_get_all(), []))
}
sortSubGroup(groupName: string, colName: string) {
- return element.all(by.css('[data-name="' + groupName + '"] metron-config-sorter[title="' + colName + '"]')).click();
+ return element(by.css(`[data-name="${groupName}"] metron-config-sorter[title="${colName}"]`)).click();
}
toggleAlertInTree(index: number) {
let selector = by.css('app-tree-view tbody tr');
let checkbox = element.all(selector).get(index).element(by.css('label'));
- waitForElementPresence(checkbox).then(() => {
- browser.actions().mouseMove(checkbox).perform().then(() => {
- checkbox.click();
- });
- });
+
+ return waitForElementPresence(checkbox)
+ .then(() => browser.actions().mouseMove(checkbox).perform())
+ .then(() => checkbox.click());
}
getAlertStatusForTreeView(rowIndex: number, previousText) {
@@ -195,7 +236,7 @@
clickNoForConfirmation() {
let maskElement = element(by.className('modal-backdrop'));
let closeButton = element(by.css('.metron-dialog')).element(by.buttonText('Cancel'));
- waitForElementVisibility(maskElement)
+ return waitForElementVisibility(maskElement)
.then(() => closeButton.click())
.then(() => waitForElementInVisibility(maskElement));
}
@@ -203,7 +244,7 @@
clickYesForConfirmation() {
let okButton = element(by.css('.metron-dialog')).element(by.buttonText('OK'));
let maskElement = element(by.className('modal-backdrop'));
- waitForElementVisibility(maskElement)
+ return waitForElementVisibility(maskElement)
.then(() => okButton.click())
.then(() => waitForElementInVisibility(maskElement));
}
@@ -211,4 +252,9 @@
waitForElementToDisappear(groupName: string) {
return waitForElementInVisibility(element.all(by.css('[data-name="' + groupName + '"]')));
}
+
+ waitForTextChangeAndExpand(groupName: string, subGroupName: string, previousValue: string) {
+ return waitForTextChange(element(by.css(`[data-name="${subGroupName}"] .group-value`)), previousValue)
+ .then(() => this.expandSubGroup(groupName, subGroupName));
+ }
}
diff --git a/metron-interface/metron-alerts/e2e/login/login.e2e-spec.ts b/metron-interface/metron-alerts/e2e/login/login.e2e-spec.ts
index dc53889..337f286 100644
--- a/metron-interface/metron-alerts/e2e/login/login.e2e-spec.ts
+++ b/metron-interface/metron-alerts/e2e/login/login.e2e-spec.ts
@@ -16,29 +16,35 @@
* limitations under the License.
*/
import { LoginPage } from './login.po';
+import {deleteTestData, loadTestData} from '../utils/e2e_util';
-describe('login to application', function() {
+describe('Test spec for login page', function() {
let page: LoginPage;
- beforeEach(() => {
- page = new LoginPage();
+ beforeAll(async function() : Promise<any> {
+ page = new LoginPage();
+ await loadTestData();
});
- it('should display error message for invalid credentials', () => {
- page.navigateToLogin();
- page.setUserNameAndPassword('admin', 'admin');
- page.submitLoginForm();
- expect(page.getErrorMessage()).toEqual('Login failed for admin');
+ afterAll(async function() : Promise<any> {
+ await deleteTestData();
});
- it('should login for valid credentials', () => {
- page.navigateToLogin();
- page.setUserNameAndPassword('admin', 'password');
- page.submitLoginForm();
+ it('should display error message for invalid credentials', async function() : Promise<any> {
+ await page.navigateToLogin();
+ await page.setUserNameAndPassword('admin', 'admin');
+ await page.submitLoginForm();
+ expect(await page.getErrorMessage()).toEqual('Login failed for admin');
});
- it('should logout', () => {
- page.logout();
- expect(page.getLocation()).toEqual('http://localhost:4200/login');
+ it('should login for valid credentials', async function() : Promise<any> {
+ await page.navigateToLogin();
+ await page.setUserNameAndPassword('admin', 'password');
+ await page.submitLoginForm();
+ });
+
+ it('should logout', async function() : Promise<any> {
+ await page.logout();
+ expect(await page.getLocation()).toEqual('http://localhost:4200/login');
});
});
diff --git a/metron-interface/metron-alerts/e2e/login/login.po.ts b/metron-interface/metron-alerts/e2e/login/login.po.ts
index 8d37800..3e42395 100644
--- a/metron-interface/metron-alerts/e2e/login/login.po.ts
+++ b/metron-interface/metron-alerts/e2e/login/login.po.ts
@@ -24,43 +24,47 @@
}
login() {
- this.navigateToLogin();
- this.setUserNameAndPassword('admin', 'password');
- this.submitLoginForm();
- browser.waitForAngularEnabled(false);
- browser.wait(function() {return element(by.css('.logout')).isPresent(); });
+ return this.navigateToLogin()
+ .then(() => this.setUserNameAndPassword('admin', 'password'))
+ .then(() => this.submitLoginForm())
+ .then(() => browser.waitForAngularEnabled(false))
+ .then(() => waitForElementVisibility(element(by.css('.logout-link'))))
+ .then(() => browser.executeScript("document.body.className += ' notransition';"));
}
logout() {
- browser.waitForAngularEnabled(false);
- element.all(by.css('.alert .close')).click();
- element.all(by.css('.logout-link')).click();
- waitForURL('http://localhost:4200/login');
+ return browser.waitForAngularEnabled(false)
+ .then(() => waitForElementVisibility(element(by.css('.logout-link'))))
+ .then(() => element(by.css('.logout-link')).click())
+ .then(() => waitForURL('http://localhost:4200/login'));
}
setUserNameAndPassword(userName: string, password: string) {
- element.all(by.css('input.form-control')).get(0).sendKeys(userName);
- element.all(by.css('input.form-control')).get(1).sendKeys(password);
+ return waitForElementVisibility(element(by.css('[name=user]')))
+ .then(() => waitForElementVisibility(element(by.css('[name=password]'))))
+ .then(() => element(by.css('[name=user]')).clear())
+ .then(() => element(by.css('[name=user]')).sendKeys(userName))
+ .then(() => element(by.css('[name=password]')).clear())
+ .then(() => element(by.css('[name=password]')).sendKeys(password));
}
submitLoginForm() {
- return element.all(by.buttonText('LOG IN')).click();
+ return element(by.buttonText('LOG IN')).click();
}
getErrorMessage() {
- browser.waitForAngularEnabled(false);
let errElement = element(by.css('.login-failed-msg'));
- return waitForElementVisibility(errElement).then(() => {
- browser.sleep(1000);
- return errElement.getText().then((message) => {
- return message.replace(/\n/, '').replace(/LOG\ IN$/, '');
+ return browser.waitForAngularEnabled(false)
+ .then(() => waitForElementVisibility(errElement))
+ .then(() => {
+ browser.sleep(1000);
+ return errElement.getText().then((message) => {
+ return message.replace(/\n/, '').replace(/LOG\ IN$/, '');
});
});
}
getLocation() {
- return browser.getCurrentUrl().then(url => {
- return url;
- });
+ return browser.getCurrentUrl();
}
}
diff --git a/metron-interface/metron-alerts/e2e/utils/clean_metron_update_table.ts b/metron-interface/metron-alerts/e2e/utils/clean_metron_update_table.ts
new file mode 100644
index 0000000..c6e99df
--- /dev/null
+++ b/metron-interface/metron-alerts/e2e/utils/clean_metron_update_table.ts
@@ -0,0 +1,52 @@
+declare var Promise: any;
+var chalk = require('chalk');
+var Client = require('ssh2').Client;
+var errorMsg = '';
+
+export function cleanMetronUpdateTable() {
+ return new Promise(
+ function (resolve, reject) {
+ resolve();
+ // cleanupTable(resolve, reject);
+ }
+ );
+}
+
+function cleanupTable(resolve, reject) {
+ var conn = new Client();
+ conn.on('ready', function() {
+ console.log(chalk.bold.green('Connected to node1 as root'));
+ conn.shell(function(err, stream) {
+ if (err) throw err;
+ stream.on('close', function() {
+ if (errorMsg.length > 0) {
+ console.log(chalk.bold.red('Error is:') + errorMsg);
+ console.log(chalk.red.bgBlack.bold('Unable to truncate metron_update table in HBase. Most likely reason is HBase is down !!!'));
+ reject();
+ } else {
+ console.log(chalk.bold.green('Truncated metron_update table in HBase'));
+ resolve();
+ }
+ conn.end();
+ }).on('data', function(data) {
+ console.log('STDOUT: ' + data);
+ if (data.indexOf('ERROR') !== -1) {
+ errorMsg = data;
+ }
+ }).stderr.on('data', function(data) {
+ console.log('STDERR: ' + data);
+ });
+ var comands = [
+ 'echo \'truncate "metron_update"\' | /usr/hdp/current/hbase-master/bin/hbase shell',
+ 'exit',
+ ''
+ ];
+ stream.end(comands.join('\r\n'));
+ });
+ }).connect({
+ host: 'node1',
+ port: 22,
+ username: 'root',
+ password: 'vagrant'
+ });
+}
diff --git a/metron-interface/metron-alerts/e2e/utils/e2e_util.ts b/metron-interface/metron-alerts/e2e/utils/e2e_util.ts
index 8ae1de1..9f9180c 100644
--- a/metron-interface/metron-alerts/e2e/utils/e2e_util.ts
+++ b/metron-interface/metron-alerts/e2e/utils/e2e_util.ts
@@ -1,7 +1,18 @@
-import { browser, protractor } from 'protractor';
+import { browser, protractor, by, element, ElementFinder } from 'protractor';
import request = require('request');
import fs = require('fs');
+export class UtilFun {
+ public static async waitForElementPresence(element: ElementFinder): Promise<void> {
+ let EC = protractor.ExpectedConditions;
+ await browser.wait(
+ EC.visibilityOf(element),
+ 10000,
+ `${element.locator()} was expected to be visible`
+ );
+ }
+}
+
export function changeURL(url: string) {
return browser.get(url).then(() => {
return browser.getCurrentUrl().then((newURL) => {
@@ -15,76 +26,216 @@
return browser.wait(EC.urlIs(url));
}
-export function waitForText(element, text) {
+export function waitForText(selector, text) {
let EC = protractor.ExpectedConditions;
- return browser.wait(EC.textToBePresentInElementValue(element, text));
+ return browser.wait(EC.textToBePresentInElement(element(by.css(selector)), text)).catch((error) => console.log(`waitForText:`, error));;
}
export function waitForTextChange(element, previousText) {
let EC = protractor.ExpectedConditions;
- return browser.wait(EC.not(EC.textToBePresentInElement(element, previousText)));
+ if (previousText.trim().length === 0) {
+ return waitForNonEmptyText(element);
+ }
+ return browser.wait(EC.not(EC.textToBePresentInElement(element, previousText))).catch((error) => console.log(`${element.locator()} waitForTextChange:`, error));
}
export function waitForElementInVisibility (_element ) {
let EC = protractor.ExpectedConditions;
- return browser.wait(EC.invisibilityOf(_element));
+ return browser.wait(EC.invisibilityOf(_element)).catch((error) => console.log(`${_element.locator()} waitForElementInVisibility:`, error));
}
export function waitForElementPresence (_element ) {
let EC = protractor.ExpectedConditions;
- return browser.wait(EC.presenceOf(_element));
+ return browser.wait(EC.presenceOf(_element)).catch((error) => console.log(`${_element.locator()} waitForElementPresence:`, error));
}
export function waitForElementVisibility (_element ) {
let EC = protractor.ExpectedConditions;
- return browser.wait(EC.visibilityOf(_element));
+ return browser.wait(EC.visibilityOf(_element)).catch((error) => console.log(`${_element.locator()} waitForElementVisibility:`, error));
+}
+
+export function waitForElementPresenceAndvisbility(selector) {
+ let EC = protractor.ExpectedConditions;
+ return browser.wait(EC.visibilityOf(element(by.css(selector)))).catch((error) => console.log(`waitForElementPresenceAndvisbility: `, error));
}
export function waitForStalenessOf (_element ) {
let EC = protractor.ExpectedConditions;
- return browser.wait(EC.stalenessOf(_element));
+ return browser.wait(EC.stalenessOf(_element)).catch((error) => console.log(`${_element.locator()} waitForStalenessOf: `, error));
+}
+
+export function waitForCssClass(elementFinder, desiredClass) {
+ function waitForCssClass$(elementFinder, desiredClass)
+ {
+ return function () {
+ return elementFinder.getAttribute('class').then(function (classValue) {
+ return classValue && classValue.indexOf(desiredClass) >= 0;
+ });
+ }
+ }
+ return browser.wait(waitForCssClass$(elementFinder, desiredClass)).catch((error) => console.log(`waitForCssClass:`, error));
+}
+
+export function waitForCssClassNotToBePresent(elementFinder, desiredClass) {
+ function waitForCssClassNotToBePresent$(elementFinder, desiredClass)
+ {
+ return function () {
+ return elementFinder.getAttribute('class').then(function (classValue) {
+ return classValue && classValue.indexOf(desiredClass) === -1;
+ }).catch((error) => console.log(`waitForCssClassNotToBePresent:`, error));;
+ }
+ }
+ return browser.wait(waitForCssClassNotToBePresent$(elementFinder, desiredClass)).catch((error) => console.log(`waitForCssClassNotToBePresent:`, error));
+}
+
+export function catchNoSuchElementError() {
+ return (err) => {
+ if (err.name === 'NoSuchElementError' || err.name === 'Error') {
+ return null;
+ }
+ throw err;
+ };
+}
+
+export function waitForNonEmptyTextAndGetText(elementFinder) {
+ function waitForNonEmptyText$(elementFinder)
+ {
+ return function () {
+ return elementFinder.getText().then(function (text) {
+ return text.trim().length > 0;
+ }).catch(catchNoSuchElementError());
+ }
+ }
+ return browser.wait(waitForNonEmptyText$(elementFinder))
+ .then(() => elementFinder.getText())
+ .catch( catchNoSuchElementError());
+}
+
+export function waitForNonEmptyText(elementFinder) {
+ function waitForNonEmptyText$(elementFinder)
+ {
+ return function () {
+ return elementFinder.getText().then(function (text) {
+ return text.trim().length > 0;
+ }).catch(catchNoSuchElementError());
+ }
+ }
+ return browser.wait(waitForNonEmptyText$(elementFinder)).catch(catchNoSuchElementError());
+}
+
+export function waitForElementCountGreaterThan(className, expectedCount) {
+ function waitForElementCountGreaterThan$()
+ {
+ return function () {
+ return element.all(by.css(className)).count().then(function (count) {
+ return count >= expectedCount;
+ }).catch((error) => console.log(`waitForElementCountGreaterThan:`, error));;
+ }
+ }
+
+ return browser.wait(waitForElementCountGreaterThan$()).catch((error) => console.log(`waitForElementCountGreaterThan: `, error));
+}
+
+export function scrollIntoView(element, eleToTopBottom){
+ return browser.executeScript(function(element, eleToTopBottom) {
+ element.scrollIntoView(eleToTopBottom);
+ }, element.getWebElement(), eleToTopBottom)
+ .catch((error) => console.log());
+}
+
+function promiseHandlerWithResponse(resolve, reject) {
+ return (response) => {
+ if (response && (response.statusCode === 200 || response.statusCode === 404)) {
+ resolve();
+ } else {
+ console.log(response.statusCode);
+ reject();
+ }
+ };
+}
+
+function promiseHandlerWithResponseAndBody(resolve, reject) {
+ return (error, response, body) => {
+ if (response && (response.statusCode === 200 || response.statusCode === 404)) {
+ resolve();
+ } else {
+ reject();
+ }
+ };
}
export function loadTestData() {
- deleteTestData();
+ let deleteIndex = function () {
+ return new Promise((resolve, reject) => {
+ request.delete('http://node1:9200/alerts_ui_e2e_index*')
+ .on('response', promiseHandlerWithResponse(resolve, reject));
+ });
+ };
- let template = fs.readFileSync('e2e/mock-data/alerts_ui_e2e_index.template', 'utf8');
- request({
- url: 'http://node1:9200/_template/alerts_ui_e2e_index',
- method: 'POST',
- body: template
- }, function(error, response, body) {
- // add logging if desired
- });
+ let createTemplate = function () {
+ return new Promise((resolve, reject) => {
+ let template = fs.readFileSync('e2e/mock-data/alerts_ui_e2e_index.template', 'utf8');
+ request({
+ url: 'http://node1:9200/_template/alerts_ui_e2e_index',
+ method: 'POST',
+ body: template
+ },promiseHandlerWithResponseAndBody(resolve, reject));
+ });
+ };
- let data = fs.readFileSync('e2e/mock-data/alerts_ui_e2e_index.data', 'utf8');
- request({
- url: 'http://node1:9200/alerts_ui_e2e_index/alerts_ui_e2e_doc/_bulk',
- method: 'POST',
- body: data
- }, function(error, response, body) {
- // add logging if desired
+ let loadData = function () {
+ return new Promise((resolve, reject) => {
+ let data = fs.readFileSync('e2e/mock-data/alerts_ui_e2e_index.data', 'utf8');
+ request({
+ url: 'http://node1:9200/alerts_ui_e2e_index/alerts_ui_e2e_doc/_bulk',
+ method: 'POST',
+ body: data
+ }, promiseHandlerWithResponseAndBody(resolve, reject));
+ })
+ };
+
+ return deleteIndex().then(() => createTemplate()).then(() => loadData(), reason => {
+ console.error( 'Load test data failed ', reason );
});
}
+export function reduce_for_get_all() {
+ return (acc, elem) => {
+ return elem.getText().then(function(text) {
+ acc.push(text);
+ return acc;
+ }).catch(e => console.log(e));
+ };
+}
+
export function deleteTestData() {
request.delete('http://node1:9200/alerts_ui_e2e_index*');
}
export function createMetaAlertsIndex() {
- deleteMetaAlertsIndex();
+ let deleteIndex = function () {
+ return new Promise((resolve, reject) => {
+ request.delete('http://node1:9200/metaalert_index*')
+ .on('response', promiseHandlerWithResponse(resolve, reject));
+ });
+ };
- let template = fs.readFileSync('./../../metron-deployment/packaging/ambari/metron-mpack/src/main/resources/common-services/METRON/CURRENT/package/files/metaalert_index.template', 'utf8');
- request({
- url: 'http://node1:9200/_template/metaalert_index',
- method: 'POST',
- body: template
- }, function(error, response, body) {
- // add logging if desired
+ let createIndex = function () {
+ return new Promise((resolve, reject) => {
+ let template = fs.readFileSync('./../../metron-deployment/packaging/ambari/metron-mpack/src/main/resources/common-services/METRON/CURRENT/package/files/metaalert_index.template', 'utf8');
+ request({
+ url: 'http://node1:9200/_template/metaalert_index',
+ method: 'POST',
+ body: template
+ }, promiseHandlerWithResponseAndBody(resolve, reject));
+ });
+ };
+
+ return deleteIndex().then(() => createIndex(), reason => {
+ console.error( 'create Meta Alerts Index failed', reason );
});
}
export function deleteMetaAlertsIndex() {
request.delete('http://node1:9200/metaalert_index*');
-}
-
+}
\ No newline at end of file
diff --git a/metron-interface/metron-alerts/package-lock.json b/metron-interface/metron-alerts/package-lock.json
index 39b3588..3ace2b7 100644
--- a/metron-interface/metron-alerts/package-lock.json
+++ b/metron-interface/metron-alerts/package-lock.json
@@ -1,18 +1,118 @@
{
"name": "metron-alerts",
- "version": "0.0.0",
+ "version": "0.4.3",
"lockfileVersion": 1,
+ "requires": true,
"dependencies": {
"@angular/cli": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-1.0.0.tgz",
- "integrity": "sha1-e/3h58Xyi/W+1N2hNS7mfuiHMC8=",
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-1.2.4.tgz",
+ "integrity": "sha1-BPfA2aLuLP18wRo8Gom4fwPhT44=",
"dev": true,
+ "requires": {
+ "@ngtools/json-schema": "1.1.0",
+ "@ngtools/webpack": "1.5.3",
+ "autoprefixer": "6.7.7",
+ "chalk": "2.3.0",
+ "circular-dependency-plugin": "3.0.0",
+ "common-tags": "1.5.1",
+ "core-object": "3.1.5",
+ "css-loader": "0.28.7",
+ "cssnano": "3.10.0",
+ "denodeify": "1.2.1",
+ "diff": "3.2.0",
+ "ember-cli-normalize-entity-name": "1.0.0",
+ "ember-cli-string-utils": "1.1.0",
+ "exports-loader": "0.6.4",
+ "extract-text-webpack-plugin": "2.1.2",
+ "file-loader": "0.10.1",
+ "fs-extra": "4.0.2",
+ "get-caller-file": "1.0.2",
+ "glob": "7.1.2",
+ "heimdalljs": "0.2.5",
+ "heimdalljs-logger": "0.1.9",
+ "html-webpack-plugin": "2.30.1",
+ "inflection": "1.12.0",
+ "inquirer": "3.3.0",
+ "isbinaryfile": "3.0.2",
+ "istanbul-instrumenter-loader": "2.0.0",
+ "json-loader": "0.5.7",
+ "karma-source-map-support": "1.2.0",
+ "less": "2.7.3",
+ "less-loader": "4.0.5",
+ "license-webpack-plugin": "0.4.3",
+ "lodash": "4.17.4",
+ "memory-fs": "0.4.1",
+ "minimatch": "3.0.4",
+ "node-modules-path": "1.0.1",
+ "node-sass": "4.5.3",
+ "nopt": "4.0.1",
+ "opn": "5.1.0",
+ "portfinder": "1.0.13",
+ "postcss-loader": "1.3.3",
+ "postcss-url": "5.1.2",
+ "raw-loader": "0.5.1",
+ "resolve": "1.3.3",
+ "rsvp": "3.6.2",
+ "rxjs": "5.4.0",
+ "sass-loader": "6.0.6",
+ "script-loader": "0.7.2",
+ "semver": "5.3.0",
+ "silent-error": "1.1.0",
+ "source-map-loader": "0.2.3",
+ "style-loader": "0.13.2",
+ "stylus": "0.54.5",
+ "stylus-loader": "3.0.1",
+ "temp": "0.8.3",
+ "typescript": "2.2.2",
+ "url-loader": "0.5.9",
+ "walk-sync": "0.3.2",
+ "webpack": "2.4.1",
+ "webpack-dev-middleware": "1.12.2",
+ "webpack-dev-server": "2.4.5",
+ "webpack-merge": "2.6.1",
+ "zone.js": "0.8.18"
+ },
"dependencies": {
+ "ansi-styles": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz",
+ "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==",
+ "dev": true,
+ "requires": {
+ "color-convert": "1.9.1"
+ }
+ },
+ "chalk": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz",
+ "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "3.2.0",
+ "escape-string-regexp": "1.0.5",
+ "supports-color": "4.5.0"
+ }
+ },
+ "has-flag": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz",
+ "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=",
+ "dev": true
+ },
+ "supports-color": {
+ "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": "2.0.0"
+ }
+ },
"zone.js": {
- "version": "0.7.8",
- "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.7.8.tgz",
- "integrity": "sha1-Tz/og01EWX8mOQU6D6Q43zT//e0=",
+ "version": "0.8.18",
+ "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.8.18.tgz",
+ "integrity": "sha512-knKOBQM0oea3/x9pdyDuDi7RhxDlJhOIkeixXSiTKWLgs4LpK37iBc+1HaHwzlciHUKT172CymJFKo8Xgh+44Q==",
"dev": true
}
}
@@ -32,6 +132,11 @@
"resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-4.1.3.tgz",
"integrity": "sha1-wjYv/fZXVkcUgfg5+rZ1vKwhP5Y=",
"dev": true,
+ "requires": {
+ "@angular/tsc-wrapped": "4.1.3",
+ "minimist": "1.2.0",
+ "reflect-metadata": "0.1.10"
+ },
"dependencies": {
"minimist": {
"version": "1.2.0",
@@ -75,19 +180,28 @@
"version": "4.1.3",
"resolved": "https://registry.npmjs.org/@angular/tsc-wrapped/-/tsc-wrapped-4.1.3.tgz",
"integrity": "sha1-LWNyyRh78WIerNlguUs5xPlSk80=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "tsickle": "0.21.6"
+ }
},
"@ngtools/json-schema": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/@ngtools/json-schema/-/json-schema-1.0.5.tgz",
- "integrity": "sha1-rTkDfHDIiyRaxyZ6cXd2RrYGPXc=",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@ngtools/json-schema/-/json-schema-1.1.0.tgz",
+ "integrity": "sha1-w6DFRNYjkqzCgTpCyKDcb1j4aSI=",
"dev": true
},
"@ngtools/webpack": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-1.3.0.tgz",
- "integrity": "sha1-oQcSMJhTWOzfh7L6mHmubMY1XoM=",
- "dev": true
+ "version": "1.5.3",
+ "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-1.5.3.tgz",
+ "integrity": "sha1-hsGDSxEFnpGkhUPonMaXrR9km9I=",
+ "dev": true,
+ "requires": {
+ "enhanced-resolve": "3.3.0",
+ "loader-utils": "1.1.0",
+ "magic-string": "0.22.4",
+ "source-map": "0.5.6"
+ }
},
"@types/ace": {
"version": "0.0.32",
@@ -95,10 +209,10 @@
"integrity": "sha1-1YSBOWBgdUDdsgLeiz4ilQTUXP8=",
"dev": true
},
- "@types/bootstrap": {
- "version": "3.3.33",
- "resolved": "https://registry.npmjs.org/@types/bootstrap/-/bootstrap-3.3.33.tgz",
- "integrity": "sha1-RIIg7bQq3QoLcC9xIl01kF8MuUg=",
+ "@types/es6-promise": {
+ "version": "0.0.33",
+ "resolved": "https://registry.npmjs.org/@types/es6-promise/-/es6-promise-0.0.33.tgz",
+ "integrity": "sha1-KApwfmKxtr7xqGzAhh7GPNBsf/M=",
"dev": true
},
"@types/jasmine": {
@@ -107,11 +221,14 @@
"integrity": "sha1-pDeRJMSSHU4h3lTsdGacnps1Zxc=",
"dev": true
},
- "@types/jquery": {
- "version": "2.0.46",
- "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-2.0.46.tgz",
- "integrity": "sha512-U64bkZqTfFi4HXHqOckD1Uxvg+oPooCjD5bQ10t9xOG5Ke6cR8tFnvERXrQtrRWvgS428nhAL1V8qv1b88kgyQ==",
- "dev": true
+ "@types/moment": {
+ "version": "2.13.0",
+ "resolved": "https://registry.npmjs.org/@types/moment/-/moment-2.13.0.tgz",
+ "integrity": "sha1-YE69GJvDvDShVIaJQE5hoqSqyJY=",
+ "dev": true,
+ "requires": {
+ "moment": "2.19.2"
+ }
},
"@types/node": {
"version": "6.0.78",
@@ -119,6 +236,15 @@
"integrity": "sha512-+vD6E8ixntRzzZukoF3uP1iV+ZjVN3koTcaeK+BEoc/kSfGbLDIGC7RmCaUgVpUfN6cWvfczFRERCyKM9mkvXg==",
"dev": true
},
+ "@types/pikaday-time": {
+ "version": "1.4.5",
+ "resolved": "https://registry.npmjs.org/@types/pikaday-time/-/pikaday-time-1.4.5.tgz",
+ "integrity": "sha1-040HYaJnOzjAjgULvQieYcw8LRc=",
+ "dev": true,
+ "requires": {
+ "moment": "2.19.2"
+ }
+ },
"@types/q": {
"version": "0.0.32",
"resolved": "https://registry.npmjs.org/@types/q/-/q-0.0.32.tgz",
@@ -126,9 +252,9 @@
"dev": true
},
"@types/selenium-webdriver": {
- "version": "2.53.42",
- "resolved": "https://registry.npmjs.org/@types/selenium-webdriver/-/selenium-webdriver-2.53.42.tgz",
- "integrity": "sha1-dMt3+2BS7a/yqJhN2v2I1BnyXKw=",
+ "version": "2.53.37",
+ "resolved": "https://registry.npmjs.org/@types/selenium-webdriver/-/selenium-webdriver-2.53.37.tgz",
+ "integrity": "sha1-NPdDwg5TrnEA7ekIcP3lVN8kR/g=",
"dev": true
},
"abbrev": {
@@ -141,7 +267,11 @@
"version": "1.3.3",
"resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.3.tgz",
"integrity": "sha1-w8p0NJOGSMPg2cHjKN1otiLChMo=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "mime-types": "2.1.15",
+ "negotiator": "0.6.1"
+ }
},
"ace-builds": {
"version": "1.2.6",
@@ -149,16 +279,27 @@
"integrity": "sha1-qSM8J8N7hJTyCvhJF+4WGUia9Ck="
},
"acorn": {
- "version": "4.0.13",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz",
- "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=",
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.2.1.tgz",
+ "integrity": "sha1-MXrHghgmwixwLWYYmrg1lnXxNdc=",
"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
+ "dev": true,
+ "requires": {
+ "acorn": "4.0.13"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "4.0.13",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz",
+ "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=",
+ "dev": true
+ }
+ }
},
"adm-zip": {
"version": "0.4.7",
@@ -177,6 +318,10 @@
"resolved": "https://registry.npmjs.org/agent-base/-/agent-base-2.1.1.tgz",
"integrity": "sha1-1t4Q1a9hMtW9aSQn1G/FOFOQlMc=",
"dev": true,
+ "requires": {
+ "extend": "3.0.1",
+ "semver": "5.0.3"
+ },
"dependencies": {
"semver": {
"version": "5.0.3",
@@ -190,7 +335,11 @@
"version": "4.11.8",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz",
"integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "co": "4.6.0",
+ "json-stable-stringify": "1.0.1"
+ }
},
"ajv-keywords": {
"version": "1.5.1",
@@ -202,7 +351,12 @@
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz",
"integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2",
+ "longest": "1.0.1",
+ "repeat-string": "1.6.1"
+ }
},
"alphanum-sort": {
"version": "1.0.2",
@@ -220,12 +374,15 @@
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz",
"integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "string-width": "2.0.0"
+ }
},
"ansi-escapes": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-2.0.0.tgz",
- "integrity": "sha1-W65SvkJIeN2Xg+iRDj/Cki6DyBs=",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.0.0.tgz",
+ "integrity": "sha1-7D6LTp+AZPwCw6ybZfHCdb2o75I=",
"dev": true
},
"ansi-html": {
@@ -256,7 +413,11 @@
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.0.tgz",
"integrity": "sha1-o+Uvo5FoyCX/V7AkgSbOWo/5VQc=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "arrify": "1.0.1",
+ "micromatch": "2.3.11"
+ }
},
"app-root-path": {
"version": "2.0.1",
@@ -268,7 +429,10 @@
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/append-transform/-/append-transform-0.4.0.tgz",
"integrity": "sha1-126/jKlNJ24keja61EpLdKthGZE=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "default-require-extensions": "1.0.0"
+ }
},
"aproba": {
"version": "1.1.2",
@@ -280,19 +444,29 @@
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz",
"integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "delegates": "1.0.0",
+ "readable-stream": "2.2.11"
+ }
},
"argparse": {
"version": "1.0.9",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz",
"integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "sprintf-js": "1.0.3"
+ }
},
"arr-diff": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz",
"integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "arr-flatten": "1.0.3"
+ }
},
"arr-flatten": {
"version": "1.0.3",
@@ -322,7 +496,10 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
"integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "array-uniq": "1.0.3"
+ }
},
"array-uniq": {
"version": "1.0.3",
@@ -349,9 +526,9 @@
"dev": true
},
"asap": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.5.tgz",
- "integrity": "sha1-UidltQw1EEkOUtfc/ghe+bqWlY8=",
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
+ "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=",
"dev": true,
"optional": true
},
@@ -362,16 +539,24 @@
"dev": true
},
"asn1.js": {
- "version": "4.9.1",
- "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.9.1.tgz",
- "integrity": "sha1-SLokC0WpKA6UdImQull9IWYX/UA=",
- "dev": true
+ "version": "4.9.2",
+ "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.9.2.tgz",
+ "integrity": "sha1-gRfvT37YfNj4kES1v/l6wkOhbJo=",
+ "dev": true,
+ "requires": {
+ "bn.js": "4.11.8",
+ "inherits": "2.0.3",
+ "minimalistic-assert": "1.0.0"
+ }
},
"assert": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz",
"integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "util": "0.10.3"
+ }
},
"assert-plus": {
"version": "0.2.0",
@@ -383,7 +568,10 @@
"version": "2.4.1",
"resolved": "https://registry.npmjs.org/async/-/async-2.4.1.tgz",
"integrity": "sha1-YqVrJ5yYoR0JhwlqAcw+6463u9c=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "lodash": "4.17.4"
+ }
},
"async-each": {
"version": "1.0.1",
@@ -403,11 +591,24 @@
"integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
"dev": true
},
+ "atoa": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/atoa/-/atoa-1.0.0.tgz",
+ "integrity": "sha1-DMDpGkgOc4+SPrwQNnZHF3mzSkk="
+ },
"autoprefixer": {
"version": "6.7.7",
"resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-6.7.7.tgz",
"integrity": "sha1-Hb0cg1ZY41zj+ZhAmdsAWFx4IBQ=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "browserslist": "1.7.7",
+ "caniuse-db": "1.0.30000772",
+ "normalize-range": "0.1.2",
+ "num2fraction": "1.2.2",
+ "postcss": "5.2.18",
+ "postcss-value-parser": "3.3.0"
+ }
},
"aws-sign2": {
"version": "0.6.0",
@@ -425,13 +626,28 @@
"version": "6.22.0",
"resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.22.0.tgz",
"integrity": "sha1-AnYgvuVnqIwyVhV05/0IAdMxGOQ=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "chalk": "1.1.3",
+ "esutils": "2.0.2",
+ "js-tokens": "3.0.1"
+ }
},
"babel-generator": {
"version": "6.24.1",
"resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.24.1.tgz",
"integrity": "sha1-5xX0hsWN7SVknYiJRNUqoHxdlJc=",
"dev": true,
+ "requires": {
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.23.0",
+ "babel-types": "6.24.1",
+ "detect-indent": "4.0.0",
+ "jsesc": "1.3.0",
+ "lodash": "4.17.4",
+ "source-map": "0.5.6",
+ "trim-right": "1.0.1"
+ },
"dependencies": {
"jsesc": {
"version": "1.3.0",
@@ -445,31 +661,62 @@
"version": "6.23.0",
"resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
"integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.23.0"
+ }
},
"babel-runtime": {
"version": "6.23.0",
"resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.23.0.tgz",
"integrity": "sha1-CpSJ8UTecO+zzkMArM2zKeL8VDs=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "core-js": "2.4.1",
+ "regenerator-runtime": "0.10.5"
+ }
},
"babel-template": {
"version": "6.24.1",
"resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.24.1.tgz",
"integrity": "sha1-BK5RTx+Ts6JTfyoPYKWkX7gwgzM=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.23.0",
+ "babel-traverse": "6.24.1",
+ "babel-types": "6.24.1",
+ "babylon": "6.17.2",
+ "lodash": "4.17.4"
+ }
},
"babel-traverse": {
"version": "6.24.1",
"resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.24.1.tgz",
"integrity": "sha1-qzZnP9NW+aCUhlnnszjV/q2zFpU=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "6.22.0",
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.23.0",
+ "babel-types": "6.24.1",
+ "babylon": "6.17.2",
+ "debug": "2.6.8",
+ "globals": "9.18.0",
+ "invariant": "2.2.2",
+ "lodash": "4.17.4"
+ }
},
"babel-types": {
"version": "6.24.1",
"resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.24.1.tgz",
"integrity": "sha1-oTaHncFbNga9oNkMH8dDBML/CXU=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.23.0",
+ "esutils": "2.0.2",
+ "lodash": "4.17.4",
+ "to-fast-properties": "1.0.3"
+ }
},
"babylon": {
"version": "6.17.2",
@@ -496,9 +743,9 @@
"dev": true
},
"base64-js": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.0.tgz",
- "integrity": "sha1-o5mS1yNYSBGYK+XikLtqU9hnAPE=",
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.1.tgz",
+ "integrity": "sha1-qRlH2h9KUW6jjltOwOw3c2deCIY=",
"dev": true
},
"base64id": {
@@ -518,18 +765,24 @@
"resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz",
"integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=",
"dev": true,
- "optional": true
+ "optional": true,
+ "requires": {
+ "tweetnacl": "0.14.5"
+ }
},
"better-assert": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz",
"integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "callsite": "1.0.0"
+ }
},
"big.js": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.1.3.tgz",
- "integrity": "sha1-TK2iGTZS6zyp7I5VyQFWacmAaXg=",
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz",
+ "integrity": "sha1-pfwpi4G54Nyi5FiCR4S2XFK6WI4=",
"dev": true
},
"binary-extensions": {
@@ -548,13 +801,19 @@
"version": "0.0.9",
"resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz",
"integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3"
+ }
},
"blocking-proxy": {
- "version": "0.0.5",
- "resolved": "https://registry.npmjs.org/blocking-proxy/-/blocking-proxy-0.0.5.tgz",
- "integrity": "sha1-RikF4Nz76pcPQao3Ij3anAexkSs=",
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/blocking-proxy/-/blocking-proxy-1.0.1.tgz",
+ "integrity": "sha512-KE8NFMZr3mN2E0HcvCgRtX7DjhiIQrwle+nSVJVC/yqFb9+xznHl2ZcoBp2L9qzkI4t4cBFJ1efXF8Dwi132RA==",
"dev": true,
+ "requires": {
+ "minimist": "1.2.0"
+ },
"dependencies": {
"minimist": {
"version": "1.2.0",
@@ -571,9 +830,9 @@
"dev": true
},
"bn.js": {
- "version": "4.11.6",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz",
- "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=",
+ "version": "4.11.8",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz",
+ "integrity": "sha1-LN4J617jQfSEdGuwMJsyU7GxRC8=",
"dev": true
},
"body-parser": {
@@ -581,6 +840,18 @@
"resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.17.2.tgz",
"integrity": "sha1-+IkqvI+eYn1Crtr7yma/WrmRBO4=",
"dev": true,
+ "requires": {
+ "bytes": "2.4.0",
+ "content-type": "1.0.2",
+ "debug": "2.6.7",
+ "depd": "1.1.0",
+ "http-errors": "1.6.1",
+ "iconv-lite": "0.4.15",
+ "on-finished": "2.3.0",
+ "qs": "6.4.0",
+ "raw-body": "2.2.0",
+ "type-is": "1.6.15"
+ },
"dependencies": {
"bytes": {
"version": "2.4.0",
@@ -592,7 +863,10 @@
"version": "2.6.7",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.7.tgz",
"integrity": "sha1-krrR9tBbu2u6Isyoi80OyJTChh4=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
},
"iconv-lite": {
"version": "0.4.15",
@@ -612,18 +886,34 @@
"version": "2.10.1",
"resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz",
"integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "hoek": "2.16.3"
+ }
},
"bootstrap": {
"version": "4.0.0-alpha.6",
"resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.0.0-alpha.6.tgz",
- "integrity": "sha1-T1TdM6wN6sOyhAe8LffsYIhpycg="
+ "integrity": "sha1-T1TdM6wN6sOyhAe8LffsYIhpycg=",
+ "requires": {
+ "jquery": "3.2.1",
+ "tether": "1.4.0"
+ }
},
"boxen": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/boxen/-/boxen-1.1.0.tgz",
"integrity": "sha1-sbad1SIwXoB6md7ud329blFnsQI=",
"dev": true,
+ "requires": {
+ "ansi-align": "2.0.0",
+ "camelcase": "4.1.0",
+ "chalk": "1.1.3",
+ "cli-boxes": "1.0.0",
+ "string-width": "2.0.0",
+ "term-size": "0.1.1",
+ "widest-line": "1.0.0"
+ },
"dependencies": {
"camelcase": {
"version": "4.1.0",
@@ -637,13 +927,22 @@
"version": "1.1.7",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.7.tgz",
"integrity": "sha1-Pv/DxQ4ABTH7cg6v+A8K6O8jz1k=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "balanced-match": "0.4.2",
+ "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=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "expand-range": "1.8.2",
+ "preserve": "0.2.0",
+ "repeat-element": "1.1.2"
+ }
},
"brorand": {
"version": "1.1.0",
@@ -652,52 +951,95 @@
"dev": true
},
"browserify-aes": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.0.6.tgz",
- "integrity": "sha1-Xncl297x/Vkw1OurSFZ85FHEigo=",
- "dev": true
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.1.1.tgz",
+ "integrity": "sha1-OLerVe24Bv8tzaGn8WIHc6R3xJ8=",
+ "dev": true,
+ "requires": {
+ "buffer-xor": "1.0.3",
+ "cipher-base": "1.0.4",
+ "create-hash": "1.1.3",
+ "evp_bytestokey": "1.0.3",
+ "inherits": "2.0.3",
+ "safe-buffer": "5.0.1"
+ }
},
"browserify-cipher": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.0.tgz",
"integrity": "sha1-mYgkSHS/XtTijalWZtzWasj8Njo=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "browserify-aes": "1.1.1",
+ "browserify-des": "1.0.0",
+ "evp_bytestokey": "1.0.3"
+ }
},
"browserify-des": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.0.tgz",
"integrity": "sha1-2qJ3cXRwki7S/hhZQRihdUOXId0=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "cipher-base": "1.0.4",
+ "des.js": "1.0.0",
+ "inherits": "2.0.3"
+ }
},
"browserify-rsa": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz",
"integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "bn.js": "4.11.8",
+ "randombytes": "2.0.5"
+ }
},
"browserify-sign": {
"version": "4.0.4",
"resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz",
"integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "bn.js": "4.11.8",
+ "browserify-rsa": "4.0.1",
+ "create-hash": "1.1.3",
+ "create-hmac": "1.1.6",
+ "elliptic": "6.4.0",
+ "inherits": "2.0.3",
+ "parse-asn1": "5.1.0"
+ }
},
"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
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz",
+ "integrity": "sha1-KGlFnZqjviRf6P4sofRuLn9U1z8=",
+ "dev": true,
+ "requires": {
+ "pako": "1.0.6"
+ }
},
"browserslist": {
"version": "1.7.7",
"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz",
"integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "caniuse-db": "1.0.30000772",
+ "electron-to-chromium": "1.3.27"
+ }
},
"buffer": {
"version": "4.9.1",
"resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz",
"integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "base64-js": "1.2.1",
+ "ieee754": "1.1.8",
+ "isarray": "1.0.0"
+ }
},
"buffer-xor": {
"version": "1.0.3",
@@ -733,7 +1075,11 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz",
"integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "no-case": "2.3.2",
+ "upper-case": "1.1.3"
+ }
},
"camelcase": {
"version": "2.1.1",
@@ -745,18 +1091,28 @@
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz",
"integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "camelcase": "2.1.1",
+ "map-obj": "1.0.1"
+ }
},
"caniuse-api": {
"version": "1.6.1",
"resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-1.6.1.tgz",
"integrity": "sha1-tTTnxzTE+B7F++isoq0kNUuWLGw=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "browserslist": "1.7.7",
+ "caniuse-db": "1.0.30000772",
+ "lodash.memoize": "4.1.2",
+ "lodash.uniq": "4.5.0"
+ }
},
"caniuse-db": {
- "version": "1.0.30000680",
- "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000680.tgz",
- "integrity": "sha1-126+quuC49mVK/3FwjHE+DzUgUQ=",
+ "version": "1.0.30000772",
+ "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000772.tgz",
+ "integrity": "sha1-UarokXaChureSj2DGep21qAbUSs=",
"dev": true
},
"capture-stack-trace": {
@@ -775,13 +1131,24 @@
"version": "0.1.3",
"resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz",
"integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "align-text": "0.1.4",
+ "lazy-cache": "1.0.4"
+ }
},
"chalk": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
"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"
+ },
"dependencies": {
"supports-color": {
"version": "2.0.0",
@@ -791,29 +1158,62 @@
}
}
},
+ "chardet": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz",
+ "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=",
+ "dev": true
+ },
"chokidar": {
"version": "1.7.0",
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz",
"integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "anymatch": "1.3.0",
+ "async-each": "1.0.1",
+ "fsevents": "1.1.1",
+ "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"
+ }
},
"cipher-base": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.3.tgz",
- "integrity": "sha1-7qvxlEGc6QDaMBjCB9IS8qbfCgc=",
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz",
+ "integrity": "sha1-h2Dk7MJy9MNjUy+SbYdKriwTl94=",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3",
+ "safe-buffer": "5.0.1"
+ }
+ },
+ "circular-dependency-plugin": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/circular-dependency-plugin/-/circular-dependency-plugin-3.0.0.tgz",
+ "integrity": "sha1-m2hpLjWw41EJmNAWS2rlARvqV2A=",
"dev": true
},
"clap": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/clap/-/clap-1.1.3.tgz",
- "integrity": "sha1-s7026T3Uy/s5WjwmiWNSRFJlwFs=",
- "dev": true
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/clap/-/clap-1.2.3.tgz",
+ "integrity": "sha1-TzZ0WzIAhJJVf0ZBLWbVDLmbzlE=",
+ "dev": true,
+ "requires": {
+ "chalk": "1.1.3"
+ }
},
"clean-css": {
- "version": "4.1.3",
- "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.1.3.tgz",
- "integrity": "sha1-B8/omA7bINRV3cI6rc8eBMblCc4=",
- "dev": true
+ "version": "4.1.9",
+ "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.1.9.tgz",
+ "integrity": "sha1-Nc7ornaHpJuYA09w3gDE7dOCYwE=",
+ "dev": true,
+ "requires": {
+ "source-map": "0.5.6"
+ }
},
"cli-boxes": {
"version": "1.0.0",
@@ -825,12 +1225,15 @@
"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
+ "dev": true,
+ "requires": {
+ "restore-cursor": "2.0.0"
+ }
},
"cli-width": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.1.0.tgz",
- "integrity": "sha1-sjTKIJsp72b8UY2bmNWEewDt8Ao=",
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz",
+ "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=",
"dev": true
},
"cliui": {
@@ -838,27 +1241,63 @@
"resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz",
"integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=",
"dev": true,
+ "requires": {
+ "string-width": "1.0.2",
+ "strip-ansi": "3.0.1",
+ "wrap-ansi": "2.1.0"
+ },
"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
+ "dev": true,
+ "requires": {
+ "number-is-nan": "1.0.1"
+ }
},
"string-width": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
"integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "code-point-at": "1.1.0",
+ "is-fullwidth-code-point": "1.0.0",
+ "strip-ansi": "3.0.1"
+ }
}
}
},
"clone": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.2.tgz",
- "integrity": "sha1-Jgt6meux7f4kdTgXX3gyQ8sZ0Uk=",
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.3.tgz",
+ "integrity": "sha1-KY1+IjFmD0DAA8LtMUDezz9TCF8=",
"dev": true
},
+ "clone-deep": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-0.3.0.tgz",
+ "integrity": "sha1-NIxhrpzb4O3+BT2R/0zFIdeQ7eg=",
+ "dev": true,
+ "requires": {
+ "for-own": "1.0.0",
+ "is-plain-object": "2.0.4",
+ "kind-of": "3.2.2",
+ "shallow-clone": "0.1.2"
+ },
+ "dependencies": {
+ "for-own": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz",
+ "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=",
+ "dev": true,
+ "requires": {
+ "for-in": "1.0.2"
+ }
+ }
+ }
+ },
"co": {
"version": "4.6.0",
"resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
@@ -866,10 +1305,13 @@
"dev": true
},
"coa": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/coa/-/coa-1.0.2.tgz",
- "integrity": "sha1-K6n+w7SqQ9eknX5sNWHpIGG2vOw=",
- "dev": true
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/coa/-/coa-1.0.4.tgz",
+ "integrity": "sha1-qe8VNmDWqGqL3sAomlxoTSF0Mv0=",
+ "dev": true,
+ "requires": {
+ "q": "1.5.0"
+ }
},
"code-point-at": {
"version": "1.1.0",
@@ -881,37 +1323,61 @@
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/codelyzer/-/codelyzer-2.0.1.tgz",
"integrity": "sha1-0PcSH2eoQkyS0h07MfNkC4Pe+e0=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "app-root-path": "2.0.1",
+ "css-selector-tokenizer": "0.7.0",
+ "cssauron": "1.4.0",
+ "semver-dsl": "1.0.1",
+ "source-map": "0.5.6",
+ "sprintf-js": "1.0.3"
+ }
},
"color": {
"version": "0.11.4",
"resolved": "https://registry.npmjs.org/color/-/color-0.11.4.tgz",
"integrity": "sha1-bXtcdPtl6EHNSHkq0e1eB7kE12Q=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "clone": "1.0.3",
+ "color-convert": "1.9.1",
+ "color-string": "0.3.0"
+ }
},
"color-convert": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.0.tgz",
- "integrity": "sha1-Gsz5fdc5uYO/mU1W/sj5WFNkG3o=",
- "dev": true
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz",
+ "integrity": "sha1-wSYRB66y8pTr/+ye2eytUppgl+0=",
+ "dev": true,
+ "requires": {
+ "color-name": "1.1.3"
+ }
},
"color-name": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.2.tgz",
- "integrity": "sha1-XIq3K2S9IhXWF66VWeuxSEdc+Y0=",
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
"dev": true
},
"color-string": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/color-string/-/color-string-0.3.0.tgz",
"integrity": "sha1-J9RvtnAlxcL6JZk7+/V55HhBuZE=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "color-name": "1.1.3"
+ }
},
"colormin": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/colormin/-/colormin-1.1.2.tgz",
"integrity": "sha1-6i90IKcrlogaOKrlnsEkpvcpgTM=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "color": "0.11.4",
+ "css-color-names": "0.0.4",
+ "has": "1.0.1"
+ }
},
"colors": {
"version": "1.1.2",
@@ -923,25 +1389,52 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/combine-lists/-/combine-lists-1.0.1.tgz",
"integrity": "sha1-RYwH4J4NkA/Ci3Cj/sLazR0st/Y=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "lodash": "4.17.4"
+ }
},
"combined-stream": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz",
"integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "delayed-stream": "1.0.0"
+ }
},
"commander": {
- "version": "2.9.0",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz",
- "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=",
+ "version": "2.12.2",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.12.2.tgz",
+ "integrity": "sha1-D1lGxCftnsDZGka7ne9T5UZQ5VU=",
"dev": true
},
"common-tags": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.4.0.tgz",
- "integrity": "sha1-EYe+Tz1M8MBCfUP3Tu8fc1AWFMA=",
- "dev": true
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.5.1.tgz",
+ "integrity": "sha1-4uOZMaATzQIlPe/u2Joa1hWifwc=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ },
+ "dependencies": {
+ "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.1",
+ "regenerator-runtime": "0.11.0"
+ }
+ },
+ "regenerator-runtime": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz",
+ "integrity": "sha512-/aA0kLeRb5N9K0d4fw7ooEbI+xDe+DKD499EQqygGqeS8N3xto15p09uY2xj7ixP81sNPXvRLnAQIqdVStgb1A==",
+ "dev": true
+ }
+ }
},
"component-bind": {
"version": "1.0.0",
@@ -965,19 +1458,33 @@
"version": "2.0.10",
"resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.10.tgz",
"integrity": "sha1-/tocf3YXkScyspv4zyYlKiC57s0=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "mime-db": "1.27.0"
+ }
},
"compression": {
"version": "1.6.2",
"resolved": "https://registry.npmjs.org/compression/-/compression-1.6.2.tgz",
"integrity": "sha1-zOsSHsydCcUtetDDNQ6pPd1AK8M=",
"dev": true,
+ "requires": {
+ "accepts": "1.3.3",
+ "bytes": "2.3.0",
+ "compressible": "2.0.10",
+ "debug": "2.2.0",
+ "on-headers": "1.0.1",
+ "vary": "1.1.1"
+ },
"dependencies": {
"debug": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz",
"integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "ms": "0.7.1"
+ }
},
"ms": {
"version": "0.7.1",
@@ -997,33 +1504,53 @@
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.0.tgz",
"integrity": "sha1-Rd+QcHPibfoc9LLVL1tgVF6qEdE=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "dot-prop": "4.1.1",
+ "graceful-fs": "4.1.11",
+ "make-dir": "1.0.0",
+ "unique-string": "1.0.0",
+ "write-file-atomic": "2.1.0",
+ "xdg-basedir": "3.0.0"
+ }
},
"connect": {
"version": "3.6.2",
"resolved": "https://registry.npmjs.org/connect/-/connect-3.6.2.tgz",
"integrity": "sha1-aU6NIGgb/kkCgsiriGvpjwn0L+c=",
"dev": true,
+ "requires": {
+ "debug": "2.6.7",
+ "finalhandler": "1.0.3",
+ "parseurl": "1.3.1",
+ "utils-merge": "1.0.0"
+ },
"dependencies": {
"debug": {
"version": "2.6.7",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.7.tgz",
"integrity": "sha1-krrR9tBbu2u6Isyoi80OyJTChh4=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
}
}
},
"connect-history-api-fallback": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.3.0.tgz",
- "integrity": "sha1-5R0X+PDvDbkKZP20feMFFVbp8Wk=",
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz",
+ "integrity": "sha1-sGhzk0vF40T+9hGhlqb6rgruAVo=",
"dev": true
},
"console-browserify": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz",
"integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "date-now": "0.1.4"
+ }
},
"console-control-strings": {
"version": "1.1.0",
@@ -1049,10 +1576,19 @@
"integrity": "sha1-t9ETrueo3Se9IRM8TcJSnfFyHu0=",
"dev": true
},
+ "contra": {
+ "version": "1.9.4",
+ "resolved": "https://registry.npmjs.org/contra/-/contra-1.9.4.tgz",
+ "integrity": "sha1-9TveQtfltZhcrk2ZqNYQUm3o8o0=",
+ "requires": {
+ "atoa": "1.0.0",
+ "ticky": "1.0.1"
+ }
+ },
"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
},
"cookie": {
@@ -1072,59 +1608,181 @@
"resolved": "https://registry.npmjs.org/core-js/-/core-js-2.4.1.tgz",
"integrity": "sha1-TekR5mew6ukSTjQlS1OupvxhjT4="
},
+ "core-object": {
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/core-object/-/core-object-3.1.5.tgz",
+ "integrity": "sha1-+mJ7h1Aq3JgEXkRnjpqOw7nA0qk=",
+ "dev": true,
+ "requires": {
+ "chalk": "2.3.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz",
+ "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==",
+ "dev": true,
+ "requires": {
+ "color-convert": "1.9.1"
+ }
+ },
+ "chalk": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz",
+ "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "3.2.0",
+ "escape-string-regexp": "1.0.5",
+ "supports-color": "4.5.0"
+ }
+ },
+ "has-flag": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz",
+ "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=",
+ "dev": true
+ },
+ "supports-color": {
+ "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": "2.0.0"
+ }
+ }
+ }
+ },
"core-util-is": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
"integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
"dev": true
},
+ "cosmiconfig": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-2.2.2.tgz",
+ "integrity": "sha1-YXPOvVb6wELB9DkO33r2wHx8uJI=",
+ "dev": true,
+ "requires": {
+ "is-directory": "0.3.1",
+ "js-yaml": "3.7.0",
+ "minimist": "1.2.0",
+ "object-assign": "4.1.1",
+ "os-homedir": "1.0.2",
+ "parse-json": "2.2.0",
+ "require-from-string": "1.2.1"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+ "dev": true
+ }
+ }
+ },
"create-ecdh": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.0.tgz",
"integrity": "sha1-iIxyNZbN92EvZJgjPuvXo1MBc30=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "bn.js": "4.11.8",
+ "elliptic": "6.4.0"
+ }
},
"create-error-class": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz",
"integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "capture-stack-trace": "1.0.0"
+ }
},
"create-hash": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.1.3.tgz",
"integrity": "sha1-YGBCrIuSYnUPSDyt2rD1gZFy2P0=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "cipher-base": "1.0.4",
+ "inherits": "2.0.3",
+ "ripemd160": "2.0.1",
+ "sha.js": "2.4.9"
+ }
},
"create-hmac": {
"version": "1.1.6",
"resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.6.tgz",
"integrity": "sha1-rLniIaThe9sHbpBlfEK5PjcmzwY=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "cipher-base": "1.0.4",
+ "create-hash": "1.1.3",
+ "inherits": "2.0.3",
+ "ripemd160": "2.0.1",
+ "safe-buffer": "5.0.1",
+ "sha.js": "2.4.9"
+ }
},
"cross-spawn": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz",
"integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "lru-cache": "4.1.0",
+ "which": "1.2.14"
+ }
},
"cross-spawn-async": {
"version": "2.2.5",
"resolved": "https://registry.npmjs.org/cross-spawn-async/-/cross-spawn-async-2.2.5.tgz",
"integrity": "sha1-hF/wwINKPe2dFg2sptOQkGuyiMw=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "lru-cache": "4.1.0",
+ "which": "1.2.14"
+ }
+ },
+ "crossvent": {
+ "version": "1.5.4",
+ "resolved": "https://registry.npmjs.org/crossvent/-/crossvent-1.5.4.tgz",
+ "integrity": "sha1-2ixPj0DJR4JRe/K+7BBEFIGUq5I=",
+ "requires": {
+ "custom-event": "1.0.1"
+ }
},
"cryptiles": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz",
"integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "boom": "2.10.1"
+ }
},
"crypto-browserify": {
- "version": "3.11.0",
- "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.11.0.tgz",
- "integrity": "sha1-NlKgkGq5sqfgw85mpAjpV6JIVSI=",
- "dev": true
+ "version": "3.12.0",
+ "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz",
+ "integrity": "sha1-OWz58xN/A+S45TLFj2mCVOAPgOw=",
+ "dev": true,
+ "requires": {
+ "browserify-cipher": "1.0.0",
+ "browserify-sign": "4.0.4",
+ "create-ecdh": "4.0.0",
+ "create-hash": "1.1.3",
+ "create-hmac": "1.1.6",
+ "diffie-hellman": "5.0.2",
+ "inherits": "2.0.3",
+ "pbkdf2": "3.0.14",
+ "public-encrypt": "4.0.0",
+ "randombytes": "2.0.5",
+ "randomfill": "1.0.3"
+ }
},
"crypto-random-string": {
"version": "1.0.0",
@@ -1139,10 +1797,26 @@
"dev": true
},
"css-loader": {
- "version": "0.26.4",
- "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-0.26.4.tgz",
- "integrity": "sha1-th6eMNuUMD5v/IkvEOzQmtAlof0=",
- "dev": true
+ "version": "0.28.7",
+ "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-0.28.7.tgz",
+ "integrity": "sha1-Xy7pid0y7dkHcX+VMxdlYWCZnBs=",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "6.22.0",
+ "css-selector-tokenizer": "0.7.0",
+ "cssnano": "3.10.0",
+ "icss-utils": "2.1.0",
+ "loader-utils": "1.1.0",
+ "lodash.camelcase": "4.3.0",
+ "object-assign": "4.1.1",
+ "postcss": "5.2.18",
+ "postcss-modules-extract-imports": "1.1.0",
+ "postcss-modules-local-by-default": "1.2.0",
+ "postcss-modules-scope": "1.1.0",
+ "postcss-modules-values": "1.3.0",
+ "postcss-value-parser": "3.3.0",
+ "source-list-map": "2.0.0"
+ }
},
"css-parse": {
"version": "1.7.0",
@@ -1154,13 +1828,24 @@
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz",
"integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "boolbase": "1.0.0",
+ "css-what": "2.1.0",
+ "domutils": "1.5.1",
+ "nth-check": "1.0.1"
+ }
},
"css-selector-tokenizer": {
"version": "0.7.0",
"resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.0.tgz",
"integrity": "sha1-5piEdK6MlTR3v15+/s/OzNnPTIY=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "cssesc": "0.1.0",
+ "fastparse": "1.1.1",
+ "regexpu-core": "1.0.0"
+ }
},
"css-what": {
"version": "2.1.0",
@@ -1172,7 +1857,10 @@
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/cssauron/-/cssauron-1.4.0.tgz",
"integrity": "sha1-pmAt/34EqDBtwNuaVR6S6LVmKtg=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "through": "2.3.8"
+ }
},
"cssesc": {
"version": "0.1.0",
@@ -1184,31 +1872,74 @@
"version": "3.10.0",
"resolved": "https://registry.npmjs.org/cssnano/-/cssnano-3.10.0.tgz",
"integrity": "sha1-Tzj2zqK5sX+gFJDyPx3GjqZcHDg=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "autoprefixer": "6.7.7",
+ "decamelize": "1.2.0",
+ "defined": "1.0.0",
+ "has": "1.0.1",
+ "object-assign": "4.1.1",
+ "postcss": "5.2.18",
+ "postcss-calc": "5.3.1",
+ "postcss-colormin": "2.2.2",
+ "postcss-convert-values": "2.6.1",
+ "postcss-discard-comments": "2.0.4",
+ "postcss-discard-duplicates": "2.1.0",
+ "postcss-discard-empty": "2.1.0",
+ "postcss-discard-overridden": "0.1.1",
+ "postcss-discard-unused": "2.2.3",
+ "postcss-filter-plugins": "2.0.2",
+ "postcss-merge-idents": "2.1.7",
+ "postcss-merge-longhand": "2.0.2",
+ "postcss-merge-rules": "2.1.2",
+ "postcss-minify-font-values": "1.0.5",
+ "postcss-minify-gradients": "1.0.5",
+ "postcss-minify-params": "1.2.2",
+ "postcss-minify-selectors": "2.1.1",
+ "postcss-normalize-charset": "1.1.1",
+ "postcss-normalize-url": "3.0.8",
+ "postcss-ordered-values": "2.2.3",
+ "postcss-reduce-idents": "2.4.0",
+ "postcss-reduce-initial": "1.0.1",
+ "postcss-reduce-transforms": "1.0.4",
+ "postcss-svgo": "2.1.6",
+ "postcss-unique-selectors": "2.0.2",
+ "postcss-value-parser": "3.3.0",
+ "postcss-zindex": "2.2.0"
+ }
},
"csso": {
"version": "2.3.2",
"resolved": "https://registry.npmjs.org/csso/-/csso-2.3.2.tgz",
"integrity": "sha1-3dUsWHAz9J6Utx/FVWnyUuj/X4U=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "clap": "1.2.3",
+ "source-map": "0.5.6"
+ }
},
"currently-unhandled": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz",
"integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "array-find-index": "1.0.2"
+ }
},
"custom-event": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz",
- "integrity": "sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU=",
- "dev": true
+ "integrity": "sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU="
},
"dashdash": {
"version": "1.14.1",
"resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
"integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
"dev": true,
+ "requires": {
+ "assert-plus": "1.0.0"
+ },
"dependencies": {
"assert-plus": {
"version": "1.0.0",
@@ -1228,7 +1959,10 @@
"version": "2.6.8",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz",
"integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
},
"decamelize": {
"version": "1.2.0",
@@ -1246,7 +1980,10 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-1.0.0.tgz",
"integrity": "sha1-836hXT4T/9m0N9M+GnW1+5eHTLg=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "strip-bom": "2.0.0"
+ }
},
"defined": {
"version": "1.0.0",
@@ -1258,7 +1995,16 @@
"version": "2.2.2",
"resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz",
"integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=",
- "dev": true
+ "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.1"
+ }
},
"delayed-stream": {
"version": "1.0.0",
@@ -1288,7 +2034,11 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz",
"integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3",
+ "minimalistic-assert": "1.0.0"
+ }
},
"destroy": {
"version": "1.0.4",
@@ -1300,7 +2050,10 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz",
"integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "repeating": "2.0.1"
+ }
},
"detect-node": {
"version": "2.0.3",
@@ -1324,19 +2077,44 @@
"version": "5.0.2",
"resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.2.tgz",
"integrity": "sha1-tYNXOScM/ias9jIJn97SoH8gnl4=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "bn.js": "4.11.8",
+ "miller-rabin": "4.0.1",
+ "randombytes": "2.0.5"
+ }
},
"directory-encoder": {
"version": "0.7.2",
"resolved": "https://registry.npmjs.org/directory-encoder/-/directory-encoder-0.7.2.tgz",
"integrity": "sha1-WbTiqk8lQi9sY7UntGL14tDdLFg=",
"dev": true,
+ "requires": {
+ "fs-extra": "0.23.1",
+ "handlebars": "1.3.0",
+ "img-stats": "0.5.2"
+ },
"dependencies": {
"fs-extra": {
"version": "0.23.1",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.23.1.tgz",
"integrity": "sha1-ZhHbpq3yq43Jxp+rN83fiBgVfj0=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "jsonfile": "2.4.0",
+ "path-is-absolute": "1.0.1",
+ "rimraf": "2.6.1"
+ }
+ },
+ "jsonfile": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz",
+ "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11"
+ }
}
}
},
@@ -1345,6 +2123,9 @@
"resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.1.4.tgz",
"integrity": "sha1-pF71cnuJDJv/5tfIduexnLDhfzs=",
"dev": true,
+ "requires": {
+ "utila": "0.3.3"
+ },
"dependencies": {
"utila": {
"version": "0.3.3",
@@ -1358,13 +2139,23 @@
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz",
"integrity": "sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "custom-event": "1.0.1",
+ "ent": "2.2.0",
+ "extend": "3.0.1",
+ "void-elements": "2.0.1"
+ }
},
"dom-serializer": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz",
"integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=",
"dev": true,
+ "requires": {
+ "domelementtype": "1.1.3",
+ "entities": "1.1.1"
+ },
"dependencies": {
"domelementtype": {
"version": "1.1.3",
@@ -1390,19 +2181,38 @@
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.1.0.tgz",
"integrity": "sha1-0mRvXlf2w7qxHPbLBdPArPdBJZQ=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "domelementtype": "1.3.0"
+ }
},
"domutils": {
"version": "1.5.1",
"resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz",
"integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "dom-serializer": "0.1.0",
+ "domelementtype": "1.3.0"
+ }
},
"dot-prop": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.1.1.tgz",
"integrity": "sha1-qEk/C3te7sglJbXHWH+n3nyoWcE=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "is-obj": "1.0.1"
+ }
+ },
+ "dragula": {
+ "version": "3.7.2",
+ "resolved": "https://registry.npmjs.org/dragula/-/dragula-3.7.2.tgz",
+ "integrity": "sha1-SjXJ05gf+sGpScKcpyhQWOhzk84=",
+ "requires": {
+ "contra": "1.9.4",
+ "crossvent": "1.5.4"
+ }
},
"duplexer3": {
"version": "0.1.4",
@@ -1415,7 +2225,10 @@
"resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz",
"integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=",
"dev": true,
- "optional": true
+ "optional": true,
+ "requires": {
+ "jsbn": "0.1.1"
+ }
},
"ee-first": {
"version": "1.1.1",
@@ -1424,22 +2237,346 @@
"dev": true
},
"electron-to-chromium": {
- "version": "1.3.13",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.13.tgz",
- "integrity": "sha1-GzperObgh7teJXoQCwy/6Bsokfw=",
+ "version": "1.3.27",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.27.tgz",
+ "integrity": "sha1-eOy4o5kGYYe7N07t412ccFZagD0=",
"dev": true
},
+ "elementor": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/elementor/-/elementor-2.1.0.tgz",
+ "integrity": "sha1-ELbxOHwDL+9gzFPlIRq/rim0L90=",
+ "dev": true,
+ "requires": {
+ "body-parser": "1.17.2",
+ "chalk": "1.1.3",
+ "express": "5.0.0-alpha.2",
+ "lodash": "4.17.4",
+ "minimist": "0.0.8",
+ "protractor": "4.0.14",
+ "q": "1.5.0",
+ "temp": "0.8.3"
+ },
+ "dependencies": {
+ "accepts": {
+ "version": "1.2.13",
+ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.2.13.tgz",
+ "integrity": "sha1-5fHzkoxtlf2WVYw27D2dDeSm7Oo=",
+ "dev": true,
+ "requires": {
+ "mime-types": "2.1.15",
+ "negotiator": "0.5.3"
+ }
+ },
+ "array-flatten": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.0.tgz",
+ "integrity": "sha1-rD76xxew57vcd4zgvec4GsZgQ5M=",
+ "dev": true
+ },
+ "content-disposition": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.0.tgz",
+ "integrity": "sha1-QoT+auBjCHRjnkToCkGMKTQTXp4=",
+ "dev": true
+ },
+ "cookie": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.1.3.tgz",
+ "integrity": "sha1-5zSlwUF/zkctWu+Cw4HKu2TRpDU=",
+ "dev": true
+ },
+ "debug": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz",
+ "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=",
+ "dev": true,
+ "requires": {
+ "ms": "0.7.1"
+ }
+ },
+ "depd": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-1.0.1.tgz",
+ "integrity": "sha1-gK7GTJ1tl+ZcwqnKqTwKpqv3Oqo=",
+ "dev": true
+ },
+ "escape-html": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.2.tgz",
+ "integrity": "sha1-130y+pjjjC9BroXpJ44ODmuhAiw=",
+ "dev": true
+ },
+ "etag": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/etag/-/etag-1.7.0.tgz",
+ "integrity": "sha1-A9MLX2fdbmMtKUXTDWZScxo01dg=",
+ "dev": true
+ },
+ "express": {
+ "version": "5.0.0-alpha.2",
+ "resolved": "https://registry.npmjs.org/express/-/express-5.0.0-alpha.2.tgz",
+ "integrity": "sha1-/VQXf2V7akxFQHJ3Au3Ry6o6asU=",
+ "dev": true,
+ "requires": {
+ "accepts": "1.2.13",
+ "array-flatten": "1.1.0",
+ "content-disposition": "0.5.0",
+ "content-type": "1.0.2",
+ "cookie": "0.1.3",
+ "cookie-signature": "1.0.6",
+ "debug": "2.2.0",
+ "depd": "1.0.1",
+ "escape-html": "1.0.2",
+ "etag": "1.7.0",
+ "finalhandler": "0.4.0",
+ "fresh": "0.3.0",
+ "merge-descriptors": "1.0.0",
+ "methods": "1.1.2",
+ "on-finished": "2.3.0",
+ "parseurl": "1.3.1",
+ "path-is-absolute": "1.0.0",
+ "path-to-regexp": "0.1.6",
+ "proxy-addr": "1.0.10",
+ "qs": "4.0.0",
+ "range-parser": "1.0.3",
+ "router": "1.1.5",
+ "send": "0.13.0",
+ "serve-static": "1.10.3",
+ "type-is": "1.6.15",
+ "utils-merge": "1.0.0",
+ "vary": "1.0.1"
+ }
+ },
+ "finalhandler": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-0.4.0.tgz",
+ "integrity": "sha1-llpS2ejQXSuFdUhUH7ibU6JJfZs=",
+ "dev": true,
+ "requires": {
+ "debug": "2.2.0",
+ "escape-html": "1.0.2",
+ "on-finished": "2.3.0",
+ "unpipe": "1.0.0"
+ }
+ },
+ "fresh": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.3.0.tgz",
+ "integrity": "sha1-ZR+DjiJCTnVm3hYdg1jKoZn4PU8=",
+ "dev": true
+ },
+ "http-errors": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.3.1.tgz",
+ "integrity": "sha1-GX4izevUGYWF6GlO9nhhl7ke2UI=",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3",
+ "statuses": "1.2.1"
+ }
+ },
+ "ipaddr.js": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.0.5.tgz",
+ "integrity": "sha1-X6eM8wG4JceKvDBC2BJyMEnqI8c=",
+ "dev": true
+ },
+ "merge-descriptors": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.0.tgz",
+ "integrity": "sha1-IWnPdTjhsMyH+4jhUC2EdLv3mGQ=",
+ "dev": true
+ },
+ "mime": {
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.3.4.tgz",
+ "integrity": "sha1-EV+eO2s9rylZmDyzjxSaLUDrXVM=",
+ "dev": true
+ },
+ "ms": {
+ "version": "0.7.1",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz",
+ "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=",
+ "dev": true
+ },
+ "negotiator": {
+ "version": "0.5.3",
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.5.3.tgz",
+ "integrity": "sha1-Jp1cR2gQ7JLtvntsLygxY4T5p+g=",
+ "dev": true
+ },
+ "path-is-absolute": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.0.tgz",
+ "integrity": "sha1-Jj2tpmqz8vsQv3+dJN2PPlcO+RI=",
+ "dev": true
+ },
+ "path-to-regexp": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.6.tgz",
+ "integrity": "sha1-8B/Vc0BHtr+8XyCMYTWjPXrwnDY=",
+ "dev": true
+ },
+ "protractor": {
+ "version": "4.0.14",
+ "resolved": "https://registry.npmjs.org/protractor/-/protractor-4.0.14.tgz",
+ "integrity": "sha1-78Sod/rDoYKp3e0mzVhp9HYv0XI=",
+ "dev": true,
+ "requires": {
+ "@types/jasmine": "2.5.38",
+ "@types/node": "6.0.78",
+ "@types/q": "0.0.32",
+ "@types/selenium-webdriver": "2.53.37",
+ "adm-zip": "0.4.7",
+ "chalk": "1.1.3",
+ "glob": "7.1.2",
+ "jasmine": "2.4.1",
+ "jasminewd2": "0.0.10",
+ "optimist": "0.6.1",
+ "q": "1.4.1",
+ "saucelabs": "1.3.0",
+ "selenium-webdriver": "2.53.3",
+ "source-map-support": "0.4.15",
+ "webdriver-manager": "10.3.0"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+ "dev": true
+ },
+ "q": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/q/-/q-1.4.1.tgz",
+ "integrity": "sha1-VXBbzZPF82c1MMLCy8DCs63cKG4=",
+ "dev": true
+ },
+ "webdriver-manager": {
+ "version": "10.3.0",
+ "resolved": "https://registry.npmjs.org/webdriver-manager/-/webdriver-manager-10.3.0.tgz",
+ "integrity": "sha1-mTFFiKCx2+aIxEHXQojGyxh1+os=",
+ "dev": true,
+ "requires": {
+ "adm-zip": "0.4.7",
+ "chalk": "1.1.3",
+ "del": "2.2.2",
+ "glob": "7.1.2",
+ "ini": "1.3.4",
+ "minimist": "1.2.0",
+ "q": "1.4.1",
+ "request": "2.81.0",
+ "rimraf": "2.6.1",
+ "semver": "5.3.0"
+ }
+ }
+ }
+ },
+ "proxy-addr": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-1.0.10.tgz",
+ "integrity": "sha1-DUCoL4Afw1VWfS7LZe/j8HfxIcU=",
+ "dev": true,
+ "requires": {
+ "forwarded": "0.1.0",
+ "ipaddr.js": "1.0.5"
+ }
+ },
+ "qs": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-4.0.0.tgz",
+ "integrity": "sha1-wx2bdOwn33XlQ6hseHKO2NRiNgc=",
+ "dev": true
+ },
+ "range-parser": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.0.3.tgz",
+ "integrity": "sha1-aHKCNTXGkuLCoBA4Jq/YLC4P8XU=",
+ "dev": true
+ },
+ "serve-static": {
+ "version": "1.10.3",
+ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.10.3.tgz",
+ "integrity": "sha1-zlpuzTEB/tXsCYJ9rCKpwpv7BTU=",
+ "dev": true,
+ "requires": {
+ "escape-html": "1.0.3",
+ "parseurl": "1.3.1",
+ "send": "0.13.2"
+ },
+ "dependencies": {
+ "depd": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz",
+ "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=",
+ "dev": true
+ },
+ "escape-html": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
+ "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=",
+ "dev": true
+ },
+ "send": {
+ "version": "0.13.2",
+ "resolved": "https://registry.npmjs.org/send/-/send-0.13.2.tgz",
+ "integrity": "sha1-dl52B8gFVFK7pvCwUllTUJhgNt4=",
+ "dev": true,
+ "requires": {
+ "debug": "2.2.0",
+ "depd": "1.1.1",
+ "destroy": "1.0.4",
+ "escape-html": "1.0.3",
+ "etag": "1.7.0",
+ "fresh": "0.3.0",
+ "http-errors": "1.3.1",
+ "mime": "1.3.4",
+ "ms": "0.7.1",
+ "on-finished": "2.3.0",
+ "range-parser": "1.0.3",
+ "statuses": "1.2.1"
+ }
+ }
+ }
+ },
+ "statuses": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.2.1.tgz",
+ "integrity": "sha1-3e1FzBglbVHtQK7BQkidXGECbSg=",
+ "dev": true
+ },
+ "vary": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/vary/-/vary-1.0.1.tgz",
+ "integrity": "sha1-meSYFWaihhGN+yuBc1ffeZM3bRA=",
+ "dev": true
+ }
+ }
+ },
"elliptic": {
"version": "6.4.0",
"resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz",
"integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=",
- "dev": true
+ "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.0",
+ "minimalistic-crypto-utils": "1.0.1"
+ }
},
"ember-cli-normalize-entity-name": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/ember-cli-normalize-entity-name/-/ember-cli-normalize-entity-name-1.0.0.tgz",
"integrity": "sha1-CxT3vLxZmqEXtf3cgeT9A8S61bc=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "silent-error": "1.1.0"
+ }
},
"ember-cli-string-utils": {
"version": "1.1.0",
@@ -1464,12 +2601,23 @@
"resolved": "https://registry.npmjs.org/engine.io/-/engine.io-1.8.2.tgz",
"integrity": "sha1-a1m+cws0jAElsKRYneHDVavPen4=",
"dev": true,
+ "requires": {
+ "accepts": "1.3.3",
+ "base64id": "1.0.0",
+ "cookie": "0.3.1",
+ "debug": "2.3.3",
+ "engine.io-parser": "1.3.2",
+ "ws": "1.1.1"
+ },
"dependencies": {
"debug": {
"version": "2.3.3",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz",
"integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "ms": "0.7.2"
+ }
},
"ms": {
"version": "0.7.2",
@@ -1484,6 +2632,20 @@
"resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-1.8.2.tgz",
"integrity": "sha1-w4dnVH8qfRhPV1L28K1QEAZwN2Y=",
"dev": true,
+ "requires": {
+ "component-emitter": "1.2.1",
+ "component-inherit": "0.0.3",
+ "debug": "2.3.3",
+ "engine.io-parser": "1.3.2",
+ "has-cors": "1.1.0",
+ "indexof": "0.0.1",
+ "parsejson": "0.0.3",
+ "parseqs": "0.0.5",
+ "parseuri": "0.0.5",
+ "ws": "1.1.1",
+ "xmlhttprequest-ssl": "1.5.3",
+ "yeast": "0.1.2"
+ },
"dependencies": {
"component-emitter": {
"version": "1.2.1",
@@ -1495,7 +2657,10 @@
"version": "2.3.3",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz",
"integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "ms": "0.7.2"
+ }
},
"ms": {
"version": "0.7.2",
@@ -1509,13 +2674,27 @@
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-1.3.2.tgz",
"integrity": "sha1-k3sHnwAH0Ik+xW1GyyILjLQ1Igo=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "after": "0.8.2",
+ "arraybuffer.slice": "0.0.6",
+ "base64-arraybuffer": "0.1.5",
+ "blob": "0.0.4",
+ "has-binary": "0.1.7",
+ "wtf-8": "1.0.0"
+ }
},
"enhanced-resolve": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-3.1.0.tgz",
- "integrity": "sha1-n0tib1dyRe3PSyrYPYbhf09CHew=",
- "dev": true
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-3.3.0.tgz",
+ "integrity": "sha1-lQlk7MfwMypCMhtnOzjcj/FVNbM=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "memory-fs": "0.4.1",
+ "object-assign": "4.1.1",
+ "tapable": "0.2.8"
+ }
},
"ensure-posix-path": {
"version": "1.0.2",
@@ -1539,12 +2718,24 @@
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/errno/-/errno-0.1.4.tgz",
"integrity": "sha1-uJbiOp5ei6M4cfyZar02NfyaHH0=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "prr": "0.0.0"
+ }
},
"error-ex": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz",
"integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=",
+ "dev": true,
+ "requires": {
+ "is-arrayish": "0.2.1"
+ }
+ },
+ "es6-promise": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.0.2.tgz",
+ "integrity": "sha1-AQ1YWEI6XxGJeWZfRkhqlcbuK7Y=",
"dev": true
},
"escape-html": {
@@ -1593,19 +2784,42 @@
"version": "0.1.6",
"resolved": "https://registry.npmjs.org/eventsource/-/eventsource-0.1.6.tgz",
"integrity": "sha1-Cs7ehJ7X3RzMMsgRuxG5RNTykjI=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "original": "1.0.0"
+ }
},
"evp_bytestokey": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.0.tgz",
- "integrity": "sha1-SXtmrZ/vZc18CKYYCCS6FHa2blM=",
- "dev": true
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz",
+ "integrity": "sha1-f8vbGY3HGVlDLv4ThCaE4FJaywI=",
+ "dev": true,
+ "requires": {
+ "md5.js": "1.3.4",
+ "safe-buffer": "5.1.1"
+ },
+ "dependencies": {
+ "safe-buffer": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
+ "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==",
+ "dev": true
+ }
+ }
},
"execa": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/execa/-/execa-0.4.0.tgz",
"integrity": "sha1-TrZGejaglfq7KXD/nV4/t7zm68M=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "cross-spawn-async": "2.2.5",
+ "is-stream": "1.1.0",
+ "npm-run-path": "1.0.0",
+ "object-assign": "4.1.1",
+ "path-key": "1.0.0",
+ "strip-eof": "1.0.0"
+ }
},
"exit": {
"version": "0.1.2",
@@ -1618,18 +2832,30 @@
"resolved": "https://registry.npmjs.org/expand-braces/-/expand-braces-0.1.2.tgz",
"integrity": "sha1-SIsdHSRRyz06axks/AMPRMWFX+o=",
"dev": true,
+ "requires": {
+ "array-slice": "0.2.3",
+ "array-unique": "0.2.1",
+ "braces": "0.1.5"
+ },
"dependencies": {
"braces": {
"version": "0.1.5",
"resolved": "https://registry.npmjs.org/braces/-/braces-0.1.5.tgz",
"integrity": "sha1-wIVxEIUpHYt1/ddOqw+FlygHEeY=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "expand-range": "0.1.1"
+ }
},
"expand-range": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/expand-range/-/expand-range-0.1.1.tgz",
"integrity": "sha1-TLjtoJk8pW+k9B/ELzy7TMrf8EQ=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "is-number": "0.1.1",
+ "repeat-string": "0.2.2"
+ }
},
"is-number": {
"version": "0.1.1",
@@ -1649,31 +2875,107 @@
"version": "0.1.5",
"resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz",
"integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=",
- "dev": true
+ "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
+ "dev": true,
+ "requires": {
+ "fill-range": "2.2.3"
+ }
},
"exports-loader": {
"version": "0.6.4",
"resolved": "https://registry.npmjs.org/exports-loader/-/exports-loader-0.6.4.tgz",
"integrity": "sha1-1w/GEhl1s1/BKDDPUnVL4nQPyIY=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "loader-utils": "1.1.0",
+ "source-map": "0.5.6"
+ }
},
"express": {
- "version": "4.15.3",
- "resolved": "https://registry.npmjs.org/express/-/express-4.15.3.tgz",
- "integrity": "sha1-urZdDwOqgMNYQIly/HAPkWlEtmI=",
+ "version": "4.15.2",
+ "resolved": "https://registry.npmjs.org/express/-/express-4.15.2.tgz",
+ "integrity": "sha1-rxB/wUhQRFfy3Kmm8lcdcSm5ezU=",
"dev": true,
+ "requires": {
+ "accepts": "1.3.3",
+ "array-flatten": "1.1.1",
+ "content-disposition": "0.5.2",
+ "content-type": "1.0.2",
+ "cookie": "0.3.1",
+ "cookie-signature": "1.0.6",
+ "debug": "2.6.1",
+ "depd": "1.1.0",
+ "encodeurl": "1.0.1",
+ "escape-html": "1.0.3",
+ "etag": "1.8.0",
+ "finalhandler": "1.0.3",
+ "fresh": "0.5.0",
+ "merge-descriptors": "1.0.1",
+ "methods": "1.1.2",
+ "on-finished": "2.3.0",
+ "parseurl": "1.3.1",
+ "path-to-regexp": "0.1.7",
+ "proxy-addr": "1.1.4",
+ "qs": "6.4.0",
+ "range-parser": "1.2.0",
+ "send": "0.15.1",
+ "serve-static": "1.12.1",
+ "setprototypeof": "1.0.3",
+ "statuses": "1.3.1",
+ "type-is": "1.6.15",
+ "utils-merge": "1.0.0",
+ "vary": "1.1.1"
+ },
"dependencies": {
"debug": {
- "version": "2.6.7",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.7.tgz",
- "integrity": "sha1-krrR9tBbu2u6Isyoi80OyJTChh4=",
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.1.tgz",
+ "integrity": "sha1-eYVQkLosTjEVzH2HaUkdWPBJE1E=",
+ "dev": true,
+ "requires": {
+ "ms": "0.7.2"
+ }
+ },
+ "mime": {
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.3.4.tgz",
+ "integrity": "sha1-EV+eO2s9rylZmDyzjxSaLUDrXVM=",
"dev": true
+ },
+ "ms": {
+ "version": "0.7.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz",
+ "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=",
+ "dev": true
+ },
+ "send": {
+ "version": "0.15.1",
+ "resolved": "https://registry.npmjs.org/send/-/send-0.15.1.tgz",
+ "integrity": "sha1-igI1TCbm9cynAAZfXwzeupDse18=",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.1",
+ "depd": "1.1.0",
+ "destroy": "1.0.4",
+ "encodeurl": "1.0.1",
+ "escape-html": "1.0.3",
+ "etag": "1.8.0",
+ "fresh": "0.5.0",
+ "http-errors": "1.6.1",
+ "mime": "1.3.4",
+ "ms": "0.7.2",
+ "on-finished": "2.3.0",
+ "range-parser": "1.2.0",
+ "statuses": "1.3.1"
+ }
}
}
},
@@ -1684,22 +2986,47 @@
"dev": true
},
"external-editor": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.0.4.tgz",
- "integrity": "sha1-HtkZnanL/i7y96MbL96LDRI2iXI=",
- "dev": true
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.1.0.tgz",
+ "integrity": "sha1-PQJqIbf5W1cmOH1CAKwWDTcsO0g=",
+ "dev": true,
+ "requires": {
+ "chardet": "0.4.2",
+ "iconv-lite": "0.4.19",
+ "tmp": "0.0.33"
+ },
+ "dependencies": {
+ "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"
+ }
+ }
+ }
},
"extglob": {
"version": "0.3.2",
"resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz",
"integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "is-extglob": "1.0.0"
+ }
},
"extract-text-webpack-plugin": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/extract-text-webpack-plugin/-/extract-text-webpack-plugin-2.0.0.tgz",
- "integrity": "sha1-hkD3JgmACjUo8ToqljTVZqXBrmA=",
- "dev": true
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/extract-text-webpack-plugin/-/extract-text-webpack-plugin-2.1.2.tgz",
+ "integrity": "sha1-dW7076gVXDaBgz+8NNpTuUF0bWw=",
+ "dev": true,
+ "requires": {
+ "async": "2.4.1",
+ "loader-utils": "1.1.0",
+ "schema-utils": "0.3.0",
+ "webpack-sources": "1.1.0"
+ }
},
"extsprintf": {
"version": "1.0.2",
@@ -1707,6 +3034,18 @@
"integrity": "sha1-4QgOBljjALBilJkMxw4VAiNf1VA=",
"dev": true
},
+ "fast-deep-equal": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz",
+ "integrity": "sha1-liVqO8l1WV6zbYLpkp0GDYk0Of8=",
+ "dev": true
+ },
+ "fast-json-stable-stringify": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
+ "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=",
+ "dev": true
+ },
"fastparse": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.1.tgz",
@@ -1717,19 +3056,28 @@
"version": "0.10.0",
"resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz",
"integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "websocket-driver": "0.7.0"
+ }
},
"figures": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz",
"integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "escape-string-regexp": "1.0.5"
+ }
},
"file-loader": {
"version": "0.10.1",
"resolved": "https://registry.npmjs.org/file-loader/-/file-loader-0.10.1.tgz",
"integrity": "sha1-gVA0EZiR/GRB+1pkwRvJPCLd2EI=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "loader-utils": "1.1.0"
+ }
},
"filename-regex": {
"version": "2.0.1",
@@ -1741,25 +3089,48 @@
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/fileset/-/fileset-2.0.3.tgz",
"integrity": "sha1-jnVIqW08wjJ+5eZ0FocjozO7oqA=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "glob": "7.1.2",
+ "minimatch": "3.0.4"
+ }
},
"fill-range": {
"version": "2.2.3",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz",
"integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "is-number": "2.1.0",
+ "isobject": "2.1.0",
+ "randomatic": "1.1.6",
+ "repeat-element": "1.1.2",
+ "repeat-string": "1.6.1"
+ }
},
"finalhandler": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.0.3.tgz",
"integrity": "sha1-70fneVDpmXgOhgIqVg4yF+DQzIk=",
"dev": true,
+ "requires": {
+ "debug": "2.6.7",
+ "encodeurl": "1.0.1",
+ "escape-html": "1.0.3",
+ "on-finished": "2.3.0",
+ "parseurl": "1.3.1",
+ "statuses": "1.3.1",
+ "unpipe": "1.0.0"
+ },
"dependencies": {
"debug": {
"version": "2.6.7",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.7.tgz",
"integrity": "sha1-krrR9tBbu2u6Isyoi80OyJTChh4=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
}
}
},
@@ -1767,19 +3138,33 @@
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
"integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "path-exists": "2.1.0",
+ "pinkie-promise": "2.0.1"
+ }
},
"findup-sync": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.3.0.tgz",
"integrity": "sha1-N5MKpdgWt3fANEXhlmzGeQpMCxY=",
"dev": true,
+ "requires": {
+ "glob": "5.0.15"
+ },
"dependencies": {
"glob": {
"version": "5.0.15",
"resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz",
"integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.1"
+ }
}
}
},
@@ -1804,7 +3189,10 @@
"version": "0.1.5",
"resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz",
"integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "for-in": "1.0.2"
+ }
},
"forever-agent": {
"version": "0.6.1",
@@ -1816,7 +3204,12 @@
"version": "2.1.4",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz",
"integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "asynckit": "0.4.0",
+ "combined-stream": "1.0.5",
+ "mime-types": "2.1.15"
+ }
},
"forwarded": {
"version": "0.1.0",
@@ -1834,13 +3227,21 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/fs-access/-/fs-access-1.0.1.tgz",
"integrity": "sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "null-check": "1.0.0"
+ }
},
"fs-extra": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-2.1.2.tgz",
- "integrity": "sha1-BGxwFjzvmq1GsOSn+kZ/si1x3jU=",
- "dev": true
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.2.tgz",
+ "integrity": "sha1-+RcExT0bRh+JNFKwwwfZmXZHq2s=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "jsonfile": "4.0.0",
+ "universalify": "0.1.1"
+ }
},
"fs.realpath": {
"version": "1.0.0",
@@ -1854,6 +3255,10 @@
"integrity": "sha1-8Z/Sj0Pur3YWgOUZogPE0LPTGv8=",
"dev": true,
"optional": true,
+ "requires": {
+ "nan": "2.6.2",
+ "node-pre-gyp": "0.6.33"
+ },
"dependencies": {
"abbrev": {
"version": "1.1.0",
@@ -1882,7 +3287,11 @@
"version": "1.1.2",
"bundled": true,
"dev": true,
- "optional": true
+ "optional": true,
+ "requires": {
+ "delegates": "1.0.0",
+ "readable-stream": "2.2.2"
+ }
},
"asn1": {
"version": "0.2.3",
@@ -1923,22 +3332,35 @@
"version": "1.0.1",
"bundled": true,
"dev": true,
- "optional": true
+ "optional": true,
+ "requires": {
+ "tweetnacl": "0.14.5"
+ }
},
"block-stream": {
"version": "0.0.9",
"bundled": true,
- "dev": true
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3"
+ }
},
"boom": {
"version": "2.10.1",
"bundled": true,
- "dev": true
+ "dev": true,
+ "requires": {
+ "hoek": "2.16.3"
+ }
},
"brace-expansion": {
"version": "1.1.6",
"bundled": true,
- "dev": true
+ "dev": true,
+ "requires": {
+ "balanced-match": "0.4.2",
+ "concat-map": "0.0.1"
+ }
},
"buffer-shims": {
"version": "1.0.0",
@@ -1955,7 +3377,14 @@
"version": "1.1.3",
"bundled": true,
"dev": true,
- "optional": true
+ "optional": 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"
+ }
},
"code-point-at": {
"version": "1.1.0",
@@ -1965,13 +3394,19 @@
"combined-stream": {
"version": "1.0.5",
"bundled": true,
- "dev": true
+ "dev": true,
+ "requires": {
+ "delayed-stream": "1.0.0"
+ }
},
"commander": {
"version": "2.9.0",
"bundled": true,
"dev": true,
- "optional": true
+ "optional": true,
+ "requires": {
+ "graceful-readlink": "1.0.1"
+ }
},
"concat-map": {
"version": "0.0.1",
@@ -1992,13 +3427,19 @@
"version": "2.0.5",
"bundled": true,
"dev": true,
- "optional": true
+ "optional": 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",
@@ -2012,7 +3453,10 @@
"version": "2.2.0",
"bundled": true,
"dev": true,
- "optional": true
+ "optional": true,
+ "requires": {
+ "ms": "0.7.1"
+ }
},
"deep-extend": {
"version": "0.4.1",
@@ -2035,7 +3479,10 @@
"version": "0.1.1",
"bundled": true,
"dev": true,
- "optional": true
+ "optional": true,
+ "requires": {
+ "jsbn": "0.1.1"
+ }
},
"escape-string-regexp": {
"version": "1.0.5",
@@ -2064,7 +3511,12 @@
"version": "2.1.2",
"bundled": true,
"dev": true,
- "optional": true
+ "optional": true,
+ "requires": {
+ "asynckit": "0.4.0",
+ "combined-stream": "1.0.5",
+ "mime-types": "2.1.14"
+ }
},
"fs.realpath": {
"version": "1.0.0",
@@ -2074,19 +3526,40 @@
"fstream": {
"version": "1.0.10",
"bundled": true,
- "dev": true
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "inherits": "2.0.3",
+ "mkdirp": "0.5.1",
+ "rimraf": "2.5.4"
+ }
},
"fstream-ignore": {
"version": "1.0.5",
"bundled": true,
"dev": true,
- "optional": true
+ "optional": true,
+ "requires": {
+ "fstream": "1.0.10",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.3"
+ }
},
"gauge": {
"version": "2.7.3",
"bundled": true,
"dev": true,
- "optional": 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.0"
+ }
},
"generate-function": {
"version": "2.0.0",
@@ -2098,13 +3571,19 @@
"version": "1.2.0",
"bundled": true,
"dev": true,
- "optional": true
+ "optional": true,
+ "requires": {
+ "is-property": "1.0.2"
+ }
},
"getpass": {
"version": "0.1.6",
"bundled": true,
"dev": true,
"optional": true,
+ "requires": {
+ "assert-plus": "1.0.0"
+ },
"dependencies": {
"assert-plus": {
"version": "1.0.0",
@@ -2117,7 +3596,15 @@
"glob": {
"version": "7.1.1",
"bundled": true,
- "dev": true
+ "dev": true,
+ "requires": {
+ "fs.realpath": "1.0.0",
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.3",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.1"
+ }
},
"graceful-fs": {
"version": "4.1.11",
@@ -2134,13 +3621,22 @@
"version": "2.0.6",
"bundled": true,
"dev": true,
- "optional": true
+ "optional": true,
+ "requires": {
+ "chalk": "1.1.3",
+ "commander": "2.9.0",
+ "is-my-json-valid": "2.15.0",
+ "pinkie-promise": "2.0.1"
+ }
},
"has-ansi": {
"version": "2.0.0",
"bundled": true,
"dev": true,
- "optional": true
+ "optional": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
},
"has-unicode": {
"version": "2.0.1",
@@ -2152,7 +3648,13 @@
"version": "3.1.3",
"bundled": true,
"dev": true,
- "optional": true
+ "optional": true,
+ "requires": {
+ "boom": "2.10.1",
+ "cryptiles": "2.0.5",
+ "hoek": "2.16.3",
+ "sntp": "1.0.9"
+ }
},
"hoek": {
"version": "2.16.3",
@@ -2163,12 +3665,21 @@
"version": "1.1.1",
"bundled": true,
"dev": true,
- "optional": true
+ "optional": true,
+ "requires": {
+ "assert-plus": "0.2.0",
+ "jsprim": "1.3.1",
+ "sshpk": "1.10.2"
+ }
},
"inflight": {
"version": "1.0.6",
"bundled": true,
- "dev": true
+ "dev": true,
+ "requires": {
+ "once": "1.4.0",
+ "wrappy": "1.0.2"
+ }
},
"inherits": {
"version": "2.0.3",
@@ -2184,13 +3695,22 @@
"is-fullwidth-code-point": {
"version": "1.0.0",
"bundled": true,
- "dev": true
+ "dev": true,
+ "requires": {
+ "number-is-nan": "1.0.1"
+ }
},
"is-my-json-valid": {
"version": "2.15.0",
"bundled": true,
"dev": true,
- "optional": true
+ "optional": true,
+ "requires": {
+ "generate-function": "2.0.0",
+ "generate-object-property": "1.2.0",
+ "jsonpointer": "4.0.1",
+ "xtend": "4.0.1"
+ }
},
"is-property": {
"version": "1.0.2",
@@ -2219,7 +3739,10 @@
"version": "1.0.2",
"bundled": true,
"dev": true,
- "optional": true
+ "optional": true,
+ "requires": {
+ "jsbn": "0.1.1"
+ }
},
"jsbn": {
"version": "0.1.1",
@@ -2249,7 +3772,12 @@
"version": "1.3.1",
"bundled": true,
"dev": true,
- "optional": true
+ "optional": true,
+ "requires": {
+ "extsprintf": "1.0.2",
+ "json-schema": "0.2.3",
+ "verror": "1.3.6"
+ }
},
"mime-db": {
"version": "1.26.0",
@@ -2259,12 +3787,18 @@
"mime-types": {
"version": "2.1.14",
"bundled": true,
- "dev": true
+ "dev": true,
+ "requires": {
+ "mime-db": "1.26.0"
+ }
},
"minimatch": {
"version": "3.0.3",
"bundled": true,
- "dev": true
+ "dev": true,
+ "requires": {
+ "brace-expansion": "1.1.6"
+ }
},
"minimist": {
"version": "0.0.8",
@@ -2274,7 +3808,10 @@
"mkdirp": {
"version": "0.5.1",
"bundled": true,
- "dev": true
+ "dev": true,
+ "requires": {
+ "minimist": "0.0.8"
+ }
},
"ms": {
"version": "0.7.1",
@@ -2286,19 +3823,39 @@
"version": "0.6.33",
"bundled": true,
"dev": true,
- "optional": true
+ "optional": true,
+ "requires": {
+ "mkdirp": "0.5.1",
+ "nopt": "3.0.6",
+ "npmlog": "4.0.2",
+ "rc": "1.1.7",
+ "request": "2.79.0",
+ "rimraf": "2.5.4",
+ "semver": "5.3.0",
+ "tar": "2.2.1",
+ "tar-pack": "3.3.0"
+ }
},
"nopt": {
"version": "3.0.6",
"bundled": true,
"dev": true,
- "optional": true
+ "optional": true,
+ "requires": {
+ "abbrev": "1.1.0"
+ }
},
"npmlog": {
"version": "4.0.2",
"bundled": true,
"dev": true,
- "optional": 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",
@@ -2320,7 +3877,10 @@
"once": {
"version": "1.4.0",
"bundled": true,
- "dev": true
+ "dev": true,
+ "requires": {
+ "wrappy": "1.0.2"
+ }
},
"path-is-absolute": {
"version": "1.0.1",
@@ -2337,7 +3897,10 @@
"version": "2.0.1",
"bundled": true,
"dev": true,
- "optional": true
+ "optional": true,
+ "requires": {
+ "pinkie": "2.0.4"
+ }
},
"process-nextick-args": {
"version": "1.0.7",
@@ -2361,6 +3924,12 @@
"bundled": true,
"dev": true,
"optional": true,
+ "requires": {
+ "deep-extend": "0.4.1",
+ "ini": "1.3.4",
+ "minimist": "1.2.0",
+ "strip-json-comments": "2.0.1"
+ },
"dependencies": {
"minimist": {
"version": "1.2.0",
@@ -2374,18 +3943,52 @@
"version": "2.2.2",
"bundled": true,
"dev": true,
- "optional": true
+ "optional": 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": "0.10.31",
+ "util-deprecate": "1.0.2"
+ }
},
"request": {
"version": "2.79.0",
"bundled": true,
"dev": true,
- "optional": true
+ "optional": true,
+ "requires": {
+ "aws-sign2": "0.6.0",
+ "aws4": "1.6.0",
+ "caseless": "0.11.0",
+ "combined-stream": "1.0.5",
+ "extend": "3.0.0",
+ "forever-agent": "0.6.1",
+ "form-data": "2.1.2",
+ "har-validator": "2.0.6",
+ "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.14",
+ "oauth-sign": "0.8.2",
+ "qs": "6.3.1",
+ "stringstream": "0.0.5",
+ "tough-cookie": "2.3.2",
+ "tunnel-agent": "0.4.3",
+ "uuid": "3.0.1"
+ }
},
"rimraf": {
"version": "2.5.4",
"bundled": true,
- "dev": true
+ "dev": true,
+ "requires": {
+ "glob": "7.1.1"
+ }
},
"semver": {
"version": "5.3.0",
@@ -2409,13 +4012,27 @@
"version": "1.0.9",
"bundled": true,
"dev": true,
- "optional": true
+ "optional": true,
+ "requires": {
+ "hoek": "2.16.3"
+ }
},
"sshpk": {
"version": "1.10.2",
"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.6",
+ "jodid25519": "1.0.2",
+ "jsbn": "0.1.1",
+ "tweetnacl": "0.14.5"
+ },
"dependencies": {
"assert-plus": {
"version": "1.0.0",
@@ -2428,7 +4045,12 @@
"string-width": {
"version": "1.0.2",
"bundled": true,
- "dev": true
+ "dev": true,
+ "requires": {
+ "code-point-at": "1.1.0",
+ "is-fullwidth-code-point": "1.0.0",
+ "strip-ansi": "3.0.1"
+ }
},
"string_decoder": {
"version": "0.10.31",
@@ -2444,7 +4066,10 @@
"strip-ansi": {
"version": "3.0.1",
"bundled": true,
- "dev": true
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
},
"strip-json-comments": {
"version": "2.0.1",
@@ -2461,25 +4086,52 @@
"tar": {
"version": "2.2.1",
"bundled": true,
- "dev": true
+ "dev": true,
+ "requires": {
+ "block-stream": "0.0.9",
+ "fstream": "1.0.10",
+ "inherits": "2.0.3"
+ }
},
"tar-pack": {
"version": "3.3.0",
"bundled": true,
"dev": true,
"optional": true,
+ "requires": {
+ "debug": "2.2.0",
+ "fstream": "1.0.10",
+ "fstream-ignore": "1.0.5",
+ "once": "1.3.3",
+ "readable-stream": "2.1.5",
+ "rimraf": "2.5.4",
+ "tar": "2.2.1",
+ "uid-number": "0.0.6"
+ },
"dependencies": {
"once": {
"version": "1.3.3",
"bundled": true,
"dev": true,
- "optional": true
+ "optional": true,
+ "requires": {
+ "wrappy": "1.0.2"
+ }
},
"readable-stream": {
"version": "2.1.5",
"bundled": true,
"dev": true,
- "optional": true
+ "optional": 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": "0.10.31",
+ "util-deprecate": "1.0.2"
+ }
}
}
},
@@ -2487,7 +4139,10 @@
"version": "2.3.2",
"bundled": true,
"dev": true,
- "optional": true
+ "optional": true,
+ "requires": {
+ "punycode": "1.4.1"
+ }
},
"tunnel-agent": {
"version": "0.4.3",
@@ -2522,13 +4177,19 @@
"version": "1.3.6",
"bundled": true,
"dev": true,
- "optional": true
+ "optional": true,
+ "requires": {
+ "extsprintf": "1.0.2"
+ }
},
"wide-align": {
"version": "1.1.0",
"bundled": true,
"dev": true,
- "optional": true
+ "optional": true,
+ "requires": {
+ "string-width": "1.0.2"
+ }
},
"wrappy": {
"version": "1.0.2",
@@ -2547,12 +4208,18 @@
"version": "1.0.11",
"resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz",
"integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "inherits": "2.0.3",
+ "mkdirp": "0.5.1",
+ "rimraf": "2.6.1"
+ }
},
"function-bind": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.0.tgz",
- "integrity": "sha1-FhdnFMgBeY5Ojyz391KUZ7tKV3E=",
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha1-pWiZ0+o8m6uHS7l3O3xe3pL0iV0=",
"dev": true
},
"gauge": {
@@ -2560,18 +4227,36 @@
"resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
"integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
"dev": true,
+ "requires": {
+ "aproba": "1.1.2",
+ "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"
+ },
"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
+ "dev": true,
+ "requires": {
+ "number-is-nan": "1.0.1"
+ }
},
"string-width": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
"integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "code-point-at": "1.1.0",
+ "is-fullwidth-code-point": "1.0.0",
+ "strip-ansi": "3.0.1"
+ }
}
}
},
@@ -2579,7 +4264,10 @@
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.2.tgz",
"integrity": "sha1-hHIkZ3rbiHDWeSV+0ziP22HkAQU=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "globule": "1.1.0"
+ }
},
"get-caller-file": {
"version": "1.0.2",
@@ -2604,6 +4292,9 @@
"resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
"integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
"dev": true,
+ "requires": {
+ "assert-plus": "1.0.0"
+ },
"dependencies": {
"assert-plus": {
"version": "1.0.0",
@@ -2616,38 +4307,66 @@
"glob": {
"version": "7.1.2",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
- "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
- "dev": true
+ "integrity": "sha1-wZyd+aAocC1nhhI4SmVSQExjbRU=",
+ "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"
+ }
},
"glob-base": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz",
"integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "glob-parent": "2.0.0",
+ "is-glob": "2.0.1"
+ }
},
"glob-parent": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz",
"integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "is-glob": "2.0.1"
+ }
},
"globals": {
"version": "9.18.0",
"resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz",
- "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==",
+ "integrity": "sha1-qjiWs+abSH8X4x7SFD1pqOMMLYo=",
"dev": true
},
"globby": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz",
"integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=",
- "dev": true
+ "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"
+ }
},
"globule": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/globule/-/globule-1.1.0.tgz",
"integrity": "sha1-xJNS5NwYPYWJPuglOF65lLtt9F8=",
"dev": true,
+ "requires": {
+ "glob": "7.1.2",
+ "lodash": "4.16.6",
+ "minimatch": "3.0.4"
+ },
"dependencies": {
"lodash": {
"version": "4.16.6",
@@ -2661,7 +4380,20 @@
"version": "6.7.1",
"resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz",
"integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "create-error-class": "3.0.2",
+ "duplexer3": "0.1.4",
+ "get-stream": "3.0.0",
+ "is-redirect": "1.0.0",
+ "is-retry-allowed": "1.1.0",
+ "is-stream": "1.1.0",
+ "lowercase-keys": "1.0.0",
+ "safe-buffer": "5.0.1",
+ "timed-out": "4.0.1",
+ "unzip-response": "2.0.1",
+ "url-parse-lax": "1.0.0"
+ }
},
"graceful-fs": {
"version": "4.1.11",
@@ -2669,12 +4401,6 @@
"integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
"dev": true
},
- "graceful-readlink": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz",
- "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=",
- "dev": true
- },
"handle-thing": {
"version": "1.2.5",
"resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-1.2.5.tgz",
@@ -2686,6 +4412,10 @@
"resolved": "https://registry.npmjs.org/handlebars/-/handlebars-1.3.0.tgz",
"integrity": "sha1-npsTCpPjiUkTItl1zz7BgYw3zjQ=",
"dev": true,
+ "requires": {
+ "optimist": "0.3.7",
+ "uglify-js": "2.3.6"
+ },
"dependencies": {
"async": {
"version": "0.2.10",
@@ -2694,19 +4424,36 @@
"dev": true,
"optional": true
},
+ "optimist": {
+ "version": "0.3.7",
+ "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.3.7.tgz",
+ "integrity": "sha1-yQlBrVnkJzMokjB00s8ufLxuwNk=",
+ "dev": true,
+ "requires": {
+ "wordwrap": "0.0.3"
+ }
+ },
"source-map": {
"version": "0.1.43",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz",
"integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=",
"dev": true,
- "optional": true
+ "optional": true,
+ "requires": {
+ "amdefine": "1.0.1"
+ }
},
"uglify-js": {
"version": "2.3.6",
"resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.3.6.tgz",
"integrity": "sha1-+gmEdwtCi3qbKoBY9GNV0U/vIRo=",
"dev": true,
- "optional": true
+ "optional": true,
+ "requires": {
+ "async": "0.2.10",
+ "optimist": "0.3.7",
+ "source-map": "0.1.43"
+ }
}
}
},
@@ -2720,25 +4467,38 @@
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz",
"integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "ajv": "4.11.8",
+ "har-schema": "1.0.5"
+ }
},
"has": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz",
"integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "function-bind": "1.1.1"
+ }
},
"has-ansi": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
"integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
},
"has-binary": {
"version": "0.1.7",
"resolved": "https://registry.npmjs.org/has-binary/-/has-binary-0.1.7.tgz",
"integrity": "sha1-aOYesWIQyVRaClzOBqhzkS/h5ow=",
"dev": true,
+ "requires": {
+ "isarray": "0.0.1"
+ },
"dependencies": {
"isarray": {
"version": "0.0.1",
@@ -2770,19 +4530,32 @@
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/hash-base/-/hash-base-2.0.2.tgz",
"integrity": "sha1-ZuodhW206KVHDK32/OI65SRO8uE=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3"
+ }
},
"hash.js": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.0.3.tgz",
- "integrity": "sha1-EzL/ABVsCg/92CNgE9B7d6BFFXM=",
- "dev": true
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz",
+ "integrity": "sha1-NA3tvmKQGHFRweodd3o0SJNd+EY=",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3",
+ "minimalistic-assert": "1.0.0"
+ }
},
"hawk": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz",
"integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "boom": "2.10.1",
+ "cryptiles": "2.0.5",
+ "hoek": "2.16.3",
+ "sntp": "1.0.9"
+ }
},
"he": {
"version": "1.1.1",
@@ -2790,11 +4563,43 @@
"integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=",
"dev": true
},
+ "heimdalljs": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/heimdalljs/-/heimdalljs-0.2.5.tgz",
+ "integrity": "sha1-aqVDCO7nk7ZCz/nPlHgURfN3MKw=",
+ "dev": true,
+ "requires": {
+ "rsvp": "3.2.1"
+ },
+ "dependencies": {
+ "rsvp": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-3.2.1.tgz",
+ "integrity": "sha1-B8tKXfJa3Z6Cbrxn3Mn9idsn2Eo=",
+ "dev": true
+ }
+ }
+ },
+ "heimdalljs-logger": {
+ "version": "0.1.9",
+ "resolved": "https://registry.npmjs.org/heimdalljs-logger/-/heimdalljs-logger-0.1.9.tgz",
+ "integrity": "sha1-12raTkW3u294b8nAEKaOsuL68XY=",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.8",
+ "heimdalljs": "0.2.5"
+ }
+ },
"hmac-drbg": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
"integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "hash.js": "1.1.3",
+ "minimalistic-assert": "1.0.0",
+ "minimalistic-crypto-utils": "1.0.1"
+ }
},
"hoek": {
"version": "2.16.3",
@@ -2812,7 +4617,13 @@
"version": "2.1.6",
"resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz",
"integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3",
+ "obuf": "1.1.1",
+ "readable-stream": "2.2.11",
+ "wbuf": "1.7.2"
+ }
},
"html-comment-regex": {
"version": "1.1.1",
@@ -2827,22 +4638,46 @@
"dev": true
},
"html-minifier": {
- "version": "3.5.2",
- "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.2.tgz",
- "integrity": "sha1-1zvD/0SJQkCIGM5gm/P7DqfvTrc=",
- "dev": true
+ "version": "3.5.7",
+ "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.7.tgz",
+ "integrity": "sha1-UR5pu1qOdnfRAS6+A4GaoCygYgg=",
+ "dev": true,
+ "requires": {
+ "camel-case": "3.0.0",
+ "clean-css": "4.1.9",
+ "commander": "2.12.2",
+ "he": "1.1.1",
+ "ncname": "1.0.0",
+ "param-case": "2.1.1",
+ "relateurl": "0.2.7",
+ "uglify-js": "3.2.0"
+ }
},
"html-webpack-plugin": {
- "version": "2.28.0",
- "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-2.28.0.tgz",
- "integrity": "sha1-LnhjtX5f1I/iYzA+L/yTTDBk0Ak=",
+ "version": "2.30.1",
+ "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-2.30.1.tgz",
+ "integrity": "sha1-f5xCG36pHsRg9WUn1430hO51N9U=",
"dev": true,
+ "requires": {
+ "bluebird": "3.5.0",
+ "html-minifier": "3.5.7",
+ "loader-utils": "0.2.17",
+ "lodash": "4.17.4",
+ "pretty-error": "2.1.1",
+ "toposort": "1.0.6"
+ },
"dependencies": {
"loader-utils": {
"version": "0.2.17",
"resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz",
"integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "big.js": "3.2.0",
+ "emojis-list": "2.1.0",
+ "json5": "0.5.1",
+ "object-assign": "4.1.1"
+ }
}
}
},
@@ -2851,12 +4686,21 @@
"resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.3.0.tgz",
"integrity": "sha1-zHDQWln2VC5D8OaFyYLhTJJKnv4=",
"dev": true,
+ "requires": {
+ "domelementtype": "1.3.0",
+ "domhandler": "2.1.0",
+ "domutils": "1.1.6",
+ "readable-stream": "1.0.34"
+ },
"dependencies": {
"domutils": {
"version": "1.1.6",
"resolved": "https://registry.npmjs.org/domutils/-/domutils-1.1.6.tgz",
"integrity": "sha1-vdw94Jm5ou+sxRxiPyj0FuzFdIU=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "domelementtype": "1.3.0"
+ }
},
"isarray": {
"version": "0.0.1",
@@ -2868,7 +4712,13 @@
"version": "1.0.34",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
"integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
- "dev": true
+ "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",
@@ -2888,19 +4738,41 @@
"version": "1.6.1",
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.1.tgz",
"integrity": "sha1-X4uO2YrKVFZWv1cplzh/kEpyIlc=",
+ "dev": true,
+ "requires": {
+ "depd": "1.1.0",
+ "inherits": "2.0.3",
+ "setprototypeof": "1.0.3",
+ "statuses": "1.3.1"
+ }
+ },
+ "http-parser-js": {
+ "version": "0.4.9",
+ "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.9.tgz",
+ "integrity": "sha1-6hoE+2St/wJC6ZdPKX3Uw8rSceE=",
"dev": true
},
"http-proxy": {
"version": "1.16.2",
"resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.16.2.tgz",
"integrity": "sha1-Bt/ykpUr9k2+hHH6nfcwZtTzd0I=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "eventemitter3": "1.2.0",
+ "requires-port": "1.0.0"
+ }
},
"http-proxy-middleware": {
"version": "0.17.4",
"resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.17.4.tgz",
"integrity": "sha1-ZC6ISIUdZvCdTxJJEoRtuutBuDM=",
"dev": true,
+ "requires": {
+ "http-proxy": "1.16.2",
+ "is-glob": "3.1.0",
+ "lodash": "4.17.4",
+ "micromatch": "2.3.11"
+ },
"dependencies": {
"is-extglob": {
"version": "2.1.1",
@@ -2912,7 +4784,10 @@
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
"integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "is-extglob": "2.1.1"
+ }
}
}
},
@@ -2920,24 +4795,34 @@
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz",
"integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "assert-plus": "0.2.0",
+ "jsprim": "1.4.0",
+ "sshpk": "1.13.1"
+ }
},
"https-browserify": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-0.0.1.tgz",
- "integrity": "sha1-P5E2XKvmC3ftDruiS0VOPgnZWoI=",
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz",
+ "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=",
"dev": true
},
"https-proxy-agent": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-1.0.0.tgz",
"integrity": "sha1-NffabEjOTdv6JkiRrFk+5f+GceY=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "agent-base": "2.1.1",
+ "debug": "2.6.8",
+ "extend": "3.0.1"
+ }
},
"iconv-lite": {
- "version": "0.4.17",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.17.tgz",
- "integrity": "sha1-T9qjs4rLwsAxsEXQ7c3+HsqxjI0=",
+ "version": "0.4.19",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz",
+ "integrity": "sha1-90aPYBNfXl2tM5nAqBvpoWA6CCs=",
"dev": true
},
"icss-replace-symbols": {
@@ -2946,6 +4831,69 @@
"integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=",
"dev": true
},
+ "icss-utils": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-2.1.0.tgz",
+ "integrity": "sha1-g/Cg7DeL8yRheLbCrZE28TWxyWI=",
+ "dev": true,
+ "requires": {
+ "postcss": "6.0.14"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz",
+ "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==",
+ "dev": true,
+ "requires": {
+ "color-convert": "1.9.1"
+ }
+ },
+ "chalk": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz",
+ "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "3.2.0",
+ "escape-string-regexp": "1.0.5",
+ "supports-color": "4.5.0"
+ }
+ },
+ "has-flag": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz",
+ "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "6.0.14",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.14.tgz",
+ "integrity": "sha1-VTTHIRRznnXQr88BfbhTCZ9WKIU=",
+ "dev": true,
+ "requires": {
+ "chalk": "2.3.0",
+ "source-map": "0.6.1",
+ "supports-color": "4.5.0"
+ }
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=",
+ "dev": true
+ },
+ "supports-color": {
+ "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": "2.0.0"
+ }
+ }
+ }
+ },
"ieee754": {
"version": "1.1.8",
"resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.8.tgz",
@@ -2953,9 +4901,9 @@
"dev": true
},
"image-size": {
- "version": "0.5.4",
- "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.4.tgz",
- "integrity": "sha1-lOB77sBlk4bxrvuEsiIuiEBUhc0=",
+ "version": "0.5.5",
+ "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz",
+ "integrity": "sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=",
"dev": true,
"optional": true
},
@@ -2963,6 +4911,15 @@
"version": "0.5.2",
"resolved": "https://registry.npmjs.org/img-stats/-/img-stats-0.5.2.tgz",
"integrity": "sha1-wgNJbELy2esuWrgjL6dWurMsnis=",
+ "dev": true,
+ "requires": {
+ "xmldom": "0.1.27"
+ }
+ },
+ "immediate": {
+ "version": "3.0.6",
+ "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz",
+ "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=",
"dev": true
},
"import-lazy": {
@@ -2987,7 +4944,10 @@
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz",
"integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "repeating": "2.0.1"
+ }
},
"indexes-of": {
"version": "1.0.1",
@@ -3011,7 +4971,11 @@
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
"integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "once": "1.4.0",
+ "wrappy": "1.0.2"
+ }
},
"inherits": {
"version": "2.0.3",
@@ -3026,22 +4990,103 @@
"dev": true
},
"inquirer": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.1.0.tgz",
- "integrity": "sha512-JLl89yPOEoGohLjeGs3XCekeovADbrEw/WRJQYgPED6zeJWrpIsY9i9/rn+VltZox/9w94lVYqo94QfEmniB1w==",
- "dev": true
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz",
+ "integrity": "sha1-ndLyrXZdyrH/BEO0kUQqILoifck=",
+ "dev": true,
+ "requires": {
+ "ansi-escapes": "3.0.0",
+ "chalk": "2.3.0",
+ "cli-cursor": "2.1.0",
+ "cli-width": "2.2.0",
+ "external-editor": "2.1.0",
+ "figures": "2.0.0",
+ "lodash": "4.17.4",
+ "mute-stream": "0.0.7",
+ "run-async": "2.3.0",
+ "rx-lite": "4.0.8",
+ "rx-lite-aggregates": "4.0.8",
+ "string-width": "2.1.1",
+ "strip-ansi": "4.0.0",
+ "through": "2.3.8"
+ },
+ "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.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz",
+ "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==",
+ "dev": true,
+ "requires": {
+ "color-convert": "1.9.1"
+ }
+ },
+ "chalk": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz",
+ "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "3.2.0",
+ "escape-string-regexp": "1.0.5",
+ "supports-color": "4.5.0"
+ }
+ },
+ "has-flag": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz",
+ "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=",
+ "dev": true
+ },
+ "string-width": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
+ "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"
+ }
+ },
+ "supports-color": {
+ "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": "2.0.0"
+ }
+ }
+ }
},
"interpret": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.0.3.tgz",
- "integrity": "sha1-y8NcYu7uc/Gat7EKgBURQBr8D5A=",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz",
+ "integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=",
"dev": true
},
"invariant": {
"version": "2.2.2",
"resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz",
"integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "loose-envify": "1.3.1"
+ }
},
"invert-kv": {
"version": "1.0.0",
@@ -3071,7 +5116,10 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz",
"integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "binary-extensions": "1.8.0"
+ }
},
"is-buffer": {
"version": "1.1.5",
@@ -3083,6 +5131,15 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz",
"integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=",
+ "dev": true,
+ "requires": {
+ "builtin-modules": "1.1.1"
+ }
+ },
+ "is-directory": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz",
+ "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=",
"dev": true
},
"is-dotfile": {
@@ -3095,7 +5152,10 @@
"version": "0.1.3",
"resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz",
"integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "is-primitive": "2.0.0"
+ }
},
"is-extendable": {
"version": "0.1.1",
@@ -3113,7 +5173,10 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
"integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "number-is-nan": "1.0.1"
+ }
},
"is-fullwidth-code-point": {
"version": "2.0.0",
@@ -3125,7 +5188,10 @@
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
"integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "is-extglob": "1.0.0"
+ }
},
"is-npm": {
"version": "1.0.0",
@@ -3137,7 +5203,10 @@
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz",
"integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ }
},
"is-obj": {
"version": "1.0.1",
@@ -3155,13 +5224,19 @@
"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=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "is-path-inside": "1.0.1"
+ }
},
"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=",
- "dev": true
+ "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"
+ }
},
"is-plain-obj": {
"version": "1.1.0",
@@ -3169,6 +5244,23 @@
"integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=",
"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": "sha1-LBY7P6+xtgbZ0Xko8FwqHDjgdnc=",
+ "dev": true,
+ "requires": {
+ "isobject": "3.0.1"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ }
+ }
+ },
"is-posix-bracket": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz",
@@ -3209,7 +5301,10 @@
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/is-svg/-/is-svg-2.1.0.tgz",
"integrity": "sha1-z2EJDaDZ77yrhyLeum8DIgjbsOk=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "html-comment-regex": "1.1.1"
+ }
},
"is-typedarray": {
"version": "1.0.0",
@@ -3223,6 +5318,12 @@
"integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=",
"dev": true
},
+ "is-wsl": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz",
+ "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=",
+ "dev": true
+ },
"isarray": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
@@ -3245,7 +5346,10 @@
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
"integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "isarray": "1.0.0"
+ }
},
"isstream": {
"version": "0.1.2",
@@ -3254,60 +5358,147 @@
"dev": true
},
"istanbul-api": {
- "version": "1.1.9",
- "resolved": "https://registry.npmjs.org/istanbul-api/-/istanbul-api-1.1.9.tgz",
- "integrity": "sha512-zV14oa+hjBNP3gJTM/BzNdJpInHKbZ9cLIEwVasuaTUA1ebF9TBOIfcC5SDAE3C11rXxOw3KSimKGMiFz6PpWQ==",
- "dev": true
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/istanbul-api/-/istanbul-api-1.2.1.tgz",
+ "integrity": "sha1-DGCgUV6xHH1lxrULuixumZrNhiA=",
+ "dev": true,
+ "requires": {
+ "async": "2.4.1",
+ "fileset": "2.0.3",
+ "istanbul-lib-coverage": "1.1.1",
+ "istanbul-lib-hook": "1.1.0",
+ "istanbul-lib-instrument": "1.9.1",
+ "istanbul-lib-report": "1.1.2",
+ "istanbul-lib-source-maps": "1.2.2",
+ "istanbul-reports": "1.1.3",
+ "js-yaml": "3.7.0",
+ "mkdirp": "0.5.1",
+ "once": "1.4.0"
+ },
+ "dependencies": {
+ "babylon": {
+ "version": "6.18.0",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz",
+ "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==",
+ "dev": true
+ },
+ "istanbul-lib-instrument": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-1.9.1.tgz",
+ "integrity": "sha512-RQmXeQ7sphar7k7O1wTNzVczF9igKpaeGQAG9qR2L+BS4DCJNTI9nytRmIVYevwO0bbq+2CXvJmYDuz0gMrywA==",
+ "dev": true,
+ "requires": {
+ "babel-generator": "6.24.1",
+ "babel-template": "6.24.1",
+ "babel-traverse": "6.24.1",
+ "babel-types": "6.24.1",
+ "babylon": "6.18.0",
+ "istanbul-lib-coverage": "1.1.1",
+ "semver": "5.3.0"
+ }
+ }
+ }
},
"istanbul-instrumenter-loader": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/istanbul-instrumenter-loader/-/istanbul-instrumenter-loader-2.0.0.tgz",
"integrity": "sha1-5UkpAKsLuoNe+oAkywC+mz7qJwA=",
"dev": true,
+ "requires": {
+ "convert-source-map": "1.5.1",
+ "istanbul-lib-instrument": "1.7.2",
+ "loader-utils": "0.2.17",
+ "object-assign": "4.1.1"
+ },
"dependencies": {
"loader-utils": {
"version": "0.2.17",
"resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz",
"integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "big.js": "3.2.0",
+ "emojis-list": "2.1.0",
+ "json5": "0.5.1",
+ "object-assign": "4.1.1"
+ }
}
}
},
"istanbul-lib-coverage": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-1.1.1.tgz",
- "integrity": "sha512-0+1vDkmzxqJIn5rcoEqapSB4DmPxE31EtI2dF2aCkV5esN9EWHxZ0dwgDClivMXJqE7zaYQxq30hj5L0nlTN5Q==",
+ "integrity": "sha1-c7+5mIhSmUFck9OKPprfeEp3qdo=",
"dev": true
},
"istanbul-lib-hook": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-1.0.7.tgz",
- "integrity": "sha512-3U2HB9y1ZV9UmFlE12Fx+nPtFqIymzrqCksrXujm3NVbAZIJg/RfYgO1XiIa0mbmxTjWpVEVlkIZJ25xVIAfkQ==",
- "dev": true
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-1.1.0.tgz",
+ "integrity": "sha1-hTjZcDcss3FtU+VVI91UtVeo2Js=",
+ "dev": true,
+ "requires": {
+ "append-transform": "0.4.0"
+ }
},
"istanbul-lib-instrument": {
"version": "1.7.2",
"resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-1.7.2.tgz",
"integrity": "sha512-lPgUY+Pa5dlq2/l0qs1PJZ54QPSfo+s4+UZdkb2d0hbOyrEIAbUJphBLFjEyXBdeCONgGRADFzs3ojfFtmuwFA==",
- "dev": true
+ "dev": true,
+ "requires": {
+ "babel-generator": "6.24.1",
+ "babel-template": "6.24.1",
+ "babel-traverse": "6.24.1",
+ "babel-types": "6.24.1",
+ "babylon": "6.17.2",
+ "istanbul-lib-coverage": "1.1.1",
+ "semver": "5.3.0"
+ }
},
"istanbul-lib-report": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-1.1.1.tgz",
- "integrity": "sha512-tvF+YmCmH4thnez6JFX06ujIA19WPa9YUiwjc1uALF2cv5dmE3It8b5I8Ob7FHJ70H9Y5yF+TDkVa/mcADuw1Q==",
- "dev": true
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-1.1.2.tgz",
+ "integrity": "sha1-kivifBO5URuXm9FYc1n2l5jB1CU=",
+ "dev": true,
+ "requires": {
+ "istanbul-lib-coverage": "1.1.1",
+ "mkdirp": "0.5.1",
+ "path-parse": "1.0.5",
+ "supports-color": "3.2.3"
+ }
},
"istanbul-lib-source-maps": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.1.tgz",
- "integrity": "sha512-mukVvSXCn9JQvdJl8wP/iPhqig0MRtuWuD4ZNKo6vB2Ik//AmhAKe3QnPN02dmkRe3lTudFk3rzoHhwU4hb94w==",
- "dev": true
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.2.tgz",
+ "integrity": "sha1-dQV4YCQ18ooMBO5tfZ4PKWDmLBw=",
+ "dev": true,
+ "requires": {
+ "debug": "3.1.0",
+ "istanbul-lib-coverage": "1.1.1",
+ "mkdirp": "0.5.1",
+ "rimraf": "2.6.1",
+ "source-map": "0.5.6"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+ "integrity": "sha1-W7WgZyYotkFJVmuhaBnmFRjGcmE=",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ }
+ }
},
"istanbul-reports": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-1.1.1.tgz",
- "integrity": "sha512-P8G873A0kW24XRlxHVGhMJBhQ8gWAec+dae7ZxOBzxT4w+a9ATSPvRVK3LB1RAJ9S8bg2tOyWHAGW40Zd2dKfw==",
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-1.1.3.tgz",
+ "integrity": "sha1-O54eje+20YsdQl2o6LMsWhY/LRA=",
"dev": true,
+ "requires": {
+ "handlebars": "4.0.11"
+ },
"dependencies": {
"async": {
"version": "1.5.2",
@@ -3328,70 +5519,118 @@
"integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=",
"dev": true,
"optional": true,
- "dependencies": {
- "wordwrap": {
- "version": "0.0.2",
- "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz",
- "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=",
- "dev": true,
- "optional": true
- }
+ "requires": {
+ "center-align": "0.1.3",
+ "right-align": "0.1.3",
+ "wordwrap": "0.0.2"
}
},
"handlebars": {
- "version": "4.0.10",
- "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.10.tgz",
- "integrity": "sha1-PTDHGLCaPZbyPqTMH0A8TTup/08=",
- "dev": true
- },
- "optimist": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz",
- "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=",
- "dev": true
+ "version": "4.0.11",
+ "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.11.tgz",
+ "integrity": "sha1-Ywo13+ApS8KB7a5v/F0yn8eYLcw=",
+ "dev": true,
+ "requires": {
+ "async": "1.5.2",
+ "optimist": "0.6.1",
+ "source-map": "0.4.4",
+ "uglify-js": "2.8.29"
+ }
},
"source-map": {
"version": "0.4.4",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz",
"integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "amdefine": "1.0.1"
+ }
},
"uglify-js": {
- "version": "2.8.28",
- "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.28.tgz",
- "integrity": "sha512-WqKNbmNJKzIdIEQu/U2ytgGBbhCy2PVks94GoetczOAJ/zCgVu2CuO7gguI5KPFGPtUtI1dmPQl6h0D4cPzypA==",
+ "version": "2.8.29",
+ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz",
+ "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=",
"dev": true,
"optional": true,
+ "requires": {
+ "source-map": "0.5.7",
+ "uglify-to-browserify": "1.0.2",
+ "yargs": "3.10.0"
+ },
"dependencies": {
"source-map": {
- "version": "0.5.6",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz",
- "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=",
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
"dev": true,
"optional": true
}
}
},
+ "wordwrap": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz",
+ "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=",
+ "dev": true,
+ "optional": true
+ },
"yargs": {
"version": "3.10.0",
"resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz",
"integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=",
"dev": true,
- "optional": true
+ "optional": true,
+ "requires": {
+ "camelcase": "1.2.1",
+ "cliui": "2.1.0",
+ "decamelize": "1.2.0",
+ "window-size": "0.1.0"
+ }
}
}
},
"jasmine": {
- "version": "2.6.0",
- "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-2.6.0.tgz",
- "integrity": "sha1-ayLnCIPo5YnUVjRhU7TSBt2+IX8=",
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-2.4.1.tgz",
+ "integrity": "sha1-kBbdpFMhPSesbUPcTqlzFaGJCF4=",
"dev": true,
+ "requires": {
+ "exit": "0.1.2",
+ "glob": "3.2.11",
+ "jasmine-core": "2.4.1"
+ },
"dependencies": {
+ "glob": {
+ "version": "3.2.11",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-3.2.11.tgz",
+ "integrity": "sha1-Spc/Y1uRkPcV0QmH1cAP0oFevj0=",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3",
+ "minimatch": "0.3.0"
+ }
+ },
"jasmine-core": {
- "version": "2.6.3",
- "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-2.6.3.tgz",
- "integrity": "sha1-RQcpUOSkKx4yL+VcABEApGXXeBU=",
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-2.4.1.tgz",
+ "integrity": "sha1-b4OrOg8WlRcizgfSBsdz1XzIOL4=",
"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=",
+ "dev": true
+ },
+ "minimatch": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz",
+ "integrity": "sha1-J12O2qxPG7MyZHIInnlJyDlGmd0=",
+ "dev": true,
+ "requires": {
+ "lru-cache": "2.7.3",
+ "sigmund": "1.0.1"
+ }
}
}
},
@@ -3405,12 +5644,15 @@
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/jasmine-spec-reporter/-/jasmine-spec-reporter-3.2.0.tgz",
"integrity": "sha1-/b6FqAzN07J2dGvHf96Dwc53Pv8=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "colors": "1.1.2"
+ }
},
"jasminewd2": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/jasminewd2/-/jasminewd2-2.1.0.tgz",
- "integrity": "sha1-2llSddGuYx3nNqwKfH2Fyfc+9lI=",
+ "version": "0.0.10",
+ "resolved": "https://registry.npmjs.org/jasminewd2/-/jasminewd2-0.0.10.tgz",
+ "integrity": "sha1-lPSK4ryUbK1kMDVGe0u36pwQde8=",
"dev": true
},
"jquery": {
@@ -3434,7 +5676,11 @@
"version": "3.7.0",
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.7.0.tgz",
"integrity": "sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "argparse": "1.0.9",
+ "esprima": "2.7.3"
+ }
},
"jsbn": {
"version": "0.1.1",
@@ -3443,12 +5689,6 @@
"dev": true,
"optional": true
},
- "jschardet": {
- "version": "1.4.2",
- "resolved": "https://registry.npmjs.org/jschardet/-/jschardet-1.4.2.tgz",
- "integrity": "sha1-KqEH8UKvQSHRRWWdRPUIMJYeaZo=",
- "dev": true
- },
"jsesc": {
"version": "0.5.0",
"resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
@@ -3456,9 +5696,9 @@
"dev": true
},
"json-loader": {
- "version": "0.5.4",
- "resolved": "https://registry.npmjs.org/json-loader/-/json-loader-0.5.4.tgz",
- "integrity": "sha1-i6oTZaYy9Yo8RtIBdfxgAsluN94=",
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/json-loader/-/json-loader-0.5.7.tgz",
+ "integrity": "sha1-3KFKcCNf+C8KyaOr62DTN6NlGF0=",
"dev": true
},
"json-schema": {
@@ -3467,11 +5707,20 @@
"integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=",
"dev": true
},
+ "json-schema-traverse": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz",
+ "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=",
+ "dev": true
+ },
"json-stable-stringify": {
"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
+ "dev": true,
+ "requires": {
+ "jsonify": "0.0.0"
+ }
},
"json-stringify-safe": {
"version": "5.0.1",
@@ -3492,10 +5741,13 @@
"dev": true
},
"jsonfile": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz",
- "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=",
- "dev": true
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
+ "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11"
+ }
},
"jsonify": {
"version": "0.0.0",
@@ -3508,6 +5760,12 @@
"resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.0.tgz",
"integrity": "sha1-o7h+QCmNjDgFUtjMdiigu5WiKRg=",
"dev": 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",
@@ -3517,11 +5775,81 @@
}
}
},
+ "jszip": {
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.1.5.tgz",
+ "integrity": "sha512-5W8NUaFRFRqTOL7ZDDrx5qWHJyBXy6velVudIzQUSoqAAYqzSh2Z7/m0Rf1QbmQJccegD0r+YZxBjzqoBiEeJQ==",
+ "dev": true,
+ "requires": {
+ "core-js": "2.3.0",
+ "es6-promise": "3.0.2",
+ "lie": "3.1.1",
+ "pako": "1.0.6",
+ "readable-stream": "2.0.6"
+ },
+ "dependencies": {
+ "core-js": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.3.0.tgz",
+ "integrity": "sha1-+rg/uwstjchfpjbEudNMdUIMbWU=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz",
+ "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=",
+ "dev": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "1.0.0",
+ "process-nextick-args": "1.0.7",
+ "string_decoder": "0.10.31",
+ "util-deprecate": "1.0.2"
+ }
+ },
+ "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
+ }
+ }
+ },
"karma": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/karma/-/karma-1.4.1.tgz",
"integrity": "sha1-QZgacdVCN2BrCj6oxYyQdz9BZQ4=",
"dev": true,
+ "requires": {
+ "bluebird": "3.5.0",
+ "body-parser": "1.17.2",
+ "chokidar": "1.7.0",
+ "colors": "1.1.2",
+ "combine-lists": "1.0.1",
+ "connect": "3.6.2",
+ "core-js": "2.4.1",
+ "di": "0.0.1",
+ "dom-serialize": "2.2.1",
+ "expand-braces": "0.1.2",
+ "glob": "7.1.2",
+ "graceful-fs": "4.1.11",
+ "http-proxy": "1.16.2",
+ "isbinaryfile": "3.0.2",
+ "lodash": "3.10.1",
+ "log4js": "0.6.38",
+ "mime": "1.3.6",
+ "minimatch": "3.0.4",
+ "optimist": "0.6.1",
+ "qjobs": "1.1.5",
+ "range-parser": "1.2.0",
+ "rimraf": "2.6.1",
+ "safe-buffer": "5.0.1",
+ "socket.io": "1.7.2",
+ "source-map": "0.5.6",
+ "tmp": "0.0.28",
+ "useragent": "2.1.13"
+ },
"dependencies": {
"lodash": {
"version": "3.10.1",
@@ -3529,17 +5857,14 @@
"integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=",
"dev": true
},
- "optimist": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz",
- "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=",
- "dev": true
- },
"tmp": {
"version": "0.0.28",
"resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.28.tgz",
"integrity": "sha1-Fyc1t/YU6nrzlmT6hM8N5OUV0SA=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "os-tmpdir": "1.0.2"
+ }
}
}
},
@@ -3547,19 +5872,29 @@
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-2.0.0.tgz",
"integrity": "sha1-wnkMWjKxVXfQ//Wk1aJwOztDnCU=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "fs-access": "1.0.1",
+ "which": "1.2.14"
+ }
},
"karma-cli": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/karma-cli/-/karma-cli-1.0.1.tgz",
"integrity": "sha1-rmw8WKMTodALRRZMRVubhs4X+WA=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "resolve": "1.3.3"
+ }
},
"karma-coverage-istanbul-reporter": {
"version": "0.2.3",
"resolved": "https://registry.npmjs.org/karma-coverage-istanbul-reporter/-/karma-coverage-istanbul-reporter-0.2.3.tgz",
"integrity": "sha1-EfG+nPqTdVp3usOasW4xWnEAtcU=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "istanbul-api": "1.2.1"
+ }
},
"karma-jasmine": {
"version": "1.1.0",
@@ -3571,57 +5906,37 @@
"version": "0.2.2",
"resolved": "https://registry.npmjs.org/karma-jasmine-html-reporter/-/karma-jasmine-html-reporter-0.2.2.tgz",
"integrity": "sha1-SKjl7xiAdhfuK14zwRlMNbQ5Ukw=",
- "dev": true
- },
- "karma-sourcemap-loader": {
- "version": "0.3.7",
- "resolved": "https://registry.npmjs.org/karma-sourcemap-loader/-/karma-sourcemap-loader-0.3.7.tgz",
- "integrity": "sha1-kTIsd/jxPUb+0GKwQuEAnUxFBdg=",
- "dev": true
- },
- "karma-webpack": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/karma-webpack/-/karma-webpack-2.0.3.tgz",
- "integrity": "sha1-Oc6/XKJYATmyf5rmm3iBa5yC+uY=",
"dev": true,
- "dependencies": {
- "async": {
- "version": "0.9.2",
- "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz",
- "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=",
- "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=",
- "dev": true
- },
- "lodash": {
- "version": "3.10.1",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz",
- "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=",
- "dev": true
- },
- "source-map": {
- "version": "0.1.43",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz",
- "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=",
- "dev": true
- }
+ "requires": {
+ "karma-jasmine": "1.1.0"
+ }
+ },
+ "karma-source-map-support": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/karma-source-map-support/-/karma-source-map-support-1.2.0.tgz",
+ "integrity": "sha1-G/gee7SwiWJ6s1LsQXnhF8QGpUA=",
+ "dev": true,
+ "requires": {
+ "source-map-support": "0.4.15"
}
},
"kind-of": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.5"
+ }
},
"latest-version": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz",
"integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "package-json": "4.0.1"
+ }
},
"lazy-cache": {
"version": "1.0.4",
@@ -3633,33 +5948,76 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz",
"integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "invert-kv": "1.0.0"
+ }
},
"less": {
- "version": "2.7.2",
- "resolved": "https://registry.npmjs.org/less/-/less-2.7.2.tgz",
- "integrity": "sha1-No1sxz4fsDmBGDKAkYdDxdz5s98=",
- "dev": true
+ "version": "2.7.3",
+ "resolved": "https://registry.npmjs.org/less/-/less-2.7.3.tgz",
+ "integrity": "sha1-zBJg9RyQCp7A2R+2mYE54CUHtjs=",
+ "dev": true,
+ "requires": {
+ "errno": "0.1.4",
+ "graceful-fs": "4.1.11",
+ "image-size": "0.5.5",
+ "mime": "1.3.6",
+ "mkdirp": "0.5.1",
+ "promise": "7.3.1",
+ "request": "2.81.0",
+ "source-map": "0.5.6"
+ }
},
"less-loader": {
- "version": "2.2.3",
- "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-2.2.3.tgz",
- "integrity": "sha1-ttj4E5yEk98J2ZKpOgBzSwj4RSg=",
+ "version": "4.0.5",
+ "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-4.0.5.tgz",
+ "integrity": "sha1-rhVadAbKxqzSk9eFWH/P8PR4xN0=",
"dev": true,
+ "requires": {
+ "clone": "2.1.1",
+ "loader-utils": "1.1.0",
+ "pify": "2.3.0"
+ },
"dependencies": {
- "loader-utils": {
- "version": "0.2.17",
- "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz",
- "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=",
+ "clone": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.1.tgz",
+ "integrity": "sha1-0hfR6WERjjrJpLi7oyhVU79kfNs=",
"dev": true
}
}
},
+ "license-webpack-plugin": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-0.4.3.tgz",
+ "integrity": "sha1-+diNTrwEQHoAYejMrCZXH4jlGhY=",
+ "dev": true,
+ "requires": {
+ "object-assign": "4.1.1"
+ }
+ },
+ "lie": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz",
+ "integrity": "sha1-mkNrLMd0bKWd56QfpGmz77dr2H4=",
+ "dev": true,
+ "requires": {
+ "immediate": "3.0.6"
+ }
+ },
"load-json-file": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
"integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "parse-json": "2.2.0",
+ "pify": "2.3.0",
+ "pinkie-promise": "2.0.1",
+ "strip-bom": "2.0.0"
+ }
},
"loader-runner": {
"version": "2.3.0",
@@ -3671,7 +6029,12 @@
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz",
"integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "big.js": "3.2.0",
+ "emojis-list": "2.1.0",
+ "json5": "0.5.1"
+ }
},
"lodash": {
"version": "4.17.4",
@@ -3709,6 +6072,12 @@
"integrity": "sha1-FQzwoWeR9ZA7iJHqsVRgknS96lU=",
"dev": true
},
+ "lodash.tail": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/lodash.tail/-/lodash.tail-4.1.1.tgz",
+ "integrity": "sha1-0jM6NtnncXyK0vfKyv7HwytERmQ=",
+ "dev": true
+ },
"lodash.uniq": {
"version": "4.5.0",
"resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz",
@@ -3720,6 +6089,10 @@
"resolved": "https://registry.npmjs.org/log4js/-/log4js-0.6.38.tgz",
"integrity": "sha1-LElBFmldb7JUgJQ9P8hy5mKlIv0=",
"dev": true,
+ "requires": {
+ "readable-stream": "1.0.34",
+ "semver": "4.3.6"
+ },
"dependencies": {
"isarray": {
"version": "0.0.1",
@@ -3731,7 +6104,13 @@
"version": "1.0.34",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
"integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "0.0.1",
+ "string_decoder": "0.10.31"
+ }
},
"semver": {
"version": "4.3.6",
@@ -3757,13 +6136,20 @@
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz",
"integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "js-tokens": "3.0.1"
+ }
},
"loud-rejection": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz",
"integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "currently-unhandled": "0.4.1",
+ "signal-exit": "3.0.2"
+ }
},
"lower-case": {
"version": "1.1.4",
@@ -3781,7 +6167,11 @@
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.0.tgz",
"integrity": "sha512-aHGs865JXz6bkB4AHL+3AhyvTFKL3iZamKVWjIUKnXOXyasJvqPK8WAjOnAQKQZVpeXDVz19u1DD0r/12bWAdQ==",
- "dev": true
+ "dev": true,
+ "requires": {
+ "pseudomap": "1.0.2",
+ "yallist": "2.1.2"
+ }
},
"macaddress": {
"version": "0.2.8",
@@ -3790,16 +6180,22 @@
"dev": true
},
"magic-string": {
- "version": "0.19.1",
- "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.19.1.tgz",
- "integrity": "sha1-FNdoATyvLsj96hakmvgvw3fnUgE=",
- "dev": true
+ "version": "0.22.4",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.22.4.tgz",
+ "integrity": "sha1-MQObTkA2Y5VhjB1s+Bk8U5F0df8=",
+ "dev": true,
+ "requires": {
+ "vlq": "0.2.3"
+ }
},
"make-dir": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.0.0.tgz",
"integrity": "sha1-l6ARdR6R3YfPre9Ygy67BJNt6Xg=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "pify": "2.3.0"
+ }
},
"make-error": {
"version": "1.3.0",
@@ -3814,10 +6210,13 @@
"dev": true
},
"matcher-collection": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/matcher-collection/-/matcher-collection-1.0.4.tgz",
- "integrity": "sha1-L2auCGmZbynkPQtiyD3R1D5YF1U=",
- "dev": true
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/matcher-collection/-/matcher-collection-1.0.5.tgz",
+ "integrity": "sha1-LuCVQ4Nyy4iE8FgjQTjAXGROwzk=",
+ "dev": true,
+ "requires": {
+ "minimatch": "3.0.4"
+ }
},
"math-expression-evaluator": {
"version": "1.2.17",
@@ -3825,6 +6224,28 @@
"integrity": "sha1-3oGf282E3M2PrlnGrreWFbnSZqw=",
"dev": true
},
+ "md5.js": {
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.4.tgz",
+ "integrity": "sha1-6b296UogpawYsENA/Fdk1bCdkB0=",
+ "dev": true,
+ "requires": {
+ "hash-base": "3.0.4",
+ "inherits": "2.0.3"
+ },
+ "dependencies": {
+ "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.0.1"
+ }
+ }
+ }
+ },
"media-typer": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
@@ -3835,13 +6256,29 @@
"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
+ "dev": true,
+ "requires": {
+ "errno": "0.1.4",
+ "readable-stream": "2.2.11"
+ }
},
"meow": {
"version": "3.7.0",
"resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz",
"integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=",
"dev": true,
+ "requires": {
+ "camelcase-keys": "2.1.0",
+ "decamelize": "1.2.0",
+ "loud-rejection": "1.6.0",
+ "map-obj": "1.0.1",
+ "minimist": "1.2.0",
+ "normalize-package-data": "2.3.8",
+ "object-assign": "4.1.1",
+ "read-pkg-up": "1.0.1",
+ "redent": "1.0.0",
+ "trim-newlines": "1.0.0"
+ },
"dependencies": {
"minimist": {
"version": "1.2.0",
@@ -3867,13 +6304,32 @@
"version": "2.3.11",
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz",
"integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=",
- "dev": true
+ "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.3"
+ }
},
"miller-rabin": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.0.tgz",
- "integrity": "sha1-SmL7HUKTPAVYOYL0xxb2+55sbT0=",
- "dev": true
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz",
+ "integrity": "sha1-8IA1HIZbDcViqEYpZtqlNUPHik0=",
+ "dev": true,
+ "requires": {
+ "bn.js": "4.11.8",
+ "brorand": "1.1.0"
+ }
},
"mime": {
"version": "1.3.6",
@@ -3891,7 +6347,10 @@
"version": "2.1.15",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.15.tgz",
"integrity": "sha1-pOv1BkCUVpI3uM9wBGd20J/JKu0=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "mime-db": "1.27.0"
+ }
},
"mimic-fn": {
"version": "1.1.0",
@@ -3914,8 +6373,11 @@
"minimatch": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
- "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
- "dev": true
+ "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "1.1.7"
+ }
},
"minimist": {
"version": "0.0.8",
@@ -3923,11 +6385,37 @@
"integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
"dev": true
},
+ "mixin-object": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/mixin-object/-/mixin-object-2.0.1.tgz",
+ "integrity": "sha1-T7lJRB2rGCVA8f4DW6YOGUel5X4=",
+ "dev": true,
+ "requires": {
+ "for-in": "0.1.8",
+ "is-extendable": "0.1.1"
+ },
+ "dependencies": {
+ "for-in": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/for-in/-/for-in-0.1.8.tgz",
+ "integrity": "sha1-2Hc5COMSVhCZUrH9ubP6hn0ndeE=",
+ "dev": true
+ }
+ }
+ },
"mkdirp": {
"version": "0.5.1",
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
"integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "minimist": "0.0.8"
+ }
+ },
+ "moment": {
+ "version": "2.19.2",
+ "resolved": "https://registry.npmjs.org/moment/-/moment-2.19.2.tgz",
+ "integrity": "sha512-Rf6jiHPEfxp9+dlzxPTmRHbvoFXsh2L/U8hOupUMpnuecHQmI6cF6lUbJl3QqKPko1u6ujO+FxtcajLVfLpAtA=="
},
"ms": {
"version": "2.0.0",
@@ -3951,7 +6439,10 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/ncname/-/ncname-1.0.0.tgz",
"integrity": "sha1-W1etGLHKCShk72Kwse2BlPODtxw=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "xml-char-classes": "1.0.0"
+ }
},
"negotiator": {
"version": "0.6.1",
@@ -3959,36 +6450,116 @@
"integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=",
"dev": true
},
+ "ng2-dragula": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/ng2-dragula/-/ng2-dragula-1.5.0.tgz",
+ "integrity": "sha1-EqIh16NPxinMdNyY77JkSCkOtuU=",
+ "requires": {
+ "dragula": "3.7.2"
+ }
+ },
"no-case": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.1.tgz",
- "integrity": "sha1-euuhxzpSGEJlVUt9wDuvcg34AIE=",
- "dev": true
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz",
+ "integrity": "sha1-YLgTOWvjmz8SiKTB7V0efSi0ZKw=",
+ "dev": true,
+ "requires": {
+ "lower-case": "1.1.4"
+ }
},
"node-gyp": {
"version": "3.6.2",
"resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.6.2.tgz",
"integrity": "sha1-m/vlRWIoYoSDjnUOrAUpWFP6HGA=",
"dev": true,
+ "requires": {
+ "fstream": "1.0.11",
+ "glob": "7.1.2",
+ "graceful-fs": "4.1.11",
+ "minimatch": "3.0.4",
+ "mkdirp": "0.5.1",
+ "nopt": "3.0.6",
+ "npmlog": "4.1.0",
+ "osenv": "0.1.4",
+ "request": "2.81.0",
+ "rimraf": "2.6.1",
+ "semver": "5.3.0",
+ "tar": "2.2.1",
+ "which": "1.2.14"
+ },
"dependencies": {
"nopt": {
"version": "3.0.6",
"resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz",
"integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "abbrev": "1.1.0"
+ }
}
}
},
"node-libs-browser": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.0.0.tgz",
- "integrity": "sha1-o6WeyXAkmFtG6Vg3lkb5bEthZkY=",
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.1.0.tgz",
+ "integrity": "sha1-X5QmPUBPbkR2fXJpAf/wVHjWAN8=",
"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",
+ "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.7.2",
+ "string_decoder": "1.0.2",
+ "timers-browserify": "2.0.4",
+ "tty-browserify": "0.0.0",
+ "url": "0.11.0",
+ "util": "0.10.3",
+ "vm-browserify": "0.0.4"
+ },
"dependencies": {
- "string_decoder": {
- "version": "0.10.31",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
- "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+ "readable-stream": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
+ "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==",
+ "dev": true,
+ "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"
+ },
+ "dependencies": {
+ "string_decoder": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
+ "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "5.1.1"
+ }
+ }
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
+ "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==",
"dev": true
}
}
@@ -4003,25 +6574,58 @@
"version": "4.5.3",
"resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.5.3.tgz",
"integrity": "sha1-0JydEXlkEjnRuX/8YjH9zsU+FWg=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "async-foreach": "0.1.3",
+ "chalk": "1.1.3",
+ "cross-spawn": "3.0.1",
+ "gaze": "1.1.2",
+ "get-stdin": "4.0.1",
+ "glob": "7.1.2",
+ "in-publish": "2.0.0",
+ "lodash.assign": "4.2.0",
+ "lodash.clonedeep": "4.5.0",
+ "lodash.mergewith": "4.6.0",
+ "meow": "3.7.0",
+ "mkdirp": "0.5.1",
+ "nan": "2.6.2",
+ "node-gyp": "3.6.2",
+ "npmlog": "4.1.0",
+ "request": "2.81.0",
+ "sass-graph": "2.2.4",
+ "stdout-stream": "1.4.0"
+ }
},
"nopt": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz",
"integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "abbrev": "1.1.0",
+ "osenv": "0.1.4"
+ }
},
"normalize-package-data": {
"version": "2.3.8",
"resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.3.8.tgz",
"integrity": "sha1-2Bntoqne29H/pWPqQHHZNngilbs=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "hosted-git-info": "2.4.2",
+ "is-builtin-module": "1.0.0",
+ "semver": "5.3.0",
+ "validate-npm-package-license": "3.0.1"
+ }
},
"normalize-path": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
"integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "remove-trailing-separator": "1.0.2"
+ }
},
"normalize-range": {
"version": "0.1.2",
@@ -4033,25 +6637,43 @@
"version": "1.9.1",
"resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz",
"integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "object-assign": "4.1.1",
+ "prepend-http": "1.0.4",
+ "query-string": "4.3.4",
+ "sort-keys": "1.1.2"
+ }
},
"npm-run-path": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-1.0.0.tgz",
"integrity": "sha1-9cMr9ZX+ga6Sfa7FLoL4sACsPI8=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "path-key": "1.0.0"
+ }
},
"npmlog": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.0.tgz",
"integrity": "sha512-ocolIkZYZt8UveuiDS0yAkkIjid1o7lPG8cYm05yNYzBn8ykQtaiPMEGp8fY9tKdDgm8okpdKzkvu1y9hUYugA==",
- "dev": true
+ "dev": true,
+ "requires": {
+ "are-we-there-yet": "1.1.4",
+ "console-control-strings": "1.1.0",
+ "gauge": "2.7.4",
+ "set-blocking": "2.0.0"
+ }
},
"nth-check": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.1.tgz",
"integrity": "sha1-mSms32KPwsQQmN6rgqxYDPFJquQ=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "boolbase": "1.0.0"
+ }
},
"null-check": {
"version": "1.0.0",
@@ -4093,7 +6715,11 @@
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz",
"integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "for-own": "0.1.5",
+ "is-extendable": "0.1.1"
+ }
},
"obuf": {
"version": "1.1.1",
@@ -4105,7 +6731,10 @@
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
"integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "ee-first": "1.1.1"
+ }
},
"on-headers": {
"version": "1.0.1",
@@ -4117,25 +6746,38 @@
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "wrappy": "1.0.2"
+ }
},
"onetime": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
"integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "mimic-fn": "1.1.0"
+ }
},
"opn": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/opn/-/opn-4.0.2.tgz",
- "integrity": "sha1-erwi5kTf9jsKltWrfyeQwPAavJU=",
- "dev": true
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/opn/-/opn-5.1.0.tgz",
+ "integrity": "sha1-cs4jBqF9vqWP8QQYUzUrSo/HdRk=",
+ "dev": true,
+ "requires": {
+ "is-wsl": "1.1.0"
+ }
},
"optimist": {
- "version": "0.3.7",
- "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.3.7.tgz",
- "integrity": "sha1-yQlBrVnkJzMokjB00s8ufLxuwNk=",
- "dev": true
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz",
+ "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=",
+ "dev": true,
+ "requires": {
+ "minimist": "0.0.8",
+ "wordwrap": "0.0.3"
+ }
},
"options": {
"version": "0.0.6",
@@ -4148,19 +6790,26 @@
"resolved": "https://registry.npmjs.org/original/-/original-1.0.0.tgz",
"integrity": "sha1-kUf5P6FpbQS+YeAb1QuurKZWvTs=",
"dev": true,
+ "requires": {
+ "url-parse": "1.0.5"
+ },
"dependencies": {
"url-parse": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.0.5.tgz",
"integrity": "sha1-CFSGBCKv3P7+tsllxmLUgAFpkns=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "querystringify": "0.0.4",
+ "requires-port": "1.0.0"
+ }
}
}
},
"os-browserify": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.2.1.tgz",
- "integrity": "sha1-Y/xMzuXS13Y9Jrv4YBB45sLgBE8=",
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz",
+ "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=",
"dev": true
},
"os-homedir": {
@@ -4173,7 +6822,10 @@
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz",
"integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "lcid": "1.0.0"
+ }
},
"os-tmpdir": {
"version": "1.0.2",
@@ -4185,61 +6837,99 @@
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.4.tgz",
"integrity": "sha1-Qv5tWVPfBsgGS+bxdsPQWqqjRkQ=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "os-homedir": "1.0.2",
+ "os-tmpdir": "1.0.2"
+ }
},
"package-json": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz",
"integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "got": "6.7.1",
+ "registry-auth-token": "3.3.1",
+ "registry-url": "3.1.0",
+ "semver": "5.3.0"
+ }
},
"pako": {
- "version": "0.2.9",
- "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz",
- "integrity": "sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=",
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.6.tgz",
+ "integrity": "sha1-AQEhG6pwxLykoPY/Igbpe3368lg=",
"dev": true
},
"param-case": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz",
"integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "no-case": "2.3.2"
+ }
},
"parse-asn1": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.0.tgz",
"integrity": "sha1-N8T5t+06tlx0gXtfJICTf7+XxxI=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "asn1.js": "4.9.2",
+ "browserify-aes": "1.1.1",
+ "create-hash": "1.1.3",
+ "evp_bytestokey": "1.0.3",
+ "pbkdf2": "3.0.14"
+ }
},
"parse-glob": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz",
"integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "glob-base": "0.3.0",
+ "is-dotfile": "1.0.3",
+ "is-extglob": "1.0.0",
+ "is-glob": "2.0.1"
+ }
},
"parse-json": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
"integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "error-ex": "1.3.1"
+ }
},
"parsejson": {
"version": "0.0.3",
"resolved": "https://registry.npmjs.org/parsejson/-/parsejson-0.0.3.tgz",
"integrity": "sha1-q343WfIJ7OmUN5c/fQ8fZK4OZKs=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "better-assert": "1.0.2"
+ }
},
"parseqs": {
"version": "0.0.5",
"resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz",
"integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "better-assert": "1.0.2"
+ }
},
"parseuri": {
"version": "0.0.5",
"resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz",
"integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "better-assert": "1.0.2"
+ }
},
"parseurl": {
"version": "1.3.1",
@@ -4257,7 +6947,10 @@
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
"integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "pinkie-promise": "2.0.1"
+ }
},
"path-is-absolute": {
"version": "1.0.1",
@@ -4293,13 +6986,25 @@
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
"integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "pify": "2.3.0",
+ "pinkie-promise": "2.0.1"
+ }
},
"pbkdf2": {
- "version": "3.0.12",
- "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.12.tgz",
- "integrity": "sha1-vjZ4XFBn6kjYBv+SMojF91C2uKI=",
- "dev": true
+ "version": "3.0.14",
+ "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.14.tgz",
+ "integrity": "sha1-o14TxkeZsGzhUyD0WcIw5o5zut4=",
+ "dev": true,
+ "requires": {
+ "create-hash": "1.1.3",
+ "create-hmac": "1.1.6",
+ "ripemd160": "2.0.1",
+ "safe-buffer": "5.0.1",
+ "sha.js": "2.4.9"
+ }
},
"performance-now": {
"version": "0.2.0",
@@ -4313,6 +7018,14 @@
"integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
"dev": true
},
+ "pikaday-time": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/pikaday-time/-/pikaday-time-1.6.1.tgz",
+ "integrity": "sha1-MnS0S57cBYhplJ+dUdHPY2TJiVM=",
+ "requires": {
+ "moment": "2.19.2"
+ }
+ },
"pinkie": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
@@ -4323,13 +7036,21 @@
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
"integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "pinkie": "2.0.4"
+ }
},
"portfinder": {
"version": "1.0.13",
"resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.13.tgz",
"integrity": "sha1-uzLs2HwnEErm7kS1o8y/Drsa7ek=",
"dev": true,
+ "requires": {
+ "async": "1.5.2",
+ "debug": "2.6.8",
+ "mkdirp": "0.5.1"
+ },
"dependencies": {
"async": {
"version": "1.5.2",
@@ -4340,96 +7061,181 @@
}
},
"postcss": {
- "version": "5.2.17",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.17.tgz",
- "integrity": "sha1-z09Ze4ZNZcikkrLqvp1wbIecOIs=",
- "dev": true
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=",
+ "dev": true,
+ "requires": {
+ "chalk": "1.1.3",
+ "js-base64": "2.1.9",
+ "source-map": "0.5.6",
+ "supports-color": "3.2.3"
+ }
},
"postcss-calc": {
"version": "5.3.1",
"resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-5.3.1.tgz",
"integrity": "sha1-d7rnypKK2FcW4v2kLyYb98HWW14=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "postcss": "5.2.18",
+ "postcss-message-helpers": "2.0.0",
+ "reduce-css-calc": "1.3.0"
+ }
},
"postcss-colormin": {
"version": "2.2.2",
"resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-2.2.2.tgz",
"integrity": "sha1-ZjFBfV8OkJo9fsJrJMio0eT5bks=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "colormin": "1.1.2",
+ "postcss": "5.2.18",
+ "postcss-value-parser": "3.3.0"
+ }
},
"postcss-convert-values": {
"version": "2.6.1",
"resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz",
"integrity": "sha1-u9hZPFwf0uPRwyK7kl3K6Nrk1i0=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "postcss": "5.2.18",
+ "postcss-value-parser": "3.3.0"
+ }
},
"postcss-discard-comments": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz",
"integrity": "sha1-vv6J+v1bPazlzM5Rt2uBUUvgDj0=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "postcss": "5.2.18"
+ }
},
"postcss-discard-duplicates": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0.tgz",
"integrity": "sha1-uavye4isGIFYpesSq8riAmO5GTI=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "postcss": "5.2.18"
+ }
},
"postcss-discard-empty": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz",
"integrity": "sha1-0rS9nVztXr2Nyt52QMfXzX9PkrU=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "postcss": "5.2.18"
+ }
},
"postcss-discard-overridden": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz",
"integrity": "sha1-ix6vVU9ob7KIzYdMVWZ7CqNmjVg=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "postcss": "5.2.18"
+ }
},
"postcss-discard-unused": {
"version": "2.2.3",
"resolved": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz",
"integrity": "sha1-vOMLLMWR/8Y0Mitfs0ZLbZNPRDM=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "postcss": "5.2.18",
+ "uniqs": "2.0.0"
+ }
},
"postcss-filter-plugins": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/postcss-filter-plugins/-/postcss-filter-plugins-2.0.2.tgz",
"integrity": "sha1-bYWGJTTXNaxCDkqFgG4fXUKG2Ew=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "postcss": "5.2.18",
+ "uniqid": "4.1.1"
+ }
+ },
+ "postcss-load-config": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-1.2.0.tgz",
+ "integrity": "sha1-U56a/J3chiASHr+djDZz4M5Q0oo=",
+ "dev": true,
+ "requires": {
+ "cosmiconfig": "2.2.2",
+ "object-assign": "4.1.1",
+ "postcss-load-options": "1.2.0",
+ "postcss-load-plugins": "2.3.0"
+ }
+ },
+ "postcss-load-options": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/postcss-load-options/-/postcss-load-options-1.2.0.tgz",
+ "integrity": "sha1-sJixVZ3awt8EvAuzdfmaXP4rbYw=",
+ "dev": true,
+ "requires": {
+ "cosmiconfig": "2.2.2",
+ "object-assign": "4.1.1"
+ }
+ },
+ "postcss-load-plugins": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/postcss-load-plugins/-/postcss-load-plugins-2.3.0.tgz",
+ "integrity": "sha1-dFdoEWWZrKLwCfrUJrABdQSdjZI=",
+ "dev": true,
+ "requires": {
+ "cosmiconfig": "2.2.2",
+ "object-assign": "4.1.1"
+ }
},
"postcss-loader": {
- "version": "0.13.0",
- "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-0.13.0.tgz",
- "integrity": "sha1-cv2vDSlETfd9N1HOTmncQLyZ7YU=",
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-1.3.3.tgz",
+ "integrity": "sha1-piHqH6KQYqg5cqRvVEhncTAZFus=",
"dev": true,
- "dependencies": {
- "loader-utils": {
- "version": "0.2.17",
- "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz",
- "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=",
- "dev": true
- }
+ "requires": {
+ "loader-utils": "1.1.0",
+ "object-assign": "4.1.1",
+ "postcss": "5.2.18",
+ "postcss-load-config": "1.2.0"
}
},
"postcss-merge-idents": {
"version": "2.1.7",
"resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz",
"integrity": "sha1-TFUwMTwI4dWzu/PSu8dH4njuonA=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "has": "1.0.1",
+ "postcss": "5.2.18",
+ "postcss-value-parser": "3.3.0"
+ }
},
"postcss-merge-longhand": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2.tgz",
"integrity": "sha1-I9kM0Sewp3mUkVMyc5A0oaTz1lg=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "postcss": "5.2.18"
+ }
},
"postcss-merge-rules": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz",
"integrity": "sha1-0d9d+qexrMO+VT8OnhDofGG19yE=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "browserslist": "1.7.7",
+ "caniuse-api": "1.6.1",
+ "postcss": "5.2.18",
+ "postcss-selector-parser": "2.2.3",
+ "vendors": "1.0.1"
+ }
},
"postcss-message-helpers": {
"version": "2.0.0",
@@ -4441,37 +7247,107 @@
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz",
"integrity": "sha1-S1jttWZB66fIR0qzUmyv17vey2k=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "object-assign": "4.1.1",
+ "postcss": "5.2.18",
+ "postcss-value-parser": "3.3.0"
+ }
},
"postcss-minify-gradients": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz",
"integrity": "sha1-Xb2hE3NwP4PPtKPqOIHY11/15uE=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "postcss": "5.2.18",
+ "postcss-value-parser": "3.3.0"
+ }
},
"postcss-minify-params": {
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz",
"integrity": "sha1-rSzgcTc7lDs9kwo/pZo1jCjW8fM=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "alphanum-sort": "1.0.2",
+ "postcss": "5.2.18",
+ "postcss-value-parser": "3.3.0",
+ "uniqs": "2.0.0"
+ }
},
"postcss-minify-selectors": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz",
"integrity": "sha1-ssapjAByz5G5MtGkllCBFDEXNb8=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "alphanum-sort": "1.0.2",
+ "has": "1.0.1",
+ "postcss": "5.2.18",
+ "postcss-selector-parser": "2.2.3"
+ }
},
"postcss-modules-extract-imports": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.1.0.tgz",
"integrity": "sha1-thTJcgvmgW6u41+zpfqh26agXds=",
"dev": true,
+ "requires": {
+ "postcss": "6.0.14"
+ },
"dependencies": {
- "postcss": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.1.tgz",
- "integrity": "sha1-AA29H47vIXqjaLmiEsX8QLKo8/I=",
+ "ansi-styles": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz",
+ "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==",
+ "dev": true,
+ "requires": {
+ "color-convert": "1.9.1"
+ }
+ },
+ "chalk": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz",
+ "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "3.2.0",
+ "escape-string-regexp": "1.0.5",
+ "supports-color": "4.5.0"
+ }
+ },
+ "has-flag": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz",
+ "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=",
"dev": true
+ },
+ "postcss": {
+ "version": "6.0.14",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.14.tgz",
+ "integrity": "sha1-VTTHIRRznnXQr88BfbhTCZ9WKIU=",
+ "dev": true,
+ "requires": {
+ "chalk": "2.3.0",
+ "source-map": "0.6.1",
+ "supports-color": "4.5.0"
+ }
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=",
+ "dev": true
+ },
+ "supports-color": {
+ "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": "2.0.0"
+ }
}
}
},
@@ -4480,12 +7356,62 @@
"resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz",
"integrity": "sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=",
"dev": true,
+ "requires": {
+ "css-selector-tokenizer": "0.7.0",
+ "postcss": "6.0.14"
+ },
"dependencies": {
- "postcss": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.1.tgz",
- "integrity": "sha1-AA29H47vIXqjaLmiEsX8QLKo8/I=",
+ "ansi-styles": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz",
+ "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==",
+ "dev": true,
+ "requires": {
+ "color-convert": "1.9.1"
+ }
+ },
+ "chalk": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz",
+ "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "3.2.0",
+ "escape-string-regexp": "1.0.5",
+ "supports-color": "4.5.0"
+ }
+ },
+ "has-flag": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz",
+ "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=",
"dev": true
+ },
+ "postcss": {
+ "version": "6.0.14",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.14.tgz",
+ "integrity": "sha1-VTTHIRRznnXQr88BfbhTCZ9WKIU=",
+ "dev": true,
+ "requires": {
+ "chalk": "2.3.0",
+ "source-map": "0.6.1",
+ "supports-color": "4.5.0"
+ }
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=",
+ "dev": true
+ },
+ "supports-color": {
+ "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": "2.0.0"
+ }
}
}
},
@@ -4494,12 +7420,62 @@
"resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz",
"integrity": "sha1-1upkmUx5+XtipytCb75gVqGUu5A=",
"dev": true,
+ "requires": {
+ "css-selector-tokenizer": "0.7.0",
+ "postcss": "6.0.14"
+ },
"dependencies": {
- "postcss": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.1.tgz",
- "integrity": "sha1-AA29H47vIXqjaLmiEsX8QLKo8/I=",
+ "ansi-styles": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz",
+ "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==",
+ "dev": true,
+ "requires": {
+ "color-convert": "1.9.1"
+ }
+ },
+ "chalk": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz",
+ "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "3.2.0",
+ "escape-string-regexp": "1.0.5",
+ "supports-color": "4.5.0"
+ }
+ },
+ "has-flag": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz",
+ "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=",
"dev": true
+ },
+ "postcss": {
+ "version": "6.0.14",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.14.tgz",
+ "integrity": "sha1-VTTHIRRznnXQr88BfbhTCZ9WKIU=",
+ "dev": true,
+ "requires": {
+ "chalk": "2.3.0",
+ "source-map": "0.6.1",
+ "supports-color": "4.5.0"
+ }
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=",
+ "dev": true
+ },
+ "supports-color": {
+ "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": "2.0.0"
+ }
}
}
},
@@ -4508,12 +7484,62 @@
"resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz",
"integrity": "sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=",
"dev": true,
+ "requires": {
+ "icss-replace-symbols": "1.1.0",
+ "postcss": "6.0.14"
+ },
"dependencies": {
- "postcss": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.1.tgz",
- "integrity": "sha1-AA29H47vIXqjaLmiEsX8QLKo8/I=",
+ "ansi-styles": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz",
+ "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==",
+ "dev": true,
+ "requires": {
+ "color-convert": "1.9.1"
+ }
+ },
+ "chalk": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz",
+ "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "3.2.0",
+ "escape-string-regexp": "1.0.5",
+ "supports-color": "4.5.0"
+ }
+ },
+ "has-flag": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz",
+ "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=",
"dev": true
+ },
+ "postcss": {
+ "version": "6.0.14",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.14.tgz",
+ "integrity": "sha1-VTTHIRRznnXQr88BfbhTCZ9WKIU=",
+ "dev": true,
+ "requires": {
+ "chalk": "2.3.0",
+ "source-map": "0.6.1",
+ "supports-color": "4.5.0"
+ }
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=",
+ "dev": true
+ },
+ "supports-color": {
+ "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": "2.0.0"
+ }
}
}
},
@@ -4521,61 +7547,111 @@
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz",
"integrity": "sha1-757nEhLX/nWceO0WL2HtYrXLk/E=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "postcss": "5.2.18"
+ }
},
"postcss-normalize-url": {
"version": "3.0.8",
"resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz",
"integrity": "sha1-EI90s/L82viRov+j6kWSJ5/HgiI=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "is-absolute-url": "2.1.0",
+ "normalize-url": "1.9.1",
+ "postcss": "5.2.18",
+ "postcss-value-parser": "3.3.0"
+ }
},
"postcss-ordered-values": {
"version": "2.2.3",
"resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz",
"integrity": "sha1-7sbCpntsQSqNsgQud/6NpD+VwR0=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "postcss": "5.2.18",
+ "postcss-value-parser": "3.3.0"
+ }
},
"postcss-reduce-idents": {
"version": "2.4.0",
"resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz",
"integrity": "sha1-wsbSDMlYKE9qv75j92Cb9AkFmtM=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "postcss": "5.2.18",
+ "postcss-value-parser": "3.3.0"
+ }
},
"postcss-reduce-initial": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz",
"integrity": "sha1-aPgGlfBF0IJjqHmtJA343WT2ROo=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "postcss": "5.2.18"
+ }
},
"postcss-reduce-transforms": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz",
"integrity": "sha1-/3b02CEkN7McKYpC0uFEQCV3GuE=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "has": "1.0.1",
+ "postcss": "5.2.18",
+ "postcss-value-parser": "3.3.0"
+ }
},
"postcss-selector-parser": {
"version": "2.2.3",
"resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz",
"integrity": "sha1-+UN3iGBsPJrO4W/+jYsWKX8nu5A=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "flatten": "1.0.2",
+ "indexes-of": "1.0.1",
+ "uniq": "1.0.1"
+ }
},
"postcss-svgo": {
"version": "2.1.6",
"resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-2.1.6.tgz",
"integrity": "sha1-tt8YqmE7Zm4TPwittSGcJoSsEI0=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "is-svg": "2.1.0",
+ "postcss": "5.2.18",
+ "postcss-value-parser": "3.3.0",
+ "svgo": "0.7.2"
+ }
},
"postcss-unique-selectors": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz",
"integrity": "sha1-mB1X0p3csz57Hf4f1DuGSfkzyh0=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "alphanum-sort": "1.0.2",
+ "postcss": "5.2.18",
+ "uniqs": "2.0.0"
+ }
},
"postcss-url": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/postcss-url/-/postcss-url-5.1.2.tgz",
"integrity": "sha1-mLMWW+jVkkccsMqt3iwNH4MvEz4=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "directory-encoder": "0.7.2",
+ "js-base64": "2.1.9",
+ "mime": "1.3.6",
+ "minimatch": "3.0.4",
+ "mkdirp": "0.5.1",
+ "path-is-absolute": "1.0.1",
+ "postcss": "5.2.18"
+ }
},
"postcss-value-parser": {
"version": "3.3.0",
@@ -4587,7 +7663,12 @@
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-2.2.0.tgz",
"integrity": "sha1-0hCd3AVbka9n/EyzsCWUZjnSryI=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "has": "1.0.1",
+ "postcss": "5.2.18",
+ "uniqs": "2.0.0"
+ }
},
"prepend-http": {
"version": "1.0.4",
@@ -4602,10 +7683,14 @@
"dev": true
},
"pretty-error": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.0.tgz",
- "integrity": "sha1-h/Tp1waiTIfWy+6fq+wAH8+Mddg=",
- "dev": true
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.1.tgz",
+ "integrity": "sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM=",
+ "dev": true,
+ "requires": {
+ "renderkid": "2.0.1",
+ "utila": "0.4.0"
+ }
},
"process": {
"version": "0.11.10",
@@ -4620,22 +7705,71 @@
"dev": true
},
"promise": {
- "version": "7.1.1",
- "resolved": "https://registry.npmjs.org/promise/-/promise-7.1.1.tgz",
- "integrity": "sha1-SJZUxpJha4qlWwck+oCbt9tJxb8=",
+ "version": "7.3.1",
+ "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz",
+ "integrity": "sha1-BktyYCsY+Q8pGSuLG8QY/9Hr078=",
"dev": true,
- "optional": true
+ "optional": true,
+ "requires": {
+ "asap": "2.0.6"
+ }
},
"protractor": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/protractor/-/protractor-5.1.2.tgz",
- "integrity": "sha1-myIXQXCaTGLVzVPGqt1UpxE36V8=",
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/protractor/-/protractor-5.3.0.tgz",
+ "integrity": "sha512-8z1TWtc/I9Kn4fkfg87DhkSAi0arul7DHBEeJ70sy66teQAeffjQED1s0Gduigme7hxHRYdYEKbhHYz28fpv5w==",
"dev": true,
+ "requires": {
+ "@types/node": "6.0.78",
+ "@types/q": "0.0.32",
+ "@types/selenium-webdriver": "2.53.43",
+ "blocking-proxy": "1.0.1",
+ "chalk": "1.1.3",
+ "glob": "7.1.2",
+ "jasmine": "2.8.0",
+ "jasminewd2": "2.2.0",
+ "optimist": "0.6.1",
+ "q": "1.4.1",
+ "saucelabs": "1.3.0",
+ "selenium-webdriver": "3.6.0",
+ "source-map-support": "0.4.15",
+ "webdriver-js-extender": "1.0.0",
+ "webdriver-manager": "12.0.6"
+ },
"dependencies": {
- "optimist": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz",
- "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=",
+ "@types/selenium-webdriver": {
+ "version": "2.53.43",
+ "resolved": "https://registry.npmjs.org/@types/selenium-webdriver/-/selenium-webdriver-2.53.43.tgz",
+ "integrity": "sha1-LePXGIGbwgFldUxKWa+36YM/Zwc=",
+ "dev": true
+ },
+ "jasmine": {
+ "version": "2.8.0",
+ "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-2.8.0.tgz",
+ "integrity": "sha1-awicChFXax8W3xG4AUbZHU6Lij4=",
+ "dev": true,
+ "requires": {
+ "exit": "0.1.2",
+ "glob": "7.1.2",
+ "jasmine-core": "2.8.0"
+ }
+ },
+ "jasmine-core": {
+ "version": "2.8.0",
+ "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-2.8.0.tgz",
+ "integrity": "sha1-vMl5rh+f0FcB5F5S5l06XWPxok4=",
+ "dev": true
+ },
+ "jasminewd2": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/jasminewd2/-/jasminewd2-2.2.0.tgz",
+ "integrity": "sha1-43zwsX8ZnM4jvqcbIDk5Uka07E4=",
+ "dev": true
+ },
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
"dev": true
},
"q": {
@@ -4644,19 +7778,80 @@
"integrity": "sha1-VXBbzZPF82c1MMLCy8DCs63cKG4=",
"dev": true
},
+ "selenium-webdriver": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-3.6.0.tgz",
+ "integrity": "sha512-WH7Aldse+2P5bbFBO4Gle/nuQOdVwpHMTL6raL3uuBj/vPG07k6uzt3aiahu352ONBr5xXh0hDlM3LhtXPOC4Q==",
+ "dev": true,
+ "requires": {
+ "jszip": "3.1.5",
+ "rimraf": "2.6.1",
+ "tmp": "0.0.30",
+ "xml2js": "0.4.19"
+ }
+ },
+ "tmp": {
+ "version": "0.0.30",
+ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.30.tgz",
+ "integrity": "sha1-ckGdSovn1s51FI/YsyTlk6cRwu0=",
+ "dev": true,
+ "requires": {
+ "os-tmpdir": "1.0.2"
+ }
+ },
"webdriver-manager": {
"version": "12.0.6",
"resolved": "https://registry.npmjs.org/webdriver-manager/-/webdriver-manager-12.0.6.tgz",
"integrity": "sha1-PfGkgZdwELTL+MnYXHpXeCjA5ws=",
"dev": true,
- "dependencies": {
- "minimist": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
- "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
- "dev": true
- }
+ "requires": {
+ "adm-zip": "0.4.7",
+ "chalk": "1.1.3",
+ "del": "2.2.2",
+ "glob": "7.1.2",
+ "ini": "1.3.4",
+ "minimist": "1.2.0",
+ "q": "1.4.1",
+ "request": "2.81.0",
+ "rimraf": "2.6.1",
+ "semver": "5.3.0",
+ "xml2js": "0.4.19"
}
+ },
+ "xml2js": {
+ "version": "0.4.19",
+ "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz",
+ "integrity": "sha1-aGwg8hMgnpSr8NG88e+qKRx4J6c=",
+ "dev": true,
+ "requires": {
+ "sax": "1.2.2",
+ "xmlbuilder": "9.0.4"
+ }
+ }
+ }
+ },
+ "protractor-flake": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/protractor-flake/-/protractor-flake-3.3.0.tgz",
+ "integrity": "sha1-16J2wqjXKx/U+avkEN9LuHUrmOk=",
+ "dev": true,
+ "requires": {
+ "chalk": "1.1.3",
+ "core-js": "0.9.18",
+ "minimist": "1.2.0"
+ },
+ "dependencies": {
+ "core-js": {
+ "version": "0.9.18",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-0.9.18.tgz",
+ "integrity": "sha1-E/RY5DAjKw9OwfSA2nwvUojp0JU=",
+ "dev": true
+ },
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+ "dev": true
}
}
},
@@ -4664,7 +7859,11 @@
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-1.1.4.tgz",
"integrity": "sha1-J+VF9pYKRKYn2bREZ+NcG2tM4vM=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "forwarded": "0.1.0",
+ "ipaddr.js": "1.3.0"
+ }
},
"prr": {
"version": "0.0.0",
@@ -4682,7 +7881,14 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.0.tgz",
"integrity": "sha1-OfaZ86RlYN1eusvKaTyvfGXBjMY=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "bn.js": "4.11.8",
+ "browserify-rsa": "4.0.1",
+ "create-hash": "1.1.3",
+ "parse-asn1": "5.1.0",
+ "randombytes": "2.0.5"
+ }
},
"punycode": {
"version": "1.4.1",
@@ -4712,7 +7918,11 @@
"version": "4.3.4",
"resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz",
"integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "object-assign": "4.1.1",
+ "strict-uri-encode": "1.1.0"
+ }
},
"querystring": {
"version": "0.2.0",
@@ -4736,18 +7946,43 @@
"version": "1.1.6",
"resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.6.tgz",
"integrity": "sha1-EQ3Kv/OX6dz/fAeJzMCkmt8exbs=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "is-number": "2.1.0",
+ "kind-of": "3.2.2"
+ }
},
"randombytes": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.5.tgz",
- "integrity": "sha512-8T7Zn1AhMsQ/HI1SjcCfT/t4ii3eAqco3yOcSzS4mozsOz69lHLsoMXmF9nZgnFanYscnSlUSgs8uZyKzpE6kg==",
+ "integrity": "sha1-3ACaJGuNCaF3tLegrne8Vw9LG3k=",
"dev": true,
+ "requires": {
+ "safe-buffer": "5.1.1"
+ },
"dependencies": {
"safe-buffer": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.0.tgz",
- "integrity": "sha512-aSLEDudu6OoRr/2rU609gRmnYboRLxgDG1z9o2Q0os7236FwvcqIOO8r8U5JUEwivZOhDaKlFO4SbPTJYyBEyQ==",
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
+ "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==",
+ "dev": true
+ }
+ }
+ },
+ "randomfill": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.3.tgz",
+ "integrity": "sha1-uWt99YfwHdkXJsQY8wVTsUGOPWI=",
+ "dev": true,
+ "requires": {
+ "randombytes": "2.0.5",
+ "safe-buffer": "5.1.1"
+ },
+ "dependencies": {
+ "safe-buffer": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
+ "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==",
"dev": true
}
}
@@ -4763,6 +7998,11 @@
"resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.2.0.tgz",
"integrity": "sha1-mUl2z2pQlqQRYoQEkvC9xdbn+5Y=",
"dev": true,
+ "requires": {
+ "bytes": "2.4.0",
+ "iconv-lite": "0.4.15",
+ "unpipe": "1.0.0"
+ },
"dependencies": {
"bytes": {
"version": "2.4.0",
@@ -4789,6 +8029,12 @@
"resolved": "https://registry.npmjs.org/rc/-/rc-1.2.1.tgz",
"integrity": "sha1-LgPo5C7kULjLPc5lvhv4l04d/ZU=",
"dev": true,
+ "requires": {
+ "deep-extend": "0.4.2",
+ "ini": "1.3.4",
+ "minimist": "1.2.0",
+ "strip-json-comments": "2.0.1"
+ },
"dependencies": {
"minimist": {
"version": "1.2.0",
@@ -4802,43 +8048,79 @@
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
"integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "load-json-file": "1.1.0",
+ "normalize-package-data": "2.3.8",
+ "path-type": "1.1.0"
+ }
},
"read-pkg-up": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
"integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "find-up": "1.1.2",
+ "read-pkg": "1.1.0"
+ }
},
"readable-stream": {
"version": "2.2.11",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.11.tgz",
"integrity": "sha512-h+8+r3MKEhkiVrwdKL8aWs1oc1VvBu33ueshOvS26RsZQ3Amhx/oO3TKe4lApSV9ueY6as8EAh7mtuFjdlhg9Q==",
- "dev": true
+ "dev": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "1.0.0",
+ "process-nextick-args": "1.0.7",
+ "safe-buffer": "5.0.1",
+ "string_decoder": "1.0.2",
+ "util-deprecate": "1.0.2"
+ }
},
"readdirp": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz",
"integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "minimatch": "3.0.4",
+ "readable-stream": "2.2.11",
+ "set-immediate-shim": "1.0.1"
+ }
},
"redent": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz",
"integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "indent-string": "2.1.0",
+ "strip-indent": "1.0.1"
+ }
},
"reduce-css-calc": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz",
"integrity": "sha1-dHyRTgSWFKTJz7umKYca0dKSdxY=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "balanced-match": "0.4.2",
+ "math-expression-evaluator": "1.2.17",
+ "reduce-function-call": "1.0.2"
+ }
},
"reduce-function-call": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/reduce-function-call/-/reduce-function-call-1.0.2.tgz",
"integrity": "sha1-WiAL+S4ON3UXUv5FsKszD9S2vpk=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "balanced-match": "0.4.2"
+ }
},
"reflect-metadata": {
"version": "0.1.10",
@@ -4862,25 +8144,41 @@
"version": "0.4.3",
"resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.3.tgz",
"integrity": "sha1-mxpsNdTQ3871cRrmUejp09cRQUU=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "is-equal-shallow": "0.1.3",
+ "is-primitive": "2.0.0"
+ }
},
"regexpu-core": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-1.0.0.tgz",
"integrity": "sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "regenerate": "1.3.2",
+ "regjsgen": "0.2.0",
+ "regjsparser": "0.1.5"
+ }
},
"registry-auth-token": {
"version": "3.3.1",
"resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.1.tgz",
"integrity": "sha1-+w0yie4Nmtosu1KvXf5mywcNMAY=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "rc": "1.2.1",
+ "safe-buffer": "5.0.1"
+ }
},
"registry-url": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz",
"integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "rc": "1.2.1"
+ }
},
"regjsgen": {
"version": "0.2.0",
@@ -4892,7 +8190,10 @@
"version": "0.1.5",
"resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz",
"integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "jsesc": "0.5.0"
+ }
},
"relateurl": {
"version": "0.2.7",
@@ -4911,6 +8212,13 @@
"resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.1.tgz",
"integrity": "sha1-iYyr/Ivt5Le5ETWj/9Mj5YwNsxk=",
"dev": true,
+ "requires": {
+ "css-select": "1.2.0",
+ "dom-converter": "0.1.4",
+ "htmlparser2": "3.3.0",
+ "strip-ansi": "3.0.1",
+ "utila": "0.3.3"
+ },
"dependencies": {
"utila": {
"version": "0.3.3",
@@ -4936,13 +8244,40 @@
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
"integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "is-finite": "1.0.2"
+ }
},
"request": {
"version": "2.81.0",
"resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz",
"integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=",
- "dev": true
+ "dev": 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"
+ }
},
"require-directory": {
"version": "2.1.1",
@@ -4950,6 +8285,12 @@
"integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
"dev": true
},
+ "require-from-string": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-1.2.1.tgz",
+ "integrity": "sha1-UpyczvJzgK3+yaL5ZbZJu+5jZBg=",
+ "dev": true
+ },
"require-main-filename": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz",
@@ -4966,43 +8307,107 @@
"version": "1.3.3",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.3.3.tgz",
"integrity": "sha1-ZVkHw0aahoDcLeOidaj91paR8OU=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "path-parse": "1.0.5"
+ }
},
"restore-cursor": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz",
"integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "onetime": "2.0.1",
+ "signal-exit": "3.0.2"
+ }
},
"right-align": {
"version": "0.1.3",
"resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz",
"integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "align-text": "0.1.4"
+ }
},
"rimraf": {
"version": "2.6.1",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.1.tgz",
"integrity": "sha1-wjOOxkPfeht/5cVPqG9XQopV8z0=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "glob": "7.1.2"
+ }
},
"ripemd160": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.1.tgz",
"integrity": "sha1-D0WEKVxTo2KK9+bXmsohzlfRxuc=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "hash-base": "2.0.2",
+ "inherits": "2.0.3"
+ }
+ },
+ "router": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/router/-/router-1.1.5.tgz",
+ "integrity": "sha1-ycaTUgGzCsHyJ62mr4bozqZRU4c=",
+ "dev": true,
+ "requires": {
+ "array-flatten": "2.1.1",
+ "debug": "2.2.0",
+ "methods": "1.1.2",
+ "parseurl": "1.3.1",
+ "path-to-regexp": "0.1.7",
+ "setprototypeof": "1.0.2",
+ "utils-merge": "1.0.0"
+ },
+ "dependencies": {
+ "array-flatten": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.1.tgz",
+ "integrity": "sha1-Qmu52oQJDBg42BLIFQryCoMx4pY=",
+ "dev": true
+ },
+ "debug": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz",
+ "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=",
+ "dev": true,
+ "requires": {
+ "ms": "0.7.1"
+ }
+ },
+ "ms": {
+ "version": "0.7.1",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz",
+ "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=",
+ "dev": true
+ },
+ "setprototypeof": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.2.tgz",
+ "integrity": "sha1-gaVSFB7BBLiOic44MQOtXGZWTQg=",
+ "dev": true
+ }
+ }
},
"rsvp": {
- "version": "3.5.0",
- "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-3.5.0.tgz",
- "integrity": "sha1-pixXOkrk4d/QaX68YkLnnGgeqjQ=",
+ "version": "3.6.2",
+ "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-3.6.2.tgz",
+ "integrity": "sha1-LpZJFZmpbN4bUV1WdKj3qRRSkmo=",
"dev": true
},
"run-async": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz",
"integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "is-promise": "2.1.0"
+ }
},
"rx-lite": {
"version": "4.0.8",
@@ -5014,12 +8419,18 @@
"version": "4.0.8",
"resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz",
"integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "rx-lite": "4.0.8"
+ }
},
"rxjs": {
"version": "5.4.0",
"resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.4.0.tgz",
- "integrity": "sha1-p9sUqxV/nXqsalbmVeejhg05vyY="
+ "integrity": "sha1-p9sUqxV/nXqsalbmVeejhg05vyY=",
+ "requires": {
+ "symbol-observable": "1.0.4"
+ }
},
"safe-buffer": {
"version": "5.0.1",
@@ -5031,18 +8442,31 @@
"version": "2.2.4",
"resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.4.tgz",
"integrity": "sha1-E/vWPNHK8JCLn9k0dq1DpR0eC0k=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "glob": "7.1.2",
+ "lodash": "4.17.4",
+ "scss-tokenizer": "0.2.3",
+ "yargs": "7.1.0"
+ }
},
"sass-loader": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-4.1.1.tgz",
- "integrity": "sha1-ee+UaM8L9kbClSnh8sumvW5Rx7w=",
+ "version": "6.0.6",
+ "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-6.0.6.tgz",
+ "integrity": "sha1-6dXmwfFV+qMqSybXqbcQfCJeQPk=",
"dev": true,
+ "requires": {
+ "async": "2.4.1",
+ "clone-deep": "0.3.0",
+ "loader-utils": "1.1.0",
+ "lodash.tail": "4.1.1",
+ "pify": "3.0.0"
+ },
"dependencies": {
- "loader-utils": {
- "version": "0.2.17",
- "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz",
- "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=",
+ "pify": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
"dev": true
}
}
@@ -5051,7 +8475,10 @@
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/saucelabs/-/saucelabs-1.3.0.tgz",
"integrity": "sha1-0kDoAJ33+ocwbsRXimm6O1xCT+4=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "https-proxy-agent": "1.0.0"
+ }
},
"sax": {
"version": "1.2.2",
@@ -5059,23 +8486,56 @@
"integrity": "sha1-/YYxojvHgmvvXYcb24c3jJVkeCg=",
"dev": true
},
+ "schema-utils": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.3.0.tgz",
+ "integrity": "sha1-9YdyIs4+kx7a4DnxfrNxbnE3+M8=",
+ "dev": true,
+ "requires": {
+ "ajv": "5.5.0"
+ },
+ "dependencies": {
+ "ajv": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.0.tgz",
+ "integrity": "sha1-6yhAdG6dxIvV4GOjbj/UAMXqtak=",
+ "dev": true,
+ "requires": {
+ "co": "4.6.0",
+ "fast-deep-equal": "1.0.0",
+ "fast-json-stable-stringify": "2.0.0",
+ "json-schema-traverse": "0.3.1"
+ }
+ }
+ }
+ },
"script-loader": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/script-loader/-/script-loader-0.7.0.tgz",
- "integrity": "sha1-aF3H5waeDe56kmdPDrxbD1W6pew=",
- "dev": true
+ "version": "0.7.2",
+ "resolved": "https://registry.npmjs.org/script-loader/-/script-loader-0.7.2.tgz",
+ "integrity": "sha1-IBbbb4byX1z1baOJFdgzeLsWa6c=",
+ "dev": true,
+ "requires": {
+ "raw-loader": "0.5.1"
+ }
},
"scss-tokenizer": {
"version": "0.2.3",
"resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz",
"integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=",
"dev": true,
+ "requires": {
+ "js-base64": "2.1.9",
+ "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
+ "dev": true,
+ "requires": {
+ "amdefine": "1.0.1"
+ }
}
}
},
@@ -5086,15 +8546,28 @@
"dev": true
},
"selenium-webdriver": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-3.0.1.tgz",
- "integrity": "sha1-ot6l2kqX9mcuiefKcnbO+jZRR6c=",
+ "version": "2.53.3",
+ "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-2.53.3.tgz",
+ "integrity": "sha1-0p/1qVff8aG0ncRXdW5OS/vc4IU=",
"dev": true,
+ "requires": {
+ "adm-zip": "0.4.4",
+ "rimraf": "2.6.1",
+ "tmp": "0.0.24",
+ "ws": "1.1.1",
+ "xml2js": "0.4.4"
+ },
"dependencies": {
+ "adm-zip": {
+ "version": "0.4.4",
+ "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.4.tgz",
+ "integrity": "sha1-ph7VrmkFw66lizplfSUDMJEFJzY=",
+ "dev": true
+ },
"tmp": {
- "version": "0.0.30",
- "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.30.tgz",
- "integrity": "sha1-ckGdSovn1s51FI/YsyTlk6cRwu0=",
+ "version": "0.0.24",
+ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.24.tgz",
+ "integrity": "sha1-1qXhmNFKmDXMby18PZ4wJCjIzxI=",
"dev": true
}
}
@@ -5109,45 +8582,257 @@
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz",
"integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "semver": "5.3.0"
+ }
},
"semver-dsl": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/semver-dsl/-/semver-dsl-1.0.1.tgz",
"integrity": "sha1-02eN5VVeimH2Ke7QJTZq5fJzQKA=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "semver": "5.3.0"
+ }
},
"send": {
- "version": "0.15.3",
- "resolved": "https://registry.npmjs.org/send/-/send-0.15.3.tgz",
- "integrity": "sha1-UBP5+ZAj31DRvZiSwZ4979HVMwk=",
+ "version": "0.13.0",
+ "resolved": "https://registry.npmjs.org/send/-/send-0.13.0.tgz",
+ "integrity": "sha1-UY+SGusFYK7H3KspkLFM9vPM5d4=",
"dev": true,
+ "requires": {
+ "debug": "2.2.0",
+ "depd": "1.0.1",
+ "destroy": "1.0.3",
+ "escape-html": "1.0.2",
+ "etag": "1.7.0",
+ "fresh": "0.3.0",
+ "http-errors": "1.3.1",
+ "mime": "1.3.4",
+ "ms": "0.7.1",
+ "on-finished": "2.3.0",
+ "range-parser": "1.0.3",
+ "statuses": "1.2.1"
+ },
"dependencies": {
"debug": {
- "version": "2.6.7",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.7.tgz",
- "integrity": "sha1-krrR9tBbu2u6Isyoi80OyJTChh4=",
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz",
+ "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=",
+ "dev": true,
+ "requires": {
+ "ms": "0.7.1"
+ }
+ },
+ "depd": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-1.0.1.tgz",
+ "integrity": "sha1-gK7GTJ1tl+ZcwqnKqTwKpqv3Oqo=",
"dev": true
},
+ "destroy": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.3.tgz",
+ "integrity": "sha1-tDO0ck5x/YVR2YhRdIUcX8N34sk=",
+ "dev": true
+ },
+ "escape-html": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.2.tgz",
+ "integrity": "sha1-130y+pjjjC9BroXpJ44ODmuhAiw=",
+ "dev": true
+ },
+ "etag": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/etag/-/etag-1.7.0.tgz",
+ "integrity": "sha1-A9MLX2fdbmMtKUXTDWZScxo01dg=",
+ "dev": true
+ },
+ "fresh": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.3.0.tgz",
+ "integrity": "sha1-ZR+DjiJCTnVm3hYdg1jKoZn4PU8=",
+ "dev": true
+ },
+ "http-errors": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.3.1.tgz",
+ "integrity": "sha1-GX4izevUGYWF6GlO9nhhl7ke2UI=",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3",
+ "statuses": "1.2.1"
+ }
+ },
"mime": {
"version": "1.3.4",
"resolved": "https://registry.npmjs.org/mime/-/mime-1.3.4.tgz",
"integrity": "sha1-EV+eO2s9rylZmDyzjxSaLUDrXVM=",
"dev": true
+ },
+ "ms": {
+ "version": "0.7.1",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz",
+ "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=",
+ "dev": true
+ },
+ "range-parser": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.0.3.tgz",
+ "integrity": "sha1-aHKCNTXGkuLCoBA4Jq/YLC4P8XU=",
+ "dev": true
+ },
+ "statuses": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.2.1.tgz",
+ "integrity": "sha1-3e1FzBglbVHtQK7BQkidXGECbSg=",
+ "dev": true
}
}
},
+ "serve-favicon": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/serve-favicon/-/serve-favicon-2.4.2.tgz",
+ "integrity": "sha1-rtHY3mfVuDGSzzH99T0uopRkNj4=",
+ "dev": true,
+ "requires": {
+ "etag": "1.8.0",
+ "fresh": "0.5.0",
+ "ms": "2.0.0",
+ "parseurl": "1.3.1"
+ }
+ },
"serve-index": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.0.tgz",
- "integrity": "sha1-0rKA/FYNYW7oG0i/D6gqvtJIXOc=",
- "dev": true
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz",
+ "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=",
+ "dev": true,
+ "requires": {
+ "accepts": "1.3.4",
+ "batch": "0.6.1",
+ "debug": "2.6.9",
+ "escape-html": "1.0.3",
+ "http-errors": "1.6.2",
+ "mime-types": "2.1.17",
+ "parseurl": "1.3.2"
+ },
+ "dependencies": {
+ "accepts": {
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.4.tgz",
+ "integrity": "sha1-hiRnWMfdbSGmR0/whKR0DsBesh8=",
+ "dev": true,
+ "requires": {
+ "mime-types": "2.1.17",
+ "negotiator": "0.6.1"
+ }
+ },
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "depd": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz",
+ "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=",
+ "dev": true
+ },
+ "http-errors": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz",
+ "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=",
+ "dev": true,
+ "requires": {
+ "depd": "1.1.1",
+ "inherits": "2.0.3",
+ "setprototypeof": "1.0.3",
+ "statuses": "1.3.1"
+ }
+ },
+ "mime-db": {
+ "version": "1.30.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz",
+ "integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE=",
+ "dev": true
+ },
+ "mime-types": {
+ "version": "2.1.17",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz",
+ "integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=",
+ "dev": true,
+ "requires": {
+ "mime-db": "1.30.0"
+ }
+ },
+ "parseurl": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz",
+ "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=",
+ "dev": true
+ }
+ }
},
"serve-static": {
- "version": "1.12.3",
- "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.12.3.tgz",
- "integrity": "sha1-n0uhni8wMMVH+K+ZEHg47DjVseI=",
- "dev": true
+ "version": "1.12.1",
+ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.12.1.tgz",
+ "integrity": "sha1-dEOpZePO1kes61Y5+ga/TRu+ADk=",
+ "dev": true,
+ "requires": {
+ "encodeurl": "1.0.1",
+ "escape-html": "1.0.3",
+ "parseurl": "1.3.1",
+ "send": "0.15.1"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.1.tgz",
+ "integrity": "sha1-eYVQkLosTjEVzH2HaUkdWPBJE1E=",
+ "dev": true,
+ "requires": {
+ "ms": "0.7.2"
+ }
+ },
+ "mime": {
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.3.4.tgz",
+ "integrity": "sha1-EV+eO2s9rylZmDyzjxSaLUDrXVM=",
+ "dev": true
+ },
+ "ms": {
+ "version": "0.7.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz",
+ "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=",
+ "dev": true
+ },
+ "send": {
+ "version": "0.15.1",
+ "resolved": "https://registry.npmjs.org/send/-/send-0.15.1.tgz",
+ "integrity": "sha1-igI1TCbm9cynAAZfXwzeupDse18=",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.1",
+ "depd": "1.1.0",
+ "destroy": "1.0.4",
+ "encodeurl": "1.0.1",
+ "escape-html": "1.0.3",
+ "etag": "1.8.0",
+ "fresh": "0.5.0",
+ "http-errors": "1.6.1",
+ "mime": "1.3.4",
+ "ms": "0.7.2",
+ "on-finished": "2.3.0",
+ "range-parser": "1.2.0",
+ "statuses": "1.3.1"
+ }
+ }
+ }
},
"set-blocking": {
"version": "2.0.0",
@@ -5174,9 +8859,48 @@
"dev": true
},
"sha.js": {
- "version": "2.4.8",
- "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.8.tgz",
- "integrity": "sha1-NwaMLEdra69ALRSknGf1l5IfY08=",
+ "version": "2.4.9",
+ "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.9.tgz",
+ "integrity": "sha1-mPZIgEdLdPSji42p08Dy0QRjPn0=",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3",
+ "safe-buffer": "5.0.1"
+ }
+ },
+ "shallow-clone": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-0.1.2.tgz",
+ "integrity": "sha1-WQnodLp3EG1zrEFM/sH/yofZcGA=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1",
+ "kind-of": "2.0.1",
+ "lazy-cache": "0.2.7",
+ "mixin-object": "2.0.1"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-2.0.1.tgz",
+ "integrity": "sha1-AY7HpM5+OobLkUG+UZ0kyPqpgbU=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.5"
+ }
+ },
+ "lazy-cache": {
+ "version": "0.2.7",
+ "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-0.2.7.tgz",
+ "integrity": "sha1-f+3fLctu23fRHvHRF6tf/fCrG2U=",
+ "dev": true
+ }
+ }
+ },
+ "sigmund": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz",
+ "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=",
"dev": true
},
"signal-exit": {
@@ -5189,7 +8913,10 @@
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/silent-error/-/silent-error-1.1.0.tgz",
"integrity": "sha1-IglwbxyFCp8dENDYQJGLRvJuG8k=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "debug": "2.6.8"
+ }
},
"slide": {
"version": "1.1.6",
@@ -5201,19 +8928,34 @@
"version": "1.0.9",
"resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz",
"integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "hoek": "2.16.3"
+ }
},
"socket.io": {
"version": "1.7.2",
"resolved": "https://registry.npmjs.org/socket.io/-/socket.io-1.7.2.tgz",
"integrity": "sha1-g7u98ueSY7N4kA2kA+eEPgXcO3E=",
"dev": true,
+ "requires": {
+ "debug": "2.3.3",
+ "engine.io": "1.8.2",
+ "has-binary": "0.1.7",
+ "object-assign": "4.1.0",
+ "socket.io-adapter": "0.5.0",
+ "socket.io-client": "1.7.2",
+ "socket.io-parser": "2.3.1"
+ },
"dependencies": {
"debug": {
"version": "2.3.3",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz",
"integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "ms": "0.7.2"
+ }
},
"ms": {
"version": "0.7.2",
@@ -5234,12 +8976,19 @@
"resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-0.5.0.tgz",
"integrity": "sha1-y21LuL7IHhB4uZZ3+c7QBGBmu4s=",
"dev": true,
+ "requires": {
+ "debug": "2.3.3",
+ "socket.io-parser": "2.3.1"
+ },
"dependencies": {
"debug": {
"version": "2.3.3",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz",
"integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "ms": "0.7.2"
+ }
},
"ms": {
"version": "0.7.2",
@@ -5254,6 +9003,19 @@
"resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-1.7.2.tgz",
"integrity": "sha1-Of2ww91FDjIbfkDP2DYS7FM91kQ=",
"dev": true,
+ "requires": {
+ "backo2": "1.0.2",
+ "component-bind": "1.0.0",
+ "component-emitter": "1.2.1",
+ "debug": "2.3.3",
+ "engine.io-client": "1.8.2",
+ "has-binary": "0.1.7",
+ "indexof": "0.0.1",
+ "object-component": "0.0.3",
+ "parseuri": "0.0.5",
+ "socket.io-parser": "2.3.1",
+ "to-array": "0.1.4"
+ },
"dependencies": {
"component-emitter": {
"version": "1.2.1",
@@ -5265,7 +9027,10 @@
"version": "2.3.3",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz",
"integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "ms": "0.7.2"
+ }
},
"ms": {
"version": "0.7.2",
@@ -5280,12 +9045,21 @@
"resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-2.3.1.tgz",
"integrity": "sha1-3VMgJRA85Clpcya+/WQAX8/ltKA=",
"dev": true,
+ "requires": {
+ "component-emitter": "1.1.2",
+ "debug": "2.2.0",
+ "isarray": "0.0.1",
+ "json3": "3.3.2"
+ },
"dependencies": {
"debug": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz",
"integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "ms": "0.7.1"
+ }
},
"isarray": {
"version": "0.0.1",
@@ -5306,6 +9080,10 @@
"resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.18.tgz",
"integrity": "sha1-2bKJMWyn33dZXvKZ4HXw+TfrQgc=",
"dev": true,
+ "requires": {
+ "faye-websocket": "0.10.0",
+ "uuid": "2.0.3"
+ },
"dependencies": {
"uuid": {
"version": "2.0.3",
@@ -5316,16 +9094,27 @@
}
},
"sockjs-client": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.1.1.tgz",
- "integrity": "sha1-KEhD6al4TXxHSxVxsyQPyp3aS7A=",
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.1.2.tgz",
+ "integrity": "sha1-8CEqhVDkyUaMjM6u79LjSTwDOtU=",
"dev": true,
+ "requires": {
+ "debug": "2.6.8",
+ "eventsource": "0.1.6",
+ "faye-websocket": "0.11.1",
+ "inherits": "2.0.3",
+ "json3": "3.3.2",
+ "url-parse": "1.2.0"
+ },
"dependencies": {
"faye-websocket": {
"version": "0.11.1",
"resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.1.tgz",
"integrity": "sha1-8O/hjE9W5PQK/H4Gxxn9XuYYjzg=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "websocket-driver": "0.7.0"
+ }
}
}
},
@@ -5333,12 +9122,15 @@
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz",
"integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "is-plain-obj": "1.1.0"
+ }
},
"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": "sha1-qqR0A/eyRakvvJfqCPJQ1gh+0IU=",
"dev": true
},
"source-map": {
@@ -5348,27 +9140,41 @@
"dev": true
},
"source-map-loader": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-0.1.6.tgz",
- "integrity": "sha1-wJkD2m1zueU7ftjuUkVZcFHpjpE=",
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-0.2.3.tgz",
+ "integrity": "sha1-1LDIzUfVTtzj5r+g9SP0UrWw5SE=",
"dev": true,
+ "requires": {
+ "async": "2.6.0",
+ "loader-utils": "0.2.17",
+ "source-map": "0.6.1"
+ },
"dependencies": {
"async": {
- "version": "0.9.2",
- "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz",
- "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=",
- "dev": true
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz",
+ "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==",
+ "dev": true,
+ "requires": {
+ "lodash": "4.17.4"
+ }
},
"loader-utils": {
"version": "0.2.17",
"resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz",
"integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "big.js": "3.2.0",
+ "emojis-list": "2.1.0",
+ "json5": "0.5.1",
+ "object-assign": "4.1.1"
+ }
},
"source-map": {
- "version": "0.1.43",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz",
- "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=",
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=",
"dev": true
}
}
@@ -5377,13 +9183,19 @@
"version": "0.4.15",
"resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.15.tgz",
"integrity": "sha1-AyAt9lwG0r2MfsI2KhkwVv7407E=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "source-map": "0.5.6"
+ }
},
"spdx-correct": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz",
"integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "spdx-license-ids": "1.2.2"
+ }
},
"spdx-expression-parse": {
"version": "1.0.4",
@@ -5401,13 +9213,30 @@
"version": "3.4.7",
"resolved": "https://registry.npmjs.org/spdy/-/spdy-3.4.7.tgz",
"integrity": "sha1-Qv9B7OXMD5mjpsKKq7c/XDsDrLw=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "debug": "2.6.8",
+ "handle-thing": "1.2.5",
+ "http-deceiver": "1.2.7",
+ "safe-buffer": "5.0.1",
+ "select-hose": "2.0.0",
+ "spdy-transport": "2.0.20"
+ }
},
"spdy-transport": {
"version": "2.0.20",
"resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-2.0.20.tgz",
"integrity": "sha1-c15yBUxIayNU/onnAiVgBKOazk0=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "debug": "2.6.8",
+ "detect-node": "2.0.3",
+ "hpack.js": "2.1.6",
+ "obuf": "1.1.1",
+ "readable-stream": "2.2.11",
+ "safe-buffer": "5.0.1",
+ "wbuf": "1.7.2"
+ }
},
"sprintf-js": {
"version": "1.0.3",
@@ -5415,11 +9244,41 @@
"integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
"dev": true
},
+ "ssh2": {
+ "version": "0.5.5",
+ "resolved": "https://registry.npmjs.org/ssh2/-/ssh2-0.5.5.tgz",
+ "integrity": "sha1-x3gezS7OcwSiU89iD6taXCK7IjU=",
+ "dev": true,
+ "requires": {
+ "ssh2-streams": "0.1.20"
+ }
+ },
+ "ssh2-streams": {
+ "version": "0.1.20",
+ "resolved": "https://registry.npmjs.org/ssh2-streams/-/ssh2-streams-0.1.20.tgz",
+ "integrity": "sha1-URGNFUVV31Rp7h9n4M8efoosDjo=",
+ "dev": true,
+ "requires": {
+ "asn1": "0.2.3",
+ "semver": "5.3.0",
+ "streamsearch": "0.1.2"
+ }
+ },
"sshpk": {
"version": "1.13.1",
"resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz",
"integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=",
"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"
+ },
"dependencies": {
"assert-plus": {
"version": "1.0.0",
@@ -5439,18 +9298,38 @@
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.0.tgz",
"integrity": "sha1-osfIWH5U2UJ+qe2zrD8s1SLfN4s=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "readable-stream": "2.2.11"
+ }
},
"stream-browserify": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz",
"integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3",
+ "readable-stream": "2.2.11"
+ }
},
"stream-http": {
- "version": "2.7.1",
- "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.7.1.tgz",
- "integrity": "sha1-VGpRdBrVprB+njGwsQRBqRffUoo=",
+ "version": "2.7.2",
+ "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.7.2.tgz",
+ "integrity": "sha1-QKBQ7I3DtTsz2ZCUFcAsC/Gr+60=",
+ "dev": true,
+ "requires": {
+ "builtin-status-codes": "3.0.0",
+ "inherits": "2.0.3",
+ "readable-stream": "2.2.11",
+ "to-arraybuffer": "1.0.1",
+ "xtend": "4.0.1"
+ }
+ },
+ "streamsearch": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz",
+ "integrity": "sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo=",
"dev": true
},
"strict-uri-encode": {
@@ -5463,13 +9342,20 @@
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-2.0.0.tgz",
"integrity": "sha1-Y1xUNsxypuDDh87KJ41OLuxSaH4=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "is-fullwidth-code-point": "2.0.0",
+ "strip-ansi": "3.0.1"
+ }
},
"string_decoder": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.2.tgz",
"integrity": "sha1-sp4fThEl+pehA4K4pTNze3SR4Xk=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "safe-buffer": "5.0.1"
+ }
},
"stringstream": {
"version": "0.0.5",
@@ -5481,13 +9367,19 @@
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
"integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
},
"strip-bom": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
"integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "is-utf8": "0.2.1"
+ }
},
"strip-eof": {
"version": "1.0.0",
@@ -5499,7 +9391,10 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz",
"integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "get-stdin": "4.0.1"
+ }
},
"strip-json-comments": {
"version": "2.0.1",
@@ -5511,19 +9406,38 @@
"version": "0.13.2",
"resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.13.2.tgz",
"integrity": "sha1-dFMzhM9pjHEEx5URULSXF63C87s=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "loader-utils": "1.1.0"
+ }
},
"stylus": {
"version": "0.54.5",
"resolved": "https://registry.npmjs.org/stylus/-/stylus-0.54.5.tgz",
"integrity": "sha1-QrlWCTHKcJDOhRWnmLqeaqPW3Hk=",
"dev": true,
+ "requires": {
+ "css-parse": "1.7.0",
+ "debug": "2.6.8",
+ "glob": "7.0.6",
+ "mkdirp": "0.5.1",
+ "sax": "0.5.8",
+ "source-map": "0.1.43"
+ },
"dependencies": {
"glob": {
"version": "7.0.6",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.0.6.tgz",
"integrity": "sha1-IRuvr0nlJbjNkyYNFKsTYVKz9Xo=",
- "dev": 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"
+ }
},
"sax": {
"version": "0.5.8",
@@ -5535,35 +9449,47 @@
"version": "0.1.43",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz",
"integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "amdefine": "1.0.1"
+ }
}
}
},
"stylus-loader": {
- "version": "2.5.1",
- "resolved": "https://registry.npmjs.org/stylus-loader/-/stylus-loader-2.5.1.tgz",
- "integrity": "sha1-1a2KfglYrcErhYHnuxabmmHVQhY=",
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/stylus-loader/-/stylus-loader-3.0.1.tgz",
+ "integrity": "sha1-d/SzT9Aw0lsmF7z1UT21sHMMQIk=",
"dev": true,
- "dependencies": {
- "loader-utils": {
- "version": "0.2.17",
- "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz",
- "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=",
- "dev": true
- }
+ "requires": {
+ "loader-utils": "1.1.0",
+ "lodash.clonedeep": "4.5.0",
+ "when": "3.6.4"
}
},
"supports-color": {
"version": "3.2.3",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
"integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "has-flag": "1.0.0"
+ }
},
"svgo": {
"version": "0.7.2",
"resolved": "https://registry.npmjs.org/svgo/-/svgo-0.7.2.tgz",
"integrity": "sha1-n1dyQTlSE1xv779Ar+ak+qiLS7U=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "coa": "1.0.4",
+ "colors": "1.1.2",
+ "csso": "2.3.2",
+ "js-yaml": "3.7.0",
+ "mkdirp": "0.5.1",
+ "sax": "1.2.2",
+ "whet.extend": "0.9.9"
+ }
},
"symbol-observable": {
"version": "1.0.4",
@@ -5571,22 +9497,31 @@
"integrity": "sha1-Kb9hXUqnEhvdiYsi1LP5vE4qoD0="
},
"tapable": {
- "version": "0.2.6",
- "resolved": "https://registry.npmjs.org/tapable/-/tapable-0.2.6.tgz",
- "integrity": "sha1-IGvo4YiGC1FEJTdebxrom/sB/Y0=",
+ "version": "0.2.8",
+ "resolved": "https://registry.npmjs.org/tapable/-/tapable-0.2.8.tgz",
+ "integrity": "sha1-mTcqXJmb8t8WCvwNdL7U9HlIzSI=",
"dev": true
},
"tar": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz",
"integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "block-stream": "0.0.9",
+ "fstream": "1.0.11",
+ "inherits": "2.0.3"
+ }
},
"temp": {
"version": "0.8.3",
"resolved": "https://registry.npmjs.org/temp/-/temp-0.8.3.tgz",
"integrity": "sha1-4Ma8TSa5AxJEEOT+2BEDAU38H1k=",
"dev": true,
+ "requires": {
+ "os-tmpdir": "1.0.2",
+ "rimraf": "2.2.8"
+ },
"dependencies": {
"rimraf": {
"version": "2.2.8",
@@ -5600,7 +9535,10 @@
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/term-size/-/term-size-0.1.1.tgz",
"integrity": "sha1-hzYLljlsq1dgljcUzaDQy+7K2co=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "execa": "0.4.0"
+ }
},
"tether": {
"version": "1.4.0",
@@ -5613,6 +9551,17 @@
"integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
"dev": true
},
+ "ticky": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/ticky/-/ticky-1.0.1.tgz",
+ "integrity": "sha1-t8+nHnaPHJAAxJe5FRswlHxQ5G0="
+ },
+ "time-stamp": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-2.0.0.tgz",
+ "integrity": "sha1-lcakRTDhW6jW9KPsuMOj+sRto1c=",
+ "dev": true
+ },
"timed-out": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz",
@@ -5620,16 +9569,22 @@
"dev": true
},
"timers-browserify": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.2.tgz",
- "integrity": "sha1-q0iDz1l9zVCvIRNJoA+8pWrIa4Y=",
- "dev": true
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.4.tgz",
+ "integrity": "sha1-lspT9LeUpefA4b18yIo3Ipj6AeY=",
+ "dev": true,
+ "requires": {
+ "setimmediate": "1.0.5"
+ }
},
"tmp": {
"version": "0.0.31",
"resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.31.tgz",
"integrity": "sha1-jzirlDjhcxXl29izZX6L+yd65Kc=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "os-tmpdir": "1.0.2"
+ }
},
"to-array": {
"version": "0.1.4",
@@ -5650,16 +9605,19 @@
"dev": true
},
"toposort": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/toposort/-/toposort-1.0.3.tgz",
- "integrity": "sha1-8CzYp0vYvi/A6YYRw7rLlaFxhpw=",
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/toposort/-/toposort-1.0.6.tgz",
+ "integrity": "sha1-wxdI5V0hDv/AD9zcfW5o19e7nOw=",
"dev": true
},
"tough-cookie": {
"version": "2.3.2",
"resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz",
"integrity": "sha1-8IH3bkyFcg5sN6X6ztc3FQ2EByo=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "punycode": "1.4.1"
+ }
},
"trim-newlines": {
"version": "1.0.0",
@@ -5678,6 +9636,20 @@
"resolved": "https://registry.npmjs.org/ts-node/-/ts-node-2.0.0.tgz",
"integrity": "sha1-FuT+zJSQiCOLTL8cOclYJSa2b3Q=",
"dev": true,
+ "requires": {
+ "arrify": "1.0.1",
+ "chalk": "1.1.3",
+ "diff": "3.2.0",
+ "make-error": "1.3.0",
+ "minimist": "1.2.0",
+ "mkdirp": "0.5.1",
+ "pinkie": "2.0.4",
+ "source-map-support": "0.4.15",
+ "tsconfig": "5.0.3",
+ "v8flags": "2.1.1",
+ "xtend": "4.0.1",
+ "yn": "1.3.0"
+ },
"dependencies": {
"minimist": {
"version": "1.2.0",
@@ -5691,13 +9663,25 @@
"version": "5.0.3",
"resolved": "https://registry.npmjs.org/tsconfig/-/tsconfig-5.0.3.tgz",
"integrity": "sha1-X0J45wGACWeo/Dg/0ZZIh48qbjo=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "any-promise": "1.3.0",
+ "parse-json": "2.2.0",
+ "strip-bom": "2.0.0",
+ "strip-json-comments": "2.0.1"
+ }
},
"tsickle": {
"version": "0.21.6",
"resolved": "https://registry.npmjs.org/tsickle/-/tsickle-0.21.6.tgz",
"integrity": "sha1-U7Abl5xcE/2xOvs/uVgXflmRWI0=",
"dev": true,
+ "requires": {
+ "minimist": "1.2.0",
+ "mkdirp": "0.5.1",
+ "source-map": "0.5.6",
+ "source-map-support": "0.4.15"
+ },
"dependencies": {
"minimist": {
"version": "1.2.0",
@@ -5712,12 +9696,27 @@
"resolved": "https://registry.npmjs.org/tslint/-/tslint-4.5.1.tgz",
"integrity": "sha1-BTVocb7yOkNJBnNABvwYgza6gks=",
"dev": true,
+ "requires": {
+ "babel-code-frame": "6.22.0",
+ "colors": "1.1.2",
+ "diff": "3.2.0",
+ "findup-sync": "0.3.0",
+ "glob": "7.1.2",
+ "optimist": "0.6.1",
+ "resolve": "1.3.3",
+ "tsutils": "1.9.1",
+ "update-notifier": "2.2.0"
+ },
"dependencies": {
"optimist": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz",
"integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "minimist": "0.0.8",
+ "wordwrap": "0.0.3"
+ }
}
}
},
@@ -5737,7 +9736,10 @@
"version": "0.6.0",
"resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
"integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "safe-buffer": "5.0.1"
+ }
},
"tweetnacl": {
"version": "0.14.5",
@@ -5750,7 +9752,11 @@
"version": "1.6.15",
"resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.15.tgz",
"integrity": "sha1-yrEPtJCeRByChC6v4a1kbIGARBA=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "media-typer": "0.3.0",
+ "mime-types": "2.1.15"
+ }
},
"typescript": {
"version": "2.2.2",
@@ -5759,10 +9765,22 @@
"dev": true
},
"uglify-js": {
- "version": "3.0.15",
- "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.0.15.tgz",
- "integrity": "sha1-qssyOoRrI0YCJw3q2KMkQaiAb0I=",
- "dev": true
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.2.0.tgz",
+ "integrity": "sha512-L98DlTshoPGnZGF8pr3MoE+CCo6n9joktHNHMPkckeBV8xTVc4CWtC0kGGhQsIvnX2Ug4nXFTAeE7SpTrPX2tg==",
+ "dev": true,
+ "requires": {
+ "commander": "2.12.2",
+ "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": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=",
+ "dev": true
+ }
+ }
},
"uglify-to-browserify": {
"version": "1.0.2",
@@ -5787,7 +9805,10 @@
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/uniqid/-/uniqid-4.1.1.tgz",
"integrity": "sha1-iSIN32t1GuUrX3JISGNShZa7hME=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "macaddress": "0.2.8"
+ }
},
"uniqs": {
"version": "2.0.0",
@@ -5799,6 +9820,15 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz",
"integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=",
+ "dev": true,
+ "requires": {
+ "crypto-random-string": "1.0.0"
+ }
+ },
+ "universalify": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.1.tgz",
+ "integrity": "sha1-+nG63UQ3r0wUiEHjs7Fl+enlkLc=",
"dev": true
},
"unpipe": {
@@ -5817,7 +9847,17 @@
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.2.0.tgz",
"integrity": "sha1-G1g3z5DAc22IYncytmHBOPht5y8=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "boxen": "1.1.0",
+ "chalk": "1.1.3",
+ "configstore": "3.1.0",
+ "import-lazy": "2.1.0",
+ "is-npm": "1.0.0",
+ "latest-version": "3.1.0",
+ "semver-diff": "2.1.0",
+ "xdg-basedir": "3.0.0"
+ }
},
"upper-case": {
"version": "1.1.3",
@@ -5830,6 +9870,10 @@
"resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz",
"integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=",
"dev": true,
+ "requires": {
+ "punycode": "1.3.2",
+ "querystring": "0.2.0"
+ },
"dependencies": {
"punycode": {
"version": "1.3.2",
@@ -5840,16 +9884,24 @@
}
},
"url-loader": {
- "version": "0.5.8",
- "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-0.5.8.tgz",
- "integrity": "sha1-uRg7GAHg+EdxhnNnMEC8ncHHFcU=",
- "dev": true
+ "version": "0.5.9",
+ "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-0.5.9.tgz",
+ "integrity": "sha1-zI/qgse5Bud3cBklCGnlaemVwpU=",
+ "dev": true,
+ "requires": {
+ "loader-utils": "1.1.0",
+ "mime": "1.3.6"
+ }
},
"url-parse": {
- "version": "1.1.9",
- "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.1.9.tgz",
- "integrity": "sha1-xn8dd11R8KGJEd17P/rSe7nlvRk=",
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.2.0.tgz",
+ "integrity": "sha1-OhnoqqbQI93SfcxEy0/I9/7COYY=",
"dev": true,
+ "requires": {
+ "querystringify": "1.0.0",
+ "requires-port": "1.0.0"
+ },
"dependencies": {
"querystringify": {
"version": "1.0.0",
@@ -5863,7 +9915,10 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz",
"integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "prepend-http": "1.0.4"
+ }
},
"user-home": {
"version": "1.1.1",
@@ -5876,6 +9931,10 @@
"resolved": "https://registry.npmjs.org/useragent/-/useragent-2.1.13.tgz",
"integrity": "sha1-u6Q+iqJNXOuDwpN0c+EC4h33TBA=",
"dev": true,
+ "requires": {
+ "lru-cache": "2.2.4",
+ "tmp": "0.0.31"
+ },
"dependencies": {
"lru-cache": {
"version": "2.2.4",
@@ -5890,6 +9949,9 @@
"resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz",
"integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=",
"dev": true,
+ "requires": {
+ "inherits": "2.0.1"
+ },
"dependencies": {
"inherits": {
"version": "2.0.1",
@@ -5927,13 +9989,20 @@
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/v8flags/-/v8flags-2.1.1.tgz",
"integrity": "sha1-qrGh+jDUX4jdMhFIh1rALAtV5bQ=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "user-home": "1.1.1"
+ }
},
"validate-npm-package-license": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz",
"integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "spdx-correct": "1.0.2",
+ "spdx-expression-parse": "1.0.4"
+ }
},
"vary": {
"version": "1.1.1",
@@ -5951,19 +10020,25 @@
"version": "1.3.6",
"resolved": "https://registry.npmjs.org/verror/-/verror-1.3.6.tgz",
"integrity": "sha1-z/XfEpRtKX0rqu+qJoniW+AcAFw=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "extsprintf": "1.0.2"
+ }
},
"vlq": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/vlq/-/vlq-0.2.2.tgz",
- "integrity": "sha1-4xbVJXtAuGu0PLjV/qXX9U1rDKE=",
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/vlq/-/vlq-0.2.3.tgz",
+ "integrity": "sha1-jz5DKM9jsVQMDWfhsneDhviXWyY=",
"dev": true
},
"vm-browserify": {
"version": "0.0.4",
"resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz",
"integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "indexof": "0.0.1"
+ }
},
"void-elements": {
"version": "2.0.1",
@@ -5974,20 +10049,32 @@
"walk-sync": {
"version": "0.3.2",
"resolved": "https://registry.npmjs.org/walk-sync/-/walk-sync-0.3.2.tgz",
- "integrity": "sha512-FMB5VqpLqOCcqrzA9okZFc0wq0Qbmdm396qJxvQZhDpyu0W95G9JCmp74tx7iyYnyOcBtUuKJsgIKAqjozvmmQ==",
- "dev": true
+ "integrity": "sha1-SCcoCvxC0OA1NnxKTjHurA0Tb3U=",
+ "dev": true,
+ "requires": {
+ "ensure-posix-path": "1.0.2",
+ "matcher-collection": "1.0.5"
+ }
},
"watchpack": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.3.1.tgz",
- "integrity": "sha1-fYaTkHsozmAT5/NhCqKhrPB9rYc=",
- "dev": true
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.4.0.tgz",
+ "integrity": "sha1-ShRyvLuVK9Cpu0A2gB+VTfs5+qw=",
+ "dev": true,
+ "requires": {
+ "async": "2.4.1",
+ "chokidar": "1.7.0",
+ "graceful-fs": "4.1.11"
+ }
},
"wbuf": {
"version": "1.7.2",
"resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.2.tgz",
"integrity": "sha1-1pe5nx9ZUS3ydRvkJ2nBWAtYAf4=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "minimalistic-assert": "1.0.0"
+ }
},
"web-animations-js": {
"version": "2.2.5",
@@ -5999,44 +10086,39 @@
"resolved": "https://registry.npmjs.org/webdriver-js-extender/-/webdriver-js-extender-1.0.0.tgz",
"integrity": "sha1-gcUzqeM9W/tZe05j4s2yW1R3dRU=",
"dev": true,
- "dependencies": {
- "adm-zip": {
- "version": "0.4.4",
- "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.4.tgz",
- "integrity": "sha1-ph7VrmkFw66lizplfSUDMJEFJzY=",
- "dev": true
- },
- "sax": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/sax/-/sax-0.6.1.tgz",
- "integrity": "sha1-VjsZx8HeiS4Jv8Ty/DDjwn8JUrk=",
- "dev": true
- },
- "selenium-webdriver": {
- "version": "2.53.3",
- "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-2.53.3.tgz",
- "integrity": "sha1-0p/1qVff8aG0ncRXdW5OS/vc4IU=",
- "dev": true
- },
- "tmp": {
- "version": "0.0.24",
- "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.24.tgz",
- "integrity": "sha1-1qXhmNFKmDXMby18PZ4wJCjIzxI=",
- "dev": true
- },
- "xml2js": {
- "version": "0.4.4",
- "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.4.tgz",
- "integrity": "sha1-MREBAAMAiuGSQOuhdJe1fHKcVV0=",
- "dev": true
- }
+ "requires": {
+ "@types/selenium-webdriver": "2.53.37",
+ "selenium-webdriver": "2.53.3"
}
},
"webpack": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/webpack/-/webpack-2.2.1.tgz",
- "integrity": "sha1-e7HXKuIIfdGkr1Jq/sFe7RfdpHU=",
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/webpack/-/webpack-2.4.1.tgz",
+ "integrity": "sha1-FakdvjSWbYpLmcfWVu/ZKi5ab2o=",
"dev": true,
+ "requires": {
+ "acorn": "5.2.1",
+ "acorn-dynamic-import": "2.0.2",
+ "ajv": "4.11.8",
+ "ajv-keywords": "1.5.1",
+ "async": "2.4.1",
+ "enhanced-resolve": "3.3.0",
+ "interpret": "1.1.0",
+ "json-loader": "0.5.7",
+ "json5": "0.5.1",
+ "loader-runner": "2.3.0",
+ "loader-utils": "0.2.17",
+ "memory-fs": "0.4.1",
+ "mkdirp": "0.5.1",
+ "node-libs-browser": "2.1.0",
+ "source-map": "0.5.6",
+ "supports-color": "3.2.3",
+ "tapable": "0.2.8",
+ "uglify-js": "2.8.29",
+ "watchpack": "1.4.0",
+ "webpack-sources": "0.2.3",
+ "yargs": "6.6.0"
+ },
"dependencies": {
"camelcase": {
"version": "1.2.1",
@@ -6048,40 +10130,86 @@
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz",
"integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "center-align": "0.1.3",
+ "right-align": "0.1.3",
+ "wordwrap": "0.0.2"
+ }
},
"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
+ "dev": true,
+ "requires": {
+ "number-is-nan": "1.0.1"
+ }
},
"loader-utils": {
"version": "0.2.17",
"resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz",
"integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=",
+ "dev": true,
+ "requires": {
+ "big.js": "3.2.0",
+ "emojis-list": "2.1.0",
+ "json5": "0.5.1",
+ "object-assign": "4.1.1"
+ }
+ },
+ "source-list-map": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-1.1.2.tgz",
+ "integrity": "sha1-mIkBnRAkzOVc3AaUmDN+9hhqEaE=",
"dev": true
},
"string-width": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
"integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "code-point-at": "1.1.0",
+ "is-fullwidth-code-point": "1.0.0",
+ "strip-ansi": "3.0.1"
+ }
},
"uglify-js": {
- "version": "2.8.28",
- "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.28.tgz",
- "integrity": "sha512-WqKNbmNJKzIdIEQu/U2ytgGBbhCy2PVks94GoetczOAJ/zCgVu2CuO7gguI5KPFGPtUtI1dmPQl6h0D4cPzypA==",
+ "version": "2.8.29",
+ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz",
+ "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=",
"dev": true,
+ "requires": {
+ "source-map": "0.5.6",
+ "uglify-to-browserify": "1.0.2",
+ "yargs": "3.10.0"
+ },
"dependencies": {
"yargs": {
"version": "3.10.0",
"resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz",
"integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "camelcase": "1.2.1",
+ "cliui": "2.1.0",
+ "decamelize": "1.2.0",
+ "window-size": "0.1.0"
+ }
}
}
},
+ "webpack-sources": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-0.2.3.tgz",
+ "integrity": "sha1-F8Yr+vE8cH+dAsR54Nzd6DgGl/s=",
+ "dev": true,
+ "requires": {
+ "source-list-map": "1.1.2",
+ "source-map": "0.5.6"
+ }
+ },
"wordwrap": {
"version": "0.0.2",
"resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz",
@@ -6093,6 +10221,21 @@
"resolved": "https://registry.npmjs.org/yargs/-/yargs-6.6.0.tgz",
"integrity": "sha1-eC7CHvQDNF+DCoCMo9UTr1YGUgg=",
"dev": true,
+ "requires": {
+ "camelcase": "3.0.0",
+ "cliui": "3.2.0",
+ "decamelize": "1.2.0",
+ "get-caller-file": "1.0.2",
+ "os-locale": "1.4.0",
+ "read-pkg-up": "1.0.1",
+ "require-directory": "2.1.1",
+ "require-main-filename": "1.0.1",
+ "set-blocking": "2.0.0",
+ "string-width": "1.0.2",
+ "which-module": "1.0.0",
+ "y18n": "3.2.1",
+ "yargs-parser": "4.2.1"
+ },
"dependencies": {
"camelcase": {
"version": "3.0.0",
@@ -6104,7 +10247,12 @@
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz",
"integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "string-width": "1.0.2",
+ "strip-ansi": "3.0.1",
+ "wrap-ansi": "2.1.0"
+ }
}
}
},
@@ -6113,6 +10261,9 @@
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-4.2.1.tgz",
"integrity": "sha1-KczqwNxPA8bIe0qfIX3RjJ90hxw=",
"dev": true,
+ "requires": {
+ "camelcase": "3.0.0"
+ },
"dependencies": {
"camelcase": {
"version": "3.0.0",
@@ -6125,16 +10276,50 @@
}
},
"webpack-dev-middleware": {
- "version": "1.10.2",
- "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-1.10.2.tgz",
- "integrity": "sha1-LiUs4d+wINvaHMs33ybzCrAU29E=",
- "dev": true
+ "version": "1.12.2",
+ "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-1.12.2.tgz",
+ "integrity": "sha1-+PwRIM47T8VoDO7LQ9d3lmshEF4=",
+ "dev": true,
+ "requires": {
+ "memory-fs": "0.4.1",
+ "mime": "1.6.0",
+ "path-is-absolute": "1.0.1",
+ "range-parser": "1.2.0",
+ "time-stamp": "2.0.0"
+ },
+ "dependencies": {
+ "mime": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
+ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
+ "dev": true
+ }
+ }
},
"webpack-dev-server": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-2.3.0.tgz",
- "integrity": "sha1-BDdwS71NlBpuTAYes8wjLtfQYQE=",
+ "version": "2.4.5",
+ "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-2.4.5.tgz",
+ "integrity": "sha1-MThM6BE2vhCAtLTN4OubkOVO5s8=",
"dev": true,
+ "requires": {
+ "ansi-html": "0.0.7",
+ "chokidar": "1.7.0",
+ "compression": "1.6.2",
+ "connect-history-api-fallback": "1.5.0",
+ "express": "4.15.2",
+ "html-entities": "1.2.1",
+ "http-proxy-middleware": "0.17.4",
+ "opn": "4.0.2",
+ "portfinder": "1.0.13",
+ "serve-index": "1.9.1",
+ "sockjs": "0.3.18",
+ "sockjs-client": "1.1.2",
+ "spdy": "3.4.7",
+ "strip-ansi": "3.0.1",
+ "supports-color": "3.2.3",
+ "webpack-dev-middleware": "1.12.2",
+ "yargs": "6.6.0"
+ },
"dependencies": {
"camelcase": {
"version": "3.0.0",
@@ -6146,25 +10331,61 @@
"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
+ "dev": true,
+ "requires": {
+ "number-is-nan": "1.0.1"
+ }
+ },
+ "opn": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/opn/-/opn-4.0.2.tgz",
+ "integrity": "sha1-erwi5kTf9jsKltWrfyeQwPAavJU=",
+ "dev": true,
+ "requires": {
+ "object-assign": "4.1.1",
+ "pinkie-promise": "2.0.1"
+ }
},
"string-width": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
"integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "code-point-at": "1.1.0",
+ "is-fullwidth-code-point": "1.0.0",
+ "strip-ansi": "3.0.1"
+ }
},
"yargs": {
"version": "6.6.0",
"resolved": "https://registry.npmjs.org/yargs/-/yargs-6.6.0.tgz",
"integrity": "sha1-eC7CHvQDNF+DCoCMo9UTr1YGUgg=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "camelcase": "3.0.0",
+ "cliui": "3.2.0",
+ "decamelize": "1.2.0",
+ "get-caller-file": "1.0.2",
+ "os-locale": "1.4.0",
+ "read-pkg-up": "1.0.1",
+ "require-directory": "2.1.1",
+ "require-main-filename": "1.0.1",
+ "set-blocking": "2.0.0",
+ "string-width": "1.0.2",
+ "which-module": "1.0.0",
+ "y18n": "3.2.1",
+ "yargs-parser": "4.2.1"
+ }
},
"yargs-parser": {
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-4.2.1.tgz",
"integrity": "sha1-KczqwNxPA8bIe0qfIX3RjJ90hxw=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "camelcase": "3.0.0"
+ }
}
}
},
@@ -6172,24 +10393,43 @@
"version": "2.6.1",
"resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-2.6.1.tgz",
"integrity": "sha1-8dgB0sXTn4P/7J8RkkCz476ZShw=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "lodash": "4.17.4"
+ }
},
"webpack-sources": {
- "version": "0.1.5",
- "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-0.1.5.tgz",
- "integrity": "sha1-qh86vw8NdNtxEcQOUAuE+WZkB1A=",
- "dev": true
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.1.0.tgz",
+ "integrity": "sha1-oQHrrlnWUHNU1x2AE5UKOot6WlQ=",
+ "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": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=",
+ "dev": true
+ }
+ }
},
"websocket-driver": {
- "version": "0.6.5",
- "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.6.5.tgz",
- "integrity": "sha1-XLJVbOuF9Dc8bYI4qmkchFThOjY=",
- "dev": true
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.0.tgz",
+ "integrity": "sha1-DK+dLXVdk67gSdS90NP+LMoqJOs=",
+ "dev": true,
+ "requires": {
+ "http-parser-js": "0.4.9",
+ "websocket-extensions": "0.1.3"
+ }
},
"websocket-extensions": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.1.tgz",
- "integrity": "sha1-domUmcGEtu91Q3fC27DNbLVdKec=",
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.3.tgz",
+ "integrity": "sha1-XS/yKXcAPsaHpLhwc9+7rBRszyk=",
"dev": true
},
"when": {
@@ -6208,7 +10448,10 @@
"version": "1.2.14",
"resolved": "https://registry.npmjs.org/which/-/which-1.2.14.tgz",
"integrity": "sha1-mofEN48D6CfOyvGs31bHNsAcFOU=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "isexe": "2.0.0"
+ }
},
"which-module": {
"version": "1.0.0",
@@ -6219,20 +10462,31 @@
"wide-align": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz",
- "integrity": "sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w==",
+ "integrity": "sha1-Vx4PGwYEY268DfwhsDObvjE0FxA=",
"dev": true,
+ "requires": {
+ "string-width": "1.0.2"
+ },
"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
+ "dev": true,
+ "requires": {
+ "number-is-nan": "1.0.1"
+ }
},
"string-width": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
"integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "code-point-at": "1.1.0",
+ "is-fullwidth-code-point": "1.0.0",
+ "strip-ansi": "3.0.1"
+ }
}
}
},
@@ -6241,18 +10495,29 @@
"resolved": "https://registry.npmjs.org/widest-line/-/widest-line-1.0.0.tgz",
"integrity": "sha1-DAnIXCqUaD0Nfq+O4JfVZL8OEFw=",
"dev": true,
+ "requires": {
+ "string-width": "1.0.2"
+ },
"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
+ "dev": true,
+ "requires": {
+ "number-is-nan": "1.0.1"
+ }
},
"string-width": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
"integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "code-point-at": "1.1.0",
+ "is-fullwidth-code-point": "1.0.0",
+ "strip-ansi": "3.0.1"
+ }
}
}
},
@@ -6273,18 +10538,30 @@
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
"integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=",
"dev": true,
+ "requires": {
+ "string-width": "1.0.2",
+ "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
+ "dev": true,
+ "requires": {
+ "number-is-nan": "1.0.1"
+ }
},
"string-width": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
"integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "code-point-at": "1.1.0",
+ "is-fullwidth-code-point": "1.0.0",
+ "strip-ansi": "3.0.1"
+ }
}
}
},
@@ -6298,13 +10575,22 @@
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.1.0.tgz",
"integrity": "sha512-0TZ20a+xcIl4u0+Mj5xDH2yOWdmQiXlKf9Hm+TgDXjTMsEYb+gDrmb8e8UNAzMCitX8NBqG4Z/FUQIyzv/R1JQ==",
- "dev": true
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "imurmurhash": "0.1.4",
+ "slide": "1.1.6"
+ }
},
"ws": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/ws/-/ws-1.1.1.tgz",
"integrity": "sha1-CC3bbGQehdS7RR8D1S8G6r2x8Bg=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "options": "0.0.6",
+ "ultron": "1.0.2"
+ }
},
"wtf-8": {
"version": "1.0.0",
@@ -6325,15 +10611,27 @@
"dev": true
},
"xml2js": {
- "version": "0.4.17",
- "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.17.tgz",
- "integrity": "sha1-F76T6q4/O3eTWceVtBlwWogX6Gg=",
- "dev": true
+ "version": "0.4.4",
+ "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.4.tgz",
+ "integrity": "sha1-MREBAAMAiuGSQOuhdJe1fHKcVV0=",
+ "dev": true,
+ "requires": {
+ "sax": "0.6.1",
+ "xmlbuilder": "9.0.4"
+ },
+ "dependencies": {
+ "sax": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/sax/-/sax-0.6.1.tgz",
+ "integrity": "sha1-VjsZx8HeiS4Jv8Ty/DDjwn8JUrk=",
+ "dev": true
+ }
+ }
},
"xmlbuilder": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-4.2.1.tgz",
- "integrity": "sha1-qlijBBoGb5DqoWwvU4n/GfP0YaU=",
+ "version": "9.0.4",
+ "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.4.tgz",
+ "integrity": "sha1-UZy0ymhtAFqEINNJbz8MruzKWA8=",
"dev": true
},
"xmldom": {
@@ -6371,6 +10669,21 @@
"resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz",
"integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=",
"dev": true,
+ "requires": {
+ "camelcase": "3.0.0",
+ "cliui": "3.2.0",
+ "decamelize": "1.2.0",
+ "get-caller-file": "1.0.2",
+ "os-locale": "1.4.0",
+ "read-pkg-up": "1.0.1",
+ "require-directory": "2.1.1",
+ "require-main-filename": "1.0.1",
+ "set-blocking": "2.0.0",
+ "string-width": "1.0.2",
+ "which-module": "1.0.0",
+ "y18n": "3.2.1",
+ "yargs-parser": "5.0.0"
+ },
"dependencies": {
"camelcase": {
"version": "3.0.0",
@@ -6382,13 +10695,21 @@
"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
+ "dev": true,
+ "requires": {
+ "number-is-nan": "1.0.1"
+ }
},
"string-width": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
"integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "code-point-at": "1.1.0",
+ "is-fullwidth-code-point": "1.0.0",
+ "strip-ansi": "3.0.1"
+ }
}
}
},
@@ -6397,6 +10718,9 @@
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz",
"integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=",
"dev": true,
+ "requires": {
+ "camelcase": "3.0.0"
+ },
"dependencies": {
"camelcase": {
"version": "3.0.0",
@@ -6416,7 +10740,10 @@
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/yn/-/yn-1.3.0.tgz",
"integrity": "sha1-GwgSq7jYBdSJZvjfOF3J2syaGdg=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "object-assign": "4.1.1"
+ }
},
"zone.js": {
"version": "0.8.12",
diff --git a/metron-interface/metron-alerts/package.json b/metron-interface/metron-alerts/package.json
index cb6f170..0a40f0d 100644
--- a/metron-interface/metron-alerts/package.json
+++ b/metron-interface/metron-alerts/package.json
@@ -9,7 +9,7 @@
"lint": "tslint \"src/**/*.ts\"",
"test": "./node_modules/@angular/cli/bin/ng test --watch=false",
"pree2e": "webdriver-manager update",
- "e2e": "protractor"
+ "e2e": "protractor-flake --protractor-path=./node_modules/.bin/protractor --max-attempts=3 -- ./protractor.conf.js"
},
"private": true,
"dependencies": {
@@ -21,7 +21,6 @@
"@angular/platform-browser": "^4.0.0",
"@angular/platform-browser-dynamic": "^4.0.0",
"@angular/router": "^4.0.0",
- "@types/moment": "^2.13.0",
"ace-builds": "^1.2.6",
"bootstrap": "4.0.0-alpha.6",
"core-js": "^2.4.1",
@@ -37,6 +36,7 @@
"@angular/cli": "1.2.4",
"@angular/compiler-cli": "^4.0.0",
"@types/ace": "0.0.32",
+ "@types/es6-promise": "0.0.33",
"@types/jasmine": "2.5.38",
"@types/moment": "^2.13.0",
"@types/node": "~6.0.60",
@@ -56,9 +56,11 @@
"karma-jasmine-html-reporter": "^0.2.2",
"node-sass": "^4.5.0",
"optimist": "0.6.1",
- "protractor": "~5.1.0",
+ "protractor": "5.3.0",
+ "protractor-flake": "^3.3.0",
"serve-favicon": "2.4.2",
"serve-static": "1.12.1",
+ "ssh2": "^0.5.5",
"ts-node": "~2.0.0",
"tslint": "~4.5.0",
"typescript": "~2.2.0"
diff --git a/metron-interface/metron-alerts/protractor.conf.js b/metron-interface/metron-alerts/protractor.conf.js
index 82f5c09..219a8b4 100644
--- a/metron-interface/metron-alerts/protractor.conf.js
+++ b/metron-interface/metron-alerts/protractor.conf.js
@@ -23,7 +23,7 @@
var SpecReporter = require('jasmine-spec-reporter').SpecReporter;
exports.config = {
- allScriptsTimeout: 25000,
+ allScriptsTimeout: 15000,
specs: [
'./e2e/login/login.e2e-spec.ts',
'./e2e/alerts-list/alerts-list.e2e-spec.ts',
@@ -38,6 +38,7 @@
capabilities: {
'browserName': 'chrome',
'chromeOptions': {
+ args: ["--disable-gpu", "--window-size=1435,850", "--headless" ],
'prefs': {
'credentials_enable_service': false,
'profile': { 'password_manager_enabled': false}
@@ -50,27 +51,27 @@
jasmineNodeOpts: {
showColors: true,
defaultTimeoutInterval: 50000,
- print: function() {}
+ includeStackTrace: true
},
- useAllAngular2AppRoots: true,
- rootElement: 'metron-alerts-root',
beforeLaunch: function() {
require('ts-node').register({
project: 'e2e'
});
},
onPrepare: function() {
- var createMetaAlertsIndex = require('./e2e/utils/e2e_util').createMetaAlertsIndex;
- createMetaAlertsIndex();
- jasmine.getEnv().addReporter(new SpecReporter());
- setTimeout(function() {
- browser.driver.executeScript(function() {
- return {
- width: window.screen.availWidth,
- height: window.screen.availHeight
- };
- }).then(function(result) {
- browser.driver.manage().window().setSize(result.width, result.height);
+
+ jasmine.getEnv().addReporter(new SpecReporter({spec: {displayStacktrace: true}}));
+
+ return new Promise(function(resolve, reject) {
+ var cleanMetronUpdateTable = require('./e2e/utils/clean_metron_update_table').cleanMetronUpdateTable;
+ var createMetaAlertsIndex = require('./e2e/utils/e2e_util').createMetaAlertsIndex;
+ cleanMetronUpdateTable()
+ .then(function() {
+ createMetaAlertsIndex();
+ resolve();
+ })
+ .catch(function (error) {
+ reject();
});
});
},
diff --git a/metron-interface/metron-alerts/src/app/alerts/alert-details/alert-details.component.ts b/metron-interface/metron-alerts/src/app/alerts/alert-details/alert-details.component.ts
index 39d47ac..e68a8e0 100644
--- a/metron-interface/metron-alerts/src/app/alerts/alert-details/alert-details.component.ts
+++ b/metron-interface/metron-alerts/src/app/alerts/alert-details/alert-details.component.ts
@@ -15,10 +15,10 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-import { Component, OnInit } from '@angular/core';
-import {Router, ActivatedRoute} from '@angular/router';
+import {Component, OnInit} from '@angular/core';
+import {ActivatedRoute, Router} from '@angular/router';
import * as moment from 'moment/moment';
-import {Observable, Subscription} from 'rxjs/Rx';
+import {Subscription} from 'rxjs/Rx';
import {SearchService} from '../../service/search.service';
import {UpdateService} from '../../service/update.service';
@@ -32,12 +32,11 @@
import {MetronDialogBox} from '../../shared/metron-dialog-box';
import {CommentAddRemoveRequest} from "../../model/comment-add-remove-request";
import {META_ALERTS_SENSOR_TYPE} from '../../utils/constants';
-import { GlobalConfigService } from '../../service/global-config.service';
+import {GlobalConfigService} from '../../service/global-config.service';
export enum AlertState {
NEW, OPEN, ESCALATE, DISMISS, RESOLVE
}
-
export enum Tabs {
DETAILS, COMMENTS
}
@@ -100,7 +99,7 @@
this.alertSource = alertSource;
this.selectedAlertState = this.getAlertState(alertSource['alert_status']);
this.alertSources = (alertSource.metron_alert && alertSource.metron_alert.length > 0) ? alertSource.metron_alert : [alertSource];
- this.setComments(alertSource);
+ this.setComments(alertSource['comments'] || []);
if (fireToggleEditor) {
this.toggleNameEditor();
@@ -108,8 +107,7 @@
});
}
- setComments(alert) {
- let alertComments = alert['comments'] ? alert['comments'] : [];
+ setComments(alertComments) {
this.alertCommentsWrapper = alertComments.map(alertComment =>
new AlertCommentWrapper(alertComment, moment(new Date(alertComment.timestamp)).fromNow()));
}
@@ -222,27 +220,33 @@
}
onAddComment() {
+ let newComment = new AlertComment(this.alertCommentStr, this.authenticationService.getCurrentUserName(), new Date().getTime());
+ let alertComments = this.alertCommentsWrapper.map(alertsWrapper => alertsWrapper.alertComment);
+ alertComments.unshift(newComment);
+ this.setComments(alertComments);
let commentRequest = new CommentAddRemoveRequest();
commentRequest.guid = this.alertSource.guid;
commentRequest.comment = this.alertCommentStr;
commentRequest.username = this.authenticationService.getCurrentUserName();
commentRequest.timestamp = new Date().getTime();
commentRequest.sensorType = this.alertSourceType;
- this.updateService.addComment(commentRequest).subscribe( () => {
- this.getData(true);
- });
+ this.updateService.addComment(commentRequest).subscribe(
+ () => {},
+ () => {
+ let previousComments = this.alertCommentsWrapper.map(alertsWrapper => alertsWrapper.alertComment)
+ .filter(alertComment => alertComment !== newComment);
+ this.setComments(previousComments);
+ });
}
- patchAlert(patch: Patch) {
+ patchAlert(patch: Patch, onPatchError) {
let patchRequest = new PatchRequest();
patchRequest.guid = this.alertSource.guid;
patchRequest.index = this.alertIndex;
patchRequest.patch = [patch];
patchRequest.sensorType = this.alertSourceType;
- this.updateService.patch(patchRequest).subscribe(() => {
- this.getData();
- });
+ this.updateService.patch(patchRequest).subscribe(() => {}, onPatchError);
}
onDeleteComment(index: number) {
@@ -255,18 +259,23 @@
this.metronDialogBox.showConfirmationMessage(commentText).subscribe(response => {
if (response) {
+ let deletedCommentWrapper = this.alertCommentsWrapper.splice(index, 1)[0];
let commentRequest = new CommentAddRemoveRequest();
commentRequest.guid = this.alertSource.guid;
commentRequest.comment = this.alertCommentsWrapper[index].alertComment.comment;
commentRequest.username = this.alertCommentsWrapper[index].alertComment.username;
commentRequest.timestamp = this.alertCommentsWrapper[index].alertComment.timestamp;
commentRequest.sensorType = this.alertSourceType;
- this.updateService.removeComment(commentRequest).subscribe( () => {
- this.getData(true);
- });
+ this.updateService.removeComment(commentRequest).subscribe(
+ () => {
+ this.alertCommentsWrapper.map(alertsWrapper => alertsWrapper.alertComment)
+ },
+ () => {
+ // add the deleted comment back
+ this.alertCommentsWrapper.unshift(deletedCommentWrapper);
+ this.alertCommentsWrapper.sort((a, b) => b.alertComment.timestamp - a.alertComment.timestamp);
+ });
}
});
}
}
-
-
diff --git a/metron-interface/metron-alerts/src/app/alerts/alerts-list/alert-filters/alert-filters.component.ts b/metron-interface/metron-alerts/src/app/alerts/alerts-list/alert-filters/alert-filters.component.ts
index 12d98e7..a448e3e 100644
--- a/metron-interface/metron-alerts/src/app/alerts/alerts-list/alert-filters/alert-filters.component.ts
+++ b/metron-interface/metron-alerts/src/app/alerts/alerts-list/alert-filters/alert-filters.component.ts
@@ -52,4 +52,4 @@
onFacetFilterSelect($event) {
this.facetFilterChange.emit($event);
}
-}
+}
\ No newline at end of file
diff --git a/metron-interface/metron-alerts/src/app/alerts/alerts-list/alerts-list.component.html b/metron-interface/metron-alerts/src/app/alerts/alerts-list/alerts-list.component.html
index adda4ab..77f24d5 100644
--- a/metron-interface/metron-alerts/src/app/alerts/alerts-list/alerts-list.component.html
+++ b/metron-interface/metron-alerts/src/app/alerts/alerts-list/alerts-list.component.html
@@ -46,15 +46,15 @@
<div class="btn cog">
<i class="fa fa-cog configure-table-icon" (click)="showConfigureTable()"></i>
</div>
- <div class="btn settings">
- <i #settingsIcon class="fa fa-sliders" aria-hidden="true"></i>
+ <div #settingsIcon class="btn settings">
+ <i class="fa fa-sliders" aria-hidden="true"></i>
</div>
<app-configure-rows [srcElement]="settingsIcon" [tableMetaData]="tableMetaData" [(interval)]="refreshInterval" [(size)]="tableMetaData.size" (configRowsChange)="onConfigRowsChange()" > </app-configure-rows>
<div class="btn pause-play" (click)="onPausePlay()">
<i *ngIf="!pauseRefresh" class="fa fa-pause" aria-hidden="true"></i>
<i *ngIf="pauseRefresh" class="fa fa-play" aria-hidden="true"></i>
</div>
- <div class="dropdown d-inline-block">
+ <div id="table-actions" class="dropdown d-inline-block">
<button class="btn btn-primary dropdown-toggle" type="button" id="dropdownMenuButton" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">ACTIONS</button>
<div class="dropdown-menu dropdown-menu-right" aria-labelledby="dropdownMenuButton">
<span class="dropdown-item" [class.disabled]="selectedAlerts.length == 0" (click)="processOpen()">Open</span>
@@ -74,7 +74,7 @@
<div class="px-0" style="width: 200px;max-width: 200px;">
<app-alert-filters [facets]="searchResponse.facetCounts" (facetFilterChange)="onAddFacetFilter($event)"> </app-alert-filters>
</div>
- <div class="col px-0 ml-4">
+ <div class="col px-0 pl-4" style="overflow: auto;">
<div class="col-xs-12 pl-0 pb-3">
<app-group-by [facets]="groupFacets" (groupsChange)="onGroupsChange($event)"> </app-group-by>
</div>
diff --git a/metron-interface/metron-alerts/src/app/alerts/alerts-list/alerts-list.component.scss b/metron-interface/metron-alerts/src/app/alerts/alerts-list/alerts-list.component.scss
index 01b8f9a..fe2f54c 100644
--- a/metron-interface/metron-alerts/src/app/alerts/alerts-list/alerts-list.component.scss
+++ b/metron-interface/metron-alerts/src/app/alerts/alerts-list/alerts-list.component.scss
@@ -209,7 +209,8 @@
height: 38px;
padding: 0px;
line-height: 40px;
- margin-left: 15px;
+ padding-left: 7px;
+ padding-right: 7px;
color: $dove-grey-1;
cursor: pointer;
diff --git a/metron-interface/metron-alerts/src/app/alerts/alerts-list/alerts-list.component.ts b/metron-interface/metron-alerts/src/app/alerts/alerts-list/alerts-list.component.ts
index 07f7015..ca1bd50 100644
--- a/metron-interface/metron-alerts/src/app/alerts/alerts-list/alerts-list.component.ts
+++ b/metron-interface/metron-alerts/src/app/alerts/alerts-list/alerts-list.component.ts
@@ -36,7 +36,7 @@
import {SearchResponse} from '../../model/search-response';
import {ElasticsearchUtils} from '../../utils/elasticsearch-utils';
import {Filter} from '../../model/filter';
-import {TIMESTAMP_FIELD_NAME, ALL_TIME} from '../../utils/constants';
+import { TIMESTAMP_FIELD_NAME, ALL_TIME, POLLING_DEFAULT_STATE } from '../../utils/constants';
import {TableViewComponent} from './table-view/table-view.component';
import {Pagination} from '../../model/pagination';
import {META_ALERTS_SENSOR_TYPE} from '../../utils/constants';
@@ -60,7 +60,7 @@
colNumberTimerId: number;
refreshInterval = RefreshInterval.ONE_MIN;
refreshTimer: Subscription;
- pauseRefresh = false;
+ pauseRefresh = POLLING_DEFAULT_STATE;
lastPauseRefreshValue = false;
isMetaAlertPresentInSelectedAlerts = false;
timeStampfilterPresent = false;
diff --git a/metron-interface/metron-alerts/src/app/alerts/alerts-list/tree-view/tree-view.component.html b/metron-interface/metron-alerts/src/app/alerts/alerts-list/tree-view/tree-view.component.html
index 34c0ad7..fa0baaa 100644
--- a/metron-interface/metron-alerts/src/app/alerts/alerts-list/tree-view/tree-view.component.html
+++ b/metron-interface/metron-alerts/src/app/alerts/alerts-list/tree-view/tree-view.component.html
@@ -44,7 +44,7 @@
<metron-config-sorter [type]="column.type" [sortBy]="column.name" title="{{column.name}}" [sortOnCol]="group.sortEvent.sortBy" [sortOrder]="group.sortEvent.sortOrder"> {{ column.name | columnNameTranslate | centerEllipses:15 }}</metron-config-sorter>
</th>
<th style="width: 15px"></th>
- <th style="width:25px"><input id="select-deselect-all-{{ group.key }}" class="fontawesome-checkbox" type="checkbox" (click)="selectAllGroupRows($event, group)">
+ <th style="width:15px"><input id="select-deselect-all-{{ group.key }}" class="fontawesome-checkbox" type="checkbox" (click)="selectAllGroupRows($event, group)">
<label for="select-deselect-all-{{ group.key }}"></label>
</th>
</tr>
@@ -81,7 +81,7 @@
<i class="fa" aria-hidden="true" [ngClass]="{'fa-caret-down': subGroup.expand, 'fa-caret-right': !subGroup.expand}"></i>
</span>
<span class="score" appAlertSeverity [severity]="subGroup.score"> {{ subGroup.score }} </span>
- <span class="group-value"> <span class="text-light"> {{ subGroup.key }} </span> ({{ subGroup.total}})</span>
+ <span class="group-value"> <span class="text-light">{{ subGroup.key }}</span> ({{ subGroup.total }})</span>
</td>
<td>
<i style="color: #32ABDF;" class="fa fa-link" aria-hidden="true" (click)="createMetaAlert($event, subGroup, i)" data-animation="false" data-toggle="tooltip" data-placement="left" title="Merge Alerts"></i>
diff --git a/metron-interface/metron-alerts/src/app/alerts/configure-rows/configure-rows.component.ts b/metron-interface/metron-alerts/src/app/alerts/configure-rows/configure-rows.component.ts
index 9204ebf..d5fb44d 100644
--- a/metron-interface/metron-alerts/src/app/alerts/configure-rows/configure-rows.component.ts
+++ b/metron-interface/metron-alerts/src/app/alerts/configure-rows/configure-rows.component.ts
@@ -70,7 +70,7 @@
return;
}
- if (targetElement === this.srcElement) {
+ if (targetElement === this.srcElement || this.srcElement.contains(targetElement)) {
this.showView = !this.showView;
return;
}
diff --git a/metron-interface/metron-alerts/src/app/alerts/saved-searches/saved-searches.component.html b/metron-interface/metron-alerts/src/app/alerts/saved-searches/saved-searches.component.html
index 6311817..71fb1db 100644
--- a/metron-interface/metron-alerts/src/app/alerts/saved-searches/saved-searches.component.html
+++ b/metron-interface/metron-alerts/src/app/alerts/saved-searches/saved-searches.component.html
@@ -21,9 +21,9 @@
</div>
<div>
- <metron-collapse [data]="recentSearches" [fontSize]="15" [titleSeperator]="true"
+ <metron-collapse [data]="recentSearches" [fontSize]="15" [titleSeperator]="true" data-name="recent-searches"
(onSelect)="onSaveRecentSearchSelect($event)" (onDelete)="deleteRecentSearch($event)"> </metron-collapse>
- <metron-collapse [data]="savedSearches" [fontSize]="15" [titleSeperator]="true" [deleteOption]="true"
+ <metron-collapse [data]="savedSearches" [fontSize]="15" [titleSeperator]="true" [deleteOption]="true" data-name="saved-searches"
(onSelect)="onSaveSearchSelect($event)" (onDelete)="deleteSearch($event)"> </metron-collapse>
</div>
</div>
diff --git a/metron-interface/metron-alerts/src/app/shared/group-by/group-by.component.html b/metron-interface/metron-alerts/src/app/shared/group-by/group-by.component.html
index 3b12cd8..954c923 100644
--- a/metron-interface/metron-alerts/src/app/shared/group-by/group-by.component.html
+++ b/metron-interface/metron-alerts/src/app/shared/group-by/group-by.component.html
@@ -14,7 +14,7 @@
<div class='wrapper'>
<div class="mrow">
<div class="group mr-2"> Group By </div>
- <div class='container col mx-0 px-0' [dragula]='"group-bag"' [dragulaModel]='data' [dragulaOptions]="{direction: 'horizontal', removeOnSpill: false}">
+ <div class='container col mx-0 px-0' [dragula]='"group-bag"' [dragulaModel]='data' [dragulaOptions]="{direction: 'horizontal', removeOnSpill: false, ignoreInputTextSelection: false}">
<div #dragEle class="group-by-items" *ngFor="let group of data" (click)="selectGroup(group)" [attr.data-name]="group.name"
data-animation="false" data-toggle="tooltip" data-placement="bottom" title="Drag to Sort"
[ngClass]="{'active': group.selected}">
diff --git a/metron-interface/metron-alerts/src/app/shared/time-range/time-range.component.html b/metron-interface/metron-alerts/src/app/shared/time-range/time-range.component.html
index b65528d..fed679a 100644
--- a/metron-interface/metron-alerts/src/app/shared/time-range/time-range.component.html
+++ b/metron-interface/metron-alerts/src/app/shared/time-range/time-range.component.html
@@ -12,8 +12,8 @@
the specific language governing permissions and limitations under the License.
-->
<button class="btn btn-secondary btn-search" [disabled]="disabled" type="button" data-animation="false" data-toggle="collapse" data-target="#time-range" aria-expanded="false" aria-controls="time-range">
- <span> {{selectedTimeRangeValue}} </span>
- <br/> <span style="font-size: 8px;" *ngIf="selectedTimeRangeValue !== 'All time'"> {{fromDateStr}} to {{toDateStr}}</span>
+ <span class="time-range-text"> {{selectedTimeRangeValue}} </span>
+ <br/> <span class="time-range-value"> {{ selectedTimeRangeValue === 'All time' ? '' : fromDateStr +' to ' + toDateStr }}</span>
</button>
<div #datePicker class="collapse" id="time-range">
@@ -38,16 +38,16 @@
<div class="title"> Quick Ranges </div> <br>
<div class="row no-gutters">
<div class="col-3">
- <span *ngFor="let key of timeRangeMappingCol1 | mapKeys" (click)="selectTimeRange($event, timeRangeMappingCol1[key])"> {{ key }} </span> <br>
+ <span *ngFor="let key of timeRangeMappingCol1 | mapKeys" (click)="selectTimeRange($event, timeRangeMappingCol1[key])" [attr.id]="timeRangeMappingCol1[key]"> {{ key }} </span> <br>
</div>
<div class="col-3">
- <span *ngFor="let key of timeRangeMappingCol2 | mapKeys" (click)="selectTimeRange($event, timeRangeMappingCol2[key])"> {{ key }} </span> <br>
+ <span *ngFor="let key of timeRangeMappingCol2 | mapKeys" (click)="selectTimeRange($event, timeRangeMappingCol2[key])" [attr.id]="timeRangeMappingCol2[key]"> {{ key }} </span> <br>
</div>
<div class="col-3">
- <span *ngFor="let key of timeRangeMappingCol3 | mapKeys" (click)="selectTimeRange($event, timeRangeMappingCol3[key])"> {{ key }} </span> <br>
+ <span *ngFor="let key of timeRangeMappingCol3 | mapKeys" (click)="selectTimeRange($event, timeRangeMappingCol3[key])" [attr.id]="timeRangeMappingCol3[key]"> {{ key }} </span> <br>
</div>
<div class="col-3">
- <span *ngFor="let key of timeRangeMappingCol4 | mapKeys" (click)="selectTimeRange($event, timeRangeMappingCol4[key])"> {{ key }} </span> <br>
+ <span *ngFor="let key of timeRangeMappingCol4 | mapKeys" (click)="selectTimeRange($event, timeRangeMappingCol4[key])" [attr.id]="timeRangeMappingCol4[key]"> {{ key }} </span> <br>
</div>
</div>
</div>
diff --git a/metron-interface/metron-alerts/src/app/shared/time-range/time-range.component.scss b/metron-interface/metron-alerts/src/app/shared/time-range/time-range.component.scss
index 7f5faf0..ef75525 100644
--- a/metron-interface/metron-alerts/src/app/shared/time-range/time-range.component.scss
+++ b/metron-interface/metron-alerts/src/app/shared/time-range/time-range.component.scss
@@ -103,4 +103,8 @@
form {
margin-top: 5px;
+}
+
+.time-range-value {
+ font-size: 8px;
}
\ No newline at end of file
diff --git a/metron-interface/metron-alerts/src/app/utils/constants.ts b/metron-interface/metron-alerts/src/app/utils/constants.ts
index 2d40715..74e887a 100644
--- a/metron-interface/metron-alerts/src/app/utils/constants.ts
+++ b/metron-interface/metron-alerts/src/app/utils/constants.ts
@@ -34,5 +34,6 @@
export let TREE_SUB_GROUP_SIZE = 5;
export let INDEXES = environment.indices ? environment.indices.split(',') : [];
+export let POLLING_DEFAULT_STATE = environment.defaultPollingState;
export let MAX_ALERTS_IN_META_ALERTS = 350;
diff --git a/metron-interface/metron-alerts/src/environments/environment.e2e.ts b/metron-interface/metron-alerts/src/environments/environment.e2e.ts
index df414b1..ebede73 100644
--- a/metron-interface/metron-alerts/src/environments/environment.e2e.ts
+++ b/metron-interface/metron-alerts/src/environments/environment.e2e.ts
@@ -17,5 +17,6 @@
*/
export const environment = {
production: false,
- indices: 'alerts_ui_e2e,metaalert'
+ indices: 'alerts_ui_e2e,metaalert',
+ defaultPollingState: true
};
diff --git a/metron-interface/metron-alerts/src/environments/environment.js b/metron-interface/metron-alerts/src/environments/environment.js
index acb2f54..29adadc 100644
--- a/metron-interface/metron-alerts/src/environments/environment.js
+++ b/metron-interface/metron-alerts/src/environments/environment.js
@@ -1,3 +1,4 @@
+"use strict";
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
@@ -19,7 +20,8 @@
// The build system defaults to the dev environment which uses `environment.ts`, but if you do
// `ng build --env=prod` then `environment.prod.ts` will be used instead.
// The list of which env maps to which file can be found in `angular-cli.json`.
-"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
exports.environment = {
- production: false
+ production: false,
+ indices: null
};
diff --git a/metron-interface/metron-alerts/src/environments/environment.prod.ts b/metron-interface/metron-alerts/src/environments/environment.prod.ts
index 04e62a9..5f082a8 100644
--- a/metron-interface/metron-alerts/src/environments/environment.prod.ts
+++ b/metron-interface/metron-alerts/src/environments/environment.prod.ts
@@ -17,5 +17,6 @@
*/
export const environment = {
production: true,
- indices: null
+ indices: null,
+ defaultPollingState: false
};
diff --git a/metron-interface/metron-alerts/src/environments/environment.ts b/metron-interface/metron-alerts/src/environments/environment.ts
index 91fdbaf..b079ab8 100644
--- a/metron-interface/metron-alerts/src/environments/environment.ts
+++ b/metron-interface/metron-alerts/src/environments/environment.ts
@@ -22,5 +22,6 @@
export const environment = {
production: false,
- indices: null
+ indices: null,
+ defaultPollingState: false
};
diff --git a/metron-interface/metron-alerts/src/index.html b/metron-interface/metron-alerts/src/index.html
index 7795faa..e63e9bd 100644
--- a/metron-interface/metron-alerts/src/index.html
+++ b/metron-interface/metron-alerts/src/index.html
@@ -22,7 +22,7 @@
<link rel="icon" type="image/x-icon" href="favicon.ico">
<link rel="stylesheet" type="text/css" href="assets/fonts/font.css">
</head>
-<body>
+<body class="notransition">
<metron-alerts-root>Loading...</metron-alerts-root>
</body>
</html>
diff --git a/metron-interface/metron-alerts/src/styles.scss b/metron-interface/metron-alerts/src/styles.scss
index e9e1d51..687ad14 100644
--- a/metron-interface/metron-alerts/src/styles.scss
+++ b/metron-interface/metron-alerts/src/styles.scss
@@ -326,3 +326,13 @@
}
}
+.notransition * {
+ -webkit-transition: none !important;
+ -moz-transition: none !important;
+ -o-transition: none !important;
+ -ms-transition: none !important;
+ transition: none !important;
+
+ animation: none !important;
+}
+