From 09fc27c0df4587785f14495641a6b7ca87b057d8 Mon Sep 17 00:00:00 2001 From: Adina Parpalita Date: Fri, 22 Feb 2019 12:07:07 +0200 Subject: [PATCH 1/2] add tests for downloading a single file --- e2e/suites/actions/download.test.ts | 154 ++++++++++++++++++++++++++++ e2e/utilities/utils.ts | 16 +-- 2 files changed, 162 insertions(+), 8 deletions(-) create mode 100755 e2e/suites/actions/download.test.ts diff --git a/e2e/suites/actions/download.test.ts b/e2e/suites/actions/download.test.ts new file mode 100755 index 0000000000..25c4873ccf --- /dev/null +++ b/e2e/suites/actions/download.test.ts @@ -0,0 +1,154 @@ +/*! + * @license + * Alfresco Example Content Application + * + * Copyright (C) 2005 - 2018 Alfresco Software Limited + * + * This file is part of the Alfresco Example Content Application. + * If the software was purchased under a paid Alfresco license, the terms of + * the paid license agreement will prevail. Otherwise, the software is + * provided under the following open source license terms: + * + * The Alfresco Example Content Application is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * The Alfresco Example Content Application is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Alfresco. If not, see . + */ + +import { LoginPage, BrowsingPage } from '../../pages/pages'; +import { RepoClient } from '../../utilities/repo-client/repo-client'; +import { Utils } from '../../utilities/utils'; + +describe('Download', () => { + const username = `user-${Utils.random()}`; + + const parent = `parent-${Utils.random()}`; let parentId; + + const filePersonal = `filePersonal-${Utils.random()}.txt`; + const fileRecent = `fileRecent-${Utils.random()}.txt`; + const fileShared = `fileShared-${Utils.random()}.txt`; + const fileFavorites = `fileFavorites-${Utils.random()}.txt`; + + let fileSharedId, fileFavoritesId; + + const apis = { + admin: new RepoClient(), + user: new RepoClient(username, username) + }; + + const loginPage = new LoginPage(); + const page = new BrowsingPage(); + const { dataTable, toolbar } = page; + + beforeAll(async done => { + await apis.admin.people.createUser({ username }); + + parentId = (await apis.user.nodes.createFolder(parent)).entry.id; + + await apis.user.nodes.createFile(filePersonal, parentId); + await apis.user.nodes.createFile(fileRecent, parentId); + fileSharedId = (await apis.user.nodes.createFile(fileShared, parentId)).entry.id; + fileFavoritesId = (await apis.user.nodes.createFile(fileFavorites, parentId)).entry.id; + + await apis.user.shared.shareFileById(fileSharedId); + await apis.user.favorites.addFavoriteById('file', fileFavoritesId); + + await loginPage.loginWith(username); + done(); + }); + + afterAll(async (done) => { + await apis.user.nodes.deleteNodeById(parentId); + await apis.user.trashcan.emptyTrash(); + done(); + }); + + describe('on Personal Files', () => { + + beforeEach(async (done) => { + await page.clickPersonalFilesAndWait(); + await dataTable.doubleClickOnRowByName(parent); + done(); + }); + + it('Download a file - [C213179]', async () => { + await dataTable.selectItem(filePersonal); + await toolbar.clickDownload(); + + expect(await Utils.fileExistsOnOS(filePersonal)).toBe(true, 'File not found in download location'); + }); + + }); + + describe('on Recent Files', () => { + + beforeAll(async (done) => { + await apis.user.search.waitForApi(username, { expect: 4 }); + done(); + }); + + beforeEach(async (done) => { + await page.clickRecentFilesAndWait(); + done(); + }); + + it('Download a file - [C280167]', async () => { + await dataTable.selectItem(fileRecent); + await toolbar.clickDownload(); + + expect(await Utils.fileExistsOnOS(fileRecent)).toBe(true, 'File not found in download location'); + }); + + }); + + describe('on Shared Files', () => { + + beforeAll(async (done) => { + await apis.user.shared.waitForApi({ expect: 1 }); + done(); + }); + + beforeEach(async (done) => { + await page.clickSharedFilesAndWait(); + done(); + }); + + it('Download a file - [C280170]', async () => { + await dataTable.selectItem(fileShared); + await toolbar.clickDownload(); + + expect(await Utils.fileExistsOnOS(fileShared)).toBe(true, 'File not found in download location'); + }); + + }); + + describe('on Favorites', () => { + + beforeAll(async (done) => { + await apis.user.favorites.waitForApi({ expect: 1 }); + done(); + }); + + beforeEach(async (done) => { + await page.clickFavoritesAndWait(); + done(); + }); + + it('Download a file - [C280173]', async () => { + await dataTable.selectItem(fileFavorites); + await toolbar.clickDownload(); + + expect(await Utils.fileExistsOnOS(fileFavorites)).toBe(true, 'File not found in download location'); + }); + + }); + +}); diff --git a/e2e/utilities/utils.ts b/e2e/utilities/utils.ts index d77ed91969..1d0f690240 100755 --- a/e2e/utilities/utils.ts +++ b/e2e/utilities/utils.ts @@ -95,11 +95,11 @@ export class Utils { const config = await browser.getProcessedConfig(); const filePath = path.join(config.params.downloadFolder, fileName); - let tries = 5; + let tries = 15; return new Promise(function(resolve) { const checkExist = setInterval(() => { - fs.stat(filePath, function(error) { + fs.access(filePath, function(error) { tries--; if (error && tries === 0) { @@ -116,16 +116,16 @@ export class Utils { }); } - static pressEscape() { - return browser.actions().sendKeys(protractor.Key.ESCAPE).perform(); + static async pressEscape() { + return await browser.actions().sendKeys(protractor.Key.ESCAPE).perform(); } - static pressTab() { - return browser.actions().sendKeys(protractor.Key.TAB).perform(); + static async pressTab() { + return await browser.actions().sendKeys(protractor.Key.TAB).perform(); } - static getBrowserLog() { - return browser.manage().logs().get('browser'); + static async getBrowserLog() { + return await browser.manage().logs().get('browser'); } static formatDate(date: string) { From de4fc351fb3de930e1f593832f48c7f62101b302 Mon Sep 17 00:00:00 2001 From: Adina Parpalita Date: Fri, 22 Feb 2019 18:24:29 +0200 Subject: [PATCH 2/2] automate tests for download as zip --- e2e/suites/actions/download.test.ts | 205 +++++++++++++++++++--- e2e/utilities/utils.ts | 43 ++++- package-lock.json | 257 +++++++++++++++++++--------- package.json | 1 + 4 files changed, 398 insertions(+), 108 deletions(-) diff --git a/e2e/suites/actions/download.test.ts b/e2e/suites/actions/download.test.ts index 25c4873ccf..0b042e3dde 100755 --- a/e2e/suites/actions/download.test.ts +++ b/e2e/suites/actions/download.test.ts @@ -23,7 +23,7 @@ * along with Alfresco. If not, see . */ -import { LoginPage, BrowsingPage } from '../../pages/pages'; +import { LoginPage, BrowsingPage, SearchResultsPage } from '../../pages/pages'; import { RepoClient } from '../../utilities/repo-client/repo-client'; import { Utils } from '../../utilities/utils'; @@ -33,11 +33,30 @@ describe('Download', () => { const parent = `parent-${Utils.random()}`; let parentId; const filePersonal = `filePersonal-${Utils.random()}.txt`; - const fileRecent = `fileRecent-${Utils.random()}.txt`; - const fileShared = `fileShared-${Utils.random()}.txt`; + const fileRecent1 = `fileRecent1-${Utils.random()}.txt`; + const fileRecent2 = `fileRecent2-${Utils.random()}.txt`; + const fileShared1 = `fileShared1-${Utils.random()}.txt`; + const fileShared2 = `fileShared2-${Utils.random()}.txt`; const fileFavorites = `fileFavorites-${Utils.random()}.txt`; + const fileSearch = `fileSearch-${Utils.random()}.txt`; - let fileSharedId, fileFavoritesId; + const folderPersonal = `folderPersonal-${Utils.random()}`; + const folderFavorites = `folderFavorites-${Utils.random()}`; + const folderSearch = `folderSearch-${Utils.random()}`; + + const fileInFolderPersonal = `fileInFolderPersonal-${Utils.random()}.txt`; + const fileInFolderFavorites = `fileInFolderFavorites-${Utils.random()}.txt`; + const fileInFolderSearch = `fileInFolderSearch-${Utils.random()}.txt`; + + const unzippedPersonal = `unzippedPersonal-${Utils.random()}`; + const unzippedRecent = `unzippedRecent-${Utils.random()}`; + const unzippedShared = `unzippedShared-${Utils.random()}`; + const unzippedFavorites = `unzippedFavorites-${Utils.random()}`; + const unzippedSearch = `unzippedSearch-${Utils.random()}`; + + let fileShared1Id, fileShared2Id, fileFavoritesId, folderPersonalId, folderFavoritesId, folderSearchId; + + const archiveZip = 'archive.zip'; const apis = { admin: new RepoClient(), @@ -47,6 +66,8 @@ describe('Download', () => { const loginPage = new LoginPage(); const page = new BrowsingPage(); const { dataTable, toolbar } = page; + const searchResultsPage = new SearchResultsPage(); + const { searchInput } = searchResultsPage.header; beforeAll(async done => { await apis.admin.people.createUser({ username }); @@ -54,12 +75,26 @@ describe('Download', () => { parentId = (await apis.user.nodes.createFolder(parent)).entry.id; await apis.user.nodes.createFile(filePersonal, parentId); - await apis.user.nodes.createFile(fileRecent, parentId); - fileSharedId = (await apis.user.nodes.createFile(fileShared, parentId)).entry.id; + await apis.user.nodes.createFile(fileRecent1, parentId); + await apis.user.nodes.createFile(fileRecent2, parentId); + fileShared1Id = (await apis.user.nodes.createFile(fileShared1, parentId)).entry.id; + fileShared2Id = (await apis.user.nodes.createFile(fileShared2, parentId)).entry.id; fileFavoritesId = (await apis.user.nodes.createFile(fileFavorites, parentId)).entry.id; + await apis.user.nodes.createFile(fileSearch, parentId); + + folderPersonalId = (await apis.user.nodes.createFolder(folderPersonal, parentId)).entry.id; + await apis.user.nodes.createFile(fileInFolderPersonal, folderPersonalId); + + folderFavoritesId = (await apis.user.nodes.createFolder(folderFavorites, parentId)).entry.id; + await apis.user.nodes.createFile(fileInFolderFavorites, folderFavoritesId); - await apis.user.shared.shareFileById(fileSharedId); + folderSearchId = (await apis.user.nodes.createFolder(folderSearch, parentId)).entry.id; + await apis.user.nodes.createFile(fileInFolderSearch, folderSearchId); + + await apis.user.shared.shareFileById(fileShared1Id); + await apis.user.shared.shareFileById(fileShared2Id); await apis.user.favorites.addFavoriteById('file', fileFavoritesId); + await apis.user.favorites.addFavoriteById('folder', folderFavoritesId); await loginPage.loginWith(username); done(); @@ -71,6 +106,11 @@ describe('Download', () => { done(); }); + afterEach(async (done) => { + await Utils.renameFile(archiveZip, `${Utils.random()}.zip`); + done(); + }); + describe('on Personal Files', () => { beforeEach(async (done) => { @@ -86,25 +126,77 @@ describe('Download', () => { expect(await Utils.fileExistsOnOS(filePersonal)).toBe(true, 'File not found in download location'); }); + it('Download a folder - [C216352]', async () => { + await dataTable.selectItem(folderPersonal); + await toolbar.clickDownload(); + + const folderZip = `${folderPersonal}.zip`; + + expect(await Utils.fileExistsOnOS(folderZip)).toBe(true, 'File not found in download location'); + + await Utils.unzip(folderZip); + + expect(await Utils.fileExistsOnOS(fileInFolderPersonal, folderPersonal)); + }); + + it('Download multiple items - [C216353]', async () => { + await dataTable.selectMultipleItems([filePersonal, folderPersonal]); + await toolbar.clickDownload(); + + expect(await Utils.fileExistsOnOS(archiveZip)).toBe(true, 'File not found in download location'); + + await Utils.unzip(archiveZip, unzippedPersonal); + + expect(await Utils.fileExistsOnOS(filePersonal, unzippedPersonal)).toBe(true, `${filePersonal} not found in unzipped folder`); + expect(await Utils.fileExistsOnOS(folderPersonal, unzippedPersonal)).toBe(true, `${folderPersonal} not found in unzipped folder`); + expect(await Utils.fileExistsOnOS(fileInFolderPersonal, unzippedPersonal, folderPersonal)).toBe(true, `${fileInFolderPersonal} not found in unzipped folder in ${folderPersonal}`) + }); + }); - describe('on Recent Files', () => { + describe('on Favorites', () => { beforeAll(async (done) => { - await apis.user.search.waitForApi(username, { expect: 4 }); + await apis.user.favorites.waitForApi({ expect: 2 }); done(); }); beforeEach(async (done) => { - await page.clickRecentFilesAndWait(); + await page.clickFavoritesAndWait(); done(); }); - it('Download a file - [C280167]', async () => { - await dataTable.selectItem(fileRecent); + it('Download a file - [C280173]', async () => { + await dataTable.selectItem(fileFavorites); + await toolbar.clickDownload(); + + expect(await Utils.fileExistsOnOS(fileFavorites)).toBe(true, 'File not found in download location'); + }); + + it('Download a folder - [C280188]', async () => { + await dataTable.selectItem(folderFavorites); await toolbar.clickDownload(); - expect(await Utils.fileExistsOnOS(fileRecent)).toBe(true, 'File not found in download location'); + const folderZip = `${folderFavorites}.zip`; + + expect(await Utils.fileExistsOnOS(folderZip)).toBe(true, 'File not found in download location'); + + await Utils.unzip(folderZip); + + expect(await Utils.fileExistsOnOS(fileInFolderFavorites, folderFavorites)); + }); + + it('Download multiple items - [C280189]', async () => { + await dataTable.selectMultipleItems([fileFavorites, folderFavorites]); + await toolbar.clickDownload(); + + expect(await Utils.fileExistsOnOS(archiveZip)).toBe(true, 'File not found in download location'); + + await Utils.unzip(archiveZip, unzippedFavorites); + + expect(await Utils.fileExistsOnOS(fileFavorites, unzippedFavorites)).toBe(true, `${fileFavorites} not found in unzipped folder`); + expect(await Utils.fileExistsOnOS(folderFavorites, unzippedFavorites)).toBe(true, `${folderFavorites} not found in unzipped folder`); + expect(await Utils.fileExistsOnOS(fileInFolderFavorites, unzippedFavorites, folderFavorites)).toBe(true, `${fileInFolderFavorites} not found in unzipped folder in ${folderFavorites}`) }); }); @@ -112,7 +204,7 @@ describe('Download', () => { describe('on Shared Files', () => { beforeAll(async (done) => { - await apis.user.shared.waitForApi({ expect: 1 }); + await apis.user.shared.waitForApi({ expect: 2 }); done(); }); @@ -122,31 +214,100 @@ describe('Download', () => { }); it('Download a file - [C280170]', async () => { - await dataTable.selectItem(fileShared); + await dataTable.selectItem(fileShared1); await toolbar.clickDownload(); - expect(await Utils.fileExistsOnOS(fileShared)).toBe(true, 'File not found in download location'); + expect(await Utils.fileExistsOnOS(fileShared1)).toBe(true, 'File not found in download location'); + }); + + it('Download multiple items - [C280183]', async () => { + await dataTable.selectMultipleItems([fileShared1, fileShared2]); + await toolbar.clickDownload(); + + expect(await Utils.fileExistsOnOS(archiveZip)).toBe(true, 'File not found in download location'); + + await Utils.unzip(archiveZip, unzippedShared); + + expect(await Utils.fileExistsOnOS(fileShared1, unzippedShared)).toBe(true, `${fileShared1} not found in unzipped folder`); + expect(await Utils.fileExistsOnOS(fileShared2, unzippedShared)).toBe(true, `${fileShared2} not found in unzipped folder`); }); }); - describe('on Favorites', () => { + describe('on Recent Files', () => { beforeAll(async (done) => { - await apis.user.favorites.waitForApi({ expect: 1 }); + await apis.user.search.waitForApi(username, { expect: 10 }); done(); }); beforeEach(async (done) => { - await page.clickFavoritesAndWait(); + await page.clickRecentFilesAndWait(); done(); }); - it('Download a file - [C280173]', async () => { - await dataTable.selectItem(fileFavorites); + it('Download a file - [C280167]', async () => { + await dataTable.selectItem(fileRecent1); await toolbar.clickDownload(); - expect(await Utils.fileExistsOnOS(fileFavorites)).toBe(true, 'File not found in download location'); + expect(await Utils.fileExistsOnOS(fileRecent1)).toBe(true, 'File not found in download location'); + }); + + it('Download multiple items - [C280177]', async () => { + await dataTable.selectMultipleItems([fileRecent1, fileRecent2]); + await toolbar.clickDownload(); + + expect(await Utils.fileExistsOnOS(archiveZip)).toBe(true, 'File not found in download location'); + + await Utils.unzip(archiveZip, unzippedRecent); + + expect(await Utils.fileExistsOnOS(fileRecent1, unzippedRecent)).toBe(true, `${fileRecent1} not found in unzipped folder`); + expect(await Utils.fileExistsOnOS(fileRecent2, unzippedRecent)).toBe(true, `${fileRecent2} not found in unzipped folder`); + }); + + }); + + describe('on Search Results', () => { + + beforeEach(async (done) => { + await page.clickPersonalFilesAndWait(); + await searchInput.clickSearchButton(); + await searchInput.checkFilesAndFolders(); + await searchInput.searchForTextAndCloseSearchOptions('*Search*'); + done(); + }); + + it('Download a file - [C279164]', async () => { + await dataTable.selectItem(fileSearch, parent); + await toolbar.clickDownload(); + + expect(await Utils.fileExistsOnOS(fileSearch)).toBe(true, 'File not found in download location'); + }); + + it('Download a folder - [C297694]', async () => { + await dataTable.selectItem(folderSearch, parent); + await toolbar.clickDownload(); + + const folderZip = `${folderSearch}.zip`; + + expect(await Utils.fileExistsOnOS(folderZip)).toBe(true, 'File not found in download location'); + + await Utils.unzip(folderZip); + + expect(await Utils.fileExistsOnOS(fileInFolderSearch, folderSearch)); + }); + + it('Download multiple items - [C297695]', async () => { + await dataTable.selectMultipleItems([fileSearch, folderSearch], parent); + await toolbar.clickDownload(); + + expect(await Utils.fileExistsOnOS(archiveZip)).toBe(true, 'File not found in download location'); + + await Utils.unzip(archiveZip, unzippedSearch); + + expect(await Utils.fileExistsOnOS(fileSearch, unzippedSearch)).toBe(true, `${fileSearch} not found in unzipped folder`); + expect(await Utils.fileExistsOnOS(folderSearch, unzippedSearch)).toBe(true, `${folderSearch} not found in unzipped folder`); + expect(await Utils.fileExistsOnOS(fileInFolderSearch, unzippedSearch, folderSearch)).toBe(true, `${fileInFolderSearch} not found in unzipped folder in ${folderSearch}`) }); }); diff --git a/e2e/utilities/utils.ts b/e2e/utilities/utils.ts index 1d0f690240..18195aad1b 100755 --- a/e2e/utilities/utils.ts +++ b/e2e/utilities/utils.ts @@ -28,6 +28,7 @@ import { BROWSER_WAIT_TIMEOUT, E2E_ROOT_PATH, EXTENSIBILITY_CONFIGS } from '../c const path = require('path'); const fs = require('fs'); +const StreamZip = require('node-stream-zip'); export class Utils { @@ -91,9 +92,9 @@ export class Utils { } } - static async fileExistsOnOS(fileName: string) { + static async fileExistsOnOS(fileName: string, folderName: string = '', subFolderName: string = '') { const config = await browser.getProcessedConfig(); - const filePath = path.join(config.params.downloadFolder, fileName); + const filePath = path.join(config.params.downloadFolder, folderName, subFolderName, fileName); let tries = 15; @@ -116,6 +117,44 @@ export class Utils { }); } + static async renameFile(oldName: string, newName: string) { + const config = await browser.getProcessedConfig(); + const oldFilePath = path.join(config.params.downloadFolder, oldName); + const newFilePath = path.join(config.params.downloadFolder, newName); + + const fileExists = await this.fileExistsOnOS(oldName); + + if (fileExists) { + fs.rename(oldFilePath, newFilePath, function (err) { + if (err) { + console.log('==== rename err: ', err); + } + }); + } + } + + static async unzip(filename: string, unzippedName: string = '') { + const config = await browser.getProcessedConfig(); + const filePath = path.join(config.params.downloadFolder, filename); + const output = path.join(config.params.downloadFolder, unzippedName ? unzippedName : ''); + + const zip = new StreamZip({ + file: filePath, + storeEntries: true + }); + + await zip.on('error', err => { console.log('=== unzip err: ', err) }); + + await zip.on('ready', async () => { + if (unzippedName) { + await fs.mkdirSync(output); + } + await zip.extract(null, output, async () => { + await zip.close(); + }); + }); + } + static async pressEscape() { return await browser.actions().sendKeys(protractor.Key.ESCAPE).perform(); } diff --git a/package-lock.json b/package-lock.json index f7d5575df4..2b8b56c87a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -200,7 +200,7 @@ "dependencies": { "source-map": { "version": "0.5.6", - "resolved": "http://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=", "dev": true }, @@ -620,7 +620,7 @@ }, "load-json-file": { "version": "2.0.0", - "resolved": "http://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", "dev": true, "requires": { @@ -682,7 +682,7 @@ }, "pify": { "version": "2.3.0", - "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", "dev": true }, @@ -1111,7 +1111,7 @@ }, "supports-color": { "version": "2.0.0", - "resolved": "http://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", "dev": true } @@ -1368,7 +1368,7 @@ }, "@types/q": { "version": "0.0.32", - "resolved": "http://registry.npmjs.org/@types/q/-/q-0.0.32.tgz", + "resolved": "https://registry.npmjs.org/@types/q/-/q-0.0.32.tgz", "integrity": "sha1-vShOV8hPEyXacCur/IKlMoGQwMU=", "dev": true }, @@ -1386,7 +1386,7 @@ }, "@types/strip-bom": { "version": "3.0.0", - "resolved": "http://registry.npmjs.org/@types/strip-bom/-/strip-bom-3.0.0.tgz", + "resolved": "https://registry.npmjs.org/@types/strip-bom/-/strip-bom-3.0.0.tgz", "integrity": "sha1-FKjsOVbC6B7bdSB5CuzyHCkK69I=", "dev": true }, @@ -1944,7 +1944,7 @@ }, "util": { "version": "0.10.3", - "resolved": "http://registry.npmjs.org/util/-/util-0.10.3.tgz", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", "dev": true, "requires": { @@ -2048,7 +2048,7 @@ }, "chalk": { "version": "1.1.3", - "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { @@ -2302,11 +2302,27 @@ "callsite": "1.0.0" } }, + "big-integer": { + "version": "1.6.41", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.41.tgz", + "integrity": "sha512-d5AT9lMTYJ/ZE/4gzxb+5ttPcRWljVsvv7lF1w9KzkPhVUhBtHrjDo1J8swfZKepfLsliDhYa31zRYwcD0Yg9w==", + "dev": true + }, "big.js": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==" }, + "binary": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz", + "integrity": "sha1-n2BVO8XOjDOG87VTz/R0Yq3sqnk=", + "dev": true, + "requires": { + "buffers": "~0.1.1", + "chainsaw": "~0.1.0" + } + }, "binary-extensions": { "version": "1.13.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.0.tgz", @@ -2504,7 +2520,7 @@ }, "browserify-aes": { "version": "1.2.0", - "resolved": "http://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", "dev": true, "requires": { @@ -2541,7 +2557,7 @@ }, "browserify-rsa": { "version": "4.0.1", - "resolved": "http://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", "dev": true, "requires": { @@ -2595,7 +2611,7 @@ }, "buffer": { "version": "4.9.1", - "resolved": "http://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", "dev": true, "requires": { @@ -2638,12 +2654,24 @@ "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==", "dev": true }, + "buffer-indexof-polyfill": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.1.tgz", + "integrity": "sha1-qfuAbOgUXVQoUQznLyeLs2OmOL8=", + "dev": true + }, "buffer-xor": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", "dev": true }, + "buffers": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz", + "integrity": "sha1-skV5w77U1tOWru5tmorn9Ugqt7s=", + "dev": true + }, "builtin-modules": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", @@ -2670,7 +2698,7 @@ }, "cacache": { "version": "10.0.4", - "resolved": "http://registry.npmjs.org/cacache/-/cacache-10.0.4.tgz", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-10.0.4.tgz", "integrity": "sha512-Dph0MzuH+rTQzGPNT9fAnrPmMmjKfST6trxJeK7NQuHRaVw24VzPRWTmg9MpcwOVQZO0E1FBICUlFeNaKPIfHA==", "dev": true, "requires": { @@ -2744,7 +2772,7 @@ }, "camelcase-keys": { "version": "2.1.0", - "resolved": "http://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", "dev": true, "requires": { @@ -2776,6 +2804,15 @@ "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", "dev": true }, + "chainsaw": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz", + "integrity": "sha1-XqtQsor+WAdNDVgpE4iCi15fvJg=", + "dev": true, + "requires": { + "traverse": ">=0.3.0 <0.4" + } + }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -3053,7 +3090,7 @@ }, "colors": { "version": "1.1.2", - "resolved": "http://registry.npmjs.org/colors/-/colors-1.1.2.tgz", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", "dev": true }, @@ -3408,7 +3445,7 @@ }, "create-hash": { "version": "1.2.0", - "resolved": "http://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", "dev": true, "requires": { @@ -3421,7 +3458,7 @@ }, "create-hmac": { "version": "1.1.7", - "resolved": "http://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", "dev": true, "requires": { @@ -3925,7 +3962,7 @@ "dependencies": { "globby": { "version": "6.1.0", - "resolved": "http://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", "dev": true, "requires": { @@ -3938,7 +3975,7 @@ "dependencies": { "pify": { "version": "2.3.0", - "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", "dev": true } @@ -4014,7 +4051,7 @@ }, "diffie-hellman": { "version": "5.0.3", - "resolved": "http://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", "dev": true, "requires": { @@ -4084,6 +4121,15 @@ "is-obj": "^1.0.0" } }, + "duplexer2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", + "dev": true, + "requires": { + "readable-stream": "^2.0.2" + } + }, "duplexer3": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", @@ -4207,7 +4253,7 @@ }, "engine.io-client": { "version": "3.2.1", - "resolved": "http://registry.npmjs.org/engine.io-client/-/engine.io-client-3.2.1.tgz", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.2.1.tgz", "integrity": "sha512-y5AbkytWeM4jQr7m/koQLc5AxpRKC1hEVUb/s1FUAWEJq5AzJJ4NLvzuKPuxtDi5Mq755WuDvZ6Iv2rXj4PTzw==", "dev": true, "requires": { @@ -4333,7 +4379,7 @@ }, "es6-promisify": { "version": "5.0.0", - "resolved": "http://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", + "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", "dev": true, "requires": { @@ -4541,7 +4587,7 @@ }, "expand-range": { "version": "0.1.1", - "resolved": "http://registry.npmjs.org/expand-range/-/expand-range-0.1.1.tgz", + "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-0.1.1.tgz", "integrity": "sha1-TLjtoJk8pW+k9B/ELzy7TMrf8EQ=", "dev": true, "requires": { @@ -4615,7 +4661,7 @@ }, "expand-range": { "version": "1.8.2", - "resolved": "http://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", + "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", "dev": true, "requires": { @@ -4704,7 +4750,7 @@ "dependencies": { "array-flatten": { "version": "1.1.1", - "resolved": "http://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", "dev": true }, @@ -4954,7 +5000,7 @@ }, "finalhandler": { "version": "1.1.1", - "resolved": "http://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", "dev": true, "requires": { @@ -5140,7 +5186,7 @@ }, "fs-access": { "version": "1.0.1", - "resolved": "http://registry.npmjs.org/fs-access/-/fs-access-1.0.1.tgz", + "resolved": "https://registry.npmjs.org/fs-access/-/fs-access-1.0.1.tgz", "integrity": "sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o=", "dev": true, "requires": { @@ -5794,7 +5840,7 @@ }, "get-stream": { "version": "3.0.0", - "resolved": "http://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", "dev": true }, @@ -5926,7 +5972,7 @@ }, "got": { "version": "6.7.1", - "resolved": "http://registry.npmjs.org/got/-/got-6.7.1.tgz", + "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", "dev": true, "requires": { @@ -6136,7 +6182,7 @@ }, "http-errors": { "version": "1.6.3", - "resolved": "http://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", "dev": true, "requires": { @@ -6192,7 +6238,7 @@ }, "http-proxy-middleware": { "version": "0.18.0", - "resolved": "http://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.18.0.tgz", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.18.0.tgz", "integrity": "sha512-Fs25KVMPAIIcgjMZkVHJoKg9VcXcC1C8yb9JUgeDvVXY0S/zgVIhMb+qVswDIgtJe2DfckMSY2d6TuTEutlk6Q==", "dev": true, "requires": { @@ -6585,7 +6631,7 @@ }, "is-accessor-descriptor": { "version": "0.1.6", - "resolved": "http://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "dev": true, "requires": { @@ -6644,7 +6690,7 @@ }, "is-data-descriptor": { "version": "0.1.4", - "resolved": "http://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "dev": true, "requires": { @@ -6785,7 +6831,7 @@ }, "is-obj": { "version": "1.0.1", - "resolved": "http://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", "dev": true }, @@ -7017,7 +7063,7 @@ }, "fast-deep-equal": { "version": "1.1.0", - "resolved": "http://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", "dev": true }, @@ -7252,7 +7298,7 @@ }, "jsesc": { "version": "1.3.0", - "resolved": "http://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", "dev": true }, @@ -7344,13 +7390,13 @@ "dependencies": { "core-js": { "version": "2.3.0", - "resolved": "http://registry.npmjs.org/core-js/-/core-js-2.3.0.tgz", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.3.0.tgz", "integrity": "sha1-+rg/uwstjchfpjbEudNMdUIMbWU=", "dev": true }, "es6-promise": { "version": "3.0.2", - "resolved": "http://registry.npmjs.org/es6-promise/-/es6-promise-3.0.2.tgz", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.0.2.tgz", "integrity": "sha1-AQ1YWEI6XxGJeWZfRkhqlcbuK7Y=", "dev": true }, @@ -7362,7 +7408,7 @@ }, "readable-stream": { "version": "2.0.6", - "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", "dev": true, "requires": { @@ -7376,7 +7422,7 @@ }, "string_decoder": { "version": "0.10.31", - "resolved": "http://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", "dev": true } @@ -7444,7 +7490,7 @@ }, "karma-cli": { "version": "1.0.1", - "resolved": "http://registry.npmjs.org/karma-cli/-/karma-cli-1.0.1.tgz", + "resolved": "https://registry.npmjs.org/karma-cli/-/karma-cli-1.0.1.tgz", "integrity": "sha1-rmw8WKMTodALRRZMRVubhs4X+WA=", "dev": true, "requires": { @@ -7469,7 +7515,7 @@ }, "karma-jasmine-html-reporter": { "version": "0.2.2", - "resolved": "http://registry.npmjs.org/karma-jasmine-html-reporter/-/karma-jasmine-html-reporter-0.2.2.tgz", + "resolved": "https://registry.npmjs.org/karma-jasmine-html-reporter/-/karma-jasmine-html-reporter-0.2.2.tgz", "integrity": "sha1-SKjl7xiAdhfuK14zwRlMNbQ5Ukw=", "dev": true, "requires": { @@ -7573,7 +7619,7 @@ "dependencies": { "promise": { "version": "7.0.4", - "resolved": "http://registry.npmjs.org/promise/-/promise-7.0.4.tgz", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.0.4.tgz", "integrity": "sha1-Nj6EpMNsg1a4kP7WLJHOhdAu1Tk=", "dev": true, "requires": { @@ -7705,6 +7751,12 @@ } } }, + "listenercount": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz", + "integrity": "sha1-hMinKrWcRyUyFIDJdeZQg0LnCTc=", + "dev": true + }, "listr": { "version": "0.14.3", "resolved": "https://registry.npmjs.org/listr/-/listr-0.14.3.tgz", @@ -7798,7 +7850,7 @@ }, "supports-color": { "version": "2.0.0", - "resolved": "http://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", "dev": true } @@ -7818,7 +7870,7 @@ }, "load-json-file": { "version": "1.1.0", - "resolved": "http://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", "dev": true, "requires": { @@ -7831,7 +7883,7 @@ "dependencies": { "pify": { "version": "2.3.0", - "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", "dev": true } @@ -8195,7 +8247,7 @@ }, "media-typer": { "version": "0.3.0", - "resolved": "http://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", "dev": true }, @@ -8222,7 +8274,7 @@ }, "meow": { "version": "3.7.0", - "resolved": "http://registry.npmjs.org/meow/-/meow-3.7.0.tgz", + "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", "dev": true, "requires": { @@ -8448,7 +8500,7 @@ }, "mkdirp": { "version": "0.5.1", - "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", "dev": true, "requires": { @@ -8749,7 +8801,7 @@ "dependencies": { "semver": { "version": "5.3.0", - "resolved": "http://registry.npmjs.org/semver/-/semver-5.3.0.tgz", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", "dev": true } @@ -8838,7 +8890,7 @@ }, "chalk": { "version": "1.1.3", - "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { @@ -8866,6 +8918,12 @@ "find-parent-dir": "^0.3.0" } }, + "node-stream-zip": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/node-stream-zip/-/node-stream-zip-1.8.0.tgz", + "integrity": "sha512-sFMswrGIZ8c4a9o82MiET1k/XMqnkVkoU/C4mL869ndDnzPLeVKWn/6qMdzGtZCbWeuZ9IRIbhHLliSs7QTEKg==", + "dev": true + }, "nopt": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", @@ -9319,13 +9377,13 @@ }, "os-homedir": { "version": "1.0.2", - "resolved": "http://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", "dev": true }, "os-locale": { "version": "1.4.0", - "resolved": "http://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", "dev": true, "requires": { @@ -9340,7 +9398,7 @@ }, "os-tmpdir": { "version": "1.0.2", - "resolved": "http://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", "dev": true }, @@ -9662,7 +9720,7 @@ }, "path-browserify": { "version": "0.0.0", - "resolved": "http://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz", "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=", "dev": true }, @@ -9680,7 +9738,7 @@ }, "path-is-absolute": { "version": "1.0.1", - "resolved": "http://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", "dev": true }, @@ -10051,7 +10109,7 @@ }, "chalk": { "version": "1.1.3", - "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { @@ -10079,7 +10137,7 @@ }, "globby": { "version": "5.0.0", - "resolved": "http://registry.npmjs.org/globby/-/globby-5.0.0.tgz", + "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", "dev": true, "requires": { @@ -10093,7 +10151,7 @@ }, "pify": { "version": "2.3.0", - "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", "dev": true }, @@ -10390,7 +10448,7 @@ "dependencies": { "pify": { "version": "2.3.0", - "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", "dev": true } @@ -10420,7 +10478,7 @@ }, "pify": { "version": "2.3.0", - "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", "dev": true } @@ -10459,7 +10517,7 @@ }, "readable-stream": { "version": "2.3.6", - "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "requires": { "core-util-is": "~1.0.0", @@ -10540,7 +10598,7 @@ }, "regexpu-core": { "version": "1.0.0", - "resolved": "http://registry.npmjs.org/regexpu-core/-/regexpu-core-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-1.0.0.tgz", "integrity": "sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs=", "dev": true, "requires": { @@ -10570,13 +10628,13 @@ }, "regjsgen": { "version": "0.2.0", - "resolved": "http://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=", "dev": true }, "regjsparser": { "version": "0.1.5", - "resolved": "http://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", "dev": true, "requires": { @@ -10585,7 +10643,7 @@ "dependencies": { "jsesc": { "version": "0.5.0", - "resolved": "http://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", "dev": true } @@ -11011,7 +11069,7 @@ }, "safe-regex": { "version": "1.1.0", - "resolved": "http://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", "dev": true, "requires": { @@ -11061,7 +11119,7 @@ }, "sax": { "version": "0.5.8", - "resolved": "http://registry.npmjs.org/sax/-/sax-0.5.8.tgz", + "resolved": "https://registry.npmjs.org/sax/-/sax-0.5.8.tgz", "integrity": "sha1-1HLbIo6zMcJQaw6MFVJK25OdEsE=", "dev": true }, @@ -11092,7 +11150,7 @@ "dependencies": { "source-map": { "version": "0.4.4", - "resolved": "http://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", "dev": true, "requires": { @@ -11315,7 +11373,7 @@ }, "sha.js": { "version": "2.4.11", - "resolved": "http://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", "dev": true, "requires": { @@ -11402,7 +11460,7 @@ }, "slice-ansi": { "version": "0.0.4", - "resolved": "http://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=", "dev": true }, @@ -11618,7 +11676,7 @@ }, "socket.io-parser": { "version": "3.2.0", - "resolved": "http://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.2.0.tgz", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.2.0.tgz", "integrity": "sha512-FYiBx7rc/KORMJlgsXysflWx/RIvtqZbyGLlHZvjfmPTPeuD/I8MaW7cfFrj5tRltICJdgwflhfZ3NVVbVLFQA==", "dev": true, "requires": { @@ -11892,7 +11950,7 @@ }, "sprintf-js": { "version": "1.0.3", - "resolved": "http://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", "dev": true }, @@ -12032,7 +12090,7 @@ }, "string-width": { "version": "1.0.2", - "resolved": "http://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, "requires": { @@ -12043,7 +12101,7 @@ }, "string_decoder": { "version": "1.1.1", - "resolved": "http://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "requires": { "safe-buffer": "~5.1.0" @@ -12062,7 +12120,7 @@ }, "strip-ansi": { "version": "3.0.1", - "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { @@ -12080,7 +12138,7 @@ }, "strip-eof": { "version": "1.0.0", - "resolved": "http://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", "dev": true }, @@ -12152,7 +12210,7 @@ }, "source-map": { "version": "0.1.43", - "resolved": "http://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=", "dev": true, "requires": { @@ -12218,7 +12276,7 @@ }, "tar": { "version": "2.2.1", - "resolved": "http://registry.npmjs.org/tar/-/tar-2.2.1.tgz", + "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", "dev": true, "requires": { @@ -12457,7 +12515,7 @@ }, "through": { "version": "2.3.8", - "resolved": "http://registry.npmjs.org/through/-/through-2.3.8.tgz", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", "dev": true }, @@ -12602,6 +12660,12 @@ } } }, + "traverse": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz", + "integrity": "sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk=", + "dev": true + }, "tree-kill": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.1.tgz", @@ -12734,7 +12798,7 @@ }, "tty-browserify": { "version": "0.0.0", - "resolved": "http://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", "dev": true }, @@ -12919,6 +12983,31 @@ "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=", "dev": true }, + "unzipper": { + "version": "0.9.11", + "resolved": "https://registry.npmjs.org/unzipper/-/unzipper-0.9.11.tgz", + "integrity": "sha512-G0z5zv8LYv4/XwpOiXgTGTcN4jyxgyg3P1DfdIeCN2QGOd6ZBl49BSbOe9JsIEvKh3tG7/b0bdJvz+UmwA+BRg==", + "dev": true, + "requires": { + "big-integer": "^1.6.17", + "binary": "~0.3.0", + "bluebird": "~3.4.1", + "buffer-indexof-polyfill": "~1.0.0", + "duplexer2": "~0.1.4", + "fstream": "~1.0.10", + "listenercount": "~1.0.1", + "readable-stream": "~2.3.6", + "setimmediate": "~1.0.4" + }, + "dependencies": { + "bluebird": { + "version": "3.4.7", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz", + "integrity": "sha1-9y12C+Cbf3bQjtj66Ysomo0F+rM=", + "dev": true + } + } + }, "upath": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.0.tgz", @@ -13099,7 +13188,7 @@ }, "vm-browserify": { "version": "0.0.4", - "resolved": "http://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=", "dev": true, "requires": { @@ -13234,7 +13323,7 @@ }, "source-map": { "version": "0.4.4", - "resolved": "http://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", "dev": true, "requires": { @@ -13716,7 +13805,7 @@ }, "wrap-ansi": { "version": "2.1.0", - "resolved": "http://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", "dev": true, "requires": { @@ -13778,7 +13867,7 @@ }, "xmlbuilder": { "version": "9.0.7", - "resolved": "http://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=", "dev": true }, diff --git a/package.json b/package.json index 8df9d3b045..45875c9951 100644 --- a/package.json +++ b/package.json @@ -93,6 +93,7 @@ "karma-jasmine": "~1.1.0", "karma-jasmine-html-reporter": "^0.2.2", "lint-staged": "^8.1.4", + "node-stream-zip": "1.8.0", "ng-packagr": "^4.7.0", "pre-commit": "^1.2.2", "prettier": "^1.16.0",