diff --git a/.codecov.yml b/.codecov.yml
new file mode 100644
index 00000000..0abea89a
--- /dev/null
+++ b/.codecov.yml
@@ -0,0 +1,8 @@
+codecov:
+ notify:
+ require_ci_to_pass: yes
+
+coverage:
+ precision: 2
+ round: down
+ range: "99...100"
diff --git a/.gitignore b/.gitignore
index c4b41bc4..8ee09aa1 100644
--- a/.gitignore
+++ b/.gitignore
@@ -6,8 +6,9 @@ coverage
*.log
.env
.nyc_output
+.stats.json
.DS_Store
# VS Code
.vscode
-!.vscode/tasks.js
\ No newline at end of file
+!.vscode/tasks.js
diff --git a/.npmignore b/.npmignore
index 56aedebc..9503fba5 100644
--- a/.npmignore
+++ b/.npmignore
@@ -5,6 +5,8 @@ tsconfig.json
tslint.json
.travis.yml
.github
+.codecov.yml
+.stats.json
build/temp
build/docs
diff --git a/.prettierrc b/.prettierrc
new file mode 100644
index 00000000..4cab2033
--- /dev/null
+++ b/.prettierrc
@@ -0,0 +1,11 @@
+{
+ "trailingComma": "all",
+ "tabWidth": 2,
+ "semi": true,
+ "singleQuote": true,
+ "printWidth" : 180,
+ "parser": "typescript",
+ "useTabs": false,
+ "bracketSpacing": true,
+ "arrowParens": "avoid"
+}
diff --git a/.travis.yml b/.travis.yml
index f3c177a3..31fff974 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -3,14 +3,12 @@ git:
submodules: false
depth: 1
-addons:
- firefox: latest
- chrome: stable
-
before_install:
- npm i -g npm@latest
+after_success:
+- npm run test:codecov
+
env:
global:
- - secure: uveWmRaiGKxKAYEP86LTSGmTmUvIXqBi0uNai087MDKvzdPuMQZSay3DSN9MLxAskbch1OjKoRCpkKy+z6tJsQL5z8tptpEcI5mD7LJU8U2akskEXANgqH8nPjqC0YPMPU2y8gWSLd/y22VaIKsF8WxXmVpjc57EXrXQtSqCUI9PI3cnyw9eqcv6Pf+3iXLEL4nr+ORvq+bQgEYk8U6ME+49KULRz+R4VhltZxy5F7T0vFEpAyRfsVYyKBwPss1NXE/M+EMqECRgTyXe1+roDO+DFHP+L0qrOrNEbjJSY5iYDfYOIfdtNYz6rvSbTl9jmsLYphb/BJy4eEB1DV38/K3WJ510gi0n3lWgFPlZB9Wh3S7LXQh4yieHbB2ddWYtX6IP9LNeNpdn/vgJwmuNyiAYsEdeqYdPSUynJ50RlwDVCLd4GkB5qpMBjMgtfXiY4NkqDECjc0BykjKqBZR4iWlDKygFVmBHAgzWrylNAhhiHcClRBLXaRoLa4/lJrpfefVShs5G+y5vxfptDFIbeQs6R2k6Xy5JTx36qMUZoVvdLyg+FqAjaadUGzVNadGw8Sk2DrVODigGB9Zbrmvay8yOYJL2/3JVD2SJua7wEaJnltIItG2F1smR4EcyxDKcOOUhPeat+vm2bXCCYf1MEgw+46iNIxIS05BD+B2aumk=
- - secure: tuCHqcmWvzE5diSBB7jcgAbkzvEbUktR7eCn6wx2A/ntJmmEm2PRuoYQjIX99hF5d16QwgbxunjWihvLYskL7+t+Cwx4K9pyGFUojFQFK7X72py3ZGWrTRL0b1YdtZJ4tZjOK5C4IRy5FmMYV4OP3QHL7aeamFJikCdLHXiT3zfHjlsAwS4pHN8yfmcYgf5+xOrZ9FqVQu6M/HSJIOq/wpEKdFv7dZCxHcsPhjIAO4yCyfUw7pvk0RzOv7owf9LDIGpH5X8wI9GxzuREXSyzX3KBa2a1FdX8ctrxNTAjUepY4AjxAk6ZCcNUHcTeeOfVtZIfztGvryQddhvdWIveMUiGeiLS26L8sEo1xVcVLXpff3LB3vKHIoaDAiGAfp1ZAjRhMAI08yqE61E0h3n+5/fwgcni6p9gdp0eyfRv+QImxUFM+5caI7U6KkP5pjfRWi6zpLu1txCLKXeeh5IiKgnEHBtPu9LeM1UvOIqObOElXuRuPGuJAOH75mtferiWQL2kjjZlZSNGq0/ra+mn6HccuhDq7aIacOkrrz0q0oLSjGCknlCWmgfeP4P3zgm60+vbnOxM6PMm1avDibPyY2zdewGuvVg1p1CmUOoapbttzbptwOfFde/8U/AaSvMTehSTakSnMTj9JBiUa8mQZwRy64euuL2WZaX+D7DGwz4=
+ - secure: mIxTbk9QmMvSJ2BJL3rD/TBJppH4JIaMatoBBLsQzJYPtPzhvoEdgsPySh2jf3DAx7IUiQGbQEGsEyLfARanwZIkh5DggHWdMvYsP0ypCiNR7KV7BHCPfQd9v4OW7WF/KQCXzN3TIH+07KvF2swaNuEhKwnI+joVWMMgmEsCWQlTFiEbnieb2xxTMNrzl1WsrtANC9aQTeWVsNcW8xtDA/aQYefaQykOjHPJyyWaiLeBZ9Te0nMD7SeCSQUVywLT77saQJfsnHiCIKvv4lk+rvi6hQypAjBSznFwBa+Zkgk6y5DjT0SDhYXUVY3Kb8AJDFhgIwRlz74/ST9lGuEGnOjHZcQfqarbhcgbg8/HrsPP+spZwa4h0eRPNHfSDmrxTFDZXYDkULeLFPheMkvKKSqq0O+QdMmaL7hPuNWmEQINQg+quxHTjj/ldolL9Vb5db2zMu/jAYGmPDqQOk3GCilUcT4Eh64NmwEShfPY3VMuO/Weg37MJaFNX2efcKxCRWthpwEApqg/4GSk2Qeev7TY/mKkxNFXiXjMwjrXpobEtbQf4Kdy/vpyNE1YtxGiXBsSMMheMeDcVG2ryxaMNcKEyB2uncKqMH3jCU2lDJ/xoJfLmx2+FgxlrTtISl424lshQitWPU9co+FzBnXfyyZILxjsJZSzzZXe3ppWqAg=
diff --git a/LICENSE b/LICENSE
index e6d28548..98a48567 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,17 +1,15 @@
-/*
- * Copyright (c) ${year} by Filestack.
- * Some rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
\ No newline at end of file
+Copyright (c) ${year} by Filestack.
+Some rights reserved.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
diff --git a/README.md b/README.md
index 9fa1a529..6b9cc34d 100644
--- a/README.md
+++ b/README.md
@@ -4,71 +4,129 @@
Javascript SDK for the Filestack API and content management system.
+
+
+
+
+
+
+
+
+
-
-
+
+
+**Table of Contents**
+
+
+- [What's in the box?](#whats-in-the-box)
+- [Installation](#installation)
+- [API Documentation](#api-documentation)
+- [Usage](#usage)
+ - [Browsers](#browsers)
+ - [ES module](#es-module)
+ - [UMD module](#umd-module)
+ - [GZIP support](#gzip-support)
+ - [SRI](#sri)
+ - [Node](#node)
+ - [CommonJS module](#commonjs-module)
+- [Module Overview](#module-overview)
+- [Releases Info](#releases-info)
+- [Live examples (JSFiddle)](#live-examples-jsfiddle)
+- [Picker Quick Start](#picker-quick-start)
+- [Promises](#promises)
+- [Development](#development)
+- [Debugging](#debugging)
+ - [Node](#node-1)
+ - [Browser](#browser)
+- [Versioning](#versioning)
+- [Contributing](#contributing)
+
+
## What's in the box?
* A multi-part uploader powered on the backend by the [Filestack CIN](https://www.filestack.com/products/content-ingestion-network).
* An interface to the [Filestack Processing Engine](https://www.filestack.com/docs/image-transformations) for transforming assets via URLs.
* The Filestack Picker - an upload widget for the web that integrates over a dozen cloud providers and provides pre-upload image editing.
+
## Installation
```sh
npm install filestack-js
```
+
+## API Documentation
+
+[https://filestack.github.io/filestack-js/](https://filestack.github.io/filestack-js/)
+
## Usage
### Browsers
-**ES module**:
+#### ES module
```js
import * as filestack from 'filestack-js';
const client = filestack.init('apikey');
```
-**UMD module**:
+#### UMD module
```HTML
-
+
```
-where VERSION is one of the MAJOR versions of the filestack-js ie:
+where ```{MAJOR_VERSION}``` is one of the MAJOR versions of the filestack-js ie:
```HTML
-
+
```
-**GZIP support**
+#### GZIP support
+To speed up library loading you can use gzipped file available after adding gz to file extension
```HTML
-To speed up library loading you can use gzipped file available after adding gz before the file extension
-
-
+
```
+#### SRI
+Subresource Integrity (SRI) is a security feature that enables browsers to verify that files they fetch (for example, from a CDN) are delivered without unexpected manipulation. It works by allowing you to provide a cryptographic hash that a fetched file must match
+
+To obtain sri hashes for filestack-js library check manifest.json file on CDN:
+
+```
+https://static.filestackapi.com/filestack-js/{LIBRARY_VERSION}/manifest.json
+```
+
+```HTML
+
+```
+
+Where ```{LIBRARY_VERSION}``` is currently used library version and ```{FILE_HASH}``` is one of the hashes from integrity field in manifest.json file
+
+
### Node
-**CommonJS module**:
+#### CommonJS module
```js
const client = require('filestack-js').init('apikey');
```
-### Module Overview
+
+## Module Overview
The `package.json` specifies two separate modules:
@@ -79,8 +137,13 @@ Node projects which depend on filestack-js will follow the `main` field in `pack
The pre-bundled browser module is also available in UMD format. This is useful if you are using script tags on a web page instead of bundling your application. It can be retrieved from both the Filestack CDN and the unpkg CDN:
-* [Filestack CDN](https://static.filestackapi.com/filestack-js/1.x.x/filestack.min.js)
-* [unpkg](https://unpkg.com/filestack-js@1.x.x)
+* [Filestack CDN](https://static.filestackapi.com/filestack-js/3.x.x/filestack.min.js)
+* [unpkg](https://unpkg.com/filestack-js@3.x.x)
+
+## Releases Info
+
+Major releases will bo listed (with detailed examples) in releases folder starting from version 3.0.0
+
## Live examples (JSFiddle)
@@ -114,29 +177,24 @@ The picker instance returned from `client.picker` can be controlled with a few m
Please see our examples above to learn more about customizing the picker for your use case.
-## API Documentation
-
-[https://filestack.github.io/filestack-js/](https://filestack.github.io/filestack-js/)
-
-### Promises
+## Promises
This library requires an environment that implements the [`Promise`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise) object spec.
-If you target IE11 or iOS before 8.0 you will need to add a `Promise` polyfill to your page or application.
+If you target IE11 or iOS before 8.0 you will need to add a `Promise` and `Symbol` polyfill to your page or application.
-**Polyfills we recommend:**
+Polyfills we recommend:**
Module (for bundling):
-* https://github.com/taylorhakes/promise-polyfill
+* https://babeljs.io/docs/en/babel-polyfill
Script (for script tag):
-* https://cdn.polyfill.io/v2/polyfill.min.js?features=Promise
+* https://polyfill.io/v3/polyfill.min.js?features=Promise%2CPromise.prototype.finally%2CSymbol
## Development
-Most tests in this library are expected to interface with actual backend services. Because we like to run tests during development, these services are mocked
-during unit testing.
+Most tests in this library are expected to interface with actual backend services. Because we like to run tests during development, these services are mocked during unit testing.
-All tests are using Mocha. Browser tests are run with Karma.
+All tests are using Jest.
To run units:
@@ -144,28 +202,27 @@ To run units:
npm test
```
-To run integration tests:
+## Debugging
-```
-npm run test:integration
+Filestack-js uses [`debug`](https://github.com/visionmedia/debug), so just run with environmental variable `DEBUG` set to `fs.*`.
+
+### Node
+```js
+DEBUG=fs.* node example_upload.js
```
-Integration tests require a `.env` file in the root of your project with the following fields:
+### Browser
+Debug's enable state is persisted by localStorage
+```js
+localStorage.debug = 'fs:*'
```
-BROWSERSTACK_USERNAME=
-BROWSERSTACK_ACCESS_KEY=
-TEST_APIKEY=
-TEST_CLOUD_APIKEY=
-TEST_INTELLIGENT_APIKEY=
-TEST_SECURE_APIKEY=
-TEST_SIGNATURE=
-TEST_POLICY=
-TEST_FILELINK=
-TEST_SECURE_FILELINK=
-```
-You will need to acquire this data from a Filestack developer if you plan on running the integration suite.
+And then refresh the page.
+
+## Versioning
+
+We use [SemVer](http://semver.org/) for versioning. For the versions available, see the [tags](https://github.com/filestack/filestack-js/tags) on this repository.
## Contributing
diff --git a/examples/transform/demo.js b/examples/transform/demo.js
index 526d8a31..cedc904f 100644
--- a/examples/transform/demo.js
+++ b/examples/transform/demo.js
@@ -9,7 +9,6 @@ window.addEventListener('DOMContentLoaded', function () {
}
);
-
const img = document.createElement('img');
img.src = src.toString();
diff --git a/jest.config.js b/jest.config.js
new file mode 100644
index 00000000..35969cfb
--- /dev/null
+++ b/jest.config.js
@@ -0,0 +1,36 @@
+module.exports = {
+ name: 'filestack-js',
+ collectCoverage: true,
+ clearMocks: true,
+ projects: [{
+ displayName: 'Common',
+ clearMocks: true,
+ testMatch: ['/src/**/*.spec.ts'],
+ testEnvironment: 'node',
+ moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json', 'node'],
+ transform: {
+ '^.+\\.tsx?$': 'ts-jest'
+ },
+ }, {
+ displayName: 'Node',
+ clearMocks: true,
+ testMatch: ['/src/**/*.spec.ts'],
+ moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json', 'node'],
+ testMatch: ['/src/**/*.spec.node.ts'],
+ testEnvironment: 'node',
+ transform: {
+ '^.+\\.tsx?$': 'ts-jest'
+ },
+ }, {
+ displayName: 'Browser',
+ testMatch: ['/src/**/*.browser.spec.ts'],
+ clearMocks: true,
+ testEnvironment: 'jsdom',
+ setupFiles: ['jest-localstorage-mock'],
+ testMatch: ['/src/**/*.spec.browser.ts'],
+ moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json', 'node'],
+ transform: {
+ '^.+\\.tsx?$': 'ts-jest'
+ },
+ }]
+};
diff --git a/karma.conf.js b/karma.conf.js
deleted file mode 100644
index 81060917..00000000
--- a/karma.conf.js
+++ /dev/null
@@ -1,111 +0,0 @@
-require('dotenv').config();
-const rollupConfig = require('./rollup.config.js');
-
-module.exports = function karmaConfig(config) {
- config.set({
- singleRun: true,
- concurrency: 2,
- failOnEmptyTestSuite: false,
- frameworks: ['browserify', 'mocha'],
- reporters: ['progress'],
- browserify: {
- debug: true,
- transform: [
- 'envify',
- ],
- },
- rollupPreprocessor: Object.assign({}, rollupConfig, {
- output: {
- format: 'umd',
- sourcemap: false,
- },
- }),
- browserStack: {
- username: process.env.BROWSERSTACK_USERNAME,
- accessKey: process.env.BROWSERSTACK_ACCESS_KEY,
- timeout: 1800,
- forcelocal: true,
- },
- customLaunchers: {
- bs_edge_windows_latest: {
- base: 'BrowserStack',
- os: 'Windows',
- os_version: '10',
- browser: 'Edge',
- browser_version: 'latest',
- },
- bs_safari_osx_latest: {
- base: 'BrowserStack',
- os: 'OS X',
- os_version: null,
- browser: 'Safari',
- browser_version: 'latest',
- },
- bs_iphone6: {
- base: 'BrowserStack',
- device: 'iPhone 6',
- os: 'ios',
- os_version: '8.3',
- },
- bs_ie11: {
- base: 'BrowserStack',
- os: 'Windows',
- os_version: '10',
- browser: 'ie',
- browser_version: '11',
- debug: true
- },
- electron: {
- base: 'Electron',
- // flags: ['--show'],
- },
- firefox_headless: {
- base: 'FirefoxHeadless',
- },
- chrome_headless: {
- base: 'Chrome',
- flags: [
- '--headless',
- '--disable-gpu',
- // Without a remote debugging port, Google Chrome exits immediately.
- '--remote-debugging-port=9222'
- ],
- debug: true
- }
- },
- browsers: process.env.CI ? [
- 'bs_ie11',
- 'chrome_headless',
- 'bs_edge_windows_latest',
- 'firefox_headless',
- ] : [
- // 'electron',
- 'firefox_headless',
- 'chrome_headless',
- // 'bs_ie11',
- // 'bs_edge_windows_latest',
- ],
- browserNoActivityTimeout: 2 * 600000,
- browserConsoleLogOptions: {
- level: 'log',
- terminal: true
- },
- files: [
- 'https://cdn.polyfill.io/v2/polyfill.js',
- 'test/setup.js',
- 'build/module/**/*.spec.js',
- ],
-
- preprocessors: {
- 'test/setup.js': ['browserify'],
- 'build/module/**/*.spec.js': ['rollup'],
- },
-
- client: {
- mocha: {
- // change Karma's debug.html to the mocha web reporter
- reporter: 'html',
- },
- },
- });
-};
diff --git a/manual_tests/upload.js b/manual_tests/upload.js
new file mode 100644
index 00000000..39a766e7
--- /dev/null
+++ b/manual_tests/upload.js
@@ -0,0 +1,15 @@
+const filestack = require('../');
+const client = filestack.init(process.env.API_KEY);
+const path = require('path');
+
+client.upload(Buffer.from('testtest')).then((res) => {
+ console.log('File uploaded', res);
+}).catch((err) => {
+ console.log('File upload error', err);
+});
+
+// client.upload(path.resolve(__dirname, './test.jpg')).then((res) => {
+// console.log('File uploaded', res);
+// }).catch((err) => {
+// console.log('File upload error', err);
+// });
diff --git a/manual_tests/upload_new.ts b/manual_tests/upload_new.ts
new file mode 100644
index 00000000..37a0d9df
--- /dev/null
+++ b/manual_tests/upload_new.ts
@@ -0,0 +1,72 @@
+
+/*
+ * Copyright (c) 2018 by Filestack.
+ * Some rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import { Client } from './../src/lib/client';
+import * as Path from 'path';
+import { S3Uploader } from './../src/lib/api/upload/uploaders/s3';
+import { getFile } from '../src/lib/api/upload';
+
+const createFile = (size = 44320) => Buffer.alloc(size);
+
+const fs = new Client('AbHASoTdORfqk8APJB72Wz', {
+ cname: 'rc.filepickerapp.com',
+});
+
+// fs.multiupload(
+// [
+// {
+// file: Path.resolve(__dirname, './manual_10mb.mp4'),
+// name: 'test.mp4',
+// },
+// ],
+// {},
+// {
+// filename: () => 'test2.mp4',
+// }
+// ).then(res => {
+// console.dir(res, { depth: null });
+// });
+
+try {
+ fs.upload(createFile(), {}, {
+ filename: 'HR-mary-oo',
+ sanitizer: {
+ exclude: ['m'],
+ replacement: 'hrr',
+ },
+ workflows: ['9887b80c-962e-42e0-aa98-11706957df96']
+ }).then((res) => {
+ console.info('Upload done!', res);
+ });
+} catch (e) {
+ console.log(e.details);
+}
+
+// (async () => {
+// const file = await getFile(createFile());
+// const u = new S3Uploader({});
+// u.setUrl('https://upload.rc.filepickerapp.com');
+// u.setApikey('AbHASoTdORfqk8APJB72Wz');
+// u.addFile(file);
+
+// const res = await u.execute().catch((e) => {
+// console.log('ERROR', e);
+// });
+
+// console.log(res);
+// })();
diff --git a/package-lock.json b/package-lock.json
index de1ae53c..229478fe 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -8,24 +8,23 @@
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz",
"integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==",
- "dev": true,
"requires": {
"@babel/highlight": "^7.0.0"
}
},
"@babel/core": {
- "version": "7.3.4",
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.3.4.tgz",
- "integrity": "sha512-jRsuseXBo9pN197KnDwhhaaBzyZr2oIcLHHTt2oDdQrej5Qp57dCCJafWx5ivU8/alEYDpssYqv1MUqcxwQlrA==",
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.4.4.tgz",
+ "integrity": "sha512-lQgGX3FPRgbz2SKmhMtYgJvVzGZrmjaF4apZ2bLwofAKiSjxU0drPh4S/VasyYXwaTs+A1gvQ45BN8SQJzHsQQ==",
"dev": true,
"requires": {
"@babel/code-frame": "^7.0.0",
- "@babel/generator": "^7.3.4",
- "@babel/helpers": "^7.2.0",
- "@babel/parser": "^7.3.4",
- "@babel/template": "^7.2.2",
- "@babel/traverse": "^7.3.4",
- "@babel/types": "^7.3.4",
+ "@babel/generator": "^7.4.4",
+ "@babel/helpers": "^7.4.4",
+ "@babel/parser": "^7.4.4",
+ "@babel/template": "^7.4.4",
+ "@babel/traverse": "^7.4.4",
+ "@babel/types": "^7.4.4",
"convert-source-map": "^1.1.0",
"debug": "^4.1.0",
"json5": "^2.1.0",
@@ -33,60 +32,19 @@
"resolve": "^1.3.2",
"semver": "^5.4.1",
"source-map": "^0.5.0"
- },
- "dependencies": {
- "@babel/types": {
- "version": "7.3.4",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.3.4.tgz",
- "integrity": "sha512-WEkp8MsLftM7O/ty580wAmZzN1nDmCACc5+jFzUt+GUFNNIi3LdRlueYz0YIlmJhlZx1QYDMZL5vdWCL0fNjFQ==",
- "dev": true,
- "requires": {
- "esutils": "^2.0.2",
- "lodash": "^4.17.11",
- "to-fast-properties": "^2.0.0"
- }
- },
- "debug": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
- "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
- "dev": true,
- "requires": {
- "ms": "^2.1.1"
- }
- },
- "ms": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
- "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
- "dev": true
- }
}
},
"@babel/generator": {
- "version": "7.3.4",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.3.4.tgz",
- "integrity": "sha512-8EXhHRFqlVVWXPezBW5keTiQi/rJMQTg/Y9uVCEZ0CAF3PKtCCaVRnp64Ii1ujhkoDhhF1fVsImoN4yJ2uz4Wg==",
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.4.4.tgz",
+ "integrity": "sha512-53UOLK6TVNqKxf7RUh8NE851EHRxOOeVXKbK2bivdb+iziMyk03Sr4eaE9OELCbyZAAafAKPDwF2TPUES5QbxQ==",
"dev": true,
"requires": {
- "@babel/types": "^7.3.4",
+ "@babel/types": "^7.4.4",
"jsesc": "^2.5.1",
"lodash": "^4.17.11",
"source-map": "^0.5.0",
"trim-right": "^1.0.1"
- },
- "dependencies": {
- "@babel/types": {
- "version": "7.3.4",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.3.4.tgz",
- "integrity": "sha512-WEkp8MsLftM7O/ty580wAmZzN1nDmCACc5+jFzUt+GUFNNIi3LdRlueYz0YIlmJhlZx1QYDMZL5vdWCL0fNjFQ==",
- "dev": true,
- "requires": {
- "esutils": "^2.0.2",
- "lodash": "^4.17.11",
- "to-fast-properties": "^2.0.0"
- }
- }
}
},
"@babel/helper-annotate-as-pure": {
@@ -109,25 +67,25 @@
}
},
"@babel/helper-call-delegate": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.1.0.tgz",
- "integrity": "sha512-YEtYZrw3GUK6emQHKthltKNZwszBcHK58Ygcis+gVUrF4/FmTVr5CCqQNSfmvg2y+YDEANyYoaLz/SHsnusCwQ==",
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.4.4.tgz",
+ "integrity": "sha512-l79boDFJ8S1c5hvQvG+rc+wHw6IuH7YldmRKsYtpbawsxURu/paVy57FZMomGK22/JckepaikOkY0MoAmdyOlQ==",
"dev": true,
"requires": {
- "@babel/helper-hoist-variables": "^7.0.0",
- "@babel/traverse": "^7.1.0",
- "@babel/types": "^7.0.0"
+ "@babel/helper-hoist-variables": "^7.4.4",
+ "@babel/traverse": "^7.4.4",
+ "@babel/types": "^7.4.4"
}
},
"@babel/helper-define-map": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.1.0.tgz",
- "integrity": "sha512-yPPcW8dc3gZLN+U1mhYV91QU3n5uTbx7DUdf8NnPbjS0RMwBuHi9Xt2MUgppmNz7CJxTBWsGczTiEp1CSOTPRg==",
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.4.4.tgz",
+ "integrity": "sha512-IX3Ln8gLhZpSuqHJSnTNBWGDE9kdkTEWl21A/K7PQ00tseBwbqCHTvNLHSBd9M0R5rER4h5Rsvj9vw0R5SieBg==",
"dev": true,
"requires": {
"@babel/helper-function-name": "^7.1.0",
- "@babel/types": "^7.0.0",
- "lodash": "^4.17.10"
+ "@babel/types": "^7.4.4",
+ "lodash": "^4.17.11"
}
},
"@babel/helper-explode-assignable-expression": {
@@ -161,12 +119,12 @@
}
},
"@babel/helper-hoist-variables": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.0.0.tgz",
- "integrity": "sha512-Ggv5sldXUeSKsuzLkddtyhyHe2YantsxWKNi7A+7LeD12ExRDWTRk29JCXpaHPAbMaIPZSil7n+lq78WY2VY7w==",
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.4.4.tgz",
+ "integrity": "sha512-VYk2/H/BnYbZDDg39hr3t2kKyifAm1W6zHRfhx8jGjIHpQEBv9dry7oQ2f3+J703TLu69nYdxsovl0XYfcnK4w==",
"dev": true,
"requires": {
- "@babel/types": "^7.0.0"
+ "@babel/types": "^7.4.4"
}
},
"@babel/helper-member-expression-to-functions": {
@@ -188,30 +146,17 @@
}
},
"@babel/helper-module-transforms": {
- "version": "7.2.2",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.2.2.tgz",
- "integrity": "sha512-YRD7I6Wsv+IHuTPkAmAS4HhY0dkPobgLftHp0cRGZSdrRvmZY8rFvae/GVu3bD00qscuvK3WPHB3YdNpBXUqrA==",
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.4.4.tgz",
+ "integrity": "sha512-3Z1yp8TVQf+B4ynN7WoHPKS8EkdTbgAEy0nU0rs/1Kw4pDgmvYH3rz3aI11KgxKCba2cn7N+tqzV1mY2HMN96w==",
"dev": true,
"requires": {
"@babel/helper-module-imports": "^7.0.0",
"@babel/helper-simple-access": "^7.1.0",
- "@babel/helper-split-export-declaration": "^7.0.0",
- "@babel/template": "^7.2.2",
- "@babel/types": "^7.2.2",
- "lodash": "^4.17.10"
- },
- "dependencies": {
- "@babel/types": {
- "version": "7.3.4",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.3.4.tgz",
- "integrity": "sha512-WEkp8MsLftM7O/ty580wAmZzN1nDmCACc5+jFzUt+GUFNNIi3LdRlueYz0YIlmJhlZx1QYDMZL5vdWCL0fNjFQ==",
- "dev": true,
- "requires": {
- "esutils": "^2.0.2",
- "lodash": "^4.17.11",
- "to-fast-properties": "^2.0.0"
- }
- }
+ "@babel/helper-split-export-declaration": "^7.4.4",
+ "@babel/template": "^7.4.4",
+ "@babel/types": "^7.4.4",
+ "lodash": "^4.17.11"
}
},
"@babel/helper-optimise-call-expression": {
@@ -230,12 +175,12 @@
"dev": true
},
"@babel/helper-regex": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.0.0.tgz",
- "integrity": "sha512-TR0/N0NDCcUIUEbqV6dCO+LptmmSQFQ7q70lfcEB4URsjD0E1HzicrwUH+ap6BAQ2jhCX9Q4UqZy4wilujWlkg==",
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.4.4.tgz",
+ "integrity": "sha512-Y5nuB/kESmR3tKjU8Nkn1wMGEx1tjJX076HBMeL3XLQCu6vA/YRzuTW0bbb+qRnXvQGn+d6Rx953yffl8vEy7Q==",
"dev": true,
"requires": {
- "lodash": "^4.17.10"
+ "lodash": "^4.17.11"
}
},
"@babel/helper-remap-async-to-generator": {
@@ -252,28 +197,15 @@
}
},
"@babel/helper-replace-supers": {
- "version": "7.3.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.3.4.tgz",
- "integrity": "sha512-pvObL9WVf2ADs+ePg0jrqlhHoxRXlOa+SHRHzAXIz2xkYuOHfGl+fKxPMaS4Fq+uje8JQPobnertBBvyrWnQ1A==",
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.4.4.tgz",
+ "integrity": "sha512-04xGEnd+s01nY1l15EuMS1rfKktNF+1CkKmHoErDppjAAZL+IUBZpzT748x262HF7fibaQPhbvWUl5HeSt1EXg==",
"dev": true,
"requires": {
"@babel/helper-member-expression-to-functions": "^7.0.0",
"@babel/helper-optimise-call-expression": "^7.0.0",
- "@babel/traverse": "^7.3.4",
- "@babel/types": "^7.3.4"
- },
- "dependencies": {
- "@babel/types": {
- "version": "7.3.4",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.3.4.tgz",
- "integrity": "sha512-WEkp8MsLftM7O/ty580wAmZzN1nDmCACc5+jFzUt+GUFNNIi3LdRlueYz0YIlmJhlZx1QYDMZL5vdWCL0fNjFQ==",
- "dev": true,
- "requires": {
- "esutils": "^2.0.2",
- "lodash": "^4.17.11",
- "to-fast-properties": "^2.0.0"
- }
- }
+ "@babel/traverse": "^7.4.4",
+ "@babel/types": "^7.4.4"
}
},
"@babel/helper-simple-access": {
@@ -287,12 +219,12 @@
}
},
"@babel/helper-split-export-declaration": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0.tgz",
- "integrity": "sha512-MXkOJqva62dfC0w85mEf/LucPPS/1+04nmmRMPEBUB++hiiThQ2zPtX/mEWQ3mtzCEjIJvPY8nuwxXtQeQwUag==",
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz",
+ "integrity": "sha512-Ro/XkzLf3JFITkW6b+hNxzZ1n5OQ80NvIUdmHspih1XAhtN3vPTuUFT4eQnela+2MaZ5ulH+iyP513KJrxbN7Q==",
"dev": true,
"requires": {
- "@babel/types": "^7.0.0"
+ "@babel/types": "^7.4.4"
}
},
"@babel/helper-wrap-function": {
@@ -305,50 +237,23 @@
"@babel/template": "^7.1.0",
"@babel/traverse": "^7.1.0",
"@babel/types": "^7.2.0"
- },
- "dependencies": {
- "@babel/types": {
- "version": "7.3.4",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.3.4.tgz",
- "integrity": "sha512-WEkp8MsLftM7O/ty580wAmZzN1nDmCACc5+jFzUt+GUFNNIi3LdRlueYz0YIlmJhlZx1QYDMZL5vdWCL0fNjFQ==",
- "dev": true,
- "requires": {
- "esutils": "^2.0.2",
- "lodash": "^4.17.11",
- "to-fast-properties": "^2.0.0"
- }
- }
}
},
"@babel/helpers": {
- "version": "7.3.1",
- "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.3.1.tgz",
- "integrity": "sha512-Q82R3jKsVpUV99mgX50gOPCWwco9Ec5Iln/8Vyu4osNIOQgSrd9RFrQeUvmvddFNoLwMyOUWU+5ckioEKpDoGA==",
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.4.4.tgz",
+ "integrity": "sha512-igczbR/0SeuPR8RFfC7tGrbdTbFL3QTvH6D+Z6zNxnTe//GyqmtHmDkzrqDmyZ3eSwPqB/LhyKoU5DXsp+Vp2A==",
"dev": true,
"requires": {
- "@babel/template": "^7.1.2",
- "@babel/traverse": "^7.1.5",
- "@babel/types": "^7.3.0"
- },
- "dependencies": {
- "@babel/types": {
- "version": "7.3.4",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.3.4.tgz",
- "integrity": "sha512-WEkp8MsLftM7O/ty580wAmZzN1nDmCACc5+jFzUt+GUFNNIi3LdRlueYz0YIlmJhlZx1QYDMZL5vdWCL0fNjFQ==",
- "dev": true,
- "requires": {
- "esutils": "^2.0.2",
- "lodash": "^4.17.11",
- "to-fast-properties": "^2.0.0"
- }
- }
+ "@babel/template": "^7.4.4",
+ "@babel/traverse": "^7.4.4",
+ "@babel/types": "^7.4.4"
}
},
"@babel/highlight": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz",
"integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==",
- "dev": true,
"requires": {
"chalk": "^2.0.0",
"esutils": "^2.0.2",
@@ -358,15 +263,14 @@
"js-tokens": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
- "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
- "dev": true
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
}
}
},
"@babel/parser": {
- "version": "7.3.4",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.3.4.tgz",
- "integrity": "sha512-tXZCqWtlOOP4wgCp6RjRvLmfuhnqTLy9VHwRochJBCP2nDm27JnnuFEnXFASVyQNHk36jD1tAammsCEEqgscIQ==",
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.4.4.tgz",
+ "integrity": "sha512-5pCS4mOsL+ANsFZGdvNLybx4wtqAZJ0MJjMHxvzI3bvIsz6sQvzW8XX92EYIkiPtIvcfG3Aj+Ir5VNyjnZhP7w==",
"dev": true
},
"@babel/plugin-proposal-async-generator-functions": {
@@ -391,9 +295,9 @@
}
},
"@babel/plugin-proposal-object-rest-spread": {
- "version": "7.3.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.3.4.tgz",
- "integrity": "sha512-j7VQmbbkA+qrzNqbKHrBsW3ddFnOeva6wzSe/zB7T+xaxGc+RCpwo44wCmRixAIGRoIpmVgvzFzNJqQcO3/9RA==",
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.4.4.tgz",
+ "integrity": "sha512-dMBG6cSPBbHeEBdFXeQ2QLc5gUpg4Vkaz8octD4aoW/ISO+jBOcsuxYL7bsb5WSu8RLP6boxrBIALEHgoHtO9g==",
"dev": true,
"requires": {
"@babel/helper-plugin-utils": "^7.0.0",
@@ -411,14 +315,14 @@
}
},
"@babel/plugin-proposal-unicode-property-regex": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.2.0.tgz",
- "integrity": "sha512-LvRVYb7kikuOtIoUeWTkOxQEV1kYvL5B6U3iWEGCzPNRus1MzJweFqORTj+0jkxozkTSYNJozPOddxmqdqsRpw==",
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.4.4.tgz",
+ "integrity": "sha512-j1NwnOqMG9mFUOH58JTFsA/+ZYzQLUZ/drqWUqxCYLGeu2JFZL8YrNC9hBxKmWtAuOCHPcRpgv7fhap09Fb4kA==",
"dev": true,
"requires": {
"@babel/helper-plugin-utils": "^7.0.0",
- "@babel/helper-regex": "^7.0.0",
- "regexpu-core": "^4.2.0"
+ "@babel/helper-regex": "^7.4.4",
+ "regexpu-core": "^4.5.4"
}
},
"@babel/plugin-syntax-async-generators": {
@@ -467,9 +371,9 @@
}
},
"@babel/plugin-transform-async-to-generator": {
- "version": "7.3.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.3.4.tgz",
- "integrity": "sha512-Y7nCzv2fw/jEZ9f678MuKdMo99MFDJMT/PvD9LisrR5JDFcJH6vYeH6RnjVt3p5tceyGRvTtEN0VOlU+rgHZjA==",
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.4.4.tgz",
+ "integrity": "sha512-YiqW2Li8TXmzgbXw+STsSqPBPFnGviiaSp6CYOq55X8GQ2SGVLrXB6pNid8HkqkZAzOH6knbai3snhP7v0fNwA==",
"dev": true,
"requires": {
"@babel/helper-module-imports": "^7.0.0",
@@ -487,9 +391,9 @@
}
},
"@babel/plugin-transform-block-scoping": {
- "version": "7.3.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.3.4.tgz",
- "integrity": "sha512-blRr2O8IOZLAOJklXLV4WhcEzpYafYQKSGT3+R26lWG41u/FODJuBggehtOwilVAcFu393v3OFj+HmaE6tVjhA==",
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.4.4.tgz",
+ "integrity": "sha512-jkTUyWZcTrwxu5DD4rWz6rDB5Cjdmgz6z7M7RLXOJyCUkFBawssDGcGh8M/0FTSB87avyJI1HsTwUXp9nKA1PA==",
"dev": true,
"requires": {
"@babel/helper-plugin-utils": "^7.0.0",
@@ -497,18 +401,18 @@
}
},
"@babel/plugin-transform-classes": {
- "version": "7.3.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.3.4.tgz",
- "integrity": "sha512-J9fAvCFBkXEvBimgYxCjvaVDzL6thk0j0dBvCeZmIUDBwyt+nv6HfbImsSrWsYXfDNDivyANgJlFXDUWRTZBuA==",
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.4.4.tgz",
+ "integrity": "sha512-/e44eFLImEGIpL9qPxSRat13I5QNRgBLu2hOQJCF7VLy/otSM/sypV1+XaIw5+502RX/+6YaSAPmldk+nhHDPw==",
"dev": true,
"requires": {
"@babel/helper-annotate-as-pure": "^7.0.0",
- "@babel/helper-define-map": "^7.1.0",
+ "@babel/helper-define-map": "^7.4.4",
"@babel/helper-function-name": "^7.1.0",
"@babel/helper-optimise-call-expression": "^7.0.0",
"@babel/helper-plugin-utils": "^7.0.0",
- "@babel/helper-replace-supers": "^7.3.4",
- "@babel/helper-split-export-declaration": "^7.0.0",
+ "@babel/helper-replace-supers": "^7.4.4",
+ "@babel/helper-split-export-declaration": "^7.4.4",
"globals": "^11.1.0"
}
},
@@ -522,23 +426,23 @@
}
},
"@babel/plugin-transform-destructuring": {
- "version": "7.3.2",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.3.2.tgz",
- "integrity": "sha512-Lrj/u53Ufqxl/sGxyjsJ2XNtNuEjDyjpqdhMNh5aZ+XFOdThL46KBj27Uem4ggoezSYBxKWAil6Hu8HtwqesYw==",
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.4.4.tgz",
+ "integrity": "sha512-/aOx+nW0w8eHiEHm+BTERB2oJn5D127iye/SUQl7NjHy0lf+j7h4MKMMSOwdazGq9OxgiNADncE+SRJkCxjZpQ==",
"dev": true,
"requires": {
"@babel/helper-plugin-utils": "^7.0.0"
}
},
"@babel/plugin-transform-dotall-regex": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.2.0.tgz",
- "integrity": "sha512-sKxnyHfizweTgKZf7XsXu/CNupKhzijptfTM+bozonIuyVrLWVUvYjE2bhuSBML8VQeMxq4Mm63Q9qvcvUcciQ==",
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.4.4.tgz",
+ "integrity": "sha512-P05YEhRc2h53lZDjRPk/OektxCVevFzZs2Gfjd545Wde3k+yFDbXORgl2e0xpbq8mLcKJ7Idss4fAg0zORN/zg==",
"dev": true,
"requires": {
"@babel/helper-plugin-utils": "^7.0.0",
- "@babel/helper-regex": "^7.0.0",
- "regexpu-core": "^4.1.3"
+ "@babel/helper-regex": "^7.4.4",
+ "regexpu-core": "^4.5.4"
}
},
"@babel/plugin-transform-duplicate-keys": {
@@ -561,18 +465,18 @@
}
},
"@babel/plugin-transform-for-of": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.2.0.tgz",
- "integrity": "sha512-Kz7Mt0SsV2tQk6jG5bBv5phVbkd0gd27SgYD4hH1aLMJRchM0dzHaXvrWhVZ+WxAlDoAKZ7Uy3jVTW2mKXQ1WQ==",
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.4.4.tgz",
+ "integrity": "sha512-9T/5Dlr14Z9TIEXLXkt8T1DU7F24cbhwhMNUziN3hB1AXoZcdzPcTiKGRn/6iOymDqtTKWnr/BtRKN9JwbKtdQ==",
"dev": true,
"requires": {
"@babel/helper-plugin-utils": "^7.0.0"
}
},
"@babel/plugin-transform-function-name": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.2.0.tgz",
- "integrity": "sha512-kWgksow9lHdvBC2Z4mxTsvc7YdY7w/V6B2vy9cTIPtLEE9NhwoWivaxdNM/S37elu5bqlLP/qOY906LukO9lkQ==",
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.4.4.tgz",
+ "integrity": "sha512-iU9pv7U+2jC9ANQkKeNF6DrPy4GBa4NWQtl6dHB4Pb3izX2JOEvDTFarlNsBj/63ZEzNNIAMs3Qw4fNCcSOXJA==",
"dev": true,
"requires": {
"@babel/helper-function-name": "^7.1.0",
@@ -588,6 +492,15 @@
"@babel/helper-plugin-utils": "^7.0.0"
}
},
+ "@babel/plugin-transform-member-expression-literals": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.2.0.tgz",
+ "integrity": "sha512-HiU3zKkSU6scTidmnFJ0bMX8hz5ixC93b4MHMiYebmk2lUVNGOboPsqQvx5LzooihijUoLR/v7Nc1rbBtnc7FA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
"@babel/plugin-transform-modules-amd": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.2.0.tgz",
@@ -599,23 +512,23 @@
}
},
"@babel/plugin-transform-modules-commonjs": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.2.0.tgz",
- "integrity": "sha512-V6y0uaUQrQPXUrmj+hgnks8va2L0zcZymeU7TtWEgdRLNkceafKXEduv7QzgQAE4lT+suwooG9dC7LFhdRAbVQ==",
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.4.4.tgz",
+ "integrity": "sha512-4sfBOJt58sEo9a2BQXnZq+Q3ZTSAUXyK3E30o36BOGnJ+tvJ6YSxF0PG6kERvbeISgProodWuI9UVG3/FMY6iw==",
"dev": true,
"requires": {
- "@babel/helper-module-transforms": "^7.1.0",
+ "@babel/helper-module-transforms": "^7.4.4",
"@babel/helper-plugin-utils": "^7.0.0",
"@babel/helper-simple-access": "^7.1.0"
}
},
"@babel/plugin-transform-modules-systemjs": {
- "version": "7.3.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.3.4.tgz",
- "integrity": "sha512-VZ4+jlGOF36S7TjKs8g4ojp4MEI+ebCQZdswWb/T9I4X84j8OtFAyjXjt/M16iIm5RIZn0UMQgg/VgIwo/87vw==",
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.4.4.tgz",
+ "integrity": "sha512-MSiModfILQc3/oqnG7NrP1jHaSPryO6tA2kOMmAQApz5dayPxWiHqmq4sWH2xF5LcQK56LlbKByCd8Aah/OIkQ==",
"dev": true,
"requires": {
- "@babel/helper-hoist-variables": "^7.0.0",
+ "@babel/helper-hoist-variables": "^7.4.4",
"@babel/helper-plugin-utils": "^7.0.0"
}
},
@@ -630,18 +543,18 @@
}
},
"@babel/plugin-transform-named-capturing-groups-regex": {
- "version": "7.3.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.3.0.tgz",
- "integrity": "sha512-NxIoNVhk9ZxS+9lSoAQ/LM0V2UEvARLttEHUrRDGKFaAxOYQcrkN/nLRE+BbbicCAvZPl7wMP0X60HsHE5DtQw==",
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.4.4.tgz",
+ "integrity": "sha512-Ki+Y9nXBlKfhD+LXaRS7v95TtTGYRAf9Y1rTDiE75zf8YQz4GDaWRXosMfJBXxnk88mGFjWdCRIeqDbon7spYA==",
"dev": true,
"requires": {
"regexp-tree": "^0.1.0"
}
},
"@babel/plugin-transform-new-target": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.0.0.tgz",
- "integrity": "sha512-yin069FYjah+LbqfGeTfzIBODex/e++Yfa0rH0fpfam9uTbuEeEOx5GLGr210ggOV77mVRNoeqSYqeuaqSzVSw==",
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.4.4.tgz",
+ "integrity": "sha512-r1z3T2DNGQwwe2vPGZMBNjioT2scgWzK9BCnDEh+46z8EEwXBq24uRzd65I7pjtugzPSj921aM15RpESgzsSuA==",
"dev": true,
"requires": {
"@babel/helper-plugin-utils": "^7.0.0"
@@ -658,25 +571,43 @@
}
},
"@babel/plugin-transform-parameters": {
- "version": "7.3.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.3.3.tgz",
- "integrity": "sha512-IrIP25VvXWu/VlBWTpsjGptpomtIkYrN/3aDp4UKm7xK6UxZY88kcJ1UwETbzHAlwN21MnNfwlar0u8y3KpiXw==",
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.4.4.tgz",
+ "integrity": "sha512-oMh5DUO1V63nZcu/ZVLQFqiihBGo4OpxJxR1otF50GMeCLiRx5nUdtokd+u9SuVJrvvuIh9OosRFPP4pIPnwmw==",
"dev": true,
"requires": {
- "@babel/helper-call-delegate": "^7.1.0",
+ "@babel/helper-call-delegate": "^7.4.4",
"@babel/helper-get-function-arity": "^7.0.0",
"@babel/helper-plugin-utils": "^7.0.0"
}
},
+ "@babel/plugin-transform-property-literals": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.2.0.tgz",
+ "integrity": "sha512-9q7Dbk4RhgcLp8ebduOpCbtjh7C0itoLYHXd9ueASKAG/is5PQtMR5VJGka9NKqGhYEGn5ITahd4h9QeBMylWQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
"@babel/plugin-transform-regenerator": {
- "version": "7.3.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.3.4.tgz",
- "integrity": "sha512-hvJg8EReQvXT6G9H2MvNPXkv9zK36Vxa1+csAVTpE1J3j0zlHplw76uudEbJxgvqZzAq9Yh45FLD4pk5mKRFQA==",
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.4.4.tgz",
+ "integrity": "sha512-Zz3w+pX1SI0KMIiqshFZkwnVGUhDZzpX2vtPzfJBKQQq8WsP/Xy9DNdELWivxcKOCX/Pywge4SiEaPaLtoDT4g==",
"dev": true,
"requires": {
"regenerator-transform": "^0.13.4"
}
},
+ "@babel/plugin-transform-reserved-words": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.2.0.tgz",
+ "integrity": "sha512-fz43fqW8E1tAB3DKF19/vxbpib1fuyCwSPE418ge5ZxILnBhWyhtPgz8eh1RCGGJlwvksHkyxMxh0eenFi+kFw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
"@babel/plugin-transform-shorthand-properties": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.2.0.tgz",
@@ -706,9 +637,9 @@
}
},
"@babel/plugin-transform-template-literals": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.2.0.tgz",
- "integrity": "sha512-FkPix00J9A/XWXv4VoKJBMeSkyY9x/TqIh76wzcdfl57RJJcf8CehQ08uwfhCDNtRQYtHQKBTwKZDEyjE13Lwg==",
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.4.4.tgz",
+ "integrity": "sha512-mQrEC4TWkhLN0z8ygIvEL9ZEToPhG5K7KDW3pzGqOfIGZ28Jb0POUkeWcoz8HnHvhFy6dwAT1j8OzqN8s804+g==",
"dev": true,
"requires": {
"@babel/helper-annotate-as-pure": "^7.0.0",
@@ -725,160 +656,355 @@
}
},
"@babel/plugin-transform-unicode-regex": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.2.0.tgz",
- "integrity": "sha512-m48Y0lMhrbXEJnVUaYly29jRXbQ3ksxPrS1Tg8t+MHqzXhtBYAvI51euOBaoAlZLPHsieY9XPVMf80a5x0cPcA==",
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.4.4.tgz",
+ "integrity": "sha512-il+/XdNw01i93+M9J9u4T7/e/Ue/vWfNZE4IRUQjplu2Mqb/AFTDimkw2tdEdSH50wuQXZAbXSql0UphQke+vA==",
"dev": true,
"requires": {
"@babel/helper-plugin-utils": "^7.0.0",
- "@babel/helper-regex": "^7.0.0",
- "regexpu-core": "^4.1.3"
+ "@babel/helper-regex": "^7.4.4",
+ "regexpu-core": "^4.5.4"
}
},
"@babel/preset-env": {
- "version": "7.3.4",
- "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.3.4.tgz",
- "integrity": "sha512-2mwqfYMK8weA0g0uBKOt4FE3iEodiHy9/CW0b+nWXcbL+pGzLx8ESYc+j9IIxr6LTDHWKgPm71i9smo02bw+gA==",
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.4.4.tgz",
+ "integrity": "sha512-FU1H+ACWqZZqfw1x2G1tgtSSYSfxJLkpaUQL37CenULFARDo+h4xJoVHzRoHbK+85ViLciuI7ME4WTIhFRBBlw==",
"dev": true,
"requires": {
"@babel/helper-module-imports": "^7.0.0",
"@babel/helper-plugin-utils": "^7.0.0",
"@babel/plugin-proposal-async-generator-functions": "^7.2.0",
"@babel/plugin-proposal-json-strings": "^7.2.0",
- "@babel/plugin-proposal-object-rest-spread": "^7.3.4",
+ "@babel/plugin-proposal-object-rest-spread": "^7.4.4",
"@babel/plugin-proposal-optional-catch-binding": "^7.2.0",
- "@babel/plugin-proposal-unicode-property-regex": "^7.2.0",
+ "@babel/plugin-proposal-unicode-property-regex": "^7.4.4",
"@babel/plugin-syntax-async-generators": "^7.2.0",
"@babel/plugin-syntax-json-strings": "^7.2.0",
"@babel/plugin-syntax-object-rest-spread": "^7.2.0",
"@babel/plugin-syntax-optional-catch-binding": "^7.2.0",
"@babel/plugin-transform-arrow-functions": "^7.2.0",
- "@babel/plugin-transform-async-to-generator": "^7.3.4",
+ "@babel/plugin-transform-async-to-generator": "^7.4.4",
"@babel/plugin-transform-block-scoped-functions": "^7.2.0",
- "@babel/plugin-transform-block-scoping": "^7.3.4",
- "@babel/plugin-transform-classes": "^7.3.4",
+ "@babel/plugin-transform-block-scoping": "^7.4.4",
+ "@babel/plugin-transform-classes": "^7.4.4",
"@babel/plugin-transform-computed-properties": "^7.2.0",
- "@babel/plugin-transform-destructuring": "^7.2.0",
- "@babel/plugin-transform-dotall-regex": "^7.2.0",
+ "@babel/plugin-transform-destructuring": "^7.4.4",
+ "@babel/plugin-transform-dotall-regex": "^7.4.4",
"@babel/plugin-transform-duplicate-keys": "^7.2.0",
"@babel/plugin-transform-exponentiation-operator": "^7.2.0",
- "@babel/plugin-transform-for-of": "^7.2.0",
- "@babel/plugin-transform-function-name": "^7.2.0",
+ "@babel/plugin-transform-for-of": "^7.4.4",
+ "@babel/plugin-transform-function-name": "^7.4.4",
"@babel/plugin-transform-literals": "^7.2.0",
+ "@babel/plugin-transform-member-expression-literals": "^7.2.0",
"@babel/plugin-transform-modules-amd": "^7.2.0",
- "@babel/plugin-transform-modules-commonjs": "^7.2.0",
- "@babel/plugin-transform-modules-systemjs": "^7.3.4",
+ "@babel/plugin-transform-modules-commonjs": "^7.4.4",
+ "@babel/plugin-transform-modules-systemjs": "^7.4.4",
"@babel/plugin-transform-modules-umd": "^7.2.0",
- "@babel/plugin-transform-named-capturing-groups-regex": "^7.3.0",
- "@babel/plugin-transform-new-target": "^7.0.0",
+ "@babel/plugin-transform-named-capturing-groups-regex": "^7.4.4",
+ "@babel/plugin-transform-new-target": "^7.4.4",
"@babel/plugin-transform-object-super": "^7.2.0",
- "@babel/plugin-transform-parameters": "^7.2.0",
- "@babel/plugin-transform-regenerator": "^7.3.4",
+ "@babel/plugin-transform-parameters": "^7.4.4",
+ "@babel/plugin-transform-property-literals": "^7.2.0",
+ "@babel/plugin-transform-regenerator": "^7.4.4",
+ "@babel/plugin-transform-reserved-words": "^7.2.0",
"@babel/plugin-transform-shorthand-properties": "^7.2.0",
"@babel/plugin-transform-spread": "^7.2.0",
"@babel/plugin-transform-sticky-regex": "^7.2.0",
- "@babel/plugin-transform-template-literals": "^7.2.0",
+ "@babel/plugin-transform-template-literals": "^7.4.4",
"@babel/plugin-transform-typeof-symbol": "^7.2.0",
- "@babel/plugin-transform-unicode-regex": "^7.2.0",
- "browserslist": "^4.3.4",
+ "@babel/plugin-transform-unicode-regex": "^7.4.4",
+ "@babel/types": "^7.4.4",
+ "browserslist": "^4.5.2",
+ "core-js-compat": "^3.0.0",
"invariant": "^2.2.2",
"js-levenshtein": "^1.1.3",
- "semver": "^5.3.0"
+ "semver": "^5.5.0"
}
},
"@babel/template": {
- "version": "7.2.2",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.2.2.tgz",
- "integrity": "sha512-zRL0IMM02AUDwghf5LMSSDEz7sBCO2YnNmpg3uWTZj/v1rcG2BmQUvaGU8GhU8BvfMh1k2KIAYZ7Ji9KXPUg7g==",
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.4.4.tgz",
+ "integrity": "sha512-CiGzLN9KgAvgZsnivND7rkA+AeJ9JB0ciPOD4U59GKbQP2iQl+olF1l76kJOupqidozfZ32ghwBEJDhnk9MEcw==",
"dev": true,
"requires": {
"@babel/code-frame": "^7.0.0",
- "@babel/parser": "^7.2.2",
- "@babel/types": "^7.2.2"
- },
- "dependencies": {
- "@babel/types": {
- "version": "7.3.4",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.3.4.tgz",
- "integrity": "sha512-WEkp8MsLftM7O/ty580wAmZzN1nDmCACc5+jFzUt+GUFNNIi3LdRlueYz0YIlmJhlZx1QYDMZL5vdWCL0fNjFQ==",
- "dev": true,
- "requires": {
- "esutils": "^2.0.2",
- "lodash": "^4.17.11",
- "to-fast-properties": "^2.0.0"
- }
- }
+ "@babel/parser": "^7.4.4",
+ "@babel/types": "^7.4.4"
}
},
"@babel/traverse": {
- "version": "7.3.4",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.3.4.tgz",
- "integrity": "sha512-TvTHKp6471OYEcE/91uWmhR6PrrYywQntCHSaZ8CM8Vmp+pjAusal4nGB2WCCQd0rvI7nOMKn9GnbcvTUz3/ZQ==",
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.4.4.tgz",
+ "integrity": "sha512-Gw6qqkw/e6AGzlyj9KnkabJX7VcubqPtkUQVAwkc0wUMldr3A/hezNB3Rc5eIvId95iSGkGIOe5hh1kMKf951A==",
"dev": true,
"requires": {
"@babel/code-frame": "^7.0.0",
- "@babel/generator": "^7.3.4",
+ "@babel/generator": "^7.4.4",
"@babel/helper-function-name": "^7.1.0",
- "@babel/helper-split-export-declaration": "^7.0.0",
- "@babel/parser": "^7.3.4",
- "@babel/types": "^7.3.4",
+ "@babel/helper-split-export-declaration": "^7.4.4",
+ "@babel/parser": "^7.4.4",
+ "@babel/types": "^7.4.4",
"debug": "^4.1.0",
"globals": "^11.1.0",
"lodash": "^4.17.11"
+ }
+ },
+ "@babel/types": {
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.4.4.tgz",
+ "integrity": "sha512-dOllgYdnEFOebhkKCjzSVFqw/PmmB8pH6RGOWkY4GsboQNd47b1fBThBSwlHAq9alF9vc1M3+6oqR47R50L0tQ==",
+ "dev": true,
+ "requires": {
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.11",
+ "to-fast-properties": "^2.0.0"
+ }
+ },
+ "@cnakazawa/watch": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.3.tgz",
+ "integrity": "sha512-r5160ogAvGyHsal38Kux7YYtodEKOj89RGb28ht1jh3SJb08VwRwAKKJL0bGb04Zd/3r9FL3BFIc3bBidYffCA==",
+ "dev": true,
+ "requires": {
+ "exec-sh": "^0.3.2",
+ "minimist": "^1.2.0"
},
"dependencies": {
- "@babel/types": {
- "version": "7.3.4",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.3.4.tgz",
- "integrity": "sha512-WEkp8MsLftM7O/ty580wAmZzN1nDmCACc5+jFzUt+GUFNNIi3LdRlueYz0YIlmJhlZx1QYDMZL5vdWCL0fNjFQ==",
- "dev": true,
- "requires": {
- "esutils": "^2.0.2",
- "lodash": "^4.17.11",
- "to-fast-properties": "^2.0.0"
- }
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+ "dev": true
+ }
+ }
+ },
+ "@jest/console": {
+ "version": "24.7.1",
+ "resolved": "https://registry.npmjs.org/@jest/console/-/console-24.7.1.tgz",
+ "integrity": "sha512-iNhtIy2M8bXlAOULWVTUxmnelTLFneTNEkHCgPmgd+zNwy9zVddJ6oS5rZ9iwoscNdT5mMwUd0C51v/fSlzItg==",
+ "dev": true,
+ "requires": {
+ "@jest/source-map": "^24.3.0",
+ "chalk": "^2.0.1",
+ "slash": "^2.0.0"
+ },
+ "dependencies": {
+ "slash": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz",
+ "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==",
+ "dev": true
+ }
+ }
+ },
+ "@jest/core": {
+ "version": "24.8.0",
+ "resolved": "https://registry.npmjs.org/@jest/core/-/core-24.8.0.tgz",
+ "integrity": "sha512-R9rhAJwCBQzaRnrRgAdVfnglUuATXdwTRsYqs6NMdVcAl5euG8LtWDe+fVkN27YfKVBW61IojVsXKaOmSnqd/A==",
+ "dev": true,
+ "requires": {
+ "@jest/console": "^24.7.1",
+ "@jest/reporters": "^24.8.0",
+ "@jest/test-result": "^24.8.0",
+ "@jest/transform": "^24.8.0",
+ "@jest/types": "^24.8.0",
+ "ansi-escapes": "^3.0.0",
+ "chalk": "^2.0.1",
+ "exit": "^0.1.2",
+ "graceful-fs": "^4.1.15",
+ "jest-changed-files": "^24.8.0",
+ "jest-config": "^24.8.0",
+ "jest-haste-map": "^24.8.0",
+ "jest-message-util": "^24.8.0",
+ "jest-regex-util": "^24.3.0",
+ "jest-resolve-dependencies": "^24.8.0",
+ "jest-runner": "^24.8.0",
+ "jest-runtime": "^24.8.0",
+ "jest-snapshot": "^24.8.0",
+ "jest-util": "^24.8.0",
+ "jest-validate": "^24.8.0",
+ "jest-watcher": "^24.8.0",
+ "micromatch": "^3.1.10",
+ "p-each-series": "^1.0.0",
+ "pirates": "^4.0.1",
+ "realpath-native": "^1.1.0",
+ "rimraf": "^2.5.4",
+ "strip-ansi": "^5.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
+ "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
+ "dev": true
},
- "debug": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
- "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
+ "graceful-fs": {
+ "version": "4.1.15",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz",
+ "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
+ "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
"dev": true,
"requires": {
- "ms": "^2.1.1"
+ "ansi-regex": "^4.1.0"
}
+ }
+ }
+ },
+ "@jest/environment": {
+ "version": "24.8.0",
+ "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-24.8.0.tgz",
+ "integrity": "sha512-vlGt2HLg7qM+vtBrSkjDxk9K0YtRBi7HfRFaDxoRtyi+DyVChzhF20duvpdAnKVBV6W5tym8jm0U9EfXbDk1tw==",
+ "dev": true,
+ "requires": {
+ "@jest/fake-timers": "^24.8.0",
+ "@jest/transform": "^24.8.0",
+ "@jest/types": "^24.8.0",
+ "jest-mock": "^24.8.0"
+ }
+ },
+ "@jest/fake-timers": {
+ "version": "24.8.0",
+ "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-24.8.0.tgz",
+ "integrity": "sha512-2M4d5MufVXwi6VzZhJ9f5S/wU4ud2ck0kxPof1Iz3zWx6Y+V2eJrES9jEktB6O3o/oEyk+il/uNu9PvASjWXQw==",
+ "dev": true,
+ "requires": {
+ "@jest/types": "^24.8.0",
+ "jest-message-util": "^24.8.0",
+ "jest-mock": "^24.8.0"
+ }
+ },
+ "@jest/reporters": {
+ "version": "24.8.0",
+ "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-24.8.0.tgz",
+ "integrity": "sha512-eZ9TyUYpyIIXfYCrw0UHUWUvE35vx5I92HGMgS93Pv7du+GHIzl+/vh8Qj9MCWFK/4TqyttVBPakWMOfZRIfxw==",
+ "dev": true,
+ "requires": {
+ "@jest/environment": "^24.8.0",
+ "@jest/test-result": "^24.8.0",
+ "@jest/transform": "^24.8.0",
+ "@jest/types": "^24.8.0",
+ "chalk": "^2.0.1",
+ "exit": "^0.1.2",
+ "glob": "^7.1.2",
+ "istanbul-lib-coverage": "^2.0.2",
+ "istanbul-lib-instrument": "^3.0.1",
+ "istanbul-lib-report": "^2.0.4",
+ "istanbul-lib-source-maps": "^3.0.1",
+ "istanbul-reports": "^2.1.1",
+ "jest-haste-map": "^24.8.0",
+ "jest-resolve": "^24.8.0",
+ "jest-runtime": "^24.8.0",
+ "jest-util": "^24.8.0",
+ "jest-worker": "^24.6.0",
+ "node-notifier": "^5.2.1",
+ "slash": "^2.0.0",
+ "source-map": "^0.6.0",
+ "string-length": "^2.0.0"
+ },
+ "dependencies": {
+ "slash": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz",
+ "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==",
+ "dev": true
},
- "ms": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
- "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
"dev": true
}
}
},
- "@babel/types": {
- "version": "7.1.3",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.1.3.tgz",
- "integrity": "sha512-RpPOVfK+yatXyn8n4PB1NW6k9qjinrXrRR8ugBN8fD6hCy5RXI6PSbVqpOJBO9oSaY7Nom4ohj35feb0UR9hSA==",
+ "@jest/source-map": {
+ "version": "24.3.0",
+ "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-24.3.0.tgz",
+ "integrity": "sha512-zALZt1t2ou8le/crCeeiRYzvdnTzaIlpOWaet45lNSqNJUnXbppUUFR4ZUAlzgDmKee4Q5P/tKXypI1RiHwgag==",
"dev": true,
"requires": {
- "esutils": "^2.0.2",
- "lodash": "^4.17.10",
- "to-fast-properties": "^2.0.0"
+ "callsites": "^3.0.0",
+ "graceful-fs": "^4.1.15",
+ "source-map": "^0.6.0"
+ },
+ "dependencies": {
+ "graceful-fs": {
+ "version": "4.1.15",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz",
+ "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==",
+ "dev": true
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ }
}
},
- "@gulp-sourcemaps/identity-map": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@gulp-sourcemaps/identity-map/-/identity-map-1.0.2.tgz",
- "integrity": "sha512-ciiioYMLdo16ShmfHBXJBOFm3xPC4AuwO4xeRpFeHz7WK9PYsWCmigagG2XyzZpubK4a3qNKoUBDhbzHfa50LQ==",
+ "@jest/test-result": {
+ "version": "24.8.0",
+ "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-24.8.0.tgz",
+ "integrity": "sha512-+YdLlxwizlfqkFDh7Mc7ONPQAhA4YylU1s529vVM1rsf67vGZH/2GGm5uO8QzPeVyaVMobCQ7FTxl38QrKRlng==",
"dev": true,
"requires": {
- "acorn": "^5.0.3",
- "css": "^2.2.1",
- "normalize-path": "^2.1.1",
- "source-map": "^0.6.0",
- "through2": "^2.0.3"
+ "@jest/console": "^24.7.1",
+ "@jest/types": "^24.8.0",
+ "@types/istanbul-lib-coverage": "^2.0.0"
+ }
+ },
+ "@jest/test-sequencer": {
+ "version": "24.8.0",
+ "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-24.8.0.tgz",
+ "integrity": "sha512-OzL/2yHyPdCHXEzhoBuq37CE99nkme15eHkAzXRVqthreWZamEMA0WoetwstsQBCXABhczpK03JNbc4L01vvLg==",
+ "dev": true,
+ "requires": {
+ "@jest/test-result": "^24.8.0",
+ "jest-haste-map": "^24.8.0",
+ "jest-runner": "^24.8.0",
+ "jest-runtime": "^24.8.0"
+ }
+ },
+ "@jest/transform": {
+ "version": "24.8.0",
+ "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-24.8.0.tgz",
+ "integrity": "sha512-xBMfFUP7TortCs0O+Xtez2W7Zu1PLH9bvJgtraN1CDST6LBM/eTOZ9SfwS/lvV8yOfcDpFmwf9bq5cYbXvqsvA==",
+ "dev": true,
+ "requires": {
+ "@babel/core": "^7.1.0",
+ "@jest/types": "^24.8.0",
+ "babel-plugin-istanbul": "^5.1.0",
+ "chalk": "^2.0.1",
+ "convert-source-map": "^1.4.0",
+ "fast-json-stable-stringify": "^2.0.0",
+ "graceful-fs": "^4.1.15",
+ "jest-haste-map": "^24.8.0",
+ "jest-regex-util": "^24.3.0",
+ "jest-util": "^24.8.0",
+ "micromatch": "^3.1.10",
+ "realpath-native": "^1.1.0",
+ "slash": "^2.0.0",
+ "source-map": "^0.6.1",
+ "write-file-atomic": "2.4.1"
},
"dependencies": {
+ "graceful-fs": {
+ "version": "4.1.15",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz",
+ "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==",
+ "dev": true
+ },
+ "slash": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz",
+ "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==",
+ "dev": true
+ },
"source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
@@ -887,16 +1013,37 @@
}
}
},
- "@gulp-sourcemaps/map-sources": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@gulp-sourcemaps/map-sources/-/map-sources-1.0.0.tgz",
- "integrity": "sha1-iQrnxdjId/bThIYCFazp1+yUW9o=",
+ "@jest/types": {
+ "version": "24.8.0",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.8.0.tgz",
+ "integrity": "sha512-g17UxVr2YfBtaMUxn9u/4+siG1ptg9IGYAYwvpwn61nBg779RXnjE/m7CxYcIzEt0AbHZZAHSEZNhkE2WxURVg==",
"dev": true,
"requires": {
- "normalize-path": "^2.0.1",
- "through2": "^2.0.3"
+ "@types/istanbul-lib-coverage": "^2.0.0",
+ "@types/istanbul-reports": "^1.1.1",
+ "@types/yargs": "^12.0.9"
+ }
+ },
+ "@mrmlnc/readdir-enhanced": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz",
+ "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==",
+ "requires": {
+ "call-me-maybe": "^1.0.1",
+ "glob-to-regexp": "^0.3.0"
}
},
+ "@nodelib/fs.stat": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz",
+ "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw=="
+ },
+ "@purtuga/esm-webpack-plugin": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@purtuga/esm-webpack-plugin/-/esm-webpack-plugin-1.0.1.tgz",
+ "integrity": "sha512-0fXoDHrV4WxuXzsCvD+DW/xOCSmN3khEJ1vsiDARofmgYRcqY3Sc7zfGoSFVIHcVKzcnZEFLPeybNG1GXke5GA==",
+ "dev": true
+ },
"@sindresorhus/df": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/@sindresorhus/df/-/df-2.1.0.tgz",
@@ -936,67 +1083,46 @@
}
}
},
- "@sinonjs/commons": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.3.0.tgz",
- "integrity": "sha512-j4ZwhaHmwsCb4DlDOIWnI5YyKDNMoNThsmwEpfHx6a1EpsGZ9qYLxP++LMlmBRjtGptGHFsGItJ768snllFWpA==",
+ "@types/babel__core": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.1.tgz",
+ "integrity": "sha512-+hjBtgcFPYyCTo0A15+nxrCVJL7aC6Acg87TXd5OW3QhHswdrOLoles+ldL2Uk8q++7yIfl4tURtztccdeeyOw==",
"dev": true,
"requires": {
- "type-detect": "4.0.8"
+ "@babel/parser": "^7.1.0",
+ "@babel/types": "^7.0.0",
+ "@types/babel__generator": "*",
+ "@types/babel__template": "*",
+ "@types/babel__traverse": "*"
}
},
- "@sinonjs/formatio": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@sinonjs/formatio/-/formatio-3.0.0.tgz",
- "integrity": "sha512-vdjoYLDptCgvtJs57ULshak3iJe4NW3sJ3g36xVDGff5AE8P30S6A093EIEPjdi2noGhfuNOEkbxt3J3awFW1w==",
+ "@types/babel__generator": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.0.2.tgz",
+ "integrity": "sha512-NHcOfab3Zw4q5sEE2COkpfXjoE7o+PmqD9DQW4koUT3roNxwziUdXGnRndMat/LJNUtePwn1TlP4do3uoe3KZQ==",
"dev": true,
"requires": {
- "@sinonjs/samsam": "2.1.0"
- },
- "dependencies": {
- "@sinonjs/samsam": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-2.1.0.tgz",
- "integrity": "sha512-5x2kFgJYupaF1ns/RmharQ90lQkd2ELS8A9X0ymkAAdemYHGtI2KiUHG8nX2WU0T1qgnOU5YMqnBM2V7NUanNw==",
- "dev": true,
- "requires": {
- "array-from": "^2.1.1"
- }
- }
+ "@babel/types": "^7.0.0"
}
},
- "@sinonjs/samsam": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-2.1.2.tgz",
- "integrity": "sha512-ZwTHAlC9akprWDinwEPD4kOuwaYZlyMwVJIANsKNC3QVp0AHB04m7RnB4eqeWfgmxw8MGTzS9uMaw93Z3QcZbw==",
- "dev": true
- },
- "@sinonjs/text-encoding": {
- "version": "0.7.1",
- "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.1.tgz",
- "integrity": "sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ==",
- "dev": true
- },
- "@types/acorn": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/@types/acorn/-/acorn-4.0.4.tgz",
- "integrity": "sha512-/qLQgGw/hzbpWpEiSrnNDqiVtw7J/wBEfWMWN8HPhOHUMINkL7ggOtj8VSyjfzXlNkoUbStomzKsLEATXcMSzg==",
+ "@types/babel__template": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.0.2.tgz",
+ "integrity": "sha512-/K6zCpeW7Imzgab2bLkLEbz0+1JlFSrUMdw7KoIIu+IUdu51GWaBZpd3y1VXGVXzynvGa4DaIaxNZHiON3GXUg==",
"dev": true,
"requires": {
- "@types/estree": "*"
+ "@babel/parser": "^7.1.0",
+ "@babel/types": "^7.0.0"
}
},
- "@types/cookiejar": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/@types/cookiejar/-/cookiejar-2.1.0.tgz",
- "integrity": "sha512-EIjmpvnHj+T4nMcKwHwxZKUfDmphIKJc2qnEMhSoOvr1lYEQpuRKRz8orWr//krYIIArS/KGGLfL2YGVUYXmIA==",
- "dev": true
- },
- "@types/estree": {
- "version": "0.0.39",
- "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz",
- "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==",
- "dev": true
+ "@types/babel__traverse": {
+ "version": "7.0.6",
+ "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.0.6.tgz",
+ "integrity": "sha512-XYVgHF2sQ0YblLRMLNPB3CkFMewzFmlDsH/TneZFHUXDlABQgh88uOxuez7ZcXxayLFrqLwtDH1t+FmlFwNZxw==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.3.0"
+ }
},
"@types/events": {
"version": "3.0.0",
@@ -1039,22 +1165,62 @@
"integrity": "sha512-pGF/zvYOACZ/gLGWdQH8zSwteQS1epp68yRcVLJMgUck/MjEn/FBYmPub9pXT8C1e4a8YZfHo1CKyV8q1vKUnQ==",
"dev": true
},
- "@types/lodash": {
- "version": "4.14.123",
- "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.123.tgz",
- "integrity": "sha512-pQvPkc4Nltyx7G1Ww45OjVqUsJP4UsZm+GWJpigXgkikZqJgRm4c48g027o6tdgubWHwFRF15iFd+Y4Pmqv6+Q==",
- "dev": true
- },
- "@types/marked": {
- "version": "0.4.2",
- "resolved": "https://registry.npmjs.org/@types/marked/-/marked-0.4.2.tgz",
- "integrity": "sha512-cDB930/7MbzaGF6U3IwSQp6XBru8xWajF5PV2YZZeV8DyiliTuld11afVztGI9+yJZ29il5E+NpGA6ooV/Cjkg==",
+ "@types/istanbul-lib-coverage": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz",
+ "integrity": "sha512-hRJD2ahnnpLgsj6KWMYSrmXkM3rm2Dl1qkx6IOFD5FnuNPXJIG5L0dhgKXCYTRMGzU4n0wImQ/xfmRc4POUFlg==",
+ "dev": true
+ },
+ "@types/istanbul-lib-report": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-1.1.1.tgz",
+ "integrity": "sha512-3BUTyMzbZa2DtDI2BkERNC6jJw2Mr2Y0oGI7mRxYNBPxppbtEK1F66u3bKwU2g+wxwWI7PAoRpJnOY1grJqzHg==",
+ "dev": true,
+ "requires": {
+ "@types/istanbul-lib-coverage": "*"
+ }
+ },
+ "@types/istanbul-reports": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.1.tgz",
+ "integrity": "sha512-UpYjBi8xefVChsCoBpKShdxTllC9pwISirfoZsUa2AAdQg/Jd2KQGtSbw+ya7GPo7x/wAPlH6JBhKhAsXUEZNA==",
+ "dev": true,
+ "requires": {
+ "@types/istanbul-lib-coverage": "*",
+ "@types/istanbul-lib-report": "*"
+ }
+ },
+ "@types/jest": {
+ "version": "24.0.12",
+ "resolved": "https://registry.npmjs.org/@types/jest/-/jest-24.0.12.tgz",
+ "integrity": "sha512-60sjqMhat7i7XntZckcSGV8iREJyXXI6yFHZkSZvCPUeOnEJ/VP1rU/WpEWQ56mvoh8NhC+sfKAuJRTyGtCOow==",
+ "dev": true,
+ "requires": {
+ "@types/jest-diff": "*"
+ }
+ },
+ "@types/jest-diff": {
+ "version": "20.0.1",
+ "resolved": "https://registry.npmjs.org/@types/jest-diff/-/jest-diff-20.0.1.tgz",
+ "integrity": "sha512-yALhelO3i0hqZwhjtcr6dYyaLoCHbAMshwtj6cGxTvHZAKXHsYGdff6E8EPw3xLKY0ELUTQ69Q1rQiJENnccMA==",
+ "dev": true
+ },
+ "@types/lodash": {
+ "version": "4.14.123",
+ "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.123.tgz",
+ "integrity": "sha512-pQvPkc4Nltyx7G1Ww45OjVqUsJP4UsZm+GWJpigXgkikZqJgRm4c48g027o6tdgubWHwFRF15iFd+Y4Pmqv6+Q==",
+ "dev": true
+ },
+ "@types/marked": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/@types/marked/-/marked-0.4.2.tgz",
+ "integrity": "sha512-cDB930/7MbzaGF6U3IwSQp6XBru8xWajF5PV2YZZeV8DyiliTuld11afVztGI9+yJZ29il5E+NpGA6ooV/Cjkg==",
"dev": true
},
"@types/mime": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/@types/mime/-/mime-2.0.0.tgz",
- "integrity": "sha512-A2TAGbTFdBw9azHbpVd+/FkdW2T6msN1uct1O9bH3vTerEHKZhTXJUQXy+hNq1B0RagfU8U+KBdqiZpxjhOUQA==",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@types/mime/-/mime-2.0.1.tgz",
+ "integrity": "sha512-FwI9gX75FgVBJ7ywgnq/P7tw+/o1GUbtP0KzbtusLigAOgIgNISRK0ZPl4qertvXSIE8YbsVJueQ90cDt9YYyw==",
"dev": true
},
"@types/minimatch": {
@@ -1063,16 +1229,10 @@
"integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==",
"dev": true
},
- "@types/mocha": {
- "version": "2.2.48",
- "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-2.2.48.tgz",
- "integrity": "sha512-nlK/iyETgafGli8Zh9zJVCTicvU3iajSkRwOh3Hhiva598CMqNJ4NcVCGMTGKpGpTYj/9R8RLzS9NAykSSCqGw==",
- "dev": true
- },
"@types/node": {
- "version": "10.12.20",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.20.tgz",
- "integrity": "sha512-9spv6SklidqxevvZyOUGjZVz4QRXGu2dNaLyXIFzFYZW0AGDykzPRIUFJXTlQXyfzAucddwTcGtJNim8zqSOPA==",
+ "version": "12.0.0",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-12.0.0.tgz",
+ "integrity": "sha512-Jrb/x3HT4PTJp6a4avhmJCDEVrPdqLfl3e8GGMbpkGGdwAV5UGlIs4vVEfsHHfylZVOKZWpOqmqFH8CbfOZ6kg==",
"dev": true
},
"@types/shelljs": {
@@ -1085,32 +1245,225 @@
"@types/node": "*"
}
},
- "@types/sinon": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-5.0.1.tgz",
- "integrity": "sha512-yxzBCIjE3lp9lYjfBbIK/LRCoXgCLLbIIBIje7eNCcUIIR2CZZtyX5uto2hVoMSMqLrsRrT6mwwUEd0yFgOwpA==",
+ "@types/spark-md5": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/@types/spark-md5/-/spark-md5-3.0.1.tgz",
+ "integrity": "sha512-sjiWYRmuuFZMo/DdysQe/yX6x40Q0WZXsNgvbUIg7gUaQYNoXx4CqWq27rDikQyc+0JKkqsoNiIBAA0GUxbUXw==",
"dev": true
},
- "@types/spark-md5": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@types/spark-md5/-/spark-md5-3.0.0.tgz",
- "integrity": "sha512-cxuDu5vabKALmIoFCMVDdWp9nC+IaG66+hdC3rSjw8zCSct3AnJXvMH/ZA0hahyDXcU1WA777ikMBd3LXc528g==",
+ "@types/stack-utils": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz",
+ "integrity": "sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==",
"dev": true
},
- "@types/superagent": {
- "version": "3.8.3",
- "resolved": "https://registry.npmjs.org/@types/superagent/-/superagent-3.8.3.tgz",
- "integrity": "sha512-Mge1Msz48U09kJYYNZWmCsTCI8tmTAkZhsKx2Neapd9PqzEm7caM4wQ3uiGpAvT6vTIzaq1apOoa/TipMeZkow==",
+ "@types/uuid": {
+ "version": "3.4.4",
+ "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-3.4.4.tgz",
+ "integrity": "sha512-tPIgT0GUmdJQNSHxp0X2jnpQfBSTfGxUMc/2CXBU2mnyTFVYVa2ojpoQ74w0U2yn2vw3jnC640+77lkFFpdVDw==",
"dev": true,
"requires": {
- "@types/cookiejar": "*",
"@types/node": "*"
}
},
+ "@types/yargs": {
+ "version": "12.0.12",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-12.0.12.tgz",
+ "integrity": "sha512-SOhuU4wNBxhhTHxYaiG5NY4HBhDIDnJF60GU+2LqHAdKKer86//e4yg69aENCtQ04n0ovz+tq2YPME5t5yp4pw==",
+ "dev": true
+ },
+ "@webassemblyjs/ast": {
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.8.5.tgz",
+ "integrity": "sha512-aJMfngIZ65+t71C3y2nBBg5FFG0Okt9m0XEgWZ7Ywgn1oMAT8cNwx00Uv1cQyHtidq0Xn94R4TAywO+LCQ+ZAQ==",
+ "dev": true,
+ "requires": {
+ "@webassemblyjs/helper-module-context": "1.8.5",
+ "@webassemblyjs/helper-wasm-bytecode": "1.8.5",
+ "@webassemblyjs/wast-parser": "1.8.5"
+ }
+ },
+ "@webassemblyjs/floating-point-hex-parser": {
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.8.5.tgz",
+ "integrity": "sha512-9p+79WHru1oqBh9ewP9zW95E3XAo+90oth7S5Re3eQnECGq59ly1Ri5tsIipKGpiStHsUYmY3zMLqtk3gTcOtQ==",
+ "dev": true
+ },
+ "@webassemblyjs/helper-api-error": {
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.8.5.tgz",
+ "integrity": "sha512-Za/tnzsvnqdaSPOUXHyKJ2XI7PDX64kWtURyGiJJZKVEdFOsdKUCPTNEVFZq3zJ2R0G5wc2PZ5gvdTRFgm81zA==",
+ "dev": true
+ },
+ "@webassemblyjs/helper-buffer": {
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.8.5.tgz",
+ "integrity": "sha512-Ri2R8nOS0U6G49Q86goFIPNgjyl6+oE1abW1pS84BuhP1Qcr5JqMwRFT3Ah3ADDDYGEgGs1iyb1DGX+kAi/c/Q==",
+ "dev": true
+ },
+ "@webassemblyjs/helper-code-frame": {
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.8.5.tgz",
+ "integrity": "sha512-VQAadSubZIhNpH46IR3yWO4kZZjMxN1opDrzePLdVKAZ+DFjkGD/rf4v1jap744uPVU6yjL/smZbRIIJTOUnKQ==",
+ "dev": true,
+ "requires": {
+ "@webassemblyjs/wast-printer": "1.8.5"
+ }
+ },
+ "@webassemblyjs/helper-fsm": {
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.8.5.tgz",
+ "integrity": "sha512-kRuX/saORcg8se/ft6Q2UbRpZwP4y7YrWsLXPbbmtepKr22i8Z4O3V5QE9DbZK908dh5Xya4Un57SDIKwB9eow==",
+ "dev": true
+ },
+ "@webassemblyjs/helper-module-context": {
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.8.5.tgz",
+ "integrity": "sha512-/O1B236mN7UNEU4t9X7Pj38i4VoU8CcMHyy3l2cV/kIF4U5KoHXDVqcDuOs1ltkac90IM4vZdHc52t1x8Yfs3g==",
+ "dev": true,
+ "requires": {
+ "@webassemblyjs/ast": "1.8.5",
+ "mamacro": "^0.0.3"
+ }
+ },
+ "@webassemblyjs/helper-wasm-bytecode": {
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.8.5.tgz",
+ "integrity": "sha512-Cu4YMYG3Ddl72CbmpjU/wbP6SACcOPVbHN1dI4VJNJVgFwaKf1ppeFJrwydOG3NDHxVGuCfPlLZNyEdIYlQ6QQ==",
+ "dev": true
+ },
+ "@webassemblyjs/helper-wasm-section": {
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.8.5.tgz",
+ "integrity": "sha512-VV083zwR+VTrIWWtgIUpqfvVdK4ff38loRmrdDBgBT8ADXYsEZ5mPQ4Nde90N3UYatHdYoDIFb7oHzMncI02tA==",
+ "dev": true,
+ "requires": {
+ "@webassemblyjs/ast": "1.8.5",
+ "@webassemblyjs/helper-buffer": "1.8.5",
+ "@webassemblyjs/helper-wasm-bytecode": "1.8.5",
+ "@webassemblyjs/wasm-gen": "1.8.5"
+ }
+ },
+ "@webassemblyjs/ieee754": {
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.8.5.tgz",
+ "integrity": "sha512-aaCvQYrvKbY/n6wKHb/ylAJr27GglahUO89CcGXMItrOBqRarUMxWLJgxm9PJNuKULwN5n1csT9bYoMeZOGF3g==",
+ "dev": true,
+ "requires": {
+ "@xtuc/ieee754": "^1.2.0"
+ }
+ },
+ "@webassemblyjs/leb128": {
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.8.5.tgz",
+ "integrity": "sha512-plYUuUwleLIziknvlP8VpTgO4kqNaH57Y3JnNa6DLpu/sGcP6hbVdfdX5aHAV716pQBKrfuU26BJK29qY37J7A==",
+ "dev": true,
+ "requires": {
+ "@xtuc/long": "4.2.2"
+ }
+ },
+ "@webassemblyjs/utf8": {
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.8.5.tgz",
+ "integrity": "sha512-U7zgftmQriw37tfD934UNInokz6yTmn29inT2cAetAsaU9YeVCveWEwhKL1Mg4yS7q//NGdzy79nlXh3bT8Kjw==",
+ "dev": true
+ },
+ "@webassemblyjs/wasm-edit": {
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.8.5.tgz",
+ "integrity": "sha512-A41EMy8MWw5yvqj7MQzkDjU29K7UJq1VrX2vWLzfpRHt3ISftOXqrtojn7nlPsZ9Ijhp5NwuODuycSvfAO/26Q==",
+ "dev": true,
+ "requires": {
+ "@webassemblyjs/ast": "1.8.5",
+ "@webassemblyjs/helper-buffer": "1.8.5",
+ "@webassemblyjs/helper-wasm-bytecode": "1.8.5",
+ "@webassemblyjs/helper-wasm-section": "1.8.5",
+ "@webassemblyjs/wasm-gen": "1.8.5",
+ "@webassemblyjs/wasm-opt": "1.8.5",
+ "@webassemblyjs/wasm-parser": "1.8.5",
+ "@webassemblyjs/wast-printer": "1.8.5"
+ }
+ },
+ "@webassemblyjs/wasm-gen": {
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.8.5.tgz",
+ "integrity": "sha512-BCZBT0LURC0CXDzj5FXSc2FPTsxwp3nWcqXQdOZE4U7h7i8FqtFK5Egia6f9raQLpEKT1VL7zr4r3+QX6zArWg==",
+ "dev": true,
+ "requires": {
+ "@webassemblyjs/ast": "1.8.5",
+ "@webassemblyjs/helper-wasm-bytecode": "1.8.5",
+ "@webassemblyjs/ieee754": "1.8.5",
+ "@webassemblyjs/leb128": "1.8.5",
+ "@webassemblyjs/utf8": "1.8.5"
+ }
+ },
+ "@webassemblyjs/wasm-opt": {
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.8.5.tgz",
+ "integrity": "sha512-HKo2mO/Uh9A6ojzu7cjslGaHaUU14LdLbGEKqTR7PBKwT6LdPtLLh9fPY33rmr5wcOMrsWDbbdCHq4hQUdd37Q==",
+ "dev": true,
+ "requires": {
+ "@webassemblyjs/ast": "1.8.5",
+ "@webassemblyjs/helper-buffer": "1.8.5",
+ "@webassemblyjs/wasm-gen": "1.8.5",
+ "@webassemblyjs/wasm-parser": "1.8.5"
+ }
+ },
+ "@webassemblyjs/wasm-parser": {
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.8.5.tgz",
+ "integrity": "sha512-pi0SYE9T6tfcMkthwcgCpL0cM9nRYr6/6fjgDtL6q/ZqKHdMWvxitRi5JcZ7RI4SNJJYnYNaWy5UUrHQy998lw==",
+ "dev": true,
+ "requires": {
+ "@webassemblyjs/ast": "1.8.5",
+ "@webassemblyjs/helper-api-error": "1.8.5",
+ "@webassemblyjs/helper-wasm-bytecode": "1.8.5",
+ "@webassemblyjs/ieee754": "1.8.5",
+ "@webassemblyjs/leb128": "1.8.5",
+ "@webassemblyjs/utf8": "1.8.5"
+ }
+ },
+ "@webassemblyjs/wast-parser": {
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.8.5.tgz",
+ "integrity": "sha512-daXC1FyKWHF1i11obK086QRlsMsY4+tIOKgBqI1lxAnkp9xe9YMcgOxm9kLe+ttjs5aWV2KKE1TWJCN57/Btsg==",
+ "dev": true,
+ "requires": {
+ "@webassemblyjs/ast": "1.8.5",
+ "@webassemblyjs/floating-point-hex-parser": "1.8.5",
+ "@webassemblyjs/helper-api-error": "1.8.5",
+ "@webassemblyjs/helper-code-frame": "1.8.5",
+ "@webassemblyjs/helper-fsm": "1.8.5",
+ "@xtuc/long": "4.2.2"
+ }
+ },
+ "@webassemblyjs/wast-printer": {
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.8.5.tgz",
+ "integrity": "sha512-w0U0pD4EhlnvRyeJzBqaVSJAo9w/ce7/WPogeXLzGkO6hzhr4GnQIZ4W4uUt5b9ooAaXPtnXlj0gzsXEOUNYMg==",
+ "dev": true,
+ "requires": {
+ "@webassemblyjs/ast": "1.8.5",
+ "@webassemblyjs/wast-parser": "1.8.5",
+ "@xtuc/long": "4.2.2"
+ }
+ },
+ "@xtuc/ieee754": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz",
+ "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==",
+ "dev": true
+ },
+ "@xtuc/long": {
+ "version": "4.2.2",
+ "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz",
+ "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==",
+ "dev": true
+ },
"JSONStream": {
- "version": "1.3.3",
- "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.3.tgz",
- "integrity": "sha512-3Sp6WZZ/lXl+nTDoGpGWHEpTnnC6X5fnkolYZR6nwIfzbxxvA8utPWe1gCt7i0m9uVGsSz2IS8K8mJ7HmlduMg==",
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz",
+ "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==",
"dev": true,
"requires": {
"jsonparse": "^1.2.0",
@@ -1122,23 +1475,6 @@
"resolved": "https://registry.npmjs.org/abab/-/abab-2.0.0.tgz",
"integrity": "sha512-sY5AXXVZv4Y1VACTtR11UJCPHHudgY5i26Qj5TypE6DKlIApbwb5uqhXcJ5UUGbvZNRh7EeIoW+LrJumBsKp7w=="
},
- "abstract-leveldown": {
- "version": "0.12.4",
- "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-0.12.4.tgz",
- "integrity": "sha1-KeGOYy5g5OIh1YECR4UqY9ey5BA=",
- "dev": true,
- "requires": {
- "xtend": "~3.0.0"
- },
- "dependencies": {
- "xtend": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/xtend/-/xtend-3.0.0.tgz",
- "integrity": "sha1-XM50B7r2Qsunvs2laBEcST9ZZlo=",
- "dev": true
- }
- }
- },
"accepts": {
"version": "1.3.5",
"resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz",
@@ -1150,59 +1486,31 @@
}
},
"acorn": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.1.tgz",
- "integrity": "sha512-d+nbxBUGKg7Arpsvbnlq61mc12ek3EY8EQldM3GPAhWJ1UVxC6TDGbIvUMNU6obBX3i1+ptCIzV4vq0gFPEGVQ==",
+ "version": "6.1.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.1.1.tgz",
+ "integrity": "sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA==",
"dev": true
},
"acorn-dynamic-import": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-3.0.0.tgz",
- "integrity": "sha512-zVWV8Z8lislJoOKKqdNMOB+s6+XV5WERty8MnKBeFgwA+19XJjJHs2RP5dzM57FftIs+jQnRToLiWazKr6sSWg==",
- "dev": true,
- "requires": {
- "acorn": "^5.0.0"
- }
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz",
+ "integrity": "sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw==",
+ "dev": true
},
"acorn-globals": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.0.tgz",
- "integrity": "sha512-hMtHj3s5RnuhvHPowpBYvJVj3rAar82JiDQHvGs1zO0l10ocX/xEdBShNHTJaboucJUsScghp74pH3s7EnHHQw==",
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.1.tgz",
+ "integrity": "sha512-gJSiKY8dBIjV/0jagZIFBdVMtfQyA5QHCvAT48H2q8REQoW8Fs5AOjqBql1LgSXgrMWdevcE+8cdZ33NtVbIBA==",
"dev": true,
"requires": {
"acorn": "^6.0.1",
"acorn-walk": "^6.0.1"
- },
- "dependencies": {
- "acorn": {
- "version": "6.0.4",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.0.4.tgz",
- "integrity": "sha512-VY4i5EKSKkofY2I+6QLTbTTN/UvEQPCo6eiwzzSaSWfpaDhOmStMCMod6wmuPciNq+XS0faCglFu2lHZpdHUtg==",
- "dev": true
- }
- }
- },
- "acorn-node": {
- "version": "1.5.2",
- "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.5.2.tgz",
- "integrity": "sha512-krFKvw/d1F17AN3XZbybIUzEY4YEPNiGo05AfP3dBlfVKrMHETKpgjpuZkSF8qDNt9UkQcqj7am8yJLseklCMg==",
- "dev": true,
- "requires": {
- "acorn": "^5.7.1",
- "acorn-dynamic-import": "^3.0.0",
- "xtend": "^4.0.1"
}
},
"acorn-walk": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.1.0.tgz",
- "integrity": "sha512-ugTb7Lq7u4GfWSqqpwE0bGyoBZNMTok/zDBXxfEG0QM50jNlGhIWjRC1pPN7bvV1anhF+bs+/gNcRw+o55Evbg==",
- "dev": true
- },
- "after": {
- "version": "0.8.2",
- "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz",
- "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=",
+ "version": "6.1.1",
+ "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.1.1.tgz",
+ "integrity": "sha512-OtUw6JUTgxA2QoqqmrmQ7F2NYqiBPi/L2jqHyFtllhOUvXYQXf0Z1CYUinIfyT4bTCGmrA7gX9FvHA81uzCoVw==",
"dev": true
},
"agent-base": {
@@ -1215,9 +1523,9 @@
}
},
"ajv": {
- "version": "6.5.5",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.5.tgz",
- "integrity": "sha512-7q7gtRQDJSyuEHjuVgHoUa2VuemFiCMrfQc9Tc08XTAc4Zj/5U1buQJ0HU6i7fKjXU09SVgSmxa4sLvuvS8Iyg==",
+ "version": "6.10.0",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz",
+ "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==",
"dev": true,
"requires": {
"fast-deep-equal": "^2.0.1",
@@ -1226,41 +1534,25 @@
"uri-js": "^4.2.2"
}
},
- "align-text": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz",
- "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2",
- "longest": "^1.0.1",
- "repeat-string": "^1.5.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "amdefine": {
+ "ajv-errors": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz",
- "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=",
+ "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz",
+ "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==",
+ "dev": true
+ },
+ "ajv-keywords": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.0.tgz",
+ "integrity": "sha512-aUjdRFISbuFOl0EIZc+9e4FfZp0bDZgAdOOf30bJmw8VM9v84SHyVyxDfbWxpGYbdZD/9XoKxfHVNmxPkhwyGw==",
"dev": true
},
"ansi-align": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-1.1.0.tgz",
- "integrity": "sha1-LwwWWIKXOa3V67FeawxuNCPwFro=",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz",
+ "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=",
"dev": true,
"requires": {
- "string-width": "^1.0.1"
+ "string-width": "^2.0.0"
}
},
"ansi-colors": {
@@ -1272,14 +1564,11 @@
"ansi-wrap": "^0.1.0"
}
},
- "ansi-cyan": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/ansi-cyan/-/ansi-cyan-0.1.1.tgz",
- "integrity": "sha1-U4rlKK+JgvKK4w2G8vF0VtJgmHM=",
- "dev": true,
- "requires": {
- "ansi-wrap": "0.1.0"
- }
+ "ansi-escapes": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz",
+ "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==",
+ "dev": true
},
"ansi-gray": {
"version": "0.1.1",
@@ -1290,26 +1579,15 @@
"ansi-wrap": "0.1.0"
}
},
- "ansi-red": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/ansi-red/-/ansi-red-0.1.1.tgz",
- "integrity": "sha1-jGOPnRCAgAo1PJwoyKgcpHBdlGw=",
- "dev": true,
- "requires": {
- "ansi-wrap": "0.1.0"
- }
- },
"ansi-regex": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
- "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
- "dev": true
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
},
"ansi-styles": {
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
"integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "dev": true,
"requires": {
"color-convert": "^1.9.0"
}
@@ -1345,26 +1623,41 @@
"buffer-equal": "^1.0.0"
}
},
+ "aproba": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
+ "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==",
+ "dev": true
+ },
"archy": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz",
"integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=",
"dev": true
},
+ "arg": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.0.tgz",
+ "integrity": "sha512-ZWc51jO3qegGkVh8Hwpv636EkbesNV5ZNQPCtRa+0qytRYPEs9IYT9qITY9buezqUH5uqyzlWLcufrzU2rffdg=="
+ },
"argparse": {
"version": "1.0.10",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
"integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
- "dev": true,
"requires": {
"sprintf-js": "~1.0.2"
}
},
+ "argv": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/argv/-/argv-0.0.2.tgz",
+ "integrity": "sha1-7L0W+JSbFXGDcRsb2jNPN4QBhas=",
+ "dev": true
+ },
"arr-diff": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
- "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
- "dev": true
+ "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA="
},
"arr-filter": {
"version": "1.1.2",
@@ -1378,8 +1671,7 @@
"arr-flatten": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
- "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
- "dev": true
+ "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg=="
},
"arr-map": {
"version": "2.0.2",
@@ -1393,8 +1685,7 @@
"arr-union": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
- "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
- "dev": true
+ "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ="
},
"array-each": {
"version": "1.0.1",
@@ -1408,12 +1699,6 @@
"integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=",
"dev": true
},
- "array-filter": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz",
- "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw=",
- "dev": true
- },
"array-find-index": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz",
@@ -1426,12 +1711,6 @@
"integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=",
"dev": true
},
- "array-from": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/array-from/-/array-from-2.1.1.tgz",
- "integrity": "sha1-z+nYwmYoudxa7MYqn12PHzUsEZU=",
- "dev": true
- },
"array-ify": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz",
@@ -1473,18 +1752,6 @@
}
}
},
- "array-map": {
- "version": "0.0.0",
- "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz",
- "integrity": "sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=",
- "dev": true
- },
- "array-reduce": {
- "version": "0.0.0",
- "resolved": "https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz",
- "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=",
- "dev": true
- },
"array-slice": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz",
@@ -1514,7 +1781,6 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
"integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
- "dev": true,
"requires": {
"array-uniq": "^1.0.1"
}
@@ -1522,32 +1788,26 @@
"array-uniq": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz",
- "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=",
- "dev": true
+ "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY="
},
"array-unique": {
"version": "0.3.2",
"resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
- "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
- "dev": true
- },
- "arraybuffer.slice": {
- "version": "0.0.7",
- "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz",
- "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==",
- "dev": true
+ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg="
},
"arrify": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
- "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=",
- "dev": true
+ "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0="
},
"asn1": {
- "version": "0.2.3",
- "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz",
- "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=",
- "dev": true
+ "version": "0.2.4",
+ "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
+ "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
+ "dev": true,
+ "requires": {
+ "safer-buffer": "~2.1.0"
+ }
},
"asn1.js": {
"version": "4.10.1",
@@ -1592,18 +1852,32 @@
"integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
"dev": true
},
+ "assertion-error": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz",
+ "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==",
+ "dev": true
+ },
"assign-symbols": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
- "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=",
- "dev": true
+ "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c="
},
- "async": {
+ "astral-regex": {
"version": "1.0.0",
- "resolved": "https://registry.npmjs.org/async/-/async-1.0.0.tgz",
- "integrity": "sha1-+PwEyjoTeErenhZBr5hXjPvWR6k=",
+ "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz",
+ "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==",
"dev": true
},
+ "async": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/async/-/async-2.6.2.tgz",
+ "integrity": "sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg==",
+ "dev": true,
+ "requires": {
+ "lodash": "^4.17.11"
+ }
+ },
"async-done": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/async-done/-/async-done-1.3.1.tgz",
@@ -1625,9 +1899,9 @@
}
},
"async-each": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz",
- "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=",
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz",
+ "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==",
"dev": true
},
"async-limiter": {
@@ -1648,18 +1922,18 @@
"asynckit": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
- "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
+ "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
+ "dev": true
},
"atob": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.1.tgz",
- "integrity": "sha1-ri1acpR38onWDdf5amMUoi3Wwio=",
- "dev": true
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
+ "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg=="
},
"aws-sdk": {
- "version": "2.291.0",
- "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.291.0.tgz",
- "integrity": "sha512-al/oJuKN2mokw4nafloptGrmdzm4UZ8AeLuM2bFtPmb0nvwajOr/vSa/XhQTw+T07Vm9T8iJyWyqygq74E/YMQ==",
+ "version": "2.451.0",
+ "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.451.0.tgz",
+ "integrity": "sha512-ruVK/fnUFHumSgcqVkJTHLS9eWXc8lf14ZW2G6RVR0baj2MMNDS5gxInuy8GM24Exe0GfnDFk6PnPiSuQs4AVQ==",
"dev": true,
"requires": {
"buffer": "4.9.1",
@@ -1669,20 +1943,8 @@
"querystring": "0.2.0",
"sax": "1.2.1",
"url": "0.10.3",
- "uuid": "3.1.0",
+ "uuid": "3.3.2",
"xml2js": "0.4.19"
- },
- "dependencies": {
- "url": {
- "version": "0.10.3",
- "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz",
- "integrity": "sha1-Ah5NnHcF8hu/N9A861h2dAJ3TGQ=",
- "dev": true,
- "requires": {
- "punycode": "1.3.2",
- "querystring": "0.2.0"
- }
- }
}
},
"aws-sign2": {
@@ -1692,56 +1954,137 @@
"dev": true
},
"aws4": {
- "version": "1.7.0",
- "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.7.0.tgz",
- "integrity": "sha512-32NDda82rhwD9/JBCCkB+MRYDp0oSvlo2IL6rQWA10PQi7tDUM3eqMSltXmY+Oyl/7N3P3qNtAlv7X0d9bI28w==",
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz",
+ "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==",
"dev": true
},
- "babel-code-frame": {
- "version": "6.26.0",
- "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
- "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
+ "axios": {
+ "version": "0.18.0",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-0.18.0.tgz",
+ "integrity": "sha1-MtU+SFHv3AoRmTts0AB4nXDAUQI=",
+ "requires": {
+ "follow-redirects": "^1.3.0",
+ "is-buffer": "^1.1.5"
+ }
+ },
+ "babel-jest": {
+ "version": "24.8.0",
+ "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-24.8.0.tgz",
+ "integrity": "sha512-+5/kaZt4I9efoXzPlZASyK/lN9qdRKmmUav9smVc0ruPQD7IsfucQ87gpOE8mn2jbDuS6M/YOW6n3v9ZoIfgnw==",
"dev": true,
"requires": {
- "chalk": "^1.1.3",
- "esutils": "^2.0.2",
- "js-tokens": "^3.0.2"
+ "@jest/transform": "^24.8.0",
+ "@jest/types": "^24.8.0",
+ "@types/babel__core": "^7.1.0",
+ "babel-plugin-istanbul": "^5.1.0",
+ "babel-preset-jest": "^24.6.0",
+ "chalk": "^2.4.2",
+ "slash": "^2.0.0"
},
"dependencies": {
- "ansi-styles": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
- "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
- "dev": true
- },
- "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.2",
- "has-ansi": "^2.0.0",
- "strip-ansi": "^3.0.0",
- "supports-color": "^2.0.0"
- }
- },
- "supports-color": {
+ "slash": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
- "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz",
+ "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==",
"dev": true
}
}
},
- "bach": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/bach/-/bach-1.2.0.tgz",
- "integrity": "sha1-Szzpa/JxNPeaG0FKUcFONMO9mIA=",
+ "babel-loader": {
+ "version": "8.0.5",
+ "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.0.5.tgz",
+ "integrity": "sha512-NTnHnVRd2JnRqPC0vW+iOQWU5pchDbYXsG2E6DMXEpMfUcQKclF9gmf3G3ZMhzG7IG9ji4coL0cm+FxeWxDpnw==",
"dev": true,
"requires": {
- "arr-filter": "^1.1.1",
+ "find-cache-dir": "^2.0.0",
+ "loader-utils": "^1.0.2",
+ "mkdirp": "^0.5.1",
+ "util.promisify": "^1.0.0"
+ }
+ },
+ "babel-plugin-istanbul": {
+ "version": "5.1.4",
+ "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-5.1.4.tgz",
+ "integrity": "sha512-dySz4VJMH+dpndj0wjJ8JPs/7i1TdSPb1nRrn56/92pKOF9VKC1FMFJmMXjzlGGusnCAqujP6PBCiKq0sVA+YQ==",
+ "dev": true,
+ "requires": {
+ "find-up": "^3.0.0",
+ "istanbul-lib-instrument": "^3.3.0",
+ "test-exclude": "^5.2.3"
+ },
+ "dependencies": {
+ "find-up": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
+ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
+ "dev": true,
+ "requires": {
+ "locate-path": "^3.0.0"
+ }
+ },
+ "locate-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
+ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
+ "dev": true,
+ "requires": {
+ "p-locate": "^3.0.0",
+ "path-exists": "^3.0.0"
+ }
+ },
+ "p-limit": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz",
+ "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==",
+ "dev": true,
+ "requires": {
+ "p-try": "^2.0.0"
+ }
+ },
+ "p-locate": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
+ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
+ "dev": true,
+ "requires": {
+ "p-limit": "^2.0.0"
+ }
+ },
+ "p-try": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
+ "dev": true
+ }
+ }
+ },
+ "babel-plugin-jest-hoist": {
+ "version": "24.6.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-24.6.0.tgz",
+ "integrity": "sha512-3pKNH6hMt9SbOv0F3WVmy5CWQ4uogS3k0GY5XLyQHJ9EGpAT9XWkFd2ZiXXtkwFHdAHa5j7w7kfxSP5lAIwu7w==",
+ "dev": true,
+ "requires": {
+ "@types/babel__traverse": "^7.0.6"
+ }
+ },
+ "babel-preset-jest": {
+ "version": "24.6.0",
+ "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-24.6.0.tgz",
+ "integrity": "sha512-pdZqLEdmy1ZK5kyRUfvBb2IfTPb2BUvIJczlPspS8fWmBQslNNDBqVfh7BW5leOVJMDZKzjD8XEyABTk6gQ5yw==",
+ "dev": true,
+ "requires": {
+ "@babel/plugin-syntax-object-rest-spread": "^7.0.0",
+ "babel-plugin-jest-hoist": "^24.6.0"
+ }
+ },
+ "bach": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/bach/-/bach-1.2.0.tgz",
+ "integrity": "sha1-Szzpa/JxNPeaG0FKUcFONMO9mIA=",
+ "dev": true,
+ "requires": {
+ "arr-filter": "^1.1.1",
"arr-flatten": "^1.0.1",
"arr-map": "^2.0.0",
"array-each": "^1.0.0",
@@ -1752,23 +2095,15 @@
"now-and-later": "^2.0.0"
}
},
- "backo2": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz",
- "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=",
- "dev": true
- },
"balanced-match": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
- "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
- "dev": true
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
},
"base": {
"version": "0.11.2",
"resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
"integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
- "dev": true,
"requires": {
"cache-base": "^1.0.1",
"class-utils": "^0.3.5",
@@ -1783,7 +2118,6 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
"integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
- "dev": true,
"requires": {
"is-descriptor": "^1.0.0"
}
@@ -1792,7 +2126,6 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
"integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
- "dev": true,
"requires": {
"kind-of": "^6.0.0"
}
@@ -1801,7 +2134,6 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
"integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
- "dev": true,
"requires": {
"kind-of": "^6.0.0"
}
@@ -1810,7 +2142,6 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
"integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
- "dev": true,
"requires": {
"is-accessor-descriptor": "^1.0.0",
"is-data-descriptor": "^1.0.0",
@@ -1819,75 +2150,49 @@
}
}
},
- "base64-arraybuffer": {
- "version": "0.1.5",
- "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz",
- "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=",
- "dev": true
- },
"base64-js": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz",
"integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==",
"dev": true
},
- "base64id": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz",
- "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=",
- "dev": true
- },
"bcrypt-pbkdf": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
"integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
"dev": true,
- "optional": true,
"requires": {
"tweetnacl": "^0.14.3"
}
},
- "better-assert": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz",
- "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=",
+ "bfj": {
+ "version": "6.1.1",
+ "resolved": "https://registry.npmjs.org/bfj/-/bfj-6.1.1.tgz",
+ "integrity": "sha512-+GUNvzHR4nRyGybQc2WpNJL4MJazMuvf92ueIyA0bIkPRwhhQu3IfZQ2PSoVPpCBJfmoSdOxu5rnotfFLlvYRQ==",
"dev": true,
"requires": {
- "callsite": "1.0.0"
+ "bluebird": "^3.5.1",
+ "check-types": "^7.3.0",
+ "hoopy": "^0.1.2",
+ "tryer": "^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==",
+ "big.js": {
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
+ "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==",
"dev": true
},
- "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.11.0",
- "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.11.0.tgz",
- "integrity": "sha1-RqoXUftqL5PuXmibsQh9SxTGwgU=",
+ "version": "1.13.1",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz",
+ "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==",
"dev": true
},
"binaryextensions": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/binaryextensions/-/binaryextensions-2.1.1.tgz",
- "integrity": "sha512-XBaoWE9RW8pPdPQNibZsW2zh8TW6gcarXp1FZPwT8Uop8ScSNldJEWf2k9l3HeTqdrEwsOsFcq74RiJECW34yA==",
- "dev": true
- },
- "blob": {
- "version": "0.0.5",
- "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz",
- "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==",
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/binaryextensions/-/binaryextensions-2.1.2.tgz",
+ "integrity": "sha512-xVNN69YGDghOqCCtA6FI7avYrr02mTJjOgB0/f1VPD3pJC8QEvjTKWc4epDx8AqxxA75NI0QpVM2gPJXUbE4Tg==",
"dev": true
},
"bluebird": {
@@ -1920,6 +2225,12 @@
"type-is": "~1.6.16"
},
"dependencies": {
+ "bytes": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
+ "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=",
+ "dev": true
+ },
"debug": {
"version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
@@ -1928,58 +2239,43 @@
"requires": {
"ms": "2.0.0"
}
- }
- }
- },
- "boxen": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/boxen/-/boxen-0.6.0.tgz",
- "integrity": "sha1-g2TUJIrDT/DvGy8r9JpsYM4NgbY=",
- "dev": true,
- "requires": {
- "ansi-align": "^1.1.0",
- "camelcase": "^2.1.0",
- "chalk": "^1.1.1",
- "cli-boxes": "^1.0.0",
- "filled-array": "^1.0.0",
- "object-assign": "^4.0.1",
- "repeating": "^2.0.0",
- "string-width": "^1.0.1",
- "widest-line": "^1.0.0"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
- "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
- "dev": true
},
- "chalk": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
- "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "iconv-lite": {
+ "version": "0.4.23",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz",
+ "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==",
"dev": true,
"requires": {
- "ansi-styles": "^2.2.1",
- "escape-string-regexp": "^1.0.2",
- "has-ansi": "^2.0.0",
- "strip-ansi": "^3.0.0",
- "supports-color": "^2.0.0"
+ "safer-buffer": ">= 2.1.2 < 3"
}
},
- "supports-color": {
+ "ms": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
- "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
"dev": true
}
}
},
+ "boxen": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz",
+ "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==",
+ "dev": true,
+ "requires": {
+ "ansi-align": "^2.0.0",
+ "camelcase": "^4.0.0",
+ "chalk": "^2.0.1",
+ "cli-boxes": "^1.0.0",
+ "string-width": "^2.0.0",
+ "term-size": "^1.2.0",
+ "widest-line": "^2.0.0"
+ }
+ },
"brace-expansion": {
"version": "1.1.11",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
- "dev": true,
"requires": {
"balanced-match": "^1.0.0",
"concat-map": "0.0.1"
@@ -1989,7 +2285,6 @@
"version": "2.3.2",
"resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
"integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
- "dev": true,
"requires": {
"arr-flatten": "^1.1.0",
"array-unique": "^0.3.2",
@@ -2007,7 +2302,6 @@
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
"integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
"requires": {
"is-extendable": "^0.1.0"
}
@@ -2020,20 +2314,6 @@
"integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=",
"dev": true
},
- "browser-pack": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/browser-pack/-/browser-pack-6.1.0.tgz",
- "integrity": "sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA==",
- "dev": true,
- "requires": {
- "JSONStream": "^1.0.3",
- "combine-source-map": "~0.8.0",
- "defined": "^1.0.0",
- "safe-buffer": "^5.1.1",
- "through2": "^2.0.0",
- "umd": "^3.0.0"
- }
- },
"browser-process-hrtime": {
"version": "0.1.3",
"resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-0.1.3.tgz",
@@ -2057,98 +2337,6 @@
}
}
},
- "browser-stdout": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz",
- "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==",
- "dev": true
- },
- "browserify": {
- "version": "14.5.0",
- "resolved": "https://registry.npmjs.org/browserify/-/browserify-14.5.0.tgz",
- "integrity": "sha512-gKfOsNQv/toWz+60nSPfYzuwSEdzvV2WdxrVPUbPD/qui44rAkB3t3muNtmmGYHqrG56FGwX9SUEQmzNLAeS7g==",
- "dev": true,
- "requires": {
- "JSONStream": "^1.0.3",
- "assert": "^1.4.0",
- "browser-pack": "^6.0.1",
- "browser-resolve": "^1.11.0",
- "browserify-zlib": "~0.2.0",
- "buffer": "^5.0.2",
- "cached-path-relative": "^1.0.0",
- "concat-stream": "~1.5.1",
- "console-browserify": "^1.1.0",
- "constants-browserify": "~1.0.0",
- "crypto-browserify": "^3.0.0",
- "defined": "^1.0.0",
- "deps-sort": "^2.0.0",
- "domain-browser": "~1.1.0",
- "duplexer2": "~0.1.2",
- "events": "~1.1.0",
- "glob": "^7.1.0",
- "has": "^1.0.0",
- "htmlescape": "^1.1.0",
- "https-browserify": "^1.0.0",
- "inherits": "~2.0.1",
- "insert-module-globals": "^7.0.0",
- "labeled-stream-splicer": "^2.0.0",
- "module-deps": "^4.0.8",
- "os-browserify": "~0.3.0",
- "parents": "^1.0.1",
- "path-browserify": "~0.0.0",
- "process": "~0.11.0",
- "punycode": "^1.3.2",
- "querystring-es3": "~0.2.0",
- "read-only-stream": "^2.0.0",
- "readable-stream": "^2.0.2",
- "resolve": "^1.1.4",
- "shasum": "^1.0.0",
- "shell-quote": "^1.6.1",
- "stream-browserify": "^2.0.0",
- "stream-http": "^2.0.0",
- "string_decoder": "~1.0.0",
- "subarg": "^1.0.0",
- "syntax-error": "^1.1.1",
- "through2": "^2.0.0",
- "timers-browserify": "^1.0.1",
- "tty-browserify": "~0.0.0",
- "url": "~0.11.0",
- "util": "~0.10.1",
- "vm-browserify": "~0.0.1",
- "xtend": "^4.0.0"
- },
- "dependencies": {
- "buffer": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.1.0.tgz",
- "integrity": "sha512-YkIRgwsZwJWTnyQrsBTWefizHh+8GYj3kbL1BTiAQ/9pwpino0G7B2gp5tx/FUBqUlvtxV85KNR3mwfAtv15Yw==",
- "dev": true,
- "requires": {
- "base64-js": "^1.0.2",
- "ieee754": "^1.1.4"
- }
- },
- "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.0"
- }
- },
- "url": {
- "version": "0.11.0",
- "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"
- }
- }
- }
- },
"browserify-aes": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz",
@@ -2186,17 +2374,6 @@
"safe-buffer": "^5.1.2"
}
},
- "browserify-fs": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/browserify-fs/-/browserify-fs-1.0.0.tgz",
- "integrity": "sha1-8HWqinKdTRcW0GZiDjhvzBMRqW8=",
- "dev": true,
- "requires": {
- "level-filesystem": "^1.0.1",
- "level-js": "^2.1.3",
- "levelup": "^0.18.2"
- }
- },
"browserify-rsa": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz",
@@ -2232,33 +2409,32 @@
}
},
"browserslist": {
- "version": "4.4.2",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.4.2.tgz",
- "integrity": "sha512-ISS/AIAiHERJ3d45Fz0AVYKkgcy+F/eJHzKEvv1j0wwKGKD9T3BrwKr/5g45L+Y4XIK5PlTqefHciRFcfE1Jxg==",
+ "version": "4.5.6",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.5.6.tgz",
+ "integrity": "sha512-o/hPOtbU9oX507lIqon+UvPYqpx3mHc8cV3QemSBTXwkG8gSQSK6UKvXcE/DcleU3+A59XTUHyCvZ5qGy8xVAg==",
"dev": true,
"requires": {
- "caniuse-lite": "^1.0.30000939",
- "electron-to-chromium": "^1.3.113",
- "node-releases": "^1.1.8"
+ "caniuse-lite": "^1.0.30000963",
+ "electron-to-chromium": "^1.3.127",
+ "node-releases": "^1.1.17"
}
},
- "browserstack": {
- "version": "1.5.2",
- "resolved": "https://registry.npmjs.org/browserstack/-/browserstack-1.5.2.tgz",
- "integrity": "sha512-+6AFt9HzhKykcPF79W6yjEUJcdvZOV0lIXdkORXMJftGrDl0OKWqRF4GHqpDNkxiceDT/uB7Fb/aDwktvXX7dg==",
+ "bs-logger": {
+ "version": "0.2.6",
+ "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz",
+ "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==",
"dev": true,
"requires": {
- "https-proxy-agent": "^2.2.1"
+ "fast-json-stable-stringify": "2.x"
}
},
- "browserstacktunnel-wrapper": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/browserstacktunnel-wrapper/-/browserstacktunnel-wrapper-2.0.4.tgz",
- "integrity": "sha512-GCV599FUUxNOCFl3WgPnfc5dcqq9XTmMXoxWpqkvmk0R9TOIoqmjENNU6LY6DtgIL6WfBVbg/jmWtnM5K6UYSg==",
+ "bser": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/bser/-/bser-2.0.0.tgz",
+ "integrity": "sha1-mseNPtXZFYBP2HrLFYvHlxR6Fxk=",
"dev": true,
"requires": {
- "https-proxy-agent": "^2.2.1",
- "unzipper": "^0.9.3"
+ "node-int64": "^0.4.0"
}
},
"buffer": {
@@ -2272,51 +2448,16 @@
"isarray": "^1.0.0"
}
},
- "buffer-alloc": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz",
- "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==",
- "dev": true,
- "requires": {
- "buffer-alloc-unsafe": "^1.1.0",
- "buffer-fill": "^1.0.0"
- }
- },
- "buffer-alloc-unsafe": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz",
- "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==",
- "dev": true
- },
"buffer-equal": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.0.tgz",
"integrity": "sha1-WWFrSYME1Var1GaWayLu2j7KX74=",
"dev": true
},
- "buffer-es6": {
- "version": "4.9.3",
- "resolved": "https://registry.npmjs.org/buffer-es6/-/buffer-es6-4.9.3.tgz",
- "integrity": "sha1-8mNHuC33b9N+GLy1KIxJcM/VxAQ=",
- "dev": true
- },
- "buffer-fill": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz",
- "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=",
- "dev": true
- },
"buffer-from": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.0.tgz",
- "integrity": "sha512-c5mRlguI/Pe2dSZmpER62rSCu0ryKmWddzRYsuXc50U2/g8jMOulc31VZMa4mYx31U5xsmSOpDCgH88Vl9cDGQ==",
- "dev": true
- },
- "buffer-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
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
+ "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A=="
},
"buffer-xor": {
"version": "1.0.3",
@@ -2324,17 +2465,10 @@
"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",
- "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=",
- "dev": true
+ "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8="
},
"builtin-status-codes": {
"version": "3.0.0",
@@ -2343,16 +2477,66 @@
"dev": true
},
"bytes": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
- "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=",
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
+ "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==",
"dev": true
},
+ "cacache": {
+ "version": "11.3.2",
+ "resolved": "https://registry.npmjs.org/cacache/-/cacache-11.3.2.tgz",
+ "integrity": "sha512-E0zP4EPGDOaT2chM08Als91eYnf8Z+eH1awwwVsngUmgppfM5jjJ8l3z5vO5p5w/I3LsiXawb1sW0VY65pQABg==",
+ "dev": true,
+ "requires": {
+ "bluebird": "^3.5.3",
+ "chownr": "^1.1.1",
+ "figgy-pudding": "^3.5.1",
+ "glob": "^7.1.3",
+ "graceful-fs": "^4.1.15",
+ "lru-cache": "^5.1.1",
+ "mississippi": "^3.0.0",
+ "mkdirp": "^0.5.1",
+ "move-concurrently": "^1.0.1",
+ "promise-inflight": "^1.0.1",
+ "rimraf": "^2.6.2",
+ "ssri": "^6.0.1",
+ "unique-filename": "^1.1.1",
+ "y18n": "^4.0.0"
+ },
+ "dependencies": {
+ "graceful-fs": {
+ "version": "4.1.15",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz",
+ "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==",
+ "dev": true
+ },
+ "lru-cache": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
+ "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
+ "dev": true,
+ "requires": {
+ "yallist": "^3.0.2"
+ }
+ },
+ "y18n": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz",
+ "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==",
+ "dev": true
+ },
+ "yallist": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz",
+ "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==",
+ "dev": true
+ }
+ }
+ },
"cache-base": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
"integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
- "dev": true,
"requires": {
"collection-visit": "^1.0.0",
"component-emitter": "^1.2.1",
@@ -2365,23 +2549,21 @@
"unset-value": "^1.0.0"
}
},
- "cached-path-relative": {
+ "call-me-maybe": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/cached-path-relative/-/cached-path-relative-1.0.1.tgz",
- "integrity": "sha1-0JxLUoAKpMB44t2BqGmqyQ0uVOc=",
- "dev": true
+ "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz",
+ "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms="
},
- "callsite": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz",
- "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=",
+ "callsites": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
"dev": true
},
"camelcase": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
- "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=",
- "dev": true
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
+ "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0="
},
"camelcase-keys": {
"version": "2.1.0",
@@ -2391,18 +2573,35 @@
"requires": {
"camelcase": "^2.0.0",
"map-obj": "^1.0.0"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
+ "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=",
+ "dev": true
+ }
}
},
"caniuse-lite": {
- "version": "1.0.30000948",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000948.tgz",
- "integrity": "sha512-Lw4y7oz1X5MOMZm+2IFaSISqVVQvUuD+ZUSfeYK/SlYiMjkHN/eJ2PDfJehW5NA6JjrxYSSnIWfwjeObQMEjFQ==",
+ "version": "1.0.30000967",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000967.tgz",
+ "integrity": "sha512-rUBIbap+VJfxTzrM4akJ00lkvVb5/n5v3EGXfWzSH5zT8aJmGzjA8HWhJ4U6kCpzxozUSnB+yvAYDRPY6mRpgQ==",
"dev": true
},
+ "capture-exit": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz",
+ "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==",
+ "dev": true,
+ "requires": {
+ "rsvp": "^4.8.4"
+ }
+ },
"capture-stack-trace": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz",
- "integrity": "sha1-Sm+gc5nCa7pH8LJJa00PtAjFVQ0=",
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz",
+ "integrity": "sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==",
"dev": true
},
"caseless": {
@@ -2411,80 +2610,91 @@
"integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
"dev": true
},
- "center-align": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz",
- "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=",
- "dev": true,
- "optional": true,
- "requires": {
- "align-text": "^0.1.3",
- "lazy-cache": "^1.0.3"
- }
- },
- "chainsaw": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz",
- "integrity": "sha1-XqtQsor+WAdNDVgpE4iCi15fvJg=",
+ "chai": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/chai/-/chai-4.2.0.tgz",
+ "integrity": "sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw==",
"dev": true,
"requires": {
- "traverse": ">=0.3.0 <0.4"
+ "assertion-error": "^1.1.0",
+ "check-error": "^1.0.2",
+ "deep-eql": "^3.0.1",
+ "get-func-name": "^2.0.0",
+ "pathval": "^1.1.0",
+ "type-detect": "^4.0.5"
}
},
"chalk": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz",
- "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==",
- "dev": true,
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
"requires": {
"ansi-styles": "^3.2.1",
"escape-string-regexp": "^1.0.5",
"supports-color": "^5.3.0"
- },
- "dependencies": {
- "supports-color": {
- "version": "5.4.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz",
- "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
}
},
+ "check-error": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz",
+ "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=",
+ "dev": true
+ },
+ "check-types": {
+ "version": "7.4.0",
+ "resolved": "https://registry.npmjs.org/check-types/-/check-types-7.4.0.tgz",
+ "integrity": "sha512-YbulWHdfP99UfZ73NcUDlNJhEIDgm9Doq9GhpyXbF+7Aegi3CVV7qqMCKTTqJxlvEvnQBp9IA+dxsGN6xK/nSg==",
+ "dev": true
+ },
"chokidar": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.4.tgz",
- "integrity": "sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ==",
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.5.tgz",
+ "integrity": "sha512-i0TprVWp+Kj4WRPtInjexJ8Q+BqTE909VpH8xVhXrJkoc5QC8VO9TryGOqTr+2hljzc1sC62t22h5tZePodM/A==",
"dev": true,
"requires": {
"anymatch": "^2.0.0",
- "async-each": "^1.0.0",
- "braces": "^2.3.0",
- "fsevents": "^1.2.2",
+ "async-each": "^1.0.1",
+ "braces": "^2.3.2",
+ "fsevents": "^1.2.7",
"glob-parent": "^3.1.0",
- "inherits": "^2.0.1",
+ "inherits": "^2.0.3",
"is-binary-path": "^1.0.0",
"is-glob": "^4.0.0",
- "lodash.debounce": "^4.0.8",
- "normalize-path": "^2.1.1",
+ "normalize-path": "^3.0.0",
"path-is-absolute": "^1.0.0",
- "readdirp": "^2.0.0",
- "upath": "^1.0.5"
+ "readdirp": "^2.2.1",
+ "upath": "^1.1.1"
},
"dependencies": {
- "is-glob": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz",
- "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=",
- "dev": true,
- "requires": {
- "is-extglob": "^2.1.1"
- }
+ "normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+ "dev": true
}
}
},
+ "chownr": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz",
+ "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==",
+ "dev": true
+ },
+ "chrome-trace-event": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.0.tgz",
+ "integrity": "sha512-xDbVgyfDTT2piup/h8dK/y4QZfJRSa73bw1WZ8b4XM1o7fsFubUVGYcE+1ANtOzJJELGpYoG2961z0Z6OAld9A==",
+ "dev": true,
+ "requires": {
+ "tslib": "^1.9.0"
+ }
+ },
+ "ci-info": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz",
+ "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==",
+ "dev": true
+ },
"cipher-base": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz",
@@ -2495,17 +2705,10 @@
"safe-buffer": "^5.0.1"
}
},
- "circular-json": {
- "version": "0.5.9",
- "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.5.9.tgz",
- "integrity": "sha512-4ivwqHpIFJZBuhN3g/pEcdbnGUywkBblloGbkglyloVjjR3uT6tieI89MVOfbP2tHX5sgb01FuLgAOzebNlJNQ==",
- "dev": true
- },
"class-utils": {
"version": "0.3.6",
"resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
"integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
- "dev": true,
"requires": {
"arr-union": "^3.1.0",
"define-property": "^0.2.5",
@@ -2517,13 +2720,21 @@
"version": "0.2.5",
"resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
"integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
- "dev": true,
"requires": {
"is-descriptor": "^0.1.0"
}
}
}
},
+ "clean-webpack-plugin": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/clean-webpack-plugin/-/clean-webpack-plugin-2.0.2.tgz",
+ "integrity": "sha512-pi1111o4OBd9qvacbgs+NRqClfVPKVIc66B4d8kx6Ho/L+i9entQ/NpK600CsTYTPu3kWvKwwyKarsYMvC2xeA==",
+ "dev": true,
+ "requires": {
+ "del": "^4.0.0"
+ }
+ },
"cli-boxes": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz",
@@ -2531,23 +2742,27 @@
"dev": true
},
"cliui": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz",
- "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=",
- "dev": true,
- "optional": true,
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz",
+ "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==",
"requires": {
- "center-align": "^0.1.1",
- "right-align": "^0.1.1",
- "wordwrap": "0.0.2"
+ "string-width": "^2.1.1",
+ "strip-ansi": "^4.0.0",
+ "wrap-ansi": "^2.0.0"
},
"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
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg="
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "requires": {
+ "ansi-regex": "^3.0.0"
+ }
}
}
},
@@ -2589,8 +2804,20 @@
"code-point-at": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
- "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
- "dev": true
+ "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c="
+ },
+ "codecov": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/codecov/-/codecov-3.3.0.tgz",
+ "integrity": "sha512-S70c3Eg9SixumOvxaKE/yKUxb9ihu/uebD9iPO2IR73IdP4i6ZzjXEULj3d0HeyWPr0DqBfDkjNBWxURjVO5hw==",
+ "dev": true,
+ "requires": {
+ "argv": "^0.0.2",
+ "ignore-walk": "^3.0.1",
+ "js-yaml": "^3.12.0",
+ "teeny-request": "^3.7.0",
+ "urlgrey": "^0.4.4"
+ }
},
"collection-map": {
"version": "1.0.0",
@@ -2607,26 +2834,23 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
"integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
- "dev": true,
"requires": {
"map-visit": "^1.0.0",
"object-visit": "^1.0.0"
}
},
"color-convert": {
- "version": "1.9.2",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.2.tgz",
- "integrity": "sha512-3NUJZdhMhcdPn8vJ9v2UQJoH0qqoGUkYTgFEPZaPjEtwmmKUfNV46zZmgB2M5M4DCEQHMaCfWHCxiBflLm04Tg==",
- "dev": true,
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
"requires": {
- "color-name": "1.1.1"
+ "color-name": "1.1.3"
}
},
"color-name": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.1.tgz",
- "integrity": "sha1-SxQVMEz1ACjqgWQ2Q72C6gWANok=",
- "dev": true
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
},
"color-support": {
"version": "1.1.3",
@@ -2635,44 +2859,29 @@
"dev": true
},
"colors": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz",
- "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=",
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-0.6.2.tgz",
+ "integrity": "sha1-JCP+ZnisDF2uiFLl0OW+CMmXq8w=",
"dev": true
},
- "combine-lists": {
- "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,
- "requires": {
- "lodash": "^4.5.0"
- }
- },
- "combine-source-map": {
- "version": "0.8.0",
- "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.8.0.tgz",
- "integrity": "sha1-pY0N8ELBhvz4IqjoAV9UUNLXmos=",
- "dev": true,
- "requires": {
- "convert-source-map": "~1.1.0",
- "inline-source-map": "~0.6.0",
- "lodash.memoize": "~3.0.3",
- "source-map": "~0.5.3"
- }
- },
"combined-stream": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz",
- "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=",
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz",
+ "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==",
+ "dev": true,
"requires": {
"delayed-stream": "~1.0.0"
}
},
"commander": {
- "version": "2.17.1",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz",
- "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==",
+ "version": "2.19.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz",
+ "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg=="
+ },
+ "commondir": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
+ "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=",
"dev": true
},
"compare-func": {
@@ -2685,28 +2894,29 @@
"dot-prop": "^3.0.0"
}
},
- "component-bind": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz",
- "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=",
- "dev": true
- },
"component-emitter": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
"integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY="
},
- "component-inherit": {
- "version": "0.0.3",
- "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz",
- "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=",
- "dev": true
+ "compression-webpack-plugin": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/compression-webpack-plugin/-/compression-webpack-plugin-2.0.0.tgz",
+ "integrity": "sha512-bDgd7oTUZC8EkRx8j0sjyCfeiO+e5sFcfgaFcjVhfQf5lLya7oY2BczxcJ7IUuVjz5m6fy8IECFmVFew3xLk8Q==",
+ "dev": true,
+ "requires": {
+ "cacache": "^11.2.0",
+ "find-cache-dir": "^2.0.0",
+ "neo-async": "^2.5.0",
+ "schema-utils": "^1.0.0",
+ "serialize-javascript": "^1.4.0",
+ "webpack-sources": "^1.0.1"
+ }
},
"concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
- "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
- "dev": true
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
},
"concat-stream": {
"version": "1.5.2",
@@ -2748,68 +2958,36 @@
}
},
"configstore": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/configstore/-/configstore-2.1.0.tgz",
- "integrity": "sha1-c3o6cDbpiGECqmCZ5HuzOrGroaE=",
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.2.tgz",
+ "integrity": "sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw==",
"dev": true,
"requires": {
- "dot-prop": "^3.0.0",
+ "dot-prop": "^4.1.0",
"graceful-fs": "^4.1.2",
- "mkdirp": "^0.5.0",
- "object-assign": "^4.0.1",
- "os-tmpdir": "^1.0.0",
- "osenv": "^0.1.0",
- "uuid": "^2.0.1",
- "write-file-atomic": "^1.1.2",
- "xdg-basedir": "^2.0.0"
- },
- "dependencies": {
- "uuid": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz",
- "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=",
- "dev": true
- }
- }
- },
- "connect": {
- "version": "3.6.6",
- "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.6.tgz",
- "integrity": "sha1-Ce/2xVr3I24TcTWnJXSFi2eG9SQ=",
- "dev": true,
- "requires": {
- "debug": "2.6.9",
- "finalhandler": "1.1.0",
- "parseurl": "~1.3.2",
- "utils-merge": "1.0.1"
+ "make-dir": "^1.0.0",
+ "unique-string": "^1.0.0",
+ "write-file-atomic": "^2.0.0",
+ "xdg-basedir": "^3.0.0"
},
"dependencies": {
- "debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dot-prop": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz",
+ "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==",
"dev": true,
"requires": {
- "ms": "2.0.0"
+ "is-obj": "^1.0.0"
}
+ },
+ "xdg-basedir": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz",
+ "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=",
+ "dev": true
}
}
},
- "connect-prism": {
- "version": "1.0.20",
- "resolved": "https://registry.npmjs.org/connect-prism/-/connect-prism-1.0.20.tgz",
- "integrity": "sha512-L1culdk+V/n6uKYRXodpPjcuwlggqwQO+DKvn+ZjayWTvn3OEcjumX3RWpR8ih1JWN9v8NW6u0yBim7j2dAapg==",
- "dev": true,
- "requires": {
- "body-parser": "^1.18.2",
- "director": "^1.2.8",
- "forwarded-for": "^1.0.0",
- "http-proxy": "^1.13.1",
- "lodash": "^4.3.0",
- "q": "^1.4.1",
- "winston": "^2.1.1"
- }
- },
"console-browserify": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz",
@@ -2838,28 +3016,28 @@
"dev": true
},
"conventional-changelog": {
- "version": "1.1.24",
- "resolved": "https://registry.npmjs.org/conventional-changelog/-/conventional-changelog-1.1.24.tgz",
- "integrity": "sha512-2WcSUst4Y3Z4hHvoMTWXMJr/DmgVdLiMOVY1Kak2LfFz+GIz2KDp5naqbFesYbfXPmaZ5p491dO0FWZIJoJw1Q==",
+ "version": "3.1.8",
+ "resolved": "https://registry.npmjs.org/conventional-changelog/-/conventional-changelog-3.1.8.tgz",
+ "integrity": "sha512-fb3/DOLLrQdNqN0yYn/lT6HcNsAa9A+VTDBqlZBMQcEPPIeJIMI+DBs3yu+eiYOLi22w9oShq3nn/zN6qm1Hmw==",
"dev": true,
"requires": {
- "conventional-changelog-angular": "^1.6.6",
- "conventional-changelog-atom": "^0.2.8",
- "conventional-changelog-codemirror": "^0.3.8",
- "conventional-changelog-core": "^2.0.11",
- "conventional-changelog-ember": "^0.3.12",
- "conventional-changelog-eslint": "^1.0.9",
- "conventional-changelog-express": "^0.3.6",
- "conventional-changelog-jquery": "^0.1.0",
- "conventional-changelog-jscs": "^0.1.0",
- "conventional-changelog-jshint": "^0.3.8",
- "conventional-changelog-preset-loader": "^1.1.8"
+ "conventional-changelog-angular": "^5.0.3",
+ "conventional-changelog-atom": "^2.0.1",
+ "conventional-changelog-codemirror": "^2.0.1",
+ "conventional-changelog-conventionalcommits": "^3.0.2",
+ "conventional-changelog-core": "^3.2.2",
+ "conventional-changelog-ember": "^2.0.2",
+ "conventional-changelog-eslint": "^3.0.2",
+ "conventional-changelog-express": "^2.0.1",
+ "conventional-changelog-jquery": "^3.0.4",
+ "conventional-changelog-jshint": "^2.0.1",
+ "conventional-changelog-preset-loader": "^2.1.1"
}
},
"conventional-changelog-angular": {
- "version": "1.6.6",
- "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-1.6.6.tgz",
- "integrity": "sha512-suQnFSqCxRwyBxY68pYTsFkG0taIdinHLNEAX5ivtw8bCRnIgnpvcHmlR/yjUyZIrNPYAoXlY1WiEKWgSE4BNg==",
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.3.tgz",
+ "integrity": "sha512-YD1xzH7r9yXQte/HF9JBuEDfvjxxwDGGwZU1+ndanbY0oFgA+Po1T9JDSpPLdP0pZT6MhCAsdvFKC4TJ4MTJTA==",
"dev": true,
"requires": {
"compare-func": "^1.3.1",
@@ -2867,160 +3045,160 @@
}
},
"conventional-changelog-atom": {
- "version": "0.2.8",
- "resolved": "https://registry.npmjs.org/conventional-changelog-atom/-/conventional-changelog-atom-0.2.8.tgz",
- "integrity": "sha512-8pPZqhMbrnltNBizjoDCb/Sz85KyUXNDQxuAEYAU5V/eHn0okMBVjqc8aHWYpHrytyZWvMGbayOlDv7i8kEf6g==",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-atom/-/conventional-changelog-atom-2.0.1.tgz",
+ "integrity": "sha512-9BniJa4gLwL20Sm7HWSNXd0gd9c5qo49gCi8nylLFpqAHhkFTj7NQfROq3f1VpffRtzfTQp4VKU5nxbe2v+eZQ==",
"dev": true,
"requires": {
"q": "^1.5.1"
}
},
"conventional-changelog-codemirror": {
- "version": "0.3.8",
- "resolved": "https://registry.npmjs.org/conventional-changelog-codemirror/-/conventional-changelog-codemirror-0.3.8.tgz",
- "integrity": "sha512-3HFZKtBXTaUCHvz7ai6nk2+psRIkldDoNzCsom0egDtVmPsvvHZkzjynhdQyULfacRSsBTaiQ0ol6nBOL4dDiQ==",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-codemirror/-/conventional-changelog-codemirror-2.0.1.tgz",
+ "integrity": "sha512-23kT5IZWa+oNoUaDUzVXMYn60MCdOygTA2I+UjnOMiYVhZgmVwNd6ri/yDlmQGXHqbKhNR5NoXdBzSOSGxsgIQ==",
+ "dev": true,
+ "requires": {
+ "q": "^1.5.1"
+ }
+ },
+ "conventional-changelog-config-spec": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-config-spec/-/conventional-changelog-config-spec-1.0.0.tgz",
+ "integrity": "sha512-RR3479x5Qw7XWkmNDYx/kOnsQJW+FZBIakURG/Dg7FkTaCrGjAkgfH96pQs9SyOEZI07USEXy7FjUDWYP8bt3Q==",
+ "dev": true
+ },
+ "conventional-changelog-conventionalcommits": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-3.0.2.tgz",
+ "integrity": "sha512-w1+fQSDnm/7+sPKIYC5nfRVYDszt+6HdWizrigSqWFVIiiBVzkHGeqDLMSHc+Qq9qssHVAxAak5206epZyK87A==",
"dev": true,
"requires": {
+ "compare-func": "^1.3.1",
"q": "^1.5.1"
}
},
"conventional-changelog-core": {
- "version": "2.0.11",
- "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-2.0.11.tgz",
- "integrity": "sha512-HvTE6RlqeEZ/NFPtQeFLsIDOLrGP3bXYr7lFLMhCVsbduF1MXIe8OODkwMFyo1i9ku9NWBwVnVn0jDmIFXjDRg==",
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-3.2.2.tgz",
+ "integrity": "sha512-cssjAKajxaOX5LNAJLB+UOcoWjAIBvXtDMedv/58G+YEmAXMNfC16mmPl0JDOuVJVfIqM0nqQiZ8UCm8IXbE0g==",
"dev": true,
"requires": {
- "conventional-changelog-writer": "^3.0.9",
- "conventional-commits-parser": "^2.1.7",
+ "conventional-changelog-writer": "^4.0.5",
+ "conventional-commits-parser": "^3.0.2",
"dateformat": "^3.0.0",
"get-pkg-repo": "^1.0.0",
- "git-raw-commits": "^1.3.6",
+ "git-raw-commits": "2.0.0",
"git-remote-origin-url": "^2.0.0",
- "git-semver-tags": "^1.3.6",
+ "git-semver-tags": "^2.0.2",
"lodash": "^4.2.1",
"normalize-package-data": "^2.3.5",
"q": "^1.5.1",
- "read-pkg": "^1.1.0",
- "read-pkg-up": "^1.0.1",
- "through2": "^2.0.0"
+ "read-pkg": "^3.0.0",
+ "read-pkg-up": "^3.0.0",
+ "through2": "^3.0.0"
},
"dependencies": {
- "dateformat": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz",
- "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==",
- "dev": true
- },
"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=",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz",
+ "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=",
"dev": true,
"requires": {
"graceful-fs": "^4.1.2",
- "parse-json": "^2.2.0",
- "pify": "^2.0.0",
- "pinkie-promise": "^2.0.0",
- "strip-bom": "^2.0.0"
+ "parse-json": "^4.0.0",
+ "pify": "^3.0.0",
+ "strip-bom": "^3.0.0"
}
},
"parse-json": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
- "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
+ "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
"dev": true,
"requires": {
- "error-ex": "^1.2.0"
+ "error-ex": "^1.3.1",
+ "json-parse-better-errors": "^1.0.1"
}
},
- "path-type": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
- "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
+ "read-pkg": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz",
+ "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=",
"dev": true,
"requires": {
- "graceful-fs": "^4.1.2",
- "pify": "^2.0.0",
- "pinkie-promise": "^2.0.0"
+ "load-json-file": "^4.0.0",
+ "normalize-package-data": "^2.3.2",
+ "path-type": "^3.0.0"
}
},
- "pify": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
- "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
- "dev": true
- },
- "read-pkg": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
- "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
+ "read-pkg-up": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz",
+ "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=",
"dev": true,
"requires": {
- "load-json-file": "^1.0.0",
- "normalize-package-data": "^2.3.2",
- "path-type": "^1.0.0"
+ "find-up": "^2.0.0",
+ "read-pkg": "^3.0.0"
}
},
"strip-bom": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
- "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
+ "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
+ "dev": true
+ },
+ "through2": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.1.tgz",
+ "integrity": "sha512-M96dvTalPT3YbYLaKaCuwu+j06D/8Jfib0o/PxbVt6Amhv3dUAtW6rTV1jPgJSBG83I/e04Y6xkVdVhSRhi0ww==",
"dev": true,
"requires": {
- "is-utf8": "^0.2.0"
+ "readable-stream": "2 || 3"
}
}
}
},
"conventional-changelog-ember": {
- "version": "0.3.12",
- "resolved": "https://registry.npmjs.org/conventional-changelog-ember/-/conventional-changelog-ember-0.3.12.tgz",
- "integrity": "sha512-mmJzA7uzbrOqeF89dMMi6z17O07ORTXlTMArnLG9ZTX4oLaKNolUlxFUFlFm9JUoVWajVpaHQWjxH1EOQ+ARoQ==",
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-ember/-/conventional-changelog-ember-2.0.2.tgz",
+ "integrity": "sha512-qtZbA3XefO/n6DDmkYywDYi6wDKNNc98MMl2F9PKSaheJ25Trpi3336W8fDlBhq0X+EJRuseceAdKLEMmuX2tg==",
"dev": true,
"requires": {
"q": "^1.5.1"
}
},
"conventional-changelog-eslint": {
- "version": "1.0.9",
- "resolved": "https://registry.npmjs.org/conventional-changelog-eslint/-/conventional-changelog-eslint-1.0.9.tgz",
- "integrity": "sha512-h87nfVh2fdk9fJIvz26wCBsbDC/KxqCc5wSlNMZbXcARtbgNbNDIF7Y7ctokFdnxkzVdaHsbINkh548T9eBA7Q==",
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-eslint/-/conventional-changelog-eslint-3.0.2.tgz",
+ "integrity": "sha512-Yi7tOnxjZLXlCYBHArbIAm8vZ68QUSygFS7PgumPRiEk+9NPUeucy5Wg9AAyKoBprSV3o6P7Oghh4IZSLtKCvQ==",
"dev": true,
"requires": {
"q": "^1.5.1"
}
},
"conventional-changelog-express": {
- "version": "0.3.6",
- "resolved": "https://registry.npmjs.org/conventional-changelog-express/-/conventional-changelog-express-0.3.6.tgz",
- "integrity": "sha512-3iWVtBJZ9RnRnZveNDzOD8QRn6g6vUif0qVTWWyi5nUIAbuN1FfPVyKdAlJJfp5Im+dE8Kiy/d2SpaX/0X678Q==",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-express/-/conventional-changelog-express-2.0.1.tgz",
+ "integrity": "sha512-G6uCuCaQhLxdb4eEfAIHpcfcJ2+ao3hJkbLrw/jSK/eROeNfnxCJasaWdDAfFkxsbpzvQT4W01iSynU3OoPLIw==",
"dev": true,
"requires": {
"q": "^1.5.1"
}
},
"conventional-changelog-jquery": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/conventional-changelog-jquery/-/conventional-changelog-jquery-0.1.0.tgz",
- "integrity": "sha1-Agg5cWLjhGmG5xJztsecW1+A9RA=",
- "dev": true,
- "requires": {
- "q": "^1.4.1"
- }
- },
- "conventional-changelog-jscs": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/conventional-changelog-jscs/-/conventional-changelog-jscs-0.1.0.tgz",
- "integrity": "sha1-BHnrRDzH1yxYvwvPDvHURKkvDlw=",
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-jquery/-/conventional-changelog-jquery-3.0.4.tgz",
+ "integrity": "sha512-IVJGI3MseYoY6eybknnTf9WzeQIKZv7aNTm2KQsiFVJH21bfP2q7XVjfoMibdCg95GmgeFlaygMdeoDDa+ZbEQ==",
"dev": true,
"requires": {
- "q": "^1.4.1"
+ "q": "^1.5.1"
}
},
"conventional-changelog-jshint": {
- "version": "0.3.8",
- "resolved": "https://registry.npmjs.org/conventional-changelog-jshint/-/conventional-changelog-jshint-0.3.8.tgz",
- "integrity": "sha512-hn9QU4ZI/5V50wKPJNPGT4gEWgiBFpV6adieILW4MaUFynuDYOvQ71EMSj3EznJyKi/KzuXpc9dGmX8njZMjig==",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-jshint/-/conventional-changelog-jshint-2.0.1.tgz",
+ "integrity": "sha512-kRFJsCOZzPFm2tzRHULWP4tauGMvccOlXYf3zGeuSW4U0mZhk5NsjnRZ7xFWrTFPlCLV+PNmHMuXp5atdoZmEg==",
"dev": true,
"requires": {
"compare-func": "^1.3.1",
@@ -3028,35 +3206,29 @@
}
},
"conventional-changelog-preset-loader": {
- "version": "1.1.8",
- "resolved": "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-1.1.8.tgz",
- "integrity": "sha512-MkksM4G4YdrMlT2MbTsV2F6LXu/hZR0Tc/yenRrDIKRwBl/SP7ER4ZDlglqJsCzLJi4UonBc52Bkm5hzrOVCcw==",
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.1.1.tgz",
+ "integrity": "sha512-K4avzGMLm5Xw0Ek/6eE3vdOXkqnpf9ydb68XYmCc16cJ99XMMbc2oaNMuPwAsxVK6CC1yA4/I90EhmWNj0Q6HA==",
"dev": true
},
"conventional-changelog-writer": {
- "version": "3.0.9",
- "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-3.0.9.tgz",
- "integrity": "sha512-n9KbsxlJxRQsUnK6wIBRnARacvNnN4C/nxnxCkH+B/R1JS2Fa+DiP1dU4I59mEDEjgnFaN2+9wr1P1s7GYB5/Q==",
+ "version": "4.0.5",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-4.0.5.tgz",
+ "integrity": "sha512-g/Myp4MaJ1A+f7Ai+SnVhkcWtaHk6flw0SYN7A+vQ+MTu0+gSovQWs4Pg4NtcNUcIztYQ9YHsoxHP+GGQplI7Q==",
"dev": true,
"requires": {
"compare-func": "^1.3.1",
- "conventional-commits-filter": "^1.1.6",
+ "conventional-commits-filter": "^2.0.2",
"dateformat": "^3.0.0",
- "handlebars": "^4.0.2",
+ "handlebars": "^4.1.0",
"json-stringify-safe": "^5.0.1",
"lodash": "^4.2.1",
"meow": "^4.0.0",
"semver": "^5.5.0",
"split": "^1.0.0",
- "through2": "^2.0.0"
+ "through2": "^3.0.0"
},
"dependencies": {
- "camelcase": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
- "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
- "dev": true
- },
"camelcase-keys": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-4.2.0.tgz",
@@ -3068,27 +3240,24 @@
"quick-lru": "^1.0.0"
}
},
- "dateformat": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz",
- "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==",
- "dev": true
- },
- "find-up": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
- "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
- "dev": true,
- "requires": {
- "locate-path": "^2.0.0"
- }
- },
"indent-string": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz",
"integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=",
"dev": true
},
+ "load-json-file": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz",
+ "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "parse-json": "^4.0.0",
+ "pify": "^3.0.0",
+ "strip-bom": "^3.0.0"
+ }
+ },
"map-obj": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/map-obj/-/map-obj-2.0.0.tgz",
@@ -3112,6 +3281,33 @@
"trim-newlines": "^2.0.0"
}
},
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+ "dev": true
+ },
+ "parse-json": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
+ "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
+ "dev": true,
+ "requires": {
+ "error-ex": "^1.3.1",
+ "json-parse-better-errors": "^1.0.1"
+ }
+ },
+ "read-pkg": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz",
+ "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=",
+ "dev": true,
+ "requires": {
+ "load-json-file": "^4.0.0",
+ "normalize-package-data": "^2.3.2",
+ "path-type": "^3.0.0"
+ }
+ },
"read-pkg-up": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz",
@@ -3132,15 +3328,30 @@
"strip-indent": "^2.0.0"
}
},
+ "strip-bom": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
+ "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
+ "dev": true
+ },
"strip-indent": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz",
"integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=",
"dev": true
},
- "trim-newlines": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-2.0.0.tgz",
+ "through2": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.1.tgz",
+ "integrity": "sha512-M96dvTalPT3YbYLaKaCuwu+j06D/8Jfib0o/PxbVt6Amhv3dUAtW6rTV1jPgJSBG83I/e04Y6xkVdVhSRhi0ww==",
+ "dev": true,
+ "requires": {
+ "readable-stream": "2 || 3"
+ }
+ },
+ "trim-newlines": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-2.0.0.tgz",
"integrity": "sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA=",
"dev": true
}
@@ -3153,19 +3364,19 @@
"dev": true
},
"conventional-commits-filter": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-1.1.6.tgz",
- "integrity": "sha512-KcDgtCRKJCQhyk6VLT7zR+ZOyCnerfemE/CsR3iQpzRRFbLEs0Y6rwk3mpDvtOh04X223z+1xyJ582Stfct/0Q==",
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-2.0.2.tgz",
+ "integrity": "sha512-WpGKsMeXfs21m1zIw4s9H5sys2+9JccTzpN6toXtxhpw2VNF2JUXwIakthKBy+LN4DvJm+TzWhxOMWOs1OFCFQ==",
"dev": true,
"requires": {
- "is-subset": "^0.1.1",
+ "lodash.ismatch": "^4.4.0",
"modify-values": "^1.0.0"
}
},
"conventional-commits-parser": {
- "version": "2.1.7",
- "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-2.1.7.tgz",
- "integrity": "sha512-BoMaddIEJ6B4QVMSDu9IkVImlGOSGA1I2BQyOZHeLQ6qVOJLcLKn97+fL6dGbzWEiqDzfH4OkcveULmeq2MHFQ==",
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.0.2.tgz",
+ "integrity": "sha512-y5eqgaKR0F6xsBNVSQ/5cI5qIF3MojddSUi1vKIggRkqUTbkqFKH9P5YX/AT1BVZp9DtSzBTIkvjyVLotLsVog==",
"dev": true,
"requires": {
"JSONStream": "^1.0.4",
@@ -3173,16 +3384,154 @@
"lodash": "^4.2.1",
"meow": "^4.0.0",
"split2": "^2.0.0",
- "through2": "^2.0.0",
+ "through2": "^3.0.0",
"trim-off-newlines": "^1.0.0"
},
"dependencies": {
- "camelcase": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
- "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
+ "camelcase-keys": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-4.2.0.tgz",
+ "integrity": "sha1-oqpfsa9oh1glnDLBQUJteJI7m3c=",
+ "dev": true,
+ "requires": {
+ "camelcase": "^4.1.0",
+ "map-obj": "^2.0.0",
+ "quick-lru": "^1.0.0"
+ }
+ },
+ "indent-string": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz",
+ "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=",
+ "dev": true
+ },
+ "load-json-file": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz",
+ "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "parse-json": "^4.0.0",
+ "pify": "^3.0.0",
+ "strip-bom": "^3.0.0"
+ }
+ },
+ "map-obj": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-2.0.0.tgz",
+ "integrity": "sha1-plzSkIepJZi4eRJXpSPgISIqwfk=",
+ "dev": true
+ },
+ "meow": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/meow/-/meow-4.0.1.tgz",
+ "integrity": "sha512-xcSBHD5Z86zaOc+781KrupuHAzeGXSLtiAOmBsiLDiPSaYSB6hdew2ng9EBAnZ62jagG9MHAOdxpDi/lWBFJ/A==",
+ "dev": true,
+ "requires": {
+ "camelcase-keys": "^4.0.0",
+ "decamelize-keys": "^1.0.0",
+ "loud-rejection": "^1.0.0",
+ "minimist": "^1.1.3",
+ "minimist-options": "^3.0.1",
+ "normalize-package-data": "^2.3.4",
+ "read-pkg-up": "^3.0.0",
+ "redent": "^2.0.0",
+ "trim-newlines": "^2.0.0"
+ }
+ },
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+ "dev": true
+ },
+ "parse-json": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
+ "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
+ "dev": true,
+ "requires": {
+ "error-ex": "^1.3.1",
+ "json-parse-better-errors": "^1.0.1"
+ }
+ },
+ "read-pkg": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz",
+ "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=",
+ "dev": true,
+ "requires": {
+ "load-json-file": "^4.0.0",
+ "normalize-package-data": "^2.3.2",
+ "path-type": "^3.0.0"
+ }
+ },
+ "read-pkg-up": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz",
+ "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=",
+ "dev": true,
+ "requires": {
+ "find-up": "^2.0.0",
+ "read-pkg": "^3.0.0"
+ }
+ },
+ "redent": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/redent/-/redent-2.0.0.tgz",
+ "integrity": "sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo=",
+ "dev": true,
+ "requires": {
+ "indent-string": "^3.0.0",
+ "strip-indent": "^2.0.0"
+ }
+ },
+ "strip-bom": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
+ "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
+ "dev": true
+ },
+ "strip-indent": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz",
+ "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=",
"dev": true
},
+ "through2": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.1.tgz",
+ "integrity": "sha512-M96dvTalPT3YbYLaKaCuwu+j06D/8Jfib0o/PxbVt6Amhv3dUAtW6rTV1jPgJSBG83I/e04Y6xkVdVhSRhi0ww==",
+ "dev": true,
+ "requires": {
+ "readable-stream": "2 || 3"
+ }
+ },
+ "trim-newlines": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-2.0.0.tgz",
+ "integrity": "sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA=",
+ "dev": true
+ }
+ }
+ },
+ "conventional-recommended-bump": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/conventional-recommended-bump/-/conventional-recommended-bump-5.0.0.tgz",
+ "integrity": "sha512-CsfdICpbUe0pmM4MTG90GPUqnFgB1SWIR2HAh+vS+JhhJdPWvc0brs8oadWoYGhFOQpQwe57JnvzWEWU0m2OSg==",
+ "dev": true,
+ "requires": {
+ "concat-stream": "^2.0.0",
+ "conventional-changelog-preset-loader": "^2.1.1",
+ "conventional-commits-filter": "^2.0.2",
+ "conventional-commits-parser": "^3.0.2",
+ "git-raw-commits": "2.0.0",
+ "git-semver-tags": "^2.0.2",
+ "meow": "^4.0.0",
+ "q": "^1.5.1"
+ },
+ "dependencies": {
"camelcase-keys": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-4.2.0.tgz",
@@ -3194,13 +3543,16 @@
"quick-lru": "^1.0.0"
}
},
- "find-up": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
- "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
+ "concat-stream": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz",
+ "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==",
"dev": true,
"requires": {
- "locate-path": "^2.0.0"
+ "buffer-from": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^3.0.2",
+ "typedarray": "^0.0.6"
}
},
"indent-string": {
@@ -3209,6 +3561,18 @@
"integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=",
"dev": true
},
+ "load-json-file": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz",
+ "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "parse-json": "^4.0.0",
+ "pify": "^3.0.0",
+ "strip-bom": "^3.0.0"
+ }
+ },
"map-obj": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/map-obj/-/map-obj-2.0.0.tgz",
@@ -3232,6 +3596,33 @@
"trim-newlines": "^2.0.0"
}
},
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+ "dev": true
+ },
+ "parse-json": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
+ "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
+ "dev": true,
+ "requires": {
+ "error-ex": "^1.3.1",
+ "json-parse-better-errors": "^1.0.1"
+ }
+ },
+ "read-pkg": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz",
+ "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=",
+ "dev": true,
+ "requires": {
+ "load-json-file": "^4.0.0",
+ "normalize-package-data": "^2.3.2",
+ "path-type": "^3.0.0"
+ }
+ },
"read-pkg-up": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz",
@@ -3242,6 +3633,17 @@
"read-pkg": "^3.0.0"
}
},
+ "readable-stream": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.3.0.tgz",
+ "integrity": "sha512-EsI+s3k3XsW+fU8fQACLN59ky34AZ14LoeVZpYwmZvldCFo0r0gnelwF2TcMjLor/BTL5aDJVBMkss0dthToPw==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ }
+ },
"redent": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/redent/-/redent-2.0.0.tgz",
@@ -3252,6 +3654,12 @@
"strip-indent": "^2.0.0"
}
},
+ "strip-bom": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
+ "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
+ "dev": true
+ },
"strip-indent": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz",
@@ -3266,27 +3674,15 @@
}
}
},
- "conventional-recommended-bump": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/conventional-recommended-bump/-/conventional-recommended-bump-1.2.1.tgz",
- "integrity": "sha512-oJjG6DkRgtnr/t/VrPdzmf4XZv8c4xKVJrVT4zrSHd92KEL+EYxSbYoKq8lQ7U5yLMw7130wrcQTLRjM/T+d4w==",
+ "convert-source-map": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz",
+ "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==",
"dev": true,
"requires": {
- "concat-stream": "^1.4.10",
- "conventional-commits-filter": "^1.1.1",
- "conventional-commits-parser": "^2.1.1",
- "git-raw-commits": "^1.3.0",
- "git-semver-tags": "^1.3.0",
- "meow": "^3.3.0",
- "object-assign": "^4.0.1"
+ "safe-buffer": "~5.1.1"
}
},
- "convert-source-map": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz",
- "integrity": "sha1-SCnId+n+SbMWHzvzZziI4gRpmGA=",
- "dev": true
- },
"cookie": {
"version": "0.3.1",
"resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz",
@@ -3299,16 +3695,24 @@
"integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=",
"dev": true
},
- "cookiejar": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.2.tgz",
- "integrity": "sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA=="
+ "copy-concurrently": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz",
+ "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==",
+ "dev": true,
+ "requires": {
+ "aproba": "^1.1.1",
+ "fs-write-stream-atomic": "^1.0.8",
+ "iferr": "^0.1.5",
+ "mkdirp": "^0.5.1",
+ "rimraf": "^2.5.4",
+ "run-queue": "^1.0.0"
+ }
},
"copy-descriptor": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
- "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=",
- "dev": true
+ "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40="
},
"copy-props": {
"version": "2.0.4",
@@ -3321,24 +3725,72 @@
}
},
"core-js": {
- "version": "2.5.7",
- "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz",
- "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==",
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.0.1.tgz",
+ "integrity": "sha512-sco40rF+2KlE0ROMvydjkrVMMG1vYilP2ALoRXcYR4obqbYIuV3Bg+51GEDW+HF8n7NRA+iaA4qD0nD9lo9mew==",
+ "dev": true
+ },
+ "core-js-compat": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.0.1.tgz",
+ "integrity": "sha512-2pC3e+Ht/1/gD7Sim/sqzvRplMiRnFQVlPpDVaHtY9l7zZP7knamr3VRD6NyGfHd84MrDC0tAM9ulNxYMW0T3g==",
+ "dev": true,
+ "requires": {
+ "browserslist": "^4.5.4",
+ "core-js": "3.0.1",
+ "core-js-pure": "3.0.1",
+ "semver": "^6.0.0"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.0.0.tgz",
+ "integrity": "sha512-0UewU+9rFapKFnlbirLi3byoOuhrSsli/z/ihNnvM24vgF+8sNBiI1LZPBSH9wJKUwaUbw+s3hToDLCXkrghrQ==",
+ "dev": true
+ }
+ }
+ },
+ "core-js-pure": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.0.1.tgz",
+ "integrity": "sha512-mSxeQ6IghKW3MoyF4cz19GJ1cMm7761ON+WObSyLfTu/Jn3x7w4NwNFnrZxgl4MTSvYYepVLNuRtlB4loMwJ5g==",
"dev": true
},
"core-util-is": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
- "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+ "dev": true
},
- "cors": {
- "version": "2.8.4",
- "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.4.tgz",
- "integrity": "sha1-K9OB8usgECAQXNUOpZ2mMJBpRoY=",
+ "cp-file": {
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/cp-file/-/cp-file-6.2.0.tgz",
+ "integrity": "sha512-fmvV4caBnofhPe8kOcitBwSn2f39QLjnAnGq3gO9dfd75mUytzKNZB1hde6QHunW2Rt+OwuBOMc3i1tNElbszA==",
"dev": true,
"requires": {
- "object-assign": "^4",
- "vary": "^1"
+ "graceful-fs": "^4.1.2",
+ "make-dir": "^2.0.0",
+ "nested-error-stacks": "^2.0.0",
+ "pify": "^4.0.1",
+ "safe-buffer": "^5.0.1"
+ },
+ "dependencies": {
+ "make-dir": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz",
+ "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==",
+ "dev": true,
+ "requires": {
+ "pify": "^4.0.1",
+ "semver": "^5.6.0"
+ }
+ },
+ "pify": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
+ "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
+ "dev": true
+ }
}
},
"create-ecdh": {
@@ -3391,23 +3843,10 @@
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
"integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
- "dev": true,
"requires": {
"lru-cache": "^4.0.1",
"shebang-command": "^1.2.0",
"which": "^1.2.9"
- },
- "dependencies": {
- "lru-cache": {
- "version": "4.1.3",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz",
- "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==",
- "dev": true,
- "requires": {
- "pseudomap": "^1.0.2",
- "yallist": "^2.1.2"
- }
- }
}
},
"cross-spawn-async": {
@@ -3418,18 +3857,6 @@
"requires": {
"lru-cache": "^4.0.0",
"which": "^1.2.8"
- },
- "dependencies": {
- "lru-cache": {
- "version": "4.1.3",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz",
- "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==",
- "dev": true,
- "requires": {
- "pseudomap": "^1.0.2",
- "yallist": "^2.1.2"
- }
- }
}
},
"crypto-browserify": {
@@ -3451,39 +3878,22 @@
"randomfill": "^1.0.3"
}
},
- "css": {
- "version": "2.2.3",
- "resolved": "https://registry.npmjs.org/css/-/css-2.2.3.tgz",
- "integrity": "sha512-0W171WccAjQGGTKLhw4m2nnl0zPHUlTO/I8td4XzJgIB8Hg3ZZx71qT4G4eX8OVsSiaAKiUMy73E3nsbPlg2DQ==",
- "dev": true,
- "requires": {
- "inherits": "^2.0.1",
- "source-map": "^0.1.38",
- "source-map-resolve": "^0.5.1",
- "urix": "^0.1.0"
- },
- "dependencies": {
- "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": {
- "amdefine": ">=0.0.4"
- }
- }
- }
- },
- "cssom": {
- "version": "0.3.4",
- "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.4.tgz",
- "integrity": "sha512-+7prCSORpXNeR4/fUP3rL+TzqtiFfhMvTd7uEqMdgPvLPt4+uzFUeufx5RHjGTACCargg/DiEt/moMQmvnfkog==",
- "dev": true
- },
- "cssstyle": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.1.1.tgz",
- "integrity": "sha512-364AI1l/M5TYcFH83JnOH/pSqgaNnKmYgKrm0didZMGKWjQB60dymwWy1rKUgL3J1ffdq9xVi2yGLHdSjjSNog==",
+ "crypto-random-string": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz",
+ "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=",
+ "dev": true
+ },
+ "cssom": {
+ "version": "0.3.6",
+ "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.6.tgz",
+ "integrity": "sha512-DtUeseGk9/GBW0hl0vVPpU22iHL6YB5BUX7ml1hB+GMpo0NX5G4voX3kdWiMSEguFtcW3Vh3djqNF4aIe6ne0A==",
+ "dev": true
+ },
+ "cssstyle": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.2.2.tgz",
+ "integrity": "sha512-43wY3kl1CVQSvL7wUY1qXkxVGkStjpkDmVjiIKX8R97uhajy8Bybay78uOtqvh7Q5GK75dNPfW0geWjE6qQQow==",
"dev": true,
"requires": {
"cssom": "0.3.x"
@@ -3498,16 +3908,10 @@
"array-find-index": "^1.0.1"
}
},
- "custom-event": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz",
- "integrity": "sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU=",
- "dev": true
- },
- "cycle": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz",
- "integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI=",
+ "cyclist": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-0.2.2.tgz",
+ "integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=",
"dev": true
},
"d": {
@@ -3546,61 +3950,32 @@
"abab": "^2.0.0",
"whatwg-mimetype": "^2.2.0",
"whatwg-url": "^7.0.0"
- },
- "dependencies": {
- "abab": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.0.tgz",
- "integrity": "sha512-sY5AXXVZv4Y1VACTtR11UJCPHHudgY5i26Qj5TypE6DKlIApbwb5uqhXcJ5UUGbvZNRh7EeIoW+LrJumBsKp7w==",
- "dev": true
- }
}
},
- "date-format": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/date-format/-/date-format-1.2.0.tgz",
- "integrity": "sha1-YV6CjiM90aubua4JUODOzPpuytg=",
- "dev": true
- },
"date-now": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz",
"integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=",
"dev": true
},
- "date-time": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/date-time/-/date-time-2.1.0.tgz",
- "integrity": "sha512-/9+C44X7lot0IeiyfgJmETtRMhBidBYM2QFFIkGa0U1k+hSyY87Nw7PY3eDqpvCBm7I3WCSfPeZskW/YYq6m4g==",
- "dev": true,
- "requires": {
- "time-zone": "^1.0.0"
- }
+ "dateformat": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz",
+ "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==",
+ "dev": true
},
"debug": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
- "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
- "requires": {
- "ms": "2.0.0"
- }
- },
- "debug-fabulous": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/debug-fabulous/-/debug-fabulous-1.1.0.tgz",
- "integrity": "sha512-GZqvGIgKNlUnHUPQhepnUZFIMoi3dgZKQBzKDeL2g7oJF9SNAji/AAu36dusFUas0O+pae74lNeoIPHqXWDkLg==",
- "dev": true,
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
"requires": {
- "debug": "3.X",
- "memoizee": "0.4.X",
- "object-assign": "4.X"
+ "ms": "^2.1.1"
}
},
"decamelize": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
- "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
- "dev": true
+ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA="
},
"decamelize-keys": {
"version": "1.1.0",
@@ -3615,7 +3990,21 @@
"decode-uri-component": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
- "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
+ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU="
+ },
+ "deep-eql": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz",
+ "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==",
+ "dev": true,
+ "requires": {
+ "type-detect": "^4.0.0"
+ }
+ },
+ "deep-equal": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz",
+ "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=",
"dev": true
},
"deep-extend": {
@@ -3653,38 +4042,19 @@
"integrity": "sha1-vLgrqnKtebQmp2cy8aga1t8m1oQ=",
"dev": true
},
- "deferred-leveldown": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-0.2.0.tgz",
- "integrity": "sha1-LO8fER4cV4cNi7uK8mUOWHzS9bQ=",
- "dev": true,
- "requires": {
- "abstract-leveldown": "~0.12.1"
- }
- },
"define-properties": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.2.tgz",
- "integrity": "sha1-g6c/L+pWmJj7c3GTyPhzyvbUXJQ=",
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
+ "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
"dev": true,
"requires": {
- "foreach": "^2.0.5",
- "object-keys": "^1.0.8"
- },
- "dependencies": {
- "object-keys": {
- "version": "1.0.12",
- "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.12.tgz",
- "integrity": "sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag==",
- "dev": true
- }
+ "object-keys": "^1.0.12"
}
},
"define-property": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
"integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
- "dev": true,
"requires": {
"is-descriptor": "^1.0.2",
"isobject": "^3.0.1"
@@ -3694,7 +4064,6 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
"integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
- "dev": true,
"requires": {
"kind-of": "^6.0.0"
}
@@ -3703,7 +4072,6 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
"integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
- "dev": true,
"requires": {
"kind-of": "^6.0.0"
}
@@ -3712,7 +4080,6 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
"integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
- "dev": true,
"requires": {
"is-accessor-descriptor": "^1.0.0",
"is-data-descriptor": "^1.0.0",
@@ -3721,30 +4088,55 @@
}
}
},
- "defined": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz",
- "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=",
- "dev": true
- },
"del": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/del/-/del-3.0.0.tgz",
- "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=",
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz",
+ "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==",
"dev": true,
"requires": {
+ "@types/glob": "^7.1.1",
"globby": "^6.1.0",
- "is-path-cwd": "^1.0.0",
- "is-path-in-cwd": "^1.0.0",
- "p-map": "^1.1.1",
- "pify": "^3.0.0",
- "rimraf": "^2.2.8"
+ "is-path-cwd": "^2.0.0",
+ "is-path-in-cwd": "^2.0.0",
+ "p-map": "^2.0.0",
+ "pify": "^4.0.1",
+ "rimraf": "^2.6.3"
+ },
+ "dependencies": {
+ "globby": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz",
+ "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=",
+ "dev": true,
+ "requires": {
+ "array-union": "^1.0.1",
+ "glob": "^7.0.3",
+ "object-assign": "^4.0.1",
+ "pify": "^2.0.0",
+ "pinkie-promise": "^2.0.0"
+ },
+ "dependencies": {
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "dev": true
+ }
+ }
+ },
+ "pify": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
+ "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
+ "dev": true
+ }
}
},
"delayed-stream": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
- "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
+ "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
+ "dev": true
},
"depd": {
"version": "1.1.2",
@@ -3752,18 +4144,6 @@
"integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=",
"dev": true
},
- "deps-sort": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/deps-sort/-/deps-sort-2.0.0.tgz",
- "integrity": "sha1-CRckkC6EZYJg65EHSMzNGvbiH7U=",
- "dev": true,
- "requires": {
- "JSONStream": "^1.0.3",
- "shasum": "^1.0.0",
- "subarg": "^1.0.0",
- "through2": "^2.0.0"
- }
- },
"des.js": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz",
@@ -3786,32 +4166,27 @@
"integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=",
"dev": true
},
+ "detect-indent": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.0.0.tgz",
+ "integrity": "sha512-oSyFlqaTHCItVRGK5RmrmjB+CmaMOW7IaNA/kdxqhoa6d17j/5ce9O9eWXmV/KEdRwqpQA+Vqe8a8Bsybu4YnA==",
+ "dev": true
+ },
"detect-newline": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz",
"integrity": "sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I=",
"dev": true
},
- "detective": {
- "version": "4.7.1",
- "resolved": "https://registry.npmjs.org/detective/-/detective-4.7.1.tgz",
- "integrity": "sha512-H6PmeeUcZloWtdt4DAkFyzFL94arpHr3NOwwmVILFiy+9Qd4JTxxXrzfyGk/lmct2qVGBwTSwSXagqu2BxmWig==",
- "dev": true,
- "requires": {
- "acorn": "^5.2.1",
- "defined": "^1.0.0"
- }
- },
- "di": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz",
- "integrity": "sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw=",
- "dev": true
- },
"diff": {
"version": "3.5.0",
"resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz",
- "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==",
+ "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA=="
+ },
+ "diff-sequences": {
+ "version": "24.3.0",
+ "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-24.3.0.tgz",
+ "integrity": "sha512-xLqpez+Zj9GKSnPWS0WZw1igGocZ+uua8+y+5dDNTT934N3QuY1sp2LkHzwiaYQGz60hMq0pjAshdeXm5VUOEw==",
"dev": true
},
"diffie-hellman": {
@@ -3829,18 +4204,11 @@
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.0.0.tgz",
"integrity": "sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag==",
- "dev": true,
"requires": {
"arrify": "^1.0.1",
"path-type": "^3.0.0"
}
},
- "director": {
- "version": "1.2.8",
- "resolved": "https://registry.npmjs.org/director/-/director-1.2.8.tgz",
- "integrity": "sha1-xtm03YkOmv9TZRg/6cyOc5lM8tU=",
- "dev": true
- },
"doctrine": {
"version": "0.7.2",
"resolved": "https://registry.npmjs.org/doctrine/-/doctrine-0.7.2.tgz",
@@ -3865,22 +4233,10 @@
}
}
},
- "dom-serialize": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz",
- "integrity": "sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs=",
- "dev": true,
- "requires": {
- "custom-event": "~1.0.0",
- "ent": "~2.2.0",
- "extend": "^3.0.0",
- "void-elements": "^2.0.0"
- }
- },
"domain-browser": {
- "version": "1.1.7",
- "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.1.7.tgz",
- "integrity": "sha1-hnqksJP6oF8d4IwG9NeyH9+GmLw=",
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz",
+ "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==",
"dev": true
},
"domexception": {
@@ -3902,62 +4258,88 @@
}
},
"dotenv": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-4.0.0.tgz",
- "integrity": "sha1-hk7xN5rO1Vzm+V3r7NzhefegzR0=",
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.0.0.tgz",
+ "integrity": "sha512-30xVGqjLjiUOArT4+M5q9sYdvuR4riM6yK9wMcas9Vbp6zZa+ocC9dp6QoftuhTPhFAiLK/0C5Ni2nou/Bk8lg==",
"dev": true
},
"dotgitignore": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/dotgitignore/-/dotgitignore-1.0.3.tgz",
- "integrity": "sha512-eu5XjSstm0WXQsARgo6kPjkINYZlOUW+z/KtAAIBjHa5mUpMPrxJytbPIndWz6GubBuuuH5ljtVcXKnVnH5q8w==",
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/dotgitignore/-/dotgitignore-2.1.0.tgz",
+ "integrity": "sha512-sCm11ak2oY6DglEPpCB8TixLjWAxd3kJTs6UIcSasNYxXdFPV+YKlye92c8H4kKFqV5qYMIh7d+cYecEg0dIkA==",
"dev": true,
"requires": {
- "find-up": "^2.1.0",
+ "find-up": "^3.0.0",
"minimatch": "^3.0.4"
},
"dependencies": {
"find-up": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
- "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
+ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
+ "dev": true,
+ "requires": {
+ "locate-path": "^3.0.0"
+ }
+ },
+ "locate-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
+ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
+ "dev": true,
+ "requires": {
+ "p-locate": "^3.0.0",
+ "path-exists": "^3.0.0"
+ }
+ },
+ "p-limit": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz",
+ "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==",
"dev": true,
"requires": {
- "locate-path": "^2.0.0"
+ "p-try": "^2.0.0"
+ }
+ },
+ "p-locate": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
+ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
+ "dev": true,
+ "requires": {
+ "p-limit": "^2.0.0"
}
+ },
+ "p-try": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
+ "dev": true
}
}
},
- "duplexer2": {
+ "duplexer": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz",
+ "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=",
+ "dev": true
+ },
+ "duplexer3": {
"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"
- }
+ "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz",
+ "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=",
+ "dev": true
},
"duplexify": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.6.0.tgz",
- "integrity": "sha512-fO3Di4tBKJpYTFHAxTU00BcfWMY9w24r/x21a6rZRbsD/ToUgGxsMbiGRmB7uVAXeGKXD9MwiLZa5E97EVgIRQ==",
+ "version": "3.7.1",
+ "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz",
+ "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==",
"dev": true,
"requires": {
"end-of-stream": "^1.0.0",
"inherits": "^2.0.1",
"readable-stream": "^2.0.0",
"stream-shift": "^1.0.0"
- },
- "dependencies": {
- "end-of-stream": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz",
- "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==",
- "dev": true,
- "requires": {
- "once": "^1.4.0"
- }
- }
}
},
"each-props": {
@@ -3971,13 +4353,13 @@
}
},
"ecc-jsbn": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz",
- "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=",
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
+ "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
"dev": true,
- "optional": true,
"requires": {
- "jsbn": "~0.1.0"
+ "jsbn": "~0.1.0",
+ "safer-buffer": "^2.1.0"
}
},
"editions": {
@@ -3992,80 +4374,22 @@
"integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=",
"dev": true
},
- "electron": {
- "version": "3.0.6",
- "resolved": "https://registry.npmjs.org/electron/-/electron-3.0.6.tgz",
- "integrity": "sha512-MqwvA6IM0IDvUgPo/zHasmLMn3eYhMJ2I0qTNfQtxwqdoo762UlFS+upmMgcnCXPcGMGDWi3wtZhNir9nEw1kA==",
- "dev": true,
- "requires": {
- "@types/node": "^8.0.24",
- "electron-download": "^4.1.0",
- "extract-zip": "^1.0.3"
- },
- "dependencies": {
- "@types/node": {
- "version": "8.10.36",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.36.tgz",
- "integrity": "sha512-SL6KhfM7PTqiFmbCW3eVNwVBZ+88Mrzbuvn9olPsfv43mbiWaFY+nRcz/TGGku0/lc2FepdMbImdMY1JrQ+zbw==",
- "dev": true
- }
- }
- },
- "electron-download": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/electron-download/-/electron-download-4.1.1.tgz",
- "integrity": "sha512-FjEWG9Jb/ppK/2zToP+U5dds114fM1ZOJqMAR4aXXL5CvyPE9fiqBK/9YcwC9poIFQTEJk/EM/zyRwziziRZrg==",
- "dev": true,
- "requires": {
- "debug": "^3.0.0",
- "env-paths": "^1.0.0",
- "fs-extra": "^4.0.1",
- "minimist": "^1.2.0",
- "nugget": "^2.0.1",
- "path-exists": "^3.0.0",
- "rc": "^1.2.1",
- "semver": "^5.4.1",
- "sumchecker": "^2.0.2"
- },
- "dependencies": {
- "fs-extra": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz",
- "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "jsonfile": "^4.0.0",
- "universalify": "^0.1.0"
- }
- },
- "jsonfile": {
- "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.6"
- }
- },
- "path-exists": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
- "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
- "dev": true
- }
- }
+ "ejs": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.6.1.tgz",
+ "integrity": "sha512-0xy4A/twfrRCnkhfk8ErDi5DqdAsAqeGxht4xkCUrsvhhbQNs7E+4jV0CN7+NKIY0aHE72+XvqtBIXzD31ZbXQ==",
+ "dev": true
},
"electron-to-chromium": {
- "version": "1.3.116",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.116.tgz",
- "integrity": "sha512-NKwKAXzur5vFCZYBHpdWjTMO8QptNLNP80nItkSIgUOapPAo9Uia+RvkCaZJtO7fhQaVElSvBPWEc2ku6cKsPA==",
+ "version": "1.3.133",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.133.tgz",
+ "integrity": "sha512-lyoC8aoqbbDqsprb6aPdt9n3DpOZZzdz/T4IZKsR0/dkZIxnJVUjjcpOSwA66jPRIOyDAamCTAUqweU05kKNSg==",
"dev": true
},
"elliptic": {
- "version": "6.4.0",
- "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz",
- "integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=",
+ "version": "6.4.1",
+ "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.1.tgz",
+ "integrity": "sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ==",
"dev": true,
"requires": {
"bn.js": "^4.4.0",
@@ -4077,6 +4401,24 @@
"minimalistic-crypto-utils": "^1.0.0"
}
},
+ "email-addresses": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/email-addresses/-/email-addresses-3.0.3.tgz",
+ "integrity": "sha512-kUlSC06PVvvjlMRpNIl3kR1NRXLEe86VQ7N0bQeaCZb2g+InShCeHQp/JvyYNTugMnRN2NvJhHlc3q12MWbbpg==",
+ "dev": true
+ },
+ "emoji-regex": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
+ "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
+ "dev": true
+ },
+ "emojis-list": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz",
+ "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=",
+ "dev": true
+ },
"encodeurl": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
@@ -4092,90 +4434,17 @@
"once": "^1.4.0"
}
},
- "engine.io": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.2.1.tgz",
- "integrity": "sha512-+VlKzHzMhaU+GsCIg4AoXF1UdDFjHHwMmMKqMJNDNLlUlejz58FCy4LBqB2YVJskHGYl06BatYWKP2TVdVXE5w==",
- "dev": true,
- "requires": {
- "accepts": "~1.3.4",
- "base64id": "1.0.0",
- "cookie": "0.3.1",
- "debug": "~3.1.0",
- "engine.io-parser": "~2.1.0",
- "ws": "~3.3.1"
- },
- "dependencies": {
- "ws": {
- "version": "3.3.3",
- "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz",
- "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==",
- "dev": true,
- "requires": {
- "async-limiter": "~1.0.0",
- "safe-buffer": "~5.1.0",
- "ultron": "~1.1.0"
- }
- }
- }
- },
- "engine.io-client": {
- "version": "3.2.1",
- "resolved": "http://registry.npmjs.org/engine.io-client/-/engine.io-client-3.2.1.tgz",
- "integrity": "sha512-y5AbkytWeM4jQr7m/koQLc5AxpRKC1hEVUb/s1FUAWEJq5AzJJ4NLvzuKPuxtDi5Mq755WuDvZ6Iv2rXj4PTzw==",
- "dev": true,
- "requires": {
- "component-emitter": "1.2.1",
- "component-inherit": "0.0.3",
- "debug": "~3.1.0",
- "engine.io-parser": "~2.1.1",
- "has-cors": "1.1.0",
- "indexof": "0.0.1",
- "parseqs": "0.0.5",
- "parseuri": "0.0.5",
- "ws": "~3.3.1",
- "xmlhttprequest-ssl": "~1.5.4",
- "yeast": "0.1.2"
- },
- "dependencies": {
- "ws": {
- "version": "3.3.3",
- "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz",
- "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==",
- "dev": true,
- "requires": {
- "async-limiter": "~1.0.0",
- "safe-buffer": "~5.1.0",
- "ultron": "~1.1.0"
- }
- }
- }
- },
- "engine.io-parser": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.3.tgz",
- "integrity": "sha512-6HXPre2O4Houl7c4g7Ic/XzPnHBvaEmN90vtRO9uLmwtRqQmTOw0QMevL1TOfL2Cpu1VzsaTmMotQgMdkzGkVA==",
+ "enhanced-resolve": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz",
+ "integrity": "sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==",
"dev": true,
"requires": {
- "after": "0.8.2",
- "arraybuffer.slice": "~0.0.7",
- "base64-arraybuffer": "0.1.5",
- "blob": "0.0.5",
- "has-binary2": "~1.0.2"
+ "graceful-fs": "^4.1.2",
+ "memory-fs": "^0.4.0",
+ "tapable": "^1.0.0"
}
},
- "ent": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz",
- "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=",
- "dev": true
- },
- "env-paths": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-1.0.0.tgz",
- "integrity": "sha1-QWgTO0K7BcOKNbGuQ5fIKYqzaeA=",
- "dev": true
- },
"envify": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/envify/-/envify-4.1.0.tgz",
@@ -4205,16 +4474,17 @@
}
},
"es-abstract": {
- "version": "1.12.0",
- "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.12.0.tgz",
- "integrity": "sha512-C8Fx/0jFmV5IPoMOFPA9P9G5NtqW+4cOPit3MIuvR2t7Ag2K15EJTpxnHAYTzL+aYQJIESYeXZmDBfOBE1HcpA==",
+ "version": "1.13.0",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz",
+ "integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==",
"dev": true,
"requires": {
- "es-to-primitive": "^1.1.1",
+ "es-to-primitive": "^1.2.0",
"function-bind": "^1.1.1",
- "has": "^1.0.1",
- "is-callable": "^1.1.3",
- "is-regex": "^1.0.4"
+ "has": "^1.0.3",
+ "is-callable": "^1.1.4",
+ "is-regex": "^1.0.4",
+ "object-keys": "^1.0.12"
}
},
"es-to-primitive": {
@@ -4229,14 +4499,14 @@
}
},
"es5-ext": {
- "version": "0.10.45",
- "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.45.tgz",
- "integrity": "sha512-FkfM6Vxxfmztilbxxz5UKSD4ICMf5tSpRFtDNtkAhOxZ0EKtX6qwmXNyH/sFyIbX2P/nU5AMiA9jilWsUGJzCQ==",
+ "version": "0.10.50",
+ "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.50.tgz",
+ "integrity": "sha512-KMzZTPBkeQV/JcSQhI5/z6d9VWJ3EnQ194USTUwIYZ2ZbpN8+SGXQKt1h68EX44+qt+Fzr8DO17vnxrw7c3agw==",
"dev": true,
"requires": {
"es6-iterator": "~2.0.3",
"es6-symbol": "~3.1.1",
- "next-tick": "1"
+ "next-tick": "^1.0.0"
}
},
"es6-iterator": {
@@ -4251,9 +4521,9 @@
}
},
"es6-promise": {
- "version": "4.2.5",
- "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.5.tgz",
- "integrity": "sha512-n6wvpdE43VFtJq+lUDYDBFUwV8TZbuGXLV4D6wKafg13ldznKsyEvatubnmUe31zcvelSzOHF+XbaT+Bl9ObDg==",
+ "version": "4.2.6",
+ "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.6.tgz",
+ "integrity": "sha512-aRVgGdnmW2OiySVPUC9e6m+plolMAJKjZnQlCwNSuK5yQ0JN61DZSO1X1Ufd1foqWRAlig0rhduTCHe7sVtK5Q==",
"dev": true
},
"es6-promisify": {
@@ -4302,13 +4572,12 @@
"escape-string-regexp": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
- "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
- "dev": true
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
},
"escodegen": {
- "version": "1.11.0",
- "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.11.0.tgz",
- "integrity": "sha512-IeMV45ReixHS53K/OmfKAIztN/igDHzTJUhZM3k1jMhIZWjk45SMwAtBsEXiJp3vSPmTcu6CXn7mDvFHRN66fw==",
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.11.1.tgz",
+ "integrity": "sha512-JwiqFD9KdGVVpeuRa68yU3zZnBEOcPs0nKW7wZzXky8Z7tffdYUHbe11bPCV5jYlK6DVdKLWLm0f5I/QlL0Kmw==",
"dev": true,
"requires": {
"esprima": "^3.1.3",
@@ -4333,11 +4602,29 @@
}
}
},
- "esprima": {
- "version": "4.0.1",
+ "eslint-scope": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz",
+ "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==",
+ "dev": true,
+ "requires": {
+ "esrecurse": "^4.1.0",
+ "estraverse": "^4.1.1"
+ }
+ },
+ "esprima": {
+ "version": "4.0.1",
"resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
- "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
- "dev": true
+ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A=="
+ },
+ "esrecurse": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz",
+ "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==",
+ "dev": true,
+ "requires": {
+ "estraverse": "^4.1.0"
+ }
},
"estraverse": {
"version": "4.2.0",
@@ -4345,17 +4632,10 @@
"integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
"dev": true
},
- "estree-walker": {
- "version": "0.5.2",
- "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.5.2.tgz",
- "integrity": "sha512-XpCnW/AE10ws/kDAs37cngSkvgIR8aN3G0MS85m7dUpuK2EREo9VJ00uvw6Dg/hXEpfsE1I1TvJOJr+Z+TL+ig==",
- "dev": true
- },
"esutils": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
- "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
- "dev": true
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs="
},
"etag": {
"version": "1.8.1",
@@ -4363,21 +4643,10 @@
"integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=",
"dev": true
},
- "event-emitter": {
- "version": "0.3.5",
- "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz",
- "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=",
- "dev": true,
- "requires": {
- "d": "1",
- "es5-ext": "~0.10.14"
- }
- },
"eventemitter3": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.0.tgz",
- "integrity": "sha512-ivIvhpq/Y0uSjcHDcOIccjmYjGLcP09MFGE7ysAwkAvkXfpZlC985pH2/ui64DKazbTW/4kN3yqozUxlXzI6cA==",
- "dev": true
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.2.tgz",
+ "integrity": "sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q=="
},
"events": {
"version": "1.1.1",
@@ -4395,11 +4664,16 @@
"safe-buffer": "^5.1.1"
}
},
+ "exec-sh": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.2.tgz",
+ "integrity": "sha512-9sLAvzhI5nc8TpuQUh4ahMdCrWT00wPWz7j47/emR5+2qEfoZP5zzUXvx+vdx+H6ohhnsYC31iX04QLYJK8zTg==",
+ "dev": true
+ },
"execa": {
"version": "0.7.0",
"resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz",
"integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=",
- "dev": true,
"requires": {
"cross-spawn": "^5.0.1",
"get-stream": "^3.0.0",
@@ -4410,45 +4684,16 @@
"strip-eof": "^1.0.0"
}
},
- "expand-braces": {
+ "exit": {
"version": "0.1.2",
- "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.2"
- },
- "dependencies": {
- "array-slice": {
- "version": "0.2.3",
- "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz",
- "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU=",
- "dev": true
- },
- "array-unique": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz",
- "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=",
- "dev": true
- },
- "braces": {
- "version": "0.1.5",
- "resolved": "https://registry.npmjs.org/braces/-/braces-0.1.5.tgz",
- "integrity": "sha1-wIVxEIUpHYt1/ddOqw+FlygHEeY=",
- "dev": true,
- "requires": {
- "expand-range": "^0.1.0"
- }
- }
- }
+ "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz",
+ "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=",
+ "dev": true
},
"expand-brackets": {
"version": "2.1.4",
"resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
"integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
- "dev": true,
"requires": {
"debug": "^2.3.3",
"define-property": "^0.2.5",
@@ -4463,7 +4708,6 @@
"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"
}
@@ -4472,7 +4716,6 @@
"version": "0.2.5",
"resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
"integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
- "dev": true,
"requires": {
"is-descriptor": "^0.1.0"
}
@@ -4481,34 +4724,14 @@
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
"integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
"requires": {
"is-extendable": "^0.1.0"
}
- }
- }
- },
- "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,
- "requires": {
- "is-number": "^0.1.1",
- "repeat-string": "^0.2.2"
- },
- "dependencies": {
- "is-number": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-0.1.1.tgz",
- "integrity": "sha1-aaevEWlj1HIG7JvZtIoUIW8eOAY=",
- "dev": true
},
- "repeat-string": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-0.2.2.tgz",
- "integrity": "sha1-x6jTI2BoNiBZp+RlH8aITosftK4=",
- "dev": true
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
}
}
},
@@ -4521,6 +4744,20 @@
"homedir-polyfill": "^1.0.1"
}
},
+ "expect": {
+ "version": "24.8.0",
+ "resolved": "https://registry.npmjs.org/expect/-/expect-24.8.0.tgz",
+ "integrity": "sha512-/zYvP8iMDrzaaxHVa724eJBCKqSHmO0FA7EDkBiRHxg6OipmMn1fN+C8T9L9K8yr7UONkOifu6+LLH+z76CnaA==",
+ "dev": true,
+ "requires": {
+ "@jest/types": "^24.8.0",
+ "ansi-styles": "^3.2.0",
+ "jest-get-type": "^24.8.0",
+ "jest-matcher-utils": "^24.8.0",
+ "jest-message-util": "^24.8.0",
+ "jest-regex-util": "^24.3.0"
+ }
+ },
"express": {
"version": "4.16.4",
"resolved": "https://registry.npmjs.org/express/-/express-4.16.4.tgz",
@@ -4568,39 +4805,24 @@
"ms": "2.0.0"
}
},
- "finalhandler": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz",
- "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==",
- "dev": true,
- "requires": {
- "debug": "2.6.9",
- "encodeurl": "~1.0.2",
- "escape-html": "~1.0.3",
- "on-finished": "~2.3.0",
- "parseurl": "~1.3.2",
- "statuses": "~1.4.0",
- "unpipe": "~1.0.0"
- }
- },
- "statuses": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz",
- "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==",
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
"dev": true
}
}
},
"extend": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz",
- "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ="
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
+ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
+ "dev": true
},
"extend-shallow": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
"integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
- "dev": true,
"requires": {
"assign-symbols": "^1.0.0",
"is-extendable": "^1.0.1"
@@ -4610,7 +4832,6 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
"integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
- "dev": true,
"requires": {
"is-plain-object": "^2.0.4"
}
@@ -4621,7 +4842,6 @@
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
"integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
- "dev": true,
"requires": {
"array-unique": "^0.3.2",
"define-property": "^1.0.0",
@@ -4637,7 +4857,6 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
"integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
- "dev": true,
"requires": {
"is-descriptor": "^1.0.0"
}
@@ -4646,7 +4865,6 @@
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
"integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
"requires": {
"is-extendable": "^0.1.0"
}
@@ -4655,7 +4873,6 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
"integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
- "dev": true,
"requires": {
"kind-of": "^6.0.0"
}
@@ -4664,7 +4881,6 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
"integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
- "dev": true,
"requires": {
"kind-of": "^6.0.0"
}
@@ -4673,7 +4889,6 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
"integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
- "dev": true,
"requires": {
"is-accessor-descriptor": "^1.0.0",
"is-data-descriptor": "^1.0.0",
@@ -4682,53 +4897,12 @@
}
}
},
- "extract-zip": {
- "version": "1.6.7",
- "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.6.7.tgz",
- "integrity": "sha1-qEC0uK9kAyZMjbV/Txp0Mz74H+k=",
- "dev": true,
- "requires": {
- "concat-stream": "1.6.2",
- "debug": "2.6.9",
- "mkdirp": "0.5.1",
- "yauzl": "2.4.1"
- },
- "dependencies": {
- "concat-stream": {
- "version": "1.6.2",
- "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
- "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
- "dev": true,
- "requires": {
- "buffer-from": "^1.0.0",
- "inherits": "^2.0.3",
- "readable-stream": "^2.2.2",
- "typedarray": "^0.0.6"
- }
- },
- "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"
- }
- }
- }
- },
"extsprintf": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
"integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
"dev": true
},
- "eyes": {
- "version": "0.1.8",
- "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz",
- "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A=",
- "dev": true
- },
"fancy-log": {
"version": "1.3.3",
"resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.3.tgz",
@@ -4747,6 +4921,19 @@
"integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=",
"dev": true
},
+ "fast-glob": {
+ "version": "2.2.6",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.6.tgz",
+ "integrity": "sha512-0BvMaZc1k9F+MeWWMe8pL6YltFzZYcJsYU7D4JyDA6PAczaXvxqQQ/z+mDF7/4Mw01DeUc+i3CTKajnkANkV4w==",
+ "requires": {
+ "@mrmlnc/readdir-enhanced": "^2.2.1",
+ "@nodelib/fs.stat": "^1.1.2",
+ "glob-parent": "^3.1.0",
+ "is-glob": "^4.0.0",
+ "merge2": "^1.2.3",
+ "micromatch": "^3.1.10"
+ }
+ },
"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",
@@ -4759,35 +4946,34 @@
"integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
"dev": true
},
- "fd-slicer": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz",
- "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=",
+ "fb-watchman": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.0.tgz",
+ "integrity": "sha1-VOmr99+i8mzZsWNsWIwa/AXeXVg=",
"dev": true,
"requires": {
- "pend": "~1.2.0"
+ "bser": "^2.0.0"
}
},
+ "figgy-pudding": {
+ "version": "3.5.1",
+ "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.1.tgz",
+ "integrity": "sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w==",
+ "dev": true
+ },
"figures": {
- "version": "1.7.0",
- "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz",
- "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/figures/-/figures-3.0.0.tgz",
+ "integrity": "sha512-HKri+WoWoUgr83pehn/SIgLOMZ9nAWC6dcGj26RY2R4F50u4+RTUz0RCrUlOV3nKRAICW1UGzyb+kcX2qK1S/g==",
"dev": true,
"requires": {
- "escape-string-regexp": "^1.0.5",
- "object-assign": "^4.1.0"
+ "escape-string-regexp": "^1.0.5"
}
},
"file-type": {
- "version": "8.1.0",
- "resolved": "https://registry.npmjs.org/file-type/-/file-type-8.1.0.tgz",
- "integrity": "sha512-qyQ0pzAy78gVoJsmYeNgl8uH8yKhr1lVhW7JbzJmnlRi0I4R2eEDEJZVKG8agpDnLpacwNbDhLNG/LMdxHD2YQ=="
- },
- "filename-regex": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz",
- "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=",
- "dev": true
+ "version": "10.11.0",
+ "resolved": "https://registry.npmjs.org/file-type/-/file-type-10.11.0.tgz",
+ "integrity": "sha512-uzk64HRpUZyTGZtVuvrjP0FYxzQrBf4rojot6J65YMEbwBLB0CWm0CLojVpwpmFmxcE/lkvYICgfcGozbBq6rw=="
},
"filename-reserved-regex": {
"version": "1.0.0",
@@ -4816,6 +5002,12 @@
"humanize-url": "^1.0.0"
}
},
+ "filesize": {
+ "version": "3.6.1",
+ "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz",
+ "integrity": "sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg==",
+ "dev": true
+ },
"filestack-loader": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/filestack-loader/-/filestack-loader-3.0.4.tgz",
@@ -4825,7 +5017,6 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
"integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
- "dev": true,
"requires": {
"extend-shallow": "^2.0.1",
"is-number": "^3.0.0",
@@ -4837,31 +5028,24 @@
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
"integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
"requires": {
"is-extendable": "^0.1.0"
}
}
}
},
- "filled-array": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/filled-array/-/filled-array-1.1.0.tgz",
- "integrity": "sha1-w8T2xmO5I0WamqKZEtLQMfFQf4Q=",
- "dev": true
- },
"finalhandler": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz",
- "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=",
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz",
+ "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==",
"dev": true,
"requires": {
"debug": "2.6.9",
- "encodeurl": "~1.0.1",
+ "encodeurl": "~1.0.2",
"escape-html": "~1.0.3",
"on-finished": "~2.3.0",
"parseurl": "~1.3.2",
- "statuses": "~1.3.1",
+ "statuses": "~1.4.0",
"unpipe": "~1.0.0"
},
"dependencies": {
@@ -4873,6 +5057,41 @@
"requires": {
"ms": "2.0.0"
}
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ }
+ }
+ },
+ "find-cache-dir": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz",
+ "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==",
+ "dev": true,
+ "requires": {
+ "commondir": "^1.0.1",
+ "make-dir": "^2.0.0",
+ "pkg-dir": "^3.0.0"
+ },
+ "dependencies": {
+ "make-dir": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz",
+ "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==",
+ "dev": true,
+ "requires": {
+ "pify": "^4.0.1",
+ "semver": "^5.6.0"
+ }
+ },
+ "pify": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
+ "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
+ "dev": true
}
}
},
@@ -4883,13 +5102,11 @@
"dev": true
},
"find-up": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
- "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
- "dev": true,
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
+ "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
"requires": {
- "path-exists": "^2.0.0",
- "pinkie-promise": "^2.0.0"
+ "locate-path": "^2.0.0"
}
},
"findup": {
@@ -4902,12 +5119,6 @@
"commander": "~2.1.0"
},
"dependencies": {
- "colors": {
- "version": "0.6.2",
- "resolved": "https://registry.npmjs.org/colors/-/colors-0.6.2.tgz",
- "integrity": "sha1-JCP+ZnisDF2uiFLl0OW+CMmXq8w=",
- "dev": true
- },
"commander": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/commander/-/commander-2.1.0.tgz",
@@ -4917,21 +5128,21 @@
}
},
"findup-sync": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz",
- "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz",
+ "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==",
"dev": true,
"requires": {
"detect-file": "^1.0.0",
- "is-glob": "^3.1.0",
+ "is-glob": "^4.0.0",
"micromatch": "^3.0.4",
"resolve-dir": "^1.0.1"
}
},
"fined": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/fined/-/fined-1.1.1.tgz",
- "integrity": "sha512-jQp949ZmEbiYHk3gkbdtpJ0G1+kgtLQBNdP5edFP7Fh+WAYceLQz6yO1SBj72Xkg8GVyTB3bBzAYrHJVh5Xd5g==",
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/fined/-/fined-1.2.0.tgz",
+ "integrity": "sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng==",
"dev": true,
"requires": {
"expand-tilde": "^2.0.2",
@@ -4948,29 +5159,37 @@
"dev": true
},
"flush-write-stream": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.0.3.tgz",
- "integrity": "sha512-calZMC10u0FMUqoiunI2AiGIIUtUIvifNwkHhNupZH4cbNnW1Itkoh/Nf5HFYmDrwWPjrUxpkZT0KhuCq0jmGw==",
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz",
+ "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==",
"dev": true,
"requires": {
- "inherits": "^2.0.1",
- "readable-stream": "^2.0.4"
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.3.6"
}
},
"follow-redirects": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.1.tgz",
- "integrity": "sha512-v9GI1hpaqq1ZZR6pBD1+kI7O24PhDvNGNodjS3MdcEqyrahCp8zbtpv+2B/krUnSmUH80lbAS7MrdeK5IylgKg==",
- "dev": true,
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.7.0.tgz",
+ "integrity": "sha512-m/pZQy4Gj287eNy94nivy5wchN3Kp+Q5WgUPNy5lJSZ3sgkVKSYV/ZChMAQVIgx1SqfZ2zBZtPA2YlXIWxxJOQ==",
"requires": {
- "debug": "^3.1.0"
+ "debug": "^3.2.6"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "3.2.6",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
+ "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ }
}
},
"for-in": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
- "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
- "dev": true
+ "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA="
},
"for-own": {
"version": "1.0.0",
@@ -4981,12 +5200,6 @@
"for-in": "^1.0.1"
}
},
- "foreach": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz",
- "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=",
- "dev": true
- },
"forever-agent": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
@@ -4994,37 +5207,26 @@
"dev": true
},
"form-data": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz",
- "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=",
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
+ "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
+ "dev": true,
"requires": {
"asynckit": "^0.4.0",
- "combined-stream": "1.0.6",
+ "combined-stream": "^1.0.6",
"mime-types": "^2.1.12"
}
},
- "formidable": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.1.tgz",
- "integrity": "sha512-Fs9VRguL0gqGHkXS5GQiMCr1VhZBxz0JnJs4JmMp/2jL18Fmbzvv7vOFRU+U8TBkHEE/CX1qDXzJplVULgsLeg=="
- },
"forwarded": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
"integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=",
"dev": true
},
- "forwarded-for": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/forwarded-for/-/forwarded-for-1.0.1.tgz",
- "integrity": "sha1-59pIFAJRaP/AoQ0/954UFfRq9Gk=",
- "dev": true
- },
"fragment-cache": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
"integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
- "dev": true,
"requires": {
"map-cache": "^0.2.2"
}
@@ -5035,6 +5237,16 @@
"integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=",
"dev": true
},
+ "from2": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz",
+ "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "readable-stream": "^2.0.0"
+ }
+ },
"fs-access": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/fs-access/-/fs-access-1.0.1.tgz",
@@ -5045,25 +5257,24 @@
}
},
"fs-extra": {
- "version": "0.30.0",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz",
- "integrity": "sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A=",
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz",
+ "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==",
"dev": true,
"requires": {
"graceful-fs": "^4.1.2",
- "jsonfile": "^2.1.0",
- "klaw": "^1.0.0",
- "path-is-absolute": "^1.0.0",
- "rimraf": "^2.2.8"
+ "jsonfile": "^4.0.0",
+ "universalify": "^0.1.0"
}
},
"fs-jetpack": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/fs-jetpack/-/fs-jetpack-2.2.0.tgz",
- "integrity": "sha512-d/fqY4pRhtKPEDyMz3sfx4ZBeWY6fV9b0E07fvI/k2oHwOYfFzCGe6yYuIHea7568dqIb1oEzzsGpZFQwGq+7Q==",
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/fs-jetpack/-/fs-jetpack-2.2.2.tgz",
+ "integrity": "sha512-USJrUxck7SIXSvYPzU5fuR5iqLHRDSzb0kHvCJlQhUGEVai3P9yZDu/2b+bAzprbWLCc2YcslxBLBUInDmYkYA==",
"dev": true,
"requires": {
- "minimatch": "^3.0.2"
+ "minimatch": "^3.0.2",
+ "rimraf": "^2.6.3"
}
},
"fs-mkdirp-stream": {
@@ -5076,16 +5287,27 @@
"through2": "^2.0.3"
}
},
+ "fs-write-stream-atomic": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz",
+ "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "iferr": "^0.1.5",
+ "imurmurhash": "^0.1.4",
+ "readable-stream": "1 || 2"
+ }
+ },
"fs.realpath": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
- "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
- "dev": true
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
},
"fsevents": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.4.tgz",
- "integrity": "sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg==",
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.7.tgz",
+ "integrity": "sha512-Pxm6sI2MeBD7RdD12RYsqaP0nMiwx8eZBXCa6z2L+mRHm2DYrOYwihmhjpkdjUHwQhslWQjRpEgNq4XvBmaAuw==",
"dev": true,
"optional": true,
"requires": {
@@ -5104,7 +5326,8 @@
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
"integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
- "dev": true
+ "dev": true,
+ "optional": true
},
"aproba": {
"version": "1.2.0",
@@ -5114,9 +5337,9 @@
"optional": true
},
"are-we-there-yet": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz",
- "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=",
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz",
+ "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==",
"dev": true,
"optional": true,
"requires": {
@@ -5128,22 +5351,24 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
"integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
- "dev": true
+ "dev": true,
+ "optional": true
},
"brace-expansion": {
"version": "1.1.11",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
"dev": true,
+ "optional": true,
"requires": {
"balanced-match": "^1.0.0",
"concat-map": "0.0.1"
}
},
"chownr": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.0.1.tgz",
- "integrity": "sha1-4qdQQqlVGQi+vSW4Uj1fl2nXkYE=",
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz",
+ "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==",
"dev": true,
"optional": true
},
@@ -5151,19 +5376,22 @@
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
"integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
- "dev": true
+ "dev": true,
+ "optional": true
},
"concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
"integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
- "dev": true
+ "dev": true,
+ "optional": true
},
"console-control-strings": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
"integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=",
- "dev": true
+ "dev": true,
+ "optional": true
},
"core-util-is": {
"version": "1.0.2",
@@ -5183,9 +5411,9 @@
}
},
"deep-extend": {
- "version": "0.5.1",
- "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.1.tgz",
- "integrity": "sha512-N8vBdOa+DF7zkRrDCsaOXoCs/E2fJfx9B9MrKnnSiHNh4ws7eSys6YQE4KvT1cecKmOASYQBhbKjeuDD9lT81w==",
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
+ "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
"dev": true,
"optional": true
},
@@ -5238,9 +5466,9 @@
}
},
"glob": {
- "version": "7.1.2",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
- "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+ "version": "7.1.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz",
+ "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
"dev": true,
"optional": true,
"requires": {
@@ -5260,13 +5488,13 @@
"optional": true
},
"iconv-lite": {
- "version": "0.4.21",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.21.tgz",
- "integrity": "sha512-En5V9za5mBt2oUA03WGD3TwDv0MKAruqsuxstbMUZaj9W9k/m1CV/9py3l0L5kw9Bln8fdHQmzHSYtvpvTLpKw==",
+ "version": "0.4.24",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
+ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
"dev": true,
"optional": true,
"requires": {
- "safer-buffer": "^2.1.0"
+ "safer-buffer": ">= 2.1.2 < 3"
}
},
"ignore-walk": {
@@ -5294,8 +5522,9 @@
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
"integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
- "dev": true
- },
+ "dev": true,
+ "optional": true
+ },
"ini": {
"version": "1.3.5",
"resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
@@ -5308,6 +5537,7 @@
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
"integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
"dev": true,
+ "optional": true,
"requires": {
"number-is-nan": "^1.0.0"
}
@@ -5324,6 +5554,7 @@
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
"integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
"dev": true,
+ "optional": true,
"requires": {
"brace-expansion": "^1.1.7"
}
@@ -5332,22 +5563,24 @@
"version": "0.0.8",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
"integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
- "dev": true
+ "dev": true,
+ "optional": true
},
"minipass": {
- "version": "2.2.4",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.2.4.tgz",
- "integrity": "sha512-hzXIWWet/BzWhYs2b+u7dRHlruXhwdgvlTMDKC6Cb1U7ps6Ac6yQlR39xsbjWJE377YTCtKwIXIpJ5oP+j5y8g==",
+ "version": "2.3.5",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.3.5.tgz",
+ "integrity": "sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==",
"dev": true,
+ "optional": true,
"requires": {
- "safe-buffer": "^5.1.1",
+ "safe-buffer": "^5.1.2",
"yallist": "^3.0.0"
}
},
"minizlib": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.1.0.tgz",
- "integrity": "sha512-4T6Ur/GctZ27nHfpt9THOdRZNgyJ9FZchYO1ceg5S8Q3DNLCKYy44nCZzgCJgcvx2UM8czmqak5BCxJMrq37lA==",
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.2.1.tgz",
+ "integrity": "sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA==",
"dev": true,
"optional": true,
"requires": {
@@ -5359,6 +5592,7 @@
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
"integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
"dev": true,
+ "optional": true,
"requires": {
"minimist": "0.0.8"
}
@@ -5371,9 +5605,9 @@
"optional": true
},
"needle": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/needle/-/needle-2.2.0.tgz",
- "integrity": "sha512-eFagy6c+TYayorXw/qtAdSvaUpEbBsDwDyxYFgLZ0lTojfH7K+OdBqAF7TAFwDokJaGpubpSGG0wO3iC0XPi8w==",
+ "version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/needle/-/needle-2.2.4.tgz",
+ "integrity": "sha512-HyoqEb4wr/rsoaIDfTH2aVL9nWtQqba2/HvMv+++m8u0dz808MaagKILxtfeSN7QU7nvbQ79zk3vYOJp9zsNEA==",
"dev": true,
"optional": true,
"requires": {
@@ -5383,19 +5617,19 @@
}
},
"node-pre-gyp": {
- "version": "0.10.0",
- "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.10.0.tgz",
- "integrity": "sha512-G7kEonQLRbcA/mOoFoxvlMrw6Q6dPf92+t/l0DFSMuSlDoWaI9JWIyPwK0jyE1bph//CUEL65/Fz1m2vJbmjQQ==",
+ "version": "0.10.3",
+ "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.10.3.tgz",
+ "integrity": "sha512-d1xFs+C/IPS8Id0qPTZ4bUT8wWryfR/OzzAFxweG+uLN85oPzyo2Iw6bVlLQ/JOdgNonXLCoRyqDzDWq4iw72A==",
"dev": true,
"optional": true,
"requires": {
"detect-libc": "^1.0.2",
"mkdirp": "^0.5.1",
- "needle": "^2.2.0",
+ "needle": "^2.2.1",
"nopt": "^4.0.1",
"npm-packlist": "^1.1.6",
"npmlog": "^4.0.2",
- "rc": "^1.1.7",
+ "rc": "^1.2.7",
"rimraf": "^2.6.1",
"semver": "^5.3.0",
"tar": "^4"
@@ -5413,16 +5647,16 @@
}
},
"npm-bundled": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.0.3.tgz",
- "integrity": "sha512-ByQ3oJ/5ETLyglU2+8dBObvhfWXX8dtPZDMePCahptliFX2iIuhyEszyFk401PZUNQH20vvdW5MLjJxkwU80Ow==",
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.0.5.tgz",
+ "integrity": "sha512-m/e6jgWu8/v5niCUKQi9qQl8QdeEduFA96xHDDzFGqly0OOjI7c+60KM/2sppfnUU9JJagf+zs+yGhqSOFj71g==",
"dev": true,
"optional": true
},
"npm-packlist": {
- "version": "1.1.10",
- "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.1.10.tgz",
- "integrity": "sha512-AQC0Dyhzn4EiYEfIUjCdMl0JJ61I2ER9ukf/sLxJUcZHfo+VyEfz2rMJgLZSS1v30OxPQe1cN0LZA1xbcaVfWA==",
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.2.0.tgz",
+ "integrity": "sha512-7Mni4Z8Xkx0/oegoqlcao/JpPCPEMtUvsmB0q7mgvlMinykJLSRTYuFqoQLYgGY8biuxIeiHO+QNJKbCfljewQ==",
"dev": true,
"optional": true,
"requires": {
@@ -5447,7 +5681,8 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
"integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
- "dev": true
+ "dev": true,
+ "optional": true
},
"object-assign": {
"version": "4.1.1",
@@ -5461,6 +5696,7 @@
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
"dev": true,
+ "optional": true,
"requires": {
"wrappy": "1"
}
@@ -5505,13 +5741,13 @@
"optional": true
},
"rc": {
- "version": "1.2.7",
- "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.7.tgz",
- "integrity": "sha512-LdLD8xD4zzLsAT5xyushXDNscEjB7+2ulnl8+r1pnESlYtlJtVSoCMBGr30eDRJ3+2Gq89jK9P9e4tCEH1+ywA==",
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
+ "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
"dev": true,
"optional": true,
"requires": {
- "deep-extend": "^0.5.1",
+ "deep-extend": "^0.6.0",
"ini": "~1.3.0",
"minimist": "^1.2.0",
"strip-json-comments": "~2.0.1"
@@ -5543,20 +5779,21 @@
}
},
"rimraf": {
- "version": "2.6.2",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz",
- "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==",
+ "version": "2.6.3",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
+ "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
"dev": true,
"optional": true,
"requires": {
- "glob": "^7.0.5"
+ "glob": "^7.1.3"
}
},
"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
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true,
+ "optional": true
},
"safer-buffer": {
"version": "2.1.2",
@@ -5573,9 +5810,9 @@
"optional": true
},
"semver": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz",
- "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==",
+ "version": "5.6.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz",
+ "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==",
"dev": true,
"optional": true
},
@@ -5598,6 +5835,7 @@
"resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
"integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
"dev": true,
+ "optional": true,
"requires": {
"code-point-at": "^1.0.0",
"is-fullwidth-code-point": "^1.0.0",
@@ -5619,6 +5857,7 @@
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
"integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
"dev": true,
+ "optional": true,
"requires": {
"ansi-regex": "^2.0.0"
}
@@ -5631,18 +5870,18 @@
"optional": true
},
"tar": {
- "version": "4.4.1",
- "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.1.tgz",
- "integrity": "sha512-O+v1r9yN4tOsvl90p5HAP4AEqbYhx4036AGMm075fH9F8Qwi3oJ+v4u50FkT/KkvywNGtwkk0zRI+8eYm1X/xg==",
+ "version": "4.4.8",
+ "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.8.tgz",
+ "integrity": "sha512-LzHF64s5chPQQS0IYBn9IN5h3i98c12bo4NCO7e0sGM2llXQ3p2FGC5sdENN4cTW48O915Sh+x+EXx7XW96xYQ==",
"dev": true,
"optional": true,
"requires": {
- "chownr": "^1.0.1",
+ "chownr": "^1.1.1",
"fs-minipass": "^1.2.5",
- "minipass": "^2.2.4",
- "minizlib": "^1.1.0",
+ "minipass": "^2.3.4",
+ "minizlib": "^1.1.1",
"mkdirp": "^0.5.0",
- "safe-buffer": "^5.1.1",
+ "safe-buffer": "^5.1.2",
"yallist": "^3.0.2"
}
},
@@ -5654,92 +5893,46 @@
"optional": true
},
"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==",
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz",
+ "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==",
"dev": true,
"optional": true,
"requires": {
- "string-width": "^1.0.2"
+ "string-width": "^1.0.2 || 2"
}
},
"wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
- "dev": true
+ "dev": true,
+ "optional": true
},
"yallist": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.2.tgz",
- "integrity": "sha1-hFK0u36Dx8GI2AQcGoN8dz1ti7k=",
- "dev": true
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz",
+ "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==",
+ "dev": true,
+ "optional": true
}
}
},
- "fstream": {
- "version": "1.0.11",
- "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz",
- "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "inherits": "~2.0.0",
- "mkdirp": ">=0.5 0",
- "rimraf": "2"
- }
- },
"function-bind": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
"integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
"dev": true
},
- "fwd-stream": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/fwd-stream/-/fwd-stream-1.0.4.tgz",
- "integrity": "sha1-7Sgcq+1G/uz5Ie4y3ExQs3KsfPo=",
- "dev": true,
- "requires": {
- "readable-stream": "~1.0.26-4"
- },
- "dependencies": {
- "isarray": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
- "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
- "dev": true
- },
- "readable-stream": {
- "version": "1.0.34",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
- "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
- "dev": true,
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.1",
- "isarray": "0.0.1",
- "string_decoder": "~0.10.x"
- }
- },
- "string_decoder": {
- "version": "0.10.31",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
- "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
- "dev": true
- }
- }
- },
- "get-assigned-identifiers": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/get-assigned-identifiers/-/get-assigned-identifiers-1.2.0.tgz",
- "integrity": "sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ==",
- "dev": true
- },
"get-caller-file": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz",
- "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==",
+ "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w=="
+ },
+ "get-func-name": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz",
+ "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=",
"dev": true
},
"get-pkg-repo": {
@@ -5756,22 +5949,20 @@
}
},
"get-stdin": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz",
- "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=",
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz",
+ "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==",
"dev": true
},
"get-stream": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
- "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
- "dev": true
+ "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ="
},
"get-value": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
- "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=",
- "dev": true
+ "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg="
},
"getpass": {
"version": "0.1.7",
@@ -5783,61 +5974,46 @@
}
},
"gh-pages": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/gh-pages/-/gh-pages-1.2.0.tgz",
- "integrity": "sha512-cGLYAvxtlQ1iTwAS4g7FreZPXoE/g62Fsxln2mmR19mgs4zZI+XJ+wVVUhBFCF/0+Nmvbq+abyTWue1m1BSnmg==",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/gh-pages/-/gh-pages-2.0.1.tgz",
+ "integrity": "sha512-uFlk3bukljeiWKQ2XvPfjcSi/ou7IfoDf2p+Fj672saLAr8bnOdFVqI/JSgrSgInKpCg5BksxEwGUl++dbg8Dg==",
"dev": true,
"requires": {
- "async": "2.6.1",
- "commander": "2.15.1",
+ "async": "^2.6.1",
+ "commander": "^2.18.0",
+ "email-addresses": "^3.0.1",
"filenamify-url": "^1.0.0",
- "fs-extra": "^5.0.0",
+ "fs-extra": "^7.0.0",
"globby": "^6.1.0",
- "graceful-fs": "4.1.11",
+ "graceful-fs": "^4.1.11",
"rimraf": "^2.6.2"
},
"dependencies": {
- "async": {
- "version": "2.6.1",
- "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz",
- "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==",
+ "globby": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz",
+ "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=",
"dev": true,
"requires": {
- "lodash": "^4.17.10"
+ "array-union": "^1.0.1",
+ "glob": "^7.0.3",
+ "object-assign": "^4.0.1",
+ "pify": "^2.0.0",
+ "pinkie-promise": "^2.0.0"
}
},
- "commander": {
- "version": "2.15.1",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz",
- "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==",
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
"dev": true
- },
- "fs-extra": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-5.0.0.tgz",
- "integrity": "sha512-66Pm4RYbjzdyeuqudYqhFiNBbCIuI9kgRqLPSHIlXHidW8NIQtVdkM1yeZ4lXwuhbTETv3EUGMNHAAw6hiundQ==",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "jsonfile": "^4.0.0",
- "universalify": "^0.1.0"
- }
- },
- "jsonfile": {
- "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.6"
- }
}
}
},
"git-raw-commits": {
- "version": "1.3.6",
- "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-1.3.6.tgz",
- "integrity": "sha512-svsK26tQ8vEKnMshTDatSIQSMDdz8CxIIqKsvPqbtV23Etmw6VNaFAitu8zwZ0VrOne7FztwPyRLxK7/DIUTQg==",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.0.tgz",
+ "integrity": "sha512-w4jFEJFgKXMQJ0H0ikBk2S+4KP2VEjhCvLCNqbNRQC8BgGWgLKNCO7a9K9LI+TVT7Gfoloje502sEnctibffgg==",
"dev": true,
"requires": {
"dargs": "^4.0.1",
@@ -5847,12 +6023,6 @@
"through2": "^2.0.0"
},
"dependencies": {
- "camelcase": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
- "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
- "dev": true
- },
"camelcase-keys": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-4.2.0.tgz",
@@ -5864,38 +6034,22 @@
"quick-lru": "^1.0.0"
}
},
- "find-up": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
- "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
- "dev": true,
- "requires": {
- "locate-path": "^2.0.0"
- }
- },
"indent-string": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz",
"integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=",
"dev": true
},
- "lodash.template": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.4.0.tgz",
- "integrity": "sha1-5zoDhcg1VZF0bgILmWecaQ5o+6A=",
- "dev": true,
- "requires": {
- "lodash._reinterpolate": "~3.0.0",
- "lodash.templatesettings": "^4.0.0"
- }
- },
- "lodash.templatesettings": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.1.0.tgz",
- "integrity": "sha1-K01OlbpEDZFf8IvImeRVNmZxMxY=",
+ "load-json-file": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz",
+ "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=",
"dev": true,
"requires": {
- "lodash._reinterpolate": "~3.0.0"
+ "graceful-fs": "^4.1.2",
+ "parse-json": "^4.0.0",
+ "pify": "^3.0.0",
+ "strip-bom": "^3.0.0"
}
},
"map-obj": {
@@ -5921,6 +6075,33 @@
"trim-newlines": "^2.0.0"
}
},
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+ "dev": true
+ },
+ "parse-json": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
+ "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
+ "dev": true,
+ "requires": {
+ "error-ex": "^1.3.1",
+ "json-parse-better-errors": "^1.0.1"
+ }
+ },
+ "read-pkg": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz",
+ "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=",
+ "dev": true,
+ "requires": {
+ "load-json-file": "^4.0.0",
+ "normalize-package-data": "^2.3.2",
+ "path-type": "^3.0.0"
+ }
+ },
"read-pkg-up": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz",
@@ -5941,6 +6122,12 @@
"strip-indent": "^2.0.0"
}
},
+ "strip-bom": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
+ "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
+ "dev": true
+ },
"strip-indent": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz",
@@ -5974,21 +6161,15 @@
}
},
"git-semver-tags": {
- "version": "1.3.6",
- "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-1.3.6.tgz",
- "integrity": "sha512-2jHlJnln4D/ECk9FxGEBh3k44wgYdWjWDtMmJPaecjoRmxKo3Y1Lh8GMYuOPu04CHw86NTAODchYjC5pnpMQig==",
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-2.0.2.tgz",
+ "integrity": "sha512-34lMF7Yo1xEmsK2EkbArdoU79umpvm0MfzaDkSNYSJqtM5QLAVTPWgpiXSVI5o/O9EvZPSrP4Zvnec/CqhSd5w==",
"dev": true,
"requires": {
"meow": "^4.0.0",
"semver": "^5.5.0"
},
"dependencies": {
- "camelcase": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
- "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
- "dev": true
- },
"camelcase-keys": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-4.2.0.tgz",
@@ -6000,21 +6181,24 @@
"quick-lru": "^1.0.0"
}
},
- "find-up": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
- "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
- "dev": true,
- "requires": {
- "locate-path": "^2.0.0"
- }
- },
"indent-string": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz",
"integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=",
"dev": true
},
+ "load-json-file": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz",
+ "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "parse-json": "^4.0.0",
+ "pify": "^3.0.0",
+ "strip-bom": "^3.0.0"
+ }
+ },
"map-obj": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/map-obj/-/map-obj-2.0.0.tgz",
@@ -6038,6 +6222,33 @@
"trim-newlines": "^2.0.0"
}
},
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+ "dev": true
+ },
+ "parse-json": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
+ "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
+ "dev": true,
+ "requires": {
+ "error-ex": "^1.3.1",
+ "json-parse-better-errors": "^1.0.1"
+ }
+ },
+ "read-pkg": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz",
+ "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=",
+ "dev": true,
+ "requires": {
+ "load-json-file": "^4.0.0",
+ "normalize-package-data": "^2.3.2",
+ "path-type": "^3.0.0"
+ }
+ },
"read-pkg-up": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz",
@@ -6058,6 +6269,12 @@
"strip-indent": "^2.0.0"
}
},
+ "strip-bom": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
+ "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
+ "dev": true
+ },
"strip-indent": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz",
@@ -6082,10 +6299,9 @@
}
},
"glob": {
- "version": "7.1.2",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
- "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
- "dev": true,
+ "version": "7.1.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz",
+ "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
"requires": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
@@ -6095,50 +6311,23 @@
"path-is-absolute": "^1.0.0"
}
},
- "glob-base": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz",
- "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=",
- "dev": true,
- "requires": {
- "glob-parent": "^2.0.0",
- "is-glob": "^2.0.0"
- },
- "dependencies": {
- "glob-parent": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz",
- "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=",
- "dev": true,
- "requires": {
- "is-glob": "^2.0.0"
- }
- },
- "is-extglob": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
- "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
- "dev": true
- },
- "is-glob": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
- "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
- "dev": true,
- "requires": {
- "is-extglob": "^1.0.0"
- }
- }
- }
- },
"glob-parent": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
"integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
- "dev": true,
"requires": {
"is-glob": "^3.1.0",
"path-dirname": "^1.0.0"
+ },
+ "dependencies": {
+ "is-glob": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
+ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+ "requires": {
+ "is-extglob": "^2.1.0"
+ }
+ }
}
},
"glob-stream": {
@@ -6159,6 +6348,11 @@
"unique-stream": "^2.0.2"
}
},
+ "glob-to-regexp": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz",
+ "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs="
+ },
"glob-watcher": {
"version": "5.0.3",
"resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-5.0.3.tgz",
@@ -6173,6 +6367,15 @@
"object.defaults": "^1.1.0"
}
},
+ "global-dirs": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz",
+ "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=",
+ "dev": true,
+ "requires": {
+ "ini": "^1.3.4"
+ }
+ },
"global-modules": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz",
@@ -6198,73 +6401,51 @@
}
},
"globals": {
- "version": "11.11.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-11.11.0.tgz",
- "integrity": "sha512-WHq43gS+6ufNOEqlrDBxVEbb8ntfXrfAUU2ZOpCxrBdGKW3gyv8mCxAfIBD0DroPKGrJ2eSsXsLtY9MPntsyTw==",
+ "version": "11.12.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
+ "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
"dev": true
},
"globby": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz",
- "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=",
- "dev": true,
+ "version": "8.0.2",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-8.0.2.tgz",
+ "integrity": "sha512-yTzMmKygLp8RUpG1Ymu2VXPSJQZjNAZPD4ywgYEaG7e4tBJeUQBO8OpXrf1RCNcEs5alsoJYPAMiIHP0cmeC7w==",
"requires": {
"array-union": "^1.0.1",
- "glob": "^7.0.3",
- "object-assign": "^4.0.1",
- "pify": "^2.0.0",
- "pinkie-promise": "^2.0.0"
- },
- "dependencies": {
- "pify": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
- "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
- "dev": true
- }
+ "dir-glob": "2.0.0",
+ "fast-glob": "^2.0.2",
+ "glob": "^7.1.2",
+ "ignore": "^3.3.5",
+ "pify": "^3.0.0",
+ "slash": "^1.0.0"
}
},
"glogg": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.1.tgz",
- "integrity": "sha512-ynYqXLoluBKf9XGR1gA59yEJisIL7YHEH4xr3ZziHB5/yl4qWfaK8Js9jGe6gBGCSCKVqiyO30WnRZADvemUNw==",
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.2.tgz",
+ "integrity": "sha512-5mwUoSuBk44Y4EshyiqcH95ZntbDdTQqA3QYSrxmzj28Ai0vXBGMH1ApSANH14j2sIRtqCEyg6PfsuP7ElOEDA==",
"dev": true,
"requires": {
"sparkles": "^1.0.0"
}
},
"got": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/got/-/got-5.7.1.tgz",
- "integrity": "sha1-X4FjWmHkplifGAVp6k44FoClHzU=",
+ "version": "6.7.1",
+ "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz",
+ "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=",
"dev": true,
"requires": {
- "create-error-class": "^3.0.1",
- "duplexer2": "^0.1.4",
+ "create-error-class": "^3.0.0",
+ "duplexer3": "^0.1.4",
+ "get-stream": "^3.0.0",
"is-redirect": "^1.0.0",
"is-retry-allowed": "^1.0.0",
"is-stream": "^1.0.0",
"lowercase-keys": "^1.0.0",
- "node-status-codes": "^1.0.0",
- "object-assign": "^4.0.1",
- "parse-json": "^2.1.0",
- "pinkie-promise": "^2.0.0",
- "read-all-stream": "^3.0.0",
- "readable-stream": "^2.0.5",
- "timed-out": "^3.0.0",
- "unzip-response": "^1.0.2",
+ "safe-buffer": "^5.0.1",
+ "timed-out": "^4.0.0",
+ "unzip-response": "^2.0.1",
"url-parse-lax": "^1.0.0"
- },
- "dependencies": {
- "parse-json": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
- "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
- "dev": true,
- "requires": {
- "error-ex": "^1.2.0"
- }
- }
}
},
"graceful-fs": {
@@ -6273,27 +6454,21 @@
"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
- },
- "growl": {
- "version": "1.10.5",
- "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz",
- "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==",
+ "growly": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz",
+ "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=",
"dev": true
},
"gulp": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/gulp/-/gulp-4.0.0.tgz",
- "integrity": "sha1-lXZsYB2t5Kd+0+eyttwDiBtZY2Y=",
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/gulp/-/gulp-4.0.2.tgz",
+ "integrity": "sha512-dvEs27SCZt2ibF29xYgmnwwCYZxdxhQ/+LFWlbAW8y7jt68L/65402Lz3+CKy0Ov4rOs+NERmDq7YlZaDqUIfA==",
"dev": true,
"requires": {
- "glob-watcher": "^5.0.0",
- "gulp-cli": "^2.0.0",
- "undertaker": "^1.0.0",
+ "glob-watcher": "^5.0.3",
+ "gulp-cli": "^2.2.0",
+ "undertaker": "^1.2.1",
"vinyl-fs": "^3.0.0"
},
"dependencies": {
@@ -6327,9 +6502,9 @@
}
},
"gulp-cli": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/gulp-cli/-/gulp-cli-2.0.1.tgz",
- "integrity": "sha512-RxujJJdN8/O6IW2nPugl7YazhmrIEjmiVfPKrWt68r71UCaLKS71Hp0gpKT+F6qOUFtr7KqtifDKaAJPRVvMYQ==",
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/gulp-cli/-/gulp-cli-2.2.0.tgz",
+ "integrity": "sha512-rGs3bVYHdyJpLqR0TUBnlcZ1O5O++Zs4bA0ajm+zr3WFCfiSLjGwoCBqFs18wzN+ZxahT9DkOK5nDf26iDsWjA==",
"dev": true,
"requires": {
"ansi-colors": "^1.0.1",
@@ -6342,7 +6517,7 @@
"gulplog": "^1.0.0",
"interpret": "^1.1.0",
"isobject": "^3.0.1",
- "liftoff": "^2.5.0",
+ "liftoff": "^3.1.0",
"matchdep": "^2.0.0",
"mute-stdout": "^1.0.0",
"pretty-hrtime": "^1.0.0",
@@ -6352,6 +6527,15 @@
"yargs": "^7.1.0"
}
},
+ "is-fullwidth-code-point": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
+ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "^1.0.0"
+ }
+ },
"os-locale": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz",
@@ -6361,6 +6545,17 @@
"lcid": "^1.0.0"
}
},
+ "string-width": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+ "dev": true,
+ "requires": {
+ "code-point-at": "^1.0.0",
+ "is-fullwidth-code-point": "^1.0.0",
+ "strip-ansi": "^3.0.0"
+ }
+ },
"which-module": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz",
@@ -6399,109 +6594,6 @@
}
}
},
- "gulp-better-rollup": {
- "version": "3.1.0",
- "resolved": "http://registry.npmjs.org/gulp-better-rollup/-/gulp-better-rollup-3.1.0.tgz",
- "integrity": "sha512-jpfkO/UI6ImKfbj3iZuYDJStWIqP7U1FcKr/JAXrzaTSvdI0dlKCLoGXpF8HtXcws112x14Xk1V7kfC0tfY9lQ==",
- "dev": true,
- "requires": {
- "lodash.camelcase": "^4.3.0",
- "plugin-error": "^0.1.2",
- "rollup": ">=0.48 <0.57",
- "vinyl": "^2.1.0",
- "vinyl-sourcemaps-apply": "^0.2.1"
- },
- "dependencies": {
- "arr-diff": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-1.1.0.tgz",
- "integrity": "sha1-aHwydYFjWI/vfeezb6vklesaOZo=",
- "dev": true,
- "requires": {
- "arr-flatten": "^1.0.1",
- "array-slice": "^0.2.3"
- }
- },
- "arr-union": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-2.1.0.tgz",
- "integrity": "sha1-IPnqtexw9cfSFbEHexw5Fh0pLH0=",
- "dev": true
- },
- "array-slice": {
- "version": "0.2.3",
- "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz",
- "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU=",
- "dev": true
- },
- "clone": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
- "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=",
- "dev": true
- },
- "clone-stats": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz",
- "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=",
- "dev": true
- },
- "extend-shallow": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-1.1.4.tgz",
- "integrity": "sha1-Gda/lN/AnXa6cR85uHLSH/TdkHE=",
- "dev": true,
- "requires": {
- "kind-of": "^1.1.0"
- }
- },
- "kind-of": {
- "version": "1.1.0",
- "resolved": "http://registry.npmjs.org/kind-of/-/kind-of-1.1.0.tgz",
- "integrity": "sha1-FAo9LUGjbS78+pN3tiwk+ElaXEQ=",
- "dev": true
- },
- "plugin-error": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-0.1.2.tgz",
- "integrity": "sha1-O5uzM1zPAPQl4HQ34ZJ2ln2kes4=",
- "dev": true,
- "requires": {
- "ansi-cyan": "^0.1.1",
- "ansi-red": "^0.1.1",
- "arr-diff": "^1.0.1",
- "arr-union": "^2.0.1",
- "extend-shallow": "^1.1.2"
- }
- },
- "replace-ext": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz",
- "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=",
- "dev": true
- },
- "rollup": {
- "version": "0.56.5",
- "resolved": "http://registry.npmjs.org/rollup/-/rollup-0.56.5.tgz",
- "integrity": "sha512-IGPk5vdWrsc4vkiW9XMeXr5QMtxmvATTttTi59w2jBQWe9G/MMQtn8teIBAj+DdK51TrpVT6P0aQUaQUlUYCJA==",
- "dev": true
- },
- "vinyl": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.0.tgz",
- "integrity": "sha512-MBH+yP0kC/GQ5GwBqrTPTzEfiiLjta7hTtvQtbxBgTeSXsmKQRQecjibMbxIXzVT3Y9KJK+drOz1/k+vsu8Nkg==",
- "dev": true,
- "requires": {
- "clone": "^2.1.1",
- "clone-buffer": "^1.0.0",
- "clone-stats": "^1.0.0",
- "cloneable-readable": "^1.0.0",
- "remove-trailing-separator": "^1.0.1",
- "replace-ext": "^1.0.0"
- }
- }
- }
- },
"gulp-gzip": {
"version": "1.4.2",
"resolved": "https://registry.npmjs.org/gulp-gzip/-/gulp-gzip-1.4.2.tgz",
@@ -6514,6 +6606,20 @@
"plugin-error": "^1.0.0",
"stream-to-array": "^2.3.0",
"through2": "^2.0.3"
+ },
+ "dependencies": {
+ "plugin-error": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-1.0.1.tgz",
+ "integrity": "sha512-L1zP0dk7vGweZME2i+EeakvUNqSrdiI3F91TwEoYiGrAfUXmVv6fJIq4g82PAXxNsWOp0J7ZqQy/3Szz0ajTxA==",
+ "dev": true,
+ "requires": {
+ "ansi-colors": "^1.0.1",
+ "arr-diff": "^4.0.0",
+ "arr-union": "^3.1.0",
+ "extend-shallow": "^3.0.2"
+ }
+ }
}
},
"gulp-rename": {
@@ -6533,446 +6639,130 @@
"replacestream": "^4.0.0"
}
},
- "gulp-rollup": {
- "version": "2.16.2",
- "resolved": "https://registry.npmjs.org/gulp-rollup/-/gulp-rollup-2.16.2.tgz",
- "integrity": "sha512-Gs9NYcUl0xXod7qenC1Lm49a/PGllAa5ONyCXu29lXfkP1oJnJzSdPBjopm9RlOVhefadbHlfy9AijovFrqABA==",
+ "gulp-typescript": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/gulp-typescript/-/gulp-typescript-5.0.1.tgz",
+ "integrity": "sha512-YuMMlylyJtUSHG1/wuSVTrZp60k1dMEFKYOvDf7OvbAJWrDtxxD4oZon4ancdWwzjj30ztiidhe4VXJniF0pIQ==",
"dev": true,
"requires": {
- "buffer-from": "^0.1.1",
- "plugin-error": "^1.0.0",
- "readable-stream": "^2.3.3",
- "rollup": "^0.54.1",
- "rollup-plugin-hypothetical": "^2.0.0",
- "vinyl": "^2.1.0"
+ "ansi-colors": "^3.0.5",
+ "plugin-error": "^1.0.1",
+ "source-map": "^0.7.3",
+ "through2": "^3.0.0",
+ "vinyl": "^2.1.0",
+ "vinyl-fs": "^3.0.3"
},
"dependencies": {
- "buffer-from": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-0.1.2.tgz",
- "integrity": "sha512-RiWIenusJsmI2KcvqQABB83tLxCByE3upSP8QU3rJDMVFGPWLvPQJt/O1Su9moRWeH7d+Q2HYb68f6+v+tw2vg==",
- "dev": true
- },
- "clone": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.1.tgz",
- "integrity": "sha1-0hfR6WERjjrJpLi7oyhVU79kfNs=",
- "dev": true
- },
- "clone-stats": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz",
- "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=",
- "dev": true
- },
- "replace-ext": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz",
- "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=",
+ "ansi-colors": {
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz",
+ "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==",
"dev": true
},
- "rollup": {
- "version": "0.54.1",
- "resolved": "https://registry.npmjs.org/rollup/-/rollup-0.54.1.tgz",
- "integrity": "sha512-ebUUgUQ7K/sLn67CtO8Jj8H3RgKAoVWrpiJA7enOkwZPZzTCl8GC8CZ00g5jowjX80KgBmzs4Z1MV6cgglT86A==",
+ "source-map": {
+ "version": "0.7.3",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
+ "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==",
"dev": true
},
- "vinyl": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.0.tgz",
- "integrity": "sha512-MBH+yP0kC/GQ5GwBqrTPTzEfiiLjta7hTtvQtbxBgTeSXsmKQRQecjibMbxIXzVT3Y9KJK+drOz1/k+vsu8Nkg==",
+ "through2": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.1.tgz",
+ "integrity": "sha512-M96dvTalPT3YbYLaKaCuwu+j06D/8Jfib0o/PxbVt6Amhv3dUAtW6rTV1jPgJSBG83I/e04Y6xkVdVhSRhi0ww==",
"dev": true,
"requires": {
- "clone": "^2.1.1",
- "clone-buffer": "^1.0.0",
- "clone-stats": "^1.0.0",
- "cloneable-readable": "^1.0.0",
- "remove-trailing-separator": "^1.0.1",
- "replace-ext": "^1.0.0"
+ "readable-stream": "2 || 3"
}
}
}
},
- "gulp-sourcemaps": {
- "version": "2.6.4",
- "resolved": "https://registry.npmjs.org/gulp-sourcemaps/-/gulp-sourcemaps-2.6.4.tgz",
- "integrity": "sha1-y7IAhFCxvM5s0jv5gze+dRv24wo=",
+ "gulplog": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz",
+ "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=",
+ "dev": true,
+ "requires": {
+ "glogg": "^1.0.0"
+ }
+ },
+ "gzip-size": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-5.1.0.tgz",
+ "integrity": "sha512-wfSnvypBDRW94v5W3ckvvz/zFUNdJ81VgOP6tE4bPpRUcc0wGqU+y0eZjJEvKxwubJFix6P84sE8M51YWLT7rQ==",
"dev": true,
"requires": {
- "@gulp-sourcemaps/identity-map": "1.X",
- "@gulp-sourcemaps/map-sources": "1.X",
- "acorn": "5.X",
- "convert-source-map": "1.X",
- "css": "2.X",
- "debug-fabulous": "1.X",
- "detect-newline": "2.X",
- "graceful-fs": "4.X",
- "source-map": "~0.6.0",
- "strip-bom-string": "1.X",
- "through2": "2.X"
+ "duplexer": "^0.1.1",
+ "pify": "^4.0.1"
},
"dependencies": {
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "pify": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
+ "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
"dev": true
}
}
},
- "gulp-typescript": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/gulp-typescript/-/gulp-typescript-4.0.2.tgz",
- "integrity": "sha512-Hhbn5Aa2l3T+tnn0KqsG6RRJmcYEsr3byTL2nBpNBeAK8pqug9Od4AwddU4JEI+hRw7mzZyjRbB8DDWR6paGVA==",
+ "handlebars": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.1.2.tgz",
+ "integrity": "sha512-nvfrjqvt9xQ8Z/w0ijewdD/vvWDTOweBUm96NTr66Wfvo1mJenBLwcYmPs3TIBP5ruzYGD7Hx/DaM9RmhroGPw==",
"dev": true,
"requires": {
- "ansi-colors": "^1.0.1",
- "plugin-error": "^0.1.2",
+ "neo-async": "^2.6.0",
+ "optimist": "^0.6.1",
"source-map": "^0.6.1",
- "through2": "^2.0.3",
- "vinyl": "^2.1.0",
- "vinyl-fs": "^3.0.0"
+ "uglify-js": "^3.1.4"
},
"dependencies": {
- "arr-diff": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-1.1.0.tgz",
- "integrity": "sha1-aHwydYFjWI/vfeezb6vklesaOZo=",
- "dev": true,
- "requires": {
- "arr-flatten": "^1.0.1",
- "array-slice": "^0.2.3"
- }
- },
- "arr-union": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-2.1.0.tgz",
- "integrity": "sha1-IPnqtexw9cfSFbEHexw5Fh0pLH0=",
- "dev": true
- },
- "array-slice": {
- "version": "0.2.3",
- "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz",
- "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU=",
- "dev": true
- },
- "clone": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.1.tgz",
- "integrity": "sha1-0hfR6WERjjrJpLi7oyhVU79kfNs=",
- "dev": true
- },
- "clone-stats": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz",
- "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=",
- "dev": true
- },
- "extend-shallow": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-1.1.4.tgz",
- "integrity": "sha1-Gda/lN/AnXa6cR85uHLSH/TdkHE=",
- "dev": true,
- "requires": {
- "kind-of": "^1.1.0"
- }
- },
- "glob-stream": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz",
- "integrity": "sha1-cEXJlBOz65SIjYOrRtC0BMx73eQ=",
- "dev": true,
- "requires": {
- "extend": "^3.0.0",
- "glob": "^7.1.1",
- "glob-parent": "^3.1.0",
- "is-negated-glob": "^1.0.0",
- "ordered-read-streams": "^1.0.0",
- "pumpify": "^1.3.5",
- "readable-stream": "^2.1.5",
- "remove-trailing-separator": "^1.0.1",
- "to-absolute-glob": "^2.0.0",
- "unique-stream": "^2.0.2"
- }
- },
- "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,
- "requires": {
- "jsonify": "~0.0.0"
- }
- },
- "kind-of": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-1.1.0.tgz",
- "integrity": "sha1-FAo9LUGjbS78+pN3tiwk+ElaXEQ=",
- "dev": true
- },
- "ordered-read-streams": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz",
- "integrity": "sha1-d8DLN8QVJdZBZtmQ/61+xqDhNj4=",
- "dev": true,
- "requires": {
- "readable-stream": "^2.0.1"
- }
- },
- "plugin-error": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-0.1.2.tgz",
- "integrity": "sha1-O5uzM1zPAPQl4HQ34ZJ2ln2kes4=",
- "dev": true,
- "requires": {
- "ansi-cyan": "^0.1.1",
- "ansi-red": "^0.1.1",
- "arr-diff": "^1.0.1",
- "arr-union": "^2.0.1",
- "extend-shallow": "^1.1.2"
- }
- },
- "replace-ext": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz",
- "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=",
- "dev": true
- },
"source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
"dev": true
- },
- "unique-stream": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.2.1.tgz",
- "integrity": "sha1-WqADz76Uxf+GbE59ZouxxNuts2k=",
- "dev": true,
- "requires": {
- "json-stable-stringify": "^1.0.0",
- "through2-filter": "^2.0.0"
- }
- },
- "vinyl": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.0.tgz",
- "integrity": "sha512-MBH+yP0kC/GQ5GwBqrTPTzEfiiLjta7hTtvQtbxBgTeSXsmKQRQecjibMbxIXzVT3Y9KJK+drOz1/k+vsu8Nkg==",
- "dev": true,
- "requires": {
- "clone": "^2.1.1",
- "clone-buffer": "^1.0.0",
- "clone-stats": "^1.0.0",
- "cloneable-readable": "^1.0.0",
- "remove-trailing-separator": "^1.0.1",
- "replace-ext": "^1.0.0"
- }
- },
- "vinyl-fs": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-3.0.3.tgz",
- "integrity": "sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng==",
- "dev": true,
- "requires": {
- "fs-mkdirp-stream": "^1.0.0",
- "glob-stream": "^6.1.0",
- "graceful-fs": "^4.0.0",
- "is-valid-glob": "^1.0.0",
- "lazystream": "^1.0.0",
- "lead": "^1.0.0",
- "object.assign": "^4.0.4",
- "pumpify": "^1.3.5",
- "readable-stream": "^2.3.3",
- "remove-bom-buffer": "^3.0.0",
- "remove-bom-stream": "^1.2.0",
- "resolve-options": "^1.1.0",
- "through2": "^2.0.0",
- "to-through": "^2.0.0",
- "value-or-function": "^3.0.0",
- "vinyl": "^2.0.0",
- "vinyl-sourcemap": "^1.1.0"
- }
}
}
},
- "gulp-uglify": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/gulp-uglify/-/gulp-uglify-3.0.1.tgz",
- "integrity": "sha512-KVffbGY9d4Wv90bW/B1KZJyunLMyfHTBbilpDvmcrj5Go0/a1G3uVpt+1gRBWSw/11dqR3coJ1oWNTt1AiXuWQ==",
+ "har-schema": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
+ "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=",
+ "dev": true
+ },
+ "har-validator": {
+ "version": "5.1.3",
+ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz",
+ "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==",
"dev": true,
"requires": {
- "gulplog": "^1.0.0",
- "has-gulplog": "^0.1.0",
- "lodash": "^4.13.1",
- "make-error-cause": "^1.1.1",
- "safe-buffer": "^5.1.2",
- "through2": "^2.0.0",
- "uglify-js": "^3.0.5",
- "vinyl-sourcemaps-apply": "^0.2.0"
+ "ajv": "^6.5.5",
+ "har-schema": "^2.0.0"
}
},
- "gulplog": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz",
- "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=",
+ "has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
"dev": true,
"requires": {
- "glogg": "^1.0.0"
+ "function-bind": "^1.1.1"
}
},
- "handlebars": {
- "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.4.0",
- "optimist": "^0.6.1",
- "source-map": "^0.4.4",
- "uglify-js": "^2.6"
- },
- "dependencies": {
- "async": {
- "version": "1.5.2",
- "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
- "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=",
- "dev": true
- },
- "camelcase": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz",
- "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=",
- "dev": true,
- "optional": true
- },
- "source-map": {
- "version": "0.4.4",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz",
- "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=",
- "dev": true,
- "requires": {
- "amdefine": ">=0.0.4"
- }
- },
- "uglify-js": {
- "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.1",
- "uglify-to-browserify": "~1.0.0",
- "yargs": "~3.10.0"
- },
- "dependencies": {
- "source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
- "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,
- "requires": {
- "camelcase": "^1.0.2",
- "cliui": "^2.1.0",
- "decamelize": "^1.0.0",
- "window-size": "0.1.0"
- }
- }
- }
- },
- "har-schema": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
- "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=",
- "dev": true
- },
- "har-validator": {
- "version": "5.1.3",
- "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz",
- "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==",
- "dev": true,
- "requires": {
- "ajv": "^6.5.5",
- "har-schema": "^2.0.0"
- }
- },
- "has": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
- "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
- "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,
- "requires": {
- "ansi-regex": "^2.0.0"
- }
- },
- "has-binary2": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz",
- "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==",
- "dev": true,
- "requires": {
- "isarray": "2.0.1"
- },
- "dependencies": {
- "isarray": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz",
- "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=",
- "dev": true
- }
- }
- },
- "has-cors": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz",
- "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=",
- "dev": true
- },
- "has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
- "dev": true
- },
- "has-gulplog": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/has-gulplog/-/has-gulplog-0.1.0.tgz",
- "integrity": "sha1-ZBTIKRNpfaUVkDl9r7EvIpZ4Ec4=",
- "dev": true,
- "requires": {
- "sparkles": "^1.0.0"
- }
- },
- "has-symbols": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz",
- "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=",
- "dev": true
- },
- "has-value": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
- "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
- "dev": true,
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
+ },
+ "has-symbols": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz",
+ "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=",
+ "dev": true
+ },
+ "has-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
+ "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
"requires": {
"get-value": "^2.0.6",
"has-values": "^1.0.0",
@@ -6983,7 +6773,6 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
"integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
- "dev": true,
"requires": {
"is-number": "^3.0.0",
"kind-of": "^4.0.0"
@@ -6993,7 +6782,6 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
"integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
- "dev": true,
"requires": {
"is-buffer": "^1.1.5"
}
@@ -7011,27 +6799,15 @@
}
},
"hash.js": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.5.tgz",
- "integrity": "sha512-eWI5HG9Np+eHV1KQhisXWwM+4EPPYe5dFX1UZZH7k/E3JzDEazVH+VGlZi6R94ZqImq+A3D1mCEtrFIfg/E7sA==",
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz",
+ "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==",
"dev": true,
"requires": {
"inherits": "^2.0.3",
"minimalistic-assert": "^1.0.1"
}
},
- "hat": {
- "version": "0.0.3",
- "resolved": "https://registry.npmjs.org/hat/-/hat-0.0.3.tgz",
- "integrity": "sha1-uwFKnmSzeIrtgAWRdBPU/z1QLYo=",
- "dev": true
- },
- "he": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz",
- "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=",
- "dev": true
- },
"highlight.js": {
"version": "9.15.6",
"resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.15.6.tgz",
@@ -7050,25 +6826,26 @@
}
},
"homedir-polyfill": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz",
- "integrity": "sha1-TCu8inWJmP7r9e1oWA921GdotLw=",
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz",
+ "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==",
"dev": true,
"requires": {
"parse-passwd": "^1.0.0"
}
},
+ "hoopy": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz",
+ "integrity": "sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==",
+ "dev": true
+ },
"hosted-git-info": {
"version": "2.7.1",
"resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz",
"integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==",
"dev": true
},
- "html-comment-regex": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.1.tgz",
- "integrity": "sha1-ZouTd26q5V696POtRkswekljYl4="
- },
"html-encoding-sniffer": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz",
@@ -7078,12 +6855,6 @@
"whatwg-encoding": "^1.0.1"
}
},
- "htmlescape": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/htmlescape/-/htmlescape-1.1.1.tgz",
- "integrity": "sha1-OgPtwiFLyjtmQko+eVk0lQnLA1E=",
- "dev": true
- },
"http-errors": {
"version": "1.6.3",
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
@@ -7094,25 +6865,6 @@
"inherits": "2.0.3",
"setprototypeof": "1.1.0",
"statuses": ">= 1.4.0 < 2"
- },
- "dependencies": {
- "statuses": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
- "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=",
- "dev": true
- }
- }
- },
- "http-proxy": {
- "version": "1.17.0",
- "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.17.0.tgz",
- "integrity": "sha512-Taqn+3nNvYRfJ3bGvKfBSRwy1v6eePlm3oc/aWVxZp57DQr5Eq3xhKJi7Z4hZpS8PC3H4qI+Yly5EmFacGuA/g==",
- "dev": true,
- "requires": {
- "eventemitter3": "^3.0.0",
- "follow-redirects": "^1.0.0",
- "requires-port": "^1.0.0"
}
},
"http-signature": {
@@ -7140,6 +6892,17 @@
"requires": {
"agent-base": "^4.1.0",
"debug": "^3.1.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "3.2.6",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
+ "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
+ "dev": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ }
}
},
"humanize-url": {
@@ -7153,32 +6916,56 @@
}
},
"iconv-lite": {
- "version": "0.4.23",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz",
- "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==",
+ "version": "0.4.24",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
+ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
"dev": true,
"requires": {
"safer-buffer": ">= 2.1.2 < 3"
}
},
- "idb-wrapper": {
- "version": "1.7.2",
- "resolved": "https://registry.npmjs.org/idb-wrapper/-/idb-wrapper-1.7.2.tgz",
- "integrity": "sha512-zfNREywMuf0NzDo9mVsL0yegjsirJxHpKHvWcyRozIqQy89g0a3U+oBPOCN4cc0oCiOuYgZHimzaW/R46G1Mpg==",
- "dev": true
- },
"ieee754": {
"version": "1.1.8",
"resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.8.tgz",
"integrity": "sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q=",
"dev": true
},
+ "iferr": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz",
+ "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=",
+ "dev": true
+ },
"ignore": {
"version": "3.3.10",
"resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz",
- "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==",
+ "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug=="
+ },
+ "ignore-walk": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.1.tgz",
+ "integrity": "sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==",
+ "dev": true,
+ "requires": {
+ "minimatch": "^3.0.4"
+ }
+ },
+ "import-lazy": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz",
+ "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=",
"dev": true
},
+ "import-local": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz",
+ "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==",
+ "dev": true,
+ "requires": {
+ "pkg-dir": "^3.0.0",
+ "resolve-cwd": "^2.0.0"
+ }
+ },
"imurmurhash": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
@@ -7200,17 +6987,10 @@
"integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=",
"dev": true
},
- "indexport": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/indexport/-/indexport-0.1.1.tgz",
- "integrity": "sha1-FgMaCoJ5Hk+K0TKwhfZcGrWxL6Y=",
- "dev": true
- },
"inflight": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
"integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
- "dev": true,
"requires": {
"once": "^1.3.0",
"wrappy": "1"
@@ -7227,51 +7007,10 @@
"integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==",
"dev": true
},
- "inline-source-map": {
- "version": "0.6.2",
- "resolved": "https://registry.npmjs.org/inline-source-map/-/inline-source-map-0.6.2.tgz",
- "integrity": "sha1-+Tk0ccGKedFyT4Y/o4tYY3Ct4qU=",
- "dev": true,
- "requires": {
- "source-map": "~0.5.3"
- }
- },
- "insert-module-globals": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-7.2.0.tgz",
- "integrity": "sha512-VE6NlW+WGn2/AeOMd496AHFYmE7eLKkUY6Ty31k4og5vmA3Fjuwe9v6ifH6Xx/Hz27QvdoMoviw1/pqWRB09Sw==",
- "dev": true,
- "requires": {
- "JSONStream": "^1.0.3",
- "acorn-node": "^1.5.2",
- "combine-source-map": "^0.8.0",
- "concat-stream": "^1.6.1",
- "is-buffer": "^1.1.0",
- "path-is-absolute": "^1.0.1",
- "process": "~0.11.0",
- "through2": "^2.0.0",
- "undeclared-identifiers": "^1.1.2",
- "xtend": "^4.0.0"
- },
- "dependencies": {
- "concat-stream": {
- "version": "1.6.2",
- "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
- "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
- "dev": true,
- "requires": {
- "buffer-from": "^1.0.0",
- "inherits": "^2.0.3",
- "readable-stream": "^2.2.2",
- "typedarray": "^0.0.6"
- }
- }
- }
- },
"interpret": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz",
- "integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=",
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz",
+ "integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==",
"dev": true
},
"invariant": {
@@ -7286,8 +7025,7 @@
"invert-kv": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz",
- "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=",
- "dev": true
+ "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY="
},
"ipaddr.js": {
"version": "1.8.0",
@@ -7295,12 +7033,6 @@
"integrity": "sha1-6qM9bd16zo9/b+DJygRA5wZzix4=",
"dev": true
},
- "is": {
- "version": "0.2.7",
- "resolved": "https://registry.npmjs.org/is/-/is-0.2.7.tgz",
- "integrity": "sha1-OzSixI81mXLzUEKEkZOucmS2NWI=",
- "dev": true
- },
"is-absolute": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz",
@@ -7315,7 +7047,6 @@
"version": "0.1.6",
"resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
"integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
- "dev": true,
"requires": {
"kind-of": "^3.0.2"
},
@@ -7324,7 +7055,6 @@
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
"requires": {
"is-buffer": "^1.1.5"
}
@@ -7349,17 +7079,7 @@
"is-buffer": {
"version": "1.1.6",
"resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
- "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
- "dev": true
- },
- "is-builtin-module": {
- "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.0.0"
- }
+ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
},
"is-callable": {
"version": "1.1.4",
@@ -7367,11 +7087,19 @@
"integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==",
"dev": true
},
+ "is-ci": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz",
+ "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==",
+ "dev": true,
+ "requires": {
+ "ci-info": "^2.0.0"
+ }
+ },
"is-data-descriptor": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
"integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
- "dev": true,
"requires": {
"kind-of": "^3.0.2"
},
@@ -7380,7 +7108,6 @@
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
"requires": {
"is-buffer": "^1.1.5"
}
@@ -7397,7 +7124,6 @@
"version": "0.1.6",
"resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
"integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
- "dev": true,
"requires": {
"is-accessor-descriptor": "^0.1.6",
"is-data-descriptor": "^0.1.4",
@@ -7407,43 +7133,19 @@
"kind-of": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
- "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
- "dev": true
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw=="
}
}
},
- "is-dotfile": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz",
- "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=",
- "dev": true
- },
- "is-equal-shallow": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz",
- "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=",
- "dev": true,
- "requires": {
- "is-primitive": "^2.0.0"
- }
- },
"is-extendable": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
- "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
- "dev": true
+ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik="
},
"is-extglob": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
- "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
- "dev": true
- },
- "is-fail": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-fail/-/is-fail-0.1.1.tgz",
- "integrity": "sha1-jUEnvUTS5fsjneFU7qx8yPXxUmg=",
- "dev": true
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI="
},
"is-finite": {
"version": "1.0.2",
@@ -7455,29 +7157,34 @@
}
},
"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,
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8="
+ },
+ "is-generator-fn": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz",
+ "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==",
+ "dev": true
+ },
+ "is-glob": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
+ "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
"requires": {
- "number-is-nan": "^1.0.0"
+ "is-extglob": "^2.1.1"
}
},
- "is-glob": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
- "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+ "is-installed-globally": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz",
+ "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=",
"dev": true,
"requires": {
- "is-extglob": "^2.1.0"
+ "global-dirs": "^0.1.0",
+ "is-path-inside": "^1.0.0"
}
},
- "is-module": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz",
- "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=",
- "dev": true
- },
"is-negated-glob": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz",
@@ -7494,7 +7201,6 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
"integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
- "dev": true,
"requires": {
"kind-of": "^3.0.2"
},
@@ -7503,7 +7209,6 @@
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
"requires": {
"is-buffer": "^1.1.5"
}
@@ -7516,25 +7221,30 @@
"integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=",
"dev": true
},
- "is-object": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/is-object/-/is-object-0.1.2.tgz",
- "integrity": "sha1-AO+8CIFsM8/ErIJR0TLhDcZQmNc=",
- "dev": true
- },
"is-path-cwd": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz",
- "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=",
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.1.0.tgz",
+ "integrity": "sha512-Sc5j3/YnM8tDeyCsVeKlm/0p95075DyLmDEIkSgQ7mXkrOX+uTCtmQFm0CYzVyJwcCCmO3k8qfJt17SxQwB5Zw==",
"dev": true
},
"is-path-in-cwd": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz",
- "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==",
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz",
+ "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==",
"dev": true,
"requires": {
- "is-path-inside": "^1.0.0"
+ "is-path-inside": "^2.1.0"
+ },
+ "dependencies": {
+ "is-path-inside": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz",
+ "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==",
+ "dev": true,
+ "requires": {
+ "path-is-inside": "^1.0.2"
+ }
+ }
}
},
"is-path-inside": {
@@ -7556,44 +7266,16 @@
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
"integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
- "dev": true,
"requires": {
"isobject": "^3.0.1"
}
},
- "is-posix-bracket": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz",
- "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=",
- "dev": true
- },
- "is-primitive": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz",
- "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=",
- "dev": true
- },
- "is-promise": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz",
- "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=",
- "dev": true
- },
"is-redirect": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz",
"integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=",
"dev": true
},
- "is-reference": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.1.1.tgz",
- "integrity": "sha512-URlByVARcyP2E2GC7d3Ur702g3vqW391VKCHuF5Goo/M8IT97k4RU/+56OYImwDdX1J/V/VRxECE/wJqB0I2tg==",
- "dev": true,
- "requires": {
- "@types/estree": "0.0.39"
- }
- },
"is-regex": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz",
@@ -7621,22 +7303,7 @@
"is-stream": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
- "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
- "dev": true
- },
- "is-subset": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-subset/-/is-subset-0.1.1.tgz",
- "integrity": "sha1-ilkRfZMt4d4A8kX83TnOQ/HpOaY=",
- "dev": true
- },
- "is-svg": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-3.0.0.tgz",
- "integrity": "sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ==",
- "requires": {
- "html-comment-regex": "^1.1.0"
- }
+ "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ="
},
"is-symbol": {
"version": "1.0.2",
@@ -7686,7 +7353,12 @@
"is-windows": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
- "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
+ "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA=="
+ },
+ "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": {
@@ -7694,32 +7366,15 @@
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
"integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
},
- "isbinaryfile": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.3.tgz",
- "integrity": "sha512-8cJBL5tTd2OS0dM4jz07wQd5g0dCCqIhUxPIGtZfa5L6hWlvV5MHTITy/DBAsF+Oe2LS1X3krBUhNwaGUWpWxw==",
- "dev": true,
- "requires": {
- "buffer-alloc": "^1.2.0"
- }
- },
- "isbuffer": {
- "version": "0.0.0",
- "resolved": "https://registry.npmjs.org/isbuffer/-/isbuffer-0.0.0.tgz",
- "integrity": "sha1-OMFG2d9Si4v5sHAcPUPPEt8/w5s=",
- "dev": true
- },
"isexe": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
- "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
- "dev": true
+ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA="
},
"isobject": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
- "dev": true
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8="
},
"isstream": {
"version": "0.1.2",
@@ -7728,24 +7383,116 @@
"dev": true
},
"istanbul-lib-coverage": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz",
- "integrity": "sha512-dKWuzRGCs4G+67VfW9pBFFz2Jpi4vSp/k7zBcJ888ofV5Mi1g5CUML5GvMvV6u9Cjybftu+E8Cgp+k0dI1E5lw==",
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz",
+ "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==",
"dev": true
},
"istanbul-lib-instrument": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.1.0.tgz",
- "integrity": "sha512-ooVllVGT38HIk8MxDj/OIHXSYvH+1tq/Vb38s8ixt9GoJadXska4WkGY+0wkmtYCZNYtaARniH/DixUGGLZ0uA==",
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz",
+ "integrity": "sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA==",
"dev": true,
"requires": {
- "@babel/generator": "^7.0.0",
- "@babel/parser": "^7.0.0",
- "@babel/template": "^7.0.0",
- "@babel/traverse": "^7.0.0",
- "@babel/types": "^7.0.0",
- "istanbul-lib-coverage": "^2.0.3",
- "semver": "^5.5.0"
+ "@babel/generator": "^7.4.0",
+ "@babel/parser": "^7.4.3",
+ "@babel/template": "^7.4.0",
+ "@babel/traverse": "^7.4.3",
+ "@babel/types": "^7.4.0",
+ "istanbul-lib-coverage": "^2.0.5",
+ "semver": "^6.0.0"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.0.0.tgz",
+ "integrity": "sha512-0UewU+9rFapKFnlbirLi3byoOuhrSsli/z/ihNnvM24vgF+8sNBiI1LZPBSH9wJKUwaUbw+s3hToDLCXkrghrQ==",
+ "dev": true
+ }
+ }
+ },
+ "istanbul-lib-report": {
+ "version": "2.0.8",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz",
+ "integrity": "sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ==",
+ "dev": true,
+ "requires": {
+ "istanbul-lib-coverage": "^2.0.5",
+ "make-dir": "^2.1.0",
+ "supports-color": "^6.1.0"
+ },
+ "dependencies": {
+ "make-dir": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz",
+ "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==",
+ "dev": true,
+ "requires": {
+ "pify": "^4.0.1",
+ "semver": "^5.6.0"
+ }
+ },
+ "pify": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
+ "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+ "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "istanbul-lib-source-maps": {
+ "version": "3.0.6",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz",
+ "integrity": "sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw==",
+ "dev": true,
+ "requires": {
+ "debug": "^4.1.1",
+ "istanbul-lib-coverage": "^2.0.5",
+ "make-dir": "^2.1.0",
+ "rimraf": "^2.6.3",
+ "source-map": "^0.6.1"
+ },
+ "dependencies": {
+ "make-dir": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz",
+ "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==",
+ "dev": true,
+ "requires": {
+ "pify": "^4.0.1",
+ "semver": "^5.6.0"
+ }
+ },
+ "pify": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
+ "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
+ "dev": true
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ }
+ }
+ },
+ "istanbul-reports": {
+ "version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-2.2.4.tgz",
+ "integrity": "sha512-QCHGyZEK0bfi9GR215QSm+NJwFKEShbtc7tfbUdLAEzn3kKhLDDZqvljn8rPZM9v8CEOhzL1nlYoO4r1ryl67w==",
+ "dev": true,
+ "requires": {
+ "handlebars": "^4.1.2"
}
},
"istextorbinary": {
@@ -7760,4586 +7507,3523 @@
}
},
"isutf8": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/isutf8/-/isutf8-2.0.2.tgz",
- "integrity": "sha512-9lNbG6k+PE6vuFnPTHjhtX79/LDMQrXoFx1MOEjXXCyqFCSahWKAzuAb9G5ct+lfS12aQxNmC0tiZuyujvr4Uw=="
- },
- "jmespath": {
- "version": "0.15.0",
- "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.15.0.tgz",
- "integrity": "sha1-o/Iiqarp+Wb10nx5ZRDigJF2Qhc=",
- "dev": true
- },
- "js-levenshtein": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz",
- "integrity": "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==",
- "dev": true
- },
- "js-string-escape": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/js-string-escape/-/js-string-escape-1.0.1.tgz",
- "integrity": "sha1-4mJbrbwNZ8dTPp7cEGjFh65BN+8=",
- "dev": true
- },
- "js-tokens": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
- "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
- "dev": true
- },
- "js-yaml": {
- "version": "3.12.0",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz",
- "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==",
- "dev": true,
- "requires": {
- "argparse": "^1.0.7",
- "esprima": "^4.0.0"
- }
- },
- "jsbn": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
- "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
- "dev": true,
- "optional": true
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/isutf8/-/isutf8-2.0.3.tgz",
+ "integrity": "sha512-ucppMz9qxhSceRJ8bP5SfdMdXukV718zXVgeSznBXkDGHbIcN5nptCPnosZhsN959eATLCD3751fo8tD86hM2Q=="
},
- "jsdom": {
- "version": "13.0.0",
- "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-13.0.0.tgz",
- "integrity": "sha512-Kmq4ASMNkgpY+YufE322EnIKoiz0UWY2DRkKlU7d5YrIW4xiVRhWFrZV1fr6w/ZNxQ50wGAH5gGRzydgnmkkvw==",
+ "jest": {
+ "version": "24.8.0",
+ "resolved": "https://registry.npmjs.org/jest/-/jest-24.8.0.tgz",
+ "integrity": "sha512-o0HM90RKFRNWmAWvlyV8i5jGZ97pFwkeVoGvPW1EtLTgJc2+jcuqcbbqcSZLE/3f2S5pt0y2ZBETuhpWNl1Reg==",
"dev": true,
"requires": {
- "abab": "^2.0.0",
- "acorn": "^6.0.2",
- "acorn-globals": "^4.3.0",
- "array-equal": "^1.0.0",
- "cssom": "^0.3.4",
- "cssstyle": "^1.1.1",
- "data-urls": "^1.0.1",
- "domexception": "^1.0.1",
- "escodegen": "^1.11.0",
- "html-encoding-sniffer": "^1.0.2",
- "nwsapi": "^2.0.9",
- "parse5": "5.1.0",
- "pn": "^1.1.0",
- "request": "^2.88.0",
- "request-promise-native": "^1.0.5",
- "saxes": "^3.1.3",
- "symbol-tree": "^3.2.2",
- "tough-cookie": "^2.4.3",
- "w3c-hr-time": "^1.0.1",
- "w3c-xmlserializer": "^1.0.0",
- "webidl-conversions": "^4.0.2",
- "whatwg-encoding": "^1.0.5",
- "whatwg-mimetype": "^2.2.0",
- "whatwg-url": "^7.0.0",
- "ws": "^6.1.0",
- "xml-name-validator": "^3.0.0"
+ "import-local": "^2.0.0",
+ "jest-cli": "^24.8.0"
},
"dependencies": {
- "abab": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.0.tgz",
- "integrity": "sha512-sY5AXXVZv4Y1VACTtR11UJCPHHudgY5i26Qj5TypE6DKlIApbwb5uqhXcJ5UUGbvZNRh7EeIoW+LrJumBsKp7w==",
+ "camelcase": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
+ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
"dev": true
},
- "acorn": {
- "version": "6.0.4",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.0.4.tgz",
- "integrity": "sha512-VY4i5EKSKkofY2I+6QLTbTTN/UvEQPCo6eiwzzSaSWfpaDhOmStMCMod6wmuPciNq+XS0faCglFu2lHZpdHUtg==",
- "dev": true
+ "cross-spawn": {
+ "version": "6.0.5",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
+ "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
+ "dev": true,
+ "requires": {
+ "nice-try": "^1.0.4",
+ "path-key": "^2.0.1",
+ "semver": "^5.5.0",
+ "shebang-command": "^1.2.0",
+ "which": "^1.2.9"
+ }
},
- "aws4": {
- "version": "1.8.0",
- "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz",
- "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==",
- "dev": true
+ "execa": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz",
+ "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==",
+ "dev": true,
+ "requires": {
+ "cross-spawn": "^6.0.0",
+ "get-stream": "^4.0.0",
+ "is-stream": "^1.1.0",
+ "npm-run-path": "^2.0.0",
+ "p-finally": "^1.0.0",
+ "signal-exit": "^3.0.0",
+ "strip-eof": "^1.0.0"
+ }
},
- "extend": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
- "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
- "dev": true
+ "find-up": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
+ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
+ "dev": true,
+ "requires": {
+ "locate-path": "^3.0.0"
+ }
},
- "har-validator": {
- "version": "5.1.3",
- "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz",
- "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==",
+ "get-stream": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
+ "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
"dev": true,
"requires": {
- "ajv": "^6.5.5",
- "har-schema": "^2.0.0"
+ "pump": "^3.0.0"
}
},
- "oauth-sign": {
- "version": "0.9.0",
- "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
- "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==",
+ "invert-kv": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz",
+ "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==",
"dev": true
},
- "punycode": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
- "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
+ "jest-cli": {
+ "version": "24.8.0",
+ "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-24.8.0.tgz",
+ "integrity": "sha512-+p6J00jSMPQ116ZLlHJJvdf8wbjNbZdeSX9ptfHX06/MSNaXmKihQzx5vQcw0q2G6JsdVkUIdWbOWtSnaYs3yA==",
+ "dev": true,
+ "requires": {
+ "@jest/core": "^24.8.0",
+ "@jest/test-result": "^24.8.0",
+ "@jest/types": "^24.8.0",
+ "chalk": "^2.0.1",
+ "exit": "^0.1.2",
+ "import-local": "^2.0.0",
+ "is-ci": "^2.0.0",
+ "jest-config": "^24.8.0",
+ "jest-util": "^24.8.0",
+ "jest-validate": "^24.8.0",
+ "prompts": "^2.0.1",
+ "realpath-native": "^1.1.0",
+ "yargs": "^12.0.2"
+ }
+ },
+ "lcid": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz",
+ "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==",
+ "dev": true,
+ "requires": {
+ "invert-kv": "^2.0.0"
+ }
+ },
+ "locate-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
+ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
+ "dev": true,
+ "requires": {
+ "p-locate": "^3.0.0",
+ "path-exists": "^3.0.0"
+ }
+ },
+ "mem": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz",
+ "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==",
+ "dev": true,
+ "requires": {
+ "map-age-cleaner": "^0.1.1",
+ "mimic-fn": "^2.0.0",
+ "p-is-promise": "^2.0.0"
+ }
+ },
+ "mimic-fn": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
+ "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
"dev": true
},
- "request": {
- "version": "2.88.0",
- "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz",
- "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==",
- "dev": true,
- "requires": {
- "aws-sign2": "~0.7.0",
- "aws4": "^1.8.0",
- "caseless": "~0.12.0",
- "combined-stream": "~1.0.6",
- "extend": "~3.0.2",
- "forever-agent": "~0.6.1",
- "form-data": "~2.3.2",
- "har-validator": "~5.1.0",
- "http-signature": "~1.2.0",
- "is-typedarray": "~1.0.0",
- "isstream": "~0.1.2",
- "json-stringify-safe": "~5.0.1",
- "mime-types": "~2.1.19",
- "oauth-sign": "~0.9.0",
- "performance-now": "^2.1.0",
- "qs": "~6.5.2",
- "safe-buffer": "^5.1.2",
- "tough-cookie": "~2.4.3",
- "tunnel-agent": "^0.6.0",
- "uuid": "^3.3.2"
+ "os-locale": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz",
+ "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==",
+ "dev": true,
+ "requires": {
+ "execa": "^1.0.0",
+ "lcid": "^2.0.0",
+ "mem": "^4.0.0"
}
},
- "tough-cookie": {
- "version": "2.4.3",
- "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz",
- "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==",
+ "p-limit": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz",
+ "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==",
"dev": true,
"requires": {
- "psl": "^1.1.24",
- "punycode": "^1.4.1"
+ "p-try": "^2.0.0"
}
},
- "uuid": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz",
- "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==",
+ "p-locate": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
+ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
+ "dev": true,
+ "requires": {
+ "p-limit": "^2.0.0"
+ }
+ },
+ "p-try": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
"dev": true
- }
- }
- },
- "jsdom-global": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/jsdom-global/-/jsdom-global-3.0.2.tgz",
- "integrity": "sha1-a9KZwTsMRiay2iwDk81DhdYGrLk=",
- "dev": true
- },
- "jsesc": {
- "version": "2.5.2",
- "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
- "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
- "dev": true
- },
- "json-parse-better-errors": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
- "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==",
- "dev": true
- },
- "json-schema": {
- "version": "0.2.3",
- "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
- "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=",
- "dev": true
- },
- "json-schema-traverse": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
- "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
- "dev": true
+ },
+ "pump": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
+ "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
+ "dev": true,
+ "requires": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.1"
+ }
+ },
+ "yargs": {
+ "version": "12.0.5",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz",
+ "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==",
+ "dev": true,
+ "requires": {
+ "cliui": "^4.0.0",
+ "decamelize": "^1.2.0",
+ "find-up": "^3.0.0",
+ "get-caller-file": "^1.0.1",
+ "os-locale": "^3.0.0",
+ "require-directory": "^2.1.1",
+ "require-main-filename": "^1.0.1",
+ "set-blocking": "^2.0.0",
+ "string-width": "^2.0.0",
+ "which-module": "^2.0.0",
+ "y18n": "^3.2.1 || ^4.0.0",
+ "yargs-parser": "^11.1.1"
+ }
+ },
+ "yargs-parser": {
+ "version": "11.1.1",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz",
+ "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==",
+ "dev": true,
+ "requires": {
+ "camelcase": "^5.0.0",
+ "decamelize": "^1.2.0"
+ }
+ }
+ }
},
- "json-stable-stringify": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-0.0.1.tgz",
- "integrity": "sha1-YRwj6BTbN1Un34URk9tZ3Sryf0U=",
+ "jest-changed-files": {
+ "version": "24.8.0",
+ "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-24.8.0.tgz",
+ "integrity": "sha512-qgANC1Yrivsq+UrLXsvJefBKVoCsKB0Hv+mBb6NMjjZ90wwxCDmU3hsCXBya30cH+LnPYjwgcU65i6yJ5Nfuug==",
"dev": true,
"requires": {
- "jsonify": "~0.0.0"
+ "@jest/types": "^24.8.0",
+ "execa": "^1.0.0",
+ "throat": "^4.0.0"
+ },
+ "dependencies": {
+ "cross-spawn": {
+ "version": "6.0.5",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
+ "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
+ "dev": true,
+ "requires": {
+ "nice-try": "^1.0.4",
+ "path-key": "^2.0.1",
+ "semver": "^5.5.0",
+ "shebang-command": "^1.2.0",
+ "which": "^1.2.9"
+ }
+ },
+ "execa": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz",
+ "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==",
+ "dev": true,
+ "requires": {
+ "cross-spawn": "^6.0.0",
+ "get-stream": "^4.0.0",
+ "is-stream": "^1.1.0",
+ "npm-run-path": "^2.0.0",
+ "p-finally": "^1.0.0",
+ "signal-exit": "^3.0.0",
+ "strip-eof": "^1.0.0"
+ }
+ },
+ "get-stream": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
+ "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
+ "dev": true,
+ "requires": {
+ "pump": "^3.0.0"
+ }
+ },
+ "pump": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
+ "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
+ "dev": true,
+ "requires": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.1"
+ }
+ }
}
},
- "json-stable-stringify-without-jsonify": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
- "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
- "dev": true
- },
- "json-stringify-safe": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
- "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
- "dev": true
- },
- "json5": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.0.tgz",
- "integrity": "sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ==",
+ "jest-config": {
+ "version": "24.8.0",
+ "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-24.8.0.tgz",
+ "integrity": "sha512-Czl3Nn2uEzVGsOeaewGWoDPD8GStxCpAe0zOYs2x2l0fZAgPbCr3uwUkgNKV3LwE13VXythM946cd5rdGkkBZw==",
"dev": true,
"requires": {
- "minimist": "^1.2.0"
+ "@babel/core": "^7.1.0",
+ "@jest/test-sequencer": "^24.8.0",
+ "@jest/types": "^24.8.0",
+ "babel-jest": "^24.8.0",
+ "chalk": "^2.0.1",
+ "glob": "^7.1.1",
+ "jest-environment-jsdom": "^24.8.0",
+ "jest-environment-node": "^24.8.0",
+ "jest-get-type": "^24.8.0",
+ "jest-jasmine2": "^24.8.0",
+ "jest-regex-util": "^24.3.0",
+ "jest-resolve": "^24.8.0",
+ "jest-util": "^24.8.0",
+ "jest-validate": "^24.8.0",
+ "micromatch": "^3.1.10",
+ "pretty-format": "^24.8.0",
+ "realpath-native": "^1.1.0"
}
},
- "jsonfile": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz",
- "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=",
+ "jest-diff": {
+ "version": "24.8.0",
+ "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-24.8.0.tgz",
+ "integrity": "sha512-wxetCEl49zUpJ/bvUmIFjd/o52J+yWcoc5ZyPq4/W1LUKGEhRYDIbP1KcF6t+PvqNrGAFk4/JhtxDq/Nnzs66g==",
"dev": true,
"requires": {
- "graceful-fs": "^4.1.6"
+ "chalk": "^2.0.1",
+ "diff-sequences": "^24.3.0",
+ "jest-get-type": "^24.8.0",
+ "pretty-format": "^24.8.0"
}
},
- "jsonify": {
- "version": "0.0.0",
- "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz",
- "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=",
- "dev": true
- },
- "jsonparse": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz",
- "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=",
- "dev": true
- },
- "jsonschema": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.2.4.tgz",
- "integrity": "sha512-lz1nOH69GbsVHeVgEdvyavc/33oymY1AZwtePMiMj4HZPMbP5OIKK3zT9INMWjwua/V4Z4yq7wSlBbSG+g4AEw=="
- },
- "jsprim": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
- "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
+ "jest-docblock": {
+ "version": "24.3.0",
+ "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-24.3.0.tgz",
+ "integrity": "sha512-nlANmF9Yq1dufhFlKG9rasfQlrY7wINJbo3q01tu56Jv5eBU5jirylhF2O5ZBnLxzOVBGRDz/9NAwNyBtG4Nyg==",
"dev": true,
"requires": {
- "assert-plus": "1.0.0",
- "extsprintf": "1.3.0",
- "json-schema": "0.2.3",
- "verror": "1.10.0"
+ "detect-newline": "^2.1.0"
}
},
- "just-debounce": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/just-debounce/-/just-debounce-1.0.0.tgz",
- "integrity": "sha1-h/zPrv/AtozRnVX2cilD+SnqNeo=",
- "dev": true
+ "jest-each": {
+ "version": "24.8.0",
+ "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-24.8.0.tgz",
+ "integrity": "sha512-NrwK9gaL5+XgrgoCsd9svsoWdVkK4gnvyhcpzd6m487tXHqIdYeykgq3MKI1u4I+5Zf0tofr70at9dWJDeb+BA==",
+ "dev": true,
+ "requires": {
+ "@jest/types": "^24.8.0",
+ "chalk": "^2.0.1",
+ "jest-get-type": "^24.8.0",
+ "jest-util": "^24.8.0",
+ "pretty-format": "^24.8.0"
+ }
},
- "karma": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/karma/-/karma-3.1.1.tgz",
- "integrity": "sha512-NetT3wPCQMNB36uiL9LLyhrOt8SQwrEKt0xD3+KpTCfm0VxVyUJdPL5oTq2Ic5ouemgL/Iz4wqXEbF3zea9kQQ==",
- "dev": true,
- "requires": {
- "bluebird": "^3.3.0",
- "body-parser": "^1.16.1",
- "chokidar": "^2.0.3",
- "colors": "^1.1.0",
- "combine-lists": "^1.0.0",
- "connect": "^3.6.0",
- "core-js": "^2.2.0",
- "di": "^0.0.1",
- "dom-serialize": "^2.2.0",
- "expand-braces": "^0.1.1",
- "glob": "^7.1.1",
- "graceful-fs": "^4.1.2",
- "http-proxy": "^1.13.0",
- "isbinaryfile": "^3.0.0",
- "lodash": "^4.17.4",
- "log4js": "^3.0.0",
- "mime": "^2.3.1",
- "minimatch": "^3.0.2",
- "optimist": "^0.6.1",
- "qjobs": "^1.1.4",
- "range-parser": "^1.2.0",
- "rimraf": "^2.6.0",
- "safe-buffer": "^5.0.1",
- "socket.io": "2.1.1",
- "source-map": "^0.6.1",
- "tmp": "0.0.33",
- "useragent": "2.2.1"
+ "jest-environment-jsdom": {
+ "version": "24.8.0",
+ "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-24.8.0.tgz",
+ "integrity": "sha512-qbvgLmR7PpwjoFjM/sbuqHJt/NCkviuq9vus9NBn/76hhSidO+Z6Bn9tU8friecegbJL8gzZQEMZBQlFWDCwAQ==",
+ "dev": true,
+ "requires": {
+ "@jest/environment": "^24.8.0",
+ "@jest/fake-timers": "^24.8.0",
+ "@jest/types": "^24.8.0",
+ "jest-mock": "^24.8.0",
+ "jest-util": "^24.8.0",
+ "jsdom": "^11.5.1"
},
"dependencies": {
- "colors": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/colors/-/colors-1.3.2.tgz",
- "integrity": "sha512-rhP0JSBGYvpcNQj4s5AdShMeE5ahMop96cTeDl/v9qQQm2fYClE2QXZRi8wLzc+GmXSxdIqqbOIAhyObEXDbfQ==",
+ "acorn": {
+ "version": "5.7.3",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz",
+ "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==",
"dev": true
},
- "mime": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/mime/-/mime-2.3.1.tgz",
- "integrity": "sha512-OEUllcVoydBHGN1z84yfQDimn58pZNNNXgZlHXSboxMlFvgI6MXSWpWKpFRra7H1HxpVhHTkrghfRW49k6yjeg==",
+ "jsdom": {
+ "version": "11.12.0",
+ "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-11.12.0.tgz",
+ "integrity": "sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw==",
+ "dev": true,
+ "requires": {
+ "abab": "^2.0.0",
+ "acorn": "^5.5.3",
+ "acorn-globals": "^4.1.0",
+ "array-equal": "^1.0.0",
+ "cssom": ">= 0.3.2 < 0.4.0",
+ "cssstyle": "^1.0.0",
+ "data-urls": "^1.0.0",
+ "domexception": "^1.0.1",
+ "escodegen": "^1.9.1",
+ "html-encoding-sniffer": "^1.0.2",
+ "left-pad": "^1.3.0",
+ "nwsapi": "^2.0.7",
+ "parse5": "4.0.0",
+ "pn": "^1.1.0",
+ "request": "^2.87.0",
+ "request-promise-native": "^1.0.5",
+ "sax": "^1.2.4",
+ "symbol-tree": "^3.2.2",
+ "tough-cookie": "^2.3.4",
+ "w3c-hr-time": "^1.0.1",
+ "webidl-conversions": "^4.0.2",
+ "whatwg-encoding": "^1.0.3",
+ "whatwg-mimetype": "^2.1.0",
+ "whatwg-url": "^6.4.1",
+ "ws": "^5.2.0",
+ "xml-name-validator": "^3.0.0"
+ }
+ },
+ "parse5": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz",
+ "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==",
"dev": true
},
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "sax": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
+ "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==",
"dev": true
+ },
+ "whatwg-url": {
+ "version": "6.5.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.5.0.tgz",
+ "integrity": "sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ==",
+ "dev": true,
+ "requires": {
+ "lodash.sortby": "^4.7.0",
+ "tr46": "^1.0.1",
+ "webidl-conversions": "^4.0.2"
+ }
+ },
+ "ws": {
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz",
+ "integrity": "sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==",
+ "dev": true,
+ "requires": {
+ "async-limiter": "~1.0.0"
+ }
}
}
},
- "karma-browserify": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/karma-browserify/-/karma-browserify-5.3.0.tgz",
- "integrity": "sha512-EMaUd1RNyQVGTETI80dtX/fEtYs57/A5sl3rClvzJFImPW1s3EtsbESfqNtk7/OkzfYuAHLh4RSZSSbVgvhNdQ==",
+ "jest-environment-node": {
+ "version": "24.8.0",
+ "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-24.8.0.tgz",
+ "integrity": "sha512-vIGUEScd1cdDgR6sqn2M08sJTRLQp6Dk/eIkCeO4PFHxZMOgy+uYLPMC4ix3PEfM5Au/x3uQ/5Tl0DpXXZsJ/Q==",
"dev": true,
"requires": {
- "convert-source-map": "^1.1.3",
- "hat": "^0.0.3",
- "js-string-escape": "^1.0.0",
- "lodash": "^4.17.10",
- "minimatch": "^3.0.0",
- "os-shim": "^0.1.3"
- }
- },
- "karma-browserstack-launcher": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/karma-browserstack-launcher/-/karma-browserstack-launcher-1.4.0.tgz",
- "integrity": "sha512-bUQK84U+euDfOUfEjcF4IareySMOBNRLrrl9q6cttIe8f011Ir6olLITTYMOJDcGY58wiFIdhPHSPd9Pi6+NfQ==",
- "dev": true,
- "requires": {
- "browserstack": "~1.5.1",
- "browserstacktunnel-wrapper": "~2.0.2",
- "q": "~1.5.0"
+ "@jest/environment": "^24.8.0",
+ "@jest/fake-timers": "^24.8.0",
+ "@jest/types": "^24.8.0",
+ "jest-mock": "^24.8.0",
+ "jest-util": "^24.8.0"
}
},
- "karma-chrome-launcher": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-2.2.0.tgz",
- "integrity": "sha512-uf/ZVpAabDBPvdPdveyk1EPgbnloPvFFGgmRhYLTDH7gEB4nZdSBk8yTU47w1g/drLSx5uMOkjKk7IWKfWg/+w==",
- "dev": true,
- "requires": {
- "fs-access": "^1.0.0",
- "which": "^1.2.1"
- }
+ "jest-get-type": {
+ "version": "24.8.0",
+ "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-24.8.0.tgz",
+ "integrity": "sha512-RR4fo8jEmMD9zSz2nLbs2j0zvPpk/KCEz3a62jJWbd2ayNo0cb+KFRxPHVhE4ZmgGJEQp0fosmNz84IfqM8cMQ==",
+ "dev": true
},
- "karma-electron": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/karma-electron/-/karma-electron-6.0.0.tgz",
- "integrity": "sha1-yCTdpG9J9/x0S2ubYOZBOXmUc2I=",
+ "jest-haste-map": {
+ "version": "24.8.0",
+ "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-24.8.0.tgz",
+ "integrity": "sha512-ZBPRGHdPt1rHajWelXdqygIDpJx8u3xOoLyUBWRW28r3tagrgoepPrzAozW7kW9HrQfhvmiv1tncsxqHJO1onQ==",
"dev": true,
"requires": {
- "combine-source-map": "~0.8.0",
- "commander": "~2.9.0",
- "convert-source-map": "~1.2.0",
- "js-string-escape": "~1.0.0",
- "minstache": "~1.2.0",
- "xtend": "~4.0.1"
+ "@jest/types": "^24.8.0",
+ "anymatch": "^2.0.0",
+ "fb-watchman": "^2.0.0",
+ "fsevents": "^1.2.7",
+ "graceful-fs": "^4.1.15",
+ "invariant": "^2.2.4",
+ "jest-serializer": "^24.4.0",
+ "jest-util": "^24.8.0",
+ "jest-worker": "^24.6.0",
+ "micromatch": "^3.1.10",
+ "sane": "^4.0.3",
+ "walker": "^1.0.7"
},
"dependencies": {
- "commander": {
- "version": "2.9.0",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz",
- "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=",
- "dev": true,
- "requires": {
- "graceful-readlink": ">= 1.0.0"
- }
- },
- "convert-source-map": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.2.0.tgz",
- "integrity": "sha1-RMCMJQbxD7PKb9iI1aNETPjWpmk=",
+ "graceful-fs": {
+ "version": "4.1.15",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz",
+ "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==",
"dev": true
}
}
},
- "karma-firefox-launcher": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/karma-firefox-launcher/-/karma-firefox-launcher-1.1.0.tgz",
- "integrity": "sha512-LbZ5/XlIXLeQ3cqnCbYLn+rOVhuMIK9aZwlP6eOLGzWdo1UVp7t6CN3DP4SafiRLjexKwHeKHDm0c38Mtd3VxA==",
- "dev": true
- },
- "karma-mocha": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/karma-mocha/-/karma-mocha-1.3.0.tgz",
- "integrity": "sha1-7qrH/8DiAetjxGdEDStpx883eL8=",
+ "jest-jasmine2": {
+ "version": "24.8.0",
+ "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-24.8.0.tgz",
+ "integrity": "sha512-cEky88npEE5LKd5jPpTdDCLvKkdyklnaRycBXL6GNmpxe41F0WN44+i7lpQKa/hcbXaQ+rc9RMaM4dsebrYong==",
"dev": true,
"requires": {
- "minimist": "1.2.0"
+ "@babel/traverse": "^7.1.0",
+ "@jest/environment": "^24.8.0",
+ "@jest/test-result": "^24.8.0",
+ "@jest/types": "^24.8.0",
+ "chalk": "^2.0.1",
+ "co": "^4.6.0",
+ "expect": "^24.8.0",
+ "is-generator-fn": "^2.0.0",
+ "jest-each": "^24.8.0",
+ "jest-matcher-utils": "^24.8.0",
+ "jest-message-util": "^24.8.0",
+ "jest-runtime": "^24.8.0",
+ "jest-snapshot": "^24.8.0",
+ "jest-util": "^24.8.0",
+ "pretty-format": "^24.8.0",
+ "throat": "^4.0.0"
}
},
- "karma-rollup-preprocessor": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/karma-rollup-preprocessor/-/karma-rollup-preprocessor-6.1.0.tgz",
- "integrity": "sha512-/sps47osPwmtHpiod3lQWvhJXA1g0aSij8O4VyP2lv5PFEIB7Nft2k8yCSVGdO+dbvmpfXJ85cpqklUah4VGhw==",
+ "jest-leak-detector": {
+ "version": "24.8.0",
+ "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-24.8.0.tgz",
+ "integrity": "sha512-cG0yRSK8A831LN8lIHxI3AblB40uhv0z+SsQdW3GoMMVcK+sJwrIIyax5tu3eHHNJ8Fu6IMDpnLda2jhn2pD/g==",
"dev": true,
"requires": {
- "chokidar": "^2.0.0"
+ "pretty-format": "^24.8.0"
}
},
- "keypress": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/keypress/-/keypress-0.1.0.tgz",
- "integrity": "sha1-SjGI1CkbZrT2XtuZ+AaqmuKTWSo=",
- "dev": true
- },
- "kind-of": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
- "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+ "jest-localstorage-mock": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/jest-localstorage-mock/-/jest-localstorage-mock-2.4.0.tgz",
+ "integrity": "sha512-/mC1JxnMeuIlAaQBsDMilskC/x/BicsQ/BXQxEOw+5b1aGZkkOAqAF3nu8yq449CpzGtp5jJ5wCmDNxLgA2m6A==",
"dev": true
},
- "klaw": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz",
- "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=",
+ "jest-matcher-utils": {
+ "version": "24.8.0",
+ "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-24.8.0.tgz",
+ "integrity": "sha512-lex1yASY51FvUuHgm0GOVj7DCYEouWSlIYmCW7APSqB9v8mXmKSn5+sWVF0MhuASG0bnYY106/49JU1FZNl5hw==",
"dev": true,
"requires": {
- "graceful-fs": "^4.1.9"
+ "chalk": "^2.0.1",
+ "jest-diff": "^24.8.0",
+ "jest-get-type": "^24.8.0",
+ "pretty-format": "^24.8.0"
}
},
- "labeled-stream-splicer": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-2.0.1.tgz",
- "integrity": "sha512-MC94mHZRvJ3LfykJlTUipBqenZz1pacOZEMhhQ8dMGcDHs0SBE5GbsavUXV7YtP3icBW17W0Zy1I0lfASmo9Pg==",
+ "jest-message-util": {
+ "version": "24.8.0",
+ "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-24.8.0.tgz",
+ "integrity": "sha512-p2k71rf/b6ns8btdB0uVdljWo9h0ovpnEe05ZKWceQGfXYr4KkzgKo3PBi8wdnd9OtNh46VpNIJynUn/3MKm1g==",
"dev": true,
"requires": {
- "inherits": "^2.0.1",
- "isarray": "^2.0.4",
- "stream-splicer": "^2.0.0"
+ "@babel/code-frame": "^7.0.0",
+ "@jest/test-result": "^24.8.0",
+ "@jest/types": "^24.8.0",
+ "@types/stack-utils": "^1.0.1",
+ "chalk": "^2.0.1",
+ "micromatch": "^3.1.10",
+ "slash": "^2.0.0",
+ "stack-utils": "^1.0.1"
},
"dependencies": {
- "isarray": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.4.tgz",
- "integrity": "sha512-GMxXOiUirWg1xTKRipM0Ek07rX+ubx4nNVElTJdNLYmNO/2YrDkgJGw9CljXn+r4EWiDQg/8lsRdHyg2PJuUaA==",
+ "slash": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz",
+ "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==",
"dev": true
}
}
},
- "last-run": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/last-run/-/last-run-1.1.1.tgz",
- "integrity": "sha1-RblpQsF7HHnHchmCWbqUO+v4yls=",
- "dev": true,
- "requires": {
- "default-resolution": "^2.0.0",
- "es6-weak-map": "^2.0.1"
- }
- },
- "latest-version": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-2.0.0.tgz",
- "integrity": "sha1-VvjWE5YghHuAF/jx9NeOIRMkFos=",
+ "jest-mock": {
+ "version": "24.8.0",
+ "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-24.8.0.tgz",
+ "integrity": "sha512-6kWugwjGjJw+ZkK4mDa0Df3sDlUTsV47MSrT0nGQ0RBWJbpODDQ8MHDVtGtUYBne3IwZUhtB7elxHspU79WH3A==",
"dev": true,
"requires": {
- "package-json": "^2.0.0"
+ "@jest/types": "^24.8.0"
}
},
- "lazy-cache": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz",
- "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=",
- "dev": true,
- "optional": true
+ "jest-pnp-resolver": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.1.tgz",
+ "integrity": "sha512-pgFw2tm54fzgYvc/OHrnysABEObZCUNFnhjoRjaVOCN8NYc032/gVjPaHD4Aq6ApkSieWtfKAFQtmDKAmhupnQ==",
+ "dev": true
},
- "lazy-req": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/lazy-req/-/lazy-req-1.1.0.tgz",
- "integrity": "sha1-va6+rTD42CQDnODOFJ1Nqge6H6w=",
+ "jest-regex-util": {
+ "version": "24.3.0",
+ "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-24.3.0.tgz",
+ "integrity": "sha512-tXQR1NEOyGlfylyEjg1ImtScwMq8Oh3iJbGTjN7p0J23EuVX1MA8rwU69K4sLbCmwzgCUbVkm0FkSF9TdzOhtg==",
"dev": true
},
- "lazystream": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz",
- "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=",
+ "jest-resolve": {
+ "version": "24.8.0",
+ "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-24.8.0.tgz",
+ "integrity": "sha512-+hjSzi1PoRvnuOICoYd5V/KpIQmkAsfjFO71458hQ2Whi/yf1GDeBOFj8Gxw4LrApHsVJvn5fmjcPdmoUHaVKw==",
"dev": true,
"requires": {
- "readable-stream": "^2.0.5"
+ "@jest/types": "^24.8.0",
+ "browser-resolve": "^1.11.3",
+ "chalk": "^2.0.1",
+ "jest-pnp-resolver": "^1.2.1",
+ "realpath-native": "^1.1.0"
}
},
- "lcid": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz",
- "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=",
+ "jest-resolve-dependencies": {
+ "version": "24.8.0",
+ "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-24.8.0.tgz",
+ "integrity": "sha512-hyK1qfIf/krV+fSNyhyJeq3elVMhK9Eijlwy+j5jqmZ9QsxwKBiP6qukQxaHtK8k6zql/KYWwCTQ+fDGTIJauw==",
"dev": true,
"requires": {
- "invert-kv": "^1.0.0"
+ "@jest/types": "^24.8.0",
+ "jest-regex-util": "^24.3.0",
+ "jest-snapshot": "^24.8.0"
}
},
- "lead": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/lead/-/lead-1.0.0.tgz",
- "integrity": "sha1-bxT5mje+Op3XhPVJVpDlkDRm7kI=",
+ "jest-runner": {
+ "version": "24.8.0",
+ "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-24.8.0.tgz",
+ "integrity": "sha512-utFqC5BaA3JmznbissSs95X1ZF+d+4WuOWwpM9+Ak356YtMhHE/GXUondZdcyAAOTBEsRGAgH/0TwLzfI9h7ow==",
"dev": true,
"requires": {
- "flush-write-stream": "^1.0.2"
+ "@jest/console": "^24.7.1",
+ "@jest/environment": "^24.8.0",
+ "@jest/test-result": "^24.8.0",
+ "@jest/types": "^24.8.0",
+ "chalk": "^2.4.2",
+ "exit": "^0.1.2",
+ "graceful-fs": "^4.1.15",
+ "jest-config": "^24.8.0",
+ "jest-docblock": "^24.3.0",
+ "jest-haste-map": "^24.8.0",
+ "jest-jasmine2": "^24.8.0",
+ "jest-leak-detector": "^24.8.0",
+ "jest-message-util": "^24.8.0",
+ "jest-resolve": "^24.8.0",
+ "jest-runtime": "^24.8.0",
+ "jest-util": "^24.8.0",
+ "jest-worker": "^24.6.0",
+ "source-map-support": "^0.5.6",
+ "throat": "^4.0.0"
+ },
+ "dependencies": {
+ "graceful-fs": {
+ "version": "4.1.15",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz",
+ "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==",
+ "dev": true
+ }
}
},
- "level-blobs": {
- "version": "0.1.7",
- "resolved": "https://registry.npmjs.org/level-blobs/-/level-blobs-0.1.7.tgz",
- "integrity": "sha1-mrm5e7mfHtv594o0M+Ie1WOGva8=",
+ "jest-runtime": {
+ "version": "24.8.0",
+ "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-24.8.0.tgz",
+ "integrity": "sha512-Mq0aIXhvO/3bX44ccT+czU1/57IgOMyy80oM0XR/nyD5zgBcesF84BPabZi39pJVA6UXw+fY2Q1N+4BiVUBWOA==",
"dev": true,
"requires": {
- "level-peek": "1.0.6",
- "once": "^1.3.0",
- "readable-stream": "^1.0.26-4"
+ "@jest/console": "^24.7.1",
+ "@jest/environment": "^24.8.0",
+ "@jest/source-map": "^24.3.0",
+ "@jest/transform": "^24.8.0",
+ "@jest/types": "^24.8.0",
+ "@types/yargs": "^12.0.2",
+ "chalk": "^2.0.1",
+ "exit": "^0.1.2",
+ "glob": "^7.1.3",
+ "graceful-fs": "^4.1.15",
+ "jest-config": "^24.8.0",
+ "jest-haste-map": "^24.8.0",
+ "jest-message-util": "^24.8.0",
+ "jest-mock": "^24.8.0",
+ "jest-regex-util": "^24.3.0",
+ "jest-resolve": "^24.8.0",
+ "jest-snapshot": "^24.8.0",
+ "jest-util": "^24.8.0",
+ "jest-validate": "^24.8.0",
+ "realpath-native": "^1.1.0",
+ "slash": "^2.0.0",
+ "strip-bom": "^3.0.0",
+ "yargs": "^12.0.2"
},
"dependencies": {
- "isarray": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
- "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+ "camelcase": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
+ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
"dev": true
},
- "readable-stream": {
- "version": "1.1.14",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
- "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
+ "cross-spawn": {
+ "version": "6.0.5",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
+ "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
"dev": true,
"requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.1",
- "isarray": "0.0.1",
- "string_decoder": "~0.10.x"
+ "nice-try": "^1.0.4",
+ "path-key": "^2.0.1",
+ "semver": "^5.5.0",
+ "shebang-command": "^1.2.0",
+ "which": "^1.2.9"
}
},
- "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
- }
- }
- },
- "level-filesystem": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/level-filesystem/-/level-filesystem-1.2.0.tgz",
- "integrity": "sha1-oArKmRnEpN+v3KaoEI0iWq3/Y7M=",
- "dev": true,
- "requires": {
- "concat-stream": "^1.4.4",
- "errno": "^0.1.1",
- "fwd-stream": "^1.0.4",
- "level-blobs": "^0.1.7",
- "level-peek": "^1.0.6",
- "level-sublevel": "^5.2.0",
- "octal": "^1.0.0",
- "once": "^1.3.0",
- "xtend": "^2.2.0"
- },
- "dependencies": {
- "xtend": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.2.0.tgz",
- "integrity": "sha1-7vax8ZjByN6vrYsXZaBNrUoBxak=",
- "dev": true
- }
- }
- },
- "level-fix-range": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/level-fix-range/-/level-fix-range-1.0.2.tgz",
- "integrity": "sha1-vxW5Fa422EcMgh6IPd95zRZCCCg=",
- "dev": true
- },
- "level-hooks": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/level-hooks/-/level-hooks-4.5.0.tgz",
- "integrity": "sha1-G5rmGSKTDzMF0aYfxNg8gQLA3ZM=",
- "dev": true,
- "requires": {
- "string-range": "~1.2"
- }
- },
- "level-js": {
- "version": "2.2.4",
- "resolved": "https://registry.npmjs.org/level-js/-/level-js-2.2.4.tgz",
- "integrity": "sha1-vAVfQYBjXUSJtWHJSG+jcOjBFpc=",
- "dev": true,
- "requires": {
- "abstract-leveldown": "~0.12.0",
- "idb-wrapper": "^1.5.0",
- "isbuffer": "~0.0.0",
- "ltgt": "^2.1.2",
- "typedarray-to-buffer": "~1.0.0",
- "xtend": "~2.1.2"
- },
- "dependencies": {
- "xtend": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz",
- "integrity": "sha1-bv7MKk2tjmlixJAbM3znuoe10os=",
+ "execa": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz",
+ "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==",
"dev": true,
"requires": {
- "object-keys": "~0.4.0"
+ "cross-spawn": "^6.0.0",
+ "get-stream": "^4.0.0",
+ "is-stream": "^1.1.0",
+ "npm-run-path": "^2.0.0",
+ "p-finally": "^1.0.0",
+ "signal-exit": "^3.0.0",
+ "strip-eof": "^1.0.0"
}
- }
- }
- },
- "level-peek": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/level-peek/-/level-peek-1.0.6.tgz",
- "integrity": "sha1-vsUccqgu5GTTNkNMfIdsP8vM538=",
- "dev": true,
- "requires": {
- "level-fix-range": "~1.0.2"
- }
- },
- "level-sublevel": {
- "version": "5.2.3",
- "resolved": "https://registry.npmjs.org/level-sublevel/-/level-sublevel-5.2.3.tgz",
- "integrity": "sha1-dEwSxy0ucr543eO5tc2E1iGRQTo=",
- "dev": true,
- "requires": {
- "level-fix-range": "2.0",
- "level-hooks": ">=4.4.0 <5",
- "string-range": "~1.2.1",
- "xtend": "~2.0.4"
- },
- "dependencies": {
- "clone": {
- "version": "0.1.19",
- "resolved": "https://registry.npmjs.org/clone/-/clone-0.1.19.tgz",
- "integrity": "sha1-YT+2hjmyaklKxTJT4Vsaa9iK2oU=",
- "dev": true
},
- "level-fix-range": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/level-fix-range/-/level-fix-range-2.0.0.tgz",
- "integrity": "sha1-xBfWIVlEIVGhnZojZ4aPFyTC1Ug=",
+ "find-up": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
+ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
"dev": true,
"requires": {
- "clone": "~0.1.9"
+ "locate-path": "^3.0.0"
}
},
- "object-keys": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.2.0.tgz",
- "integrity": "sha1-zd7AKZiwkb5CvxA1rjLknxy26mc=",
+ "get-stream": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
+ "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
"dev": true,
"requires": {
- "foreach": "~2.0.1",
- "indexof": "~0.0.1",
- "is": "~0.2.6"
+ "pump": "^3.0.0"
}
},
- "xtend": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.0.6.tgz",
- "integrity": "sha1-XqZXptukRwacLlnFihE4ywxebO4=",
+ "graceful-fs": {
+ "version": "4.1.15",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz",
+ "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==",
+ "dev": true
+ },
+ "invert-kv": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz",
+ "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==",
+ "dev": true
+ },
+ "lcid": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz",
+ "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==",
"dev": true,
"requires": {
- "is-object": "~0.1.2",
- "object-keys": "~0.2.0"
+ "invert-kv": "^2.0.0"
}
- }
- }
- },
- "levelup": {
- "version": "0.18.6",
- "resolved": "https://registry.npmjs.org/levelup/-/levelup-0.18.6.tgz",
- "integrity": "sha1-5qAcsIlhbI7MApHCqb0/DETj5es=",
- "dev": true,
- "requires": {
- "bl": "~0.8.1",
- "deferred-leveldown": "~0.2.0",
- "errno": "~0.1.1",
- "prr": "~0.0.0",
- "readable-stream": "~1.0.26",
- "semver": "~2.3.1",
- "xtend": "~3.0.0"
- },
- "dependencies": {
- "bl": {
- "version": "0.8.2",
- "resolved": "https://registry.npmjs.org/bl/-/bl-0.8.2.tgz",
- "integrity": "sha1-yba8oI0bwuoA/Ir7Txpf0eHGbk4=",
+ },
+ "locate-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
+ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
"dev": true,
"requires": {
- "readable-stream": "~1.0.26"
+ "p-locate": "^3.0.0",
+ "path-exists": "^3.0.0"
}
},
- "isarray": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
- "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
- "dev": true
+ "mem": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz",
+ "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==",
+ "dev": true,
+ "requires": {
+ "map-age-cleaner": "^0.1.1",
+ "mimic-fn": "^2.0.0",
+ "p-is-promise": "^2.0.0"
+ }
},
- "prr": {
- "version": "0.0.0",
- "resolved": "https://registry.npmjs.org/prr/-/prr-0.0.0.tgz",
- "integrity": "sha1-GoS4WQgyVQFBGFPQCB7j+obikmo=",
+ "mimic-fn": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
+ "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
"dev": true
},
- "readable-stream": {
- "version": "1.0.34",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
- "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
+ "os-locale": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz",
+ "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==",
"dev": true,
"requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.1",
- "isarray": "0.0.1",
- "string_decoder": "~0.10.x"
+ "execa": "^1.0.0",
+ "lcid": "^2.0.0",
+ "mem": "^4.0.0"
}
},
- "semver": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-2.3.2.tgz",
- "integrity": "sha1-uYSPJdbPNjMwc+ye+IVtQvEjPlI=",
+ "p-limit": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz",
+ "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==",
+ "dev": true,
+ "requires": {
+ "p-try": "^2.0.0"
+ }
+ },
+ "p-locate": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
+ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
+ "dev": true,
+ "requires": {
+ "p-limit": "^2.0.0"
+ }
+ },
+ "p-try": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
"dev": true
},
- "string_decoder": {
- "version": "0.10.31",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
- "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+ "pump": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
+ "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
+ "dev": true,
+ "requires": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.1"
+ }
+ },
+ "slash": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz",
+ "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==",
"dev": true
},
- "xtend": {
+ "strip-bom": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/xtend/-/xtend-3.0.0.tgz",
- "integrity": "sha1-XM50B7r2Qsunvs2laBEcST9ZZlo=",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
+ "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
"dev": true
+ },
+ "yargs": {
+ "version": "12.0.5",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz",
+ "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==",
+ "dev": true,
+ "requires": {
+ "cliui": "^4.0.0",
+ "decamelize": "^1.2.0",
+ "find-up": "^3.0.0",
+ "get-caller-file": "^1.0.1",
+ "os-locale": "^3.0.0",
+ "require-directory": "^2.1.1",
+ "require-main-filename": "^1.0.1",
+ "set-blocking": "^2.0.0",
+ "string-width": "^2.0.0",
+ "which-module": "^2.0.0",
+ "y18n": "^3.2.1 || ^4.0.0",
+ "yargs-parser": "^11.1.1"
+ }
+ },
+ "yargs-parser": {
+ "version": "11.1.1",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz",
+ "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==",
+ "dev": true,
+ "requires": {
+ "camelcase": "^5.0.0",
+ "decamelize": "^1.2.0"
+ }
}
}
},
- "levn": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
- "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
- "dev": true,
- "requires": {
- "prelude-ls": "~1.1.2",
- "type-check": "~0.3.2"
- }
+ "jest-serializer": {
+ "version": "24.4.0",
+ "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-24.4.0.tgz",
+ "integrity": "sha512-k//0DtglVstc1fv+GY/VHDIjrtNjdYvYjMlbLUed4kxrE92sIUewOi5Hj3vrpB8CXfkJntRPDRjCrCvUhBdL8Q==",
+ "dev": true
},
- "liftoff": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-2.5.0.tgz",
- "integrity": "sha1-IAkpG7Mc6oYbvxCnwVooyvdcMew=",
+ "jest-snapshot": {
+ "version": "24.8.0",
+ "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-24.8.0.tgz",
+ "integrity": "sha512-5ehtWoc8oU9/cAPe6fez6QofVJLBKyqkY2+TlKTOf0VllBB/mqUNdARdcjlZrs9F1Cv+/HKoCS/BknT0+tmfPg==",
"dev": true,
"requires": {
- "extend": "^3.0.0",
- "findup-sync": "^2.0.0",
- "fined": "^1.0.1",
- "flagged-respawn": "^1.0.0",
- "is-plain-object": "^2.0.4",
- "object.map": "^1.0.0",
- "rechoir": "^0.6.2",
- "resolve": "^1.1.7"
+ "@babel/types": "^7.0.0",
+ "@jest/types": "^24.8.0",
+ "chalk": "^2.0.1",
+ "expect": "^24.8.0",
+ "jest-diff": "^24.8.0",
+ "jest-matcher-utils": "^24.8.0",
+ "jest-message-util": "^24.8.0",
+ "jest-resolve": "^24.8.0",
+ "mkdirp": "^0.5.1",
+ "natural-compare": "^1.4.0",
+ "pretty-format": "^24.8.0",
+ "semver": "^5.5.0"
}
},
- "listenercount": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz",
- "integrity": "sha1-hMinKrWcRyUyFIDJdeZQg0LnCTc=",
- "dev": true
- },
- "load-json-file": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz",
- "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=",
+ "jest-util": {
+ "version": "24.8.0",
+ "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-24.8.0.tgz",
+ "integrity": "sha512-DYZeE+XyAnbNt0BG1OQqKy/4GVLPtzwGx5tsnDrFcax36rVE3lTA5fbvgmbVPUZf9w77AJ8otqR4VBbfFJkUZA==",
"dev": true,
"requires": {
- "graceful-fs": "^4.1.2",
- "parse-json": "^4.0.0",
- "pify": "^3.0.0",
- "strip-bom": "^3.0.0"
+ "@jest/console": "^24.7.1",
+ "@jest/fake-timers": "^24.8.0",
+ "@jest/source-map": "^24.3.0",
+ "@jest/test-result": "^24.8.0",
+ "@jest/types": "^24.8.0",
+ "callsites": "^3.0.0",
+ "chalk": "^2.0.1",
+ "graceful-fs": "^4.1.15",
+ "is-ci": "^2.0.0",
+ "mkdirp": "^0.5.1",
+ "slash": "^2.0.0",
+ "source-map": "^0.6.0"
+ },
+ "dependencies": {
+ "graceful-fs": {
+ "version": "4.1.15",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz",
+ "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==",
+ "dev": true
+ },
+ "slash": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz",
+ "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==",
+ "dev": true
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ }
}
},
- "locate-character": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/locate-character/-/locate-character-2.0.5.tgz",
- "integrity": "sha512-n2GmejDXtOPBAZdIiEFy5dJ5N38xBCXLNOtw2WpB9kGh6pnrEuKlwYI+Tkpofc4wDtVXHtoAOJaMRlYG/oYaxg==",
- "dev": true
- },
- "locate-path": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
- "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
+ "jest-validate": {
+ "version": "24.8.0",
+ "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-24.8.0.tgz",
+ "integrity": "sha512-+/N7VOEMW1Vzsrk3UWBDYTExTPwf68tavEPKDnJzrC6UlHtUDU/fuEdXqFoHzv9XnQ+zW6X3qMZhJ3YexfeLDA==",
"dev": true,
"requires": {
- "p-locate": "^2.0.0",
- "path-exists": "^3.0.0"
+ "@jest/types": "^24.8.0",
+ "camelcase": "^5.0.0",
+ "chalk": "^2.0.1",
+ "jest-get-type": "^24.8.0",
+ "leven": "^2.1.0",
+ "pretty-format": "^24.8.0"
},
"dependencies": {
- "path-exists": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
- "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+ "camelcase": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
+ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
"dev": true
}
}
},
- "lodash": {
- "version": "4.17.11",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz",
- "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==",
- "dev": true
+ "jest-watcher": {
+ "version": "24.8.0",
+ "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-24.8.0.tgz",
+ "integrity": "sha512-SBjwHt5NedQoVu54M5GEx7cl7IGEFFznvd/HNT8ier7cCAx/Qgu9ZMlaTQkvK22G1YOpcWBLQPFSImmxdn3DAw==",
+ "dev": true,
+ "requires": {
+ "@jest/test-result": "^24.8.0",
+ "@jest/types": "^24.8.0",
+ "@types/yargs": "^12.0.9",
+ "ansi-escapes": "^3.0.0",
+ "chalk": "^2.0.1",
+ "jest-util": "^24.8.0",
+ "string-length": "^2.0.0"
+ }
},
- "lodash._reinterpolate": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz",
- "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=",
- "dev": true
+ "jest-worker": {
+ "version": "24.6.0",
+ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.6.0.tgz",
+ "integrity": "sha512-jDwgW5W9qGNvpI1tNnvajh0a5IE/PuGLFmHk6aR/BZFz8tSgGw17GsDPXAJ6p91IvYDjOw8GpFbvvZGAK+DPQQ==",
+ "dev": true,
+ "requires": {
+ "merge-stream": "^1.0.1",
+ "supports-color": "^6.1.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+ "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
},
- "lodash.camelcase": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
- "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=",
+ "jmespath": {
+ "version": "0.15.0",
+ "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.15.0.tgz",
+ "integrity": "sha1-o/Iiqarp+Wb10nx5ZRDigJF2Qhc=",
"dev": true
},
- "lodash.debounce": {
- "version": "4.0.8",
- "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
- "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=",
+ "js-levenshtein": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz",
+ "integrity": "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==",
"dev": true
},
- "lodash.get": {
- "version": "4.4.2",
- "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz",
- "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=",
+ "js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
"dev": true
},
- "lodash.memoize": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-3.0.4.tgz",
- "integrity": "sha1-LcvSwofLwKVcxCMovQxzYVDVPj8=",
- "dev": true
+ "js-yaml": {
+ "version": "3.13.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz",
+ "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==",
+ "requires": {
+ "argparse": "^1.0.7",
+ "esprima": "^4.0.0"
+ }
},
- "lodash.sortby": {
- "version": "4.7.0",
- "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz",
- "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=",
+ "jsbn": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
+ "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
"dev": true
},
- "log4js": {
- "version": "3.0.6",
- "resolved": "https://registry.npmjs.org/log4js/-/log4js-3.0.6.tgz",
- "integrity": "sha512-ezXZk6oPJCWL483zj64pNkMuY/NcRX5MPiB0zE6tjZM137aeusrOnW1ecxgF9cmwMWkBMhjteQxBPoZBh9FDxQ==",
+ "jsdom": {
+ "version": "15.0.0",
+ "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-15.0.0.tgz",
+ "integrity": "sha512-rJnHm7CHyIj4tDyz9VaCt0f0P0nEh/wEmMfwp9mMixy+L/r8OW/BNcgmIlfZuBBnVQS3eRBpvd/qM3R7vr7e3A==",
"dev": true,
"requires": {
- "circular-json": "^0.5.5",
- "date-format": "^1.2.0",
- "debug": "^3.1.0",
- "rfdc": "^1.1.2",
- "streamroller": "0.7.0"
+ "abab": "^2.0.0",
+ "acorn": "^6.0.4",
+ "acorn-globals": "^4.3.0",
+ "array-equal": "^1.0.0",
+ "cssom": "^0.3.4",
+ "cssstyle": "^1.1.1",
+ "data-urls": "^1.1.0",
+ "domexception": "^1.0.1",
+ "escodegen": "^1.11.0",
+ "html-encoding-sniffer": "^1.0.2",
+ "nwsapi": "^2.1.3",
+ "parse5": "5.1.0",
+ "pn": "^1.1.0",
+ "request": "^2.88.0",
+ "request-promise-native": "^1.0.5",
+ "saxes": "^3.1.9",
+ "symbol-tree": "^3.2.2",
+ "tough-cookie": "^2.5.0",
+ "w3c-hr-time": "^1.0.1",
+ "w3c-xmlserializer": "^1.1.2",
+ "webidl-conversions": "^4.0.2",
+ "whatwg-encoding": "^1.0.5",
+ "whatwg-mimetype": "^2.3.0",
+ "whatwg-url": "^7.0.0",
+ "ws": "^6.1.2",
+ "xml-name-validator": "^3.0.0"
}
},
- "lolex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/lolex/-/lolex-3.0.0.tgz",
- "integrity": "sha512-hcnW80h3j2lbUfFdMArd5UPA/vxZJ+G8vobd+wg3nVEQA0EigStbYcrG030FJxL6xiDDPEkoMatV9xIh5OecQQ==",
+ "jsesc": {
+ "version": "2.5.2",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
+ "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
+ "dev": true
+ },
+ "json-parse-better-errors": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
+ "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==",
+ "dev": true
+ },
+ "json-schema": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
+ "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=",
+ "dev": true
+ },
+ "json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
"dev": true
},
- "longest": {
+ "json-stable-stringify-without-jsonify": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz",
- "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
"dev": true
},
- "loose-envify": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
- "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
+ "json-stringify-safe": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
+ "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
+ "dev": true
+ },
+ "json5": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.0.tgz",
+ "integrity": "sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ==",
"dev": true,
"requires": {
- "js-tokens": "^3.0.0 || ^4.0.0"
+ "minimist": "^1.2.0"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+ "dev": true
+ }
}
},
- "loud-rejection": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz",
- "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=",
+ "jsonfile": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
+ "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
"dev": true,
"requires": {
- "currently-unhandled": "^0.4.1",
- "signal-exit": "^3.0.0"
+ "graceful-fs": "^4.1.6"
}
},
- "lowercase-keys": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz",
- "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==",
+ "jsonparse": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz",
+ "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=",
"dev": true
},
- "lru-queue": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz",
- "integrity": "sha1-Jzi9nw089PhEkMVzbEhpmsYyzaM=",
+ "jsonschema": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.2.4.tgz",
+ "integrity": "sha512-lz1nOH69GbsVHeVgEdvyavc/33oymY1AZwtePMiMj4HZPMbP5OIKK3zT9INMWjwua/V4Z4yq7wSlBbSG+g4AEw=="
+ },
+ "jsprim": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
+ "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
"dev": true,
"requires": {
- "es5-ext": "~0.10.2"
+ "assert-plus": "1.0.0",
+ "extsprintf": "1.3.0",
+ "json-schema": "0.2.3",
+ "verror": "1.10.0"
}
},
- "ltgt": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz",
- "integrity": "sha1-81ypHEk/e3PaDgdJUwTxezH4fuU=",
+ "just-debounce": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/just-debounce/-/just-debounce-1.0.0.tgz",
+ "integrity": "sha1-h/zPrv/AtozRnVX2cilD+SnqNeo=",
"dev": true
},
- "magic-string": {
- "version": "0.25.1",
- "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.1.tgz",
- "integrity": "sha512-sCuTz6pYom8Rlt4ISPFn6wuFodbKMIHUMv4Qko9P17dpxb7s52KJTmRuZZqHdGmLCK9AOcDare039nRIcfdkEg==",
- "dev": true,
- "requires": {
- "sourcemap-codec": "^1.4.1"
- }
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA=="
},
- "make-error": {
- "version": "1.3.5",
- "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.5.tgz",
- "integrity": "sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g==",
+ "kleur": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz",
+ "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==",
"dev": true
},
- "make-error-cause": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/make-error-cause/-/make-error-cause-1.2.2.tgz",
- "integrity": "sha1-3wOI/NCzeBbf8KX7gQiTl3fcvJ0=",
+ "last-run": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/last-run/-/last-run-1.1.1.tgz",
+ "integrity": "sha1-RblpQsF7HHnHchmCWbqUO+v4yls=",
"dev": true,
"requires": {
- "make-error": "^1.2.0"
+ "default-resolution": "^2.0.0",
+ "es6-weak-map": "^2.0.1"
}
},
- "make-iterator": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz",
- "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==",
+ "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,
"requires": {
- "kind-of": "^6.0.2"
+ "package-json": "^4.0.0"
}
},
- "map-cache": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
- "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
- "dev": true
- },
- "map-obj": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
- "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=",
- "dev": true
- },
- "map-visit": {
+ "lazystream": {
"version": "1.0.0",
- "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
- "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
+ "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz",
+ "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=",
"dev": true,
"requires": {
- "object-visit": "^1.0.0"
+ "readable-stream": "^2.0.5"
}
},
- "marked": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/marked/-/marked-0.4.0.tgz",
- "integrity": "sha512-tMsdNBgOsrUophCAFQl0XPe6Zqk/uy9gnue+jIIKhykO51hxyu6uNx7zBPy0+y/WKYVZZMspV9YeXLNdKk+iYw==",
- "dev": true
- },
- "matchdep": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/matchdep/-/matchdep-2.0.0.tgz",
- "integrity": "sha1-xvNINKDY28OzfCfui7yyfHd1WC4=",
- "dev": true,
+ "lcid": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz",
+ "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=",
"requires": {
- "findup-sync": "^2.0.0",
- "micromatch": "^3.0.4",
- "resolve": "^1.4.0",
- "stack-trace": "0.0.10"
+ "invert-kv": "^1.0.0"
}
},
- "math-random": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.1.tgz",
- "integrity": "sha1-izqsWIuKZuSXXjzepn97sylgH6w=",
- "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=",
+ "lead": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/lead/-/lead-1.0.0.tgz",
+ "integrity": "sha1-bxT5mje+Op3XhPVJVpDlkDRm7kI=",
"dev": true,
"requires": {
- "hash-base": "^3.0.0",
- "inherits": "^2.0.1"
+ "flush-write-stream": "^1.0.2"
}
},
- "media-typer": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
- "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=",
+ "left-pad": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/left-pad/-/left-pad-1.3.0.tgz",
+ "integrity": "sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA==",
"dev": true
},
- "mem": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz",
- "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=",
+ "leven": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/leven/-/leven-2.1.0.tgz",
+ "integrity": "sha1-wuep93IJTe6dNCAq6KzORoeHVYA=",
+ "dev": true
+ },
+ "levn": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
+ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
"dev": true,
"requires": {
- "mimic-fn": "^1.0.0"
+ "prelude-ls": "~1.1.2",
+ "type-check": "~0.3.2"
}
},
- "memoizee": {
- "version": "0.4.12",
- "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.12.tgz",
- "integrity": "sha512-sprBu6nwxBWBvBOh5v2jcsGqiGLlL2xr2dLub3vR8dnE8YB17omwtm/0NSHl8jjNbcsJd5GMWJAnTSVe/O0Wfg==",
+ "liftoff": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-3.1.0.tgz",
+ "integrity": "sha512-DlIPlJUkCV0Ips2zf2pJP0unEoT1kwYhiiPUGF3s/jtxTCjziNLoiVVh+jqWOWeFi6mmwQ5fNxvAUyPad4Dfog==",
"dev": true,
"requires": {
- "d": "1",
- "es5-ext": "^0.10.30",
- "es6-weak-map": "^2.0.2",
- "event-emitter": "^0.3.5",
- "is-promise": "^2.1",
- "lru-queue": "0.1",
- "next-tick": "1",
- "timers-ext": "^0.1.2"
- }
- },
- "memorystream": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz",
- "integrity": "sha1-htcJCzDORV1j+64S3aUaR93K+bI=",
- "dev": true
- },
- "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.0.0",
- "decamelize": "^1.1.2",
- "loud-rejection": "^1.0.0",
- "map-obj": "^1.0.1",
- "minimist": "^1.1.3",
- "normalize-package-data": "^2.3.4",
- "object-assign": "^4.0.1",
- "read-pkg-up": "^1.0.1",
- "redent": "^1.0.0",
- "trim-newlines": "^1.0.0"
+ "extend": "^3.0.0",
+ "findup-sync": "^3.0.0",
+ "fined": "^1.0.1",
+ "flagged-respawn": "^1.0.0",
+ "is-plain-object": "^2.0.4",
+ "object.map": "^1.0.0",
+ "rechoir": "^0.6.2",
+ "resolve": "^1.1.7"
}
},
- "merge-descriptors": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
- "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=",
- "dev": true
- },
- "methods": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
- "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4="
- },
- "micromatch": {
- "version": "3.1.10",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
- "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+ "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,
"requires": {
- "arr-diff": "^4.0.0",
- "array-unique": "^0.3.2",
- "braces": "^2.3.1",
- "define-property": "^2.0.2",
- "extend-shallow": "^3.0.2",
- "extglob": "^2.0.4",
- "fragment-cache": "^0.2.1",
- "kind-of": "^6.0.2",
- "nanomatch": "^1.2.9",
- "object.pick": "^1.3.0",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.2"
+ "graceful-fs": "^4.1.2",
+ "parse-json": "^2.2.0",
+ "pify": "^2.0.0",
+ "pinkie-promise": "^2.0.0",
+ "strip-bom": "^2.0.0"
+ },
+ "dependencies": {
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "dev": true
+ }
}
},
- "midware": {
- "version": "0.1.7",
- "resolved": "https://registry.npmjs.org/midware/-/midware-0.1.7.tgz",
- "integrity": "sha1-gnbsr4VavB+7Yhy1rdgA2+JFpFY=",
+ "loader-runner": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz",
+ "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==",
"dev": true
},
- "midware-pool": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/midware-pool/-/midware-pool-0.1.2.tgz",
- "integrity": "sha1-rtAKf5kn1xpHuf7B2ty+lNwLuQo=",
+ "loader-utils": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz",
+ "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==",
"dev": true,
"requires": {
- "midware": "^0.1.7"
+ "big.js": "^5.2.2",
+ "emojis-list": "^2.0.0",
+ "json5": "^1.0.1"
+ },
+ "dependencies": {
+ "json5": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
+ "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
+ "dev": true,
+ "requires": {
+ "minimist": "^1.2.0"
+ }
+ },
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+ "dev": true
+ }
}
},
- "miller-rabin": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz",
- "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==",
- "dev": true,
+ "locate-path": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
+ "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
"requires": {
- "bn.js": "^4.0.0",
- "brorand": "^1.0.1"
+ "p-locate": "^2.0.0",
+ "path-exists": "^3.0.0"
}
},
- "mime": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz",
- "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==",
+ "lodash": {
+ "version": "4.17.11",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz",
+ "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==",
"dev": true
},
- "mime-types": {
- "version": "2.1.19",
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.19.tgz",
- "integrity": "sha512-P1tKYHVSZ6uFo26mtnve4HQFE3koh1UWVkp8YUC+ESBHe945xWSoXuHHiGarDqcEZ+whpCDnlNw5LON0kLo+sw==",
- "requires": {
- "mime-db": "~1.35.0"
- },
- "dependencies": {
- "mime-db": {
- "version": "1.35.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.35.0.tgz",
- "integrity": "sha512-JWT/IcCTsB0Io3AhWUMjRqucrHSPsSf2xKLaRldJVULioggvkJvggZ3VXNNSRkCddE6D+BUI4HEIZIA2OjwIvg=="
- }
- }
+ "lodash._reinterpolate": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz",
+ "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=",
+ "dev": true
},
- "mimic-fn": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz",
- "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==",
+ "lodash.clonedeep": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz",
+ "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=",
"dev": true
},
- "minimalistic-assert": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
- "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==",
+ "lodash.get": {
+ "version": "4.4.2",
+ "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz",
+ "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=",
"dev": true
},
- "minimalistic-crypto-utils": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz",
- "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=",
+ "lodash.has": {
+ "version": "4.5.2",
+ "resolved": "https://registry.npmjs.org/lodash.has/-/lodash.has-4.5.2.tgz",
+ "integrity": "sha1-0Z9NwQlQWMzL4rDN9O4P5Ko3yGI=",
"dev": true
},
- "minimatch": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
- "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
- "dev": true,
- "requires": {
- "brace-expansion": "^1.1.7"
- }
+ "lodash.ismatch": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz",
+ "integrity": "sha1-dWy1FQyjum8RCFp4hJZF8Yj4Xzc=",
+ "dev": true
},
- "minimist": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
- "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+ "lodash.merge": {
+ "version": "4.6.1",
+ "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.1.tgz",
+ "integrity": "sha512-AOYza4+Hf5z1/0Hztxpm2/xiPZgi/cjMqdnKTUWTBSKchJlxXXuUSxCCl8rJlf4g6yww/j6mA8nC8Hw/EZWxKQ==",
"dev": true
},
- "minimist-options": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-3.0.2.tgz",
- "integrity": "sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ==",
+ "lodash.sortby": {
+ "version": "4.7.0",
+ "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz",
+ "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=",
+ "dev": true
+ },
+ "lodash.template": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.4.0.tgz",
+ "integrity": "sha1-5zoDhcg1VZF0bgILmWecaQ5o+6A=",
"dev": true,
"requires": {
- "arrify": "^1.0.1",
- "is-plain-obj": "^1.1.0"
+ "lodash._reinterpolate": "~3.0.0",
+ "lodash.templatesettings": "^4.0.0"
}
},
- "minstache": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/minstache/-/minstache-1.2.0.tgz",
- "integrity": "sha1-/xzEA6woRPaNvxjGYhKb5+sO/EE=",
+ "lodash.templatesettings": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.1.0.tgz",
+ "integrity": "sha1-K01OlbpEDZFf8IvImeRVNmZxMxY=",
"dev": true,
"requires": {
- "commander": "1.0.4"
- },
- "dependencies": {
- "commander": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/commander/-/commander-1.0.4.tgz",
- "integrity": "sha1-Xt6xruI8T7VBprcNaSq+8ZZpotM=",
- "dev": true,
- "requires": {
- "keypress": "0.1.x"
- }
- }
+ "lodash._reinterpolate": "~3.0.0"
}
},
- "mixin-deep": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz",
- "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==",
+ "loose-envify": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
+ "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
"dev": true,
"requires": {
- "for-in": "^1.0.2",
- "is-extendable": "^1.0.1"
- },
- "dependencies": {
- "is-extendable": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
- "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
- "dev": true,
- "requires": {
- "is-plain-object": "^2.0.4"
- }
- }
+ "js-tokens": "^3.0.0 || ^4.0.0"
}
},
- "mkdirp": {
- "version": "0.5.1",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
- "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
+ "loud-rejection": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz",
+ "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=",
"dev": true,
"requires": {
- "minimist": "0.0.8"
- },
- "dependencies": {
- "minimist": {
- "version": "0.0.8",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
- "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
- "dev": true
- }
+ "currently-unhandled": "^0.4.1",
+ "signal-exit": "^3.0.0"
}
},
- "mocha": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.2.0.tgz",
- "integrity": "sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ==",
+ "lowercase-keys": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz",
+ "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==",
+ "dev": true
+ },
+ "lru-cache": {
+ "version": "4.1.5",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
+ "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
+ "requires": {
+ "pseudomap": "^1.0.2",
+ "yallist": "^2.1.2"
+ }
+ },
+ "make-dir": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz",
+ "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==",
"dev": true,
"requires": {
- "browser-stdout": "1.3.1",
- "commander": "2.15.1",
- "debug": "3.1.0",
- "diff": "3.5.0",
- "escape-string-regexp": "1.0.5",
- "glob": "7.1.2",
- "growl": "1.10.5",
- "he": "1.1.1",
- "minimatch": "3.0.4",
- "mkdirp": "0.5.1",
- "supports-color": "5.4.0"
- },
- "dependencies": {
- "commander": {
- "version": "2.15.1",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz",
- "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==",
- "dev": true
- },
- "supports-color": {
- "version": "5.4.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz",
- "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
+ "pify": "^3.0.0"
}
},
- "modify-values": {
+ "make-error": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.5.tgz",
+ "integrity": "sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g=="
+ },
+ "make-iterator": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz",
- "integrity": "sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==",
- "dev": true
+ "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz",
+ "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.2"
+ }
},
- "module-deps": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/module-deps/-/module-deps-4.1.1.tgz",
- "integrity": "sha1-IyFYM/HaE/1gbMuAh7RIUty4If0=",
+ "makeerror": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz",
+ "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=",
"dev": true,
"requires": {
- "JSONStream": "^1.0.3",
- "browser-resolve": "^1.7.0",
- "cached-path-relative": "^1.0.0",
- "concat-stream": "~1.5.0",
- "defined": "^1.0.0",
- "detective": "^4.0.0",
- "duplexer2": "^0.1.2",
- "inherits": "^2.0.1",
- "parents": "^1.0.0",
- "readable-stream": "^2.0.2",
- "resolve": "^1.1.3",
- "stream-combiner2": "^1.1.1",
- "subarg": "^1.0.0",
- "through2": "^2.0.0",
- "xtend": "^4.0.0"
+ "tmpl": "1.0.x"
}
},
- "mount-point": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/mount-point/-/mount-point-3.0.0.tgz",
- "integrity": "sha1-Zly57evoDREOZY21bDHQrvUaj5c=",
+ "mamacro": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/mamacro/-/mamacro-0.0.3.tgz",
+ "integrity": "sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA==",
+ "dev": true
+ },
+ "map-age-cleaner": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz",
+ "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==",
"dev": true,
"requires": {
- "@sindresorhus/df": "^1.0.1",
- "pify": "^2.3.0",
- "pinkie-promise": "^2.0.1"
- },
- "dependencies": {
- "@sindresorhus/df": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@sindresorhus/df/-/df-1.0.1.tgz",
- "integrity": "sha1-xptm9S9vzdKHyAffIQMF2694UA0=",
- "dev": true
- },
- "pify": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
- "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
- "dev": true
- }
+ "p-defer": "^1.0.0"
}
},
- "ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+ "map-cache": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
+ "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8="
},
- "mute-stdout": {
+ "map-obj": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/mute-stdout/-/mute-stdout-1.0.1.tgz",
- "integrity": "sha512-kDcwXR4PS7caBpuRYYBUz9iVixUk3anO3f5OYFiIPwK/20vCzKCHyKoulbiDY1S53zD2bxUpxN/IJ+TnXjfvxg==",
+ "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
+ "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=",
"dev": true
},
- "nan": {
- "version": "2.10.0",
- "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz",
- "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==",
- "dev": true,
- "optional": true
- },
- "nanomatch": {
- "version": "1.2.13",
- "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
- "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==",
- "dev": true,
+ "map-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
+ "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
"requires": {
- "arr-diff": "^4.0.0",
- "array-unique": "^0.3.2",
- "define-property": "^2.0.2",
- "extend-shallow": "^3.0.2",
- "fragment-cache": "^0.2.1",
- "is-windows": "^1.0.2",
- "kind-of": "^6.0.2",
- "object.pick": "^1.3.0",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.1"
+ "object-visit": "^1.0.0"
}
},
- "negotiator": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz",
- "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=",
- "dev": true
- },
- "next-tick": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz",
- "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=",
- "dev": true
- },
- "nice-try": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
- "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
+ "marked": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/marked/-/marked-0.4.0.tgz",
+ "integrity": "sha512-tMsdNBgOsrUophCAFQl0XPe6Zqk/uy9gnue+jIIKhykO51hxyu6uNx7zBPy0+y/WKYVZZMspV9YeXLNdKk+iYw==",
"dev": true
},
- "nise": {
- "version": "1.4.10",
- "resolved": "https://registry.npmjs.org/nise/-/nise-1.4.10.tgz",
- "integrity": "sha512-sa0RRbj53dovjc7wombHmVli9ZihXbXCQ2uH3TNm03DyvOSIQbxg+pbqDKrk2oxMK1rtLGVlKxcB9rrc6X5YjA==",
+ "matchdep": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/matchdep/-/matchdep-2.0.0.tgz",
+ "integrity": "sha1-xvNINKDY28OzfCfui7yyfHd1WC4=",
"dev": true,
"requires": {
- "@sinonjs/formatio": "^3.1.0",
- "@sinonjs/text-encoding": "^0.7.1",
- "just-extend": "^4.0.2",
- "lolex": "^2.3.2",
- "path-to-regexp": "^1.7.0"
+ "findup-sync": "^2.0.0",
+ "micromatch": "^3.0.4",
+ "resolve": "^1.4.0",
+ "stack-trace": "0.0.10"
},
"dependencies": {
- "@sinonjs/formatio": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/@sinonjs/formatio/-/formatio-3.2.1.tgz",
- "integrity": "sha512-tsHvOB24rvyvV2+zKMmPkZ7dXX6LSLKZ7aOtXY6Edklp0uRcgGpOsQTTGTcWViFyx4uhWc6GV8QdnALbIbIdeQ==",
- "dev": true,
- "requires": {
- "@sinonjs/commons": "^1",
- "@sinonjs/samsam": "^3.1.0"
- }
- },
- "@sinonjs/samsam": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-3.3.0.tgz",
- "integrity": "sha512-beHeJM/RRAaLLsMJhsCvHK31rIqZuobfPLa/80yGH5hnD8PV1hyh9xJBJNFfNmO7yWqm+zomijHsXpI6iTQJfQ==",
+ "findup-sync": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz",
+ "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=",
"dev": true,
"requires": {
- "@sinonjs/commons": "^1.0.2",
- "array-from": "^2.1.1",
- "lodash": "^4.17.11"
+ "detect-file": "^1.0.0",
+ "is-glob": "^3.1.0",
+ "micromatch": "^3.0.4",
+ "resolve-dir": "^1.0.1"
}
},
- "isarray": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
- "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
- "dev": true
- },
- "just-extend": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.0.2.tgz",
- "integrity": "sha512-FrLwOgm+iXrPV+5zDU6Jqu4gCRXbWEQg2O3SKONsWE4w7AXFRkryS53bpWdaL9cNol+AmR3AEYz6kn+o0fCPnw==",
- "dev": true
- },
- "lolex": {
- "version": "2.7.5",
- "resolved": "https://registry.npmjs.org/lolex/-/lolex-2.7.5.tgz",
- "integrity": "sha512-l9x0+1offnKKIzYVjyXU2SiwhXDLekRzKyhnbyldPHvC7BvLPVpdNUNR2KeMAiCN2D/kLNttZgQD5WjSxuBx3Q==",
- "dev": true
- },
- "path-to-regexp": {
- "version": "1.7.0",
- "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.7.0.tgz",
- "integrity": "sha1-Wf3g9DW62suhA6hOnTvGTpa5k30=",
+ "is-glob": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
+ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
"dev": true,
"requires": {
- "isarray": "0.0.1"
+ "is-extglob": "^2.1.0"
}
}
}
},
- "node-releases": {
- "version": "1.1.10",
- "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.10.tgz",
- "integrity": "sha512-KbUPCpfoBvb3oBkej9+nrU0/7xPlVhmhhUJ1PZqwIP5/1dJkRWKWD3OONjo6M2J7tSCBtDCumLwwqeI+DWWaLQ==",
+ "md5.js": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz",
+ "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==",
"dev": true,
"requires": {
- "semver": "^5.3.0"
+ "hash-base": "^3.0.0",
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.1.2"
}
},
- "node-status-codes": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/node-status-codes/-/node-status-codes-1.0.0.tgz",
- "integrity": "sha1-WuVUHQJGRdMqWPzdyc7s6nrjrC8=",
+ "media-typer": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
+ "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=",
"dev": true
},
- "normalize-package-data": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz",
- "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==",
- "dev": true,
+ "mem": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz",
+ "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=",
"requires": {
- "hosted-git-info": "^2.1.4",
- "is-builtin-module": "^1.0.0",
- "semver": "2 || 3 || 4 || 5",
- "validate-npm-package-license": "^3.0.1"
+ "mimic-fn": "^1.0.0"
}
},
- "normalize-path": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
- "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
+ "memory-fs": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz",
+ "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=",
"dev": true,
"requires": {
- "remove-trailing-separator": "^1.0.1"
+ "errno": "^0.1.3",
+ "readable-stream": "^2.0.1"
}
},
- "normalize-url": {
- "version": "1.9.1",
- "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz",
- "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=",
+ "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.0.0",
+ "decamelize": "^1.1.2",
+ "loud-rejection": "^1.0.0",
+ "map-obj": "^1.0.1",
+ "minimist": "^1.1.3",
+ "normalize-package-data": "^2.3.4",
"object-assign": "^4.0.1",
- "prepend-http": "^1.0.0",
- "query-string": "^4.1.0",
- "sort-keys": "^1.0.0"
+ "read-pkg-up": "^1.0.1",
+ "redent": "^1.0.0",
+ "trim-newlines": "^1.0.0"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+ "dev": true
+ }
}
},
- "now-and-later": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-2.0.0.tgz",
- "integrity": "sha1-vGHLtFbXnLMiB85HygUTb/Ln1u4=",
- "dev": true,
- "requires": {
- "once": "^1.3.2"
- }
+ "merge-descriptors": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
+ "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=",
+ "dev": true
},
- "npm-run-all": {
- "version": "4.1.5",
- "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz",
- "integrity": "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==",
+ "merge-stream": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz",
+ "integrity": "sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=",
"dev": true,
"requires": {
- "ansi-styles": "^3.2.1",
- "chalk": "^2.4.1",
- "cross-spawn": "^6.0.5",
- "memorystream": "^0.3.1",
- "minimatch": "^3.0.4",
- "pidtree": "^0.3.0",
- "read-pkg": "^3.0.0",
- "shell-quote": "^1.6.1",
- "string.prototype.padend": "^3.0.0"
- },
- "dependencies": {
- "cross-spawn": {
- "version": "6.0.5",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
- "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
- "dev": true,
- "requires": {
- "nice-try": "^1.0.4",
- "path-key": "^2.0.1",
- "semver": "^5.5.0",
- "shebang-command": "^1.2.0",
- "which": "^1.2.9"
- }
- }
+ "readable-stream": "^2.0.1"
}
},
- "npm-run-path": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
- "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=",
- "dev": true,
+ "merge2": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.2.3.tgz",
+ "integrity": "sha512-gdUU1Fwj5ep4kplwcmftruWofEFt6lfpkkr3h860CXbAB9c3hGb55EOL2ali0Td5oebvW0E1+3Sr+Ur7XfKpRA=="
+ },
+ "methods": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
+ "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=",
+ "dev": true
+ },
+ "micromatch": {
+ "version": "3.1.10",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
"requires": {
- "path-key": "^2.0.0"
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "braces": "^2.3.1",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "extglob": "^2.0.4",
+ "fragment-cache": "^0.2.1",
+ "kind-of": "^6.0.2",
+ "nanomatch": "^1.2.9",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.2"
}
},
- "nugget": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/nugget/-/nugget-2.0.1.tgz",
- "integrity": "sha1-IBCVpIfhrTYIGzQy+jytpPjQcbA=",
+ "miller-rabin": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz",
+ "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==",
"dev": true,
"requires": {
- "debug": "^2.1.3",
- "minimist": "^1.1.0",
- "pretty-bytes": "^1.0.2",
- "progress-stream": "^1.1.0",
- "request": "^2.45.0",
- "single-line-log": "^1.1.2",
- "throttleit": "0.0.2"
- },
- "dependencies": {
- "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"
- }
- }
+ "bn.js": "^4.0.0",
+ "brorand": "^1.0.1"
}
},
- "null-check": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/null-check/-/null-check-1.0.0.tgz",
- "integrity": "sha1-l33/1xdgErnsMNKjnbXPcqBDnt0=",
- "dev": true
- },
- "number-is-nan": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
- "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
+ "mime": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz",
+ "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==",
"dev": true
},
- "nwsapi": {
- "version": "2.0.9",
- "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.0.9.tgz",
- "integrity": "sha512-nlWFSCTYQcHk/6A9FFnfhKc14c3aFhfdNBXgo8Qgi9QTBu/qg3Ww+Uiz9wMzXd1T8GFxPc2QIHB6Qtf2XFryFQ==",
+ "mime-db": {
+ "version": "1.38.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.38.0.tgz",
+ "integrity": "sha512-bqVioMFFzc2awcdJZIzR3HjZFX20QhilVS7hytkKrv7xFAn8bM1gzc/FOX2awLISvWe0PV8ptFKcon+wZ5qYkg==",
"dev": true
},
- "nyc": {
- "version": "13.3.0",
- "resolved": "https://registry.npmjs.org/nyc/-/nyc-13.3.0.tgz",
- "integrity": "sha512-P+FwIuro2aFG6B0Esd9ZDWUd51uZrAEoGutqZxzrVmYl3qSfkLgcQpBPBjtDFsUQLFY1dvTQJPOyeqr8S9GF8w==",
+ "mime-types": {
+ "version": "2.1.22",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.22.tgz",
+ "integrity": "sha512-aGl6TZGnhm/li6F7yx82bJiBZwgiEa4Hf6CNr8YO+r5UHr53tSTYZb102zyU50DOWWKeOv0uQLRL0/9EiKWCog==",
"dev": true,
"requires": {
- "archy": "^1.0.0",
- "arrify": "^1.0.1",
- "caching-transform": "^3.0.1",
- "convert-source-map": "^1.6.0",
- "find-cache-dir": "^2.0.0",
- "find-up": "^3.0.0",
- "foreground-child": "^1.5.6",
- "glob": "^7.1.3",
- "istanbul-lib-coverage": "^2.0.3",
- "istanbul-lib-hook": "^2.0.3",
- "istanbul-lib-instrument": "^3.1.0",
- "istanbul-lib-report": "^2.0.4",
- "istanbul-lib-source-maps": "^3.0.2",
- "istanbul-reports": "^2.1.1",
- "make-dir": "^1.3.0",
- "merge-source-map": "^1.1.0",
- "resolve-from": "^4.0.0",
- "rimraf": "^2.6.3",
- "signal-exit": "^3.0.2",
- "spawn-wrap": "^1.4.2",
- "test-exclude": "^5.1.0",
- "uuid": "^3.3.2",
- "yargs": "^12.0.5",
- "yargs-parser": "^11.1.1"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "3.0.0",
- "bundled": true,
- "dev": true
- },
- "append-transform": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "default-require-extensions": "^2.0.0"
- }
- },
- "archy": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true
- },
- "arrify": {
- "version": "1.0.1",
- "bundled": true,
- "dev": true
- },
- "async": {
- "version": "2.6.2",
- "bundled": true,
- "dev": true,
- "requires": {
- "lodash": "^4.17.11"
- }
- },
- "balanced-match": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true
- },
- "brace-expansion": {
- "version": "1.1.11",
- "bundled": true,
- "dev": true,
- "requires": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "caching-transform": {
- "version": "3.0.1",
- "bundled": true,
- "dev": true,
- "requires": {
- "hasha": "^3.0.0",
- "make-dir": "^1.3.0",
- "package-hash": "^3.0.0",
- "write-file-atomic": "^2.3.0"
- }
- },
- "camelcase": {
- "version": "5.0.0",
- "bundled": true,
- "dev": true
- },
- "cliui": {
- "version": "4.1.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "string-width": "^2.1.1",
- "strip-ansi": "^4.0.0",
- "wrap-ansi": "^2.0.0"
- }
- },
- "code-point-at": {
- "version": "1.1.0",
- "bundled": true,
- "dev": true
- },
- "commander": {
- "version": "2.17.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "commondir": {
- "version": "1.0.1",
- "bundled": true,
- "dev": true
- },
- "concat-map": {
- "version": "0.0.1",
- "bundled": true,
- "dev": true
- },
- "convert-source-map": {
- "version": "1.6.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "safe-buffer": "~5.1.1"
- }
- },
- "cross-spawn": {
- "version": "4.0.2",
- "bundled": true,
- "dev": true,
- "requires": {
- "lru-cache": "^4.0.1",
- "which": "^1.2.9"
- }
- },
- "debug": {
- "version": "4.1.1",
- "bundled": true,
- "dev": true,
- "requires": {
- "ms": "^2.1.1"
- }
- },
- "decamelize": {
- "version": "1.2.0",
- "bundled": true,
- "dev": true
- },
- "default-require-extensions": {
- "version": "2.0.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "strip-bom": "^3.0.0"
- }
- },
- "end-of-stream": {
- "version": "1.4.1",
- "bundled": true,
- "dev": true,
- "requires": {
- "once": "^1.4.0"
- }
- },
- "error-ex": {
- "version": "1.3.2",
- "bundled": true,
- "dev": true,
- "requires": {
- "is-arrayish": "^0.2.1"
- }
- },
- "es6-error": {
- "version": "4.1.1",
- "bundled": true,
- "dev": true
- },
- "execa": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "cross-spawn": "^6.0.0",
- "get-stream": "^4.0.0",
- "is-stream": "^1.1.0",
- "npm-run-path": "^2.0.0",
- "p-finally": "^1.0.0",
- "signal-exit": "^3.0.0",
- "strip-eof": "^1.0.0"
- },
- "dependencies": {
- "cross-spawn": {
- "version": "6.0.5",
- "bundled": true,
- "dev": true,
- "requires": {
- "nice-try": "^1.0.4",
- "path-key": "^2.0.1",
- "semver": "^5.5.0",
- "shebang-command": "^1.2.0",
- "which": "^1.2.9"
- }
- }
- }
- },
- "find-cache-dir": {
- "version": "2.0.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "commondir": "^1.0.1",
- "make-dir": "^1.0.0",
- "pkg-dir": "^3.0.0"
- }
- },
- "find-up": {
- "version": "3.0.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "locate-path": "^3.0.0"
- }
- },
- "foreground-child": {
- "version": "1.5.6",
- "bundled": true,
- "dev": true,
- "requires": {
- "cross-spawn": "^4",
- "signal-exit": "^3.0.0"
- }
- },
- "fs.realpath": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true
- },
- "get-caller-file": {
- "version": "1.0.3",
- "bundled": true,
- "dev": true
- },
- "get-stream": {
- "version": "4.1.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "pump": "^3.0.0"
- }
- },
- "glob": {
- "version": "7.1.3",
- "bundled": true,
- "dev": true,
- "requires": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.0.4",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- }
- },
- "graceful-fs": {
- "version": "4.1.15",
- "bundled": true,
- "dev": true
- },
- "handlebars": {
- "version": "4.1.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "async": "^2.5.0",
- "optimist": "^0.6.1",
- "source-map": "^0.6.1",
- "uglify-js": "^3.1.4"
- },
- "dependencies": {
- "source-map": {
- "version": "0.6.1",
- "bundled": true,
- "dev": true
- }
- }
- },
- "has-flag": {
- "version": "3.0.0",
- "bundled": true,
- "dev": true
- },
- "hasha": {
- "version": "3.0.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "is-stream": "^1.0.1"
- }
- },
- "hosted-git-info": {
- "version": "2.7.1",
- "bundled": true,
- "dev": true
- },
- "imurmurhash": {
- "version": "0.1.4",
- "bundled": true,
- "dev": true
- },
- "inflight": {
- "version": "1.0.6",
- "bundled": true,
- "dev": true,
- "requires": {
- "once": "^1.3.0",
- "wrappy": "1"
- }
- },
- "inherits": {
- "version": "2.0.3",
- "bundled": true,
- "dev": true
- },
- "invert-kv": {
- "version": "2.0.0",
- "bundled": true,
- "dev": true
- },
- "is-arrayish": {
- "version": "0.2.1",
- "bundled": true,
- "dev": true
- },
- "is-fullwidth-code-point": {
- "version": "2.0.0",
- "bundled": true,
- "dev": true
- },
- "is-stream": {
- "version": "1.1.0",
- "bundled": true,
- "dev": true
- },
- "isexe": {
- "version": "2.0.0",
- "bundled": true,
- "dev": true
- },
- "istanbul-lib-coverage": {
- "version": "2.0.3",
- "bundled": true,
- "dev": true
- },
- "istanbul-lib-hook": {
- "version": "2.0.3",
- "bundled": true,
- "dev": true,
- "requires": {
- "append-transform": "^1.0.0"
- }
- },
- "istanbul-lib-report": {
- "version": "2.0.4",
- "bundled": true,
- "dev": true,
- "requires": {
- "istanbul-lib-coverage": "^2.0.3",
- "make-dir": "^1.3.0",
- "supports-color": "^6.0.0"
- },
- "dependencies": {
- "supports-color": {
- "version": "6.1.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
- }
- },
- "istanbul-lib-source-maps": {
- "version": "3.0.2",
- "bundled": true,
- "dev": true,
- "requires": {
- "debug": "^4.1.1",
- "istanbul-lib-coverage": "^2.0.3",
- "make-dir": "^1.3.0",
- "rimraf": "^2.6.2",
- "source-map": "^0.6.1"
- },
- "dependencies": {
- "source-map": {
- "version": "0.6.1",
- "bundled": true,
- "dev": true
- }
- }
- },
- "istanbul-reports": {
- "version": "2.1.1",
- "bundled": true,
- "dev": true,
- "requires": {
- "handlebars": "^4.1.0"
- }
- },
- "json-parse-better-errors": {
- "version": "1.0.2",
- "bundled": true,
- "dev": true
- },
- "lcid": {
- "version": "2.0.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "invert-kv": "^2.0.0"
- }
- },
- "load-json-file": {
- "version": "4.0.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "parse-json": "^4.0.0",
- "pify": "^3.0.0",
- "strip-bom": "^3.0.0"
- }
- },
- "locate-path": {
- "version": "3.0.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "p-locate": "^3.0.0",
- "path-exists": "^3.0.0"
- }
- },
- "lodash": {
- "version": "4.17.11",
- "bundled": true,
- "dev": true
- },
- "lodash.flattendeep": {
- "version": "4.4.0",
- "bundled": true,
- "dev": true
- },
- "lru-cache": {
- "version": "4.1.5",
- "bundled": true,
- "dev": true,
- "requires": {
- "pseudomap": "^1.0.2",
- "yallist": "^2.1.2"
- }
- },
- "make-dir": {
- "version": "1.3.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "pify": "^3.0.0"
- }
- },
- "map-age-cleaner": {
- "version": "0.1.3",
- "bundled": true,
- "dev": true,
- "requires": {
- "p-defer": "^1.0.0"
- }
- },
- "mem": {
- "version": "4.1.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "map-age-cleaner": "^0.1.1",
- "mimic-fn": "^1.0.0",
- "p-is-promise": "^2.0.0"
- }
- },
- "merge-source-map": {
- "version": "1.1.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "source-map": "^0.6.1"
- },
- "dependencies": {
- "source-map": {
- "version": "0.6.1",
- "bundled": true,
- "dev": true
- }
- }
- },
- "mimic-fn": {
- "version": "1.2.0",
- "bundled": true,
- "dev": true
- },
- "minimatch": {
- "version": "3.0.4",
- "bundled": true,
- "dev": true,
- "requires": {
- "brace-expansion": "^1.1.7"
- }
- },
- "minimist": {
- "version": "0.0.10",
- "bundled": true,
- "dev": true
- },
- "mkdirp": {
- "version": "0.5.1",
- "bundled": true,
- "dev": true,
- "requires": {
- "minimist": "0.0.8"
- },
- "dependencies": {
- "minimist": {
- "version": "0.0.8",
- "bundled": true,
- "dev": true
- }
- }
- },
- "ms": {
- "version": "2.1.1",
- "bundled": true,
- "dev": true
- },
- "nice-try": {
- "version": "1.0.5",
- "bundled": true,
- "dev": true
- },
- "normalize-package-data": {
- "version": "2.5.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "hosted-git-info": "^2.1.4",
- "resolve": "^1.10.0",
- "semver": "2 || 3 || 4 || 5",
- "validate-npm-package-license": "^3.0.1"
- }
- },
- "npm-run-path": {
- "version": "2.0.2",
- "bundled": true,
- "dev": true,
- "requires": {
- "path-key": "^2.0.0"
- }
- },
- "number-is-nan": {
- "version": "1.0.1",
- "bundled": true,
- "dev": true
- },
- "once": {
- "version": "1.4.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "wrappy": "1"
- }
- },
- "optimist": {
- "version": "0.6.1",
- "bundled": true,
- "dev": true,
- "requires": {
- "minimist": "~0.0.1",
- "wordwrap": "~0.0.2"
- }
- },
- "os-homedir": {
- "version": "1.0.2",
- "bundled": true,
- "dev": true
- },
- "os-locale": {
- "version": "3.1.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "execa": "^1.0.0",
- "lcid": "^2.0.0",
- "mem": "^4.0.0"
- }
- },
- "p-defer": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true
- },
- "p-finally": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true
- },
- "p-is-promise": {
- "version": "2.0.0",
- "bundled": true,
- "dev": true
- },
- "p-limit": {
- "version": "2.1.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "p-try": "^2.0.0"
- }
- },
- "p-locate": {
- "version": "3.0.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "p-limit": "^2.0.0"
- }
- },
- "p-try": {
- "version": "2.0.0",
- "bundled": true,
- "dev": true
- },
- "package-hash": {
- "version": "3.0.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.15",
- "hasha": "^3.0.0",
- "lodash.flattendeep": "^4.4.0",
- "release-zalgo": "^1.0.0"
- }
- },
- "parse-json": {
- "version": "4.0.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "error-ex": "^1.3.1",
- "json-parse-better-errors": "^1.0.1"
- }
- },
- "path-exists": {
- "version": "3.0.0",
- "bundled": true,
- "dev": true
- },
- "path-is-absolute": {
- "version": "1.0.1",
- "bundled": true,
- "dev": true
- },
- "path-key": {
- "version": "2.0.1",
- "bundled": true,
- "dev": true
- },
- "path-parse": {
- "version": "1.0.6",
- "bundled": true,
- "dev": true
- },
- "path-type": {
- "version": "3.0.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "pify": "^3.0.0"
- }
- },
- "pify": {
- "version": "3.0.0",
- "bundled": true,
- "dev": true
- },
- "pkg-dir": {
- "version": "3.0.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "find-up": "^3.0.0"
- }
- },
- "pseudomap": {
- "version": "1.0.2",
- "bundled": true,
- "dev": true
- },
- "pump": {
- "version": "3.0.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "end-of-stream": "^1.1.0",
- "once": "^1.3.1"
- }
- },
- "read-pkg": {
- "version": "3.0.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "load-json-file": "^4.0.0",
- "normalize-package-data": "^2.3.2",
- "path-type": "^3.0.0"
- }
- },
- "read-pkg-up": {
- "version": "4.0.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "find-up": "^3.0.0",
- "read-pkg": "^3.0.0"
- }
- },
- "release-zalgo": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "es6-error": "^4.0.1"
- }
- },
- "require-directory": {
- "version": "2.1.1",
- "bundled": true,
- "dev": true
- },
- "require-main-filename": {
- "version": "1.0.1",
- "bundled": true,
- "dev": true
- },
- "resolve": {
- "version": "1.10.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "path-parse": "^1.0.6"
- }
- },
- "resolve-from": {
- "version": "4.0.0",
- "bundled": true,
- "dev": true
- },
- "rimraf": {
- "version": "2.6.3",
- "bundled": true,
- "dev": true,
- "requires": {
- "glob": "^7.1.3"
- }
- },
- "safe-buffer": {
- "version": "5.1.2",
- "bundled": true,
- "dev": true
- },
- "semver": {
- "version": "5.6.0",
- "bundled": true,
- "dev": true
- },
- "set-blocking": {
- "version": "2.0.0",
- "bundled": true,
- "dev": true
- },
- "shebang-command": {
- "version": "1.2.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "shebang-regex": "^1.0.0"
- }
- },
- "shebang-regex": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true
- },
- "signal-exit": {
- "version": "3.0.2",
- "bundled": true,
- "dev": true
- },
- "spawn-wrap": {
- "version": "1.4.2",
- "bundled": true,
- "dev": true,
- "requires": {
- "foreground-child": "^1.5.6",
- "mkdirp": "^0.5.0",
- "os-homedir": "^1.0.1",
- "rimraf": "^2.6.2",
- "signal-exit": "^3.0.2",
- "which": "^1.3.0"
- }
- },
- "spdx-correct": {
- "version": "3.1.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "spdx-expression-parse": "^3.0.0",
- "spdx-license-ids": "^3.0.0"
- }
- },
- "spdx-exceptions": {
- "version": "2.2.0",
- "bundled": true,
- "dev": true
- },
- "spdx-expression-parse": {
- "version": "3.0.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "spdx-exceptions": "^2.1.0",
- "spdx-license-ids": "^3.0.0"
- }
- },
- "spdx-license-ids": {
- "version": "3.0.3",
- "bundled": true,
- "dev": true
- },
- "string-width": {
- "version": "2.1.1",
- "bundled": true,
- "dev": true,
- "requires": {
- "is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^4.0.0"
- }
- },
- "strip-ansi": {
- "version": "4.0.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "ansi-regex": "^3.0.0"
- }
- },
- "strip-bom": {
- "version": "3.0.0",
- "bundled": true,
- "dev": true
- },
- "strip-eof": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true
- },
- "test-exclude": {
- "version": "5.1.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "arrify": "^1.0.1",
- "minimatch": "^3.0.4",
- "read-pkg-up": "^4.0.0",
- "require-main-filename": "^1.0.1"
- }
- },
- "uglify-js": {
- "version": "3.4.9",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "commander": "~2.17.1",
- "source-map": "~0.6.1"
- },
- "dependencies": {
- "source-map": {
- "version": "0.6.1",
- "bundled": true,
- "dev": true,
- "optional": true
- }
- }
- },
- "uuid": {
- "version": "3.3.2",
- "bundled": true,
- "dev": true
- },
- "validate-npm-package-license": {
- "version": "3.0.4",
- "bundled": true,
- "dev": true,
- "requires": {
- "spdx-correct": "^3.0.0",
- "spdx-expression-parse": "^3.0.0"
- }
- },
- "which": {
- "version": "1.3.1",
- "bundled": true,
- "dev": true,
- "requires": {
- "isexe": "^2.0.0"
- }
- },
- "which-module": {
- "version": "2.0.0",
- "bundled": true,
- "dev": true
- },
- "wordwrap": {
- "version": "0.0.3",
- "bundled": true,
- "dev": true
- },
- "wrap-ansi": {
- "version": "2.1.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "string-width": "^1.0.1",
- "strip-ansi": "^3.0.1"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "2.1.1",
- "bundled": true,
- "dev": true
- },
- "is-fullwidth-code-point": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "number-is-nan": "^1.0.0"
- }
- },
- "string-width": {
- "version": "1.0.2",
- "bundled": true,
- "dev": true,
- "requires": {
- "code-point-at": "^1.0.0",
- "is-fullwidth-code-point": "^1.0.0",
- "strip-ansi": "^3.0.0"
- }
- },
- "strip-ansi": {
- "version": "3.0.1",
- "bundled": true,
- "dev": true,
- "requires": {
- "ansi-regex": "^2.0.0"
- }
- }
- }
- },
- "wrappy": {
- "version": "1.0.2",
- "bundled": true,
- "dev": true
- },
- "write-file-atomic": {
- "version": "2.4.2",
- "bundled": true,
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.11",
- "imurmurhash": "^0.1.4",
- "signal-exit": "^3.0.2"
- }
- },
- "y18n": {
- "version": "4.0.0",
- "bundled": true,
- "dev": true
- },
- "yallist": {
- "version": "2.1.2",
- "bundled": true,
- "dev": true
- },
- "yargs": {
- "version": "12.0.5",
- "bundled": true,
- "dev": true,
- "requires": {
- "cliui": "^4.0.0",
- "decamelize": "^1.2.0",
- "find-up": "^3.0.0",
- "get-caller-file": "^1.0.1",
- "os-locale": "^3.0.0",
- "require-directory": "^2.1.1",
- "require-main-filename": "^1.0.1",
- "set-blocking": "^2.0.0",
- "string-width": "^2.0.0",
- "which-module": "^2.0.0",
- "y18n": "^3.2.1 || ^4.0.0",
- "yargs-parser": "^11.1.1"
- }
- },
- "yargs-parser": {
- "version": "11.1.1",
- "bundled": true,
- "dev": true,
- "requires": {
- "camelcase": "^5.0.0",
- "decamelize": "^1.2.0"
- }
- }
+ "mime-db": "~1.38.0"
}
},
- "oauth-sign": {
- "version": "0.8.2",
- "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz",
- "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=",
- "dev": true
+ "mimic-fn": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz",
+ "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ=="
},
- "object-assign": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
- "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
+ "minimalistic-assert": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
+ "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==",
"dev": true
},
- "object-component": {
- "version": "0.0.3",
- "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz",
- "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=",
+ "minimalistic-crypto-utils": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz",
+ "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=",
"dev": true
},
- "object-copy": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
- "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
- "dev": true,
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
"requires": {
- "copy-descriptor": "^0.1.0",
- "define-property": "^0.2.5",
- "kind-of": "^3.0.3"
- },
- "dependencies": {
- "define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^0.1.0"
- }
- },
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
+ "brace-expansion": "^1.1.7"
}
},
- "object-keys": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz",
- "integrity": "sha1-KKaq50KN0sOpLz2V8hM13SBOAzY=",
- "dev": true
+ "minimist": {
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
+ "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0="
},
- "object-visit": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
- "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
+ "minimist-options": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-3.0.2.tgz",
+ "integrity": "sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ==",
"dev": true,
"requires": {
- "isobject": "^3.0.0"
+ "arrify": "^1.0.1",
+ "is-plain-obj": "^1.1.0"
}
},
- "object.assign": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz",
- "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==",
+ "mississippi": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz",
+ "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==",
"dev": true,
"requires": {
- "define-properties": "^1.1.2",
- "function-bind": "^1.1.1",
- "has-symbols": "^1.0.0",
- "object-keys": "^1.0.11"
+ "concat-stream": "^1.5.0",
+ "duplexify": "^3.4.2",
+ "end-of-stream": "^1.1.0",
+ "flush-write-stream": "^1.0.0",
+ "from2": "^2.1.0",
+ "parallel-transform": "^1.1.0",
+ "pump": "^3.0.0",
+ "pumpify": "^1.3.3",
+ "stream-each": "^1.1.0",
+ "through2": "^2.0.0"
},
"dependencies": {
- "object-keys": {
- "version": "1.0.12",
- "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.12.tgz",
- "integrity": "sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag==",
- "dev": true
+ "pump": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
+ "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
+ "dev": true,
+ "requires": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.1"
+ }
}
}
},
- "object.defaults": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz",
- "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=",
- "dev": true,
- "requires": {
- "array-each": "^1.0.1",
- "array-slice": "^1.0.0",
- "for-own": "^1.0.0",
- "isobject": "^3.0.0"
- }
- },
- "object.map": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz",
- "integrity": "sha1-z4Plncj8wK1fQlDh94s7gb2AHTc=",
- "dev": true,
- "requires": {
- "for-own": "^1.0.0",
- "make-iterator": "^1.0.0"
- }
- },
- "object.omit": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz",
- "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=",
- "dev": true,
+ "mixin-deep": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz",
+ "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==",
"requires": {
- "for-own": "^0.1.4",
- "is-extendable": "^0.1.1"
+ "for-in": "^1.0.2",
+ "is-extendable": "^1.0.1"
},
"dependencies": {
- "for-own": {
- "version": "0.1.5",
- "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz",
- "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=",
- "dev": true,
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
"requires": {
- "for-in": "^1.0.1"
+ "is-plain-object": "^2.0.4"
}
}
}
},
- "object.pick": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
- "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
- "dev": true,
+ "mkdirp": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
+ "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
"requires": {
- "isobject": "^3.0.1"
+ "minimist": "0.0.8"
}
},
- "object.reduce": {
+ "modify-values": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/object.reduce/-/object.reduce-1.0.1.tgz",
- "integrity": "sha1-b+NI8qx/oPlcpiEiZZkJaCW7A60=",
- "dev": true,
- "requires": {
- "for-own": "^1.0.0",
- "make-iterator": "^1.0.0"
- }
- },
- "octal": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/octal/-/octal-1.0.0.tgz",
- "integrity": "sha1-Y+cWKmjvvrniE1iNWOmJ0eXEUws=",
+ "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz",
+ "integrity": "sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==",
"dev": true
},
- "on-finished": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
- "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
- "dev": true,
- "requires": {
- "ee-first": "1.1.1"
- }
- },
- "once": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
- "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
- "dev": true,
- "requires": {
- "wrappy": "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.0.1",
- "pinkie-promise": "^2.0.0"
- }
- },
- "opn-cli": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/opn-cli/-/opn-cli-3.1.0.tgz",
- "integrity": "sha1-+BmubK4LQRvQFJuFYP5siK2tIPg=",
+ "mount-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/mount-point/-/mount-point-3.0.0.tgz",
+ "integrity": "sha1-Zly57evoDREOZY21bDHQrvUaj5c=",
"dev": true,
"requires": {
- "file-type": "^3.6.0",
- "get-stdin": "^5.0.1",
- "meow": "^3.7.0",
- "opn": "^4.0.0",
- "temp-write": "^2.1.0"
+ "@sindresorhus/df": "^1.0.1",
+ "pify": "^2.3.0",
+ "pinkie-promise": "^2.0.1"
},
"dependencies": {
- "file-type": {
- "version": "3.9.0",
- "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz",
- "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=",
+ "@sindresorhus/df": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@sindresorhus/df/-/df-1.0.1.tgz",
+ "integrity": "sha1-xptm9S9vzdKHyAffIQMF2694UA0=",
"dev": true
},
- "get-stdin": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-5.0.1.tgz",
- "integrity": "sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g=",
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
"dev": true
}
}
},
- "optimist": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz",
- "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=",
+ "move-concurrently": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz",
+ "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=",
"dev": true,
"requires": {
- "minimist": "~0.0.1",
- "wordwrap": "~0.0.2"
+ "aproba": "^1.1.1",
+ "copy-concurrently": "^1.0.0",
+ "fs-write-stream-atomic": "^1.0.8",
+ "mkdirp": "^0.5.1",
+ "rimraf": "^2.5.4",
+ "run-queue": "^1.0.3"
+ }
+ },
+ "move-file": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/move-file/-/move-file-1.2.0.tgz",
+ "integrity": "sha512-USHrRmxzGowUWAGBbJPdFjHzEqtxDU03pLHY0Rfqgtnq+q8FOIs8wvkkf+Udmg77SJKs47y9sI0jJvQeYsmiCA==",
+ "dev": true,
+ "requires": {
+ "cp-file": "^6.1.0",
+ "make-dir": "^3.0.0",
+ "path-exists": "^3.0.0"
},
"dependencies": {
- "minimist": {
- "version": "0.0.10",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz",
- "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=",
- "dev": true
+ "make-dir": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.0.0.tgz",
+ "integrity": "sha512-grNJDhb8b1Jm1qeqW5R/O63wUo4UXo2v2HMic6YT9i/HBlF93S8jkMgH7yugvY9ABDShH4VZMn8I+U8+fCNegw==",
+ "dev": true,
+ "requires": {
+ "semver": "^6.0.0"
+ }
},
- "wordwrap": {
- "version": "0.0.3",
- "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz",
- "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=",
+ "semver": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.0.0.tgz",
+ "integrity": "sha512-0UewU+9rFapKFnlbirLi3byoOuhrSsli/z/ihNnvM24vgF+8sNBiI1LZPBSH9wJKUwaUbw+s3hToDLCXkrghrQ==",
"dev": true
}
}
},
- "optionator": {
- "version": "0.8.2",
- "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
- "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
- "dev": true,
- "requires": {
- "deep-is": "~0.1.3",
- "fast-levenshtein": "~2.0.4",
- "levn": "~0.3.0",
- "prelude-ls": "~1.1.2",
- "type-check": "~0.3.2",
- "wordwrap": "~1.0.0"
- }
+ "ms": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
+ "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg=="
},
- "ordered-read-streams": {
+ "mute-stdout": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz",
- "integrity": "sha1-d8DLN8QVJdZBZtmQ/61+xqDhNj4=",
+ "resolved": "https://registry.npmjs.org/mute-stdout/-/mute-stdout-1.0.1.tgz",
+ "integrity": "sha512-kDcwXR4PS7caBpuRYYBUz9iVixUk3anO3f5OYFiIPwK/20vCzKCHyKoulbiDY1S53zD2bxUpxN/IJ+TnXjfvxg==",
+ "dev": true
+ },
+ "nan": {
+ "version": "2.13.2",
+ "resolved": "https://registry.npmjs.org/nan/-/nan-2.13.2.tgz",
+ "integrity": "sha512-TghvYc72wlMGMVMluVo9WRJc0mB8KxxF/gZ4YYFy7V2ZQX9l7rgbPg7vjS9mt6U5HXODVFVI2bOduCzwOMv/lw==",
"dev": true,
+ "optional": true
+ },
+ "nanomatch": {
+ "version": "1.2.13",
+ "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
+ "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==",
"requires": {
- "readable-stream": "^2.0.1"
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "fragment-cache": "^0.2.1",
+ "is-windows": "^1.0.2",
+ "kind-of": "^6.0.2",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
}
},
- "os-browserify": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz",
- "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=",
+ "natural-compare": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
+ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
"dev": true
},
- "os-homedir": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
- "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
+ "negotiator": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz",
+ "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=",
"dev": true
},
- "os-locale": {
+ "neo-async": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.0.tgz",
+ "integrity": "sha512-MFh0d/Wa7vkKO3Y3LlacqAEeHK0mckVqzDieUKTT+KGxi+zIpeVsFxymkIiRpbpDziHc290Xr9A1O4Om7otoRA==",
+ "dev": true
+ },
+ "nested-error-stacks": {
"version": "2.1.0",
- "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz",
- "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==",
+ "resolved": "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-2.1.0.tgz",
+ "integrity": "sha512-AO81vsIO1k1sM4Zrd6Hu7regmJN1NSiAja10gc4bX3F0wd+9rQmcuHQaHVQCYIEC8iFXnE+mavh23GOt7wBgug==",
+ "dev": true
+ },
+ "next-tick": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz",
+ "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=",
+ "dev": true
+ },
+ "nice-try": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
+ "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
+ "dev": true
+ },
+ "nock": {
+ "version": "10.0.6",
+ "resolved": "https://registry.npmjs.org/nock/-/nock-10.0.6.tgz",
+ "integrity": "sha512-b47OWj1qf/LqSQYnmokNWM8D88KvUl2y7jT0567NB3ZBAZFz2bWp2PC81Xn7u8F2/vJxzkzNZybnemeFa7AZ2w==",
"dev": true,
"requires": {
- "execa": "^0.7.0",
- "lcid": "^1.0.0",
- "mem": "^1.1.0"
+ "chai": "^4.1.2",
+ "debug": "^4.1.0",
+ "deep-equal": "^1.0.0",
+ "json-stringify-safe": "^5.0.1",
+ "lodash": "^4.17.5",
+ "mkdirp": "^0.5.0",
+ "propagate": "^1.0.0",
+ "qs": "^6.5.1",
+ "semver": "^5.5.0"
}
},
- "os-shim": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/os-shim/-/os-shim-0.1.3.tgz",
- "integrity": "sha1-a2LDeRz3kJ6jXtRuF2WLtBfLORc=",
+ "node-fetch": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.5.0.tgz",
+ "integrity": "sha512-YuZKluhWGJwCcUu4RlZstdAxr8bFfOVHakc1mplwHkk8J+tqM1Y5yraYvIUpeX8aY7+crCwiELJq7Vl0o0LWXw==",
"dev": true
},
- "os-tmpdir": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
- "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
+ "node-int64": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz",
+ "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=",
"dev": true
},
- "osenv": {
- "version": "0.1.5",
- "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz",
- "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==",
+ "node-libs-browser": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.0.tgz",
+ "integrity": "sha512-5MQunG/oyOaBdttrL40dA7bUfPORLRWMUJLQtMg7nluxUvk5XwnLdL9twQHFAjRx/y7mIMkLKT9++qPbbk6BZA==",
+ "dev": true,
+ "requires": {
+ "assert": "^1.1.1",
+ "browserify-zlib": "^0.2.0",
+ "buffer": "^4.3.0",
+ "console-browserify": "^1.1.0",
+ "constants-browserify": "^1.0.0",
+ "crypto-browserify": "^3.11.0",
+ "domain-browser": "^1.1.1",
+ "events": "^3.0.0",
+ "https-browserify": "^1.0.0",
+ "os-browserify": "^0.3.0",
+ "path-browserify": "0.0.0",
+ "process": "^0.11.10",
+ "punycode": "^1.2.4",
+ "querystring-es3": "^0.2.0",
+ "readable-stream": "^2.3.3",
+ "stream-browserify": "^2.0.1",
+ "stream-http": "^2.7.2",
+ "string_decoder": "^1.0.0",
+ "timers-browserify": "^2.0.4",
+ "tty-browserify": "0.0.0",
+ "url": "^0.11.0",
+ "util": "^0.11.0",
+ "vm-browserify": "0.0.4"
+ },
+ "dependencies": {
+ "events": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/events/-/events-3.0.0.tgz",
+ "integrity": "sha512-Dc381HFWJzEOhQ+d8pkNon++bk9h6cdAoAj4iE6Q4y6xgTzySWXlKn05/TVNpjnfRqi/X0EpJEJohPjNI3zpVA==",
+ "dev": true
+ },
+ "url": {
+ "version": "0.11.0",
+ "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"
+ }
+ }
+ }
+ },
+ "node-modules-regexp": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz",
+ "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=",
+ "dev": true
+ },
+ "node-notifier": {
+ "version": "5.4.0",
+ "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.4.0.tgz",
+ "integrity": "sha512-SUDEb+o71XR5lXSTyivXd9J7fCloE3SyP4lSgt3lU2oSANiox+SxlNRGPjDKrwU1YN3ix2KN/VGGCg0t01rttQ==",
"dev": true,
"requires": {
- "os-homedir": "^1.0.0",
- "os-tmpdir": "^1.0.0"
+ "growly": "^1.3.0",
+ "is-wsl": "^1.1.0",
+ "semver": "^5.5.0",
+ "shellwords": "^0.1.1",
+ "which": "^1.3.0"
}
},
- "outpipe": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/outpipe/-/outpipe-1.1.1.tgz",
- "integrity": "sha1-UM+GFjZeh+Ax4ppeyTOaPaRyX6I=",
+ "node-releases": {
+ "version": "1.1.18",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.18.tgz",
+ "integrity": "sha512-/mnVgm6u/8OwlIsoyRXtTI0RfQcxZoAZbdwyXap0EeWwcOpDDymyCHM2/aR9XKmHXrvizHoPAOs0pcbiJ6RUaA==",
"dev": true,
"requires": {
- "shell-quote": "^1.4.2"
+ "semver": "^5.3.0"
}
},
- "p-finally": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
- "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=",
- "dev": true
+ "normalize-package-data": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
+ "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
+ "dev": true,
+ "requires": {
+ "hosted-git-info": "^2.1.4",
+ "resolve": "^1.10.0",
+ "semver": "2 || 3 || 4 || 5",
+ "validate-npm-package-license": "^3.0.1"
+ }
},
- "p-limit": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
- "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
+ "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,
"requires": {
- "p-try": "^1.0.0"
+ "remove-trailing-separator": "^1.0.1"
}
},
- "p-locate": {
+ "normalize-url": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz",
+ "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=",
+ "dev": true,
+ "requires": {
+ "object-assign": "^4.0.1",
+ "prepend-http": "^1.0.0",
+ "query-string": "^4.1.0",
+ "sort-keys": "^1.0.0"
+ }
+ },
+ "now-and-later": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
- "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
+ "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-2.0.0.tgz",
+ "integrity": "sha1-vGHLtFbXnLMiB85HygUTb/Ln1u4=",
"dev": true,
"requires": {
- "p-limit": "^1.1.0"
+ "once": "^1.3.2"
}
},
- "p-map": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz",
- "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==",
- "dev": true
+ "npm-run-path": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
+ "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=",
+ "requires": {
+ "path-key": "^2.0.0"
+ }
},
- "p-try": {
+ "null-check": {
"version": "1.0.0",
- "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
- "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
+ "resolved": "https://registry.npmjs.org/null-check/-/null-check-1.0.0.tgz",
+ "integrity": "sha1-l33/1xdgErnsMNKjnbXPcqBDnt0=",
"dev": true
},
- "package-json": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/package-json/-/package-json-2.4.0.tgz",
- "integrity": "sha1-DRW9Z9HLvduyyiIv8u24a8sxqLs=",
- "dev": true,
+ "number-is-nan": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0="
+ },
+ "nwsapi": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.1.3.tgz",
+ "integrity": "sha512-RowAaJGEgYXEZfQ7tvvdtAQUKPyTR6T6wNu0fwlNsGQYr/h3yQc6oI8WnVZh3Y/Sylwc+dtAlvPqfFZjhTyk3A==",
+ "dev": true
+ },
+ "oauth-sign": {
+ "version": "0.9.0",
+ "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
+ "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==",
+ "dev": true
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
+ "dev": true
+ },
+ "object-copy": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
+ "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
"requires": {
- "got": "^5.0.0",
- "registry-auth-token": "^3.0.1",
- "registry-url": "^3.0.3",
- "semver": "^5.1.0"
+ "copy-descriptor": "^0.1.0",
+ "define-property": "^0.2.5",
+ "kind-of": "^3.0.3"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
}
},
- "pako": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.6.tgz",
- "integrity": "sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg==",
+ "object-keys": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.0.tgz",
+ "integrity": "sha512-6OO5X1+2tYkNyNEx6TsCxEqFfRWaqx6EtMiSbGrw8Ob8v9Ne+Hl8rBAgLBZn5wjEz3s/s6U1WXFUFOcxxAwUpg==",
"dev": true
},
- "parents": {
+ "object-visit": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/parents/-/parents-1.0.1.tgz",
- "integrity": "sha1-/t1NK/GTp3dF/nHjcdc8MwfZx1E=",
- "dev": true,
+ "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
+ "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
"requires": {
- "path-platform": "~0.11.15"
+ "isobject": "^3.0.0"
}
},
- "parse-asn1": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.1.tgz",
- "integrity": "sha512-KPx7flKXg775zZpnp9SxJlz00gTd4BmJ2yJufSc44gMCRrRQ7NSzAcSJQfifuOLgW6bEi+ftrALtsgALeB2Adw==",
+ "object.assign": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz",
+ "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==",
"dev": true,
"requires": {
- "asn1.js": "^4.0.0",
- "browserify-aes": "^1.0.0",
- "create-hash": "^1.1.0",
- "evp_bytestokey": "^1.0.0",
- "pbkdf2": "^3.0.3"
+ "define-properties": "^1.1.2",
+ "function-bind": "^1.1.1",
+ "has-symbols": "^1.0.0",
+ "object-keys": "^1.0.11"
}
},
- "parse-filepath": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz",
- "integrity": "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=",
+ "object.defaults": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz",
+ "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=",
"dev": true,
"requires": {
- "is-absolute": "^1.0.0",
- "map-cache": "^0.2.0",
- "path-root": "^0.1.1"
+ "array-each": "^1.0.1",
+ "array-slice": "^1.0.0",
+ "for-own": "^1.0.0",
+ "isobject": "^3.0.0"
}
},
- "parse-github-repo-url": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/parse-github-repo-url/-/parse-github-repo-url-1.4.1.tgz",
- "integrity": "sha1-nn2LslKmy2ukJZUGC3v23z28H1A=",
- "dev": true
- },
- "parse-glob": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz",
- "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=",
+ "object.getownpropertydescriptors": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz",
+ "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=",
"dev": true,
"requires": {
- "glob-base": "^0.3.0",
- "is-dotfile": "^1.0.0",
- "is-extglob": "^1.0.0",
- "is-glob": "^2.0.0"
- },
- "dependencies": {
- "is-extglob": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
- "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
- "dev": true
- },
- "is-glob": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
- "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
- "dev": true,
- "requires": {
- "is-extglob": "^1.0.0"
- }
- }
+ "define-properties": "^1.1.2",
+ "es-abstract": "^1.5.1"
}
},
- "parse-json": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
- "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
+ "object.map": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz",
+ "integrity": "sha1-z4Plncj8wK1fQlDh94s7gb2AHTc=",
"dev": true,
"requires": {
- "error-ex": "^1.3.1",
- "json-parse-better-errors": "^1.0.1"
+ "for-own": "^1.0.0",
+ "make-iterator": "^1.0.0"
}
},
- "parse-ms": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-1.0.1.tgz",
- "integrity": "sha1-VjRtR0nXjyNDDKDHE4UK75GqNh0=",
- "dev": true
+ "object.pick": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
+ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
+ "requires": {
+ "isobject": "^3.0.1"
+ }
},
- "parse-node-version": {
+ "object.reduce": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz",
- "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==",
- "dev": true
- },
- "parse-passwd": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz",
- "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=",
- "dev": true
- },
- "parse5": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.0.tgz",
- "integrity": "sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ==",
- "dev": true
- },
- "parseqs": {
- "version": "0.0.5",
- "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz",
- "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=",
+ "resolved": "https://registry.npmjs.org/object.reduce/-/object.reduce-1.0.1.tgz",
+ "integrity": "sha1-b+NI8qx/oPlcpiEiZZkJaCW7A60=",
"dev": true,
"requires": {
- "better-assert": "~1.0.0"
+ "for-own": "^1.0.0",
+ "make-iterator": "^1.0.0"
}
},
- "parseuri": {
- "version": "0.0.5",
- "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz",
- "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=",
+ "on-finished": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
+ "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
"dev": true,
"requires": {
- "better-assert": "~1.0.0"
+ "ee-first": "1.1.1"
}
},
- "parseurl": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz",
- "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=",
- "dev": true
- },
- "pascalcase": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
- "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=",
- "dev": true
- },
- "path-browserify": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz",
- "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==",
- "dev": true
- },
- "path-dirname": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
- "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=",
- "dev": true
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "requires": {
+ "wrappy": "1"
+ }
},
- "path-exists": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
- "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
+ "open": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/open/-/open-6.1.0.tgz",
+ "integrity": "sha512-Vqch7NFb/WsMujhqfq+B3u0xkssRjZlxh+NSsBSphpcgaFD7gfB0SUBfR91E9ygBlyNGNogXR2cUB8rRfoo2kQ==",
"dev": true,
"requires": {
- "pinkie-promise": "^2.0.0"
+ "is-wsl": "^1.1.0"
}
},
- "path-is-absolute": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
- "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
- "dev": true
- },
- "path-is-inside": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz",
- "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=",
- "dev": true
- },
- "path-key": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
- "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
- "dev": true
- },
- "path-parse": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz",
- "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=",
+ "opener": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.1.tgz",
+ "integrity": "sha512-goYSy5c2UXE4Ra1xixabeVh1guIX/ZV/YokJksb6q2lubWu6UbvPQ20p542/sFIll1nl8JnCyK9oBaOcCWXwvA==",
"dev": true
},
- "path-platform": {
- "version": "0.11.15",
- "resolved": "https://registry.npmjs.org/path-platform/-/path-platform-0.11.15.tgz",
- "integrity": "sha1-6GQhf3TDaFDwhSt43Hv31KVyG/I=",
- "dev": true
+ "opn-cli": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/opn-cli/-/opn-cli-4.1.0.tgz",
+ "integrity": "sha512-nVJ9dVb4fEKtmACWxUql+hhQxVWMt7BSRT+6TnB85W3xs5Pgk9sKW3icYeCIwOtOKALBw/6WUCoNmI1+ADfAow==",
+ "dev": true,
+ "requires": {
+ "file-type": "^10.10.0",
+ "get-stdin": "^6.0.0",
+ "meow": "^5.0.0",
+ "open": "^6.1.0",
+ "temp-write": "^3.4.0"
+ },
+ "dependencies": {
+ "camelcase-keys": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-4.2.0.tgz",
+ "integrity": "sha1-oqpfsa9oh1glnDLBQUJteJI7m3c=",
+ "dev": true,
+ "requires": {
+ "camelcase": "^4.1.0",
+ "map-obj": "^2.0.0",
+ "quick-lru": "^1.0.0"
+ }
+ },
+ "indent-string": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz",
+ "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=",
+ "dev": true
+ },
+ "load-json-file": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz",
+ "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "parse-json": "^4.0.0",
+ "pify": "^3.0.0",
+ "strip-bom": "^3.0.0"
+ }
+ },
+ "map-obj": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-2.0.0.tgz",
+ "integrity": "sha1-plzSkIepJZi4eRJXpSPgISIqwfk=",
+ "dev": true
+ },
+ "meow": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/meow/-/meow-5.0.0.tgz",
+ "integrity": "sha512-CbTqYU17ABaLefO8vCU153ZZlprKYWDljcndKKDCFcYQITzWCXZAVk4QMFZPgvzrnUQ3uItnIE/LoUOwrT15Ig==",
+ "dev": true,
+ "requires": {
+ "camelcase-keys": "^4.0.0",
+ "decamelize-keys": "^1.0.0",
+ "loud-rejection": "^1.0.0",
+ "minimist-options": "^3.0.1",
+ "normalize-package-data": "^2.3.4",
+ "read-pkg-up": "^3.0.0",
+ "redent": "^2.0.0",
+ "trim-newlines": "^2.0.0",
+ "yargs-parser": "^10.0.0"
+ }
+ },
+ "parse-json": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
+ "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
+ "dev": true,
+ "requires": {
+ "error-ex": "^1.3.1",
+ "json-parse-better-errors": "^1.0.1"
+ }
+ },
+ "read-pkg": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz",
+ "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=",
+ "dev": true,
+ "requires": {
+ "load-json-file": "^4.0.0",
+ "normalize-package-data": "^2.3.2",
+ "path-type": "^3.0.0"
+ }
+ },
+ "read-pkg-up": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz",
+ "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=",
+ "dev": true,
+ "requires": {
+ "find-up": "^2.0.0",
+ "read-pkg": "^3.0.0"
+ }
+ },
+ "redent": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/redent/-/redent-2.0.0.tgz",
+ "integrity": "sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo=",
+ "dev": true,
+ "requires": {
+ "indent-string": "^3.0.0",
+ "strip-indent": "^2.0.0"
+ }
+ },
+ "strip-bom": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
+ "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
+ "dev": true
+ },
+ "strip-indent": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz",
+ "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=",
+ "dev": true
+ },
+ "trim-newlines": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-2.0.0.tgz",
+ "integrity": "sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA=",
+ "dev": true
+ },
+ "yargs-parser": {
+ "version": "10.1.0",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.1.0.tgz",
+ "integrity": "sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==",
+ "dev": true,
+ "requires": {
+ "camelcase": "^4.1.0"
+ }
+ }
+ }
},
- "path-root": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz",
- "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=",
+ "optimist": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz",
+ "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=",
"dev": true,
"requires": {
- "path-root-regex": "^0.1.0"
+ "minimist": "~0.0.1",
+ "wordwrap": "~0.0.2"
}
},
- "path-root-regex": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz",
- "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=",
- "dev": true
- },
- "path-to-regexp": {
- "version": "0.1.7",
- "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
- "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=",
- "dev": true
- },
- "path-type": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz",
- "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==",
+ "optionator": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
+ "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
"dev": true,
"requires": {
- "pify": "^3.0.0"
+ "deep-is": "~0.1.3",
+ "fast-levenshtein": "~2.0.4",
+ "levn": "~0.3.0",
+ "prelude-ls": "~1.1.2",
+ "type-check": "~0.3.2",
+ "wordwrap": "~1.0.0"
+ },
+ "dependencies": {
+ "wordwrap": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+ "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
+ "dev": true
+ }
}
},
- "pbkdf2": {
- "version": "3.0.16",
- "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.16.tgz",
- "integrity": "sha512-y4CXP3thSxqf7c0qmOF+9UeOTrifiVTIM+u7NWlq+PRsHbr7r7dpCmvzrZxa96JJUNi0Y5w9VqG5ZNeCVMoDcA==",
+ "ordered-read-streams": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz",
+ "integrity": "sha1-d8DLN8QVJdZBZtmQ/61+xqDhNj4=",
"dev": true,
"requires": {
- "create-hash": "^1.1.2",
- "create-hmac": "^1.1.4",
- "ripemd160": "^2.0.1",
- "safe-buffer": "^5.0.1",
- "sha.js": "^2.4.8"
+ "readable-stream": "^2.0.1"
}
},
- "pend": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
- "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=",
- "dev": true
- },
- "performance-now": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
- "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=",
- "dev": true
- },
- "pidtree": {
+ "os-browserify": {
"version": "0.3.0",
- "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.3.0.tgz",
- "integrity": "sha512-9CT4NFlDcosssyg8KVFltgokyKZIFjoBxw8CTGy+5F38Y1eQWrt8tRayiUOXE+zVKQnYu5BR8JjCtvK3BcnBhg==",
- "dev": true
- },
- "pify": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
- "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+ "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz",
+ "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=",
"dev": true
},
- "pinkie": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
- "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
+ "os-homedir": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
+ "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
"dev": true
},
- "pinkie-promise": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
- "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
- "dev": true,
+ "os-locale": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz",
+ "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==",
"requires": {
- "pinkie": "^2.0.0"
+ "execa": "^0.7.0",
+ "lcid": "^1.0.0",
+ "mem": "^1.1.0"
}
},
- "plugin-error": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-1.0.1.tgz",
- "integrity": "sha512-L1zP0dk7vGweZME2i+EeakvUNqSrdiI3F91TwEoYiGrAfUXmVv6fJIq4g82PAXxNsWOp0J7ZqQy/3Szz0ajTxA==",
+ "p-defer": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz",
+ "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=",
+ "dev": true
+ },
+ "p-each-series": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-1.0.0.tgz",
+ "integrity": "sha1-kw89Et0fUOdDRFeiLNbwSsatf3E=",
"dev": true,
"requires": {
- "ansi-colors": "^1.0.1",
- "arr-diff": "^4.0.0",
- "arr-union": "^3.1.0",
- "extend-shallow": "^3.0.2"
+ "p-reduce": "^1.0.0"
}
},
- "pn": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz",
- "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==",
- "dev": true
- },
- "posix-character-classes": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
- "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=",
- "dev": true
- },
- "prelude-ls": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
- "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
- "dev": true
- },
- "prepend-http": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz",
- "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=",
- "dev": true
+ "p-finally": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
+ "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4="
},
- "preserve": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz",
- "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=",
+ "p-is-promise": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.0.0.tgz",
+ "integrity": "sha512-pzQPhYMCAgLAKPWD2jC3Se9fEfrD9npNos0y150EeqZll7akhEgGhTW/slB6lHku8AvYGiJ+YJ5hfHKePPgFWg==",
"dev": true
},
- "pretty-bytes": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-1.0.4.tgz",
- "integrity": "sha1-CiLoIQYJrTVUL4yNXSFZr/B1HIQ=",
- "dev": true,
+ "p-limit": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
+ "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
"requires": {
- "get-stdin": "^4.0.1",
- "meow": "^3.1.0"
+ "p-try": "^1.0.0"
}
},
- "pretty-hrtime": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz",
- "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=",
- "dev": true
- },
- "pretty-ms": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-3.2.0.tgz",
- "integrity": "sha512-ZypexbfVUGTFxb0v+m1bUyy92DHe5SyYlnyY0msyms5zd3RwyvNgyxZZsXXgoyzlxjx5MiqtXUdhUfvQbe0A2Q==",
- "dev": true,
+ "p-locate": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
+ "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
"requires": {
- "parse-ms": "^1.0.0"
+ "p-limit": "^1.1.0"
}
},
- "private": {
- "version": "0.1.8",
- "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz",
- "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==",
+ "p-map": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz",
+ "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==",
"dev": true
},
- "process": {
- "version": "0.11.10",
- "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
- "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=",
- "dev": true
+ "p-queue": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-4.0.0.tgz",
+ "integrity": "sha512-3cRXXn3/O0o3+eVmUroJPSj/esxoEFIm0ZOno/T+NzG/VZgPOqQ8WKmlNqubSEpZmCIngEy34unkHGg83ZIBmg==",
+ "requires": {
+ "eventemitter3": "^3.1.0"
+ }
},
- "process-es6": {
- "version": "0.11.6",
- "resolved": "https://registry.npmjs.org/process-es6/-/process-es6-0.11.6.tgz",
- "integrity": "sha1-xrs4n5qVH4K9TrFpYAEFvS/5x3g=",
+ "p-reduce": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-1.0.0.tgz",
+ "integrity": "sha1-GMKw3ZNqRpClKfgjH1ig/bakffo=",
"dev": true
},
- "process-nextick-args": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
- "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw=="
- },
- "progress": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
- "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
- "dev": true
+ "p-try": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
+ "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M="
},
- "progress-stream": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/progress-stream/-/progress-stream-1.2.0.tgz",
- "integrity": "sha1-LNPP6jO6OonJwSHsM0er6asSX3c=",
+ "package-json": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz",
+ "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=",
"dev": true,
"requires": {
- "speedometer": "~0.1.2",
- "through2": "~0.2.3"
- },
- "dependencies": {
- "isarray": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
- "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
- "dev": true
- },
- "readable-stream": {
- "version": "1.1.14",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
- "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
- "dev": true,
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.1",
- "isarray": "0.0.1",
- "string_decoder": "~0.10.x"
- }
- },
- "string_decoder": {
- "version": "0.10.31",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
- "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
- "dev": true
- },
- "through2": {
- "version": "0.2.3",
- "resolved": "https://registry.npmjs.org/through2/-/through2-0.2.3.tgz",
- "integrity": "sha1-6zKE2k6jEbbMis42U3SKUqvyWj8=",
- "dev": true,
- "requires": {
- "readable-stream": "~1.1.9",
- "xtend": "~2.1.1"
- }
- },
- "xtend": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz",
- "integrity": "sha1-bv7MKk2tjmlixJAbM3znuoe10os=",
- "dev": true,
- "requires": {
- "object-keys": "~0.4.0"
- }
- }
+ "got": "^6.7.1",
+ "registry-auth-token": "^3.0.1",
+ "registry-url": "^3.0.3",
+ "semver": "^5.1.0"
}
},
- "proxy-addr": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.4.tgz",
- "integrity": "sha512-5erio2h9jp5CHGwcybmxmVqHmnCBZeewlfJ0pex+UW7Qny7OOZXTtH56TGNyBizkgiOwhJtMKrVzDTeKcySZwA==",
+ "pako": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.10.tgz",
+ "integrity": "sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw==",
+ "dev": true
+ },
+ "parallel-transform": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.1.0.tgz",
+ "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=",
"dev": true,
"requires": {
- "forwarded": "~0.1.2",
- "ipaddr.js": "1.8.0"
+ "cyclist": "~0.2.2",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.1.5"
}
},
- "prr": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz",
- "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=",
- "dev": true
- },
- "pseudomap": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
- "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=",
- "dev": true
- },
- "psl": {
- "version": "1.1.29",
- "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.29.tgz",
- "integrity": "sha512-AeUmQ0oLN02flVHXWh9sSJF7mcdFq0ppid/JkErufc3hGIV/AMa8Fo9VgDo/cT2jFdOWoFvHp90qqBH54W+gjQ==",
- "dev": true
- },
- "public-encrypt": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.2.tgz",
- "integrity": "sha512-4kJ5Esocg8X3h8YgJsKAuoesBgB7mqH3eowiDzMUPKiRDDE7E/BqqZD1hnTByIaAFiwAw246YEltSq7tdrOH0Q==",
+ "parse-asn1": {
+ "version": "5.1.4",
+ "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.4.tgz",
+ "integrity": "sha512-Qs5duJcuvNExRfFZ99HDD3z4mAi3r9Wl/FOjEOijlxwCZs7E7mW2vjTpgQ4J8LpTF8x5v+1Vn5UQFejmWT11aw==",
"dev": true,
"requires": {
- "bn.js": "^4.1.0",
- "browserify-rsa": "^4.0.0",
+ "asn1.js": "^4.0.0",
+ "browserify-aes": "^1.0.0",
"create-hash": "^1.1.0",
- "parse-asn1": "^5.0.0",
- "randombytes": "^2.0.1"
+ "evp_bytestokey": "^1.0.0",
+ "pbkdf2": "^3.0.3",
+ "safe-buffer": "^5.1.1"
}
},
- "pump": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz",
- "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==",
+ "parse-filepath": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz",
+ "integrity": "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=",
"dev": true,
"requires": {
- "end-of-stream": "^1.1.0",
- "once": "^1.3.1"
- },
- "dependencies": {
- "end-of-stream": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz",
- "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==",
- "dev": true,
- "requires": {
- "once": "^1.4.0"
- }
- }
+ "is-absolute": "^1.0.0",
+ "map-cache": "^0.2.0",
+ "path-root": "^0.1.1"
}
},
- "pumpify": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz",
- "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==",
+ "parse-github-repo-url": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/parse-github-repo-url/-/parse-github-repo-url-1.4.1.tgz",
+ "integrity": "sha1-nn2LslKmy2ukJZUGC3v23z28H1A=",
+ "dev": true
+ },
+ "parse-json": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
+ "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
"dev": true,
"requires": {
- "duplexify": "^3.6.0",
- "inherits": "^2.0.3",
- "pump": "^2.0.0"
+ "error-ex": "^1.2.0"
}
},
- "punycode": {
+ "parse-node-version": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz",
+ "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==",
+ "dev": true
+ },
+ "parse-passwd": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz",
+ "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=",
+ "dev": true
+ },
+ "parse5": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.0.tgz",
+ "integrity": "sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ==",
+ "dev": true
+ },
+ "parseurl": {
"version": "1.3.2",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz",
- "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=",
+ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz",
+ "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=",
"dev": true
},
- "q": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
- "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=",
+ "pascalcase": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
+ "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ="
+ },
+ "path-browserify": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz",
+ "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=",
"dev": true
},
- "qjobs": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz",
- "integrity": "sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==",
+ "path-dirname": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
+ "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA="
+ },
+ "path-exists": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+ "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU="
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
+ },
+ "path-is-inside": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz",
+ "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=",
"dev": true
},
- "qs": {
- "version": "6.5.2",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
- "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA=="
+ "path-key": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
+ "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A="
},
- "query-string": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz",
- "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=",
+ "path-parse": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
+ "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw=="
+ },
+ "path-root": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz",
+ "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=",
"dev": true,
"requires": {
- "object-assign": "^4.1.0",
- "strict-uri-encode": "^1.0.0"
+ "path-root-regex": "^0.1.0"
}
},
- "querystring": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz",
- "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=",
- "dev": true
- },
- "querystring-es3": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz",
- "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=",
+ "path-root-regex": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz",
+ "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=",
"dev": true
},
- "quick-lru": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-1.1.0.tgz",
- "integrity": "sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g=",
+ "path-to-regexp": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
+ "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=",
"dev": true
},
- "randomatic": {
+ "path-type": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.0.0.tgz",
- "integrity": "sha512-VdxFOIEY3mNO5PtSRkkle/hPJDHvQhK21oa73K4yAc9qmp6N429gAyF1gZMOTMeS0/AYzaV/2Trcef+NaIonSA==",
- "dev": true,
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz",
+ "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==",
"requires": {
- "is-number": "^4.0.0",
- "kind-of": "^6.0.0",
- "math-random": "^1.0.1"
- },
- "dependencies": {
- "is-number": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz",
- "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==",
- "dev": true
- }
+ "pify": "^3.0.0"
}
},
- "randombytes": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.6.tgz",
- "integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==",
- "dev": true,
- "requires": {
- "safe-buffer": "^5.1.0"
- }
+ "pathval": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz",
+ "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=",
+ "dev": true
},
- "randomfill": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz",
- "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==",
+ "pbkdf2": {
+ "version": "3.0.17",
+ "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz",
+ "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==",
"dev": true,
"requires": {
- "randombytes": "^2.0.5",
- "safe-buffer": "^5.1.0"
+ "create-hash": "^1.1.2",
+ "create-hmac": "^1.1.4",
+ "ripemd160": "^2.0.1",
+ "safe-buffer": "^5.0.1",
+ "sha.js": "^2.4.8"
}
},
- "range-parser": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz",
- "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=",
+ "performance-now": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
+ "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=",
"dev": true
},
- "raw-body": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz",
- "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==",
- "dev": true,
- "requires": {
- "bytes": "3.0.0",
- "http-errors": "1.6.3",
- "iconv-lite": "0.4.23",
- "unpipe": "1.0.0"
- }
+ "pify": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY="
},
- "rc": {
- "version": "1.2.8",
- "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
- "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
- "dev": true,
- "requires": {
- "deep-extend": "^0.6.0",
- "ini": "~1.3.0",
- "minimist": "^1.2.0",
- "strip-json-comments": "~2.0.1"
- }
+ "pinkie": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
+ "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
+ "dev": true
},
- "read-all-stream": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/read-all-stream/-/read-all-stream-3.1.0.tgz",
- "integrity": "sha1-NcPhd/IHjveJ7kv6+kNzB06u9Po=",
+ "pinkie-promise": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
+ "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
"dev": true,
"requires": {
- "pinkie-promise": "^2.0.0",
- "readable-stream": "^2.0.0"
+ "pinkie": "^2.0.0"
}
},
- "read-only-stream": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/read-only-stream/-/read-only-stream-2.0.0.tgz",
- "integrity": "sha1-JyT9aoET1zdkrCiNQ4YnDB2/F/A=",
+ "pirates": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz",
+ "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==",
"dev": true,
"requires": {
- "readable-stream": "^2.0.2"
+ "node-modules-regexp": "^1.0.0"
}
},
- "read-pkg": {
+ "pkg-dir": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz",
- "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=",
- "dev": true,
- "requires": {
- "load-json-file": "^4.0.0",
- "normalize-package-data": "^2.3.2",
- "path-type": "^3.0.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=",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz",
+ "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==",
"dev": true,
"requires": {
- "find-up": "^1.0.0",
- "read-pkg": "^1.0.0"
+ "find-up": "^3.0.0"
},
"dependencies": {
- "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,
- "requires": {
- "graceful-fs": "^4.1.2",
- "parse-json": "^2.2.0",
- "pify": "^2.0.0",
- "pinkie-promise": "^2.0.0",
- "strip-bom": "^2.0.0"
- }
- },
- "parse-json": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
- "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
- "dev": true,
- "requires": {
- "error-ex": "^1.2.0"
- }
- },
- "path-type": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
- "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
+ "find-up": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
+ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
"dev": true,
"requires": {
- "graceful-fs": "^4.1.2",
- "pify": "^2.0.0",
- "pinkie-promise": "^2.0.0"
+ "locate-path": "^3.0.0"
}
},
- "pify": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
- "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
- "dev": true
+ "locate-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
+ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
+ "dev": true,
+ "requires": {
+ "p-locate": "^3.0.0",
+ "path-exists": "^3.0.0"
+ }
},
- "read-pkg": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
- "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
+ "p-limit": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz",
+ "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==",
"dev": true,
"requires": {
- "load-json-file": "^1.0.0",
- "normalize-package-data": "^2.3.2",
- "path-type": "^1.0.0"
+ "p-try": "^2.0.0"
}
},
- "strip-bom": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
- "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
+ "p-locate": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
+ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
"dev": true,
"requires": {
- "is-utf8": "^0.2.0"
+ "p-limit": "^2.0.0"
}
+ },
+ "p-try": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.1.0.tgz",
+ "integrity": "sha512-H2RyIJ7+A3rjkwKC2l5GGtU4H1vkxKCAGsWasNVd0Set+6i4znxbWy6/j16YDPJDWxhsgZiKAstMEP8wCdSpjA==",
+ "dev": true
}
}
},
- "readable-stream": {
- "version": "2.3.6",
- "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",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- }
- },
- "readdirp": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz",
- "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=",
+ "plugin-error": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-1.0.1.tgz",
+ "integrity": "sha512-L1zP0dk7vGweZME2i+EeakvUNqSrdiI3F91TwEoYiGrAfUXmVv6fJIq4g82PAXxNsWOp0J7ZqQy/3Szz0ajTxA==",
"dev": true,
"requires": {
- "graceful-fs": "^4.1.2",
- "minimatch": "^3.0.2",
- "readable-stream": "^2.0.2",
- "set-immediate-shim": "^1.0.1"
+ "ansi-colors": "^1.0.1",
+ "arr-diff": "^4.0.0",
+ "arr-union": "^3.1.0",
+ "extend-shallow": "^3.0.2"
}
},
- "rechoir": {
- "version": "0.6.2",
- "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
- "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=",
- "dev": true,
+ "pn": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz",
+ "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==",
+ "dev": true
+ },
+ "posix-character-classes": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
+ "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs="
+ },
+ "prelude-ls": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
+ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
+ "dev": true
+ },
+ "prepend-http": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz",
+ "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=",
+ "dev": true
+ },
+ "prettier": {
+ "version": "1.17.0",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.17.0.tgz",
+ "integrity": "sha512-sXe5lSt2WQlCbydGETgfm1YBShgOX4HxQkFPvbxkcwgDvGDeqVau8h+12+lmSVlP3rHPz0oavfddSZg/q+Szjw==",
+ "dev": true
+ },
+ "prettier-tslint": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/prettier-tslint/-/prettier-tslint-0.4.2.tgz",
+ "integrity": "sha512-urhX7U/F+fu8sztEs/Z7CxNS8PdEytEwGKhQaH5fxxCdRmHGT45FoClyDlcZrMk9cK/8JpX/asFmTOHtSGJfLg==",
"requires": {
- "resolve": "^1.1.6"
+ "chalk": "^2.4.0",
+ "globby": "^8.0.1",
+ "ignore": "^3.3.7",
+ "require-relative": "^0.8.7",
+ "tslint": "^5.9.1",
+ "yargs": "^11.0.0"
}
},
- "redent": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz",
- "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=",
+ "pretty-format": {
+ "version": "24.8.0",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.8.0.tgz",
+ "integrity": "sha512-P952T7dkrDEplsR+TuY7q3VXDae5Sr7zmQb12JU/NDQa/3CH7/QW0yvqLcGN6jL+zQFKaoJcPc+yJxMTGmosqw==",
"dev": true,
"requires": {
- "indent-string": "^2.1.0",
- "strip-indent": "^1.0.1"
+ "@jest/types": "^24.8.0",
+ "ansi-regex": "^4.0.0",
+ "ansi-styles": "^3.2.0",
+ "react-is": "^16.8.4"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
+ "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
+ "dev": true
+ }
}
},
- "regenerate": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz",
- "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==",
+ "pretty-hrtime": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz",
+ "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=",
"dev": true
},
- "regenerate-unicode-properties": {
- "version": "8.0.2",
- "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.0.2.tgz",
- "integrity": "sha512-SbA/iNrBUf6Pv2zU8Ekv1Qbhv92yxL4hiDa2siuxs4KKn4oOoMDHXjAf7+Nz9qinUQ46B1LcWEi/PhJfPWpZWQ==",
- "dev": true,
- "requires": {
- "regenerate": "^1.4.0"
- }
+ "private": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz",
+ "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==",
+ "dev": true
},
- "regenerator-transform": {
- "version": "0.13.4",
- "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.13.4.tgz",
- "integrity": "sha512-T0QMBjK3J0MtxjPmdIMXm72Wvj2Abb0Bd4HADdfijwMdoIsyQZ6fWC7kDFhk2YinBBEMZDL7Y7wh0J1sGx3S4A==",
+ "process": {
+ "version": "0.11.10",
+ "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
+ "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=",
+ "dev": true
+ },
+ "process-nextick-args": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
+ "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
+ "dev": true
+ },
+ "progress": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
+ "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
+ "dev": true
+ },
+ "promise-inflight": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz",
+ "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=",
+ "dev": true
+ },
+ "prompts": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.0.4.tgz",
+ "integrity": "sha512-HTzM3UWp/99A0gk51gAegwo1QRYA7xjcZufMNe33rCclFszUYAuHe1fIN/3ZmiHeGPkUsNaRyQm1hHOfM0PKxA==",
"dev": true,
"requires": {
- "private": "^0.1.6"
+ "kleur": "^3.0.2",
+ "sisteransi": "^1.0.0"
}
},
- "regex-cache": {
- "version": "0.4.4",
- "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz",
- "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==",
+ "propagate": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/propagate/-/propagate-1.0.0.tgz",
+ "integrity": "sha1-AMLa7t2iDofjeCs0Stuhzd1q1wk=",
+ "dev": true
+ },
+ "proxy-addr": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.4.tgz",
+ "integrity": "sha512-5erio2h9jp5CHGwcybmxmVqHmnCBZeewlfJ0pex+UW7Qny7OOZXTtH56TGNyBizkgiOwhJtMKrVzDTeKcySZwA==",
"dev": true,
"requires": {
- "is-equal-shallow": "^0.1.3"
+ "forwarded": "~0.1.2",
+ "ipaddr.js": "1.8.0"
}
},
- "regex-not": {
+ "prr": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz",
+ "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=",
+ "dev": true
+ },
+ "pseudomap": {
"version": "1.0.2",
- "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
- "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
- "dev": true,
- "requires": {
- "extend-shallow": "^3.0.2",
- "safe-regex": "^1.1.0"
- }
+ "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
+ "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM="
},
- "regexp-tree": {
- "version": "0.1.5",
- "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.5.tgz",
- "integrity": "sha512-nUmxvfJyAODw+0B13hj8CFVAxhe7fDEAgJgaotBu3nnR+IgGgZq59YedJP5VYTlkEfqjuK6TuRpnymKdatLZfQ==",
+ "psl": {
+ "version": "1.1.31",
+ "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.31.tgz",
+ "integrity": "sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw==",
"dev": true
},
- "regexpu-core": {
- "version": "4.5.4",
- "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.5.4.tgz",
- "integrity": "sha512-BtizvGtFQKGPUcTy56o3nk1bGRp4SZOTYrDtGNlqCQufptV5IkkLN6Emw+yunAJjzf+C9FQFtvq7IoA3+oMYHQ==",
+ "public-encrypt": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz",
+ "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==",
"dev": true,
"requires": {
- "regenerate": "^1.4.0",
- "regenerate-unicode-properties": "^8.0.2",
- "regjsgen": "^0.5.0",
- "regjsparser": "^0.6.0",
- "unicode-match-property-ecmascript": "^1.0.4",
- "unicode-match-property-value-ecmascript": "^1.1.0"
+ "bn.js": "^4.1.0",
+ "browserify-rsa": "^4.0.0",
+ "create-hash": "^1.1.0",
+ "parse-asn1": "^5.0.0",
+ "randombytes": "^2.0.1",
+ "safe-buffer": "^5.1.2"
}
},
- "registry-auth-token": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.2.tgz",
- "integrity": "sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==",
+ "pump": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz",
+ "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==",
"dev": true,
"requires": {
- "rc": "^1.1.6",
- "safe-buffer": "^5.0.1"
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.1"
}
},
- "registry-url": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz",
- "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=",
+ "pumpify": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz",
+ "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==",
"dev": true,
"requires": {
- "rc": "^1.0.1"
+ "duplexify": "^3.6.0",
+ "inherits": "^2.0.3",
+ "pump": "^2.0.0"
}
},
- "regjsgen": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.0.tgz",
- "integrity": "sha512-RnIrLhrXCX5ow/E5/Mh2O4e/oa1/jW0eaBKTSy3LaCj+M3Bqvm97GWDp2yUtzIs4LEn65zR2yiYGFqb2ApnzDA==",
+ "punycode": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz",
+ "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=",
"dev": true
},
- "regjsparser": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.0.tgz",
- "integrity": "sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ==",
- "dev": true,
- "requires": {
- "jsesc": "~0.5.0"
- },
- "dependencies": {
- "jsesc": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
- "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=",
- "dev": true
- }
- }
+ "q": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
+ "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=",
+ "dev": true
},
- "remove-bom-buffer": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz",
- "integrity": "sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ==",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5",
- "is-utf8": "^0.2.1"
- }
+ "qs": {
+ "version": "6.5.2",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
+ "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==",
+ "dev": true
},
- "remove-bom-stream": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz",
- "integrity": "sha1-BfGlk/FuQuH7kOv1nejlaVJflSM=",
+ "query-string": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz",
+ "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=",
"dev": true,
"requires": {
- "remove-bom-buffer": "^3.0.0",
- "safe-buffer": "^5.1.0",
- "through2": "^2.0.3"
+ "object-assign": "^4.1.0",
+ "strict-uri-encode": "^1.0.0"
}
},
- "remove-trailing-separator": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
- "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=",
+ "querystring": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz",
+ "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=",
"dev": true
},
- "repeat-element": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz",
- "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=",
+ "querystring-es3": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz",
+ "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=",
"dev": true
},
- "repeat-string": {
- "version": "1.6.1",
- "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
- "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
+ "quick-lru": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-1.1.0.tgz",
+ "integrity": "sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g=",
"dev": true
},
- "repeating": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
- "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
+ "randombytes": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
+ "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
"dev": true,
"requires": {
- "is-finite": "^1.0.0"
+ "safe-buffer": "^5.1.0"
}
},
- "replace-ext": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz",
- "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=",
- "dev": true
- },
- "replace-homedir": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/replace-homedir/-/replace-homedir-1.0.0.tgz",
- "integrity": "sha1-6H9tUTuSjd6AgmDBK+f+xv9ueYw=",
+ "randomfill": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz",
+ "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==",
"dev": true,
"requires": {
- "homedir-polyfill": "^1.0.1",
- "is-absolute": "^1.0.0",
- "remove-trailing-separator": "^1.1.0"
+ "randombytes": "^2.0.5",
+ "safe-buffer": "^5.1.0"
}
},
- "replacestream": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/replacestream/-/replacestream-4.0.3.tgz",
- "integrity": "sha512-AC0FiLS352pBBiZhd4VXB1Ab/lh0lEgpP+GGvZqbQh8a5cmXVoTe5EX/YeTFArnp4SRGTHh1qCHu9lGs1qG8sA==",
- "dev": true,
- "requires": {
- "escape-string-regexp": "^1.0.3",
- "object-assign": "^4.0.1",
- "readable-stream": "^2.0.2"
- }
+ "range-parser": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz",
+ "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=",
+ "dev": true
},
- "request": {
- "version": "2.87.0",
- "resolved": "https://registry.npmjs.org/request/-/request-2.87.0.tgz",
- "integrity": "sha512-fcogkm7Az5bsS6Sl0sibkbhcKsnyon/jV1kF3ajGmF0c8HrttdKTPRT9hieOaQHA5HEq6r8OyWOo/o781C1tNw==",
+ "raw-body": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz",
+ "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==",
"dev": true,
"requires": {
- "aws-sign2": "~0.7.0",
- "aws4": "^1.6.0",
- "caseless": "~0.12.0",
- "combined-stream": "~1.0.5",
- "extend": "~3.0.1",
- "forever-agent": "~0.6.1",
- "form-data": "~2.3.1",
- "har-validator": "~5.0.3",
- "http-signature": "~1.2.0",
- "is-typedarray": "~1.0.0",
- "isstream": "~0.1.2",
- "json-stringify-safe": "~5.0.1",
- "mime-types": "~2.1.17",
- "oauth-sign": "~0.8.2",
- "performance-now": "^2.1.0",
- "qs": "~6.5.1",
- "safe-buffer": "^5.1.1",
- "tough-cookie": "~2.3.3",
- "tunnel-agent": "^0.6.0",
- "uuid": "^3.1.0"
+ "bytes": "3.0.0",
+ "http-errors": "1.6.3",
+ "iconv-lite": "0.4.23",
+ "unpipe": "1.0.0"
},
"dependencies": {
- "ajv": {
- "version": "5.5.2",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz",
- "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=",
- "dev": true,
- "requires": {
- "co": "^4.6.0",
- "fast-deep-equal": "^1.0.0",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.3.0"
- }
- },
- "fast-deep-equal": {
- "version": "1.1.0",
- "resolved": "http://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz",
- "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=",
+ "bytes": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
+ "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=",
"dev": true
},
- "har-validator": {
- "version": "5.0.3",
- "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz",
- "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=",
+ "iconv-lite": {
+ "version": "0.4.23",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz",
+ "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==",
"dev": true,
"requires": {
- "ajv": "^5.1.0",
- "har-schema": "^2.0.0"
+ "safer-buffer": ">= 2.1.2 < 3"
}
- },
- "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
}
}
},
- "request-promise-core": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.1.tgz",
- "integrity": "sha1-Pu4AssWqgyOc+wTFcA2jb4HNCLY=",
+ "rc": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
+ "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
"dev": true,
"requires": {
- "lodash": "^4.13.1"
+ "deep-extend": "^0.6.0",
+ "ini": "~1.3.0",
+ "minimist": "^1.2.0",
+ "strip-json-comments": "~2.0.1"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+ "dev": true
+ }
}
},
- "request-promise-native": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.5.tgz",
- "integrity": "sha1-UoF3D2jgyXGeUWP9P6tIIhX0/aU=",
+ "react-is": {
+ "version": "16.8.6",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.8.6.tgz",
+ "integrity": "sha512-aUk3bHfZ2bRSVFFbbeVS4i+lNPZr3/WM5jT2J5omUVV1zzcs1nAaf3l51ctA5FFvCRbhrH0bdAsRRQddFJZPtA==",
+ "dev": true
+ },
+ "read-pkg": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
+ "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
"dev": true,
"requires": {
- "request-promise-core": "1.1.1",
- "stealthy-require": "^1.1.0",
- "tough-cookie": ">=2.3.3"
+ "load-json-file": "^1.0.0",
+ "normalize-package-data": "^2.3.2",
+ "path-type": "^1.0.0"
+ },
+ "dependencies": {
+ "path-type": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
+ "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "pify": "^2.0.0",
+ "pinkie-promise": "^2.0.0"
+ }
+ },
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "dev": true
+ }
}
},
- "require-directory": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
- "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
- "dev": true
- },
- "require-main-filename": {
+ "read-pkg-up": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz",
- "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=",
- "dev": true
- },
- "require-relative": {
- "version": "0.8.7",
- "resolved": "https://registry.npmjs.org/require-relative/-/require-relative-0.8.7.tgz",
- "integrity": "sha1-eZlTn8ngR6N5KPoZb44VY9q9Nt4=",
- "dev": true
- },
- "requires-port": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
- "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=",
- "dev": true
+ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
+ "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
+ "dev": true,
+ "requires": {
+ "find-up": "^1.0.0",
+ "read-pkg": "^1.0.0"
+ },
+ "dependencies": {
+ "find-up": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
+ "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
+ "dev": true,
+ "requires": {
+ "path-exists": "^2.0.0",
+ "pinkie-promise": "^2.0.0"
+ }
+ },
+ "path-exists": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
+ "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
+ "dev": true,
+ "requires": {
+ "pinkie-promise": "^2.0.0"
+ }
+ }
+ }
},
- "resolve": {
- "version": "1.8.1",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz",
- "integrity": "sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==",
+ "readable-stream": {
+ "version": "2.3.6",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
"dev": true,
"requires": {
- "path-parse": "^1.0.5"
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ },
+ "dependencies": {
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
}
},
- "resolve-dir": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz",
- "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=",
+ "readdirp": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz",
+ "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==",
"dev": true,
"requires": {
- "expand-tilde": "^2.0.0",
- "global-modules": "^1.0.0"
+ "graceful-fs": "^4.1.11",
+ "micromatch": "^3.1.10",
+ "readable-stream": "^2.0.2"
}
},
- "resolve-options": {
+ "realpath-native": {
"version": "1.1.0",
- "resolved": "https://registry.npmjs.org/resolve-options/-/resolve-options-1.1.0.tgz",
- "integrity": "sha1-MrueOcBtZzONyTeMDW1gdFZq0TE=",
+ "resolved": "https://registry.npmjs.org/realpath-native/-/realpath-native-1.1.0.tgz",
+ "integrity": "sha512-wlgPA6cCIIg9gKz0fgAPjnzh4yR/LnXovwuo9hvyGvx3h8nX4+/iLZplfUWasXpqD8BdnGnP5njOFjkUwPzvjA==",
"dev": true,
"requires": {
- "value-or-function": "^3.0.0"
+ "util.promisify": "^1.0.0"
}
},
- "resolve-url": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
- "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
- "dev": true
- },
- "ret": {
- "version": "0.1.15",
- "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
- "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==",
- "dev": true
- },
- "retry": {
- "version": "0.8.0",
- "resolved": "https://registry.npmjs.org/retry/-/retry-0.8.0.tgz",
- "integrity": "sha1-I2dijcDtskex6rZJ3FOshiisLV8=",
- "dev": true
- },
- "rfdc": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.1.2.tgz",
- "integrity": "sha512-92ktAgvZhBzYTIK0Mja9uen5q5J3NRVMoDkJL2VMwq6SXjVCgqvQeVP2XAaUY6HT+XpQYeLSjb3UoitBryKmdA==",
- "dev": true
- },
- "right-align": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz",
- "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=",
+ "rechoir": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
+ "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=",
"dev": true,
- "optional": true,
"requires": {
- "align-text": "^0.1.1"
+ "resolve": "^1.1.6"
}
},
- "rimraf": {
- "version": "2.6.2",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz",
- "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==",
+ "redent": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz",
+ "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=",
"dev": true,
"requires": {
- "glob": "^7.0.5"
+ "indent-string": "^2.1.0",
+ "strip-indent": "^1.0.1"
}
},
- "ripemd160": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz",
- "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==",
+ "regenerate": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz",
+ "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==",
+ "dev": true
+ },
+ "regenerate-unicode-properties": {
+ "version": "8.0.2",
+ "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.0.2.tgz",
+ "integrity": "sha512-SbA/iNrBUf6Pv2zU8Ekv1Qbhv92yxL4hiDa2siuxs4KKn4oOoMDHXjAf7+Nz9qinUQ46B1LcWEi/PhJfPWpZWQ==",
"dev": true,
"requires": {
- "hash-base": "^3.0.0",
- "inherits": "^2.0.1"
+ "regenerate": "^1.4.0"
}
},
- "rocky": {
- "version": "0.4.15",
- "resolved": "https://registry.npmjs.org/rocky/-/rocky-0.4.15.tgz",
- "integrity": "sha512-6jfS+ENpZYW2Wfw9ETT8dO/HyNg6Deexv+9kXt2bWJxEgJLzgio3+op0i0nn9vwD3EJQ9TpJ4068Cl5BkcQopA==",
+ "regenerator-transform": {
+ "version": "0.13.4",
+ "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.13.4.tgz",
+ "integrity": "sha512-T0QMBjK3J0MtxjPmdIMXm72Wvj2Abb0Bd4HADdfijwMdoIsyQZ6fWC7kDFhk2YinBBEMZDL7Y7wh0J1sGx3S4A==",
"dev": true,
"requires": {
- "http-proxy": "^1.16.2",
- "indexport": "^0.1.1",
- "is-fail": "^0.1.1",
- "lodash": "^3.9.3",
- "media-typer": "^0.3.0",
- "midware-pool": "^0.1.1",
- "raw-body": "^2.1.2",
- "retry": "^0.8.0",
- "router": "^1.3.1"
- },
- "dependencies": {
- "lodash": {
- "version": "3.10.1",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz",
- "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=",
- "dev": true
- }
+ "private": "^0.1.6"
}
},
- "rollup": {
- "version": "0.57.1",
- "resolved": "https://registry.npmjs.org/rollup/-/rollup-0.57.1.tgz",
- "integrity": "sha512-I18GBqP0qJoJC1K1osYjreqA8VAKovxuI3I81RSk0Dmr4TgloI0tAULjZaox8OsJ+n7XRrhH6i0G2By/pj1LCA==",
- "dev": true,
+ "regex-not": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
+ "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
"requires": {
- "@types/acorn": "^4.0.3",
- "acorn": "^5.5.3",
- "acorn-dynamic-import": "^3.0.0",
- "date-time": "^2.1.0",
- "is-reference": "^1.1.0",
- "locate-character": "^2.0.5",
- "pretty-ms": "^3.1.0",
- "require-relative": "^0.8.7",
- "rollup-pluginutils": "^2.0.1",
- "signal-exit": "^3.0.2",
- "sourcemap-codec": "^1.4.1"
+ "extend-shallow": "^3.0.2",
+ "safe-regex": "^1.1.0"
}
},
- "rollup-plugin-alias": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/rollup-plugin-alias/-/rollup-plugin-alias-1.4.0.tgz",
- "integrity": "sha512-lB094zdi19FS+1bVarVp9kBN0Zk41PdTGoCk0z8xesKO7RGjOo18cp1hUzEqrOQ4bM9+KLD9nbnu/XUxQm9pbg==",
+ "regexp-tree": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.6.tgz",
+ "integrity": "sha512-LFrA98Dw/heXqDojz7qKFdygZmFoiVlvE1Zp7Cq2cvF+ZA+03Gmhy0k0PQlsC1jvHPiTUSs+pDHEuSWv6+6D7w==",
+ "dev": true
+ },
+ "regexpu-core": {
+ "version": "4.5.4",
+ "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.5.4.tgz",
+ "integrity": "sha512-BtizvGtFQKGPUcTy56o3nk1bGRp4SZOTYrDtGNlqCQufptV5IkkLN6Emw+yunAJjzf+C9FQFtvq7IoA3+oMYHQ==",
"dev": true,
"requires": {
- "slash": "^1.0.0"
+ "regenerate": "^1.4.0",
+ "regenerate-unicode-properties": "^8.0.2",
+ "regjsgen": "^0.5.0",
+ "regjsparser": "^0.6.0",
+ "unicode-match-property-ecmascript": "^1.0.4",
+ "unicode-match-property-value-ecmascript": "^1.1.0"
}
},
- "rollup-plugin-babel": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/rollup-plugin-babel/-/rollup-plugin-babel-4.3.2.tgz",
- "integrity": "sha512-KfnizE258L/4enADKX61ozfwGHoqYauvoofghFJBhFnpH9Sb9dNPpWg8QHOaAfVASUYV8w0mCx430i9z0LJoJg==",
+ "registry-auth-token": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.4.0.tgz",
+ "integrity": "sha512-4LM6Fw8eBQdwMYcES4yTnn2TqIasbXuwDx3um+QRs7S55aMKCBKBxvPXl2RiUjHwuJLTyYfxSpmfSAjQpcuP+A==",
"dev": true,
"requires": {
- "@babel/helper-module-imports": "^7.0.0",
- "rollup-pluginutils": "^2.3.0"
+ "rc": "^1.1.6",
+ "safe-buffer": "^5.0.1"
}
},
- "rollup-plugin-commonjs": {
- "version": "9.2.0",
- "resolved": "https://registry.npmjs.org/rollup-plugin-commonjs/-/rollup-plugin-commonjs-9.2.0.tgz",
- "integrity": "sha512-0RM5U4Vd6iHjL6rLvr3lKBwnPsaVml+qxOGaaNUWN1lSq6S33KhITOfHmvxV3z2vy9Mk4t0g4rNlVaJJsNQPWA==",
+ "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,
"requires": {
- "estree-walker": "^0.5.2",
- "magic-string": "^0.25.1",
- "resolve": "^1.8.1",
- "rollup-pluginutils": "^2.3.3"
- },
- "dependencies": {
- "rollup-pluginutils": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.4.1.tgz",
- "integrity": "sha512-wesMQ9/172IJDIW/lYWm0vW0LiKe5Ekjws481R7z9WTRtmO59cqyM/2uUlxvf6yzm/fElFmHUobeQOYz46dZJw==",
- "dev": true,
- "requires": {
- "estree-walker": "^0.6.0",
- "micromatch": "^3.1.10"
- },
- "dependencies": {
- "estree-walker": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.0.tgz",
- "integrity": "sha512-peq1RfVAVzr3PU/jL31RaOjUKLoZJpObQWJJ+LgfcxDUifyLZ1RjPQZTl0pzj2uJ45b7A7XpyppXvxdEqzo4rw==",
- "dev": true
- }
- }
- }
+ "rc": "^1.0.1"
}
},
- "rollup-plugin-hypothetical": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/rollup-plugin-hypothetical/-/rollup-plugin-hypothetical-2.1.0.tgz",
- "integrity": "sha512-MlxPQTkMtiRUtyhIJ7FpBvTzWtar8eFBA+V7/J6Deg9fSgIIHwL6bJKK1Wl1uWSWtOrWhOmtsMwb9F6aagP/Pg==",
+ "regjsgen": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.0.tgz",
+ "integrity": "sha512-RnIrLhrXCX5ow/E5/Mh2O4e/oa1/jW0eaBKTSy3LaCj+M3Bqvm97GWDp2yUtzIs4LEn65zR2yiYGFqb2ApnzDA==",
"dev": true
},
- "rollup-plugin-json": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/rollup-plugin-json/-/rollup-plugin-json-3.1.0.tgz",
- "integrity": "sha512-BlYk5VspvGpjz7lAwArVzBXR60JK+4EKtPkCHouAWg39obk9S61hZYJDBfMK+oitPdoe11i69TlxKlMQNFC/Uw==",
+ "regjsparser": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.0.tgz",
+ "integrity": "sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ==",
"dev": true,
"requires": {
- "rollup-pluginutils": "^2.3.1"
+ "jsesc": "~0.5.0"
},
"dependencies": {
- "rollup-pluginutils": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.4.1.tgz",
- "integrity": "sha512-wesMQ9/172IJDIW/lYWm0vW0LiKe5Ekjws481R7z9WTRtmO59cqyM/2uUlxvf6yzm/fElFmHUobeQOYz46dZJw==",
- "dev": true,
- "requires": {
- "estree-walker": "^0.6.0",
- "micromatch": "^3.1.10"
- },
- "dependencies": {
- "estree-walker": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.0.tgz",
- "integrity": "sha512-peq1RfVAVzr3PU/jL31RaOjUKLoZJpObQWJJ+LgfcxDUifyLZ1RjPQZTl0pzj2uJ45b7A7XpyppXvxdEqzo4rw==",
- "dev": true
- }
- }
+ "jsesc": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
+ "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=",
+ "dev": true
}
}
},
- "rollup-plugin-node-builtins": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/rollup-plugin-node-builtins/-/rollup-plugin-node-builtins-2.1.2.tgz",
- "integrity": "sha1-JKH+1KQyV7a2Q3HYq8bOGrFFl+k=",
+ "remove-bom-buffer": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz",
+ "integrity": "sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ==",
"dev": true,
"requires": {
- "browserify-fs": "^1.0.0",
- "buffer-es6": "^4.9.2",
- "crypto-browserify": "^3.11.0",
- "process-es6": "^0.11.2"
+ "is-buffer": "^1.1.5",
+ "is-utf8": "^0.2.1"
}
},
- "rollup-plugin-node-globals": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/rollup-plugin-node-globals/-/rollup-plugin-node-globals-1.4.0.tgz",
- "integrity": "sha512-xRkB+W/m1KLIzPUmG0ofvR+CPNcvuCuNdjVBVS7ALKSxr3EDhnzNceGkGi1m8MToSli13AzKFYH4ie9w3I5L3g==",
+ "remove-bom-stream": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz",
+ "integrity": "sha1-BfGlk/FuQuH7kOv1nejlaVJflSM=",
"dev": true,
"requires": {
- "acorn": "^5.7.3",
- "buffer-es6": "^4.9.3",
- "estree-walker": "^0.5.2",
- "magic-string": "^0.22.5",
- "process-es6": "^0.11.6",
- "rollup-pluginutils": "^2.3.1"
- },
- "dependencies": {
- "acorn": {
- "version": "5.7.3",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz",
- "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==",
- "dev": true
- },
- "magic-string": {
- "version": "0.22.5",
- "resolved": "http://registry.npmjs.org/magic-string/-/magic-string-0.22.5.tgz",
- "integrity": "sha512-oreip9rJZkzvA8Qzk9HFs8fZGF/u7H/gtrE8EN6RjKJ9kh2HlC+yQ2QezifqTZfGyiuAV0dRv5a+y/8gBb1m9w==",
- "dev": true,
- "requires": {
- "vlq": "^0.2.2"
- }
- },
- "rollup-pluginutils": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.4.1.tgz",
- "integrity": "sha512-wesMQ9/172IJDIW/lYWm0vW0LiKe5Ekjws481R7z9WTRtmO59cqyM/2uUlxvf6yzm/fElFmHUobeQOYz46dZJw==",
- "dev": true,
- "requires": {
- "estree-walker": "^0.6.0",
- "micromatch": "^3.1.10"
- },
- "dependencies": {
- "estree-walker": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.0.tgz",
- "integrity": "sha512-peq1RfVAVzr3PU/jL31RaOjUKLoZJpObQWJJ+LgfcxDUifyLZ1RjPQZTl0pzj2uJ45b7A7XpyppXvxdEqzo4rw==",
- "dev": true
- }
- }
- }
+ "remove-bom-buffer": "^3.0.0",
+ "safe-buffer": "^5.1.0",
+ "through2": "^2.0.3"
}
},
- "rollup-plugin-node-resolve": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-3.4.0.tgz",
- "integrity": "sha512-PJcd85dxfSBWih84ozRtBkB731OjXk0KnzN0oGp7WOWcarAFkVa71cV5hTJg2qpVsV2U8EUwrzHP3tvy9vS3qg==",
- "dev": true,
- "requires": {
- "builtin-modules": "^2.0.0",
- "is-module": "^1.0.0",
- "resolve": "^1.1.6"
- },
- "dependencies": {
- "builtin-modules": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-2.0.0.tgz",
- "integrity": "sha512-3U5kUA5VPsRUA3nofm/BXX7GVHKfxz0hOBAPxXrIvHzlDRkQVqEn6yi8QJegxl4LzOHLdvb7XF5dVawa/VVYBg==",
- "dev": true
- }
- }
+ "remove-trailing-separator": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
+ "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=",
+ "dev": true
},
- "rollup-plugin-replace": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/rollup-plugin-replace/-/rollup-plugin-replace-2.1.0.tgz",
- "integrity": "sha512-SxrAIgpH/B5/W4SeULgreOemxcpEgKs2gcD42zXw50bhqGWmcnlXneVInQpAqzA/cIly4bJrOpeelmB9p4YXSQ==",
+ "repeat-element": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz",
+ "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g=="
+ },
+ "repeat-string": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
+ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc="
+ },
+ "repeating": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
+ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
"dev": true,
"requires": {
- "magic-string": "^0.25.1",
- "minimatch": "^3.0.2",
- "rollup-pluginutils": "^2.0.1"
+ "is-finite": "^1.0.0"
}
},
- "rollup-pluginutils": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.4.1.tgz",
- "integrity": "sha512-wesMQ9/172IJDIW/lYWm0vW0LiKe5Ekjws481R7z9WTRtmO59cqyM/2uUlxvf6yzm/fElFmHUobeQOYz46dZJw==",
+ "replace-ext": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz",
+ "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=",
+ "dev": true
+ },
+ "replace-homedir": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/replace-homedir/-/replace-homedir-1.0.0.tgz",
+ "integrity": "sha1-6H9tUTuSjd6AgmDBK+f+xv9ueYw=",
"dev": true,
"requires": {
- "estree-walker": "^0.6.0",
- "micromatch": "^3.1.10"
- },
- "dependencies": {
- "estree-walker": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.0.tgz",
- "integrity": "sha512-peq1RfVAVzr3PU/jL31RaOjUKLoZJpObQWJJ+LgfcxDUifyLZ1RjPQZTl0pzj2uJ45b7A7XpyppXvxdEqzo4rw==",
- "dev": true
- }
+ "homedir-polyfill": "^1.0.1",
+ "is-absolute": "^1.0.0",
+ "remove-trailing-separator": "^1.1.0"
}
},
- "rollup-watch": {
- "version": "4.3.1",
- "resolved": "https://registry.npmjs.org/rollup-watch/-/rollup-watch-4.3.1.tgz",
- "integrity": "sha512-6yjnIwfjpSrqA8IafyIu7fsEyeImNR4aDjA1bQ7KWeVuiA+Clfsx8+PGQkyABWIQzmauQ//tIJ5wAxLXsXs8qQ==",
+ "replacestream": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/replacestream/-/replacestream-4.0.3.tgz",
+ "integrity": "sha512-AC0FiLS352pBBiZhd4VXB1Ab/lh0lEgpP+GGvZqbQh8a5cmXVoTe5EX/YeTFArnp4SRGTHh1qCHu9lGs1qG8sA==",
"dev": true,
"requires": {
- "chokidar": "^1.7.0",
- "require-relative": "0.8.7",
- "rollup-pluginutils": "^2.0.1"
- },
- "dependencies": {
- "anymatch": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz",
- "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==",
- "dev": true,
- "requires": {
- "micromatch": "^2.1.5",
- "normalize-path": "^2.0.0"
- }
- },
- "arr-diff": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz",
- "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=",
- "dev": true,
- "requires": {
- "arr-flatten": "^1.0.1"
- }
- },
- "array-unique": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz",
- "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=",
- "dev": true
- },
- "braces": {
- "version": "1.8.5",
- "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz",
- "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=",
- "dev": true,
- "requires": {
- "expand-range": "^1.8.1",
- "preserve": "^0.2.0",
- "repeat-element": "^1.1.2"
- }
- },
- "chokidar": {
- "version": "1.7.0",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz",
- "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=",
- "dev": true,
- "requires": {
- "anymatch": "^1.3.0",
- "async-each": "^1.0.0",
- "fsevents": "^1.0.0",
- "glob-parent": "^2.0.0",
- "inherits": "^2.0.1",
- "is-binary-path": "^1.0.0",
- "is-glob": "^2.0.0",
- "path-is-absolute": "^1.0.0",
- "readdirp": "^2.0.0"
- }
- },
- "expand-brackets": {
- "version": "0.1.5",
- "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz",
- "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=",
- "dev": true,
- "requires": {
- "is-posix-bracket": "^0.1.0"
- }
- },
- "expand-range": {
- "version": "1.8.2",
- "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz",
- "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=",
- "dev": true,
- "requires": {
- "fill-range": "^2.1.0"
- }
- },
- "extglob": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz",
- "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=",
- "dev": true,
- "requires": {
- "is-extglob": "^1.0.0"
- }
- },
- "fill-range": {
- "version": "2.2.4",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz",
- "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==",
- "dev": true,
- "requires": {
- "is-number": "^2.1.0",
- "isobject": "^2.0.0",
- "randomatic": "^3.0.0",
- "repeat-element": "^1.1.2",
- "repeat-string": "^1.5.2"
- }
- },
- "glob-parent": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz",
- "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=",
- "dev": true,
- "requires": {
- "is-glob": "^2.0.0"
- }
- },
- "is-extglob": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
- "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
- "dev": true
- },
- "is-glob": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
- "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
- "dev": true,
- "requires": {
- "is-extglob": "^1.0.0"
- }
- },
- "is-number": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz",
- "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- }
- },
- "isobject": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
- "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
- "dev": true,
- "requires": {
- "isarray": "1.0.0"
- }
- },
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- },
- "micromatch": {
- "version": "2.3.11",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz",
- "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=",
- "dev": true,
- "requires": {
- "arr-diff": "^2.0.0",
- "array-unique": "^0.2.1",
- "braces": "^1.8.2",
- "expand-brackets": "^0.1.4",
- "extglob": "^0.3.1",
- "filename-regex": "^2.0.0",
- "is-extglob": "^1.0.0",
- "is-glob": "^2.0.1",
- "kind-of": "^3.0.2",
- "normalize-path": "^2.0.1",
- "object.omit": "^2.0.0",
- "parse-glob": "^3.0.4",
- "regex-cache": "^0.4.2"
- }
- }
+ "escape-string-regexp": "^1.0.3",
+ "object-assign": "^4.0.1",
+ "readable-stream": "^2.0.2"
}
},
- "router": {
- "version": "1.3.3",
- "resolved": "https://registry.npmjs.org/router/-/router-1.3.3.tgz",
- "integrity": "sha1-wUL2tepNazNZAiypW2WAvSF/ic8=",
+ "request": {
+ "version": "2.88.0",
+ "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz",
+ "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==",
"dev": true,
"requires": {
- "array-flatten": "2.1.1",
- "debug": "2.6.9",
- "methods": "~1.1.2",
- "parseurl": "~1.3.2",
- "path-to-regexp": "0.1.7",
- "setprototypeof": "1.1.0",
- "utils-merge": "1.0.1"
+ "aws-sign2": "~0.7.0",
+ "aws4": "^1.8.0",
+ "caseless": "~0.12.0",
+ "combined-stream": "~1.0.6",
+ "extend": "~3.0.2",
+ "forever-agent": "~0.6.1",
+ "form-data": "~2.3.2",
+ "har-validator": "~5.1.0",
+ "http-signature": "~1.2.0",
+ "is-typedarray": "~1.0.0",
+ "isstream": "~0.1.2",
+ "json-stringify-safe": "~5.0.1",
+ "mime-types": "~2.1.19",
+ "oauth-sign": "~0.9.0",
+ "performance-now": "^2.1.0",
+ "qs": "~6.5.2",
+ "safe-buffer": "^5.1.2",
+ "tough-cookie": "~2.4.3",
+ "tunnel-agent": "^0.6.0",
+ "uuid": "^3.3.2"
},
"dependencies": {
- "array-flatten": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.1.tgz",
- "integrity": "sha1-Qmu52oQJDBg42BLIFQryCoMx4pY=",
+ "punycode": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
+ "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
"dev": true
},
- "debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "tough-cookie": {
+ "version": "2.4.3",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz",
+ "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==",
"dev": true,
"requires": {
- "ms": "2.0.0"
+ "psl": "^1.1.24",
+ "punycode": "^1.4.1"
}
}
}
},
+ "request-promise-core": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.2.tgz",
+ "integrity": "sha512-UHYyq1MO8GsefGEt7EprS8UrXsm1TxEvFUX1IMTuSLU2Rh7fTIdFtl8xD7JiEYiWU2dl+NYAjCTksTehQUxPag==",
+ "dev": true,
+ "requires": {
+ "lodash": "^4.17.11"
+ }
+ },
+ "request-promise-native": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.7.tgz",
+ "integrity": "sha512-rIMnbBdgNViL37nZ1b3L/VfPOpSi0TqVDQPAvO6U14lMzOLrt5nilxCQqtDKhZeDiW0/hkCXGoQjhgJd/tCh6w==",
+ "dev": true,
+ "requires": {
+ "request-promise-core": "1.1.2",
+ "stealthy-require": "^1.1.1",
+ "tough-cookie": "^2.3.3"
+ }
+ },
+ "require-directory": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I="
+ },
+ "require-main-filename": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz",
+ "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE="
+ },
+ "require-relative": {
+ "version": "0.8.7",
+ "resolved": "https://registry.npmjs.org/require-relative/-/require-relative-0.8.7.tgz",
+ "integrity": "sha1-eZlTn8ngR6N5KPoZb44VY9q9Nt4="
+ },
+ "resolve": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.0.tgz",
+ "integrity": "sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==",
+ "requires": {
+ "path-parse": "^1.0.6"
+ }
+ },
+ "resolve-cwd": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz",
+ "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=",
+ "dev": true,
+ "requires": {
+ "resolve-from": "^3.0.0"
+ }
+ },
+ "resolve-dir": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz",
+ "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=",
+ "dev": true,
+ "requires": {
+ "expand-tilde": "^2.0.0",
+ "global-modules": "^1.0.0"
+ }
+ },
+ "resolve-from": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz",
+ "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=",
+ "dev": true
+ },
+ "resolve-options": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/resolve-options/-/resolve-options-1.1.0.tgz",
+ "integrity": "sha1-MrueOcBtZzONyTeMDW1gdFZq0TE=",
+ "dev": true,
+ "requires": {
+ "value-or-function": "^3.0.0"
+ }
+ },
+ "resolve-url": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
+ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo="
+ },
+ "ret": {
+ "version": "0.1.15",
+ "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
+ "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg=="
+ },
+ "rimraf": {
+ "version": "2.6.3",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
+ "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
+ "dev": true,
+ "requires": {
+ "glob": "^7.1.3"
+ }
+ },
+ "ripemd160": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz",
+ "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==",
+ "dev": true,
+ "requires": {
+ "hash-base": "^3.0.0",
+ "inherits": "^2.0.1"
+ }
+ },
+ "rsvp": {
+ "version": "4.8.4",
+ "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.4.tgz",
+ "integrity": "sha512-6FomvYPfs+Jy9TfXmBpBuMWNH94SgCsZmJKcanySzgNNP6LjWxBvyLTa9KaMfDDM5oxRfrKDB0r/qeRsLwnBfA==",
+ "dev": true
+ },
"run-applescript": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-3.1.0.tgz",
- "integrity": "sha1-WIZe28ySuWRKMwxL+t7fXiZYjF0=",
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-3.2.0.tgz",
+ "integrity": "sha512-Ep0RsvAjnRcBX1p5vogbaBdAGu/8j/ewpvGqnQYunnLd9SM0vWcPJewPKNnWFggf0hF0pwIgwV5XK7qQ7UZ8Qg==",
"dev": true,
"requires": {
- "execa": "^0.8.0"
+ "execa": "^0.10.0"
},
"dependencies": {
+ "cross-spawn": {
+ "version": "6.0.5",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
+ "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
+ "dev": true,
+ "requires": {
+ "nice-try": "^1.0.4",
+ "path-key": "^2.0.1",
+ "semver": "^5.5.0",
+ "shebang-command": "^1.2.0",
+ "which": "^1.2.9"
+ }
+ },
"execa": {
- "version": "0.8.0",
- "resolved": "https://registry.npmjs.org/execa/-/execa-0.8.0.tgz",
- "integrity": "sha1-2NdrvBtVIX7RkP1t1J08d07PyNo=",
+ "version": "0.10.0",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-0.10.0.tgz",
+ "integrity": "sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw==",
"dev": true,
"requires": {
- "cross-spawn": "^5.0.1",
+ "cross-spawn": "^6.0.0",
"get-stream": "^3.0.0",
"is-stream": "^1.1.0",
"npm-run-path": "^2.0.0",
@@ -12350,16 +11034,25 @@
}
}
},
+ "run-queue": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz",
+ "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=",
+ "dev": true,
+ "requires": {
+ "aproba": "^1.1.1"
+ }
+ },
"safe-buffer": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
},
"safe-regex": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
"integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
- "dev": true,
"requires": {
"ret": "~0.1.10"
}
@@ -12370,6 +11063,78 @@
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
"dev": true
},
+ "sane": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz",
+ "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==",
+ "dev": true,
+ "requires": {
+ "@cnakazawa/watch": "^1.0.3",
+ "anymatch": "^2.0.0",
+ "capture-exit": "^2.0.0",
+ "exec-sh": "^0.3.2",
+ "execa": "^1.0.0",
+ "fb-watchman": "^2.0.0",
+ "micromatch": "^3.1.4",
+ "minimist": "^1.1.1",
+ "walker": "~1.0.5"
+ },
+ "dependencies": {
+ "cross-spawn": {
+ "version": "6.0.5",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
+ "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
+ "dev": true,
+ "requires": {
+ "nice-try": "^1.0.4",
+ "path-key": "^2.0.1",
+ "semver": "^5.5.0",
+ "shebang-command": "^1.2.0",
+ "which": "^1.2.9"
+ }
+ },
+ "execa": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz",
+ "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==",
+ "dev": true,
+ "requires": {
+ "cross-spawn": "^6.0.0",
+ "get-stream": "^4.0.0",
+ "is-stream": "^1.1.0",
+ "npm-run-path": "^2.0.0",
+ "p-finally": "^1.0.0",
+ "signal-exit": "^3.0.0",
+ "strip-eof": "^1.0.0"
+ }
+ },
+ "get-stream": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
+ "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
+ "dev": true,
+ "requires": {
+ "pump": "^3.0.0"
+ }
+ },
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+ "dev": true
+ },
+ "pump": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
+ "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
+ "dev": true,
+ "requires": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.1"
+ }
+ }
+ }
+ },
"sax": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz",
@@ -12377,19 +11142,29 @@
"dev": true
},
"saxes": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/saxes/-/saxes-3.1.3.tgz",
- "integrity": "sha512-Nc5DXc5A+m3rUDtkS+vHlBWKT7mCKjJPyia7f8YMW773hsXVv2wEHQZGE0zs4+5PLwz9U5Sbl/94Cnd9vHV7Bg==",
+ "version": "3.1.9",
+ "resolved": "https://registry.npmjs.org/saxes/-/saxes-3.1.9.tgz",
+ "integrity": "sha512-FZeKhJglhJHk7eWG5YM0z46VHmI3KJpMBAQm3xa9meDvd+wevB5GuBB0wc0exPInZiBBHqi00DbS8AcvCGCFMw==",
"dev": true,
"requires": {
"xmlchars": "^1.3.1"
}
},
+ "schema-utils": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
+ "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==",
+ "dev": true,
+ "requires": {
+ "ajv": "^6.1.0",
+ "ajv-errors": "^1.0.0",
+ "ajv-keywords": "^3.1.0"
+ }
+ },
"semver": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz",
- "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==",
- "dev": true
+ "version": "5.7.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz",
+ "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA=="
},
"semver-diff": {
"version": "2.1.0",
@@ -12445,14 +11220,20 @@
"ms": "2.0.0"
}
},
- "statuses": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz",
- "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==",
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
"dev": true
}
}
},
+ "serialize-javascript": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.6.1.tgz",
+ "integrity": "sha512-A5MOagrPFga4YaKQSWHryl7AXvbQkEqpw4NNYMTNYUNV51bA8ABHgYFpqKx+YFFrw59xMV1qGH1R4AgoNIVgCw==",
+ "dev": true
+ },
"serve-static": {
"version": "1.13.2",
"resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz",
@@ -12468,20 +11249,12 @@
"set-blocking": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
- "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
- "dev": true
- },
- "set-immediate-shim": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz",
- "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=",
- "dev": true
+ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc="
},
"set-value": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz",
"integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==",
- "dev": true,
"requires": {
"extend-shallow": "^2.0.1",
"is-extendable": "^0.1.1",
@@ -12493,7 +11266,6 @@
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
"integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
"requires": {
"is-extendable": "^0.1.0"
}
@@ -12522,21 +11294,10 @@
"safe-buffer": "^5.0.1"
}
},
- "shasum": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/shasum/-/shasum-1.0.2.tgz",
- "integrity": "sha1-5wEjENj0F/TetXEhUOVni4euVl8=",
- "dev": true,
- "requires": {
- "json-stable-stringify": "~0.0.0",
- "sha.js": "~2.4.4"
- }
- },
"shebang-command": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
"integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
- "dev": true,
"requires": {
"shebang-regex": "^1.0.0"
}
@@ -12544,20 +11305,7 @@
"shebang-regex": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
- "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
- "dev": true
- },
- "shell-quote": {
- "version": "1.6.1",
- "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz",
- "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=",
- "dev": true,
- "requires": {
- "array-filter": "~0.0.0",
- "array-map": "~0.0.0",
- "array-reduce": "~0.0.0",
- "jsonify": "~0.0.0"
- }
+ "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM="
},
"shelljs": {
"version": "0.8.3",
@@ -12570,61 +11318,32 @@
"rechoir": "^0.6.2"
}
},
+ "shellwords": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz",
+ "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==",
+ "dev": true
+ },
"signal-exit": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
- "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
- "dev": true
+ "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0="
},
- "simple-concat": {
+ "sisteransi": {
"version": "1.0.0",
- "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.0.tgz",
- "integrity": "sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY=",
+ "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.0.tgz",
+ "integrity": "sha512-N+z4pHB4AmUv0SjveWRd6q1Nj5w62m5jodv+GD8lvmbY/83T/rpbJGZOnK5T149OldDj4Db07BSv9xY4K6NTPQ==",
"dev": true
},
- "single-line-log": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/single-line-log/-/single-line-log-1.1.2.tgz",
- "integrity": "sha1-wvg/Jzo+GhbtsJlWYdoO1e8DM2Q=",
- "dev": true,
- "requires": {
- "string-width": "^1.0.1"
- }
- },
- "sinon": {
- "version": "7.1.1",
- "resolved": "https://registry.npmjs.org/sinon/-/sinon-7.1.1.tgz",
- "integrity": "sha512-iYagtjLVt1vN3zZY7D8oH7dkjNJEjLjyuzy8daX5+3bbQl8gaohrheB9VfH1O3L6LKuue5WTJvFluHiuZ9y3nQ==",
- "dev": true,
- "requires": {
- "@sinonjs/commons": "^1.2.0",
- "@sinonjs/formatio": "^3.0.0",
- "@sinonjs/samsam": "^2.1.2",
- "diff": "^3.5.0",
- "lodash.get": "^4.4.2",
- "lolex": "^3.0.0",
- "nise": "^1.4.6",
- "supports-color": "^5.5.0",
- "type-detect": "^4.0.8"
- }
- },
"slash": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz",
- "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=",
- "dev": true
- },
- "slide": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz",
- "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=",
- "dev": true
+ "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU="
},
"snapdragon": {
"version": "0.8.2",
"resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
"integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
- "dev": true,
"requires": {
"base": "^0.11.1",
"debug": "^2.2.0",
@@ -12640,7 +11359,6 @@
"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"
}
@@ -12649,7 +11367,6 @@
"version": "0.2.5",
"resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
"integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
- "dev": true,
"requires": {
"is-descriptor": "^0.1.0"
}
@@ -12658,10 +11375,14 @@
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
"integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
"requires": {
"is-extendable": "^0.1.0"
}
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
}
}
},
@@ -12669,7 +11390,6 @@
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
"integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
- "dev": true,
"requires": {
"define-property": "^1.0.0",
"isobject": "^3.0.0",
@@ -12680,7 +11400,6 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
"integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
- "dev": true,
"requires": {
"is-descriptor": "^1.0.0"
}
@@ -12689,7 +11408,6 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
"integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
- "dev": true,
"requires": {
"kind-of": "^6.0.0"
}
@@ -12698,7 +11416,6 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
"integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
- "dev": true,
"requires": {
"kind-of": "^6.0.0"
}
@@ -12707,7 +11424,6 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
"integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
- "dev": true,
"requires": {
"is-accessor-descriptor": "^1.0.0",
"is-data-descriptor": "^1.0.0",
@@ -12720,7 +11436,6 @@
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
"integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
- "dev": true,
"requires": {
"kind-of": "^3.2.0"
},
@@ -12729,74 +11444,12 @@
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
"requires": {
"is-buffer": "^1.1.5"
}
}
}
},
- "socket.io": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.1.1.tgz",
- "integrity": "sha512-rORqq9c+7W0DAK3cleWNSyfv/qKXV99hV4tZe+gGLfBECw3XEhBy7x85F3wypA9688LKjtwO9pX9L33/xQI8yA==",
- "dev": true,
- "requires": {
- "debug": "~3.1.0",
- "engine.io": "~3.2.0",
- "has-binary2": "~1.0.2",
- "socket.io-adapter": "~1.1.0",
- "socket.io-client": "2.1.1",
- "socket.io-parser": "~3.2.0"
- }
- },
- "socket.io-adapter": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.1.tgz",
- "integrity": "sha1-KoBeihTWNyEk3ZFZrUUC+MsH8Gs=",
- "dev": true
- },
- "socket.io-client": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.1.1.tgz",
- "integrity": "sha512-jxnFyhAuFxYfjqIgduQlhzqTcOEQSn+OHKVfAxWaNWa7ecP7xSNk2Dx/3UEsDcY7NcFafxvNvKPmmO7HTwTxGQ==",
- "dev": true,
- "requires": {
- "backo2": "1.0.2",
- "base64-arraybuffer": "0.1.5",
- "component-bind": "1.0.0",
- "component-emitter": "1.2.1",
- "debug": "~3.1.0",
- "engine.io-client": "~3.2.0",
- "has-binary2": "~1.0.2",
- "has-cors": "1.1.0",
- "indexof": "0.0.1",
- "object-component": "0.0.3",
- "parseqs": "0.0.5",
- "parseuri": "0.0.5",
- "socket.io-parser": "~3.2.0",
- "to-array": "0.1.4"
- }
- },
- "socket.io-parser": {
- "version": "3.2.0",
- "resolved": "http://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.2.0.tgz",
- "integrity": "sha512-FYiBx7rc/KORMJlgsXysflWx/RIvtqZbyGLlHZvjfmPTPeuD/I8MaW7cfFrj5tRltICJdgwflhfZ3NVVbVLFQA==",
- "dev": true,
- "requires": {
- "component-emitter": "1.2.1",
- "debug": "~3.1.0",
- "isarray": "2.0.1"
- },
- "dependencies": {
- "isarray": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz",
- "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=",
- "dev": true
- }
- }
- },
"sort-keys": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz",
@@ -12806,17 +11459,21 @@
"is-plain-obj": "^1.0.0"
}
},
+ "source-list-map": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz",
+ "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==",
+ "dev": true
+ },
"source-map": {
"version": "0.5.7",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
- "dev": true
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
},
"source-map-resolve": {
"version": "0.5.2",
"resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz",
"integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==",
- "dev": true,
"requires": {
"atob": "^2.1.1",
"decode-uri-component": "^0.2.0",
@@ -12825,17 +11482,26 @@
"urix": "^0.1.0"
}
},
+ "source-map-support": {
+ "version": "0.5.11",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.11.tgz",
+ "integrity": "sha512-//sajEx/fGL3iw6fltKMdPvy8kL3kJ2O3iuYlRoT3k9Kb4BjOoZ+BZzaNHeuaruSt+Kf3Zk9tnfAQg9/AJqUVQ==",
+ "requires": {
+ "buffer-from": "^1.0.0",
+ "source-map": "^0.6.0"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+ }
+ }
+ },
"source-map-url": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
- "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=",
- "dev": true
- },
- "sourcemap-codec": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.1.tgz",
- "integrity": "sha512-hX1eNBNuilj8yfFnECh0DzLgwKpBLMIvmhgEhixXNui8lMLBInTI8Kyxt++RwJnMNu7cAUo635L2+N1TxMJCzA==",
- "dev": true
+ "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM="
},
"spark-md5": {
"version": "3.0.0",
@@ -12849,9 +11515,9 @@
"dev": true
},
"spdx-correct": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz",
- "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==",
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz",
+ "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==",
"dev": true,
"requires": {
"spdx-expression-parse": "^3.0.0",
@@ -12859,9 +11525,9 @@
}
},
"spdx-exceptions": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz",
- "integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg==",
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz",
+ "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==",
"dev": true
},
"spdx-expression-parse": {
@@ -12875,15 +11541,9 @@
}
},
"spdx-license-ids": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz",
- "integrity": "sha512-2+EPwgbnmOIl8HjGBXXMd9NAu02vLjOO1nWw4kmeRDFyHn+M/ETfHxQUK0oXg8ctgVnl9t3rosNVsZ1jG61nDA==",
- "dev": true
- },
- "speedometer": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/speedometer/-/speedometer-0.1.4.tgz",
- "integrity": "sha1-mHbb0qFp0xFUAtSObqYynIgWpQ0=",
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.3.tgz",
+ "integrity": "sha512-uBIcIl3Ih6Phe3XHK1NqboJLdGfwr1UN3k6wSD1dZpmPsIkb8AGNbZYJ1fOBk834+Gxy8rpfDxrS6XLEMZMY2g==",
"dev": true
},
"split": {
@@ -12899,7 +11559,6 @@
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
"integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
- "dev": true,
"requires": {
"extend-shallow": "^3.0.0"
}
@@ -12916,13 +11575,12 @@
"sprintf-js": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
- "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
- "dev": true
+ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw="
},
"sshpk": {
- "version": "1.14.2",
- "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.2.tgz",
- "integrity": "sha1-xvxhZIo9nE52T9P8306hBeSSupg=",
+ "version": "1.16.1",
+ "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz",
+ "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==",
"dev": true,
"requires": {
"asn1": "~0.2.3",
@@ -12936,52 +11594,280 @@
"tweetnacl": "~0.14.0"
}
},
+ "ssri": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz",
+ "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==",
+ "dev": true,
+ "requires": {
+ "figgy-pudding": "^3.5.1"
+ }
+ },
"stack-trace": {
"version": "0.0.10",
"resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz",
"integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=",
"dev": true
},
+ "stack-utils": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.2.tgz",
+ "integrity": "sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA==",
+ "dev": true
+ },
"standard-version": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/standard-version/-/standard-version-4.4.0.tgz",
- "integrity": "sha512-jJ8FZhnmh9xJRQLnaXiGRLaAUNItIH29lOQZGpL5fd4+jUHto9Ij6SPCYN86h6ZNNXkYq2TYiIVVF7gVyC+pcQ==",
- "dev": true,
- "requires": {
- "chalk": "^1.1.3",
- "conventional-changelog": "^1.1.0",
- "conventional-recommended-bump": "^1.0.0",
- "dotgitignore": "^1.0.3",
- "figures": "^1.5.0",
- "fs-access": "^1.0.0",
- "semver": "^5.1.0",
- "yargs": "^8.0.1"
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/standard-version/-/standard-version-6.0.1.tgz",
+ "integrity": "sha512-+09AwTbyLKyUwefiZSccgarp24okvH9A229NOVSpYTKWcxBxqZqdYmtQaJ8UET9mjPXRxP84vonJU4YMqCyBTQ==",
+ "dev": true,
+ "requires": {
+ "chalk": "2.4.2",
+ "conventional-changelog": "3.1.8",
+ "conventional-changelog-config-spec": "1.0.0",
+ "conventional-recommended-bump": "5.0.0",
+ "detect-indent": "6.0.0",
+ "detect-newline": "3.0.0",
+ "dotgitignore": "2.1.0",
+ "figures": "3.0.0",
+ "find-up": "3.0.0",
+ "fs-access": "1.0.1",
+ "git-semver-tags": "2.0.2",
+ "semver": "6.0.0",
+ "stringify-package": "1.0.0",
+ "yargs": "13.2.2"
},
"dependencies": {
- "ansi-styles": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
- "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "ansi-regex": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
+ "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
"dev": true
},
- "chalk": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
- "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "camelcase": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
+ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
+ "dev": true
+ },
+ "cross-spawn": {
+ "version": "6.0.5",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
+ "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
"dev": true,
"requires": {
- "ansi-styles": "^2.2.1",
- "escape-string-regexp": "^1.0.2",
- "has-ansi": "^2.0.0",
- "strip-ansi": "^3.0.0",
- "supports-color": "^2.0.0"
+ "nice-try": "^1.0.4",
+ "path-key": "^2.0.1",
+ "semver": "^5.5.0",
+ "shebang-command": "^1.2.0",
+ "which": "^1.2.9"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "5.7.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz",
+ "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==",
+ "dev": true
+ }
}
},
- "supports-color": {
+ "detect-newline": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.0.0.tgz",
+ "integrity": "sha512-JAP22dVPAqvhdRFFxK1G5GViIokyUn0UWXRNW0ztK96fsqi9cuM8w8ESbSk+T2w5OVorcMcL6m7yUg1RrX+2CA==",
+ "dev": true
+ },
+ "execa": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz",
+ "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==",
+ "dev": true,
+ "requires": {
+ "cross-spawn": "^6.0.0",
+ "get-stream": "^4.0.0",
+ "is-stream": "^1.1.0",
+ "npm-run-path": "^2.0.0",
+ "p-finally": "^1.0.0",
+ "signal-exit": "^3.0.0",
+ "strip-eof": "^1.0.0"
+ }
+ },
+ "find-up": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
+ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
+ "dev": true,
+ "requires": {
+ "locate-path": "^3.0.0"
+ }
+ },
+ "get-caller-file": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
+ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
+ "dev": true
+ },
+ "get-stream": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
+ "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
+ "dev": true,
+ "requires": {
+ "pump": "^3.0.0"
+ }
+ },
+ "invert-kv": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz",
+ "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==",
+ "dev": true
+ },
+ "lcid": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz",
+ "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==",
+ "dev": true,
+ "requires": {
+ "invert-kv": "^2.0.0"
+ }
+ },
+ "locate-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
+ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
+ "dev": true,
+ "requires": {
+ "p-locate": "^3.0.0",
+ "path-exists": "^3.0.0"
+ }
+ },
+ "mem": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz",
+ "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==",
+ "dev": true,
+ "requires": {
+ "map-age-cleaner": "^0.1.1",
+ "mimic-fn": "^2.0.0",
+ "p-is-promise": "^2.0.0"
+ }
+ },
+ "mimic-fn": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
+ "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
+ "dev": true
+ },
+ "os-locale": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz",
+ "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==",
+ "dev": true,
+ "requires": {
+ "execa": "^1.0.0",
+ "lcid": "^2.0.0",
+ "mem": "^4.0.0"
+ }
+ },
+ "p-limit": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz",
+ "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==",
+ "dev": true,
+ "requires": {
+ "p-try": "^2.0.0"
+ }
+ },
+ "p-locate": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
+ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
+ "dev": true,
+ "requires": {
+ "p-limit": "^2.0.0"
+ }
+ },
+ "p-try": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
+ "dev": true
+ },
+ "pump": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
+ "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
+ "dev": true,
+ "requires": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.1"
+ }
+ },
+ "require-main-filename": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
- "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
+ "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==",
+ "dev": true
+ },
+ "semver": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.0.0.tgz",
+ "integrity": "sha512-0UewU+9rFapKFnlbirLi3byoOuhrSsli/z/ihNnvM24vgF+8sNBiI1LZPBSH9wJKUwaUbw+s3hToDLCXkrghrQ==",
+ "dev": true
+ },
+ "string-width": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
+ "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
+ "dev": true,
+ "requires": {
+ "emoji-regex": "^7.0.1",
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^5.1.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
+ "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^4.1.0"
+ }
+ },
+ "y18n": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz",
+ "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==",
"dev": true
+ },
+ "yargs": {
+ "version": "13.2.2",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.2.2.tgz",
+ "integrity": "sha512-WyEoxgyTD3w5XRpAQNYUB9ycVH/PQrToaTXdYXRdOXvEy1l19br+VJsc0vcO8PTGg5ro/l/GY7F/JMEBmI0BxA==",
+ "dev": true,
+ "requires": {
+ "cliui": "^4.0.0",
+ "find-up": "^3.0.0",
+ "get-caller-file": "^2.0.1",
+ "os-locale": "^3.1.0",
+ "require-directory": "^2.1.1",
+ "require-main-filename": "^2.0.0",
+ "set-blocking": "^2.0.0",
+ "string-width": "^3.0.0",
+ "which-module": "^2.0.0",
+ "y18n": "^4.0.0",
+ "yargs-parser": "^13.0.0"
+ }
+ },
+ "yargs-parser": {
+ "version": "13.1.0",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.0.tgz",
+ "integrity": "sha512-Yq+32PrijHRri0vVKQEm+ys8mbqWjLiwQkMFNXEENutzLPP0bE4Lcd4iA3OQY5HF+GD3xXxf0MEHb8E4/SA3AA==",
+ "dev": true,
+ "requires": {
+ "camelcase": "^5.0.0",
+ "decamelize": "^1.2.0"
+ }
}
}
},
@@ -12989,7 +11875,6 @@
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
"integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
- "dev": true,
"requires": {
"define-property": "^0.2.5",
"object-copy": "^0.1.0"
@@ -12999,7 +11884,6 @@
"version": "0.2.5",
"resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
"integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
- "dev": true,
"requires": {
"is-descriptor": "^0.1.0"
}
@@ -13007,9 +11891,9 @@
}
},
"statuses": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz",
- "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=",
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz",
+ "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==",
"dev": true
},
"stealthy-require": {
@@ -13019,23 +11903,23 @@
"dev": true
},
"stream-browserify": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz",
- "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=",
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz",
+ "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==",
"dev": true,
"requires": {
"inherits": "~2.0.1",
"readable-stream": "^2.0.2"
}
},
- "stream-combiner2": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz",
- "integrity": "sha1-+02KFCDqNidk4hrUeAOXvry0HL4=",
+ "stream-each": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz",
+ "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==",
"dev": true,
"requires": {
- "duplexer2": "~0.1.0",
- "readable-stream": "^2.0.2"
+ "end-of-stream": "^1.1.0",
+ "stream-shift": "^1.0.0"
}
},
"stream-exhaust": {
@@ -13063,16 +11947,6 @@
"integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=",
"dev": true
},
- "stream-splicer": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/stream-splicer/-/stream-splicer-2.0.0.tgz",
- "integrity": "sha1-G2O+Q4oTPktnHMGTUZdgAXWRDYM=",
- "dev": true,
- "requires": {
- "inherits": "^2.0.1",
- "readable-stream": "^2.0.2"
- }
- },
"stream-to-array": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/stream-to-array/-/stream-to-array-2.3.0.tgz",
@@ -13082,86 +11956,99 @@
"any-promise": "^1.1.0"
}
},
- "streamroller": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-0.7.0.tgz",
- "integrity": "sha512-WREzfy0r0zUqp3lGO096wRuUp7ho1X6uo/7DJfTlEi0Iv/4gT7YHqXDjKC2ioVGBZtE8QzsQD9nx1nIuoZ57jQ==",
- "dev": true,
- "requires": {
- "date-format": "^1.2.0",
- "debug": "^3.1.0",
- "mkdirp": "^0.5.1",
- "readable-stream": "^2.3.0"
- }
- },
"strict-uri-encode": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz",
"integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=",
"dev": true
},
- "string-range": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/string-range/-/string-range-1.2.2.tgz",
- "integrity": "sha1-qJPtNH5yKZvIO++78qaSqNI51d0=",
- "dev": true
- },
- "string-width": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
- "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+ "string-length": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/string-length/-/string-length-2.0.0.tgz",
+ "integrity": "sha1-1A27aGo6zpYMHP/KVivyxF+DY+0=",
"dev": true,
"requires": {
- "code-point-at": "^1.0.0",
- "is-fullwidth-code-point": "^1.0.0",
- "strip-ansi": "^3.0.0"
+ "astral-regex": "^1.0.0",
+ "strip-ansi": "^4.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^3.0.0"
+ }
+ }
}
},
- "string.prototype.padend": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.0.0.tgz",
- "integrity": "sha1-86rvfBcZ8XDF6rHDK/eA2W4h8vA=",
- "dev": true,
+ "string-width": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
"requires": {
- "define-properties": "^1.1.2",
- "es-abstract": "^1.4.3",
- "function-bind": "^1.0.2"
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^4.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg="
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "requires": {
+ "ansi-regex": "^3.0.0"
+ }
+ }
}
},
"string_decoder": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.2.0.tgz",
+ "integrity": "sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w==",
+ "dev": true,
"requires": {
"safe-buffer": "~5.1.0"
}
},
+ "stringify-package": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/stringify-package/-/stringify-package-1.0.0.tgz",
+ "integrity": "sha512-JIQqiWmLiEozOC0b0BtxZ/AOUtdUZHCBPgqIZ2kSJJqGwgb9neo44XdTHUC4HZSGqi03hOeB7W/E8rAlKnGe9g==",
+ "dev": true
+ },
"strip-ansi": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
"integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
- "dev": true,
"requires": {
"ansi-regex": "^2.0.0"
}
},
"strip-bom": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
- "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
- "dev": true
- },
- "strip-bom-string": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz",
- "integrity": "sha1-5SEekiQ2n7uB1jOi8ABE3IztrZI=",
- "dev": true
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
+ "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
+ "dev": true,
+ "requires": {
+ "is-utf8": "^0.2.0"
+ }
},
"strip-eof": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
- "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=",
- "dev": true
+ "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8="
},
"strip-indent": {
"version": "1.0.1",
@@ -13170,6 +12057,14 @@
"dev": true,
"requires": {
"get-stdin": "^4.0.1"
+ },
+ "dependencies": {
+ "get-stdin": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz",
+ "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=",
+ "dev": true
+ }
}
},
"strip-json-comments": {
@@ -13193,64 +12088,10 @@
"integrity": "sha1-IrD6OkE4WzO+PzMVUbu4N/oM164=",
"dev": true
},
- "subarg": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/subarg/-/subarg-1.0.0.tgz",
- "integrity": "sha1-9izxdYHplrSPyWVpn1TAauJouNI=",
- "dev": true,
- "requires": {
- "minimist": "^1.1.0"
- }
- },
- "sumchecker": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-2.0.2.tgz",
- "integrity": "sha1-D0LBDl0F2l1C7qPlbDOZo31sWz4=",
- "dev": true,
- "requires": {
- "debug": "^2.2.0"
- },
- "dependencies": {
- "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"
- }
- }
- }
- },
- "superagent": {
- "version": "3.8.3",
- "resolved": "https://registry.npmjs.org/superagent/-/superagent-3.8.3.tgz",
- "integrity": "sha512-GLQtLMCoEIK4eDv6OGtkOoSMt3D+oq0y3dsxMuYuDvaNUvuT8eFBuLmfR0iYYzHC1e8hpzC6ZsxbuP6DIalMFA==",
- "requires": {
- "component-emitter": "^1.2.0",
- "cookiejar": "^2.1.0",
- "debug": "^3.1.0",
- "extend": "^3.0.0",
- "form-data": "^2.3.1",
- "formidable": "^1.2.0",
- "methods": "^1.1.1",
- "mime": "^1.4.1",
- "qs": "^6.5.1",
- "readable-stream": "^2.3.5"
- },
- "dependencies": {
- "mime": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
- "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="
- }
- }
- },
"supports-color": {
"version": "5.5.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
"integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "dev": true,
"requires": {
"has-flag": "^3.0.0"
}
@@ -13271,72 +12112,223 @@
"integrity": "sha1-rifbOPZgp64uHDt9G8KQgZuFGeY=",
"dev": true
},
- "syntax-error": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/syntax-error/-/syntax-error-1.4.0.tgz",
- "integrity": "sha512-YPPlu67mdnHGTup2A8ff7BC2Pjq0e0Yp/IyTFN03zWO0RcK07uLcbi7C2KpGR2FvWbaB0+bfE27a+sBKebSo7w==",
+ "tapable": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.1.tgz",
+ "integrity": "sha512-9I2ydhj8Z9veORCw5PRm4u9uebCn0mcCa6scWoNcbZ6dAtoo2618u9UUzxgmsCOreJpqDDuv61LvwofW7hLcBA==",
+ "dev": true
+ },
+ "teeny-request": {
+ "version": "3.11.3",
+ "resolved": "https://registry.npmjs.org/teeny-request/-/teeny-request-3.11.3.tgz",
+ "integrity": "sha512-CKncqSF7sH6p4rzCgkb/z/Pcos5efl0DmolzvlqRQUNcpRIruOhY9+T1FsIlyEbfWd7MsFpodROOwHYh2BaXzw==",
"dev": true,
"requires": {
- "acorn-node": "^1.2.0"
+ "https-proxy-agent": "^2.2.1",
+ "node-fetch": "^2.2.0",
+ "uuid": "^3.3.2"
}
},
- "tcomb": {
- "version": "3.2.27",
- "resolved": "https://registry.npmjs.org/tcomb/-/tcomb-3.2.27.tgz",
- "integrity": "sha512-XWdJW7F/M3YzXhDEUP8ycmNWoYymBtsHwCHoda0YF44RthJsls95TqDrmpAlC1sB/KXaCvkdBlcNRq+AaV6klA=="
+ "temp-dir": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz",
+ "integrity": "sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0=",
+ "dev": true
},
- "tcomb-validation": {
- "version": "3.4.1",
- "resolved": "https://registry.npmjs.org/tcomb-validation/-/tcomb-validation-3.4.1.tgz",
- "integrity": "sha512-urVVMQOma4RXwiVCa2nM2eqrAomHROHvWPuj6UkDGz/eb5kcy0x6P0dVt6kzpUZtYMNoAqJLWmz1BPtxrtjtrA==",
+ "temp-write": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/temp-write/-/temp-write-3.4.0.tgz",
+ "integrity": "sha1-jP9jD7fp2gXwR8dM5M5NaFRX1JI=",
+ "dev": true,
"requires": {
- "tcomb": "^3.0.0"
+ "graceful-fs": "^4.1.2",
+ "is-stream": "^1.1.0",
+ "make-dir": "^1.0.0",
+ "pify": "^3.0.0",
+ "temp-dir": "^1.0.0",
+ "uuid": "^3.0.1"
}
},
- "temp-write": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/temp-write/-/temp-write-2.1.0.tgz",
- "integrity": "sha1-WYkJGODvCdVIqqNC9L00CdhATpY=",
+ "term-size": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz",
+ "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=",
"dev": true,
"requires": {
- "graceful-fs": "^4.1.2",
- "mkdirp": "^0.5.0",
- "os-tmpdir": "^1.0.0",
- "pify": "^2.2.0",
- "pinkie-promise": "^2.0.0",
- "uuid": "^2.0.1"
+ "execa": "^0.7.0"
+ }
+ },
+ "terser": {
+ "version": "3.17.0",
+ "resolved": "https://registry.npmjs.org/terser/-/terser-3.17.0.tgz",
+ "integrity": "sha512-/FQzzPJmCpjAH9Xvk2paiWrFq+5M6aVOf+2KRbwhByISDX/EujxsK+BAvrhb6H+2rtrLCHK9N01wO014vrIwVQ==",
+ "dev": true,
+ "requires": {
+ "commander": "^2.19.0",
+ "source-map": "~0.6.1",
+ "source-map-support": "~0.5.10"
},
"dependencies": {
- "pify": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
- "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ }
+ }
+ },
+ "terser-webpack-plugin": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.2.3.tgz",
+ "integrity": "sha512-GOK7q85oAb/5kE12fMuLdn2btOS9OBZn4VsecpHDywoUC/jLhSAKOiYo0ezx7ss2EXPMzyEWFoE0s1WLE+4+oA==",
+ "dev": true,
+ "requires": {
+ "cacache": "^11.0.2",
+ "find-cache-dir": "^2.0.0",
+ "schema-utils": "^1.0.0",
+ "serialize-javascript": "^1.4.0",
+ "source-map": "^0.6.1",
+ "terser": "^3.16.1",
+ "webpack-sources": "^1.1.0",
+ "worker-farm": "^1.5.2"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ }
+ }
+ },
+ "test-exclude": {
+ "version": "5.2.3",
+ "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-5.2.3.tgz",
+ "integrity": "sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g==",
+ "dev": true,
+ "requires": {
+ "glob": "^7.1.3",
+ "minimatch": "^3.0.4",
+ "read-pkg-up": "^4.0.0",
+ "require-main-filename": "^2.0.0"
+ },
+ "dependencies": {
+ "find-up": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
+ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
+ "dev": true,
+ "requires": {
+ "locate-path": "^3.0.0"
+ }
+ },
+ "load-json-file": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz",
+ "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "parse-json": "^4.0.0",
+ "pify": "^3.0.0",
+ "strip-bom": "^3.0.0"
+ }
+ },
+ "locate-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
+ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
+ "dev": true,
+ "requires": {
+ "p-locate": "^3.0.0",
+ "path-exists": "^3.0.0"
+ }
+ },
+ "p-limit": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz",
+ "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==",
+ "dev": true,
+ "requires": {
+ "p-try": "^2.0.0"
+ }
+ },
+ "p-locate": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
+ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
+ "dev": true,
+ "requires": {
+ "p-limit": "^2.0.0"
+ }
+ },
+ "p-try": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
"dev": true
},
- "uuid": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz",
- "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=",
+ "parse-json": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
+ "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
+ "dev": true,
+ "requires": {
+ "error-ex": "^1.3.1",
+ "json-parse-better-errors": "^1.0.1"
+ }
+ },
+ "read-pkg": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz",
+ "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=",
+ "dev": true,
+ "requires": {
+ "load-json-file": "^4.0.0",
+ "normalize-package-data": "^2.3.2",
+ "path-type": "^3.0.0"
+ }
+ },
+ "read-pkg-up": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-4.0.0.tgz",
+ "integrity": "sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA==",
+ "dev": true,
+ "requires": {
+ "find-up": "^3.0.0",
+ "read-pkg": "^3.0.0"
+ }
+ },
+ "require-main-filename": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
+ "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==",
+ "dev": true
+ },
+ "strip-bom": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
+ "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
"dev": true
}
}
},
"text-extensions": {
- "version": "1.7.0",
- "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.7.0.tgz",
- "integrity": "sha512-AKXZeDq230UaSzaO5s3qQUZOaC7iKbzq0jOFL614R7d9R593HLqAOL0cYoqLdkNrjBSOdmoQI06yigq1TSBXAg==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz",
+ "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==",
"dev": true
},
"textextensions": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/textextensions/-/textextensions-2.2.0.tgz",
- "integrity": "sha512-j5EMxnryTvKxwH2Cq+Pb43tsf6sdEgw6Pdwxk83mPaq0ToeFJt6WE4J3s5BqY7vmjlLgkgXvhtXUxo80FyBhCA==",
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/textextensions/-/textextensions-2.4.0.tgz",
+ "integrity": "sha512-qftQXnX1DzpSV8EddtHIT0eDDEiBF8ywhFYR2lI9xrGtxqKN+CvLXhACeCIGbCpQfxxERbrkZEFb8cZcDKbVZA==",
"dev": true
},
- "throttleit": {
- "version": "0.0.2",
- "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-0.0.2.tgz",
- "integrity": "sha1-z+34jmDADdlpe2H90qg0OptoDq8=",
+ "throat": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/throat/-/throat-4.1.0.tgz",
+ "integrity": "sha1-iQN8vJLFarGJJua6TLsgDhVnKmo=",
"dev": true
},
"through": {
@@ -13346,19 +12338,19 @@
"dev": true
},
"through2": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
- "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
+ "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==",
"dev": true,
"requires": {
- "readable-stream": "^2.1.5",
+ "readable-stream": "~2.3.6",
"xtend": "~4.0.1"
}
},
"through2-filter": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-2.0.0.tgz",
- "integrity": "sha1-YLxVoNrLdghdsfna6Zq0P4PWIuw=",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-3.0.0.tgz",
+ "integrity": "sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA==",
"dev": true,
"requires": {
"through2": "~2.0.0",
@@ -13371,45 +12363,26 @@
"integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=",
"dev": true
},
- "time-zone": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/time-zone/-/time-zone-1.0.0.tgz",
- "integrity": "sha1-mcW/VZWJZq9tBtg73zgA3IL67F0=",
- "dev": true
- },
"timed-out": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-3.1.3.tgz",
- "integrity": "sha1-lYYL/MXHbCd/j4Mm/Q9bLiDrohc=",
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz",
+ "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=",
"dev": true
},
"timers-browserify": {
- "version": "1.4.2",
- "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-1.4.2.tgz",
- "integrity": "sha1-ycWLV1voQHN1y14kYtrO50NZ9B0=",
+ "version": "2.0.10",
+ "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.10.tgz",
+ "integrity": "sha512-YvC1SV1XdOUaL6gx5CoGroT3Gu49pK9+TZ38ErPldOWW4j49GI1HKs9DV+KGq/w6y+LZ72W1c8cKz2vzY+qpzg==",
"dev": true,
"requires": {
- "process": "~0.11.0"
+ "setimmediate": "^1.0.4"
}
},
- "timers-ext": {
- "version": "0.1.5",
- "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.5.tgz",
- "integrity": "sha512-tsEStd7kmACHENhsUPaxb8Jf8/+GZZxyNFQbZD07HQOyooOa6At1rQqjffgvg7n+dxscQa9cjjMdWhJtsP2sxg==",
- "dev": true,
- "requires": {
- "es5-ext": "~0.10.14",
- "next-tick": "1"
- }
- },
- "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"
- }
+ "tmpl": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz",
+ "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=",
+ "dev": true
},
"to-absolute-glob": {
"version": "2.0.2",
@@ -13421,12 +12394,6 @@
"is-negated-glob": "^1.0.0"
}
},
- "to-array": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz",
- "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=",
- "dev": true
- },
"to-arraybuffer": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz",
@@ -13443,7 +12410,6 @@
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
"integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
- "dev": true,
"requires": {
"kind-of": "^3.0.2"
},
@@ -13452,7 +12418,6 @@
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
"requires": {
"is-buffer": "^1.1.5"
}
@@ -13463,7 +12428,6 @@
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
"integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
- "dev": true,
"requires": {
"define-property": "^2.0.2",
"extend-shallow": "^3.0.2",
@@ -13475,7 +12439,6 @@
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
"integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
- "dev": true,
"requires": {
"is-number": "^3.0.0",
"repeat-string": "^1.6.1"
@@ -13491,40 +12454,19 @@
}
},
"tough-cookie": {
- "version": "2.3.4",
- "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz",
- "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==",
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
+ "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
"dev": true,
"requires": {
- "punycode": "^1.4.1"
+ "psl": "^1.1.28",
+ "punycode": "^2.1.1"
},
"dependencies": {
"punycode": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
- "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
- "dev": true
- }
- }
- },
- "toxy": {
- "version": "0.3.16",
- "resolved": "https://registry.npmjs.org/toxy/-/toxy-0.3.16.tgz",
- "integrity": "sha512-UPM6+AJp+BocVb8CHVnW9wtjCFWmn2PSq05OTKv379F2gfczLP/uMw0gjBh6t+Uo4YEbuETOwgP2wDENVo2BAg==",
- "dev": true,
- "requires": {
- "indexport": "^0.1.1",
- "midware": "^0.1.3",
- "object-assign": "^3.0.0",
- "raw-body": "^2.1.2",
- "rocky": "^0.4.15",
- "router": "^1.3.1"
- },
- "dependencies": {
- "object-assign": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz",
- "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=",
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
+ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
"dev": true
}
}
@@ -13547,19 +12489,20 @@
}
},
"trash": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/trash/-/trash-4.3.0.tgz",
- "integrity": "sha512-f36TKwIaBiXm63xSrn8OTNghg5CYHBsFVJvcObMo76LRpgariuRi2CqXQHw1VzfeximD0igdGaonOG6N760BtQ==",
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/trash/-/trash-5.2.0.tgz",
+ "integrity": "sha512-QpczfQrHKoe4O/iWskzRUwybweYK0okbuO8YvUGL2L1XP5/O9x3juUBr5HBY4yvU77wISKG9VtMD/fWjJLM1Lg==",
"dev": true,
"requires": {
"escape-string-applescript": "^2.0.0",
- "fs-extra": "^0.30.0",
"globby": "^7.1.1",
- "p-map": "^1.2.0",
- "p-try": "^1.0.0",
- "pify": "^3.0.0",
- "run-applescript": "^3.0.0",
- "uuid": "^3.1.0",
+ "is-path-inside": "^2.0.0",
+ "make-dir": "^1.3.0",
+ "move-file": "^1.1.0",
+ "p-map": "^2.0.0",
+ "p-try": "^2.2.0",
+ "run-applescript": "^3.2.0",
+ "uuid": "^3.3.2",
"xdg-trashdir": "^2.1.1"
},
"dependencies": {
@@ -13576,26 +12519,35 @@
"pify": "^3.0.0",
"slash": "^1.0.0"
}
+ },
+ "is-path-inside": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz",
+ "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==",
+ "dev": true,
+ "requires": {
+ "path-is-inside": "^1.0.2"
+ }
+ },
+ "p-try": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
+ "dev": true
}
}
},
"trash-cli": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/trash-cli/-/trash-cli-1.4.0.tgz",
- "integrity": "sha1-MojYkMgkpcyXimxEip8ymwa+Bp0=",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/trash-cli/-/trash-cli-2.0.0.tgz",
+ "integrity": "sha512-DVhOIZ35PnD4vWTSKzwSiUyPj63UnnXwwf8eUXp8pRX2U4ka4TeksnwOkxklE9juj6H0HiyTJCXs2paeY5oNsA==",
"dev": true,
"requires": {
"meow": "^3.7.0",
- "trash": "^4.0.0",
- "update-notifier": "^1.0.2"
+ "trash": "^5.2.0",
+ "update-notifier": "^2.5.0"
}
},
- "traverse": {
- "version": "0.3.9",
- "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz",
- "integrity": "sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk=",
- "dev": true
- },
"trim-newlines": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz",
@@ -13623,48 +12575,104 @@
"integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=",
"dev": true
},
+ "tryer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz",
+ "integrity": "sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==",
+ "dev": true
+ },
+ "ts-jest": {
+ "version": "24.0.2",
+ "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-24.0.2.tgz",
+ "integrity": "sha512-h6ZCZiA1EQgjczxq+uGLXQlNgeg02WWJBbeT8j6nyIBRQdglqbvzDoHahTEIiS6Eor6x8mK6PfZ7brQ9Q6tzHw==",
+ "dev": true,
+ "requires": {
+ "bs-logger": "0.x",
+ "buffer-from": "1.x",
+ "fast-json-stable-stringify": "2.x",
+ "json5": "2.x",
+ "make-error": "1.x",
+ "mkdirp": "0.x",
+ "resolve": "1.x",
+ "semver": "^5.5",
+ "yargs-parser": "10.x"
+ },
+ "dependencies": {
+ "yargs-parser": {
+ "version": "10.1.0",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.1.0.tgz",
+ "integrity": "sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==",
+ "dev": true,
+ "requires": {
+ "camelcase": "^4.1.0"
+ }
+ }
+ }
+ },
+ "ts-node": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.1.0.tgz",
+ "integrity": "sha512-34jpuOrxDuf+O6iW1JpgTRDFynUZ1iEqtYruBqh35gICNjN8x+LpVcPAcwzLPi9VU6mdA3ym+x233nZmZp445A==",
+ "requires": {
+ "arg": "^4.1.0",
+ "diff": "^3.1.0",
+ "make-error": "^1.1.1",
+ "source-map-support": "^0.5.6",
+ "yn": "^3.0.0"
+ }
+ },
"tslib": {
"version": "1.9.3",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz",
"integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ=="
},
"tslint": {
- "version": "5.12.1",
- "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.12.1.tgz",
- "integrity": "sha512-sfodBHOucFg6egff8d1BvuofoOQ/nOeYNfbp7LDlKBcLNrL3lmS5zoiDGyOMdT7YsEXAwWpTdAHwOGOc8eRZAw==",
- "dev": true,
+ "version": "5.16.0",
+ "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.16.0.tgz",
+ "integrity": "sha512-UxG2yNxJ5pgGwmMzPMYh/CCnCnh0HfPgtlVRDs1ykZklufFBL1ZoTlWFRz2NQjcoEiDoRp+JyT0lhBbbH/obyA==",
"requires": {
- "babel-code-frame": "^6.22.0",
+ "@babel/code-frame": "^7.0.0",
"builtin-modules": "^1.1.1",
"chalk": "^2.3.0",
"commander": "^2.12.1",
"diff": "^3.2.0",
"glob": "^7.1.1",
- "js-yaml": "^3.7.0",
+ "js-yaml": "^3.13.0",
"minimatch": "^3.0.4",
+ "mkdirp": "^0.5.1",
"resolve": "^1.3.2",
"semver": "^5.3.0",
"tslib": "^1.8.0",
- "tsutils": "^2.27.2"
+ "tsutils": "^2.29.0"
}
},
"tslint-config-semistandard": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/tslint-config-semistandard/-/tslint-config-semistandard-7.0.0.tgz",
- "integrity": "sha512-SMZmVMbHYn6sykthhoNSK39Oxt7b3LdkuXycAxsagp+W7rCBWYowbpwYOJQmeT2a8Vjh6Tz2ifHyraWKB5uArw==",
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/tslint-config-semistandard/-/tslint-config-semistandard-8.0.0.tgz",
+ "integrity": "sha512-cyxZRD4BKfHYh3ukzKkgrvVxxG3AdDdb51sxMLMtF4eFlc+ReWHHAA3/jlb90CYq/7Y0bvf7vOB7pvyV+ctFKw==",
"dev": true,
"requires": {
- "tslint-config-standard": "^7.0.0",
- "tslint-eslint-rules": "^4.1.1"
+ "tslint-config-standard": "^8.0.0"
}
},
"tslint-config-standard": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/tslint-config-standard/-/tslint-config-standard-7.1.0.tgz",
- "integrity": "sha512-cETzxZcEQ1RKjwtEScGryAtqwiRFc55xBxhZP6bePyOfXmo6i1/QKQrTgFKBiM4FjCvcqTjJq20/KGrh+TzTfQ==",
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/tslint-config-standard/-/tslint-config-standard-8.0.1.tgz",
+ "integrity": "sha512-OWG+NblgjQlVuUS/Dmq3ax2v5QDZwRx4L0kEuDi7qFY9UI6RJhhNfoCV1qI4el8Fw1c5a5BTrjQJP0/jhGXY/Q==",
"dev": true,
"requires": {
"tslint-eslint-rules": "^5.3.1"
+ }
+ },
+ "tslint-eslint-rules": {
+ "version": "5.4.0",
+ "resolved": "https://registry.npmjs.org/tslint-eslint-rules/-/tslint-eslint-rules-5.4.0.tgz",
+ "integrity": "sha512-WlSXE+J2vY/VPgIcqQuijMQiel+UtmXS+4nvK4ZzlDiqBfXse8FAvkNnTcYhnQyOTW5KFM+uRRGXxYhFpuBc6w==",
+ "dev": true,
+ "requires": {
+ "doctrine": "0.7.2",
+ "tslib": "1.9.0",
+ "tsutils": "^3.0.0"
},
"dependencies": {
"tslib": {
@@ -13673,60 +12681,29 @@
"integrity": "sha512-f/qGG2tUkrISBlQZEjEqoZ3B2+npJjIf04H1wuAv9iA8i04Icp+61KRXxFdha22670NJopsZCIjhC3SnjPRKrQ==",
"dev": true
},
- "tslint-eslint-rules": {
- "version": "5.3.1",
- "resolved": "https://registry.npmjs.org/tslint-eslint-rules/-/tslint-eslint-rules-5.3.1.tgz",
- "integrity": "sha512-qq2H/AU/FlFbQJKXuxhtIk+ni/nQu9jHHhsFKa6hnA0/n3zl1/RWRc3TVFlL8HfWFMzkST350VeTrFpy1u4OUg==",
- "dev": true,
- "requires": {
- "doctrine": "0.7.2",
- "tslib": "1.9.0",
- "tsutils": "2.8.0"
- }
- },
"tsutils": {
- "version": "2.8.0",
- "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.8.0.tgz",
- "integrity": "sha1-AWAXNymzvxOGKN0UoVN+AIUdgUo=",
+ "version": "3.10.0",
+ "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.10.0.tgz",
+ "integrity": "sha512-q20XSMq7jutbGB8luhKKsQldRKWvyBO2BGqni3p4yq8Ys9bEP/xQw3KepKmMRt9gJ4lvQSScrihJrcKdKoSU7Q==",
"dev": true,
"requires": {
- "tslib": "^1.7.1"
+ "tslib": "^1.8.1"
}
}
}
},
- "tslint-eslint-rules": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/tslint-eslint-rules/-/tslint-eslint-rules-4.1.1.tgz",
- "integrity": "sha1-fDDniC8mvCdr/5HSOEl1xp2viLo=",
- "dev": true,
- "requires": {
- "doctrine": "^0.7.2",
- "tslib": "^1.0.0",
- "tsutils": "^1.4.0"
- },
- "dependencies": {
- "tsutils": {
- "version": "1.9.1",
- "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-1.9.1.tgz",
- "integrity": "sha1-ufmrROVa+WgYMdXyjQrur1x1DLA=",
- "dev": true
- }
- }
- },
"tsutils": {
"version": "2.29.0",
"resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz",
"integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==",
- "dev": true,
"requires": {
"tslib": "^1.8.1"
}
},
"tty-browserify": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz",
- "integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==",
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz",
+ "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=",
"dev": true
},
"tunnel-agent": {
@@ -13742,8 +12719,7 @@
"version": "0.14.5",
"resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
"integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
- "dev": true,
- "optional": true
+ "dev": true
},
"type-check": {
"version": "0.3.2",
@@ -13776,12 +12752,6 @@
"integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
"dev": true
},
- "typedarray-to-buffer": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-1.0.4.tgz",
- "integrity": "sha1-m7i6DoQfs/TPH+fCRenz+opf6Zw=",
- "dev": true
- },
"typedoc": {
"version": "0.14.2",
"resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.14.2.tgz",
@@ -13818,15 +12788,6 @@
"universalify": "^0.1.0"
}
},
- "jsonfile": {
- "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.6"
- }
- },
"typescript": {
"version": "3.2.4",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-3.2.4.tgz",
@@ -13842,94 +12803,48 @@
"dev": true
},
"typescript": {
- "version": "2.9.2",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.9.2.tgz",
- "integrity": "sha512-Gr4p6nFNaoufRIY4NMdpQRNmgxVIGMs4Fcu/ujdYk3nAZqk7supzBE9idmvfZIlH/Cuj//dvi+019qEue9lV0w==",
+ "version": "3.4.5",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.4.5.tgz",
+ "integrity": "sha512-YycBxUb49UUhdNMU5aJ7z5Ej2XGmaIBL0x34vZ82fn3hGvD+bgrMrVDpatgz2f7YxUMJxMkbWxJZeAvDxVe7Vw==",
"dev": true
},
- "uglify-es": {
- "version": "3.3.10",
- "resolved": "https://registry.npmjs.org/uglify-es/-/uglify-es-3.3.10.tgz",
- "integrity": "sha512-rPzPisCzW68Okj1zNrfa2dR9uEm43SevDmpR6FChoZABFk9dANGnzzBMgHYUXI3609//63fnVkyQ1SQmAMyjww==",
+ "uglify-js": {
+ "version": "3.5.8",
+ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.5.8.tgz",
+ "integrity": "sha512-GFSjB1nZIzoIq70qvDRtWRORHX3vFkAnyK/rDExc0BN7r9+/S+Voz3t/fwJuVfjppAMz+ceR2poE7tkhvnVwQQ==",
"dev": true,
+ "optional": true,
"requires": {
- "commander": "~2.14.1",
+ "commander": "~2.20.0",
"source-map": "~0.6.1"
},
"dependencies": {
"commander": {
- "version": "2.14.1",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.14.1.tgz",
- "integrity": "sha512-+YR16o3rK53SmWHU3rEM3tPAh2rwb1yPcQX5irVn7mb0gXbwuCCrnkbV5+PBfETdfg1vui07nM6PCG1zndcjQw==",
- "dev": true
+ "version": "2.20.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz",
+ "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==",
+ "dev": true,
+ "optional": true
},
"source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- }
- }
- },
- "uglify-js": {
- "version": "3.4.9",
- "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.9.tgz",
- "integrity": "sha512-8CJsbKOtEbnJsTyv6LE6m6ZKniqMiFWmm9sRbopbkGs3gMPPfd3Fh8iIA4Ykv5MgaTbqHr4BaoGLJLZNhsrW1Q==",
- "dev": true,
- "requires": {
- "commander": "~2.17.1",
- "source-map": "~0.6.1"
- },
- "dependencies": {
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
+ "dev": true,
+ "optional": true
}
}
},
- "uglify-to-browserify": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz",
- "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=",
- "dev": true,
- "optional": true
- },
- "ultron": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz",
- "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==",
- "dev": true
- },
- "umd": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/umd/-/umd-3.0.3.tgz",
- "integrity": "sha512-4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow==",
- "dev": true
- },
"unc-path-regex": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz",
"integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=",
"dev": true
},
- "undeclared-identifiers": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/undeclared-identifiers/-/undeclared-identifiers-1.1.2.tgz",
- "integrity": "sha512-13EaeocO4edF/3JKime9rD7oB6QI8llAGhgn5fKOPyfkJbRb6NFv9pYV6dFEmpa4uRjKeBqLZP8GpuzqHlKDMQ==",
- "dev": true,
- "requires": {
- "acorn-node": "^1.3.0",
- "get-assigned-identifiers": "^1.2.0",
- "simple-concat": "^1.0.0",
- "xtend": "^4.0.1"
- }
- },
"undertaker": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/undertaker/-/undertaker-1.2.0.tgz",
- "integrity": "sha1-M52kZGJS0ILcN45wgGcpl1DhG0k=",
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/undertaker/-/undertaker-1.2.1.tgz",
+ "integrity": "sha512-71WxIzDkgYk9ZS+spIB8iZXchFhAdEo2YU8xYqBYJ39DIUIqziK78ftm26eecoIY49X0J2MLhG4hr18Yp6/CMA==",
"dev": true,
"requires": {
"arr-flatten": "^1.0.1",
@@ -13981,7 +12896,6 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz",
"integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=",
- "dev": true,
"requires": {
"arr-union": "^3.1.0",
"get-value": "^2.0.6",
@@ -13993,7 +12907,6 @@
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
"integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
"requires": {
"is-extendable": "^0.1.0"
}
@@ -14002,7 +12915,6 @@
"version": "0.4.3",
"resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz",
"integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=",
- "dev": true,
"requires": {
"extend-shallow": "^2.0.1",
"is-extendable": "^0.1.1",
@@ -14012,6 +12924,24 @@
}
}
},
+ "unique-filename": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz",
+ "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==",
+ "dev": true,
+ "requires": {
+ "unique-slug": "^2.0.0"
+ }
+ },
+ "unique-slug": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.1.tgz",
+ "integrity": "sha512-n9cU6+gITaVu7VGj1Z8feKMmfAjEAQGhwD9fE3zvpRRa0wEIx8ODYkVGfSc94M2OX00tUFV8wH3zYbm1I8mxFg==",
+ "dev": true,
+ "requires": {
+ "imurmurhash": "^0.1.4"
+ }
+ },
"unique-stream": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.3.1.tgz",
@@ -14020,18 +12950,15 @@
"requires": {
"json-stable-stringify-without-jsonify": "^1.0.1",
"through2-filter": "^3.0.0"
- },
- "dependencies": {
- "through2-filter": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-3.0.0.tgz",
- "integrity": "sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA==",
- "dev": true,
- "requires": {
- "through2": "~2.0.0",
- "xtend": "~4.0.0"
- }
- }
+ }
+ },
+ "unique-string": {
+ "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": {
@@ -14050,7 +12977,6 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
"integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
- "dev": true,
"requires": {
"has-value": "^0.3.1",
"isobject": "^3.0.0"
@@ -14060,7 +12986,6 @@
"version": "0.3.1",
"resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
"integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
- "dev": true,
"requires": {
"get-value": "^2.0.3",
"has-values": "^0.1.4",
@@ -14071,7 +12996,6 @@
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
"integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
- "dev": true,
"requires": {
"isarray": "1.0.0"
}
@@ -14081,87 +13005,59 @@
"has-values": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
- "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=",
- "dev": true
+ "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E="
}
}
},
"unzip-response": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-1.0.2.tgz",
- "integrity": "sha1-uYTwh3/AqJwsdzzB73tbIytbBv4=",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz",
+ "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=",
"dev": true
},
- "unzipper": {
- "version": "0.9.10",
- "resolved": "https://registry.npmjs.org/unzipper/-/unzipper-0.9.10.tgz",
- "integrity": "sha512-dhxTaR67KGyrmxseXTmsyzdlRWkuN0rMPo9j6lxosR/PkzbHNd3smzMobaApx6o/oYvqU1uv+fAPoWr1P4bd8Q==",
- "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",
- "integrity": "sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw==",
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.2.tgz",
+ "integrity": "sha512-kXpym8nmDmlCBr7nKdIx8P2jNBa+pBpIUFRnKJ4dr8htyYGJFokkr2ZvERRtUN+9SY+JqXouNgUPtv6JQva/2Q==",
"dev": true
},
"update-notifier": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-1.0.3.tgz",
- "integrity": "sha1-j5LFFUgr1oMbfJMBPnD4dVLHz1o=",
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.5.0.tgz",
+ "integrity": "sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw==",
"dev": true,
"requires": {
- "boxen": "^0.6.0",
- "chalk": "^1.0.0",
- "configstore": "^2.0.0",
+ "boxen": "^1.2.1",
+ "chalk": "^2.0.1",
+ "configstore": "^3.0.0",
+ "import-lazy": "^2.1.0",
+ "is-ci": "^1.0.10",
+ "is-installed-globally": "^0.1.0",
"is-npm": "^1.0.0",
- "latest-version": "^2.0.0",
- "lazy-req": "^1.1.0",
+ "latest-version": "^3.0.0",
"semver-diff": "^2.0.0",
- "xdg-basedir": "^2.0.0"
+ "xdg-basedir": "^3.0.0"
},
"dependencies": {
- "ansi-styles": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
- "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "ci-info": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz",
+ "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==",
"dev": true
},
- "chalk": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
- "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "is-ci": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz",
+ "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==",
"dev": true,
"requires": {
- "ansi-styles": "^2.2.1",
- "escape-string-regexp": "^1.0.2",
- "has-ansi": "^2.0.0",
- "strip-ansi": "^3.0.0",
- "supports-color": "^2.0.0"
+ "ci-info": "^1.5.0"
}
},
- "supports-color": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
- "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "xdg-basedir": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz",
+ "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=",
"dev": true
}
}
@@ -14186,13 +13082,12 @@
"urix": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
- "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
- "dev": true
+ "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI="
},
"url": {
- "version": "0.11.0",
- "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz",
- "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=",
+ "version": "0.10.3",
+ "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz",
+ "integrity": "sha1-Ah5NnHcF8hu/N9A861h2dAJ3TGQ=",
"dev": true,
"requires": {
"punycode": "1.3.2",
@@ -14208,34 +13103,30 @@
"prepend-http": "^1.0.1"
}
},
+ "urlgrey": {
+ "version": "0.4.4",
+ "resolved": "https://registry.npmjs.org/urlgrey/-/urlgrey-0.4.4.tgz",
+ "integrity": "sha1-iS/pWWCAXoVRnxzUOJ8stMu3ZS8=",
+ "dev": true
+ },
"use": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
- "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==",
- "dev": true
+ "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ=="
},
- "useragent": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/useragent/-/useragent-2.2.1.tgz",
- "integrity": "sha1-z1k+9PLRdYdei7ZY6pLhik/QbY4=",
+ "user-home": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/user-home/-/user-home-2.0.0.tgz",
+ "integrity": "sha1-nHC/2Babwdy/SGBODwS4tJzenp8=",
"dev": true,
"requires": {
- "lru-cache": "2.2.x",
- "tmp": "0.0.x"
- },
- "dependencies": {
- "lru-cache": {
- "version": "2.2.4",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.2.4.tgz",
- "integrity": "sha1-bGWGGb7PFAMdDQtZSxYELOTcBj0=",
- "dev": true
- }
+ "os-homedir": "^1.0.0"
}
},
"util": {
- "version": "0.10.4",
- "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz",
- "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==",
+ "version": "0.11.1",
+ "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz",
+ "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==",
"dev": true,
"requires": {
"inherits": "2.0.3"
@@ -14244,7 +13135,18 @@
"util-deprecate": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
- "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+ "dev": true
+ },
+ "util.promisify": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz",
+ "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==",
+ "dev": true,
+ "requires": {
+ "define-properties": "^1.1.2",
+ "object.getownpropertydescriptors": "^2.0.3"
+ }
},
"utils-merge": {
"version": "1.0.1",
@@ -14253,9 +13155,15 @@
"dev": true
},
"uuid": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz",
- "integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g==",
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz",
+ "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==",
+ "dev": true
+ },
+ "v8-compile-cache": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.0.2.tgz",
+ "integrity": "sha512-1wFuMUIM16MDJRCrpbpuEPTUGmM5QMUg0cr3KFwra2XgOgFcPGDQHDh3CszSCD2Zewc/dh/pamNEW8CbfDebUw==",
"dev": true
},
"v8flags": {
@@ -14280,9 +13188,9 @@
}
},
"validate-npm-package-license": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz",
- "integrity": "sha512-63ZOUnL4SIXj4L0NixR3L1lcjO38crAbgrTpl28t8jjrfuiOBL5Iygm+60qPs/KsZGzPNg6Smnc/oY16QTjF0g==",
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
+ "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
"dev": true,
"requires": {
"spdx-correct": "^3.0.0",
@@ -14364,63 +13272,8 @@
"now-and-later": "^2.0.0",
"remove-bom-buffer": "^3.0.0",
"vinyl": "^2.0.0"
- },
- "dependencies": {
- "clone": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.1.tgz",
- "integrity": "sha1-0hfR6WERjjrJpLi7oyhVU79kfNs=",
- "dev": true
- },
- "clone-stats": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz",
- "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=",
- "dev": true
- },
- "convert-source-map": {
- "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
- },
- "replace-ext": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz",
- "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=",
- "dev": true
- },
- "vinyl": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.0.tgz",
- "integrity": "sha512-MBH+yP0kC/GQ5GwBqrTPTzEfiiLjta7hTtvQtbxBgTeSXsmKQRQecjibMbxIXzVT3Y9KJK+drOz1/k+vsu8Nkg==",
- "dev": true,
- "requires": {
- "clone": "^2.1.1",
- "clone-buffer": "^1.0.0",
- "clone-stats": "^1.0.0",
- "cloneable-readable": "^1.0.0",
- "remove-trailing-separator": "^1.0.1",
- "replace-ext": "^1.0.0"
- }
- }
- }
- },
- "vinyl-sourcemaps-apply": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.2.1.tgz",
- "integrity": "sha1-q2VJ1h0XLCsbh75cUI0jnI74dwU=",
- "dev": true,
- "requires": {
- "source-map": "^0.5.1"
}
},
- "vlq": {
- "version": "0.2.3",
- "resolved": "https://registry.npmjs.org/vlq/-/vlq-0.2.3.tgz",
- "integrity": "sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow==",
- "dev": true
- },
"vm-browserify": {
"version": "0.0.4",
"resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz",
@@ -14430,784 +13283,375 @@
"indexof": "0.0.1"
}
},
- "void-elements": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz",
- "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=",
+ "w3c-hr-time": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz",
+ "integrity": "sha1-gqwr/2PZUOqeMYmlimViX+3xkEU=",
+ "dev": true,
+ "requires": {
+ "browser-process-hrtime": "^0.1.2"
+ }
+ },
+ "w3c-xmlserializer": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-1.1.2.tgz",
+ "integrity": "sha512-p10l/ayESzrBMYWRID6xbuCKh2Fp77+sA0doRuGn4tTIMrrZVeqfpKjXHY+oDh3K4nLdPgNwMTVP6Vp4pvqbNg==",
+ "dev": true,
+ "requires": {
+ "domexception": "^1.0.1",
+ "webidl-conversions": "^4.0.2",
+ "xml-name-validator": "^3.0.0"
+ }
+ },
+ "walker": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz",
+ "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=",
+ "dev": true,
+ "requires": {
+ "makeerror": "1.0.x"
+ }
+ },
+ "watchpack": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz",
+ "integrity": "sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==",
+ "dev": true,
+ "requires": {
+ "chokidar": "^2.0.2",
+ "graceful-fs": "^4.1.2",
+ "neo-async": "^2.5.0"
+ }
+ },
+ "webidl-conversions": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz",
+ "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==",
"dev": true
},
- "w3c-hr-time": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz",
- "integrity": "sha1-gqwr/2PZUOqeMYmlimViX+3xkEU=",
+ "webpack": {
+ "version": "4.30.0",
+ "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.30.0.tgz",
+ "integrity": "sha512-4hgvO2YbAFUhyTdlR4FNyt2+YaYBYHavyzjCMbZzgglo02rlKi/pcsEzwCuCpsn1ryzIl1cq/u8ArIKu8JBYMg==",
+ "dev": true,
+ "requires": {
+ "@webassemblyjs/ast": "1.8.5",
+ "@webassemblyjs/helper-module-context": "1.8.5",
+ "@webassemblyjs/wasm-edit": "1.8.5",
+ "@webassemblyjs/wasm-parser": "1.8.5",
+ "acorn": "^6.0.5",
+ "acorn-dynamic-import": "^4.0.0",
+ "ajv": "^6.1.0",
+ "ajv-keywords": "^3.1.0",
+ "chrome-trace-event": "^1.0.0",
+ "enhanced-resolve": "^4.1.0",
+ "eslint-scope": "^4.0.0",
+ "json-parse-better-errors": "^1.0.2",
+ "loader-runner": "^2.3.0",
+ "loader-utils": "^1.1.0",
+ "memory-fs": "~0.4.1",
+ "micromatch": "^3.1.8",
+ "mkdirp": "~0.5.0",
+ "neo-async": "^2.5.0",
+ "node-libs-browser": "^2.0.0",
+ "schema-utils": "^1.0.0",
+ "tapable": "^1.1.0",
+ "terser-webpack-plugin": "^1.1.0",
+ "watchpack": "^1.5.0",
+ "webpack-sources": "^1.3.0"
+ }
+ },
+ "webpack-assets-manifest": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/webpack-assets-manifest/-/webpack-assets-manifest-3.1.1.tgz",
+ "integrity": "sha512-JV9V2QKc5wEWQptdIjvXDUL1ucbPLH2f27toAY3SNdGZp+xSaStAgpoMcvMZmqtFrBc9a5pTS1058vxyMPOzRQ==",
"dev": true,
"requires": {
- "browser-process-hrtime": "^0.1.2"
+ "chalk": "^2.0",
+ "lodash.get": "^4.0",
+ "lodash.has": "^4.0",
+ "mkdirp": "^0.5",
+ "schema-utils": "^1.0.0",
+ "tapable": "^1.0.0",
+ "webpack-sources": "^1.0.0"
}
},
- "w3c-xmlserializer": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-1.0.0.tgz",
- "integrity": "sha512-0et1+9uXYiIRAecx1D5Z1nk60+vimniGdIKl4XjeqkWi6acoHNlXMv1VR5jV+jF4ooeO08oWbYxeAJOcon1oMA==",
+ "webpack-bundle-analyzer": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.3.2.tgz",
+ "integrity": "sha512-7qvJLPKB4rRWZGjVp5U1KEjwutbDHSKboAl0IfafnrdXMrgC0tOtZbQD6Rw0u4cmpgRN4O02Fc0t8eAT+FgGzA==",
"dev": true,
"requires": {
- "domexception": "^1.0.1",
- "webidl-conversions": "^4.0.2",
- "xml-name-validator": "^3.0.0"
+ "acorn": "^6.0.7",
+ "acorn-walk": "^6.1.1",
+ "bfj": "^6.1.1",
+ "chalk": "^2.4.1",
+ "commander": "^2.18.0",
+ "ejs": "^2.6.1",
+ "express": "^4.16.3",
+ "filesize": "^3.6.1",
+ "gzip-size": "^5.0.0",
+ "lodash": "^4.17.10",
+ "mkdirp": "^0.5.1",
+ "opener": "^1.5.1",
+ "ws": "^6.0.0"
+ },
+ "dependencies": {
+ "ws": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz",
+ "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==",
+ "dev": true,
+ "requires": {
+ "async-limiter": "~1.0.0"
+ }
+ }
}
},
- "watchify": {
- "version": "3.11.1",
- "resolved": "https://registry.npmjs.org/watchify/-/watchify-3.11.1.tgz",
- "integrity": "sha512-WwnUClyFNRMB2NIiHgJU9RQPQNqVeFk7OmZaWf5dC5EnNa0Mgr7imBydbaJ7tGTuPM2hz1Cb4uiBvK9NVxMfog==",
+ "webpack-cli": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.3.1.tgz",
+ "integrity": "sha512-c2inFU7SM0IttEgF7fK6AaUsbBnORRzminvbyRKS+NlbQHVZdCtzKBlavRL5359bFsywXGRAItA5di/IruC8mg==",
"dev": true,
"requires": {
- "anymatch": "^2.0.0",
- "browserify": "^16.1.0",
- "chokidar": "^2.1.1",
- "defined": "^1.0.0",
- "outpipe": "^1.1.0",
- "through2": "^2.0.0",
- "xtend": "^4.0.0"
+ "chalk": "^2.4.1",
+ "cross-spawn": "^6.0.5",
+ "enhanced-resolve": "^4.1.0",
+ "findup-sync": "^2.0.0",
+ "global-modules": "^1.0.0",
+ "import-local": "^2.0.0",
+ "interpret": "^1.1.0",
+ "loader-utils": "^1.1.0",
+ "supports-color": "^5.5.0",
+ "v8-compile-cache": "^2.0.2",
+ "yargs": "^12.0.5"
},
"dependencies": {
- "acorn": {
- "version": "6.1.1",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.1.1.tgz",
- "integrity": "sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA==",
- "dev": true
- },
- "acorn-dynamic-import": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz",
- "integrity": "sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw==",
+ "camelcase": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
+ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
"dev": true
},
- "acorn-node": {
- "version": "1.6.2",
- "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.6.2.tgz",
- "integrity": "sha512-rIhNEZuNI8ibQcL7ANm/mGyPukIaZsRNX9psFNQURyJW0nu6k8wjSDld20z6v2mDBWqX13pIEnk9gGZJHIlEXg==",
+ "cross-spawn": {
+ "version": "6.0.5",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
+ "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
"dev": true,
"requires": {
- "acorn": "^6.0.2",
- "acorn-dynamic-import": "^4.0.0",
- "acorn-walk": "^6.1.0",
- "xtend": "^4.0.1"
+ "nice-try": "^1.0.4",
+ "path-key": "^2.0.1",
+ "semver": "^5.5.0",
+ "shebang-command": "^1.2.0",
+ "which": "^1.2.9"
}
},
- "browserify": {
- "version": "16.2.3",
- "resolved": "https://registry.npmjs.org/browserify/-/browserify-16.2.3.tgz",
- "integrity": "sha512-zQt/Gd1+W+IY+h/xX2NYMW4orQWhqSwyV+xsblycTtpOuB27h1fZhhNQuipJ4t79ohw4P4mMem0jp/ZkISQtjQ==",
+ "execa": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz",
+ "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==",
"dev": true,
"requires": {
- "JSONStream": "^1.0.3",
- "assert": "^1.4.0",
- "browser-pack": "^6.0.1",
- "browser-resolve": "^1.11.0",
- "browserify-zlib": "~0.2.0",
- "buffer": "^5.0.2",
- "cached-path-relative": "^1.0.0",
- "concat-stream": "^1.6.0",
- "console-browserify": "^1.1.0",
- "constants-browserify": "~1.0.0",
- "crypto-browserify": "^3.0.0",
- "defined": "^1.0.0",
- "deps-sort": "^2.0.0",
- "domain-browser": "^1.2.0",
- "duplexer2": "~0.1.2",
- "events": "^2.0.0",
- "glob": "^7.1.0",
- "has": "^1.0.0",
- "htmlescape": "^1.1.0",
- "https-browserify": "^1.0.0",
- "inherits": "~2.0.1",
- "insert-module-globals": "^7.0.0",
- "labeled-stream-splicer": "^2.0.0",
- "mkdirp": "^0.5.0",
- "module-deps": "^6.0.0",
- "os-browserify": "~0.3.0",
- "parents": "^1.0.1",
- "path-browserify": "~0.0.0",
- "process": "~0.11.0",
- "punycode": "^1.3.2",
- "querystring-es3": "~0.2.0",
- "read-only-stream": "^2.0.0",
- "readable-stream": "^2.0.2",
- "resolve": "^1.1.4",
- "shasum": "^1.0.0",
- "shell-quote": "^1.6.1",
- "stream-browserify": "^2.0.0",
- "stream-http": "^2.0.0",
- "string_decoder": "^1.1.1",
- "subarg": "^1.0.0",
- "syntax-error": "^1.1.1",
- "through2": "^2.0.0",
- "timers-browserify": "^1.0.1",
- "tty-browserify": "0.0.1",
- "url": "~0.11.0",
- "util": "~0.10.1",
- "vm-browserify": "^1.0.0",
- "xtend": "^4.0.0"
+ "cross-spawn": "^6.0.0",
+ "get-stream": "^4.0.0",
+ "is-stream": "^1.1.0",
+ "npm-run-path": "^2.0.0",
+ "p-finally": "^1.0.0",
+ "signal-exit": "^3.0.0",
+ "strip-eof": "^1.0.0"
}
},
- "buffer": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.2.1.tgz",
- "integrity": "sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg==",
+ "find-up": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
+ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
"dev": true,
"requires": {
- "base64-js": "^1.0.2",
- "ieee754": "^1.1.4"
+ "locate-path": "^3.0.0"
}
},
- "chokidar": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.2.tgz",
- "integrity": "sha512-IwXUx0FXc5ibYmPC2XeEj5mpXoV66sR+t3jqu2NS2GYwCktt3KF1/Qqjws/NkegajBA4RbZ5+DDwlOiJsxDHEg==",
+ "findup-sync": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz",
+ "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=",
"dev": true,
"requires": {
- "anymatch": "^2.0.0",
- "async-each": "^1.0.1",
- "braces": "^2.3.2",
- "fsevents": "^1.2.7",
- "glob-parent": "^3.1.0",
- "inherits": "^2.0.3",
- "is-binary-path": "^1.0.0",
- "is-glob": "^4.0.0",
- "normalize-path": "^3.0.0",
- "path-is-absolute": "^1.0.0",
- "readdirp": "^2.2.1",
- "upath": "^1.1.0"
+ "detect-file": "^1.0.0",
+ "is-glob": "^3.1.0",
+ "micromatch": "^3.0.4",
+ "resolve-dir": "^1.0.1"
}
},
- "concat-stream": {
- "version": "1.6.2",
- "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
- "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
+ "get-stream": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
+ "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
"dev": true,
"requires": {
- "buffer-from": "^1.0.0",
- "inherits": "^2.0.3",
- "readable-stream": "^2.2.2",
- "typedarray": "^0.0.6"
+ "pump": "^3.0.0"
}
},
- "detective": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.0.tgz",
- "integrity": "sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg==",
+ "invert-kv": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz",
+ "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==",
+ "dev": true
+ },
+ "is-glob": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
+ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
"dev": true,
"requires": {
- "acorn-node": "^1.6.1",
- "defined": "^1.0.0",
- "minimist": "^1.1.1"
+ "is-extglob": "^2.1.0"
}
},
- "domain-browser": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz",
- "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==",
- "dev": true
- },
- "events": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/events/-/events-2.1.0.tgz",
- "integrity": "sha512-3Zmiobend8P9DjmKAty0Era4jV8oJ0yGYe2nJJAxgymF9+N8F2m0hhZiMoWtcfepExzNKZumFU3ksdQbInGWCg==",
- "dev": true
+ "lcid": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz",
+ "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==",
+ "dev": true,
+ "requires": {
+ "invert-kv": "^2.0.0"
+ }
},
- "fsevents": {
- "version": "1.2.7",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.7.tgz",
- "integrity": "sha512-Pxm6sI2MeBD7RdD12RYsqaP0nMiwx8eZBXCa6z2L+mRHm2DYrOYwihmhjpkdjUHwQhslWQjRpEgNq4XvBmaAuw==",
+ "locate-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
+ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
"dev": true,
- "optional": true,
"requires": {
- "nan": "^2.9.2",
- "node-pre-gyp": "^0.10.0"
- },
- "dependencies": {
- "abbrev": {
- "version": "1.1.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "ansi-regex": {
- "version": "2.1.1",
- "bundled": true,
- "dev": true
- },
- "aproba": {
- "version": "1.2.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "are-we-there-yet": {
- "version": "1.1.5",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "delegates": "^1.0.0",
- "readable-stream": "^2.0.6"
- }
- },
- "balanced-match": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true
- },
- "brace-expansion": {
- "version": "1.1.11",
- "bundled": true,
- "dev": true,
- "requires": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "chownr": {
- "version": "1.1.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "code-point-at": {
- "version": "1.1.0",
- "bundled": true,
- "dev": true
- },
- "concat-map": {
- "version": "0.0.1",
- "bundled": true,
- "dev": true
- },
- "console-control-strings": {
- "version": "1.1.0",
- "bundled": true,
- "dev": true
- },
- "core-util-is": {
- "version": "1.0.2",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "debug": {
- "version": "2.6.9",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "ms": "2.0.0"
- }
- },
- "deep-extend": {
- "version": "0.6.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "delegates": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "detect-libc": {
- "version": "1.0.3",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "fs-minipass": {
- "version": "1.2.5",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "minipass": "^2.2.1"
- }
- },
- "fs.realpath": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "gauge": {
- "version": "2.7.4",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "aproba": "^1.0.3",
- "console-control-strings": "^1.0.0",
- "has-unicode": "^2.0.0",
- "object-assign": "^4.1.0",
- "signal-exit": "^3.0.0",
- "string-width": "^1.0.1",
- "strip-ansi": "^3.0.1",
- "wide-align": "^1.1.0"
- }
- },
- "glob": {
- "version": "7.1.3",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.0.4",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- }
- },
- "has-unicode": {
- "version": "2.0.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "iconv-lite": {
- "version": "0.4.24",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "safer-buffer": ">= 2.1.2 < 3"
- }
- },
- "ignore-walk": {
- "version": "3.0.1",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "minimatch": "^3.0.4"
- }
- },
- "inflight": {
- "version": "1.0.6",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "once": "^1.3.0",
- "wrappy": "1"
- }
- },
- "inherits": {
- "version": "2.0.3",
- "bundled": true,
- "dev": true
- },
- "ini": {
- "version": "1.3.5",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "is-fullwidth-code-point": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "number-is-nan": "^1.0.0"
- }
- },
- "isarray": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "minimatch": {
- "version": "3.0.4",
- "bundled": true,
- "dev": true,
- "requires": {
- "brace-expansion": "^1.1.7"
- }
- },
- "minimist": {
- "version": "0.0.8",
- "bundled": true,
- "dev": true
- },
- "minipass": {
- "version": "2.3.5",
- "bundled": true,
- "dev": true,
- "requires": {
- "safe-buffer": "^5.1.2",
- "yallist": "^3.0.0"
- }
- },
- "minizlib": {
- "version": "1.2.1",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "minipass": "^2.2.1"
- }
- },
- "mkdirp": {
- "version": "0.5.1",
- "bundled": true,
- "dev": true,
- "requires": {
- "minimist": "0.0.8"
- }
- },
- "ms": {
- "version": "2.0.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "needle": {
- "version": "2.2.4",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "debug": "^2.1.2",
- "iconv-lite": "^0.4.4",
- "sax": "^1.2.4"
- }
- },
- "node-pre-gyp": {
- "version": "0.10.3",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "detect-libc": "^1.0.2",
- "mkdirp": "^0.5.1",
- "needle": "^2.2.1",
- "nopt": "^4.0.1",
- "npm-packlist": "^1.1.6",
- "npmlog": "^4.0.2",
- "rc": "^1.2.7",
- "rimraf": "^2.6.1",
- "semver": "^5.3.0",
- "tar": "^4"
- }
- },
- "nopt": {
- "version": "4.0.1",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "abbrev": "1",
- "osenv": "^0.1.4"
- }
- },
- "npm-bundled": {
- "version": "1.0.5",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "npm-packlist": {
- "version": "1.2.0",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "ignore-walk": "^3.0.1",
- "npm-bundled": "^1.0.1"
- }
- },
- "npmlog": {
- "version": "4.1.2",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "are-we-there-yet": "~1.1.2",
- "console-control-strings": "~1.1.0",
- "gauge": "~2.7.3",
- "set-blocking": "~2.0.0"
- }
- },
- "number-is-nan": {
- "version": "1.0.1",
- "bundled": true,
- "dev": true
- },
- "object-assign": {
- "version": "4.1.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "once": {
- "version": "1.4.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "wrappy": "1"
- }
- },
- "os-homedir": {
- "version": "1.0.2",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "os-tmpdir": {
- "version": "1.0.2",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "osenv": {
- "version": "0.1.5",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "os-homedir": "^1.0.0",
- "os-tmpdir": "^1.0.0"
- }
- },
- "path-is-absolute": {
- "version": "1.0.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "process-nextick-args": {
- "version": "2.0.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "rc": {
- "version": "1.2.8",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "deep-extend": "^0.6.0",
- "ini": "~1.3.0",
- "minimist": "^1.2.0",
- "strip-json-comments": "~2.0.1"
- },
- "dependencies": {
- "minimist": {
- "version": "1.2.0",
- "bundled": true,
- "dev": true,
- "optional": true
- }
- }
- },
- "readable-stream": {
- "version": "2.3.6",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- }
- },
- "rimraf": {
- "version": "2.6.3",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "glob": "^7.1.3"
- }
- },
- "safe-buffer": {
- "version": "5.1.2",
- "bundled": true,
- "dev": true
- },
- "safer-buffer": {
- "version": "2.1.2",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "sax": {
- "version": "1.2.4",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "semver": {
- "version": "5.6.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "set-blocking": {
- "version": "2.0.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "signal-exit": {
- "version": "3.0.2",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "string-width": {
- "version": "1.0.2",
- "bundled": true,
- "dev": true,
- "requires": {
- "code-point-at": "^1.0.0",
- "is-fullwidth-code-point": "^1.0.0",
- "strip-ansi": "^3.0.0"
- }
- },
- "string_decoder": {
- "version": "1.1.1",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "safe-buffer": "~5.1.0"
- }
- },
- "strip-ansi": {
- "version": "3.0.1",
- "bundled": true,
- "dev": true,
- "requires": {
- "ansi-regex": "^2.0.0"
- }
- },
- "strip-json-comments": {
- "version": "2.0.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "tar": {
- "version": "4.4.8",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "chownr": "^1.1.1",
- "fs-minipass": "^1.2.5",
- "minipass": "^2.3.4",
- "minizlib": "^1.1.1",
- "mkdirp": "^0.5.0",
- "safe-buffer": "^5.1.2",
- "yallist": "^3.0.2"
- }
- },
- "util-deprecate": {
- "version": "1.0.2",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "wide-align": {
- "version": "1.1.3",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "string-width": "^1.0.2 || 2"
- }
- },
- "wrappy": {
- "version": "1.0.2",
- "bundled": true,
- "dev": true
- },
- "yallist": {
- "version": "3.0.3",
- "bundled": true,
- "dev": true
- }
+ "p-locate": "^3.0.0",
+ "path-exists": "^3.0.0"
+ }
+ },
+ "mem": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz",
+ "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==",
+ "dev": true,
+ "requires": {
+ "map-age-cleaner": "^0.1.1",
+ "mimic-fn": "^2.0.0",
+ "p-is-promise": "^2.0.0"
}
},
- "is-glob": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz",
- "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=",
+ "mimic-fn": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
+ "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
+ "dev": true
+ },
+ "os-locale": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz",
+ "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==",
"dev": true,
"requires": {
- "is-extglob": "^2.1.1"
+ "execa": "^1.0.0",
+ "lcid": "^2.0.0",
+ "mem": "^4.0.0"
}
},
- "module-deps": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/module-deps/-/module-deps-6.2.0.tgz",
- "integrity": "sha512-hKPmO06so6bL/ZvqVNVqdTVO8UAYsi3tQWlCa+z9KuWhoN4KDQtb5hcqQQv58qYiDE21wIvnttZEPiDgEbpwbA==",
+ "p-limit": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz",
+ "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==",
"dev": true,
"requires": {
- "JSONStream": "^1.0.3",
- "browser-resolve": "^1.7.0",
- "cached-path-relative": "^1.0.0",
- "concat-stream": "~1.6.0",
- "defined": "^1.0.0",
- "detective": "^5.0.2",
- "duplexer2": "^0.1.2",
- "inherits": "^2.0.1",
- "parents": "^1.0.0",
- "readable-stream": "^2.0.2",
- "resolve": "^1.4.0",
- "stream-combiner2": "^1.1.1",
- "subarg": "^1.0.0",
- "through2": "^2.0.0",
- "xtend": "^4.0.0"
+ "p-try": "^2.0.0"
}
},
- "normalize-path": {
+ "p-locate": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
- "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
+ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
+ "dev": true,
+ "requires": {
+ "p-limit": "^2.0.0"
+ }
+ },
+ "p-try": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
"dev": true
},
- "readdirp": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz",
- "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==",
+ "pump": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
+ "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
+ "dev": true,
+ "requires": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.1"
+ }
+ },
+ "yargs": {
+ "version": "12.0.5",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz",
+ "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==",
"dev": true,
"requires": {
- "graceful-fs": "^4.1.11",
- "micromatch": "^3.1.10",
- "readable-stream": "^2.0.2"
+ "cliui": "^4.0.0",
+ "decamelize": "^1.2.0",
+ "find-up": "^3.0.0",
+ "get-caller-file": "^1.0.1",
+ "os-locale": "^3.0.0",
+ "require-directory": "^2.1.1",
+ "require-main-filename": "^1.0.1",
+ "set-blocking": "^2.0.0",
+ "string-width": "^2.0.0",
+ "which-module": "^2.0.0",
+ "y18n": "^3.2.1 || ^4.0.0",
+ "yargs-parser": "^11.1.1"
}
},
- "vm-browserify": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.0.tgz",
- "integrity": "sha512-iq+S7vZJE60yejDYM0ek6zg308+UZsdtPExWP9VZoCFCz1zkJoXFnAX7aZfd/ZwrkidzdUZL0C/ryW+JwAiIGw==",
- "dev": true
+ "yargs-parser": {
+ "version": "11.1.1",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz",
+ "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==",
+ "dev": true,
+ "requires": {
+ "camelcase": "^5.0.0",
+ "decamelize": "^1.2.0"
+ }
}
}
},
- "webidl-conversions": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz",
- "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==",
+ "webpack-node-externals": {
+ "version": "1.7.2",
+ "resolved": "https://registry.npmjs.org/webpack-node-externals/-/webpack-node-externals-1.7.2.tgz",
+ "integrity": "sha512-ajerHZ+BJKeCLviLUUmnyd5B4RavLF76uv3cs6KNuO8W+HuQaEs0y0L7o40NQxdPy5w0pcv8Ew7yPUAQG0UdCg==",
"dev": true
},
+ "webpack-sources": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.3.0.tgz",
+ "integrity": "sha512-OiVgSrbGu7NEnEvQJJgdSFPl2qWKkWq5lHMhgiToIiN9w34EBnjYzSYs+VbL5KoYiLNtFFa7BZIKxRED3I32pA==",
+ "dev": true,
+ "requires": {
+ "source-list-map": "^2.0.0",
+ "source-map": "~0.6.1"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ }
+ }
+ },
+ "webpack-subresource-integrity": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/webpack-subresource-integrity/-/webpack-subresource-integrity-1.3.2.tgz",
+ "integrity": "sha512-VpBtk0Ha1W0GebTzPj3Y8UqbmPDp+HqGlegRv+hS8g8/x818dw9NuEfJEOp5CF6zTPs3KF6aqknVu52Bh5h1eQ==",
+ "dev": true,
+ "requires": {
+ "webpack-sources": "^1.3.0"
+ }
+ },
"whatwg-encoding": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz",
@@ -15215,23 +13659,12 @@
"dev": true,
"requires": {
"iconv-lite": "0.4.24"
- },
- "dependencies": {
- "iconv-lite": {
- "version": "0.4.24",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
- "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
- "dev": true,
- "requires": {
- "safer-buffer": ">= 2.1.2 < 3"
- }
- }
}
},
"whatwg-mimetype": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.2.0.tgz",
- "integrity": "sha512-5YSO1nMd5D1hY3WzAQV3PzZL83W3YeyR1yW9PcH26Weh1t+Vzh9B6XkDh7aXm83HBZ4nSMvkjvN2H2ySWIvBgw==",
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz",
+ "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==",
"dev": true
},
"whatwg-url": {
@@ -15249,7 +13682,6 @@
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
"integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
- "dev": true,
"requires": {
"isexe": "^2.0.0"
}
@@ -15257,76 +13689,81 @@
"which-module": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
- "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=",
- "dev": true
+ "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho="
},
"widest-line": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-1.0.0.tgz",
- "integrity": "sha1-DAnIXCqUaD0Nfq+O4JfVZL8OEFw=",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.1.tgz",
+ "integrity": "sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==",
"dev": true,
"requires": {
- "string-width": "^1.0.1"
+ "string-width": "^2.1.1"
}
},
- "window-size": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz",
- "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=",
- "dev": true,
- "optional": true
+ "wordwrap": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz",
+ "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=",
+ "dev": true
},
- "winston": {
- "version": "2.4.3",
- "resolved": "https://registry.npmjs.org/winston/-/winston-2.4.3.tgz",
- "integrity": "sha512-GYKuysPz2pxYAVJD2NPsDLP5Z79SDEzPm9/j4tCjkF/n89iBNGBMJcR+dMUqxgPNgoSs6fVygPi+Vl2oxIpBuw==",
+ "worker-farm": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.6.0.tgz",
+ "integrity": "sha512-6w+3tHbM87WnSWnENBUvA2pxJPLhQUg5LKwUQHq3r+XPhIM+Gh2R5ycbwPCyuGbNg+lPgdcnQUhuC02kJCvffQ==",
"dev": true,
"requires": {
- "async": "~1.0.0",
- "colors": "1.0.x",
- "cycle": "1.0.x",
- "eyes": "0.1.x",
- "isstream": "0.1.x",
- "stack-trace": "0.0.x"
+ "errno": "~0.1.7"
}
},
- "wordwrap": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
- "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
- "dev": true
- },
"wrap-ansi": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
"integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=",
- "dev": true,
"requires": {
"string-width": "^1.0.1",
"strip-ansi": "^3.0.1"
+ },
+ "dependencies": {
+ "is-fullwidth-code-point": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
+ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
+ "requires": {
+ "number-is-nan": "^1.0.0"
+ }
+ },
+ "string-width": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+ "requires": {
+ "code-point-at": "^1.0.0",
+ "is-fullwidth-code-point": "^1.0.0",
+ "strip-ansi": "^3.0.0"
+ }
+ }
}
},
"wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
- "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
- "dev": true
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
},
"write-file-atomic": {
- "version": "1.3.4",
- "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-1.3.4.tgz",
- "integrity": "sha1-+Aek8LHZ6ROuekgRLmzDrxmRtF8=",
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.1.tgz",
+ "integrity": "sha512-TGHFeZEZMnv+gBFRfjAcxL5bPHrsGKtnb4qsFAws7/vlh+QfwAaySIw4AXP9ZskTTh5GWu3FLuJhsWVdiJPGvg==",
"dev": true,
"requires": {
"graceful-fs": "^4.1.11",
"imurmurhash": "^0.1.4",
- "slide": "^1.1.5"
+ "signal-exit": "^3.0.2"
}
},
"ws": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/ws/-/ws-6.1.0.tgz",
- "integrity": "sha512-H3dGVdGvW2H8bnYpIDc3u3LH8Wue3Qh+Zto6aXXFzvESkTVT6rAfKR6tR/+coaUvxs8yHtmNV0uioBF62ZGSTg==",
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz",
+ "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==",
"dev": true,
"requires": {
"async-limiter": "~1.0.0"
@@ -15359,15 +13796,6 @@
"resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
"integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
"dev": true
- },
- "user-home": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/user-home/-/user-home-2.0.0.tgz",
- "integrity": "sha1-nHC/2Babwdy/SGBODwS4tJzenp8=",
- "dev": true,
- "requires": {
- "os-homedir": "^1.0.0"
- }
}
}
},
@@ -15399,12 +13827,6 @@
"integrity": "sha512-tGkGJkN8XqCod7OT+EvGYK5Z4SfDQGD30zAa58OcnAa0RRWgzUEK72tkXhsX1FZd+rgnhRxFtmO+ihkp8LHSkw==",
"dev": true
},
- "xmlhttprequest-ssl": {
- "version": "1.5.5",
- "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz",
- "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=",
- "dev": true
- },
"xtend": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
@@ -15414,198 +13836,44 @@
"y18n": {
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz",
- "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=",
- "dev": true
+ "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE="
},
"yallist": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
- "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
- "dev": true
+ "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI="
},
"yargs": {
- "version": "8.0.2",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-8.0.2.tgz",
- "integrity": "sha1-YpmpBVsc78lp/355wdkY3Osiw2A=",
- "dev": true,
+ "version": "11.1.0",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-11.1.0.tgz",
+ "integrity": "sha512-NwW69J42EsCSanF8kyn5upxvjp5ds+t3+udGBeTbFnERA+lF541DDpMawzo4z6W/QrzNM18D+BPMiOBibnFV5A==",
"requires": {
- "camelcase": "^4.1.0",
- "cliui": "^3.2.0",
+ "cliui": "^4.0.0",
"decamelize": "^1.1.1",
+ "find-up": "^2.1.0",
"get-caller-file": "^1.0.1",
"os-locale": "^2.0.0",
- "read-pkg-up": "^2.0.0",
"require-directory": "^2.1.1",
"require-main-filename": "^1.0.1",
"set-blocking": "^2.0.0",
"string-width": "^2.0.0",
"which-module": "^2.0.0",
"y18n": "^3.2.1",
- "yargs-parser": "^7.0.0"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
- "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
- "dev": true
- },
- "camelcase": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
- "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
- "dev": true
- },
- "cliui": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz",
- "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=",
- "dev": true,
- "requires": {
- "string-width": "^1.0.1",
- "strip-ansi": "^3.0.1",
- "wrap-ansi": "^2.0.0"
- },
- "dependencies": {
- "string-width": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
- "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
- "dev": true,
- "requires": {
- "code-point-at": "^1.0.0",
- "is-fullwidth-code-point": "^1.0.0",
- "strip-ansi": "^3.0.0"
- }
- }
- }
- },
- "find-up": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
- "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
- "dev": true,
- "requires": {
- "locate-path": "^2.0.0"
- }
- },
- "load-json-file": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz",
- "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "parse-json": "^2.2.0",
- "pify": "^2.0.0",
- "strip-bom": "^3.0.0"
- }
- },
- "parse-json": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
- "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
- "dev": true,
- "requires": {
- "error-ex": "^1.2.0"
- }
- },
- "path-type": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz",
- "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=",
- "dev": true,
- "requires": {
- "pify": "^2.0.0"
- }
- },
- "pify": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
- "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
- "dev": true
- },
- "read-pkg": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz",
- "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=",
- "dev": true,
- "requires": {
- "load-json-file": "^2.0.0",
- "normalize-package-data": "^2.3.2",
- "path-type": "^2.0.0"
- }
- },
- "read-pkg-up": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz",
- "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=",
- "dev": true,
- "requires": {
- "find-up": "^2.0.0",
- "read-pkg": "^2.0.0"
- }
- },
- "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"
- },
- "dependencies": {
- "is-fullwidth-code-point": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
- "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
- "dev": true
- },
- "strip-ansi": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
- "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
- "dev": true,
- "requires": {
- "ansi-regex": "^3.0.0"
- }
- }
- }
- }
+ "yargs-parser": "^9.0.2"
}
},
"yargs-parser": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz",
- "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=",
- "dev": true,
+ "version": "9.0.2",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-9.0.2.tgz",
+ "integrity": "sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc=",
"requires": {
"camelcase": "^4.1.0"
- },
- "dependencies": {
- "camelcase": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
- "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
- "dev": true
- }
}
},
- "yauzl": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.4.1.tgz",
- "integrity": "sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU=",
- "dev": true,
- "requires": {
- "fd-slicer": "~1.0.1"
- }
- },
- "yeast": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz",
- "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=",
- "dev": true
+ "yn": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.0.tgz",
+ "integrity": "sha512-kKfnnYkbTfrAdd0xICNFw7Atm8nKpLcLv9AZGEt+kczL/WQVai4e2V6ZN8U/O+iI6WrNuJjNNOyu4zfhl9D3Hg=="
}
}
}
diff --git a/package.json b/package.json
index bef6725b..a5d50cc4 100644
--- a/package.json
+++ b/package.json
@@ -4,7 +4,7 @@
"description": "Official JavaScript library for Filestack",
"main": "build/main/index.js",
"module": "build/module/index.js",
- "browser": "build/browser/index.esm.js",
+ "browser": "build/browser/filestack.esm.js",
"typings": "build/main/index.d.ts",
"unpkg": "build/browser/filestack.min.js",
"repository": "https://github.com/filestack/filestack-js",
@@ -15,26 +15,21 @@
"build"
],
"scripts": {
- "build": "gulp build",
+ "build": "gulp build:typescript && npm run webpack",
"build:main": "gulp typescript:main",
"build:module": "gulp typescript:module",
- "build:browser": "gulp build:rollup",
- "lint": "tslint --project . src/**/*.ts",
- "prism:mock": "node test/prism.js",
- "prism:record": "node test/prism.js --record",
- "toxy": "node test/toxy.js",
- "test": "npm run build && npm run lint && npm-run-all -p -r 'prism:mock' 'toxy' 'test:runner'",
- "test:runner": "TEST_ENV=unit karma start && TEST_ENV=unit nyc mocha",
- "test:runner:mocha": "TEST_ENV=unit nyc mocha",
- "test:runner:karma": "TEST_ENV=unit karma start",
- "test:karma": "npm run build && npm run lint && npm-run-all -p -r 'prism:mock' 'toxy' 'test:runner:karma'",
- "test:mocha": "npm run build && npm run lint && npm-run-all -p -r 'prism:mock' 'toxy' 'test:runner:mocha'",
- "test:integration": "npm run build && npm run lint && TEST_ENV=integration karma start && TEST_ENV=integration nyc mocha",
+ "webpack": "npx webpack",
+ "webpack:profile": "npx webpack --profile --json > .stats.json",
+ "webpack:analyze": "npm run webpack:profile && npx webpack-bundle-analyzer .stats.json build/browser/",
+ "lint": "tslint -p tsconfig.tslint.json",
+ "test": "npm run lint && jest",
+ "test:watch": "npm t -- --watch",
+ "test:codecov": "npx codecov",
"docs": "trash build/docs && typedoc src && opn build/docs/index.html",
"docs:publish": "npm run docs && gh-pages -d build/docs",
"release": "standard-version",
- "prepare": "gulp build:prod",
- "publish:pre": "gulp build:prod && node scripts/publish.js --pre",
+ "prepare": "npm run build",
+ "publish:pre": "npm run build && node scripts/publish.js --pre",
"publish": "npm run docs:publish && node scripts/publish.js --current --latest",
"examples": "npm run build && node ./examples/examples.js"
},
@@ -43,85 +38,68 @@
},
"dependencies": {
"abab": "^2.0.0",
- "file-type": "^8.1.0",
+ "axios": "^0.18.0",
+ "debug": "^4.1.1",
+ "eventemitter3": "^3.1.2",
+ "file-type": "^10.0.0",
"filestack-loader": "^3.0.4",
- "is-svg": "^3.0.0",
- "isutf8": "^2.0.2",
+ "isutf8": "^2.0.3",
"jsonschema": "^1.2.4",
+ "p-queue": "^4.0.0",
+ "prettier-tslint": "^0.4.2",
"spark-md5": "^3.0.0",
- "superagent": "^3.8.3",
- "tcomb-validation": "^3.4.1",
+ "ts-node": "^8.1.0",
"tslib": "^1.9.3"
},
"devDependencies": {
- "@babel/core": "^7.3.4",
- "@babel/preset-env": "^7.3.4",
- "@types/mime": "^2.0.0",
- "@types/mocha": "^2.2.48",
- "@types/node": "^10.5.2",
- "@types/sinon": "^5.0.1",
- "@types/spark-md5": "^3.0.0",
- "@types/superagent": "^3.8.3",
- "aws-sdk": "^2.291.0",
- "browserify": "^14.5.0",
- "connect": "^3.6.6",
- "connect-prism": "^1.0.20",
- "cors": "^2.8.4",
- "del": "^3.0.0",
- "dotenv": "^4.0.0",
- "electron": "^3.0.6",
+ "@babel/core": "^7.4.4",
+ "@babel/preset-env": "^7.4.4",
+ "@purtuga/esm-webpack-plugin": "^1.0.1",
+ "@types/jest": "^24.0.12",
+ "@types/mime": "^2.0.1",
+ "@types/node": "^12.0.0",
+ "@types/spark-md5": "^3.0.1",
+ "@types/uuid": "^3.4.4",
+ "aws-sdk": "^2.451.0",
+ "babel-loader": "^8.0.5",
+ "clean-webpack-plugin": "^2.0.2",
+ "codecov": "^3.3.0",
+ "compression-webpack-plugin": "^2.0.0",
+ "del": "^4.1.1",
+ "dotenv": "^8.0.0",
"envify": "^4.1.0",
- "express": "^4.16.4",
- "fs-jetpack": "^2.2.0",
- "gh-pages": "^1.2.0",
- "gulp": "^4.0.0",
- "gulp-better-rollup": "3.1.0",
+ "fs-jetpack": "^2.2.2",
+ "gh-pages": "^2.0.1",
+ "gulp": "^4.0.2",
"gulp-gzip": "^1.4.2",
"gulp-rename": "^1.4.0",
"gulp-replace": "^1.0.0",
- "gulp-rollup": "^2.16.2",
- "gulp-sourcemaps": "^2.6.4",
- "gulp-typescript": "^4.0.2",
- "gulp-uglify": "^3.0.1",
- "har-validator": "^5.1.3",
- "js-yaml": "^3.12.0",
- "jsdom": "13.0.0",
- "jsdom-global": "3.0.2",
- "karma": "^3.1.1",
- "karma-browserify": "^5.3.0",
- "karma-browserstack-launcher": "^1.4.0",
- "karma-chrome-launcher": "^2.2.0",
- "karma-electron": "^6.0.0",
- "karma-firefox-launcher": "^1.1.0",
- "karma-mocha": "^1.3.0",
- "karma-rollup-preprocessor": "^6.1.0",
- "mime-types": "^2.1.19",
- "mocha": "^5.2.0",
- "npm-run-all": "^4.1.5",
- "nyc": "^13.3.0",
- "opn-cli": "^3.1.0",
- "rollup": "^0.57.0",
- "rollup-plugin-alias": "^1.4.0",
- "rollup-plugin-babel": "^4.3.2",
- "rollup-plugin-commonjs": "^9.2.0",
- "rollup-plugin-json": "^3.1.0",
- "rollup-plugin-node-builtins": "^2.1.2",
- "rollup-plugin-node-globals": "^1.4.0",
- "rollup-plugin-node-resolve": "^3.4.0",
- "rollup-plugin-replace": "^2.1.0",
- "rollup-watch": "^4.3.1",
- "sinon": "^7.1.1",
- "standard-version": "^4.4.0",
- "toxy": "^0.3.16",
- "trash-cli": "^1.4.0",
- "tslint": "^5.11.0",
- "tslint-config-semistandard": "^7.0.0",
+ "gulp-typescript": "^5.0.1",
+ "jest": "^24.8.0",
+ "jest-localstorage-mock": "^2.4.0",
+ "jest-mock": "^24.8.0",
+ "js-yaml": "^3.13.1",
+ "jsdom": "^15.0.0",
+ "lodash.clonedeep": "^4.5.0",
+ "lodash.merge": "^4.6.1",
+ "nock": "^10.0.6",
+ "opn-cli": "^4.1.0",
+ "prettier": "^1.17.0",
+ "prettier-tslint": "^0.4.2",
+ "standard-version": "^6.0.1",
+ "trash-cli": "^2.0.0",
+ "ts-jest": "^24.0.2",
+ "tslint": "^5.16.0",
+ "tslint-config-semistandard": "^8.0.0",
"typedoc": "^0.14.2",
- "typescript": "^2.9.2",
- "uglify-es": "^3.3.10",
- "url": "^0.11.0",
+ "typescript": "^3.4.5",
"validate-commit-msg": "^2.14.0",
- "watchify": "^3.11.1"
+ "webpack": "^4.30.0",
+ "webpack-assets-manifest": "^3.1.1",
+ "webpack-bundle-analyzer": "^3.3.2",
+ "webpack-cli": "^3.3.1",
+ "webpack-node-externals": "^1.7.2",
+ "webpack-subresource-integrity": "^1.3.2"
},
"keywords": [
"filestack",
diff --git a/releases/filestack-js-3.0.0-relase.md b/releases/filestack-js-3.0.0-relase.md
new file mode 100644
index 00000000..e5a89117
--- /dev/null
+++ b/releases/filestack-js-3.0.0-relase.md
@@ -0,0 +1,113 @@
+# Filestack-js@3.0.0 Releases notes
+
+## Features
+- **[BREAKING]** add name sanitization
+ by default following characters:
+ ```
+ ['\\', '{', '}', '|', '%', '`', '"', "'", '~', '[', ']', '#', '|', '^', '<', '>']
+ ```
+ will be replaced with '-'
+ to disable sanitizer set storeUploadOption - sanitizer to false
+ @see https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingMetadata.html
+
+- **[ENHANCEMENT]** storeUrl now use new base64 transform protocol by default
+- **[ENHANCEMENT]** Add escape params with ',' in storeUrl method
+- **[FEATURE]** add multiupload feature
+ ```js
+ client
+ .multiupload([file1, file2, file3], { onRetry }, { filename: (normalizedFile) => {
+ return 'newname.jpg'
+ } }, token)
+ .then(res => console.log(res));
+ ```
+
+- **[ENHANCEMENT]** rewrite retry policy (retry on all 5xx request and connection errors, do not retry on 4xx errors)
+- **[ENHANCEMENT]** update progress event (now its returning overall progress and for each file)
+- **[FEATURE]** add debug for uploads
+- **[FEATURE]** filename now supports function:
+ ```js
+ client
+ .upload(file, { onRetry }, { filename: (normalizedFile) => {
+ return 'newname.jpg'
+ } }, token)
+ .then(res => console.log(res));
+ ```
+- **[FEATURE]** file argument in upload now supports "named file" object so, we can pass name for each file
+ ```js
+ client
+ .upload({
+ file,
+ name: (normalizedFile) => 'newname.jpg'
+ })
+ .then(res => console.log(res));
+ ```
+- **[ENHANCEMENT]** added setSecurity and setCname methods to client
+
+ ```js
+ client
+ .setSecurity({
+ policy: 'newPolicy'
+ signature: 'newSignature'
+ })
+ .upload({
+ file,
+ name: (normalizedFile) => 'newname.jpg'
+ })
+ .then(res => console.log(res));
+ ```
+- **[ENHANCEMENT]** rewrite all options validation to JSONSchema and remove old tcomb library
+ ```js
+ const apikey = 'YOUR_APIKEY';
+ const src = new filestack.Filelink('EXAMPLE_HANDLE', apikey)
+ try {
+ src.blur({amount: 15})
+ .resize({
+ wrongOption: 720,
+ height: 480,
+ }
+ );
+ }.catch(e: FilestackError => {
+ console.log(e.message);
+ console.log(e.details); // detailed validation errors
+ })
+
+ ```
+
+ ```js
+ try {
+ client
+ .picker({
+ wrongPickerOption: true
+ })
+ .open();
+ }.catch(e: FilestackError => {
+ console.log(e.message);
+ console.log(e.details); // detailed validation errors
+ })
+
+ ```
+- **[ENHANCEMENT]** rewrite all tests (now tests are splitted to integrations and units)
+- **[ENHANCEMENT]** change request library to axios (better error handling)
+- **[FEATURE]** add missing transformations uglifyJs and uglifyCss
+- minor fixes
+
+## Deprecation:
+- **[BREAKING]** remove preferLinkOverStorage picker option
+
+## Others:
+- Rewrite upload to objective typescript
+- move to new build system (webpack)
+- add codeconv service and setup pull requests to minimum tests coverage (99%)
+- add sri hashes to manifest.json
+- update outdated packages
+- cleanup unused packages
+
+## Picker
+- add viewType option, now user can set default view type option [#157]
+- add transformations: { force: true } to allow force crop for ie. circle transformation [#122]
+- fix problem with dropPane and cropFiles [#228]
+- fix problem with generating uploadId [#230]
+- fix problem with passing undefined options to picker [#95]
+- fix problem with disabling crop transformation [#148]
+- incrise messages duration to 8s
+- add new translation for notification in image search [#227]
diff --git a/rollup.config.js b/rollup.config.js
deleted file mode 100644
index 50cd0224..00000000
--- a/rollup.config.js
+++ /dev/null
@@ -1,91 +0,0 @@
-const alias = require('rollup-plugin-alias');
-const builtins = require('rollup-plugin-node-builtins');
-const commonjs = require('rollup-plugin-commonjs');
-const globals = require('rollup-plugin-node-globals');
-const nodeResolve = require('rollup-plugin-node-resolve');
-const replace = require('rollup-plugin-replace');
-const json = require('rollup-plugin-json');
-const babel = require('rollup-plugin-babel');
-
-const adapters = {
- './lib/api/security': 'build/module/adapters/security.browser.js',
- './file_utils': 'build/module/adapters/file_utils.browser.js',
- './is_mobile': 'build/module/adapters/is_mobile.browser.js',
-};
-
-const namedExports = {
- 'node_modules/tcomb-validation/index.js': [
- 'Boolean',
- 'Function',
- 'Integer',
- 'Number',
- 'String',
- 'enums',
- 'refinement',
- 'union',
- 'tuple',
- 'struct',
- 'validate',
- 'maybe',
- 'list'
- ],
- 'node_modules/superagent/lib/client.js': [
- 'get',
- 'post',
- 'put',
- 'delete',
- 'head'
- ],
- 'node_modules/ajv/lib/ajv.js': ['Ajv'],
- 'node_modules/bowser/src/bowser.js': [ 'mobile' ],
- 'node_modules/spark-md5/spark-md5.js': [ 'ArrayBuffer' ]
-};
-
-const plugins = [
- alias(adapters),
- json({
- include: 'node_modules/**',
- preferConst: true, // Default: false
- indent: ' ',
- namedExports: true
- }),
- nodeResolve({
- browser: true,
- preferBuiltins: true,
- }),
- commonjs({
- include: 'node_modules/**',
- namedExports: namedExports,
- }),
- replace({
- 'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV),
- 'process.env.TEST_ENV': JSON.stringify(process.env.TEST_ENV),
- }),
- babel({
- runtimeHelpers: true,
- presets: [
- [
- "@babel/preset-env",
- {
- targets: "> 0.25%, not dead",
- },
- ],
- ],
- }),
-];
-
-plugins.push(builtins());
-plugins.push(globals());
-
-module.exports = {
- input: 'build/module/index.js',
- // external: ['ajv'],
- onwarn: function(warning) {
- // Skip certain warnings
- // should intercept ... but doesn't in some rollup versions
- if ( warning.code === 'THIS_IS_UNDEFINED' ) { return; }
- // console.warn everything else
- console.warn( warning.message );
- },
- plugins
-};
diff --git a/scripts/build.js b/scripts/build.js
index 1a81011a..952f739b 100644
--- a/scripts/build.js
+++ b/scripts/build.js
@@ -1,20 +1,9 @@
const gulp = require('gulp');
-const path = require('path');
-const fs = require('fs');
-const sourcemaps = require('gulp-sourcemaps');
const ts = require('gulp-typescript');
const replace = require('gulp-replace');
-const uglifyEs = require('uglify-es');
-const composer = require('gulp-uglify/composer');
-const betterRollup = require('gulp-better-rollup')
const del = require('del');
-const rollupConfig = require('../rollup.config')
const version = require('../package.json').version;
-const uglify = composer(uglifyEs);
-const rename = require('gulp-rename');
-const gzip = require('gulp-gzip');
-// const debug = require('gulp-debug');
gulp.task('build:clean', function () {
return del([
'build/**/*'
@@ -39,56 +28,4 @@ gulp.task('typescript:modules', () => {
gulp.task('build:typescript', gulp.series(['typescript:main', 'typescript:modules']));
-gulp.task('build:rollup', gulp.series('build:typescript', () => {
- return gulp.src('build/module/index.js')
- .pipe(sourcemaps.init())
- .pipe(betterRollup(rollupConfig, [{
- file: 'index.esm.js',
- format: 'es',
- }, {
- file: 'index.umd.js',
- name: 'filestack',
- format: 'umd',
- }]))
- .on('error', function (err) {
- console.log('Rollup error:', err)
- })
- .pipe(sourcemaps.write('.'))
- .pipe(gulp.dest('build/browser'))
-}));
-
-gulp.task('build:uglify', gulp.series('build:rollup', () => {
- const uglifyOptions = {
- warnings: false,
- output: {
- preamble: fs.readFileSync(path.join(__dirname, '..', 'LICENSE')).toString('utf8').replace('${year}', new Date().getFullYear()),
- },
- compress: {
- pure_getters: true,
- unsafe: true,
- unsafe_comps: true,
- },
- };
-
- return gulp.src(['build/browser/index.umd.js'])
- .pipe(sourcemaps.init({
- loadMaps: true,
- }))
- .pipe(uglify(uglifyOptions))
- .on('error', function (err) {
- console.log('Uglify error:', err)
- })
- .pipe(rename({ suffix: '.min', basename: 'filestack' }))
- .pipe(sourcemaps.write('.'))
- .pipe(gulp.dest('build/browser'));
-}));
-
-gulp.task('build', gulp.series(['build:clean', 'build:rollup']));
-
-gulp.task('build:prod', gulp.series(['build:clean', 'build:uglify', () => {
- return gulp.src(['build/browser/filestack.min.js'])
- .pipe(gzip({
- preExtension: 'gz'
- }))
- .pipe(gulp.dest('build/browser'));
-}]));
+gulp.task('build', gulp.series(['build:clean', 'build:typescript']));
diff --git a/scripts/publish.js b/scripts/publish.js
index b2dd0cd5..8dfa54d6 100644
--- a/scripts/publish.js
+++ b/scripts/publish.js
@@ -14,6 +14,7 @@ const figureOutFileMimetype = (file) => {
if (type !== false) {
return type;
}
+
return 'application/octet-stream';
};
@@ -100,7 +101,7 @@ if (args.indexOf('--current') > -1) {
}
if (args.indexOf('--pre') > -1) {
- console.log(`publishing to prerelase version ${version}-pre`);
+ console.log(`publishing to prerelease version ${version}-pre`);
versionsToPublish.push({
bucket,
folder: `filestack-js/${version}-pre`,
diff --git a/src/adapters/file_utils.browser.ts b/src/adapters/file_utils.browser.ts
deleted file mode 100644
index 4a81bce5..00000000
--- a/src/adapters/file_utils.browser.ts
+++ /dev/null
@@ -1,152 +0,0 @@
-/*
- * Copyright (c) 2018 by Filestack.
- * Some rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import { atob } from 'abab';
-import { calcMD5 } from '../lib/api/upload/md5';
-import { Context, PartObj } from '../lib/api/upload/types';
-
-/**
- * Is file?
- *
- * @private
- * @return {Boolean}
- */
-const isFile = (file: any): boolean => {
- return file.toString() === '[object File]';
-};
-
-/**
- * Is blob?
- *
- * @private
- * @param blob
- * @returns {Boolean}
- */
-const isBlob = (blob: any): boolean => {
- return isFile(blob) || (blob.toString() === '[object Blob]');
-};
-
-/**
- * Convert encoded base64 string or dataURI to blob
- * @param b64data String to decode
- * @param sliceSize Byte quantity to split data into
- * @private
- * @returns {Blob}
- */
-const b64toBlob = (b64Data: string, sliceSize = 512) => {
- let byteString;
- let contentType = '';
- if (b64Data.split(',')[0].indexOf('base64') >= 0) {
- byteString = b64Data.split(',')[1];
- }
- if (byteString !== undefined) {
- contentType = b64Data.split(',')[0].split(':')[1].split(';')[0];
- b64Data = decodeURI(byteString);
- }
- const byteCharacters = atob(b64Data);
- const byteArrays: any[] = [];
- for (let offset = 0; offset < byteCharacters.length; offset += sliceSize) {
- const slice = byteCharacters.slice(offset, offset + sliceSize);
- const byteNumbers = new Array(slice.length);
- for (let i = 0; i < slice.length; i += 1) {
- byteNumbers[i] = slice.charCodeAt(i);
- }
- const byteArray = new Uint8Array(byteNumbers);
- byteArrays.push(byteArray);
- }
- const blob = new Blob(byteArrays, { type: contentType });
- return blob;
-};
-
-/**
- * Get start and end for slice operations
- * @private
- * @returns Object where keys are `start` and `end`
- */
-const getRange = ({ config, file }: Context, partNumber: number) => {
- const start = partNumber * config.partSize;
- const end = Math.min(start + config.partSize, file.size);
- return { start, end };
-};
-
-/**
- * Slice file into a single part
- * @private
- */
-const sliceFile = (ctx: Context, partNumber: number) => {
- const { start, end } = getRange(ctx, partNumber);
-
- return ctx.file.slice(start, end);
-};
-
-/**
- * Reads file as ArrayBuffer using HTML5 FileReader implementation
- * @private
- * @param file Valid File instance
- * @returns {Promise}
- */
-const readFile = (file: any) => {
- return new Promise((resolve, reject) => {
- let reader;
- if (File && FileReader && Blob) {
- reader = new FileReader();
- reader.onloadend = resolve;
- reader.onerror = reject;
- reader.readAsArrayBuffer(file);
- } else {
- reject(new Error('The File APIs are not fully supported by your browser'));
- }
- });
-};
-
-/**
- * Reads a slice of a file based on the current part.
- * @private
- */
-export const getPart = (part: PartObj, ctx: Context) => {
- return readFile(sliceFile(ctx, part.number))
- .then((evt: any) => {
- const buffer = evt.target.result;
- const newPart = {
- ...part,
- buffer,
- size: buffer.byteLength,
- md5: calcMD5(buffer),
- };
- return newPart;
- });
-};
-
-/**
- * Get a Blob from a File or string.
- * @private
- */
-export const getFile = (fileOrString: any): Promise => {
- let file: any = fileOrString;
- if (typeof fileOrString === 'string') {
- file = b64toBlob(file);
- }
- if (!file || !isBlob(file)) {
- return Promise.reject(new TypeError('File argument is not a valid Blob'));
- }
- return Promise.resolve(file);
-};
-
-/**
- * This is a noop in browsers
- */
-export const closeFile = () => undefined;
diff --git a/src/adapters/is_mobile.browser.ts b/src/adapters/is_mobile.browser.ts
deleted file mode 100644
index 938d99cb..00000000
--- a/src/adapters/is_mobile.browser.ts
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Copyright (c) 2018 by Filestack.
- * Some rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-declare var navigator: any;
-declare var window: any;
-
-export const isMobile = () => {
- const vendor = navigator.userAgent || navigator.vendor || window.opera;
-
- return !!(
- /(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(
- vendor
- ) ||
- /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw-(n|u)|c55\/|capi|ccwa|cdm-|cell|chtm|cldc|cmd-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc-s|devi|dica|dmob|do(c|p)o|ds(12|-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(-|_)|g1 u|g560|gene|gf-5|g-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd-(m|p|t)|hei-|hi(pt|ta)|hp( i|ip)|hs-c|ht(c(-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i-(20|go|ma)|i230|iac( |-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|-[a-w])|libw|lynx|m1-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|-([1-8]|c))|phil|pire|pl(ay|uc)|pn-2|po(ck|rt|se)|prox|psio|pt-g|qa-a|qc(07|12|21|32|60|-[2-7]|i-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h-|oo|p-)|sdk\/|se(c(-|0|1)|47|mc|nd|ri)|sgh-|shar|sie(-|m)|sk-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h-|v-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl-|tdg-|tel(i|m)|tim-|t-mo|to(pl|sh)|ts(70|m-|m3|m5)|tx-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas-|your|zeto|zte-/i.test(
- vendor.substr(0, 4)
- )
- );
-};
diff --git a/src/config.ts b/src/config.ts
index 9c9b605b..eec80f10 100644
--- a/src/config.ts
+++ b/src/config.ts
@@ -18,7 +18,7 @@
/**
* @private
*/
-const PICKER_VERSION = '1.4.8';
+const PICKER_VERSION = '1.4.9';
/**
* @private
@@ -39,30 +39,12 @@ export interface Config {
urls: Hosts;
}
-/**
- * @private
- */
-export let config: Config;
-
-/* istanbul ignore next */
-if (process.env.NODE_ENV === 'production') {
- config = {
- urls: {
- fileApiUrl: 'https://www.filestackapi.com/api/file',
- uploadApiUrl: 'https://upload.filestackapi.com',
- cloudApiUrl: 'https://cloud.filestackapi.com',
- cdnUrl: 'https://cdn.filestackcontent.com',
- pickerUrl: `https://static.filestackapi.com/picker/${PICKER_VERSION}/picker.js`,
- },
- };
-} else {
- config = {
- urls: {
- fileApiUrl: 'https://www.filestackapi.com/api/file',
- uploadApiUrl: 'https://upload.filestackapi.com',
- cloudApiUrl: 'https://cloud.filestackapi.com',
- cdnUrl: 'https://cdn.filestackcontent.com',
- pickerUrl: `https://static.filestackapi.com/picker/${PICKER_VERSION}/picker.js`,
- },
- };
-}
+export const config = {
+ urls: {
+ fileApiUrl: 'https://www.filestackapi.com/api/file',
+ uploadApiUrl: 'https://upload.filestackapi.com',
+ cloudApiUrl: 'https://cloud.filestackapi.com',
+ cdnUrl: 'https://cdn.filestackcontent.com',
+ pickerUrl: `https://static.filestackapi.com/picker/${PICKER_VERSION}/picker.js`,
+ },
+};
diff --git a/src/filestack_error.spec.ts b/src/filestack_error.spec.ts
new file mode 100644
index 00000000..2530bcde
--- /dev/null
+++ b/src/filestack_error.spec.ts
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2019 by Filestack.
+ * Some rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the 'License');
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an 'AS IS' BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import { FilestackError } from './filestack_error';
+
+describe('FilestackError', () => {
+ it('should work without params', () => {
+ expect(() => new FilestackError()).not.toThrow();
+ });
+
+ it('should work with only message parrams', () => {
+ expect((new FilestackError('Some message')).message).toEqual('Some message');
+ });
+
+ it('should allow pass details', () => {
+ expect((new FilestackError('Some message', { errors : 123 })).details).toEqual({ errors : 123 });
+ });
+});
diff --git a/src/FilestackError.ts b/src/filestack_error.ts
similarity index 77%
rename from src/FilestackError.ts
rename to src/filestack_error.ts
index 9bdb660d..3ec3bbc9 100644
--- a/src/FilestackError.ts
+++ b/src/filestack_error.ts
@@ -15,6 +15,12 @@
* limitations under the License.
*/
+export enum FilestackErrorType {
+ VALIDATION = 'validation',
+ REQUEST = 'request',
+ OTHER = 'other',
+}
+
export class FilestackError extends Error {
/**
@@ -24,11 +30,16 @@ export class FilestackError extends Error {
* @memberof FilestackError
*/
public readonly details: any;
+ public readonly type: string;
- constructor(message: string, details?: any) {
+ constructor(message?: string, details?: any, type?: FilestackErrorType) {
+
+ /* istanbul ignore next */
super(message);
+
Object.setPrototypeOf(this, FilestackError.prototype);
this.details = details;
+ this.type = type;
}
}
diff --git a/src/index.ts b/src/index.ts
index 2101ef01..4f022780 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -36,6 +36,7 @@ export const version = '@{VERSION}';
export * from './lib/api/transform';
export * from './lib/filelink';
+export * from './filestack_error';
export {
TransformSchema,
diff --git a/src/lib/api/cloud.spec.browser.ts b/src/lib/api/cloud.spec.browser.ts
new file mode 100644
index 00000000..39e87061
--- /dev/null
+++ b/src/lib/api/cloud.spec.browser.ts
@@ -0,0 +1,431 @@
+/*
+ * Copyright (c) 2019 by Filestack.
+ * Some rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the 'License');
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an 'AS IS' BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import { config } from './../../config';
+import { CloudClient, PICKER_KEY } from './cloud';
+import * as nock from 'nock';
+
+const testApiKey = 'API_KEY';
+const testTokSession = 'TOK_SESSION';
+const testTokArchiveId = 'ARCHIVE_ID';
+
+const testCloudToken = 'testCloudToken';
+
+const testSecurity = {
+ policy: 'examplePolicy',
+ signature: 'exampleSignature',
+};
+
+const sessionURls = config.urls;
+const testSession = {
+ apikey: testApiKey,
+ urls: sessionURls,
+};
+
+let scope = nock(sessionURls.cloudApiUrl);
+
+const mockTokInit = jest
+ .fn()
+ .mockName('tokInit')
+ .mockReturnValue('init');
+
+const mockTokStart = jest
+ .fn()
+ .mockName('tokStart')
+ .mockReturnValue('start');
+
+const mockTokStop = jest
+ .fn()
+ .mockName('tokStop')
+ .mockReturnValue('stop');
+
+const mockMetadata = jest
+ .fn()
+ .mockName('metadata')
+ .mockReturnValue('metadata');
+
+const mockPrefetch = jest
+ .fn()
+ .mockName('prefetch')
+ .mockReturnValue('prefetch');
+
+const mockList = jest
+ .fn()
+ .mockName('list')
+ .mockImplementation(data => {
+ if (data && data.clouds.token) {
+ return { token: testCloudToken };
+ }
+
+ return data;
+ });
+
+const mockLogout = jest
+ .fn()
+ .mockName('logout')
+ .mockImplementation((url, data) => {
+ const params = data ? JSON.parse(data) : {};
+
+ if (data && params.clouds && params.clouds.token) {
+ return { token: testCloudToken };
+ }
+
+ return data;
+ });
+
+const mockStore = jest
+ .fn()
+ .mockName('store')
+ .mockImplementation(params => {
+ if (params && params.clouds && params.clouds.token) {
+ return JSON.stringify({ token: testCloudToken });
+ }
+
+ return JSON.stringify(params);
+ });
+
+describe('cloud', () => {
+ beforeEach(() => {
+ scope
+ .persist()
+ .options(/.*/)
+ .reply(204, '', {
+ 'access-control-allow-headers': 'filestack-source,filestack-trace-id,filestack-trace-span',
+ 'access-control-allow-methods': '*',
+ 'access-control-allow-origin': '*',
+ });
+
+ scope
+ .get('/prefetch')
+ .query({ apikey: testApiKey })
+ .reply(200, mockPrefetch);
+
+ scope.post('/auth/logout/').reply(200, mockLogout);
+ scope.post('/folder/list').reply(200, (_, data) => mockList(JSON.parse(data)));
+ scope.post('/store/').reply(200, (_, data) => mockStore(JSON.parse(data)));
+ scope.post('/metadata/').reply(200, mockMetadata);
+
+ scope.post(/\/recording\/(audio|video)\/init/).reply(200, mockTokInit);
+ scope.post(/\/recording\/(audio|video)\/start/).reply(200, mockTokStart);
+ scope.post(/\/recording\/(audio|video)\/stop/).reply(200, mockTokStop);
+ });
+
+ afterEach(() => {
+ nock.cleanAll();
+ jest.clearAllMocks();
+ localStorage.clear();
+ });
+
+ describe('prefetch', () => {
+ it('should make correct request to api', async () => {
+ const res = await new CloudClient(testSession).prefetch();
+
+ expect(mockPrefetch).toHaveBeenCalledWith(expect.any(String), '');
+ expect(res).toEqual('prefetch');
+ });
+ });
+
+ describe('list', () => {
+ it('should make correct list request', async () => {
+ const clouds = { test: true };
+
+ const res = await new CloudClient(testSession).list({ ...clouds });
+
+ expect(res).toEqual({
+ apikey: testApiKey,
+ flow: 'web',
+ clouds,
+ });
+ });
+
+ it('should make correct list request with session cache', async () => {
+ const clouds = { test: true };
+ localStorage.setItem(PICKER_KEY, testCloudToken);
+
+ const res = await new CloudClient(testSession, {
+ sessionCache: true,
+ }).list({ ...clouds });
+
+ expect(res).toEqual({
+ apikey: testApiKey,
+ flow: 'web',
+ token: testCloudToken,
+ clouds,
+ });
+ });
+
+ it('should set token on api token response', async () => {
+ const clouds = { token: true };
+ const res = await new CloudClient(testSession).list({ ...clouds });
+
+ expect(res).toEqual({ token: testCloudToken });
+ });
+
+ it('should cache session token to local storage', async () => {
+ const clouds = { token: true };
+
+ const res = await new CloudClient(testSession, { sessionCache: true }).list({ ...clouds });
+
+ expect(localStorage.setItem).toHaveBeenCalledWith(PICKER_KEY, testCloudToken);
+ expect(res).toEqual({ token: testCloudToken });
+ });
+
+ it('should make correct list request with security', async () => {
+ const clouds = { test: true };
+
+ const res = await new CloudClient({
+ ...testSession,
+ ...testSecurity,
+ }).list({ ...clouds });
+
+ expect(res).toEqual({
+ apikey: testApiKey,
+ flow: 'web',
+ clouds,
+ ...testSecurity,
+ });
+ });
+ });
+
+ describe('store', () => {
+ it('should make correct basic request', async () => {
+ const res = await new CloudClient(testSession).store('google', 'test', { filename: '1' });
+
+ expect(res).toEqual({
+ apikey: testApiKey,
+ flow: 'web',
+ clouds: {
+ google: {
+ path: 'test',
+ store: {
+ filename: '1',
+ location: 's3',
+ },
+ },
+ },
+ });
+ });
+
+ it('should respect store location param', async () => {
+ const res = await new CloudClient(testSession).store('google', 'test', { filename: '1', location: 'gcs' });
+
+ expect(res).toEqual({
+ apikey: testApiKey,
+ flow: 'web',
+ clouds: {
+ google: {
+ path: 'test',
+ store: {
+ filename: '1',
+ location: 'gcs',
+ },
+ },
+ },
+ });
+ });
+
+ it('should make correct basic with security', async () => {
+ const res = await new CloudClient({
+ ...testSession,
+ ...testSecurity,
+ }).store('token', 'test', { filename: '1' });
+
+ const excepted = {
+ ...testSecurity,
+ apikey: testApiKey,
+ flow: 'web',
+ clouds: {
+ token: {
+ path: 'test',
+ store: {
+ filename: '1',
+ location: 's3',
+ },
+ },
+ },
+ };
+
+ expect(mockStore).toHaveBeenCalledWith(excepted);
+ expect(res).toEqual(testCloudToken);
+ });
+
+ it('should handle custom source', async () => {
+ const customSource = {
+ customSourcePath: 'cs_path',
+ customSourceContainer: 'cs_container',
+ };
+
+ const res = await new CloudClient(testSession).store('customsource', 'test', { filename: '1' }, customSource);
+
+ expect(res).toEqual({
+ apikey: testApiKey,
+ flow: 'web',
+ clouds: {
+ customsource: {
+ ...customSource,
+ path: 'test',
+ store: {
+ filename: '1',
+ location: 's3',
+ },
+ },
+ },
+ });
+ });
+ });
+
+ describe('logout', () => {
+ it('should make correct request to logout', async () => {
+ expect(await new CloudClient(testSession).logout()).toEqual({ apikey: 'API_KEY', flow: 'web' });
+ });
+
+ it('should make correct request to logout with provided cloud', async () => {
+ expect(await new CloudClient(testSession).logout('google')).toEqual({ apikey: 'API_KEY', flow: 'web', clouds: { google: {} } });
+ });
+
+ it('should make correct request to logout and return correct response when cloud name is returned', async () => {
+ expect(await new CloudClient(testSession).logout('token')).toEqual('testCloudToken');
+ });
+
+ it('should make correct request to logout and clean session cache ', async () => {
+ localStorage.setItem(PICKER_KEY, testCloudToken);
+
+ const res = await new CloudClient(testSession, { sessionCache: true }).logout();
+
+ expect(localStorage.removeItem).toHaveBeenCalledWith(PICKER_KEY);
+ expect(res).toEqual({ apikey: 'API_KEY', flow: 'web', token: testCloudToken });
+ });
+ });
+
+ describe('metadata', () => {
+ it('should make correct request', async () => {
+ const testUrl = 'http://test.com';
+
+ const res = await new CloudClient(testSession).metadata(testUrl);
+
+ expect(mockMetadata).toHaveBeenCalledWith(
+ expect.any(String),
+ JSON.stringify({
+ apikey: testApiKey,
+ url: testUrl,
+ })
+ );
+ expect(res).toEqual('metadata');
+ });
+
+ it('should make correct request with security', async () => {
+ const testUrl = 'http://test.com';
+
+ const res = await new CloudClient({
+ ...testSession,
+ ...testSecurity,
+ }).metadata(testUrl);
+
+ expect(mockMetadata).toHaveBeenCalledWith(
+ expect.any(String),
+ JSON.stringify({
+ apikey: testApiKey,
+ url: testUrl,
+ ...testSecurity,
+ })
+ );
+ expect(res).toEqual('metadata');
+ });
+ });
+
+ describe('OpenTok', () => {
+ describe('tokInit', () => {
+ it('should make correct request to api (audio)', async () => {
+ const res = await new CloudClient(testSession).tokInit('audio');
+
+ expect(mockTokInit).toHaveBeenCalledWith(expect.any(String), '');
+ expect(res).toEqual({ body: 'init' });
+ });
+
+ it('should make correct request to api (video)', async () => {
+ const res = await new CloudClient(testSession).tokInit('audio');
+
+ expect(mockTokInit).toHaveBeenCalledWith(expect.any(String), '');
+ expect(res).toEqual({ body: 'init' });
+ });
+
+ it('should throw on wrong type', async() => {
+ expect(() => {
+ new CloudClient(testSession).tokInit('videoa').then(() => {
+ console.log('init');
+ }).catch(() => {
+ console.log('err');
+ });
+ }).toThrowError();
+ });
+ });
+
+ describe('tokStart', () => {
+ it('should make correct request to api (audio)', async () => {
+ const res = await new CloudClient(testSession).tokStart('audio', 'key', testTokSession);
+
+ expect(mockTokStart).toHaveBeenCalledWith(expect.any(String), JSON.stringify({ apikey: 'key', session_id: testTokSession }));
+ expect(res).toEqual({ body: 'start' });
+ });
+
+ it('should make correct request to api (video)', async () => {
+ const res = await new CloudClient(testSession).tokStart('video', 'key', testTokSession);
+
+ expect(mockTokStart).toHaveBeenCalledWith(expect.any(String), JSON.stringify({ apikey: 'key', session_id: testTokSession }));
+ expect(res).toEqual({ body: 'start' });
+ });
+
+ it('should throw on wrong type', () => {
+ expect(() => new CloudClient(testSession).tokStart('videoa', 'key', testTokSession)).toThrowError();
+ });
+ });
+
+ describe('tokStop', () => {
+ it('should make correct request to api (audio)', async () => {
+ const res = await new CloudClient(testSession).tokStop('audio', 'key', testTokSession, testTokArchiveId);
+
+ expect(mockTokStop).toHaveBeenCalledWith(
+ expect.any(String),
+ JSON.stringify({
+ apikey: 'key',
+ session_id: testTokSession,
+ archive_id: testTokArchiveId,
+ })
+ );
+ expect(res).toEqual({ body: 'stop' });
+ });
+
+ it('should make correct request to api (video)', async () => {
+ const res = await new CloudClient(testSession).tokStop('video', 'key', testTokSession, testTokArchiveId);
+
+ expect(mockTokStop).toHaveBeenCalledWith(
+ expect.any(String),
+ JSON.stringify({
+ apikey: 'key',
+ session_id: testTokSession,
+ archive_id: testTokArchiveId,
+ })
+ );
+ expect(res).toEqual({ body: 'stop' });
+ });
+
+ it('should throw on wrong type', () => {
+ expect(() => new CloudClient(testSession).tokStop('videoa', 'key', testTokSession, testTokArchiveId)).toThrowError();
+ });
+ });
+ });
+});
diff --git a/src/lib/api/cloud.spec.ts b/src/lib/api/cloud.spec.ts
deleted file mode 100644
index 485359d9..00000000
--- a/src/lib/api/cloud.spec.ts
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * Copyright (c) 2018 by Filestack.
- * Some rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import * as assert from 'assert';
-import { CloudClient, PICKER_KEY } from './cloud';
-
-declare var ENV: any;
-
-const session = ENV.cloudSession;
-const secureSession = ENV.secureCloudSession;
-const mockClouds = {
- facebook: {
- path: '/',
- },
-};
-
-describe('cloud', function cloud() {
- this.timeout(60000);
-
- it('should construct an instance of CloudClient', () => {
- const client = new CloudClient(session);
- assert.ok(client.session = session);
- assert.ok(client instanceof CloudClient);
- });
-
- it('should call prefetch for application profile', (done) => {
- const client = new CloudClient(session);
- client.prefetch()
- .then((res: any) => {
- assert.ok(res);
- assert.ok(res.whitelabel);
- done();
- })
- .catch((err: any) => {
- done(err);
- });
- });
-
- it('should call list with security', (done) => {
- const client = new CloudClient(secureSession);
- client.list(mockClouds)
- .then((res: any) => {
- assert.ok(res);
- done();
- })
- .catch((err: any) => {
- done(err);
- });
- });
-
- it('should save token if sessionCache is true -- BROWSER ONLY', (done) => {
- if (typeof localStorage === 'undefined') {
- return done();
- }
-
- const client = new CloudClient(session, { sessionCache: true });
- client.list(mockClouds)
- .then((res: any) => {
- assert.ok(res);
- const cached = localStorage.getItem(PICKER_KEY);
- assert.ok(cached === res.token);
- done();
- })
- .catch((err: any) => {
- done(err);
- });
- });
-
-});
diff --git a/src/lib/api/cloud.ts b/src/lib/api/cloud.ts
index dbfecbb8..08475369 100644
--- a/src/lib/api/cloud.ts
+++ b/src/lib/api/cloud.ts
@@ -15,9 +15,11 @@
* limitations under the License.
*/
-import { ClientOptions, Session, StoreOptions } from '../client';
import { removeEmpty } from '../utils';
-import { requestWithSource as request } from '../api/request';
+import { StoreParams } from '../filelink';
+import { ClientOptions, Session } from '../client';
+import { requestWithSource, request } from '../api/request';
+import { FilestackError } from './../../filestack_error';
/**
* @private
@@ -36,6 +38,7 @@ export class CloudClient {
constructor(session: Session, options?: ClientOptions) {
this.session = session;
this.cloudApiUrl = session.urls.cloudApiUrl;
+
if (options && options.sessionCache) {
this.cache = options.sessionCache;
}
@@ -60,44 +63,46 @@ export class CloudClient {
const params = {
apikey: this.session.apikey,
};
- return request('get', `${this.cloudApiUrl}/prefetch`)
- .query(params)
- .then((res: any) => res.body);
+ return requestWithSource()
+ .get(`${this.cloudApiUrl}/prefetch`, { params })
+ .then(res => res.data);
}
- list(clouds: any, token: any = {}) {
+ list(clouds: any, token?: any) {
const payload: any = {
apikey: this.session.apikey,
clouds,
flow: 'web',
token: this.token,
};
+
if (this.session.policy && this.session.signature) {
payload.policy = this.session.policy;
payload.signature = this.session.signature;
}
- return new Promise((resolve, reject) => {
- const req = request('post', `${this.cloudApiUrl}/folder/list`)
- .send(payload)
- .end((err: Error, response: any) => {
- if (err) {
- reject(err);
- } else {
- if (response.body && response.body.token) {
- this.token = response.body.token;
- }
- resolve(response.body);
- }
- });
- token.cancel = () => {
- req.abort();
- reject(new Error('Cancelled'));
- };
- });
- }
- store(name: string, path: string, options: StoreOptions = {}, customSource: any = {}, token: any = {}) {
+ let options: any = {};
+
+ if (token) {
+ const CancelToken = request.CancelToken;
+ const source = CancelToken.source();
+ token.cancel = source.cancel;
+
+ options.cancelToken = source.token;
+ }
+
+ return requestWithSource()
+ .post(`${this.cloudApiUrl}/folder/list`, payload, options)
+ .then(res => {
+ if (res.data && res.data.token) {
+ this.token = res.data.token;
+ }
+ return res.data;
+ });
+ }
+
+ store(name: string, path: string, options: StoreParams = {}, customSource: any = {}, token?: any) {
// Default to S3
if (options.location === undefined) options.location = 's3';
@@ -126,77 +131,29 @@ export class CloudClient {
payload.signature = this.session.signature;
}
- return new Promise((resolve, reject) => {
- const req = request('post', `${this.cloudApiUrl}/store/`)
- .send(payload)
- .end((err: Error, response: any) => {
- if (err) {
- reject(err);
- } else {
- if (response.body && response.body.token) {
- this.token = response.body.token;
- }
- if (response.body && response.body[name]) {
- resolve(response.body[name]);
- } else {
- resolve(response.body);
- }
- }
- });
-
- token.cancel = () => {
- req.abort();
- reject(new Error('Cancelled'));
- };
- });
- }
+ let requestOptions: any = {};
- link(name: string, path: string, customSource: any = {}, token: any = {}) {
- const payload: any = {
- apikey: this.session.apikey,
- token: this.token,
- flow: 'web',
- clouds: {
- [name]: {
- path,
- },
- },
- };
+ if (token) {
+ const CancelToken = request.CancelToken;
+ const source = CancelToken.source();
+ token.cancel = source.cancel;
- if (name === 'customsource' && customSource.customSourcePath) {
- payload.clouds.customsource.customSourcePath = customSource.customSourcePath;
+ requestOptions.cancelToken = source.token;
}
- if (name === 'customsource' && customSource.customSourceContainer) {
- payload.clouds.customsource.customSourceContainer = customSource.customSourceContainer;
- }
+ return requestWithSource()
+ .post(`${this.cloudApiUrl}/store/`, payload, requestOptions)
+ .then(res => {
+ if (res.data && res.data.token) {
+ this.token = res.data.token;
+ }
- if (this.session.policy && this.session.signature) {
- payload.policy = this.session.policy;
- payload.signature = this.session.signature;
- }
- return new Promise((resolve, reject) => {
- const req = request('post', `${this.cloudApiUrl}/link/`)
- .send(payload)
- .end((err: Error, response: any) => {
- if (err) {
- reject(err);
- } else {
- if (response.body && response.body.token) {
- this.token = response.body.token;
- }
- if (response.body[name]) {
- resolve(response.body[name]);
- } else {
- resolve(response.body);
- }
- }
- });
- token.cancel = () => {
- req.abort();
- reject(new Error('Cancelled'));
- };
- });
+ if (res.data && res.data[name]) {
+ return res.data[name];
+ }
+
+ return res.data;
+ });
}
logout(name?: string) {
@@ -205,30 +162,22 @@ export class CloudClient {
flow: 'web',
token: this.token,
};
+
if (name) {
- payload.clouds = {
- [name]: {},
- };
- } else {
+ payload.clouds = { [name]: {} };
+ } else if (this.cache) {
// No name means logout of ALL clouds. Clear local session.
- if (this.cache) {
- localStorage.removeItem(PICKER_KEY);
- }
+ localStorage.removeItem(PICKER_KEY);
}
- return new Promise((resolve, reject) => {
- request('post', `${this.cloudApiUrl}/auth/logout/`)
- .send(payload)
- .end((err: Error, response: any) => {
- if (err) {
- reject(err);
- } else {
- if (response.body && response.body.token) {
- this.token = response.body.token;
- }
- resolve(response.body);
- }
- });
- });
+
+ return requestWithSource()
+ .post(`${this.cloudApiUrl}/auth/logout/`, payload)
+ .then(res => {
+ if (res.data && res.data[name]) {
+ return res.data[name];
+ }
+ return res.data;
+ });
}
metadata(url: string) {
@@ -236,80 +185,66 @@ export class CloudClient {
apikey: this.session.apikey,
url,
};
+
if (this.session.policy && this.session.signature) {
payload.policy = this.session.policy;
payload.signature = this.session.signature;
}
- return new Promise((resolve, reject) => {
- request('post', `${this.cloudApiUrl}/metadata`)
- .send(payload)
- .end((err: Error, response: any) => {
- if (err) {
- reject(err);
- } else {
- resolve(response.body);
- }
- });
- });
+
+ return requestWithSource()
+ .post(`${this.cloudApiUrl}/metadata/`, payload)
+ .then(res => res.data);
}
// OpenTok API Endpoints
tokInit(type: string) {
if (type !== 'video' && type !== 'audio') {
- throw new Error('Type must be one of video or audio.');
+ throw new FilestackError('Type must be one of video or audio.');
}
- return new Promise((resolve, reject) => {
- return request('post', `${this.cloudApiUrl}/recording/${type}/init`)
- .end((err: Error, response: any) => {
- if (err) {
- reject(err);
- } else {
- resolve(response);
- }
- });
- });
+ return requestWithSource()
+ .post(`${this.cloudApiUrl}/recording/${type}/init`)
+ .then(res => {
+ return {
+ body: res.data,
+ };
+ });
}
tokStart(type: string, key: string, sessionId: string) {
if (type !== 'video' && type !== 'audio') {
- throw new Error('Type must be one of video or audio.');
+ throw new FilestackError('Type must be one of video or audio.');
}
const payload = {
apikey: key,
session_id: sessionId,
};
- return new Promise((resolve, reject) => {
- return request('post', `${this.cloudApiUrl}/recording/${type}/start`)
- .send(payload)
- .end((err: Error, response: any) => {
- if (err) {
- reject(err);
- } else {
- resolve(response);
- }
- });
- });
+
+ return requestWithSource()
+ .post(`${this.cloudApiUrl}/recording/${type}/start`, payload)
+ .then(res => {
+ return {
+ body: res.data,
+ };
+ });
}
tokStop(type: string, key: string, sessionId: string, archiveId: string) {
if (type !== 'video' && type !== 'audio') {
- throw new Error('Type must be one of video or audio.');
+ throw new FilestackError('Type must be one of video or audio.');
}
+
const payload = {
apikey: key,
session_id: sessionId,
archive_id: archiveId,
};
- return new Promise((resolve, reject) => {
- return request('post', `${this.cloudApiUrl}/recording/${type}/stop`)
- .send(payload)
- .end((err: Error, response: any) => {
- if (err) {
- reject(err);
- } else {
- resolve(response);
- }
- });
- });
+
+ return requestWithSource()
+ .post(`${this.cloudApiUrl}/recording/${type}/stop`, payload)
+ .then(res => {
+ return {
+ body: res.data,
+ };
+ });
}
}
diff --git a/src/lib/api/file.spec.ts b/src/lib/api/file.spec.ts
index c14f24a6..f72e9eba 100644
--- a/src/lib/api/file.spec.ts
+++ b/src/lib/api/file.spec.ts
@@ -14,229 +14,255 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+/*
+ * Copyright (c) 2018 by Filestack.
+ * Some rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
-import * as assert from 'assert';
-import {
- metadata,
- remove,
- retrieve,
-} from './file';
-import { storeURL } from './store';
+import { retrieve, remove, metadata } from './file';
+import * as axios from 'axios';
+import { Session } from '../client';
-declare var ENV: any;
+jest.mock('axios');
+jest.mock('./../filelink');
-const session = ENV.session;
-const secureSession = ENV.secureSession;
-const filelink = ENV.filelink;
-const secureFilelink = ENV.secureFilelink;
+const mockedSession: Session = {
+ apikey: 'fakeApikey',
+ urls: {
+ cdnUrl: 'fakeUrl',
+ fileApiUrl: 'fakeApiUrl',
+ uploadApiUrl: 'fakeUploadApiUrl',
+ cloudApiUrl: 'fakeCloudApiUrl',
+ pickerUrl: 'fakePickerUrl',
+ },
+};
-describe('metadata', function metadataFunc() {
- this.timeout(60000);
+describe('FileAPI', () => {
+ describe('Metadata', () => {
+ it('should call correct metadata without options', async () => {
+ const methodMocked = jest.fn(() => Promise.resolve({ data: {} }));
+ // @ts-ignore
+ axios.get.mockImplementation(methodMocked);
+ const resp = await metadata(mockedSession, 'fakeHandle');
- it('should throw an error if no handle is set', () => {
- assert.throws(() => metadata(session));
- });
+ expect(resp).toEqual({ handle: 'fakeHandle' });
+ expect(methodMocked).toHaveBeenLastCalledWith('fakeApiUrl/fakeHandle/metadata', { params: {} });
+ });
- it('should get an ok response with a valid handle', (done) => {
- metadata(session, filelink)
- .then((result) => {
- assert.ok(result);
- done();
- })
- .catch((err) => {
- done(err);
- });
- });
+ it('should call correct metadata with options', async () => {
+ const methodMocked = jest.fn(() => Promise.resolve({ data: {} }));
+ // @ts-ignore
+ axios.get.mockImplementation(methodMocked);
+ const resp = await metadata(mockedSession, 'fakeHandle', { size: true });
- it('should get an ok response with a valid handle and options', (done) => {
- metadata(session, filelink, { md5: true, sourceUrl: true })
- .then((result) => {
- assert.ok(result);
- done();
- })
- .catch((err) => {
- done(err);
- });
- });
+ expect(resp).toEqual({ handle: 'fakeHandle' });
+ expect(methodMocked).toHaveBeenLastCalledWith('fakeApiUrl/fakeHandle/metadata', { params: { size: true } });
+ });
- it('should get an ok response with a valid secure handle and options', (done) => {
- metadata(secureSession, secureFilelink)
- .then((result) => {
- assert.ok(result);
- done();
- })
- .catch((err) => {
- done(err);
- });
- });
+ it('should throw on wrong option', async () => {
+ // @ts-ignore
+ return expect(() => metadata(mockedSession, 'fakekey', { bla: 123 })).toThrowError('Invalid metadata params');
+ });
- it('should call promise catch with error', (done) => {
- const sessionClone = JSON.parse(JSON.stringify(session));
- sessionClone.urls.fileApiUrl = 'http://www.somebadurl.com';
-
- metadata(sessionClone, filelink)
- .then(() => {
- done(new Error('Request passed'));
- })
- .catch((err) => {
- assert.ok(err instanceof Error);
- done();
- });
- });
-});
+ it('should throw an error on empty handle', () => {
+ return expect(() => metadata(mockedSession)).toThrowError();
+ });
-describe('retrieve', function metadataFunc() {
- this.timeout(60000);
+ it('should respect provided security options', async () => {
+ const fakeSecurity = {
+ signature: 'fakeS',
+ policy: 'fakeP',
+ };
- it('should throw an error if no handle is set', () => {
- assert.throws(() => retrieve(session, ''));
- });
+ // @ts-ignore
+ axios.get.mockImplementation(() => Promise.resolve({ data: {} }));
+ const resp = await metadata(mockedSession, 'fakeHandle', {}, fakeSecurity);
- it('should throw an error metadata and head options are provided', () => {
- assert.throws(() => retrieve(session, filelink, {
- metadata: true,
- head: true,
- }));
+ expect(resp).toEqual({ handle: 'fakeHandle' });
+ });
});
- it('should get an ok response with a valid handle', (done) => {
- retrieve(session, filelink)
- .then((result) => {
- assert.ok(result);
- done();
- })
- .catch((err) => {
- done(err);
- });
- });
+ describe('Remove', () => {
+ it('should call remove', async () => {
+ const deleteMocked = jest.fn(() => Promise.resolve({ data: {} }));
- it('should get an ok response with a valid handle and options', (done) => {
- retrieve(session, filelink, { metadata: true })
- .then((result) => {
- assert.ok(result);
- done();
- })
- .catch((err) => {
- done(err);
- });
- });
+ // @ts-ignore
+ axios.delete.mockImplementation(deleteMocked);
+ const resp = await remove(
+ Object.assign({}, mockedSession, {
+ signature: 'fakeS',
+ policy: 'fakeP',
+ }),
+ 'fakeHandle'
+ );
- it('should get an ok response with a valid secure handle and options', (done) => {
- retrieve(secureSession, secureFilelink, { metadata: true })
- .then((result) => {
- assert.ok(result);
- done();
- })
- .catch((err) => {
- done(err);
- });
- });
+ expect(resp).toEqual({ data: {} });
+ expect(deleteMocked).toHaveBeenCalledWith('fakeApiUrl/fakeHandle', { params: { key: 'fakeApikey', policy: 'fakeP', signature: 'fakeS' } });
+ });
- it('should get an ok response with a head option', (done) => {
- retrieve(session, filelink, { head: true })
- .then((result) => {
- assert.ok(result);
- done();
- })
- .catch((err) => {
- done(err);
- });
- });
+ it('should respect skip storage option', async () => {
+ const methodMocked = jest.fn(() => Promise.resolve({ data: {} }));
- it('should get an ok response with a extension option', (done) => {
- retrieve(session, filelink, { extension: 'someextension.txt' })
- .then((result) => {
- assert.ok(result);
- done();
- })
- .catch((err) => {
- done(err);
- });
+ // @ts-ignore
+ axios.delete.mockImplementation(methodMocked);
+ const resp = await remove(
+ Object.assign({}, mockedSession, {
+ signature: 'fakeS',
+ policy: 'fakeP',
+ }),
+ 'fakeHandle',
+ true
+ );
+
+ expect(resp).toEqual({ data: {} });
+ expect(methodMocked).toHaveBeenCalledWith('fakeApiUrl/fakeHandle', { params: { key: 'fakeApikey', policy: 'fakeP', signature: 'fakeS', skip_storage: true } });
+ });
+
+ it('should throw on empty handle', () => {
+ expect(() => remove(mockedSession)).toThrowError();
+ });
+
+ it('should call remove with provided session', async () => {
+ const fakeSecurity = {
+ signature: 'fakeS',
+ policy: 'fakeP',
+ };
+
+ // @ts-ignore
+ axios.delete.mockImplementation(() => Promise.resolve({ data: {} }));
+ const resp = await remove(mockedSession, 'fakeHandle', false, fakeSecurity);
+
+ expect(resp).toEqual({ data: {} });
+ });
+
+ it('should throw on empty signature', async () => {
+ const fakeSecurity = {
+ signature: null,
+ policy: 'fakeP',
+ };
+
+ expect(() => remove(mockedSession, 'fakeHandle', false, fakeSecurity)).toThrowError();
+ });
+
+ it('should throw on empty policy', async () => {
+ const fakeSecurity = {
+ signature: 'fakeS',
+ policy: null,
+ };
+
+ expect(() => remove(mockedSession, 'fakeHandle', false, fakeSecurity)).toThrowError();
+ });
+
+ it('should throw on empty policy on session', async () => {
+ return expect(() => remove(mockedSession, 'fakeHandle')).toThrowError();
+ });
});
- it('should call promise catch with error', (done) => {
- const sessionClone = JSON.parse(JSON.stringify(session));
- sessionClone.urls.fileApiUrl = 'somebadurl';
-
- retrieve(sessionClone, filelink, { extension: 'someextension.txt' })
- .then(() => {
- done(new Error('Request passed'));
- })
- .catch((err) => {
- assert.ok(err instanceof Error);
- done();
+ describe('Retrieve', () => {
+ it('should make correct retrieve request (GET)', async () => {
+ const methodMocked = jest.fn(() => Promise.resolve({ data: {} }));
+
+ // @ts-ignore
+ axios.mockImplementation(methodMocked);
+ const resp = await retrieve(mockedSession, 'fakeHandle');
+
+ expect(resp).toEqual({});
+ expect(methodMocked).toHaveBeenCalledWith({ method: 'get', params: { key: 'fakeApikey' }, url: 'fakeApiUrl/fakeHandle' });
+ });
+
+ it('should make correct retrieve request (HEAD)', async () => {
+ const methodMocked = jest.fn(() => Promise.resolve({ data: {}, headers: { type: 'test' } }));
+
+ // @ts-ignore
+ axios.mockImplementation(methodMocked);
+ const resp = await retrieve(mockedSession, 'fakeHandle', {
+ head: true,
});
- });
-});
-describe('remove', function removeFunc() {
- this.timeout(60000);
+ expect(resp).toEqual({ type: 'test' });
+ expect(methodMocked).toHaveBeenCalledWith({ method: 'head', params: { key: 'fakeApikey' }, url: 'fakeApiUrl/fakeHandle' });
+ });
- it('should throw an error if no handle is set', () => {
- assert.throws(() => remove(secureSession));
- });
+ it('should make correct retrieve request with provided security', async () => {
+ const methodMocked = jest.fn(() => Promise.resolve({ data: {} }));
- it('should throw an error if client is not secured', () => {
- assert.throws(() => remove(session, 'fakehandle'));
- });
+ const fakeSecurity = {
+ signature: 'fakeS',
+ policy: 'fakeP',
+ };
+
+ // @ts-ignore
+ axios.mockImplementation(methodMocked);
+ const resp = await retrieve(mockedSession, 'fakeHandle', {}, fakeSecurity);
- it('should get an ok response with a valid handle', (done) => {
- // have to create a file before we can test deleting it
- storeURL(secureSession, ENV.urls.testImageUrl)
- .then((res: any) => {
- const handle = res.handle;
- remove(secureSession, handle)
- .then((result: any) => {
- assert.equal(result.statusCode, 200);
- done();
- })
- .catch((err) => {
- done(err);
- });
- })
- .catch((err) => {
- done(err);
+ expect(resp).toEqual({});
+ expect(methodMocked).toHaveBeenCalledWith({
+ method: 'get',
+ params: { key: 'fakeApikey', policy: 'fakeP', signature: 'fakeS' },
+ url: 'fakeApiUrl/fakeHandle',
});
- });
+ });
+
+ it('should make correct retrieve request with extension', async () => {
+ const methodMocked = jest.fn(() => Promise.resolve({ data: {} }));
- it('should get an ok response when skip_storage is true', (done) => {
- // have to create a file before we can test deleting it
- storeURL(secureSession, ENV.urls.testImageUrl)
- .then((res: any) => {
- const handle = res.handle;
- remove(secureSession, handle, true)
- .then((result: any) => {
- assert.equal(result.statusCode, 200);
- done();
- })
- .catch((err) => {
- done(err);
- });
- })
- .catch((err) => {
- done(err);
+ // @ts-ignore
+ axios.mockImplementation(methodMocked);
+ const resp = await retrieve(mockedSession, 'fakeHandle', {
+ extension: 'txt',
});
- });
- it('should call promise catch with error', (done) => {
- const sessionClone = JSON.parse(JSON.stringify(secureSession));
- sessionClone.urls.fileApiUrl = 'somebadurl';
-
- storeURL(secureSession, ENV.urls.testImageUrl)
- .then((res: any) => {
- const handle = res.handle;
-
- remove(sessionClone, handle)
- .then(() => {
- done(new Error('Request passed'));
- })
- .catch((err) => {
- assert.ok(err instanceof Error);
- done();
- });
- })
- .catch((err) => {
- done(err);
+ expect(resp).toEqual({});
+ expect(methodMocked).toHaveBeenCalledWith({ method: 'get', params: { key: 'fakeApikey' }, url: 'fakeApiUrl/fakeHandle+txt' });
+ });
+
+ it('should make correct retrieve request with metadata', async () => {
+ const methodMocked = jest.fn(() => Promise.resolve({ data: {} }));
+
+ // @ts-ignore
+ axios.mockImplementation(methodMocked);
+ const resp = await retrieve(mockedSession, 'fakeHandle', {
+ metadata: true,
});
+
+ expect(resp).toEqual({});
+ expect(methodMocked).toHaveBeenCalledWith({ method: 'get', params: { key: 'fakeApikey' }, url: 'fakeApiUrl/fakeHandle/metadata' });
+ });
+
+ it('should throw an error on empty handle', () => {
+ return expect(() => retrieve(mockedSession, '')).toThrowError();
+ });
+
+ it('should throw an error worng options provided', () => {
+ return expect(() => retrieve(mockedSession, 'fakeHandle', {
+ // @ts-ignore
+ test: 123,
+ })).toThrowError('Invalid retrieve params');
+ });
+
+ it('should not throw an error worng options provided', () => {
+ return expect(() => retrieve(mockedSession, 'fakeHandle', {
+ metadata: true,
+ })).not.toThrowError('Invalid retrieve params');
+ });
+
+ it('should throw an error when metadata and head is provided', () => {
+ return expect(() => retrieve(mockedSession, 'fakeHandle', {
+ metadata: true,
+ head: true,
+ })).toThrowError();
+ });
});
});
diff --git a/src/lib/api/file.ts b/src/lib/api/file.ts
index 0a1d7aba..91c4ee6b 100644
--- a/src/lib/api/file.ts
+++ b/src/lib/api/file.ts
@@ -15,10 +15,11 @@
* limitations under the License.
*/
-import * as t from 'tcomb-validation';
import { Security, Session } from '../client';
import { request } from './request';
-import { checkOptions, removeEmpty } from '../utils';
+import { removeEmpty } from '../utils';
+import { FilestackError } from './../../filestack_error';
+import { getValidator, MetadataParamsSchema, RetrieveParamsSchema } from './../../schema';
/**
* Remove given file
@@ -30,11 +31,11 @@ import { checkOptions, removeEmpty } from '../utils';
*/
export const remove = (session: Session, handle?: string, skipStorage?: boolean, security?: Security): Promise => {
if (!handle || typeof handle !== 'string') {
- throw new Error('A valid Filestack handle is required for remove');
+ throw new FilestackError('A valid Filestack handle is required for remove');
}
if (!(session.policy && session.signature) && (!security || !(security.policy && security.signature))) {
- throw new Error('Security policy and signature are required for remove');
+ throw new FilestackError('Security policy and signature are required for remove');
}
const fileApiUrl = session.urls.fileApiUrl;
@@ -49,17 +50,8 @@ export const remove = (session: Session, handle?: string, skipStorage?: boolean,
options.skip_storage = true;
}
- return new Promise((resolve, reject) => {
- request
- .delete(baseURL)
- .query(options)
- .end((err: any, res: any) => {
- if (err) {
- reject(err);
- } else {
- resolve(res);
- }
- });
+ return request.delete(baseURL, {
+ params: removeEmpty(options),
});
};
@@ -96,32 +88,14 @@ export interface MetadataOptions {
*/
export const metadata = (session: Session, handle?: string, opts?: MetadataOptions, security?: Security): Promise => {
if (!handle || typeof handle !== 'string') {
- throw new Error('A valid Filestack handle is required for metadata');
+ throw new FilestackError('A valid Filestack handle is required for metadata');
}
- const allowed = [
- { name: 'size', type: t.Boolean },
- { name: 'mimetype', type: t.Boolean },
- { name: 'filename', type: t.Boolean },
- { name: 'width', type: t.Boolean },
- { name: 'height', type: t.Boolean },
- { name: 'uploaded', type: t.Boolean },
- { name: 'writeable', type: t.Boolean },
- { name: 'cloud', type: t.Boolean },
- { name: 'sourceUrl', type: t.Boolean },
- { name: 'md5', type: t.Boolean },
- { name: 'sha1', type: t.Boolean },
- { name: 'sha224', type: t.Boolean },
- { name: 'sha256', type: t.Boolean },
- { name: 'sha384', type: t.Boolean },
- { name: 'sha512', type: t.Boolean },
- { name: 'location', type: t.Boolean },
- { name: 'path', type: t.Boolean },
- { name: 'container', type: t.Boolean },
- { name: 'exif', type: t.Boolean },
- ];
-
- checkOptions('metadata', allowed, opts);
+ const validateRes = getValidator(MetadataParamsSchema)(opts);
+
+ if (validateRes.errors.length) {
+ throw new FilestackError(`Invalid metadata params`, validateRes.errors);
+ }
const options: any = { ...opts };
options.source_url = options.sourceUrl; // source_url is snake_case
@@ -131,18 +105,9 @@ export const metadata = (session: Session, handle?: string, opts?: MetadataOptio
const baseURL = `${session.urls.fileApiUrl}/${handle}/metadata`;
return new Promise((resolve, reject) => {
request
- .get(baseURL)
- .query(removeEmpty(options))
- .end((err: Error, res: any) => {
- if (err) {
- return reject(err);
- }
-
- resolve({
- ...res.body,
- handle,
- });
- });
+ .get(baseURL, { params: removeEmpty(options) })
+ .then(res => resolve({ ...res.data, handle }))
+ .catch(reject);
});
};
@@ -179,38 +144,26 @@ export interface RetrieveOptions {
* @param options
* @param security
*/
-export const retrieve = (session: Session,
- handle: string,
- options: RetrieveOptions = {},
- security?: Security): Promise => {
- if (!handle
- || handle.length === 0
- || typeof handle !== 'string') {
-
- throw new Error('File handle is required');
+export const retrieve = (session: Session, handle: string, options: RetrieveOptions = {}, security?: Security): Promise => {
+ if (!handle || handle.length === 0 || typeof handle !== 'string') {
+ throw new FilestackError('File handle is required');
}
- const allowed = [
- { name: 'metadata', type: t.Boolean },
- { name: 'head', type: t.Boolean },
- { name: 'dl', type: t.Boolean },
- { name: 'cache', type: t.Boolean },
- { name: 'extension', type: t.String },
- ];
+ const validateRes = getValidator(RetrieveParamsSchema)(options);
- checkOptions('retrieveOptions', allowed, options);
+ if (validateRes.errors.length) {
+ throw new FilestackError(`Invalid retrieve params`, validateRes.errors);
+ }
const requestOptions: any = { ...options };
requestOptions.key = session.apikey;
- requestOptions.policy = security && security.policy || session.policy;
- requestOptions.signature = security && security.signature || session.signature;
+ requestOptions.policy = (security && security.policy) || session.policy;
+ requestOptions.signature = (security && security.signature) || session.signature;
let method: ERequestMethod = ERequestMethod.get;
- let responseType = EResponseType.blob;
if (requestOptions.head) {
method = ERequestMethod.head;
- responseType = EResponseType.json;
delete requestOptions.head;
}
@@ -224,10 +177,9 @@ export const retrieve = (session: Session,
let metadata;
if (requestOptions.metadata) {
if (method === ERequestMethod.head) {
- throw new Error('Head and metadata options cannot be used together');
+ throw new FilestackError('Head and metadata options cannot be used together');
}
- responseType = EResponseType.json;
metadata = requestOptions.metadata;
delete requestOptions.metadata;
}
@@ -235,19 +187,12 @@ export const retrieve = (session: Session,
const baseURL = `${session.urls.fileApiUrl}/${handle}` + (extension ? `+${extension}` : '') + (metadata ? '/metadata' : '');
return new Promise((resolve, reject) => {
- request[method](baseURL)
- .query(requestOptions)
- .responseType(responseType)
- .end((err: Error, res: any) => {
- if (err) {
- return reject(err);
- }
-
- if (method === ERequestMethod.head) {
- return resolve(res.headers);
- }
-
- resolve(res.body);
- });
+ request({
+ url: baseURL,
+ method,
+ params: removeEmpty(requestOptions),
+ })
+ .then(res => resolve(method === ERequestMethod.head ? res.headers : res.data))
+ .catch(reject);
});
};
diff --git a/src/lib/api/preview.spec.browser.ts b/src/lib/api/preview.spec.browser.ts
new file mode 100644
index 00000000..b35c0dde
--- /dev/null
+++ b/src/lib/api/preview.spec.browser.ts
@@ -0,0 +1,123 @@
+/*
+ * Copyright (c) 2018 by Filestack.
+ * Some rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the 'License');
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an 'AS IS' BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import { preview, getUrl } from './preview';
+
+const mockAppendChild = jest.fn();
+
+const defaultSession = {
+ 'apikey': 'TEST_API_KEY',
+ 'urls': {
+ 'fileApiUrl': 'https://www.filestackapi.com/api/file',
+ 'uploadApiUrl': 'https://upload.filestackapi.com',
+ 'cloudApiUrl': 'https://cloud.filestackapi.com',
+ 'cdnUrl': 'https://cdn.filestackcontent.com',
+ 'pickerUrl': 'https://static.filestackapi.com/picker/1.4.4/picker.js',
+ },
+};
+
+describe('api:upload:preview', () => {
+ beforeEach(() => {
+ spyOn(window, 'open').and.returnValue(true);
+
+ spyOn(document, 'createElement').and.returnValue({
+ src: '',
+ width: '',
+ height: '',
+ });
+
+ spyOn(document, 'getElementById').and.callFake((id) => {
+ let obj;
+
+ if (id === 'testId') {
+ obj = { appendChild: mockAppendChild };
+ }
+
+ return obj;
+ });
+ });
+
+ describe('preview', () => {
+ it('should open a proper url with preview of a file', () => {
+ const handle = 'testHandle';
+ preview(defaultSession, handle);
+ expect(window.open).toBeCalledTimes(1);
+ expect(window.open).toBeCalledWith('https://cdn.filestackcontent.com/preview/testHandle', 'testHandle');
+ });
+
+ it('should open a proper url with preview of a file with src handle', () => {
+ const handle = 'src://test123/test.jpg';
+ preview(defaultSession, handle);
+
+ expect(window.open).toBeCalledTimes(1);
+ expect(window.open).toBeCalledWith('https://cdn.filestackcontent.com/TEST_API_KEY/preview/src://test123/test.jpg', 'src://test123/test.jpg');
+ });
+
+ it('should open iframe inside provided options.id', () => {
+ const handle = 'src://test123/test.jpg';
+ const options = {
+ id: 'testId',
+ css: 'customCss',
+ };
+
+ preview(defaultSession, handle, options);
+ const expected = { 'height': '100%', 'width': '100%', 'src': 'https://cdn.filestackcontent.com/TEST_API_KEY/preview=css:%22customCss%22/src://test123/test.jpg' };
+ expect(mockAppendChild).toBeCalledTimes(1);
+ expect(mockAppendChild).toBeCalledWith(expected);
+ });
+
+ it('should throw an error when handle is not provided', () => {
+ expect(() => { preview(defaultSession); }).toThrow('A valid Filestack handle or storage alias is required for preview');
+ });
+
+ it('should throw an error when id provided and dom element not found', () => {
+ const handle = 'src://test123/test.jpg';
+ const options = {
+ id: 'testId2',
+ };
+ expect(() => { preview(defaultSession, handle, options); }).toThrow('DOM Element with id "testId2" not found.');
+ });
+
+ it('should throw an error on invalid preview params', () => {
+ const handle = 'src://test123/test.jpg';
+ const options = {
+ id: {},
+ test: 123,
+ };
+ // @ts-ignore
+ expect(() => { preview(defaultSession, handle, options); }).toThrow('Invalid preview params');
+ });
+ });
+
+ describe('getUrl', () => {
+ it('should be able to get url with security', () => {
+ const handle = 'TEST_HANDLE';
+ const options = {
+ id: 'testId2',
+ };
+
+ const security = {
+ policy: 'eyJleHBpcnkiOjE1MjM1OTU2MDAsImNhbGwiOlsicmVhZCIsImNvbnZlcnQiXSwiaGFuZGxlIjoiYmZUTkNpZ1JMcTBRTU9yc0ZLemIifQ==',
+ signature: 'ab1624c9f219ca0118f1af43d21ee87a09a07645c15c9fdbb7447818739c2b8b',
+ };
+
+ const result = getUrl(defaultSession, handle, options, security);
+ const expected = 'https://cdn.filestackcontent.com/preview/security=policy:eyJleHBpcnkiOjE1MjM1OTU2MDAsImNhbGwiOlsicmVhZCIsImNvbnZlcnQiXSwiaGFuZGxlIjoiYmZUTkNpZ1JMcTBRTU9yc0ZLemIifQ==,signature:ab1624c9f219ca0118f1af43d21ee87a09a07645c15c9fdbb7447818739c2b8b/TEST_HANDLE';
+ expect(result).toBe(expected);
+ });
+ });
+});
diff --git a/src/lib/api/preview.spec.ts b/src/lib/api/preview.spec.ts
deleted file mode 100644
index 0999772c..00000000
--- a/src/lib/api/preview.spec.ts
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * Copyright (c) 2018 by Filestack.
- * Some rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import * as assert from 'assert';
-import * as sinon from 'sinon';
-import { preview } from './preview';
-
-declare var ENV: any;
-
-const session = ENV.session;
-const secureSession = ENV.secureSession;
-const filelink = ENV.filelink;
-
-describe('preview', () => {
- let appendChildSpy: sinon.SinonSpy;
- let createElementSpy: sinon.SinonStub;
- let documentSpy: sinon.SinonStub;
- let windowOpenSpy: sinon.SinonStub;
-
- beforeEach(() => {
- appendChildSpy = sinon.spy();
- createElementSpy = sinon.stub(document, 'createElement').returns({});
- documentSpy = sinon.stub(document, 'getElementById').returns({
- appendChild: appendChildSpy,
- });
- windowOpenSpy = sinon.stub(window, 'open');
- });
-
- afterEach(() => {
- createElementSpy.restore();
- windowOpenSpy.restore();
- documentSpy.restore();
- });
-
- it('should throw exception when handle is not provided', () => {
- assert.throws(() => preview(session));
- });
-
- it('should open window when no id specified', () => {
- preview(session, filelink);
- assert.ok(windowOpenSpy.calledWith(`${session.urls.cdnUrl}/preview/${filelink}`, filelink));
- });
-
- it('should render to specified element', () => {
- preview(session, filelink, {
- id: 'someId',
- });
-
- assert.ok(createElementSpy.calledWith('iframe'));
- assert.ok(documentSpy.calledWith('someId'));
- assert.ok(appendChildSpy.calledWith({
- src: `${session.urls.cdnUrl}/preview/${filelink}`,
- width: '100%',
- height: '100%',
- }));
- });
-
- it('should throw error when element with given id is not found', () => {
- documentSpy.restore();
- documentSpy = sinon.stub(document, 'getElementById').returns(undefined);
-
- assert.throws(() => preview(session, filelink, {
- id: 'someId',
- }));
- });
-
- it('should add api key to url when storage alias is passed', () => {
- const link = 'src:test';
- preview(session, link);
- assert.ok(windowOpenSpy.calledWith(`${session.urls.cdnUrl}/${session.apikey}/preview/${link}`, link));
- });
-
- it('should work with security {signature, policy}', () => {
- preview(secureSession, filelink);
- const urlSecure = `security=policy:${secureSession.policy},signature:${secureSession.signature}`;
- assert.ok(windowOpenSpy.calledWith(`${session.urls.cdnUrl}/preview/${urlSecure}/${filelink}`, filelink));
- });
-});
diff --git a/src/lib/api/preview.ts b/src/lib/api/preview.ts
index 3abc0688..f5733929 100644
--- a/src/lib/api/preview.ts
+++ b/src/lib/api/preview.ts
@@ -15,9 +15,10 @@
* limitations under the License.
*/
-import * as t from 'tcomb-validation';
import { Security, Session } from '../client';
-import { checkOptions, removeEmpty } from '../utils';
+import { removeEmpty } from '../utils';
+import { getValidator, PreviewParamsSchema } from './../../schema';
+import { FilestackError, FilestackErrorType } from './../../filestack_error';
export interface PreviewOptions {
/**
@@ -63,6 +64,7 @@ export const getUrl = (
if (hasSecurity) {
baseUrl.push(`security=policy:${policy},signature:${signature}`);
}
+
baseUrl.push(handle);
return baseUrl.join('/');
};
@@ -79,17 +81,17 @@ export const preview = (session: Session, handle?: string, opts?: PreviewOptions
if (!handle || typeof handle !== 'string') {
throw new Error('A valid Filestack handle or storage alias is required for preview');
}
- const allowed = [
- { name: 'id', type: t.String },
- { name: 'css', type: t.String },
- ];
- checkOptions('preview', allowed, opts);
+ const validateRes = getValidator(PreviewParamsSchema)(opts);
+
+ if (validateRes.errors.length) {
+ throw new FilestackError(`Invalid preview params`, validateRes.errors, FilestackErrorType.VALIDATION);
+ }
- const options = removeEmpty(opts);
+ const options = removeEmpty(opts || {});
const url = getUrl(session, handle, options);
- if (options.id) {
+ if (options && options.id) {
const id = options.id;
const iframe = document.createElement('iframe');
const domElement = document.getElementById(id);
diff --git a/src/lib/api/request.spec.ts b/src/lib/api/request.spec.ts
index d99cc455..88d8a2db 100644
--- a/src/lib/api/request.spec.ts
+++ b/src/lib/api/request.spec.ts
@@ -15,21 +15,284 @@
* limitations under the License.
*/
-import * as assert from 'assert';
-import * as sinon from 'sinon';
-import { requestWithSource } from './request';
-
-describe('requestWithSource', () => {
- let server: any;
- before(() => {
- server = sinon.fakeServer.create();
+import axios from 'axios';
+import { requestWithSource, postWithRetry } from './request';
+import * as nock from 'nock';
+
+const testHost = 'https://test.com';
+
+const mockPost = jest.fn().mockName('mockPut');
+
+describe('Request', () => {
+ beforeEach(() => {
+ nock(testHost)
+ .persist()
+ .post('/post')
+ .reply(200, function(url, data) {
+ return mockPost(url, JSON.parse(data), this.req.headers);
+ });
+
+ nock(testHost)
+ .post('/fail2')
+ .twice()
+ .reply(501, {
+ code: 'SERVER_ERROR',
+ message: 'Internal Server Error',
+ })
+ .post('/fail2')
+ .once()
+ .reply(200, function(url, data) {
+ return mockPost(url, JSON.parse(data), this.req.headers);
+ });
+
+ mockPost.mockReturnValue({
+ test: 123,
+ });
});
- after(() => {
- server.restore();
+
+ afterEach(() => {
+ mockPost.mockClear();
+ });
+
+ describe('requestWithSource', () => {
+ it('should set correct source', async () => {
+ const res = await requestWithSource().post(`${testHost}/post`, {});
+
+ expect(mockPost).toHaveBeenCalledWith(
+ '/post',
+ {},
+ expect.objectContaining({
+ 'filestack-source': 'JS-@{VERSION}',
+ 'filestack-trace-span': expect.any(String),
+ 'filestack-trace-id': expect.any(String),
+ })
+ );
+
+ expect(res).toEqual(expect.objectContaining({ status: 200 }));
+ });
+
+ it('should respect retry config', async () => {
+ const onRetry = jest.fn().mockName('onRetry');
+
+ nock(testHost)
+ .post('/retrytest')
+ .twice()
+ .replyWithError({
+ message: 'something awful happened',
+ code: 'ECONNRESET',
+ })
+ .post('/retrytest')
+ .once()
+ .reply(200, function(url, data) {
+ return mockPost(url, JSON.parse(data), this.req.headers);
+ });
+
+ const res = await requestWithSource({
+ retry: 2,
+ retryFactor: 2,
+ retryMaxTime: 1000,
+ onRetry,
+ }).post(`${testHost}/retrytest`, {
+ test: 1,
+ });
+
+ expect(onRetry).toHaveBeenCalledTimes(2);
+ expect(res).toEqual(expect.objectContaining({ status: 200 }));
+ });
+
+ it('should run request without params', async () => {
+ const onRetry = jest.fn().mockName('onRetry');
+
+ nock(testHost)
+ .post('/retrytest')
+ .twice()
+ .replyWithError({
+ message: 'something awful happened',
+ code: 'ECONNRESET',
+ })
+ .post('/retrytest')
+ .once()
+ .reply(200, {});
+
+ const res = await requestWithSource({
+ retry: 2,
+ retryFactor: 2,
+ retryMaxTime: 1000,
+ onRetry,
+ }).post(`${testHost}/retrytest`);
+
+ expect(onRetry).toHaveBeenCalledTimes(2);
+ expect(res).toEqual(expect.objectContaining({ status: 200 }));
+ });
});
- it('should insert the Filestack-Source header', () => {
- const req = requestWithSource('post', 'http://testing');
- // @ts-ignore
- assert.ok(req.header['Filestack-Source']);
+
+ describe('postWithRetry', () => {
+ it('should respect user defined headers', async () => {
+ const fields = {
+ test: 1,
+ };
+
+ const headers = {
+ test: 1,
+ };
+
+ await postWithRetry(`${testHost}/post`, fields, { headers });
+
+ expect(mockPost).toHaveBeenCalledWith(
+ '/post',
+ fields,
+ expect.objectContaining({
+ ...headers,
+ 'filestack-source': 'JS-@{VERSION}',
+ 'filestack-trace-span': expect.any(String),
+ 'filestack-trace-id': expect.any(String),
+ })
+ );
+ });
+
+ it('should add default headers if nothing is provided', async () => {
+ const fields = {
+ test: 1,
+ };
+
+ await postWithRetry(`${testHost}/post`, fields);
+
+ expect(mockPost).toHaveBeenCalledWith(
+ '/post',
+ fields,
+ expect.objectContaining({
+ 'filestack-source': 'JS-@{VERSION}',
+ 'filestack-trace-span': expect.any(String),
+ 'filestack-trace-id': expect.any(String),
+ })
+ );
+ });
+
+ it('should respect retry config', async () => {
+ const onRetry = jest.fn().mockName('onRetry');
+
+ const fields = {
+ test: 1,
+ };
+
+ const res = await postWithRetry(
+ `${testHost}/fail2`,
+ fields,
+ {},
+ {
+ retry: 2,
+ retryFactor: 2,
+ retryMaxTime: 1000,
+ onRetry,
+ }
+ );
+
+ expect(mockPost).toHaveBeenCalledWith(
+ '/fail2',
+ fields,
+ expect.objectContaining({
+ 'filestack-source': 'JS-@{VERSION}',
+ 'filestack-trace-span': expect.any(String),
+ 'filestack-trace-id': expect.any(String),
+ })
+ );
+
+ expect(onRetry).toHaveBeenCalledTimes(2);
+ expect(res).toEqual(expect.objectContaining({ status: 200 }));
+ });
+
+ it('should reject on max retry count', () => {
+ return expect(
+ postWithRetry(
+ `${testHost}/fail2`,
+ {},
+ {},
+ {
+ retry: 1,
+ retryFactor: 2,
+ retryMaxTime: 1000,
+ }
+ )
+ ).rejects.toEqual(expect.any(Error));
+ });
+
+ it('should reject on 4xx errors (request errors)', async () => {
+ const onRetry = jest.fn().mockName('onRetry');
+ nock(testHost)
+ .post('/401')
+ .reply(401, {});
+
+ await expect(
+ postWithRetry(
+ `${testHost}/401`,
+ {},
+ {},
+ {
+ retry: 1,
+ retryFactor: 2,
+ retryMaxTime: 1000,
+ onRetry,
+ }
+ )
+ ).rejects.toEqual(expect.any(Error));
+
+ expect(onRetry).not.toHaveBeenCalled();
+ });
+
+ it('should retry on network errors like (ECONNRESET)', async () => {
+ const onRetry = jest.fn().mockName('onRetry');
+ nock(testHost)
+ .post('/fail3')
+ .twice()
+ .replyWithError({
+ message: 'something awful happened',
+ code: 'ECONNRESET',
+ })
+ .post('/fail3')
+ .once()
+ .reply(200, function(url, data) {
+ return mockPost(url, JSON.parse(data), this.req.headers);
+ });
+
+ await expect(
+ postWithRetry(
+ `${testHost}/fail3`,
+ {},
+ {},
+ {
+ retry: 3,
+ retryFactor: 2,
+ retryMaxTime: 1000,
+ onRetry,
+ }
+ )
+ ).resolves.toEqual(expect.objectContaining({ status: 200 }));
+
+ expect(onRetry).toHaveBeenCalledTimes(2);
+ });
+
+ it('should not retry on user cancel request', () => {
+ const onRetry = jest.fn().mockName('onRetry');
+ const CancelToken = axios.CancelToken;
+ const source = CancelToken.source();
+
+ setTimeout(() => source.cancel('user_cancel'), 1);
+
+ return expect(
+ postWithRetry(
+ `${testHost}/fail2`,
+ {},
+ {
+ cancelToken: source.token,
+ },
+ {
+ retry: 3,
+ retryFactor: 2,
+ retryMaxTime: 10000,
+ onRetry,
+ }
+ )
+ ).rejects.toEqual({ message: 'user_cancel' });
+ });
});
});
diff --git a/src/lib/api/request.ts b/src/lib/api/request.ts
index 306d2e6f..c81dc792 100644
--- a/src/lib/api/request.ts
+++ b/src/lib/api/request.ts
@@ -14,8 +14,20 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+import Debug from 'debug';
+import axios, { AxiosError, AxiosInstance, AxiosResponse, AxiosRequestConfig } from 'axios';
+import { uniqueId } from '../utils';
-import * as request from 'superagent';
+const debug = Debug('fs:request');
+
+const RESPONSE_DEBUG_PREFIX = 'x-filestack-';
+
+export interface RetryConfig {
+ retry: number;
+ onRetry?: (requestConfig: any) => void;
+ retryMaxTime: number;
+ retryFactor: number;
+}
/**
*
@@ -23,8 +35,139 @@ import * as request from 'superagent';
* @param method
* @param url
*/
-const requestWithSource = (method: string, url: string): request.SuperAgentRequest => {
- return request[method](url).set('Filestack-Source', 'JS-@{VERSION}');
+export const requestWithSource = (retryConfig?: RetryConfig): AxiosInstance => {
+ const axiosInstance = axios.create({
+ headers: {
+ 'filestack-source': 'JS-@{VERSION}',
+ 'filestack-trace-id': `${Math.floor(Date.now() / 1000)}-${uniqueId()}`,
+ 'filestack-trace-span': `jssdk-${uniqueId()}`,
+ },
+ });
+
+ if (retryConfig) {
+ useRetryPolicy(axiosInstance, retryConfig);
+ }
+
+ useDebugInterceptor(axiosInstance);
+ return axiosInstance;
+};
+
+export const postWithRetry = (url: string, fields: Object, config: AxiosRequestConfig = {}, retryConfig?: RetryConfig): Promise => {
+ debug(`[RequestWithRetry] set fields %O for url ${url}`, fields);
+
+ if (!config.headers) {
+ config.headers = {};
+ }
+
+ config.headers = Object.assign({}, config.headers, {
+ 'filestack-source': 'JS-@{VERSION}',
+ 'filestack-trace-id': `${Math.floor(Date.now() / 1000)}-${uniqueId()}`,
+ 'filestack-trace-span': `jssdk-${uniqueId()}`,
+ });
+
+ const axiosInstance = axios.create();
+
+ if (retryConfig) {
+ useRetryPolicy(axiosInstance, retryConfig);
+ }
+
+ useDebugInterceptor(axiosInstance);
+ return axiosInstance.post(url, fields, config);
+};
+
+export const shouldRetry = (err: AxiosError) => {
+ // we always should retry on network failure
+ switch (err.code) {
+ case 'ECONNRESET':
+ case 'ETIMEDOUT':
+ case 'EADDRINUSE':
+ case 'ESOCKETTIMEDOUT':
+ case 'EPIPE':
+ return true;
+ }
+
+ // if request was not made and there is no response - retry
+ if (!err.response) {
+ return true;
+ }
+
+ // we should retry on all server errors (5xx)
+ if (500 <= err.response.status && err.response.status <= 599) {
+ return true;
+ }
+
+ // we should not retry on other errors (4xx) ie: BadRequest etc
+ return false;
+};
+
+const useDebugInterceptor = (instance) => {
+ /* istanbul ignore next */ // this is internal debug method
+ instance.interceptors.response.use(resp => {
+ if (debug.enabled) {
+ for (let i in resp.headers) {
+ if (!resp.headers.hasOwnProperty(resp.headers) && i.indexOf(RESPONSE_DEBUG_PREFIX) === -1) {
+ continue;
+ }
+
+ debug(`Filestack Response Debug Header - ${i}: ${resp.headers[i]}`);
+ }
+ }
+
+ return resp;
+ });
+};
+
+export const useRetryPolicy = (instance: AxiosInstance, retryConfig: RetryConfig) => {
+ instance.interceptors.request.use(config => {
+ const currentState = config['retry'] || {};
+ currentState.retryCount = currentState.retryCount || 0;
+ config['retry'] = currentState;
+ return config;
+ });
+
+ return instance.interceptors.response.use(null, err => {
+ const requestConfig = err.config;
+
+ if (axios.isCancel(err)) {
+ debug('[Retry] Upload canceled by user');
+ return Promise.reject(err);
+ }
+
+ debug(`[Retry] Start retry process code: ${err.code}, %O`, err);
+
+ /* istanbul ignore next */
+ if (!requestConfig) {
+ debug(`[Retry] Retry config not found, Rejecting request`);
+ return Promise.reject(err);
+ }
+
+ const state = requestConfig.retry;
+
+ if (!shouldRetry(err)) {
+ debug(`[Retry] Response code not allowing to retry`);
+ return Promise.reject(err);
+ }
+
+ requestConfig.retry.retryCount += 1;
+
+ if (requestConfig.retry.retryCount > retryConfig.retry) {
+ debug(`[Retry] Max retry count reached ${requestConfig.retry.retryCount}`);
+ return Promise.reject(err);
+ }
+
+ const retryDelay = Math.max(Math.min(retryConfig.retryMaxTime, (retryConfig.retryFactor ** state.retryCount) * 1000), 1);
+
+ debug(`[Retry] Retrying request to ${requestConfig.url}, count ${state.retryCount} of ${retryConfig.retry} - Delay: ${retryDelay}`);
+ return new Promise(resolve => setTimeout(() => {
+ if (typeof retryConfig.onRetry === 'function') {
+ retryConfig.onRetry.call(instance, requestConfig);
+ }
+
+ resolve(instance(requestConfig));
+ }, retryDelay));
+ });
};
-export { request, requestWithSource };
+// set global debug inspector
+useDebugInterceptor(axios);
+export { axios as request };
diff --git a/src/lib/api/security.spec.browser.ts b/src/lib/api/security.spec.browser.ts
new file mode 100644
index 00000000..33110e0f
--- /dev/null
+++ b/src/lib/api/security.spec.browser.ts
@@ -0,0 +1,38 @@
+/*
+ * Copyright (c) 2019 by Filestack.
+ * Some rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the 'License');
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an 'AS IS' BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import { getSecurity } from './security';
+import * as utils from './../utils';
+
+describe('api/security', () => {
+ beforeAll(() => {
+ spyOn(utils, 'isNode').and.returnValue(false);
+ });
+
+ describe('getSecurity', () => {
+ it('should throw not supported error', () => {
+ const policy = {
+ expiry: 1523595600,
+ call: ['pick', 'read', 'stat', 'write', 'writeUrl', 'store', 'convert', 'remove', 'exif', 'runWorkflow'],
+ handle: 'TEST_HANDLE',
+ };
+ const appSecret = 'testAppSecret';
+
+ expect(() => getSecurity(policy, appSecret)).toThrowError('getSecurity is only supported in nodejs');
+ });
+ });
+});
diff --git a/src/lib/api/security.spec.node.ts b/src/lib/api/security.spec.node.ts
new file mode 100644
index 00000000..aa9de1bf
--- /dev/null
+++ b/src/lib/api/security.spec.node.ts
@@ -0,0 +1,48 @@
+/*
+ * Copyright (c) 2019 by Filestack.
+ * Some rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the 'License');
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an 'AS IS' BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import { getSecurity } from './security';
+
+describe('api:security', () => {
+ describe('getSecurity', () => {
+ it('should create a proper object with policy & signature', () => {
+ const policy = {
+ expiry: 1523595600,
+ call: ['pick', 'read', 'stat', 'write', 'writeUrl', 'store', 'convert', 'remove', 'exif', 'runWorkflow'],
+ handle: 'TEST_HANDLE',
+ };
+ const appSecret = 'testAppSecret';
+ const result = getSecurity(policy, appSecret);
+ const expected = {
+ policy: 'eyJleHBpcnkiOjE1MjM1OTU2MDAsImNhbGwiOlsicGljayIsInJlYWQiLCJzdGF0Iiwid3JpdGUiLCJ3cml0ZVVybCIsInN0b3JlIiwiY29udmVydCIsInJlbW92ZSIsImV4aWYiLCJydW5Xb3JrZmxvdyJdLCJoYW5kbGUiOiJURVNUX0hBTkRMRSJ9',
+ signature: '7df0536104cdcc16370ad6494cdbda30c9773a62eec6e5153fa539544db6206e',
+ };
+ expect(result).toEqual(expected);
+ });
+
+ it('should throw error on invalid security params', () => {
+ const policy = {
+ expiry: 'test',
+ call: ['pick1', 'read', 'stat', 'write', 'writeUrl', 'store', 'convert', 'remove', 'exif', 'runWorkflow'],
+ handle: 'TEST_HANDLE',
+ };
+ const appSecret = 'testAppSecret';
+ // @ts-ignore
+ expect(() => getSecurity(policy, appSecret)).toThrowError('Invalid security params');
+ });
+ });
+});
diff --git a/src/lib/api/security.ts b/src/lib/api/security.ts
index 68b36943..aa48e6c7 100644
--- a/src/lib/api/security.ts
+++ b/src/lib/api/security.ts
@@ -15,10 +15,10 @@
* limitations under the License.
*/
-import * as crypto from 'crypto';
import { Security } from '../client';
-import { checkOptions } from '../utils';
-import * as t from 'tcomb-validation';
+import { FilestackError, FilestackErrorType } from './../../filestack_error';
+import { getValidator, SecurityParamsSchema } from './../../schema';
+import { isNode, requireNode } from '../utils';
/**
* Configures a security policy
@@ -26,7 +26,7 @@ import * as t from 'tcomb-validation';
* @see https://www.filestack.com/docs/concepts/security
*/
export interface SecurityOptions {
- expiry?: number;
+ expiry: number;
call?: any[];
handle?: string;
url?: string;
@@ -51,21 +51,18 @@ export interface SecurityOptions {
* @param appSecret
*/
export const getSecurity = (policyOptions: SecurityOptions, appSecret: string): Security => {
- const allowed = [
- { name: 'expiry', type: t.Integer },
- { name: 'call', type: t.list(t.enums.of('pick read stat write writeUrl store convert remove exif')) },
- { name: 'handle', type: t.String },
- { name: 'url', type: t.String },
- { name: 'maxSize', type: t.Integer },
- { name: 'minSize', type: t.Integer },
- { name: 'path', type: t.String },
- { name: 'container', type: t.String },
- ];
+ if (!isNode()) {
+ throw new Error('getSecurity is only supported in nodejs');
+ }
- checkOptions('Policy options', allowed, policyOptions);
+ const validateRes = getValidator(SecurityParamsSchema)(policyOptions);
- const policy = new Buffer(JSON.stringify(policyOptions)).toString('base64');
- const signature = crypto.createHmac('sha256', appSecret)
+ if (validateRes.errors.length) {
+ throw new FilestackError(`Invalid security params`, validateRes.errors, FilestackErrorType.VALIDATION);
+ }
+
+ const policy = Buffer.from(JSON.stringify(policyOptions)).toString('base64');
+ const signature = requireNode('crypto').createHmac('sha256', appSecret)
.update(policy)
.digest('hex');
diff --git a/src/lib/api/store.spec.ts b/src/lib/api/store.spec.ts
index f1107f50..8d0db45b 100644
--- a/src/lib/api/store.spec.ts
+++ b/src/lib/api/store.spec.ts
@@ -15,146 +15,108 @@
* limitations under the License.
*/
-import * as assert from 'assert';
import { storeURL } from './store';
+import { Session } from '../client';
+import { Filelink } from './../filelink';
+import * as nock from 'nock';
+
+const testHost = 'https://test.com';
+const testUrl = 'testurl';
+const mockGet = jest.fn().mockName('mockGet');
+const mockHandle = 'mockHandle';
+
+jest.mock('./../filelink');
+
+const mockedSession: Session = {
+ apikey: 'fakeApikey',
+ urls: {
+ cdnUrl: testHost,
+ fileApiUrl: 'fakeApiUrl',
+ uploadApiUrl: 'fakeUploadApiUrl',
+ cloudApiUrl: 'fakeCloudApiUrl',
+ pickerUrl: 'fakePickerUrl',
+ },
+};
+
+const responseObj = {
+ filename: 'testFilename',
+ handle: 'testHandle',
+ url: 'testUrl',
+ type: 'testMimetype',
+ mimetype: 'testMimetype',
+ size: 1,
+};
+
+describe('StoreURL', () => {
+ beforeAll(() => {
+ spyOn(Filelink.prototype, 'toString').and.returnValue(`${testHost}/${testUrl}`);
+ mockGet.mockReturnValue(responseObj);
+
+ nock(testHost)
+ .persist()
+ .get(`/${testUrl}`)
+ .reply(200, mockGet);
+ });
-declare var ENV: any;
-const session = ENV.session;
-const secureSession = ENV.secureSession;
+ it('should call correct store method', async () => {
+ expect(await storeURL(mockedSession, 'http://test.com')).toEqual(responseObj);
+ });
-describe('storeURL', function storeFunc() {
- this.timeout(30000);
+ it('should respect passed security and policy', async () => {
+ const fakeSecurity = {
+ signature: 'fakeS',
+ policy: 'fakeP',
+ };
- it('should throw an error if no url is set', () => {
- assert.throws(() => storeURL(session));
- });
+ const res = await storeURL(mockedSession, mockHandle, {}, null, fakeSecurity);
- it('should handle store without params', (done) => {
- const options = {};
- storeURL(session, ENV.urls.testImageUrl, options)
- .then((res) => {
- assert.ok(res);
- done();
- })
- .catch((err) => {
- done(err);
- });
+ expect(Filelink.prototype.security).toBeCalledWith(fakeSecurity);
+ expect(res).toEqual(responseObj);
});
- it('should support uppercase string options', (done) => {
- const options = { location: 'S3' };
- storeURL(session, ENV.urls.testImageUrl, options)
- .then((res) => {
- assert.ok(res);
- done();
- })
- .catch((err) => {
- done(err);
- });
+ it('should throw error on wrong store params', () => {
+ expect(() => storeURL(mockedSession, mockHandle, {
+ // @ts-ignore
+ test: 123,
+ })).toThrowError('Invalid store params');
});
- it('should replace ":" and "," with "_" in url', (done) => {
- const options = { filename: 'test:t,est.jpg' };
- storeURL(session, ENV.urls.testImageUrl, options)
- .then((res) => {
- assert.ok(res);
- done();
- })
- .catch((err) => {
- done(err);
- });
- });
+ it('should respect token cancel', () => {
+ const token = {
+ cancel: () => jest.fn(),
+ };
- it('should upload file correctly with "/" in path', (done) => {
- const options = { filename: 'test.jpg' , path: 'test/path'};
- storeURL(session, ENV.urls.testImageUrl, options)
- .then((res) => {
- assert.ok(res);
- done();
- })
- .catch((err) => {
- done(err);
- });
+ setImmediate(() => token.cancel());
+ return expect(storeURL(mockedSession, mockHandle, {}, token)).rejects.toEqual({});
});
- it('should get an ok response with a valid url', (done) => {
- storeURL(session, ENV.urls.testImageUrl)
- .then((res) => {
- assert.ok(res);
- done();
- })
- .catch((err) => {
- done(err);
- });
+ it('should throw an error when missing url', async () => {
+ expect(() => storeURL(mockedSession)).toThrowError();
});
- it('should get an ok response with a valid url and security', (done) => {
- storeURL(secureSession, ENV.urls.testImageUrl)
- .then((res) => {
- assert.ok(res);
- done();
- })
- .catch((err) => {
- done(err);
- });
- });
+ it('should rejects on request error', () => {
+ // @ts-ignore
+ Filelink.prototype.toString.and.returnValue(`${testHost}/${testUrl}/404`);
- it('should return the handle and mimetype as part of the response', (done) => {
- storeURL(session, ENV.urls.testImageUrl)
- .then((res: any) => {
- assert.ok(res.handle);
- assert.equal(res.url.split('/').pop(), res.handle);
- assert.equal(res.mimetype, res.type);
- done();
- })
- .catch((err) => {
- done(err);
- });
- });
+ nock(testHost)
+ .get(`/${testUrl}/404`)
+ .reply(404);
- it('should reject on request error', (done) => {
- const sessionCopy = JSON.parse(JSON.stringify(session));
- sessionCopy.urls.cdnUrl = 'http://www.somebadurl.com';
-
- storeURL(sessionCopy, ENV.urls.testImageUrl)
- .then(() => {
- done(new Error('Success shouldnt be called'));
- })
- .catch((err) => {
- assert.ok(err instanceof Error);
- done();
- });
+ return expect(storeURL(mockedSession, mockHandle, {})).rejects.toEqual(expect.any(Error));
});
- it('should cancel request', (done) => {
- const token = {
- cancel: () => console.log('cancel not implemented'),
- };
+ it('should rejects on wrong body structure', async () => {
+ // @ts-ignore
+ Filelink.prototype.toString.and.returnValue(`${testHost}/${testUrl}/body`);
- setTimeout(() => {
- storeURL(session, ENV.urls.testImageUrl, {}, token)
- .then(() => {
- done(new Error('Success shouldnt be called'));
- })
- .catch((err) => {
- assert.ok(err instanceof Error);
- done();
- });
- }, 10);
-
- setTimeout(() => token.cancel(), 12);
- });
+ mockGet.mockReturnValue({
+ test: 123,
+ });
- it('should support workflows', (done) => {
- const options = { workflows: ['test', { id: 'test' }] };
- storeURL(session, ENV.urls.testImageUrl, options)
- .then((res) => {
- assert.ok(res);
- done();
- })
- .catch((err) => {
- done(err);
- });
- });
+ nock(testHost)
+ .get(`/${testUrl}/body`)
+ .reply(200, mockGet);
+ return expect(storeURL(mockedSession, mockHandle, {})).rejects.toEqual(expect.any(Error));
+ });
});
diff --git a/src/lib/api/store.ts b/src/lib/api/store.ts
index 74407636..659fe7ff 100644
--- a/src/lib/api/store.ts
+++ b/src/lib/api/store.ts
@@ -1,4 +1,3 @@
-import { Filelink } from './../filelink';
/*
* Copyright (c) 2018 by Filestack.
* Some rights reserved.
@@ -17,8 +16,10 @@ import { Filelink } from './../filelink';
*/
import { request } from './request';
-import { Security, StoreOptions } from '../client';
-import { transform } from './transform';
+import { Security, Session } from '../client';
+import { Filelink, StoreParams } from './../filelink';
+import { FilestackError } from './../../filestack_error';
+import { getValidator, StoreParamsSchema } from './../../schema';
/**
*
@@ -30,26 +31,28 @@ import { transform } from './transform';
* @param security
*/
export const storeURL = (
- session: any,
+ session: Session,
url?: string,
- opts?: StoreOptions,
+ opts?: StoreParams,
token?: any,
security?: Security
-): Promise<{}> => {
+): Promise => {
if (!url || typeof url !== 'string') {
throw new Error('url is required for storeURL');
}
+ const validateRes = getValidator(StoreParamsSchema)(opts);
+
+ if (validateRes.errors.length) {
+ throw new FilestackError(`Invalid store params`, validateRes.errors);
+ }
+
session.policy = security && security.policy || session.policy;
session.signature = security && security.signature || session.signature;
const baseURL = new Filelink(url, session.apikey);
baseURL.setCname(session.cname);
- // baseURL.setBase64(true); // Enable it after fix in mocks
-
- if (session.urls.cdnUrl.indexOf('localhost') > -1 || session.urls.cdnUrl.indexOf('badurl') > -1) {
- baseURL.setCustomDomain(session.urls.cdnUrl);
- }
+ baseURL.setBase64(true);
if (session.policy && session.signature) {
baseURL.security({
@@ -59,30 +62,21 @@ export const storeURL = (
}
baseURL.store(opts);
+ let options: any = {};
- // const baseURL = transform(session, url, {
- // store : opts || {},
- // });
- return new Promise((resolve, reject) => {
- const req = request.get(baseURL.toString());
+ if (token) {
+ const CancelToken = request.CancelToken;
+ const source = CancelToken.source();
+ token.cancel = source.cancel;
- if (token) {
- token.cancel = () => {
- req.abort();
- reject(new Error('Upload cancelled'));
- };
- }
+ options.cancelToken = source.token;
+ }
- return req.then((res: any) => {
- if (res.body && res.body.url) {
- const handle = res.body.url.split('/').pop();
- const response = { ...res.body, handle, mimetype: res.body.type };
- return resolve(response);
- }
+ return request.get(baseURL.toString(), options).then((res) => {
+ if (res.data && res.data.handle) {
+ return { ...res.data, mimetype: res.data.type };
+ }
- return resolve(res.body);
- }).catch((err) => {
- reject(err);
- });
+ throw new FilestackError(`Invalid store response ${JSON.stringify(res.data)}`);
});
};
diff --git a/src/lib/api/transform.spec.ts b/src/lib/api/transform.spec.ts
index d5ff946d..88e4b20e 100644
--- a/src/lib/api/transform.spec.ts
+++ b/src/lib/api/transform.spec.ts
@@ -14,678 +14,124 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-
-import * as assert from 'assert';
-import * as t from './transform';
-import { btoa } from 'abab';
-
-declare var ENV: any;
-const session = ENV.session;
-const secureSession = ENV.secureSession;
-const cdnUrl = session.urls.cdnUrl;
-
-describe('transform', () => {
- const transform = (url: string, options: any, b64: boolean = false) => t.transform(session, url, options, b64);
- const transformSecure = (url: string, options: any, b64: boolean = false) => t.transform(secureSession, url, options, b64);
-
- const url = ENV.filelink;
-
- it('should throw an error if invalid options are provided', () => {
- assert.throws(() => transform(url, { invalidKey: 'ignored' }));
- });
-
- it('should construct URL parameters from specified transforms', () => {
- const testConfig = {
- vignette: {
- amount: 100,
- blurmode: 'linear',
- },
- shadow: {
- blur: 10,
- opacity: 35,
- vector: [25, 25],
- },
- };
- const result = transform(url, testConfig);
- const expected = `${cdnUrl}/${session.apikey}/vignette=amount:100,blurmode:linear/shadow=blur:10,opacity:35,vector:[25,25]/${url}`;
- assert.equal(result, expected);
- });
-
- it('should construct URL parameters properly with primitive options', () => {
- const testConfig = {
- polaroid: true,
- flip: false,
- flop: true,
- compress: false,
- };
-
- const result = transform(url, testConfig);
- const expected = `${cdnUrl}/${session.apikey}/polaroid/flop/${url}`;
- assert.equal(result, expected);
- });
-
- it('should construct URL with security properly', () => {
- const testConfig = {
- polaroid: true,
- };
- const result = transformSecure(url, testConfig);
- const expected = `${cdnUrl}/${secureSession.apikey}/polaroid/security=policy:${secureSession.policy},signature:${secureSession.signature}/${url}`;
- assert.equal(result, expected);
- });
-
- it('should return base url if there are no transforms', () => {
- const testConfig = {};
- const result = transform(url, testConfig);
-
- assert.equal(result, `${cdnUrl}/${session.apikey}/${url}`);
- });
-
- it('should return flatten nested options array', () => {
- const testConfig = {
- partial_pixelate: {
- objects: [[10, 20, 200, 250], [275, 91, 500, 557]],
- },
- };
-
- const result = transform(url, testConfig);
- const expected = `${cdnUrl}/${session.apikey}/partial_pixelate=objects:[[10,20,200,250],[275,91,500,557]]/${url}`;
- assert.equal(result, expected);
- });
-
- it('should handle camelCased params', () => {
- const testConfig = {
- partialPixelate: {
- objects: [[10, 20, 200, 250], [275, 91, 500, 557]],
- },
- };
-
- const result = transform(url, testConfig);
- const expected = `${cdnUrl}/${session.apikey}/partial_pixelate=objects:[[10,20,200,250],[275,91,500,557]]/${url}`;
- assert.equal(result, expected);
- });
-
- it('should handle storage with url handle', () => {
- const storeAlias = 'https://test.com/file.js';
-
- const testConfig = {
- polaroid: true,
- flip: false,
- flop: true,
- };
-
- const result = transform(storeAlias, testConfig);
- const expected = `${cdnUrl}/${session.apikey}/polaroid/flop/"${storeAlias}"`;
- assert.equal(result, expected);
- });
-
- it('should handle storage with http url handle', () => {
- const storeAlias = 'http://test.com/file.js';
-
- const testConfig = {
- polaroid: true,
- flip: false,
- flop: true,
- };
-
- const result = transform(storeAlias, testConfig);
- const expected = `${cdnUrl}/${session.apikey}/polaroid/flop/"${storeAlias}"`;
- assert.equal(result, expected);
- });
-
- it('should throw exception when storage alias is provided without apikey', () => {
- const sessionCopy = JSON.parse(JSON.stringify(session));
- sessionCopy.apikey = null;
- const testConfig = {};
-
- assert.throws(() => t.transform(sessionCopy, 'src:test', testConfig));
- });
-
- it('should handle store aliases', () => {
- const storeAlias = 'src://my-s3/mydoc.pdf';
-
- const testConfig = {
- polaroid: true,
- flip: false,
- flop: true,
- };
-
- const result = transform(storeAlias, testConfig);
- const expected = `${cdnUrl}/${session.apikey}/polaroid/flop/"${storeAlias}"`;
- assert.equal(result, expected);
- });
-
- it('should validate float ranges in options', () => {
- const testConfig = {
- detect_faces: {
- minsize: 0.2,
- },
- };
-
- const result = transform(url, testConfig);
- const expected = `${cdnUrl}/${session.apikey}/detect_faces=minsize:0.2/${url}`;
- assert.equal(result, expected);
- });
-
- it('should return base url with handle if there is empty transform option', () => {
- const testConfig = {
- polaroid: {},
- };
-
- const result = transform(url, testConfig);
- assert.equal(result, `${cdnUrl}/${session.apikey}/polaroid/${url}`);
- });
-
- it('should handle store without params', () => {
- const options = {};
- const result = transform(url, { store: options });
-
- assert.equal(result, `${cdnUrl}/${session.apikey}/store/${url}`);
- });
-
- it('should return correct store URL with "/" in path', () => {
- const options = { filename: 'test.jpg' , path: 'test/path' };
- const result = transform(url, { store: options });
-
- assert.equal(result, `${cdnUrl}/${session.apikey}/store=filename:test.jpg,path:"test/path"/${url}`);
- });
-
- it('should handle upper cased path', () => {
- const options = { filename: 'test.jpg' , path: 'tEsT/path' };
- const result = transform(url, { store: options });
-
- assert.equal(result, `${cdnUrl}/${session.apikey}/store=filename:test.jpg,path:"tEsT/path"/${url}`);
- });
-
- describe('blackwhite', () => {
- it('should construct valid parameters', () => {
- const testConfig = {
- blackwhite: {
- threshold: 100,
- },
- };
-
- const result = transform(url, testConfig);
- const expected = `${cdnUrl}/${session.apikey}/blackwhite=threshold:100/${url}`;
- assert.equal(result, expected);
- });
- });
-
- describe('crop', () => {
- it('should construct valid parameters', () => {
- const testConfig = {
- crop: {
- dim: [0, 0, 200, 200],
- },
- };
-
- const result = transform(url, testConfig);
- const expected = `${cdnUrl}/${session.apikey}/crop=dim:[0,0,200,200]/${url}`;
- assert.equal(result, expected);
- });
- });
-
- describe('rotate', () => {
- it('should construct valid parameters', () => {
- const testConfig: t.TransformOptions = {
- rotate: {
- deg: 'exif',
- },
- };
-
- const result = transform(url, testConfig);
- const expected = `${cdnUrl}/${session.apikey}/rotate=deg:exif/${url}`;
- assert.equal(result, expected);
- });
- });
-
- describe('output', () => {
- it('should construct valid parameters', () => {
- const testConfig = {
- output: {
- background: 'black',
- density: 250,
- compress: true,
- },
- };
-
- const result = transform(url, testConfig);
- const expected = `${cdnUrl}/${session.apikey}/output=background:black,density:250,compress:true/${url}`;
- assert.equal(result, expected);
- });
- });
-
- describe('cache', () => {
- it('should construct valid parameters', () => {
- const testConfig = {
- cache: false,
- };
-
- const result = transform(url, testConfig);
- const expected = `${cdnUrl}/${session.apikey}/cache=false/${url}`;
- assert.equal(result, expected);
-
- const testConfig2 = {
- cache: {
- expiry: 12345,
- },
- };
-
- const result2 = transform(url, testConfig2);
- const expected2 = `${cdnUrl}/${session.apikey}/cache=expiry:12345/${url}`;
- assert.equal(result2, expected2);
- });
- });
-
- describe('compress', () => {
- it('should construct valid parameters', () => {
- const testConfig = {
- compress: true,
- };
-
- const result = transform(url, testConfig);
- const expected = `${cdnUrl}/${session.apikey}/compress/${url}`;
- assert.equal(result, expected);
- });
- });
-});
-
-describe('transform b64', () => {
- const transform = (url: string, options: any, b64: boolean = true) => t.transform(session, url, options, b64);
- const transformSecure = (url: string, options: any, b64: boolean = true) => t.transform(secureSession, url, options, b64);
-
- const url = ENV.filelink;
-
- it('should throw an error if invalid options are provided', () => {
- assert.throws(() => transform(url, { invalidKey: 'ignored' }));
- });
-
- it('should construct URL parameters from specified transforms', () => {
- const testConfig = {
- vignette: {
- amount: 100,
- blurmode: 'linear',
- },
- shadow: {
- blur: 10,
- opacity: 35,
- vector: [25, 25],
- },
- };
-
- const result = transform(url, testConfig, true);
- const expected = `${cdnUrl}/${session.apikey}/b64/${btoa(JSON.stringify([
- {
- name: 'vignette',
- params: {
- amount: 100,
- blurmode: 'linear',
- },
- }, {
- name: 'shadow',
- params: {
- blur: 10,
- opacity: 35,
- vector: [25, 25],
- },
- },
- ]))}/b64://${btoa(url)}`;
- assert.equal(result, expected);
- });
-
- it('should construct URL parameters properly with primitive options', () => {
- const testConfig = {
- polaroid: true,
- flip: false,
- flop: true,
- compress: false,
- };
-
- const result = transform(url, testConfig);
- const expected = `${cdnUrl}/${session.apikey}/b64/${btoa(JSON.stringify([
- {
- name: 'polaroid',
- },
- {
- name: 'flop',
- },
- ]))}/b64://${btoa(url)}`;
- assert.equal(result, expected);
- });
-
- it('should construct URL with security properly', () => {
- const testConfig = {
- polaroid: true,
- };
-
- const result = transformSecure(url, testConfig);
- const expected = `${cdnUrl}/${secureSession.apikey}/b64/${btoa(JSON.stringify([
- {
- name: 'polaroid',
- },
- {
- name: 'security',
- params: {
- policy: secureSession.policy,
- signature: secureSession.signature,
- },
- },
- ]))}/b64://${btoa(url)}`;
-
- assert.equal(result, expected);
- });
-
- it('should return base url if there are no transforms', () => {
- const testConfig = {};
- const result = transform(url, testConfig);
-
- const expected = `${cdnUrl}/${session.apikey}/b64://${btoa(url)}`;
-
- assert.equal(result, expected);
- });
-
- it('should return flatten nested options array', () => {
- const testConfig = {
- partial_pixelate: {
- objects: [[10, 20, 200, 250], [275, 91, 500, 557]],
- },
- };
-
- const result = transform(url, testConfig);
- const expected = `${cdnUrl}/${session.apikey}/b64/${btoa(JSON.stringify([
- {
- name: 'partial_pixelate',
- params: {
- objects: [[10, 20, 200, 250], [275, 91, 500, 557]],
- },
- },
- ]))}/b64://${btoa(url)}`;
-
- assert.equal(result, expected);
- });
-
- it('should handle camelCased params', () => {
- const testConfig = {
- partialPixelate: {
- objects: [[10, 20, 200, 250], [275, 91, 500, 557]],
- },
- };
-
- const result = transform(url, testConfig);
- const expected = `${cdnUrl}/${session.apikey}/b64/${btoa(JSON.stringify([
+import { transform } from './transform';
+import { config } from './../../config';
+import { Filelink } from './../filelink';
+
+jest.mock('./../filelink');
+
+const defaultApikey = 'EXAMPLE_API_KEY';
+const defaultHandle = 'EXAMPLE_HANDLE';
+const defaultSecurity = {
+ policy: 'examplePolicy',
+ signature: 'exampleSignature',
+};
+
+const sessionURls = config.urls;
+const defaultSession = {
+ apikey: defaultApikey,
+ urls: sessionURls,
+};
+
+describe('OldTransforms', () => {
+ it('should pass params to Filelink class', () => {
+ transform(
+ defaultSession,
+ defaultHandle,
{
- name: 'partial_pixelate',
- params: {
- objects: [[10, 20, 200, 250], [275, 91, 500, 557]],
+ partial_pixelate: {
+ amount: 2,
},
- },
- ]))}/b64://${btoa(url)}`;
-
- assert.equal(result, expected);
- });
-
- it('should handle transform with url handle', () => {
- const storeAlias = 'https://test.com/file.js';
-
- const testConfig = {
- polaroid: true,
- flip: false,
- flop: true,
- };
-
- const result = transform(storeAlias, testConfig);
- const expected = `${cdnUrl}/${session.apikey}/b64/${btoa(JSON.stringify([
- {
- name: 'polaroid',
- }, {
- name: 'flop',
- },
- ]))}/b64://${btoa(storeAlias)}`;
+ }
+ );
- assert.equal(result, expected);
+ expect(Filelink.prototype.addTask).toHaveBeenCalledWith('partial_pixelate', {
+ amount: 2,
+ });
});
- it('should handle store aliases', () => {
- const storeAlias = 'src://my-s3/mydoc.pdf';
-
- const testConfig = {
- polaroid: true,
- flip: false,
- flop: true,
- };
-
- const result = transform(storeAlias, testConfig);
- const expected = `${cdnUrl}/${session.apikey}/b64/${btoa(JSON.stringify([
+ it('should respect security params', () => {
+ transform(
{
- name: 'polaroid',
- }, {
- name: 'flop',
- },
- ]))}/b64://${btoa(storeAlias)}`;
-
- assert.equal(result, expected);
- });
-
- it('should validate float ranges in options', () => {
- const testConfig = {
- detect_faces: {
- minsize: 0.2,
+ ...defaultSession,
+ ...defaultSecurity,
},
- };
-
- const result = transform(url, testConfig);
- const expected = `${cdnUrl}/${session.apikey}/b64/${btoa(JSON.stringify([
+ defaultHandle,
{
- name: 'detect_faces',
- params: {
- minsize: 0.2,
+ partial_pixelate: {
+ amount: 2,
},
- },
- ]))}/b64://${btoa(url)}`;
+ }
+ );
- assert.equal(result, expected);
+ expect(Filelink.prototype.addTask).toHaveBeenCalledWith('security', defaultSecurity);
});
- it('should return base url with handle if there is empty transform option', () => {
- const testConfig = {
- polaroid: {},
- };
-
- const result = transform(url, testConfig);
-
- const expected = `${cdnUrl}/${session.apikey}/b64/${btoa(JSON.stringify([
+ it('should respect cache=false transformation', () => {
+ transform(
+ defaultSession,
+ defaultHandle,
{
- name: 'polaroid',
- },
- ]))}/b64://${btoa(url)}`;
-
- assert.equal(result, expected);
- });
-
- it('should handle store without params', () => {
- const options = {};
- const result = transform(url, { store: options });
-
- const expected = `${cdnUrl}/${session.apikey}/b64/${btoa(JSON.stringify([
- {
- name: 'store',
- },
- ]))}/b64://${btoa(url)}`;
+ // @ts-ignore
+ cache: false,
+ }
+ );
- assert.equal(result, expected);
+ expect(Filelink.prototype.addTask).toHaveBeenCalledWith('cache', false);
});
- it('should return correct store URL with "/" in path', () => {
- const options = { filename: 'test.jpg' , path: 'test/path' };
- const result = transform(url, { store: options });
-
- const expected = `${cdnUrl}/${session.apikey}/b64/${btoa(JSON.stringify([
+ it('should remove falsy parameters transformation', () => {
+ transform(
+ defaultSession,
+ defaultHandle,
{
- name: 'store',
- params: options,
- },
- ]))}/b64://${btoa(url)}`;
+ flip: false,
+ }
+ );
- assert.equal(result, expected);
+ expect(Filelink.prototype.addTask).not.toHaveBeenCalledWith('flip', false);
});
- it('should handle upper cased path', () => {
- const options = { filename: 'test.jpg' , path: 'tEsT/path '};
- const result = transform(url, { store: options });
-
- const expected = `${cdnUrl}/${session.apikey}/b64/${btoa(JSON.stringify([
+ it('should change cammel case to snake case transformations', () => {
+ transform(
+ defaultSession,
+ defaultHandle,
{
- name: 'store',
- params: options,
- },
- ]))}/b64://${btoa(url)}`;
-
- assert.equal(result, expected);
- });
-
- describe('blackwhite', () => {
- it('should construct valid parameters', () => {
- const testConfig = {
- blackwhite: {
- threshold: 100,
+ // @ts-ignore
+ partialPixelate: {
+ amount: 2,
},
- };
+ }
+ );
- const result = transform(url, testConfig);
- const expected = `${cdnUrl}/${session.apikey}/b64/${btoa(JSON.stringify([
- {
- name: 'blackwhite',
- params: {
- threshold: 100,
- },
- },
- ]))}/b64://${btoa(url)}`;
-
- assert.equal(result, expected);
+ expect(Filelink.prototype.addTask).toHaveBeenCalledWith('partial_pixelate', {
+ amount: 2,
});
});
- describe('crop', () => {
- it('should construct valid parameters', () => {
- const testConfig = {
- crop: {
- dim: [0, 0, 200, 200],
- },
- };
+ it('return call toString on filelink when params are empty', () => {
+ const testUrl = 'nanana';
+ spyOn(Filelink.prototype, 'toString').and.callFake(() => testUrl);
- const result = transform(url, testConfig);
- const expected = `${cdnUrl}/${session.apikey}/b64/${btoa(JSON.stringify([
- {
- name: 'crop',
- params: {
- dim: [0, 0, 200, 200],
- },
- },
- ]))}/b64://${btoa(url)}`;
-
- assert.equal(result, expected);
- });
+ expect(transform(
+ defaultSession,
+ defaultHandle
+ )).toEqual(testUrl);
});
- describe('rotate', () => {
- it('should construct valid parameters', () => {
- const testConfig: t.TransformOptions = {
- rotate: {
- deg: 'exif',
- },
- };
-
- const result = transform(url, testConfig);
-
- const expected = `${cdnUrl}/${session.apikey}/b64/${btoa(JSON.stringify([
- {
- name: 'rotate',
- params: {
- deg: 'exif',
- },
- },
- ]))}/b64://${btoa(url)}`;
-
- assert.equal(result, expected);
- });
- });
-
- describe('output', () => {
- it('should construct valid parameters', () => {
- const testConfig = {
- output: {
- background: 'black',
- density: 250,
- compress: true,
- },
- };
-
- const result = transform(url, testConfig);
-
- const expected = `${cdnUrl}/${session.apikey}/b64/${btoa(JSON.stringify([
- {
- name: 'output',
- params: {
- background: 'black',
- density: 250,
- compress: true,
- },
- },
- ]))}/b64://${btoa(url)}`;
-
- assert.equal(result, expected);
- });
- });
-
- describe('cache', () => {
- it('should construct valid parameters', () => {
- const testConfig = {
- cache: false,
- };
-
- const result = transform(url, testConfig);
- const expected = `${cdnUrl}/${session.apikey}/b64/${btoa(JSON.stringify([
- {
- name: 'cache',
- params: false,
- },
- ]))}/b64://${btoa(url)}`;
-
- assert.equal(result, expected);
-
- const testConfig2 = {
- cache: {
- expiry: 12345,
- },
- };
-
- const result2 = transform(url, testConfig2);
- const expected2 = `${cdnUrl}/${session.apikey}/b64/${btoa(JSON.stringify([
- {
- name: 'cache',
- params: {
- expiry: 12345,
- },
- },
- ]))}/b64://${btoa(url)}`;
-
- assert.equal(result2, expected2);
- });
- });
-
- describe('compress', () => {
- it('should construct valid parameters', () => {
- const testConfig = {
- compress: true,
- };
-
- const result = transform(url, testConfig);
- const expected = `${cdnUrl}/${session.apikey}/b64/${btoa(JSON.stringify([
- {
- name: 'compress',
+ it('should enable base64 on filelink', () => {
+ transform(
+ defaultSession,
+ defaultHandle,
+ {
+ // @ts-ignore
+ partialPixelate: {
+ amount: 2,
},
- ]))}/b64://${btoa(url)}`;
+ },
+ true
+ );
- assert.equal(result, expected);
- });
+ expect(Filelink.prototype.setBase64).toHaveBeenCalledWith(true);
});
});
diff --git a/src/lib/api/transform.ts b/src/lib/api/transform.ts
index 2e71c90b..d1692194 100644
--- a/src/lib/api/transform.ts
+++ b/src/lib/api/transform.ts
@@ -429,7 +429,7 @@ export interface TransformOptions {
* result => https://cdn.filestackcontent.com/partial_pixelate=objects:[[10,20,200,250],[275,91,500,557]]/testfile
*
* ```js
- * // snakeCase
+ * // snake_case
* console.log(transform(session, {
* partial_pixelate: {
* objects: [[10, 20, 200, 250], [275, 91, 500, 557]],
@@ -459,10 +459,6 @@ export const transform = (session: Session, url: string | string[], options: Tra
filelink.setCname(session.cname);
filelink.setBase64(b64);
- if (session.urls.cdnUrl.indexOf('localhost') > -1) {
- filelink.setCustomDomain(session.urls.cdnUrl);
- }
-
Object.keys(options).forEach((key: keyof TransformOptions) => {
if (typeof options[key] === 'boolean' && !options[key] && key !== 'cache') {
return;
diff --git a/src/lib/api/upload/file.spec.ts b/src/lib/api/upload/file.spec.ts
new file mode 100644
index 00000000..019517e1
--- /dev/null
+++ b/src/lib/api/upload/file.spec.ts
@@ -0,0 +1,129 @@
+/*
+ * Copyright (c) 2019 by Filestack.
+ * Some rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the 'License');
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an 'AS IS' BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+import { FileInstance, File } from './file';
+
+describe('Api/Upload/File', () => {
+ const testBuff = Buffer.from('test');
+ const fileName = 'text.txt';
+ const type = 'text/plain';
+
+ const fi: FileInstance = {
+ name: fileName,
+ type,
+ size: testBuff.byteLength,
+ buffer: testBuff,
+ };
+
+ let file;
+
+ beforeEach(() => {
+ file = new File(Object.assign({}, fi));
+ });
+
+ it('Should load correct file without errors', () => {
+ expect(file.filename).toEqual(fileName);
+ expect(file.name).toEqual(fileName);
+
+ expect(file.type).toEqual(type);
+ expect(file.mimetype).toEqual(type);
+
+ expect(file.size).toEqual(testBuff.byteLength);
+ });
+
+ it('should allow to set new name with with sanitization', () => {
+ file.name = 'test123//.txt';
+
+ expect(file.name).toEqual('test123//.txt');
+ });
+
+ it('should set custom name by string and sanitize it', () => {
+ file.customName = 'test123##.txt';
+
+ expect(file.name).toEqual('test123--.txt');
+ });
+
+ it('should set custom name by function and sanitize it', () => {
+ file.customName = () => {
+ return 'test123 ##.txt';
+ };
+
+ expect(file.name).toEqual('test123 --.txt');
+ });
+
+ it('should throw an error when custom name function is not returning string', () => {
+ expect(() => {
+ file.customName = () => {
+ return {};
+ };
+ }).toThrow();
+ });
+
+ it('should return file md5', () => {
+ expect(file.md5).toEqual('CY9rzUYh03PK3k6DJie09g==');
+ });
+
+ it('should return correct parts count for given size', () => {
+ expect(file.getPartsCount(1)).toEqual(file.size);
+ });
+
+ it('should return correct part metadata', () => {
+ expect(file.getPartMetadata(0, 2)).toEqual({ endByte: 2, partNumber: 0, size: 2, startByte: 0 });
+ expect(file.getPartMetadata(1, 2)).toEqual({ endByte: 4, partNumber: 1, size: 2, startByte: 2 });
+ expect(file.getPartMetadata(0, 6)).toEqual({ endByte: 4, partNumber: 0, size: 4, startByte: 0 });
+
+ });
+
+ it('should throw an error when start part is higher than part size ', () => {
+ expect(() => {
+ file.getPartMetadata(1, 6);
+ }).toThrow();
+ });
+
+ it('should return part by part metadata', () => {
+ const meta = file.getPartMetadata(0, 2);
+ const part = file.getPartByMetadata(meta);
+
+ expect(part.buffer.byteLength).toEqual(2);
+ expect(part.md5).toEqual('Vp73JkK+D63XEdakaNaO4Q==');
+ });
+
+ it('should return chunk by part metadata and offset', () => {
+ const meta = file.getPartMetadata(0, 4);
+ const chunk = file.getChunkByMetadata(meta, 1, 2);
+
+ expect(chunk.size).toEqual(2);
+ expect(chunk.md5).toEqual('EkcP5AbUQBfZbqs33WX8FA==');
+ expect(chunk.startByte).toEqual(1);
+ expect(chunk.endByte).toEqual(3);
+ });
+
+ it('should release file buffer', () => {
+ file.release();
+
+ expect(file.buffer).toEqual(undefined);
+ });
+
+ it('should return json representation of the file', () => {
+ const json = JSON.parse(JSON.stringify(file));
+
+ expect(json).toEqual({
+ name: fileName,
+ type,
+ size: file.size,
+ });
+ });
+});
diff --git a/src/lib/api/upload/file.ts b/src/lib/api/upload/file.ts
new file mode 100644
index 00000000..bd3c7fd6
--- /dev/null
+++ b/src/lib/api/upload/file.ts
@@ -0,0 +1,283 @@
+/*
+ * Copyright (c) 2019 by Filestack.
+ * Some rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+import { md5, sanitizeName, SanitizeOptions } from './../../utils';
+
+export interface FileInstance {
+ buffer?: Buffer | ArrayBuffer;
+ name: string;
+ type: string;
+ size: number;
+}
+
+export const enum FileState {
+ INIT = 'Initialized',
+ PROGRESS = 'Progress',
+ STORED = 'Stored',
+ INTRANSIT = 'InTransit',
+ FAILED = 'Failed',
+}
+
+export interface FilePartMetadata {
+ startByte: number;
+ endByte: number;
+ partNumber: number;
+ size: number;
+}
+
+export interface FilePart extends FilePartMetadata {
+ buffer: Buffer | ArrayBuffer;
+ md5: string;
+}
+
+export interface FileChunk extends FilePart {
+ offset: number; // offset for chunk - from part start
+}
+
+/**
+ * File representation to unify file object in nodejs and browser
+ *
+ * @export
+ * @class File
+ */
+export class File {
+
+ private _md5: string;
+
+ public status: FileState;
+
+ public handle: string;
+
+ public url: string;
+
+ public container: string;
+
+ public key: string;
+
+ public workflows: any[];
+
+ constructor(private readonly _file: FileInstance, private readonly _sanitizeOptions?: SanitizeOptions) {
+ this._file.name = sanitizeName(this._file.name, this._sanitizeOptions);
+ }
+
+ /**
+ * Returns file name
+ *
+ * @returns {string}
+ * @memberof File
+ */
+ public get name(): string {
+ return this._file.name;
+ }
+
+ /**
+ * Alias for name getter
+ *
+ * @readonly
+ * @type {string}
+ * @memberof File
+ */
+ public get filename(): string {
+ return this.name;
+ }
+
+ /**
+ * Sets new file name and cleanup extra chars
+ *
+ * @memberof File
+ */
+ public set name(val: string) {
+ this._file.name = sanitizeName(val, this._sanitizeOptions);
+ }
+
+ /**
+ * Sets custom name using string or function
+ * Name will be sanitized
+ *
+ * @memberof File
+ */
+ public set customName(val: ((file: this) => string) | string) {
+ switch (typeof val) {
+ case 'string':
+ this.name = val;
+ break;
+ case 'function':
+ const newName = val(this);
+ if (typeof newName !== 'string') {
+ throw new Error(`Name function must return a string. Current return type is ${typeof val}`);
+ }
+
+ this.name = val(this);
+ break;
+ }
+ }
+
+ /**
+ * Returns file type
+ *
+ * @default 'application/octet-stream'
+ * @returns {string}
+ * @memberof File
+ */
+ public get type(): string {
+ /* istanbul ignore next */
+ return this._file.type || 'application/octet-stream';
+ }
+
+ /**
+ * Alias for file type
+ *
+ * @readonly
+ * @type {string}
+ * @memberof File
+ */
+ public get mimetype(): string {
+ return this.type;
+ }
+
+ /**
+ * Returns file buffer
+ *
+ * @returns {(Buffer | ArrayBuffer)}
+ * @memberof File
+ */
+ public get buffer(): Buffer | ArrayBuffer {
+ return this._file.buffer;
+ }
+
+ /**
+ * Returns file size
+ *
+ * @returns {number}
+ * @memberof File
+ */
+ public get size(): number {
+ return this._file.size;
+ }
+
+ /**
+ * Returns file md5 checksum
+ *
+ * @returns {string}
+ * @memberof File
+ */
+ public get md5(): string {
+ if (!this._md5) {
+ // cache md5 file value
+ this._md5 = md5(this._file.buffer);
+ }
+
+ return this._md5;
+ }
+
+ /**
+ * Returns number of parts according to part size
+ *
+ * @param {number} size - part size in bytes
+ * @returns {number}
+ * @memberof File
+ */
+ public getPartsCount (size: number): number {
+ return Math.ceil(this._file.buffer.byteLength / size);
+ }
+
+ /**
+ * Returns part metadata
+ *
+ * @param {number} [partNum=0]
+ * @param {*} size
+ * @returns {FilePartMetadata}
+ * @memberof File
+ */
+ public getPartMetadata (partNum: number, size): FilePartMetadata {
+ const startByte = size * partNum;
+
+ if (startByte > this._file.buffer.byteLength) {
+ throw new Error(`Start byte of the part is higher than buffer size`);
+ }
+
+ const endByte = Math.min(startByte + size, this._file.buffer.byteLength);
+
+ return {
+ partNumber: partNum,
+ startByte,
+ endByte,
+ size: endByte - startByte,
+ };
+ }
+
+ /**
+ * Returns part metadata + buffer
+ *
+ * @param {FilePartMetadata} meta
+ * @returns {FilePart}
+ * @memberof File
+ */
+ public getPartByMetadata(meta: FilePartMetadata): FilePart {
+ let slice = this._file.buffer.slice(meta.startByte, meta.endByte);
+
+ return {
+ ...meta,
+ buffer: slice,
+ md5: md5(slice),
+ };
+ }
+
+ /**
+ * Returns part chunk
+ *
+ * @param {FilePartMetadata} meta
+ * @param {number} offset
+ * @param {number} chunkSize
+ * @returns {FilePart}
+ * @memberof File
+ */
+ public getChunkByMetadata(meta: FilePartMetadata, offset: number, chunkSize: number): FileChunk {
+ const startByte = meta.startByte + offset;
+ const endByte = Math.min(startByte + chunkSize, meta.endByte);
+
+ let slice = this._file.buffer.slice(startByte, endByte);
+
+ return {
+ ...meta,
+ buffer: slice,
+ md5: md5(slice),
+ size: slice.byteLength,
+ startByte,
+ endByte,
+ offset,
+ };
+ }
+ /**
+ * Cleanup file buffer to release memory
+ *
+ * @memberof File
+ */
+ public release() {
+ delete this._file.buffer;
+ }
+
+ public toJSON() {
+ return {
+ name: this.name,
+ status: this.status,
+ type: this.type,
+ size: this.size,
+ url: this.url,
+ handle: this.handle,
+ };
+ }
+}
diff --git a/src/lib/api/upload/file_tools.spec.browser.ts b/src/lib/api/upload/file_tools.spec.browser.ts
new file mode 100644
index 00000000..1b18c7fe
--- /dev/null
+++ b/src/lib/api/upload/file_tools.spec.browser.ts
@@ -0,0 +1,99 @@
+/*
+ * Copyright (c) 2019 by Filestack.
+ * Some rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the 'License');
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an 'AS IS' BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+import { getFile } from './file_tools';
+import * as utils from './../../utils';
+
+const createFile = (size = 44320, name = 'test.png', type = 'image/png') => new File([new ArrayBuffer(size)], name , { type: type });
+
+const sanitizeOptions = jest.fn().mockName('sanitizeOptions');
+
+const base64Svg = 'PHN2ZyBoZWlnaHQ9IjEwMCIgd2lkdGg9IjEwMCI+CiAgPGNpcmNsZSBjeD0iNTAiIGN5PSI1MCIgcj0iNDAiIHN0cm9rZT0iYmxhY2siIHN0cm9rZS13aWR0aD0iMyIgZmlsbD0icmVkIiAvPgogIFNvcnJ5LCB5b3VyIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCBpbmxpbmUgU1ZHLiAgCjwvc3ZnPiA=';
+const base64Png = 'iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+M9QDwADhgGAWjR9awAAAABJRU5ErkJggg==';
+const base64Gif = 'R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==';
+
+describe('Api/Upload/FileTools', () => {
+ beforeAll(() => {
+ spyOn(utils, 'isNode').and.returnValue(false);
+
+ spyOn(utils, 'sanitizeName').and.callFake((val, opts) => {
+ sanitizeOptions(opts);
+ return val;
+ });
+ });
+
+ describe('getFileBrowser', () => {
+
+ it('Should handle base64 encoded string (svg)', async () => {
+ return expect((await getFile(base64Svg)).mimetype).toEqual('image/svg+xml');
+ });
+
+ it('Should handle base64 encoded string (png)', async () => {
+ return expect((await getFile(base64Png)).mimetype).toEqual('image/png');
+ });
+
+ it('Should handle base64 encoded string (gif)', async () => {
+ return expect((await getFile(base64Gif)).mimetype).toEqual('image/gif');
+ });
+
+ it('Should handle base64 encoded string with b64 prefix (gif)', async () => {
+ return expect((await getFile(`data:image/gif;base64,${base64Gif}`)).mimetype).toEqual('image/gif');
+ });
+
+ it('Should pass sanitize options to file instance', async () => {
+ const soptions = {
+ replacement: '=',
+ };
+
+ const fileRes = await getFile({
+ file: base64Png,
+ name: 'test<.jpg',
+ }, soptions);
+
+ expect(sanitizeOptions).toHaveBeenCalledWith(soptions);
+ });
+
+ it('Should throw error when random string is provided', () => {
+ return expect(getFile('asdasdfasdf')).rejects.toEqual(new Error('Unsupported input file type'));
+ });
+
+ it('Should handle base64 named file (gif)', async () => {
+ const file = await getFile({
+ file: base64Gif,
+ name: 'test.gif',
+ });
+ expect(file.mimetype).toEqual('image/gif');
+ expect(file.name).toEqual('test.gif');
+ });
+
+ it('Should handle File input type', async () => {
+ const file = await getFile(createFile());
+ expect(file.mimetype).toEqual('image/png');
+ expect(file.name).toEqual('test.png');
+ expect(file.size).toEqual(44320);
+ });
+
+ it('Should handle blob input type', async () => {
+ const file = await getFile(new Blob([new ArrayBuffer(100)], {
+ type: 'image/jpg',
+ }));
+
+ expect(file.mimetype).toEqual('image/jpg');
+ expect(file.name).toEqual(undefined);
+ expect(file.size).toEqual(100);
+ });
+ });
+});
diff --git a/src/lib/api/upload/file_tools.spec.node.ts b/src/lib/api/upload/file_tools.spec.node.ts
new file mode 100644
index 00000000..2b4feb12
--- /dev/null
+++ b/src/lib/api/upload/file_tools.spec.node.ts
@@ -0,0 +1,113 @@
+
+/*
+ * Copyright (c) 2019 by Filestack.
+ * Some rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the 'License');
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an 'AS IS' BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+import { getFile } from './file_tools';
+import * as fs from 'fs';
+import { File as FsFile } from './file';
+
+jest.mock('fs');
+
+const mockedTestFile = Buffer.from('text text');
+const base64Svg = 'PHN2ZyBoZWlnaHQ9IjEwMCIgd2lkdGg9IjEwMCI+CiAgPGNpcmNsZSBjeD0iNTAiIGN5PSI1MCIgcj0iNDAiIHN0cm9rZT0iYmxhY2siIHN0cm9rZS13aWR0aD0iMyIgZmlsbD0icmVkIiAvPgogIFNvcnJ5LCB5b3VyIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCBpbmxpbmUgU1ZHLiAgCjwvc3ZnPiA=';
+
+describe('Api/Upload/FileTools', () => {
+ describe('getFileNode', () => {
+
+ it('Should return file instance for nodejs loaded file from path', async () => {
+ spyOn(fs, 'existsSync').and.returnValue(true);
+ spyOn(fs, 'readFile').and.callFake((path, cb) => {
+ cb(null, mockedTestFile);
+ });
+
+ const file = await getFile('/testfile.txt');
+
+ expect(file.name).toEqual('testfile.txt');
+ expect(file.mimetype).toEqual('text/plain');
+ expect(file.size).toEqual(9);
+ });
+
+ it('Should reject if provided file cannot be read', () => {
+ spyOn(fs, 'existsSync').and.returnValue(true);
+ spyOn(fs, 'readFile').and.callFake((path, cb) => {
+ cb('error');
+ });
+
+ return expect(getFile('/testfile.txt')).rejects.toEqual('error');
+ });
+
+ it('Should return correct mimetype', async () => {
+ jest.unmock('fs');
+
+ const file = await getFile('./package.json');
+ expect(file.mimetype).toEqual('text/plain');
+ });
+
+ it('Should return correct file instance from buffer', async () => {
+ const file = await getFile(mockedTestFile);
+
+ expect(file.size).toEqual(9);
+ expect(file.mimetype).toEqual('text/plain');
+ });
+
+ it('Should handle base64 encoded string', async () => {
+ const file = await getFile(base64Svg);
+ expect(file.mimetype).toEqual('image/svg+xml');
+ });
+
+ it('Should throw error when random string is provided', async () => {
+ return expect(getFile('asdasdfasdf')).rejects.toEqual(new Error('Unsupported input file type'));
+ });
+
+ it('Should pass sanitize options to file instance (buffer)', async () => {
+ const fileRes = await getFile({
+ file: mockedTestFile,
+ name: 'test<.jpg',
+ }, {
+ replacement: '=',
+ });
+
+ expect(fileRes.name).toEqual('test=.jpg');
+ });
+
+ it('Should pass sanitize options to file instance path', async () => {
+ const fileRes = await getFile({
+ file: './package.json',
+ name: 'test<.jpg',
+ }, {
+ replacement: '=',
+ });
+
+ expect(fileRes.name).toEqual('test=.jpg');
+ });
+
+ it('Should handle named file input', async () => {
+ const file = await getFile({
+ name: '123.jpg',
+ file: mockedTestFile,
+ });
+
+ expect(file.name).toEqual('123.jpg');
+ expect(file.size).toEqual(9);
+ expect(file.mimetype).toEqual('text/plain');
+ });
+
+ it('Should reject on unsupported input file type', () => {
+ // @ts-ignore
+ return expect(getFile({})).rejects.toEqual(new Error('Unsupported input file type'));
+ });
+ });
+});
diff --git a/src/lib/api/upload/file_tools.ts b/src/lib/api/upload/file_tools.ts
new file mode 100644
index 00000000..84213ce8
--- /dev/null
+++ b/src/lib/api/upload/file_tools.ts
@@ -0,0 +1,258 @@
+/*
+ * Copyright (c) 2019 by Filestack.
+ * Some rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+import { File as FsFile } from './file';
+import { isNode, SanitizeOptions, requireNode, getMimetype } from './../../utils';
+import { FilestackError } from './../../../filestack_error';
+
+export type RawFile = Blob | Buffer | File | string;
+export type NamedInputFile = {
+ name?: string;
+ file: RawFile;
+};
+
+export type InputFile = RawFile | NamedInputFile;
+
+const base64Regexp = /data:([a-zA-Z]*\/[a-zA-Z]*);base64,([^\"]*)/i;
+
+/**
+ * Check if file is buffer
+ *
+ * @node
+ * @param input
+ */
+const isFileBuffer = (input: InputFile): input is Buffer => Buffer.isBuffer(input);
+
+/**
+ * Check if file is blob
+ * @param input
+ */
+const isFileBlob = (input: InputFile): input is Blob => input.toString() === '[object Blob]';
+
+/**
+ * Check if input is instance of browser file
+ *
+ * @browser
+ * @param input
+ */
+const isFileBrowser = (input: InputFile): input is File => input instanceof File;
+
+/**
+ * Check if file is base64 string
+ *
+ * @param input
+ */
+const isFileBase = (input: InputFile): input is string => {
+ if (typeof input !== 'string') {
+ return false;
+ }
+
+ if (input.indexOf('base64') > -1) {
+ input = input.match(base64Regexp).pop();
+ }
+
+ if (isNode()) {
+ if (Buffer.from(input, 'base64').toString('base64') === input) {
+ return true;
+ }
+
+ return false;
+ }
+
+ try {
+ return btoa(atob(input)) === input;
+ } catch (err) {
+ /* istanbul ignore next */
+ return false;
+ }
+};
+
+/**
+ * Check if file is instance of named interface
+ *
+ * @param input
+ */
+const isFileNamed = (input: InputFile): input is NamedInputFile => input && input['file'] && input['name'];
+
+/**
+ * Check if input is a valid file path
+ *
+ * @node
+ * @param input
+ */
+const isFilePath = (input: InputFile): input is string => requireNode('fs').existsSync(input);
+
+/**
+ * Convert encoded base64 string or dataURI to blob
+ *
+ * @browser
+ * @param b64data String to decode
+ * @param sliceSize Byte quantity to split data into
+ * @private
+ * @returns {Blob}
+ */
+const b64toBlob = (b64Data: string, sliceSize = 512): Blob => {
+ let contentType = '';
+
+ if (b64Data.indexOf('base64') > -1) {
+ const matches = b64Data.match(base64Regexp);
+ b64Data = matches.pop();
+ contentType = matches[1];
+ }
+
+ const byteCharacters = atob(b64Data);
+ const byteArrays: any[] = [];
+
+ for (let offset = 0; offset < byteCharacters.length; offset += sliceSize) {
+ const slice = byteCharacters.slice(offset, offset + sliceSize);
+ const byteNumbers = new Array(slice.length);
+ for (let i = 0; i < slice.length; i += 1) {
+ byteNumbers[i] = slice.charCodeAt(i);
+ }
+
+ byteArrays.push(new Uint8Array(byteNumbers));
+ }
+
+ return new Blob(byteArrays, { type: contentType });
+};
+
+/**
+ * Read file as array buffer
+ *
+ * @browser
+ * @private
+ * @param blob
+ * @returns {Boolean}
+ */
+const readFile = (file): Promise => {
+ return new Promise((resolve, reject) => {
+ /* istanbul ignore next */
+ if (!File || !FileReader || !Blob) {
+ return reject(new FilestackError('The File APIs are not fully supported by your browser'));
+ }
+
+ const reader = new FileReader();
+
+ reader.onloadend = () => resolve(reader.result);
+ reader.onerror = reject;
+ reader.readAsArrayBuffer(file);
+ });
+};
+
+// =================== BROWSER UTILS ===================
+/**
+ * Accepts b64string or blob file
+ *
+ * @browser
+ * @param {*} fileOrString
+ * @returns {Promise}
+ */
+const getFileBrowser = (input: InputFile, sanitizeOptions?: SanitizeOptions): Promise => {
+ let filename;
+ let file: Blob;
+
+ if (isFileNamed(input)) {
+ filename = input.name;
+ input = input.file;
+ }
+
+ if (isFileBrowser(input)) {
+ file = input;
+ filename = input.name;
+ } else if (isFileBase(input)) {
+ file = b64toBlob(input);
+ } else if (isFileBlob(input)) {
+ file = input;
+ } else {
+ return Promise.reject(new FilestackError('Unsupported input file type'));
+ }
+
+ return readFile(file).then(
+ buffer =>
+ new FsFile(
+ {
+ buffer,
+ name: filename,
+ size: buffer.byteLength,
+ type: file.type || getMimetype(new Uint8Array(buffer)),
+ },
+ sanitizeOptions
+ )
+ );
+};
+
+// =================== NODE UTILS ===================
+/**
+ * Accepts Buffer or filepath or base64 string
+ *
+ * @node
+ * @param {*} inputFile
+ * @returns {Promise}
+ */
+const getFileNode = (input: InputFile, sanitizeOptions?: SanitizeOptions): Promise => {
+ let filename;
+
+ if (isFileNamed(input)) {
+ filename = input.name;
+ input = input.file;
+ }
+
+ if (isFilePath(input)) {
+ let path = input;
+
+ return new Promise((resolve, reject) =>
+ requireNode('fs').readFile(path, (err, buffer) => {
+ if (err) {
+ return reject(err);
+ }
+
+ return resolve(
+ new FsFile(
+ {
+ buffer,
+ name: filename || requireNode('path').basename(path),
+ size: buffer.byteLength,
+ type: getMimetype(buffer),
+ },
+ sanitizeOptions
+ )
+ );
+ })
+ );
+ }
+
+ if (isFileBase(input)) {
+ input = Buffer.from(input, 'base64');
+ }
+
+ if (isFileBuffer(input)) {
+ return Promise.resolve(
+ new FsFile(
+ {
+ buffer: input,
+ name: filename,
+ size: input.byteLength,
+ type: getMimetype(input),
+ },
+ sanitizeOptions
+ )
+ );
+ }
+
+ return Promise.reject(new FilestackError('Unsupported input file type'));
+};
+
+export const getFile = (input: InputFile, sanitizeOptions?: SanitizeOptions) => (isNode() ? getFileNode(input, sanitizeOptions) : getFileBrowser(input, sanitizeOptions));
diff --git a/src/lib/api/upload/file_utils.ts b/src/lib/api/upload/file_utils.ts
deleted file mode 100644
index 67674ad1..00000000
--- a/src/lib/api/upload/file_utils.ts
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * Copyright (c) 2018 by Filestack.
- * Some rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import * as fs from 'fs';
-import * as path from 'path';
-// import * as mime from 'mime';
-import * as mimetype from 'file-type';
-import { calcMD5 } from './md5';
-import { Context, PartObj, FileObj } from './types';
-import * as isutf8 from 'isutf8';
-import * as isSvg from 'is-svg';
-
-/**
- * Given a file with a valid descriptor this will return a part object
- * The part object represents a chunk of the file
- * @private
- * @param file File object that contains a descriptor
- * @param part Part object that contains a number field
- * @param config Current upload configuration settings
- */
-export const getPart = (part: PartObj, { config, file }: Context): Promise => {
- return new Promise((resolve) => {
- let length = config.partSize;
- const start = config.partSize * part.number;
-
- if (file.buffer.byteLength < start + length) {
- length = file.buffer.byteLength - start;
- }
-
- const filePart = file.buffer.slice(start, start + length);
- const partObj: PartObj = {
- ...part,
- buffer: filePart,
- size: filePart.byteLength,
- md5: calcMD5(filePart),
- };
-
- return resolve(partObj);
- });
-};
-
-/**
- * Given a file path, returns a file object
- * @private
- * @param inputFile A valid path to a file on your filesystem or buffer.
- */
-export const getFile = (inputFile: string | Buffer): Promise => {
- if (inputFile instanceof Buffer) {
- return Promise.resolve({
- buffer: inputFile,
- name: undefined,
- size: inputFile.byteLength,
- type: getMimetype(inputFile)
- } as FileObj);
- }
-
- return new Promise((resolve, reject) => {
- fs.readFile(inputFile, (err, buffer) => {
- if (err) return reject(err);
- const stats = fs.statSync(inputFile);
- const file = {
- buffer,
- name: path.basename(inputFile),
- size: stats.size,
- type: getMimetype(buffer),
- } as FileObj;
- return resolve(file);
- });
- });
-};
-
-const getMimetype = (buffer) => {
- const meta = mimetype(buffer);
- if (meta) {
- return meta.mime;
- }
-
- if (isSvg(buffer)) {
- return 'image/svg+xml';
- }
-
- if (isutf8(buffer)) {
- return 'text/plain';
- }
-
- return 'application/octet-stream';
-};
diff --git a/src/lib/api/upload/index.ts b/src/lib/api/upload/index.ts
index b05e45d6..c939f50c 100644
--- a/src/lib/api/upload/index.ts
+++ b/src/lib/api/upload/index.ts
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2018 by Filestack.
+ * Copyright (c) 2019 by Filestack.
* Some rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -15,5 +15,7 @@
* limitations under the License.
*/
+export * from './file_tools';
export * from './upload';
+export * from './file';
export * from './types';
diff --git a/src/lib/api/upload/intelligent.ts b/src/lib/api/upload/intelligent.ts
deleted file mode 100644
index d8b0599b..00000000
--- a/src/lib/api/upload/intelligent.ts
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * Copyright (c) 2018 by Filestack.
- * Some rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import { requestWithSource } from '../request';
-import { getLocationURL, getFormData, getHost, getS3PartData, uploadToS3 } from './network';
-import { calcMD5 } from './md5';
-import { PartObj, Context } from './types';
-import { throttle } from '../../utils';
-
-/**
- * Slice a part into smaller chunks
- * @private
- * @param part Part buffer to slice.
- * @param size Size of slices.
- * @returns List of chunks.
- */
-export const slicePartIntoChunks = (part: PartObj, size: number): any[] => {
- let offset = 0;
- const chunks: any[] = [];
- while (offset < part.size) {
- const end = Math.min(offset + size, part.size);
- const buf = part.buffer.slice(offset, end);
- const chunk = {
- buffer: buf,
- offset,
- size: buf.byteLength,
- number: part.number,
- md5: calcMD5(buf),
- };
- chunks.push(chunk);
- offset += size;
- }
- return chunks;
-};
-
-/**
- * Get chunk (of part) metadata and PUT chunk to S3
- * @private
- * @param chunk Chunk object, has offset information
- * @param startParams Parameters returned from start call
- * @param config Upload config
- * @returns {Promise}
- */
-export const uploadChunk = async (chunk: any, ctx: Context): Promise => {
- const { body: s3Data } = await getS3PartData(chunk, ctx);
- let onProgress;
- if (ctx.config.onProgress) {
- /* istanbul ignore next */
- onProgress = throttle((evt: ProgressEvent) => {
- /* istanbul ignore next */
- if (evt.loaded > chunk.loaded) {
- chunk.loaded = evt.loaded;
- }
- }, ctx.config.progressInterval);
- }
- chunk.request = uploadToS3(chunk.buffer, s3Data, onProgress, ctx.config);
- await chunk.request;
- chunk.loaded = chunk.size;
- return chunk.request;
-};
-
-/**
- * Commits single part (/commit) for intelligent ingestion (only called after all chunks have been uploaded)
- * @private
- * @param file File being uploaded
- * @param part Part object
- * @param startParams Parameters returned from start call
- * @param config Upload config
- * @returns {Promise}
- */
-export const commitPart = (part: PartObj, ctx: Context): Promise => {
- const cfg = ctx.config;
- /* istanbul ignore next */
- const host = getHost(cfg.host) || getLocationURL(ctx.params.location_url);
- const fields = {
- apikey: cfg.apikey,
- part: part.number + 1,
- size: ctx.file.size,
- ...ctx.params,
- };
- const formData = getFormData(fields, cfg);
- return requestWithSource('post', `${host}/multipart/commit`)
- .timeout(cfg.timeout)
- .field(formData);
-};
diff --git a/src/lib/api/upload/is_mobile.ts b/src/lib/api/upload/is_mobile.ts
deleted file mode 100644
index adad1392..00000000
--- a/src/lib/api/upload/is_mobile.ts
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright (c) 2018 by Filestack.
- * Some rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * Check is browser is mobile (only browser)
- * returns false in nodejs env
- *
- * @private
- */
-export const isMobile = () => false;
diff --git a/src/lib/api/upload/network.ts b/src/lib/api/upload/network.ts
deleted file mode 100644
index f5f38b8c..00000000
--- a/src/lib/api/upload/network.ts
+++ /dev/null
@@ -1,219 +0,0 @@
-/*
- * Copyright (c) 2018 by Filestack.
- * Some rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import { requestWithSource, request } from '../request';
-import { getName } from './utils';
-import { Context, PartObj, UploadConfig } from './types';
-
-/**
- * @private
- */
-/* istanbul ignore next */
-export const getHost = (host?: string) => {
- return process.env.TEST_ENV === 'unit' && host;
-};
-
-/**
- * @private
- */
-/* istanbul ignore next */
-export const getLocationURL = (url: string) => {
- return url && `https://${url}`;
-};
-
-/**
- * Generates multi-part fields for all requests
- * @private
- * @param fields Object containing form data keys
- * @param config Upload config
- */
-export const getFormData = (fields: any, { store }: UploadConfig): {} => {
- const fd: any = {};
- Object.keys(fields).forEach((key: string) => {
- if (typeof fields[key] === 'object') {
- fields[key] = JSON.stringify(fields[key]);
- }
-
- if (fields[key]) {
- fd[key] = fields[key];
- }
- });
-
- Object.keys(store).forEach((key: string) => {
- if (typeof store[key] === 'object') {
- store[key] = JSON.stringify(store[key]);
- }
-
- if (store[key]) {
- fd[key] = store[key];
- }
- });
- return fd;
-};
-
-/**
- * Starts the multi-part upload flow (/multipart/start)
- * @private
- * @param file Valid File instance
- * @param config Upload config
- * @returns {Promise}
- */
-export const start = ({ config, file }: Context): Promise => {
-
- const fields: any = {
- apikey: config.apikey,
- filename: getName(file, config),
- mimetype: config.mimetype || file.type || 'application/octet-stream',
- size: file.size,
- };
- // Security
- if (config.policy && config.signature) {
- fields.policy = config.policy;
- fields.signature = config.signature;
- }
- // Intelligent Ingestion
- if (config.intelligent) {
- fields.multipart = true;
- }
- const formData = getFormData(fields, config);
- return requestWithSource('post', `${config.host}/multipart/start`)
- .timeout(config.timeout)
- .field(formData);
-};
-
-/**
- * Gets the S3 upload params for current part (/multipart/upload)
- * @private
- * @param startParams Parameters returned from start call
- * @param partNumber Current part number (1 - 10000)
- * @param size Size of current part in bytes
- * @param md5 MD5 hash of part
- * @param config Upload config
- * @param offset Current offset if chunking a part.
- */
-export const getS3PartData = (part: PartObj, { config, params }: Context): Promise => {
- /* istanbul ignore next */
- const host = getHost(config.host) || getLocationURL(params.location_url);
- const locationRegion = params.location_region;
-
- const fields = {
- apikey: config.apikey,
- part: part.number + 1,
- size: part.size,
- md5: part.md5,
- ...params,
- };
-
- // Intelligent Ingestion
- if (part.offset !== undefined) {
- fields.multipart = true;
- fields.offset = part.offset === 0 ? '0' : part.offset;
- }
- const formData = getFormData(fields, config);
- const req = requestWithSource('post', `${host}/multipart/upload`);
- /* istanbul ignore next */
- if (locationRegion) {
- req.set('Filestack-Upload-Region', locationRegion);
- }
- req.timeout(config.timeout);
- req.field(formData);
- return new Promise((resolve, reject) => {
- req.end((err: Error, res: any) => {
- if (err) return reject(err);
- return resolve(res);
- });
- });
-};
-
-/**
- * Uploads bytes directly to S3 with HTTP PUT
- * @private
- * @param part ArrayBuffer with part data
- * @param params Params for this part returned by getS3PartData response
- * @param onProgress A function to be called on progress event for this part
- * @param config
- */
-export const uploadToS3 = (part: ArrayBuffer, params: any, onProgress: any, cfg: UploadConfig): Promise => {
- /* istanbul ignore next */
- const host = getHost(`${cfg.host}/fakeS3`) || params.url;
- const timeout = cfg.timeout || (part.byteLength / 100);
- // console.log(part.byteLength );
- const req = request
- .put(host)
- .set(params.headers)
- .timeout(timeout)
- .send(part);
-
- // Don't call progress handler if user didn't specify a callback
- if (onProgress) {
- return req.on('progress', onProgress);
- }
- return req;
-};
-
-/**
- * Convert array of Etags into format for /multipart/complete call
- * @private
- * @param etags Array of Etag strings
- */
-const formatETags = (etags: any): string => etags.map((tag: string, idx: number) => `${idx + 1}:${tag}`).join(';');
-
-/**
- * Completes upload flow (/multipart/complete)
- * @private
- * @param file File being uploaded
- * @param etags An array of etags from each S3 part
- * @param startParams Parameters returned from start call
- * @param config Upload config
- */
-export const complete = (etags: string, { config, file, params }: Context): Promise => {
- /* istanbul ignore next */
- const host = getHost(config.host) || getLocationURL(params.location_url);
- const locationRegion = params.location_region;
-
- const fields = {
- apikey: config.apikey,
- size: file.size,
- filename: getName(file, config),
- mimetype: config.mimetype || file.type || 'application/octet-stream',
- parts: formatETags(etags),
- ...params,
- };
-
- // Intelligent Ingestion
- if (config.intelligent) {
- fields.multipart = true;
- delete fields.parts;
- }
-
- // Security
- if (config.policy && config.signature) {
- fields.policy = config.policy;
- fields.signature = config.signature;
- }
-
- const formData = getFormData(fields, config);
-
- const req = requestWithSource('post', `${host}/multipart/complete`);
- /* istanbul ignore next */
- if (locationRegion) {
- req.set('Filestack-Upload-Region', locationRegion);
- }
- req.timeout(config.timeout);
-
- return req.field(formData);
-};
diff --git a/src/lib/api/upload/types.ts b/src/lib/api/upload/types.ts
index 66569632..e3aca83e 100644
--- a/src/lib/api/upload/types.ts
+++ b/src/lib/api/upload/types.ts
@@ -15,42 +15,10 @@
* limitations under the License.
*/
-/**
- * @private
- */
-export interface FileObj extends File {
- buffer: Buffer;
- name: string;
- size: number;
- type: string;
-}
-
-/**
- * @private
- */
-export interface PartObj {
- buffer: any;
- chunks: any[];
- chunkSize: number;
- intelligentOverride: boolean;
- loaded: number;
- number: number;
- request: any;
- size: number;
- md5?: string;
- offset?: number;
-}
+import { StoreBaseParams } from 'src/lib/filelink';
+import { SanitizeOptions } from './../../utils/index';
export interface UploadOptions {
- host?: string;
- /**
- * Node only. Treat the file argument as a path string.
- */
- path?: boolean;
- /**
- * Set the MIME type of the uploaded file.
- */
- mimetype?: string;
/**
* Maximum size for file slices. Is overridden when intelligent=true. Default is `6 * 1024 * 1024` (6MB).
*/
@@ -70,7 +38,7 @@ export interface UploadOptions {
/**
* Callback for retry events.
*/
- onRetry?: (evt: FSRetryEvent) => void;
+ onRetry?: () => void;
/**
* Retry limit. Default is 10.
*/
@@ -93,78 +61,45 @@ export interface UploadOptions {
* Passing true/false toggles the global intelligent flow (all parts are chunked and committed).
* Passing `'fallback'` will only use FII when network conditions may require it (only failing parts will be chunked).
*/
- intelligent?: boolean | string;
+ intelligent?: boolean | 'fallback';
/**
* Set the default intiial chunk size for Intelligent Ingestion. Defaults to 8MB on desktop and 1MB on mobile.
*/
intelligentChunkSize?: number;
}
-export interface FSProgressEvent {
- totalPercent: number;
- totalBytes: number;
-}
-
-export interface FSRetryEvent {
- location: string;
- parts: PartsMap;
- filename: string;
- attempt: number | undefined;
- chunkSize?: number;
-}
-
-/**
- * @private
- */
-export interface UploadConfig extends UploadOptions {
- apikey: string;
- store: any;
- concurrency: number;
- partSize: number;
- retryFactor: number;
- retryMaxTime: number;
- progressInterval: number;
- policy?: string;
- signature?: string;
- customName?: string;
- mimetype?: string;
-}
+export type StoreUploadOptions = StoreBaseParams & {
+ /**
+ * Filename or function that returns custom filename for stored file
+ */
+ filename?: ((file: File) => string) | string;
-/**
- * @private
- */
-export const enum Status {
- INIT = 'init',
- RUNNING = 'running',
- DONE = 'done',
- FAILED = 'failed',
- PAUSED = 'paused',
-}
+ /**
+ * Workflows ids to run after upload
+ */
+ workflows?: (string | WorkflowConfig)[];
-/**
- * @private
- */
-export interface PartsMap {
- [part: string]: PartObj;
-}
+ /**
+ * Fielname sanitizer for cleanup before upload
+ *
+ * @see https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingMetadata.html
+ * @default {
+ * exclude: ['\\', '{', '}','|', '%', '`', '"', "'", '~', '[', ']', '#', '|', '^', '<', '>']
+ * replacement: '-'
+ * }
+ * @type {((boolean | {
+ * exclude: string[],
+ * replacement: string,
+ * }))}
+ */
+ sanitizer?: SanitizeOptions
+};
-/**
- * @private
- */
-export interface State {
- progressTick: any;
- previousPayload: any;
- status: Status;
- retries: any;
- parts: PartsMap;
+export interface WorkflowConfig {
+ id: string;
}
-/**
- * @private
- */
-export interface Context {
- config: UploadConfig;
- state: State;
- file: FileObj;
- params?: any;
+export interface FSProgressEvent {
+ totalPercent: number;
+ totalBytes: number;
}
diff --git a/src/lib/api/upload/upload.spec.ts b/src/lib/api/upload/upload.spec.ts
index b4ea71c2..65db6f78 100644
--- a/src/lib/api/upload/upload.spec.ts
+++ b/src/lib/api/upload/upload.spec.ts
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2018 by Filestack.
+ * Copyright (c) 2019 by Filestack.
* Some rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -15,478 +15,338 @@
* limitations under the License.
*/
-import * as assert from 'assert';
-import * as sinon from 'sinon';
-import { upload } from './index';
-import * as fs from 'fs';
+import { Upload } from './upload';
+import { FileState } from './file';
+import { S3Uploader } from './uploaders/s3';
+import { config } from './../../../config';
+import { StoreUploadOptions } from './types';
+import { UploadMode } from './uploaders/abstract';
-declare var ENV: any;
+const testBuffer = Buffer.from('test test test');
-const testFilePath = './test/data/testfile.txt';
-const testImageFilePath = './test/data/fish.gif';
-const session = ENV.session;
-const secureSession = ENV.secureSession;
-const makeFile = (data: string, type: string = 'image/gif') => {
- return ENV.isNode ? testFilePath : new Blob([data], { type });
+const customNameMocked = jest.fn();
+
+const mockedFsFile = {};
+Object.defineProperty(mockedFsFile, 'customName', {
+ set: customNameMocked,
+});
+
+jest.useFakeTimers();
+
+jest.mock('./uploaders/s3');
+jest.mock('./file_tools', () => ({
+ getFile: jest.fn().mockImplementation(() => mockedFsFile),
+}));
+
+const mockedFileResponse = {
+ status: 'stored',
};
-const makeEmptyFile = () => {
- return ENV.isNode ? './test/data/emptyfile.txt' : new Blob([''], { type: 'application/text' });
+
+const sessionURls = config.urls;
+const defaultSession = {
+ apikey: 'test',
+ policy: 'p',
+ signature: 's',
+ urls: sessionURls,
};
-const smallFile = makeFile('helloworld');
-const emptyFile = makeEmptyFile();
-const noFile = ENV.isNode ? './Idonotexist' : undefined;
-
-const dataURI = `data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xL
- jEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy5
- 3My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIgogICB4bWxuc
- zppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSIKICAgd2lkdGg9IjI0OC4yMjE2OSIKICAgaGVpZ2h0PSI2Ny4wODg0MzIiCiAgIHZpZXdCb3g9IjAgMCAyNDguMjIxNjkgNjcuMDg4NDM
- yIgogICB2ZXJzaW9uPSIxLjEiCiAgIGlkPSJzdmczNzYwIgogICBzb2RpcG9kaTpkb2NuYW1lPSJmaWxlc3RhY2suc3ZnIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjkyLjEgciI+CiAgPG1ldGFkYXRhCiAgICAgaWQ9Im1ldGFkYXRhM
- zc2NCI+CiAgICA8cmRmOlJERj4KICAgICAgPGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPgogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PgogICAgICAgIDxkYzp0eXBlCiAgICAgICAgICAgcmR
- mOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz4KICAgICAgICA8ZGM6dGl0bGU+Y29sb3I8L2RjOnRpdGxlPgogICAgICA8L2NjOldvcms+CiAgICA8L3JkZjpSREY+CiAgPC9tZXRhZGF0Y
- T4KICA8c29kaXBvZGk6bmFtZWR2aWV3CiAgICAgcGFnZWNvbG9yPSIjZmZmZmZmIgogICAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2IgogICAgIGJvcmRlcm9wYWNpdHk9IjEiCiAgICAgb2JqZWN0dG9sZXJhbmNlPSIxMCIKICAgICBncml
- kdG9sZXJhbmNlPSIxMCIKICAgICBndWlkZXRvbGVyYW5jZT0iMTAiCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAiCiAgICAgaW5rc2NhcGU6cGFnZXNoYWRvdz0iMiIKICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjMxOTAiC
- iAgICAgaW5rc2NhcGU6d2luZG93LWhlaWdodD0iMTc2MiIKICAgICBpZD0ibmFtZWR2aWV3Mzc2MiIKICAgICBzaG93Z3JpZD0iZmFsc2UiCiAgICAgaW5rc2NhcGU6em9vbT0iNC4xNzgxNzY4IgogICAgIGlua3NjYXBlOmN4PSIxMTg
- uMzM2NjgiCiAgICAgaW5rc2NhcGU6Y3k9IjMzLjM0Njc1MyIKICAgICBpbmtzY2FwZTp3aW5kb3cteD0iMCIKICAgICBpbmtzY2FwZTp3aW5kb3cteT0iMjgiCiAgICAgaW5rc2NhcGU6d2luZG93LW1heGltaXplZD0iMCIKICAgICBpb
- mtzY2FwZTpjdXJyZW50LWxheWVyPSJzdmczNzYwIgogICAgIGlua3NjYXBlOmxvY2tndWlkZXM9ImZhbHNlIiAvPgogIDwhLS0gR2VuZXJhdG9yOiBTa2V0Y2ggNDIgKDM2NzgxKSAtIGh0dHA6Ly93d3cuYm9oZW1pYW5jb2RpbmcuY29
- tL3NrZXRjaCAtLT4KICA8dGl0bGUKICAgICBpZD0idGl0bGUzNzQyIj5jb2xvcjwvdGl0bGU+CiAgPGRlc2MKICAgICBpZD0iZGVzYzM3NDQiPkNyZWF0ZWQgd2l0aCBTa2V0Y2guPC9kZXNjPgogIDxkZWZzCiAgICAgaWQ9ImRlZnMzN
- zQ2IiAvPgogIDxnCiAgICAgaWQ9IlBhZ2UtMSIKICAgICBzdHlsZT0iZmlsbDpub25lO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxIgogICAgIHRyYW5zZm9ybT0ic2NhbGUoMS4zOTkzODYyKSI+CiA
- gICA8ZwogICAgICAgaWQ9ImNvbG9yIj4KICAgICAgPHBhdGgKICAgICAgICAgZD0iTSAzNy40OTg4NzMsMzIuOTU5NjY1IFYgNC40OTQ0OTk3IEggNC40OTk4NjQ4IFYgNDMuNDQ2ODMxIEggMjYuOTk5MTg5IFYgNDcuOTQxMzMgSCA0M
- S45OTg3MzggViAzMi45NTk2NjUgWiBNIDAsMCBIIDQxLjk5ODczOCBWIDQ3Ljk0MTMzIEggMCBaIE0gMjkuOTk5MDk5LDM1Ljk1NTk5OCBIIDQxLjk5ODczOCBMIDI5Ljk5OTA5OSw0Ny45NDEzMyBaIE0gMTMuNDk5NTk0LDEzLjQ4MzQ
- 5OSBoIDE0Ljk5OTU1IHYgNC40OTQ1IGggLTE0Ljk5OTU1IHogbSAwLDcuNDkwODMzIGggMTEuOTk5NjQgdiA0LjQ5NDUgaCAtMTEuOTk5NjQgeiBtIDAsNy40OTA4MzMgaCA0LjQ5OTg2NSB2IDQuNDk0NSBoIC00LjQ5OTg2NSB6IgogI
- CAgICAgICBpZD0iUmVjdGFuZ2xlLTM1NiIKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgc3R5bGU9ImZpbGw6I2VmNDkyNSIgLz4KICAgIDwvZz4KICA8L2c+CiAgPHRleHQKICAgICB4bWw
- 6c3BhY2U9InByZXNlcnZlIgogICAgIHN0eWxlPSJmb250LXN0eWxlOm5vcm1hbDtmb250LXZhcmlhbnQ6bm9ybWFsO2ZvbnQtd2VpZ2h0Om5vcm1hbDtmb250LXN0cmV0Y2g6bm9ybWFsO2ZvbnQtc2l6ZTozMy4zMzMzMzIwNnB4O2xpb
- mUtaGVpZ2h0OjEuMjU7Zm9udC1mYW1pbHk6TW9udHNlcnJhdDstaW5rc2NhcGUtZm9udC1zcGVjaWZpY2F0aW9uOidNb250c2VycmF0LCBOb3JtYWwnO2ZvbnQtdmFyaWFudC1saWdhdHVyZXM6bm9ybWFsO2ZvbnQtdmFyaWFudC1jYXB
- zOm5vcm1hbDtmb250LXZhcmlhbnQtbnVtZXJpYzpub3JtYWw7Zm9udC1mZWF0dXJlLXNldHRpbmdzOm5vcm1hbDt0ZXh0LWFsaWduOnN0YXJ0O2xldHRlci1zcGFjaW5nOjBweDt3b3JkLXNwYWNpbmc6MHB4O3dyaXRpbmctbW9kZTpsc
- i10Yjt0ZXh0LWFuY2hvcjpzdGFydDtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmUiCiAgICAgeD0iNzQuMDE5MjI2IgogICAgIHk9IjQ2LjM4MTEyNiIKICAgICBpZD0idGV4dDM3MDAiPjx0c3BhbgogICAgICA
- gc29kaXBvZGk6cm9sZT0ibGluZSIKICAgICAgIGlkPSJ0c3BhbjM3MDIiCiAgICAgICB4PSI3NC4wMTkyMjYiCiAgICAgICB5PSI0Ni4zODExMjYiCiAgICAgICBzdHlsZT0iZm9udC1zdHlsZTpub3JtYWw7Zm9udC12YXJpYW50Om5vc
- m1hbDtmb250LXdlaWdodDpub3JtYWw7Zm9udC1zdHJldGNoOm5vcm1hbDtmb250LXNpemU6MzMuMzMzMzMyMDZweDtmb250LWZhbWlseTpNb250c2VycmF0Oy1pbmtzY2FwZS1mb250LXNwZWNpZmljYXRpb246J01vbnRzZXJyYXQsIE5
- vcm1hbCc7Zm9udC12YXJpYW50LWxpZ2F0dXJlczpub3JtYWw7Zm9udC12YXJpYW50LWNhcHM6bm9ybWFsO2ZvbnQtdmFyaWFudC1udW1lcmljOm5vcm1hbDtmb250LWZlYXR1cmUtc2V0dGluZ3M6bm9ybWFsO3RleHQtYWxpZ246c3Rhc
- nQ7d3JpdGluZy1tb2RlOmxyLXRiO3RleHQtYW5jaG9yOnN0YXJ0Ij5maWxlc3RhY2stanM8L3RzcGFuPjwvdGV4dD4KPC9zdmc+Cg==`;
-
-const b64string = 'dGVzdA=='; // b64 for "test"
-
-describe('upload', function uploadTest() {
- this.timeout(120000);
-
- it('should reject if a file is not a blob', (done) => {
- upload(session, 5).catch((err: Error) => {
- assert.ok(err);
- done();
- });
+
+const mockExecute = jest.fn();
+
+describe('Api/Upload/upload', () => {
+ beforeAll(() => {
+ spyOn(S3Uploader.prototype, 'execute').and.callFake(mockExecute);
});
- it('should reject if file is empty', (done) => {
- upload(session, emptyFile).catch((err: Error) => {
- assert.ok(err);
- done();
+ describe('Settings', () => {
+ it('should handle constructor options', () => {
+ const u = new Upload({
+ partSize: 5 * 1024 * 1024,
+ intelligentChunkSize: 5 * 1024 * 1024,
+ });
+
+ expect(S3Uploader.prototype.setPartSize).toHaveBeenCalledWith(5 * 1024 * 1024);
+ expect(S3Uploader.prototype.setIntelligentChunkSize).toHaveBeenCalledWith(5 * 1024 * 1024);
});
- });
- it('should reject if file does not exist', (done) => {
- upload(session, noFile).catch((err: Error) => {
- assert.ok(err);
- done();
+ it('should throw error on wrong upload options', () => {
+ // @ts-ignore
+ expect(() => new Upload({ intelligent1: true })).toThrowError('Invalid upload params');
});
- });
- it('(node) should upload file (buffer) successfully and return a handle (gif)', (done) => {
- if (!ENV.isNode) {
- return done();
- }
-
- const file = fs.readFileSync(testImageFilePath);
-
- upload(session, file, {
- retry: 0,
- partSize: 2000,
- }, {
- filename: 'filestack.gif',
- })
- .then((res: any) => {
- assert.ok(res.handle);
- assert.ok(res.url);
- done();
- })
- .catch((err: Error) => {
- done(err);
+ it('should accept sanitizer settings', () => {
+ expect(() => new Upload({}, {
+ // @ts-ignore
+ sanitizer: false,
+ })).not.toThrowError('Invalid upload params');
+
+ expect(() => new Upload({}, {
+ // @ts-ignore
+ sanitizer: {
+ exclude: ['1'],
+ replacement: '-',
+ },
+ })).not.toThrowError('Invalid upload params');
});
- });
- it('(node) should upload (buffer) file successfully and return a handle (txt)', (done) => {
- if (!ENV.isNode) {
- return done();
- }
-
- const file = fs.readFileSync(testFilePath);
-
- upload(session, file, {
- retry: 0,
- partSize: 2000,
- }, {
- filename: 'filestack.txt',
- })
- .then((res: any) => {
- assert.ok(res.handle);
- assert.ok(res.url);
- done();
- })
- .catch((err: Error) => {
- done(err);
+ it('should throw error on wrong store options', () => {
+ // @ts-ignore
+ expect(() => new Upload({ intelligent: true }, { test: 123 })).toThrowError('Invalid store upload params');
});
- });
- it('(node) should upload file (buffer) successfully without name and return a handle (txt)', (done) => {
- if (!ENV.isNode) {
- return done();
- }
-
- const file = fs.readFileSync(testFilePath);
-
- upload(session, file, {
- retry: 0,
- partSize: 2000,
- })
- .then((res: any) => {
- assert.ok(res.handle);
- assert.ok(res.url);
- done();
- })
- .catch((err: Error) => {
- done(err);
+ it('should set intelligent upload mode', () => {
+ const u = new Upload({ intelligent: true });
+ expect(S3Uploader.prototype.setUploadMode).toHaveBeenCalledWith(UploadMode.INTELLIGENT);
});
- });
- it('should upload a dataURI successfully and return a handle', (done) => {
- if (ENV.isNode) {
- return done();
- }
- upload(session, dataURI, {
- retry: 0,
- }, {
- filename: 'filestack.svg',
- })
- .then((res: any) => {
- assert.ok(res.handle);
- assert.ok(res.url);
- done();
- })
- .catch((err: Error) => {
- done(err);
+ it('should fallback upload mode', () => {
+ const u = new Upload({ intelligent: 'fallback' });
+
+ expect(S3Uploader.prototype.setUploadMode).toHaveBeenCalledWith(UploadMode.FALLBACK);
});
- });
- it('should upload a file successfully and return a handle', (done) => {
- upload(session, smallFile, {
- retry: 0,
- mimetype: 'image/gif',
- }, {
- filename: 'dutton.gif',
- })
- .then((res: any) => {
- assert.ok(res.handle);
- assert.ok(res.url);
- done();
- })
- .catch((err: Error) => {
- done(err);
+ it('should pass store options to uploader class', () => {
+ const storeOptions: StoreUploadOptions = {
+ location: 's3',
+ };
+
+ const u = new Upload({}, storeOptions);
+ expect(S3Uploader.prototype.constructor).toHaveBeenCalledWith(storeOptions, undefined);
});
- });
- it('should pause and resume upload', (done) => {
- const token: any = {};
- upload(session, smallFile, {
- retry: 0,
- mimetype: 'image/gif',
- }, {
- filename: 'dutton.gif',
- }, token)
- .then((res: any) => {
- assert.ok(res.handle);
- assert.ok(res.url);
- done();
- })
- .catch((err: Error) => {
- done(err);
+ it('should respect concurrency param in upload options', () => {
+ const uploadOptions = {
+ concurrency: 4,
+ };
+
+ const u = new Upload(uploadOptions);
+ expect(S3Uploader.prototype.constructor).toHaveBeenCalledWith({}, 4);
});
- setTimeout(() => {
- token.pause();
- setTimeout(() => token.resume(), 10);
- }, 10);
- });
+ it('should set correct security to uploader', () => {
+ const security = {
+ policy: 'p',
+ signature: 's',
+ };
+
+ const u = new Upload();
+ u.setSecurity(security);
- it('should upload a file and report progress', (done) => {
- const onProgress = sinon.spy();
- upload(session, smallFile, {
- retry: 0,
- onProgress,
- progressInterval: 10,
- mimetype: 'image/gif',
- }, {
- filename: 'dutton.gif',
- })
- .then((res: any) => {
- assert.ok(res.handle);
- assert.ok(res.url);
- assert.ok(onProgress.called);
- assert.equal(onProgress.lastCall.args[0].totalPercent, 100);
- done();
- })
- .catch((err: Error) => {
- done(err);
+ expect(S3Uploader.prototype.setSecurity).toHaveBeenCalledWith(security);
});
- });
- it('should upload a file with intelligent ingestion', (done) => {
- upload(ENV.intelligentSession, smallFile, {
- intelligent: true,
- retry: 0,
- })
- .then((res: any) => {
- assert.ok(res.handle);
- assert.ok(res.url);
- done();
- })
- .catch((err: Error) => {
- done(err);
+ it('should pass session variable to uploader', () => {
+ const u = new Upload();
+ u.setSession(defaultSession);
+
+ expect(S3Uploader.prototype.setUrl).toHaveBeenCalledWith(defaultSession.urls.uploadApiUrl);
+ expect(S3Uploader.prototype.setApikey).toHaveBeenCalledWith(defaultSession.apikey);
+ expect(S3Uploader.prototype.setSecurity).toHaveBeenCalledWith({ policy: defaultSession.policy, signature: defaultSession.signature });
});
- });
- it('should upload a file with intelligent ingestion and report progress', (done) => {
- const onProgress = sinon.spy();
- upload(ENV.intelligentSession, smallFile, {
- retry: 0,
- onProgress,
- progressInterval: 10,
- intelligent: true,
- mimetype: 'image/gif',
- }, {
- filename: 'dutton.gif',
- })
- .then((res: any) => {
- assert.ok(res.handle);
- assert.ok(res.url);
- assert.ok(onProgress.called);
- assert.equal(onProgress.lastCall.args[0].totalPercent, 100);
- done();
- })
- .catch((err: Error) => {
- done(err);
+ it('should set storeOption filename to class', async () => {
+ mockExecute.mockReturnValue(Promise.resolve([mockedFileResponse]));
+ const filenameFn = () => 'test';
+
+ const u = new Upload(
+ {},
+ {
+ filename: filenameFn,
+ }
+ );
+
+ await u.upload(testBuffer);
+ expect(customNameMocked).toHaveBeenCalledWith(filenameFn);
});
- });
- it('should upload a file with intelligent ingestion fallback and report progress', (done) => {
- const onProgress = sinon.spy();
- upload(ENV.intelligentSession, smallFile, {
- retry: 0,
- onProgress,
- progressInterval: 10,
- intelligent: 'fallback',
- mimetype: 'image/gif',
- }, {
- filename: 'dutton.gif',
- })
- .then((res: any) => {
- assert.ok(res.handle);
- assert.ok(res.url);
- assert.ok(onProgress.called);
- assert.equal(onProgress.lastCall.args[0].totalPercent, 100);
- done();
- })
- .catch((err: Error) => {
- console.log(err);
- done(err);
+ it('should assign methods to user provided token', () => {
+ let token = {};
+
+ const u = new Upload();
+ u.setToken(token);
+
+ expect(token['cancel']).toBeTruthy();
+ expect(token['resume']).toBeTruthy();
+ expect(token['pause']).toBeTruthy();
+
+ token['cancel']();
+ token['pause']();
+ token['resume']();
});
- });
- it('should upload a file with store options', (done) => {
- upload(session, smallFile, {
- retry: 0,
- }, {
- location: 's3',
- region: 'eu-west-1',
- container: 'filestack-uploads-staging-eu-west-1',
- filename: 'dutton.gif',
- })
- .then((res: any) => {
- assert.ok(res.handle);
- assert.ok(res.url);
- done();
- })
- .catch((err: Error) => {
- done(err);
+ it('should set token with methods that pause,cancel or resume uploads', () => {
+ let token = {};
+
+ const u = new Upload();
+ u.setToken(token);
+
+ token['cancel']();
+ token['pause']();
+ token['resume']();
+
+ expect(S3Uploader.prototype.abort).toHaveBeenCalled();
+ expect(S3Uploader.prototype.pause).toHaveBeenCalled();
+ expect(S3Uploader.prototype.resume).toHaveBeenCalled();
});
- });
- it('should upload a file to a secured application', (done) => {
- upload(secureSession, smallFile, {
- retry: 0,
- }, {
- filename: 'dutton.gif',
- })
- .then((res: any) => {
- assert.ok(res.handle);
- assert.ok(res.url);
- done();
- })
- .catch((err: Error) => {
- done(err);
+ it('should throw an error if token is not an object', () => {
+ const token = '123123';
+
+ const u = new Upload();
+ expect(() => {
+ u.setToken(token);
+ }).toThrowError();
});
+
});
- it('should cancel uploading if token.cancel is called', (done) => {
- const token: any = {};
-
- upload(session, smallFile, {
- retry: 0,
- host: ENV.urls.proxySlow,
- }, {}, token)
- .then((res: any) => {
- done(res);
- })
- .catch((err: Error) => {
- assert.ok(err);
- done();
+ describe('Upload', () => {
+ beforeEach(() => {
+ mockExecute.mockReturnValue(Promise.resolve([mockedFileResponse, mockedFileResponse]));
});
- // wait until upload will start
- setTimeout(() => token.cancel(), 10);
- });
+ it('should execute normal upload without errors and return single file response', async () => {
+ const u = new Upload();
+ const res = await u.upload(testBuffer);
+ expect(res).toEqual(mockedFileResponse);
+ });
+
+ it('should execute normal upload with errors and return rejected promise', () => {
+ const u = new Upload();
+
+ mockExecute.mockReturnValue(
+ Promise.resolve([
+ {
+ status: FileState.FAILED,
+ },
+ ])
+ );
+
+ return expect(u.upload(testBuffer)).rejects.toEqual({
+ status: FileState.FAILED,
+ });
+ });
- it('should upload a file successfully with provided workflows ids', (done) => {
- upload(session, smallFile, {
- mimetype: 'image/gif',
- }, {
- filename: 'dutton.gif',
- workflows: ['test', {
- id: 'test',
- }]
- })
- .then((res: any) => {
- assert.ok(res.handle);
- assert.ok(res.url);
- done();
- })
- .catch((err: Error) => {
- done(err);
+ it('should execute multiupload without errors and return single file response', async () => {
+ const u = new Upload();
+ const res = await u.multiupload([testBuffer, testBuffer]);
+ expect(res).toEqual([mockedFileResponse, mockedFileResponse]);
});
});
-});
-// Retry with failure simulation via toxy
-
-if (ENV.testEnv === 'unit') {
-
- describe('upload failure simulation', () => {
- describe('4xx response', function retryFailures() {
- this.timeout(60000);
- it('should fail immediately', (done) => {
- const onRetry = sinon.spy();
- upload(session, smallFile, {
- host: ENV.urls.proxy400,
- retry: 0,
- onRetry,
- })
- .then(() => done('Error was not thrown'))
- .catch((err: any) => {
- assert.ok(!onRetry.called, 'onRetry was called');
- assert.ok(err);
- done();
- });
+ describe('Progress', () => {
+ const progress1 = {
+ totalBytes: 1,
+ totalPercent: 1,
+ files: [
+ {
+ totalBytes: 1,
+ totalPercent: 1,
+ },
+ ],
+ };
+
+ const progress50 = {
+ totalBytes: 5,
+ totalPercent: 50,
+ files: [
+ {
+ totalBytes: 50,
+ totalPercent: 50,
+ },
+ ],
+ };
+
+ const progress100 = {
+ totalBytes: 100,
+ totalPercent: 100,
+ files: [
+ {
+ totalBytes: 100,
+ totalPercent: 100,
+ },
+ ],
+ };
+
+ it('should handle correct progress event', async () => {
+ spyOn(S3Uploader.prototype, 'on').and.callFake((ev, cb) => {
+ cb(progress1);
+ cb(progress100);
});
- });
- describe('5xx response', function retryFailures() {
- this.timeout(60000);
- it('should retry and increment retry count', (done) => {
- const onRetry = sinon.spy();
- upload(session, smallFile, {
- host: ENV.urls.proxy500,
- onRetry,
- retry: 1,
- })
- .then(() => done('Retry was not called'))
- .catch((err: any) => {
- assert.equal(onRetry.firstCall.args[0].attempt, 1);
- assert.ok(err);
- done();
- });
+ const progressMock = jest.fn();
+
+ const u = new Upload({
+ onProgress: progressMock,
});
+
+ await u.upload(testBuffer);
+
+ expect(progressMock).toHaveBeenCalledWith(progress100);
+ expect(progressMock).toHaveBeenCalledTimes(1);
});
- describe('intelligent ingestion server error', function intelligentSrvErr() {
- this.timeout(80000);
- it('should retry on server error and increment retry amount', (done) => {
- const onRetry = sinon.spy();
- upload(ENV.intelligentSession, smallFile, {
- host: ENV.urls.proxy500,
- onRetry,
- retry: 2,
- intelligent: true,
- })
- .then(() => done('Retry was not called.'))
- .catch((err: any) => {
- assert.equal(onRetry.firstCall.args[0].attempt, 1);
- assert.equal(onRetry.secondCall.args[0].attempt, 2);
- assert.ok(err);
- done();
+ it('should call progress event on given interval', async () => {
+ let progressCb;
+
+ mockExecute.mockImplementation(() => {
+ return new Promise(resolve => {
+ setTimeout(() => progressCb(progress1), 1);
+ setTimeout(() => progressCb(progress50), 2);
+ setTimeout(() => progressCb(progress100), 3);
+ setTimeout(() => resolve([]), 4);
+
+ jest.advanceTimersByTime(4);
});
});
+
+ spyOn(S3Uploader.prototype, 'on').and.callFake((ev, cb) => {
+ progressCb = cb;
+ });
+
+ const progressMock = jest.fn();
+
+ const u = new Upload({
+ progressInterval: 1,
+ onProgress: progressMock,
+ });
+
+ await u.multiupload([testBuffer]);
+
+ expect(progressMock).toHaveBeenCalledWith(progress1);
+ expect(progressMock).toHaveBeenCalledWith(progress50);
+ expect(progressMock).toHaveBeenCalledWith(progress100);
});
- describe('intelligent ingestion S3 network error', function intelligentNetErr() {
- this.timeout(60000);
- it('should retry and halve chunk size each time', (done) => {
- const onRetry = sinon.spy();
- const defaultChunkSize = (1 * 1024 * 1024) / 4;
- upload(ENV.intelligentSession, smallFile, {
- host: ENV.urls.proxyAbort,
- onRetry,
- intelligent: true,
- intelligentChunkSize: defaultChunkSize,
- })
- .then(() => done('Retry was not called.'))
- .catch((err: any) => {
- assert.equal(onRetry.firstCall.args[0].chunkSize, defaultChunkSize / 2);
- assert.equal(onRetry.secondCall.args[0].chunkSize, defaultChunkSize / 4);
- assert.ok(err);
- done();
+ it('should stay at the same progress when uploader goes back with file progress', async () => {
+ let progressCb;
+
+ mockExecute.mockImplementation(() => {
+ return new Promise(resolve => {
+ setTimeout(() => progressCb(progress50), 1);
+ setTimeout(() => progressCb(progress1), 2);
+ setTimeout(() => progressCb(progress100), 3);
+ setTimeout(() => resolve([]), 4);
+
+ jest.advanceTimersByTime(4);
});
});
- it('should fail when minimum chunk size is reached', (done) => {
- const onRetry = sinon.spy();
- const minChunkSize = 32 * 1024;
- upload(ENV.intelligentSession, smallFile, {
- host: ENV.urls.proxyAbort,
- onRetry,
- intelligent: true,
- intelligentChunkSize: minChunkSize * 2,
- })
- .then(() => done('Retry was not called.'))
- .catch((err: any) => {
- assert.equal(onRetry.lastCall.args[0].chunkSize, minChunkSize);
- assert.ok(err);
- done();
- });
+ spyOn(S3Uploader.prototype, 'on').and.callFake((ev, cb) => {
+ progressCb = cb;
});
- it('should set intelligentOverride on part when in fallback mode', (done) => {
- const onRetry = sinon.spy();
- const minChunkSize = 32 * 1024;
- upload(ENV.intelligentSession, smallFile, {
- host: ENV.urls.proxyAbort,
- onRetry,
- intelligent: 'fallback',
- intelligentChunkSize: minChunkSize * 2,
- })
- .then(() => done('Did not fail'))
- .catch((err: any) => {
- assert.equal(onRetry.lastCall.args[0].parts[0].intelligentOverride, true);
- assert.ok(err);
- done();
- });
+ const progressMock = jest.fn();
+
+ const u = new Upload({
+ progressInterval: 1,
+ onProgress: progressMock,
});
+
+ await u.multiupload([testBuffer]);
+
+ expect(progressMock).toHaveBeenCalledWith(progress50);
+ expect(progressMock).toHaveBeenCalledWith(progress50);
+ expect(progressMock).toHaveBeenCalledWith(progress100);
});
});
-}
+});
diff --git a/src/lib/api/upload/upload.ts b/src/lib/api/upload/upload.ts
index e2a8d23a..0e8d6a74 100644
--- a/src/lib/api/upload/upload.ts
+++ b/src/lib/api/upload/upload.ts
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2018 by Filestack.
+ * Copyright (c) 2019 by Filestack.
* Some rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -15,557 +15,254 @@
* limitations under the License.
*/
-import * as t from 'tcomb-validation';
-import { getPart, getFile } from './file_utils';
-import { isMobile } from './is_mobile';
-import { getName } from './utils';
-import { commitPart, slicePartIntoChunks, uploadChunk } from './intelligent';
-import { start, getS3PartData, uploadToS3, complete } from './network';
-import {
- Context,
- FileObj,
- PartObj,
- State,
- Status,
- UploadConfig,
- UploadOptions
-} from './types';
-import { checkOptions, range, throat, throttle } from '../../utils';
-import { Security, Session, StoreOptions } from '../../client';
+import * as EventEmitter from 'eventemitter3';
+import { Session, Security } from '../../client';
+import { S3Uploader } from './uploaders/s3';
+import { FilestackError, FilestackErrorType } from './../../../filestack_error';
+import { SanitizeOptions } from './../../utils';
-/**
- * @private
- */
-const MIN_CHUNK_SIZE = 32 * 1024;
+import { UploadOptions, StoreUploadOptions } from '../upload/types';
+import { getFile, InputFile } from './file_tools';
+import { FileState } from './file';
+import { UploadMode } from './uploaders/abstract';
+import { getValidator, UploadParamsSchema, StoreParamsSchema } from './../../../schema';
-/**
- * @private
- */
-const statuses = {
- INIT: Status.INIT,
- RUNNING: Status.RUNNING,
- DONE: Status.DONE,
- FAILED: Status.FAILED,
- PAUSED: Status.PAUSED,
-};
+export interface ProgressEvent {
+ totalPercent: number;
+ totalBytes: number;
+ files?: { (key: string): ProgressEvent };
+}
-/**
- * Returns a Promise based on the flow state
- * If the flow is paused it will return a Promise that resolves when resumed
- * If the flow failed it will resolve harmlessly
- *
- * @private
- * @param func function that returns a Promise
- */
-const flowControl = (ctx: Context, func: any) => {
- // console.log(ctx.state);
- return (...args: any[]) => {
- if (ctx.state.status === statuses.FAILED) {
- return Promise.resolve();
- }
- return new Promise((resolve) => {
- const check = () => {
- if (ctx.state.status === statuses.PAUSED) {
- setTimeout(() => check(), 100);
- } else {
- resolve(func(...args));
- }
- };
- check();
- });
- };
+const DEFAULT_PROGRESS_INTERVAL = 1000;
+
+const normalizeProgress = (current, last) => {
+ current.totalBytes = Math.max(current.totalBytes, last.totalBytes);
+ current.totalPercent = Math.max(current.totalPercent, last.totalPercent);
+
+ return current;
};
/**
+ * Uploader main class for now its supporting only s3 upload type
*
- * @private
- * @param num
- * @param ctx
+ * @export
+ * @class Upload
*/
-const makePart = (num: number, ctx: Context): PartObj => {
- return {
- buffer: null,
- chunks: [],
- chunkSize: ctx.config.intelligentChunkSize
- ? ctx.config.intelligentChunkSize
- : isMobile()
- ? 1 * 1024 * 1024
- : 8 * 1024 * 1024,
- intelligentOverride: false,
- loaded: 0,
- number: num,
- request: null,
- size: 0,
+export class Upload extends EventEmitter {
+ private uploader: S3Uploader;
+
+ private overwriteFileName;
+
+ private lastProgress: ProgressEvent = {
+ totalBytes: 0,
+ totalPercent: 0,
};
-};
-/**
- *
- * @private
- * @param part
- * @param ctx
- */
-const uploadPart = async (part: PartObj, ctx: Context): Promise => {
- const cfg = ctx.config;
- // Intelligent flow commits a part only when all chunks have been uploaded
- if (cfg.intelligent === true || part.intelligentOverride) {
- const goChunk = flowControl(ctx, (chunk: any) => uploadChunk(chunk, ctx));
- part.chunks = slicePartIntoChunks(part, part.chunkSize);
-
- await Promise.all(part.chunks.map(throat(cfg.concurrency, goChunk)));
- return commitPart(part, ctx);
- }
+ private progressIntervalHandler;
+ private sanitizerOptions: SanitizeOptions;
- // Or we upload the whole part (default flow)
- const { body: s3Data } = await getS3PartData(part, ctx);
- let onProgress;
- if (cfg.onProgress) {
- /* istanbul ignore next */
- onProgress = throttle((evt: ProgressEvent) => {
- /* istanbul ignore next */
- if (evt.loaded > part.loaded) {
- part.loaded = evt.loaded;
- }
- }, cfg.progressInterval);
- }
- part.request = uploadToS3(part.buffer, s3Data, onProgress, cfg);
- return part.request;
-};
+ constructor(private readonly options: UploadOptions = {}, private storeOptions: StoreUploadOptions = {}) {
+ super();
-/**
- * Clean up array buffers in memory
- * Because promises aren't streams
- * @private
- */
-const gc = (part: PartObj) => {
- part.buffer = undefined;
- part.request = undefined;
- if (part.chunks && part.chunks.length) {
- part.chunks.forEach(gc);
- }
-};
+ // do not delete filename from original options reference - copy it first
+ this.storeOptions = Object.assign({}, storeOptions);
-/**
- * Helpers to calculate total progress of file upload in bytes and percent
- * @private
- */
-const sumBytes = (bytes: number[]) => bytes.reduce((a, b) => a + b, 0);
-/**
- *
- * @private
- * @param bytes
- * @param file
- */
-const percentOfFile = (bytes: number, file: FileObj) => Math.round((bytes / file.size) * 100);
+ const validateRes = getValidator(UploadParamsSchema)(options);
-/**
- *
- * @private
- * @param param0
- */
-const getProgress = ({ config, state, file }: Context) => {
- const parts = Object.keys(state.parts).map((k: string) => state.parts[k]);
- const partsLoaded = parts.map((p: PartObj) => p.loaded);
- const chunksLoaded = parts
- .map((p: PartObj) => p.chunks)
- .reduce((a: any[], b: any[]) => a.concat(b), [])
- .map((c: any) => c.loaded)
- .filter((n: any) => n);
- let loaded = partsLoaded;
- if (config.intelligent === true) {
- loaded = chunksLoaded;
- }
- if (config.intelligent === 'fallback') {
- const partsWithoutChunks = parts
- .filter((p: PartObj) => !p.intelligentOverride)
- .map((p: PartObj) => p.loaded);
- loaded = partsWithoutChunks.concat(chunksLoaded);
- }
- const totalBytes = sumBytes(loaded);
- const totalPercent = percentOfFile(totalBytes, file);
- const payload = {
- totalBytes,
- totalPercent,
- };
- const prev = state.previousPayload || {};
- /* istanbul ignore next */
- if (totalPercent < prev.totalPercent) {
- payload.totalBytes = prev.totalBytes;
- payload.totalPercent = prev.totalPercent;
- }
- state.previousPayload = payload;
- return payload;
-};
+ if (validateRes.errors.length) {
+ throw new FilestackError(`Invalid upload params`, validateRes.errors, FilestackErrorType.VALIDATION);
+ }
-/**
- * Entry point for multi-part upload flow
- *
- * @private
- * @param file File to upload
- * @param config Upload config
- * @param token Control token
- */
-const uploadFile = async (ctx: Context, token: any): Promise => {
- const { file, state, config } = ctx;
-
- const startProgress = (onProgress?: any): void => {
- if (onProgress) {
- state.progressTick = setInterval(() => {
- const payload = getProgress(ctx);
- if (payload.totalPercent === 100) {
- clearInterval(state.progressTick);
- }
- onProgress(payload);
- }, config.progressInterval);
+ const storeValidateRes = getValidator(StoreParamsSchema)(storeOptions);
+ if (storeValidateRes.errors.length) {
+ throw new FilestackError(`Invalid store upload params`, storeValidateRes.errors, FilestackErrorType.VALIDATION);
}
- };
- const finishProgress = (onProgress?: any): void => {
- if (onProgress) {
- onProgress({
- totalBytes: file.size,
- totalPercent: 100,
- });
- clearInterval(state.progressTick);
+ if (storeOptions.filename) {
+ this.overwriteFileName = storeOptions.filename;
+ delete this.storeOptions.filename;
}
- };
- /**
- * Will pause progress tick and set state
- */
- token.pause = (): void => {
- if (state.status === statuses.RUNNING) {
- state.status = statuses.PAUSED;
- clearInterval(state.progressTick);
+ if (this.storeOptions.sanitizer) {
+ this.sanitizerOptions = this.storeOptions.sanitizer;
+ delete this.storeOptions.sanitizer;
}
- };
- /**
- * Will resume flow and start progress tick again
- */
- token.resume = (): void => {
- if (state.status === statuses.PAUSED) {
- state.status = statuses.RUNNING;
- startProgress(config.onProgress);
+ this.uploader = new S3Uploader(this.storeOptions, options.concurrency);
+
+ this.uploader.setRetryConfig({
+ retry: options.retry || 10,
+ onRetry: options.onRetry, // @todo bind file to retry in s3 uploader
+ retryFactor: options.retryFactor || 2,
+ retryMaxTime: options.retryMaxTime || 15000,
+ });
+
+ this.uploader.setTimeout(options.timeout || 120000);
+
+ if (options.partSize) {
+ this.uploader.setPartSize(options.partSize);
+ }
+
+ if (options.intelligentChunkSize) {
+ this.uploader.setIntelligentChunkSize(options.intelligentChunkSize);
}
- };
+
+ if (options.intelligent) {
+ this.uploader.setUploadMode(options.intelligent === 'fallback' ? UploadMode.FALLBACK : UploadMode.INTELLIGENT);
+ }
+
+ this.uploader.on('error', (e) => this.emit('error', e));
+ this.uploader.on('progress', this.handleProgress.bind(this));
+ }
/**
- * Iterate over all parts and abort their requests
- * @private
+ * Set session object to uploader
+ *
+ * @deprecated
+ * @param {Session} session
+ * @memberof Upload
*/
- const cancelAllRequests = (): void => {
- const parts = Object.keys(state.parts).map(k => state.parts[k]);
- parts.forEach((part: any) => {
- if (part.request) part.request.abort();
- part.chunks.forEach((chunk: any) => {
- if (chunk.request) chunk.request.abort();
+ setSession(session: Session) {
+ this.uploader.setApikey(session.apikey);
+
+ if (session.policy && session.signature) {
+ this.uploader.setSecurity({
+ policy: session.policy,
+ signature: session.signature,
});
- gc(part);
- });
- };
+ }
+
+ this.uploader.setUrl(session.urls.uploadApiUrl);
+ }
/**
- * Set failure status, clean up
- * @private
+ * Set cancel token to controll upload flow
+ *
+ * @param {*} token
+ * @returns
+ * @memberof Upload
*/
- const failAndCleanUp = (): void => {
- cancelAllRequests();
- clearInterval(state.progressTick);
- state.status = statuses.FAILED;
-
- if (file.buffer) {
- file.buffer = null;
+ public setToken(token: any) {
+ if (!token || token !== Object(token)) {
+ throw new Error('Incorrect upload token. Must be instance of object');
}
- };
- const cancel = new Promise((_, reject) => {
- token.cancel = (): void => {
- if (state.status === statuses.RUNNING || state.status === statuses.PAUSED) {
- failAndCleanUp();
- reject(new Error('Upload cancelled'));
- }
- };
- });
+ token.pause = () => this.uploader.pause();
+ token.resume = () => this.uploader.resume();
+ token.cancel = () => this.uploader.abort();
- const cancellable = (p: Promise): Promise => {
- return Promise.race([cancel, p]);
- };
+ return token;
+ }
/**
- * Retries a function up to the retry limit. For intelligent ingestion it halves chunk size before retrying part
- * @private
- * @param location A name for the function being retried
- * @param func The function to retry
- * @param err An Error whose message will be used if the retry limit is met.
- * @param part Part object for FII retries (each part tracks its own chunkSize)
- * @returns {Promise}
+ * Sets security to uploader instance
+ *
+ * @param {Security} security
+ * @memberof Upload
*/
- const retry = (location: string, func: any, err: any, part?: PartObj): Promise => {
- let attempt = state.retries[location] || 0;
-
- // console.error(`Cannot upload file ${err}, Method: ${err.method}, Status: ${err.status}, Timeout: ${err.timeout}`);
-
- const waitTime = Math.min(config.retryMaxTime, (config.retryFactor ** attempt) * 1000);
- const promise = new Promise((resolve, reject) => {
- if (attempt === config.retry
- || (err.status === 400 && err.method !== 'PUT')
- || err.status === 401
- || err.status === 403
- || err.status === 404
- || part && part.chunkSize <= MIN_CHUNK_SIZE
- ) {
- failAndCleanUp();
- return reject(err);
- }
- const exec = () => setTimeout(() => resolve(func()), waitTime);
- // FII S3 retry (resize chunk)
- if (part && (config.intelligent || part.intelligentOverride) && (
- // Browser S3 network error
- (err.method === 'PUT' && (err.crossDomain || err.status === 400))
-
- // if connection is aborted we dont have request method
- || (err.code === 'ECONNABORTED' && err.timeout)
- // Node S3 network error
- || (err.code === 'ECONNRESET' || err.code === 'ETIMEDOUT')
- )) {
-
- part.chunkSize /= 2;
-
- if (config.onRetry) {
- config.onRetry({
- location,
- parts: state.parts,
- filename: getName(file, config),
- chunkSize: part.chunkSize,
- attempt: undefined,
- });
- }
- if (config.intelligent === 'fallback') {
- part.intelligentOverride = true;
- }
- return exec();
- }
- // Normal retry (with retry limit)
- attempt += 1;
- state.retries[location] = attempt;
- if (config.onRetry) {
- config.onRetry({
- location,
- parts: state.parts,
- filename: getName(file, config),
- attempt,
- });
- }
- return exec();
- });
+ public setSecurity(security: Security) {
+ this.uploader.setSecurity(security);
+ }
- return cancellable(promise);
- };
+ /**
+ * Upload single file
+ *
+ * @param {(InputFile)} file
+ * @returns {Promise}
+ * @memberof Upload
+ */
+ async upload(input: InputFile): Promise {
- // Here we go
- state.status = statuses.RUNNING;
+ const f = await getFile(input, this.sanitizerOptions);
+ f.customName = this.overwriteFileName;
+ this.uploader.addFile(f);
- const { body: params } = await cancellable(start(ctx));
- ctx.params = params;
+ this.startProgressInterval();
+ const res = (await this.uploader.execute()).shift();
+ this.stopProgressInterval();
- const goPart = flowControl(ctx, async (partObj: PartObj) => {
- const part = await getPart(partObj, ctx);
+ this.uploader.removeAllListeners();
- if (part.size === 0) {
- return Promise.reject(new Error('Upload aborted due to empty chunk.'));
- }
- const location = `upload part ${part.number + 1}`;
- state.parts[part.number] = part;
- try {
- const { headers: { etag }, status } = await uploadPart(part, ctx);
- if (status === 206) {
- const err = new Error('Intelligent part failed to commit');
- return retry(location, () => goPart(part), err, part);
- }
- part.loaded = part.size;
- gc(part);
- if (!config.intelligent && !etag) {
- return Promise.reject(new Error('Response from S3 is missing ETag header.'));
- }
- return etag;
- } catch (err) {
- return retry(location, () => goPart(part), err, part);
+ if (res.status === FileState.FAILED) {
+ return Promise.reject(res);
}
- });
-
- const totalParts = Math.ceil(file.size / config.partSize);
- const allParts = range(0, totalParts).map((p: any) => makePart(p, ctx));
-
- const partsFlow = Promise.all(allParts.map(throat(config.concurrency, goPart)));
- startProgress(config.onProgress);
- const etags = await cancellable(partsFlow);
-
- const goComplete = flowControl(ctx, async () => {
- try {
- const res = await complete(etags, ctx);
- if (res.status === 202) {
- return new Promise((resolve) => {
- setTimeout(() => resolve(goComplete()), 1000);
- });
- }
- state.status = statuses.DONE;
- finishProgress(config.onProgress);
- if (file.buffer) {
- file.buffer = null;
- }
+ return Promise.resolve(res);
+ }
- if (res.body && res.body.error && res.body.error.text) {
- return Promise.reject(new Error(`File upload error: ${res.body.error.text}`));
+ /**
+ * Upload multiple files at once
+ *
+ * @param {(InputFile[])} input
+ * @returns {Promise}
+ * @memberof Upload
+ */
+ async multiupload(input: InputFile[]): Promise {
+ for (let i in input) {
+ /* istanbul ignore next */
+ if (!input.hasOwnProperty(i)) {
+ continue;
}
- return res.body;
- } catch (err) {
- return retry('complete', goComplete, err);
+ const f = await getFile(input[i], this.sanitizerOptions);
+ f.customName = this.overwriteFileName;
+ this.uploader.addFile(f);
}
- });
- return cancellable(goComplete());
-};
-/**
- * User facing method to upload a single file
- * @private
- * @param session Session object that contains apikey
- * @param file A valid file path (in Node). In browsers a File, Blob, or base64 encoded string
- * @param options Configures the uploader
- * @param storeOptions Storage options for the backend
- * @param token Control token
- */
-export const upload = (
- session: Session,
- fileOrString: any,
- options: UploadOptions = {},
- storeOptions: StoreOptions = {},
- token: any = {},
- security?: Security
-): Promise => {
- return getFile(fileOrString).then((file: any) => {
- if ((file.size !== undefined && file.size === 0) || file.length === 0) {
- return Promise.reject(new Error('file has a size of 0.'));
- }
+ this.startProgressInterval();
+ const res = await this.uploader.execute();
+ this.stopProgressInterval();
- const allowedOptions = [
- { name: 'host', type: t.String },
- { name: 'path', type: t.Boolean },
- { name: 'mimetype', type: t.String },
- { name: 'partSize', type: t.Number },
- { name: 'concurrency', type: t.refinement(t.Integer, n => n > 0) },
- { name: 'onProgress', type: t.Function },
- { name: 'progressInterval', type: t.Integer },
- { name: 'onRetry', type: t.Function },
- { name: 'retry', type: t.Integer },
- { name: 'retryFactor', type: t.Integer },
- { name: 'retryMaxTime', type: t.Integer },
- { name: 'timeout', type: t.Integer },
- { name: 'intelligent', type: t.union([t.Boolean, t.enums.of('fallback')]) },
- { name: 'intelligentChunkSize', type: t.Number },
- ];
-
- const wString = t.String;
- const wStruct = t.struct({
- id: t.String,
- });
+ return Promise.resolve(res);
+ }
- const workflowsUniton = t.union([
- wString,
- wStruct,
- ]);
-
- workflowsUniton.dispatch = function (x) {
- return x.id ? wStruct : wString;
- };
-
- const allowedStoreOptions = [
- { name: 'location', type: t.enums.of('s3 gcs rackspace azure dropbox') },
- { name: 'region', type: t.String },
- { name: 'path', type: t.String },
- { name: 'container', type: t.String },
- { name: 'filename', type: t.String },
- { name: 'access', type: t.enums.of('public private') },
- { name: 'workflows', type: t.list(workflowsUniton) },
- ];
-
- // Throw if any options are invalid
- checkOptions('upload (options)', allowedOptions, options);
- checkOptions('upload (storeOptions)', allowedStoreOptions, storeOptions);
-
- // Custom filename option
- const storeOpts = { ...storeOptions };
- const opts = { ...options };
- let customName;
-
- if (storeOpts.filename) {
- customName = storeOpts.filename;
- } else if (file.name === undefined) {
- // Blobs and buffers don't have names, Files do. Give a placeholder name for blobs.
- if (file.type) {
- const ext = file.type.split('/').pop();
- customName = `untitled.${ext}`;
- } else {
- customName = 'untitled';
- }
+ /**
+ * RUn progress with userdefined interval
+ *
+ * @private
+ * @returns
+ * @memberof Upload
+ */
+ private startProgressInterval() {
+ if (typeof this.options.onProgress !== 'function') {
+ return;
}
+ this.progressIntervalHandler = setInterval(() => {
+ this.options.onProgress(this.lastProgress);
+ }, this.options.progressInterval || DEFAULT_PROGRESS_INTERVAL);
- // Default location param
- if (storeOpts.location === undefined) {
- storeOpts.location = 's3';
- }
+ this.options.onProgress(this.lastProgress);
+ }
+
+ /**
+ * Stop progress interval after upload
+ *
+ * @private
+ * @memberof Upload
+ */
+ private stopProgressInterval() {
+ clearInterval(this.progressIntervalHandler);
+ }
- // Intelligent Ingestion requires part size of exactly 8MB
- if (opts.intelligent) {
- opts.partSize = 8 * 1024 * 1024;
+ /**
+ * Handle upload interval and normalize values
+ *
+ * @private
+ * @param {ProgressEvent} progress
+ * @memberof Upload
+ */
+ private handleProgress(progress: ProgressEvent) {
+ // get max progress data to avoid progress jumps on any part error
+ progress = normalizeProgress(progress, this.lastProgress);
+
+ if (this.lastProgress.files) {
+ for (let i in progress.files) {
+ if (this.lastProgress.files[i]) {
+ progress.files[i] = normalizeProgress(progress.files[i], this.lastProgress.files[i]);
+ }
+ }
}
- // Set security if on session or override
- const policy = security && security.policy || session.policy;
- const signature = security && security.signature || session.signature;
-
- // Configurables
- const config: UploadConfig = {
- host: session.urls.uploadApiUrl,
- apikey: session.apikey,
- policy,
- signature,
- partSize: 6 * 1024 * 1024,
- concurrency: 3,
- progressInterval: 1000,
- retry: 10,
- retryFactor: 2,
- retryMaxTime: 15000,
- customName,
- mimetype: options.mimetype,
- store: {
- workflows: storeOpts.workflows,
- store_location: storeOpts.location,
- store_region: storeOpts.region,
- store_container: storeOpts.container,
- store_path: storeOpts.path,
- store_access: storeOpts.access,
- },
- timeout: 120000,
- ...opts,
- };
-
- const initialState: State = {
- parts: {},
- progressTick: null,
- previousPayload: null,
- retries: {},
- status: statuses.INIT,
- };
-
- const context: Context = {
- file,
- config,
- state: initialState,
- };
-
- return uploadFile(context, token);
- });
-};
+ this.lastProgress = progress;
+ }
+}
diff --git a/src/lib/api/upload/uploaders/abstract.ts b/src/lib/api/upload/uploaders/abstract.ts
new file mode 100644
index 00000000..2a44c1e5
--- /dev/null
+++ b/src/lib/api/upload/uploaders/abstract.ts
@@ -0,0 +1,210 @@
+/*
+ * Copyright (c) 2019 by Filestack.
+ * Some rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+import Debug from 'debug';
+import * as EventEmitter from 'eventemitter3';
+
+import { File } from './../file';
+import { StoreUploadOptions } from './../types';
+import { Security } from './../../../client';
+import { RetryConfig } from './../../request';
+import { isMobile } from './../../../utils';
+import { FilestackError } from './../../../../filestack_error';
+
+// regular part size
+export const DEFAULT_PART_SIZE = 6 * 1024 * 1024;
+
+// Minimum part size for upload by multipart
+export const MIN_PART_SIZE = 5 * 1024 * 1024;
+
+// when mode is set to fallback or intelligent, this part size is required
+export const INTELLIGENT_CHUNK_SIZE = 8 * 1024 * 1024;
+
+// Mobile Chunk size for ii
+export const INTELLIGENT_MOBILE_CHUNK_SIZE = 1024 * 1024;
+
+// minimum intelligent chunk size
+export const MIN_CHUNK_SIZE = 32 * 1024;
+
+export const DEFAULT_STORE_LOCATION = 's3';
+
+const debug = Debug('fs:upload:abstract');
+
+export const enum UploadMode {
+ DEFAULT = 'default',
+ INTELLIGENT = 'intelligent',
+ FALLBACK = 'fallback',
+}
+
+export abstract class UploaderAbstract extends EventEmitter {
+ // Parts size options
+ protected partSize: number = DEFAULT_PART_SIZE;
+
+ // chunk size for ii uploads
+ protected intelligentChunkSize: number = isMobile() ? INTELLIGENT_MOBILE_CHUNK_SIZE : INTELLIGENT_CHUNK_SIZE;
+
+ // upload options
+ protected url: string;
+ protected timeout: number = 30 * 1000;
+ protected uploadMode: UploadMode = UploadMode.DEFAULT;
+
+ // application settings
+ protected apikey: string;
+ protected security: Security;
+
+ protected isModeLocked: boolean = false; // if account does not support ii in fallback mode we should abort
+ protected retryConfig: RetryConfig;
+
+ constructor(protected readonly storeOptions: StoreUploadOptions, protected readonly concurrency: number = 3) {
+ super();
+ }
+
+ public setSecurity(security: Security): void {
+ debug('Set security %O', security);
+ this.security = security;
+ }
+
+ public setApikey(apikey: string): void {
+ debug(`Set apikey to ${apikey}`);
+ this.apikey = apikey;
+ }
+
+ public setTimeout(timeout: number): void {
+ debug(`Set request timeout to ${timeout}`);
+ this.timeout = timeout;
+ }
+
+ public setRetryConfig(cfg: RetryConfig) {
+ this.retryConfig = cfg;
+ }
+
+ public setUrl(url: string): void {
+ this.url = url;
+ }
+
+ /**
+ * Sets upload mode
+ *
+ * @param {UploadMode} mode
+ * @param {boolean} [lock=false]
+ * @returns
+ * @memberof MultipartUploader
+ */
+ public setUploadMode(mode: UploadMode, lock: boolean = false): void {
+ // this shouldnt happend but for safety reasons if will stay
+ /* istanbul ignore next */
+ if (this.isModeLocked === true) {
+ debug(`Cannot switch mode to ${mode}. Locked! Probably mode is not supported at this apikey`);
+ return;
+ }
+
+ this.isModeLocked = lock;
+
+ debug(`Set upload mode to ${mode}`);
+
+ this.uploadMode = mode;
+ }
+
+ /**
+ * Set upload part size
+ * if part size is smaller than minimum 5mb it will throw error
+ *
+ * @param {number} size
+ * @returns {void}
+ * @memberof S3Uploader
+ */
+ public setPartSize(size: number): void {
+ if (this.uploadMode !== UploadMode.DEFAULT) {
+ debug('Cannot set part size because upload mode is other than default. ');
+ return;
+ }
+
+ debug(`Set part size to ${size}`);
+
+ if (size < MIN_PART_SIZE) {
+ throw new FilestackError('Minimum part size is 5MB');
+ }
+
+ this.partSize = size;
+ }
+
+ /**
+ * Returns current part size
+ */
+ public getPartSize() {
+ return this.partSize;
+ }
+
+ /**
+ * Set start part size for ii
+ *
+ * @param {number} size
+ * @memberof S3Uploader
+ */
+ public setIntelligentChunkSize(size: number): void {
+ debug(`Set inteligent chunk size to ${size}`);
+ if (size < MIN_CHUNK_SIZE) {
+ throw new FilestackError(`Minimum intelligent chunk size is ${MIN_CHUNK_SIZE}`);
+ }
+ this.intelligentChunkSize = size;
+ }
+
+ /**
+ * Returns intelligent chunk size
+ */
+ public getIntelligentChunkSize(): number {
+ return this.intelligentChunkSize;
+ }
+
+ /**
+ * Returns filestack upload url
+ *
+ * @private
+ * @returns
+ * @memberof MultipartUploader
+ */
+ public getUrl(): string {
+ if (!this.url) {
+ throw new FilestackError('Upload url not set');
+ }
+
+ return this.url;
+ }
+
+ /**
+ * Pause upload queue
+ *
+ * @memberof MultipartUploader
+ */
+ public abstract pause(): void;
+ /**
+ * resume upload queue if its paused
+ *
+ * @memberof MultipartUploader
+ */
+ public abstract resume(): void;
+
+ /**
+ * Aborts queue (all pending requests with will be aborted)
+ *
+ * @memberof MultipartUploader
+ */
+ public abstract abort(msg?: string): void;
+
+ public abstract addFile(file: File): string;
+
+ public abstract async execute(): Promise;
+}
diff --git a/src/lib/api/upload/uploaders/s3.spec.ts b/src/lib/api/upload/uploaders/s3.spec.ts
new file mode 100644
index 00000000..ea2be0ae
--- /dev/null
+++ b/src/lib/api/upload/uploaders/s3.spec.ts
@@ -0,0 +1,903 @@
+/*
+ * Copyright (c) 2019 by Filestack.
+ * Some rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import { S3Uploader } from './s3';
+import { File } from './../file';
+import * as nock from 'nock';
+import { UploadMode, DEFAULT_STORE_LOCATION, INTELLIGENT_CHUNK_SIZE, DEFAULT_PART_SIZE, INTELLIGENT_MOBILE_CHUNK_SIZE } from './abstract';
+import * as utils from '../../../utils';
+
+const testBufferSize = 1024 * 1024 * 9;
+const testSmallBufferSize = 1024 * 1024 * 2;
+let testBuff = Buffer.alloc(testBufferSize).fill('t', 0, testBufferSize);
+let smallTestBuff = Buffer.alloc(testSmallBufferSize).fill('t', 0, testSmallBufferSize);
+
+let scope;
+let interceptorS3;
+let interceptorStart;
+let interceptorCommit;
+let interceptorUpload;
+let interceptorComplete;
+
+const getTestFile = () =>
+ new File({
+ buffer: testBuff,
+ type: 'text/plain',
+ // @ts-ignore
+ size: testBuff.length,
+ name: 'test.txt',
+ });
+
+const getSmallTestFile = () =>
+ new File({
+ buffer: smallTestBuff,
+ type: 'text/plain',
+ // @ts-ignore
+ size: smallTestBuff.length,
+ name: 'test.txt',
+ });
+
+const testApikey = 'testapikey';
+const testHost = 'https://filestack-test.com';
+const mockUploadId = '123132123';
+const mockRegion = 'test-region';
+const mockedUri = '/sometest';
+const s3Url = testHost + '/fakes3';
+
+const mockStart = jest.fn().mockName('multipart/start');
+const mockUpload = jest.fn().mockName('multipart/upload');
+const mockPut = jest.fn().mockName('s3/put');
+const mockCommit = jest.fn().mockName('multipart/commit');
+const mockComplete = jest.fn().mockName('multipart/complete');
+
+const s3Callback = function(url) {
+ return mockPut(url, this.req.headers);
+};
+
+describe('Api/Upload/Uploaders/S3', () => {
+ beforeEach(() => {
+ scope = nock(testHost);
+ scope.persist();
+
+ interceptorStart = scope.post('/multipart/start');
+ interceptorUpload = scope.post('/multipart/upload');
+ interceptorCommit = scope.post('/multipart/commit');
+ interceptorComplete = scope.post('/multipart/complete');
+ interceptorS3 = scope.put('/fakes3');
+
+ interceptorStart.reply(200, (_, data) => mockStart(JSON.parse(data)));
+ interceptorUpload.twice().reply(200, (_, data) => mockUpload(JSON.parse(data)));
+ interceptorCommit.reply(200, (_, data) => mockCommit(JSON.parse(data)));
+ interceptorComplete.reply(200, (_, data) => mockComplete(JSON.parse(data)));
+ interceptorS3.twice().reply(201, s3Callback, { etag: 'test' });
+
+ mockStart.mockReturnValue({
+ uri: mockedUri,
+ region: mockRegion,
+ upload_id: mockUploadId,
+ location_url: testHost,
+ });
+
+ mockUpload.mockReturnValue({
+ url: s3Url,
+ headers: {
+ test: 'test',
+ },
+ location_url: testHost,
+ });
+
+ mockPut.mockReturnValue({});
+ mockCommit.mockReturnValue({});
+
+ mockComplete.mockReturnValue({
+ handle: 'test_handle',
+ url: 'test_url',
+ filename: 'test_filename',
+ size: 123,
+ mimetype: 'test_mimetype',
+ status: 'test_status',
+ });
+ });
+
+ afterEach(() => {
+ nock.cleanAll();
+ nock.enableNetConnect();
+ jest.clearAllMocks();
+ });
+
+ describe('Standart tests', () => {
+ it('should initialize class without errors', () => {
+ expect(() => {
+ const u = new S3Uploader({});
+ const uu = new S3Uploader({}, 10);
+ }).not.toThrowError();
+ });
+
+ it('should allow adding files', () => {
+ const u = new S3Uploader({});
+ u.addFile(getTestFile());
+ });
+
+ it('should not allow to set min part size lower than defined', () => {
+ const u = new S3Uploader({});
+ expect(() => u.setPartSize(10)).toThrowError();
+ });
+
+ it('should throw an error when setting to small intelligent chunk size', () => {
+ const u = new S3Uploader({});
+ expect(() => u.setIntelligentChunkSize(10)).toThrowError();
+ });
+
+ it('should throw an error when trying to get host when it is undefined', () => {
+ const u = new S3Uploader({});
+ expect(() => u.getUrl()).toThrowError();
+ });
+
+ it('should set intelligent mobile chunk size on mobile devices', () => {
+ spyOn(utils, 'isMobile').and.returnValue(true);
+ const u = new S3Uploader({});
+ return expect(u.getIntelligentChunkSize()).toEqual(INTELLIGENT_MOBILE_CHUNK_SIZE);
+ });
+
+ it('should allow to set part size on other mode thant regular', () => {
+ const u = new S3Uploader({});
+ u.setUploadMode(UploadMode.INTELLIGENT);
+
+ const partSize = 1024 * 1024;
+ u.setPartSize(partSize);
+
+ expect(u.getPartSize()).toEqual(DEFAULT_PART_SIZE);
+ });
+
+ it('should retry complete request on 202 status code', async () => {
+ const mock202 = jest
+ .fn()
+ .mockName('202 mock')
+ .mockReturnValue('');
+
+ nock.removeInterceptor(interceptorComplete);
+ scope.persist(false);
+ scope.post('/multipart/complete').reply(202, () => mock202());
+ scope.post('/multipart/complete').reply(200, (_, data) => mockComplete(JSON.parse(data)));
+
+ const u = new S3Uploader({});
+ u.setUrl(testHost);
+ u.setApikey(testApikey);
+ u.addFile(getTestFile());
+
+ const res = await u.execute();
+
+ expect(res[0].handle).toEqual('test_handle');
+ expect(res[0].status).toEqual('test_status');
+
+ expect(mock202).toHaveBeenCalledTimes(1);
+ expect(mockComplete).toHaveBeenCalledTimes(1);
+ });
+
+ it('should respect provided store options and add prefix to them', async () => {
+ const storeOption = {
+ container: 'test',
+ location: DEFAULT_STORE_LOCATION,
+ workflows: [{
+ id: 'test',
+ }],
+ };
+
+ const u = new S3Uploader(storeOption);
+ u.setUrl(testHost);
+ u.setApikey(testApikey);
+ u.addFile(getSmallTestFile());
+
+ const res = await u.execute();
+
+ const testFile = getSmallTestFile();
+ expect(mockStart).toHaveBeenCalledWith({
+ filename: testFile.name,
+ mimetype: testFile.mimetype,
+ size: testFile.size,
+ store: storeOption,
+ apikey: testApikey,
+ });
+
+ expect(mockComplete).toHaveBeenCalledWith({
+ filename: testFile.name,
+ mimetype: testFile.mimetype,
+ size: testFile.size,
+ store: storeOption,
+ apikey: testApikey,
+ parts: [{ part_number: 1, etag: 'test' }],
+ region: mockRegion,
+ upload_id: mockUploadId,
+ uri: mockedUri,
+ });
+ });
+
+ it('should add https protocol to location_url', async () => {
+ mockStart.mockReturnValue({
+ uri: mockedUri,
+ region: mockRegion,
+ upload_id: mockUploadId,
+ location_url: testHost.replace('https://', ''),
+ });
+
+ const u = new S3Uploader({});
+ u.setUrl(testHost);
+ u.setApikey(testApikey);
+ u.addFile(getSmallTestFile());
+
+ const res = await u.execute();
+
+ expect(res[0].handle).toEqual('test_handle');
+ expect(res[0].status).toEqual('test_status');
+
+ expect(mockPut).toHaveBeenCalled();
+ });
+
+ it('should add Filestack-Upload-Region header on location_region param', async () => {
+ mockStart.mockReturnValue({
+ uri: mockedUri,
+ region: mockRegion,
+ upload_id: mockUploadId,
+ location_region: 'test',
+ location_url: testHost.replace('https://', ''),
+ });
+
+ interceptorUpload.reply(200, function(_, data) {
+ return mockUpload(JSON.parse(data), this.req.headers);
+ });
+
+ const u = new S3Uploader({});
+ u.setUrl(testHost);
+ u.setApikey(testApikey);
+ u.addFile(getSmallTestFile());
+
+ const res = await u.execute();
+
+ expect(res[0].handle).toEqual('test_handle');
+ expect(res[0].status).toEqual('test_status');
+
+ const testFile = getSmallTestFile();
+ expect(mockUpload).toHaveBeenCalledWith(
+ {
+ md5: testFile.md5,
+ size: testFile.size,
+ apikey: testApikey,
+ region: mockRegion,
+ store: {
+ location: DEFAULT_STORE_LOCATION,
+ },
+ uri: mockedUri,
+ upload_id: mockUploadId,
+ part: 1,
+ },
+ expect.objectContaining({ 'filestack-upload-region': 'test' })
+ );
+
+ expect(mockPut).toHaveBeenCalled();
+ });
+
+ it('should respect pause() and resume() command', async () => {
+ const u = new S3Uploader({});
+ u.setUrl(testHost);
+ u.setApikey(testApikey);
+ u.addFile(getTestFile());
+
+ setImmediate(() => u.pause());
+ setTimeout(() => u.resume(), 10);
+
+ const res = await u.execute();
+
+ expect(res[0].handle).toEqual('test_handle');
+ expect(res[0].status).toEqual('test_status');
+ });
+
+ it('should respect abort() command', (done) => {
+ const u = new S3Uploader({});
+ u.setUrl(testHost);
+ u.setApikey(testApikey);
+ u.addFile(getTestFile());
+
+ setImmediate(() => u.abort());
+ u.execute().then((res) => {
+ expect(res[0].status).toEqual('Failed');
+ done();
+ }).catch(() => {
+ done('Execution failed');
+ });
+ });
+
+ it('should send correct security', async () => {
+ const testSecurity = {
+ policy: 'test_p',
+ signature: 'test_s',
+ };
+
+ const u = new S3Uploader({});
+ u.setUrl(testHost);
+ u.setApikey(testApikey);
+ u.setSecurity(testSecurity);
+ u.addFile(getSmallTestFile());
+
+ const res = await u.execute();
+ expect(res[0].status).toEqual('test_status');
+
+ expect(mockStart).toHaveBeenCalledWith(expect.objectContaining(testSecurity));
+ expect(mockUpload).toHaveBeenCalledWith(expect.objectContaining(testSecurity));
+ expect(mockComplete).toHaveBeenCalledWith(expect.objectContaining(testSecurity));
+
+ });
+ });
+
+ describe('Upload modes', () => {
+ describe('Intelligent ingession', () => {
+ beforeEach(() => {
+ mockStart.mockReturnValue({
+ uri: mockedUri,
+ region: mockRegion,
+ upload_id: mockUploadId,
+ location_url: testHost,
+ upload_type: 'intelligent_ingestion',
+ });
+ });
+
+ it('should upload file', async () => {
+ const chunkSize = 1024 * 1024;
+
+ const u = new S3Uploader({});
+ u.setUrl(testHost);
+ u.setApikey(testApikey);
+ u.setUploadMode(UploadMode.INTELLIGENT);
+ u.setIntelligentChunkSize(chunkSize);
+ u.addFile(getSmallTestFile());
+
+ const res = await u.execute();
+ expect(res[0].handle).toEqual('test_handle');
+
+ const testFile = getSmallTestFile();
+ expect(mockStart).toHaveBeenCalledWith({
+ filename: testFile.name,
+ mimetype: testFile.mimetype,
+ size: testFile.size,
+ store: {
+ location: DEFAULT_STORE_LOCATION,
+ },
+ apikey: testApikey,
+ fii: true,
+ });
+
+ const firstPartOffset = 0;
+ const firstPartMetadata = testFile.getPartMetadata(0, INTELLIGENT_CHUNK_SIZE);
+ const firstPartChunk = testFile.getChunkByMetadata(firstPartMetadata, firstPartOffset, chunkSize);
+
+ expect(mockUpload).toHaveBeenCalledWith({
+ md5: firstPartChunk.md5,
+ size: firstPartChunk.size,
+ apikey: testApikey,
+ region: mockRegion,
+ store: {
+ location: DEFAULT_STORE_LOCATION,
+ },
+ uri: mockedUri,
+ upload_id: mockUploadId,
+ offset: firstPartOffset,
+ fii: true,
+ part: 1,
+ });
+
+ expect(mockPut).toHaveBeenCalledWith('/fakes3', expect.any(Object));
+
+ const secondPartOffset = chunkSize;
+ const firstPartSecondChunk = testFile.getChunkByMetadata(firstPartMetadata, secondPartOffset, chunkSize);
+
+ expect(mockUpload).toHaveBeenCalledWith({
+ md5: firstPartSecondChunk.md5,
+ size: firstPartSecondChunk.size,
+ apikey: testApikey,
+ region: mockRegion,
+ store: {
+ location: DEFAULT_STORE_LOCATION,
+ },
+ uri: mockedUri,
+ upload_id: mockUploadId,
+ offset: secondPartOffset,
+ fii: true,
+ part: 1,
+ });
+
+ expect(mockPut).toHaveBeenCalledWith('/fakes3', expect.any(Object));
+
+ expect(mockCommit).toHaveBeenCalledWith({
+ apikey: testApikey,
+ part: 1,
+ size: testFile.size,
+ region: mockRegion,
+ uri: mockedUri,
+ upload_id: mockUploadId,
+ store: {
+ location: DEFAULT_STORE_LOCATION,
+ },
+ });
+
+ expect(mockComplete).toHaveBeenCalledWith({
+ apikey: testApikey,
+ filename: testFile.name,
+ mimetype: testFile.mimetype,
+ size: testFile.size,
+ region: mockRegion,
+ upload_id: mockUploadId,
+ store: {
+ location: DEFAULT_STORE_LOCATION,
+ },
+ fii: true,
+ uri: mockedUri,
+ });
+ });
+
+ it('should lower chunk size on network error', async () => {
+ const putRequestTimeout = 300;
+
+ let delayApplied = false;
+ interceptorS3.reply(
+ function(url, _, cb) {
+ if (!delayApplied) {
+ delayApplied = true;
+ setTimeout(() => {
+ cb();
+ }, putRequestTimeout + 10);
+ } else {
+ cb(null, mockPut(url, this.req.headers));
+ }
+ },
+ {
+ etag: 'test',
+ }
+ );
+
+ const u = new S3Uploader({});
+ u.setUrl(testHost);
+ u.setApikey(testApikey);
+ u.setTimeout(putRequestTimeout);
+ u.setUploadMode(UploadMode.INTELLIGENT);
+
+ u.addFile(getSmallTestFile());
+ const res = await u.execute();
+ expect(res[0].handle).toEqual('test_handle');
+ expect(res[0].status).toEqual('test_status');
+
+ const testFile = getSmallTestFile();
+ const firstPartMetadata = testFile.getPartMetadata(0, INTELLIGENT_CHUNK_SIZE);
+ const firstPartChunk = testFile.getChunkByMetadata(firstPartMetadata, 0, INTELLIGENT_CHUNK_SIZE);
+
+ // this request will be aborted but called on mock upload
+ expect(mockUpload).toHaveBeenNthCalledWith(1, {
+ md5: firstPartChunk.md5,
+ size: firstPartChunk.size,
+ apikey: testApikey,
+ region: mockRegion,
+ fii: true,
+ store: {
+ location: DEFAULT_STORE_LOCATION,
+ },
+ uri: mockedUri,
+ upload_id: mockUploadId,
+ offset: 0,
+ part: 1,
+ });
+
+ // split part size by a half and retry request (thats give us 2 chunks so 2 upload requests needed)
+ const chunkSize = Math.min(INTELLIGENT_CHUNK_SIZE, testFile.size) / 2;
+ const chunk1 = testFile.getChunkByMetadata(firstPartMetadata, 0, chunkSize);
+
+ expect(mockUpload).toHaveBeenNthCalledWith(2, {
+ md5: chunk1.md5,
+ size: chunk1.size,
+ apikey: testApikey,
+ region: mockRegion,
+ store: {
+ location: DEFAULT_STORE_LOCATION,
+ },
+ fii: true,
+ uri: mockedUri,
+ upload_id: mockUploadId,
+ offset: 0,
+ part: 1,
+ });
+
+ const chunk2 = testFile.getChunkByMetadata(firstPartMetadata, chunkSize / 2, chunkSize);
+
+ expect(mockUpload).toHaveBeenNthCalledWith(3, {
+ md5: chunk2.md5,
+ size: chunk2.size,
+ apikey: testApikey,
+ region: mockRegion,
+ store: {
+ location: DEFAULT_STORE_LOCATION,
+ },
+ fii: true,
+ uri: mockedUri,
+ upload_id: mockUploadId,
+ offset: chunkSize,
+ part: 1,
+ });
+ });
+
+ it('should exit when chunk size reaches min chunk size', async () => {
+ interceptorS3.reply((url, _, cb) => cb('Error'));
+
+ const u = new S3Uploader({});
+ u.setUrl(testHost);
+ u.setApikey(testApikey);
+ u.setTimeout(100);
+ u.setUploadMode(UploadMode.INTELLIGENT);
+
+ u.addFile(getSmallTestFile());
+ const res = await u.execute();
+ expect(res[0].status).toEqual('Failed');
+ });
+
+ it('should exit on 4xx errors', async () => {
+ mockStart.mockReturnValue({
+ uri: mockedUri,
+ region: mockRegion,
+ upload_id: mockUploadId,
+ location_url: testHost,
+ upload_type: 'intelligent_ingestion',
+ });
+
+ interceptorS3.reply(400, {
+ message: 'something awful happened',
+ code: 'bad_request',
+ });
+
+ const u = new S3Uploader({});
+ u.setUrl(testHost);
+ u.setApikey(testApikey);
+ u.setTimeout(100);
+ u.setUploadMode(UploadMode.INTELLIGENT);
+
+ u.addFile(getSmallTestFile());
+ const res = await u.execute();
+ expect(res[0].status).toEqual('Failed');
+ });
+
+ it('should nor process upload on multipart/upload network error', async () => {
+ interceptorUpload.reply(400, {
+ message: 'something awful happened',
+ code: 'bad_request',
+ });
+
+ const u = new S3Uploader({});
+ u.setUrl(testHost);
+ u.setApikey(testApikey);
+ u.setUploadMode(UploadMode.INTELLIGENT);
+ u.addFile(getSmallTestFile());
+
+ const res = await u.execute();
+
+ expect(res[0].status).toEqual('Failed');
+
+ expect(mockStart).toHaveBeenCalled();
+ expect(mockPut).not.toHaveBeenCalled();
+ expect(mockCommit).not.toHaveBeenCalled();
+ expect(mockComplete).not.toHaveBeenCalled();
+ });
+ });
+
+ describe('Fallback mode', () => {
+ it('should switch to fallback mode if regular upload fails', async () => {
+ mockStart.mockReturnValue({
+ uri: mockedUri,
+ region: mockRegion,
+ upload_id: mockUploadId,
+ location_url: testHost,
+ upload_type: 'intelligent_ingestion',
+ });
+
+ let networkFail = true;
+ interceptorS3.reply(
+ function(url, _, cb) {
+ if (networkFail) {
+ networkFail = false;
+ return cb('Error');
+ }
+
+ cb(null, mockPut(url, this.req.headers));
+ },
+ {
+ etag: 'test',
+ }
+ );
+
+ const u = new S3Uploader({});
+ u.setUrl(testHost);
+ u.setApikey(testApikey);
+ u.setUploadMode(UploadMode.FALLBACK);
+ u.addFile(getSmallTestFile());
+
+ const res = await u.execute();
+
+ expect(res[0].handle).toEqual('test_handle');
+ expect(res[0].status).toEqual('test_status');
+
+ const testFile = getSmallTestFile();
+ const firstPartMeta = testFile.getPartMetadata(0, DEFAULT_PART_SIZE);
+ const firstPart = testFile.getPartByMetadata(firstPartMeta);
+
+ expect(mockUpload).toHaveBeenNthCalledWith(1, {
+ md5: firstPart.md5,
+ size: firstPart.size,
+ apikey: testApikey,
+ region: mockRegion,
+ store: {
+ location: DEFAULT_STORE_LOCATION,
+ },
+ uri: mockedUri,
+ upload_id: mockUploadId,
+ part: 1,
+ });
+
+ expect(mockUpload).toHaveBeenNthCalledWith(2, {
+ md5: firstPart.md5,
+ size: firstPart.size,
+ fii: true,
+ apikey: testApikey,
+ region: mockRegion,
+ store: {
+ location: DEFAULT_STORE_LOCATION,
+ },
+ uri: mockedUri,
+ offset: 0,
+ upload_id: mockUploadId,
+ part: 1,
+ });
+ });
+
+ it('should exit if intelligent ingestion is not enabled in account settings', async () => {
+ mockStart.mockReturnValue({
+ uri: mockedUri,
+ region: mockRegion,
+ upload_id: mockUploadId,
+ location_url: testHost,
+ });
+
+ let networkFail = true;
+ interceptorS3.reply(
+ function(url, _, cb) {
+ if (networkFail) {
+ networkFail = false;
+ return cb({
+ message: 'ConnectionError',
+ code: 'ETIMEDOUT',
+ });
+ }
+
+ cb(null, mockPut(url, this.req.headers));
+ },
+ {
+ etag: 'test',
+ }
+ );
+
+ const u = new S3Uploader({});
+ u.setUrl(testHost);
+ u.setApikey(testApikey);
+ u.setUploadMode(UploadMode.FALLBACK);
+ u.addFile(getSmallTestFile());
+
+ const res = await u.execute();
+
+ expect(res[0].status).toEqual('Failed');
+ expect(mockCommit).not.toHaveBeenCalled();
+ expect(mockComplete).not.toHaveBeenCalled();
+ });
+ });
+ });
+
+ describe('Regular upload', () => {
+ it('should upload file', async () => {
+ const partSize = 1024 * 1024 * 7;
+
+ const u = new S3Uploader({});
+ u.setUrl(testHost);
+ u.setApikey(testApikey);
+ u.setPartSize(partSize);
+ u.addFile(getTestFile());
+
+ const res = await u.execute();
+
+ const testFile = getTestFile();
+
+ expect(mockStart).toHaveBeenCalledWith({
+ filename: testFile.name,
+ mimetype: testFile.mimetype,
+ size: testFile.size,
+ store: {
+ location: DEFAULT_STORE_LOCATION,
+ },
+ apikey: testApikey,
+ });
+
+ const firstPartMeta = testFile.getPartMetadata(0, partSize);
+ const firstPart = testFile.getPartByMetadata(firstPartMeta);
+
+ expect(mockUpload).toHaveBeenNthCalledWith(1, {
+ md5: firstPart.md5,
+ size: firstPart.size,
+ apikey: testApikey,
+ region: mockRegion,
+ store: {
+ location: DEFAULT_STORE_LOCATION,
+ },
+ uri: mockedUri,
+ upload_id: mockUploadId,
+ part: 1,
+ });
+
+ const secondPartMeta = testFile.getPartMetadata(1, partSize);
+ const secondPart = testFile.getPartByMetadata(secondPartMeta);
+
+ expect(mockUpload).toHaveBeenNthCalledWith(2, {
+ md5: secondPart.md5,
+ size: secondPart.size,
+ apikey: testApikey,
+ region: mockRegion,
+ store: {
+ location: DEFAULT_STORE_LOCATION,
+ },
+ uri: mockedUri,
+ upload_id: mockUploadId,
+ part: 2,
+ });
+
+ expect(mockPut).toHaveBeenCalledWith('/fakes3', expect.any(Object));
+ expect(mockComplete).toHaveBeenCalledWith({
+ apikey: testApikey,
+ filename: testFile.name,
+ mimetype: testFile.mimetype,
+ size: testFile.size,
+ parts: [{ part_number: 1, etag: 'test' }, { part_number: 2, etag: 'test' }],
+ region: mockRegion,
+ upload_id: mockUploadId,
+ store: {
+ location: DEFAULT_STORE_LOCATION,
+ },
+ uri: mockedUri,
+ });
+
+ expect(res[0].handle).toEqual('test_handle');
+ expect(res[0].status).toEqual('test_status');
+ });
+
+ it('should not process upload on multipart/upload network error', async () => {
+ interceptorUpload.reply(400, {
+ message: 'something awful happened',
+ code: 'bad_request',
+ });
+
+ const u = new S3Uploader({});
+ u.setUrl(testHost);
+ u.setApikey(testApikey);
+ u.addFile(getSmallTestFile());
+
+ const res = await u.execute();
+
+ expect(res[0].status).toEqual('Failed');
+
+ expect(mockStart).toHaveBeenCalled();
+ expect(mockPut).not.toHaveBeenCalled();
+ expect(mockCommit).not.toHaveBeenCalled();
+ expect(mockComplete).not.toHaveBeenCalled();
+ });
+
+ it('should repsect retry config', async () => {
+ // simulate first request network fail
+ let networkFail = true;
+ nock.removeInterceptor(interceptorS3);
+ scope.persist(false);
+
+ interceptorS3.twice().reply(
+ function(url, _, cb) {
+ if (networkFail) {
+ networkFail = false;
+ return cb('Error');
+ }
+
+ cb(null, mockPut(url, this.req.headers));
+ },
+ {
+ etag: 'test',
+ }
+ );
+
+ const u = new S3Uploader({});
+ u.setUrl(testHost);
+ u.setApikey(testApikey);
+ u.addFile(getSmallTestFile());
+ u.setRetryConfig({
+ retry: 1,
+ retryFactor: 2,
+ retryMaxTime: 10,
+ });
+
+ const res = await u.execute();
+ expect(res[0].status).toEqual('test_status');
+ });
+ });
+
+ describe('Common network errors', () => {
+ it('should not process upload on wrong start response', async () => {
+ mockStart.mockReset();
+ mockStart.mockReturnValue({
+ test: 123,
+ });
+
+ const u = new S3Uploader({});
+ u.setUrl(testHost);
+ u.setApikey(testApikey);
+ u.addFile(getSmallTestFile());
+
+ const res = await u.execute();
+
+ expect(res[0].status).toEqual('Failed');
+ expect(mockPut).not.toHaveBeenCalled();
+ expect(mockUpload).not.toHaveBeenCalled();
+ expect(mockCommit).not.toHaveBeenCalled();
+ expect(mockComplete).not.toHaveBeenCalled();
+ });
+
+ it('should not process upload on start error', async () => {
+ interceptorStart.reply(400, {
+ message: 'something awful happened',
+ code: 'bad_request',
+ });
+
+ const u = new S3Uploader({});
+ u.setUrl(testHost);
+ u.setApikey(testApikey);
+ u.addFile(getSmallTestFile());
+
+ const res = await u.execute();
+
+ expect(res[0].status).toEqual('Failed');
+
+ expect(mockPut).not.toHaveBeenCalled();
+ expect(mockUpload).not.toHaveBeenCalled();
+ expect(mockCommit).not.toHaveBeenCalled();
+ expect(mockComplete).not.toHaveBeenCalled();
+ });
+
+ it('should nor process upload on multipart/complete network error', async () => {
+ interceptorComplete.reply(400, {
+ message: 'something awful happened',
+ code: 'bad_request',
+ });
+
+ const u = new S3Uploader({});
+ u.setUrl(testHost);
+ u.setApikey(testApikey);
+ u.addFile(getSmallTestFile());
+
+ const res = await u.execute();
+
+ expect(res[0].status).toEqual('Failed');
+
+ expect(mockStart).toHaveBeenCalled();
+ expect(mockPut).toHaveBeenCalled();
+ expect(mockCommit).not.toHaveBeenCalled();
+ });
+ });
+});
diff --git a/src/lib/api/upload/uploaders/s3.ts b/src/lib/api/upload/uploaders/s3.ts
new file mode 100644
index 00000000..29c67cd7
--- /dev/null
+++ b/src/lib/api/upload/uploaders/s3.ts
@@ -0,0 +1,774 @@
+/*
+ * Copyright (c) 2019 by Filestack.
+ * Some rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import PQueue from 'p-queue';
+import Debug from 'debug';
+import { CancelTokenSource, AxiosResponse } from 'axios';
+
+import { File, FilePart, FilePartMetadata, FileState } from './../file';
+import { StoreUploadOptions } from './../types';
+import { postWithRetry, request, useRetryPolicy, shouldRetry } from './../../request';
+import { uniqueTime, uniqueId, filterObject } from './../../../utils';
+import { UploaderAbstract, UploadMode, INTELLIGENT_CHUNK_SIZE, MIN_CHUNK_SIZE, DEFAULT_STORE_LOCATION } from './abstract';
+import { FilestackError, FilestackErrorType } from './../../../../filestack_error';
+
+const debug = Debug('fs:upload:s3');
+
+const COMPLETE_TIMEOUT = 1000 * 1;
+
+export interface UploadPart extends FilePartMetadata {
+ etag?: string;
+ offset?: number;
+ progress?: number;
+}
+
+export interface UploadPayload {
+ file: File;
+ parts: UploadPart[];
+ handle?: string;
+ uri?: string;
+ region?: string;
+ upload_id?: number;
+ location_url?: string;
+ location_region?: string;
+}
+
+export class S3Uploader extends UploaderAbstract {
+ private partsQueue;
+ private cancelToken: CancelTokenSource; // global cancel token for all requests
+
+ private payloads: { [key: string]: UploadPayload } = {};
+
+ constructor(storeOptions: StoreUploadOptions, concurrency?) {
+ super(storeOptions, concurrency);
+
+ this.partsQueue = new PQueue({
+ autoStart: false,
+ concurrency: this.concurrency,
+ });
+
+ // setup cancel token
+ const CancelToken = request.CancelToken;
+ this.cancelToken = CancelToken.source();
+ }
+
+ /**
+ * Pause upload queue
+ *
+ * @memberof S3Uploader
+ */
+ public pause(): void {
+ this.partsQueue.pause();
+ }
+
+ /**
+ * resume upload queue if its paused
+ *
+ * @memberof S3Uploader
+ */
+ public resume(): void {
+ /* istanbul ignore next */
+ if (this.partsQueue.isPaused) {
+ this.partsQueue.start();
+ }
+ }
+
+ /**
+ * Aborts queue (all pending requests with will be aborted)
+ *
+ * @memberof S3Uploader
+ */
+ public abort(msg?: string): void {
+ this.cancelToken.cancel(msg || 'Aborted by user');
+ this.partsQueue.clear();
+ }
+
+ /**
+ * Execute all queued files
+ *
+ * @returns {Promise}
+ * @memberof S3Uploader
+ */
+ public async execute(): Promise {
+ const tasks = Object.keys(this.payloads).map(
+ id =>
+ new Promise(async resolve => {
+ try {
+ await this.startRequest(id);
+ await this.prepareParts(id);
+ await this.startPartsQueue(id);
+ await this.completeRequest(id);
+ } catch (e) {
+ /* istanbul ignore next */
+ this.emit('error', e);
+ debug(`[${id}] File upload failed. %O, \nDetails: %O `, e.message, e.details);
+ }
+
+ const file = this.getPayloadById(id).file;
+
+ // release file buffer
+ file.release();
+
+ // cleanup payloads
+ delete this.payloads[id];
+
+ resolve(file);
+ })
+ );
+
+ return Promise.all(tasks).then((res) => {
+ // prevent cancel token memory leak
+ try {
+ this.cancelToken.cancel();
+ } catch (e) {
+ /* istanbul ignore next */
+ debug(`Cannot cleanup cancel token %O`, e.message);
+ }
+
+ return res;
+ });
+ }
+
+ /**
+ * Add file to upload queue
+ *
+ * @param {File} file
+ * @returns
+ * @memberof S3Uploader
+ */
+ public addFile(file: File): string {
+ debug('Add file to queue: \n %o', file);
+
+ const id = `${uniqueId(15)}_${uniqueTime()}`;
+
+ file.status = FileState.INIT;
+
+ // split file into parts and set it as waiting
+ this.payloads[id] = {
+ file,
+ parts: [],
+ };
+
+ return id;
+ }
+
+ /**
+ * Returns host for upload (region based)
+ *
+ * @private
+ * @returns
+ * @memberof S3Uploader
+ */
+ private getUploadUrl(id: string): string {
+ const { location_url } = this.getDefaultFields(id, ['location_url']);
+ return location_url.indexOf('http') === 0 ? location_url : `https://${location_url}`;
+ }
+
+ /**
+ * Returns formatted store options
+ *
+ * @private
+ * @returns
+ * @memberof S3Uploader
+ */
+ private getStoreOptions() {
+ return {
+ location: DEFAULT_STORE_LOCATION, // this parameter is required, if not set use default one
+ ...this.storeOptions,
+ };
+ }
+
+ /**
+ * Returns all default fields for filestack requests
+ *
+ * @private
+ * @returns
+ * @memberof S3Uploader
+ */
+ private getDefaultFields(id: string, requiredFields: string[], fiiFallback: boolean = false) {
+ const payload = this.getPayloadById(id);
+
+ let fields = {
+ ...this.security,
+ apikey: this.apikey,
+ uri: payload.uri,
+ location_url: payload.location_url,
+ upload_id: payload.upload_id,
+ region: payload.region,
+ };
+
+ if (this.uploadMode === UploadMode.INTELLIGENT || (this.uploadMode === UploadMode.FALLBACK && fiiFallback)) {
+ fields['fii'] = true;
+ }
+
+ return {
+ ...filterObject(fields, requiredFields),
+ store: this.getStoreOptions(),
+ };
+ }
+
+ /**
+ * Returns default headers needed for filestack request
+ *
+ * @private
+ * @returns
+ * @memberof S3Uploader
+ */
+ private getDefaultHeaders(id: string) {
+ let headers = {};
+ const file = this.getPayloadById(id);
+
+ if (file.location_region) {
+ headers['Filestack-Upload-Region'] = file.location_region;
+ }
+
+ return headers;
+ }
+
+ private getPayloadById(id: string): UploadPayload {
+ return this.payloads[id];
+ }
+
+ /**
+ * Split file onto parts for uploading with multipart mechanism and setup start
+ *
+ * @private
+ * @memberof S3Uploader
+ */
+ private prepareParts(id: string): Promise {
+ const file = this.getPayloadById(id).file;
+
+ // for intelligent or fallback mode we cant overwrite part size - requires 8MB
+ if ([UploadMode.INTELLIGENT, UploadMode.FALLBACK].indexOf(this.uploadMode) > -1) {
+ this.partSize = INTELLIGENT_CHUNK_SIZE;
+ }
+
+ const partsCount = file.getPartsCount(this.partSize);
+
+ const parts = [];
+
+ for (let i = 0; i < partsCount; i++) {
+ parts[i] = {
+ ...file.getPartMetadata(i, this.partSize),
+ offset: 0,
+ };
+ }
+
+ // split file into parts and set it as waiting
+ this.payloads[id].parts = parts;
+
+ return Promise.resolve();
+ }
+
+ /**
+ * Make start request for getting needed upload fields
+ *
+ * @private
+ * @returns {Promise}
+ * @memberof S3Uploader
+ */
+ private startRequest(id: string): Promise {
+ const payload = this.getPayloadById(id);
+
+ debug(`[${id}] Make start request`);
+
+ return postWithRetry(
+ `${this.getUrl()}/multipart/start`,
+ {
+ filename: payload.file.name,
+ mimetype: payload.file.type,
+ size: payload.file.size,
+ ...this.getDefaultFields(id, ['apikey', 'policy', 'signature', 'fii'], true),
+ },
+ {
+ timeout: this.timeout,
+ cancelToken: this.cancelToken.token,
+ headers: this.getDefaultHeaders(id),
+ },
+ this.retryConfig
+ )
+ .then(({ data }) => {
+ if (!data || !data.location_url || !data.region || !data.upload_id || !data.uri) {
+ debug(`[${id}] Incorrect start response: \n%O\n`, data);
+ this.setPayloadStatus(id, FileState.FAILED);
+ return Promise.reject(new FilestackError('Incorrect start response', data, FilestackErrorType.REQUEST));
+ }
+
+ debug(`[${id}] Assign payload data: \n%O\n`, data);
+
+ this.updatePayload(id, data);
+
+ // ii is not enabled in backend switch back to default upload mode
+ if ([UploadMode.INTELLIGENT, UploadMode.FALLBACK].indexOf(this.uploadMode) > -1 && (!data.upload_type || data.upload_type !== 'intelligent_ingestion')) {
+ debug(`[${id}] Intelligent Ingestion is not enabled on account, switch back to regular upload and lock mode change`);
+ this.setUploadMode(UploadMode.DEFAULT, true);
+ }
+
+ return data;
+ })
+ .catch(err => {
+ debug(`[${id}] Start request error %O`, err);
+ this.setPayloadStatus(id, FileState.FAILED);
+ return Promise.reject(new FilestackError('Cannot upload file', err.data, FilestackErrorType.REQUEST));
+ });
+ }
+
+ /**
+ * Enqueue file parts to upload
+ *
+ * @private
+ * @returns
+ * @memberof S3Uploader
+ */
+ private async startPartsQueue(id: string): Promise {
+ const payload = this.getPayloadById(id);
+ const parts = payload.parts;
+ const waitingLength = parts.length;
+
+ debug(`[${id}] Create uploading queue from file. parts count - %d`, waitingLength);
+ parts.forEach(part =>
+ this.partsQueue
+ .add(() => this.startPart(id, part.partNumber))
+ .catch(e => {
+ this.setPayloadStatus(id, FileState.FAILED);
+ debug(`[${id}] Failed to upload part %s`, e.message);
+ })
+ );
+
+ debug(`[${id}] All tasks for %s enqueued. Start processing main upload queue`, id);
+ this.partsQueue.start();
+
+ return this.partsQueue.onIdle();
+ }
+
+ /**
+ * Decide if upload should be made using ii or regular upload
+ * It allows change upload mode during upload queue
+ *
+ * @private
+ * @param {number} partNumber
+ * @returns {Promise}
+ * @memberof S3Uploader
+ */
+ private startPart(id: string, partNumber: number): Promise {
+ debug(`[${id}] Start processing part ${partNumber} with mode ${this.uploadMode}`);
+
+ let payload = this.getPayloadById(id);
+
+ payload.file.status = FileState.PROGRESS;
+ return (this.uploadMode !== UploadMode.INTELLIGENT ? this.uploadRegular : this.uploadIntelligent).apply(this, [id, partNumber]);
+ }
+
+ /**
+ * Returns part data needed for upload
+ *
+ * @private
+ * @param {string} id - id of a currently uploading file
+ * @param {FilePart} part
+ * @returns
+ * @memberof S3Uploader
+ */
+ private getS3PartMetadata(id: string, part: FilePart, offset?: number): Promise {
+ const url = this.getUploadUrl(id);
+
+ debug(`[${id}] Get data for part ${part.partNumber}, url ${url}, Md5: ${part.md5}, Size: ${part.size}`);
+
+ return postWithRetry(
+ `${url}/multipart/upload`,
+ {
+ ...this.getDefaultFields(id, ['apikey', 'uri', 'region', 'signature', 'policy', 'upload_id', 'fii']),
+ // method specific keys
+ part: part.partNumber + 1,
+ md5: part.md5,
+ size: part.size,
+ offset,
+ },
+ {
+ headers: this.getDefaultHeaders(id),
+ cancelToken: this.cancelToken.token,
+ timeout: this.timeout,
+ },
+ this.retryConfig
+ ).catch(err => {
+ this.setPayloadStatus(id, FileState.FAILED);
+ return Promise.reject(new FilestackError('Cannot get part metadata', err.data, FilestackErrorType.REQUEST));
+ });
+ }
+
+ /**
+ * Regular multipart request to amazon
+ *
+ * @private
+ * @param {number} partNumber
+ * @returns {Promise}
+ * @memberof S3Uploader
+ */
+ private async uploadRegular(id: string, partNumber: number): Promise {
+ let payload = this.getPayloadById(id);
+ const partMetadata = payload.parts[partNumber];
+ let part = payload.file.getPartByMetadata(partMetadata);
+
+ const { data, headers } = await this.getS3PartMetadata(id, part);
+ debug(`[${id}] Received part ${partNumber} info body: \n%O\n headers: \n%O\n`, data, headers);
+
+ // retry only in regular upload mode
+ if (this.retryConfig && this.uploadMode !== UploadMode.FALLBACK) {
+ useRetryPolicy(request, this.retryConfig);
+ }
+
+ return request
+ .put(data.url, part.buffer, {
+ cancelToken: this.cancelToken.token,
+ timeout: this.timeout,
+ headers: data.headers,
+ // for now we cant test progress callback from upload
+ /* istanbul ignore next */
+ onUploadProgress: (pr: ProgressEvent) => this.onProgressUpdate(id, partNumber, pr.loaded),
+ })
+ .then(res => {
+ if (res.headers.etag) {
+ this.setPartETag(id, partNumber, res.headers.etag);
+ }
+
+ debug(`[${id}] S3 Upload response headers for ${partNumber}: \n%O\n`, res.headers);
+
+ this.onProgressUpdate(id, partNumber, part.size);
+
+ return res;
+ })
+ .catch(err => {
+ // reset upload progress on failed part
+ this.onProgressUpdate(id, partNumber, 0);
+
+ // if fallback, set upload mode to intelligent and restart current part
+ if ((this.uploadMode === UploadMode.FALLBACK && !this.isModeLocked) || this.uploadMode === UploadMode.INTELLIGENT) {
+ debug(`[${id}] Regular upload failed. Switching to intelligent ingestion mode`);
+ this.setUploadMode(UploadMode.INTELLIGENT);
+ // restart part
+ return this.startPart(id, partNumber);
+ }
+
+ return Promise.reject(new FilestackError('Cannot upload file part', err.data, FilestackErrorType.REQUEST));
+ });
+ }
+
+ /**
+ * Upload file using intelligent mechanism
+ *
+ * @private
+ * @param {string} id
+ * @param {number} partNumber
+ * @returns {Promise}
+ * @memberof S3Uploader
+ */
+ private async uploadIntelligent(id: string, partNumber: number): Promise {
+ return this.uploadNextChunk(id, partNumber).then(() => this.commitPart(id, partNumber));
+ }
+
+ /**
+ * Recursively upload file in chunk mode (intelligent ingession)
+ *
+ * @private
+ * @param {string} id
+ * @param {number} partNumber
+ * @param {number} chunkSize
+ * @returns
+ * @memberof S3Uploader
+ */
+ private async uploadNextChunk(id: string, partNumber: number, chunkSize: number = this.intelligentChunkSize) {
+ const payload = this.getPayloadById(id);
+ let part = payload.parts[partNumber];
+ chunkSize = Math.min(chunkSize, part.size - part.offset);
+
+ let chunk = payload.file.getChunkByMetadata(part, part.offset, chunkSize);
+
+ debug(
+ `[${id}] PartNum: ${partNumber}, PartSize: ${part.size}, StartByte: ${part.startByte}, Offset: ${part.offset}, ChunkSize: ${chunk.size},
+ Left: ${part.size - part.offset - chunk.size}`
+ );
+
+ // catch error for debug purposes
+ const { data } = await this.getS3PartMetadata(id, chunk, part.offset).catch(err => {
+ debug(`[${id}] Getting chunk data for ii failed %O, Chunk size: ${chunkSize}, offset ${part.offset}, part ${partNumber}`, err);
+ return Promise.reject(err);
+ });
+
+ return request
+ .put(data.url, chunk.buffer, {
+ cancelToken: this.cancelToken.token,
+ timeout: this.timeout,
+ headers: data.headers,
+ // for now we cant test progress callback from upload
+ /* istanbul ignore next */
+ onUploadProgress: (pr: ProgressEvent) => this.onProgressUpdate(id, partNumber, part.offset + pr.loaded),
+ })
+ .then(res => {
+ this.onProgressUpdate(id, partNumber, part.offset + chunk.size);
+ const newOffset = Math.min(part.offset + chunkSize, part.size);
+
+ debug(`[${id}] S3 Chunk uploaded! offset: ${part.offset}, part ${partNumber}! response headers for ${partNumber}: \n%O\n`, res.headers);
+
+ this.setPartData(id, partNumber, 'offset', newOffset);
+
+ // if all chunks was uploaded then return resolve
+ if (newOffset === part.size) {
+ return Promise.resolve(res);
+ }
+
+ return this.uploadNextChunk(id, partNumber, chunkSize);
+ })
+ .catch(err => {
+ // reset progress on failed upload
+ this.onProgressUpdate(id, partNumber, part.offset);
+ const nextChunkSize = chunkSize / 2;
+
+ if (nextChunkSize < MIN_CHUNK_SIZE) {
+ debug(`[${id}] Minimal chunk size limit. Upload file failed!`);
+ return Promise.reject(new FilestackError('Min chunk size reached', err.data, FilestackErrorType.REQUEST));
+ }
+
+ if (shouldRetry(err)) {
+ debug(`[${id}] Request network error. Retry with new chunk size: ${nextChunkSize}`);
+ return this.uploadNextChunk(id, partNumber, nextChunkSize);
+ }
+
+ return Promise.reject(new FilestackError('Cannot upload file part', err.data, FilestackErrorType.REQUEST));
+ })
+ .finally(() => {
+ part = null;
+ chunk = null;
+ });
+ }
+
+ /**
+ * Commit after upload all chunks of the part in ii mode
+ *
+ * @private
+ * @param {string} id
+ * @param {FilePart} part
+ * @returns
+ * @memberof S3Uploader
+ */
+ private commitPart(id: string, partNumber: number) {
+ const payload = this.getPayloadById(id);
+ const part = payload.parts[partNumber];
+
+ return postWithRetry(
+ `${this.getUploadUrl(id)}/multipart/commit`,
+ {
+ ...this.getDefaultFields(id, ['apikey', 'region', 'upload_id', 'policy', 'signature', 'uri']),
+ size: payload.file.size,
+ part: part.partNumber + 1,
+ },
+ {
+ cancelToken: this.cancelToken.token,
+ timeout: this.timeout,
+ headers: this.getDefaultHeaders(id),
+ },
+ this.retryConfig
+ ).then((res: AxiosResponse) => {
+ debug(`[${id}] Commit Part number ${part.partNumber}. Response: %O`, res.data);
+
+ return res;
+ });
+ }
+
+ /**
+ * Complete request to merge all parts and get file handle etc
+ *
+ * @private
+ * @returns
+ * @memberof S3Uploader
+ */
+ private completeRequest(id: string): Promise {
+ const payload = this.getPayloadById(id);
+ let parts = [];
+
+ if (payload.file.status === FileState.FAILED) {
+ return Promise.resolve();
+ }
+
+ debug(`[${id}] Run complete request`);
+
+ const partsHandle = payload.parts;
+ const partLen = partsHandle.length;
+
+ for (let i = 0; i < partLen; i++) {
+ if (partsHandle[i].etag) {
+ parts.push({ part_number: i + 1, etag: partsHandle[i].etag });
+ }
+ }
+
+ debug(`[${id}] Etags %O`, parts);
+
+ return postWithRetry(
+ `${this.getUrl()}/multipart/complete`,
+ {
+ ...this.getDefaultFields(id, ['apikey', 'policy', 'signature', 'uri', 'region', 'upload_id', 'fii'], true),
+ // method specific keys
+ filename: payload.file.name,
+ mimetype: payload.file.type,
+ size: payload.file.size,
+ parts: parts.length ? parts : undefined,
+ },
+ {
+ timeout: this.timeout,
+ cancelToken: this.cancelToken.token,
+ headers: this.getDefaultHeaders(id),
+ },
+ this.retryConfig
+ )
+ .then(res => {
+ // if parts hasnt been merged, retry complete request again
+ if (res.status === 202) {
+ return new Promise((resolve, reject) => {
+ setTimeout(
+ () =>
+ this.completeRequest(id)
+ .then(resolve)
+ .catch(reject),
+ COMPLETE_TIMEOUT
+ );
+ });
+ }
+
+ // update file object
+ let file = this.getPayloadById(id).file;
+ file.handle = res.data.handle;
+ file.url = res.data.url;
+ file.container = res.data.container;
+ file.key = res.data.key;
+ file.workflows = res.data.workflows;
+ file.status = res.data.status;
+
+ return file;
+ })
+ .catch(err => {
+ this.setPayloadStatus(id, FileState.FAILED);
+ return Promise.reject(new FilestackError('Cannot complete file', err.data, FilestackErrorType.REQUEST));
+ });
+ }
+
+ /**
+ * UUpgrade upload progress and run progress event
+ *
+ * @private
+ * @param {string} id
+ * @param {number} partNumber
+ * @param {number} loaded
+ * @memberof S3Uploader
+ */
+ private onProgressUpdate(id: string, partNumber: number, loaded: number) {
+ this.setPartData(id, partNumber, 'progress', loaded);
+ this.emitProgress();
+ }
+
+ /**
+ * Emits normalized progress event
+ *
+ * @private
+ * @memberof S3Uploader
+ */
+ private emitProgress() {
+ let totalSize = 0;
+ let totalBytes = 0;
+
+ let filesProgress = {};
+ for (let i in this.payloads) {
+ const payload = this.payloads[i];
+ // omit all failed files in progress event
+ // this shouldn't happend because of promises rejection in execute. Left to be sure
+ /* istanbul ignore next */
+ if (payload.file.status === FileState.FAILED) {
+ continue;
+ }
+
+ const partsProgress = payload.parts.map(p => p.progress || 0);
+ const totalParts = partsProgress.reduce((a, b) => a + b);
+
+ totalBytes = totalBytes + totalParts;
+
+ filesProgress[i] = {
+ totalBytes: totalParts || 0,
+ totalPercent: Math.round((totalParts * 100) / payload.file.size) || 0,
+ };
+
+ totalSize = totalSize + payload.file.size;
+ }
+
+ const res = {
+ totalBytes: totalBytes || 0,
+ totalPercent: Math.round((totalBytes * 100) / totalSize) || 0,
+ files: filesProgress,
+ };
+
+ debug(`Upload progress %O`, res);
+ this.emit('progress', res);
+ }
+
+ /**
+ * Apply provided data to given payload
+ *
+ * @private
+ * @param {string} id
+ * @param {*} data
+ * @memberof S3Uploader
+ */
+ private updatePayload(id: string, data: any) {
+ this.payloads[id] = {
+ ...this.payloads[id],
+ ...data,
+ };
+ }
+
+ /**
+ * Sets etag for part
+ *
+ * @private
+ * @param {number} partNumber
+ * @param {string} etag
+ * @memberof S3Uploader
+ */
+ private setPartETag(id: string, partNumber: number, etag: string) {
+ debug(`[${id}] Set ${etag} etag for part ${partNumber}`);
+ this.getPayloadById(id).parts[partNumber].etag = etag;
+ }
+
+ /**
+ * Sets part value for a key
+ *
+ * @private
+ * @param {number} partNumber
+ * @param {string} etag
+ * @memberof S3Uploader
+ */
+ private setPartData(id: string, partNumber: number, key: string, value: any) {
+ debug(`[${id}] Set ${key} = ${value} for part ${partNumber}`);
+ this.getPayloadById(id).parts[partNumber][key] = value;
+ }
+
+ /**
+ * Set payload file state
+ *
+ * @param id
+ * @param status
+ */
+ private setPayloadStatus(id: string, status: FileState) {
+ debug(`[${id}] Set payload status to ${status}`);
+ this.payloads[id].file.status = status;
+ }
+}
diff --git a/src/lib/api/upload/utils.ts b/src/lib/api/upload/utils.ts
deleted file mode 100644
index 5c82fcf3..00000000
--- a/src/lib/api/upload/utils.ts
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright (c) 2018 by Filestack.
- * Some rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- *
- * @private
- * @param file
- * @param cfg
- */
-export const getName = (file: any, cfg: any) => cfg.customName || file.name;
diff --git a/src/lib/client.spec.ts b/src/lib/client.spec.ts
index 34a48721..00a23fbc 100644
--- a/src/lib/client.spec.ts
+++ b/src/lib/client.spec.ts
@@ -14,16 +14,210 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-
-import * as assert from 'assert';
+import { config } from './../config';
import { Client } from './client';
+import { CloudClient } from './api/cloud';
+import { Upload } from './api/upload/upload';
+import { picker } from './picker';
+import { preview } from './api/preview';
+import { metadata, remove, retrieve } from './api/file';
+import { storeURL } from './api/store';
+import { transform } from './api/transform';
+
+jest.mock('./api/upload/upload');
+jest.mock('./api/cloud');
+jest.mock('./api/file');
+jest.mock('./api/store');
+jest.mock('./picker');
+jest.mock('./api/preview');
+jest.mock('./api/transform');
describe('client', () => {
- it('should exist', () => {
- assert.ok(new Client('apikey'));
+ const defaultApikey = 'EXAMPLE_API_KEY';
+ const defaultHandle = 'EXAMPLE_HANDLE';
+ const defaultSecurity = {
+ policy: 'examplePolicy',
+ signature: 'exampleSignature',
+ };
+
+ const sessionURls = config.urls;
+ const defaultSession = {
+ apikey: defaultApikey,
+ urls: sessionURls,
+ };
+
+ it('should properly instantiate Client', () => {
+ const client = new Client(defaultApikey);
+ expect(client).toBeDefined();
+ expect(client).toBeInstanceOf(Client);
});
- it('should throw exception when there is not api key provided', () => {
- assert.throws(() => new Client(''));
+ it('should throw an error if api key not provided', () => {
+ expect(() => {
+ return new Client('');
+ }).toThrow('An apikey is required to initialize the Filestack client');
+ });
+
+ it('should throw an error if provided security without signature', () => {
+ const options = {
+ security: {
+ policy: 'examplePolicy',
+ signature: '',
+ },
+ };
+ expect(() => {
+ return new Client(defaultApikey, options);
+ }).toThrow('Both policy and signature are required for client security');
+ });
+
+ it('should pass policy & signature to the session', () => {
+ const options = {
+ security: defaultSecurity,
+ };
+ const client = new Client(defaultApikey, options);
+ expect(client.session.policy).toBe(options.security.policy);
+ expect(client.session.signature).toBe(options.security.signature);
+ });
+
+ it('should pass cname to the session', () => {
+ const options = {
+ cname: 'testCname.com',
+ };
+ const client = new Client(defaultApikey, options);
+ expect(client.session.cname).toBe(options.cname);
+ });
+
+ it('should be able to logout for provied cloud', async () => {
+ const client = new Client(defaultApikey);
+ const cloudName = 'dropbox';
+ await client.logout(cloudName);
+
+ expect(CloudClient.prototype.logout).toHaveBeenCalledWith(cloudName);
+ });
+
+ it('should get metadata for a provided handle', async () => {
+ const client = new Client(defaultApikey);
+ const options = {
+ sha224: true,
+ };
+
+ await client.metadata(defaultHandle, options, defaultSecurity);
+ expect(metadata).toHaveBeenCalledWith(defaultSession, defaultHandle, options, defaultSecurity);
+ });
+
+ it('should be able to open picker', () => {
+ const client = new Client(defaultApikey);
+ const pickerOptions = {
+ lang: 'de',
+ };
+ client.picker(pickerOptions);
+
+ expect(picker).toHaveBeenCalledWith(client, pickerOptions);
+ });
+
+ it('should be able to open preview', () => {
+ const client = new Client(defaultApikey);
+ const previewOptions = {
+ id: 'testElement',
+ };
+ client.preview(defaultHandle, previewOptions);
+
+ expect(preview).toHaveBeenCalledWith(defaultSession, defaultHandle, previewOptions);
+ });
+
+ it('should be able to remove handle', async () => {
+ const client = new Client(defaultApikey);
+ await client.remove(defaultHandle, defaultSecurity);
+ expect(remove).toHaveBeenCalledWith(defaultSession, defaultHandle, false, defaultSecurity);
+ });
+
+ it('should be able to remove metadata', async () => {
+ const client = new Client(defaultApikey);
+ await client.removeMetadata(defaultHandle, defaultSecurity);
+
+ expect(remove).toHaveBeenCalledWith(defaultSession, defaultHandle, true, defaultSecurity);
+ });
+
+ it('should be able to store url', async () => {
+ const client = new Client(defaultApikey);
+ const url = 'http://example.com/img3.jpg';
+ const options = {};
+ const token = {};
+ await client.storeURL(url, options, token, defaultSecurity);
+
+ expect(storeURL).toHaveBeenCalledWith(defaultSession, url, options, token, defaultSecurity);
+ });
+
+ it('should be able to retrieve handle', async () => {
+ const client = new Client(defaultApikey);
+ const retrieveOptions = {};
+
+ await client.retrieve(defaultHandle, retrieveOptions, defaultSecurity);
+ expect(retrieve).toHaveBeenCalledWith(defaultSession, defaultHandle, retrieveOptions, defaultSecurity);
+ });
+
+ it('should be able to transform url with b64', () => {
+ const client = new Client(defaultApikey);
+ const transformOptions = {
+ blur: {
+ amount: 5,
+ },
+ };
+ const b64 = true;
+ client.transform(defaultHandle, transformOptions, b64);
+ expect(transform).toHaveBeenCalledWith(defaultSession, defaultHandle, transformOptions, b64);
+ });
+
+ it('should be able to transform url without b64', () => {
+ const client = new Client(defaultApikey);
+ const transformOptions = {
+ blur: {
+ amount: 5,
+ },
+ };
+ client.transform(defaultHandle, transformOptions);
+ expect(transform).toHaveBeenCalledWith(defaultSession, defaultHandle, transformOptions, false);
+ });
+
+ it('should be able to upload file', async () => {
+ const client = new Client(defaultApikey);
+ const file = 'anyFile';
+ const uploadOptions = {};
+ const storeOptions = {};
+ const token = {};
+
+ spyOn(Upload.prototype, 'upload').and.returnValue(Promise.resolve());
+
+ await client.upload(file, uploadOptions, storeOptions, token, defaultSecurity);
+
+ expect(Upload.prototype.setSession).toHaveBeenCalledWith({
+ apikey: defaultApikey,
+ urls: sessionURls,
+ });
+
+ expect(Upload.prototype.setToken).toHaveBeenCalledWith(token);
+ expect(Upload.prototype.setSecurity).toHaveBeenCalledWith(defaultSecurity);
+ expect(Upload.prototype.upload).toHaveBeenCalledWith(file);
+ });
+
+ it('should be able to multiupload file', async () => {
+ const client = new Client(defaultApikey);
+ const files = ['anyFile'];
+ const uploadOptions = {};
+ const storeOptions = {};
+ const token = {};
+
+ spyOn(Upload.prototype, 'multiupload').and.returnValue(Promise.resolve());
+
+ await client.multiupload(files, uploadOptions, storeOptions, token, defaultSecurity);
+
+ expect(Upload.prototype.setSession).toHaveBeenCalledWith({
+ apikey: defaultApikey,
+ urls: sessionURls,
+ });
+
+ expect(Upload.prototype.setToken).toHaveBeenCalledWith(token);
+ expect(Upload.prototype.setSecurity).toHaveBeenCalledWith(defaultSecurity);
+ expect(Upload.prototype.multiupload).toHaveBeenCalledWith(files);
});
});
diff --git a/src/lib/client.ts b/src/lib/client.ts
index d0f7d502..5c092fa8 100644
--- a/src/lib/client.ts
+++ b/src/lib/client.ts
@@ -15,14 +15,17 @@
* limitations under the License.
*/
+import * as EventEmitter from 'eventemitter3';
import { config, Hosts } from '../config';
import { metadata, MetadataOptions, remove, retrieve, RetrieveOptions } from './api/file';
import { transform, TransformOptions } from './api/transform';
import { storeURL } from './api/store';
-import { resolveHost } from './utils/index';
-import { upload, UploadOptions } from './api/upload';
+import { resolveHost } from './utils';
+import { Upload, InputFile, UploadOptions, StoreUploadOptions } from './api/upload';
import { preview, PreviewOptions } from './api/preview';
import { CloudClient } from './api/cloud';
+import { StoreParams } from './filelink';
+
import {
picker,
PickerInstance,
@@ -42,42 +45,6 @@ export interface Security {
signature: string;
}
-export interface WorkflowConfig {
- id: string;
-}
-
-export interface StoreOptions {
- /**
- * Filename for stored file
- */
- filename?: string;
- /**
- * Location for stored file. One of 's3', 'gcs', 'azure', 'rackspace', or 'dropbox'.
- */
- location?: string;
- /**
- * Set container path.
- */
- path?: string;
- /**
- * Specify S3 region.
- */
- region?: string;
- /**
- * Specify storage container.
- */
- container?: string;
- /**
- * S3 container access. 'public' or 'private'.
- */
- access?: string;
-
- /**
- * Workflows ids to run after upload
- */
- workflows?: (string | WorkflowConfig)[];
-}
-
export interface ClientOptions {
[option: string]: any;
/**
@@ -117,37 +84,62 @@ export interface ClientOptions {
* const client = filestack.init('apikey');
* ```
*/
-export class Client {
+export class Client extends EventEmitter {
session: Session;
private cloud: CloudClient;
constructor(apikey: string, options?: ClientOptions) {
+ super();
+
if (!apikey || typeof apikey !== 'string' || apikey.length === 0) {
throw new Error('An apikey is required to initialize the Filestack client');
}
const { urls } = config;
this.session = { apikey, urls };
+
if (options) {
const { cname, security } = options;
- if (security && !(security.policy && security.signature)) {
- throw new Error('Both policy and signature are required for client security');
- }
- if (security && security.policy && security.signature) {
- this.session.policy = security.policy;
- this.session.signature = security.signature;
- }
- if (cname) {
- this.session.urls = resolveHost(this.session.urls, cname);
- const hosts = /filestackapi.com|filestackcontent.com/i;
- this.session.cname = cname;
- Object.keys(urls).forEach((key) => {
- this.session.urls[key] = urls[key].replace(hosts, cname);
- });
- }
+
+ this.setSecurity(security);
+ this.setCname(cname);
}
this.cloud = new CloudClient(this.session, options);
}
+
+ /**
+ * Set security object
+ *
+ * @param {Security} security
+ * @memberof Client
+ */
+ setSecurity(security: Security) {
+ if (security && !(security.policy && security.signature)) {
+ throw new Error('Both policy and signature are required for client security');
+ }
+
+ if (security && security.policy && security.signature) {
+ this.session.policy = security.policy;
+ this.session.signature = security.signature;
+ }
+ }
+
+ /**
+ * Set custom cname
+ *
+ * @param {string} cname
+ * @returns
+ * @memberof Client
+ */
+ setCname(cname: string) {
+ if (!cname || cname.length === 0) {
+ return;
+ }
+
+ this.session.cname = cname;
+ this.session.urls = resolveHost(this.session.urls, cname);
+ }
+
/**
* Clear all current cloud sessions in the picker.
* Optionally pass a cloud source name to only log out of that cloud source.
@@ -272,7 +264,7 @@ export class Client {
* @param token Optional control token to call .cancel()
* @param security Optional security override.
*/
- storeURL(url: string, options?: StoreOptions, token?: any, security?: Security): Promise {
+ storeURL(url: string, options?: StoreParams, token?: any, security?: Security): Promise {
/* istanbul ignore next */
return storeURL(this.session, url, options, token, security);
}
@@ -363,11 +355,14 @@ export class Client {
* client.upload(file, { onRetry }, { filename: 'foobar.jpg' }, token)
* .then(res => console.log(res));
*
+ * client.upload({file, name}, { onRetry }, { filename: 'foobar.jpg' }, token)
+ * .then(res => console.log(res));
+ *
* token.pause(); // Pause flow
* token.resume(); // Resume flow
* token.cancel(); // Cancel flow (rejects)
* ```
- * @param file Must be a valid [File](https://developer.mozilla.org/en-US/docs/Web/API/File), Blob, base64 encoded string, or file path in Node.
+ * @param file Must be a valid [File | Blob | Buffer | string]
* @param uploadOptions Uploader options.
* @param storeOptions Storage options.
* @param token A control token that can be used to call cancel(), pause(), and resume().
@@ -375,8 +370,74 @@ export class Client {
*
* @returns {Promise}
*/
- upload(file: any, options?: UploadOptions, storeOptions?: StoreOptions, token?: any, security?: Security) {
- /* istanbul ignore next */
- return upload(this.session, file, options, storeOptions, token, security);
+ upload(file: InputFile, options?: UploadOptions, storeOptions?: StoreUploadOptions, token?: any, security?: Security) {
+ let upload = new Upload(options, storeOptions);
+ upload.setSession(this.session);
+
+ if (token) {
+ upload.setToken(token);
+ }
+
+ if (security) {
+ upload.setSecurity(security);
+ }
+
+ upload.on('error', (e) => this.emit('uploadError', e));
+
+ return upload.upload(file).finally(() => {
+ upload = null;
+ });
+ }
+
+ /**
+ * Initiates a multi-part upload flow. Use this for Filestack CIN and FII uploads.
+ *
+ * In Node runtimes the file argument is treated as a file path.
+ * Uploading from a Node buffer is not yet implemented.
+ *
+ * ### Example
+ *
+ * ```js
+ * const token = {};
+ * const onRetry = (obj) => {
+ * console.log(`Retrying ${obj.location} for ${obj.filename}. Attempt ${obj.attempt} of 10.`);
+ * };
+ *
+ * client.multiupload([file], { onRetry }, token)
+ * .then(res => console.log(res));
+ *
+ * client.multiupload([{file, name}], { onRetry }, token)
+ * .then(res => console.log(res));
+ *
+ * token.pause(); // Pause flow
+ * token.resume(); // Resume flow
+ * token.cancel(); // Cancel flow (rejects)
+ * ```
+ * @param file Must be a valid [File | Blob | Buffer | string (base64)]
+ * @param uploadOptions Upload options.
+ * @param storeOptions Storage options.
+ * @param token A control token that can be used to call cancel(), pause(), and resume().
+ * @param security Optional security policy and signature override.
+ *
+ * @returns {Promise}
+ */
+ multiupload(file: InputFile[], options?: UploadOptions, storeOptions?: StoreUploadOptions, token?: any, security?: Security) {
+ let upload = new Upload(options, storeOptions);
+
+ upload.setSession(this.session);
+
+ if (token) {
+ upload.setToken(token);
+ }
+
+ if (security) {
+ upload.setSecurity(security);
+ }
+
+ upload.on('error', (e) => this.emit('uploadError', e));
+
+ return upload.multiupload(file).finally(() => {
+ upload = null;
+ });
}
}
diff --git a/src/lib/filelink.spec.ts b/src/lib/filelink.spec.ts
new file mode 100644
index 00000000..1396c992
--- /dev/null
+++ b/src/lib/filelink.spec.ts
@@ -0,0 +1,517 @@
+/*
+ * Copyright (c) 2019 by Filestack.
+ * Some rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the 'License');
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an 'AS IS' BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import { Filelink, ShapeType, VideoAccessMode } from './filelink';
+import { TransformSchema } from './../schema/transforms.schema';
+import * as validator from '../schema';
+
+describe('filelink', () => {
+
+ beforeAll(() => {
+ spyOn(validator, 'getValidator').and.callThrough();
+ });
+
+ const defaultSource = '5aYkEQJSQCmYShsoCnZN';
+ const defaultApikey = 'DEFAULT_API_KEY';
+
+ it('should properly instantiate Filelink', () => {
+ const filelink = new Filelink(defaultSource);
+ expect(filelink).toBeDefined();
+ expect(filelink).toBeInstanceOf(Filelink);
+ });
+
+ it('should throw an error when handle is invalid', () => {
+ const source = '*/5aYkEQJSQCmYShsoCnZN';
+ expect(() => {
+ const f = new Filelink(source);
+ }).toThrow('Invalid filestack source provided');
+ });
+
+ it('should throw an error when external handle and without apikey', () => {
+ const source = 'src://test123/example.jpg';
+
+ expect(() => {
+ const filelink = new Filelink(source);
+ }).toThrow('External sources requires apikey to handle transforms');
+ });
+
+ it('should be able to convert filelink to string', () => {
+ const filelink = new Filelink(defaultSource);
+ const result = filelink.toString();
+ expect(result).toBe('https://cdn.filestackcontent.com/5aYkEQJSQCmYShsoCnZN');
+ });
+
+ it('should allow to set validator status with toString method', () => {
+ const filelink = new Filelink(defaultSource);
+ filelink.setUseValidator(false);
+
+ expect(filelink.resize({
+ // @ts-ignore
+ t: 1,
+ }).toString()).toEqual('https://cdn.filestackcontent.com/resize=t:1/5aYkEQJSQCmYShsoCnZN');
+ });
+
+ it('should allow to set validator status with getTransformations method', () => {
+ const filelink = new Filelink(defaultSource);
+ filelink.setUseValidator(false);
+ filelink.resize({
+ // @ts-ignore
+ t: 1,
+ });
+
+ expect(filelink.getTransformations()).toEqual([{
+ name: 'resize',
+ params: { t: 1 },
+ }]);
+ });
+
+ it('should create filelink with apikey when is provided', () => {
+ const filelink = new Filelink(defaultSource, defaultApikey);
+ const result = filelink.toString();
+ expect(result).toBe('https://cdn.filestackcontent.com/DEFAULT_API_KEY/5aYkEQJSQCmYShsoCnZN');
+ });
+
+ it('should be able to use many tasks at once and reset them', () => {
+ const filelink = new Filelink(defaultSource);
+ const resizeParams = {
+ width: 200,
+ };
+ const rotateParams = {
+ deg: 90,
+ };
+ filelink
+ .resize(resizeParams)
+ .rotate(rotateParams)
+ .crop({
+ dim: [20, 20, 250, 250],
+ });
+ expect(filelink.toString()).toBe('https://cdn.filestackcontent.com/resize=width:200/rotate=deg:90/crop=dim:[20,20,250,250]/5aYkEQJSQCmYShsoCnZN');
+ filelink.reset();
+ expect(filelink.toString()).toBe('https://cdn.filestackcontent.com/5aYkEQJSQCmYShsoCnZN');
+ });
+
+ it('should be able to get transformations', () => {
+ const filelink = new Filelink(defaultSource);
+ const resizeParams = {
+ width: 200,
+ };
+ const rotateParams = {
+ deg: 90,
+ };
+ filelink
+ .resize(resizeParams)
+ .rotate(rotateParams)
+ .crop({
+ dim: [20, 20, 250, 250],
+ });
+ const expected = [{ name: 'resize', params: { width: 200 } }, { name: 'rotate', params: { deg: 90 } }, { name: 'crop', params: { dim: [20, 20, 250, 250] } }];
+ expect(filelink.getTransformations()).toEqual(expected);
+ });
+
+ it('should be able to getValidationSchema', () => {
+ const filelink = new Filelink(defaultSource);
+ const result = filelink.getValidationSchema();
+ expect(result).toEqual(TransformSchema);
+ });
+
+ it('should be able to disable selected task', () => {
+ const filelink = new Filelink(defaultSource);
+ filelink.shadow(false).upscale();
+ expect(filelink.toString()).toBe('https://cdn.filestackcontent.com/upscale/5aYkEQJSQCmYShsoCnZN');
+ });
+
+ it('should be able to create filelink for many handles', () => {
+ const sourceArr = ['5aYkEQJSQCmYShsoCnZN', '4aYkEQJSQCmYShsoCnZN'];
+ const filelink = new Filelink(sourceArr);
+ expect(filelink.toString()).toEqual('https://cdn.filestackcontent.com/[5aYkEQJSQCmYShsoCnZN,4aYkEQJSQCmYShsoCnZN]');
+ filelink.setBase64(true);
+ expect(filelink.toString()).toBe('https://cdn.filestackcontent.com/b64://WzVhWWtFUUpTUUNtWVNoc29DblpOLDRhWWtFUUpTUUNtWVNoc29DblpOXQ==');
+ });
+
+ it('should be able to create filelink for many src handles', () => {
+ const sourceArr = ['src://test123/example.jpg', 'src://test123/flug_9-trans_atlantik-400dpi.jpg'];
+ const filelink = new Filelink(sourceArr, defaultApikey);
+ expect(filelink.toString()).toEqual('https://cdn.filestackcontent.com/DEFAULT_API_KEY/["src://test123/example.jpg","src://test123/flug_9-trans_atlantik-400dpi.jpg"]');
+ });
+
+ it('should throw an error if task params are not valid', () => {
+ const filelink = new Filelink(defaultSource);
+ expect(() => {
+ // @ts-ignore
+ filelink.resize({ r: 2 }).toString();
+ }).toThrow('Params validation error');
+ });
+
+ it('should omit transformations with empty options', () => {
+ const filelink = new Filelink(defaultSource);
+ filelink.upscale(false);
+ expect(filelink.toString()).toBe('https://cdn.filestackcontent.com/5aYkEQJSQCmYShsoCnZN');
+ });
+
+ it('should throw an error if source does not exists', () => {
+ expect(() => {
+ return new Filelink('');
+ }).toThrow('Source not Set');
+ });
+
+ describe('Different tasks', () => {
+ let filelink = new Filelink(defaultSource, defaultApikey);
+ afterEach(() => {
+ filelink = new Filelink(defaultSource, defaultApikey);
+ });
+
+ it('should be able to create filelink when handle is base64', () => {
+ filelink.upscale();
+ filelink.setBase64(true);
+ expect(filelink.toString()).toBe('https://cdn.filestackcontent.com/DEFAULT_API_KEY/b64/W3sibmFtZSI6InVwc2NhbGUifV0=/b64://NWFZa0VRSlNRQ21ZU2hzb0NuWk4=');
+ });
+
+ it('should be able to use custom cname', () => {
+ const cname = 'newcname.com';
+ filelink.setCname(cname);
+ expect(filelink.toString()).toBe('https://cdn.newcname.com/DEFAULT_API_KEY/5aYkEQJSQCmYShsoCnZN');
+ });
+
+ it('should be able to use custom domain', () => {
+ const customDomain = 'https://customDomain.com';
+ filelink.setCustomDomain(customDomain);
+ expect(filelink.toString()).toBe('https://customDomain.com/DEFAULT_API_KEY/5aYkEQJSQCmYShsoCnZN');
+ });
+
+ it('should be able to add flip', () => {
+ filelink.flip();
+ expect(filelink.toString()).toBe('https://customDomain.com/DEFAULT_API_KEY/flip/5aYkEQJSQCmYShsoCnZN');
+ });
+
+ it('should be able to add flop', () => {
+ filelink.flop();
+ expect(filelink.toString()).toBe('https://customDomain.com/DEFAULT_API_KEY/flop/5aYkEQJSQCmYShsoCnZN');
+ });
+
+ it('should be able to enhance', () => {
+ filelink.enhance();
+ expect(filelink.toString()).toBe('https://customDomain.com/DEFAULT_API_KEY/enhance/5aYkEQJSQCmYShsoCnZN');
+ });
+
+ it('should be able to redeye', () => {
+ filelink.redeye();
+ expect(filelink.toString()).toBe('https://customDomain.com/DEFAULT_API_KEY/redeye/5aYkEQJSQCmYShsoCnZN');
+ });
+
+ it('should be able to monochrome', () => {
+ filelink.monochrome();
+ expect(filelink.toString()).toBe('https://customDomain.com/DEFAULT_API_KEY/monochrome/5aYkEQJSQCmYShsoCnZN');
+ });
+
+ it('should be able to negative', () => {
+ filelink.negative();
+ expect(filelink.toString()).toBe('https://customDomain.com/DEFAULT_API_KEY/negative/5aYkEQJSQCmYShsoCnZN');
+ });
+
+ it('should be able to tags', () => {
+ filelink.tags();
+ expect(filelink.toString()).toBe('https://customDomain.com/DEFAULT_API_KEY/tags/5aYkEQJSQCmYShsoCnZN');
+ });
+
+ it('should be able to sfw', () => {
+ filelink.sfw();
+ expect(filelink.toString()).toBe('https://customDomain.com/DEFAULT_API_KEY/sfw/5aYkEQJSQCmYShsoCnZN');
+ });
+
+ it('should be able to store', () => {
+ const storeParams = {};
+ filelink.store(storeParams);
+ expect(filelink.toString()).toBe('https://customDomain.com/DEFAULT_API_KEY/store/5aYkEQJSQCmYShsoCnZN');
+ });
+
+ it('should be able to disable cache', () => {
+ filelink.cache(false);
+ expect(filelink.toString()).toBe('https://customDomain.com/DEFAULT_API_KEY/cache=false/5aYkEQJSQCmYShsoCnZN');
+ });
+
+ it('should be able to set cache params', () => {
+ const cacheParams = {
+ expiry: 666,
+ };
+ filelink.cache(cacheParams);
+ expect(filelink.toString()).toBe('https://customDomain.com/DEFAULT_API_KEY/cache=expiry:666/5aYkEQJSQCmYShsoCnZN');
+ });
+
+ it('should be able to resize', () => {
+ const resizeParams = {
+ width: 200,
+ };
+ filelink.resize(resizeParams);
+ expect(filelink.toString()).toBe('https://customDomain.com/DEFAULT_API_KEY/resize=width:200/5aYkEQJSQCmYShsoCnZN');
+ });
+
+ it('should be able to crop', () => {
+ filelink.crop({
+ dim: [20, 20, 250, 250],
+ });
+ expect(filelink.toString()).toBe('https://customDomain.com/DEFAULT_API_KEY/crop=dim:[20,20,250,250]/5aYkEQJSQCmYShsoCnZN');
+ });
+
+ it('should be able to rotate', () => {
+ const rotateParams = {
+ deg: 90,
+ };
+ filelink.rotate(rotateParams);
+ expect(filelink.toString()).toBe('https://customDomain.com/DEFAULT_API_KEY/rotate=deg:90/5aYkEQJSQCmYShsoCnZN');
+ });
+
+ it('should be able to detect faces', () => {
+ filelink.detectFaces({});
+ expect(filelink.toString()).toBe('https://customDomain.com/DEFAULT_API_KEY/detect_faces/5aYkEQJSQCmYShsoCnZN');
+ });
+
+ it('should be able to crop faces', () => {
+ filelink.cropFaces({});
+ expect(filelink.toString()).toBe('https://customDomain.com/DEFAULT_API_KEY/crop_faces/5aYkEQJSQCmYShsoCnZN');
+ });
+
+ it('should be able to pixelate faces', () => {
+ filelink.pixelateFaces({});
+ expect(filelink.toString()).toBe('https://customDomain.com/DEFAULT_API_KEY/pixelate_faces/5aYkEQJSQCmYShsoCnZN');
+ });
+
+ it('should be able to blur faces', () => {
+ const blurFacesParams = {
+ amount: 3,
+ blur: 5,
+ type: ShapeType.oval,
+ };
+ filelink.blurFaces(blurFacesParams);
+ expect(filelink.toString()).toBe('https://customDomain.com/DEFAULT_API_KEY/blur_faces=amount:3,blur:5,type:oval/5aYkEQJSQCmYShsoCnZN');
+ });
+
+ it('should be able to round cornerns', () => {
+ const roundedCornersParams = {
+ radius: 50,
+ blur: 5,
+ };
+ filelink.roundedCorners(roundedCornersParams);
+ expect(filelink.toString()).toBe('https://customDomain.com/DEFAULT_API_KEY/rounded_corners=radius:50,blur:5/5aYkEQJSQCmYShsoCnZN');
+ });
+
+ it('should be able to polaroid', () => {
+ const polaroidParams = {
+ color: 'ff0000',
+ rotate: 50,
+ };
+ filelink.polaroid(polaroidParams);
+ expect(filelink.toString()).toBe('https://customDomain.com/DEFAULT_API_KEY/polaroid=color:ff0000,rotate:50/5aYkEQJSQCmYShsoCnZN');
+ });
+
+ it('should be able to vignette', () => {
+ const vignetteParams = {
+ background: 'ff0000',
+ amount: 5,
+ };
+ filelink.vignette(vignetteParams);
+ expect(filelink.toString()).toBe('https://customDomain.com/DEFAULT_API_KEY/vignette=background:ff0000,amount:5/5aYkEQJSQCmYShsoCnZN');
+ });
+
+ it('should be able to tornEdges', () => {
+ filelink.tornEdges({});
+ expect(filelink.toString()).toBe('https://customDomain.com/DEFAULT_API_KEY/torn_edges/5aYkEQJSQCmYShsoCnZN');
+ });
+
+ it('should be able to shadow', () => {
+ filelink.shadow();
+ expect(filelink.toString()).toBe('https://customDomain.com/DEFAULT_API_KEY/shadow/5aYkEQJSQCmYShsoCnZN');
+ });
+
+ it('should be able to circle', () => {
+ filelink.circle({});
+ expect(filelink.toString()).toBe('https://customDomain.com/DEFAULT_API_KEY/circle/5aYkEQJSQCmYShsoCnZN');
+ });
+
+ it('should be able to border', () => {
+ filelink.border();
+ expect(filelink.toString()).toBe('https://customDomain.com/DEFAULT_API_KEY/border/5aYkEQJSQCmYShsoCnZN');
+ });
+
+ it('should be able to vignette', () => {
+ filelink.vignette({});
+ expect(filelink.toString()).toBe('https://customDomain.com/DEFAULT_API_KEY/vignette/5aYkEQJSQCmYShsoCnZN');
+ });
+
+ it('should be able to sharpen', () => {
+ const sharpenParams = {
+ amount: 5,
+ };
+ filelink.sharpen(sharpenParams);
+ expect(filelink.toString()).toBe('https://customDomain.com/DEFAULT_API_KEY/sharpen=amount:5/5aYkEQJSQCmYShsoCnZN');
+ });
+
+ it('should be able to blur', () => {
+ const blurParams = {
+ amount: 5,
+ };
+ filelink.blur(blurParams);
+ expect(filelink.toString()).toBe('https://customDomain.com/DEFAULT_API_KEY/blur=amount:5/5aYkEQJSQCmYShsoCnZN');
+ });
+
+ it('should be able to blackwhite', () => {
+ const blackwhiteParams = {
+ threshold: 50,
+ };
+ filelink.blackwhite(blackwhiteParams);
+ expect(filelink.toString()).toBe('https://customDomain.com/DEFAULT_API_KEY/blackwhite=threshold:50/5aYkEQJSQCmYShsoCnZN');
+ });
+
+ it('should be able to sepia', () => {
+ filelink.sepia();
+ expect(filelink.toString()).toBe('https://customDomain.com/DEFAULT_API_KEY/sepia/5aYkEQJSQCmYShsoCnZN');
+ });
+
+ it('should be able to pixelate', () => {
+ filelink.pixelate();
+ expect(filelink.toString()).toBe('https://customDomain.com/DEFAULT_API_KEY/pixelate/5aYkEQJSQCmYShsoCnZN');
+ });
+
+ it('should be able to oilPaint', () => {
+ filelink.oilPaint();
+ expect(filelink.toString()).toBe('https://customDomain.com/DEFAULT_API_KEY/oil_paint/5aYkEQJSQCmYShsoCnZN');
+ });
+
+ it('should be able to modulate', () => {
+ filelink.modulate();
+ expect(filelink.toString()).toBe('https://customDomain.com/DEFAULT_API_KEY/modulate/5aYkEQJSQCmYShsoCnZN');
+ });
+
+ it('should be able to partialPixelate', () => {
+ filelink.partialPixelate({
+ objects: [[20, 20, 50, 50]],
+ });
+ expect(filelink.toString()).toBe('https://customDomain.com/DEFAULT_API_KEY/partial_pixelate=objects:[[20,20,50,50]]/5aYkEQJSQCmYShsoCnZN');
+ });
+
+ it('should be able to partialBlur', () => {
+ filelink.partialBlur({
+ amount: 5,
+ objects: [[20, 20, 50, 50]],
+ });
+ expect(filelink.toString()).toBe('https://customDomain.com/DEFAULT_API_KEY/partial_blur=amount:5,objects:[[20,20,50,50]]/5aYkEQJSQCmYShsoCnZN');
+ });
+
+ it('should be able to collage', () => {
+ filelink.collage({
+ files: ['http://welcome-swiss.com/wp-content/uploads/2015/12/Swiss-landscape.jpg'],
+ width: 200,
+ height: 200,
+ });
+
+ expect(filelink.toString()).toBe(
+ 'https://customDomain.com/DEFAULT_API_KEY/collage=files:["http://welcome-swiss.com/wp-content/uploads/2015/12/Swiss-landscape.jpg"],width:200,height:200/5aYkEQJSQCmYShsoCnZN'
+ );
+ });
+
+ it('should be able to upscale', () => {
+ filelink.upscale();
+ expect(filelink.toString()).toBe('https://customDomain.com/DEFAULT_API_KEY/upscale/5aYkEQJSQCmYShsoCnZN');
+ });
+
+ it('should be able to ascii', () => {
+ filelink.ascii();
+ expect(filelink.toString()).toBe('https://customDomain.com/DEFAULT_API_KEY/ascii/5aYkEQJSQCmYShsoCnZN');
+ });
+
+ it('should be able to quality', () => {
+ const qualityParams = {
+ value: 5,
+ };
+ filelink.quality(qualityParams);
+ expect(filelink.toString()).toBe('https://customDomain.com/DEFAULT_API_KEY/quality=value:5/5aYkEQJSQCmYShsoCnZN');
+ });
+
+ it('should be able to use security', () => {
+ const securityParams = {
+ policy: 'examplePolicy',
+ signature: 'exampleSignature',
+ };
+ filelink.security(securityParams);
+ expect(filelink.toString()).toBe('https://customDomain.com/DEFAULT_API_KEY/security=policy:examplePolicy,signature:exampleSignature/5aYkEQJSQCmYShsoCnZN');
+ });
+
+ it('should be able output', () => {
+ const outputParams = {
+ format: 'png',
+ };
+ filelink.output(outputParams);
+ expect(filelink.toString()).toBe('https://customDomain.com/DEFAULT_API_KEY/output=format:png/5aYkEQJSQCmYShsoCnZN');
+ });
+
+ it('should be able to videoConvert', () => {
+ const videoConvertParams = {
+ aspect_mode: VideoAccessMode.letterbox,
+ upscale: true,
+ };
+ filelink.videoConvert(videoConvertParams);
+ expect(filelink.toString()).toBe('https://customDomain.com/DEFAULT_API_KEY/video_convert=aspect_mode:letterbox,upscale:true/5aYkEQJSQCmYShsoCnZN');
+ });
+
+ it('should be able to URLScreenshot', () => {
+ filelink.URLScreenshot();
+ expect(filelink.toString()).toBe('https://customDomain.com/DEFAULT_API_KEY/urlscreenshot/5aYkEQJSQCmYShsoCnZN');
+ });
+
+ it('should be able to PDFInfo', () => {
+ filelink.PDFInfo();
+ expect(filelink.toString()).toBe('https://customDomain.com/DEFAULT_API_KEY/pdfinfo/5aYkEQJSQCmYShsoCnZN');
+ });
+
+ it('should be able to PDFConvert', () => {
+ filelink.PDFConvert();
+ expect(filelink.toString()).toBe('https://customDomain.com/DEFAULT_API_KEY/pdfconvert/5aYkEQJSQCmYShsoCnZN');
+ });
+
+ it('should be able to force cache', () => {
+ filelink.cache(true);
+ expect(filelink.toString()).toBe('https://customDomain.com/DEFAULT_API_KEY/cache/5aYkEQJSQCmYShsoCnZN');
+ });
+
+ it('should be able to add fallback transformation', () => {
+ filelink.fallback({
+ handle: 'http:test.com',
+ });
+ expect(filelink.toString()).toBe('https://customDomain.com/DEFAULT_API_KEY/fallback=handle:http:test.com/5aYkEQJSQCmYShsoCnZN');
+ });
+
+ it('should be able to add zip trnasformation', () => {
+ filelink.zip();
+ expect(filelink.toString()).toBe('https://customDomain.com/DEFAULT_API_KEY/zip/5aYkEQJSQCmYShsoCnZN');
+ });
+
+ it('should be able to add minify js transformation', () => {
+ filelink.minifyJs({
+ mangle: true,
+ gzip: true,
+ });
+ expect(filelink.toString()).toBe('https://customDomain.com/DEFAULT_API_KEY/minify_js=mangle:true,gzip:true/5aYkEQJSQCmYShsoCnZN');
+ });
+
+ it('should be able to add minify css transformation', () => {
+ filelink.minifyCss({
+ level: 1,
+ gzip: true,
+ });
+ expect(filelink.toString()).toBe('https://customDomain.com/DEFAULT_API_KEY/minify_css=level:1,gzip:true/5aYkEQJSQCmYShsoCnZN');
+ });
+ });
+});
diff --git a/src/lib/filelink.ts b/src/lib/filelink.ts
index fb978c68..44a2cc1a 100644
--- a/src/lib/filelink.ts
+++ b/src/lib/filelink.ts
@@ -18,9 +18,11 @@
import { config } from './../config';
import { TransformSchema } from './../schema/transforms.schema';
import { getValidator } from './../schema/validator';
-import { resolveHost } from './utils';
-import { FilestackError } from './../FilestackError';
+import { resolveHost, b64 } from './utils';
+import { FilestackError, FilestackErrorType } from './../filestack_error';
+import Debug from 'debug';
+const debug = Debug('fs:filelink');
/**
* Align enum
*/
@@ -163,21 +165,24 @@ export enum VideoAccessMode {
crop = 'crop',
}
+export interface StoreBaseParams {
+ location?: string;
+ path?: string;
+ container?: string;
+ region?: string;
+ access?: string;
+}
+
/**
* Available options for store transformations
*
* @export
* @interface StoreParams
*/
-export interface StoreParams {
+export type StoreParams = StoreBaseParams & {
filename?: string;
- localion?: string;
- path?: string;
- container?: string;
- region?: string;
- access?: string;
base64decode?: boolean;
-}
+};
export interface ResizeParams {
width?: number;
@@ -422,7 +427,7 @@ export interface PdfConvertParams {
export interface FallbackParams {
handle: string;
- cache: number;
+ cache?: number;
}
export interface MinifyCssParams {
@@ -540,6 +545,8 @@ export class Filelink {
this.source = source;
const isExternal = this.isSourceExternal();
+ debug(`Source ${source} - isExternal? ${isExternal}`);
+
if (isExternal && !apikey) {
throw new FilestackError('External sources requires apikey to handle transforms');
}
@@ -646,13 +653,14 @@ export class Filelink {
if (this.b64) {
if (this.transforms.length > 0) {
- transformsString = `b64/${btoa(JSON.stringify(this.transforms))}`;
+ transformsString = `b64/${b64(JSON.stringify(this.transforms))}`;
}
if (Array.isArray(source)) {
source = this.arrayToString(source);
}
- source = `b64://${btoa(source)}`;
+
+ source = `b64://${b64(source)}`;
} else {
if (Array.isArray(source)) {
source = this.arrayToString(source);
@@ -678,6 +686,8 @@ export class Filelink {
* @memberof Filelink
*/
addTask(name: string, params?) {
+ Debug(`Add task ${name} with params %O`, params);
+
if (name !== 'cache' && typeof params === 'boolean') {
if (!params) {
return this;
@@ -1274,6 +1284,7 @@ export class Filelink {
let toTest = Array.isArray(this.source) ? this.source : [this.source];
for (let i in toTest) {
+ /* istanbul ignore next */
if (!toTest.hasOwnProperty(i)) {
continue;
}
@@ -1295,11 +1306,11 @@ export class Filelink {
* @memberof Filelink
*/
private validateTasks(transformations: object[]): void {
- const transformationsObj = this.arrayToObject(transformations, 'name', 'params');
- const res = Filelink.validator(transformationsObj);
+ const res = Filelink.validator(this.arrayToObject(transformations, 'name', 'params'));
if (res.errors.length) {
- throw new FilestackError(`Params validation error: ${JSON.stringify(transformations)}`, res.errors);
+ throw new FilestackError(`Params validation error`, res.errors, FilestackErrorType.VALIDATION);
}
+
return;
}
@@ -1353,17 +1364,10 @@ export class Filelink {
return key;
}
- if (typeof values === 'object' && !Object.keys(values).length) {
- return key;
- }
-
// if we just want to enable feature
if (typeof values === 'boolean') {
- if (!values) {
- if (key === 'cache') {
- return 'cache=false';
- }
- return '';
+ if (!values && key === 'cache') {
+ return 'cache=false';
}
return key;
@@ -1394,7 +1398,7 @@ export class Filelink {
return value;
}
- if (value.indexOf('/') > -1) {
+ if (value.indexOf('/') > -1 || value.indexOf(',') > -1) {
return `"${value}"`;
}
diff --git a/src/lib/picker.spec.ts b/src/lib/picker.spec.ts
new file mode 100644
index 00000000..67411acc
--- /dev/null
+++ b/src/lib/picker.spec.ts
@@ -0,0 +1,112 @@
+/*
+ * Copyright (c) 2019 by Filestack.
+ * Some rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import { picker } from './picker';
+import * as filestack from './../index';
+
+const mockPickerOpen = jest.fn(() => Promise.resolve());
+
+const mockPickerCrop = jest.fn(() => Promise.resolve());
+const mockPickerClose = jest.fn(() => Promise.resolve());
+const mockPickerCancel = jest.fn(() => Promise.resolve());
+
+jest.mock('filestack-loader', () => {
+ return {
+ loadModule: jest.fn(() => {
+ return new Promise((resolve) => {
+ resolve(jest.fn().mockImplementation(() => {
+ return {
+ open: mockPickerOpen,
+ crop: mockPickerCrop,
+ close: mockPickerClose,
+ cancel: mockPickerCancel,
+ };
+ }));
+ });
+ }),
+ knownModuleIds: {
+ picker: '__filestack-picker-module',
+ },
+ };
+});
+
+let pickerInstance;
+let client;
+
+describe('picker', () => {
+ beforeAll(() => {
+ const defaultApikey = 'DEFAULT_API_KEY';
+ client = filestack.init(defaultApikey);
+ });
+
+ beforeEach(() => {
+ pickerInstance = picker(client, {});
+ });
+
+ it('should properly open picker', async () => {
+ await pickerInstance.open();
+ expect(mockPickerOpen).toHaveBeenCalledTimes(1);
+ });
+
+ it('should properly crop picker', async () => {
+ const files = ['file1.txt', 'file2.txt'];
+
+ await pickerInstance.crop(files);
+ expect.assertions(2);
+ expect(mockPickerCrop).toHaveBeenCalledTimes(1);
+ expect(mockPickerCrop).toHaveBeenCalledWith(files);
+ });
+
+ it('should properly close picker', async () => {
+ await pickerInstance.close();
+ expect(mockPickerClose).toHaveBeenCalledTimes(1);
+ });
+
+ it('should properly cancel picker', async () => {
+ await pickerInstance.cancel();
+ expect(mockPickerCancel).toHaveBeenCalledTimes(1);
+ });
+
+ it('should not throw error on correct params', () => {
+ return expect(() => picker(client, {
+ onOpen: () => {
+ console.log(123);
+ },
+ customText: {
+ Upload: 'customUpload',
+ },
+ uploadConfig: {
+ partSize: 6 * 1024 * 1024,
+ },
+ storeTo: {
+ container: 'test',
+ },
+ })).not.toThrowError('Invalid picker params');
+ });
+
+ it('should throw error on invalid options', () => {
+ return expect(() => picker(client, {
+ // @ts-ignore
+ onOpen: 'test',
+ customText: {
+ Upload: 'customUpload',
+ // @ts-ignore
+ asd: {},
+ },
+ })).toThrowError('Invalid picker params');
+ });
+});
diff --git a/src/lib/picker.ts b/src/lib/picker.ts
index 1af048f3..ef93ca93 100644
--- a/src/lib/picker.ts
+++ b/src/lib/picker.ts
@@ -16,8 +16,10 @@
*/
import { loadModule, knownModuleIds } from 'filestack-loader';
-import { Client, WorkflowConfig } from './client';
-import { FSProgressEvent, UploadOptions } from './api/upload/types';
+import { FilestackError, FilestackErrorType } from './../filestack_error';
+import { Client } from './client';
+import { FSProgressEvent, UploadOptions, WorkflowConfig } from './api/upload/types';
+import { getValidator, PickerParamsSchema } from './../schema';
export interface PickerInstance {
/**
@@ -261,88 +263,89 @@ export interface PickerStoreOptions {
export interface PickerCustomText {
// Actions
- Upload: string;
- 'Deselect All': string;
- 'View/Edit Selected': string;
- 'Sign Out': string;
+ Upload?: string;
+ 'Deselect All'?: string;
+ 'View/Edit Selected'?: string;
+ 'Sign Out'?: string;
// Source Labels
- 'My Device': string;
- 'Web Search': string;
- 'Take Photo': string;
- 'Link (URL)': string;
- 'Record Video': string;
- 'Record Audio': string;
+ 'My Device'?: string;
+ 'Web Search'?: string;
+ 'Take Photo'?: string;
+ 'Link (URL)'?: string;
+ 'Record Video'?: string;
+ 'Record Audio'?: string;
// Custom Source
- 'Custom Source': string;
+ 'Custom Source'?: string;
// Footer Text
- Add: string;
- 'more file': string;
- 'more files': string;
+ Add?: string;
+ 'more file'?: string;
+ 'more files'?: string;
// Cloud
- Connect: string;
- 'Select Files from': string;
- 'You need to authenticate with ': string;
- 'A new page will open to connect your account.': string;
- 'We only extract images and never modify or delete them.': string;
+ Connect?: string;
+ 'Select Files from'?: string;
+ 'You need to authenticate with '?: string;
+ 'A new page will open to connect your account.'?: string;
+ 'We only extract images and never modify or delete them.'?: string;
// Summary
- Files: string;
- Images: string;
- Uploaded: string;
- Uploading: string;
- Completed: string;
- Filter: string;
- 'Cropped Images': string;
- 'Edited Images': string;
- 'Selected Files': string;
- 'Crop is required on images': string;
+ Files?: string;
+ Images?: string;
+ Uploaded?: string;
+ Uploading?: string;
+ Completed?: string;
+ Filter?: string;
+ 'Cropped Images'?: string;
+ 'Edited Images'?: string;
+ 'Selected Files'?: string;
+ 'Crop is required on images'?: string;
// Transform
- Crop: string;
- Circle: string;
- Rotate: string;
- Mask: string;
- Revert: string;
- Edit: string;
- Reset: string;
- Done: string;
- Save: string;
- Next: string;
- 'Edit Image': string;
- 'This image cannot be edited': string;
+ Crop?: string;
+ Circle?: string;
+ Rotate?: string;
+ Mask?: string;
+ Revert?: string;
+ Edit?: string;
+ Reset?: string;
+ Done?: string;
+ Save?: string;
+ Next?: string;
+ 'Edit Image'?: string;
+ 'This image cannot be edited'?: string;
// Retry messaging
- 'Connection Lost': string;
- 'Failed While Uploading': string;
- 'Retrying in': string;
- 'Try again': string;
- 'Try now': string;
+ 'Connection Lost'?: string;
+ 'Failed While Uploading'?: string;
+ 'Retrying in'?: string;
+ 'Try again'?: string;
+ 'Try now'?: string;
// Local File Source
- 'or Drag and Drop, Copy and Paste Files': string;
- 'Select Files to Upload': string;
- 'Select From': string;
- 'Drop your files anywhere': string;
+ 'or Drag and Drop, Copy and Paste Files'?: string;
+ 'Select Files to Upload'?: string;
+ 'Select From'?: string;
+ 'Drop your files anywhere'?: string;
// Input placeholders
- 'Enter a URL': string;
- 'Search images': string;
+ 'Enter a URL'?: string;
+ 'Search images'?: string;
// Webcam Source
- 'Webcam Disabled': string;
- 'Webcam Not Supported': string;
- 'Please enable your webcam to take a photo.': string;
- 'Your current browser does not support webcam functionality.': string;
- 'We suggest using Chrome or Firefox.': string;
+ 'Webcam Disabled'?: string;
+ 'Webcam Not Supported'?: string;
+ 'Please enable your webcam to take a photo.'?: string;
+ 'Your current browser does not support webcam functionality.'?: string;
+ 'We suggest using Chrome or Firefox.'?: string;
// Error Notifications
- 'File {displayName} is not an accepted file type. The accepted file types are {types}': string;
- 'File {displayName} is too big. The accepted file size is less than {roundFileSize}': string;
- 'Our file upload limit is {maxFiles} {filesText}': string;
+ 'File {displayName} is not an accepted file type. The accepted file types are {types}'?: string;
+ 'File {displayName} is too big. The accepted file size is less than {roundFileSize}'?: string;
+ 'Our file upload limit is {maxFiles} {filesText}'?: string;
+ 'No search results found for "{search}"'?: string;
}
export interface PickerOptions {
@@ -513,6 +516,11 @@ export interface PickerOptions {
* Restrict selected files to a maximum number of bytes. (e.g. 10 \* 1024 \* 1024 for 10MB limit).
*/
maxSize?: number;
+
+ /**
+ * Default view type option for file browser
+ */
+ viewType?: 'grid' | 'list';
/**
* Specify [width, height] in pixels of the desktop modal.
*/
@@ -591,10 +599,6 @@ export interface PickerOptions {
* Called when all files have been uploaded.
*/
onUploadDone?: PickerUploadDoneCallback;
- /**
- * For cloud sources whether to link or store files. Defaults to `false`.
- */
- preferLinkOverStore?: boolean;
/**
* Define a unique id for the application mount point.
@@ -656,6 +660,11 @@ export interface PickerTransformationOptions {
* Enable image rotation. Defaults to `true`.
*/
rotate?: boolean;
+
+ /**
+ * Global force crop option. Can be use ie with circle
+ */
+ force?: boolean;
}
/**
@@ -669,6 +678,11 @@ class PickerLoader {
private _initialized: Promise;
constructor(client: Client, options?: PickerOptions) {
+ const validateRes = getValidator(PickerParamsSchema)(options);
+ if (validateRes.errors.length) {
+ throw new FilestackError(`Invalid picker params`, validateRes.errors, FilestackErrorType.VALIDATION);
+ }
+
this._initialized = this.loadModule(client, options);
}
diff --git a/src/lib/utils/index.spec.browser.ts b/src/lib/utils/index.spec.browser.ts
new file mode 100644
index 00000000..2760d9d5
--- /dev/null
+++ b/src/lib/utils/index.spec.browser.ts
@@ -0,0 +1,41 @@
+/*
+ * Copyright (c) 2019 by Filestack.
+ * Some rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+import * as utils from './index';
+
+describe('utils:index', () => {
+ beforeAll(() => {
+ spyOn(utils, 'isNode').and.returnValue(false);
+ });
+
+ describe('md5', () => {
+ it('should return correct md5 value', () => {
+ expect(utils.md5(Buffer.from('test'))).toEqual('CY9rzUYh03PK3k6DJie09g==');
+ });
+ });
+
+ describe('b64', () => {
+ it('should return correct b65 value', () => {
+ expect(utils.b64('testtext')).toEqual('dGVzdHRleHQ=');
+ });
+ });
+
+ describe('requireNode', () => {
+ it('should require node package', () => {
+ expect(utils.requireNode('crypto')).toBeFalsy();
+ });
+ });
+});
diff --git a/src/lib/utils/index.spec.ts b/src/lib/utils/index.spec.ts
index b73d4014..4733b8e5 100644
--- a/src/lib/utils/index.spec.ts
+++ b/src/lib/utils/index.spec.ts
@@ -1,10 +1,7 @@
/*
- * Copyright (c) 2018 by Filestack.
+ * Copyright (c) 2019 by Filestack.
* Some rights reserved.
*
- * Original implementation of throat by Forbes Lindesay
- * https://github.com/ForbesLindesay/throat
- *
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
@@ -17,58 +14,154 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+import { resolveCdnUrl, resolveHost, removeEmpty, uniqueTime, uniqueId, md5, sanitizeName, filterObject, b64, requireNode } from './index';
+import { config } from '../../config';
+
+describe('utils:index', () => {
+ describe('resolveCdnUrl', () => {
-import * as assert from 'assert';
-import * as t from 'tcomb-validation';
-import { checkOptions, removeEmpty, resolveCdnUrl } from './index';
-declare var ENV: any;
+ const session = {
+ apikey: 'TEST_API_KEY',
+ cname: 'example.com',
+ urls: config.urls,
+ };
-const session = ENV.session;
+ it('should properly resolve cdn url with hashed handle', () => {
+ const handle = '5aYkEQJSQCmYShsoCnZN';
+ const result = resolveCdnUrl(session, handle);
+ expect(result).toEqual('https://cdn.filestackcontent.com');
+ });
-describe('resolveCdnUrl', () => {
+ it('should properly resolve cdn url with src handle', () => {
+ const handle = 'src://test123/test.jpg';
+ const result = resolveCdnUrl(session, handle);
+ expect(result).toEqual('https://cdn.filestackcontent.com/TEST_API_KEY');
+ });
- it('should throw exception when using http or src handle and there is no apiKey', () => {
- const sessionClone = JSON.parse(JSON.stringify(session));
- delete sessionClone.apikey;
+ it('should properly resolve cdn url with hashed handle', () => {
+ const handle = 'https://static1.squarespace.com/static/544eb3cce4b0ef091773611f/t/59ba7ce1bd10f00dcdc80a5f/1505394087367/DSC_0527.jpg';
+ const result = resolveCdnUrl(session, handle);
+ expect(result).toEqual('https://cdn.filestackcontent.com/TEST_API_KEY');
+ });
- assert.throws(() => resolveCdnUrl(sessionClone, 'http://test.com'));
- assert.throws(() => resolveCdnUrl(sessionClone, 'src://test.com'));
+ it('should throw an error when using src handle or url without apikey', () => {
+ const handle = 'src://test123/test.jpg';
+ session.apikey = '';
+ expect(() => { resolveCdnUrl(session, handle); }).toThrow('Api key is required when storage alias is provided');
+ });
});
-});
-describe('checkOptions', () => {
- it('should throw exception when wrong option is provided', () => {
- const allowed = [
- { name: 'test', type: t.Boolean },
- ];
+ describe('resolveHost', () => {
+ const hosts = config.urls;
- const options = {
- notAllowed: 123,
+ const checkHosts = (hosts, expected) => {
+ Object.keys(hosts).forEach((k) => {
+ expect(hosts[k].indexOf(expected) > -1).toBeTruthy();
+ });
};
- assert.throws(() => checkOptions('retrieveOptions', allowed, options));
+ it('should return proper host', () => {
+ const cname = 'example.com';
+ const result = resolveHost(hosts, cname);
+ checkHosts(result, cname);
+ });
+
+ it('should return hosts when cname is an empty string', () => {
+ const cname = '';
+ const result = resolveHost(hosts, cname);
+ checkHosts(result, cname);
+ });
+ });
+
+ describe('removeEmpty', () => {
+ it('should remove empty options from an object', () => {
+ const testOb = { test1: true, test2: undefined, test3: false };
+ expect(removeEmpty(testOb)).toEqual({ test1: true, test3: false });
+ });
});
- it('should throw exception when wrong option value is provided', () => {
- const allowed = [
- { name: 'test', type: t.Boolean },
- ];
+ describe('uniqueTime', () => {
+ it('should return unique times', () => {
+ expect(uniqueTime()).not.toEqual(uniqueTime());
+ });
+ });
- const options = {
- test: 123,
- };
+ describe('uniqueId', () => {
+ it('should get different ids each time', () => {
+ expect(uniqueId()).not.toEqual(uniqueId());
+ });
- assert.throws(() => checkOptions('retrieveOptions', allowed, options));
+ it('should return id with given length', () => {
+ expect(uniqueId(12).length).toEqual(12);
+ expect(uniqueId(4).length).toEqual(4);
+ });
});
-});
-describe('removeEmpty', () => {
- it('should remove empty values from object', () => {
- const testObj = {
- test: 123,
- empty: null,
- };
+ describe('md5', () => {
+ it('should return correct md5 value', () => {
+ expect(md5(Buffer.from('test'))).toEqual('CY9rzUYh03PK3k6DJie09g==');
+ });
+ });
+
+ describe('b64', () => {
+ it('should return correct b65 value', () => {
+ expect(b64('testtext')).toEqual('dGVzdHRleHQ=');
+ });
+ });
+
+ describe('sanitizeName', () => {
+ it('should sanitize file name with extension', () => {
+ expect(sanitizeName('a\\{%`"~[]#|^<>1.jpg')).toEqual('a-------------1.jpg');
+ });
+
+ it('should sanitize file name without extension', () => {
+ expect(sanitizeName('123qwe')).toEqual('123qwe');
+ });
+
+ it('should return undefined on empty string', () => {
+ expect(sanitizeName('')).toEqual('undefined');
+ });
+
+ it('should respect sanitize options as boolean', () => {
+ expect(sanitizeName('[]#|.jpg', false)).toEqual('[]#|.jpg');
+ });
+
+ it('should respect sanitize options with provided options', () => {
+ expect(sanitizeName('[]#|.jpg', {
+ exclude: ['[', ']'],
+ replacement: '_',
+ })).toEqual('__#|.jpg');
+ });
+ });
+
+ describe('requireNode', () => {
+ it('should require node package', () => {
+ expect(requireNode('crypto')).toBeTruthy();
+ });
+ });
+
+ describe('filterObject', () => {
+ it('should filter object', () => {
+ expect(filterObject({
+ test: 1,
+ test2: 2,
+ test3: 3,
+ }, ['test', 'test2'])).toEqual({
+ test: 1,
+ test2: 2,
+ });
+ });
- assert.equal(JSON.stringify(removeEmpty(testObj)), JSON.stringify({ test: 123, }));
+ it('should result the same object on empty requirements', () => {
+ expect(filterObject({
+ test: 1,
+ test2: 2,
+ test3: 3,
+ }, [])).toEqual({
+ test: 1,
+ test2: 2,
+ test3: 3,
+ });
+ });
});
});
diff --git a/src/lib/utils/index.ts b/src/lib/utils/index.ts
index ffdfb830..8e676f35 100644
--- a/src/lib/utils/index.ts
+++ b/src/lib/utils/index.ts
@@ -15,12 +15,15 @@
* limitations under the License.
*/
-import throatImpl from './throat';
-import * as t from 'tcomb-validation';
import { Session } from '../client';
import { Hosts } from './../../config';
+import * as SparkMD5 from 'spark-md5';
+import fileType from 'file-type';
+import * as isutf8 from 'isutf8';
-export const throat = throatImpl;
+const mobileRegexp = /(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series[46]0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino|android|ipad|playbook|silk/i;
+const htmlCommentsRegexp = //g;
+const svgRegexp = /^\s*(?:<\?xml[^>]*>\s*)?(?:]*\s*(?:\[?(?:\s*]*>\s*)*\]?)*[^>]*>\s*)?]*>[^]*<\/svg>\s*$/i;
/**
* Resolve cdn url based on handle type
@@ -44,53 +47,25 @@ export const resolveCdnUrl = (session: Session, handle: string): string => {
return cdnURL;
};
-export const resolveHost = (hosts: Hosts, cname: string): Hosts => {
- let result = hosts;
-
- if (cname) {
- const hosts = /filestackapi.com|filestackcontent.com/i;
-
- Object.keys(hosts).forEach((key) => {
- result[key] = hosts[key].replace(hosts, cname);
- });
- }
-
- return result;
-};
-
/**
- * Check config options
+ * Resolve all urls with provided cnames
*
* @private
- * @param name
- * @param allowed
- * @param options
- */
-export const checkOptions = (name: string, allowed: any, options: any = {}): {} => {
- const keys = Object.keys(options);
- const allowedNames = allowed.map((a: any) => a.name);
- const namesFormatted = allowedNames.join(', ');
- keys.forEach((key) => {
- if (allowedNames.indexOf(key) < 0) {
- throw new Error(`${key} is not a valid option for ${name}. Valid options are: ${namesFormatted}`);
- }
- });
- allowed.forEach((obj: any) => {
- let value = options[obj.name];
- if (obj.name === 'location' && typeof value === 'string') {
- value = value.toLowerCase();
- }
- if (value !== undefined) {
- const result = t.validate(value, obj.type);
- if (!result.isValid()) {
- const error = result.firstError();
- if (error && error.message) {
- throw new Error(error.message);
- }
- }
- }
+ * @param urls
+ * @param cname
+ */
+export const resolveHost = (urls: Hosts, cname: string): Hosts => {
+ if (!cname) {
+ return urls;
+ }
+
+ const hosts = /filestackapi.com|filestackcontent.com/i;
+
+ Object.keys(urls).forEach(key => {
+ urls[key] = urls[key].replace(hosts, cname);
});
- return keys;
+
+ return urls;
};
/**
@@ -101,51 +76,164 @@ export const checkOptions = (name: string, allowed: any, options: any = {}): {}
*/
export const removeEmpty = (obj: any) => {
const newObj = { ...obj };
- Object.keys(newObj).forEach(k => (!newObj[k] && newObj[k] !== undefined) && delete newObj[k]);
+ Object.keys(newObj).forEach(k => !newObj[k] && typeof newObj[k] !== 'boolean' && delete newObj[k]);
return newObj;
};
/**
+ * Returns information about current env (browser|nodejs)
+ */
+export const isNode = () => typeof process !== 'undefined' && process.versions && process.versions.node;
+
+/**
+ * Returns if browser is a mobile device (if node env always return false)
+ */
+/* istanbul ignore next */
+export const isMobile = () => !isNode() && navigator && navigator.userAgent && mobileRegexp.test(navigator.userAgent);
+
+/**
+ * Returns unique time
+ */
+let last;
+export const uniqueTime = () => {
+ const time = Date.now();
+ last = time === last ? time + 1 : time;
+ return last;
+};
+
+/**
+ * Generates random string with provided length
*
+ * @param len
+ */
+export const uniqueId = (len: number = 10): string => {
+ return new Array(len).join().replace(/(.|$)/g, () => ((Math.random() * 36) | 0).toString(36)[Math.random() < 0.5 ? 'toString' : 'toUpperCase']());
+};
+
+/**
+ * Calculates a MD5 checksum for passed buffer
* @private
- * @param fn
- * @param interval
- * @param callFirst
+ * @param data Data to be hashed
+ * @returns base64 encoded MD5 hash
*/
-export const throttle = function throttle(fn: any, interval: number, callFirst?: boolean) {
- let wait = false;
- let callNow = false;
+export const md5 = (data: any): string => {
+ if (isNode()) {
+ return (requireNode('crypto')).createHash('md5').update(data).digest('base64');
+ }
+
/* istanbul ignore next */
- return function (this: any, ...args: any[]) {
- callNow = !!callFirst && !wait;
- const context = this;
- if (!wait) {
- wait = true;
- setTimeout(function () {
- wait = false;
- if (!callFirst) {
- return fn.apply(context, args);
- }
- }, interval);
+ return btoa(SparkMD5.ArrayBuffer.hash(data, true));
+};
+
+/**
+ * Check if input is a svg
+ *
+ * @param input
+ */
+const isSvg = (input: Uint8Array | Buffer) => input && svgRegexp.test(String.fromCharCode.apply(null, input).replace(htmlCommentsRegexp, ''));
+
+/**
+ * Check if input is a svg
+ *
+ * @param {Uint8Array | Buffer} file
+ * @returns {string} - mimetype
+ */
+export const getMimetype = (file: Uint8Array | Buffer): string => {
+ let type = fileType(file);
+ if (type) {
+ return type.mime;
+ }
+
+ try {
+
+ if (isSvg(file)) {
+ return 'image/svg+xml';
}
- if (callNow) {
- callNow = false;
- return fn.apply(this, arguments);
+
+ if (isutf8(file)) {
+ return 'text/plain';
}
- };
+ } catch (e) {
+ console.warn('Additional mimetype checks (text/plain) are currently not supported for browsers');
+ }
+
+ return 'application/octet-stream';
+};
+
+/**
+ * return based string
+ * @param data
+ */
+export const b64 = (data: string): string => {
+ if (isNode()) {
+ return Buffer.from(data).toString('base64');
+ }
+
+ return btoa(data);
};
/**
+ * Hides require from buindling by weback to browser
*
- * @private
- * @param start
- * @param stop
- * @param step
- */
-export const range = (start: number, stop: number, step: number = 1) => {
- const toReturn: any[] = [];
- for (; start < stop; start += step) {
- toReturn.push(start);
+ * @param {string} name
+ */
+export const requireNode = (name: string): any => {
+ if (!isNode()) {
+ return false;
+ }
+
+ return require && require(name);
+};
+
+/**
+ * Sanitizer Options
+ */
+export type SanitizeOptions = (boolean | {
+ exclude?: string[],
+ replacement?: string,
+});
+
+/**
+ * Sanitize file name
+ *
+ * @param name
+ * @param {bool} options - enable,disable sanitizer, default enabled
+ * @param {string} options.replacement - replacement for sanitized chars defaults to "-"
+ * @param {string[]} options.exclude - array with excluded chars default - ['\', '{', '}','|', '%', '`', '"', "'", '~', '[', ']', '#', '|', '^', '<', '>']
+ */
+export const sanitizeName = (name: string, options: SanitizeOptions = true): string => {
+ if (typeof options === 'boolean' && !options) {
+ return name;
+ }
+
+ let ext;
+
+ const replacement = typeof options !== 'boolean' && options.replacement ? options.replacement : '-';
+ const exclude = typeof options !== 'boolean' && options.exclude ? options.exclude : ['\\', '{', '}','|', '%', '`', '"', "'", '~', '[', ']', '#', '|', '^', '<', '>'];
+
+ if (!name || name.length === 0) {
+ return 'undefined';
+ }
+
+ const fileParts = name.split('.');
+
+ if (fileParts.length > 1) {
+ ext = fileParts.pop();
+ }
+
+ return `${fileParts.join('_').split('').map((char) => exclude.indexOf(char) > -1 ? replacement : char).join('')}${ext ? '.' + ext : ''}`;
+};
+
+/**
+ * Filter object to given fields
+ *
+ * @param toFilter
+ * @param requiredFields
+ */
+export const filterObject = (toFilter, requiredFields: string[]) => {
+ if (!requiredFields || requiredFields.length === 0) {
+ return toFilter;
}
- return toReturn;
+
+ return Object.keys(toFilter).filter(f => requiredFields.indexOf(f) > -1).reduce((obj, key) => ({ ...obj, [key]: toFilter[key] }), {});
};
diff --git a/src/lib/utils/throat.spec.ts b/src/lib/utils/throat.spec.ts
deleted file mode 100644
index ecd68f81..00000000
--- a/src/lib/utils/throat.spec.ts
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * Copyright (c) 2018 by Filestack.
- * Some rights reserved.
- *
- * Original implementation of throat by Forbes Lindesay
- * https://github.com/ForbesLindesay/throat
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import * as assert from 'assert';
-import throat from './throat';
-
-let sentA = {};
-let sentB = {};
-let sentC = {};
-
-declare var Promise: any;
-
-class Processed {
- val: any;
- constructor(val: any) {
- this.val = val;
- }
-}
-
-function worker(max: number) {
- let concurrent = 0;
- function execute() {
- concurrent++;
- if (concurrent > max) throw new Error('Extra processes were run in parallel.');
- const res = new Processed(Array.prototype.slice.call(arguments));
- return new Promise(function (resolve: any) {
- setTimeout(function () {
- concurrent--;
- resolve(res);
- }, 100);
- });
- }
- return execute;
-}
-
-describe('throat(n, fn)', function () {
- this.timeout(10000);
- it('throat(1, fn) acts as a sequential worker', function () {
- return Promise.all([sentA, sentB, sentC].map(throat(1, worker(1))))
- .then(function (res: any) {
- assert.ok(res[0] instanceof Processed && res[0].val.length > 1 && res[0].val[0] === sentA);
- assert.ok(res[1] instanceof Processed && res[1].val.length > 1 && res[1].val[0] === sentB);
- assert.ok(res[2] instanceof Processed && res[2].val.length > 1 && res[2].val[0] === sentC);
- });
- });
-
- it('throat(2, fn) works on two inputs in parallel', function () {
- return Promise.all([sentA, sentB, sentC].map(throat(2, worker(2))))
- .then(function (res: any) {
- assert.ok(res[0] instanceof Processed && res[0].val.length > 1 && res[0].val[0] === sentA);
- assert.ok(res[1] instanceof Processed && res[1].val.length > 1 && res[1].val[0] === sentB);
- assert.ok(res[2] instanceof Processed && res[2].val.length > 1 && res[2].val[0] === sentC);
- });
- });
-
- it('throat(3, fn) works on three inputs in parallel', function () {
- return Promise.all([sentA, sentB, sentC].map(throat(3, worker(3))))
- .then(function (res: any) {
- assert.ok(res[0] instanceof Processed && res[0].val.length > 1 && res[0].val[0] === sentA);
- assert.ok(res[1] instanceof Processed && res[1].val.length > 1 && res[1].val[0] === sentB);
- assert.ok(res[2] instanceof Processed && res[2].val.length > 1 && res[2].val[0] === sentC);
- });
- });
-
- it('should reject fn as a string', function () {
- try {
- throat(2, 'foo');
- } catch (ex) {
- assert.ok(/Expected throat fn to be a function/.test(ex.message));
- return;
- }
- throw new Error('Expected a failure');
- });
-});
diff --git a/src/lib/utils/throat.ts b/src/lib/utils/throat.ts
deleted file mode 100644
index ce08105a..00000000
--- a/src/lib/utils/throat.ts
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * Copyright (c) 2018 by Filestack.
- * Some rights reserved.
- *
- * Original implementation of throat by Forbes Lindesay
- * https://github.com/ForbesLindesay/throat
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * @private
- */
-class Delayed {
- resolve: any;
- fn: any;
- self?: any;
- args: any;
- constructor(resolve: any, fn: any, self: any, args: any) {
- this.resolve = resolve;
- this.fn = fn;
- this.self = self || null;
- this.args = args;
- }
-}
-
-/**
- * @private
- */
-class Queue {
- _s1: any[];
- _s2: any[];
- constructor() {
- this._s1 = [];
- this._s2 = [];
- }
- push(value: any) {
- this._s1.push(value);
- }
- shift() {
- let s2 = this._s2;
- if (s2.length === 0) {
- const s1 = this._s1;
- if (s1.length === 0) {
- return;
- }
- this._s1 = s2;
- s2 = this._s2 = s1.reverse();
- }
- return s2.pop();
- }
- isEmpty() {
- return !this._s1.length && !this._s2.length;
- }
-}
-
-/**
- *
- * @private
- * @param size
- * @param fn
- */
-export default function throat(size: number, fn: any) {
- const queue = new Queue();
- function run(fn: any, self: any, args: any) {
- if (size) {
- size--;
- const result = new Promise(function (resolve) {
- resolve(fn.apply(self, args));
- });
- result.then(release, release);
- return result;
- } else {
- return new Promise(function (resolve) {
- queue.push(new Delayed(resolve, fn, self, args));
- });
- }
- }
- function release() {
- size++;
- if (!queue.isEmpty()) {
- const next = queue.shift();
- next.resolve(run(next.fn, next.self, next.args));
- }
- }
- if (fn !== undefined && typeof fn !== 'function') {
- throw new TypeError(
- 'Expected throat fn to be a function but got ' + typeof fn
- );
- }
- return function (this: any, ...args: any[]) {
- return run(fn, this, args);
- };
-}
diff --git a/src/schema/definitions.schema.ts b/src/schema/definitions.schema.ts
new file mode 100644
index 00000000..45a34c4e
--- /dev/null
+++ b/src/schema/definitions.schema.ts
@@ -0,0 +1,191 @@
+/*
+ * Copyright (c) 2018 by Filestack.
+ * Some rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+export const DefinitionsSchema = {
+ '$schema': 'http://json-schema.org/draft-07/schema#',
+ title: 'Filestack',
+ description: 'Filestack common definitions',
+ type: 'object',
+ additionalProperties: false,
+ definitions: {
+ workflowsDef: {
+ id: '/workflowsDef',
+ type: 'array',
+ additionalItems: false,
+ minItems: 1,
+ maxItems: 20,
+ items: [{
+ oneOf: [{
+ type: 'string',
+ }, {
+ type: 'object',
+ additionalProperties: false,
+ properties: {
+ id: {
+ type: 'string',
+ },
+ },
+ }],
+ }],
+ },
+ securityCallDef: {
+ id: '/securityCallDef',
+ oneOf: [{
+ additionalProperties: false,
+ type: 'string',
+ enum: ['pick', 'read', 'stat', 'write', 'writeUrl', 'store', 'convert', 'remove', 'exif', 'runWorkflow'],
+ }, {
+ type: 'array',
+ additionalProperties: false,
+ items: [{
+ minItems: 1,
+ maxItems: 10,
+ type: 'string',
+ additionalProperties: false,
+ enum: ['pick', 'read', 'stat', 'write', 'writeUrl', 'store', 'convert', 'remove', 'exif', 'runWorkflow'],
+ }],
+ }],
+ },
+ regionsDef: {
+ id: '/regionsDef',
+ type: 'string',
+ enum: ['us-east-1', 'us-west-1', 'us-west-2', 'eu-west-1', 'eu-central-1', 'ap-northeast-1', 'ap-northeast-2', 'ap-southeast-1', 'ap-southeast-2', 'sa-east-1'],
+ },
+ locationsDef: {
+ id: '/locationsDef',
+ type: 'string',
+ enum: ['s3', 'S3', 'rackspace', 'gcs', 'azure', 'dropbox'],
+ },
+ colorDef: {
+ id: 'colorDef',
+ oneOf: [{
+ type: 'string',
+ pattern: '^([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$', // without # at the begining
+ }, {
+ type: 'string',
+ enum: ['aliceblue', 'antiquewhite', 'aqua', 'aquamarine', 'azure', 'beige', 'bisque', 'black', 'blanchedalmond', 'blue', 'blueviolet', 'brown', 'burlywood', 'cadetblue', 'chartreuse', 'chocolate', 'coral', 'cornflowerblue', 'cornsilk', 'crimson', 'cyan', 'darkblue', 'darkcyan', 'darkgoldenrod', 'darkgray', 'darkgreen', 'darkgrey', 'darkkhaki', 'darkmagenta', 'darkolivegreen', 'darkorange', 'darkorchid', 'darkred', 'darksalmon', 'darkseagreen', 'darkslateblue', 'darkslategray', 'darkslategrey', 'darkturquoise', 'darkviolet', 'deeppink', 'deepskyblue', 'dimgray', 'dimgrey', 'dodgerblue', 'firebrick', 'floralwhite', 'forestgreen', 'fractal', 'fuchsia', 'gainsboro', 'ghostwhite', 'gold', 'goldenrod', 'gray0', 'gray1', 'gray2', 'gray3', 'gray4', 'gray5', 'gray6', 'gray7', 'gray8', 'gray9', 'gray10', 'gray11', 'gray12', 'gray13', 'gray14', 'gray15', 'gray16', 'gray17', 'gray18', 'gray19', 'gray20', 'gray21', 'gray22', 'gray23', 'gray24', 'gray25', 'gray26', 'gray27', 'gray28', 'gray29', 'gray30', 'gray31', 'gray32', 'gray33', 'gray34', 'gray35', 'gray36', 'gray37', 'gray38', 'gray39', 'gray40', 'gray41', 'gray42', 'gray43', 'gray44', 'gray45', 'gray46', 'gray47', 'gray48', 'gray49', 'gray50', 'gray51', 'gray52', 'gray53', 'gray54', 'gray55', 'gray56', 'gray57', 'gray58', 'gray59', 'gray60', 'gray61', 'gray62', 'gray63', 'gray64', 'gray65', 'gray66', 'gray67', 'gray68', 'gray69', 'gray70', 'gray71', 'gray72', 'gray73', 'gray74', 'gray75', 'gray76', 'gray77', 'gray78', 'gray79', 'gray80', 'gray81', 'gray82', 'gray83', 'gray84', 'gray85', 'gray86', 'gray87', 'gray88', 'gray89', 'gray90', 'gray91', 'gray92', 'gray93', 'gray94', 'gray95', 'gray96', 'gray97', 'gray98', 'gray99', 'gray100', 'gray', 'green', 'greenyellow', 'grey', 'honeydew', 'hotpink', 'indianred', 'indigo', 'ivory', 'khaki', 'lavender', 'lavenderblush', 'lawngreen', 'lemonchiffon', 'lightblue', 'lightcoral', 'lightcyan', 'lightgoldenrodyellow', 'lightgray', 'lightgreen', 'lightgrey', 'lightpink', 'lightsalmon', 'lightseagreen', 'lightskyblue', 'lightslategray', 'lightslategrey', 'lightsteelblue', 'lightyellow', 'lime', 'limegreen', 'linen', 'magenta', 'maroon', 'mediumaquamarine', 'mediumblue', 'mediumorchid', 'mediumpurple', 'mediumseagreen', 'mediumslateblue', 'mediumspringgreen', 'mediumturquoise', 'mediumvioletred', 'midnightblue', 'mintcream', 'mistyrose', 'moccasin', 'navajowhite', 'navy', 'none', 'oldlace', 'olive', 'olivedrab', 'orange', 'orangered', 'orchid', 'palegoldenrod', 'palegreen', 'paleturquoise', 'palevioletred', 'papayawhip', 'peachpuff', 'peru', 'pink', 'plum', 'powderblue', 'purple', 'red', 'rosybrown', 'royalblue', 'saddlebrown', 'salmon', 'sandybrown', 'seagreen', 'seashell', 'sienna', 'silver', 'skyblue', 'slateblue', 'slategray', 'slategrey', 'snow', 'springgreen', 'steelblue', 'tan', 'teal', 'thistle', 'tomato', 'turquoise', 'violet', 'wheat', 'white', 'whitesmoke', 'yellow', 'yellowgreen',],
+ }],
+ },
+ pageFormatDef: {
+ id: '/pageFormatDef',
+ type: 'string',
+ enum: ['a2', 'a3', 'a4', 'a5', 'b4', 'b5', 'letter', 'legal', 'tabloid'],
+ },
+ pageRangeDef: {
+ id: '/pageRangeDef',
+ type: 'array',
+ uniqueItems: true,
+ items: [{
+ oneOf: [{
+ type: 'integer',
+ minimum: 1,
+ }, {
+ type: 'string',
+ pattern: '^(\\d+(?:-\\d+)?)$|^(-\\d+)$|^(\\d+-)$',
+ errorMessage: 'Param should be provided in one of the following formats: "1,2,3,5", "1-3", "1-", "-2" ',
+ }],
+ }],
+ },
+ facesDef: {
+ id: '/facesDef',
+ oneOf: [{
+ type: 'string',
+ enum: ['all'],
+ }, {
+ type: 'integer',
+ minimum: 1,
+ maximum: 1000,
+ }, {
+ type: 'array',
+ uniqueItems: true,
+ items: [{
+ type: 'integer',
+ minimum: 1,
+ maximum: 1000,
+ }],
+ }],
+ },
+ objectsDef: {
+ id: '/objectsDef',
+ type: 'array',
+ minItems: 1,
+ maxItems: 50,
+ items: [{
+ type: 'array',
+ additionalItems: false,
+ minItems: 4,
+ items: [{
+ type: 'integer',
+ minimum: 0,
+ maximum: 10000,
+ }, {
+ type: 'integer',
+ minimum: 0,
+ maximum: 10000,
+ }, {
+ type: 'integer',
+ minimum: 1,
+ maximum: 10000,
+ }, {
+ type: 'integer',
+ minimum: 1,
+ maximum: 10000,
+ }],
+ }],
+ },
+ positionDef: {
+ id: '/positionDef',
+ default: ['middle', 'center'],
+ oneOf: [
+ {
+ type: 'string',
+ enum: [
+ 'top',
+ 'middle',
+ 'bottom',
+ 'left',
+ 'center',
+ 'right',
+ ],
+ },
+ {
+ type: 'array',
+ uniqueItems: true,
+ additionalItems: false,
+ minItems: 2,
+ default: ['middle', 'center'],
+ items: [
+ {
+ type: 'string',
+ enum: [
+ 'top',
+ 'middle',
+ 'bottom',
+ ],
+ }, {
+ type: 'string',
+ enum: [
+ 'left',
+ 'center',
+ 'right',
+ ],
+ },
+ ],
+ },
+ ],
+ },
+ },
+};
diff --git a/src/schema/index.ts b/src/schema/index.ts
index a01a5062..6a01c73d 100644
--- a/src/schema/index.ts
+++ b/src/schema/index.ts
@@ -17,3 +17,10 @@
export * from './transforms.schema';
export * from './validator';
+export * from './store.schema';
+export * from './security.schema';
+export * from './preview.schema';
+export * from './picker.schema';
+export * from './upload.schema';
+export * from './metadata.schema';
+export * from './retrieve.schema';
diff --git a/src/schema/metadata.schema.ts b/src/schema/metadata.schema.ts
new file mode 100644
index 00000000..efb679eb
--- /dev/null
+++ b/src/schema/metadata.schema.ts
@@ -0,0 +1,85 @@
+/*
+ * Copyright (c) 2018 by Filestack.
+ * Some rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+export const MetadataParamsSchema = {
+ '$schema': 'http://json-schema.org/draft-07/schema#',
+ title: 'Filestack Metadata',
+ description: 'Filestack Metadata Options',
+ type: 'object',
+ additionalProperties: false,
+ properties: {
+ size: {
+ type: 'boolean',
+ },
+ mimetype: {
+ type: 'boolean',
+ },
+ filename: {
+ type: 'boolean',
+ },
+ width: {
+ type: 'boolean',
+ },
+ metadata: {
+ type: 'boolean',
+ },
+ height: {
+ type: 'boolean',
+ },
+ uploaded: {
+ type: 'boolean',
+ },
+ writeable: {
+ type: 'boolean',
+ },
+ cloud: {
+ type: 'boolean',
+ },
+ sourceUrl: {
+ type: 'boolean',
+ },
+ md5: {
+ type: 'boolean',
+ },
+ sha1: {
+ type: 'boolean',
+ },
+ sha224: {
+ type: 'boolean',
+ },
+ sha256: {
+ type: 'boolean',
+ },
+ sha384: {
+ type: 'boolean',
+ },
+ sha512: {
+ type: 'boolean',
+ },
+ location: {
+ type: 'boolean',
+ },
+ path: {
+ type: 'boolean',
+ },
+ container: {
+ type: 'boolean',
+ },
+ exif: {
+ type: 'boolean',
+ },
+ },
+};
diff --git a/src/schema/picker.schema.spec.browser.ts b/src/schema/picker.schema.spec.browser.ts
new file mode 100644
index 00000000..2a6f80ff
--- /dev/null
+++ b/src/schema/picker.schema.spec.browser.ts
@@ -0,0 +1,255 @@
+/*
+ * Copyright (c) 2018 by Filestack.
+ * Some rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import * as assert from 'assert';
+import { getValidator, PickerParamsSchema } from './';
+
+import * as jsdom from 'jsdom';
+const { JSDOM } = jsdom;
+
+describe('Picker Params Schema', () => {
+ const validator = getValidator(PickerParamsSchema);
+
+ const validate = params => {
+ const res = validator(params);
+
+ // if (res.errors.length) {
+ // console.log(res.errors);
+ // }
+
+ return res.errors.length === 0 ? true : false;
+ };
+
+ const assertFail = res => assert.ok(!res);
+
+ it('should validate allow manual retry', () => {
+ assert.ok(validate({ allowManualRetry: true }));
+ assertFail(validate({ allowManualRetry: {} }));
+ });
+
+ it('should validate accept param', () => {
+ assert.ok(validate({ accept: 'image/jpeg' }));
+ assert.ok(validate({ accept: ['image/jpeg', 'image/png', '*'] }));
+ assertFail(validate({ accept: {} }));
+ });
+
+ it('should validate fromSources param', () => {
+ assert.ok(validate({ fromSources: ['url', 'facebook'] }));
+ assertFail(validate({ fromSources: ['wrong_source'] }));
+ });
+
+ it('should validate container param', () => {
+ assert.ok(validate({ container: 'test' }));
+
+ const nodeDiv = JSDOM.fragment(`Hello
`).querySelector('div');
+ const nodeP = JSDOM.fragment(`Hello
`).querySelector('p');
+ assert.ok(validate({ container: nodeDiv }));
+ assert.ok(validate({ container: nodeP }));
+ assertFail(validate({ container: {} }));
+ });
+
+ it('should validate cleanupImageExif param', () => {
+ assert.ok(validate({ cleanupImageExif: true }));
+ assert.ok(
+ validate({
+ cleanupImageExif: {
+ keepOrientation: true,
+ },
+ })
+ );
+ assertFail(
+ validate({
+ cleanupImageExif: {
+ test: 1,
+ },
+ })
+ );
+ });
+
+ it('should validate displayMode param', () => {
+ assert.ok(validate({ displayMode: 'inline' }));
+ assert.ok(validate({ displayMode: 'overlay' }));
+ assert.ok(validate({ displayMode: 'dropPane' }));
+ assertFail(validate({ displayMode: 'test' }));
+ });
+
+ it('should validate imageDim param', () => {
+ assert.ok(validate({ imageDim: [100, 100] }));
+ assertFail(validate({ imageDim: [0, 1] }));
+ assertFail(validate({ imageDim: [100, 100, 3] }));
+ });
+
+ it('should validate storeTo Params', () => {
+ assert.ok(
+ validate({
+ storeTo: {
+ filename: 'test',
+ location: 's3',
+ path: '/test/',
+ region: 'test',
+ access: 'public',
+ workflows: ['test'],
+ },
+ })
+ );
+
+ assert.ok(
+ validate({
+ storeTo: {
+ filename: 'test',
+ location: 's3',
+ path: '/test/',
+ region: 'test',
+ access: 'private',
+ workflows: [
+ {
+ id: 'test',
+ },
+ ],
+ },
+ })
+ );
+
+ assertFail(
+ validate({
+ storeTo: {
+ workflows: {},
+ access: 'none',
+ },
+ })
+ );
+ });
+
+ it('should validate transformations param', () => {
+ assert.ok(
+ validate({
+ transformations: {
+ circle: true,
+ rotate: true,
+ crop: true,
+ },
+ })
+ );
+
+ assert.ok(
+ validate({
+ transformations: {
+ circle: false,
+ rotate: false,
+ crop: {
+ force: true,
+ aspectRatio: 1 / 2,
+ },
+ },
+ })
+ );
+
+ assertFail(
+ validate({
+ transformations: {
+ test: 123,
+ },
+ })
+ );
+ });
+
+ it('should validate customText param', () => {
+ assert.ok(
+ validate({
+ customText: {
+ sometest: 'testtext',
+ },
+ })
+ );
+ assertFail(validate({ customText: ['test', 'ts1'] }));
+ });
+
+ it('should validate customAuthText param', () => {
+ assert.ok(
+ validate({
+ customAuthText: {
+ test: {
+ top: 'test',
+ bottom: 'test2',
+ },
+ },
+ })
+ );
+
+ assertFail(
+ validate({
+ customAuthText: {
+ test: {
+ top: 'test',
+ },
+ },
+ })
+ );
+
+ assertFail(
+ validate({
+ customAuthText: {
+ test: '123',
+ },
+ })
+ );
+ });
+
+ it('should validate ', () => {
+ assert.ok(
+ validate({
+ uploadConfig: {
+ partSize: 5 * 1024 * 1024,
+ intelligent: true,
+ onProgress: () => console,
+ },
+ })
+ );
+
+ assert.ok(
+ validate({
+ uploadConfig: {
+ intelligent: 'fallback',
+ },
+ })
+ );
+
+ assertFail(
+ validate({
+ uploadConfig: {
+ partSize: 100,
+ },
+ })
+ );
+
+ assertFail(
+ validate({
+ uploadConfig: {
+ progressInterval: 0,
+ },
+ })
+ );
+
+ assertFail(
+ validate({
+ uploadConfig: {
+ concurrency: 0,
+ },
+ })
+ );
+ });
+});
diff --git a/src/schema/picker.schema.ts b/src/schema/picker.schema.ts
new file mode 100644
index 00000000..91b9eb86
--- /dev/null
+++ b/src/schema/picker.schema.ts
@@ -0,0 +1,388 @@
+/*
+ * Copyright (c) 2018 by Filestack.
+ * Some rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+import { UploadParamsSchema } from './upload.schema';
+
+export const PickerParamsSchema = {
+ $schema: 'http://json-schema.org/draft-07/schema#',
+ title: 'Filestack Picker',
+ description: 'Filestack Picker Options',
+ type: 'object',
+ additionalProperties: false,
+ // required: ['container'],
+ properties: {
+ allowManualRetry: {
+ type: 'boolean',
+ },
+ accept: {
+ additionalProperties: false,
+ oneOf: [
+ {
+ type: 'string',
+ },
+ {
+ type: 'array',
+ minItems: 1,
+ items: [
+ {
+ type: 'string',
+ },
+ ],
+ },
+ ],
+ },
+ fromSources: {
+ type: 'array',
+ items: [
+ {
+ type: 'string',
+ additionalProperties: false,
+ enum: [
+ 'local_file_system',
+ 'url',
+ 'imagesearch',
+ 'facebook',
+ 'instagram',
+ 'googledrive',
+ 'dropbox',
+ 'webcam',
+ 'video',
+ 'audio',
+ 'box',
+ 'github',
+ 'gmail',
+ 'picasa',
+ 'onedrive',
+ 'onedriveforbusiness',
+ 'clouddrive',
+ 'googlephotos',
+ 'customsource',
+ ],
+ },
+ ],
+ },
+ container: {
+ format: 'HTMLContainer',
+ },
+ cleanupImageExif: {
+ oneOf: [
+ {
+ type: 'boolean',
+ },
+ {
+ type: 'object',
+ additionalProperties: false,
+ properties: {
+ keepOrientation: {
+ type: 'boolean',
+ },
+ },
+ },
+ ],
+ },
+ displayMode: {
+ type: 'string',
+ enum: ['inline', 'overlay', 'dropPane'],
+ },
+ concurrency: {
+ type: 'integer',
+ minimum: 1,
+ maximum: 20,
+ },
+ customSourceContainer: {
+ type: 'string',
+ },
+ customSourcePath: {
+ type: 'string',
+ },
+ customSourceName: {
+ type: 'string',
+ },
+ disableStorageKey: {
+ type: 'boolean',
+ },
+ disableTransformer: {
+ type: 'boolean',
+ },
+ disableThumbnails: {
+ type: 'boolean',
+ },
+ exposeOriginalFile: {
+ type: 'boolean',
+ },
+ globalDropZone: {
+ type: 'boolean',
+ },
+ hideModalWhenUploading: {
+ type: 'boolean',
+ },
+ imageDim: {
+ type: 'array',
+ minItems: 2,
+ maxItems: 2,
+ items: [
+ {
+ type: 'integer',
+ minimum: 1,
+ maximum: 1000000,
+ },
+ ],
+ },
+ imageMax: {
+ type: 'array',
+ minItems: 2,
+ maxItems: 2,
+ items: [
+ {
+ type: 'integer',
+ minimum: 1,
+ maximum: 1000000,
+ },
+ ],
+ },
+ imageMin: {
+ type: 'array',
+ minItems: 2,
+ maxItems: 2,
+ items: [
+ {
+ type: 'integer',
+ minimum: 1,
+ maximum: 1000000,
+ },
+ ],
+ },
+ imageMinMaxBlock: {
+ type: 'boolean',
+ default: false,
+ },
+ lang: {
+ type: 'string',
+ enum: ['ca', 'da', 'de', 'en', 'es', 'fr', 'he', 'it', 'ja', 'ko', 'nl', 'no', 'pl', 'pt', 'sv', 'ru', 'vi', 'zh', 'tr'],
+ },
+ minFiles: {
+ type: 'integer',
+ minimum: 1,
+ maximum: 1000000,
+ },
+ maxFiles: {
+ type: 'integer',
+ minimum: 1,
+ maximum: 1000000,
+ },
+ maxSize: {
+ type: 'integer',
+ minimum: 1,
+ maximum: 1000000,
+ },
+ modalSize: {
+ type: 'array',
+ minItems: 2,
+ maxItems: 2,
+ items: [
+ {
+ type: 'integer',
+ minimum: 1,
+ maximum: 1000000,
+ },
+ ],
+ },
+ rootId: {
+ type: 'string',
+ },
+ startUploadingWhenMaxFilesReached: {
+ type: 'boolean',
+ },
+ uploadInBackground: {
+ type: 'boolean',
+ },
+ videoResolution: {
+ type: 'string',
+ },
+ onCancel: {
+ format: 'callback',
+ },
+ onClose: {
+ format: 'callback',
+ },
+ onOpen: {
+ format: 'callback',
+ },
+ onFileSelected: {
+ format: 'callback',
+ },
+ onFileUploadStarted: {
+ format: 'callback',
+ },
+ onFileUploadFinished: {
+ format: 'callback',
+ },
+ onFileUploadFailed: {
+ format: 'callback',
+ },
+ onFileUploadProgress: {
+ format: 'callback',
+ },
+ onUploadStarted: {
+ format: 'callback',
+ },
+ onUploadDone: {
+ format: 'callback',
+ },
+ storeTo: {
+ additionalProperties: false,
+ type: 'object',
+ properties: {
+ filename: {
+ type: 'string',
+ },
+ location: {
+ $ref: 'locationsDef',
+ },
+ container: {
+ type: 'string',
+ },
+ path: {
+ type: 'string',
+ },
+ region: {
+ type: 'string',
+ },
+ access: {
+ type: 'string',
+ enum: ['public', 'private'],
+ },
+ workflows: {
+ $ref: 'workflowsDef',
+ },
+ },
+ },
+ viewType: {
+ type: 'string',
+ enum: ['grid', 'list'],
+ },
+ transformations: {
+ type: 'object',
+ additionalProperties: false,
+ properties: {
+ circle: {
+ type: 'boolean',
+ },
+ rotate: {
+ type: 'boolean',
+ },
+ force: {
+ type: 'boolean',
+ },
+ crop: {
+ oneOf: [
+ {
+ type: 'boolean',
+ },
+ {
+ type: 'object',
+ additionalProperties: false,
+ properties: {
+ force: {
+ type: 'boolean',
+ },
+ aspectRatio: {
+ type: 'number',
+ },
+ },
+ },
+ ],
+ },
+ },
+ },
+ customText: {
+ type: 'object',
+ patternProperties: {
+ '.*': { type: 'string' },
+ },
+ },
+ dropPane: {
+ type: 'object',
+ properties: {
+ cropFiles: {
+ type: 'boolean',
+ },
+ customText: {
+ type: 'string',
+ },
+ disableClick: {
+ type: 'boolean',
+ },
+ overlay: {
+ type: 'boolean',
+ },
+ showIcon: {
+ type: 'boolean',
+ },
+ showProgress: {
+ type: 'boolean',
+ },
+ onDragEnter: {
+ format: 'callback',
+ },
+ onProgress: {
+ format: 'callback',
+ },
+ onDragLeave: {
+ format: 'callback',
+ },
+ onDragOver: {
+ format: 'callback',
+ },
+ onDrop: {
+ format: 'callback',
+ },
+ onSuccess: {
+ format: 'callback',
+ },
+ onError: {
+ format: 'callback',
+ },
+ onClick: {
+ format: 'callback',
+ },
+ },
+ },
+ customAuthText: {
+ type: 'object',
+ patternProperties: {
+ '.*': {
+ additionalProperties: false,
+ type: 'object',
+ required: ['top', 'bottom'],
+ properties: {
+ top: {
+ type: 'string',
+ },
+ bottom: {
+ type: 'string',
+ },
+ },
+ },
+ },
+ },
+ uploadConfig: {
+ type: 'object',
+ additionalProperties: false,
+ properties: UploadParamsSchema.properties,// manual import upload definitions
+ },
+ },
+};
diff --git a/src/adapters/security.browser.ts b/src/schema/preview.schema.ts
similarity index 66%
rename from src/adapters/security.browser.ts
rename to src/schema/preview.schema.ts
index b7dffe2c..b0d09000 100644
--- a/src/adapters/security.browser.ts
+++ b/src/schema/preview.schema.ts
@@ -14,12 +14,18 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-
-export interface SecurityOptions { }
-
-/**
- * getSecurity is disabled for browsers.
- */
-export const getSecurity = () => {
- console.warn('This method is only availale in Node runtimes');
+export const PreviewParamsSchema = {
+ '$schema': 'http://json-schema.org/draft-07/schema#',
+ title: 'Filestack Preview',
+ description: 'Filestack Preview Options',
+ type: 'object',
+ additionalProperties: false,
+ properties: {
+ id: {
+ type: 'string',
+ },
+ css: {
+ type: 'string',
+ },
+ },
};
diff --git a/src/lib/api/upload/md5.ts b/src/schema/retrieve.schema.ts
similarity index 57%
rename from src/lib/api/upload/md5.ts
rename to src/schema/retrieve.schema.ts
index 93561af0..04857000 100644
--- a/src/lib/api/upload/md5.ts
+++ b/src/schema/retrieve.schema.ts
@@ -14,16 +14,27 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-
-import * as SparkMD5 from 'spark-md5';
-import * as abab from 'abab';
-
-/**
- * Calculates a MD5 checksum for passed buffer
- * @private
- * @param data Data to be hashed
- * @returns base64 encoded MD5 hash
- */
-export const calcMD5 = (data: any): string => {
- return abab.btoa(SparkMD5.ArrayBuffer.hash(data, true));
+export const RetrieveParamsSchema = {
+ '$schema': 'http://json-schema.org/draft-07/schema#',
+ title: 'Filestack Retrieve',
+ description: 'Filestack Retrieve Options',
+ type: 'object',
+ additionalProperties: false,
+ properties: {
+ metadata: {
+ type: 'boolean',
+ },
+ head: {
+ type: 'boolean',
+ },
+ dl: {
+ type: 'boolean',
+ },
+ cache: {
+ type: 'boolean',
+ },
+ extension: {
+ type: 'string',
+ },
+ },
};
diff --git a/src/lib/api/upload/md5.spec.ts b/src/schema/security.schema.ts
similarity index 51%
rename from src/lib/api/upload/md5.spec.ts
rename to src/schema/security.schema.ts
index 5c679d7e..aa1f12cd 100644
--- a/src/lib/api/upload/md5.spec.ts
+++ b/src/schema/security.schema.ts
@@ -14,13 +14,36 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-
-import * as assert from 'assert';
-import { calcMD5 } from './md5';
-
-describe('md5', () => {
-
- it('should calculate correct MD5 sum', () => {
- assert.ok(calcMD5(new Buffer('qwertyuiop[]1234567890')) === 'zx9GtzC/khrBelx6tW5v/g==');
- });
-});
+export const SecurityParamsSchema = {
+ '$schema': 'http://json-schema.org/draft-07/schema#',
+ title: 'Filestack Security',
+ description: 'Filestack Security Options',
+ type: 'object',
+ additionalProperties: false,
+ properties: {
+ expiry: {
+ type: 'number',
+ },
+ call: {
+ '$ref': 'securityCallDef',
+ },
+ handle: {
+ type: 'string',
+ },
+ url: {
+ type: 'string',
+ },
+ maxSize: {
+ type: 'number',
+ },
+ minSize: {
+ type: 'number',
+ },
+ path: {
+ type: 'string',
+ },
+ container: {
+ type: 'string',
+ },
+ },
+};
diff --git a/src/schema/store.schema.ts b/src/schema/store.schema.ts
new file mode 100644
index 00000000..ed17bab8
--- /dev/null
+++ b/src/schema/store.schema.ts
@@ -0,0 +1,74 @@
+/*
+ * Copyright (c) 2018 by Filestack.
+ * Some rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+export const StoreParamsSchema = {
+ '$schema': 'http://json-schema.org/draft-07/schema#',
+ title: 'Filestack Store',
+ description: 'Filestack Store Options',
+ type: 'object',
+ additionalProperties: false,
+ properties: {
+ filename: {
+ oneOf: [{
+ type: 'string',
+ }, {
+ format: 'callback',
+ }],
+ },
+ location: {
+ '$ref': 'locationsDef',
+ },
+ path: {
+ type: 'string',
+ },
+ container: {
+ type: 'string',
+ },
+ region: {
+ '$ref': 'regionsDef',
+ },
+ access: {
+ type: 'string',
+ enum: ['public', 'private'],
+ default: 'private',
+ },
+ base64decode: {
+ type: 'boolean',
+ },
+ workflows: {
+ '$ref': 'workflowsDef',
+ },
+ sanitizer: {
+ oneOf: [{
+ type: 'boolean',
+ }, {
+ type: 'object',
+ additionalProperties: false,
+ properties: {
+ exclude: {
+ type: 'array',
+ items: [{
+ type: 'string',
+ }],
+ },
+ replacement: {
+ type: 'string',
+ },
+ },
+ }],
+ },
+ },
+};
diff --git a/src/schema/transforms.schema.spec.ts b/src/schema/transforms.schema.spec.ts
index 95eaafb3..3cbde55c 100644
--- a/src/schema/transforms.schema.spec.ts
+++ b/src/schema/transforms.schema.spec.ts
@@ -343,3 +343,327 @@ describe('Transforms Schema', () => {
});
});
});
+
+// import * as assert from 'assert';
+// import { getValidator, TransformSchema } from './';
+
+// describe('Transforms Schema', () => {
+
+// const validate = getValidator(TransformSchema);
+
+// const assertFail = (val) => assert.ok(!val);
+
+// it('should load json schema', () => {
+// // console.log(schema);
+// });
+
+// describe('Watermark', () => {
+// it('should validate correct params', () => {
+// assert.ok(validate({
+// watermark: {
+// file: 'testfilehandle',
+// size: 300,
+// position: 'top',
+// },
+// }));
+// });
+
+// it('should validate correct params (position array)', () => {
+// assert.ok(validate({
+// watermark: {
+// file: 'testfilehandle',
+// size: 300,
+// position: ['top', 'left'],
+// },
+// }));
+// });
+
+// it('should fail on wrong position params [top, bottom]', () => {
+// assertFail(validate({
+// watermark: {
+// file: 'testfilehandle',
+// size: 300,
+// position: ['top', 'bottom'],
+// },
+// }));
+// });
+// });
+
+// describe('Partial Blur', () => {
+// it('should validate correct params', () => {
+// assert.ok(validate({
+// partial_blur: {
+// objects: [
+// [1, 1, 2, 2],
+// [1, 1, 32, 15],
+// ],
+// amount: 18.2,
+// blur: 12,
+// type: 'rect',
+// },
+// }));
+// });
+
+// it('should fail on wrong params (amount, blur, type)', () => {
+// assertFail(validate({
+// partial_blur: {
+// objects: [
+// [1, 1, 2, 2],
+// [1, 1, 32, 15],
+// ],
+// amount: -10,
+// blur: 300,
+// type: 'wrong_type',
+// },
+// }));
+// });
+
+// it('should fail on wrong params (objects)', () => {
+// assertFail(validate({
+// partial_blur: {
+// objects: [
+// [1, 1, 2],
+// [1, 1, 32, 15, 32],
+// ],
+// amount: 10,
+// blur: 20,
+// },
+// }));
+// });
+// });
+
+// describe('Partial Pixelate', () => {
+// it('should validate correct params', () => {
+// assert.ok(validate({
+// partial_pixelate: {
+// objects: [
+// [1, 1, 2, 2],
+// [1, 1, 32, 15],
+// ],
+// amount: 100,
+// blur: 12.2,
+// type: 'oval',
+// },
+// }));
+// });
+
+// it('should fail on wrong params (amount, blur, type)', () => {
+// assertFail(validate({
+// partial_pixelate: {
+// objects: [
+// [1, 1, 2, 2],
+// [1, 1, 32, 15],
+// ],
+// amount: -10,
+// blur: 300,
+// type: 'wrong_type',
+// },
+// }));
+// });
+
+// it('should fail on wrong params (objects)', () => {
+// assertFail(validate({
+// partial_pixelate: {
+// objects: [
+// [1, 1, 2],
+// [1, 1, 32, 15, 32],
+// ],
+// amount: 10,
+// blur: 20,
+// },
+// }));
+// });
+// });
+
+// describe('Crop', () => {
+// it('should validate correct params', () => {
+// assert.ok(validate({
+// crop: {
+// dim: [1, 1, 2, 2],
+// },
+// }));
+// });
+
+// it('should fail on empty dim params', () => {
+// assertFail(validate({
+// crop: {
+// dim: [],
+// },
+// }));
+// });
+
+// it('should fail on wrong params (minimum value for 2 first items)', () => {
+// assertFail(validate({
+// crop: {
+// dim: [2, 1, 0, 2],
+// },
+// }));
+// });
+
+// it('should fail on wrong params (5 items in array)', () => {
+// assertFail(validate({
+// crop: {
+// dim: [1, 1, 2, 2, 4],
+// },
+// }));
+// });
+// });
+
+// describe('Resize', () => {
+// it('should validate correct params', () => {
+// assert.ok(validate({
+// resize: {
+// width: 10,
+// height: 20,
+// fit: 'crop',
+// align: ['top', 'left'],
+// },
+// }));
+// });
+
+// it('should validate correct when only one width or height is provided', () => {
+// assert.ok(validate({
+// resize: {
+// width: 10,
+// fit: 'crop',
+// align: 'left',
+// },
+// }));
+
+// assert.ok(validate({
+// resize: {
+// height: 10,
+// fit: 'crop',
+// align: 'left',
+// },
+// }));
+// });
+
+// it('should fail on wrong params (missing width and height)', () => {
+// assertFail(validate({
+// resize: {
+// fit: 'crop',
+// align: 'left',
+// },
+// }));
+// });
+// });
+
+// describe('Resize', () => {
+// it('should validate correct params', () => {
+// assert.ok(validate({
+// rotate: {
+// deg: 'exif',
+// exif: false,
+// background: 'fff',
+// },
+// }));
+// });
+
+// it('should validate correct params', () => {
+// assert.ok(validate({
+// rotate: {
+// deg: 200,
+// exif: true,
+// background: 'ffffff',
+// },
+// }));
+// });
+
+// it('should fail on wrong params (wrong exif rotation)', () => {
+// assertFail(validate({
+// rotate: {
+// deg: 123,
+// exif: 'true',
+// background: 'ffffff',
+// },
+// }));
+// });
+// });
+
+// describe('Pdfinfo', () => {
+// it('should validate correct params with bool value', () => {
+// assert.ok(validate({
+// pdfinfo: true,
+// }));
+// });
+
+// it('should validate correct params with color info', () => {
+// assert.ok(validate({
+// pdfinfo: {
+// colorinfo: true,
+// },
+// }));
+// });
+// });
+
+// describe('Pdfconvert', () => {
+// describe('Pages', () => {
+// [[1,2], ['1-', 3], ['-2']].forEach((val) => {
+// it(`should validate on correct page "${val}"`, () => {
+// assert.ok(validate({
+// pdfconvert: {
+// pages: val,
+// },
+// }));
+// });
+// });
+
+// it('should return error on fail page "1a"', () => {
+// assertFail(validate({
+// pdfconvert: {
+// pages: '1a',
+// },
+// }));
+// });
+
+// });
+
+// describe('Page orientation', () => {
+// it('should pass on correct orientation "landscape"', () => {
+// assert.ok(validate({
+// pdfconvert: {
+// pageorientation: 'landscape',
+// },
+// }));
+// });
+
+// it('should pass on correct orientation "portrait"', () => {
+// assert.ok(validate({
+// pdfconvert: {
+// pageorientation: 'portrait',
+// },
+// }));
+// });
+
+// it('should fail on wrong orientation "landscape1"', () => {
+// assertFail(validate({
+// pdfconvert: {
+// pageorientation: 'landscape1',
+// },
+// }));
+// });
+// });
+
+// describe('Page format', () => {
+// ['a2', 'a3', 'a4', 'a5', 'b4', 'b5', 'letter', 'legal', 'tabloid'].forEach((val) => {
+// it(`should when correct page format is provided ${val}`, () => {
+// assert.ok(validate({
+// pdfconvert: {
+// pages: [1,2],
+// pageformat: val,
+// },
+// }));
+// });
+// });
+
+// it('should fail on wrong page format ie a22', () => {
+// assertFail(validate({
+// pdfconvert: {
+// pageformat: 'a22',
+// },
+// }));
+// });
+// });
+// });
+// });
diff --git a/src/schema/transforms.schema.ts b/src/schema/transforms.schema.ts
index d98fd330..ed384ab4 100644
--- a/src/schema/transforms.schema.ts
+++ b/src/schema/transforms.schema.ts
@@ -20,141 +20,6 @@ export const TransformSchema = {
description: 'Filestack transformations parameters',
type: 'object',
additionalProperties: false,
- definitions: {
- securityCallDef: {
- id: '/securityCallDef',
- type: 'string',
- enum: ['pick', 'read', 'stat', 'write', 'writeUrl', 'store', 'convert', 'remove', 'exif', 'runWorkflow'],
- },
- regionsDef: {
- id: '/regionsDef',
- type: 'string',
- enum: ['us-east-1', 'us-west-1', 'us-west-2', 'eu-west-1', 'eu-central-1', 'ap-northeast-1', 'ap-northeast-2', 'ap-southeast-1', 'ap-southeast-2', 'sa-east-1'],
- },
- locationsDef: {
- id: '/locationsDef',
- type: 'string',
- enum: ['s3', 'S3', 'rackspace', 'gcs', 'azure', 'dropbox'],
- },
- colorDef: {
- id: 'colorDef',
- oneOf: [{
- type: 'string',
- pattern: '^([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$', // without # at the begining
- }, {
- type: 'string',
- enum: ['aliceblue', 'antiquewhite', 'aqua', 'aquamarine', 'azure', 'beige', 'bisque', 'black', 'blanchedalmond', 'blue', 'blueviolet', 'brown', 'burlywood', 'cadetblue', 'chartreuse', 'chocolate', 'coral', 'cornflowerblue', 'cornsilk', 'crimson', 'cyan', 'darkblue', 'darkcyan', 'darkgoldenrod', 'darkgray', 'darkgreen', 'darkgrey', 'darkkhaki', 'darkmagenta', 'darkolivegreen', 'darkorange', 'darkorchid', 'darkred', 'darksalmon', 'darkseagreen', 'darkslateblue', 'darkslategray', 'darkslategrey', 'darkturquoise', 'darkviolet', 'deeppink', 'deepskyblue', 'dimgray', 'dimgrey', 'dodgerblue', 'firebrick', 'floralwhite', 'forestgreen', 'fractal', 'fuchsia', 'gainsboro', 'ghostwhite', 'gold', 'goldenrod', 'gray0', 'gray1', 'gray2', 'gray3', 'gray4', 'gray5', 'gray6', 'gray7', 'gray8', 'gray9', 'gray10', 'gray11', 'gray12', 'gray13', 'gray14', 'gray15', 'gray16', 'gray17', 'gray18', 'gray19', 'gray20', 'gray21', 'gray22', 'gray23', 'gray24', 'gray25', 'gray26', 'gray27', 'gray28', 'gray29', 'gray30', 'gray31', 'gray32', 'gray33', 'gray34', 'gray35', 'gray36', 'gray37', 'gray38', 'gray39', 'gray40', 'gray41', 'gray42', 'gray43', 'gray44', 'gray45', 'gray46', 'gray47', 'gray48', 'gray49', 'gray50', 'gray51', 'gray52', 'gray53', 'gray54', 'gray55', 'gray56', 'gray57', 'gray58', 'gray59', 'gray60', 'gray61', 'gray62', 'gray63', 'gray64', 'gray65', 'gray66', 'gray67', 'gray68', 'gray69', 'gray70', 'gray71', 'gray72', 'gray73', 'gray74', 'gray75', 'gray76', 'gray77', 'gray78', 'gray79', 'gray80', 'gray81', 'gray82', 'gray83', 'gray84', 'gray85', 'gray86', 'gray87', 'gray88', 'gray89', 'gray90', 'gray91', 'gray92', 'gray93', 'gray94', 'gray95', 'gray96', 'gray97', 'gray98', 'gray99', 'gray100', 'gray', 'green', 'greenyellow', 'grey', 'honeydew', 'hotpink', 'indianred', 'indigo', 'ivory', 'khaki', 'lavender', 'lavenderblush', 'lawngreen', 'lemonchiffon', 'lightblue', 'lightcoral', 'lightcyan', 'lightgoldenrodyellow', 'lightgray', 'lightgreen', 'lightgrey', 'lightpink', 'lightsalmon', 'lightseagreen', 'lightskyblue', 'lightslategray', 'lightslategrey', 'lightsteelblue', 'lightyellow', 'lime', 'limegreen', 'linen', 'magenta', 'maroon', 'mediumaquamarine', 'mediumblue', 'mediumorchid', 'mediumpurple', 'mediumseagreen', 'mediumslateblue', 'mediumspringgreen', 'mediumturquoise', 'mediumvioletred', 'midnightblue', 'mintcream', 'mistyrose', 'moccasin', 'navajowhite', 'navy', 'none', 'oldlace', 'olive', 'olivedrab', 'orange', 'orangered', 'orchid', 'palegoldenrod', 'palegreen', 'paleturquoise', 'palevioletred', 'papayawhip', 'peachpuff', 'peru', 'pink', 'plum', 'powderblue', 'purple', 'red', 'rosybrown', 'royalblue', 'saddlebrown', 'salmon', 'sandybrown', 'seagreen', 'seashell', 'sienna', 'silver', 'skyblue', 'slateblue', 'slategray', 'slategrey', 'snow', 'springgreen', 'steelblue', 'tan', 'teal', 'thistle', 'tomato', 'turquoise', 'violet', 'wheat', 'white', 'whitesmoke', 'yellow', 'yellowgreen',],
- }],
- },
- pageFormatDef: {
- id: '/pageFormatDef',
- type: 'string',
- enum: ['a2', 'a3', 'a4', 'a5', 'b4', 'b5', 'letter', 'legal', 'tabloid'],
- },
- pageRangeDef: {
- id: '/pageRangeDef',
- type: 'array',
- uniqueItems: true,
- items: [{
- oneOf: [{
- type: 'integer',
- minimum: 1,
- }, {
- type: 'string',
- pattern: '^(\\d+(?:-\\d+)?)$|^(-\\d+)$|^(\\d+-)$',
- errorMessage: 'Param should be provided in one of the following formats: "1,2,3,5", "1-3", "1-", "-2" ',
- }],
- }],
- },
- facesDef: {
- id: '/facesDef',
- oneOf: [{
- type: 'string',
- enum: ['all'],
- }, {
- type: 'integer',
- minimum: 1,
- maximum: 1000,
- }, {
- type: 'array',
- uniqueItems: true,
- items: [{
- type: 'integer',
- minimum: 1,
- maximum: 1000,
- }],
- }],
- },
- objectsDef: {
- id: '/objectsDef',
- type: 'array',
- minItems: 1,
- maxItems: 50,
- items: [{
- type: 'array',
- additionalItems: false,
- minItems: 4,
- items: [{
- type: 'integer',
- minimum: 0,
- maximum: 10000,
- }, {
- type: 'integer',
- minimum: 0,
- maximum: 10000,
- }, {
- type: 'integer',
- minimum: 1,
- maximum: 10000,
- }, {
- type: 'integer',
- minimum: 1,
- maximum: 10000,
- }],
- }],
- },
- positionDef: {
- id: '/positionDef',
- default: ['middle', 'center'],
- oneOf: [
- {
- type: 'string',
- enum: [
- 'top',
- 'middle',
- 'bottom',
- 'left',
- 'center',
- 'right',
- ],
- },
- {
- type: 'array',
- uniqueItems: true,
- additionalItems: false,
- minItems: 2,
- default: ['middle', 'center'],
- items: [
- {
- type: 'string',
- enum: [
- 'top',
- 'middle',
- 'bottom',
- ],
- }, {
- type: 'string',
- enum: [
- 'left',
- 'center',
- 'right',
- ],
- },
- ],
- },
- ],
- },
- },
properties: {
flip: {
type: 'boolean',
@@ -798,7 +663,7 @@ export const TransformSchema = {
additionalProperties: false,
}],
},
- asci: {
+ ascii: {
oneOf: [{
type: 'boolean',
}, {
@@ -835,7 +700,6 @@ export const TransformSchema = {
properties: {
files: {
type: 'array',
- additionalItems: false,
minItems: 1,
items: [{
type: 'string',
@@ -1202,21 +1066,7 @@ export const TransformSchema = {
type: 'boolean',
},
workflows: {
- type: 'array',
- additionalItems: false,
- minItems: 1,
- maxItems: 20,
- items: [{
- type: 'string',
- }, {
- type: 'object',
- additionalProperties: false,
- properties: {
- id: {
- type: 'string',
- },
- },
- }],
+ '$ref': 'workflowsDef',
},
},
}],
diff --git a/src/schema/upload.schema.ts b/src/schema/upload.schema.ts
new file mode 100644
index 00000000..2a35e241
--- /dev/null
+++ b/src/schema/upload.schema.ts
@@ -0,0 +1,71 @@
+/*
+ * Copyright (c) 2018 by Filestack.
+ * Some rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+export const UploadParamsSchema = {
+ '$schema': 'http://json-schema.org/draft-07/schema#',
+ title: 'Filestack Upload',
+ description: 'Filestack Upload Options',
+ type: 'object',
+ additionalProperties: false,
+ properties: {
+ partSize: {
+ type: 'integer',
+ minimum: 5 * 1024 * 1024,
+ },
+ concurrency: {
+ type: 'integer',
+ minimum: 1,
+ maximum: 20,
+ },
+ progressInterval: {
+ type: 'integer',
+ minimum: 1,
+ },
+ retry: {
+ type: 'integer',
+ minimum: 0,
+ maximum: 20,
+ },
+ retryFactor: {
+ type: 'integer',
+ },
+ retryMaxTime: {
+ type: 'integer',
+ },
+ timeout: {
+ type: 'integer',
+ minimum: 1,
+ maximum: 60 * 60 * 1000,
+ },
+ intelligent: {
+ oneOf: [{
+ type: 'boolean',
+ }, {
+ type: 'string',
+ enum: ['fallback'],
+ }],
+ },
+ intelligentChunkSize: {
+ type: 'integer',
+ },
+ onProgress: {
+ format: 'callback',
+ },
+ onRetry: {
+ format: 'callback',
+ },
+ },
+};
diff --git a/src/schema/validator.ts b/src/schema/validator.ts
index 8c2a5395..b3531099 100644
--- a/src/schema/validator.ts
+++ b/src/schema/validator.ts
@@ -15,15 +15,20 @@
* limitations under the License.
*/
import { Validator } from 'jsonschema';
+import { DefinitionsSchema } from './definitions.schema';
+
+const v = new Validator();
+
+Validator.prototype.customFormats.callback = (input) => typeof input === 'function';
+// check if element have HTML in to string method ie HTMLDivElement
+Validator.prototype.customFormats.HTMLContainer = (input) => typeof input === 'string' || (input.toString && input.toString().indexOf('HTML') > -1);
/**
* Returns validator instance
*/
export const getValidator = (schema) => {
- const v = new Validator();
- // v.addSchema(schema);
return (params) => {
+ v.addSchema(DefinitionsSchema);
return v.validate(params, schema);
};
- // return validator().compile(schema);
};
diff --git a/test/data/emptyfile.txt b/test/data/emptyfile.txt
deleted file mode 100644
index e69de29b..00000000
diff --git a/test/data/fish.gif b/test/data/fish.gif
deleted file mode 100644
index 733ca0e9..00000000
Binary files a/test/data/fish.gif and /dev/null differ
diff --git a/test/data/testfile.txt b/test/data/testfile.txt
deleted file mode 100644
index 31e0fce5..00000000
--- a/test/data/testfile.txt
+++ /dev/null
@@ -1 +0,0 @@
-helloworld
diff --git a/test/mocha.opts b/test/mocha.opts
deleted file mode 100644
index db26b424..00000000
--- a/test/mocha.opts
+++ /dev/null
@@ -1,5 +0,0 @@
---require ./test/setup_node.js
--r jsdom-global/register
---full-trace
---timeout 30000
-build/main/**/**/*.spec.js
diff --git a/test/mocks/cloudApi/GET b/test/mocks/cloudApi/GET
deleted file mode 100644
index f14ba55e..00000000
--- a/test/mocks/cloudApi/GET
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "requestUrl": "/cloud/prefetch?apikey=fakekey",
- "contentType": "application/json",
- "statusCode": 200,
- "data": {
- "intelligent_ingestion": false,
- "blocked": false,
- "blacklisted": false,
- "whitelabel": true,
- "customsource": true,
- "customsource_name": "devportal-customers-assets-cs"
- },
- "isBase64": false
-}
\ No newline at end of file
diff --git a/test/mocks/cloudApi/POST b/test/mocks/cloudApi/POST
deleted file mode 100644
index 3a8363d4..00000000
--- a/test/mocks/cloudApi/POST
+++ /dev/null
@@ -1,10 +0,0 @@
-{
- "requestUrl": "/cloud/folder/list",
- "contentType": "application/json",
- "statusCode": 200,
- "data": {
- "facebook": {},
- "token": "testtoken"
- },
- "isBase64": false
-}
\ No newline at end of file
diff --git a/test/mocks/fileApi/DELETE_secured b/test/mocks/fileApi/DELETE_secured
deleted file mode 100644
index 2d54a254..00000000
--- a/test/mocks/fileApi/DELETE_secured
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "requestUrl": "/api/file/KGLjo6kgTCvvblCZyjhm?key=AQd22RYRWQD2ykJyvg7Pbz&policy=eyJleHBpcnkiOjE1MDgxNDE1MDR9&signature=2908b220968450ebdc718c90fcb894524dc1f2821d0304638507cb604367269f",
- "contentType": "text/html; charset=utf-8",
- "method": "DELETE",
- "statusCode": 200,
- "data": "success",
- "isBase64": false
-}
\ No newline at end of file
diff --git a/test/mocks/fileApi/GET b/test/mocks/fileApi/GET
deleted file mode 100644
index 562d2570..00000000
--- a/test/mocks/fileApi/GET
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "requestUrl": "/api/file/iktJgGTURKC0HPGXegar/metadata",
- "contentType": "application/json",
- "method": "GET",
- "statusCode": 200,
- "data": {
- "mimetype": "image/jpeg",
- "uploaded": 1504120869761.631,
- "size": 120305,
- "writeable": true,
- "filename": "Zanzibar_Red_Colobus_Monkey.jpg"
- },
- "isBase64": false
-}
\ No newline at end of file
diff --git a/test/mocks/fileApi/GET_secured b/test/mocks/fileApi/GET_secured
deleted file mode 100644
index de1c30de..00000000
--- a/test/mocks/fileApi/GET_secured
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "requestUrl": "/api/file/NRbYPKrlQYSsdBubnbbF/metadata?policy=eyJleHBpcnkiOjE1MDgxNDE1MDR9&signature=2908b220968450ebdc718c90fcb894524dc1f2821d0304638507cb604367269f",
- "contentType": "application/json",
- "method": "GET",
- "statusCode": 200,
- "data": {
- "mimetype": "image/jpeg",
- "uploaded": 1504120815691.0068,
- "size": 120305,
- "writeable": true,
- "filename": "Zanzibar_Red_Colobus_Monkey.jpg"
- },
- "isBase64": false
-}
\ No newline at end of file
diff --git a/test/mocks/fileApi/HEAD b/test/mocks/fileApi/HEAD
deleted file mode 100644
index 8ff391ac..00000000
--- a/test/mocks/fileApi/HEAD
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "requestUrl": "/api/file/iktJgGTURKC0HPGXegar",
- "contentType": "application/json",
- "method": "HEAD",
- "statusCode": 201,
- "isBase64": false
-}
\ No newline at end of file
diff --git a/test/mocks/fileApi/HEAD_secured b/test/mocks/fileApi/HEAD_secured
deleted file mode 100644
index a718f7f6..00000000
--- a/test/mocks/fileApi/HEAD_secured
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "requestUrl": "/api/file/fakesecurelink?key=fakesecurkey&policy=fakepolicy&signature=fakesignature",
- "contentType": "application/json",
- "method": "HEAD",
- "statusCode": 201,
- "isBase64": false
-}
\ No newline at end of file
diff --git a/test/mocks/intelligentUploadApi/POST_commit b/test/mocks/intelligentUploadApi/POST_commit
deleted file mode 100644
index 71fb719b..00000000
--- a/test/mocks/intelligentUploadApi/POST_commit
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "requestUrl": "/multipart/commit",
- "contentType": "application/json",
- "method": "POST",
- "statusCode": 200,
- "data": {},
- "isBase64": false
-}
diff --git a/test/mocks/intelligentUploadApi/POST_complete b/test/mocks/intelligentUploadApi/POST_complete
deleted file mode 100644
index a20b9213..00000000
--- a/test/mocks/intelligentUploadApi/POST_complete
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "requestUrl": "/multipart/complete",
- "contentType": "application/json",
- "method": "POST",
- "statusCode": 200,
- "data": {
- "handle": "7xSJALUhSlCDCNujt5Ku",
- "url": "https://agnostic-cdn.filestackapi.com/7xSJALUhSlCDCNujt5Ku",
- "filename": "fish.gif",
- "size": 12,
- "mimetype": "image/gif",
- "status": "InTransit"
- },
- "isBase64": false
-}
diff --git a/test/mocks/intelligentUploadApi/POST_start b/test/mocks/intelligentUploadApi/POST_start
deleted file mode 100644
index 52686d56..00000000
--- a/test/mocks/intelligentUploadApi/POST_start
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "requestUrl": "/multipart/start",
- "contentType": "application/json",
- "method": "POST",
- "statusCode": 200,
- "data": {
- "uri": "/filestack-uploads-production-us-east-1/AJrB9kEilS1SQeHIDf3wtz/ZUt6FlmFS2ag5oWDMXWx_./test/data/testfile.txt",
- "region": "us-east-1",
- "upload_id": "1YV1FYlZpNzDlOp21dl2P_d.JNGK3HyNhl_VrQbO987yOvlaFZ8HZrNTiKHyP_vDB3Tsb.Xd5mSW4FyLjYjPsnsp1kecKPW5j5JXa7OO8J0x07EbwE34TPcR2MuQ0TcT",
- "location_url": "upload-us-east-1.filestackapi.com",
- "upload_type": "intelligent_ingestion"
- },
- "isBase64": false
-}
\ No newline at end of file
diff --git a/test/mocks/intelligentUploadApi/POST_upload b/test/mocks/intelligentUploadApi/POST_upload
deleted file mode 100644
index 270d4a8f..00000000
--- a/test/mocks/intelligentUploadApi/POST_upload
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "requestUrl": "/multipart/upload",
- "contentType": "application/json",
- "method": "POST",
- "statusCode": 200,
- "data": {
- "url": "https://s3.amazonaws.com/filestack-uploads-production-us-east-1/ii/AJrB9kEilS1SQeHIDf3wtz/1YV1FYlZpNzDlOp21dl2P_d.JNGK3HyNhl_VrQbO987yOvlaFZ8HZrNTiKHyP_vDB3Tsb.Xd5mSW4FyLjYjPsnsp1kecKPW5j5JXa7OO8J0x07EbwE34TPcR2MuQ0TcT/1/0?",
- "headers": {
- "Authorization": "AWS4-HMAC-SHA256 Credential=AKIAIZPVO2IP3EGGABFA/20170908/us-east-1/s3/aws4_request, SignedHeaders=content-length;content-md5;host;x-amz-date, Signature=8a1405069f86d8deff5b054adb04b327228bafb8c2750aed87e69f0bc72031ea",
- "Content-MD5": "9lIZM9md0mPSWbXW/Ouv1w==",
- "x-amz-content-sha256": "UNSIGNED-PAYLOAD",
- "x-amz-date": "20170908T042929Z"
- },
- "location_url": "upload-us-east-1.filestackapi.com"
- },
- "isBase64": false
-}
\ No newline at end of file
diff --git a/test/mocks/intelligentUploadApi/PUT_fakeS3 b/test/mocks/intelligentUploadApi/PUT_fakeS3
deleted file mode 100644
index f4f8b388..00000000
--- a/test/mocks/intelligentUploadApi/PUT_fakeS3
+++ /dev/null
@@ -1,11 +0,0 @@
-{
- "requestUrl": "/fakeS3",
- "method": "PUT",
- "statusCode": 200,
- "data": {},
- "headers": {
- "Access-Control-Expose-Headers": "ETag",
- "ETag": "c493aa4955f0591643c4115e8880ecb1"
- },
- "isBase64": false
-}
diff --git a/test/mocks/storeApi/GET b/test/mocks/storeApi/GET
deleted file mode 100644
index 6000c602..00000000
--- a/test/mocks/storeApi/GET
+++ /dev/null
@@ -1,13 +0,0 @@
-{
- "requestUrl": "/",
- "contentType": "application/json",
- "method": "GET",
- "statusCode": 200,
- "data": {
- "url": "https://agnostic-cdn.filestackapi.com/bEtYfoSiQJ6dfJWE2Lia",
- "size": 120305,
- "type": "image/jpeg",
- "filename": "Zanzibar_Red_Colobus_Monkey.jpg"
- },
- "isBase64": false
-}
diff --git a/test/mocks/storeApi/GET_secured b/test/mocks/storeApi/GET_secured
deleted file mode 100644
index 6000c602..00000000
--- a/test/mocks/storeApi/GET_secured
+++ /dev/null
@@ -1,13 +0,0 @@
-{
- "requestUrl": "/",
- "contentType": "application/json",
- "method": "GET",
- "statusCode": 200,
- "data": {
- "url": "https://agnostic-cdn.filestackapi.com/bEtYfoSiQJ6dfJWE2Lia",
- "size": 120305,
- "type": "image/jpeg",
- "filename": "Zanzibar_Red_Colobus_Monkey.jpg"
- },
- "isBase64": false
-}
diff --git a/test/mocks/uploadApi/POST_complete b/test/mocks/uploadApi/POST_complete
deleted file mode 100644
index d74d2e81..00000000
--- a/test/mocks/uploadApi/POST_complete
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "requestUrl": "/multipart/complete",
- "contentType": "application/json",
- "method": "POST",
- "statusCode": 200,
- "data": {
- "handle": "7xSJALUhSlCDCNujt5Ku",
- "url": "https://agnostic-cdn.filestackapi.com/7xSJALUhSlCDCNujt5Ku",
- "filename": "dutton.gif",
- "size": 35,
- "mimetype": "image/gif",
- "status": "Stored"
- },
- "isBase64": false
-}
\ No newline at end of file
diff --git a/test/mocks/uploadApi/POST_start b/test/mocks/uploadApi/POST_start
deleted file mode 100644
index 174293fa..00000000
--- a/test/mocks/uploadApi/POST_start
+++ /dev/null
@@ -1,13 +0,0 @@
-{
- "requestUrl": "/multipart/start",
- "contentType": "application/json",
- "method": "POST",
- "statusCode": 200,
- "data": {
- "uri": "/filestack-uploads-staging-us-east-1/aouha0SDRRWuGVbI17U2_dutton.gif",
- "region": "us-east-1",
- "upload_id": "ZKXAEc0mwNgfOetqQO7OXDqdlx79Tl2xduGbE8ERqLKCdjcJPrlU263PuwG_BWAIYJXM_e3chRDAnuTO7CdLKdOQ.8.ZfsK4wPysjxdNvaOA0PaYah_ty5VD70zrvxp3",
- "location_url": "upload-stage-eu-west-1.filestackapi.com"
- },
- "isBase64": false
-}
\ No newline at end of file
diff --git a/test/mocks/uploadApi/POST_upload b/test/mocks/uploadApi/POST_upload
deleted file mode 100644
index 416eb158..00000000
--- a/test/mocks/uploadApi/POST_upload
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "requestUrl": "/multipart/upload",
- "contentType": "application/json",
- "method": "POST",
- "statusCode": 200,
- "data": {
- "url": "https://s3.amazonaws.com/filestack-uploads-staging-us-east-1/aouha0SDRRWuGVbI17U2_dutton.gif?partNumber=1&uploadId=ZKXAEc0mwNgfOetqQO7OXDqdlx79Tl2xduGbE8ERqLKCdjcJPrlU263PuwG_BWAIYJXM_e3chRDAnuTO7CdLKdOQ.8.ZfsK4wPysjxdNvaOA0PaYah_ty5VD70zrvxp3",
- "headers": {
- "Authorization": "AWS4-HMAC-SHA256 Credential=AKIAISIPCDAQIU54OJCQ/20170904/us-east-1/s3/aws4_request, SignedHeaders=content-length;content-md5;host;x-amz-date, Signature=201e71f7dcdf91302ec5715c8f0f2f5acca2664fac58a3f9043a296b7209f90b",
- "Content-MD5": "xJOqSVXwWRZDxBFeiIDssQ==",
- "x-amz-content-sha256": "UNSIGNED-PAYLOAD",
- "x-amz-date": "20170904T190520Z"
- },
- "location_url": "upload-stage-eu-west-1.filestackapi.com"
- },
- "isBase64": false
-}
\ No newline at end of file
diff --git a/test/mocks/uploadApi/PUT_fakeS3 b/test/mocks/uploadApi/PUT_fakeS3
deleted file mode 100644
index f4f8b388..00000000
--- a/test/mocks/uploadApi/PUT_fakeS3
+++ /dev/null
@@ -1,11 +0,0 @@
-{
- "requestUrl": "/fakeS3",
- "method": "PUT",
- "statusCode": 200,
- "data": {},
- "headers": {
- "Access-Control-Expose-Headers": "ETag",
- "ETag": "c493aa4955f0591643c4115e8880ecb1"
- },
- "isBase64": false
-}
diff --git a/test/prism.js b/test/prism.js
deleted file mode 100644
index f614342c..00000000
--- a/test/prism.js
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * Copyright (c) 2017 by Filestack.
- * Some rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-var connect = require('connect');
-var prism = require('connect-prism');
-var http = require('http');
-var cors = require('cors');
-
-const mode = process.argv[2] === '--record' ? 'mockrecord' : 'mock';
-const mocksPath = './test/mocks';
-const generateName = function(req) {
- if (req.url.indexOf('policy=') !== -1) {
- return req.method + '_' + 'secured';
- }
- return req.method;
-};
-
-prism.create({
- name: 'cloudApi',
- mode,
- mocksPath,
- context: '/cloud',
- https: true,
- port: 443,
- mockFilenameGenerator: function(config, req) {
- return generateName(req);
- },
- host: 'cloud-rc.filestackapi.com',
- changeOrigin: true,
-});
-
-prism.create({
- name: 'fileApi',
- mode,
- mocksPath,
- context: '/api/file',
- mockFilenameGenerator: function(config, req) {
- return generateName(req);
- },
- host: 'www.filestackapi.com',
- changeOrigin: true,
-});
-
-prism.create({
- name: 'storeApi',
- mode,
- mocksPath,
- context: '/cdn',
- mockFilenameGenerator: function(config, req) {
- return generateName(req);
- },
- host: 'cdn.filestackcontent.com',
- changeOrigin: true,
-});
-
-prism.create({
- name: 'uploadApi',
- mode,
- mocksPath,
- context: '/upload',
- rewrite: {
- '^/upload': '',
- },
- mockFilenameGenerator: function(config, req) {
- const step = req.originalUrl.split('/').pop();
- return req.method + '_' + step;
- },
- host: 'upload.filestackapi.com',
-});
-
-prism.create({
- name: 'intelligentUploadApi',
- mode,
- mocksPath,
- https: true,
- port: 443,
- context: '/intelligentUpload',
- rewrite: {
- '^/intelligentUpload': '',
- },
- mockFilenameGenerator: function(config, req) {
- const step = req.originalUrl.split('/').pop();
- return req.method + '_' + step;
- },
- host: 'upload.filestackapi.com',
-});
-
-var app = connect().use(cors()).use(prism.middleware);
-http.createServer(app).listen(3000);
diff --git a/test/setup.js b/test/setup.js
deleted file mode 100644
index c68b0451..00000000
--- a/test/setup.js
+++ /dev/null
@@ -1,32 +0,0 @@
-const testEnv = process.env.TEST_ENV || 'unit';
-const urls = require('./urls.json')[testEnv];
-var ENV = window.ENV = {
- session: {
- apikey: process.env.TEST_APIKEY || 'fakekey',
- urls: urls,
- },
- intelligentSession: {
- apikey: process.env.TEST_INTELLIGENT_APIKEY || 'fakekey',
- urls: Object.assign({}, urls, { uploadApiUrl: urls.intelligentUploadApiUrl }),
- },
- cloudSession: {
- apikey: process.env.TEST_CLOUD_APIKEY || 'fakekey',
- urls: urls,
- },
- secureCloudSession: {
- apikey: process.env.TEST_CLOUD_SECURE_APIKEY || 'fakesecurekey',
- signature: process.env.TEST_CLOUD_SIGNATURE || 'fakesignature',
- policy: process.env.TEST_CLOUD_POLICY || 'fakepolicy',
- urls: urls,
- },
- secureSession: {
- apikey: process.env.TEST_SECURE_APIKEY || 'fakesecurekey',
- signature: process.env.TEST_SIGNATURE || 'fakesignature',
- policy: process.env.TEST_POLICY || 'fakepolicy',
- urls: urls,
- },
- filelink: process.env.TEST_FILELINK || 'W1LOh6RdqHqolomhqMUQ',
- secureFilelink: process.env.TEST_SECURE_FILELINK || 'W1LOh6RdqHqolomhqMUQ',
- urls: urls,
- testEnv: testEnv,
-};
diff --git a/test/setup_node.js b/test/setup_node.js
deleted file mode 100644
index 24c43a51..00000000
--- a/test/setup_node.js
+++ /dev/null
@@ -1,34 +0,0 @@
-require('dotenv').config();
-const testEnv = process.env.TEST_ENV || 'unit';
-const urls = require('./urls.json')[testEnv];
-global.ENV = {
- isNode: true,
- session: {
- apikey: process.env.TEST_APIKEY || 'fakekey',
- urls,
- },
- cloudSession: {
- apikey: process.env.TEST_CLOUD_APIKEY || 'fakekey',
- urls: urls,
- },
- secureCloudSession: {
- apikey: process.env.TEST_CLOUD_SECURE_APIKEY || 'fakesecurekey',
- signature: process.env.TEST_CLOUD_SIGNATURE || 'fakesignature',
- policy: process.env.TEST_CLOUD_POLICY || 'fakepolicy',
- urls: urls,
- },
- intelligentSession: {
- apikey: process.env.TEST_INTELLIGENT_APIKEY || 'fakekey',
- urls: Object.assign({}, urls, { uploadApiUrl: urls.intelligentUploadApiUrl }),
- },
- secureSession: {
- apikey: process.env.TEST_SECURE_APIKEY || 'fakesecurekey',
- signature: process.env.TEST_SIGNATURE || 'fakesignature',
- policy: process.env.TEST_POLICY || 'fakepolicy',
- urls,
- },
- filelink: process.env.TEST_FILELINK || 'W1LOh6RdqHqolomhqMUQ',
- secureFilelink: process.env.TEST_SECURE_FILELINK || 'W1LOh6RdqHqolomhqMUQ',
- urls,
- testEnv,
-};
diff --git a/test/toxy.js b/test/toxy.js
deleted file mode 100644
index c1768a39..00000000
--- a/test/toxy.js
+++ /dev/null
@@ -1,61 +0,0 @@
-const cors = require('cors');
-const toxy = require('toxy');
-require('./setup_node.js');
-
-const rules = toxy.rules;
-const host = ENV.intelligentSession.urls.intelligentUploadApiUrl;
-
-const proxy500 = toxy();
-proxy500.use(cors());
-proxy500
- .forward(host)
- .options({ forwardHost: true });
-proxy500
- .post('/multipart/upload')
- .poison(toxy.poisons.inject({
- code: 500,
- body: '{"error": "toxy injected error"}',
- headers: { 'Content-Type': 'application/json' },
- }));
-proxy500.all('/*');
-proxy500.listen(3001);
-console.log('Launched toxy proxy with HTTP 500 poison on http://localhost:3001');
-
-const proxyAbort = toxy();
-proxyAbort.use(cors());
-proxyAbort
- .forward(host)
- .options({ forwardHost: true });
-proxyAbort.put('/fakeS3').poison(toxy.poisons.abort());
-proxyAbort.all('/*');
-proxyAbort.listen(3002);
-console.log('Launched toxy proxy with abort poison on http://localhost:3002');
-
-const proxy400 = toxy();
-proxy400.use(cors());
-proxy400
- .forward(host)
- .options({ forwardHost: true });
-proxy400
- .post('/multipart/upload')
- .poison(toxy.poisons.inject({
- code: 400,
- body: '{"error": "toxy injected error"}',
- headers: { 'Content-Type': 'application/json' },
- }));
-proxy400.all('/*');
-proxy400.listen(3003);
-console.log('Launched toxy proxy with HTTP 400 poison on http://localhost:3003');
-
-const proxySlowUpload = toxy();
-proxySlowUpload.use(cors());
-proxySlowUpload
- .forward(host)
- .options({ forwardHost: true });
-
-proxySlowUpload.post('/multipart/upload')
- .poison(toxy.poisons.slowOpen({ delay: 2000 }))
-proxySlowUpload.all('/*');
-proxySlowUpload.listen(3004);
-console.log('Launched toxy proxy with HTTP slowOpen on http://localhost:3004');
-
diff --git a/test/urls.json b/test/urls.json
deleted file mode 100644
index e580ce3b..00000000
--- a/test/urls.json
+++ /dev/null
@@ -1,30 +0,0 @@
-{
- "unit": {
- "storeApiUrl": "http://localhost:3000/api/store",
- "fileApiUrl": "http://localhost:3000/api/file",
- "uploadApiUrl": "http://localhost:3000/upload",
- "cloudApiUrl": "http://localhost:3000/cloud",
- "intelligentUploadApiUrl": "http://localhost:3000/intelligentUpload",
- "processApiUrl": "https://process-stage.filestackapi.com",
- "cdnUrl": "http://localhost:3000/cdn",
- "testImageUrl": "https://d1wtqaffaaj63z.cloudfront.net/images/Zanzibar_Red_Colobus_Monkey.jpg",
- "proxy500": "http://localhost:3001",
- "proxyAbort": "http://localhost:3002",
- "proxy400": "http://localhost:3003",
- "proxySlow": "http://localhost:3004"
- },
- "integration": {
- "storeApiUrl": "https://www.filestackapi.com/api/store",
- "cloudApiUrl": "https://cloud-rc.filestackapi.com",
- "fileApiUrl": "https://www.filestackapi.com/api/file",
- "intelligentUploadApiUrl": "https://upload.filestackapi.com",
- "uploadApiUrl": "https://upload.filestackapi.com",
- "processApiUrl": "https://process-stage.filestackapi.com",
- "cdnUrl": "https://process-stage.filestackapi.com",
- "testImageUrl": "https://d1wtqaffaaj63z.cloudfront.net/images/Zanzibar_Red_Colobus_Monkey.jpg",
- "proxy500": "http://localhost:3001",
- "proxyAbort": "http://localhost:3002",
- "proxy400": "http://localhost:3003",
- "proxySlow": "http://localhost:3004"
- }
-}
diff --git a/tsconfig.json b/tsconfig.json
index 4606c833..dc02eb90 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -10,18 +10,16 @@
"inlineSourceMap": true,
"listFiles": false,
"traceResolution": false,
+ "skipLibCheck": true,
"pretty": true,
"lib" : [
"es6",
"dom"
],
- "types" : [
- "node",
- "mocha"
- ],
"baseUrl": ".",
"typeRoots": [
"@types",
+ "./node_modules/@types",
"./src/types"
]
},
@@ -29,7 +27,8 @@
"src/**/*.ts"
],
"exclude": [
- "node_modules/**"
+ "node_modules/**",
+ "src/**/*.spec.ts"
],
"compileOnSave": false,
diff --git a/tsconfig.tslint.json b/tsconfig.tslint.json
new file mode 100644
index 00000000..50305e60
--- /dev/null
+++ b/tsconfig.tslint.json
@@ -0,0 +1,4 @@
+{
+ "extends": "./tsconfig",
+ "exclude": []
+}
diff --git a/tslint.json b/tslint.json
index deebcf2e..4261df21 100644
--- a/tslint.json
+++ b/tslint.json
@@ -1,6 +1,7 @@
{
"extends": "tslint-config-semistandard",
"rules": {
+ "deprecation": false,
"file-header": [true, "Copyright"],
"space-before-function-paren": false,
"no-multi-spaces": false,
diff --git a/webpack.config.js b/webpack.config.js
new file mode 100644
index 00000000..9a09d61a
--- /dev/null
+++ b/webpack.config.js
@@ -0,0 +1,90 @@
+const webpack = require('webpack');
+const CompressionPlugin = require('compression-webpack-plugin');
+const path = require('path');
+const fs = require('fs');
+const EsmWebpackPlugin = require('@purtuga/esm-webpack-plugin');
+const merge = require('lodash.merge');
+const CleanWebpackPlugin = require('clean-webpack-plugin');
+const WebpackAssetsManifest = require('webpack-assets-manifest');
+const banner = fs.readFileSync('./LICENSE', 'utf8').replace('{year}', new Date().getFullYear());
+
+const config = {
+ mode: 'production',
+ node: { Buffer: false },
+ watchOptions: {
+ ignored: /node_modules/
+ },
+ entry: './build/module/index.js',
+ output: {
+ libraryTarget: 'umd',
+ library: 'filestack',
+ path: path.resolve(__dirname, 'build/browser'),
+ filename: 'filestack.umd.js',
+ },
+ module: {
+ rules: [
+ {
+ test: /\.(js|jsx)$/,
+ use: {
+ loader: 'babel-loader',
+ options: {
+ presets: [
+ [
+ '@babel/preset-env',
+ {
+ targets: '> 0.25%, not dead, ie 11',
+ },
+ ],
+ ],
+ },
+ },
+ },
+ ],
+ },
+ externals: [
+ // those externals are only used in nodejs
+ 'fs',
+ 'crypto',
+ ],
+ plugins: [
+ new CleanWebpackPlugin(),
+ new CompressionPlugin(),
+ new webpack.BannerPlugin({ banner }),
+ new webpack.DefinePlugin({
+ 'process.env.NODE_ENV': '"production"',
+ }),
+ ],
+ devtool: 'source-map',
+};
+
+const umd = merge({}, config, {
+ output: {
+ libraryTarget: 'umd',
+ filename: 'filestack.umd.js',
+ },
+});
+
+const esm = merge({}, config, {
+ output: {
+ libraryTarget: 'var',
+ filename: 'filestack.esm.js',
+ },
+ plugins: [
+ new EsmWebpackPlugin(),
+ ]
+});
+
+const prod = merge({}, config, {
+ output: {
+ libraryTarget: 'umd',
+ filename: 'filestack.min.js',
+ },
+ plugins: [
+ new WebpackAssetsManifest({
+ writeToDisk: true,
+ integrity: true,
+ }),
+ ],
+});
+
+module.exports = [umd, prod, esm];