diff --git a/.editorconfig b/.editorconfig
index 9b7352176..4a874ce23 100644
--- a/.editorconfig
+++ b/.editorconfig
@@ -11,3 +11,6 @@ trim_trailing_whitespace = true
[*.md]
max_line_length = off
trim_trailing_whitespace = false
+
+[*.yml]
+indent_size = 2
diff --git a/.travis.yml b/.travis.yml
index 9b68812ed..a2abdd461 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,5 +1,5 @@
dist: trusty
-sudo: false
+sudo: required
language: node_js
node_js:
@@ -9,15 +9,25 @@ cache:
directories:
- ./node_modules
-
-before_install:
- - export CHROME_BIN=chromium-browser
- - "export DISPLAY=:99.0"
- - "sh -e /etc/init.d/xvfb start"
+services:
+ - docker
install:
- npm install
script:
- - xvfb-run -a npm run test -- --single-run --no-progress --browser=ChromeNoSandbox
- #- xvfb-run -a npm run e2e -- --no-progress --config=protractor-ci.conf.js
+ - npm run build
+ - npm run test -- --single-run --no-progress && cat ./coverage/lcov.info | ./node_modules/.bin/codacy-coverage && rm -rf ./coverage
+
+# Send coverage data to codecov
+after_success:
+ - bash <(curl -s https://codecov.io/bash) -X gcov
+ - export BRANCH=$(if [ "$TRAVIS_PULL_REQUEST" == "false" ]; then echo $TRAVIS_BRANCH; else echo $TRAVIS_PULL_REQUEST_BRANCH; fi)
+ - echo "TRAVIS_BRANCH=$TRAVIS_BRANCH, PR=$PR, BRANCH=$BRANCH"
+ - export TAG=`if [ "$BRANCH" == "master" ]; then echo "latest"; else echo $BRANCH ; fi`
+ - sed -i 's/{:port}/:8080/1' ./dist/app.config.json
+ - docker build -t $DOCKER_REPO:$TAG .
+ # Publish extra image based on Travis build number
+ - docker tag $DOCKER_REPO:$TAG $DOCKER_REPO:travis-$TRAVIS_BUILD_NUMBER
+ - docker login -u "$DOCKER_USERNAME" -p "$DOCKER_PASSWORD"
+ - docker push $DOCKER_REPO
diff --git a/Dockerfile b/Dockerfile
index 1c3cdbc27..0d52ed48c 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,4 +1,4 @@
-FROM nginx
+FROM nginx:alpine
COPY nginx.conf /etc/nginx/nginx.conf
diff --git a/README.md b/README.md
index e76692c8a..a3be7d25f 100644
--- a/README.md
+++ b/README.md
@@ -19,6 +19,14 @@ with a simple and easy to use interface for working with files stored in the Alf
[Public documentation](https://alfresco.github.io/alfresco-content-app/)
+### Raising issues and feature requests
+
+Log any issues in the ['ACA' JIRA project](https://issues.alfresco.com/jira/projects/ACA),
+please include a clear description, steps to reproduce and screenshots where appropriate.
+
+All issues will be reviewed; bugs will be categorized if reproducible and enhancement/feature suggestions
+will be considered against existing priorities if the use case serves a general-purpose need.
+
## Development server
Run `npm start` for a dev server. Navigate to `http://localhost:3000/` (opens by default).
diff --git a/docs/README.md b/docs/README.md
index dd04a4138..13e136873 100644
--- a/docs/README.md
+++ b/docs/README.md
@@ -17,9 +17,9 @@ with a simple and easy to use interface for working with files stored in the Alf
This application uses the latest releases from Alfresco:
-- [Alfresco ADF version 2.0](https://community.alfresco.com/community/application-development-framework/pages/get-started)
-- [Alfresco Content Services version 5.2.2](https://www.alfresco.com/platform/content-services-ecm)
-- [Alfresco Community Edition 201707](https://www.alfresco.com/products/community/download)
+- [Alfresco ADF version 2.2](https://community.alfresco.com/community/application-development-framework/pages/get-started)
+- [Alfresco Content Services version 5.2.3](https://www.alfresco.com/platform/content-services-ecm)
+- [Alfresco Community Edition 201802 EA](https://www.alfresco.com/products/community/download)
You also need node.js (8.9.1 or later) installed to build it locally from source code.
@@ -28,58 +28,6 @@ You also need node.js (8.9.
The latest version of the Alfresco Content platform is required
due to the application using the latest [REST APIs](https://docs.alfresco.com/5.2/pra/1/topics/pra-welcome.html) developments.
-## Where to get help
-
-There are several ways to get help with building applications using the Alfresco Application Development Framework:
-
-### Alfresco DevCon 2018
-
-DevCon 2018 is an international developer conference entirely dedicated to Alfresco technology.
-With the support of our community, customers, and partners, DevCon will increase your technical know-how,
-connect you with other Alfresco developers, and let you collaborate with our team and each other.
-
-Register now to avoid disappointment, places are limited:
-http://devcon.alfresco.com/
-
-### Alfresco Community
-
-Visit the Alfresco Community space where you can find many resources to help you get started building your application,
-along with blog posts from the Alfresco developers and much more:
-https://community.alfresco.com/community/application-development-framework
-
-### Alfresco ADF Gitter
-
-Join the vibrant community in Gitter where you can chat with experienced developers,
-including the Alfresco employees working directly on the ADF and this example application project:
-https://gitter.im/Alfresco/alfresco-ng2-components
-
-### Alfresco Developer Support
-
-Developer Support is a subscription-based support offering delivered remotely
-by a dedicated team of development-focused, senior Support Engineers.
-This support offering is best for customers and partners that require on-going support
-for their development teams and customized code.
-
-Visit the Developer Support Services section on the Alfresco website for more information:
-https://www.alfresco.com/alfresco-developer-support-services
-
-### Alfresco University
-
-Training with Alfresco University is the best way to acquire the right skills for your team to deliver a successful Alfresco implementation.
-The most cost-effective way to take advantage of this valuable training is through Alfresco University Passport.
-
-Visit the Alfresco University section on the Alfresco website for more information:
-https://www.alfresco.com/alfresco-university
-
-## Building and running locally
-
-Please refer to the [developer docs](/build) to get more details on building and running application on your local machine.
-
-## Using with Docker
-
-The Content App provides a "Dockerfile" and "docker-compose" files to aid in running application in a container.
-Please refer to the "[Using with Docker](/docker)" article for more details.
-
## Contribution Policy
### How to contribute
diff --git a/docs/configuration.md b/docs/configuration.md
index bdf2ad0f0..030888735 100644
--- a/docs/configuration.md
+++ b/docs/configuration.md
@@ -121,7 +121,7 @@ You can change the default settings of the pagination that gets applied to all t
```json
{
...,
- "document-list": {
+ "pagination": {
"supportedPageSizes": [
25,
50,
diff --git a/docs/docker.md b/docs/docker.md
index ac19fb4fe..e4961a3f4 100644
--- a/docs/docker.md
+++ b/docs/docker.md
@@ -6,6 +6,28 @@ This article assumes you are familiar with Docker and know how to create images
You can create a Docker image to run Alfresco Content App in the container.
+## Using public Docker images
+
+You can find all latest images for ACA in the [alfresco-content-app]( https://hub.docker.com/r/alfresco/alfresco-content-app/) DockerHub repository.
+
+### Tags
+
+- `latest`: latest stable release (`master` branch), available with 1.1 release or later
+- `development`: most recent code (`development` branch)
+
+In addition, there are images for feature branches, pull requests and Travis CI builds.
+
+### Example
+
+You can run latest `development` build locally with the following command:
+
+```sh
+docker run -p 3000:80 alfresco/alfresco-content-app:development
+```
+
+The default image expects an ACS 5.2.2 or later running at port `8080`.
+You may also need CORS settings to be applied for your ACS installation or image.
+
## Building from source code
You need to run the following commands to build the project from the source code:
@@ -35,10 +57,10 @@ docker image build -t content-app .
To run the image locally, you can use the following command:
```sh
-docker container run -p 80:80 --rm content-app
+docker container run -p 8888:80 --rm content-app
```
-Navigate to "http://localhost" to access the running application.
+Navigate to "http://localhost:8888" to access the running application.
## Docker Compose file
diff --git a/docs/file-viewer.md b/docs/file-viewer.md
new file mode 100644
index 000000000..4b649532b
--- /dev/null
+++ b/docs/file-viewer.md
@@ -0,0 +1,43 @@
+### File Viewer
+
+The File Viewer has been created using the [ViewerComponent](https://alfresco.github.io/adf-component-catalog/components/ViewerComponent.html) from the ADF. The Viewer has four main areas:
+
+
+
+#### Header & Toolbar (1)
+The Header & Toolbar section of the viewer contains a number of features that relate to the file currently being displayed:
+- Close 'X' will return the user to the folder that contains the file.
+- The name and file type icon is shown in the middle.
+- Next and previous buttons will be displayed either side of the file name so that users can navigate to other files in the folder without navigating away from the viewer.
+- Finally, on the right hand side an actions toolbar provides users with the ability to download, favorite, move, copy and delete.
+
+#### Content (2)
+The File Viewer consists of four separate views that handle displaying the content based on four types of content, covering various [file/mime](https://alfresco.github.io/adf-component-catalog/components/ViewerComponent.html#supported-file-formats) types:
+
+- Document View: PDFs are displayed in the application File Viewer, for other document types (DOCX etc) then a PDF rendition is automatically retrieved.
+- Image View: JPEG, PNG, GIF, BMP and SVG images are natively displayed in the application File Viewer.
+- Media View: MP4, MP3, WAV, OGG and WEBM files are played natively application File Viewer. The File Viewer will download, by default, 50MB of the content at a time to ensure a smooth playback of the content.
+- Text View: TXT, XML, JS, HTML, JSON and TS files are natively displayed as text in the application File Viewer.
+
+#### Thumbnails side pane (3)
+The Document View includes a thumbnails pane which can be activated by a button in the Viewer Actions toolbar. Clicking on a thumbnail will take a user directly to the selected page and as users scroll through a document the current page is highlighted in the pane.
+
+#### Viewer Controls (4)
+At the bottom of the content the Viewer Controls allow users to interact with the content in various ways; the actions available are dependant on the type of content being displayed.
+
+- Document View:
+ - Activate/Deactivate thumbnails pane
+ - Previous/Next page
+ - Jump to page number
+ - Zoom in/out
+ - Fit to page
+- Image View:
+ - Zoom in/out
+ - Rotate left/right (does not alter content in the repository)
+ - Reset image
+- Media View:
+ - Play/pause
+ - Timeline position
+ - Audio mute/unmute
+ - Audio volume
+ - Full screen
diff --git a/docs/help.md b/docs/help.md
new file mode 100644
index 000000000..f547b977e
--- /dev/null
+++ b/docs/help.md
@@ -0,0 +1,42 @@
+# Where to get help
+
+There are several ways to get help with building applications using the Alfresco Application Development Framework:
+
+## Alfresco Community
+
+Visit the Alfresco Community space where you can find many resources to help you get started building your application,
+along with blog posts from the Alfresco developers and much more:
+https://community.alfresco.com/community/application-development-framework
+
+## Alfresco ADF Gitter
+
+Join the vibrant community in Gitter where you can chat with experienced developers,
+including the Alfresco employees working directly on the ADF and this example application project:
+https://gitter.im/Alfresco/alfresco-ng2-components
+
+## Alfresco Developer Support
+
+Developer Support is a subscription-based support offering delivered remotely
+by a dedicated team of development-focused, senior Support Engineers.
+This support offering is best for customers and partners that require on-going support
+for their development teams and customized code.
+
+Visit the Developer Support Services section on the Alfresco website for more information:
+https://www.alfresco.com/alfresco-developer-support-services
+
+## Alfresco University
+
+Training with Alfresco University is the best way to acquire the right skills for your team to deliver a successful Alfresco implementation.
+The most cost-effective way to take advantage of this valuable training is through Alfresco University Passport.
+
+Visit the Alfresco University section on the Alfresco website for more information:
+https://www.alfresco.com/alfresco-university
+
+# Building and running locally
+
+Please refer to the [developer docs](/build) to get more details on building and running application on your local machine.
+
+# Using with Docker
+
+The Content App provides a "Dockerfile" and "docker-compose" files to aid in running application in a container.
+Please refer to the "[Using with Docker](/docker)" article for more details.
diff --git a/docs/images/File-Viewer.png b/docs/images/File-Viewer.png
new file mode 100644
index 000000000..9fea38b1c
Binary files /dev/null and b/docs/images/File-Viewer.png differ
diff --git a/docs/index.html b/docs/index.html
index 27b3954ed..e3acff7e3 100644
--- a/docs/index.html
+++ b/docs/index.html
@@ -37,6 +37,10 @@
{
title: 'Document List',
path: 'doc-list'
+ },
+ {
+ title: 'File Viewer',
+ path: 'file-viewer'
}
]
},
@@ -77,6 +81,10 @@
path: 'navigation'
}
]
+ },
+ {
+ title: 'Get Help',
+ path: 'help'
}
],
icons: [
diff --git a/karma.conf.js b/karma.conf.js
index 410aaa975..2f0d566e0 100644
--- a/karma.conf.js
+++ b/karma.conf.js
@@ -38,11 +38,16 @@ module.exports = function (config) {
colors: true,
logLevel: config.LOG_INFO,
autoWatch: true,
- browsers: ['Chrome'],
+ browsers: ['ChromeHeadless'],
customLaunchers: {
- ChromeNoSandbox: {
+ ChromeHeadless: {
base: 'Chrome',
- flags: ['--no-sandbox']
+ flags: [
+ '--no-sandbox',
+ '--headless',
+ '--disable-gpu',
+ '--remote-debugging-port=9222'
+ ]
}
},
singleRun: false,
@@ -50,6 +55,9 @@ module.exports = function (config) {
captureTimeout: 180000,
browserDisconnectTimeout: 180000,
browserDisconnectTolerance: 3,
- browserNoActivityTimeout: 300000
+ browserNoActivityTimeout: 300000,
+
+ // workaround for alfresco-js-api builds
+ webpack: { node: { fs: 'empty', } }
});
};
diff --git a/package-lock.json b/package-lock.json
index db289ddee..021a8776e 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,41 +1,42 @@
{
"name": "alfresco-content-app",
- "version": "1.0.1",
+ "version": "1.1.0",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
"@alfresco/adf-content-services": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/@alfresco/adf-content-services/-/adf-content-services-2.0.0.tgz",
- "integrity": "sha512-GuD5fyYzm7ZEs1+f7wzQxabGoVsFRIvLS5ZHkml6yQrUv01zjzTt85+zcpDhYiW4NY7F+2JgoyMN4+YXfop8XA==",
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/@alfresco/adf-content-services/-/adf-content-services-2.2.0.tgz",
+ "integrity": "sha512-6IrBDtrBo4ekrEBc5850QLshfx4ZnxQtlq5OPTnrno1vNjOJlG30KCvspl+bDPcdc4iVRPRWgC4HpLKN6PArCQ==",
"requires": {
- "@alfresco/adf-core": "2.0.0",
- "@angular/animations": "5.0.0",
- "@angular/cdk": "5.0.0-rc0",
- "@angular/common": "5.0.0",
- "@angular/compiler": "5.0.0",
- "@angular/core": "5.0.0",
- "@angular/flex-layout": "2.0.0-beta.10",
- "@angular/forms": "5.0.0",
- "@angular/http": "5.0.0",
- "@angular/material": "5.0.0-rc0",
- "@angular/material-moment-adapter": "5.1.0",
- "@angular/platform-browser": "5.0.0",
- "@angular/platform-browser-dynamic": "5.0.0",
- "@angular/router": "5.0.0",
- "@ngx-translate/core": "8.0.0",
- "alfresco-js-api": "2.0.0",
+ "@alfresco/adf-core": "2.2.0",
+ "@angular/animations": "5.1.1",
+ "@angular/cdk": "5.0.1",
+ "@angular/common": "5.1.1",
+ "@angular/compiler": "5.1.1",
+ "@angular/core": "5.1.1",
+ "@angular/flex-layout": "2.0.0-beta.12",
+ "@angular/forms": "5.1.1",
+ "@angular/http": "5.1.1",
+ "@angular/material": "5.0.1",
+ "@angular/material-moment-adapter": "5.0.1",
+ "@angular/platform-browser": "5.1.1",
+ "@angular/platform-browser-dynamic": "5.1.1",
+ "@angular/router": "5.1.1",
+ "@ngx-translate/core": "9.1.1",
+ "alfresco-js-api": "2.2.0",
"chart.js": "2.5.0",
"core-js": "2.4.1",
"hammerjs": "2.0.8",
"minimatch": "3.0.4",
- "moment": "2.15.2",
+ "moment": "2.20.1",
"ng2-charts": "1.6.0",
"pdfjs-dist": "1.5.404",
"raphael": "2.2.7",
"reflect-metadata": "0.1.10",
"rxjs": "5.5.2",
"systemjs": "0.19.27",
+ "tslib": "1.9.0",
"zone.js": "0.8.14"
},
"dependencies": {
@@ -60,36 +61,37 @@
}
},
"@alfresco/adf-core": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/@alfresco/adf-core/-/adf-core-2.0.0.tgz",
- "integrity": "sha512-BOBV6XbnrnnZ7/C2jk9kzSMQCzP301JmEHB8hraFHC0oKGIgozxLEXBcX448aX0yORllQaFS2b2Mmqe2U7i/Tg==",
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/@alfresco/adf-core/-/adf-core-2.2.0.tgz",
+ "integrity": "sha512-TXaVXi9p/S95oKZ8x3fR/NieHN77AWjliwntPI0mR95Syg3U+7aWJCJElU3TkIItceNo23qnoEJCFeQgc86N5w==",
"requires": {
- "@angular/animations": "5.0.0",
- "@angular/cdk": "5.0.0-rc0",
- "@angular/common": "5.0.0",
- "@angular/compiler": "5.0.0",
- "@angular/core": "5.0.0",
- "@angular/flex-layout": "2.0.0-beta.10",
- "@angular/forms": "5.0.0",
- "@angular/http": "5.0.0",
- "@angular/material": "5.0.0-rc0",
- "@angular/material-moment-adapter": "5.1.0",
- "@angular/platform-browser": "5.0.0",
- "@angular/platform-browser-dynamic": "5.0.0",
- "@angular/router": "5.0.0",
- "@ngx-translate/core": "8.0.0",
- "alfresco-js-api": "2.0.0",
+ "@angular/animations": "5.1.1",
+ "@angular/cdk": "5.0.1",
+ "@angular/common": "5.1.1",
+ "@angular/compiler": "5.1.1",
+ "@angular/core": "5.1.1",
+ "@angular/flex-layout": "2.0.0-beta.12",
+ "@angular/forms": "5.1.1",
+ "@angular/http": "5.1.1",
+ "@angular/material": "5.0.1",
+ "@angular/material-moment-adapter": "5.0.1",
+ "@angular/platform-browser": "5.1.1",
+ "@angular/platform-browser-dynamic": "5.1.1",
+ "@angular/router": "5.1.1",
+ "@ngx-translate/core": "9.1.1",
+ "alfresco-js-api": "2.2.0",
"chart.js": "2.5.0",
"core-js": "2.4.1",
"hammerjs": "2.0.8",
"minimatch": "3.0.4",
- "moment": "2.15.2",
+ "moment": "2.20.1",
"ng2-charts": "1.6.0",
"pdfjs-dist": "1.5.404",
"raphael": "2.2.7",
"reflect-metadata": "0.1.10",
"rxjs": "5.5.2",
"systemjs": "0.19.27",
+ "tslib": "1.9.0",
"zone.js": "0.8.14"
},
"dependencies": {
@@ -145,6 +147,18 @@
"source-map": "0.5.7"
},
"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.1.0",
+ "fast-json-stable-stringify": "2.0.0",
+ "json-schema-traverse": "0.3.1"
+ }
+ },
"rxjs": {
"version": "5.5.6",
"resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.6.tgz",
@@ -190,17 +204,17 @@
}
},
"@angular/animations": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-5.0.0.tgz",
- "integrity": "sha1-ta0ZnGf5P3WVREd+/+ZnnhVJkfs=",
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-5.1.1.tgz",
+ "integrity": "sha512-PHLBWDnAzr5b5l52pk5ZYmv/6m0YUe2ICwu5dmbS0d8Kf5dXadMphAWCDbljMF+djGyZeFq2/dQ/t7ygYl3YuA==",
"requires": {
"tslib": "1.9.0"
}
},
"@angular/cdk": {
- "version": "5.0.0-rc0",
- "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-5.0.0-rc0.tgz",
- "integrity": "sha512-wZg/mzHisiTieVt7Q/YNPB+r07PHvjoAT3+0mwyIP7wuC00W8BJLPhTZd/tIM5q7Nd69kuA1HSx1qLkcmlCZkw==",
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-5.0.1.tgz",
+ "integrity": "sha512-uK4Vyaf06J8KqePzq35BxMHRGolt35EnbZf9wjCs7eYaghbQ7Pk2xUGoynu5Lj1wAOn5N1/C1nT2/aAH/EE2rw==",
"requires": {
"tslib": "1.9.0"
}
@@ -217,58 +231,58 @@
"@ngtools/json-schema": "1.1.0",
"@ngtools/webpack": "1.9.6",
"@schematics/angular": "0.1.17",
- "autoprefixer": "7.2.5",
+ "autoprefixer": "7.2.6",
"chalk": "2.2.2",
"circular-dependency-plugin": "4.4.0",
"common-tags": "1.7.2",
- "copy-webpack-plugin": "4.3.1",
+ "copy-webpack-plugin": "4.5.1",
"core-object": "3.1.5",
- "css-loader": "0.28.9",
+ "css-loader": "0.28.10",
"cssnano": "3.10.0",
"denodeify": "1.2.1",
"ember-cli-string-utils": "1.1.0",
"exports-loader": "0.6.4",
"extract-text-webpack-plugin": "3.0.2",
- "file-loader": "1.1.6",
+ "file-loader": "1.1.11",
"fs-extra": "4.0.3",
"glob": "7.1.2",
"html-webpack-plugin": "2.30.1",
"istanbul-instrumenter-loader": "3.0.0",
"karma-source-map-support": "1.2.0",
"less": "2.7.3",
- "less-loader": "4.0.5",
- "license-webpack-plugin": "1.1.1",
+ "less-loader": "4.1.0",
+ "license-webpack-plugin": "1.3.0",
"loader-utils": "1.1.0",
- "lodash": "4.17.4",
+ "lodash": "4.17.5",
"memory-fs": "0.4.1",
"minimatch": "3.0.4",
"node-modules-path": "1.0.1",
- "node-sass": "4.7.2",
+ "node-sass": "4.8.1",
"nopt": "4.0.1",
"opn": "5.1.0",
"portfinder": "1.0.13",
- "postcss-import": "11.0.0",
- "postcss-loader": "2.0.10",
- "postcss-url": "7.3.0",
+ "postcss-import": "11.1.0",
+ "postcss-loader": "2.1.1",
+ "postcss-url": "7.3.1",
"raw-loader": "0.5.1",
"resolve": "1.5.0",
"rxjs": "5.5.6",
- "sass-loader": "6.0.6",
+ "sass-loader": "6.0.7",
"semver": "5.5.0",
"silent-error": "1.1.0",
"source-map-loader": "0.2.3",
"source-map-support": "0.4.18",
"style-loader": "0.13.2",
"stylus": "0.54.5",
- "stylus-loader": "3.0.1",
- "uglifyjs-webpack-plugin": "1.1.6",
+ "stylus-loader": "3.0.2",
+ "uglifyjs-webpack-plugin": "1.2.3",
"url-loader": "0.6.2",
"webpack": "3.10.0",
"webpack-dev-middleware": "1.12.2",
- "webpack-dev-server": "2.11.1",
- "webpack-merge": "4.1.1",
+ "webpack-dev-server": "2.11.2",
+ "webpack-merge": "4.1.2",
"webpack-sources": "1.1.0",
- "webpack-subresource-integrity": "1.0.3"
+ "webpack-subresource-integrity": "1.0.4"
},
"dependencies": {
"rxjs": {
@@ -289,31 +303,31 @@
}
},
"@angular/common": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/@angular/common/-/common-5.0.0.tgz",
- "integrity": "sha1-+W1mpRe5ldG6mygwnxXC41lnWCU=",
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/@angular/common/-/common-5.1.1.tgz",
+ "integrity": "sha512-SFRzdDthoiKaMLuV+TAwjKXFWwTRFGuidlWC3BhUf8/HzNSePAdvfdQcqbEaE5buMn403OV105S9Tyx5tILQeA==",
"requires": {
"tslib": "1.9.0"
}
},
"@angular/compiler": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-5.0.0.tgz",
- "integrity": "sha1-uf+/GMijnYt9rOxHMZOpDiTMK8k=",
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-5.1.1.tgz",
+ "integrity": "sha512-k4J2kRiBjtjkDcDut2JVUpqQGLJWd8j3Don+swzZHuEklbLmsVRGM6u/fmH0K9TMwKHtC5Ycap8kj4bWXUYfwg==",
"requires": {
"tslib": "1.9.0"
}
},
"@angular/compiler-cli": {
- "version": "5.2.2",
- "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-5.2.2.tgz",
- "integrity": "sha512-XSojPIMQNvEnYIufTIlrr3GLpr20AUQP0bMzUp4/U/ATWmMWmdNRRG/ys5ncmbgImoAg1nW0hp4bonUSYf9nGQ==",
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-5.1.1.tgz",
+ "integrity": "sha512-X3n1V0fAsZzJDRLM2OPiOri8rrQ2ILFS0VDqPdHMa1HbpF0ZKe1Yyux2rhGSbS83a1Eanx6RqfDkrUalKEprbw==",
"dev": true,
"requires": {
"chokidar": "1.7.0",
"minimist": "1.2.0",
"reflect-metadata": "0.1.10",
- "tsickle": "0.26.0"
+ "tsickle": "0.25.6"
},
"dependencies": {
"minimist": {
@@ -325,83 +339,93 @@
}
},
"@angular/core": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/@angular/core/-/core-5.0.0.tgz",
- "integrity": "sha1-T5dqIl993fNJkvLK2CTJVDpG9Mg=",
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/@angular/core/-/core-5.1.1.tgz",
+ "integrity": "sha512-8HJ0lNM5Z+pf+JfOl5mAWgNfrdtnMhVcEGCEniJAQweKOfYCziuyB0ALkX/Q6jGmd2IshR36SarwCYEc5ttt/w==",
"requires": {
"tslib": "1.9.0"
}
},
"@angular/flex-layout": {
- "version": "2.0.0-beta.10",
- "resolved": "https://registry.npmjs.org/@angular/flex-layout/-/flex-layout-2.0.0-beta.10.tgz",
- "integrity": "sha512-Y4f+Gw8pjDBwb9IykSTGiYRfVyzLfzTxFvRzKuDYEGUFi2UG3zOmAr2OzkpA/+K4mE5zQ+hYkBJaJD+DXAd/6w==",
+ "version": "2.0.0-beta.12",
+ "resolved": "https://registry.npmjs.org/@angular/flex-layout/-/flex-layout-2.0.0-beta.12.tgz",
+ "integrity": "sha512-QTOKZxehYTh8fj64V/pNVWNbfNtebSbssyMIXiGJuHTzfyF7GYdRmtjoR2pNpllycz3rE5NYX77EB140Y6BCnw==",
"requires": {
"tslib": "1.9.0"
}
},
"@angular/forms": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-5.0.0.tgz",
- "integrity": "sha1-x/3fo1OWdZrphSkgowzdqMQe0d4=",
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-5.1.1.tgz",
+ "integrity": "sha512-4iN/8N0DgnV82XIb/8PqlFIGrog8BHJlzQ9sdAlpT29biPFezFpqpsXkjLBouBc7oBFTgoyXMgWDj8IGRmwLGQ==",
"requires": {
"tslib": "1.9.0"
}
},
"@angular/http": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/@angular/http/-/http-5.0.0.tgz",
- "integrity": "sha1-Byiivgz7sHhyfF64fUyF1T/smlE=",
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/@angular/http/-/http-5.1.1.tgz",
+ "integrity": "sha512-oeiLX00TaFlGS5Y4EAGnxxVitN8T9X8olhSC+XDDAAL3JHTAyh4dj7me8vNZk1VaqPFa9AXu4D34vu1Zsm0c1g==",
"requires": {
"tslib": "1.9.0"
}
},
"@angular/language-service": {
- "version": "5.2.2",
- "resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-5.2.2.tgz",
- "integrity": "sha512-i+xaMhi/nBoBPi8NUFCWwgUjq9jGgD5y91nkpaBABs+2E5x7LprL1b2hITmfjo1oMY2kY6L7Sihdwp2JhfCVrA==",
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-5.1.1.tgz",
+ "integrity": "sha512-DWdUdOV8hxBs7D84V6pNR8KJbfdAWlwO1tzL2Rfpsdv/ZpkIFAOIc4BWpF7XhOtFqlnO8IVy5gg3ZFdUrnWu+w==",
"dev": true
},
"@angular/material": {
- "version": "5.0.0-rc0",
- "resolved": "https://registry.npmjs.org/@angular/material/-/material-5.0.0-rc0.tgz",
- "integrity": "sha512-ZW9gy3c8l2NbFfX9DRYSW+i67pPoL9DZoMCb16STQlhdDfwwAWNpjGF0etXkXw30hDnRCMGVVJVU+45cNXJspA==",
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/@angular/material/-/material-5.0.1.tgz",
+ "integrity": "sha512-k95i58ZIVneLE61a5JliM10NSasy9P5C2JJUESo3s/rxt9dq/9XOWpUvNCy49OHYBRFJBlsyrLM6E2V7/tmq4w==",
"requires": {
"tslib": "1.9.0"
}
},
"@angular/material-moment-adapter": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/@angular/material-moment-adapter/-/material-moment-adapter-5.1.0.tgz",
- "integrity": "sha512-PVFU6fCYacMTqBM3M6s1E+9R2a0F5k83hzBgvlBIoqFJ31WGZ9LUvxYQ9gYe50UghkO3UT4Mdl6CJneWnkOVzA==",
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/@angular/material-moment-adapter/-/material-moment-adapter-5.0.1.tgz",
+ "integrity": "sha512-SyFsoxnwXHAR4zLkFh7Z4NmxZANyBoLGAomVZRi2r9w1prc+kbaCaJ7LYjI6zM7Su4ltSQx0libbat1ppgow2w==",
"requires": {
"tslib": "1.9.0"
}
},
"@angular/platform-browser": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-5.0.0.tgz",
- "integrity": "sha1-xwOPfN6AcFtiAUiXIx4YLuyXb+0=",
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-5.1.1.tgz",
+ "integrity": "sha512-QpkNXoO2pqURQJxXPhZo6RFeirKbr56O0SwoMpYfXGGN1qEIicoWZHobCUTp7/jvjx5Xjc7886Fvu/qJrE7wVA==",
"requires": {
"tslib": "1.9.0"
}
},
"@angular/platform-browser-dynamic": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-5.0.0.tgz",
- "integrity": "sha1-iH4QbIsQOwQVz2FWpCXabYP0yJ0=",
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-5.1.1.tgz",
+ "integrity": "sha512-xnin1eK5nF7EO4tYZvRlhT28DyhL3p4NKWsZQwfqyBwSF0T2mJ1vjhjCZVT0MmaOyt5D+0eUkHIhBDqeZyBMMQ==",
"requires": {
"tslib": "1.9.0"
}
},
"@angular/router": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/@angular/router/-/router-5.0.0.tgz",
- "integrity": "sha1-/ktSGmc4QIvOMPk6U0mRQMk6T3Y=",
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/@angular/router/-/router-5.1.1.tgz",
+ "integrity": "sha512-96mBZS1b1Dt7HFOGKh5zI/1U6F3zT4cdjIaBmcCKkbyKhs3WRAPXxxCkuCwr6lWmBeQt4iEvSdXiHQbD0iCG7Q==",
"requires": {
"tslib": "1.9.0"
}
},
+ "@mat-datetimepicker/core": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@mat-datetimepicker/core/-/core-1.0.1.tgz",
+ "integrity": "sha1-DOTzsdjUkk+l+z5I7fIs77rzpoU="
+ },
+ "@mat-datetimepicker/moment": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@mat-datetimepicker/moment/-/moment-1.0.1.tgz",
+ "integrity": "sha1-YYUwbd/QeTBlq9XbBjKpQZgjdPQ="
+ },
"@ngtools/json-schema": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/@ngtools/json-schema/-/json-schema-1.1.0.tgz",
@@ -425,9 +449,9 @@
}
},
"@ngx-translate/core": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/@ngx-translate/core/-/core-8.0.0.tgz",
- "integrity": "sha1-dR/WtRLYDzp0jS3o38lt/vopr+A="
+ "version": "9.1.1",
+ "resolved": "https://registry.npmjs.org/@ngx-translate/core/-/core-9.1.1.tgz",
+ "integrity": "sha1-rhA5KINrip4Gn9Li52+iGYzH5ig="
},
"@schematics/angular": {
"version": "0.1.17",
@@ -447,9 +471,9 @@
}
},
"@types/jasmine": {
- "version": "2.8.5",
- "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-2.8.5.tgz",
- "integrity": "sha512-mkrHFZTgOXkZhau36K628iKFkjbp11t/bHCkY4Mefu4R6McMg2FD9P3naBv/0Ygyn4sz8baColJp2gdmSekgiw==",
+ "version": "2.8.6",
+ "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-2.8.6.tgz",
+ "integrity": "sha512-clg9raJTY0EOo5pVZKX3ZlMjlYzVU73L71q5OV1jhE2Uezb7oF94jh4CvwrW6wInquQAdhOxJz5VDF2TLUGmmA==",
"dev": true
},
"@types/jasminewd2": {
@@ -458,7 +482,7 @@
"integrity": "sha512-hYDVmQZT5VA2kigd4H4bv7vl/OhlympwREUemqBdOqtrYTo5Ytm12a5W5/nGgGYdanGVxj0x/VhZ7J3hOg/YKg==",
"dev": true,
"requires": {
- "@types/jasmine": "2.8.5"
+ "@types/jasmine": "2.8.6"
}
},
"@types/node": {
@@ -508,19 +532,19 @@
"dev": true
},
"accepts": {
- "version": "1.3.4",
- "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.4.tgz",
- "integrity": "sha1-hiRnWMfdbSGmR0/whKR0DsBesh8=",
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz",
+ "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=",
"dev": true,
"requires": {
- "mime-types": "2.1.17",
+ "mime-types": "2.1.18",
"negotiator": "0.6.1"
}
},
"acorn": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.3.0.tgz",
- "integrity": "sha512-Yej+zOJ1Dm/IMZzzj78OntP/r3zHEaKcyNoU2lAaxPtrseM6rF0xwqoz5Q5ysAiED9hTjI2hgtvLXitlCN1/Ug==",
+ "version": "5.5.3",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.5.3.tgz",
+ "integrity": "sha512-jd5MkIUlbbmb07nXH0DT3y7rDVtkzDi4XZOUVWAer8ajmF/DTSSbl5oNFyDOl/OXA33Bl79+ypHhl2pN20VeOQ==",
"dev": true
},
"acorn-dynamic-import": {
@@ -540,6 +564,16 @@
}
}
},
+ "acorn-node": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.3.0.tgz",
+ "integrity": "sha512-efP54n3d1aLfjL2UMdaXa6DsswwzJeI5rqhbFvXMrKiJ6eJFpf+7R0zN7t8IC+XKn2YOAFAv6xbBNgHUkoHWLw==",
+ "dev": true,
+ "requires": {
+ "acorn": "5.5.3",
+ "xtend": "4.0.1"
+ }
+ },
"addressparser": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/addressparser/-/addressparser-1.0.1.tgz",
@@ -578,29 +612,27 @@
}
},
"ajv": {
- "version": "5.5.2",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz",
- "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=",
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.2.1.tgz",
+ "integrity": "sha1-KKarxJOiq+D7TIUHrK7bQ/pVBnE=",
"requires": {
- "co": "4.6.0",
- "fast-deep-equal": "1.0.0",
+ "fast-deep-equal": "1.1.0",
"fast-json-stable-stringify": "2.0.0",
"json-schema-traverse": "0.3.1"
}
},
"ajv-keywords": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz",
- "integrity": "sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I=",
- "dev": true
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.1.0.tgz",
+ "integrity": "sha1-rCsnk5xUPpXSwG5/f1wnvkqlQ74="
},
"alfresco-js-api": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/alfresco-js-api/-/alfresco-js-api-2.0.0.tgz",
- "integrity": "sha512-BQgHq10PCFBcRwCyqUp4GuvUh/acJxKc2GF59mT7uQ7xEPwDH0mkmXotFjuUVw1qAJYQVn/3YxO0ezxa6ph31A==",
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/alfresco-js-api/-/alfresco-js-api-2.2.0.tgz",
+ "integrity": "sha512-lskswsRQSulpn8xLC5znj41k0FxJ6KwYh8OuTBytoA47/dT65lmA6CXQAL6et7NKWLcwByfdY+2quDrCt3Dgwg==",
"requires": {
"event-emitter": "0.3.4",
- "superagent": "3.4.1"
+ "superagent": "3.8.2"
}
},
"align-text": {
@@ -682,9 +714,9 @@
"dev": true
},
"ansi-styles": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz",
- "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==",
+ "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.1"
@@ -739,13 +771,13 @@
"dev": true,
"requires": {
"delegates": "1.0.0",
- "readable-stream": "2.3.3"
+ "readable-stream": "2.3.5"
}
},
"argparse": {
- "version": "1.0.9",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz",
- "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=",
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
"dev": true,
"requires": {
"sprintf-js": "1.0.3"
@@ -865,9 +897,9 @@
"dev": true
},
"asn1.js": {
- "version": "4.9.2",
- "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.9.2.tgz",
- "integrity": "sha512-b/OsSjvWEo8Pi8H0zsDd2P6Uqo2TK2pH8gNLSJtNLM2Db0v2QaAZ0pBQJXVjAn4gBuugeVDr7s63ZogpUIwWDg==",
+ "version": "4.10.1",
+ "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz",
+ "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==",
"dev": true,
"requires": {
"bn.js": "4.11.8",
@@ -897,9 +929,9 @@
"dev": true
},
"ast-types": {
- "version": "0.10.1",
- "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.10.1.tgz",
- "integrity": "sha512-UY7+9DPzlJ9VM8eY0b2TUZcZvF+1pO0hzMtAyjBYKhOmnvRlqYNYnWdtsMj0V16CGaMlpL0G1jnLbLo4AyotuQ==",
+ "version": "0.11.3",
+ "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.11.3.tgz",
+ "integrity": "sha512-XA5o5dsNw8MhyW0Q7MWXJWc4oOzZKbdsEJq45h7c8q/d9DwWZ5F2ugUc1PuMLPGsUnphCt/cNDHu8JeBbxf1qA==",
"dev": true,
"optional": true
},
@@ -926,7 +958,7 @@
"integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==",
"dev": true,
"requires": {
- "lodash": "4.17.4"
+ "lodash": "4.17.5"
}
},
"async-each": {
@@ -960,16 +992,16 @@
"dev": true
},
"autoprefixer": {
- "version": "7.2.5",
- "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-7.2.5.tgz",
- "integrity": "sha512-XqHfo8Ht0VU+T5P+eWEVoXza456KJ4l62BPewu3vpNf3LP9s2+zYXkXBznzYby4XeECXgG3N4i+hGvOhXErZmA==",
+ "version": "7.2.6",
+ "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-7.2.6.tgz",
+ "integrity": "sha512-Iq8TRIB+/9eQ8rbGhcP7ct5cYb/3qjNYAR2SnzLCEcwF6rvVOax8+9+fccgXk4bEhQGjOZd5TLhsksmAdsbGqQ==",
"dev": true,
"requires": {
"browserslist": "2.11.3",
- "caniuse-lite": "1.0.30000792",
+ "caniuse-lite": "1.0.30000813",
"normalize-range": "0.1.2",
"num2fraction": "1.2.2",
- "postcss": "6.0.16",
+ "postcss": "6.0.19",
"postcss-value-parser": "3.3.0"
}
},
@@ -1034,9 +1066,9 @@
}
},
"babel-generator": {
- "version": "6.26.0",
- "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.0.tgz",
- "integrity": "sha1-rBriAHC3n248odMmlhMFN3TyDcU=",
+ "version": "6.26.1",
+ "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz",
+ "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==",
"dev": true,
"requires": {
"babel-messages": "6.23.0",
@@ -1044,7 +1076,7 @@
"babel-types": "6.26.0",
"detect-indent": "4.0.0",
"jsesc": "1.3.0",
- "lodash": "4.17.4",
+ "lodash": "4.17.5",
"source-map": "0.5.7",
"trim-right": "1.0.1"
},
@@ -1086,7 +1118,7 @@
"babel-traverse": "6.26.0",
"babel-types": "6.26.0",
"babylon": "6.18.0",
- "lodash": "4.17.4"
+ "lodash": "4.17.5"
}
},
"babel-traverse": {
@@ -1102,8 +1134,19 @@
"babylon": "6.18.0",
"debug": "2.6.9",
"globals": "9.18.0",
- "invariant": "2.2.2",
- "lodash": "4.17.4"
+ "invariant": "2.2.3",
+ "lodash": "4.17.5"
+ },
+ "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"
+ }
+ }
}
},
"babel-types": {
@@ -1114,7 +1157,7 @@
"requires": {
"babel-runtime": "6.26.0",
"esutils": "2.0.2",
- "lodash": "4.17.4",
+ "lodash": "4.17.5",
"to-fast-properties": "1.0.3"
}
},
@@ -1146,10 +1189,19 @@
"component-emitter": "1.2.1",
"define-property": "1.0.0",
"isobject": "3.0.1",
- "mixin-deep": "1.3.0",
+ "mixin-deep": "1.3.1",
"pascalcase": "0.1.1"
},
"dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "1.0.2"
+ }
+ },
"isobject": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
@@ -1165,9 +1217,9 @@
"dev": true
},
"base64-js": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.1.tgz",
- "integrity": "sha512-dwVUVIXsBZXwTuwnXI9RK8sBmgq09NDHzyR9SAph9eqk76gKK2JSQmZARC2zRC81JC2QTtxD0ARU5qTS25gIGw==",
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.3.tgz",
+ "integrity": "sha512-MsAhsUW1GxCdgYSO6tAfZrNapmUKk7mWx/k5mFY/A1gBtkaCaNapTg+FExCw1r9yeaZhqx/xPg43xgTFH6KL5w==",
"dev": true
},
"base64id": {
@@ -1232,6 +1284,13 @@
"readable-stream": "2.0.6"
},
"dependencies": {
+ "process-nextick-args": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz",
+ "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=",
+ "dev": true,
+ "optional": true
+ },
"readable-stream": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz",
@@ -1316,7 +1375,18 @@
"on-finished": "2.3.0",
"qs": "6.5.1",
"raw-body": "2.3.2",
- "type-is": "1.6.15"
+ "type-is": "1.6.16"
+ },
+ "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"
+ }
+ }
}
},
"bonjour": {
@@ -1329,7 +1399,7 @@
"deep-equal": "1.0.1",
"dns-equal": "1.0.0",
"dns-txt": "2.0.2",
- "multicast-dns": "6.2.2",
+ "multicast-dns": "6.2.3",
"multicast-dns-service-types": "1.1.0"
}
},
@@ -1348,10 +1418,37 @@
"hoek": "2.16.3"
}
},
+ "bounce": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/bounce/-/bounce-1.2.0.tgz",
+ "integrity": "sha512-8syCGe8B2/WC53118/F/tFy5aW00j+eaGPXmAUP7iBhxc+EBZZxS1vKelWyBCH6IqojgS2t1gF0glH30qAJKEw==",
+ "dev": true,
+ "requires": {
+ "boom": "7.2.0",
+ "hoek": "5.0.3"
+ },
+ "dependencies": {
+ "boom": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/boom/-/boom-7.2.0.tgz",
+ "integrity": "sha1-K/8kpVVldn/ehp7ICDF+sQxI6WY=",
+ "dev": true,
+ "requires": {
+ "hoek": "5.0.3"
+ }
+ },
+ "hoek": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/hoek/-/hoek-5.0.3.tgz",
+ "integrity": "sha512-Bmr56pxML1c9kU+NS51SMFkiVQAb+9uFfXwyqR2tn4w2FPvmPt65eZ9aCcEfRXd9G74HkZnILC6p967pED4aiw==",
+ "dev": true
+ }
+ }
+ },
"brace-expansion": {
- "version": "1.1.8",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz",
- "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=",
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
"requires": {
"balanced-match": "1.0.0",
"concat-map": "0.0.1"
@@ -1375,9 +1472,9 @@
"dev": true
},
"browser-pack": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/browser-pack/-/browser-pack-6.0.3.tgz",
- "integrity": "sha512-Jo+RYsn8X8OhyP9tMXXg0ueR2fW696HUu1Hf3/DeiwNean1oGiPtdgGRNuUHBpPHzBH3x4n1kzAlgOgHSIq88g==",
+ "version": "6.0.4",
+ "resolved": "https://registry.npmjs.org/browser-pack/-/browser-pack-6.0.4.tgz",
+ "integrity": "sha512-Q4Rvn7P6ObyWfc4stqLWHtG1MJ8vVtjgT24Zbu+8UTzxYuZouqZsmNRRTFVMY/Ux0eIKv1d+JWzsInTX+fdHPQ==",
"dev": true,
"requires": {
"JSONStream": "1.3.2",
@@ -1413,10 +1510,10 @@
"requires": {
"JSONStream": "1.3.2",
"assert": "1.4.1",
- "browser-pack": "6.0.3",
+ "browser-pack": "6.0.4",
"browser-resolve": "1.11.2",
"browserify-zlib": "0.2.0",
- "buffer": "5.0.8",
+ "buffer": "5.1.0",
"cached-path-relative": "1.0.1",
"concat-stream": "1.5.2",
"console-browserify": "1.1.0",
@@ -1432,7 +1529,7 @@
"htmlescape": "1.1.1",
"https-browserify": "1.0.0",
"inherits": "2.0.3",
- "insert-module-globals": "7.0.1",
+ "insert-module-globals": "7.0.2",
"labeled-stream-splicer": "2.0.0",
"module-deps": "4.1.1",
"os-browserify": "0.3.0",
@@ -1442,7 +1539,7 @@
"punycode": "1.4.1",
"querystring-es3": "0.2.1",
"read-only-stream": "2.0.0",
- "readable-stream": "2.3.3",
+ "readable-stream": "2.3.5",
"resolve": "1.5.0",
"shasum": "1.0.2",
"shell-quote": "1.6.1",
@@ -1450,7 +1547,7 @@
"stream-http": "2.8.0",
"string_decoder": "1.0.3",
"subarg": "1.0.0",
- "syntax-error": "1.3.0",
+ "syntax-error": "1.4.0",
"through2": "2.0.3",
"timers-browserify": "1.4.2",
"tty-browserify": "0.0.0",
@@ -1461,12 +1558,12 @@
},
"dependencies": {
"buffer": {
- "version": "5.0.8",
- "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.0.8.tgz",
- "integrity": "sha512-xXvjQhVNz50v2nPeoOsNqWCLGfiv4ji/gXZM28jnVwdLJxH4mFyqgqCKfaK9zf1KUbG6zTkjLOy7ou+jSMarGA==",
+ "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.2.1",
+ "base64-js": "1.2.3",
"ieee754": "1.1.8"
}
},
@@ -1509,6 +1606,12 @@
"integrity": "sha1-hnqksJP6oF8d4IwG9NeyH9+GmLw=",
"dev": true
},
+ "process-nextick-args": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz",
+ "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=",
+ "dev": true
+ },
"timers-browserify": {
"version": "1.4.2",
"resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-1.4.2.tgz",
@@ -1596,8 +1699,8 @@
"integrity": "sha512-yWu5cXT7Av6mVwzWc8lMsJMHWn4xyjSuGYi4IozbVTLUOEYPSagUB8kiMDUHA1fS3zjr8nkxkn9jdvug4BBRmA==",
"dev": true,
"requires": {
- "caniuse-lite": "1.0.30000792",
- "electron-to-chromium": "1.3.31"
+ "caniuse-lite": "1.0.30000813",
+ "electron-to-chromium": "1.3.37"
}
},
"buffer": {
@@ -1606,7 +1709,7 @@
"integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=",
"dev": true,
"requires": {
- "base64-js": "1.2.1",
+ "base64-js": "1.2.3",
"ieee754": "1.1.8",
"isarray": "1.0.0"
}
@@ -1664,24 +1767,24 @@
"dev": true
},
"cacache": {
- "version": "10.0.2",
- "resolved": "https://registry.npmjs.org/cacache/-/cacache-10.0.2.tgz",
- "integrity": "sha512-dljb7dk1jqO5ogE+dRpoR9tpHYv5xz9vPSNunh1+0wRuNdYxmzp9WmsyokgW/DUF1FDRVA/TMsmxt027R8djbQ==",
+ "version": "10.0.4",
+ "resolved": "https://registry.npmjs.org/cacache/-/cacache-10.0.4.tgz",
+ "integrity": "sha512-Dph0MzuH+rTQzGPNT9fAnrPmMmjKfST6trxJeK7NQuHRaVw24VzPRWTmg9MpcwOVQZO0E1FBICUlFeNaKPIfHA==",
"dev": true,
"requires": {
"bluebird": "3.5.1",
"chownr": "1.0.1",
"glob": "7.1.2",
"graceful-fs": "4.1.11",
- "lru-cache": "4.1.1",
- "mississippi": "1.3.1",
+ "lru-cache": "4.1.2",
+ "mississippi": "2.0.0",
"mkdirp": "0.5.1",
"move-concurrently": "1.0.1",
"promise-inflight": "1.0.1",
"rimraf": "2.6.2",
- "ssri": "5.1.0",
+ "ssri": "5.2.4",
"unique-filename": "1.1.0",
- "y18n": "3.2.1"
+ "y18n": "4.0.0"
}
},
"cache-base": {
@@ -1754,7 +1857,7 @@
"dev": true,
"requires": {
"browserslist": "1.7.7",
- "caniuse-db": "1.0.30000795",
+ "caniuse-db": "1.0.30000813",
"lodash.memoize": "4.1.2",
"lodash.uniq": "4.5.0"
},
@@ -1765,22 +1868,22 @@
"integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=",
"dev": true,
"requires": {
- "caniuse-db": "1.0.30000795",
- "electron-to-chromium": "1.3.31"
+ "caniuse-db": "1.0.30000813",
+ "electron-to-chromium": "1.3.37"
}
}
}
},
"caniuse-db": {
- "version": "1.0.30000795",
- "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000795.tgz",
- "integrity": "sha1-ZE8D+rAN2L0Wk+Xh5w2Gsxxc/s4=",
+ "version": "1.0.30000813",
+ "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000813.tgz",
+ "integrity": "sha1-4KHGA/iICteHsqNWUrJzPzKl4po=",
"dev": true
},
"caniuse-lite": {
- "version": "1.0.30000792",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000792.tgz",
- "integrity": "sha1-0M6pgfgRjzlhRxr7tDyaHlu/AzI=",
+ "version": "1.0.30000813",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000813.tgz",
+ "integrity": "sha512-A8ITSmH5SFdMFdC704ggjg+x2z5PzQmVlG8tavwnfvbC33Q1UYrj0+G+Xm0SNAnd4He36fwUE/KEWytOEchw+A==",
"dev": true
},
"caseless": {
@@ -1797,14 +1900,6 @@
"requires": {
"align-text": "0.1.4",
"lazy-cache": "1.0.4"
- },
- "dependencies": {
- "lazy-cache": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz",
- "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=",
- "dev": true
- }
}
},
"chalk": {
@@ -1813,7 +1908,7 @@
"integrity": "sha512-LvixLAQ4MYhbf7hgL4o5PeK32gJKvVzDRiSNIApDofQvyhl8adgG2lJVXn4+ekQoK7HL9RF8lqxwerpe0x2pCw==",
"dev": true,
"requires": {
- "ansi-styles": "3.2.0",
+ "ansi-styles": "3.2.1",
"escape-string-regexp": "1.0.5",
"supports-color": "4.5.0"
}
@@ -1824,7 +1919,7 @@
"integrity": "sha1-/m51Gok3afVucr7lrZEgfhxZKVc=",
"requires": {
"chartjs-color": "2.2.0",
- "moment": "2.15.2"
+ "moment": "2.20.1"
}
},
"chartjs-color": {
@@ -2012,9 +2107,9 @@
}
},
"clean-css": {
- "version": "4.1.9",
- "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.1.9.tgz",
- "integrity": "sha1-Nc7ornaHpJuYA09w3gDE7dOCYwE=",
+ "version": "4.1.11",
+ "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.1.11.tgz",
+ "integrity": "sha1-Ls3xRaujj1R0DybO/Q/z4D4SXWo=",
"dev": true,
"requires": {
"source-map": "0.5.7"
@@ -2038,15 +2133,15 @@
"dev": true
},
"clone-deep": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-0.3.0.tgz",
- "integrity": "sha1-NIxhrpzb4O3+BT2R/0zFIdeQ7eg=",
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-2.0.2.tgz",
+ "integrity": "sha512-SZegPTKjCgpQH63E+eN6mVEEPdQBOUzjyJm5Pora4lrwWRFS8I0QAxV/KD6vV/i0WuijHZWQC1fMsPEdxfdVCQ==",
"dev": true,
"requires": {
"for-own": "1.0.0",
"is-plain-object": "2.0.4",
- "kind-of": "3.2.2",
- "shallow-clone": "0.1.2"
+ "kind-of": "6.0.2",
+ "shallow-clone": "1.0.0"
},
"dependencies": {
"for-own": {
@@ -2057,13 +2152,20 @@
"requires": {
"for-in": "1.0.2"
}
+ },
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+ "dev": true
}
}
},
"co": {
"version": "4.6.0",
"resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
- "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ="
+ "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=",
+ "dev": true
},
"coa": {
"version": "1.0.4",
@@ -2074,6 +2176,159 @@
"q": "1.5.1"
}
},
+ "codacy-coverage": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/codacy-coverage/-/codacy-coverage-2.1.0.tgz",
+ "integrity": "sha512-KNQW7z8v1xGpXo0foeef9OTojeotB1ejHXdRLVbb3MHj9g8AmhceyFASJBO66hXtB5OqKGpZqghyy80+7st3Kw==",
+ "dev": true,
+ "requires": {
+ "bluebird": "3.5.1",
+ "commander": "2.14.1",
+ "joi": "12.0.0",
+ "lcov-parse": "1.0.0",
+ "lodash": "4.17.5",
+ "log-driver": "1.2.7",
+ "request": "2.84.0",
+ "request-promise": "4.2.2"
+ },
+ "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.1.0",
+ "fast-json-stable-stringify": "2.0.0",
+ "json-schema-traverse": "0.3.1"
+ }
+ },
+ "assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+ "dev": true
+ },
+ "aws-sign2": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
+ "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=",
+ "dev": true
+ },
+ "boom": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/boom/-/boom-7.2.0.tgz",
+ "integrity": "sha1-K/8kpVVldn/ehp7ICDF+sQxI6WY=",
+ "dev": true,
+ "requires": {
+ "hoek": "5.0.3"
+ }
+ },
+ "cryptiles": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-4.1.1.tgz",
+ "integrity": "sha512-YuQUPbcOmaZsdvxJZ25DCA1W+lLIRoPJKBDKin+St1RCYEERSfoe1d25B1MvWNHN3e8SpFSVsqYvEUjp8J9H2w==",
+ "dev": true,
+ "requires": {
+ "boom": "7.2.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.0.3",
+ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz",
+ "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=",
+ "dev": true,
+ "requires": {
+ "ajv": "5.5.2",
+ "har-schema": "2.0.0"
+ }
+ },
+ "hawk": {
+ "version": "7.0.7",
+ "resolved": "https://registry.npmjs.org/hawk/-/hawk-7.0.7.tgz",
+ "integrity": "sha512-Vr0JSJCDO3wajpu/YDTArTPPloLFhkzj7s45HYDP+tJuleTYKcTplbVT4+xx6YHzOxD1GBUisxCSz9u58eOOSA==",
+ "dev": true,
+ "requires": {
+ "boom": "7.2.0",
+ "cryptiles": "4.1.1",
+ "hoek": "5.0.3",
+ "sntp": "3.0.1"
+ }
+ },
+ "hoek": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/hoek/-/hoek-5.0.3.tgz",
+ "integrity": "sha512-Bmr56pxML1c9kU+NS51SMFkiVQAb+9uFfXwyqR2tn4w2FPvmPt65eZ9aCcEfRXd9G74HkZnILC6p967pED4aiw==",
+ "dev": true
+ },
+ "http-signature": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
+ "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "1.0.0",
+ "jsprim": "1.4.1",
+ "sshpk": "1.13.1"
+ }
+ },
+ "performance-now": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
+ "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=",
+ "dev": true
+ },
+ "request": {
+ "version": "2.84.0",
+ "resolved": "https://registry.npmjs.org/request/-/request-2.84.0.tgz",
+ "integrity": "sha512-+arBW9+9rg/X6TeMxseqWVdPF1AT3KQ7cEEC4mmkdrbC6pQ6m7+iKzfU6vZ21cBD0MbygN2sn15PzwlLkZ2xpw==",
+ "dev": true,
+ "requires": {
+ "aws-sign2": "0.7.0",
+ "aws4": "1.6.0",
+ "caseless": "0.12.0",
+ "combined-stream": "1.0.6",
+ "extend": "3.0.1",
+ "forever-agent": "0.6.1",
+ "form-data": "2.3.2",
+ "har-validator": "5.0.3",
+ "hawk": "7.0.7",
+ "http-signature": "1.2.0",
+ "is-typedarray": "1.0.0",
+ "isstream": "0.1.2",
+ "json-stringify-safe": "5.0.1",
+ "mime-types": "2.1.18",
+ "oauth-sign": "0.8.2",
+ "performance-now": "2.1.0",
+ "qs": "6.5.1",
+ "safe-buffer": "5.1.1",
+ "stringstream": "0.0.5",
+ "tough-cookie": "2.3.4",
+ "tunnel-agent": "0.6.0",
+ "uuid": "3.2.1"
+ }
+ },
+ "sntp": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/sntp/-/sntp-3.0.1.tgz",
+ "integrity": "sha512-k2SIWd9c1dBRDLalpr2Ioc64bPxTpmUwSsQi+w7CLdizUIvGrbUZloEHw5I6VeqCKNWjL9p7n+LdtD5XQXJMbw==",
+ "dev": true,
+ "requires": {
+ "boom": "7.2.0",
+ "bounce": "1.2.0",
+ "hoek": "5.0.3",
+ "teamwork": "3.0.1"
+ }
+ }
+ }
+ },
"code-point-at": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
@@ -2081,9 +2336,9 @@
"dev": true
},
"codelyzer": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/codelyzer/-/codelyzer-4.1.0.tgz",
- "integrity": "sha512-a3FCIAS3FNQIACvj7KA4iKvH3c6r7X6t6zXsrtV797QGYPQyCwD1fIEd9yV+ZDamijF3YaZ5fbB7QbUMOJGC/g==",
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/codelyzer/-/codelyzer-4.2.1.tgz",
+ "integrity": "sha512-CKwfgpfkqi9dyzy4s6ELaxJ54QgJ6A8iTSsM4bzHbLuTpbKncvNc3DUlCvpnkHBhK47gEf4qFsWoYqLrJPhy6g==",
"dev": true,
"requires": {
"app-root-path": "2.0.1",
@@ -2168,7 +2423,7 @@
"integrity": "sha1-RYwH4J4NkA/Ci3Cj/sLazR0st/Y=",
"dev": true,
"requires": {
- "lodash": "4.17.4"
+ "lodash": "4.17.5"
}
},
"combine-source-map": {
@@ -2198,17 +2453,17 @@
}
},
"combined-stream": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz",
- "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=",
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz",
+ "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=",
"requires": {
"delayed-stream": "1.0.0"
}
},
"commander": {
- "version": "2.12.2",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.12.2.tgz",
- "integrity": "sha512-BFnaq5ZOGcDN7FlrtBT4xxkgIToalIIxwjxLWVJ8bGTpe1LroqMiqQXdA7ygc7CRvaYS+9zfPGFnJqFSayx+AA==",
+ "version": "2.14.1",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.14.1.tgz",
+ "integrity": "sha512-+YR16o3rK53SmWHU3rEM3tPAh2rwb1yPcQX5irVn7mb0gXbwuCCrnkbV5+PBfETdfg1vui07nM6PCG1zndcjQw==",
"dev": true
},
"common-tags": {
@@ -2226,6 +2481,12 @@
"integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=",
"dev": true
},
+ "compare-versions": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.1.0.tgz",
+ "integrity": "sha512-4hAxDSBypT/yp2ySFD346So6Ragw5xmBn/e/agIGl3bZr6DLUqnoRZPusxKrXdYRZpgexO9daejmIenlq/wrIQ==",
+ "dev": true
+ },
"component-bind": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz",
@@ -2244,27 +2505,38 @@
"dev": true
},
"compressible": {
- "version": "2.0.12",
- "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.12.tgz",
- "integrity": "sha1-xZpcmdt2dn6YdlAOJx72OzSTvWY=",
+ "version": "2.0.13",
+ "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.13.tgz",
+ "integrity": "sha1-DRAgq5JLL9tNYnmHXH1tq6a6p6k=",
"dev": true,
"requires": {
- "mime-db": "1.30.0"
+ "mime-db": "1.33.0"
}
},
"compression": {
- "version": "1.7.1",
- "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.1.tgz",
- "integrity": "sha1-7/JgPvwuIs+G810uuTWJ+YdTc9s=",
+ "version": "1.7.2",
+ "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.2.tgz",
+ "integrity": "sha1-qv+81qr4VLROuygDU9WtFlH1mmk=",
"dev": true,
"requires": {
- "accepts": "1.3.4",
+ "accepts": "1.3.5",
"bytes": "3.0.0",
- "compressible": "2.0.12",
+ "compressible": "2.0.13",
"debug": "2.6.9",
"on-headers": "1.0.1",
"safe-buffer": "5.1.1",
"vary": "1.1.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"
+ }
+ }
}
},
"concat-map": {
@@ -2273,41 +2545,35 @@
"integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
},
"concat-stream": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz",
- "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=",
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.1.tgz",
+ "integrity": "sha512-gslSSJx03QKa59cIKqeJO9HQ/WZMotvYJCuaUULrLpjj8oG40kV2Z+gz82pVxlTkOADi4PJxQPPfhl1ELYrrXw==",
"dev": true,
"requires": {
"inherits": "2.0.3",
- "readable-stream": "2.3.3",
+ "readable-stream": "2.3.5",
"typedarray": "0.0.6"
}
},
"connect": {
- "version": "3.6.5",
- "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.5.tgz",
- "integrity": "sha1-+43ee6B2OHfQ7J352sC0tA5yx9o=",
+ "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.0.6",
+ "finalhandler": "1.1.0",
"parseurl": "1.3.2",
"utils-merge": "1.0.1"
},
"dependencies": {
- "finalhandler": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.0.6.tgz",
- "integrity": "sha1-AHrqM9Gk0+QgF/YkhIrVjSEvgU8=",
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
"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.3.1",
- "unpipe": "1.0.0"
+ "ms": "2.0.0"
}
}
}
@@ -2395,20 +2661,18 @@
"dev": true
},
"copy-webpack-plugin": {
- "version": "4.3.1",
- "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-4.3.1.tgz",
- "integrity": "sha512-xlcFiW/U7KrpS6dFuWq3r8Wb7koJx7QVc7LDFCosqkikaVSxkaYOnwDLwilbjrszZ0LYZXThDAJKcQCSrvdShQ==",
+ "version": "4.5.1",
+ "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-4.5.1.tgz",
+ "integrity": "sha512-OlTo6DYg0XfTKOF8eLf79wcHm4Ut10xU2cRBRPMW/NA5F9VMjZGTfRHWDIYC3s+1kObGYrBLshXWU1K0hILkNQ==",
"dev": true,
"requires": {
- "cacache": "10.0.2",
+ "cacache": "10.0.4",
"find-cache-dir": "1.0.0",
"globby": "7.1.1",
"is-glob": "4.0.0",
- "loader-utils": "0.2.17",
- "lodash": "4.17.4",
+ "loader-utils": "1.1.0",
"minimatch": "3.0.4",
"p-limit": "1.2.0",
- "pify": "3.0.0",
"serialize-javascript": "1.4.0"
},
"dependencies": {
@@ -2426,18 +2690,6 @@
"requires": {
"is-extglob": "2.1.1"
}
- },
- "loader-utils": {
- "version": "0.2.17",
- "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz",
- "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=",
- "dev": true,
- "requires": {
- "big.js": "3.2.0",
- "emojis-list": "2.1.0",
- "json5": "0.5.1",
- "object-assign": "4.1.1"
- }
}
}
},
@@ -2526,7 +2778,7 @@
"dev": true,
"optional": true,
"requires": {
- "lru-cache": "4.1.1",
+ "lru-cache": "4.1.2",
"which": "1.3.0"
}
},
@@ -2555,7 +2807,7 @@
"pbkdf2": "3.0.14",
"public-encrypt": "4.0.0",
"randombytes": "2.0.6",
- "randomfill": "1.0.3"
+ "randomfill": "1.0.4"
}
},
"css-color-names": {
@@ -2565,9 +2817,9 @@
"dev": true
},
"css-loader": {
- "version": "0.28.9",
- "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-0.28.9.tgz",
- "integrity": "sha512-r3dgelMm/mkPz5Y7m9SeiGE46i2VsEU/OYbez+1llfxtv8b2y5/b5StaeEvPK3S5tlNQI+tDW/xDIhKJoZgDtw==",
+ "version": "0.28.10",
+ "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-0.28.10.tgz",
+ "integrity": "sha512-X1IJteKnW9Llmrd+lJ0f7QZHh9Arf+11S7iRcoT2+riig3BK0QaCaOtubAulMK6Itbo08W6d3l8sW21r+Jhp5Q==",
"dev": true,
"requires": {
"babel-code-frame": "6.26.0",
@@ -2626,7 +2878,7 @@
"dev": true,
"requires": {
"chalk": "1.1.3",
- "js-base64": "2.4.2",
+ "js-base64": "2.4.3",
"source-map": "0.5.7",
"supports-color": "3.2.3"
}
@@ -2745,7 +2997,7 @@
"dev": true,
"requires": {
"browserslist": "1.7.7",
- "caniuse-db": "1.0.30000795",
+ "caniuse-db": "1.0.30000813",
"normalize-range": "0.1.2",
"num2fraction": "1.2.2",
"postcss": "5.2.18",
@@ -2758,8 +3010,8 @@
"integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=",
"dev": true,
"requires": {
- "caniuse-db": "1.0.30000795",
- "electron-to-chromium": "1.3.31"
+ "caniuse-db": "1.0.30000813",
+ "electron-to-chromium": "1.3.37"
}
},
"chalk": {
@@ -2796,7 +3048,7 @@
"dev": true,
"requires": {
"chalk": "1.1.3",
- "js-base64": "2.4.2",
+ "js-base64": "2.4.3",
"source-map": "0.5.7",
"supports-color": "3.2.3"
}
@@ -2854,7 +3106,7 @@
"resolved": "https://registry.npmjs.org/d/-/d-0.1.1.tgz",
"integrity": "sha1-2hhMU10Y2O57oqoim5FACfrhEwk=",
"requires": {
- "es5-ext": "0.10.38"
+ "es5-ext": "0.10.40"
}
},
"dashdash": {
@@ -2894,9 +3146,9 @@
"dev": true
},
"debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "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"
}
@@ -2946,12 +3198,21 @@
}
},
"define-property": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
- "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "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"
+ "is-descriptor": "1.0.2",
+ "isobject": "3.0.1"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ }
}
},
"defined": {
@@ -2967,8 +3228,8 @@
"dev": true,
"optional": true,
"requires": {
- "ast-types": "0.10.1",
- "escodegen": "1.9.0",
+ "ast-types": "0.11.3",
+ "escodegen": "1.9.1",
"esprima": "3.1.3"
},
"dependencies": {
@@ -3090,7 +3351,7 @@
"integrity": "sha512-H6PmeeUcZloWtdt4DAkFyzFL94arpHr3NOwwmVILFiy+9Qd4JTxxXrzfyGk/lmct2qVGBwTSwSXagqu2BxmWig==",
"dev": true,
"requires": {
- "acorn": "5.3.0",
+ "acorn": "5.5.3",
"defined": "1.0.0"
}
},
@@ -3101,9 +3362,9 @@
"dev": true
},
"diff": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/diff/-/diff-3.4.0.tgz",
- "integrity": "sha512-QpVuMTEoJMF7cKzi6bvWhRulU1fZqZnvyVQgNhPaxxuTYwyjn/j1v9falseQ/uXWwPnO56RBfwtg4h/EQXmucA==",
+ "version": "3.5.0",
+ "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz",
+ "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==",
"dev": true
},
"diffie-hellman": {
@@ -3243,18 +3504,18 @@
"integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=",
"dev": true,
"requires": {
- "readable-stream": "2.3.3"
+ "readable-stream": "2.3.5"
}
},
"duplexify": {
- "version": "3.5.3",
- "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.5.3.tgz",
- "integrity": "sha512-g8ID9OroF9hKt2POf8YLayy+9594PzmM3scI00/uBXocX3TWNgoB67hjzkFe9ITAbQOne/lLdBxHXvYUM4ZgGA==",
+ "version": "3.5.4",
+ "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.5.4.tgz",
+ "integrity": "sha512-JzYSLYMhoVVBe8+mbHQ4KgpvHpm0DZpJuL8PY93Vyv1fW7jYJ90LoXa1di/CVbJM+TgMs91rbDapE/RNIfnJsA==",
"dev": true,
"requires": {
"end-of-stream": "1.4.1",
"inherits": "2.0.3",
- "readable-stream": "2.3.3",
+ "readable-stream": "2.3.5",
"stream-shift": "1.0.0"
}
},
@@ -3281,9 +3542,9 @@
"dev": true
},
"electron-to-chromium": {
- "version": "1.3.31",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.31.tgz",
- "integrity": "sha512-XE4CLbswkZgZFn34cKFy1xaX+F5LHxeDLjY1+rsK9asDzknhbrd9g/n/01/acbU25KTsUSiLKwvlLyA+6XLUOA==",
+ "version": "1.3.37",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.37.tgz",
+ "integrity": "sha1-SpJzTgBEyM8LFVO+V+riGkxuX6s=",
"dev": true
},
"elliptic": {
@@ -3328,41 +3589,29 @@
}
},
"engine.io": {
- "version": "3.1.4",
- "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.1.4.tgz",
- "integrity": "sha1-PQIRtwpVLOhB/8fahiezAamkFi4=",
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.1.5.tgz",
+ "integrity": "sha512-D06ivJkYxyRrcEe0bTpNnBQNgP9d3xog+qZlLbui8EsMr/DouQpf5o9FzJnWYHEYE0YsFHllUv2R1dkgYZXHcA==",
"dev": true,
"requires": {
- "accepts": "1.3.3",
+ "accepts": "1.3.5",
"base64id": "1.0.0",
"cookie": "0.3.1",
- "debug": "2.6.9",
+ "debug": "3.1.0",
"engine.io-parser": "2.1.2",
- "uws": "0.14.5",
+ "uws": "9.14.0",
"ws": "3.3.3"
- },
- "dependencies": {
- "accepts": {
- "version": "1.3.3",
- "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.3.tgz",
- "integrity": "sha1-w8p0NJOGSMPg2cHjKN1otiLChMo=",
- "dev": true,
- "requires": {
- "mime-types": "2.1.17",
- "negotiator": "0.6.1"
- }
- }
}
},
"engine.io-client": {
- "version": "3.1.4",
- "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.1.4.tgz",
- "integrity": "sha1-T88TcLRxY70s6b4nM5ckMDUNTqE=",
+ "version": "3.1.6",
+ "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.1.6.tgz",
+ "integrity": "sha512-hnuHsFluXnsKOndS4Hv6SvUrgdYx1pk2NqfaDMW+GWdgfU3+/V25Cj7I8a0x92idSpa5PIhJRKxPvp9mnoLsfg==",
"dev": true,
"requires": {
"component-emitter": "1.2.1",
"component-inherit": "0.0.3",
- "debug": "2.6.9",
+ "debug": "3.1.0",
"engine.io-parser": "2.1.2",
"has-cors": "1.1.0",
"indexof": "0.0.1",
@@ -3411,9 +3660,9 @@
"dev": true
},
"errno": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.6.tgz",
- "integrity": "sha512-IsORQDpaaSwcDP4ZZnHxgE85werpo34VYn1Ud3mq+eUsF593faR8oCZNXrROVkpFu2TsbrNhHin0aUrTsQ9vNw==",
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz",
+ "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==",
"dev": true,
"requires": {
"prr": "1.0.1"
@@ -3453,9 +3702,9 @@
}
},
"es5-ext": {
- "version": "0.10.38",
- "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.38.tgz",
- "integrity": "sha512-jCMyePo7AXbUESwbl8Qi01VSH2piY9s/a3rSU/5w/MlTIx8HPL1xn2InGN8ejt/xulcJgnTO7vqNtOAxzYd2Kg==",
+ "version": "0.10.40",
+ "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.40.tgz",
+ "integrity": "sha512-S9Fh3oya5OOvYSNGvPZJ+vyrs6VYpe1IXPowVe3N1OhaiwVaGlwfn3Zf5P5klYcWOA0toIwYQW8XEv/QqhdHvQ==",
"requires": {
"es6-iterator": "2.0.3",
"es6-symbol": "3.1.1"
@@ -3467,7 +3716,7 @@
"integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=",
"requires": {
"d": "1.0.0",
- "es5-ext": "0.10.38",
+ "es5-ext": "0.10.40",
"es6-symbol": "3.1.1"
},
"dependencies": {
@@ -3476,7 +3725,7 @@
"resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz",
"integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=",
"requires": {
- "es5-ext": "0.10.38"
+ "es5-ext": "0.10.40"
}
}
}
@@ -3488,7 +3737,7 @@
"dev": true,
"requires": {
"d": "1.0.0",
- "es5-ext": "0.10.38",
+ "es5-ext": "0.10.40",
"es6-iterator": "2.0.3",
"es6-set": "0.1.5",
"es6-symbol": "3.1.1",
@@ -3501,7 +3750,7 @@
"integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=",
"dev": true,
"requires": {
- "es5-ext": "0.10.38"
+ "es5-ext": "0.10.40"
}
},
"event-emitter": {
@@ -3511,7 +3760,7 @@
"dev": true,
"requires": {
"d": "1.0.0",
- "es5-ext": "0.10.38"
+ "es5-ext": "0.10.40"
}
}
}
@@ -3523,7 +3772,7 @@
"dev": true,
"requires": {
"d": "1.0.0",
- "es5-ext": "0.10.38",
+ "es5-ext": "0.10.40",
"es6-iterator": "2.0.3",
"es6-symbol": "3.1.1",
"event-emitter": "0.3.5"
@@ -3535,7 +3784,7 @@
"integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=",
"dev": true,
"requires": {
- "es5-ext": "0.10.38"
+ "es5-ext": "0.10.40"
}
},
"event-emitter": {
@@ -3545,7 +3794,7 @@
"dev": true,
"requires": {
"d": "1.0.0",
- "es5-ext": "0.10.38"
+ "es5-ext": "0.10.40"
}
}
}
@@ -3556,7 +3805,7 @@
"integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=",
"requires": {
"d": "1.0.0",
- "es5-ext": "0.10.38"
+ "es5-ext": "0.10.40"
},
"dependencies": {
"d": {
@@ -3564,7 +3813,7 @@
"resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz",
"integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=",
"requires": {
- "es5-ext": "0.10.38"
+ "es5-ext": "0.10.40"
}
}
}
@@ -3576,7 +3825,7 @@
"dev": true,
"requires": {
"d": "1.0.0",
- "es5-ext": "0.10.38",
+ "es5-ext": "0.10.40",
"es6-iterator": "2.0.3",
"es6-symbol": "3.1.1"
},
@@ -3587,7 +3836,7 @@
"integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=",
"dev": true,
"requires": {
- "es5-ext": "0.10.38"
+ "es5-ext": "0.10.40"
}
}
}
@@ -3605,9 +3854,9 @@
"dev": true
},
"escodegen": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.0.tgz",
- "integrity": "sha512-v0MYvNQ32bzwoG2OSFzWAkuahDQHK92JBN0pTAALJ4RIxEZe766QJPDR8Hqy7XNUy5K3fnVL76OqYAdc4TZEIw==",
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.1.tgz",
+ "integrity": "sha512-6hTjO1NAWkHnDk3OqQ4YrCuwwmGHL9S3nPlzBOUG/R44rda3wLNrfvQ5fkSGjyhHFKM7ALPKcKGrwvCLe0lC7Q==",
"dev": true,
"optional": true,
"requires": {
@@ -3615,7 +3864,7 @@
"estraverse": "4.2.0",
"esutils": "2.0.2",
"optionator": "0.8.2",
- "source-map": "0.5.7"
+ "source-map": "0.6.1"
},
"dependencies": {
"esprima": {
@@ -3624,6 +3873,13 @@
"integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=",
"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,
+ "optional": true
}
}
},
@@ -3635,7 +3891,7 @@
"requires": {
"es6-map": "0.1.5",
"es6-weak-map": "2.0.2",
- "esrecurse": "4.2.0",
+ "esrecurse": "4.2.1",
"estraverse": "4.2.0"
}
},
@@ -3646,13 +3902,12 @@
"dev": true
},
"esrecurse": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.0.tgz",
- "integrity": "sha1-+pVo2Y04I/mkHZHpAtyrnqblsWM=",
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz",
+ "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==",
"dev": true,
"requires": {
- "estraverse": "4.2.0",
- "object-assign": "4.1.1"
+ "estraverse": "4.2.0"
}
},
"estraverse": {
@@ -3684,7 +3939,7 @@
"integrity": "sha1-jWPd+0z+H647MsomXExyAiIIC7U=",
"requires": {
"d": "0.1.1",
- "es5-ext": "0.10.38"
+ "es5-ext": "0.10.40"
}
},
"eventemitter3": {
@@ -3739,7 +3994,7 @@
"integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
"dev": true,
"requires": {
- "lru-cache": "4.1.1",
+ "lru-cache": "4.1.2",
"shebang-command": "1.2.0",
"which": "1.3.0"
}
@@ -3830,7 +4085,7 @@
"integrity": "sha1-41xt/i1kt9ygpc1PIXgb4ymeB2w=",
"dev": true,
"requires": {
- "accepts": "1.3.4",
+ "accepts": "1.3.5",
"array-flatten": "1.1.1",
"body-parser": "1.18.2",
"content-disposition": "0.5.2",
@@ -3849,7 +4104,7 @@
"on-finished": "2.3.0",
"parseurl": "1.3.2",
"path-to-regexp": "0.1.7",
- "proxy-addr": "2.0.2",
+ "proxy-addr": "2.0.3",
"qs": "6.5.1",
"range-parser": "1.2.0",
"safe-buffer": "5.1.1",
@@ -3857,7 +4112,7 @@
"serve-static": "1.13.1",
"setprototypeof": "1.1.0",
"statuses": "1.3.1",
- "type-is": "1.6.15",
+ "type-is": "1.6.16",
"utils-merge": "1.0.1",
"vary": "1.1.2"
},
@@ -3867,6 +4122,15 @@
"resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
"integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=",
"dev": true
+ },
+ "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"
+ }
}
}
},
@@ -3876,12 +4140,24 @@
"integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ="
},
"extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
"dev": true,
"requires": {
- "is-extendable": "0.1.1"
+ "assign-symbols": "1.0.0",
+ "is-extendable": "1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "2.0.4"
+ }
+ }
}
},
"extglob": {
@@ -3903,6 +4179,29 @@
"loader-utils": "1.1.0",
"schema-utils": "0.3.0",
"webpack-sources": "1.1.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.1.0",
+ "fast-json-stable-stringify": "2.0.0",
+ "json-schema-traverse": "0.3.1"
+ }
+ },
+ "schema-utils": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.3.0.tgz",
+ "integrity": "sha1-9YdyIs4+kx7a4DnxfrNxbnE3+M8=",
+ "dev": true,
+ "requires": {
+ "ajv": "5.5.2"
+ }
+ }
}
},
"extsprintf": {
@@ -3912,9 +4211,9 @@
"dev": true
},
"fast-deep-equal": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz",
- "integrity": "sha1-liVqO8l1WV6zbYLpkp0GDYk0Of8="
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz",
+ "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ="
},
"fast-json-stable-stringify": {
"version": "2.0.0",
@@ -3944,13 +4243,13 @@
}
},
"file-loader": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-1.1.6.tgz",
- "integrity": "sha512-873ztuL+/hfvXbLDJ262PGO6XjERnybJu2gW1/5j8HUfxSiFJI9Hj/DhZ50ZGRUxBvuNiazb/cM2rh9pqrxP6Q==",
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-1.1.11.tgz",
+ "integrity": "sha512-TGR4HU7HUsGg6GCOPJnFk06RhWgEWFLAGWiT6rcD+GRC2keU3s9RGJ+b3Z6/U73jwwNb2gKLJ7YCrp+jvU4ALg==",
"dev": true,
"requires": {
"loader-utils": "1.1.0",
- "schema-utils": "0.3.0"
+ "schema-utils": "0.4.5"
}
},
"file-uri-to-path": {
@@ -4002,6 +4301,17 @@
"parseurl": "1.3.2",
"statuses": "1.3.1",
"unpipe": "1.0.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"
+ }
+ }
}
},
"find-cache-dir": {
@@ -4011,7 +4321,7 @@
"dev": true,
"requires": {
"commondir": "1.0.1",
- "make-dir": "1.1.0",
+ "make-dir": "1.2.0",
"pkg-dir": "2.0.0"
}
},
@@ -4037,7 +4347,7 @@
"dev": true,
"requires": {
"inherits": "2.0.3",
- "readable-stream": "2.3.3"
+ "readable-stream": "2.3.5"
}
},
"follow-redirects": {
@@ -4048,6 +4358,18 @@
"optional": true,
"requires": {
"debug": "2.6.9"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ }
}
},
"for-in": {
@@ -4078,19 +4400,19 @@
"dev": true
},
"form-data": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.1.tgz",
- "integrity": "sha1-b7lPvXGIUwbXPRXMSX/kzE7NRL8=",
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz",
+ "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=",
"requires": {
"asynckit": "0.4.0",
- "combined-stream": "1.0.5",
- "mime-types": "2.1.17"
+ "combined-stream": "1.0.6",
+ "mime-types": "2.1.18"
}
},
"formidable": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.1.1.tgz",
- "integrity": "sha1-lriIb3w8NQi5Mta9cMTTqI818ak="
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.0.tgz",
+ "integrity": "sha512-hr9aT30rAi7kf8Q2aaTpSP7xGMhlJ+MdrUDVZs3rxbD3L/K46A86s2VY7qC2D2kGYGBtiT/3j6wTx1eeUq5xAQ=="
},
"forwarded": {
"version": "0.1.2",
@@ -4120,7 +4442,7 @@
"dev": true,
"requires": {
"inherits": "2.0.3",
- "readable-stream": "2.3.3"
+ "readable-stream": "2.3.5"
}
},
"fs-access": {
@@ -4152,7 +4474,7 @@
"graceful-fs": "4.1.11",
"iferr": "0.1.5",
"imurmurhash": "0.1.4",
- "readable-stream": "2.3.3"
+ "readable-stream": "2.3.5"
}
},
"fs.realpath": {
@@ -4168,7 +4490,7 @@
"dev": true,
"optional": true,
"requires": {
- "nan": "2.8.0",
+ "nan": "2.9.2",
"node-pre-gyp": "0.6.39"
},
"dependencies": {
@@ -5196,7 +5518,19 @@
"extend": "3.0.1",
"file-uri-to-path": "1.0.0",
"ftp": "0.3.10",
- "readable-stream": "2.3.3"
+ "readable-stream": "2.3.5"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ }
}
},
"get-value": {
@@ -5283,7 +5617,7 @@
"optional": true,
"requires": {
"glob": "7.1.2",
- "lodash": "4.17.4",
+ "lodash": "4.17.5",
"minimatch": "3.0.4"
}
},
@@ -5571,7 +5905,7 @@
"dev": true,
"optional": true,
"requires": {
- "lodash": "4.17.4",
+ "lodash": "4.17.5",
"request": "2.81.0"
}
},
@@ -5602,9 +5936,9 @@
}
},
"hosted-git-info": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.5.0.tgz",
- "integrity": "sha512-pNgbURSuab90KbTqvRPsseaTxOJCZBD0a7t+haSN33piP9cCM4l0CqdzAif2hUqm716UovKB2ROmiabGAKVXyg==",
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.6.0.tgz",
+ "integrity": "sha512-lIbgIIQA3lz5XaB6vxakj6sDHADJiZadYEJB+FgA+C4nubM1NwcuvUr9EJPmnH1skZqpqUzWborWo8EIUi0Sdw==",
"dev": true
},
"hpack.js": {
@@ -5614,9 +5948,9 @@
"dev": true,
"requires": {
"inherits": "2.0.3",
- "obuf": "1.1.1",
- "readable-stream": "2.3.3",
- "wbuf": "1.7.2"
+ "obuf": "1.1.2",
+ "readable-stream": "2.3.5",
+ "wbuf": "1.7.3"
}
},
"html-comment-regex": {
@@ -5632,19 +5966,19 @@
"dev": true
},
"html-minifier": {
- "version": "3.5.8",
- "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.8.tgz",
- "integrity": "sha512-WX7D6PB9PFq05fZ1/CyxPUuyqXed6vh2fGOM80+zJT5wAO93D/cUjLs0CcbBFjQmlwmCgRvl97RurtArIpOnkw==",
+ "version": "3.5.10",
+ "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.10.tgz",
+ "integrity": "sha512-5c8iAyeIGAiuFhVjJ0qy1lgvyQxxuZgjeOuMnoK/wjEyy8DF3xKUnE9pO+6H7VMir976K6SGlZV8ZEmIOea/Zg==",
"dev": true,
"requires": {
"camel-case": "3.0.0",
- "clean-css": "4.1.9",
- "commander": "2.12.2",
+ "clean-css": "4.1.11",
+ "commander": "2.14.1",
"he": "1.1.1",
"ncname": "1.0.0",
"param-case": "2.1.1",
"relateurl": "0.2.7",
- "uglify-js": "3.3.8"
+ "uglify-js": "3.3.14"
}
},
"html-webpack-plugin": {
@@ -5654,9 +5988,9 @@
"dev": true,
"requires": {
"bluebird": "3.5.1",
- "html-minifier": "3.5.8",
+ "html-minifier": "3.5.10",
"loader-utils": "0.2.17",
- "lodash": "4.17.4",
+ "lodash": "4.17.5",
"pretty-error": "2.1.1",
"toposort": "1.0.6"
},
@@ -5761,9 +6095,9 @@
}
},
"http-parser-js": {
- "version": "0.4.9",
- "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.9.tgz",
- "integrity": "sha1-6hoE+2St/wJC6ZdPKX3Uw8rSceE=",
+ "version": "0.4.11",
+ "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.11.tgz",
+ "integrity": "sha512-QCR5O2AjjMW8Mo4HyI1ctFcv+O99j/0g367V3YoVnrNw5hkDvAWZD0lWGcc+F4yN3V55USPCVix4efb75HxFfA==",
"dev": true
},
"http-proxy": {
@@ -5785,6 +6119,17 @@
"agent-base": "2.1.1",
"debug": "2.6.9",
"extend": "3.0.1"
+ },
+ "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"
+ }
+ }
}
},
"http-proxy-middleware": {
@@ -5795,7 +6140,7 @@
"requires": {
"http-proxy": "1.16.2",
"is-glob": "3.1.0",
- "lodash": "4.17.4",
+ "lodash": "4.17.5",
"micromatch": "2.3.11"
},
"dependencies": {
@@ -5858,6 +6203,17 @@
"agent-base": "2.1.1",
"debug": "2.6.9",
"extend": "3.0.1"
+ },
+ "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"
+ }
+ }
}
},
"iconv-lite": {
@@ -5878,7 +6234,7 @@
"integrity": "sha1-g/Cg7DeL8yRheLbCrZE28TWxyWI=",
"dev": true,
"requires": {
- "postcss": "6.0.16"
+ "postcss": "6.0.19"
}
},
"ieee754": {
@@ -5988,9 +6344,9 @@
}
},
"insert-module-globals": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-7.0.1.tgz",
- "integrity": "sha1-wDv04BywhtW15azorQr+eInWOMM=",
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-7.0.2.tgz",
+ "integrity": "sha512-p3s7g96Nm62MbHRuj9ZXab0DuJNWD7qcmdUXCOQ/ZZn42DtDXfsLill7bq19lDCx3K3StypqUnuE3H2VmIJFUw==",
"dev": true,
"requires": {
"JSONStream": "1.3.2",
@@ -6038,6 +6394,12 @@
"integrity": "sha1-LcvSwofLwKVcxCMovQxzYVDVPj8=",
"dev": true
},
+ "process-nextick-args": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz",
+ "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=",
+ "dev": true
+ },
"readable-stream": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz",
@@ -6076,9 +6438,9 @@
"dev": true
},
"invariant": {
- "version": "2.2.2",
- "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz",
- "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=",
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.3.tgz",
+ "integrity": "sha512-7Z5PPegwDTyjbaeCnV0efcyS6vdKAU51kpEmS7QFib3P4822l8ICYyMn7qvJnc+WzLoDsuI9gPMKbJ8pCu8XtA==",
"dev": true,
"requires": {
"loose-envify": "1.3.1"
@@ -6097,9 +6459,9 @@
"dev": true
},
"ipaddr.js": {
- "version": "1.5.2",
- "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.5.2.tgz",
- "integrity": "sha1-1LUFvemUaYfM8PxY2QEP+WB+P6A=",
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.6.0.tgz",
+ "integrity": "sha1-4/o1e3c9phnybpXwSdBVxyeW+Gs=",
"dev": true
},
"is-absolute-url": {
@@ -6263,15 +6625,23 @@
"is-extglob": "1.0.0"
}
},
+ "is-my-ip-valid": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-my-ip-valid/-/is-my-ip-valid-1.0.0.tgz",
+ "integrity": "sha512-gmh/eWXROncUzRnIa1Ubrt5b8ep/MGSnfAUI3aRp+sqTCs1tv1Isl8d8F6JmkN3dXKc3ehZMrtiPN9eL03NuaQ==",
+ "dev": true,
+ "optional": true
+ },
"is-my-json-valid": {
- "version": "2.17.1",
- "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.17.1.tgz",
- "integrity": "sha512-Q2khNw+oBlWuaYvEEHtKSw/pCxD2L5Rc1C+UQme9X6JdRDh7m5D7HkozA0qa3DUkQ6VzCnEm8mVIQPyIRkI5sQ==",
+ "version": "2.17.2",
+ "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.17.2.tgz",
+ "integrity": "sha512-IBhBslgngMQN8DDSppmgDv7RNrlFotuuDsKcrCP3+HbFaVivIBU7u9oiiErw8sH4ynx3+gOGQ3q2otkgiSi6kg==",
"dev": true,
"optional": true,
"requires": {
"generate-function": "2.0.0",
"generate-object-property": "1.2.0",
+ "is-my-ip-valid": "1.0.0",
"jsonpointer": "4.0.1",
"xtend": "4.0.1"
}
@@ -6286,22 +6656,19 @@
}
},
"is-odd": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-odd/-/is-odd-1.0.0.tgz",
- "integrity": "sha1-O4qTLrAos3dcObsJ6RdnrM22kIg=",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-odd/-/is-odd-2.0.0.tgz",
+ "integrity": "sha512-OTiixgpZAT1M4NHgS5IguFp/Vz2VI3U7Goh4/HA1adtwyLtSBrxYlcSYkhpAE07s4fKEcjrFxyvtQBND4vFQyQ==",
"dev": true,
"requires": {
- "is-number": "3.0.0"
+ "is-number": "4.0.0"
},
"dependencies": {
"is-number": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
- "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
- "dev": true,
- "requires": {
- "kind-of": "3.2.2"
- }
+ "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
}
}
},
@@ -6413,6 +6780,12 @@
"integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=",
"dev": true
},
+ "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==",
+ "dev": true
+ },
"is-wsl": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz",
@@ -6430,6 +6803,23 @@
"integrity": "sha1-Sj6XTsDLqQBNP8bN5yCeppNopiE=",
"dev": true
},
+ "isemail": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/isemail/-/isemail-3.1.1.tgz",
+ "integrity": "sha512-mVjAjvdPkpwXW61agT2E9AkGoegZO7SdJGCezWwxnETL58f5KwJ4vSVAMBUL5idL6rTlYAIGkX3n4suiviMLNw==",
+ "dev": true,
+ "requires": {
+ "punycode": "2.1.0"
+ },
+ "dependencies": {
+ "punycode": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz",
+ "integrity": "sha1-X4Y+3Im5bbCQdLrXlHvwkFbKTn0=",
+ "dev": true
+ }
+ }
+ },
"isexe": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
@@ -6452,19 +6842,20 @@
"dev": true
},
"istanbul-api": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/istanbul-api/-/istanbul-api-1.2.1.tgz",
- "integrity": "sha512-oFCwXvd65amgaPCzqrR+a2XjanS1MvpXN6l/MlMUTv6uiA1NOgGX+I0uyq8Lg3GDxsxPsaP1049krz3hIJ5+KA==",
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/istanbul-api/-/istanbul-api-1.3.1.tgz",
+ "integrity": "sha512-duj6AlLcsWNwUpfyfHt0nWIeRiZpuShnP40YTxOGQgtaN8fd6JYSxsvxUphTDy8V5MfDXo4s/xVCIIvVCO808g==",
"dev": true,
"requires": {
"async": "2.6.0",
+ "compare-versions": "3.1.0",
"fileset": "2.0.3",
- "istanbul-lib-coverage": "1.1.1",
- "istanbul-lib-hook": "1.1.0",
- "istanbul-lib-instrument": "1.9.1",
- "istanbul-lib-report": "1.1.2",
- "istanbul-lib-source-maps": "1.2.2",
- "istanbul-reports": "1.1.3",
+ "istanbul-lib-coverage": "1.2.0",
+ "istanbul-lib-hook": "1.2.0",
+ "istanbul-lib-instrument": "1.10.1",
+ "istanbul-lib-report": "1.1.4",
+ "istanbul-lib-source-maps": "1.2.4",
+ "istanbul-reports": "1.3.0",
"js-yaml": "3.7.0",
"mkdirp": "0.5.1",
"once": "1.4.0"
@@ -6477,48 +6868,71 @@
"dev": true,
"requires": {
"convert-source-map": "1.5.1",
- "istanbul-lib-instrument": "1.9.1",
+ "istanbul-lib-instrument": "1.10.1",
"loader-utils": "1.1.0",
"schema-utils": "0.3.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.1.0",
+ "fast-json-stable-stringify": "2.0.0",
+ "json-schema-traverse": "0.3.1"
+ }
+ },
+ "schema-utils": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.3.0.tgz",
+ "integrity": "sha1-9YdyIs4+kx7a4DnxfrNxbnE3+M8=",
+ "dev": true,
+ "requires": {
+ "ajv": "5.5.2"
+ }
+ }
}
},
"istanbul-lib-coverage": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-1.1.1.tgz",
- "integrity": "sha512-0+1vDkmzxqJIn5rcoEqapSB4DmPxE31EtI2dF2aCkV5esN9EWHxZ0dwgDClivMXJqE7zaYQxq30hj5L0nlTN5Q==",
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.0.tgz",
+ "integrity": "sha512-GvgM/uXRwm+gLlvkWHTjDAvwynZkL9ns15calTrmhGgowlwJBbWMYzWbKqE2DT6JDP1AFXKa+Zi0EkqNCUqY0A==",
"dev": true
},
"istanbul-lib-hook": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-1.1.0.tgz",
- "integrity": "sha512-U3qEgwVDUerZ0bt8cfl3dSP3S6opBoOtk3ROO5f2EfBr/SRiD9FQqzwaZBqFORu8W7O0EXpai+k7kxHK13beRg==",
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-1.2.0.tgz",
+ "integrity": "sha512-p3En6/oGkFQV55Up8ZPC2oLxvgSxD8CzA0yBrhRZSh3pfv3OFj9aSGVC0yoerAi/O4u7jUVnOGVX1eVFM+0tmQ==",
"dev": true,
"requires": {
"append-transform": "0.4.0"
}
},
"istanbul-lib-instrument": {
- "version": "1.9.1",
- "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-1.9.1.tgz",
- "integrity": "sha512-RQmXeQ7sphar7k7O1wTNzVczF9igKpaeGQAG9qR2L+BS4DCJNTI9nytRmIVYevwO0bbq+2CXvJmYDuz0gMrywA==",
+ "version": "1.10.1",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-1.10.1.tgz",
+ "integrity": "sha512-1dYuzkOCbuR5GRJqySuZdsmsNKPL3PTuyPevQfoCXJePT9C8y1ga75neU+Tuy9+yS3G/dgx8wgOmp2KLpgdoeQ==",
"dev": true,
"requires": {
- "babel-generator": "6.26.0",
+ "babel-generator": "6.26.1",
"babel-template": "6.26.0",
"babel-traverse": "6.26.0",
"babel-types": "6.26.0",
"babylon": "6.18.0",
- "istanbul-lib-coverage": "1.1.1",
+ "istanbul-lib-coverage": "1.2.0",
"semver": "5.5.0"
}
},
"istanbul-lib-report": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-1.1.2.tgz",
- "integrity": "sha512-UTv4VGx+HZivJQwAo1wnRwe1KTvFpfi/NYwN7DcsrdzMXwpRT/Yb6r4SBPoHWj4VuQPakR32g4PUUeyKkdDkBA==",
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-1.1.4.tgz",
+ "integrity": "sha512-Azqvq5tT0U09nrncK3q82e/Zjkxa4tkFZv7E6VcqP0QCPn6oNljDPfrZEC/umNXds2t7b8sRJfs6Kmpzt8m2kA==",
"dev": true,
"requires": {
- "istanbul-lib-coverage": "1.1.1",
+ "istanbul-lib-coverage": "1.2.0",
"mkdirp": "0.5.1",
"path-parse": "1.0.5",
"supports-color": "3.2.3"
@@ -6542,53 +6956,42 @@
}
},
"istanbul-lib-source-maps": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.2.tgz",
- "integrity": "sha512-8BfdqSfEdtip7/wo1RnrvLpHVEd8zMZEDmOFEnpC6dg0vXflHt9nvoAyQUzig2uMSXfF2OBEYBV3CVjIL9JvaQ==",
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.4.tgz",
+ "integrity": "sha512-UzuK0g1wyQijiaYQxj/CdNycFhAd2TLtO2obKQMTZrZ1jzEMRY3rvpASEKkaxbRR6brvdovfA03znPa/pXcejg==",
"dev": true,
"requires": {
"debug": "3.1.0",
- "istanbul-lib-coverage": "1.1.1",
+ "istanbul-lib-coverage": "1.2.0",
"mkdirp": "0.5.1",
"rimraf": "2.6.2",
"source-map": "0.5.7"
- },
- "dependencies": {
- "debug": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
- "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
- "dev": true,
- "requires": {
- "ms": "2.0.0"
- }
- }
}
},
"istanbul-reports": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-1.1.3.tgz",
- "integrity": "sha512-ZEelkHh8hrZNI5xDaKwPMFwDsUf5wIEI2bXAFGp1e6deR2mnEKBPhLJEgr4ZBt8Gi6Mj38E/C8kcy9XLggVO2Q==",
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-1.3.0.tgz",
+ "integrity": "sha512-y2Z2IMqE1gefWUaVjrBm0mSKvUkaBy9Vqz8iwr/r40Y9hBbIteH5wqHG/9DLTfJ9xUnUT2j7A3+VVJ6EaYBllA==",
"dev": true,
"requires": {
"handlebars": "4.0.11"
}
},
"jasmine": {
- "version": "2.9.0",
- "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-2.9.0.tgz",
- "integrity": "sha1-dlcfklyHg0CefGFTVy5aY0HPk+s=",
+ "version": "2.99.0",
+ "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-2.99.0.tgz",
+ "integrity": "sha1-jKctEC5jm4Z8ZImFbg4YqceqQrc=",
"dev": true,
"requires": {
"exit": "0.1.2",
"glob": "7.1.2",
- "jasmine-core": "2.9.1"
+ "jasmine-core": "2.99.1"
},
"dependencies": {
"jasmine-core": {
- "version": "2.9.1",
- "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-2.9.1.tgz",
- "integrity": "sha1-trvB2OZSUNVvWIhGFwXr7uuI8i8=",
+ "version": "2.99.1",
+ "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-2.99.1.tgz",
+ "integrity": "sha1-5kAN8ea1bhMLYcS80JPap/boyhU=",
"dev": true
}
}
@@ -6659,10 +7062,29 @@
"integrity": "sha1-43zwsX8ZnM4jvqcbIDk5Uka07E4=",
"dev": true
},
+ "joi": {
+ "version": "12.0.0",
+ "resolved": "https://registry.npmjs.org/joi/-/joi-12.0.0.tgz",
+ "integrity": "sha512-z0FNlV4NGgjQN1fdtHYXf5kmgludM65fG/JlXzU6+rwkt9U5UWuXVYnXa2FpK0u6+qBuCmrm5byPNuiiddAHvQ==",
+ "dev": true,
+ "requires": {
+ "hoek": "4.2.1",
+ "isemail": "3.1.1",
+ "topo": "2.0.2"
+ },
+ "dependencies": {
+ "hoek": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz",
+ "integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA==",
+ "dev": true
+ }
+ }
+ },
"js-base64": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.4.2.tgz",
- "integrity": "sha512-lLkz3IRPTNeATsKQGeltbzRK/5+bWsXBHfpZrxJAi4N30RtCtNA+rJznp4uR2+4OgkBsoeeFwONVLr4gzIVErQ==",
+ "version": "2.4.3",
+ "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.4.3.tgz",
+ "integrity": "sha512-H7ErYLM34CvDMto3GbD6xD0JLUGYXR3QTcH6B/tr4Hi/QpSThnCsIp+Sy5FRTw3B0d6py4HcNkW7nO/wdtGWEw==",
"dev": true
},
"js-tokens": {
@@ -6677,7 +7099,7 @@
"integrity": "sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A=",
"dev": true,
"requires": {
- "argparse": "1.0.9",
+ "argparse": "1.0.10",
"esprima": "2.7.3"
}
},
@@ -6797,7 +7219,7 @@
"chokidar": "1.7.0",
"colors": "1.1.2",
"combine-lists": "1.0.1",
- "connect": "3.6.5",
+ "connect": "3.6.6",
"core-js": "2.5.3",
"di": "0.0.1",
"dom-serialize": "2.2.1",
@@ -6806,19 +7228,19 @@
"graceful-fs": "4.1.11",
"http-proxy": "1.16.2",
"isbinaryfile": "3.0.2",
- "lodash": "4.17.4",
- "log4js": "2.5.2",
+ "lodash": "4.17.5",
+ "log4js": "2.5.3",
"mime": "1.6.0",
"minimatch": "3.0.4",
"optimist": "0.6.1",
- "qjobs": "1.1.5",
+ "qjobs": "1.2.0",
"range-parser": "1.2.0",
"rimraf": "2.6.2",
"safe-buffer": "5.1.1",
"socket.io": "2.0.4",
"source-map": "0.6.1",
"tmp": "0.0.33",
- "useragent": "2.2.1"
+ "useragent": "2.3.0"
},
"dependencies": {
"source-map": {
@@ -6849,12 +7271,12 @@
}
},
"karma-coverage-istanbul-reporter": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/karma-coverage-istanbul-reporter/-/karma-coverage-istanbul-reporter-1.4.1.tgz",
- "integrity": "sha512-5og0toMjgLvsL9+TzGH4Rk1D0nr7pMIRJBg29xP4mHMKy/1KUJ12UzoqI6mBNCRFa4nDvZS2MRrN7p+RkZNWxQ==",
+ "version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/karma-coverage-istanbul-reporter/-/karma-coverage-istanbul-reporter-1.4.2.tgz",
+ "integrity": "sha512-sQHexslLF+QHzaKfK8+onTYMyvSwv+p5cDayVxhpEELGa3z0QuB+l0IMsicIkkBNMOJKQaqueiRoW7iuo7lsog==",
"dev": true,
"requires": {
- "istanbul-api": "1.2.1",
+ "istanbul-api": "1.3.1",
"minimatch": "3.0.4"
}
},
@@ -6926,9 +7348,9 @@
}
},
"lazy-cache": {
- "version": "0.2.7",
- "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-0.2.7.tgz",
- "integrity": "sha1-f+3fLctu23fRHvHRF6tf/fCrG2U=",
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz",
+ "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=",
"dev": true
},
"lcid": {
@@ -6940,13 +7362,19 @@
"invert-kv": "1.0.0"
}
},
+ "lcov-parse": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/lcov-parse/-/lcov-parse-1.0.0.tgz",
+ "integrity": "sha1-6w1GtUER68VhrLTECO+TY73I9+A=",
+ "dev": true
+ },
"less": {
"version": "2.7.3",
"resolved": "https://registry.npmjs.org/less/-/less-2.7.3.tgz",
"integrity": "sha512-KPdIJKWcEAb02TuJtaLrhue0krtRLoRoo7x6BNJIBelO00t/CCdJQUnHW5V34OnHMWzIktSalJxRO+FvytQlCQ==",
"dev": true,
"requires": {
- "errno": "0.1.6",
+ "errno": "0.1.7",
"graceful-fs": "4.1.11",
"image-size": "0.5.5",
"mime": "1.6.0",
@@ -6957,14 +7385,14 @@
}
},
"less-loader": {
- "version": "4.0.5",
- "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-4.0.5.tgz",
- "integrity": "sha1-rhVadAbKxqzSk9eFWH/P8PR4xN0=",
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-4.1.0.tgz",
+ "integrity": "sha512-KNTsgCE9tMOM70+ddxp9yyt9iHqgmSs0yTZc5XH5Wo+g80RWRIYNqE58QJKm/yMud5wZEvz50ugRDuzVIkyahg==",
"dev": true,
"requires": {
"clone": "2.1.1",
"loader-utils": "1.1.0",
- "pify": "2.3.0"
+ "pify": "3.0.0"
},
"dependencies": {
"clone": {
@@ -6972,12 +7400,6 @@
"resolved": "https://registry.npmjs.org/clone/-/clone-2.1.1.tgz",
"integrity": "sha1-0hfR6WERjjrJpLi7oyhVU79kfNs=",
"dev": true
- },
- "pify": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
- "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
- "dev": true
}
}
},
@@ -7033,9 +7455,9 @@
"dev": true
},
"license-webpack-plugin": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-1.1.1.tgz",
- "integrity": "sha512-TjKOyiC0exqd4Idy/4M8/DETR22dXBZks387DuS5LbslxHiMRXGx/Q2F/j9IUtvEoH5uFvt72vRgk/G6f8j3Dg==",
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-1.3.0.tgz",
+ "integrity": "sha512-12Spl8M5Ty7aRszGQUEfNK1W0gwcWNfAj0sMyJv7E7BglAb4YaZ6FciGncmwzxEcuzJ45RjA/Fql3Gw13la6aA==",
"dev": true,
"requires": {
"ejs": "2.5.7"
@@ -7089,9 +7511,9 @@
}
},
"lodash": {
- "version": "4.17.4",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz",
- "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=",
+ "version": "4.17.5",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz",
+ "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==",
"dev": true
},
"lodash.assign": {
@@ -7120,9 +7542,9 @@
"dev": true
},
"lodash.mergewith": {
- "version": "4.6.0",
- "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.0.tgz",
- "integrity": "sha1-FQzwoWeR9ZA7iJHqsVRgknS96lU=",
+ "version": "4.6.1",
+ "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.1.tgz",
+ "integrity": "sha512-eWw5r+PYICtEBgrBE5hhlT6aAa75f411bgDz/ZL2KZqYV03USvucsxcHUIlGTDTECs1eunpI7HOV7U+WLDvNdQ==",
"dev": true,
"optional": true
},
@@ -7138,10 +7560,16 @@
"integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=",
"dev": true
},
+ "log-driver": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/log-driver/-/log-driver-1.2.7.tgz",
+ "integrity": "sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg==",
+ "dev": true
+ },
"log4js": {
- "version": "2.5.2",
- "resolved": "https://registry.npmjs.org/log4js/-/log4js-2.5.2.tgz",
- "integrity": "sha512-MmZhzQCfCV5+nQgOqy34V9EV3k+Z/rPCdxyq+25EePKpwdUQxCb19BTmL5iX3iOCSAV/tWh7KVYqchwrx3+S2Q==",
+ "version": "2.5.3",
+ "resolved": "https://registry.npmjs.org/log4js/-/log4js-2.5.3.tgz",
+ "integrity": "sha512-YL/qpTxYtK0iWWbuKCrevDZz5lh+OjyHHD+mICqpjnYGKdNRBvPeh/1uYjkKUemT1CSO4wwLOwphWMpKAnD9kw==",
"dev": true,
"requires": {
"amqplib": "0.5.2",
@@ -7157,17 +7585,6 @@
"semver": "5.5.0",
"slack-node": "0.2.0",
"streamroller": "0.7.0"
- },
- "dependencies": {
- "debug": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
- "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
- "dev": true,
- "requires": {
- "ms": "2.0.0"
- }
- }
}
},
"loggly": {
@@ -7218,8 +7635,8 @@
"optional": true,
"requires": {
"asynckit": "0.4.0",
- "combined-stream": "1.0.5",
- "mime-types": "2.1.17"
+ "combined-stream": "1.0.6",
+ "mime-types": "2.1.18"
}
},
"har-validator": {
@@ -7230,8 +7647,8 @@
"optional": true,
"requires": {
"chalk": "1.1.3",
- "commander": "2.12.2",
- "is-my-json-valid": "2.17.1",
+ "commander": "2.14.1",
+ "is-my-json-valid": "2.17.2",
"pinkie-promise": "2.0.1"
}
},
@@ -7260,7 +7677,7 @@
"aws4": "1.6.0",
"bl": "1.1.2",
"caseless": "0.11.0",
- "combined-stream": "1.0.5",
+ "combined-stream": "1.0.6",
"extend": "3.0.1",
"forever-agent": "0.6.1",
"form-data": "2.0.0",
@@ -7270,12 +7687,12 @@
"is-typedarray": "1.0.0",
"isstream": "0.1.2",
"json-stringify-safe": "5.0.1",
- "mime-types": "2.1.17",
+ "mime-types": "2.1.18",
"node-uuid": "1.4.8",
"oauth-sign": "0.8.2",
"qs": "6.2.3",
"stringstream": "0.0.5",
- "tough-cookie": "2.3.3",
+ "tough-cookie": "2.3.4",
"tunnel-agent": "0.4.3"
}
},
@@ -7333,9 +7750,9 @@
"dev": true
},
"lru-cache": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz",
- "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==",
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.2.tgz",
+ "integrity": "sha512-wgeVXhrDwAWnIF/yZARsFnMBtdFXOg1b8RIrhilp+0iDYN4mdQcNZElDZ0e4B64BhaxeQ5zN7PMyvu7we1kPeQ==",
"dev": true,
"requires": {
"pseudomap": "1.0.2",
@@ -7393,7 +7810,7 @@
"dev": true,
"optional": true,
"requires": {
- "lodash": "4.17.4"
+ "lodash": "4.17.5"
}
},
"debug": {
@@ -7414,8 +7831,8 @@
"optional": true,
"requires": {
"asynckit": "0.4.0",
- "combined-stream": "1.0.5",
- "mime-types": "2.1.17"
+ "combined-stream": "1.0.6",
+ "mime-types": "2.1.18"
}
},
"ms": {
@@ -7435,18 +7852,18 @@
}
},
"make-dir": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.1.0.tgz",
- "integrity": "sha512-0Pkui4wLJ7rxvmfUvs87skoEaxmu0hCUApF8nonzpl7q//FWp9zu8W61Scz4sd/kUiqDxvUhtoam2efDyiBzcA==",
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.2.0.tgz",
+ "integrity": "sha512-aNUAa4UMg/UougV25bbrU4ZaaKNjJ/3/xnvg/twpmKROPdKZPZ9wGgI0opdZzO8q/zUFawoUuixuOv33eZ61Iw==",
"dev": true,
"requires": {
"pify": "3.0.0"
}
},
"make-error": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.2.tgz",
- "integrity": "sha512-l9ra35l5VWLF24y75Tg8XgfGLX0ueRhph118WKM6H5denx4bB5QF59+4UAm9oJ2qsPQZas/CQUDdtDdfvYHBdQ==",
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.4.tgz",
+ "integrity": "sha512-0Dab5btKVPhibSalc9QGXb559ED7G7iLjFXBaj9Wq8O3vorueR5K5jaE3hkG6ZQINyhA/JgG6Qk4qdFQjsYV6g==",
"dev": true
},
"map-cache": {
@@ -7510,7 +7927,7 @@
"integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=",
"dev": true,
"requires": {
- "mimic-fn": "1.1.0"
+ "mimic-fn": "1.2.0"
}
},
"memory-fs": {
@@ -7519,8 +7936,8 @@
"integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=",
"dev": true,
"requires": {
- "errno": "0.1.6",
- "readable-stream": "2.3.3"
+ "errno": "0.1.7",
+ "readable-stream": "2.3.5"
}
},
"meow": {
@@ -7597,22 +8014,22 @@
"integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="
},
"mime-db": {
- "version": "1.30.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz",
- "integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE="
+ "version": "1.33.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz",
+ "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ=="
},
"mime-types": {
- "version": "2.1.17",
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz",
- "integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=",
+ "version": "2.1.18",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz",
+ "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==",
"requires": {
- "mime-db": "1.30.0"
+ "mime-db": "1.33.0"
}
},
"mimic-fn": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.1.0.tgz",
- "integrity": "sha1-5md4PZLonb00KBi1IwudYqZyrRg=",
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz",
+ "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==",
"dev": true
},
"minimalistic-assert": {
@@ -7632,7 +8049,7 @@
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
"integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
"requires": {
- "brace-expansion": "1.1.8"
+ "brace-expansion": "1.1.11"
}
},
"minimist": {
@@ -7642,27 +8059,27 @@
"dev": true
},
"mississippi": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-1.3.1.tgz",
- "integrity": "sha512-/6rB8YXFbAtsUVRphIRQqB0+9c7VaPHCjVtvto+JqwVxgz8Zz+I+f68/JgQ+Pb4VlZb2svA9OtdXnHHsZz7ltg==",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-2.0.0.tgz",
+ "integrity": "sha512-zHo8v+otD1J10j/tC+VNoGK9keCuByhKovAvdn74dmxJl9+mWHnx6EMsDN4lgRoMI/eYo2nchAxniIbUPb5onw==",
"dev": true,
"requires": {
- "concat-stream": "1.6.0",
- "duplexify": "3.5.3",
+ "concat-stream": "1.6.1",
+ "duplexify": "3.5.4",
"end-of-stream": "1.4.1",
"flush-write-stream": "1.0.2",
"from2": "2.3.0",
"parallel-transform": "1.1.0",
- "pump": "1.0.3",
+ "pump": "2.0.1",
"pumpify": "1.4.0",
"stream-each": "1.2.2",
"through2": "2.0.3"
}
},
"mixin-deep": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.0.tgz",
- "integrity": "sha512-dgaCvoh6i1nosAUBKb0l0pfJ78K8+S9fluyIR2YvAeUD/QuMahnFnF3xYty5eYXMjhGSsB0DsW6A0uAZyetoAg==",
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz",
+ "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==",
"dev": true,
"requires": {
"for-in": "1.0.2",
@@ -7722,7 +8139,7 @@
"duplexer2": "0.1.4",
"inherits": "2.0.3",
"parents": "1.0.1",
- "readable-stream": "2.3.3",
+ "readable-stream": "2.3.5",
"resolve": "1.5.0",
"stream-combiner2": "1.1.1",
"subarg": "1.0.0",
@@ -7757,6 +8174,12 @@
}
}
},
+ "process-nextick-args": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz",
+ "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=",
+ "dev": true
+ },
"string_decoder": {
"version": "0.10.31",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
@@ -7766,16 +8189,16 @@
}
},
"moment": {
- "version": "2.15.2",
- "resolved": "https://registry.npmjs.org/moment/-/moment-2.15.2.tgz",
- "integrity": "sha1-G/3t9qbjRfMi/pVtXfW9CKjOhNw="
+ "version": "2.20.1",
+ "resolved": "https://registry.npmjs.org/moment/-/moment-2.20.1.tgz",
+ "integrity": "sha512-Yh9y73JRljxW5QxN08Fner68eFLxM5ynNOAw2LbIB1YAGeQzZT8QFSUvkAz609Zf+IHhhaUxqZK8dG3W/+HEvg=="
},
"moment-es6": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/moment-es6/-/moment-es6-1.0.0.tgz",
"integrity": "sha1-VS/PQF1iVlsKH+hObB5peseTMt8=",
"requires": {
- "moment": "2.15.2"
+ "moment": "2.20.1"
}
},
"move-concurrently": {
@@ -7798,13 +8221,13 @@
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
},
"multicast-dns": {
- "version": "6.2.2",
- "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.2.tgz",
- "integrity": "sha512-xTO41ApiRHMVDBYhNL9bEhx7kRf1hq3OqPOnOy8bpTi0JZSxVPDre7ZRpTHLDlxmhf6d/FL+10E8VX1QRd+0DA==",
+ "version": "6.2.3",
+ "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz",
+ "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==",
"dev": true,
"requires": {
"dns-packet": "1.3.1",
- "thunky": "0.1.0"
+ "thunky": "1.0.2"
}
},
"multicast-dns-service-types": {
@@ -7814,29 +8237,30 @@
"dev": true
},
"nan": {
- "version": "2.8.0",
- "resolved": "https://registry.npmjs.org/nan/-/nan-2.8.0.tgz",
- "integrity": "sha1-7XFfP+neArV6XmJS2QqWZ14fCFo=",
+ "version": "2.9.2",
+ "resolved": "https://registry.npmjs.org/nan/-/nan-2.9.2.tgz",
+ "integrity": "sha512-ltW65co7f3PQWBDbqVvaU1WtFJUsNW7sWWm4HINhbMQIyVyzIeyZ8toX5TC5eeooE6piZoaEh4cZkueSKG3KYw==",
"dev": true,
"optional": true
},
"nanomatch": {
- "version": "1.2.7",
- "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.7.tgz",
- "integrity": "sha512-/5ldsnyurvEw7wNpxLFgjVvBLMta43niEYOy0CJ4ntcYSbx6bugRUTQeFb4BR/WanEL1o3aQgHuVLHQaB6tOqg==",
+ "version": "1.2.9",
+ "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.9.tgz",
+ "integrity": "sha512-n8R9bS8yQ6eSXaV6jHUpKzD8gLsin02w1HSFiegwrs9E098Ylhw5jdyKPaYqvHknHaSCKTPp7C8dGCQ0q9koXA==",
"dev": true,
"requires": {
"arr-diff": "4.0.0",
"array-unique": "0.3.2",
- "define-property": "1.0.0",
- "extend-shallow": "2.0.1",
+ "define-property": "2.0.2",
+ "extend-shallow": "3.0.2",
"fragment-cache": "0.2.1",
- "is-odd": "1.0.0",
- "kind-of": "5.1.0",
+ "is-odd": "2.0.0",
+ "is-windows": "1.0.2",
+ "kind-of": "6.0.2",
"object.pick": "1.3.0",
- "regex-not": "1.0.0",
- "snapdragon": "0.8.1",
- "to-regex": "3.0.1"
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
},
"dependencies": {
"arr-diff": {
@@ -7852,9 +8276,9 @@
"dev": true
},
"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==",
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
"dev": true
}
}
@@ -7874,6 +8298,12 @@
"integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=",
"dev": true
},
+ "neo-async": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.5.0.tgz",
+ "integrity": "sha512-nJmSswG4As/MkRq7QZFuH/sf/yuv8ODdMZrY4Bedjp77a5MK4A6s7YbBB64c9u79EBUOfXUXBvArmvzTD0X+6g==",
+ "dev": true
+ },
"netmask": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/netmask/-/netmask-1.0.6.tgz",
@@ -7886,22 +8316,17 @@
"resolved": "https://registry.npmjs.org/ng2-charts/-/ng2-charts-1.6.0.tgz",
"integrity": "sha512-9w0WH69x5/nuqC1og2WaY39NbaBqTGIP1+5gZaH7/KPN6UEPonNg/pYnsIVklLj1DWPWXKa8+XXIJZ1jy5nLxg==",
"requires": {
- "chart.js": "2.7.1"
+ "chart.js": "2.7.2"
},
"dependencies": {
"chart.js": {
- "version": "2.7.1",
- "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-2.7.1.tgz",
- "integrity": "sha512-pX1oQAY86MiuyZ2hY593Acbl4MLHKrBBhhmZ1YqSadzQbbsBE2rnd6WISoHjIsdf0WDeC0hbePYCz2ZxkV8L+g==",
+ "version": "2.7.2",
+ "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-2.7.2.tgz",
+ "integrity": "sha512-90wl3V9xRZ8tnMvMlpcW+0Yg13BelsGS9P9t0ClaDxv/hdypHDr/YAGf+728m11P5ljwyB0ZHfPKCapZFqSqYA==",
"requires": {
"chartjs-color": "2.2.0",
- "moment": "2.18.1"
+ "moment": "2.20.1"
}
- },
- "moment": {
- "version": "2.18.1",
- "resolved": "https://registry.npmjs.org/moment/-/moment-2.18.1.tgz",
- "integrity": "sha1-w2GT3Tzhwu7SrbfIAtu8d6gbHA8="
}
}
},
@@ -7920,9 +8345,9 @@
"integrity": "sha1-7K52QVDemYYexcgQ/V0Jaxg5Mqc="
},
"node-forge": {
- "version": "0.6.33",
- "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.6.33.tgz",
- "integrity": "sha1-RjgRh59XPUUVWtap9D3ClujoXrw=",
+ "version": "0.7.1",
+ "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.7.1.tgz",
+ "integrity": "sha1-naYR6giYL0uUIGs760zJZl8gwwA=",
"dev": true
},
"node-gyp": {
@@ -7939,7 +8364,7 @@
"mkdirp": "0.5.1",
"nopt": "3.0.6",
"npmlog": "4.1.2",
- "osenv": "0.1.4",
+ "osenv": "0.1.5",
"request": "2.81.0",
"rimraf": "2.6.2",
"semver": "5.3.0",
@@ -7986,7 +8411,7 @@
"process": "0.11.10",
"punycode": "1.4.1",
"querystring-es3": "0.2.1",
- "readable-stream": "2.3.3",
+ "readable-stream": "2.3.5",
"stream-browserify": "2.0.1",
"stream-http": "2.8.0",
"string_decoder": "1.0.3",
@@ -8004,9 +8429,9 @@
"dev": true
},
"node-sass": {
- "version": "4.7.2",
- "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.7.2.tgz",
- "integrity": "sha512-CaV+wLqZ7//Jdom5aUFCpGNoECd7BbNhjuwdsX/LkXBrHl8eb1Wjw4HvWqcFvhr5KuNgAk8i/myf/MQ1YYeroA==",
+ "version": "4.8.1",
+ "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.8.1.tgz",
+ "integrity": "sha512-3fUkFCkgOPUD7YjFiRDO/oAcyjlT8HeN4u1CacfMKVjZTsDXvAjk0CdmjZIJ1MYvGuHJpye00wbIkecsmux2kA==",
"dev": true,
"optional": true,
"requires": {
@@ -8019,10 +8444,10 @@
"in-publish": "2.0.0",
"lodash.assign": "4.2.0",
"lodash.clonedeep": "4.5.0",
- "lodash.mergewith": "4.6.0",
+ "lodash.mergewith": "4.6.1",
"meow": "3.7.0",
"mkdirp": "0.5.1",
- "nan": "2.8.0",
+ "nan": "2.9.2",
"node-gyp": "3.6.2",
"npmlog": "4.1.2",
"request": "2.79.0",
@@ -8065,8 +8490,8 @@
"optional": true,
"requires": {
"asynckit": "0.4.0",
- "combined-stream": "1.0.5",
- "mime-types": "2.1.17"
+ "combined-stream": "1.0.6",
+ "mime-types": "2.1.18"
}
},
"har-validator": {
@@ -8077,8 +8502,8 @@
"optional": true,
"requires": {
"chalk": "1.1.3",
- "commander": "2.12.2",
- "is-my-json-valid": "2.17.1",
+ "commander": "2.14.1",
+ "is-my-json-valid": "2.17.2",
"pinkie-promise": "2.0.1"
}
},
@@ -8099,7 +8524,7 @@
"aws-sign2": "0.6.0",
"aws4": "1.6.0",
"caseless": "0.11.0",
- "combined-stream": "1.0.5",
+ "combined-stream": "1.0.6",
"extend": "3.0.1",
"forever-agent": "0.6.1",
"form-data": "2.1.4",
@@ -8109,11 +8534,11 @@
"is-typedarray": "1.0.0",
"isstream": "0.1.2",
"json-stringify-safe": "5.0.1",
- "mime-types": "2.1.17",
+ "mime-types": "2.1.18",
"oauth-sign": "0.8.2",
"qs": "6.3.2",
"stringstream": "0.0.5",
- "tough-cookie": "2.3.3",
+ "tough-cookie": "2.3.4",
"tunnel-agent": "0.4.3",
"uuid": "3.2.1"
}
@@ -8225,7 +8650,7 @@
"dev": true,
"requires": {
"abbrev": "1.1.1",
- "osenv": "0.1.4"
+ "osenv": "0.1.5"
}
},
"normalize-package-data": {
@@ -8234,10 +8659,10 @@
"integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==",
"dev": true,
"requires": {
- "hosted-git-info": "2.5.0",
+ "hosted-git-info": "2.6.0",
"is-builtin-module": "1.0.0",
"semver": "5.5.0",
- "validate-npm-package-license": "3.0.1"
+ "validate-npm-package-license": "3.0.3"
}
},
"normalize-path": {
@@ -8443,9 +8868,9 @@
}
},
"obuf": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.1.tgz",
- "integrity": "sha1-EEEktsYCxnlogaBCVB0220OlJk4=",
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz",
+ "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==",
"dev": true
},
"on-finished": {
@@ -8570,9 +8995,9 @@
"dev": true
},
"osenv": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.4.tgz",
- "integrity": "sha1-Qv5tWVPfBsgGS+bxdsPQWqqjRkQ=",
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz",
+ "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==",
"dev": true,
"requires": {
"os-homedir": "1.0.2",
@@ -8631,6 +9056,18 @@
"pac-resolver": "2.0.0",
"raw-body": "2.3.2",
"socks-proxy-agent": "2.1.1"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ }
}
},
"pac-resolver": {
@@ -8677,7 +9114,7 @@
"requires": {
"cyclist": "0.2.2",
"inherits": "2.0.3",
- "readable-stream": "2.3.3"
+ "readable-stream": "2.3.5"
}
},
"param-case": {
@@ -8704,7 +9141,7 @@
"integrity": "sha1-N8T5t+06tlx0gXtfJICTf7+XxxI=",
"dev": true,
"requires": {
- "asn1.js": "4.9.2",
+ "asn1.js": "4.10.1",
"browserify-aes": "1.1.1",
"create-hash": "1.1.3",
"evp_bytestokey": "1.0.3",
@@ -8864,12 +9301,12 @@
}
},
"pdfjs-dist": {
- "version": "2.0.301",
- "resolved": "https://registry.npmjs.org/pdfjs-dist/-/pdfjs-dist-2.0.301.tgz",
- "integrity": "sha1-yFKUBmmEYfi7xh9mvtyA0Orj3Ik=",
+ "version": "2.0.303",
+ "resolved": "https://registry.npmjs.org/pdfjs-dist/-/pdfjs-dist-2.0.303.tgz",
+ "integrity": "sha1-jABTDyQihmA7/L/dLukXwYK51EE=",
"requires": {
"node-ensure": "0.0.0",
- "worker-loader": "1.1.0"
+ "worker-loader": "1.1.1"
}
},
"performance-now": {
@@ -8924,6 +9361,15 @@
"resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
"integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=",
"dev": true
+ },
+ "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"
+ }
}
}
},
@@ -8934,38 +9380,33 @@
"dev": true
},
"postcss": {
- "version": "6.0.16",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.16.tgz",
- "integrity": "sha512-m758RWPmSjFH/2MyyG3UOW1fgYbR9rtdzz5UNJnlm7OLtu4B2h9C6gi+bE4qFKghsBRFfZT8NzoQBs6JhLotoA==",
+ "version": "6.0.19",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.19.tgz",
+ "integrity": "sha512-f13HRz0HtVwVaEuW6J6cOUCBLFtymhgyLPV7t4QEk2UD3twRI9IluDcQNdzQdBpiixkXj2OmzejhhTbSbDxNTg==",
"dev": true,
"requires": {
- "chalk": "2.3.0",
+ "chalk": "2.3.2",
"source-map": "0.6.1",
- "supports-color": "5.1.0"
+ "supports-color": "5.3.0"
},
"dependencies": {
"chalk": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz",
- "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==",
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz",
+ "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==",
"dev": true,
"requires": {
- "ansi-styles": "3.2.0",
+ "ansi-styles": "3.2.1",
"escape-string-regexp": "1.0.5",
- "supports-color": "4.5.0"
- },
- "dependencies": {
- "supports-color": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz",
- "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=",
- "dev": true,
- "requires": {
- "has-flag": "2.0.0"
- }
- }
+ "supports-color": "5.3.0"
}
},
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "dev": true
+ },
"source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
@@ -8973,12 +9414,12 @@
"dev": true
},
"supports-color": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.1.0.tgz",
- "integrity": "sha512-Ry0AwkoKjDpVKK4sV4h6o3UJmNRbjYm2uXhwfj3J56lMVdvnUNqzQVRztOOMGQ++w1K/TjNDFvpJk0F/LoeBCQ==",
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz",
+ "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==",
"dev": true,
"requires": {
- "has-flag": "2.0.0"
+ "has-flag": "3.0.0"
}
}
}
@@ -9034,7 +9475,7 @@
"dev": true,
"requires": {
"chalk": "1.1.3",
- "js-base64": "2.4.2",
+ "js-base64": "2.4.3",
"source-map": "0.5.7",
"supports-color": "3.2.3"
}
@@ -9101,7 +9542,7 @@
"dev": true,
"requires": {
"chalk": "1.1.3",
- "js-base64": "2.4.2",
+ "js-base64": "2.4.3",
"source-map": "0.5.7",
"supports-color": "3.2.3"
}
@@ -9167,7 +9608,7 @@
"dev": true,
"requires": {
"chalk": "1.1.3",
- "js-base64": "2.4.2",
+ "js-base64": "2.4.3",
"source-map": "0.5.7",
"supports-color": "3.2.3"
}
@@ -9232,7 +9673,7 @@
"dev": true,
"requires": {
"chalk": "1.1.3",
- "js-base64": "2.4.2",
+ "js-base64": "2.4.3",
"source-map": "0.5.7",
"supports-color": "3.2.3"
}
@@ -9297,7 +9738,7 @@
"dev": true,
"requires": {
"chalk": "1.1.3",
- "js-base64": "2.4.2",
+ "js-base64": "2.4.3",
"source-map": "0.5.7",
"supports-color": "3.2.3"
}
@@ -9362,7 +9803,7 @@
"dev": true,
"requires": {
"chalk": "1.1.3",
- "js-base64": "2.4.2",
+ "js-base64": "2.4.3",
"source-map": "0.5.7",
"supports-color": "3.2.3"
}
@@ -9427,7 +9868,7 @@
"dev": true,
"requires": {
"chalk": "1.1.3",
- "js-base64": "2.4.2",
+ "js-base64": "2.4.3",
"source-map": "0.5.7",
"supports-color": "3.2.3"
}
@@ -9493,7 +9934,7 @@
"dev": true,
"requires": {
"chalk": "1.1.3",
- "js-base64": "2.4.2",
+ "js-base64": "2.4.3",
"source-map": "0.5.7",
"supports-color": "3.2.3"
}
@@ -9559,7 +10000,7 @@
"dev": true,
"requires": {
"chalk": "1.1.3",
- "js-base64": "2.4.2",
+ "js-base64": "2.4.3",
"source-map": "0.5.7",
"supports-color": "3.2.3"
}
@@ -9576,12 +10017,12 @@
}
},
"postcss-import": {
- "version": "11.0.0",
- "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-11.0.0.tgz",
- "integrity": "sha1-qWLi34LTvFptpqOGhBdHIE9B71s=",
+ "version": "11.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-11.1.0.tgz",
+ "integrity": "sha512-5l327iI75POonjxkXgdRCUS+AlzAdBx4pOvMEhTKTCjb1p8IEeVR9yx3cPbmN7LIWJLbfnIXxAhoB4jpD0c/Cw==",
"dev": true,
"requires": {
- "postcss": "6.0.16",
+ "postcss": "6.0.19",
"postcss-value-parser": "3.3.0",
"read-cache": "1.0.0",
"resolve": "1.5.0"
@@ -9620,15 +10061,15 @@
}
},
"postcss-loader": {
- "version": "2.0.10",
- "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-2.0.10.tgz",
- "integrity": "sha512-xQaDcEgJ/2JqFY18zpFkik8vyYs7oS5ZRbrjvDqkP97k2wYWfPT4+qA0m4o3pTSCsz0u26PNqs8ZO9FRUWAqrA==",
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-2.1.1.tgz",
+ "integrity": "sha512-f0J/DWE/hyO9/LH0WHpXkny/ZZ238sSaG3p1SRBtVZnFWUtD7GXIEgHoBg8cnAeRbmEvUxHQptY46zWfwNYj/w==",
"dev": true,
"requires": {
"loader-utils": "1.1.0",
- "postcss": "6.0.16",
+ "postcss": "6.0.19",
"postcss-load-config": "1.2.0",
- "schema-utils": "0.3.0"
+ "schema-utils": "0.4.5"
}
},
"postcss-merge-idents": {
@@ -9682,7 +10123,7 @@
"dev": true,
"requires": {
"chalk": "1.1.3",
- "js-base64": "2.4.2",
+ "js-base64": "2.4.3",
"source-map": "0.5.7",
"supports-color": "3.2.3"
}
@@ -9747,7 +10188,7 @@
"dev": true,
"requires": {
"chalk": "1.1.3",
- "js-base64": "2.4.2",
+ "js-base64": "2.4.3",
"source-map": "0.5.7",
"supports-color": "3.2.3"
}
@@ -9788,8 +10229,8 @@
"integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=",
"dev": true,
"requires": {
- "caniuse-db": "1.0.30000795",
- "electron-to-chromium": "1.3.31"
+ "caniuse-db": "1.0.30000813",
+ "electron-to-chromium": "1.3.37"
}
},
"chalk": {
@@ -9826,7 +10267,7 @@
"dev": true,
"requires": {
"chalk": "1.1.3",
- "js-base64": "2.4.2",
+ "js-base64": "2.4.3",
"source-map": "0.5.7",
"supports-color": "3.2.3"
}
@@ -9899,7 +10340,7 @@
"dev": true,
"requires": {
"chalk": "1.1.3",
- "js-base64": "2.4.2",
+ "js-base64": "2.4.3",
"source-map": "0.5.7",
"supports-color": "3.2.3"
}
@@ -9965,7 +10406,7 @@
"dev": true,
"requires": {
"chalk": "1.1.3",
- "js-base64": "2.4.2",
+ "js-base64": "2.4.3",
"source-map": "0.5.7",
"supports-color": "3.2.3"
}
@@ -10033,7 +10474,7 @@
"dev": true,
"requires": {
"chalk": "1.1.3",
- "js-base64": "2.4.2",
+ "js-base64": "2.4.3",
"source-map": "0.5.7",
"supports-color": "3.2.3"
}
@@ -10101,7 +10542,7 @@
"dev": true,
"requires": {
"chalk": "1.1.3",
- "js-base64": "2.4.2",
+ "js-base64": "2.4.3",
"source-map": "0.5.7",
"supports-color": "3.2.3"
}
@@ -10123,7 +10564,7 @@
"integrity": "sha1-ZhQOzs447wa/DT41XWm/WdFB6oU=",
"dev": true,
"requires": {
- "postcss": "6.0.16"
+ "postcss": "6.0.19"
}
},
"postcss-modules-local-by-default": {
@@ -10133,7 +10574,7 @@
"dev": true,
"requires": {
"css-selector-tokenizer": "0.7.0",
- "postcss": "6.0.16"
+ "postcss": "6.0.19"
}
},
"postcss-modules-scope": {
@@ -10143,7 +10584,7 @@
"dev": true,
"requires": {
"css-selector-tokenizer": "0.7.0",
- "postcss": "6.0.16"
+ "postcss": "6.0.19"
}
},
"postcss-modules-values": {
@@ -10153,7 +10594,7 @@
"dev": true,
"requires": {
"icss-replace-symbols": "1.1.0",
- "postcss": "6.0.16"
+ "postcss": "6.0.19"
}
},
"postcss-normalize-charset": {
@@ -10205,7 +10646,7 @@
"dev": true,
"requires": {
"chalk": "1.1.3",
- "js-base64": "2.4.2",
+ "js-base64": "2.4.3",
"source-map": "0.5.7",
"supports-color": "3.2.3"
}
@@ -10273,7 +10714,7 @@
"dev": true,
"requires": {
"chalk": "1.1.3",
- "js-base64": "2.4.2",
+ "js-base64": "2.4.3",
"source-map": "0.5.7",
"supports-color": "3.2.3"
}
@@ -10339,7 +10780,7 @@
"dev": true,
"requires": {
"chalk": "1.1.3",
- "js-base64": "2.4.2",
+ "js-base64": "2.4.3",
"source-map": "0.5.7",
"supports-color": "3.2.3"
}
@@ -10405,7 +10846,7 @@
"dev": true,
"requires": {
"chalk": "1.1.3",
- "js-base64": "2.4.2",
+ "js-base64": "2.4.3",
"source-map": "0.5.7",
"supports-color": "3.2.3"
}
@@ -10470,7 +10911,7 @@
"dev": true,
"requires": {
"chalk": "1.1.3",
- "js-base64": "2.4.2",
+ "js-base64": "2.4.3",
"source-map": "0.5.7",
"supports-color": "3.2.3"
}
@@ -10537,7 +10978,7 @@
"dev": true,
"requires": {
"chalk": "1.1.3",
- "js-base64": "2.4.2",
+ "js-base64": "2.4.3",
"source-map": "0.5.7",
"supports-color": "3.2.3"
}
@@ -10616,7 +11057,7 @@
"dev": true,
"requires": {
"chalk": "1.1.3",
- "js-base64": "2.4.2",
+ "js-base64": "2.4.3",
"source-map": "0.5.7",
"supports-color": "3.2.3"
}
@@ -10683,7 +11124,7 @@
"dev": true,
"requires": {
"chalk": "1.1.3",
- "js-base64": "2.4.2",
+ "js-base64": "2.4.3",
"source-map": "0.5.7",
"supports-color": "3.2.3"
}
@@ -10700,15 +11141,15 @@
}
},
"postcss-url": {
- "version": "7.3.0",
- "resolved": "https://registry.npmjs.org/postcss-url/-/postcss-url-7.3.0.tgz",
- "integrity": "sha512-VBP6uf6iL3AZra23nkPkOEkS/5azj1xf/toRrjfkolfFEgg9Gyzg9UhJZeIsz12EGKZTNVeGbPa2XtaZm/iZvg==",
+ "version": "7.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-url/-/postcss-url-7.3.1.tgz",
+ "integrity": "sha512-Ya5KIjGptgz0OtrVYfi2UbLxVAZ6Emc4Of+Grx4Sf1deWlRpFwLr8FrtkUxfqh+XiZIVkXbjQrddE10ESpNmdA==",
"dev": true,
"requires": {
"mime": "1.6.0",
"minimatch": "3.0.4",
"mkdirp": "0.5.1",
- "postcss": "6.0.16",
+ "postcss": "6.0.19",
"xxhashjs": "0.2.2"
}
},
@@ -10769,7 +11210,7 @@
"dev": true,
"requires": {
"chalk": "1.1.3",
- "js-base64": "2.4.2",
+ "js-base64": "2.4.3",
"source-map": "0.5.7",
"supports-color": "3.2.3"
}
@@ -10820,9 +11261,9 @@
"dev": true
},
"process-nextick-args": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz",
- "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M="
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
+ "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw=="
},
"promise": {
"version": "7.3.1",
@@ -10846,13 +11287,13 @@
"integrity": "sha1-myIXQXCaTGLVzVPGqt1UpxE36V8=",
"dev": true,
"requires": {
- "@types/node": "6.0.96",
+ "@types/node": "6.0.102",
"@types/q": "0.0.32",
"@types/selenium-webdriver": "2.53.43",
"blocking-proxy": "0.0.5",
"chalk": "1.1.3",
"glob": "7.1.2",
- "jasmine": "2.9.0",
+ "jasmine": "2.99.0",
"jasminewd2": "2.2.0",
"optimist": "0.6.1",
"q": "1.4.1",
@@ -10864,9 +11305,9 @@
},
"dependencies": {
"@types/node": {
- "version": "6.0.96",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.96.tgz",
- "integrity": "sha512-fsOOY6tMQ3jCB2wD51XFDmmpgm4wVKkJECdcVRqapbJEa7awJDcr+SaH8toz+4r4KW8YQ3M7ybXMoSDo1QGewA==",
+ "version": "6.0.102",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.102.tgz",
+ "integrity": "sha512-EhNufyBoC1Kqaj+XMHGzi6mPUC8wVABOMTPE5XaSJc49LIVvXsyrV1HYMAPTUViT7E4wLUB38OdDmb+HshjGmA==",
"dev": true
},
"ansi-styles": {
@@ -10963,13 +11404,13 @@
}
},
"proxy-addr": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.2.tgz",
- "integrity": "sha1-ZXFQT0e7mI7IGAJT+F3X4UlSvew=",
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.3.tgz",
+ "integrity": "sha512-jQTChiCJteusULxjBp8+jftSQE5Obdl3k4cnmLA6WXtK6XFuWRnvVL7aCiBqaLPM8c4ph0S4tKna8XvmIwEnXQ==",
"dev": true,
"requires": {
"forwarded": "0.1.2",
- "ipaddr.js": "1.5.2"
+ "ipaddr.js": "1.6.0"
}
},
"proxy-agent": {
@@ -10989,6 +11430,16 @@
"socks-proxy-agent": "2.1.1"
},
"dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
"lru-cache": {
"version": "2.6.5",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.6.5.tgz",
@@ -11024,9 +11475,9 @@
}
},
"pump": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/pump/-/pump-1.0.3.tgz",
- "integrity": "sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw==",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz",
+ "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==",
"dev": true,
"requires": {
"end-of-stream": "1.4.1",
@@ -11039,21 +11490,9 @@
"integrity": "sha512-2kmNR9ry+Pf45opRVirpNuIFotsxUGLaYqxIwuR77AYrYRMuFCz9eryHBS52L360O+NcR383CL4QYlMKPq4zYA==",
"dev": true,
"requires": {
- "duplexify": "3.5.3",
+ "duplexify": "3.5.4",
"inherits": "2.0.3",
"pump": "2.0.1"
- },
- "dependencies": {
- "pump": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz",
- "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==",
- "dev": true,
- "requires": {
- "end-of-stream": "1.4.1",
- "once": "1.4.0"
- }
- }
}
},
"punycode": {
@@ -11069,9 +11508,9 @@
"dev": true
},
"qjobs": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.1.5.tgz",
- "integrity": "sha1-ZZ3p8s+NzCehSBJ28gU3cnI4LnM=",
+ "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==",
"dev": true
},
"qs": {
@@ -11158,9 +11597,9 @@
}
},
"randomfill": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.3.tgz",
- "integrity": "sha512-YL6GrhrWoic0Eq8rXVbMptH7dAxCs0J+mh5Y0euNekPPYaxEmdVGim6GdoxoRzKW2yJoU8tueifS7mYxvcFDEQ==",
+ "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": {
"randombytes": "2.0.6",
@@ -11222,7 +11661,7 @@
"integrity": "sha1-JyT9aoET1zdkrCiNQ4YnDB2/F/A=",
"dev": true,
"requires": {
- "readable-stream": "2.3.3"
+ "readable-stream": "2.3.5"
}
},
"read-pkg": {
@@ -11287,14 +11726,14 @@
}
},
"readable-stream": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
- "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==",
+ "version": "2.3.5",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.5.tgz",
+ "integrity": "sha512-tK0yDhrkygt/knjowCUiWP9YdV7c5R+8cR0r/kt9ZhBU906Fs6RpQJCEilamRJj1Nx2rWI6LkW9gKqjTkshhEw==",
"requires": {
"core-util-is": "1.0.2",
"inherits": "2.0.3",
"isarray": "1.0.0",
- "process-nextick-args": "1.0.7",
+ "process-nextick-args": "2.0.0",
"safe-buffer": "5.1.1",
"string_decoder": "1.0.3",
"util-deprecate": "1.0.2"
@@ -11308,7 +11747,7 @@
"requires": {
"graceful-fs": "4.1.11",
"minimatch": "3.0.4",
- "readable-stream": "2.3.3",
+ "readable-stream": "2.3.5",
"set-immediate-shim": "1.0.1"
}
},
@@ -11330,14 +11769,14 @@
"optional": true,
"requires": {
"double-ended-queue": "2.1.0-0",
- "redis-commands": "1.3.1",
+ "redis-commands": "1.3.5",
"redis-parser": "2.6.0"
}
},
"redis-commands": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/redis-commands/-/redis-commands-1.3.1.tgz",
- "integrity": "sha1-gdgm9F+pyLIBH0zXoP5ZfSQdRCs=",
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/redis-commands/-/redis-commands-1.3.5.tgz",
+ "integrity": "sha512-foGF8u6MXGFF++1TZVC6icGXuMYPftKXt1FBT2vrfU9ZATNtZJ8duRC5d1lEfE8hyVe3jhelHGB91oB7I6qLsA==",
"dev": true,
"optional": true
},
@@ -11411,12 +11850,13 @@
}
},
"regex-not": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.0.tgz",
- "integrity": "sha1-Qvg+OXcWIt+CawKvF2Ul1qXxV/k=",
+ "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": "2.0.1"
+ "extend-shallow": "3.0.2",
+ "safe-regex": "1.1.0"
}
},
"regexpu-core": {
@@ -11508,7 +11948,7 @@
"aws-sign2": "0.6.0",
"aws4": "1.6.0",
"caseless": "0.12.0",
- "combined-stream": "1.0.5",
+ "combined-stream": "1.0.6",
"extend": "3.0.1",
"forever-agent": "0.6.1",
"form-data": "2.1.4",
@@ -11518,13 +11958,13 @@
"is-typedarray": "1.0.0",
"isstream": "0.1.2",
"json-stringify-safe": "5.0.1",
- "mime-types": "2.1.17",
+ "mime-types": "2.1.18",
"oauth-sign": "0.8.2",
"performance-now": "0.2.0",
"qs": "6.4.0",
"safe-buffer": "5.1.1",
"stringstream": "0.0.5",
- "tough-cookie": "2.3.3",
+ "tough-cookie": "2.3.4",
"tunnel-agent": "0.6.0",
"uuid": "3.2.1"
},
@@ -11536,8 +11976,8 @@
"dev": true,
"requires": {
"asynckit": "0.4.0",
- "combined-stream": "1.0.5",
- "mime-types": "2.1.17"
+ "combined-stream": "1.0.6",
+ "mime-types": "2.1.18"
}
},
"qs": {
@@ -11548,6 +11988,27 @@
}
}
},
+ "request-promise": {
+ "version": "4.2.2",
+ "resolved": "https://registry.npmjs.org/request-promise/-/request-promise-4.2.2.tgz",
+ "integrity": "sha1-0epG1lSm7k+O5qT+oQGMIpEZBLQ=",
+ "dev": true,
+ "requires": {
+ "bluebird": "3.5.1",
+ "request-promise-core": "1.1.1",
+ "stealthy-require": "1.1.1",
+ "tough-cookie": "2.3.4"
+ }
+ },
+ "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=",
+ "dev": true,
+ "requires": {
+ "lodash": "4.17.5"
+ }
+ },
"requestretry": {
"version": "1.13.0",
"resolved": "https://registry.npmjs.org/requestretry/-/requestretry-1.13.0.tgz",
@@ -11556,7 +12017,7 @@
"optional": true,
"requires": {
"extend": "3.0.1",
- "lodash": "4.17.4",
+ "lodash": "4.17.5",
"request": "2.81.0",
"when": "3.7.8"
}
@@ -11615,6 +12076,12 @@
"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
+ },
"right-align": {
"version": "0.1.3",
"resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz",
@@ -11657,7 +12124,7 @@
"resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.2.tgz",
"integrity": "sha512-oRYoIKWBU3Ic37fLA5VJu31VqQO4bWubRntcHSJ+cwaDQBwdnZ9x4zmhJfm/nFQ2E82/I4loSioHnACamrKGgA==",
"requires": {
- "symbol-observable": "1.1.0"
+ "symbol-observable": "1.2.0"
}
},
"safe-buffer": {
@@ -11665,6 +12132,15 @@
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
"integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg=="
},
+ "safe-regex": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
+ "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
+ "dev": true,
+ "requires": {
+ "ret": "0.1.15"
+ }
+ },
"sass-graph": {
"version": "2.2.4",
"resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.4.tgz",
@@ -11673,21 +12149,21 @@
"optional": true,
"requires": {
"glob": "7.1.2",
- "lodash": "4.17.4",
+ "lodash": "4.17.5",
"scss-tokenizer": "0.2.3",
"yargs": "7.1.0"
}
},
"sass-loader": {
- "version": "6.0.6",
- "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-6.0.6.tgz",
- "integrity": "sha512-c3/Zc+iW+qqDip6kXPYLEgsAu2lf4xz0EZDplB7EmSUMda12U1sGJPetH55B/j9eu0bTtKzKlNPWWyYC7wFNyQ==",
+ "version": "6.0.7",
+ "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-6.0.7.tgz",
+ "integrity": "sha512-JoiyD00Yo1o61OJsoP2s2kb19L1/Y2p3QFcCdWdF6oomBGKVYuZyqHWemRBfQ2uGYsk+CH3eCguXNfpjzlcpaA==",
"dev": true,
"requires": {
- "async": "2.6.0",
- "clone-deep": "0.3.0",
+ "clone-deep": "2.0.2",
"loader-utils": "1.1.0",
"lodash.tail": "4.1.1",
+ "neo-async": "2.5.0",
"pify": "3.0.0"
}
},
@@ -11707,11 +12183,12 @@
"dev": true
},
"schema-utils": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.3.0.tgz",
- "integrity": "sha1-9YdyIs4+kx7a4DnxfrNxbnE3+M8=",
+ "version": "0.4.5",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.5.tgz",
+ "integrity": "sha512-yYrjb9TX2k/J1Y5UNy3KYdZq10xhYcF8nMpAW6o3hy6Q8WSIEf9lJHG/ePnOBfziPM3fvQwfOwa13U/Fh8qTfA==",
"requires": {
- "ajv": "5.5.2"
+ "ajv": "6.2.1",
+ "ajv-keywords": "3.1.0"
}
},
"scss-tokenizer": {
@@ -11721,7 +12198,7 @@
"dev": true,
"optional": true,
"requires": {
- "js-base64": "2.4.2",
+ "js-base64": "2.4.3",
"source-map": "0.4.4"
},
"dependencies": {
@@ -11767,12 +12244,12 @@
}
},
"selfsigned": {
- "version": "1.10.1",
- "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.1.tgz",
- "integrity": "sha1-v4y3uDJWxFUeMTR8YxF3jbme7FI=",
+ "version": "1.10.2",
+ "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.2.tgz",
+ "integrity": "sha1-tESVgNmZKbZbEKSDiTAaZZIIh1g=",
"dev": true,
"requires": {
- "node-forge": "0.6.33"
+ "node-forge": "0.7.1"
}
},
"semver": {
@@ -11811,6 +12288,15 @@
"statuses": "1.3.1"
},
"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"
+ }
+ },
"mime": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz",
@@ -11831,13 +12317,24 @@
"integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=",
"dev": true,
"requires": {
- "accepts": "1.3.4",
+ "accepts": "1.3.5",
"batch": "0.6.1",
"debug": "2.6.9",
"escape-html": "1.0.3",
"http-errors": "1.6.2",
- "mime-types": "2.1.17",
+ "mime-types": "2.1.18",
"parseurl": "1.3.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"
+ }
+ }
}
},
"serve-static": {
@@ -11858,15 +12355,6 @@
"integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
"dev": true
},
- "set-getter": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/set-getter/-/set-getter-0.1.0.tgz",
- "integrity": "sha1-12nBgsnVpR9AkUXy+6guXoboA3Y=",
- "dev": true,
- "requires": {
- "to-object-path": "0.3.0"
- }
- },
"set-immediate-shim": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz",
@@ -11883,6 +12371,17 @@
"is-extendable": "0.1.1",
"is-plain-object": "2.0.4",
"split-string": "3.1.0"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ }
}
},
"setimmediate": {
@@ -11908,25 +12407,21 @@
}
},
"shallow-clone": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-0.1.2.tgz",
- "integrity": "sha1-WQnodLp3EG1zrEFM/sH/yofZcGA=",
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-1.0.0.tgz",
+ "integrity": "sha512-oeXreoKR/SyNJtRJMAKPDSvd28OqEwG4eR/xc856cRGBII7gX9lvAqDxusPm0846z/w/hWYjI1NpKwJ00NHzRA==",
"dev": true,
"requires": {
"is-extendable": "0.1.1",
- "kind-of": "2.0.1",
- "lazy-cache": "0.2.7",
+ "kind-of": "5.1.0",
"mixin-object": "2.0.1"
},
"dependencies": {
"kind-of": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-2.0.1.tgz",
- "integrity": "sha1-AY7HpM5+OobLkUG+UZ0kyPqpgbU=",
- "dev": true,
- "requires": {
- "is-buffer": "1.1.6"
- }
+ "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
}
}
},
@@ -11991,6 +12486,17 @@
"dev": true,
"requires": {
"debug": "2.6.9"
+ },
+ "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"
+ }
+ }
}
},
"slack-node": {
@@ -12026,9 +12532,9 @@
}
},
"snapdragon": {
- "version": "0.8.1",
- "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.1.tgz",
- "integrity": "sha1-4StUh/re0+PeoKyR6UAL91tAE3A=",
+ "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.2",
@@ -12038,9 +12544,18 @@
"map-cache": "0.2.2",
"source-map": "0.5.7",
"source-map-resolve": "0.5.1",
- "use": "2.0.2"
+ "use": "3.1.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"
+ }
+ },
"define-property": {
"version": "0.2.5",
"resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
@@ -12050,6 +12565,15 @@
"is-descriptor": "0.1.6"
}
},
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ },
"is-accessor-descriptor": {
"version": "0.1.6",
"resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
@@ -12120,6 +12644,15 @@
"snapdragon-util": "3.0.1"
},
"dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "1.0.2"
+ }
+ },
"isobject": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
@@ -12153,10 +12686,21 @@
"dev": true,
"requires": {
"debug": "2.6.9",
- "engine.io": "3.1.4",
+ "engine.io": "3.1.5",
"socket.io-adapter": "1.1.1",
"socket.io-client": "2.0.4",
- "socket.io-parser": "3.1.2"
+ "socket.io-parser": "3.1.3"
+ },
+ "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"
+ }
+ }
}
},
"socket.io-adapter": {
@@ -12176,24 +12720,35 @@
"component-bind": "1.0.0",
"component-emitter": "1.2.1",
"debug": "2.6.9",
- "engine.io-client": "3.1.4",
+ "engine.io-client": "3.1.6",
"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.1.2",
+ "socket.io-parser": "3.1.3",
"to-array": "0.1.4"
+ },
+ "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"
+ }
+ }
}
},
"socket.io-parser": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.1.2.tgz",
- "integrity": "sha1-28IoIVH8T6675Aru3Ady66YZ9/I=",
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.1.3.tgz",
+ "integrity": "sha512-g0a2HPqLguqAczs3dMECuA1RgoGFPyvDqcbaDEdCWY9g59kdUAz3YRmaJBNKXflrHNwB7Q12Gkf/0CZXfdHR7g==",
"dev": true,
"requires": {
"component-emitter": "1.2.1",
- "debug": "2.6.9",
+ "debug": "3.1.0",
"has-binary2": "1.0.2",
"isarray": "2.0.1"
},
@@ -12230,6 +12785,15 @@
"url-parse": "1.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"
+ }
+ },
"faye-websocket": {
"version": "0.11.1",
"resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.1.tgz",
@@ -12343,24 +12907,35 @@
"dev": true
},
"spdx-correct": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz",
- "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz",
+ "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==",
"dev": true,
"requires": {
- "spdx-license-ids": "1.2.2"
+ "spdx-expression-parse": "3.0.0",
+ "spdx-license-ids": "3.0.0"
}
},
- "spdx-expression-parse": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz",
- "integrity": "sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=",
+ "spdx-exceptions": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz",
+ "integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg==",
"dev": true
},
+ "spdx-expression-parse": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz",
+ "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==",
+ "dev": true,
+ "requires": {
+ "spdx-exceptions": "2.1.0",
+ "spdx-license-ids": "3.0.0"
+ }
+ },
"spdx-license-ids": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz",
- "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=",
+ "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
},
"spdy": {
@@ -12375,6 +12950,17 @@
"safe-buffer": "5.1.1",
"select-hose": "2.0.0",
"spdy-transport": "2.0.20"
+ },
+ "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"
+ }
+ }
}
},
"spdy-transport": {
@@ -12386,10 +12972,21 @@
"debug": "2.6.9",
"detect-node": "2.0.3",
"hpack.js": "2.1.6",
- "obuf": "1.1.1",
- "readable-stream": "2.3.3",
+ "obuf": "1.1.2",
+ "readable-stream": "2.3.5",
"safe-buffer": "5.1.1",
- "wbuf": "1.7.2"
+ "wbuf": "1.7.3"
+ },
+ "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"
+ }
+ }
}
},
"split-string": {
@@ -12399,27 +12996,6 @@
"dev": true,
"requires": {
"extend-shallow": "3.0.2"
- },
- "dependencies": {
- "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"
- }
- },
- "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"
- }
- }
}
},
"sprintf-js": {
@@ -12453,9 +13029,9 @@
}
},
"ssri": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/ssri/-/ssri-5.1.0.tgz",
- "integrity": "sha512-TevC8fgxQKTfQ1nWtM9GNzr3q5rrHNntG9CDMH1k3QhSZI6Kb+NbjLRs8oPFZa2Hgo7zoekL+UTvoEk7tsbjQg==",
+ "version": "5.2.4",
+ "resolved": "https://registry.npmjs.org/ssri/-/ssri-5.2.4.tgz",
+ "integrity": "sha512-UnEAgMZa15973iH7cUi0AHjJn1ACDIkaMyZILoqwN6yzt+4P81I8tBc5Hl+qwi5auMplZtPQsHrPBR5vJLcQtQ==",
"dev": true,
"requires": {
"safe-buffer": "5.1.1"
@@ -12552,9 +13128,15 @@
"dev": true,
"optional": true,
"requires": {
- "readable-stream": "2.3.3"
+ "readable-stream": "2.3.5"
}
},
+ "stealthy-require": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz",
+ "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=",
+ "dev": true
+ },
"stream-browserify": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz",
@@ -12562,7 +13144,7 @@
"dev": true,
"requires": {
"inherits": "2.0.3",
- "readable-stream": "2.3.3"
+ "readable-stream": "2.3.5"
}
},
"stream-combiner2": {
@@ -12572,7 +13154,7 @@
"dev": true,
"requires": {
"duplexer2": "0.1.4",
- "readable-stream": "2.3.3"
+ "readable-stream": "2.3.5"
}
},
"stream-each": {
@@ -12593,7 +13175,7 @@
"requires": {
"builtin-status-codes": "3.0.0",
"inherits": "2.0.3",
- "readable-stream": "2.3.3",
+ "readable-stream": "2.3.5",
"to-arraybuffer": "1.0.1",
"xtend": "4.0.1"
}
@@ -12611,7 +13193,7 @@
"dev": true,
"requires": {
"inherits": "2.0.3",
- "readable-stream": "2.3.3"
+ "readable-stream": "2.3.5"
}
},
"streamroller": {
@@ -12623,18 +13205,7 @@
"date-format": "1.2.0",
"debug": "3.1.0",
"mkdirp": "0.5.1",
- "readable-stream": "2.3.3"
- },
- "dependencies": {
- "debug": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
- "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
- "dev": true,
- "requires": {
- "ms": "2.0.0"
- }
- }
+ "readable-stream": "2.3.5"
}
},
"strict-uri-encode": {
@@ -12723,7 +13294,7 @@
"dev": true,
"requires": {
"css-parse": "1.7.0",
- "debug": "2.6.9",
+ "debug": "3.1.0",
"glob": "7.0.6",
"mkdirp": "0.5.1",
"sax": "0.5.8",
@@ -12762,9 +13333,9 @@
}
},
"stylus-loader": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/stylus-loader/-/stylus-loader-3.0.1.tgz",
- "integrity": "sha1-d/SzT9Aw0lsmF7z1UT21sHMMQIk=",
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/stylus-loader/-/stylus-loader-3.0.2.tgz",
+ "integrity": "sha512-+VomPdZ6a0razP+zinir61yZgpw2NfljeSsdUF5kJuEzlo3khXhY19Fn6l8QQz1GRJGtMCo8nG5C04ePyV7SUA==",
"dev": true,
"requires": {
"loader-utils": "1.1.0",
@@ -12798,20 +13369,20 @@
}
},
"superagent": {
- "version": "3.4.1",
- "resolved": "https://registry.npmjs.org/superagent/-/superagent-3.4.1.tgz",
- "integrity": "sha1-S9EnQSJNDs5tn3V/HDvsvn8kwRU=",
+ "version": "3.8.2",
+ "resolved": "https://registry.npmjs.org/superagent/-/superagent-3.8.2.tgz",
+ "integrity": "sha512-gVH4QfYHcY3P0f/BZzavLreHW3T1v7hG9B+hpMQotGQqurOvhv87GcMCd6LWySmBuf+BDR44TQd0aISjVHLeNQ==",
"requires": {
"component-emitter": "1.2.1",
"cookiejar": "2.1.1",
- "debug": "2.6.9",
+ "debug": "3.1.0",
"extend": "3.0.1",
- "form-data": "2.3.1",
- "formidable": "1.1.1",
+ "form-data": "2.3.2",
+ "formidable": "1.2.0",
"methods": "1.1.2",
"mime": "1.6.0",
"qs": "6.5.1",
- "readable-stream": "2.3.3"
+ "readable-stream": "2.3.5"
}
},
"supports-color": {
@@ -12839,25 +13410,17 @@
}
},
"symbol-observable": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.1.0.tgz",
- "integrity": "sha512-dQoid9tqQ+uotGhuTKEY11X4xhyYePVnqGSoSm3OGKh2E8LZ6RPULp1uXTctk33IeERlrRJYoVSBglsL05F5Uw=="
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz",
+ "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ=="
},
"syntax-error": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/syntax-error/-/syntax-error-1.3.0.tgz",
- "integrity": "sha1-HtkmbE1AvnXcVb+bsct3Biu5bKE=",
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/syntax-error/-/syntax-error-1.4.0.tgz",
+ "integrity": "sha512-YPPlu67mdnHGTup2A8ff7BC2Pjq0e0Yp/IyTFN03zWO0RcK07uLcbi7C2KpGR2FvWbaB0+bfE27a+sBKebSo7w==",
"dev": true,
"requires": {
- "acorn": "4.0.13"
- },
- "dependencies": {
- "acorn": {
- "version": "4.0.13",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz",
- "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=",
- "dev": true
- }
+ "acorn-node": "1.3.0"
}
},
"systemjs": {
@@ -12886,6 +13449,12 @@
"inherits": "2.0.3"
}
},
+ "teamwork": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/teamwork/-/teamwork-3.0.1.tgz",
+ "integrity": "sha512-hEkJIpDOfOYe9NYaLFk00zQbzZeKNCY8T2pRH3I13Y1mJwxaSQ6NEsjY5rCp+11ezCiZpWGoGFTbOuhg4qKevQ==",
+ "dev": true
+ },
"through": {
"version": "2.3.8",
"resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
@@ -12898,7 +13467,7 @@
"integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
"dev": true,
"requires": {
- "readable-stream": "2.3.3",
+ "readable-stream": "2.3.5",
"xtend": "4.0.1"
}
},
@@ -12910,9 +13479,9 @@
"optional": true
},
"thunky": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/thunky/-/thunky-0.1.0.tgz",
- "integrity": "sha1-vzAUaCTituZ7Dy16Ssi+smkIaE4=",
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.0.2.tgz",
+ "integrity": "sha1-qGLgGOP7HqLsP85dVWBc9X8kc3E=",
"dev": true
},
"time-stamp": {
@@ -12974,82 +13543,15 @@
}
},
"to-regex": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.1.tgz",
- "integrity": "sha1-FTWL7kosg712N3uh3ASdDxiDeq4=",
+ "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": "0.2.5",
- "extend-shallow": "2.0.1",
- "regex-not": "1.0.0"
- },
- "dependencies": {
- "define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
- "dev": true,
- "requires": {
- "is-descriptor": "0.1.6"
- }
- },
- "is-accessor-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
- "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
- "dev": true,
- "requires": {
- "kind-of": "3.2.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.6"
- }
- }
- }
- },
- "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.2.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.6"
- }
- }
- }
- },
- "is-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
- "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
- "dev": true,
- "requires": {
- "is-accessor-descriptor": "0.1.6",
- "is-data-descriptor": "0.1.4",
- "kind-of": "5.1.0"
- }
- },
- "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
- }
+ "define-property": "2.0.2",
+ "extend-shallow": "3.0.2",
+ "regex-not": "1.0.2",
+ "safe-regex": "1.1.0"
}
},
"to-regex-range": {
@@ -13073,6 +13575,23 @@
}
}
},
+ "topo": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/topo/-/topo-2.0.2.tgz",
+ "integrity": "sha1-zVYVdSU5BXwNwEkaYhw7xvvh0YI=",
+ "dev": true,
+ "requires": {
+ "hoek": "4.2.1"
+ },
+ "dependencies": {
+ "hoek": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz",
+ "integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA==",
+ "dev": true
+ }
+ }
+ },
"toposort": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/toposort/-/toposort-1.0.6.tgz",
@@ -13080,9 +13599,9 @@
"dev": true
},
"tough-cookie": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.3.tgz",
- "integrity": "sha1-C2GKVWW23qkL80JdBNVe3EdadWE=",
+ "version": "2.3.4",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz",
+ "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==",
"dev": true,
"requires": {
"punycode": "1.4.1"
@@ -13139,28 +13658,34 @@
"dev": true,
"requires": {
"arrify": "1.0.1",
- "chalk": "2.3.0",
- "diff": "3.4.0",
- "make-error": "1.3.2",
+ "chalk": "2.3.2",
+ "diff": "3.5.0",
+ "make-error": "1.3.4",
"minimist": "1.2.0",
"mkdirp": "0.5.1",
"source-map-support": "0.5.3",
"tsconfig": "7.0.0",
- "v8flags": "3.0.1",
+ "v8flags": "3.0.2",
"yn": "2.0.0"
},
"dependencies": {
"chalk": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz",
- "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==",
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz",
+ "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==",
"dev": true,
"requires": {
- "ansi-styles": "3.2.0",
+ "ansi-styles": "3.2.1",
"escape-string-regexp": "1.0.5",
- "supports-color": "4.5.0"
+ "supports-color": "5.3.0"
}
},
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "dev": true
+ },
"minimist": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
@@ -13181,6 +13706,15 @@
"requires": {
"source-map": "0.6.1"
}
+ },
+ "supports-color": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz",
+ "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==",
+ "dev": true,
+ "requires": {
+ "has-flag": "3.0.0"
+ }
}
}
},
@@ -13205,9 +13739,9 @@
}
},
"tsickle": {
- "version": "0.26.0",
- "resolved": "https://registry.npmjs.org/tsickle/-/tsickle-0.26.0.tgz",
- "integrity": "sha512-eWJ2CUfttGK0LqF9iJ/Avnxbj4M+fCyJ50Zag3wm73Fut1hsasPRHKxKdrMWVj4BMHnQNx7TO+DdNmLmJTSuNw==",
+ "version": "0.25.6",
+ "resolved": "https://registry.npmjs.org/tsickle/-/tsickle-0.25.6.tgz",
+ "integrity": "sha1-tZXbFrI2chgk7u2ouyYjZbR+8zQ=",
"dev": true,
"requires": {
"minimist": "1.2.0",
@@ -13237,27 +13771,42 @@
"requires": {
"babel-code-frame": "6.26.0",
"builtin-modules": "1.1.1",
- "chalk": "2.3.0",
- "commander": "2.12.2",
- "diff": "3.4.0",
+ "chalk": "2.3.2",
+ "commander": "2.14.1",
+ "diff": "3.5.0",
"glob": "7.1.2",
"js-yaml": "3.7.0",
"minimatch": "3.0.4",
"resolve": "1.5.0",
"semver": "5.5.0",
"tslib": "1.9.0",
- "tsutils": "2.19.1"
+ "tsutils": "2.22.2"
},
"dependencies": {
"chalk": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz",
- "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==",
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz",
+ "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==",
"dev": true,
"requires": {
- "ansi-styles": "3.2.0",
+ "ansi-styles": "3.2.1",
"escape-string-regexp": "1.0.5",
- "supports-color": "4.5.0"
+ "supports-color": "5.3.0"
+ }
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz",
+ "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==",
+ "dev": true,
+ "requires": {
+ "has-flag": "3.0.0"
}
}
}
@@ -13270,9 +13819,9 @@
"optional": true
},
"tsutils": {
- "version": "2.19.1",
- "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.19.1.tgz",
- "integrity": "sha512-1B3z4H4HddgzWptqLzwrJloDEsyBt8DvZhnFO14k7A4RsQL/UhEfQjD4hpcY5NpF3veBkjJhQJ8Bl7Xp96cN+A==",
+ "version": "2.22.2",
+ "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.22.2.tgz",
+ "integrity": "sha512-u06FUSulCJ+Y8a2ftuqZN6kIGqdP2yJjUPEngXqmdPND4UQfb04igcotH+dw+IFr417yP6muCLE8/5/Qlfnx0w==",
"dev": true,
"requires": {
"tslib": "1.9.0"
@@ -13310,13 +13859,13 @@
}
},
"type-is": {
- "version": "1.6.15",
- "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.15.tgz",
- "integrity": "sha1-yrEPtJCeRByChC6v4a1kbIGARBA=",
+ "version": "1.6.16",
+ "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz",
+ "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==",
"dev": true,
"requires": {
"media-typer": "0.3.0",
- "mime-types": "2.1.17"
+ "mime-types": "2.1.18"
}
},
"typedarray": {
@@ -13332,21 +13881,15 @@
"dev": true
},
"uglify-js": {
- "version": "3.3.8",
- "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.3.8.tgz",
- "integrity": "sha512-X0jAGtpSZRtd4RhbVNuGHyjZNa/h2MrVkKrR3Ew5iL2MJw6d7FmBke+fhVCALWySv1ygHnjjROG1KI1FAPvddw==",
+ "version": "3.3.14",
+ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.3.14.tgz",
+ "integrity": "sha512-OY8VPQU25q09gQRbC+Ekk3xgEVBmYFEfVcgS47ksjTiNht2LmLlUkWutyi38ZsDSToJHwbe76kDGwmD226Z2Fg==",
"dev": true,
"requires": {
- "commander": "2.13.0",
+ "commander": "2.14.1",
"source-map": "0.6.1"
},
"dependencies": {
- "commander": {
- "version": "2.13.0",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.13.0.tgz",
- "integrity": "sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA==",
- "dev": true
- },
"source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
@@ -13363,19 +13906,19 @@
"optional": true
},
"uglifyjs-webpack-plugin": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.1.6.tgz",
- "integrity": "sha512-VUja+7rYbznEvUaeb8IxOCTUrq4BCb1ml0vffa+mfwKtrAwlqnU0ENF14DtYltV1cxd/HSuK51CCA/D/8kMQVw==",
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.2.3.tgz",
+ "integrity": "sha512-as/50351uuJGiQbhVvE510SCqM/YOWghCzIFJeEOu5oVE0QOZ3/vu2QcnVvu0Lz+vNd0rKsiCFAlbcw0i/YH2w==",
"dev": true,
"requires": {
- "cacache": "10.0.2",
+ "cacache": "10.0.4",
"find-cache-dir": "1.0.0",
- "schema-utils": "0.4.3",
+ "schema-utils": "0.4.5",
"serialize-javascript": "1.4.0",
"source-map": "0.6.1",
- "uglify-es": "3.3.8",
+ "uglify-es": "3.3.9",
"webpack-sources": "1.1.0",
- "worker-farm": "1.5.2"
+ "worker-farm": "1.6.0"
},
"dependencies": {
"commander": {
@@ -13384,16 +13927,6 @@
"integrity": "sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA==",
"dev": true
},
- "schema-utils": {
- "version": "0.4.3",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.3.tgz",
- "integrity": "sha512-sgv/iF/T4/SewJkaVpldKC4WjSkz0JsOh2eKtxCPpCO1oR05+7MOF+H476HVRbLArkgA7j5TRJJ4p2jdFkUGQQ==",
- "dev": true,
- "requires": {
- "ajv": "5.5.2",
- "ajv-keywords": "2.1.1"
- }
- },
"source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
@@ -13401,9 +13934,9 @@
"dev": true
},
"uglify-es": {
- "version": "3.3.8",
- "resolved": "https://registry.npmjs.org/uglify-es/-/uglify-es-3.3.8.tgz",
- "integrity": "sha512-j8li0jWcAN6yBuAVYFZEFyYINZAm4WEdMwkA6qXFi4TLrze3Mp0Le7QjW6LR9HQjQJ2zRa9VgnFLs3PatijWOw==",
+ "version": "3.3.9",
+ "resolved": "https://registry.npmjs.org/uglify-es/-/uglify-es-3.3.9.tgz",
+ "integrity": "sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ==",
"dev": true,
"requires": {
"commander": "2.13.0",
@@ -13442,6 +13975,15 @@
"set-value": "0.4.3"
},
"dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ },
"set-value": {
"version": "0.4.3",
"resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz",
@@ -13553,6 +14095,12 @@
}
}
},
+ "upath": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/upath/-/upath-1.0.4.tgz",
+ "integrity": "sha512-d4SJySNBXDaQp+DPrziv3xGS6w3d2Xt69FijJr86zMPBy23JEloMCEOUBBzuN7xCtjLCnmB9tI/z7SBCahHBOw==",
+ "dev": true
+ },
"upper-case": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz",
@@ -13592,6 +14140,29 @@
"loader-utils": "1.1.0",
"mime": "1.6.0",
"schema-utils": "0.3.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.1.0",
+ "fast-json-stable-stringify": "2.0.0",
+ "json-schema-traverse": "0.3.1"
+ }
+ },
+ "schema-utils": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.3.0.tgz",
+ "integrity": "sha1-9YdyIs4+kx7a4DnxfrNxbnE3+M8=",
+ "dev": true,
+ "requires": {
+ "ajv": "5.5.2"
+ }
+ }
}
},
"url-parse": {
@@ -13613,115 +14184,30 @@
}
},
"use": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/use/-/use-2.0.2.tgz",
- "integrity": "sha1-riig1y+TvyJCKhii43mZMRLeyOg=",
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/use/-/use-3.1.0.tgz",
+ "integrity": "sha512-6UJEQM/L+mzC3ZJNM56Q4DFGLX/evKGRg15UJHGB9X5j5Z3AFbgZvjUh2yq/UJUY4U5dh7Fal++XbNg1uzpRAw==",
"dev": true,
"requires": {
- "define-property": "0.2.5",
- "isobject": "3.0.1",
- "lazy-cache": "2.0.2"
+ "kind-of": "6.0.2"
},
"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.6"
- }
- },
- "is-accessor-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
- "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
- "dev": true,
- "requires": {
- "kind-of": "3.2.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.6"
- }
- }
- }
- },
- "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.2.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.6"
- }
- }
- }
- },
- "is-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
- "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
- "dev": true,
- "requires": {
- "is-accessor-descriptor": "0.1.6",
- "is-data-descriptor": "0.1.4",
- "kind-of": "5.1.0"
- }
- },
- "isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
- "dev": true
- },
"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==",
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
"dev": true
- },
- "lazy-cache": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-2.0.2.tgz",
- "integrity": "sha1-uRkKT5EzVGlIQIWfio9whNiCImQ=",
- "dev": true,
- "requires": {
- "set-getter": "0.1.0"
- }
}
}
},
"useragent": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/useragent/-/useragent-2.2.1.tgz",
- "integrity": "sha1-z1k+9PLRdYdei7ZY6pLhik/QbY4=",
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/useragent/-/useragent-2.3.0.tgz",
+ "integrity": "sha512-4AoH4pxuSvHCjqLO04sU6U/uE65BYza8l/KKBS0b0hnUPWi+cQ2BpeTEwejCSx9SPV5/U03nniDTrWx5NrmKdw==",
"dev": true,
"requires": {
- "lru-cache": "2.2.4",
+ "lru-cache": "4.1.2",
"tmp": "0.0.33"
- },
- "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
- }
}
},
"util": {
@@ -13765,29 +14251,29 @@
"dev": true
},
"uws": {
- "version": "0.14.5",
- "resolved": "https://registry.npmjs.org/uws/-/uws-0.14.5.tgz",
- "integrity": "sha1-Z6rzPEaypYel9mZtAPdpEyjxSdw=",
+ "version": "9.14.0",
+ "resolved": "https://registry.npmjs.org/uws/-/uws-9.14.0.tgz",
+ "integrity": "sha512-HNMztPP5A1sKuVFmdZ6BPVpBQd5bUjNC8EFMFiICK+oho/OQsAJy5hnIx4btMHiOk8j04f/DbIlqnEZ9d72dqg==",
"dev": true,
"optional": true
},
"v8flags": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.0.1.tgz",
- "integrity": "sha1-3Oj8N5wX2fLJ6e142JzgAFKxt2s=",
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.0.2.tgz",
+ "integrity": "sha512-6sgSKoFw1UpUPd3cFdF7QGnrH6tDeBgW1F3v9gy8gLY0mlbiBXq8soy8aQpY6xeeCjH5K+JvC62Acp7gtl7wWA==",
"dev": true,
"requires": {
"homedir-polyfill": "1.0.1"
}
},
"validate-npm-package-license": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz",
- "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=",
+ "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==",
"dev": true,
"requires": {
- "spdx-correct": "1.0.2",
- "spdx-expression-parse": "1.0.4"
+ "spdx-correct": "3.0.0",
+ "spdx-expression-parse": "3.0.0"
}
},
"vary": {
@@ -13843,20 +14329,353 @@
"dev": true
},
"watchpack": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.4.0.tgz",
- "integrity": "sha1-ShRyvLuVK9Cpu0A2gB+VTfs5+qw=",
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.5.0.tgz",
+ "integrity": "sha512-RSlipNQB1u48cq0wH/BNfCu1tD/cJ8ydFIkNYhp9o+3d+8unClkIovpW5qpFPgmL9OE48wfAnlZydXByWP82AA==",
"dev": true,
"requires": {
- "async": "2.6.0",
- "chokidar": "1.7.0",
- "graceful-fs": "4.1.11"
+ "chokidar": "2.0.2",
+ "graceful-fs": "4.1.11",
+ "neo-async": "2.5.0"
+ },
+ "dependencies": {
+ "anymatch": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
+ "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
+ "dev": true,
+ "requires": {
+ "micromatch": "3.1.9",
+ "normalize-path": "2.1.1"
+ }
+ },
+ "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
+ },
+ "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
+ },
+ "braces": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.1.tgz",
+ "integrity": "sha512-SO5lYHA3vO6gz66erVvedSCkp7AKWdv6VcQ2N4ysXfPxdAlxAMMAdwegGGcv1Bqwm7naF1hNdk5d6AAIEHV2nQ==",
+ "dev": true,
+ "requires": {
+ "arr-flatten": "1.1.0",
+ "array-unique": "0.3.2",
+ "define-property": "1.0.0",
+ "extend-shallow": "2.0.1",
+ "fill-range": "4.0.0",
+ "isobject": "3.0.1",
+ "kind-of": "6.0.2",
+ "repeat-element": "1.1.2",
+ "snapdragon": "0.8.2",
+ "snapdragon-node": "2.1.1",
+ "split-string": "3.1.0",
+ "to-regex": "3.0.2"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "1.0.2"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ }
+ }
+ },
+ "chokidar": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.2.tgz",
+ "integrity": "sha512-l32Hw3wqB0L2kGVmSbK/a+xXLDrUEsc84pSgMkmwygHvD7ubRsP/vxxHa5BtB6oix1XLLVCHyYMsckRXxThmZw==",
+ "dev": true,
+ "requires": {
+ "anymatch": "2.0.0",
+ "async-each": "1.0.1",
+ "braces": "2.3.1",
+ "fsevents": "1.1.3",
+ "glob-parent": "3.1.0",
+ "inherits": "2.0.3",
+ "is-binary-path": "1.0.1",
+ "is-glob": "4.0.0",
+ "normalize-path": "2.1.1",
+ "path-is-absolute": "1.0.1",
+ "readdirp": "2.1.0",
+ "upath": "1.0.4"
+ }
+ },
+ "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"
+ }
+ },
+ "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.6.9",
+ "define-property": "0.2.5",
+ "extend-shallow": "2.0.1",
+ "posix-character-classes": "0.1.1",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
+ },
+ "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.6"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "0.1.6",
+ "is-data-descriptor": "0.1.4",
+ "kind-of": "5.1.0"
+ }
+ },
+ "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
+ }
+ }
+ },
+ "extglob": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
+ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
+ "dev": true,
+ "requires": {
+ "array-unique": "0.3.2",
+ "define-property": "1.0.0",
+ "expand-brackets": "2.1.4",
+ "extend-shallow": "2.0.1",
+ "fragment-cache": "0.2.1",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "1.0.2"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ }
+ }
+ },
+ "fill-range": {
+ "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",
+ "repeat-string": "1.6.1",
+ "to-regex-range": "2.1.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ }
+ }
+ },
+ "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.2"
+ },
+ "dependencies": {
+ "is-glob": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
+ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "2.1.1"
+ }
+ }
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.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.6"
+ }
+ }
+ }
+ },
+ "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.2.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.6"
+ }
+ }
+ }
+ },
+ "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-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"
+ }
+ },
+ "is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "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.6"
+ }
+ }
+ }
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+ "dev": true
+ },
+ "micromatch": {
+ "version": "3.1.9",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.9.tgz",
+ "integrity": "sha512-SlIz6sv5UPaAVVFRKodKjCg48EbNoIhgetzfK/Cy0v5U52Z6zB136M8tp0UC9jM53LYbmIRihJszvvqpKkfm9g==",
+ "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.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
+ }
+ }
}
},
"wbuf": {
- "version": "1.7.2",
- "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.2.tgz",
- "integrity": "sha1-1pe5nx9ZUS3ydRvkJ2nBWAtYAf4=",
+ "version": "1.7.3",
+ "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz",
+ "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==",
"dev": true,
"requires": {
"minimalistic-assert": "1.0.0"
@@ -13931,7 +14750,7 @@
"dev": true,
"requires": {
"sax": "0.6.1",
- "xmlbuilder": "9.0.4"
+ "xmlbuilder": "9.0.7"
}
}
}
@@ -13942,7 +14761,7 @@
"integrity": "sha512-fxxKXoicjdXNUMY7LIdY89tkJJJ0m1Oo8PQutZ5rLgWbV5QVKI15Cn7+/IHnRTd3vfKfiwBx6SBqlorAuNA8LA==",
"dev": true,
"requires": {
- "acorn": "5.3.0",
+ "acorn": "5.5.3",
"acorn-dynamic-import": "2.0.2",
"ajv": "5.5.2",
"ajv-keywords": "2.1.1",
@@ -13961,11 +14780,29 @@
"supports-color": "4.5.0",
"tapable": "0.2.8",
"uglifyjs-webpack-plugin": "0.4.6",
- "watchpack": "1.4.0",
+ "watchpack": "1.5.0",
"webpack-sources": "1.1.0",
"yargs": "8.0.2"
},
"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.1.0",
+ "fast-json-stable-stringify": "2.0.0",
+ "json-schema-traverse": "0.3.1"
+ }
+ },
+ "ajv-keywords": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz",
+ "integrity": "sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I=",
+ "dev": true
+ },
"ansi-regex": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
@@ -14123,6 +14960,12 @@
"integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=",
"dev": true
},
+ "y18n": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz",
+ "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=",
+ "dev": true
+ },
"yargs": {
"version": "8.0.2",
"resolved": "https://registry.npmjs.org/yargs/-/yargs-8.0.2.tgz",
@@ -14236,16 +15079,16 @@
}
},
"webpack-dev-server": {
- "version": "2.11.1",
- "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-2.11.1.tgz",
- "integrity": "sha512-ombhu5KsO/85sVshIDTyQ5HF3xjZR3N0sf5Ao6h3vFwpNyzInEzA1GV3QPVjTMLTNckp8PjfG1PFGznzBwS5lg==",
+ "version": "2.11.2",
+ "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-2.11.2.tgz",
+ "integrity": "sha512-zrPoX97bx47vZiAXfDrkw8pe9QjJ+lunQl3dypojyWwWr1M5I2h0VSrMPfTjopHQPRNn+NqfjcMmhoLcUJe2gA==",
"dev": true,
"requires": {
"ansi-html": "0.0.7",
"array-includes": "3.0.3",
"bonjour": "3.5.0",
- "chokidar": "2.0.0",
- "compression": "1.7.1",
+ "chokidar": "2.0.2",
+ "compression": "1.7.2",
"connect-history-api-fallback": "1.5.0",
"debug": "3.1.0",
"del": "3.0.0",
@@ -14259,13 +15102,13 @@
"loglevel": "1.6.1",
"opn": "5.1.0",
"portfinder": "1.0.13",
- "selfsigned": "1.10.1",
+ "selfsigned": "1.10.2",
"serve-index": "1.9.1",
"sockjs": "0.3.19",
"sockjs-client": "1.1.4",
"spdy": "3.4.7",
"strip-ansi": "3.0.1",
- "supports-color": "5.1.0",
+ "supports-color": "5.3.0",
"webpack-dev-middleware": "1.12.2",
"yargs": "6.6.0"
},
@@ -14276,7 +15119,7 @@
"integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
"dev": true,
"requires": {
- "micromatch": "3.1.5",
+ "micromatch": "3.1.9",
"normalize-path": "2.1.1"
}
},
@@ -14293,9 +15136,9 @@
"dev": true
},
"braces": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.0.tgz",
- "integrity": "sha512-P4O8UQRdGiMLWSizsApmXVQDBS6KCt7dSexgLKBmH5Hr1CZq7vsnscFh8oR1sP1ab1Zj0uCHCEzZeV6SfUf3rA==",
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.1.tgz",
+ "integrity": "sha512-SO5lYHA3vO6gz66erVvedSCkp7AKWdv6VcQ2N4ysXfPxdAlxAMMAdwegGGcv1Bqwm7naF1hNdk5d6AAIEHV2nQ==",
"dev": true,
"requires": {
"arr-flatten": "1.1.0",
@@ -14304,11 +15147,32 @@
"extend-shallow": "2.0.1",
"fill-range": "4.0.0",
"isobject": "3.0.1",
+ "kind-of": "6.0.2",
"repeat-element": "1.1.2",
- "snapdragon": "0.8.1",
+ "snapdragon": "0.8.2",
"snapdragon-node": "2.1.1",
"split-string": "3.1.0",
- "to-regex": "3.0.1"
+ "to-regex": "3.0.2"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "1.0.2"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ }
}
},
"camelcase": {
@@ -14318,14 +15182,14 @@
"dev": true
},
"chokidar": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.0.tgz",
- "integrity": "sha512-OgXCNv2U6TnG04D3tth0gsvdbV4zdbxFG3sYUqcoQMoEFVd1j1pZR6TZ8iknC45o9IJ6PeQI/J6wT/+cHcniAw==",
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.2.tgz",
+ "integrity": "sha512-l32Hw3wqB0L2kGVmSbK/a+xXLDrUEsc84pSgMkmwygHvD7ubRsP/vxxHa5BtB6oix1XLLVCHyYMsckRXxThmZw==",
"dev": true,
"requires": {
"anymatch": "2.0.0",
"async-each": "1.0.1",
- "braces": "2.3.0",
+ "braces": "2.3.1",
"fsevents": "1.1.3",
"glob-parent": "3.1.0",
"inherits": "2.0.3",
@@ -14333,16 +15197,8 @@
"is-glob": "4.0.0",
"normalize-path": "2.1.1",
"path-is-absolute": "1.0.1",
- "readdirp": "2.1.0"
- }
- },
- "debug": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
- "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
- "dev": true,
- "requires": {
- "ms": "2.0.0"
+ "readdirp": "2.1.0",
+ "upath": "1.0.4"
}
},
"expand-brackets": {
@@ -14355,9 +15211,9 @@
"define-property": "0.2.5",
"extend-shallow": "2.0.1",
"posix-character-classes": "0.1.1",
- "regex-not": "1.0.0",
- "snapdragon": "0.8.1",
- "to-regex": "3.0.1"
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
},
"dependencies": {
"debug": {
@@ -14377,6 +15233,32 @@
"requires": {
"is-descriptor": "0.1.6"
}
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "0.1.6",
+ "is-data-descriptor": "0.1.4",
+ "kind-of": "5.1.0"
+ }
+ },
+ "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
}
}
},
@@ -14391,9 +15273,29 @@
"expand-brackets": "2.1.4",
"extend-shallow": "2.0.1",
"fragment-cache": "0.2.1",
- "regex-not": "1.0.0",
- "snapdragon": "0.8.1",
- "to-regex": "3.0.1"
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "1.0.2"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ }
}
},
"fill-range": {
@@ -14406,6 +15308,17 @@
"is-number": "3.0.0",
"repeat-string": "1.6.1",
"to-regex-range": "2.1.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ }
}
},
"glob-parent": {
@@ -14429,6 +15342,12 @@
}
}
},
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "dev": true
+ },
"is-accessor-descriptor": {
"version": "0.1.6",
"resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
@@ -14469,25 +15388,6 @@
}
}
},
- "is-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
- "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
- "dev": true,
- "requires": {
- "is-accessor-descriptor": "0.1.6",
- "is-data-descriptor": "0.1.4",
- "kind-of": "5.1.0"
- },
- "dependencies": {
- "kind-of": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
- "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
- "dev": true
- }
- }
- },
"is-extglob": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
@@ -14536,35 +15436,41 @@
"dev": true
},
"micromatch": {
- "version": "3.1.5",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.5.tgz",
- "integrity": "sha512-ykttrLPQrz1PUJcXjwsTUjGoPJ64StIGNE2lGVD1c9CuguJ+L7/navsE8IcDNndOoCMvYV0qc/exfVbMHkUhvA==",
+ "version": "3.1.9",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.9.tgz",
+ "integrity": "sha512-SlIz6sv5UPaAVVFRKodKjCg48EbNoIhgetzfK/Cy0v5U52Z6zB136M8tp0UC9jM53LYbmIRihJszvvqpKkfm9g==",
"dev": true,
"requires": {
"arr-diff": "4.0.0",
"array-unique": "0.3.2",
- "braces": "2.3.0",
- "define-property": "1.0.0",
- "extend-shallow": "2.0.1",
+ "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.7",
+ "nanomatch": "1.2.9",
"object.pick": "1.3.0",
- "regex-not": "1.0.0",
- "snapdragon": "0.8.1",
- "to-regex": "3.0.1"
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
}
},
"supports-color": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.1.0.tgz",
- "integrity": "sha512-Ry0AwkoKjDpVKK4sV4h6o3UJmNRbjYm2uXhwfj3J56lMVdvnUNqzQVRztOOMGQ++w1K/TjNDFvpJk0F/LoeBCQ==",
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz",
+ "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==",
"dev": true,
"requires": {
- "has-flag": "2.0.0"
+ "has-flag": "3.0.0"
}
},
+ "y18n": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz",
+ "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=",
+ "dev": true
+ },
"yargs": {
"version": "6.6.0",
"resolved": "https://registry.npmjs.org/yargs/-/yargs-6.6.0.tgz",
@@ -14598,12 +15504,12 @@
}
},
"webpack-merge": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.1.1.tgz",
- "integrity": "sha512-geQsZ86YkXOVOjvPC5yv3JSNnL6/X3Kzh935AQ/gJNEYXEfJDQFu/sdFuktS9OW2JcH/SJec8TGfRdrpHshH7A==",
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.1.2.tgz",
+ "integrity": "sha512-/0QYwW/H1N/CdXYA2PNPVbsxO3u2Fpz34vs72xm03SRfg6bMNGfMJIQEpQjKRvkG2JvT6oRJFpDtSrwbX8Jzvw==",
"dev": true,
"requires": {
- "lodash": "4.17.4"
+ "lodash": "4.17.5"
}
},
"webpack-sources": {
@@ -14625,9 +15531,9 @@
}
},
"webpack-subresource-integrity": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/webpack-subresource-integrity/-/webpack-subresource-integrity-1.0.3.tgz",
- "integrity": "sha1-wGBtQAkLBwzeQovsjfNgMhbkcus=",
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/webpack-subresource-integrity/-/webpack-subresource-integrity-1.0.4.tgz",
+ "integrity": "sha1-j6yKfo61n8ahZ2ioXJ2U7n+dDts=",
"dev": true,
"requires": {
"webpack-core": "0.6.9"
@@ -14639,7 +15545,7 @@
"integrity": "sha1-DK+dLXVdk67gSdS90NP+LMoqJOs=",
"dev": true,
"requires": {
- "http-parser-js": "0.4.9",
+ "http-parser-js": "0.4.11",
"websocket-extensions": "0.1.3"
}
},
@@ -14697,22 +15603,21 @@
"dev": true
},
"worker-farm": {
- "version": "1.5.2",
- "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.5.2.tgz",
- "integrity": "sha512-XxiQ9kZN5n6mmnW+mFJ+wXjNNI/Nx4DIdaAKLX1Bn6LYBWlN/zaBhu34DQYPZ1AJobQuu67S2OfDdNSVULvXkQ==",
+ "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": {
- "errno": "0.1.6",
- "xtend": "4.0.1"
+ "errno": "0.1.7"
}
},
"worker-loader": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/worker-loader/-/worker-loader-1.1.0.tgz",
- "integrity": "sha512-W91q8Wi1JxbzFQZuLJlFK4x8UuWjKgeOX9IMMyng007K0UkP6I8lOejckoCWY61QmnJq2x9qZ/Viru+uF8g6nA==",
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/worker-loader/-/worker-loader-1.1.1.tgz",
+ "integrity": "sha512-qJZLVS/jMCBITDzPo/RuweYSIG8VJP5P67mP/71alGyTZRe1LYJFdwLjLalY3T5ifx0bMDRD3OB6P2p1escvlg==",
"requires": {
"loader-utils": "1.1.0",
- "schema-utils": "0.3.0"
+ "schema-utils": "0.4.5"
}
},
"wrap-ansi": {
@@ -14755,13 +15660,13 @@
"dev": true,
"requires": {
"sax": "1.2.4",
- "xmlbuilder": "9.0.4"
+ "xmlbuilder": "9.0.7"
}
},
"xmlbuilder": {
- "version": "9.0.4",
- "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.4.tgz",
- "integrity": "sha1-UZy0ymhtAFqEINNJbz8MruzKWA8=",
+ "version": "9.0.7",
+ "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz",
+ "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=",
"dev": true
},
"xmldom": {
@@ -14799,9 +15704,9 @@
}
},
"y18n": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz",
- "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=",
+ "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": {
@@ -14838,6 +15743,13 @@
"integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=",
"dev": true,
"optional": true
+ },
+ "y18n": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz",
+ "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=",
+ "dev": true,
+ "optional": true
}
}
},
diff --git a/package.json b/package.json
index 10ffe568a..683071cc7 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "alfresco-content-app",
- "version": "1.0.1",
+ "version": "1.1.0",
"license": "LGPL-3.0",
"scripts": {
"ng": "ng",
@@ -9,44 +9,48 @@
"build:prod": "npm run server-versions && ng build --prod",
"build:dev": "npm run server-versions && ng build && node postbuild-dev.js",
"build:tomcat": "npm run server-versions && ng build --base-href ./",
- "test": "ng test",
+ "test": "ng test --code-coverage",
"lint": "ng lint",
"e2e": "ng e2e",
"server-versions": "rimraf ./src/versions.json && npm list --depth=0 --json=true --prod=true > ./src/versions.json || exit 0"
},
"private": true,
"dependencies": {
- "@alfresco/adf-content-services": "2.0.0",
- "@alfresco/adf-core": "2.0.0",
- "@angular/animations": "5.0.0",
- "@angular/cdk": "5.0.0-rc0",
- "@angular/common": "5.0.0",
- "@angular/compiler": "5.0.0",
- "@angular/core": "5.0.0",
- "@angular/flex-layout": "2.0.0-beta.10",
- "@angular/forms": "5.0.0",
- "@angular/http": "5.0.0",
- "@angular/material": "5.0.0-rc0",
- "@angular/platform-browser": "5.0.0",
- "@angular/platform-browser-dynamic": "5.0.0",
- "@angular/router": "5.0.0",
- "@ngx-translate/core": "8.0.0",
- "alfresco-js-api": "2.0.0",
+ "@alfresco/adf-content-services": "2.2.0",
+ "@alfresco/adf-core": "2.2.0",
+ "@angular/animations": "5.1.1",
+ "@angular/cdk": "5.0.1",
+ "@angular/common": "5.1.1",
+ "@angular/compiler": "5.1.1",
+ "@angular/core": "5.1.1",
+ "@angular/flex-layout": "2.0.0-beta.12",
+ "@angular/forms": "5.1.1",
+ "@angular/http": "5.1.1",
+ "@angular/material": "5.0.1",
+ "@angular/material-moment-adapter": "5.0.1",
+ "@angular/platform-browser": "5.1.1",
+ "@angular/platform-browser-dynamic": "5.1.1",
+ "@angular/router": "5.1.1",
+ "@mat-datetimepicker/core": "1.0.1",
+ "@mat-datetimepicker/moment": "1.0.1",
+ "@ngx-translate/core": "9.1.1",
+ "alfresco-js-api": "2.2.0",
"core-js": "2.5.3",
"hammerjs": "2.0.8",
"moment-es6": "1.0.0",
- "pdfjs-dist": "2.0.301",
+ "pdfjs-dist": "2.0.303",
"rxjs": "5.5.2",
- "web-animations-js": "^2.3.1",
+ "web-animations-js": "2.3.1",
"zone.js": "0.8.20"
},
"devDependencies": {
"@angular/cli": "1.6.6",
- "@angular/compiler-cli": "5.2.2",
- "@angular/language-service": "5.2.2",
+ "@angular/compiler-cli": "5.1.1",
+ "@angular/language-service": "5.1.1",
"@types/jasmine": "^2.5.53",
"@types/jasminewd2": "^2.0.2",
"@types/node": "9.3.0",
+ "codacy-coverage": "^2.0.3",
"codelyzer": "^4.0.1",
"jasmine-core": "~2.8.0",
"jasmine-reporters": "^2.2.1",
diff --git a/postbuild-dev.js b/postbuild-dev.js
index abd88c43e..b010b8e91 100644
--- a/postbuild-dev.js
+++ b/postbuild-dev.js
@@ -2,7 +2,7 @@
* @license
* Alfresco Example Content Application
*
- * Copyright (C) 2005 - 2017 Alfresco Software Limited
+ * Copyright (C) 2005 - 2018 Alfresco Software Limited
*
* This file is part of the Alfresco Example Content Application.
* If the software was purchased under a paid Alfresco license, the terms of
diff --git a/src/app.config.json b/src/app.config.json
index 43cc289ec..99f2f0cd9 100644
--- a/src/app.config.json
+++ b/src/app.config.json
@@ -6,7 +6,7 @@
},
"headerColor": "#2196F3",
"languagePicker": false,
- "document-list": {
+ "pagination": {
"supportedPageSizes": [
25,
50,
diff --git a/src/app/adf.module.ts b/src/app/adf.module.ts
index 15f8206b1..40655f00f 100644
--- a/src/app/adf.module.ts
+++ b/src/app/adf.module.ts
@@ -2,7 +2,7 @@
* @license
* Alfresco Example Content Application
*
- * Copyright (C) 2005 - 2017 Alfresco Software Limited
+ * Copyright (C) 2005 - 2018 Alfresco Software Limited
*
* This file is part of the Alfresco Example Content Application.
* If the software was purchased under a paid Alfresco license, the terms of
diff --git a/src/app/app.component.ts b/src/app/app.component.ts
index 4773c8632..a69ded848 100644
--- a/src/app/app.component.ts
+++ b/src/app/app.component.ts
@@ -2,7 +2,7 @@
* @license
* Alfresco Example Content Application
*
- * Copyright (C) 2005 - 2017 Alfresco Software Limited
+ * Copyright (C) 2005 - 2018 Alfresco Software Limited
*
* This file is part of the Alfresco Example Content Application.
* If the software was purchased under a paid Alfresco license, the terms of
@@ -25,7 +25,7 @@
import { Component, OnInit } from '@angular/core';
import { Router, ActivatedRoute, NavigationEnd } from '@angular/router';
-import { TranslationService, PageTitleService } from '@alfresco/adf-core';
+import { TranslationService, PageTitleService, UserPreferencesService, AppConfigService } from '@alfresco/adf-core';
@Component({
selector: 'app-root',
@@ -37,11 +37,15 @@ export class AppComponent implements OnInit {
private route: ActivatedRoute,
private router: Router,
private pageTitle: PageTitleService,
- private translateService: TranslationService) {
+ private translateService: TranslationService,
+ preferences: UserPreferencesService,
+ config: AppConfigService) {
+ // TODO: remove once ADF 2.3.0 is out (needs bug fixes)
+ preferences.defaults.supportedPageSizes = config.get('pagination.supportedPageSizes');
}
ngOnInit() {
- const { router, pageTitle, route, translateService } = this;
+ const { router, pageTitle, route } = this;
router
.events
diff --git a/src/app/app.module.ts b/src/app/app.module.ts
index 5548ff91d..f1f138a22 100644
--- a/src/app/app.module.ts
+++ b/src/app/app.module.ts
@@ -2,7 +2,7 @@
* @license
* Alfresco Example Content Application
*
- * Copyright (C) 2005 - 2017 Alfresco Software Limited
+ * Copyright (C) 2005 - 2018 Alfresco Software Limited
*
* This file is part of the Alfresco Example Content Application.
* If the software was purchased under a paid Alfresco license, the terms of
@@ -51,6 +51,7 @@ import { SearchComponent } from './components/search/search.component';
import { SidenavComponent } from './components/sidenav/sidenav.component';
import { AboutComponent } from './components/about/about.component';
import { LocationLinkComponent } from './components/location-link/location-link.component';
+import { EmptyFolderComponent } from './components/empty-folder/empty-folder.component';
@NgModule({
imports: [
@@ -80,7 +81,8 @@ import { LocationLinkComponent } from './components/location-link/location-link.
TrashcanComponent,
PreviewComponent,
AboutComponent,
- LocationLinkComponent
+ LocationLinkComponent,
+ EmptyFolderComponent
],
providers: [
{
diff --git a/src/app/app.routes.ts b/src/app/app.routes.ts
index 3a28d1cef..513eeec54 100644
--- a/src/app/app.routes.ts
+++ b/src/app/app.routes.ts
@@ -2,7 +2,7 @@
* @license
* Alfresco Example Content Application
*
- * Copyright (C) 2005 - 2017 Alfresco Software Limited
+ * Copyright (C) 2005 - 2018 Alfresco Software Limited
*
* This file is part of the Alfresco Example Content Application.
* If the software was purchased under a paid Alfresco license, the terms of
@@ -41,13 +41,6 @@ import { PreviewComponent } from './components/preview/preview.component';
import { GenericErrorComponent } from './components/generic-error/generic-error.component';
export const APP_ROUTES: Routes = [
- {
- path: 'preview/:nodeId',
- component: PreviewComponent,
- data: {
- i18nTitle: 'APP.PREVIEW.TITLE'
- }
- },
{
path: 'login',
component: LoginComponent,
@@ -66,13 +59,33 @@ export const APP_ROUTES: Routes = [
},
{
path: 'favorites',
- component: FavoritesComponent,
data: {
- i18nTitle: 'APP.BROWSE.FAVORITES.TITLE'
- }
+ preferencePrefix: 'favorites'
+ },
+ children: [
+ {
+ path: '',
+ component: FavoritesComponent,
+ data: {
+ i18nTitle: 'APP.BROWSE.FAVORITES.TITLE'
+ }
+ },
+ {
+ path: 'preview/:nodeId',
+ component: PreviewComponent,
+ data: {
+ i18nTitle: 'APP.PREVIEW.TITLE',
+ navigateMultiple: true,
+ navigateSource: 'favorites'
+ }
+ }
+ ]
},
{
path: 'libraries',
+ data: {
+ preferencePrefix: 'libraries'
+ },
children: [{
path: '',
component: LibrariesComponent,
@@ -80,49 +93,119 @@ export const APP_ROUTES: Routes = [
i18nTitle: 'APP.BROWSE.LIBRARIES.TITLE'
}
}, {
- path: ':id',
+ path: ':folderId',
component: FilesComponent,
data: {
- i18nTitle: 'APP.BROWSE.LIBRARIES.TITLE'
+ i18nTitle: 'APP.BROWSE.LIBRARIES.TITLE',
+ preferencePrefix: 'libraries-files'
}
- }]
+ },
+ {
+ path: ':folderId/preview/:nodeId',
+ component: PreviewComponent,
+ data: {
+ i18nTitle: 'APP.PREVIEW.TITLE',
+ navigateMultiple: true,
+ navigateSource: 'libraries'
+ }
+ }
+ ]
},
{
path: 'personal-files',
- children: [{
- path: '',
- component: FilesComponent,
- data: {
- i18nTitle: 'APP.BROWSE.PERSONAL.TITLE',
- defaultNodeId: '-my-'
+ data: {
+ preferencePrefix: 'personal-files'
+ },
+ children: [
+ {
+ path: '',
+ component: FilesComponent,
+ data: {
+ i18nTitle: 'APP.BROWSE.PERSONAL.TITLE',
+ defaultNodeId: '-my-'
+ }
+ },
+ {
+ path: ':folderId',
+ component: FilesComponent,
+ data: {
+ i18nTitle: 'APP.BROWSE.PERSONAL.TITLE'
+ }
+ },
+ {
+ path: 'preview/:nodeId',
+ component: PreviewComponent,
+ data: {
+ i18nTitle: 'APP.PREVIEW.TITLE',
+ navigateMultiple: true,
+ navigateSource: 'personal-files'
+ }
+ },
+ {
+ path: ':folderId/preview/:nodeId',
+ component: PreviewComponent,
+ data: {
+ i18nTitle: 'APP.PREVIEW.TITLE',
+ navigateMultiple: true,
+ navigateSource: 'personal-files'
+ }
}
- }, {
- path: ':id',
- component: FilesComponent,
- data: {
- i18nTitle: 'APP.BROWSE.PERSONAL.TITLE'
- }
- }]
+ ]
},
{
path: 'recent-files',
- component: RecentFilesComponent,
data: {
- i18nTitle: 'APP.BROWSE.RECENT.TITLE'
- }
+ preferencePrefix: 'recent-files'
+ },
+ children: [
+ {
+ path: '',
+ component: RecentFilesComponent,
+ data: {
+ i18nTitle: 'APP.BROWSE.RECENT.TITLE'
+ }
+ },
+ {
+ path: 'preview/:nodeId',
+ component: PreviewComponent,
+ data: {
+ i18nTitle: 'APP.PREVIEW.TITLE',
+ navigateMultiple: true,
+ navigateSource: 'recent-files'
+ }
+ }
+ ]
},
{
path: 'shared',
- component: SharedFilesComponent,
data: {
- i18nTitle: 'APP.BROWSE.SHARED.TITLE'
- }
+ preferencePrefix: 'shared-files'
+ },
+ children: [
+ {
+ path: '',
+ component: SharedFilesComponent,
+ data: {
+ i18nTitle: 'APP.BROWSE.SHARED.TITLE'
+ }
+ },
+ {
+ path: 'preview/:nodeId',
+ component: PreviewComponent,
+ data: {
+ i18nTitle: 'APP.PREVIEW.TITLE',
+ navigateMultiple: true,
+ navigateSource: 'shared'
+ }
+ }
+ ]
},
{
path: 'trashcan',
component: TrashcanComponent,
data: {
- i18nTitle: 'APP.BROWSE.TRASHCAN.TITLE'
+ i18nTitle: 'APP.BROWSE.TRASHCAN.TITLE',
+ preferencePrefix: 'trashcan'
}
},
{
diff --git a/src/app/common/common.module.ts b/src/app/common/common.module.ts
index c23ad7a14..f6ea225ba 100644
--- a/src/app/common/common.module.ts
+++ b/src/app/common/common.module.ts
@@ -2,7 +2,7 @@
* @license
* Alfresco Example Content Application
*
- * Copyright (C) 2005 - 2017 Alfresco Software Limited
+ * Copyright (C) 2005 - 2018 Alfresco Software Limited
*
* This file is part of the Alfresco Example Content Application.
* If the software was purchased under a paid Alfresco license, the terms of
@@ -27,6 +27,7 @@ import { NgModule } from '@angular/core';
import { DatePipe } from '@angular/common';
import { RouterModule } from '@angular/router';
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
+import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
import { AdfModule } from '../adf.module';
import { MaterialModule } from './material.module';
@@ -34,9 +35,9 @@ import { MaterialModule } from './material.module';
import { NodeCopyDirective } from './directives/node-copy.directive';
import { NodeDeleteDirective } from './directives/node-delete.directive';
import { NodeMoveDirective } from './directives/node-move.directive';
-import { DownloadFileDirective } from './directives/node-download.directive';
import { NodeRestoreDirective } from './directives/node-restore.directive';
import { NodePermanentDeleteDirective } from './directives/node-permanent-delete.directive';
+import { NodeUnshareDirective } from './directives/node-unshare.directive';
import { ContentManagementService } from './services/content-management.service';
import { BrowsingFilesService } from './services/browsing-files.service';
@@ -44,6 +45,7 @@ import { NodeActionsService } from './services/node-actions.service';
export function modules() {
return [
+ BrowserAnimationsModule,
FormsModule,
ReactiveFormsModule,
MaterialModule,
@@ -57,9 +59,9 @@ export function declarations() {
NodeCopyDirective,
NodeDeleteDirective,
NodeMoveDirective,
- DownloadFileDirective,
NodeRestoreDirective,
- NodePermanentDeleteDirective
+ NodePermanentDeleteDirective,
+ NodeUnshareDirective
];
}
diff --git a/src/app/common/directives/node-copy.directive.spec.ts b/src/app/common/directives/node-copy.directive.spec.ts
index 734527a33..e32cd3c9a 100644
--- a/src/app/common/directives/node-copy.directive.spec.ts
+++ b/src/app/common/directives/node-copy.directive.spec.ts
@@ -2,7 +2,7 @@
* @license
* Alfresco Example Content Application
*
- * Copyright (C) 2005 - 2017 Alfresco Software Limited
+ * Copyright (C) 2005 - 2018 Alfresco Software Limited
*
* This file is part of the Alfresco Example Content Application.
* If the software was purchased under a paid Alfresco license, the terms of
@@ -29,12 +29,20 @@ import { By } from '@angular/platform-browser';
import { Observable } from 'rxjs/Rx';
-import { CoreModule, TranslationService, NodesApiService, NotificationService } from '@alfresco/adf-core';
-import { DocumentListModule } from '@alfresco/adf-content-services';
+import {
+ TranslationService, NodesApiService, NotificationService, AlfrescoApiService, TranslationMock,
+ AppConfigService, StorageService, CookieService, ContentService, AuthenticationService,
+ UserPreferencesService, LogService, ThumbnailService
+} from '@alfresco/adf-core';
+import { TranslateModule } from '@ngx-translate/core';
+import { HttpClientModule } from '@angular/common/http';
import { NodeActionsService } from '../services/node-actions.service';
-import { ContentManagementService } from '../services/content-management.service';
import { NodeCopyDirective } from './node-copy.directive';
+import { ContentManagementService } from '../services/content-management.service';
+import { MatSnackBarModule, MatDialogModule, MatIconModule } from '@angular/material';
+import { DocumentListService } from '@alfresco/adf-content-services';
+import { NoopAnimationsModule } from '@angular/platform-browser/animations';
@Component({
template: '
'
@@ -55,16 +63,33 @@ describe('NodeCopyDirective', () => {
beforeEach(() => {
TestBed.configureTestingModule({
imports: [
- CoreModule,
- DocumentListModule
+ NoopAnimationsModule,
+ HttpClientModule,
+ TranslateModule.forRoot(),
+ MatSnackBarModule,
+ MatDialogModule,
+ MatIconModule
],
declarations: [
TestComponent,
NodeCopyDirective
],
providers: [
+ AlfrescoApiService,
+ AuthenticationService,
+ AppConfigService,
+ StorageService,
+ ContentService,
+ UserPreferencesService,
+ LogService,
+ CookieService,
+ NotificationService,
+ NodesApiService,
+ NodeActionsService,
+ { provide: TranslationService, useClass: TranslationMock },
ContentManagementService,
- NodeActionsService
+ DocumentListService,
+ ThumbnailService
]
});
diff --git a/src/app/common/directives/node-copy.directive.ts b/src/app/common/directives/node-copy.directive.ts
index 5cb250cce..91c61268e 100644
--- a/src/app/common/directives/node-copy.directive.ts
+++ b/src/app/common/directives/node-copy.directive.ts
@@ -2,7 +2,7 @@
* @license
* Alfresco Example Content Application
*
- * Copyright (C) 2005 - 2017 Alfresco Software Limited
+ * Copyright (C) 2005 - 2018 Alfresco Software Limited
*
* This file is part of the Alfresco Example Content Application.
* If the software was purchased under a paid Alfresco license, the terms of
@@ -104,7 +104,7 @@ export class NodeCopyDirective {
} catch (err) { /* Do nothing, keep the original message */ }
}
- const undo = (numberOfCopiedItems > 0) ? this.translation.translate.instant('APP.ACTIONS.UNDO') : '';
+ const undo = (numberOfCopiedItems > 0) ? this.translation.instant('APP.ACTIONS.UNDO') : '';
const withUndo = (numberOfCopiedItems > 0) ? '_WITH_UNDO' : '';
this.translation.get(i18nMessageString, { success: numberOfCopiedItems, failed: failedItems }).subscribe(message => {
@@ -122,7 +122,7 @@ export class NodeCopyDirective {
Observable.forkJoin(...batch)
.subscribe(
() => {
- this.content.deleteNode.next(null);
+ this.content.nodeDeleted.next(null);
},
(error) => {
let i18nMessageString = 'APP.MESSAGES.ERRORS.GENERIC';
diff --git a/src/app/common/directives/node-delete.directive.spec.ts b/src/app/common/directives/node-delete.directive.spec.ts
index e681cd699..6bc7d2acf 100644
--- a/src/app/common/directives/node-delete.directive.spec.ts
+++ b/src/app/common/directives/node-delete.directive.spec.ts
@@ -2,7 +2,7 @@
* @license
* Alfresco Example Content Application
*
- * Copyright (C) 2005 - 2017 Alfresco Software Limited
+ * Copyright (C) 2005 - 2018 Alfresco Software Limited
*
* This file is part of the Alfresco Example Content Application.
* If the software was purchased under a paid Alfresco license, the terms of
@@ -23,12 +23,13 @@
* along with Alfresco. If not, see .
*/
-import { TestBed, ComponentFixture, fakeAsync } from '@angular/core/testing';
+import { TestBed, ComponentFixture } from '@angular/core/testing';
import { By } from '@angular/platform-browser';
-import { CoreModule, TranslationService, NodesApiService, NotificationService } from '@alfresco/adf-core';
+import { TranslationService, NodesApiService, NotificationService } from '@alfresco/adf-core';
import { Component, DebugElement } from '@angular/core';
import { Observable } from 'rxjs/Rx';
+import { CommonModule } from '../common.module';
import { NodeDeleteDirective } from './node-delete.directive';
import { ContentManagementService } from '../services/content-management.service';
@@ -52,14 +53,10 @@ describe('NodeDeleteDirective', () => {
beforeEach(() => {
TestBed.configureTestingModule({
imports: [
- CoreModule
+ CommonModule
],
declarations: [
- TestComponent,
- NodeDeleteDirective
- ],
- providers: [
- ContentManagementService
+ TestComponent
]
});
@@ -96,7 +93,7 @@ describe('NodeDeleteDirective', () => {
);
});
- it('notifies faild file deletion', () => {
+ it('notifies failed file deletion', () => {
spyOn(nodeApiService, 'deleteNode').and.returnValue(Observable.throw(null));
component.selection = [{ entry: { id: '1', name: 'name1' } }];
@@ -125,7 +122,7 @@ describe('NodeDeleteDirective', () => {
);
});
- it('notifies faild files deletion', () => {
+ it('notifies failed files deletion', () => {
spyOn(nodeApiService, 'deleteNode').and.returnValue(Observable.throw(null));
component.selection = [
@@ -202,7 +199,7 @@ describe('NodeDeleteDirective', () => {
});
});
- it('notifies faild file on on restore', () => {
+ it('notifies failed file on on restore', () => {
spyOn(nodeApiService, 'restoreNode').and.returnValue(Observable.throw(null));
component.selection = [
@@ -216,7 +213,7 @@ describe('NodeDeleteDirective', () => {
.toEqual((['APP.MESSAGES.ERRORS.NODE_RESTORE', '', 3000]));
});
- it('notifies faild files on on restore', () => {
+ it('notifies failed files on on restore', () => {
spyOn(nodeApiService, 'restoreNode').and.returnValue(Observable.throw(null));
component.selection = [
@@ -232,7 +229,7 @@ describe('NodeDeleteDirective', () => {
});
it('signals files restored', () => {
- spyOn(contentService.restoreNode, 'next');
+ spyOn(contentService.nodeRestored, 'next');
spyOn(nodeApiService, 'restoreNode').and.callFake((id) => {
if (id === '1') {
return Observable.of(null);
@@ -249,7 +246,7 @@ describe('NodeDeleteDirective', () => {
fixture.detectChanges();
element.triggerEventHandler('click', null);
- expect(contentService.restoreNode.next).toHaveBeenCalled();
+ expect(contentService.nodeRestored.next).toHaveBeenCalled();
});
});
});
diff --git a/src/app/common/directives/node-delete.directive.ts b/src/app/common/directives/node-delete.directive.ts
index 42017244d..dc76f3ab8 100644
--- a/src/app/common/directives/node-delete.directive.ts
+++ b/src/app/common/directives/node-delete.directive.ts
@@ -2,7 +2,7 @@
* @license
* Alfresco Example Content Application
*
- * Copyright (C) 2005 - 2017 Alfresco Software Limited
+ * Copyright (C) 2005 - 2018 Alfresco Software Limited
*
* This file is part of the Alfresco Example Content Application.
* If the software was purchased under a paid Alfresco license, the terms of
@@ -74,7 +74,7 @@ export class NodeDeleteDirective {
.subscribe(() => this.restore(processedData.success));
if (processedData.someSucceeded) {
- this.content.deleteNode.next(null);
+ this.content.nodeDeleted.next(null);
}
});
}
@@ -103,7 +103,7 @@ export class NodeDeleteDirective {
}
if (processedData.someSucceeded) {
- this.content.restoreNode.next(null);
+ this.content.nodeRestored.next(null);
}
}
);
diff --git a/src/app/common/directives/node-download.directive.spec.ts b/src/app/common/directives/node-download.directive.spec.ts
deleted file mode 100644
index 82aba7dfe..000000000
--- a/src/app/common/directives/node-download.directive.spec.ts
+++ /dev/null
@@ -1,149 +0,0 @@
-/*!
- * @license
- * Alfresco Example Content Application
- *
- * Copyright (C) 2005 - 2017 Alfresco Software Limited
- *
- * This file is part of the Alfresco Example Content Application.
- * If the software was purchased under a paid Alfresco license, the terms of
- * the paid license agreement will prevail. Otherwise, the software is
- * provided under the following open source license terms:
- *
- * The Alfresco Example Content Application is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * The Alfresco Example Content Application is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with Alfresco. If not, see .
- */
-
-import { TestBed, ComponentFixture } from '@angular/core/testing';
-import { By } from '@angular/platform-browser';
-import { CoreModule, AlfrescoApiService } from '@alfresco/adf-core';
-import { MatDialog } from '@angular/material';
-import { Component, DebugElement } from '@angular/core';
-import { DownloadFileDirective } from './node-download.directive';
-
-@Component({
- template: ''
-})
-class TestComponent {
- selection;
-}
-
-describe('DownloadFileDirective', () => {
- let component: TestComponent;
- let fixture: ComponentFixture;
- let element: DebugElement;
- let dialog: MatDialog;
- let apiService: AlfrescoApiService;
- let contentService;
- let dialogSpy;
-
- beforeEach(() => {
- TestBed.configureTestingModule({
- imports: [
- CoreModule
- ],
- declarations: [
- TestComponent,
- DownloadFileDirective
- ],
- providers: [
- AlfrescoApiService
- ]
- });
-
- fixture = TestBed.createComponent(TestComponent);
- component = fixture.componentInstance;
- element = fixture.debugElement.query(By.directive(DownloadFileDirective));
- dialog = TestBed.get(MatDialog);
- apiService = TestBed.get(AlfrescoApiService);
- contentService = apiService.getInstance().content;
- dialogSpy = spyOn(dialog, 'open');
- });
-
- it('should not download node when selection is empty', () => {
- spyOn(apiService, 'getInstance');
- component.selection = [];
-
- fixture.detectChanges();
- element.triggerEventHandler('click', null);
-
- expect(apiService.getInstance).not.toHaveBeenCalled();
- });
-
- it('should not download zip when selection has no nodes', () => {
- component.selection = [];
-
- fixture.detectChanges();
- element.triggerEventHandler('click', null);
-
- expect(dialogSpy).not.toHaveBeenCalled();
- });
-
- it('should download selected node as file', () => {
- spyOn(contentService, 'getContentUrl');
- const node = { entry: { id: 'node-id', isFile: true } };
- component.selection = [node];
-
- fixture.detectChanges();
- element.triggerEventHandler('click', null);
-
- expect(contentService.getContentUrl).toHaveBeenCalledWith(node.entry.id, true);
- });
-
- it('should download selected files nodes as zip', () => {
- const node1 = { entry: { id: 'node-1' } };
- const node2 = { entry: { id: 'node-2' } };
- component.selection = [node1, node2];
-
- fixture.detectChanges();
- element.triggerEventHandler('click', null);
-
- expect(dialogSpy.calls.argsFor(0)[1].data).toEqual({ nodeIds: [ 'node-1', 'node-2' ] });
- });
-
- it('should download selected folder node as zip', () => {
- const node = { entry: { isFolder: true, id: 'node-id' } };
- component.selection = [node];
-
- fixture.detectChanges();
- element.triggerEventHandler('click', null);
-
- expect(dialogSpy.calls.argsFor(0)[1].data).toEqual({ nodeIds: [ 'node-id' ] });
- });
-
- it('should create link element to download file node', () => {
- const dummyLinkElement = {
- download: null,
- href: null,
- click: () => null,
- style: {
- display: null
- }
- };
-
- const node = { entry: { name: 'dummy', isFile: true, id: 'node-id' } };
-
- spyOn(contentService, 'getContentUrl').and.returnValue('somewhere-over-the-rainbow');
- spyOn(document, 'createElement').and.returnValue(dummyLinkElement);
- spyOn(document.body, 'appendChild').and.stub();
- spyOn(document.body, 'removeChild').and.stub();
-
- component.selection = [node];
-
- fixture.detectChanges();
- element.triggerEventHandler('click', null);
-
- expect(document.createElement).toHaveBeenCalled();
- expect(dummyLinkElement.download).toBe('dummy');
- expect(dummyLinkElement.href).toContain('somewhere-over-the-rainbow');
- });
-});
diff --git a/src/app/common/directives/node-download.directive.ts b/src/app/common/directives/node-download.directive.ts
deleted file mode 100644
index 7c9a9a777..000000000
--- a/src/app/common/directives/node-download.directive.ts
+++ /dev/null
@@ -1,120 +0,0 @@
-/*!
- * @license
- * Alfresco Example Content Application
- *
- * Copyright (C) 2005 - 2017 Alfresco Software Limited
- *
- * This file is part of the Alfresco Example Content Application.
- * If the software was purchased under a paid Alfresco license, the terms of
- * the paid license agreement will prevail. Otherwise, the software is
- * provided under the following open source license terms:
- *
- * The Alfresco Example Content Application is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * The Alfresco Example Content Application is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with Alfresco. If not, see .
- */
-
-import { Directive, Input, HostListener } from '@angular/core';
-import { MatDialog } from '@angular/material';
-import { MinimalNodeEntity } from 'alfresco-js-api';
-import { AlfrescoApiService } from '@alfresco/adf-core';
-import { DownloadZipDialogComponent } from '@alfresco/adf-content-services';
-
-@Directive({
- selector: '[app-download-node]'
-})
-export class DownloadFileDirective {
-
- @Input('app-download-node')
- nodes: MinimalNodeEntity[];
-
- @HostListener('click')
- onClick() {
- this.downloadNodes(this.nodes);
- }
-
- constructor(
- private apiService: AlfrescoApiService,
- private dialog: MatDialog
- ) {}
-
- private downloadNodes(selection: Array) {
- if (!selection || selection.length === 0) {
- return;
- }
-
- if (selection.length === 1) {
- this.downloadNode(selection[0]);
- } else {
- this.downloadZip(selection);
- }
- }
-
- private downloadNode(node: MinimalNodeEntity) {
- if (node && node.entry) {
- const entry = node.entry;
-
- if (entry.isFile) {
- this.downloadFile(node);
- }
-
- if (entry.isFolder) {
- this.downloadZip([node]);
- }
-
- // Check if there's nodeId for Shared Files
- if (!entry.isFile && !entry.isFolder && (entry).nodeId) {
- this.downloadFile(node);
- }
- }
- }
-
- private downloadFile(node: MinimalNodeEntity) {
- if (node && node.entry) {
- const contentApi = this.apiService.getInstance().content;
-
- const url = contentApi.getContentUrl(node.entry.id, true);
- const fileName = node.entry.name;
-
- this.download(url, fileName);
- }
- }
-
- private downloadZip(selection: Array) {
- if (selection && selection.length > 0) {
- // nodeId for Shared node
- const nodeIds = selection.map((node: any) => (node.entry.nodeId || node.entry.id));
-
- this.dialog.open(DownloadZipDialogComponent, {
- width: '600px',
- disableClose: true,
- data: {
- nodeIds
- }
- });
- }
- }
-
- private download(url: string, fileName: string) {
- if (url && fileName) {
- const link = document.createElement('a');
-
- link.style.display = 'none';
- link.download = fileName;
- link.href = url;
-
- document.body.appendChild(link);
- link.click();
- document.body.removeChild(link);
- }
- }
-}
diff --git a/src/app/common/directives/node-move.directive.spec.ts b/src/app/common/directives/node-move.directive.spec.ts
index 8c57e73df..9017c61e5 100644
--- a/src/app/common/directives/node-move.directive.spec.ts
+++ b/src/app/common/directives/node-move.directive.spec.ts
@@ -2,7 +2,7 @@
* @license
* Alfresco Example Content Application
*
- * Copyright (C) 2005 - 2017 Alfresco Software Limited
+ * Copyright (C) 2005 - 2018 Alfresco Software Limited
*
* This file is part of the Alfresco Example Content Application.
* If the software was purchased under a paid Alfresco license, the terms of
@@ -26,14 +26,12 @@
import { Component, DebugElement } from '@angular/core';
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { By } from '@angular/platform-browser';
-
import { Observable } from 'rxjs/Rx';
-import { CoreModule, TranslationService, NodesApiService, NotificationService } from '@alfresco/adf-core';
-import { DocumentListModule } from '@alfresco/adf-content-services';
+import { TranslationService, NodesApiService, NotificationService } from '@alfresco/adf-core';
+import { CommonModule } from '../common.module';
import { NodeActionsService } from '../services/node-actions.service';
-import { ContentManagementService } from '../services/content-management.service';
import { NodeMoveDirective } from './node-move.directive';
@Component({
@@ -55,16 +53,10 @@ describe('NodeMoveDirective', () => {
beforeEach(() => {
TestBed.configureTestingModule({
imports: [
- CoreModule,
- DocumentListModule
+ CommonModule
],
declarations: [
- TestComponent,
- NodeMoveDirective
- ],
- providers: [
- ContentManagementService,
- NodeActionsService
+ TestComponent
]
});
diff --git a/src/app/common/directives/node-move.directive.ts b/src/app/common/directives/node-move.directive.ts
index 6bb4bcbfe..812e687ec 100644
--- a/src/app/common/directives/node-move.directive.ts
+++ b/src/app/common/directives/node-move.directive.ts
@@ -2,7 +2,7 @@
* @license
* Alfresco Example Content Application
*
- * Copyright (C) 2005 - 2017 Alfresco Software Limited
+ * Copyright (C) 2005 - 2018 Alfresco Software Limited
*
* This file is part of the Alfresco Example Content Application.
* If the software was purchased under a paid Alfresco license, the terms of
@@ -64,7 +64,7 @@ export class NodeMoveDirective {
const [ operationResult, moveResponse ] = result;
this.toastMessage(operationResult, moveResponse);
- this.content.moveNode.next(null);
+ this.content.nodeMoved.next(null);
},
(error) => {
this.toastMessage(error);
@@ -125,7 +125,7 @@ export class NodeMoveDirective {
const beforePartialSuccessMessage = (successMessage && partialSuccessMessage) ? ' ' : '';
const beforeFailedMessage = ((successMessage || partialSuccessMessage) && failedMessage) ? ' ' : '';
- const initialParentId = this.nodeActionsService.getFirstParentId(this.selection);
+ const initialParentId = this.nodeActionsService.getEntryParentId(this.selection[0].entry);
this.translation.get(
[successMessage, partialSuccessMessage, failedMessage],
@@ -190,7 +190,7 @@ export class NodeMoveDirective {
})
.subscribe(
() => {
- this.content.moveNode.next(null);
+ this.content.nodeMoved.next(null);
},
(error) => {
diff --git a/src/app/common/directives/node-permanent-delete.directive.spec.ts b/src/app/common/directives/node-permanent-delete.directive.spec.ts
index c16659601..bf82a5caa 100644
--- a/src/app/common/directives/node-permanent-delete.directive.spec.ts
+++ b/src/app/common/directives/node-permanent-delete.directive.spec.ts
@@ -2,7 +2,7 @@
* @license
* Alfresco Example Content Application
*
- * Copyright (C) 2005 - 2017 Alfresco Software Limited
+ * Copyright (C) 2005 - 2018 Alfresco Software Limited
*
* This file is part of the Alfresco Example Content Application.
* If the software was purchased under a paid Alfresco license, the terms of
@@ -27,8 +27,9 @@ import { Component, DebugElement } from '@angular/core';
import { TestBed, ComponentFixture, async, fakeAsync, tick } from '@angular/core/testing';
import { By } from '@angular/platform-browser';
import { Observable } from 'rxjs/Rx';
-import { CoreModule, AlfrescoApiService, TranslationService, NotificationService } from '@alfresco/adf-core';
+import { AlfrescoApiService, TranslationService, NotificationService } from '@alfresco/adf-core';
+import { CommonModule } from '../common.module';
import { NodePermanentDeleteDirective } from './node-permanent-delete.directive';
@Component({
@@ -51,11 +52,10 @@ describe('NodePermanentDeleteDirective', () => {
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [
- CoreModule
+ CommonModule
],
declarations: [
- TestComponent,
- NodePermanentDeleteDirective
+ TestComponent
]
})
.compileComponents()
diff --git a/src/app/common/directives/node-permanent-delete.directive.ts b/src/app/common/directives/node-permanent-delete.directive.ts
index 72417fabf..c70495ee2 100644
--- a/src/app/common/directives/node-permanent-delete.directive.ts
+++ b/src/app/common/directives/node-permanent-delete.directive.ts
@@ -2,7 +2,7 @@
* @license
* Alfresco Example Content Application
*
- * Copyright (C) 2005 - 2017 Alfresco Software Limited
+ * Copyright (C) 2005 - 2018 Alfresco Software Limited
*
* This file is part of the Alfresco Example Content Application.
* If the software was purchased under a paid Alfresco license, the terms of
@@ -27,7 +27,7 @@ import { Directive, ElementRef, HostListener, Input } from '@angular/core';
import { Observable } from 'rxjs/Rx';
import { TranslationService, AlfrescoApiService, NotificationService } from '@alfresco/adf-core';
-import { MinimalNodeEntity, DeletedNodeEntry, PathInfoEntity } from 'alfresco-js-api';
+import { MinimalNodeEntity } from 'alfresco-js-api';
@Directive({
selector: '[app-permanent-delete-node]'
diff --git a/src/app/common/directives/node-restore.directive.spec.ts b/src/app/common/directives/node-restore.directive.spec.ts
index 314f2ade7..2a9c305f3 100644
--- a/src/app/common/directives/node-restore.directive.spec.ts
+++ b/src/app/common/directives/node-restore.directive.spec.ts
@@ -2,7 +2,7 @@
* @license
* Alfresco Example Content Application
*
- * Copyright (C) 2005 - 2017 Alfresco Software Limited
+ * Copyright (C) 2005 - 2018 Alfresco Software Limited
*
* This file is part of the Alfresco Example Content Application.
* If the software was purchased under a paid Alfresco license, the terms of
@@ -29,7 +29,9 @@ import { RouterTestingModule } from '@angular/router/testing';
import { TestBed, ComponentFixture, async, fakeAsync, tick } from '@angular/core/testing';
import { By } from '@angular/platform-browser';
import { Observable } from 'rxjs/Rx';
-import { CoreModule, AlfrescoApiService, TranslationService, NotificationService } from '@alfresco/adf-core';
+
+import { CommonModule } from '../common.module';
+import { AlfrescoApiService, TranslationService, NotificationService } from '@alfresco/adf-core';
import { NodeRestoreDirective } from './node-restore.directive';
@@ -55,12 +57,11 @@ describe('NodeRestoreDirective', () => {
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [
- CoreModule,
+ CommonModule,
RouterTestingModule
],
declarations: [
- TestComponent,
- NodeRestoreDirective
+ TestComponent
]
})
.compileComponents()
diff --git a/src/app/common/directives/node-restore.directive.ts b/src/app/common/directives/node-restore.directive.ts
index a0a5109b6..8d16d8a67 100644
--- a/src/app/common/directives/node-restore.directive.ts
+++ b/src/app/common/directives/node-restore.directive.ts
@@ -2,7 +2,7 @@
* @license
* Alfresco Example Content Application
*
- * Copyright (C) 2005 - 2017 Alfresco Software Limited
+ * Copyright (C) 2005 - 2018 Alfresco Software Limited
*
* This file is part of the Alfresco Example Content Application.
* If the software was purchased under a paid Alfresco license, the terms of
@@ -28,7 +28,7 @@ import { Router } from '@angular/router';
import { Observable } from 'rxjs/Rx';
import { TranslationService, AlfrescoApiService, NotificationService } from '@alfresco/adf-core';
-import { MinimalNodeEntity, DeletedNodeEntry, PathInfoEntity, DeletedNodesPaging } from 'alfresco-js-api';
+import { MinimalNodeEntity, PathInfoEntity, DeletedNodesPaging } from 'alfresco-js-api';
@Directive({
selector: '[app-restore-node]'
diff --git a/src/app/common/directives/node-unshare.directive.ts b/src/app/common/directives/node-unshare.directive.ts
new file mode 100644
index 000000000..abd6f2b71
--- /dev/null
+++ b/src/app/common/directives/node-unshare.directive.ts
@@ -0,0 +1,62 @@
+/*!
+ * @license
+ * Alfresco Example Content Application
+ *
+ * Copyright (C) 2005 - 2018 Alfresco Software Limited
+ *
+ * This file is part of the Alfresco Example Content Application.
+ * If the software was purchased under a paid Alfresco license, the terms of
+ * the paid license agreement will prevail. Otherwise, the software is
+ * provided under the following open source license terms:
+ *
+ * The Alfresco Example Content Application is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * The Alfresco Example Content Application is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with Alfresco. If not, see .
+ */
+
+import { Directive, HostListener, Input, ElementRef } from '@angular/core';
+import { AlfrescoApiService } from '@alfresco/adf-core';
+import { MinimalNodeEntity } from 'alfresco-js-api';
+
+@Directive({
+ selector: '[appUnshareNode]'
+})
+export class NodeUnshareDirective {
+
+ // tslint:disable-next-line:no-input-rename
+ @Input('appUnshareNode')
+ selection: MinimalNodeEntity[];
+
+ constructor(
+ private apiService: AlfrescoApiService,
+ private el: ElementRef) {
+ }
+
+ @HostListener('click')
+ onClick() {
+ if (this.selection.length > 0) {
+ this.unshareLinks(this.selection);
+ }
+ }
+
+ private async unshareLinks(links: MinimalNodeEntity[]) {
+ const promises = links.map(link => this.apiService.sharedLinksApi.deleteSharedLink(link.entry.id));
+ await Promise.all(promises);
+ this.emitDone();
+ }
+
+ private emitDone() {
+ const e = new CustomEvent('links-unshared', { bubbles: true });
+ this.el.nativeElement.dispatchEvent(e);
+ }
+
+}
diff --git a/src/app/common/material.module.ts b/src/app/common/material.module.ts
index b516f4ec6..3c1cb4fd8 100644
--- a/src/app/common/material.module.ts
+++ b/src/app/common/material.module.ts
@@ -2,7 +2,7 @@
* @license
* Alfresco Example Content Application
*
- * Copyright (C) 2005 - 2017 Alfresco Software Limited
+ * Copyright (C) 2005 - 2018 Alfresco Software Limited
*
* This file is part of the Alfresco Example Content Application.
* If the software was purchased under a paid Alfresco license, the terms of
diff --git a/src/app/common/services/browsing-files.service.spec.ts b/src/app/common/services/browsing-files.service.spec.ts
index 121bf4914..fea859cf5 100644
--- a/src/app/common/services/browsing-files.service.spec.ts
+++ b/src/app/common/services/browsing-files.service.spec.ts
@@ -2,7 +2,7 @@
* @license
* Alfresco Example Content Application
*
- * Copyright (C) 2005 - 2017 Alfresco Software Limited
+ * Copyright (C) 2005 - 2018 Alfresco Software Limited
*
* This file is part of the Alfresco Example Content Application.
* If the software was purchased under a paid Alfresco license, the terms of
diff --git a/src/app/common/services/browsing-files.service.ts b/src/app/common/services/browsing-files.service.ts
index c47067f0f..e55f7e723 100644
--- a/src/app/common/services/browsing-files.service.ts
+++ b/src/app/common/services/browsing-files.service.ts
@@ -2,7 +2,7 @@
* @license
* Alfresco Example Content Application
*
- * Copyright (C) 2005 - 2017 Alfresco Software Limited
+ * Copyright (C) 2005 - 2018 Alfresco Software Limited
*
* This file is part of the Alfresco Example Content Application.
* If the software was purchased under a paid Alfresco license, the terms of
diff --git a/src/app/common/services/content-management.service.ts b/src/app/common/services/content-management.service.ts
index 477a0e970..48e71eb93 100644
--- a/src/app/common/services/content-management.service.ts
+++ b/src/app/common/services/content-management.service.ts
@@ -2,7 +2,7 @@
* @license
* Alfresco Example Content Application
*
- * Copyright (C) 2005 - 2017 Alfresco Software Limited
+ * Copyright (C) 2005 - 2018 Alfresco Software Limited
*
* This file is part of the Alfresco Example Content Application.
* If the software was purchased under a paid Alfresco license, the terms of
@@ -25,10 +25,83 @@
import { Subject } from 'rxjs/Rx';
import { Injectable } from '@angular/core';
+import { AlfrescoApiService, NotificationService, TranslationService } from '@alfresco/adf-core';
+import { Node } from 'alfresco-js-api';
+
@Injectable()
export class ContentManagementService {
- deleteNode = new Subject();
- moveNode = new Subject();
- restoreNode = new Subject();
+
+ nodeDeleted = new Subject();
+ nodeMoved = new Subject();
+ nodeRestored = new Subject();
+
+ constructor(private api: AlfrescoApiService,
+ private notification: NotificationService,
+ private translation: TranslationService) {
+ }
+
+ nodeHasPermission(node: Node, permission: string): boolean {
+ if (node && permission) {
+ const allowableOperations = node.allowableOperations || [];
+
+ if (allowableOperations.indexOf(permission) > -1) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ canDeleteNode(node: Node): boolean {
+ return this.nodeHasPermission(node, 'delete');
+ }
+
+ canMoveNode(node: Node): boolean {
+ return this.nodeHasPermission(node, 'delete');
+ }
+
+ canCopyNode(node: Node): boolean {
+ return true;
+ }
+
+ async deleteNode(node: Node) {
+ if (this.canDeleteNode(node)) {
+ try {
+ await this.api.nodesApi.deleteNode(node.id);
+
+ this.notification
+ .openSnackMessageAction(
+ this.translation.instant('APP.MESSAGES.INFO.NODE_DELETION.SINGULAR', { name: node.name }),
+ this.translation.translate.instant('APP.ACTIONS.UNDO'),
+ 10000
+ )
+ .onAction()
+ .subscribe(() => {
+ this.restoreNode(node);
+ });
+
+ this.nodeDeleted.next(node.id);
+ } catch {
+ this.notification.openSnackMessage(
+ this.translation.instant('APP.MESSAGES.ERRORS.NODE_DELETION', { name: node.name }),
+ 10000
+ );
+ }
+ }
+ }
+
+ async restoreNode(node: Node) {
+ if (node) {
+ try {
+ await this.api.nodesApi.restoreNode(node.id);
+ this.nodeRestored.next(node.id);
+ } catch {
+ this.notification.openSnackMessage(
+ this.translation.instant('APP.MESSAGES.ERRORS.NODE_RESTORE', { name: node.name }),
+ 3000
+ );
+ }
+ }
+ }
}
diff --git a/src/app/common/services/node-actions.service.spec.ts b/src/app/common/services/node-actions.service.spec.ts
index b804051a3..ffd2e8e11 100644
--- a/src/app/common/services/node-actions.service.spec.ts
+++ b/src/app/common/services/node-actions.service.spec.ts
@@ -2,7 +2,7 @@
* @license
* Alfresco Example Content Application
*
- * Copyright (C) 2005 - 2017 Alfresco Software Limited
+ * Copyright (C) 2005 - 2018 Alfresco Software Limited
*
* This file is part of the Alfresco Example Content Application.
* If the software was purchased under a paid Alfresco license, the terms of
@@ -24,13 +24,21 @@
*/
import { TestBed, async } from '@angular/core/testing';
-import { MatDialog } from '@angular/material';
+import { MatDialog, MatDialogModule, MatIconModule } from '@angular/material';
import { OverlayModule } from '@angular/cdk/overlay';
import { Observable } from 'rxjs/Rx';
-import { CoreModule, AlfrescoApiService, NodesApiService } from '@alfresco/adf-core';
+import {
+ TranslationMock, AlfrescoApiService, NodesApiService,
+ TranslationService, ContentService, AuthenticationService,
+ UserPreferencesService, AppConfigService, StorageService,
+ CookieService, LogService, ThumbnailService
+} from '@alfresco/adf-core';
import { DocumentListService } from '@alfresco/adf-content-services';
+
import { NodeActionsService } from './node-actions.service';
import { MinimalNodeEntryEntity } from 'alfresco-js-api';
+import { TranslateModule } from '@ngx-translate/core';
+import { HttpClientModule } from '@angular/common/http';
class TestNode {
entry?: MinimalNodeEntryEntity;
@@ -102,15 +110,27 @@ describe('NodeActionsService', () => {
beforeEach(() => {
TestBed.configureTestingModule({
imports: [
- CoreModule,
+ MatDialogModule,
+ MatIconModule,
+ HttpClientModule,
+ TranslateModule.forRoot(),
OverlayModule
],
providers: [
- MatDialog,
- DocumentListService,
AlfrescoApiService,
NodesApiService,
- NodeActionsService]
+ { provide: TranslationService, useClass: TranslationMock },
+ AuthenticationService,
+ UserPreferencesService,
+ AppConfigService,
+ CookieService,
+ LogService,
+ ThumbnailService,
+ StorageService,
+ ContentService,
+ DocumentListService,
+ NodeActionsService
+ ]
});
service = TestBed.get(NodeActionsService);
@@ -203,36 +223,6 @@ describe('NodeActionsService', () => {
}));
});
- describe('getFirstParentId', () => {
- it('should give the parentId, if that exists on the node entry', () => {
- const parentID = 'parent-id';
- const contentEntities = [ {entry: {nodeId: '1234', parentId: parentID}} ];
-
- expect(service.getFirstParentId(contentEntities)).toBe(parentID);
- });
-
- it('should give the last element in path property, if parentId is missing and path exists on the node entry', () => {
- const firstParentId = 'parent-0-id';
- const contentEntities = [ {entry: {nodeId: '1234', path: {elements: [ {id: 'parent-1-id'}, { id: firstParentId} ]} }} ];
-
- expect(service.getFirstParentId(contentEntities)).toBe(firstParentId);
- });
-
- it('should give the id of the first node entry, if none of nodes has either parentId, or path properties', () => {
- const nodeID = '1234';
- const contentEntities = [ {entry: {id: nodeID}}, {entry: {id: `${nodeID}-2`}} ];
-
- expect(service.getFirstParentId(contentEntities)).toBe(nodeID);
- });
-
- it('should give the nodeId of the first node entry, if none of nodes has either parentId, or path properties', () => {
- const nodeID = '1234';
- const contentEntities = [ {entry: {nodeId: nodeID}}, {entry: {id: `${nodeID}-2`}} ];
-
- expect(service.getFirstParentId(contentEntities)).toBe(nodeID);
- });
- });
-
describe('getEntryParentId', () => {
it('should return the parentId, if that exists on the node entry', () => {
const parentID = 'parent-id';
@@ -258,7 +248,7 @@ describe('NodeActionsService', () => {
fileToCopy = new TestNode(fileId, isFile, 'file-name');
folderToCopy = new TestNode();
- spyOn(service, 'getFirstParentId').and.returnValue('parent-id');
+ spyOn(service, 'getEntryParentId').and.returnValue('parent-id');
const dialog = TestBed.get(MatDialog);
spyOn(dialog, 'open').and.callFake((contentNodeSelectorComponent: any, data: any) => {
@@ -289,12 +279,17 @@ describe('NodeActionsService', () => {
let fileToCopy;
let folderToCopy;
let destinationFolder;
+ let translationService: TranslationService;
beforeEach(() => {
fileToCopy = new TestNode(fileId, isFile, 'file-name');
folderToCopy = new TestNode();
destinationFolder = new TestNode(folderDestinationId);
+ translationService = TestBed.get(TranslationService);
+ spyOn(translationService, 'instant').and.callFake(key => {
+ return key;
+ });
});
it('should be called', () => {
@@ -310,7 +305,7 @@ describe('NodeActionsService', () => {
it('should use the custom data object with custom rowFilter & imageResolver & title with destination picker', () => {
const spyOnBatchOperation = spyOn(service, 'doBatchOperation').and.callThrough();
const spyOnDestinationPicker = spyOn(service, 'getContentNodeSelection').and.callThrough();
- spyOn(service, 'getFirstParentId').and.returnValue('parent-id');
+ spyOn(service, 'getEntryParentId').and.returnValue('parent-id');
let testContentNodeSelectorComponentData;
const dialog = TestBed.get(MatDialog);
@@ -328,7 +323,8 @@ describe('NodeActionsService', () => {
expect(testContentNodeSelectorComponentData).toBeDefined();
expect(testContentNodeSelectorComponentData.data.rowFilter({node: destinationFolder})).toBeDefined();
expect(testContentNodeSelectorComponentData.data.imageResolver({node: destinationFolder})).toBeDefined();
- expect(testContentNodeSelectorComponentData.data.title).toBe('copy to ...');
+ expect(testContentNodeSelectorComponentData.data.title).toBe('NODE_SELECTOR.COPY_ITEMS');
+ expect(translationService.instant).toHaveBeenCalledWith('NODE_SELECTOR.COPY_ITEMS', {name: '', number: 2});
destinationFolder.entry['allowableOperations'] = ['update'];
expect(testContentNodeSelectorComponentData.data.imageResolver({node: destinationFolder})).toBeDefined();
@@ -337,7 +333,7 @@ describe('NodeActionsService', () => {
it('should use the ContentNodeSelectorComponentData object with file name in title', () => {
const spyOnBatchOperation = spyOn(service, 'doBatchOperation').and.callThrough();
spyOn(service, 'getContentNodeSelection').and.callThrough();
- spyOn(service, 'getFirstParentId').and.returnValue('parent-id');
+ spyOn(service, 'getEntryParentId').and.returnValue('parent-id');
let testContentNodeSelectorComponentData;
const dialog = TestBed.get(MatDialog);
@@ -350,13 +346,14 @@ describe('NodeActionsService', () => {
expect(spyOnBatchOperation).toHaveBeenCalled();
expect(testContentNodeSelectorComponentData).toBeDefined();
- expect(testContentNodeSelectorComponentData.data.title).toBe('copy \'entry-name\' to ...');
+ expect(testContentNodeSelectorComponentData.data.title).toBe('NODE_SELECTOR.COPY_ITEM');
+ expect(translationService.instant).toHaveBeenCalledWith('NODE_SELECTOR.COPY_ITEM', {name: 'entry-name', number: 1});
});
it('should use the ContentNodeSelectorComponentData object without file name in title, if no name exists', () => {
const spyOnBatchOperation = spyOn(service, 'doBatchOperation').and.callThrough();
spyOn(service, 'getContentNodeSelection').and.callThrough();
- spyOn(service, 'getFirstParentId').and.returnValue('parent-id');
+ spyOn(service, 'getEntryParentId').and.returnValue('parent-id');
let testContentNodeSelectorComponentData;
const dialog = TestBed.get(MatDialog);
@@ -369,7 +366,8 @@ describe('NodeActionsService', () => {
expect(spyOnBatchOperation).toHaveBeenCalled();
expect(testContentNodeSelectorComponentData).toBeDefined();
- expect(testContentNodeSelectorComponentData.data.title).toBe('copy to ...');
+ expect(testContentNodeSelectorComponentData.data.title).toBe('NODE_SELECTOR.COPY_ITEMS');
+ expect(translationService.instant).toHaveBeenCalledWith('NODE_SELECTOR.COPY_ITEMS', {name: '', number: 1});
});
});
@@ -700,9 +698,7 @@ describe('NodeActionsService', () => {
});
it('should call the documentListService moveNode directly for moving a file that has permission to be moved', () => {
- const spyOnDestinationPicker =
- spyOn(service, 'getContentNodeSelection')
- .and.returnValue(Observable.of([destinationFolder.entry]));
+ spyOn(service, 'getContentNodeSelection').and.returnValue(Observable.of([destinationFolder.entry]));
fileToMove.entry['allowableOperations'] = [permissionToMove];
spyOnDocumentListServiceAction = spyOn(documentListService, 'moveNode').and.returnValue(Observable.of([fileToMove]));
spyOn(service, 'moveNodeAction');
diff --git a/src/app/common/services/node-actions.service.ts b/src/app/common/services/node-actions.service.ts
index 17b2feb77..f67f6ed1e 100644
--- a/src/app/common/services/node-actions.service.ts
+++ b/src/app/common/services/node-actions.service.ts
@@ -2,7 +2,7 @@
* @license
* Alfresco Example Content Application
*
- * Copyright (C) 2005 - 2017 Alfresco Software Limited
+ * Copyright (C) 2005 - 2018 Alfresco Software Limited
*
* This file is part of the Alfresco Example Content Application.
* If the software was purchased under a paid Alfresco license, the terms of
@@ -23,13 +23,13 @@
* along with Alfresco. If not, see .
*/
-import { EventEmitter, Injectable } from '@angular/core';
+import { Injectable } from '@angular/core';
import { MatDialog } from '@angular/material';
import { Observable, Subject } from 'rxjs/Rx';
-import { AlfrescoApiService, ContentService, NodesApiService, DataColumn, DataSorting } from '@alfresco/adf-core';
+import { AlfrescoApiService, ContentService, NodesApiService, DataColumn, TranslationService } from '@alfresco/adf-core';
import { DocumentListService, ContentNodeSelectorComponent, ContentNodeSelectorComponentData } from '@alfresco/adf-content-services';
-import { MinimalNodeEntity, MinimalNodeEntryEntity } from 'alfresco-js-api';
+import { MinimalNodeEntity, MinimalNodeEntryEntity, SitePaging } from 'alfresco-js-api';
@Injectable()
export class NodeActionsService {
@@ -39,12 +39,14 @@ export class NodeActionsService {
contentCopied: Subject = new Subject();
contentMoved: Subject = new Subject();
moveDeletedEntries: any[] = [];
+ isSitesDestinationAvailable = false;
constructor(private contentService: ContentService,
private dialog: MatDialog,
private documentListService: DocumentListService,
private apiService: AlfrescoApiService,
- private nodesApi: NodesApiService) {}
+ private nodesApi: NodesApiService,
+ private translation: TranslationService) {}
/**
* Copy node list
@@ -121,7 +123,6 @@ export class NodeActionsService {
},
observable.error.bind(observable)
);
- this.dialog.closeAll();
});
} else {
@@ -144,23 +145,7 @@ export class NodeActionsService {
return !notAllowedNode;
}
- getFirstParentId(nodeEntities: any[]): string {
- for (let i = 0; i < nodeEntities.length; i++) {
- const nodeEntry = nodeEntities[i].entry;
-
- if (nodeEntry.parentId) {
- return nodeEntry.parentId;
-
- } else if (nodeEntry.path && nodeEntry.path.elements && nodeEntry.path.elements.length) {
- return nodeEntry.path.elements[nodeEntry.path.elements.length - 1].id;
- }
- }
-
- // if no parent data is found, return the id of first item / the nodeId in case of Shared Files
- return nodeEntities[0].entry.nodeId || nodeEntities[0].entry.id;
- }
-
- getEntryParentId(nodeEntry: any) {
+ getEntryParentId(nodeEntry: MinimalNodeEntryEntity) {
let entryParentId = '';
if (nodeEntry.parentId) {
@@ -173,33 +158,52 @@ export class NodeActionsService {
return entryParentId;
}
- getContentNodeSelection(action: string, contentEntities: MinimalNodeEntity[]): EventEmitter {
- const currentParentFolderId = this.getFirstParentId(contentEntities);
+ getContentNodeSelection(action: string, contentEntities: MinimalNodeEntity[]): Subject {
+ const currentParentFolderId = this.getEntryParentId(contentEntities[0].entry);
- let nodeEntryName = '';
- if (contentEntities.length === 1 && contentEntities[0].entry.name) {
- nodeEntryName = `'${contentEntities[0].entry.name}' `;
- }
+ const customDropdown: SitePaging = {
+ list: {
+ entries: [
+ {
+ entry: {
+ guid: '-my-',
+ title: 'APP.BROWSE.PERSONAL.SIDENAV_LINK.LABEL'
+ }
+ },
+ {
+ entry: {
+ guid: '-mysites-',
+ title: 'APP.BROWSE.LIBRARIES.SIDENAV_LINK.LABEL'
+ }
+ }
+ ]
+ }
+ };
+ const title = this.getTitleTranslation(action, contentEntities);
+
+ this.isSitesDestinationAvailable = false;
const data: ContentNodeSelectorComponentData = {
- title: `${action} ${nodeEntryName}to ...`,
+ title: title,
currentFolderId: currentParentFolderId,
actionName: action,
dropdownHideMyFiles: true,
- dropdownSiteList: [
- {title: 'APP.BROWSE.PERSONAL.SIDENAV_LINK.LABEL', guid: '-my-'},
- {title: 'APP.BROWSE.LIBRARIES.SIDENAV_LINK.LABEL', guid: '-mysites-'}],
+ dropdownSiteList: customDropdown,
rowFilter: this.rowFilter.bind(this),
imageResolver: this.imageResolver.bind(this),
- select: new EventEmitter()
+ isSelectionValid: this.canCopyMoveInsideIt.bind(this),
+ breadcrumbTransform: this.customizeBreadcrumb.bind(this),
+ select: new Subject()
};
- const matDialogRef = this.dialog.open(ContentNodeSelectorComponent, {
+ /*const matDialogRef =*/ this.dialog.open(ContentNodeSelectorComponent, {
data,
panelClass: 'adf-content-node-selector-dialog',
width: '630px'
});
- const destinationPicker = matDialogRef.componentInstance;
+
+ // todo: add back the fix for [ACA-1054]:
+ /* const destinationPicker = matDialogRef.componentInstance;
const initialSiteChanged = destinationPicker.siteChanged;
destinationPicker.siteChanged = (chosenSite) => {
@@ -210,21 +214,116 @@ export class NodeActionsService {
} else {
destinationPicker.documentList.data.setSorting(new DataSorting('name', 'asc'));
}
- };
+ };*/
- const initialGetNextPageOfSearch = destinationPicker.getNextPageOfSearch;
- destinationPicker.getNextPageOfSearch = (event) => {
- destinationPicker.infiniteScroll = true;
- destinationPicker.skipCount = event.skipCount;
-
- if (destinationPicker.searchTerm.length > 0) {
- initialGetNextPageOfSearch.call(destinationPicker, event);
- }
- };
+ data.select.subscribe({
+ complete: this.close.bind(this)
+ });
return data.select;
}
+ getTitleTranslation(action: string, nodes: MinimalNodeEntity[] = []): string {
+ let keyPrefix = 'ITEMS';
+ let name = '';
+
+ if (nodes.length === 1 && nodes[0].entry.name) {
+ name = nodes[0].entry.name;
+ keyPrefix = 'ITEM';
+ }
+
+ const number = nodes.length;
+ return this.translation.instant(`NODE_SELECTOR.${action.toUpperCase()}_${keyPrefix}`, {name, number});
+ }
+
+ private canCopyMoveInsideIt(entry: MinimalNodeEntryEntity): boolean {
+ return this.hasEntityCreatePermission(entry) && !this.isSite(entry);
+ }
+
+ private hasEntityCreatePermission(entry: MinimalNodeEntryEntity): boolean {
+ return this.contentService.hasPermission(entry, 'create');
+ }
+
+ private isSite(entry) {
+ return !!entry.guid || entry.nodeType === 'st:site' || entry.nodeType === 'st:sites';
+ }
+
+ close() {
+ this.dialog.closeAll();
+ }
+
+ // todo: review this approach once 5.2.3 is out
+ private customizeBreadcrumb(node: MinimalNodeEntryEntity) {
+
+ if (node && node.path && node.path.elements) {
+ const elements = node.path.elements;
+
+ if (elements.length > 1) {
+ if (elements[1].name === 'User Homes') {
+ elements.splice(0, 2);
+
+ // make sure first item is 'Personal Files'
+ if (elements[0]) {
+ elements[0].name = this.translation.instant('APP.BROWSE.PERSONAL.TITLE');
+ elements[0].id = '-my-';
+ } else {
+ node.name = this.translation.instant('APP.BROWSE.PERSONAL.TITLE');
+ }
+
+ } else if (elements[1].name === 'Sites') {
+ this.normalizeSitePath(node);
+ }
+
+ } else if (elements.length === 1) {
+ if (node.name === 'Sites') {
+ node.name = this.translation.instant('APP.BROWSE.LIBRARIES.TITLE');
+ elements.splice(0, 1);
+ }
+ }
+ } else if (node === null && this.isSitesDestinationAvailable) {
+ node = {
+ name: this.translation.instant('APP.BROWSE.LIBRARIES.TITLE'),
+ path: { elements: [] }
+ };
+ }
+
+ return node;
+ }
+
+ // todo: review this approach once 5.2.3 is out
+ private normalizeSitePath(node: MinimalNodeEntryEntity) {
+ const elements = node.path.elements;
+
+ // remove 'Company Home'
+ elements.splice(0, 1);
+
+ // replace first item with 'File Libraries'
+ elements[0].name = this.translation.instant('APP.BROWSE.LIBRARIES.TITLE');
+ // elements[0].id = '-mysites-'; // commented this until navigation on custom sources is enabled on document-list
+
+ if (this.isSiteContainer(node)) {
+ // rename 'documentLibrary' entry to the target site display name
+ // clicking on the breadcrumb entry loads the site content
+ node.name = elements[1].name;
+
+ // remove the site entry
+ elements.splice(1, 1);
+ } else {
+ // remove 'documentLibrary' in the middle of the path
+ const docLib = elements.findIndex(el => el.name === 'documentLibrary');
+ if (docLib > -1) {
+ elements.splice(docLib, 1);
+ }
+ }
+ }
+
+ isSiteContainer(node: MinimalNodeEntryEntity): boolean {
+ if (node && node.aspectNames && node.aspectNames.length > 0) {
+ return node.aspectNames.indexOf('st:siteContainer') >= 0;
+ }
+ return false;
+ }
+
copyNodeAction(nodeEntry, selectionId): Observable {
if (nodeEntry.isFolder) {
return this.copyFolderAction(nodeEntry, selectionId);
@@ -454,6 +553,8 @@ export class NodeActionsService {
// todo: review once 1.10-beta6 is out
private rowFilter(row: /*ShareDataRow*/ any): boolean {
const node: MinimalNodeEntryEntity = row.node.entry;
+
+ this.isSitesDestinationAvailable = !!node['guid'];
return (!node.isFile && (node.nodeType !== 'app:folderlink'));
}
diff --git a/src/app/components/about/about.component.ts b/src/app/components/about/about.component.ts
index d337bbab1..2912748b9 100644
--- a/src/app/components/about/about.component.ts
+++ b/src/app/components/about/about.component.ts
@@ -2,7 +2,7 @@
* @license
* Alfresco Example Content Application
*
- * Copyright (C) 2005 - 2017 Alfresco Software Limited
+ * Copyright (C) 2005 - 2018 Alfresco Software Limited
*
* This file is part of the Alfresco Example Content Application.
* If the software was purchased under a paid Alfresco license, the terms of
diff --git a/src/app/components/current-user/current-user.component.spec.ts b/src/app/components/current-user/current-user.component.spec.ts
index 9f3e76188..5eef09d37 100644
--- a/src/app/components/current-user/current-user.component.spec.ts
+++ b/src/app/components/current-user/current-user.component.spec.ts
@@ -2,7 +2,7 @@
* @license
* Alfresco Example Content Application
*
- * Copyright (C) 2005 - 2017 Alfresco Software Limited
+ * Copyright (C) 2005 - 2018 Alfresco Software Limited
*
* This file is part of the Alfresco Example Content Application.
* If the software was purchased under a paid Alfresco license, the terms of
@@ -23,11 +23,18 @@
* along with Alfresco. If not, see .
*/
+import { NO_ERRORS_SCHEMA } from '@angular/core';
import { TestBed, async } from '@angular/core/testing';
import { RouterTestingModule } from '@angular/router/testing';
import { Observable } from 'rxjs/Rx';
-import { MaterialModule } from '../../common/material.module';
-import { CoreModule, PeopleContentService } from '@alfresco/adf-core';
+import { HttpClientModule } from '@angular/common/http';
+import { TranslateModule } from '@ngx-translate/core';
+import { NoopAnimationsModule } from '@angular/platform-browser/animations';
+import { MatMenuModule } from '@angular/material';
+import {
+ TranslationService, TranslationMock, AlfrescoApiService,
+ AppConfigService, StorageService, PeopleContentService
+ } from '@alfresco/adf-core';
import { CurrentUserComponent } from './current-user.component';
@@ -44,13 +51,23 @@ describe('CurrentUserComponent', () => {
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [
- MaterialModule,
- CoreModule,
+ HttpClientModule,
+ TranslateModule.forRoot(),
+ NoopAnimationsModule,
+ MatMenuModule,
RouterTestingModule
],
declarations: [
CurrentUserComponent
- ]
+ ],
+ providers: [
+ { provide: TranslationService, useClass: TranslationMock },
+ AlfrescoApiService,
+ AppConfigService,
+ StorageService,
+ PeopleContentService
+ ],
+ schemas: [ NO_ERRORS_SCHEMA ]
})
.compileComponents()
.then(() => {
diff --git a/src/app/components/current-user/current-user.component.ts b/src/app/components/current-user/current-user.component.ts
index cc07ceac7..6ef40663a 100644
--- a/src/app/components/current-user/current-user.component.ts
+++ b/src/app/components/current-user/current-user.component.ts
@@ -2,7 +2,7 @@
* @license
* Alfresco Example Content Application
*
- * Copyright (C) 2005 - 2017 Alfresco Software Limited
+ * Copyright (C) 2005 - 2018 Alfresco Software Limited
*
* This file is part of the Alfresco Example Content Application.
* If the software was purchased under a paid Alfresco license, the terms of
diff --git a/src/app/components/empty-folder/empty-folder.component.html b/src/app/components/empty-folder/empty-folder.component.html
new file mode 100644
index 000000000..43ecf6bf8
--- /dev/null
+++ b/src/app/components/empty-folder/empty-folder.component.html
@@ -0,0 +1,6 @@
+
+
{{ icon }}
+
{{ title | translate }}
+
{{ subtitle | translate }}
+
+
diff --git a/src/app/components/empty-folder/empty-folder.component.scss b/src/app/components/empty-folder/empty-folder.component.scss
new file mode 100644
index 000000000..2da90ab1c
--- /dev/null
+++ b/src/app/components/empty-folder/empty-folder.component.scss
@@ -0,0 +1,29 @@
+@import 'variables';
+
+.app-empty-folder {
+ color: $alfresco-secondary-text-color;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+
+ &__icon {
+ font-size: 52px;
+ height: 52px;
+ width: 52px;
+ }
+
+ p {
+ line-height: 0;
+ }
+
+ &__title {
+ font-size: 18px;
+ font-weight: 600;
+ }
+
+ &__subtitle,
+ &__text {
+ font-size: 14px;
+ font-weight: 300;
+ }
+}
diff --git a/src/app/components/empty-folder/empty-folder.component.spec.ts b/src/app/components/empty-folder/empty-folder.component.spec.ts
new file mode 100644
index 000000000..32e4d5571
--- /dev/null
+++ b/src/app/components/empty-folder/empty-folder.component.spec.ts
@@ -0,0 +1,33 @@
+import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+import { MatIconModule } from '@angular/material';
+import { TranslateModule } from '@ngx-translate/core';
+
+import { EmptyFolderComponent } from './empty-folder.component';
+
+describe('EmptyFolderComponent', () => {
+ let component: EmptyFolderComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(async(() => {
+ TestBed.configureTestingModule({
+ imports: [
+ MatIconModule,
+ TranslateModule.forRoot()
+ ],
+ declarations: [
+ EmptyFolderComponent
+ ]
+ })
+ .compileComponents();
+ }));
+
+ beforeEach(() => {
+ fixture = TestBed.createComponent(EmptyFolderComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/src/app/components/empty-folder/empty-folder.component.ts b/src/app/components/empty-folder/empty-folder.component.ts
new file mode 100644
index 000000000..4e137d1de
--- /dev/null
+++ b/src/app/components/empty-folder/empty-folder.component.ts
@@ -0,0 +1,22 @@
+import { Component, Input, ChangeDetectionStrategy, ViewEncapsulation } from '@angular/core';
+
+@Component({
+ selector: 'app-empty-folder',
+ templateUrl: './empty-folder.component.html',
+ styleUrls: ['./empty-folder.component.scss'],
+ changeDetection: ChangeDetectionStrategy.OnPush,
+ encapsulation: ViewEncapsulation.None,
+ // tslint:disable-next-line:use-host-property-decorator
+ host: { class: 'app-empty-folder' }
+})
+export class EmptyFolderComponent {
+
+ @Input()
+ icon = 'cake';
+
+ @Input()
+ title = '';
+
+ @Input()
+ subtitle = '';
+}
diff --git a/src/app/components/favorites/favorites.component.html b/src/app/components/favorites/favorites.component.html
index 7c1f3b135..bd894cfe2 100644
--- a/src/app/components/favorites/favorites.component.html
+++ b/src/app/components/favorites/favorites.component.html
@@ -17,7 +17,7 @@
mat-icon-button
*ngIf="hasSelection(documentList.selection)"
title="{{ 'APP.ACTIONS.DOWNLOAD' | translate }}"
- [app-download-node]="documentList.selection">
+ [adfNodeDownload]="documentList.selection">
get_app
@@ -42,6 +42,7 @@
@@ -91,7 +91,7 @@
[attr.class]="documentList.isEmpty() ? 'empty-list' : ''"
[loading]="isLoading"
[node]="paging"
- [sorting]="[ 'modifiedAt', 'desc' ]"
+ [sorting]="sorting"
[allowDropFiles]="true"
[contextMenuActions]="true"
@@ -100,6 +100,7 @@
[selectionMode]="'multiple'"
[imageResolver]="imageResolver"
+ (sorting-changed)="onSortingChanged($event)"
(node-dblclick)="onNodeDoubleClick($event)"
(node-select)="onNodeSelect($event, documentList)">
diff --git a/src/app/components/files/files.component.spec.ts b/src/app/components/files/files.component.spec.ts
index 266be3433..d6f7854ed 100644
--- a/src/app/components/files/files.component.spec.ts
+++ b/src/app/components/files/files.component.spec.ts
@@ -2,7 +2,7 @@
* @license
* Alfresco Example Content Application
*
- * Copyright (C) 2005 - 2017 Alfresco Software Limited
+ * Copyright (C) 2005 - 2018 Alfresco Software Limited
*
* This file is part of the Alfresco Example Content Application.
* If the software was purchased under a paid Alfresco license, the terms of
@@ -24,17 +24,28 @@
*/
import { Observable } from 'rxjs/Rx';
-import { Router } from '@angular/router';
-import { RouterTestingModule } from '@angular/router/testing';
import { TestBed, async } from '@angular/core/testing';
-import { UploadService, NodesApiService, FileUploadCompleteEvent,
- FileUploadDeleteEvent, FileModel, ContentService } from '@alfresco/adf-core';
-
-import { CommonModule } from '../../common/common.module';
+import { NO_ERRORS_SCHEMA } from '@angular/core';
+import { Router, ActivatedRoute } from '@angular/router';
+import { RouterTestingModule } from '@angular/router/testing';
+import { HttpClientModule } from '@angular/common/http';
+import { TranslateModule } from '@ngx-translate/core';
+import { NoopAnimationsModule } from '@angular/platform-browser/animations';
+import {
+ NotificationService, TranslationService, TranslationMock,
+ NodesApiService, AlfrescoApiService, ContentService,
+ UserPreferencesService, LogService, AppConfigService,
+ StorageService, CookieService, ThumbnailService, AuthenticationService,
+ TimeAgoPipe, NodeNameTooltipPipe, FileSizePipe, NodeFavoriteDirective,
+ DataTableComponent, UploadService
+} from '@alfresco/adf-core';
+import { DocumentListComponent } from '@alfresco/adf-content-services';
+import { MatMenuModule, MatSnackBarModule, MatIconModule, MatDialogModule } from '@angular/material';
+import { DocumentListService } from '@alfresco/adf-content-services';
import { ContentManagementService } from '../../common/services/content-management.service';
import { BrowsingFilesService } from '../../common/services/browsing-files.service';
import { NodeActionsService } from '../../common/services/node-actions.service';
-import { GenericErrorComponent } from '../generic-error/generic-error.component';
+
import { FilesComponent } from './files.component';
describe('FilesComponent', () => {
@@ -49,17 +60,50 @@ describe('FilesComponent', () => {
let router: Router;
let browsingFilesService: BrowsingFilesService;
let nodeActionsService: NodeActionsService;
+ let preferenceService: UserPreferencesService;
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [
+ MatMenuModule,
+ NoopAnimationsModule,
+ HttpClientModule,
+ TranslateModule.forRoot(),
RouterTestingModule,
- CommonModule
+ MatSnackBarModule, MatIconModule,
+ MatDialogModule
],
declarations: [
FilesComponent,
- GenericErrorComponent
- ]
+ DataTableComponent,
+ TimeAgoPipe,
+ NodeNameTooltipPipe,
+ NodeFavoriteDirective,
+ DocumentListComponent,
+ FileSizePipe
+ ],
+ providers: [
+ { provide: ActivatedRoute, useValue: {
+ params: Observable.of({ folderId: 'someId' }),
+ snapshot: { data: { preferencePrefix: 'prefix' } }
+ } } ,
+ { provide: TranslationService, useClass: TranslationMock },
+ AuthenticationService,
+ UserPreferencesService,
+ AppConfigService, StorageService, CookieService,
+ AlfrescoApiService,
+ LogService,
+ NotificationService,
+ ContentManagementService,
+ ContentService,
+ NodesApiService,
+ DocumentListService,
+ ThumbnailService,
+ NodeActionsService,
+ UploadService,
+ BrowsingFilesService
+ ],
+ schemas: [ NO_ERRORS_SCHEMA ]
}).compileComponents()
.then(() => {
@@ -73,11 +117,12 @@ describe('FilesComponent', () => {
alfrescoContentService = TestBed.get(ContentService);
browsingFilesService = TestBed.get(BrowsingFilesService);
nodeActionsService = TestBed.get(NodeActionsService);
+ preferenceService = TestBed.get(UserPreferencesService);
});
}));
beforeEach(() => {
- node = { id: 'node-id' };
+ node = { id: 'node-id', isFolder: true };
page = {
list: {
entries: ['a', 'b', 'c'],
@@ -134,6 +179,17 @@ describe('FilesComponent', () => {
expect(component.onFetchError).toHaveBeenCalled();
});
+
+ it('if should navigate to parent if node is not a folder', () => {
+ node.isFolder = false;
+ node.parentId = 'parent-id';
+ spyOn(component, 'fetchNode').and.returnValue(Observable.of(node));
+ spyOn(router, 'navigate');
+
+ fixture.detectChanges();
+
+ expect(router.navigate['calls'].argsFor(0)[0]).toEqual(['/personal-files', 'parent-id']);
+ });
});
describe('refresh on events', () => {
@@ -184,19 +240,19 @@ describe('FilesComponent', () => {
});
it('calls refresh deleteNode event', () => {
- contentManagementService.deleteNode.next();
+ contentManagementService.nodeDeleted.next();
expect(component.load).toHaveBeenCalled();
});
it('calls refresh moveNode event', () => {
- contentManagementService.moveNode.next();
+ contentManagementService.nodeMoved.next();
expect(component.load).toHaveBeenCalled();
});
it('calls refresh restoreNode event', () => {
- contentManagementService.restoreNode.next();
+ contentManagementService.nodeRestored.next();
expect(component.load).toHaveBeenCalled();
});
@@ -304,6 +360,7 @@ describe('FilesComponent', () => {
it('opens preview if node is file', () => {
spyOn(router, 'navigate').and.stub();
node.isFile = true;
+ node.isFolder = false;
const event: any = {
detail: {
@@ -314,7 +371,7 @@ describe('FilesComponent', () => {
};
component.onNodeDoubleClick(event);
- expect(router.navigate).toHaveBeenCalledWith(['/preview', node.id]);
+ expect(router.navigate['calls'].argsFor(0)[0]).toEqual(['./preview', node.id]);
});
it('navigate if node is folder', () => {
@@ -443,4 +500,55 @@ describe('FilesComponent', () => {
expect(router.navigate).toHaveBeenCalledWith(['./'], jasmine.any(Object));
});
});
+
+ describe('isSiteContainer', () => {
+ it('should return false if node has no aspectNames', () => {
+ const mock = { aspectNames: [] };
+
+ expect(component.isSiteContainer(mock)).toBe(false);
+ });
+
+ it('should return false if node is not site container', () => {
+ const mock = { aspectNames: ['something-else'] };
+
+ expect(component.isSiteContainer(mock)).toBe(false);
+ });
+
+ it('should return true if node is a site container', () => {
+ const mock = { aspectNames: [ 'st:siteContainer' ] };
+
+ expect(component.isSiteContainer(mock)).toBe(true);
+ });
+ });
+
+ describe('onSortingChanged', () => {
+ it('should save sorting input', () => {
+ spyOn(preferenceService, 'set');
+
+ const event = {
+ detail: {
+ key: 'some-name',
+ direction: 'some-direction'
+ }
+ };
+
+ component.onSortingChanged(event);
+
+ expect(preferenceService.set).toHaveBeenCalledWith('prefix.sorting.key', 'some-name');
+ expect(preferenceService.set).toHaveBeenCalledWith('prefix.sorting.direction', 'some-direction');
+ });
+
+ it('should save default sorting when no input', () => {
+ spyOn(preferenceService, 'set');
+
+ const event = {
+ detail: {}
+ };
+
+ component.onSortingChanged(event);
+
+ expect(preferenceService.set).toHaveBeenCalledWith('prefix.sorting.key', 'modifiedAt');
+ expect(preferenceService.set).toHaveBeenCalledWith('prefix.sorting.direction', 'desc');
+ });
+ });
});
diff --git a/src/app/components/files/files.component.ts b/src/app/components/files/files.component.ts
index 8d3d7e729..d995daab3 100644
--- a/src/app/components/files/files.component.ts
+++ b/src/app/components/files/files.component.ts
@@ -2,7 +2,7 @@
* @license
* Alfresco Example Content Application
*
- * Copyright (C) 2005 - 2017 Alfresco Software Limited
+ * Copyright (C) 2005 - 2018 Alfresco Software Limited
*
* This file is part of the Alfresco Example Content Application.
* If the software was purchased under a paid Alfresco license, the terms of
@@ -49,19 +49,25 @@ export class FilesComponent extends PageComponent implements OnInit, OnDestroy {
private nodePath: PathElement[];
private subscriptions: Subscription[] = [];
- constructor(
- private router: Router,
- private zone: NgZone,
- private route: ActivatedRoute,
- private nodesApi: NodesApiService,
- private nodeActionsService: NodeActionsService,
- private uploadService: UploadService,
- private contentManagementService: ContentManagementService,
- private browsingFilesService: BrowsingFilesService,
- private contentService: ContentService,
- private apiService: AlfrescoApiService,
- preferences: UserPreferencesService) {
+ sorting = [ 'modifiedAt', 'desc' ];
+
+ constructor(private router: Router,
+ private zone: NgZone,
+ private route: ActivatedRoute,
+ private nodesApi: NodesApiService,
+ private nodeActionsService: NodeActionsService,
+ private uploadService: UploadService,
+ private contentManagementService: ContentManagementService,
+ private browsingFilesService: BrowsingFilesService,
+ private contentService: ContentService,
+ private apiService: AlfrescoApiService,
+ preferences: UserPreferencesService) {
super(preferences);
+
+ const sortingKey = this.preferences.get(`${this.prefix}.sorting.key`) || 'modifiedAt';
+ const sortingDirection = this.preferences.get(`${this.prefix}.sorting.direction`) || 'desc';
+
+ this.sorting = [sortingKey, sortingDirection];
}
ngOnInit() {
@@ -71,12 +77,19 @@ export class FilesComponent extends PageComponent implements OnInit, OnDestroy {
this.routeData = data;
this.title = data.i18nTitle;
- route.params.subscribe(({ id }: Params) => {
- const nodeId = id || data.defaultNodeId;
+ route.params.subscribe(({ folderId }: Params) => {
+ const nodeId = folderId || data.defaultNodeId;
this.isLoading = true;
this.fetchNode(nodeId)
- .do((node) => this.updateCurrentNode(node))
+ .do((node) => {
+ if (node.isFolder) {
+ this.updateCurrentNode(node);
+ } else {
+ this.router.navigate(['/personal-files', node.parentId], { replaceUrl: true });
+ }
+ })
+ .skipWhile(node => !node.isFolder)
.flatMap((node) => this.fetchNodes(node.id))
.subscribe(
(page) => {
@@ -94,9 +107,9 @@ export class FilesComponent extends PageComponent implements OnInit, OnDestroy {
nodeActionsService.contentCopied.subscribe((nodes) => this.onContentCopied(nodes)),
contentService.folderCreate.subscribe(() => this.load(false, this.pagination)),
contentService.folderEdit.subscribe(() => this.load(false, this.pagination)),
- contentManagementService.deleteNode.subscribe(() => this.load(false, this.pagination)),
- contentManagementService.moveNode.subscribe(() => this.load(false, this.pagination)),
- contentManagementService.restoreNode.subscribe(() => this.load(false, this.pagination)),
+ contentManagementService.nodeDeleted.subscribe(() => this.load(false, this.pagination)),
+ contentManagementService.nodeMoved.subscribe(() => this.load(false, this.pagination)),
+ contentManagementService.nodeRestored.subscribe(() => this.load(false, this.pagination)),
uploadService.fileUploadComplete.subscribe(file => this.onFileUploadedEvent(file)),
uploadService.fileUploadDeleted.subscribe((file) => this.onFileUploadedEvent(file))
]);
@@ -148,7 +161,7 @@ export class FilesComponent extends PageComponent implements OnInit, OnDestroy {
event.preventDefault();
} else if (node.isFile) {
- this.router.navigate(['/preview', node.id]);
+ this.router.navigate(['./preview', node.id], { relativeTo: this.route });
}
}
@@ -158,7 +171,7 @@ export class FilesComponent extends PageComponent implements OnInit, OnDestroy {
showPreview(node: MinimalNodeEntryEntity) {
if (node) {
if (node.isFile) {
- this.router.navigate(['/preview', node.id]);
+ this.router.navigate(['./preview', node.id], { relativeTo: this.route });
}
}
}
@@ -294,4 +307,13 @@ export class FilesComponent extends PageComponent implements OnInit, OnDestroy {
}
return false;
}
+
+ onSortingChanged(event: CustomEvent) {
+ this.preferences.set(`${this.prefix}.sorting.key`, event.detail.key || 'modifiedAt');
+ this.preferences.set(`${this.prefix}.sorting.direction`, event.detail.direction || 'desc');
+ }
+
+ private get prefix() {
+ return this.route.snapshot.data.preferencePrefix;
+ }
}
diff --git a/src/app/components/generic-error/generic-error.component.ts b/src/app/components/generic-error/generic-error.component.ts
index b5c6ad3bb..abfbf9a6d 100644
--- a/src/app/components/generic-error/generic-error.component.ts
+++ b/src/app/components/generic-error/generic-error.component.ts
@@ -2,7 +2,7 @@
* @license
* Alfresco Example Content Application
*
- * Copyright (C) 2005 - 2017 Alfresco Software Limited
+ * Copyright (C) 2005 - 2018 Alfresco Software Limited
*
* This file is part of the Alfresco Example Content Application.
* If the software was purchased under a paid Alfresco license, the terms of
diff --git a/src/app/components/header/header.component.spec.ts b/src/app/components/header/header.component.spec.ts
index fb1d51728..c32d91cfc 100644
--- a/src/app/components/header/header.component.spec.ts
+++ b/src/app/components/header/header.component.spec.ts
@@ -2,7 +2,7 @@
* @license
* Alfresco Example Content Application
*
- * Copyright (C) 2005 - 2017 Alfresco Software Limited
+ * Copyright (C) 2005 - 2018 Alfresco Software Limited
*
* This file is part of the Alfresco Example Content Application.
* If the software was purchased under a paid Alfresco license, the terms of
@@ -23,15 +23,14 @@
* along with Alfresco. If not, see .
*/
+import { NO_ERRORS_SCHEMA } from '@angular/core';
import { TestBed } from '@angular/core/testing';
import { RouterTestingModule } from '@angular/router/testing';
-import { CoreModule, AppConfigService, PeopleContentService } from '@alfresco/adf-core';
+import { AppConfigService, PeopleContentService } from '@alfresco/adf-core';
+import { HttpClientModule } from '@angular/common/http';
import { Observable } from 'rxjs/Rx';
-import { CommonModule } from './../../common/common.module';
import { HeaderComponent } from './header.component';
-import { SearchComponent } from '../search/search.component';
-import { CurrentUserComponent } from '../current-user/current-user.component';
describe('HeaderComponent', () => {
let fixture;
@@ -41,15 +40,17 @@ describe('HeaderComponent', () => {
beforeEach(() => {
TestBed.configureTestingModule({
imports: [
- CoreModule,
- RouterTestingModule,
- CommonModule
+ HttpClientModule,
+ RouterTestingModule
],
declarations: [
- HeaderComponent,
- SearchComponent,
- CurrentUserComponent
- ]
+ HeaderComponent
+ ],
+ providers: [
+ AppConfigService,
+ PeopleContentService
+ ],
+ schemas: [ NO_ERRORS_SCHEMA ]
})
.overrideProvider(PeopleContentService, {
useValue: {
@@ -65,16 +66,24 @@ describe('HeaderComponent', () => {
if (val === 'application.name') {
return 'app-name';
}
+
+ if (val === 'headerColor') {
+ return 'some-color';
+ }
+
+ if (val === 'application.logo') {
+ return '';
+ }
});
fixture.detectChanges();
});
- it('should get application name from configuration file', () => {
- expect(appConfigService.get).toHaveBeenCalledWith('application.name');
- });
-
it('it should set application name', () => {
expect(component.appName).toBe('app-name');
});
+
+ it('it should set header background color', () => {
+ expect(component.backgroundColor).toBe('some-color');
+ });
});
diff --git a/src/app/components/header/header.component.ts b/src/app/components/header/header.component.ts
index cd9636ea2..421944706 100644
--- a/src/app/components/header/header.component.ts
+++ b/src/app/components/header/header.component.ts
@@ -2,7 +2,7 @@
* @license
* Alfresco Example Content Application
*
- * Copyright (C) 2005 - 2017 Alfresco Software Limited
+ * Copyright (C) 2005 - 2018 Alfresco Software Limited
*
* This file is part of the Alfresco Example Content Application.
* If the software was purchased under a paid Alfresco license, the terms of
diff --git a/src/app/components/layout/layout.component.spec.ts b/src/app/components/layout/layout.component.spec.ts
index 5bd92c25e..fc926fdef 100644
--- a/src/app/components/layout/layout.component.spec.ts
+++ b/src/app/components/layout/layout.component.spec.ts
@@ -2,7 +2,7 @@
* @license
* Alfresco Example Content Application
*
- * Copyright (C) 2005 - 2017 Alfresco Software Limited
+ * Copyright (C) 2005 - 2018 Alfresco Software Limited
*
* This file is part of the Alfresco Example Content Application.
* If the software was purchased under a paid Alfresco license, the terms of
@@ -23,19 +23,22 @@
* along with Alfresco. If not, see .
*/
+import { NO_ERRORS_SCHEMA } from '@angular/core';
import { RouterTestingModule } from '@angular/router/testing';
import { TestBed, ComponentFixture } from '@angular/core/testing';
import { MinimalNodeEntryEntity } from 'alfresco-js-api';
-import { CoreModule, ContentService, PeopleContentService, AppConfigService } from '@alfresco/adf-core';
+import { TranslateModule } from '@ngx-translate/core';
+import { HttpClientModule } from '@angular/common/http';
+import {
+ ContentService, PeopleContentService, AppConfigService,
+ AuthenticationService, UserPreferencesService, TranslationService,
+ TranslationMock, StorageService, AlfrescoApiService, CookieService,
+ LogService
+} from '@alfresco/adf-core';
import { Observable } from 'rxjs/Observable';
import { BrowsingFilesService } from '../../common/services/browsing-files.service';
import { LayoutComponent } from './layout.component';
-import { CommonModule } from './../../common/common.module';
-import { HeaderComponent } from '../header/header.component';
-import { SidenavComponent } from '../sidenav/sidenav.component';
-import { SearchComponent } from '../search/search.component';
-import { CurrentUserComponent } from '../current-user/current-user.component';
describe('LayoutComponent', () => {
let fixture: ComponentFixture;
@@ -55,26 +58,32 @@ describe('LayoutComponent', () => {
TestBed.configureTestingModule({
imports: [
- CoreModule,
- RouterTestingModule,
- CommonModule
+ HttpClientModule,
+ TranslateModule.forRoot(),
+ RouterTestingModule
],
declarations: [
- LayoutComponent,
- HeaderComponent,
- SidenavComponent,
- SearchComponent,
- CurrentUserComponent
+ LayoutComponent
],
providers: [
+ { provide: TranslationService, useClass: TranslationMock },
+ AlfrescoApiService,
+ StorageService,
+ CookieService,
+ LogService,
+ UserPreferencesService,
+ AuthenticationService,
+ ContentService,
AppConfigService,
+ BrowsingFilesService,
{
provide: PeopleContentService,
useValue: {
getCurrentPerson: () => Observable.of({ entry: {} })
}
}
- ]
+ ],
+ schemas: [ NO_ERRORS_SCHEMA ]
});
fixture = TestBed.createComponent(LayoutComponent);
diff --git a/src/app/components/layout/layout.component.ts b/src/app/components/layout/layout.component.ts
index a6b17facf..5be6ea1ce 100644
--- a/src/app/components/layout/layout.component.ts
+++ b/src/app/components/layout/layout.component.ts
@@ -2,7 +2,7 @@
* @license
* Alfresco Example Content Application
*
- * Copyright (C) 2005 - 2017 Alfresco Software Limited
+ * Copyright (C) 2005 - 2018 Alfresco Software Limited
*
* This file is part of the Alfresco Example Content Application.
* If the software was purchased under a paid Alfresco license, the terms of
diff --git a/src/app/components/libraries/libraries.component.html b/src/app/components/libraries/libraries.component.html
index 4b6a82ea6..170a296c1 100644
--- a/src/app/components/libraries/libraries.component.html
+++ b/src/app/components/libraries/libraries.component.html
@@ -13,18 +13,19 @@
currentFolderId="-mysites-"
selectionMode="none"
[navigate]="false"
- [sorting]="[ 'name', 'asc' ]"
+ [sorting]="sorting"
[contextMenuActions]="true"
[contentActions]="false"
+ (sorting-changed)="onSortingChanged($event)"
(node-dblclick)="onNodeDoubleClick($event)">
-
-
group_work
-
{{ 'APP.BROWSE.LIBRARIES.EMPTY_STATE.TITLE' | translate }}
-
{{ 'APP.BROWSE.LIBRARIES.EMPTY_STATE.TEXT' | translate }}
-
+
+
diff --git a/src/app/components/libraries/libraries.component.spec.ts b/src/app/components/libraries/libraries.component.spec.ts
index 6498569a7..8355d9b2f 100644
--- a/src/app/components/libraries/libraries.component.spec.ts
+++ b/src/app/components/libraries/libraries.component.spec.ts
@@ -2,7 +2,7 @@
* @license
* Alfresco Example Content Application
*
- * Copyright (C) 2005 - 2017 Alfresco Software Limited
+ * Copyright (C) 2005 - 2018 Alfresco Software Limited
*
* This file is part of the Alfresco Example Content Application.
* If the software was purchased under a paid Alfresco license, the terms of
@@ -23,15 +23,26 @@
* along with Alfresco. If not, see .
*/
-import { Router } from '@angular/router';
-import { RouterTestingModule } from '@angular/router/testing';
import { TestBed, async } from '@angular/core/testing';
import { Observable } from 'rxjs/Rx';
-
-import { CoreModule , NodesApiService, AlfrescoApiService} from '@alfresco/adf-core';
+import { NO_ERRORS_SCHEMA } from '@angular/core';
+import { Router, ActivatedRoute } from '@angular/router';
+import { RouterTestingModule } from '@angular/router/testing';
+import { HttpClientModule } from '@angular/common/http';
+import {
+ NotificationService, TranslationService, TranslationMock,
+ NodesApiService, AlfrescoApiService, ContentService,
+ UserPreferencesService, LogService, AppConfigService,
+ StorageService, CookieService, ThumbnailService, AuthenticationService,
+ TimeAgoPipe, NodeNameTooltipPipe, NodeFavoriteDirective, DataTableComponent
+} from '@alfresco/adf-core';
+import { DocumentListComponent } from '@alfresco/adf-content-services';
+import { TranslateModule } from '@ngx-translate/core';
+import { NoopAnimationsModule } from '@angular/platform-browser/animations';
+import { MatMenuModule, MatSnackBarModule, MatIconModule } from '@angular/material';
+import { DocumentListService } from '@alfresco/adf-content-services';
import { ShareDataTableAdapter } from '@alfresco/adf-content-services';
-import { CommonModule } from '../../common/common.module';
import { LibrariesComponent } from './libraries.component';
describe('Libraries Routed Component', () => {
@@ -40,6 +51,7 @@ describe('Libraries Routed Component', () => {
let nodesApi: NodesApiService;
let alfrescoApi: AlfrescoApiService;
let router: Router;
+ let preferenceService: UserPreferencesService;
let page;
let node;
@@ -62,13 +74,38 @@ describe('Libraries Routed Component', () => {
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [
- CoreModule,
+ MatMenuModule,
+ NoopAnimationsModule,
+ HttpClientModule,
+ TranslateModule.forRoot(),
RouterTestingModule,
- CommonModule
+ MatSnackBarModule, MatIconModule
],
declarations: [
+ DataTableComponent,
+ TimeAgoPipe,
+ NodeNameTooltipPipe,
+ NodeFavoriteDirective,
+ DocumentListComponent,
LibrariesComponent
- ]
+ ],
+ providers: [
+ { provide: ActivatedRoute, useValue: {
+ snapshot: { data: { preferencePrefix: 'prefix' } }
+ } } ,
+ { provide: TranslationService, useClass: TranslationMock },
+ AuthenticationService,
+ UserPreferencesService,
+ AppConfigService, StorageService, CookieService,
+ AlfrescoApiService,
+ LogService,
+ NotificationService,
+ ContentService,
+ NodesApiService,
+ DocumentListService,
+ ThumbnailService
+ ],
+ schemas: [ NO_ERRORS_SCHEMA ]
})
.compileComponents().then(() => {
fixture = TestBed.createComponent(LibrariesComponent);
@@ -77,11 +114,13 @@ describe('Libraries Routed Component', () => {
nodesApi = TestBed.get(NodesApiService);
alfrescoApi = TestBed.get(AlfrescoApiService);
router = TestBed.get(Router);
+ preferenceService = TestBed.get(UserPreferencesService);
});
}));
beforeEach(() => {
spyOn(alfrescoApi.sitesApi, 'getSites').and.returnValue((Promise.resolve(page)));
+ spyOn(alfrescoApi.peopleApi, 'getSiteMembership').and.returnValue((Promise.resolve({})));
});
describe('makeLibraryTooltip()', () => {
@@ -191,4 +230,35 @@ describe('Libraries Routed Component', () => {
expect(component.navigate).not.toHaveBeenCalled();
});
});
+
+ describe('onSortingChanged', () => {
+ it('should save sorting input', () => {
+ spyOn(preferenceService, 'set');
+
+ const event = {
+ detail: {
+ key: 'some-name',
+ direction: 'some-direction'
+ }
+ };
+
+ component.onSortingChanged(event);
+
+ expect(preferenceService.set).toHaveBeenCalledWith('prefix.sorting.key', 'some-name');
+ expect(preferenceService.set).toHaveBeenCalledWith('prefix.sorting.direction', 'some-direction');
+ });
+
+ it('should save default sorting when no input', () => {
+ spyOn(preferenceService, 'set');
+
+ const event = {
+ detail: {}
+ };
+
+ component.onSortingChanged(event);
+
+ expect(preferenceService.set).toHaveBeenCalledWith('prefix.sorting.key', 'modifiedAt');
+ expect(preferenceService.set).toHaveBeenCalledWith('prefix.sorting.direction', 'desc');
+ });
+ });
});
diff --git a/src/app/components/libraries/libraries.component.ts b/src/app/components/libraries/libraries.component.ts
index 3185aec72..6870d14e1 100644
--- a/src/app/components/libraries/libraries.component.ts
+++ b/src/app/components/libraries/libraries.component.ts
@@ -2,7 +2,7 @@
* @license
* Alfresco Example Content Application
*
- * Copyright (C) 2005 - 2017 Alfresco Software Limited
+ * Copyright (C) 2005 - 2018 Alfresco Software Limited
*
* This file is part of the Alfresco Example Content Application.
* If the software was purchased under a paid Alfresco license, the terms of
@@ -38,12 +38,18 @@ export class LibrariesComponent extends PageComponent {
@ViewChild(DocumentListComponent)
documentList: DocumentListComponent;
- constructor(
- private nodesApi: NodesApiService,
- private route: ActivatedRoute,
- private router: Router,
- preferences: UserPreferencesService) {
+ sorting = [ 'title', 'asc' ];
+
+ constructor(private nodesApi: NodesApiService,
+ private route: ActivatedRoute,
+ private router: Router,
+ preferences: UserPreferencesService) {
super(preferences);
+
+ const sortingKey = preferences.get(`${this.prefix}.sorting.key`) || 'title';
+ const sortingDirection = preferences.get(`${this.prefix}.sorting.direction`) || 'desc';
+
+ this.sorting = [sortingKey, sortingDirection];
}
makeLibraryTooltip(library: any): string {
@@ -90,4 +96,13 @@ export class LibrariesComponent extends PageComponent {
fetchNodes(): void {
// todo: remove once all views migrate to native data source
}
+
+ onSortingChanged(event: CustomEvent) {
+ this.preferences.set(`${this.prefix}.sorting.key`, event.detail.key || 'modifiedAt');
+ this.preferences.set(`${this.prefix}.sorting.direction`, event.detail.direction || 'desc');
+ }
+
+ private get prefix() {
+ return this.route.snapshot.data.preferencePrefix;
+ }
}
diff --git a/src/app/components/location-link/location-link.component.ts b/src/app/components/location-link/location-link.component.ts
index 5e4355cf9..91c74e3d0 100644
--- a/src/app/components/location-link/location-link.component.ts
+++ b/src/app/components/location-link/location-link.component.ts
@@ -2,7 +2,7 @@
* @license
* Alfresco Example Content Application
*
- * Copyright (C) 2005 - 2017 Alfresco Software Limited
+ * Copyright (C) 2005 - 2018 Alfresco Software Limited
*
* This file is part of the Alfresco Example Content Application.
* If the software was purchased under a paid Alfresco license, the terms of
@@ -25,7 +25,7 @@
import { Component, Input, ChangeDetectionStrategy, OnInit, ViewEncapsulation } from '@angular/core';
import { AlfrescoApiService, DataColumn, DataRow, DataTableAdapter } from '@alfresco/adf-core';
-import { PathInfoEntity, AlfrescoApi } from 'alfresco-js-api';
+import { PathInfoEntity } from 'alfresco-js-api';
import { Observable } from 'rxjs/Rx';
@Component({
diff --git a/src/app/components/login/login.component.html b/src/app/components/login/login.component.html
index 94d00dbc5..b23521bf6 100644
--- a/src/app/components/login/login.component.html
+++ b/src/app/components/login/login.component.html
@@ -1,5 +1,5 @@
.
*/
+import { NO_ERRORS_SCHEMA } from '@angular/core';
import { RouterTestingModule } from '@angular/router/testing';
import { Router } from '@angular/router';
+import { HttpClientModule } from '@angular/common/http';
+import { TranslateModule } from '@ngx-translate/core';
import { Location } from '@angular/common';
import { TestBed, async } from '@angular/core/testing';
-import { CoreModule, AuthenticationService, UserPreferencesService } from '@alfresco/adf-core';
+import {
+ AuthenticationService, UserPreferencesService, TranslationService,
+ TranslationMock, AppConfigService, StorageService, AlfrescoApiService,
+ CookieService, LogService
+} from '@alfresco/adf-core';
import { LoginComponent } from './login.component';
@@ -42,15 +49,25 @@ describe('LoginComponent', () => {
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [
- RouterTestingModule,
- CoreModule
+ HttpClientModule,
+ TranslateModule.forRoot(),
+ RouterTestingModule
],
declarations: [
LoginComponent
],
providers: [
- Location
- ]
+ { provide: TranslationService, useClass: TranslationMock },
+ Location,
+ CookieService,
+ LogService,
+ StorageService,
+ AlfrescoApiService,
+ AppConfigService,
+ AuthenticationService,
+ UserPreferencesService
+ ],
+ schemas: [ NO_ERRORS_SCHEMA ]
});
fixture = TestBed.createComponent(LoginComponent);
diff --git a/src/app/components/login/login.component.ts b/src/app/components/login/login.component.ts
index 7c52a8a4d..c0e24091e 100644
--- a/src/app/components/login/login.component.ts
+++ b/src/app/components/login/login.component.ts
@@ -2,7 +2,7 @@
* @license
* Alfresco Example Content Application
*
- * Copyright (C) 2005 - 2017 Alfresco Software Limited
+ * Copyright (C) 2005 - 2018 Alfresco Software Limited
*
* This file is part of the Alfresco Example Content Application.
* If the software was purchased under a paid Alfresco license, the terms of
diff --git a/src/app/components/page.component.spec.ts b/src/app/components/page.component.spec.ts
index a13c0ce5a..481ba39eb 100644
--- a/src/app/components/page.component.spec.ts
+++ b/src/app/components/page.component.spec.ts
@@ -2,7 +2,7 @@
* @license
* Alfresco Example Content Application
*
- * Copyright (C) 2005 - 2017 Alfresco Software Limited
+ * Copyright (C) 2005 - 2018 Alfresco Software Limited
*
* This file is part of the Alfresco Example Content Application.
* If the software was purchased under a paid Alfresco license, the terms of
@@ -23,8 +23,6 @@
* along with Alfresco. If not, see .
*/
-import { TestBed } from '@angular/core/testing';
-
import { PageComponent } from './page.component';
class TestClass extends PageComponent {
@@ -300,4 +298,52 @@ describe('PageComponent', () => {
expect(component.nodeHasPermission(node, 'some-operation')).toBe(false);
});
});
+
+ describe('canDeleteShared()', () => {
+ it('should return true if shared node can be deleted', () => {
+ const selection = [ { entry: {
+ allowableOperationsOnTarget: ['delete']
+ } } ];
+
+ expect(component.canDeleteShared(selection)).toBe(true);
+ });
+
+ it(`should return false if shared node doesn't have permission`, () => {
+ const selection = [ { entry: {
+ allowableOperationsOnTarget: ['something']
+ } } ];
+
+ expect(component.canDeleteShared(selection)).toBe(false);
+ });
+
+ it(`should return false if shared node doesn't have permissions property`, () => {
+ const selection = [ { entry: { } } ];
+
+ expect(component.canDeleteShared(selection)).toBe(false);
+ });
+ });
+
+ describe('canMoveShared()', () => {
+ it('should return true if shared node can be moved', () => {
+ const selection = [ { entry: {
+ allowableOperationsOnTarget: ['delete']
+ } } ];
+
+ expect(component.canMoveShared(selection)).toBe(true);
+ });
+
+ it(`should return false if shared node doesn't have permission`, () => {
+ const selection = [ { entry: {
+ allowableOperationsOnTarget: ['something']
+ } } ];
+
+ expect(component.canMoveShared(selection)).toBe(false);
+ });
+
+ it(`should return false if shared node doesn't have permissions property`, () => {
+ const selection = [ { entry: { } } ];
+
+ expect(component.canMoveShared(selection)).toBe(false);
+ });
+ });
});
diff --git a/src/app/components/page.component.ts b/src/app/components/page.component.ts
index 64c19d0b3..e4011e6a9 100644
--- a/src/app/components/page.component.ts
+++ b/src/app/components/page.component.ts
@@ -2,7 +2,7 @@
* @license
* Alfresco Example Content Application
*
- * Copyright (C) 2005 - 2017 Alfresco Software Limited
+ * Copyright (C) 2005 - 2018 Alfresco Software Limited
*
* This file is part of the Alfresco Example Content Application.
* If the software was purchased under a paid Alfresco license, the terms of
@@ -45,7 +45,7 @@ export abstract class PageComponent {
abstract fetchNodes(parentNodeId?: string, options?: any): void;
- constructor(private preferences: UserPreferencesService) {
+ constructor(protected preferences: UserPreferencesService) {
}
onFetchError(error: any) {
@@ -111,10 +111,18 @@ export abstract class PageComponent {
return selection.every(node => node.entry && this.nodeHasPermission(node.entry, 'delete'));
}
+ canDeleteShared(selection: Array = []): boolean {
+ return selection.every(node => node.entry && this.nodeSharedHasPermission(node.entry, 'delete'));
+ }
+
canMove(selection: Array): boolean {
return this.canDelete(selection);
}
+ canMoveShared(selection: Array = []): boolean {
+ return selection.every(node => node.entry && this.nodeSharedHasPermission(node.entry, 'delete'));
+ }
+
canPreviewFile(selection: Array): boolean {
return this.isFileSelected(selection);
}
@@ -127,7 +135,7 @@ export abstract class PageComponent {
return this.isFileSelected(selection);
}
- nodeHasPermission(node: MinimalNodeEntryEntity, permission: string) {
+ nodeHasPermission(node: MinimalNodeEntryEntity, permission: string): boolean {
if (node && permission) {
const { allowableOperations = [] } = (node || {});
@@ -139,6 +147,18 @@ export abstract class PageComponent {
return false;
}
+ nodeSharedHasPermission(node: MinimalNodeEntryEntity, permission: string): boolean {
+ if (node && permission) {
+ const { allowableOperationsOnTarget } = (node || {});
+
+ if (allowableOperationsOnTarget && allowableOperationsOnTarget.indexOf(permission) > -1) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
onChangePageSize(event: Pagination): void {
this.preferences.paginationSize = event.maxItems;
}
diff --git a/src/app/components/preview/preview.component.html b/src/app/components/preview/preview.component.html
index 2592514c9..7b954934c 100644
--- a/src/app/components/preview/preview.component.html
+++ b/src/app/components/preview/preview.component.html
@@ -1,3 +1,50 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/app/components/preview/preview.component.spec.ts b/src/app/components/preview/preview.component.spec.ts
new file mode 100644
index 000000000..b4ada822a
--- /dev/null
+++ b/src/app/components/preview/preview.component.spec.ts
@@ -0,0 +1,681 @@
+/*!
+ * @license
+ * Alfresco Example Content Application
+ *
+ * Copyright (C) 2005 - 2018 Alfresco Software Limited
+ *
+ * This file is part of the Alfresco Example Content Application.
+ * If the software was purchased under a paid Alfresco license, the terms of
+ * the paid license agreement will prevail. Otherwise, the software is
+ * provided under the following open source license terms:
+ *
+ * The Alfresco Example Content Application is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * The Alfresco Example Content Application is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with Alfresco. If not, see .
+ */
+
+import { NO_ERRORS_SCHEMA } from '@angular/core';
+import { Router, ActivatedRoute } from '@angular/router';
+import { RouterTestingModule } from '@angular/router/testing';
+import { TestBed, async, ComponentFixture } from '@angular/core/testing';
+import {
+ AlfrescoApiService, UserPreferencesService, TranslationService, TranslationMock,
+ AppConfigService, StorageService, CookieService, NotificationService, NodeFavoriteDirective
+} from '@alfresco/adf-core';
+import { TranslateModule } from '@ngx-translate/core';
+import { HttpClientModule } from '@angular/common/http';
+
+import { PreviewComponent } from './preview.component';
+import { Observable } from 'rxjs/Rx';
+import { ContentManagementService } from '../../common/services/content-management.service';
+import { MatSnackBarModule } from '@angular/material';
+
+describe('PreviewComponent', () => {
+
+ let fixture: ComponentFixture;
+ let component: PreviewComponent;
+ let router: Router;
+ let route: ActivatedRoute;
+ let alfrescoApi: AlfrescoApiService;
+ let preferences: UserPreferencesService;
+
+ beforeEach(async(() => {
+ TestBed.configureTestingModule({
+ imports: [
+ HttpClientModule,
+ RouterTestingModule,
+ TranslateModule.forRoot(),
+ MatSnackBarModule
+ ],
+ providers: [
+ { provide: TranslationService, useClass: TranslationMock },
+ AlfrescoApiService,
+ AppConfigService,
+ StorageService,
+ CookieService,
+ NotificationService,
+ UserPreferencesService,
+ ContentManagementService
+ ],
+ declarations: [
+ PreviewComponent,
+ NodeFavoriteDirective
+ ],
+ schemas: [ NO_ERRORS_SCHEMA ]
+ })
+ .compileComponents().then(() => {
+ fixture = TestBed.createComponent(PreviewComponent);
+ component = fixture.componentInstance;
+
+ router = TestBed.get(Router);
+ route = TestBed.get(ActivatedRoute);
+ alfrescoApi = TestBed.get(AlfrescoApiService);
+ preferences = TestBed.get(UserPreferencesService);
+ });
+ }));
+
+ it('should extract the property path root', () => {
+ expect(component.getRootField('some.property.path')).toBe('some');
+ expect(component.getRootField('some')).toBe('some');
+ expect(component.getRootField('')).toBe('');
+ expect(component.getRootField(null)).toBe(null);
+ });
+
+ it('should navigate to previous node in sub-folder', () => {
+ spyOn(router, 'navigate').and.stub();
+
+ component.previewLocation = 'personal-files';
+ component.folderId = 'folder1';
+ component.previousNodeId = 'previous1';
+ component.onNavigateBefore();
+
+ expect(router.navigate).toHaveBeenCalledWith(
+ ['personal-files', 'folder1', 'preview', 'previous1']
+ );
+ });
+
+ it('should navigate back to previous node in the root path', () => {
+ spyOn(router, 'navigate').and.stub();
+
+ component.previewLocation = 'personal-files';
+ component.folderId = null;
+ component.previousNodeId = 'previous1';
+ component.onNavigateBefore();
+
+ expect(router.navigate).toHaveBeenCalledWith(
+ ['personal-files', 'preview', 'previous1']
+ );
+ });
+
+ it('should not navigate back if node unset', () => {
+ spyOn(router, 'navigate').and.stub();
+
+ component.previousNodeId = null;
+ component.onNavigateBefore();
+
+ expect(router.navigate).not.toHaveBeenCalled();
+ });
+
+ it('should navigate to next node in sub-folder', () => {
+ spyOn(router, 'navigate').and.stub();
+
+ component.previewLocation = 'personal-files';
+ component.folderId = 'folder1';
+ component.nextNodeId = 'next1';
+ component.onNavigateNext();
+
+ expect(router.navigate).toHaveBeenCalledWith(
+ ['personal-files', 'folder1', 'preview', 'next1']
+ );
+ });
+
+ it('should navigate to next node in the root path', () => {
+ spyOn(router, 'navigate').and.stub();
+
+ component.previewLocation = 'personal-files';
+ component.folderId = null;
+ component.nextNodeId = 'next1';
+ component.onNavigateNext();
+
+ expect(router.navigate).toHaveBeenCalledWith(
+ ['personal-files', 'preview', 'next1']
+ );
+ });
+
+ it('should not navigate back if node unset', () => {
+ spyOn(router, 'navigate').and.stub();
+
+ component.nextNodeId = null;
+ component.onNavigateNext();
+
+ expect(router.navigate).not.toHaveBeenCalled();
+ });
+
+ it('should generate preview path for a folder only', () => {
+ component.previewLocation = 'personal-files';
+
+ expect(component.getPreviewPath('folder1', null)).toEqual(
+ ['personal-files', 'folder1']
+ );
+ });
+
+ it('should generate preview path for a folder and a node', () => {
+ component.previewLocation = 'personal-files';
+
+ expect(component.getPreviewPath('folder1', 'node1')).toEqual(
+ ['personal-files', 'folder1', 'preview', 'node1']
+ );
+ });
+
+ it('should generate preview path for a node only', () => {
+ component.previewLocation = 'personal-files';
+
+ expect(component.getPreviewPath(null, 'node1')).toEqual(
+ ['personal-files', 'preview', 'node1']
+ );
+ });
+
+ it('should generate preview for the location only', () => {
+ component.previewLocation = 'personal-files';
+
+ expect(component.getPreviewPath(null, null)).toEqual(
+ ['personal-files']
+ );
+ });
+
+ it('should navigate back to root path upon close', () => {
+ spyOn(router, 'navigate').and.stub();
+
+ component.routesSkipNavigation = [];
+ component.previewLocation = 'libraries';
+ component.folderId = null;
+
+ component.onVisibilityChanged(false);
+
+ expect(router.navigate).toHaveBeenCalledWith(
+ ['libraries']
+ );
+ });
+
+ it('should navigate back to folder path upon close', () => {
+ spyOn(router, 'navigate').and.stub();
+
+ component.routesSkipNavigation = [];
+ component.previewLocation = 'libraries';
+ component.folderId = 'site1';
+
+ component.onVisibilityChanged(false);
+
+ expect(router.navigate).toHaveBeenCalledWith(
+ ['libraries', 'site1']
+ );
+ });
+
+ it('should not navigate to root path for certain routes upon close', () => {
+ spyOn(router, 'navigate').and.stub();
+
+ component.routesSkipNavigation = ['shared'];
+ component.previewLocation = 'shared';
+ component.folderId = 'folder1';
+
+ component.onVisibilityChanged(false);
+
+ expect(router.navigate).toHaveBeenCalledWith(
+ ['shared']
+ );
+ });
+
+ it('should not navigate back if viewer is still visible', () => {
+ spyOn(router, 'navigate').and.stub();
+
+ component.routesSkipNavigation = [];
+ component.previewLocation = 'shared';
+
+ component.onVisibilityChanged(true);
+
+ expect(router.navigate).not.toHaveBeenCalled();
+ });
+
+ it('should enable multiple document navigation from route data', () => {
+ route.snapshot.data = {
+ navigateMultiple: true
+ };
+
+ component.ngOnInit();
+
+ expect(component.navigateMultiple).toBeTruthy();
+ });
+
+ it('should not enable multiple document navigation from route data', () => {
+ route.snapshot.data = {};
+
+ component.ngOnInit();
+
+ expect(component.navigateMultiple).toBeFalsy();
+ });
+
+ it('should fetch navigation source from route', () => {
+ route.snapshot.data = {
+ navigateSource: 'personal-files'
+ };
+
+ component.ngOnInit();
+
+ expect(component.navigateSource).toBe('personal-files');
+ });
+
+ it('should fetch case-insensitive source from route', () => {
+ route.snapshot.data = {
+ navigateSource: 'PERSONAL-FILES'
+ };
+
+ component.navigationSources = ['personal-files'];
+ component.ngOnInit();
+
+ expect(component.navigateSource).toBe('PERSONAL-FILES');
+ });
+
+ it('should fetch only permitted navigation source from route', () => {
+ route.snapshot.data = {
+ navigateSource: 'personal-files'
+ };
+
+ component.navigationSources = ['shared'];
+ component.ngOnInit();
+
+ expect(component.navigateSource).toBeNull();
+ });
+
+ it('should display document upon init', () => {
+ route.params = Observable.of({
+ folderId: 'folder1',
+ nodeId: 'node1'
+ });
+
+ spyOn(component, 'displayNode').and.stub();
+
+ component.ngOnInit();
+
+ expect(component.folderId).toBe('folder1');
+ expect(component.displayNode).toHaveBeenCalledWith('node1');
+ });
+
+ it('should return empty nearest nodes for missing node id', async () => {
+ const nearest = await component.getNearestNodes(null, 'folder1');
+
+ expect(nearest).toEqual({ left: null, right: null });
+ });
+
+ it('should return empty nearest nodes for missing folder id', async () => {
+ const nearest = await component.getNearestNodes('node1', null);
+
+ expect(nearest).toEqual({ left: null, right: null });
+ });
+
+ it('should return empty nearest nodes for crashed fields id request', async () => {
+ spyOn(component, 'getFileIds').and.returnValue(Promise.reject('err'));
+
+ const nearest = await component.getNearestNodes('node1', 'folder1');
+
+ expect(nearest).toEqual({ left: null, right: null });
+ });
+
+ it('should return nearest nodes', async () => {
+ spyOn(component, 'getFileIds').and.returnValue(Promise.resolve(
+ [ 'node1', 'node2', 'node3', 'node4', 'node5' ]
+ ));
+
+ let nearest = await component.getNearestNodes('node1', 'folder1');
+ expect(nearest).toEqual({ left: null, right: 'node2' });
+
+ nearest = await component.getNearestNodes('node3', 'folder1');
+ expect(nearest).toEqual({ left: 'node2', right: 'node4' });
+
+ nearest = await component.getNearestNodes('node5', 'folder1');
+ expect(nearest).toEqual({ left: 'node4', right: null });
+ });
+
+ it('should return empty nearest nodes if node is already deleted', async () => {
+ spyOn(component, 'getFileIds').and.returnValue(Promise.resolve(
+ [ 'node1', 'node2', 'node3', 'node4', 'node5' ]
+ ));
+
+ const nearest = await component.getNearestNodes('node9', 'folder1');
+ expect(nearest).toEqual({ left: null, right: null });
+ });
+
+ it('should not display node when id is missing', async () => {
+ spyOn(router, 'navigate').and.stub();
+ spyOn(alfrescoApi.nodesApi, 'getNodeInfo').and.returnValue(
+ Promise.resolve(null)
+ );
+
+ await component.displayNode(null);
+
+ expect(alfrescoApi.nodesApi.getNodeInfo).not.toHaveBeenCalled();
+ expect(router.navigate).not.toHaveBeenCalled();
+ });
+
+ it('should navigate to original location if node not found', async () => {
+ spyOn(router, 'navigate').and.stub();
+ spyOn(alfrescoApi.nodesApi, 'getNodeInfo').and.returnValue(
+ Promise.resolve(null)
+ );
+
+ component.previewLocation = 'personal-files';
+ await component.displayNode('folder1');
+
+ expect(alfrescoApi.nodesApi.getNodeInfo).toHaveBeenCalledWith(
+ 'folder1', { include: [ 'allowableOperations' ] }
+ );
+ expect(router.navigate).toHaveBeenCalledWith(['personal-files', 'folder1']);
+ });
+
+ it('should navigate to original location if node is not a File', async () => {
+ spyOn(router, 'navigate').and.stub();
+ spyOn(alfrescoApi.nodesApi, 'getNodeInfo').and.returnValue(
+ Promise.resolve({
+ isFile: false
+ })
+ );
+
+ component.previewLocation = 'personal-files';
+ await component.displayNode('folder1');
+
+ expect(alfrescoApi.nodesApi.getNodeInfo).toHaveBeenCalledWith(
+ 'folder1', { include: [ 'allowableOperations' ] }
+ );
+ expect(router.navigate).toHaveBeenCalledWith(['personal-files', 'folder1']);
+ });
+
+ it('should navigate to original location in case of Alfresco API errors', async () => {
+ spyOn(router, 'navigate').and.stub();
+ spyOn(alfrescoApi.nodesApi, 'getNodeInfo').and.returnValue(
+ Promise.reject('error')
+ );
+
+ component.previewLocation = 'personal-files';
+ await component.displayNode('folder1');
+
+ expect(alfrescoApi.nodesApi.getNodeInfo).toHaveBeenCalledWith(
+ 'folder1', { include: [ 'allowableOperations' ] }
+ );
+ expect(router.navigate).toHaveBeenCalledWith(['personal-files', 'folder1']);
+ });
+
+ it('should navigate to original location in case of internal errors', async () => {
+ spyOn(router, 'navigate').and.stub();
+ spyOn(alfrescoApi.nodesApi, 'getNodeInfo').and.returnValue(
+ Promise.resolve({
+ isFile: true
+ })
+ );
+ spyOn(component, 'getNearestNodes').and.returnValue(
+ Promise.reject('error')
+ );
+
+ component.previewLocation = 'personal-files';
+ await component.displayNode('folder1');
+
+ expect(alfrescoApi.nodesApi.getNodeInfo).toHaveBeenCalledWith(
+ 'folder1', { include: [ 'allowableOperations' ] }
+ );
+ expect(router.navigate).toHaveBeenCalledWith(['personal-files', 'folder1']);
+ });
+
+ it('should setup node for displaying', async () => {
+ spyOn(router, 'navigate').and.stub();
+ spyOn(component, 'getNearestNodes').and.returnValue({ left: 'node1', right: 'node3' });
+ spyOn(alfrescoApi.nodesApi, 'getNodeInfo').and.returnValue(
+ Promise.resolve({
+ id: 'node2',
+ parentId: 'parent1',
+ isFile: true
+ })
+ );
+
+ await component.displayNode('node2');
+
+ expect(component.previousNodeId).toBe('node1');
+ expect(component.nextNodeId).toBe('node3');
+ expect(component.nodeId).toBe('node2');
+ expect(router.navigate).not.toHaveBeenCalled();
+ });
+
+ it('should fetch and sort file ids for personal-files', async () => {
+ preferences.set('personal-files.sorting.key', 'name');
+ preferences.set('personal-files.sorting.direction', 'desc');
+
+ spyOn(alfrescoApi.nodesApi, 'getNodeChildren').and.returnValue(
+ Promise.resolve({
+ list: {
+ entries: [
+ { entry: { id: 'node1', name: 'node 1' } },
+ { entry: { id: 'node2', name: 'node 2' } }
+ ]
+ }
+ })
+ );
+
+ const ids = await component.getFileIds('personal-files', 'folder1');
+ expect(ids).toEqual(['node2', 'node1']);
+ });
+
+ it('should fetch file ids for personal-files with default sorting for missing key', async () => {
+ preferences.set('personal-files.sorting.key', 'missing');
+ preferences.set('personal-files.sorting.direction', 'desc');
+
+ spyOn(alfrescoApi.nodesApi, 'getNodeChildren').and.returnValue(
+ Promise.resolve({
+ list: {
+ entries: [
+ { entry: { id: 'node1', name: 'node 1' } },
+ { entry: { id: 'node2', name: 'node 2' } }
+ ]
+ }
+ })
+ );
+
+ const ids = await component.getFileIds('personal-files', 'folder1');
+ expect(ids).toEqual(['node1', 'node2']);
+ });
+
+ it('should require folder id to fetch ids for personal-files', async () => {
+ const ids = await component.getFileIds('personal-files', null);
+ expect(ids).toEqual([]);
+ });
+
+ it('should sort file ids for personal-files with [modifiedAt desc]', async () => {
+ spyOn(preferences, 'get').and.returnValue(null);
+
+ spyOn(alfrescoApi.nodesApi, 'getNodeChildren').and.returnValue(
+ Promise.resolve({
+ list: {
+ entries: [
+ { entry: { id: 'node1', name: 'node 1', modifiedAt: 1 } },
+ { entry: { id: 'node2', name: 'node 2', modifiedAt: 2 } }
+ ]
+ }
+ })
+ );
+
+ const ids = await component.getFileIds('personal-files', 'folder1');
+ expect(ids).toEqual(['node2', 'node1']);
+ });
+
+ it('should fetch and sort file ids for libraries', async () => {
+ preferences.set('personal-files.sorting.key', 'name');
+ preferences.set('personal-files.sorting.direction', 'desc');
+
+ spyOn(alfrescoApi.nodesApi, 'getNodeChildren').and.returnValue(
+ Promise.resolve({
+ list: {
+ entries: [
+ { entry: { id: 'node1', name: 'node 1' } },
+ { entry: { id: 'node2', name: 'node 2' } }
+ ]
+ }
+ })
+ );
+
+ const ids = await component.getFileIds('libraries', 'site1');
+ expect(ids).toEqual(['node2', 'node1']);
+ });
+
+ it('should require folder id to fetch ids for libraries', async () => {
+ const ids = await component.getFileIds('libraries', null);
+ expect(ids).toEqual([]);
+ });
+
+ it('should sort file ids for libraries with [modifiedAt desc]', async () => {
+ spyOn(preferences, 'get').and.returnValue(null);
+
+ spyOn(alfrescoApi.nodesApi, 'getNodeChildren').and.returnValue(
+ Promise.resolve({
+ list: {
+ entries: [
+ { entry: { id: 'node1', name: 'node 1', modifiedAt: new Date(1) } },
+ { entry: { id: 'node2', name: 'node 2', modifiedAt: new Date(2) } }
+ ]
+ }
+ })
+ );
+
+ const ids = await component.getFileIds('libraries', 'folder1');
+ expect(ids).toEqual(['node2', 'node1']);
+ });
+
+ it('should fetch and sort ids for favorites', async () => {
+ preferences.set('favorites.sorting.key', 'name');
+ preferences.set('favorites.sorting.direction', 'desc');
+
+ spyOn(alfrescoApi.favoritesApi, 'getFavorites').and.returnValue(
+ Promise.resolve({
+ list: {
+ entries: [
+ { entry: { target: { file: { id: 'file3', name: 'file 3' } } } },
+ { entry: { target: { file: { id: 'file1', name: 'file 1' } } } },
+ { entry: { target: { file: { id: 'file2', name: 'file 2' } } } }
+ ]
+ }
+ })
+ );
+
+ const ids = await component.getFileIds('favorites');
+ expect(ids).toEqual(['file3', 'file2', 'file1']);
+ });
+
+ it('should sort file ids for favorites with [modifiedAt desc]', async () => {
+ spyOn(preferences, 'get').and.returnValue(null);
+
+ spyOn(alfrescoApi.favoritesApi, 'getFavorites').and.returnValue(
+ Promise.resolve({
+ list: {
+ entries: [
+ { entry: { target: { file: { id: 'file3', modifiedAt: new Date(3) } } } },
+ { entry: { target: { file: { id: 'file1', modifiedAt: new Date(1) } } } },
+ { entry: { target: { file: { id: 'file2', modifiedAt: new Date(2) } } } }
+ ]
+ }
+ })
+ );
+
+ const ids = await component.getFileIds('favorites');
+ expect(ids).toEqual(['file3', 'file2', 'file1']);
+ });
+
+ it('should fetch and sort file ids for shared files', async () => {
+ preferences.set('shared.sorting.key', 'name');
+ preferences.set('shared.sorting.direction', 'asc');
+
+ spyOn(alfrescoApi.sharedLinksApi, 'findSharedLinks').and.returnValue(
+ Promise.resolve({
+ list: {
+ entries: [
+ { entry: { nodeId: 'node2', name: 'node 2', modifiedAt: new Date(2) } },
+ { entry: { nodeId: 'node1', name: 'node 1', modifiedAt: new Date(1) } }
+ ]
+ }
+ })
+ );
+
+ const ids = await component.getFileIds('shared');
+ expect(ids).toEqual(['node1', 'node2']);
+ });
+
+ it('should sort file ids for favorites with [modifiedAt desc]', async () => {
+ spyOn(preferences, 'get').and.returnValue(null);
+
+ spyOn(alfrescoApi.sharedLinksApi, 'findSharedLinks').and.returnValue(
+ Promise.resolve({
+ list: {
+ entries: [
+ { entry: { nodeId: 'node2', name: 'node 2', modifiedAt: new Date(2) } },
+ { entry: { nodeId: 'node1', name: 'node 1', modifiedAt: new Date(1) } }
+ ]
+ }
+ })
+ );
+
+ const ids = await component.getFileIds('shared');
+ expect(ids).toEqual(['node2', 'node1']);
+ });
+
+ it('should fetch and sort ids for recent-files', async () => {
+ preferences.set('recent-files.sorting.key', 'name');
+ preferences.set('recent-files.sorting.direction', 'asc');
+
+ spyOn(alfrescoApi.peopleApi, 'getPerson').and.returnValue(
+ Promise.resolve({
+ entry: { id: 'user' }
+ })
+ );
+
+ spyOn(alfrescoApi.searchApi, 'search').and.returnValue(
+ Promise.resolve({
+ list: {
+ entries: [
+ { entry: { id: 'node2', name: 'node 2', modifiedAt: new Date(2) } },
+ { entry: { id: 'node1', name: 'node 1', modifiedAt: new Date(1) } }
+ ]
+ }
+ })
+ );
+
+ const ids = await component.getFileIds('recent-files');
+ expect(ids).toEqual(['node1', 'node2']);
+ });
+
+ it('should sort file ids for favorites with [modifiedAt desc]', async () => {
+ spyOn(preferences, 'get').and.returnValue(null);
+
+ spyOn(alfrescoApi.peopleApi, 'getPerson').and.returnValue(
+ Promise.resolve({
+ entry: { id: 'user' }
+ })
+ );
+
+ spyOn(alfrescoApi.searchApi, 'search').and.returnValue(
+ Promise.resolve({
+ list: {
+ entries: [
+ { entry: { id: 'node2', name: 'node 2', modifiedAt: new Date(2) } },
+ { entry: { id: 'node1', name: 'node 1', modifiedAt: new Date(1) } }
+ ]
+ }
+ })
+ );
+
+ const ids = await component.getFileIds('recent-files');
+ expect(ids).toEqual(['node2', 'node1']);
+ });
+});
diff --git a/src/app/components/preview/preview.component.ts b/src/app/components/preview/preview.component.ts
index 99d92bfe9..6b896f140 100644
--- a/src/app/components/preview/preview.component.ts
+++ b/src/app/components/preview/preview.component.ts
@@ -2,7 +2,7 @@
* @license
* Alfresco Example Content Application
*
- * Copyright (C) 2005 - 2017 Alfresco Software Limited
+ * Copyright (C) 2005 - 2018 Alfresco Software Limited
*
* This file is part of the Alfresco Example Content Application.
* If the software was purchased under a paid Alfresco license, the terms of
@@ -25,7 +25,9 @@
import { Component, OnInit, ViewEncapsulation } from '@angular/core';
import { ActivatedRoute, Router } from '@angular/router';
-import { AlfrescoApiService } from '@alfresco/adf-core';
+import { AlfrescoApiService, UserPreferencesService, ObjectUtils } from '@alfresco/adf-core';
+import { Node, MinimalNodeEntity } from 'alfresco-js-api';
+import { ContentManagementService } from '../../common/services/content-management.service';
@Component({
selector: 'app-preview',
@@ -37,29 +39,308 @@ import { AlfrescoApiService } from '@alfresco/adf-core';
})
export class PreviewComponent implements OnInit {
- nodeId: string = null;
+ node: Node;
+ previewLocation: string = null;
+ routesSkipNavigation = [ 'shared', 'recent-files', 'favorites' ];
+ navigateSource: string = null;
+ navigationSources = ['favorites', 'libraries', 'personal-files', 'recent-files', 'shared'];
- constructor(
- private router: Router,
- private route: ActivatedRoute,
- private apiService: AlfrescoApiService) {}
+ folderId: string = null;
+ nodeId: string = null;
+ previousNodeId: string;
+ nextNodeId: string;
+ navigateMultiple = false;
+
+ selectedEntities: MinimalNodeEntity[] = [];
+
+ constructor(private router: Router,
+ private route: ActivatedRoute,
+ private apiService: AlfrescoApiService,
+ private preferences: UserPreferencesService,
+ private content: ContentManagementService) {
+ }
ngOnInit() {
+ this.previewLocation = this.router.url
+ .substr(0, this.router.url.indexOf('/', 1))
+ .replace(/\//g, '');
+
+ const routeData = this.route.snapshot.data;
+
+ if (routeData.navigateMultiple) {
+ this.navigateMultiple = true;
+ }
+
+ if (routeData.navigateSource) {
+ const source = routeData.navigateSource.toLowerCase();
+ if (this.navigationSources.includes(source)) {
+ this.navigateSource = routeData.navigateSource;
+ }
+ }
+
this.route.params.subscribe(params => {
+ this.folderId = params.folderId;
const id = params.nodeId;
if (id) {
- this.apiService.getInstance().nodes.getNodeInfo(id).then(
- (node) => {
- if (node && node.isFile) {
- this.nodeId = id;
- return;
- }
- this.router.navigate(['/personal-files', id]);
- },
- () => this.router.navigate(['/personal-files', id])
- );
+ this.displayNode(id);
}
});
}
+ /**
+ * Loads the particular node into the Viewer
+ * @param id Unique identifier for the Node to display
+ */
+ async displayNode(id: string) {
+ if (id) {
+ try {
+ this.node = await this.apiService.nodesApi.getNodeInfo(id, {
+ include: ['allowableOperations']
+ });
+ this.selectedEntities = [{ entry: this.node }];
+
+ if (this.node && this.node.isFile) {
+ const nearest = await this.getNearestNodes(this.node.id, this.node.parentId);
+
+ this.previousNodeId = nearest.left;
+ this.nextNodeId = nearest.right;
+ this.nodeId = this.node.id;
+ return;
+ }
+ this.router.navigate([this.previewLocation, id]);
+ } catch {
+ this.router.navigate([this.previewLocation, id]);
+ }
+ }
+ }
+
+ /**
+ * Handles the visibility change of the Viewer component.
+ * @param isVisible Indicator whether Viewer is visible or hidden.
+ */
+ onVisibilityChanged(isVisible: boolean): void {
+ const shouldSkipNavigation = this.routesSkipNavigation.includes(this.previewLocation);
+
+ if (!isVisible) {
+ const route = [this.previewLocation];
+
+ if ( !shouldSkipNavigation && this.folderId ) {
+ route.push(this.folderId);
+ }
+
+ this.router.navigate(route);
+ }
+ }
+
+ /** Handles navigation to a previous document */
+ onNavigateBefore(): void {
+ if (this.previousNodeId) {
+ this.router.navigate(
+ this.getPreviewPath(this.folderId, this.previousNodeId)
+ );
+ }
+ }
+
+ /** Handles navigation to a next document */
+ onNavigateNext(): void {
+ if (this.nextNodeId) {
+ this.router.navigate(
+ this.getPreviewPath(this.folderId, this.nextNodeId)
+ );
+ }
+ }
+
+ /**
+ * Generates a node preview route based on folder and node IDs.
+ * @param folderId Folder ID
+ * @param nodeId Node ID
+ */
+ getPreviewPath(folderId: string, nodeId: string): any[] {
+ const route = [this.previewLocation];
+
+ if (folderId) {
+ route.push(folderId);
+ }
+
+ if (nodeId) {
+ route.push('preview', nodeId);
+ }
+
+ return route;
+ }
+
+
+ /**
+ * Retrieves nearest node information for the given node and folder.
+ * @param nodeId Unique identifier of the document node
+ * @param folderId Unique identifier of the containing folder node.
+ */
+ async getNearestNodes(nodeId: string, folderId: string): Promise<{ left: string, right: string }> {
+ const empty = {
+ left: null,
+ right: null
+ };
+
+ if (nodeId && folderId) {
+ try {
+ const ids = await this.getFileIds(this.navigateSource, folderId);
+ const idx = ids.indexOf(nodeId);
+
+ if (idx >= 0) {
+ return {
+ left: ids[idx - 1] || null,
+ right: ids[idx + 1] || null
+ };
+ } else {
+ return empty;
+ }
+ } catch {
+ return empty;
+ }
+ } else {
+ return empty;
+ }
+ }
+
+ /**
+ * Retrieves a list of node identifiers for the folder and data source.
+ * @param source Data source name. Allowed values are: personal-files, libraries, favorites, shared, recent-files.
+ * @param folderId Containing folder node identifier for 'personal-files' and 'libraries' sources.
+ */
+ async getFileIds(source: string, folderId?: string): Promise {
+ if ((source === 'personal-files' || source === 'libraries') && folderId) {
+ const sortKey = this.preferences.get('personal-files.sorting.key') || 'modifiedAt';
+ const sortDirection = this.preferences.get('personal-files.sorting.direction') || 'desc';
+ const nodes = await this.apiService.nodesApi.getNodeChildren(folderId, {
+ // orderBy: `${sortKey} ${sortDirection}`,
+ fields: ['id', this.getRootField(sortKey)],
+ where: '(isFile=true)'
+ });
+
+ const entries = nodes.list.entries.map(obj => obj.entry);
+ this.sort(entries, sortKey, sortDirection);
+
+ return entries.map(obj => obj.id);
+ }
+
+ if (source === 'favorites') {
+ const nodes = await this.apiService.favoritesApi.getFavorites('-me-', {
+ where: '(EXISTS(target/file))',
+ fields: ['target']
+ });
+
+ const sortKey = this.preferences.get('favorites.sorting.key') || 'modifiedAt';
+ const sortDirection = this.preferences.get('favorites.sorting.direction') || 'desc';
+ const files = nodes.list.entries.map(obj => obj.entry.target.file);
+ this.sort(files, sortKey, sortDirection);
+
+ return files.map(f => f.id);
+ }
+
+ if (source === 'shared') {
+ const sortingKey = this.preferences.get('shared.sorting.key') || 'modifiedAt';
+ const sortingDirection = this.preferences.get('shared.sorting.direction') || 'desc';
+
+ const nodes = await this.apiService.sharedLinksApi.findSharedLinks({
+ fields: ['nodeId', this.getRootField(sortingKey)]
+ });
+
+ const entries = nodes.list.entries.map(obj => obj.entry);
+ this.sort(entries, sortingKey, sortingDirection);
+
+ return entries.map(obj => obj.nodeId);
+ }
+
+ if (source === 'recent-files') {
+ const person = await this.apiService.peopleApi.getPerson('-me-');
+ const username = person.entry.id;
+ const sortingKey = this.preferences.get('recent-files.sorting.key') || 'modifiedAt';
+ const sortingDirection = this.preferences.get('recent-files.sorting.direction') || 'desc';
+
+ const nodes = await this.apiService.searchApi.search({
+ query: {
+ query: '*',
+ language: 'afts'
+ },
+ filterQueries: [
+ { query: `cm:modified:[NOW/DAY-30DAYS TO NOW/DAY+1DAY]` },
+ { query: `cm:modifier:${username} OR cm:creator:${username}` },
+ { query: `TYPE:"content" AND -TYPE:"app:filelink" AND -TYPE:"fm:post"` }
+ ],
+ fields: ['id', this.getRootField(sortingKey)],
+ sort: [{
+ type: 'FIELD',
+ field: 'cm:modified',
+ ascending: false
+ }]
+ });
+
+ const entries = nodes.list.entries.map(obj => obj.entry);
+ this.sort(entries, sortingKey, sortingDirection);
+
+ return entries.map(obj => obj.id);
+ }
+
+ return [];
+ }
+
+ private sort(items: any[], key: string, direction: string) {
+ const options: Intl.CollatorOptions = {};
+
+ if (key.includes('sizeInBytes') || key === 'name') {
+ options.numeric = true;
+ }
+
+ items.sort((a: any, b: any) => {
+ let left = ObjectUtils.getValue(a, key);
+ if (left) {
+ left = (left instanceof Date) ? left.valueOf().toString() : left.toString();
+ } else {
+ left = '';
+ }
+
+ let right = ObjectUtils.getValue(b, key);
+ if (right) {
+ right = (right instanceof Date) ? right.valueOf().toString() : right.toString();
+ } else {
+ right = '';
+ }
+
+ return direction === 'asc'
+ ? left.localeCompare(right, undefined, options)
+ : right.localeCompare(left, undefined, options);
+ });
+ }
+
+ /**
+ * Get the root field name from the property path.
+ * Example: 'property1.some.child.property' => 'property1'
+ * @param path Property path
+ */
+ getRootField(path: string) {
+ if (path) {
+ return path.split('.')[0];
+ }
+ return path;
+ }
+
+ canDeleteFile(): boolean {
+ return this.content.canDeleteNode(this.node);
+ }
+
+ async deleteFile() {
+ try {
+ await this.content.deleteNode(this.node);
+ this.onVisibilityChanged(false);
+ } catch {
+ }
+ }
+
+ canMoveFile(): boolean {
+ return this.content.canMoveNode(this.node);
+ }
+
+ canCopyFile(): boolean {
+ return this.content.canCopyNode(this.node);
+ }
}
diff --git a/src/app/components/recent-files/recent-files.component.html b/src/app/components/recent-files/recent-files.component.html
index 185a49732..98c1bd5ef 100644
--- a/src/app/components/recent-files/recent-files.component.html
+++ b/src/app/components/recent-files/recent-files.component.html
@@ -17,7 +17,7 @@
mat-icon-button
*ngIf="hasSelection(documentList.selection)"
title="{{ 'APP.ACTIONS.DOWNLOAD' | translate }}"
- [app-download-node]="documentList.selection">
+ [adfNodeDownload]="documentList.selection">
get_app
@@ -74,20 +74,21 @@
currentFolderId="-recent-"
selectionMode="multiple"
[navigate]="false"
- [sorting]="[ 'modifiedAt', 'desc' ]"
+ [sorting]="sorting"
[contextMenuActions]="true"
[contentActions]="false"
[imageResolver]="imageResolver"
+ (sorting-changed)="onSortingChanged($event)"
(node-dblclick)="onNodeDoubleClick($event.detail?.node?.entry)"
(node-select)="onNodeSelect($event, documentList)">
-
-
access_time
-
{{ 'APP.BROWSE.RECENT.EMPTY_STATE.TITLE' | translate }}
-
{{ 'APP.BROWSE.RECENT.EMPTY_STATE.TEXT' | translate }}
-
+
+
diff --git a/src/app/components/recent-files/recent-files.component.spec.ts b/src/app/components/recent-files/recent-files.component.spec.ts
index 890c5a6f9..b83f1121f 100644
--- a/src/app/components/recent-files/recent-files.component.spec.ts
+++ b/src/app/components/recent-files/recent-files.component.spec.ts
@@ -2,7 +2,7 @@
* @license
* Alfresco Example Content Application
*
- * Copyright (C) 2005 - 2017 Alfresco Software Limited
+ * Copyright (C) 2005 - 2018 Alfresco Software Limited
*
* This file is part of the Alfresco Example Content Application.
* If the software was purchased under a paid Alfresco license, the terms of
@@ -23,16 +23,25 @@
* along with Alfresco. If not, see .
*/
-import { Router } from '@angular/router';
-import { RouterTestingModule } from '@angular/router/testing';
import { TestBed, async } from '@angular/core/testing';
-import { Observable } from 'rxjs/Rx';
-
-import { CoreModule, AlfrescoApiService } from '@alfresco/adf-core';
-
-import { CommonModule } from '../../common/common.module';
+import { NO_ERRORS_SCHEMA } from '@angular/core';
+import { Router, ActivatedRoute } from '@angular/router';
+import { RouterTestingModule } from '@angular/router/testing';
+import { HttpClientModule } from '@angular/common/http';
+import {
+ NotificationService, TranslationService, TranslationMock,
+ NodesApiService, AlfrescoApiService, ContentService,
+ UserPreferencesService, LogService, AppConfigService,
+ StorageService, CookieService, ThumbnailService, AuthenticationService,
+ TimeAgoPipe, NodeNameTooltipPipe, NodeFavoriteDirective, DataTableComponent
+} from '@alfresco/adf-core';
+import { DocumentListComponent } from '@alfresco/adf-content-services';
+import { TranslateModule } from '@ngx-translate/core';
+import { NoopAnimationsModule } from '@angular/platform-browser/animations';
+import { MatMenuModule, MatSnackBarModule, MatIconModule } from '@angular/material';
+import { DocumentListService } from '@alfresco/adf-content-services';
import { ContentManagementService } from '../../common/services/content-management.service';
-import { LocationLinkComponent } from '../location-link/location-link.component';
+
import { RecentFilesComponent } from './recent-files.component';
describe('RecentFiles Routed Component', () => {
@@ -41,6 +50,7 @@ describe('RecentFiles Routed Component', () => {
let router: Router;
let alfrescoApi: AlfrescoApiService;
let contentService: ContentManagementService;
+ let preferenceService: UserPreferencesService;
let page;
let person;
@@ -58,14 +68,39 @@ describe('RecentFiles Routed Component', () => {
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [
- CoreModule,
+ MatMenuModule,
+ NoopAnimationsModule,
+ HttpClientModule,
+ TranslateModule.forRoot(),
RouterTestingModule,
- CommonModule
+ MatSnackBarModule, MatIconModule
],
declarations: [
- LocationLinkComponent,
+ DataTableComponent,
+ TimeAgoPipe,
+ NodeNameTooltipPipe,
+ NodeFavoriteDirective,
+ DocumentListComponent,
RecentFilesComponent
- ]
+ ],
+ providers: [
+ { provide: ActivatedRoute, useValue: {
+ snapshot: { data: { preferencePrefix: 'prefix' } }
+ } } ,
+ { provide: TranslationService, useClass: TranslationMock },
+ AuthenticationService,
+ UserPreferencesService,
+ AppConfigService, StorageService, CookieService,
+ AlfrescoApiService,
+ LogService,
+ NotificationService,
+ ContentManagementService,
+ ContentService,
+ NodesApiService,
+ DocumentListService,
+ ThumbnailService
+ ],
+ schemas: [ NO_ERRORS_SCHEMA ]
})
.compileComponents().then(() => {
fixture = TestBed.createComponent(RecentFilesComponent);
@@ -73,6 +108,7 @@ describe('RecentFiles Routed Component', () => {
router = TestBed.get(Router);
contentService = TestBed.get(ContentManagementService);
+ preferenceService = TestBed.get(UserPreferencesService);
alfrescoApi = TestBed.get(AlfrescoApiService);
});
}));
@@ -93,7 +129,7 @@ describe('RecentFiles Routed Component', () => {
it('should reload nodes on onDeleteNode event', () => {
fixture.detectChanges();
- contentService.deleteNode.next();
+ contentService.nodeDeleted.next();
expect(component.refresh).toHaveBeenCalled();
});
@@ -101,7 +137,7 @@ describe('RecentFiles Routed Component', () => {
it('should reload on onRestoreNode event', () => {
fixture.detectChanges();
- contentService.restoreNode.next();
+ contentService.nodeRestored.next();
expect(component.refresh).toHaveBeenCalled();
});
@@ -109,7 +145,7 @@ describe('RecentFiles Routed Component', () => {
it('should reload on move node event', () => {
fixture.detectChanges();
- contentService.moveNode.next();
+ contentService.nodeMoved.next();
expect(component.refresh).toHaveBeenCalled();
});
@@ -122,12 +158,12 @@ describe('RecentFiles Routed Component', () => {
it('open preview if node is file', () => {
spyOn(router, 'navigate').and.stub();
- const node: any = { isFile: true };
+ const node: any = { id: 'node-id', isFile: true };
component.onNodeDoubleClick(node);
fixture.detectChanges();
- expect(router.navigate).toHaveBeenCalledWith(['/preview', node.id]);
+ expect(router.navigate['calls'].argsFor(0)[0]).toEqual(['./preview', node.id]);
});
it('does not open preview if node is folder', () => {
@@ -151,4 +187,35 @@ describe('RecentFiles Routed Component', () => {
expect(component.documentList.reload).toHaveBeenCalled();
});
});
+
+ describe('onSortingChanged', () => {
+ it('should save sorting input', () => {
+ spyOn(preferenceService, 'set');
+
+ const event = {
+ detail: {
+ key: 'some-name',
+ direction: 'some-direction'
+ }
+ };
+
+ component.onSortingChanged(event);
+
+ expect(preferenceService.set).toHaveBeenCalledWith('prefix.sorting.key', 'some-name');
+ expect(preferenceService.set).toHaveBeenCalledWith('prefix.sorting.direction', 'some-direction');
+ });
+
+ it('should save default sorting when no input', () => {
+ spyOn(preferenceService, 'set');
+
+ const event = {
+ detail: {}
+ };
+
+ component.onSortingChanged(event);
+
+ expect(preferenceService.set).toHaveBeenCalledWith('prefix.sorting.key', 'modifiedAt');
+ expect(preferenceService.set).toHaveBeenCalledWith('prefix.sorting.direction', 'desc');
+ });
+ });
});
diff --git a/src/app/components/recent-files/recent-files.component.ts b/src/app/components/recent-files/recent-files.component.ts
index 1e2617b36..a62b3e4f2 100644
--- a/src/app/components/recent-files/recent-files.component.ts
+++ b/src/app/components/recent-files/recent-files.component.ts
@@ -2,7 +2,7 @@
* @license
* Alfresco Example Content Application
*
- * Copyright (C) 2005 - 2017 Alfresco Software Limited
+ * Copyright (C) 2005 - 2018 Alfresco Software Limited
*
* This file is part of the Alfresco Example Content Application.
* If the software was purchased under a paid Alfresco license, the terms of
@@ -25,7 +25,7 @@
import { Subscription } from 'rxjs/Rx';
import { Component, ViewChild, OnInit, OnDestroy } from '@angular/core';
-import { Router } from '@angular/router';
+import { Router, ActivatedRoute } from '@angular/router';
import { MinimalNodeEntryEntity } from 'alfresco-js-api';
import { UserPreferencesService } from '@alfresco/adf-core';
import { DocumentListComponent } from '@alfresco/adf-content-services';
@@ -43,18 +43,26 @@ export class RecentFilesComponent extends PageComponent implements OnInit, OnDes
private subscriptions: Subscription[] = [];
+ sorting = [ 'modifiedAt', 'desc' ];
+
constructor(
private router: Router,
+ private route: ActivatedRoute,
private content: ContentManagementService,
preferences: UserPreferencesService) {
super(preferences);
+
+ const sortingKey = preferences.get(`${this.prefix}.sorting.key`) || 'modifiedAt';
+ const sortingDirection = preferences.get(`${this.prefix}.sorting.direction`) || 'desc';
+
+ this.sorting = [sortingKey, sortingDirection];
}
ngOnInit() {
this.subscriptions = this.subscriptions.concat([
- this.content.deleteNode.subscribe(() => this.refresh()),
- this.content.moveNode.subscribe(() => this.refresh()),
- this.content.restoreNode.subscribe(() => this.refresh())
+ this.content.nodeDeleted.subscribe(() => this.refresh()),
+ this.content.nodeMoved.subscribe(() => this.refresh()),
+ this.content.nodeRestored.subscribe(() => this.refresh())
]);
}
@@ -67,7 +75,7 @@ export class RecentFilesComponent extends PageComponent implements OnInit, OnDes
event.preventDefault();
} else if (node && node.isFile) {
- this.router.navigate(['/preview', node.id]);
+ this.router.navigate(['./preview', node.id], { relativeTo: this.route });
}
}
@@ -80,4 +88,13 @@ export class RecentFilesComponent extends PageComponent implements OnInit, OnDes
this.documentList.reload();
}
}
+
+ onSortingChanged(event: CustomEvent) {
+ this.preferences.set(`${this.prefix}.sorting.key`, event.detail.key || 'modifiedAt');
+ this.preferences.set(`${this.prefix}.sorting.direction`, event.detail.direction || 'desc');
+ }
+
+ private get prefix() {
+ return this.route.snapshot.data.preferencePrefix;
+ }
}
diff --git a/src/app/components/search/search.component.spec.ts b/src/app/components/search/search.component.spec.ts
index 946c4d268..646e8b760 100644
--- a/src/app/components/search/search.component.spec.ts
+++ b/src/app/components/search/search.component.spec.ts
@@ -2,7 +2,7 @@
* @license
* Alfresco Example Content Application
*
- * Copyright (C) 2005 - 2017 Alfresco Software Limited
+ * Copyright (C) 2005 - 2018 Alfresco Software Limited
*
* This file is part of the Alfresco Example Content Application.
* If the software was purchased under a paid Alfresco license, the terms of
@@ -23,13 +23,12 @@
* along with Alfresco. If not, see .
*/
+import { NO_ERRORS_SCHEMA } from '@angular/core';
import { TestBed, async } from '@angular/core/testing';
-import { CoreModule, AppConfigService } from '@alfresco/adf-core';
import { Router } from '@angular/router';
import { RouterTestingModule } from '@angular/router/testing';
import { SearchComponent } from './search.component';
-import { CommonModule } from './../../common/common.module';
describe('SearchComponent', () => {
let fixture;
@@ -39,13 +38,12 @@ describe('SearchComponent', () => {
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [
- CoreModule,
- RouterTestingModule,
- CommonModule
+ RouterTestingModule
],
declarations: [
SearchComponent
- ]
+ ],
+ schemas: [ NO_ERRORS_SCHEMA ]
})
.compileComponents()
.then(() => {
@@ -60,11 +58,12 @@ describe('SearchComponent', () => {
describe('onItemClicked()', () => {
it('opens preview if node is file', () => {
spyOn(router, 'navigate').and.stub();
- const node = { entry: { isFile: true, id: 'node-id' } };
+ const node = { entry: { isFile: true, id: 'node-id', parentId: 'parent-id' } };
component.onItemClicked(node);
- expect(router.navigate).toHaveBeenCalledWith(['/preview', node.entry.id]);
+ expect(router.navigate['calls'].argsFor(0)[0])
+ .toEqual([`/personal-files/${node.entry.parentId}/preview/`, node.entry.id]);
});
it('navigates if node is folder', () => {
diff --git a/src/app/components/search/search.component.ts b/src/app/components/search/search.component.ts
index e4f14405e..99105cef8 100644
--- a/src/app/components/search/search.component.ts
+++ b/src/app/components/search/search.component.ts
@@ -2,7 +2,7 @@
* @license
* Alfresco Example Content Application
*
- * Copyright (C) 2005 - 2017 Alfresco Software Limited
+ * Copyright (C) 2005 - 2018 Alfresco Software Limited
*
* This file is part of the Alfresco Example Content Application.
* If the software was purchased under a paid Alfresco license, the terms of
@@ -41,7 +41,7 @@ export class SearchComponent {
onItemClicked(node: MinimalNodeEntity) {
if (node && node.entry) {
if (node.entry.isFile) {
- this.router.navigate(['/preview', node.entry.id]);
+ this.router.navigate([`/personal-files/${node.entry.parentId}/preview/`, node.entry.id]);
} else if (node.entry.isFolder) {
this.router.navigate([ '/personal-files', node.entry.id ]);
}
diff --git a/src/app/components/shared-files/shared-files.component.html b/src/app/components/shared-files/shared-files.component.html
index 2cfc02f49..73b88c32b 100644
--- a/src/app/components/shared-files/shared-files.component.html
+++ b/src/app/components/shared-files/shared-files.component.html
@@ -17,7 +17,7 @@
mat-icon-button
*ngIf="hasSelection(documentList.selection)"
title="{{ 'APP.ACTIONS.DOWNLOAD' | translate }}"
- [app-download-node]="documentList.selection">
+ [adfNodeDownload]="documentList.selection">
get_app
@@ -50,7 +50,7 @@