diff --git a/.env b/.env new file mode 100644 index 000000000..abfd8c55f --- /dev/null +++ b/.env @@ -0,0 +1,6 @@ +TAG=6.2.1 +ENV=dev +PROFILE=production +AOT=no-aot +ELASTIC_VERSION=6.2.1 +ELASTIC_PASSWORD=changeme diff --git a/.gitignore b/.gitignore index 58da5a13e..a064ebc2a 100644 --- a/.gitignore +++ b/.gitignore @@ -19,8 +19,9 @@ dmp-backend/src/main/ui-resources/static/favicon.ico dmp-backend/src/main/ui-resources/static/assets/lang/en.json dmp-frontend/new 3.xml dmp-backend/src/main/ui-resources/static/ -dmp-backend/data/target/ dmp-backend/web/target/ -dmp-backend/queryable/target/ -dmp-backend/logging/target/ +*.class dmp-backend/web/src/main/ui-resources/static/ +dmp-backend/data/target/data-1.0-SNAPSHOT.jar +dmp-backend/data/target/ +dmp-backend/queryable/target/ diff --git a/ELK.Docker/.env b/ELK.Docker/.env new file mode 100644 index 000000000..fcb78b08a --- /dev/null +++ b/ELK.Docker/.env @@ -0,0 +1,3 @@ +TAG=6.2.1 +ELASTIC_VERSION=6.2.1 +ELASTIC_PASSWORD=changeme diff --git a/ELK.Docker/.gitignore b/ELK.Docker/.gitignore new file mode 100644 index 000000000..0defb5cce --- /dev/null +++ b/ELK.Docker/.gitignore @@ -0,0 +1 @@ +**/*~ diff --git a/ELK.Docker/.travis.yml b/ELK.Docker/.travis.yml new file mode 100644 index 000000000..d4d074a6a --- /dev/null +++ b/ELK.Docker/.travis.yml @@ -0,0 +1,7 @@ +--- +language: python +python: ['3.5'] +script: make + +sudo: required +services: ['docker'] diff --git a/ELK.Docker/LICENSE b/ELK.Docker/LICENSE new file mode 100644 index 000000000..8dada3eda --- /dev/null +++ b/ELK.Docker/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright {yyyy} {name of copyright owner} + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/ELK.Docker/Makefile b/ELK.Docker/Makefile new file mode 100644 index 000000000..ddd402945 --- /dev/null +++ b/ELK.Docker/Makefile @@ -0,0 +1,30 @@ +SHELL=/bin/bash + +ifndef ELASTIC_VERSION +ELASTIC_VERSION := $(shell awk 'BEGIN { FS = "[= ]" } /^ELASTIC_VERSION=/ { print $$2 }' .env) +endif +export ELASTIC_VERSION + +ifndef GIT_BRANCH +GIT_BRANCH := $(shell git rev-parse --abbrev-ref HEAD) +endif + +TARGETS := apm-server elasticsearch logstash kibana beats + +images: $(TARGETS) +push: $(TARGETS:%=%-push) +clean: $(TARGETS:%=%-clean) + +$(TARGETS): $(TARGETS:%=%-checkout) + (cd stack/$@ && make) + +$(TARGETS:%=%-push): $(TARGETS:%=%-checkout) + (cd stack/$(@:%-push=%) && make push) + +$(TARGETS:%=%-checkout): + test -d stack/$(@:%-checkout=%) || \ + git clone https://github.com/elastic/$(@:%-checkout=%)-docker.git stack/$(@:%-checkout=%) + (cd stack/$(@:%-checkout=%) && git fetch && git reset --hard && git checkout origin/$(GIT_BRANCH)) + +$(TARGETS:%=%-clean): + rm -rf stack/$(@:%-clean=%) diff --git a/ELK.Docker/README.md b/ELK.Docker/README.md new file mode 100644 index 000000000..852cce303 --- /dev/null +++ b/ELK.Docker/README.md @@ -0,0 +1,25 @@ +# stack-docker +This example Docker Compose configuration demonstrates many components of the +Elastic Stack, all running on a single machine under Docker. + +## Prerequisites +- Docker and Compose. Windows and Mac users get Compose installed automatically +with Docker. Linux users can: +``` +pip install docker-compose +``` + +- At least 4GiB of RAM for the containers. Windows and Mac users _must_ +configure their Docker virtual machine to have more than the default 2 GiB of +RAM: + +![Docker VM memory settings](screenshots/docker-vm-memory-settings.png) + +## Starting the stack +Try `docker-compose up` to create a demonstration Elastic Stack with +Elasticsearch, Kibana, Logstash, Auditbeat, Metricbeat, Filebeat, Packetbeat, +and Heartbeat. + +Point a browser at [`http://localhost:5601`](http://localhost:5601) to see the results. + +Log in with `elastic` / `changeme`. diff --git a/ELK.Docker/config/logstash.conf b/ELK.Docker/config/logstash.conf new file mode 100644 index 000000000..77091ee3b --- /dev/null +++ b/ELK.Docker/config/logstash.conf @@ -0,0 +1,28 @@ +input { + http { + port => 31311 # default: 8080 + } +} + +filter { + grok{ + match => { "message" => "%{GREEDYDATA:request}"} + } + json{ + source => "request" + target => "parsed" + } + split{ + field=>"entries" + } + +} + +output { + elasticsearch { + hosts => [ 'elasticsearch' ] + user => 'elastic' + password => 'changeme' + index => "data-management-plan-%{[entries][indexType]}-%{+YYYY.MM.dd}" + } +} diff --git a/ELK.Docker/docker-compose.yml b/ELK.Docker/docker-compose.yml new file mode 100644 index 000000000..28357dce4 --- /dev/null +++ b/ELK.Docker/docker-compose.yml @@ -0,0 +1,106 @@ +--- +version: '3' +services: + # The environment variable "TAG" is used throughout this file to + # specify the version of the images to run. The default is set in the + # '.env' file in this folder. It can be overridden with any normal + # technique for setting environment variables, for example: + # + # TAG=6.0.0-beta1 docker-compose up + # + # REF: https://docs.docker.com/compose/compose-file/#variable-substitution + # + # Also be sure to set the ELASTIC_VERSION variable. For released versions, + # ${TAG} and ${ELASTIC_VERSION} will be identical, but for pre-release + # versions, ${TAG} might contain an extra build identifier, like + # "6.0.0-beta1-3eab5b40", so a full invocation might look like: + # + # ELASTIC_VERSION=6.0.0-beta1 TAG=6.0.0-beta1-3eab5b40 docker-compose up + # + elasticsearch: + image: docker.elastic.co/elasticsearch/elasticsearch:${TAG} + container_name: elasticsearch + #volumes: + # - esdata:/usr/share/elasticsearch/data + environment: ['http.host=0.0.0.0', 'transport.host=127.0.0.1', 'ELASTIC_PASSWORD=${ELASTIC_PASSWORD}'] + ports: ['0.0.0.0:9200:9200'] + networks: ['stack'] + + kibana: + image: docker.elastic.co/kibana/kibana:${TAG} + container_name: kibana + ports: ['0.0.0.0:5601:5601'] + networks: ['stack'] + depends_on: ['elasticsearch'] + + logstash: + image: docker.elastic.co/logstash/logstash:${TAG} + container_name: logstash + # Provide a simple pipeline configuration for Logstash with a bind-mounted file. + volumes: + - ./config/logstash.conf:/usr/share/logstash/pipeline/logstash.conf + ports: ['0.0.0.0:31311:31311'] + + networks: ['stack'] + depends_on: ['elasticsearch', 'setup_logstash'] + + filebeat: + image: docker.elastic.co/beats/filebeat:${TAG} + container_name: filebeat + command: -e -E 'output.elasticsearch.password=${ELASTIC_PASSWORD}' + # If the host system has logs at "/var/log", mount them at "/mnt/log" + # inside the container, where Filebeat can find them. + # volumes: ['/var/log:/mnt/log:ro'] + networks: ['stack'] + depends_on: ['elasticsearch', 'setup_filebeat'] + + heartbeat: + image: docker.elastic.co/beats/heartbeat:${TAG} + container_name: heartbeat + command: -e -E 'output.elasticsearch.password=${ELASTIC_PASSWORD}' + networks: ['stack'] + depends_on: ['elasticsearch', 'setup_heartbeat'] + + # Run a short-lived container to set up Logstash. + setup_logstash: + image: centos:7 + container_name: setup_logstash + volumes: ['./scripts/setup-logstash.sh:/usr/local/bin/setup-logstash.sh:ro'] + # The script may have CR/LF line endings if using Docker for Windows, so + # make sure that they don't confuse Bash. + command: ['/bin/bash', '-c', 'cat /usr/local/bin/setup-logstash.sh | tr -d "\r" | bash'] + environment: ['ELASTIC_PASSWORD=${ELASTIC_PASSWORD}'] + networks: ['stack'] + depends_on: ['elasticsearch'] + + setup_kibana: + image: centos:7 + container_name: setup_kibana + volumes: ['./scripts/setup-kibana.sh:/usr/local/bin/setup-kibana.sh:ro'] + command: ['/bin/bash', '-c', 'cat /usr/local/bin/setup-kibana.sh | tr -d "\r" | bash'] + environment: ['ELASTIC_PASSWORD=${ELASTIC_PASSWORD}'] + networks: ['stack'] + depends_on: ['elasticsearch'] + + setup_filebeat: + image: docker.elastic.co/beats/filebeat:${TAG} + container_name: setup_filebeat + volumes: ['./scripts/setup-beat.sh:/usr/local/bin/setup-beat.sh:ro'] + command: ['/bin/bash', '-c', 'cat /usr/local/bin/setup-beat.sh | tr -d "\r" | bash -s filebeat'] + environment: ['ELASTIC_PASSWORD=${ELASTIC_PASSWORD}'] + networks: ['stack'] + depends_on: ['kibana'] + + setup_heartbeat: + image: docker.elastic.co/beats/heartbeat:${TAG} + container_name: setup_heartbeat + volumes: ['./scripts/setup-beat.sh:/usr/local/bin/setup-beat.sh:ro'] + command: ['/bin/bash', '-c', 'cat /usr/local/bin/setup-beat.sh | tr -d "\r" | bash -s heartbeat'] + environment: ['ELASTIC_PASSWORD=${ELASTIC_PASSWORD}'] + networks: ['stack'] + depends_on: ['kibana'] + +#volumes: + #esdata: + # driver: local +networks: {stack: {}} diff --git a/ELK.Docker/screenshots/docker-vm-memory-settings.png b/ELK.Docker/screenshots/docker-vm-memory-settings.png new file mode 100644 index 000000000..69dd81388 Binary files /dev/null and b/ELK.Docker/screenshots/docker-vm-memory-settings.png differ diff --git a/ELK.Docker/scripts/setup-beat.sh b/ELK.Docker/scripts/setup-beat.sh new file mode 100644 index 000000000..70402d77a --- /dev/null +++ b/ELK.Docker/scripts/setup-beat.sh @@ -0,0 +1,18 @@ +#!/bin/bash + +set -euo pipefail + +beat=$1 + +until curl -s http://kibana:5601; do + sleep 2 +done +sleep 5 + +# Load the sample dashboards for the Beat. +# REF: https://www.elastic.co/guide/en/beats/metricbeat/master/metricbeat-sample-dashboards.html +${beat} setup \ + -E setup.kibana.host=kibana \ + -E setup.kibana.username=elastic \ + -E setup.kibana.password=${ELASTIC_PASSWORD} \ + -E output.elasticsearch.password=${ELASTIC_PASSWORD} diff --git a/ELK.Docker/scripts/setup-kibana.sh b/ELK.Docker/scripts/setup-kibana.sh new file mode 100644 index 000000000..8d7a90640 --- /dev/null +++ b/ELK.Docker/scripts/setup-kibana.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +set -euo pipefail + +es_url=http://elastic:${ELASTIC_PASSWORD}@elasticsearch:9200 + +# Wait for Elasticsearch to start up before doing anything. +until curl -s $es_url -o /dev/null; do + sleep 1 +done diff --git a/ELK.Docker/scripts/setup-logstash.sh b/ELK.Docker/scripts/setup-logstash.sh new file mode 100644 index 000000000..8d7a90640 --- /dev/null +++ b/ELK.Docker/scripts/setup-logstash.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +set -euo pipefail + +es_url=http://elastic:${ELASTIC_PASSWORD}@elasticsearch:9200 + +# Wait for Elasticsearch to start up before doing anything. +until curl -s $es_url -o /dev/null; do + sleep 1 +done diff --git a/ELK.Docker/stack/.gitignore b/ELK.Docker/stack/.gitignore new file mode 100644 index 000000000..120f485d7 --- /dev/null +++ b/ELK.Docker/stack/.gitignore @@ -0,0 +1,2 @@ +* +!/.gitignore diff --git a/dmp-admin/.angular-cli.json b/dmp-admin/.angular-cli.json deleted file mode 100644 index f5bd01731..000000000 --- a/dmp-admin/.angular-cli.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "$schema": "./node_modules/@angular/cli/lib/config/schema.json", - "project": { - "name": "dmp-admin" - }, - "apps": [ - { - "root": "src", - "outDir": "dist", - "assets": [ - "assets", - "favicon.ico" - ], - "index": "index.html", - "main": "main.ts", - "polyfills": "polyfills.ts", - "test": "test.ts", - "tsconfig": "tsconfig.app.json", - "testTsconfig": "tsconfig.spec.json", - "prefix": "app", - "styles": [ - "styles.css" - ], - "scripts": [], - "environmentSource": "environments/environment.ts", - "environments": { - "dev": "environments/environment.ts", - "prod": "environments/environment.prod.ts" - } - } - ], - "e2e": { - "protractor": { - "config": "./protractor.conf.js" - } - }, - "lint": [ - { - "project": "src/tsconfig.app.json", - "exclude": "**/node_modules/**" - }, - { - "project": "src/tsconfig.spec.json", - "exclude": "**/node_modules/**" - }, - { - "project": "e2e/tsconfig.e2e.json", - "exclude": "**/node_modules/**" - } - ], - "test": { - "karma": { - "config": "./karma.conf.js" - } - }, - "defaults": { - "styleExt": "css", - "component": {} - } -} diff --git a/dmp-admin/.gitignore b/dmp-admin/.gitignore deleted file mode 100644 index 6b6681430..000000000 --- a/dmp-admin/.gitignore +++ /dev/null @@ -1,43 +0,0 @@ -# See http://help.github.com/ignore-files/ for more about ignoring files. - -# compiled output -/dist -/tmp -/out-tsc - -# dependencies -/node_modules - -# IDEs and editors -/.idea -.project -.classpath -.c9/ -*.launch -.settings/ -*.sublime-workspace - -# IDE - VSCode -.vscode/* -!.vscode/settings.json -!.vscode/tasks.json -!.vscode/launch.json -!.vscode/extensions.json - -# misc -/.sass-cache -/connect.lock -/coverage -/libpeerconnection.log -npm-debug.log -testem.log -/typings -yarn-error.log - -# e2e -/e2e/*.js -/e2e/*.map - -# System Files -.DS_Store -Thumbs.db diff --git a/dmp-admin/README.md b/dmp-admin/README.md deleted file mode 100644 index cea6dd706..000000000 --- a/dmp-admin/README.md +++ /dev/null @@ -1,28 +0,0 @@ -# DmpAdmin - -This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 1.3.1. - -## Development server - -Run `ng serve` for a dev server. Navigate to `http://localhost:4200/`. The app will automatically reload if you change any of the source files. - -## Code scaffolding - -Run `ng generate component component-name` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module`. - -## Build - -Run `ng build` to build the project. The build artifacts will be stored in the `dist/` directory. Use the `-prod` flag for a production build. - -## Running unit tests - -Run `ng test` to execute the unit tests via [Karma](https://karma-runner.github.io). - -## Running end-to-end tests - -Run `ng e2e` to execute the end-to-end tests via [Protractor](http://www.protractortest.org/). -Before running the tests make sure you are serving the app via `ng serve`. - -## Further help - -To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI README](https://github.com/angular/angular-cli/blob/master/README.md). diff --git a/dmp-admin/e2e/app.e2e-spec.ts b/dmp-admin/e2e/app.e2e-spec.ts deleted file mode 100644 index 74e8e7f36..000000000 --- a/dmp-admin/e2e/app.e2e-spec.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { AppPage } from './app.po'; - -describe('dmp-admin App', () => { - let page: AppPage; - - beforeEach(() => { - page = new AppPage(); - }); - - it('should display welcome message', () => { - page.navigateTo(); - expect(page.getParagraphText()).toEqual('Welcome to app!'); - }); -}); diff --git a/dmp-admin/e2e/app.po.ts b/dmp-admin/e2e/app.po.ts deleted file mode 100644 index 82ea75ba5..000000000 --- a/dmp-admin/e2e/app.po.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { browser, by, element } from 'protractor'; - -export class AppPage { - navigateTo() { - return browser.get('/'); - } - - getParagraphText() { - return element(by.css('app-root h1')).getText(); - } -} diff --git a/dmp-admin/e2e/tsconfig.e2e.json b/dmp-admin/e2e/tsconfig.e2e.json deleted file mode 100644 index 1d9e5edf0..000000000 --- a/dmp-admin/e2e/tsconfig.e2e.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "extends": "../tsconfig.json", - "compilerOptions": { - "outDir": "../out-tsc/e2e", - "baseUrl": "./", - "module": "commonjs", - "target": "es5", - "types": [ - "jasmine", - "jasminewd2", - "node" - ] - } -} diff --git a/dmp-admin/package-lock.json b/dmp-admin/package-lock.json deleted file mode 100644 index f955c0d0d..000000000 --- a/dmp-admin/package-lock.json +++ /dev/null @@ -1,11780 +0,0 @@ -{ - "name": "dmp-admin", - "version": "0.0.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@angular-devkit/build-optimizer": { - "version": "0.0.42", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-optimizer/-/build-optimizer-0.0.42.tgz", - "integrity": "sha512-BAYCVZ10ro6mgZQDZiNiVbX8ppygw4q7z/stpwG8WjMswgMRIcxsxYoC1VFuWcUPAf4UyfTIav6e8UZWA5+xnQ==", - "dev": true, - "requires": { - "loader-utils": "1.1.0", - "source-map": "0.5.7", - "typescript": "2.6.2", - "webpack-sources": "1.0.1" - }, - "dependencies": { - "typescript": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.6.2.tgz", - "integrity": "sha1-PFtv1/beCRQmkCfwPAlGdY92c6Q=", - "dev": true - } - } - }, - "@angular-devkit/core": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-0.0.29.tgz", - "integrity": "sha512-jtUBA0pIrkdXcVqDmDrGlniqwM7NFOKdo7vWFDmCVLBbC9rZHeYW5Xv/+4HyBhGLJ4wxsAkUjsHKWGJINPPpiw==", - "dev": true, - "requires": { - "ajv": "5.5.2", - "chokidar": "1.7.0", - "rxjs": "5.5.6", - "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.0.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", - "integrity": "sha512-v4Q5HDC0FHAQ7zcBX7T2IL6O5ltl1a2GX4ENjPXg6SjDY69Cmx9v4113C99a4wGF16ClPv5Z8mghuYorVkg/kg==", - "dev": true, - "requires": { - "symbol-observable": "1.0.1" - } - }, - "symbol-observable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.1.tgz", - "integrity": "sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ=", - "dev": true - } - } - }, - "@angular-devkit/schematics": { - "version": "0.0.52", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-0.0.52.tgz", - "integrity": "sha512-NtG8VB5aWtg0cw1Y7EJinJMuAnXsNdkQkkVe/i7CO6TPLyFQSFQCN1YojCr43l8jTWTRebRslrBawPCMOxsOgw==", - "dev": true, - "requires": { - "@ngtools/json-schema": "1.1.0", - "rxjs": "5.5.6" - }, - "dependencies": { - "rxjs": { - "version": "5.5.6", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.6.tgz", - "integrity": "sha512-v4Q5HDC0FHAQ7zcBX7T2IL6O5ltl1a2GX4ENjPXg6SjDY69Cmx9v4113C99a4wGF16ClPv5Z8mghuYorVkg/kg==", - "dev": true, - "requires": { - "symbol-observable": "1.0.1" - } - }, - "symbol-observable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.1.tgz", - "integrity": "sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ=", - "dev": true - } - } - }, - "@angular/animations": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-5.2.3.tgz", - "integrity": "sha512-K9rOsRGwt7Zmp/rNdvBmgBKqvEdgCyZF0kvwxrmZfq1Zj0GAkfTAKPL007493O6XFd+icfu/+kmYeqXBGB4gKA==", - "requires": { - "tslib": "1.7.1" - } - }, - "@angular/cdk": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-5.1.1.tgz", - "integrity": "sha512-V8kQmwf1PhtxiiE0cS1x9SW7/VFrJ7LcL9RqxUOMmJMl8kVR43dQBEeuVOOYJlGo9LAR5ctfemlJHwd9+PoHew==", - "requires": { - "tslib": "1.7.1" - } - }, - "@angular/cli": { - "version": "1.6.5", - "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-1.6.5.tgz", - "integrity": "sha512-YyGdq7rM1xduSdxviKfbd9NsYloEIeK3T+WEftsHSlViKuNQh8jIUoMzTGypjCmTieE2Gtg5BnukaxuUo1G+bQ==", - "dev": true, - "requires": { - "@angular-devkit/build-optimizer": "0.0.42", - "@angular-devkit/core": "0.0.29", - "@angular-devkit/schematics": "0.0.52", - "@ngtools/json-schema": "1.1.0", - "@ngtools/webpack": "1.9.5", - "@schematics/angular": "0.1.17", - "autoprefixer": "7.2.5", - "chalk": "2.2.2", - "circular-dependency-plugin": "4.4.0", - "common-tags": "1.4.0", - "copy-webpack-plugin": "4.3.1", - "core-object": "3.1.5", - "css-loader": "0.28.7", - "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", - "fs-extra": "4.0.2", - "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.2", - "less-loader": "4.0.5", - "license-webpack-plugin": "1.1.1", - "loader-utils": "1.1.0", - "lodash": "4.17.4", - "memory-fs": "0.4.1", - "minimatch": "3.0.4", - "node-modules-path": "1.0.1", - "node-sass": "4.7.2", - "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", - "raw-loader": "0.5.1", - "resolve": "1.4.0", - "rxjs": "5.5.6", - "sass-loader": "6.0.6", - "semver": "5.4.1", - "silent-error": "1.1.0", - "source-map-loader": "0.2.1", - "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.8", - "url-loader": "0.6.2", - "webpack": "3.10.0", - "webpack-dev-middleware": "1.12.0", - "webpack-dev-server": "2.11.1", - "webpack-merge": "4.1.0", - "webpack-sources": "1.0.1", - "webpack-subresource-integrity": "1.0.3" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true, - "requires": { - "color-convert": "1.9.0" - } - }, - "assert-plus": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", - "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=", - "dev": true, - "optional": true - }, - "autoprefixer": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-7.2.5.tgz", - "integrity": "sha512-XqHfo8Ht0VU+T5P+eWEVoXza456KJ4l62BPewu3vpNf3LP9s2+zYXkXBznzYby4XeECXgG3N4i+hGvOhXErZmA==", - "dev": true, - "requires": { - "browserslist": "2.11.3", - "caniuse-lite": "1.0.30000792", - "normalize-range": "0.1.2", - "num2fraction": "1.2.2", - "postcss": "6.0.16", - "postcss-value-parser": "3.3.0" - } - }, - "aws-sign2": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", - "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=", - "dev": true, - "optional": true - }, - "boom": { - "version": "2.10.1", - "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", - "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", - "dev": true, - "requires": { - "hoek": "2.16.3" - } - }, - "browserslist": { - "version": "2.11.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-2.11.3.tgz", - "integrity": "sha512-yWu5cXT7Av6mVwzWc8lMsJMHWn4xyjSuGYi4IozbVTLUOEYPSagUB8kiMDUHA1fS3zjr8nkxkn9jdvug4BBRmA==", - "dev": true, - "requires": { - "caniuse-lite": "1.0.30000792", - "electron-to-chromium": "1.3.32" - } - }, - "caseless": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz", - "integrity": "sha1-cVuW6phBWTzDMGeSP17GDr2k99c=", - "dev": true, - "optional": true - }, - "chalk": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.2.2.tgz", - "integrity": "sha512-LvixLAQ4MYhbf7hgL4o5PeK32gJKvVzDRiSNIApDofQvyhl8adgG2lJVXn4+ekQoK7HL9RF8lqxwerpe0x2pCw==", - "dev": true, - "requires": { - "ansi-styles": "3.2.0", - "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" - } - } - } - }, - "cryptiles": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", - "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", - "dev": true, - "optional": true, - "requires": { - "boom": "2.10.1" - } - }, - "electron-to-chromium": { - "version": "1.3.32", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.32.tgz", - "integrity": "sha1-EdBoTAhA4APEvoko+KxfNdvCtOY=", - "dev": true - }, - "form-data": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", - "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", - "dev": true, - "optional": true, - "requires": { - "asynckit": "0.4.0", - "combined-stream": "1.0.5", - "mime-types": "2.1.17" - } - }, - "har-validator": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz", - "integrity": "sha1-zcvAgYgmWtEZtqWnyKtw7s+10n0=", - "dev": true, - "optional": true, - "requires": { - "chalk": "1.1.3", - "commander": "2.11.0", - "is-my-json-valid": "2.17.1", - "pinkie-promise": "2.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true, - "optional": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "optional": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true, - "optional": true - } - } - }, - "has-flag": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", - "dev": true - }, - "hawk": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", - "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", - "dev": true, - "optional": true, - "requires": { - "boom": "2.10.1", - "cryptiles": "2.0.5", - "hoek": "2.16.3", - "sntp": "1.0.9" - } - }, - "hoek": { - "version": "2.16.3", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", - "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", - "dev": true - }, - "http-signature": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", - "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", - "dev": true, - "optional": true, - "requires": { - "assert-plus": "0.2.0", - "jsprim": "1.4.1", - "sshpk": "1.13.1" - } - }, - "istanbul-instrumenter-loader": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-instrumenter-loader/-/istanbul-instrumenter-loader-3.0.0.tgz", - "integrity": "sha512-alLSEFX06ApU75sm5oWcaVNaiss/bgMRiWTct3g0P0ZZTKjR+6QiCcuVOKDI1kWJgwHEnIXsv/dWm783kPpmtw==", - "dev": true, - "requires": { - "convert-source-map": "1.5.0", - "istanbul-lib-instrument": "1.8.0", - "loader-utils": "1.1.0", - "schema-utils": "0.3.0" - } - }, - "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==", - "dev": true, - "optional": true, - "requires": { - "async-foreach": "0.1.3", - "chalk": "1.1.3", - "cross-spawn": "3.0.1", - "gaze": "1.1.2", - "get-stdin": "4.0.1", - "glob": "7.1.2", - "in-publish": "2.0.0", - "lodash.assign": "4.2.0", - "lodash.clonedeep": "4.5.0", - "lodash.mergewith": "4.6.0", - "meow": "3.7.0", - "mkdirp": "0.5.1", - "nan": "2.7.0", - "node-gyp": "3.6.2", - "npmlog": "4.1.2", - "request": "2.79.0", - "sass-graph": "2.2.4", - "stdout-stream": "1.4.0", - "true-case-path": "1.0.2" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true, - "optional": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "optional": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true, - "optional": true - } - } - }, - "postcss": { - "version": "6.0.16", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.16.tgz", - "integrity": "sha512-m758RWPmSjFH/2MyyG3UOW1fgYbR9rtdzz5UNJnlm7OLtu4B2h9C6gi+bE4qFKghsBRFfZT8NzoQBs6JhLotoA==", - "dev": true, - "requires": { - "chalk": "2.3.0", - "source-map": "0.6.1", - "supports-color": "5.1.0" - }, - "dependencies": { - "chalk": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", - "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", - "dev": true, - "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "4.5.0" - }, - "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" - } - } - } - } - } - }, - "qs": { - "version": "6.3.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.3.2.tgz", - "integrity": "sha1-51vV9uJoEioqDgvaYwslUMFmUCw=", - "dev": true, - "optional": true - }, - "request": { - "version": "2.79.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.79.0.tgz", - "integrity": "sha1-Tf5b9r6LjNw3/Pk+BLZVd3InEN4=", - "dev": true, - "optional": true, - "requires": { - "aws-sign2": "0.6.0", - "aws4": "1.6.0", - "caseless": "0.11.0", - "combined-stream": "1.0.5", - "extend": "3.0.1", - "forever-agent": "0.6.1", - "form-data": "2.1.4", - "har-validator": "2.0.6", - "hawk": "3.1.3", - "http-signature": "1.1.1", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.17", - "oauth-sign": "0.8.2", - "qs": "6.3.2", - "stringstream": "0.0.5", - "tough-cookie": "2.3.3", - "tunnel-agent": "0.4.3", - "uuid": "3.1.0" - } - }, - "rxjs": { - "version": "5.5.6", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.6.tgz", - "integrity": "sha512-v4Q5HDC0FHAQ7zcBX7T2IL6O5ltl1a2GX4ENjPXg6SjDY69Cmx9v4113C99a4wGF16ClPv5Z8mghuYorVkg/kg==", - "dev": true, - "requires": { - "symbol-observable": "1.0.1" - } - }, - "sntp": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", - "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", - "dev": true, - "optional": true, - "requires": { - "hoek": "2.16.3" - } - }, - "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 - }, - "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==", - "dev": true, - "requires": { - "has-flag": "2.0.0" - } - }, - "symbol-observable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.1.tgz", - "integrity": "sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ=", - "dev": true - }, - "tunnel-agent": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz", - "integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=", - "dev": true, - "optional": true - } - } - }, - "@angular/common": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-5.1.1.tgz", - "integrity": "sha512-SFRzdDthoiKaMLuV+TAwjKXFWwTRFGuidlWC3BhUf8/HzNSePAdvfdQcqbEaE5buMn403OV105S9Tyx5tILQeA==", - "requires": { - "tslib": "1.7.1" - } - }, - "@angular/compiler": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-5.1.1.tgz", - "integrity": "sha512-k4J2kRiBjtjkDcDut2JVUpqQGLJWd8j3Don+swzZHuEklbLmsVRGM6u/fmH0K9TMwKHtC5Ycap8kj4bWXUYfwg==", - "requires": { - "tslib": "1.7.1" - } - }, - "@angular/compiler-cli": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-5.2.3.tgz", - "integrity": "sha512-uoCxeyQSd8R/cwEbd0FIUXjnbPq0HXEsyu3WSu9Ek2jt52HL+x/gZQdFCRtjW/mvQNOqxrgrTtEkhJ398+VkXg==", - "dev": true, - "requires": { - "chokidar": "1.7.0", - "minimist": "1.2.0", - "reflect-metadata": "0.1.10", - "tsickle": "0.26.0" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - }, - "tsickle": { - "version": "0.26.0", - "resolved": "https://registry.npmjs.org/tsickle/-/tsickle-0.26.0.tgz", - "integrity": "sha512-eWJ2CUfttGK0LqF9iJ/Avnxbj4M+fCyJ50Zag3wm73Fut1hsasPRHKxKdrMWVj4BMHnQNx7TO+DdNmLmJTSuNw==", - "dev": true, - "requires": { - "minimist": "1.2.0", - "mkdirp": "0.5.1", - "source-map": "0.5.7", - "source-map-support": "0.4.18" - } - } - } - }, - "@angular/core": { - "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.7.1" - } - }, - "@angular/forms": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-5.1.1.tgz", - "integrity": "sha512-4iN/8N0DgnV82XIb/8PqlFIGrog8BHJlzQ9sdAlpT29biPFezFpqpsXkjLBouBc7oBFTgoyXMgWDj8IGRmwLGQ==", - "requires": { - "tslib": "1.7.1" - } - }, - "@angular/http": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@angular/http/-/http-5.1.1.tgz", - "integrity": "sha512-oeiLX00TaFlGS5Y4EAGnxxVitN8T9X8olhSC+XDDAAL3JHTAyh4dj7me8vNZk1VaqPFa9AXu4D34vu1Zsm0c1g==", - "requires": { - "tslib": "1.7.1" - } - }, - "@angular/language-service": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-5.2.3.tgz", - "integrity": "sha512-yBi8i2rUdq6WgYn2J+82QxqhKsl2ldH7/8Lk4ZQDbKgTBx5LmYLpNGg3TJGnZEUGtKhu8Rd1E3SBmc4qqrGXsQ==", - "dev": true - }, - "@angular/material": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@angular/material/-/material-5.1.1.tgz", - "integrity": "sha512-RC3xkbX35daNq4w+XBmm+Vgi16TJvLbSkw5xkdxCqLSysFx9ymwDOjUbLeHt2nJtvYWvnSjuVukdSAeaBknTFg==", - "requires": { - "tslib": "1.7.1" - } - }, - "@angular/platform-browser": { - "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.7.1" - } - }, - "@angular/platform-browser-dynamic": { - "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.7.1" - } - }, - "@angular/router": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@angular/router/-/router-5.1.1.tgz", - "integrity": "sha512-96mBZS1b1Dt7HFOGKh5zI/1U6F3zT4cdjIaBmcCKkbyKhs3WRAPXxxCkuCwr6lWmBeQt4iEvSdXiHQbD0iCG7Q==", - "requires": { - "tslib": "1.7.1" - } - }, - "@ng-bootstrap/ng-bootstrap": { - "version": "1.0.0-beta.5", - "resolved": "https://registry.npmjs.org/@ng-bootstrap/ng-bootstrap/-/ng-bootstrap-1.0.0-beta.5.tgz", - "integrity": "sha1-2iuQZrNwGihMrFoWFop33vlHtKs=" - }, - "@ngtools/json-schema": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@ngtools/json-schema/-/json-schema-1.1.0.tgz", - "integrity": "sha1-w6DFRNYjkqzCgTpCyKDcb1j4aSI=", - "dev": true - }, - "@ngtools/webpack": { - "version": "1.9.5", - "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-1.9.5.tgz", - "integrity": "sha512-scio7dKdorM6wgFz8ELm0MDl2To9ax6a36rfmD+h6hcgSn+7dKZmSr3qUnQE1ymydyzlBwS+4IODpWqHPS9cwQ==", - "dev": true, - "requires": { - "chalk": "2.2.2", - "enhanced-resolve": "3.4.1", - "loader-utils": "1.1.0", - "magic-string": "0.22.4", - "semver": "5.4.1", - "source-map": "0.5.7", - "tree-kill": "1.2.0", - "webpack-sources": "1.1.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true, - "requires": { - "color-convert": "1.9.0" - } - }, - "chalk": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.2.2.tgz", - "integrity": "sha512-LvixLAQ4MYhbf7hgL4o5PeK32gJKvVzDRiSNIApDofQvyhl8adgG2lJVXn4+ekQoK7HL9RF8lqxwerpe0x2pCw==", - "dev": true, - "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "4.5.0" - } - }, - "has-flag": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", - "dev": true - }, - "supports-color": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", - "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", - "dev": true, - "requires": { - "has-flag": "2.0.0" - } - }, - "webpack-sources": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.1.0.tgz", - "integrity": "sha512-aqYp18kPphgoO5c/+NaUvEeACtZjMESmDChuD3NBciVpah3XpMEU9VAAtIaB1BsfJWWTSdv8Vv1m3T0aRk2dUw==", - "dev": true, - "requires": { - "source-list-map": "2.0.0", - "source-map": "0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - } - } - }, - "@ngx-translate/core": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/@ngx-translate/core/-/core-9.1.1.tgz", - "integrity": "sha1-rhA5KINrip4Gn9Li52+iGYzH5ig=" - }, - "@ngx-translate/http-loader": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@ngx-translate/http-loader/-/http-loader-2.0.1.tgz", - "integrity": "sha1-qmd4jmS/qGUmkad7Ais7QDEgkRM=" - }, - "@schematics/angular": { - "version": "0.1.17", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-0.1.17.tgz", - "integrity": "sha512-PHE5gk/ogPY/aN94dbbtauHMCq+/7w4Kdcl7tGmSS8mPKEI0wa6XJi//Wq/tHi55lb2fP58oEZU6n6w/wQascw==", - "dev": true, - "requires": { - "typescript": "2.6.2" - }, - "dependencies": { - "typescript": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.6.2.tgz", - "integrity": "sha1-PFtv1/beCRQmkCfwPAlGdY92c6Q=", - "dev": true - } - } - }, - "@types/jasmine": { - "version": "2.5.54", - "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-2.5.54.tgz", - "integrity": "sha512-B9YofFbUljs19g5gBKUYeLIulsh31U5AK70F41BImQRHEZQGm4GcN922UvnYwkduMqbC/NH+9fruWa/zrqvHIg==", - "dev": true - }, - "@types/jasminewd2": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/jasminewd2/-/jasminewd2-2.0.3.tgz", - "integrity": "sha512-hYDVmQZT5VA2kigd4H4bv7vl/OhlympwREUemqBdOqtrYTo5Ytm12a5W5/nGgGYdanGVxj0x/VhZ7J3hOg/YKg==", - "dev": true, - "requires": { - "@types/jasmine": "2.5.54" - } - }, - "@types/jquery": { - "version": "3.2.12", - "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.2.12.tgz", - "integrity": "sha512-xZzTbUju6AYFE/088UcH2+dB7yTLHlujDju9pfncD1WLl2LWa6Mn+WzKjFfhn8YA+he53j5K0Rfdw89BN0kDug==", - "dev": true - }, - "@types/node": { - "version": "6.0.88", - "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.88.tgz", - "integrity": "sha512-bYDPZTX0/s1aihdjLuAgogUAT5M+TpoWChEMea2p0yOcfn5bu3k6cJb9cp6nw268XeSNIGGr+4+/8V5K6BGzLQ==", - "dev": true - }, - "@types/q": { - "version": "0.0.32", - "resolved": "https://registry.npmjs.org/@types/q/-/q-0.0.32.tgz", - "integrity": "sha1-vShOV8hPEyXacCur/IKlMoGQwMU=", - "dev": true - }, - "@types/selenium-webdriver": { - "version": "2.53.42", - "resolved": "https://registry.npmjs.org/@types/selenium-webdriver/-/selenium-webdriver-2.53.42.tgz", - "integrity": "sha1-dMt3+2BS7a/yqJhN2v2I1BnyXKw=", - "dev": true - }, - "abbrev": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.0.tgz", - "integrity": "sha1-0FVMIlZjbi9W58LlrRg/hZQo2B8=", - "dev": true - }, - "accepts": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.4.tgz", - "integrity": "sha1-hiRnWMfdbSGmR0/whKR0DsBesh8=", - "dev": true, - "requires": { - "mime-types": "2.1.17", - "negotiator": "0.6.1" - } - }, - "acorn": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.1.2.tgz", - "integrity": "sha512-o96FZLJBPY1lvTuJylGA9Bk3t/GKPPJG8H0ydQQl01crzwJgspa4AEIq/pVTXigmK0PHVQhiAtn8WMBLL9D2WA==", - "dev": true - }, - "acorn-dynamic-import": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz", - "integrity": "sha1-x1K9IQvvZ5UBtsbLf8hPj0cVjMQ=", - "dev": true, - "requires": { - "acorn": "4.0.13" - }, - "dependencies": { - "acorn": { - "version": "4.0.13", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", - "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=", - "dev": true - } - } - }, - "adm-zip": { - "version": "0.4.7", - "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.7.tgz", - "integrity": "sha1-hgbCy/HEJs6MjsABdER/1Jtur8E=", - "dev": true - }, - "after": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", - "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=", - "dev": true - }, - "agent-base": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-2.1.1.tgz", - "integrity": "sha1-1t4Q1a9hMtW9aSQn1G/FOFOQlMc=", - "dev": true, - "requires": { - "extend": "3.0.1", - "semver": "5.0.3" - }, - "dependencies": { - "semver": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.0.3.tgz", - "integrity": "sha1-d0Zt5YnNXTyV8TiqeLxWmjy10no=", - "dev": true - } - } - }, - "ajv": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.2.3.tgz", - "integrity": "sha1-wG9Zh3jETGsWGrr+NGa4GtGBTtI=", - "dev": true, - "requires": { - "co": "4.6.0", - "fast-deep-equal": "1.0.0", - "json-schema-traverse": "0.3.1", - "json-stable-stringify": "1.0.1" - } - }, - "ajv-keywords": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.0.tgz", - "integrity": "sha1-opbhf3v658HOT34N5T0pyzIWLfA=", - "dev": true - }, - "align-text": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", - "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", - "dev": true, - "requires": { - "kind-of": "3.2.2", - "longest": "1.0.1", - "repeat-string": "1.6.1" - } - }, - "alphanum-sort": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", - "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=", - "dev": true - }, - "amdefine": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", - "dev": true - }, - "angular-datatables": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/angular-datatables/-/angular-datatables-4.4.0.tgz", - "integrity": "sha512-KquQKQRZP6exWsecpY4ZYpX45U5BA70khDFd1KjppEDKyF93YHIkvVj6/DtOu+/I5ugxbP3giIVUbcu422jFhA==" - }, - "angular2-datatable": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/angular2-datatable/-/angular2-datatable-0.6.0.tgz", - "integrity": "sha1-ygCPdAh/DLh9pXCe0vLR0GF3JjI=", - "requires": { - "lodash": "4.17.4" - } - }, - "angular2-localstorage": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/angular2-localstorage/-/angular2-localstorage-0.4.0.tgz", - "integrity": "sha1-CkTPXRnMfrtieOPkgX0K4DnBa/A=" - }, - "ansi-html": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", - "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", - "dev": true - }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "anymatch": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", - "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", - "dev": true, - "requires": { - "micromatch": "2.3.11", - "normalize-path": "2.1.1" - } - }, - "app-root-path": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/app-root-path/-/app-root-path-2.0.1.tgz", - "integrity": "sha1-zWLc+OT9WkF+/GZNLlsQZTxlG0Y=", - "dev": true - }, - "append-transform": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-0.4.0.tgz", - "integrity": "sha1-126/jKlNJ24keja61EpLdKthGZE=", - "dev": true, - "requires": { - "default-require-extensions": "1.0.0" - } - }, - "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", - "dev": true - }, - "are-we-there-yet": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz", - "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=", - "dev": true, - "requires": { - "delegates": "1.0.0", - "readable-stream": "2.3.3" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "readable-stream": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", - "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "safe-buffer": "5.1.1", - "string_decoder": "1.0.3", - "util-deprecate": "1.0.2" - } - }, - "string_decoder": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", - "dev": true, - "requires": { - "safe-buffer": "5.1.1" - } - } - } - }, - "argparse": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", - "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=", - "dev": true, - "requires": { - "sprintf-js": "1.0.3" - } - }, - "arr-diff": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", - "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", - "dev": true, - "requires": { - "arr-flatten": "1.1.0" - } - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true - }, - "array-find-index": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", - "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", - "dev": true - }, - "array-flatten": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.1.tgz", - "integrity": "sha1-Qmu52oQJDBg42BLIFQryCoMx4pY=", - "dev": true - }, - "array-includes": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.0.3.tgz", - "integrity": "sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=", - "dev": true, - "requires": { - "define-properties": "1.1.2", - "es-abstract": "1.10.0" - } - }, - "array-slice": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz", - "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU=", - "dev": true - }, - "array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", - "dev": true, - "requires": { - "array-uniq": "1.0.3" - } - }, - "array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", - "dev": true - }, - "array-unique": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", - "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", - "dev": true - }, - "arraybuffer.slice": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.6.tgz", - "integrity": "sha1-8zshWfBTKj8xB6JywMz70a0peco=", - "dev": true - }, - "arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", - "dev": true - }, - "asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", - "dev": true, - "optional": true - }, - "asn1": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", - "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=", - "dev": true - }, - "asn1.js": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.9.1.tgz", - "integrity": "sha1-SLokC0WpKA6UdImQull9IWYX/UA=", - "dev": true, - "requires": { - "bn.js": "4.11.8", - "inherits": "2.0.3", - "minimalistic-assert": "1.0.0" - } - }, - "assert": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", - "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", - "dev": true, - "requires": { - "util": "0.10.3" - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true - }, - "async": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/async/-/async-2.5.0.tgz", - "integrity": "sha512-e+lJAJeNWuPCNyxZKOBdaJGyLGHugXVQtrAwtuAe2vhxTYxFTKE73p8JuTmdH0qdQZtDvI4dhJwjZc5zsfIsYw==", - "dev": true, - "requires": { - "lodash": "4.17.4" - } - }, - "async-each": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", - "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", - "dev": true - }, - "async-foreach": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz", - "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=", - "dev": true, - "optional": true - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true - }, - "atob": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.0.3.tgz", - "integrity": "sha1-GcenYEc3dEaPILLS0DNyrX1Mv10=", - "dev": true - }, - "autoprefixer": { - "version": "6.7.7", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-6.7.7.tgz", - "integrity": "sha1-Hb0cg1ZY41zj+ZhAmdsAWFx4IBQ=", - "dev": true, - "requires": { - "browserslist": "1.7.7", - "caniuse-db": "1.0.30000738", - "normalize-range": "0.1.2", - "num2fraction": "1.2.2", - "postcss": "5.2.17", - "postcss-value-parser": "3.3.0" - } - }, - "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 - }, - "aws4": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", - "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=", - "dev": true - }, - "babel-code-frame": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", - "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", - "dev": true, - "requires": { - "chalk": "1.1.3", - "esutils": "2.0.2", - "js-tokens": "3.0.2" - }, - "dependencies": { - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "babel-generator": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.0.tgz", - "integrity": "sha1-rBriAHC3n248odMmlhMFN3TyDcU=", - "dev": true, - "requires": { - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "detect-indent": "4.0.0", - "jsesc": "1.3.0", - "lodash": "4.17.4", - "source-map": "0.5.7", - "trim-right": "1.0.1" - }, - "dependencies": { - "jsesc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", - "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", - "dev": true - } - } - }, - "babel-messages": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", - "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0" - } - }, - "babel-runtime": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", - "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", - "dev": true, - "requires": { - "core-js": "2.5.1", - "regenerator-runtime": "0.11.0" - } - }, - "babel-template": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", - "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "lodash": "4.17.4" - } - }, - "babel-traverse": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", - "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", - "dev": true, - "requires": { - "babel-code-frame": "6.26.0", - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "debug": "2.6.9", - "globals": "9.18.0", - "invariant": "2.2.2", - "lodash": "4.17.4" - } - }, - "babel-types": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", - "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "esutils": "2.0.2", - "lodash": "4.17.4", - "to-fast-properties": "1.0.3" - } - }, - "babylon": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", - "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", - "dev": true - }, - "backo2": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", - "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=", - "dev": true - }, - "balanced-match": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", - "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=", - "dev": true - }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, - "requires": { - "cache-base": "1.0.1", - "class-utils": "0.3.6", - "component-emitter": "1.2.1", - "define-property": "1.0.0", - "isobject": "3.0.1", - "mixin-deep": "1.3.0", - "pascalcase": "0.1.1" - }, - "dependencies": { - "component-emitter": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", - "dev": true - } - } - }, - "base64-arraybuffer": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", - "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=", - "dev": true - }, - "base64-js": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.1.tgz", - "integrity": "sha512-dwVUVIXsBZXwTuwnXI9RK8sBmgq09NDHzyR9SAph9eqk76gKK2JSQmZARC2zRC81JC2QTtxD0ARU5qTS25gIGw==", - "dev": true - }, - "base64id": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz", - "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=", - "dev": true - }, - "batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", - "dev": true - }, - "bcrypt-pbkdf": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", - "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", - "dev": true, - "optional": true, - "requires": { - "tweetnacl": "0.14.5" - } - }, - "better-assert": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", - "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=", - "dev": true, - "requires": { - "callsite": "1.0.0" - } - }, - "big.js": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", - "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==", - "dev": true - }, - "binary-extensions": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.10.0.tgz", - "integrity": "sha1-muuabF6IY4qtFx4Wf1kAq+JINdA=", - "dev": true - }, - "blob": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.4.tgz", - "integrity": "sha1-vPEwUspURj8w+fx+lbmkdjCpSSE=", - "dev": true - }, - "block-stream": { - "version": "0.0.9", - "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", - "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", - "dev": true, - "optional": true, - "requires": { - "inherits": "2.0.3" - } - }, - "blocking-proxy": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/blocking-proxy/-/blocking-proxy-0.0.5.tgz", - "integrity": "sha1-RikF4Nz76pcPQao3Ij3anAexkSs=", - "dev": true, - "requires": { - "minimist": "1.2.0" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - } - } - }, - "bluebird": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.0.tgz", - "integrity": "sha1-eRQg1/VR7qKJdFOop3ZT+WYG1nw=", - "dev": true - }, - "bn.js": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", - "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", - "dev": true - }, - "body-parser": { - "version": "1.18.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz", - "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=", - "dev": true, - "requires": { - "bytes": "3.0.0", - "content-type": "1.0.4", - "debug": "2.6.9", - "depd": "1.1.1", - "http-errors": "1.6.2", - "iconv-lite": "0.4.19", - "on-finished": "2.3.0", - "qs": "6.5.1", - "raw-body": "2.3.2", - "type-is": "1.6.15" - }, - "dependencies": { - "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", - "dev": true - } - } - }, - "bonjour": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", - "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", - "dev": true, - "requires": { - "array-flatten": "2.1.1", - "deep-equal": "1.0.1", - "dns-equal": "1.0.0", - "dns-txt": "2.0.2", - "multicast-dns": "6.1.1", - "multicast-dns-service-types": "1.1.0" - } - }, - "boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", - "dev": true - }, - "boom": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/boom/-/boom-4.3.1.tgz", - "integrity": "sha1-T4owBctKfjiJ90kDD9JbluAdLjE=", - "dev": true, - "requires": { - "hoek": "4.2.0" - } - }, - "bootstrap": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-3.3.7.tgz", - "integrity": "sha1-WjiTlFSfIzMIdaOxUGVldPip63E=" - }, - "bootstrap-menu": { - "version": "1.0.14", - "resolved": "https://registry.npmjs.org/bootstrap-menu/-/bootstrap-menu-1.0.14.tgz", - "integrity": "sha1-qkQjv4RQa2BIPhTQdtqCpM3e1DQ=", - "requires": { - "classnames": "2.2.5", - "jquery-ui": "1.12.1", - "lodash": "3.10.1" - }, - "dependencies": { - "lodash": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", - "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=" - } - } - }, - "brace-expansion": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", - "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", - "dev": true, - "requires": { - "balanced-match": "1.0.0", - "concat-map": "0.0.1" - }, - "dependencies": { - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - } - } - }, - "braces": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", - "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", - "dev": true, - "requires": { - "expand-range": "1.8.2", - "preserve": "0.2.0", - "repeat-element": "1.1.2" - } - }, - "brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", - "dev": true - }, - "browserify-aes": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.0.8.tgz", - "integrity": "sha512-WYCMOT/PtGTlpOKFht0YJFYcPy6pLCR98CtWfzK13zoynLlBMvAdEMSRGmgnJCw2M2j/5qxBkinZQFobieM8dQ==", - "dev": true, - "requires": { - "buffer-xor": "1.0.3", - "cipher-base": "1.0.4", - "create-hash": "1.1.3", - "evp_bytestokey": "1.0.3", - "inherits": "2.0.3", - "safe-buffer": "5.1.1" - } - }, - "browserify-cipher": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.0.tgz", - "integrity": "sha1-mYgkSHS/XtTijalWZtzWasj8Njo=", - "dev": true, - "requires": { - "browserify-aes": "1.0.8", - "browserify-des": "1.0.0", - "evp_bytestokey": "1.0.3" - } - }, - "browserify-des": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.0.tgz", - "integrity": "sha1-2qJ3cXRwki7S/hhZQRihdUOXId0=", - "dev": true, - "requires": { - "cipher-base": "1.0.4", - "des.js": "1.0.0", - "inherits": "2.0.3" - } - }, - "browserify-rsa": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", - "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", - "dev": true, - "requires": { - "bn.js": "4.11.8", - "randombytes": "2.0.5" - } - }, - "browserify-sign": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", - "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", - "dev": true, - "requires": { - "bn.js": "4.11.8", - "browserify-rsa": "4.0.1", - "create-hash": "1.1.3", - "create-hmac": "1.1.6", - "elliptic": "6.4.0", - "inherits": "2.0.3", - "parse-asn1": "5.1.0" - } - }, - "browserify-zlib": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz", - "integrity": "sha1-uzX4pRn2AOD6a4SFJByXnQFB+y0=", - "dev": true, - "requires": { - "pako": "0.2.9" - } - }, - "browserslist": { - "version": "1.7.7", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", - "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", - "dev": true, - "requires": { - "caniuse-db": "1.0.30000738", - "electron-to-chromium": "1.3.22" - } - }, - "buffer": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", - "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", - "dev": true, - "requires": { - "base64-js": "1.2.1", - "ieee754": "1.1.8", - "isarray": "1.0.0" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - } - } - }, - "buffer-indexof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", - "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==", - "dev": true - }, - "buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", - "dev": true - }, - "builtin-modules": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", - "dev": true - }, - "builtin-status-codes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", - "dev": true - }, - "bytes": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-2.5.0.tgz", - "integrity": "sha1-TJQj6i0lLCcMQbK97+/5u2tiwGo=", - "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==", - "dev": true, - "requires": { - "bluebird": "3.5.0", - "chownr": "1.0.1", - "glob": "7.1.2", - "graceful-fs": "4.1.11", - "lru-cache": "4.1.1", - "mississippi": "1.3.1", - "mkdirp": "0.5.1", - "move-concurrently": "1.0.1", - "promise-inflight": "1.0.1", - "rimraf": "2.6.2", - "ssri": "5.1.0", - "unique-filename": "1.1.0", - "y18n": "3.2.1" - } - }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, - "requires": { - "collection-visit": "1.0.0", - "component-emitter": "1.2.1", - "get-value": "2.0.6", - "has-value": "1.0.0", - "isobject": "3.0.1", - "set-value": "2.0.0", - "to-object-path": "0.3.0", - "union-value": "1.0.0", - "unset-value": "1.0.0" - }, - "dependencies": { - "component-emitter": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", - "dev": true - } - } - }, - "callsite": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", - "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=", - "dev": true - }, - "camel-case": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", - "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=", - "dev": true, - "requires": { - "no-case": "2.3.2", - "upper-case": "1.1.3" - } - }, - "camelcase": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", - "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", - "dev": true - }, - "camelcase-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", - "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", - "dev": true, - "requires": { - "camelcase": "2.1.1", - "map-obj": "1.0.1" - } - }, - "caniuse-api": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-1.6.1.tgz", - "integrity": "sha1-tTTnxzTE+B7F++isoq0kNUuWLGw=", - "dev": true, - "requires": { - "browserslist": "1.7.7", - "caniuse-db": "1.0.30000738", - "lodash.memoize": "4.1.2", - "lodash.uniq": "4.5.0" - } - }, - "caniuse-db": { - "version": "1.0.30000738", - "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000738.tgz", - "integrity": "sha1-hICavEmjkOWowiSrk2nT+NAaogI=", - "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=", - "dev": true - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true - }, - "center-align": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", - "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", - "dev": true, - "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": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.1.0.tgz", - "integrity": "sha512-LUHGS/dge4ujbXMJrnihYMcL4AoOweGnw9Tp3kQuqy1Kx5c1qKjqvMJZ6nVJPMWJtKCTN72ZogH3oeSO9g9rXQ==", - "dev": true, - "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "4.4.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true, - "requires": { - "color-convert": "1.9.0" - } - }, - "has-flag": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", - "dev": true - }, - "supports-color": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz", - "integrity": "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==", - "dev": true, - "requires": { - "has-flag": "2.0.0" - } - } - } - }, - "chokidar": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", - "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", - "dev": true, - "requires": { - "anymatch": "1.3.2", - "async-each": "1.0.1", - "glob-parent": "2.0.0", - "inherits": "2.0.3", - "is-binary-path": "1.0.1", - "is-glob": "2.0.1", - "path-is-absolute": "1.0.1", - "readdirp": "2.1.0" - } - }, - "chownr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.0.1.tgz", - "integrity": "sha1-4qdQQqlVGQi+vSW4Uj1fl2nXkYE=", - "dev": true - }, - "cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "dev": true, - "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.1" - } - }, - "circular-dependency-plugin": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/circular-dependency-plugin/-/circular-dependency-plugin-4.4.0.tgz", - "integrity": "sha512-yEFtUNUYT4jBykEX5ZOHw+5goA3glGZr9wAXIQqoyakjz5H5TeUmScnWRc52douAhb9eYzK3s7V6bXfNnjFdzg==", - "dev": true - }, - "clap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/clap/-/clap-1.2.3.tgz", - "integrity": "sha512-4CoL/A3hf90V3VIEjeuhSvlGFEHKzOz+Wfc2IVZc+FaUgU0ZQafJTP49fvnULipOPcAfqhyI2duwQyns6xqjYA==", - "dev": true, - "requires": { - "chalk": "1.1.3" - }, - "dependencies": { - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, - "requires": { - "arr-union": "3.1.0", - "define-property": "0.2.5", - "isobject": "3.0.1", - "static-extend": "0.1.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.5" - } - } - } - }, - "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.5" - } - } - } - }, - "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 - } - } - }, - "classnames": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.5.tgz", - "integrity": "sha1-+zgB1FNGdknvNgPH1hoCvRKb3m0=" - }, - "clean-css": { - "version": "4.1.9", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.1.9.tgz", - "integrity": "sha1-Nc7ornaHpJuYA09w3gDE7dOCYwE=", - "dev": true, - "requires": { - "source-map": "0.5.7" - } - }, - "cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", - "dev": true, - "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wrap-ansi": "2.1.0" - }, - "dependencies": { - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "1.0.1" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" - } - } - } - }, - "clone": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.2.tgz", - "integrity": "sha1-Jgt6meux7f4kdTgXX3gyQ8sZ0Uk=", - "dev": true - }, - "clone-deep": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-0.3.0.tgz", - "integrity": "sha1-NIxhrpzb4O3+BT2R/0zFIdeQ7eg=", - "dev": true, - "requires": { - "for-own": "1.0.0", - "is-plain-object": "2.0.4", - "kind-of": "3.2.2", - "shallow-clone": "0.1.2" - } - }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", - "dev": true - }, - "coa": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/coa/-/coa-1.0.4.tgz", - "integrity": "sha1-qe8VNmDWqGqL3sAomlxoTSF0Mv0=", - "dev": true, - "requires": { - "q": "1.5.0" - } - }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true - }, - "codelyzer": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/codelyzer/-/codelyzer-3.1.2.tgz", - "integrity": "sha1-n/HwQfubXuXb60W6hm368EmDrwQ=", - "dev": true, - "requires": { - "app-root-path": "2.0.1", - "css-selector-tokenizer": "0.7.0", - "cssauron": "1.4.0", - "semver-dsl": "1.0.1", - "source-map": "0.5.7", - "sprintf-js": "1.0.3" - } - }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "dev": true, - "requires": { - "map-visit": "1.0.0", - "object-visit": "1.0.1" - } - }, - "color": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/color/-/color-0.11.4.tgz", - "integrity": "sha1-bXtcdPtl6EHNSHkq0e1eB7kE12Q=", - "dev": true, - "requires": { - "clone": "1.0.2", - "color-convert": "1.9.0", - "color-string": "0.3.0" - } - }, - "color-convert": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.0.tgz", - "integrity": "sha1-Gsz5fdc5uYO/mU1W/sj5WFNkG3o=", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "color-string": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-0.3.0.tgz", - "integrity": "sha1-J9RvtnAlxcL6JZk7+/V55HhBuZE=", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "colormin": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/colormin/-/colormin-1.1.2.tgz", - "integrity": "sha1-6i90IKcrlogaOKrlnsEkpvcpgTM=", - "dev": true, - "requires": { - "color": "0.11.4", - "css-color-names": "0.0.4", - "has": "1.0.1" - } - }, - "colors": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", - "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", - "dev": true - }, - "combine-lists": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/combine-lists/-/combine-lists-1.0.1.tgz", - "integrity": "sha1-RYwH4J4NkA/Ci3Cj/sLazR0st/Y=", - "dev": true, - "requires": { - "lodash": "4.17.4" - } - }, - "combined-stream": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", - "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", - "dev": true, - "requires": { - "delayed-stream": "1.0.0" - } - }, - "commander": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", - "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==", - "dev": true - }, - "common-tags": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.4.0.tgz", - "integrity": "sha1-EYe+Tz1M8MBCfUP3Tu8fc1AWFMA=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0" - } - }, - "commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", - "dev": true - }, - "component-bind": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", - "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=", - "dev": true - }, - "component-emitter": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.1.2.tgz", - "integrity": "sha1-KWWU8nU9qmOZbSrwjRWpURbJrsM=", - "dev": true - }, - "component-inherit": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", - "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=", - "dev": true - }, - "compressible": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.11.tgz", - "integrity": "sha1-FnGKdd4oPtjmBAQWJaIGRYZ5fYo=", - "dev": true, - "requires": { - "mime-db": "1.30.0" - } - }, - "compression": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.0.tgz", - "integrity": "sha1-AwyfGY8WQ6BX13anOOki2kNzAS0=", - "dev": true, - "requires": { - "accepts": "1.3.4", - "bytes": "2.5.0", - "compressible": "2.0.11", - "debug": "2.6.8", - "on-headers": "1.0.1", - "safe-buffer": "5.1.1", - "vary": "1.1.2" - }, - "dependencies": { - "debug": { - "version": "2.6.8", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", - "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", - "dev": true, - "requires": { - "ms": "2.0.0" - } - } - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "concat-stream": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz", - "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=", - "dev": true, - "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.3", - "typedarray": "0.0.6" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "readable-stream": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", - "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "safe-buffer": "5.1.1", - "string_decoder": "1.0.3", - "util-deprecate": "1.0.2" - } - }, - "string_decoder": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", - "dev": true, - "requires": { - "safe-buffer": "5.1.1" - } - } - } - }, - "connect": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.5.tgz", - "integrity": "sha1-+43ee6B2OHfQ7J352sC0tA5yx9o=", - "dev": true, - "requires": { - "debug": "2.6.9", - "finalhandler": "1.0.6", - "parseurl": "1.3.2", - "utils-merge": "1.0.1" - }, - "dependencies": { - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", - "dev": true - } - } - }, - "connect-history-api-fallback": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.3.0.tgz", - "integrity": "sha1-5R0X+PDvDbkKZP20feMFFVbp8Wk=", - "dev": true - }, - "console-browserify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", - "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", - "dev": true, - "requires": { - "date-now": "0.1.4" - } - }, - "console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", - "dev": true - }, - "constants-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", - "dev": true - }, - "content-disposition": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", - "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=", - "dev": true - }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", - "dev": true - }, - "convert-source-map": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.0.tgz", - "integrity": "sha1-ms1whRxtXf3ZPZKC5e35SgP/RrU=", - "dev": true - }, - "cookie": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", - "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=", - "dev": true - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", - "dev": true - }, - "copy-concurrently": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", - "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", - "dev": true, - "requires": { - "aproba": "1.2.0", - "fs-write-stream-atomic": "1.0.10", - "iferr": "0.1.5", - "mkdirp": "0.5.1", - "rimraf": "2.6.2", - "run-queue": "1.0.3" - } - }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "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==", - "dev": true, - "requires": { - "cacache": "10.0.2", - "find-cache-dir": "1.0.0", - "globby": "7.1.1", - "is-glob": "4.0.0", - "loader-utils": "0.2.17", - "lodash": "4.17.4", - "minimatch": "3.0.4", - "p-limit": "1.1.0", - "pify": "3.0.0", - "serialize-javascript": "1.4.0" - }, - "dependencies": { - "globby": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/globby/-/globby-7.1.1.tgz", - "integrity": "sha1-+yzP+UAfhgCUXfral0QMypcrhoA=", - "dev": true, - "requires": { - "array-union": "1.0.2", - "dir-glob": "2.0.0", - "glob": "7.1.2", - "ignore": "3.3.7", - "pify": "3.0.0", - "slash": "1.0.0" - } - }, - "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" - } - }, - "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" - } - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } - } - }, - "core-js": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.1.tgz", - "integrity": "sha1-rmh03GaTd4m4B1T/VCjfZoGcpQs=" - }, - "core-object": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/core-object/-/core-object-3.1.5.tgz", - "integrity": "sha512-sA2/4+/PZ/KV6CKgjrVrrUVBKCkdDO02CUlQ0YKTQoYUwPYNOtOAcWlbYhd5v/1JqYaA6oZ4sDlOU4ppVw6Wbg==", - "dev": true, - "requires": { - "chalk": "2.1.0" - } - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, - "cosmiconfig": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-2.2.2.tgz", - "integrity": "sha512-GiNXLwAFPYHy25XmTPpafYvn3CLAkJ8FLsscq78MQd1Kh0OU6Yzhn4eV2MVF4G9WEQZoWEGltatdR+ntGPMl5A==", - "dev": true, - "requires": { - "is-directory": "0.3.1", - "js-yaml": "3.7.0", - "minimist": "1.2.0", - "object-assign": "4.1.1", - "os-homedir": "1.0.2", - "parse-json": "2.2.0", - "require-from-string": "1.2.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - } - } - }, - "create-ecdh": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.0.tgz", - "integrity": "sha1-iIxyNZbN92EvZJgjPuvXo1MBc30=", - "dev": true, - "requires": { - "bn.js": "4.11.8", - "elliptic": "6.4.0" - } - }, - "create-hash": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.1.3.tgz", - "integrity": "sha1-YGBCrIuSYnUPSDyt2rD1gZFy2P0=", - "dev": true, - "requires": { - "cipher-base": "1.0.4", - "inherits": "2.0.3", - "ripemd160": "2.0.1", - "sha.js": "2.4.9" - } - }, - "create-hmac": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.6.tgz", - "integrity": "sha1-rLniIaThe9sHbpBlfEK5PjcmzwY=", - "dev": true, - "requires": { - "cipher-base": "1.0.4", - "create-hash": "1.1.3", - "inherits": "2.0.3", - "ripemd160": "2.0.1", - "safe-buffer": "5.1.1", - "sha.js": "2.4.9" - } - }, - "cross-spawn": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz", - "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=", - "dev": true, - "optional": true, - "requires": { - "lru-cache": "4.1.1", - "which": "1.3.0" - } - }, - "cryptiles": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.2.tgz", - "integrity": "sha1-qJ+7Ig9c4l7FboxKqKT9e1sNKf4=", - "dev": true, - "requires": { - "boom": "5.2.0" - }, - "dependencies": { - "boom": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz", - "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==", - "dev": true, - "requires": { - "hoek": "4.2.0" - } - } - } - }, - "crypto-browserify": { - "version": "3.11.1", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.11.1.tgz", - "integrity": "sha512-Na7ZlwCOqoaW5RwUK1WpXws2kv8mNhWdTlzob0UXulk6G9BDbyiJaGTYBIX61Ozn9l1EPPJpICZb4DaOpT9NlQ==", - "dev": true, - "requires": { - "browserify-cipher": "1.0.0", - "browserify-sign": "4.0.4", - "create-ecdh": "4.0.0", - "create-hash": "1.1.3", - "create-hmac": "1.1.6", - "diffie-hellman": "5.0.2", - "inherits": "2.0.3", - "pbkdf2": "3.0.14", - "public-encrypt": "4.0.0", - "randombytes": "2.0.5" - } - }, - "css-color-names": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", - "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", - "dev": true - }, - "css-loader": { - "version": "0.28.7", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-0.28.7.tgz", - "integrity": "sha512-GxMpax8a/VgcfRrVy0gXD6yLd5ePYbXX/5zGgTVYp4wXtJklS8Z2VaUArJgc//f6/Dzil7BaJObdSv8eKKCPgg==", - "dev": true, - "requires": { - "babel-code-frame": "6.26.0", - "css-selector-tokenizer": "0.7.0", - "cssnano": "3.10.0", - "icss-utils": "2.1.0", - "loader-utils": "1.1.0", - "lodash.camelcase": "4.3.0", - "object-assign": "4.1.1", - "postcss": "5.2.17", - "postcss-modules-extract-imports": "1.1.0", - "postcss-modules-local-by-default": "1.2.0", - "postcss-modules-scope": "1.1.0", - "postcss-modules-values": "1.3.0", - "postcss-value-parser": "3.3.0", - "source-list-map": "2.0.0" - } - }, - "css-parse": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/css-parse/-/css-parse-1.7.0.tgz", - "integrity": "sha1-Mh9s9zeCpv91ERE5D8BeLGV9jJs=", - "dev": true - }, - "css-select": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", - "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", - "dev": true, - "requires": { - "boolbase": "1.0.0", - "css-what": "2.1.0", - "domutils": "1.5.1", - "nth-check": "1.0.1" - } - }, - "css-selector-tokenizer": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.0.tgz", - "integrity": "sha1-5piEdK6MlTR3v15+/s/OzNnPTIY=", - "dev": true, - "requires": { - "cssesc": "0.1.0", - "fastparse": "1.1.1", - "regexpu-core": "1.0.0" - } - }, - "css-what": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.0.tgz", - "integrity": "sha1-lGfQMsOM+u+58teVASUwYvh/ob0=", - "dev": true - }, - "cssauron": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/cssauron/-/cssauron-1.4.0.tgz", - "integrity": "sha1-pmAt/34EqDBtwNuaVR6S6LVmKtg=", - "dev": true, - "requires": { - "through": "2.3.8" - } - }, - "cssesc": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-0.1.0.tgz", - "integrity": "sha1-yBSQPkViM3GgR3tAEJqq++6t27Q=", - "dev": true - }, - "cssnano": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-3.10.0.tgz", - "integrity": "sha1-Tzj2zqK5sX+gFJDyPx3GjqZcHDg=", - "dev": true, - "requires": { - "autoprefixer": "6.7.7", - "decamelize": "1.2.0", - "defined": "1.0.0", - "has": "1.0.1", - "object-assign": "4.1.1", - "postcss": "5.2.17", - "postcss-calc": "5.3.1", - "postcss-colormin": "2.2.2", - "postcss-convert-values": "2.6.1", - "postcss-discard-comments": "2.0.4", - "postcss-discard-duplicates": "2.1.0", - "postcss-discard-empty": "2.1.0", - "postcss-discard-overridden": "0.1.1", - "postcss-discard-unused": "2.2.3", - "postcss-filter-plugins": "2.0.2", - "postcss-merge-idents": "2.1.7", - "postcss-merge-longhand": "2.0.2", - "postcss-merge-rules": "2.1.2", - "postcss-minify-font-values": "1.0.5", - "postcss-minify-gradients": "1.0.5", - "postcss-minify-params": "1.2.2", - "postcss-minify-selectors": "2.1.1", - "postcss-normalize-charset": "1.1.1", - "postcss-normalize-url": "3.0.8", - "postcss-ordered-values": "2.2.3", - "postcss-reduce-idents": "2.4.0", - "postcss-reduce-initial": "1.0.1", - "postcss-reduce-transforms": "1.0.4", - "postcss-svgo": "2.1.6", - "postcss-unique-selectors": "2.0.2", - "postcss-value-parser": "3.3.0", - "postcss-zindex": "2.2.0" - } - }, - "csso": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/csso/-/csso-2.3.2.tgz", - "integrity": "sha1-3dUsWHAz9J6Utx/FVWnyUuj/X4U=", - "dev": true, - "requires": { - "clap": "1.2.3", - "source-map": "0.5.7" - } - }, - "cuint": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/cuint/-/cuint-0.2.2.tgz", - "integrity": "sha1-QICG1AlVDCYxFVYZ6fp7ytw7mRs=", - "dev": true - }, - "currently-unhandled": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", - "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", - "dev": true, - "requires": { - "array-find-index": "1.0.2" - } - }, - "custom-event": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", - "integrity": "sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU=", - "dev": true - }, - "cyclist": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-0.2.2.tgz", - "integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=", - "dev": true - }, - "d": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", - "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", - "dev": true, - "requires": { - "es5-ext": "0.10.30" - } - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "dev": true, - "requires": { - "assert-plus": "1.0.0" - } - }, - "date-now": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", - "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", - "dev": true - }, - "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" - } - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true - }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "dev": true - }, - "deep-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", - "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=", - "dev": true - }, - "default-require-extensions": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-1.0.0.tgz", - "integrity": "sha1-836hXT4T/9m0N9M+GnW1+5eHTLg=", - "dev": true, - "requires": { - "strip-bom": "2.0.0" - } - }, - "define-properties": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.2.tgz", - "integrity": "sha1-g6c/L+pWmJj7c3GTyPhzyvbUXJQ=", - "dev": true, - "requires": { - "foreach": "2.0.5", - "object-keys": "1.0.11" - } - }, - "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" - } - }, - "defined": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", - "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", - "dev": true - }, - "del": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/del/-/del-3.0.0.tgz", - "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=", - "dev": true, - "requires": { - "globby": "6.1.0", - "is-path-cwd": "1.0.0", - "is-path-in-cwd": "1.0.0", - "p-map": "1.2.0", - "pify": "3.0.0", - "rimraf": "2.6.2" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true - }, - "delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", - "dev": true - }, - "denodeify": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/denodeify/-/denodeify-1.2.1.tgz", - "integrity": "sha1-OjYof1A05pnnV3kBBSwubJQlFjE=", - "dev": true - }, - "depd": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", - "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=", - "dev": true - }, - "des.js": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", - "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", - "dev": true, - "requires": { - "inherits": "2.0.3", - "minimalistic-assert": "1.0.0" - } - }, - "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", - "dev": true - }, - "detect-indent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", - "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", - "dev": true, - "requires": { - "repeating": "2.0.1" - } - }, - "detect-node": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.3.tgz", - "integrity": "sha1-ogM8CcyOFY03dI+951B4Mr1s4Sc=", - "dev": true - }, - "di": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", - "integrity": "sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw=", - "dev": true - }, - "diff": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.3.1.tgz", - "integrity": "sha512-MKPHZDMB0o6yHyDryUOScqZibp914ksXwAMYMTHj6KO8UeKsRYNJD3oNCKjTqZon+V488P7N/HzXF8t7ZR95ww==", - "dev": true - }, - "diffie-hellman": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.2.tgz", - "integrity": "sha1-tYNXOScM/ias9jIJn97SoH8gnl4=", - "dev": true, - "requires": { - "bn.js": "4.11.8", - "miller-rabin": "4.0.0", - "randombytes": "2.0.5" - } - }, - "dir-glob": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.0.0.tgz", - "integrity": "sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag==", - "dev": true, - "requires": { - "arrify": "1.0.1", - "path-type": "3.0.0" - }, - "dependencies": { - "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "dev": true, - "requires": { - "pify": "3.0.0" - } - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } - } - }, - "dns-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=", - "dev": true - }, - "dns-packet": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.2.2.tgz", - "integrity": "sha512-kN+DjfGF7dJGUL7nWRktL9Z18t1rWP3aQlyZdY8XlpvU3Nc6GeFTQApftcjtWKxAZfiggZSGrCEoszNgvnpwDg==", - "dev": true, - "requires": { - "ip": "1.1.5", - "safe-buffer": "5.1.1" - } - }, - "dns-txt": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", - "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", - "dev": true, - "requires": { - "buffer-indexof": "1.1.1" - } - }, - "dom-converter": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.1.4.tgz", - "integrity": "sha1-pF71cnuJDJv/5tfIduexnLDhfzs=", - "dev": true, - "requires": { - "utila": "0.3.3" - }, - "dependencies": { - "utila": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/utila/-/utila-0.3.3.tgz", - "integrity": "sha1-1+jn1+MJEHCSsF+NloiCTWM6QiY=", - "dev": true - } - } - }, - "dom-serialize": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", - "integrity": "sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs=", - "dev": true, - "requires": { - "custom-event": "1.0.1", - "ent": "2.2.0", - "extend": "3.0.1", - "void-elements": "2.0.1" - } - }, - "dom-serializer": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", - "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", - "dev": true, - "requires": { - "domelementtype": "1.1.3", - "entities": "1.1.1" - }, - "dependencies": { - "domelementtype": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", - "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=", - "dev": true - } - } - }, - "domain-browser": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.1.7.tgz", - "integrity": "sha1-hnqksJP6oF8d4IwG9NeyH9+GmLw=", - "dev": true - }, - "domelementtype": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz", - "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=", - "dev": true - }, - "domhandler": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.1.0.tgz", - "integrity": "sha1-0mRvXlf2w7qxHPbLBdPArPdBJZQ=", - "dev": true, - "requires": { - "domelementtype": "1.3.0" - } - }, - "domutils": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", - "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", - "dev": true, - "requires": { - "dom-serializer": "0.1.0", - "domelementtype": "1.3.0" - } - }, - "duplexify": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.5.3.tgz", - "integrity": "sha512-g8ID9OroF9hKt2POf8YLayy+9594PzmM3scI00/uBXocX3TWNgoB67hjzkFe9ITAbQOne/lLdBxHXvYUM4ZgGA==", - "dev": true, - "requires": { - "end-of-stream": "1.4.1", - "inherits": "2.0.3", - "readable-stream": "2.3.3", - "stream-shift": "1.0.0" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "readable-stream": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", - "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "safe-buffer": "5.1.1", - "string_decoder": "1.0.3", - "util-deprecate": "1.0.2" - } - }, - "string_decoder": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", - "dev": true, - "requires": { - "safe-buffer": "5.1.1" - } - } - } - }, - "ecc-jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", - "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", - "dev": true, - "optional": true, - "requires": { - "jsbn": "0.1.1" - } - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", - "dev": true - }, - "ejs": { - "version": "2.5.7", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.5.7.tgz", - "integrity": "sha1-zIcsFoiArjxxiXYv1f/ACJbJUYo=", - "dev": true - }, - "electron-to-chromium": { - "version": "1.3.22", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.22.tgz", - "integrity": "sha1-QyLVLBUUBuPq73StAmdog+hBZBg=", - "dev": true - }, - "elliptic": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz", - "integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=", - "dev": true, - "requires": { - "bn.js": "4.11.8", - "brorand": "1.1.0", - "hash.js": "1.1.3", - "hmac-drbg": "1.0.1", - "inherits": "2.0.3", - "minimalistic-assert": "1.0.0", - "minimalistic-crypto-utils": "1.0.1" - } - }, - "ember-cli-string-utils": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ember-cli-string-utils/-/ember-cli-string-utils-1.1.0.tgz", - "integrity": "sha1-ObZ3/CgF9VFzc1N2/O8njqpEUqE=", - "dev": true - }, - "emojis-list": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", - "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", - "dev": true - }, - "encodeurl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.1.tgz", - "integrity": "sha1-eePVhlU0aQn+bw9Fpd5oEDspTSA=", - "dev": true - }, - "end-of-stream": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", - "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", - "dev": true, - "requires": { - "once": "1.4.0" - } - }, - "engine.io": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-1.8.3.tgz", - "integrity": "sha1-jef5eJXSDTm4X4ju7nd7K9QrE9Q=", - "dev": true, - "requires": { - "accepts": "1.3.3", - "base64id": "1.0.0", - "cookie": "0.3.1", - "debug": "2.3.3", - "engine.io-parser": "1.3.2", - "ws": "1.1.2" - }, - "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" - } - }, - "debug": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", - "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", - "dev": true, - "requires": { - "ms": "0.7.2" - } - }, - "ms": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", - "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", - "dev": true - } - } - }, - "engine.io-client": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-1.8.3.tgz", - "integrity": "sha1-F5jtk0USRkU9TG9jXXogH+lA1as=", - "dev": true, - "requires": { - "component-emitter": "1.2.1", - "component-inherit": "0.0.3", - "debug": "2.3.3", - "engine.io-parser": "1.3.2", - "has-cors": "1.1.0", - "indexof": "0.0.1", - "parsejson": "0.0.3", - "parseqs": "0.0.5", - "parseuri": "0.0.5", - "ws": "1.1.2", - "xmlhttprequest-ssl": "1.5.3", - "yeast": "0.1.2" - }, - "dependencies": { - "component-emitter": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", - "dev": true - }, - "debug": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", - "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", - "dev": true, - "requires": { - "ms": "0.7.2" - } - }, - "ms": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", - "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", - "dev": true - } - } - }, - "engine.io-parser": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-1.3.2.tgz", - "integrity": "sha1-k3sHnwAH0Ik+xW1GyyILjLQ1Igo=", - "dev": true, - "requires": { - "after": "0.8.2", - "arraybuffer.slice": "0.0.6", - "base64-arraybuffer": "0.1.5", - "blob": "0.0.4", - "has-binary": "0.1.7", - "wtf-8": "1.0.0" - } - }, - "enhanced-resolve": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz", - "integrity": "sha1-BCHjOf1xQZs9oT0Smzl5BAIwR24=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "memory-fs": "0.4.1", - "object-assign": "4.1.1", - "tapable": "0.2.8" - } - }, - "ent": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", - "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=", - "dev": true - }, - "entities": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz", - "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=", - "dev": true - }, - "errno": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.4.tgz", - "integrity": "sha1-uJbiOp5ei6M4cfyZar02NfyaHH0=", - "dev": true, - "requires": { - "prr": "0.0.0" - } - }, - "error-ex": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", - "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", - "dev": true, - "requires": { - "is-arrayish": "0.2.1" - } - }, - "es-abstract": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.10.0.tgz", - "integrity": "sha512-/uh/DhdqIOSkAWifU+8nG78vlQxdLckUdI/sPgy0VhuXi2qJ7T8czBmqIYtLQVpCIFYafChnsRsB5pyb1JdmCQ==", - "dev": true, - "requires": { - "es-to-primitive": "1.1.1", - "function-bind": "1.1.1", - "has": "1.0.1", - "is-callable": "1.1.3", - "is-regex": "1.0.4" - } - }, - "es-to-primitive": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.1.1.tgz", - "integrity": "sha1-RTVSSKiJeQNLZ5Lhm7gfK3l13Q0=", - "dev": true, - "requires": { - "is-callable": "1.1.3", - "is-date-object": "1.0.1", - "is-symbol": "1.0.1" - } - }, - "es5-ext": { - "version": "0.10.30", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.30.tgz", - "integrity": "sha1-cUGhaDZpfbq/qq7uQUlc4p9SyTk=", - "dev": true, - "requires": { - "es6-iterator": "2.0.1", - "es6-symbol": "3.1.1" - } - }, - "es6-iterator": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.1.tgz", - "integrity": "sha1-jjGcnwRTv1ddN0lAplWSDlnKVRI=", - "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.30", - "es6-symbol": "3.1.1" - } - }, - "es6-map": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", - "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=", - "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.30", - "es6-iterator": "2.0.1", - "es6-set": "0.1.5", - "es6-symbol": "3.1.1", - "event-emitter": "0.3.5" - } - }, - "es6-set": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz", - "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=", - "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.30", - "es6-iterator": "2.0.1", - "es6-symbol": "3.1.1", - "event-emitter": "0.3.5" - } - }, - "es6-symbol": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", - "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", - "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.30" - } - }, - "es6-weak-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz", - "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=", - "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.30", - "es6-iterator": "2.0.1", - "es6-symbol": "3.1.1" - } - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "escope": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz", - "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=", - "dev": true, - "requires": { - "es6-map": "0.1.5", - "es6-weak-map": "2.0.2", - "esrecurse": "4.2.0", - "estraverse": "4.2.0" - } - }, - "esprima": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", - "dev": true - }, - "esrecurse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.0.tgz", - "integrity": "sha1-+pVo2Y04I/mkHZHpAtyrnqblsWM=", - "dev": true, - "requires": { - "estraverse": "4.2.0", - "object-assign": "4.1.1" - } - }, - "estraverse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", - "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", - "dev": true - }, - "esutils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", - "dev": true - }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", - "dev": true - }, - "event-emitter": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", - "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", - "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.30" - } - }, - "eventemitter3": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-1.2.0.tgz", - "integrity": "sha1-HIaZHYFq0eUEdQ5zh0Ik7PO+xQg=", - "dev": true - }, - "events": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", - "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", - "dev": true - }, - "eventsource": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-0.1.6.tgz", - "integrity": "sha1-Cs7ehJ7X3RzMMsgRuxG5RNTykjI=", - "dev": true, - "requires": { - "original": "1.0.0" - } - }, - "evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "dev": true, - "requires": { - "md5.js": "1.3.4", - "safe-buffer": "5.1.1" - } - }, - "execa": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", - "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", - "dev": true, - "requires": { - "cross-spawn": "5.1.0", - "get-stream": "3.0.0", - "is-stream": "1.1.0", - "npm-run-path": "2.0.2", - "p-finally": "1.0.0", - "signal-exit": "3.0.2", - "strip-eof": "1.0.0" - }, - "dependencies": { - "cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", - "dev": true, - "requires": { - "lru-cache": "4.1.1", - "shebang-command": "1.2.0", - "which": "1.3.0" - } - } - } - }, - "exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", - "dev": true - }, - "expand-braces": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/expand-braces/-/expand-braces-0.1.2.tgz", - "integrity": "sha1-SIsdHSRRyz06axks/AMPRMWFX+o=", - "dev": true, - "requires": { - "array-slice": "0.2.3", - "array-unique": "0.2.1", - "braces": "0.1.5" - }, - "dependencies": { - "braces": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/braces/-/braces-0.1.5.tgz", - "integrity": "sha1-wIVxEIUpHYt1/ddOqw+FlygHEeY=", - "dev": true, - "requires": { - "expand-range": "0.1.1" - } - }, - "expand-range": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-0.1.1.tgz", - "integrity": "sha1-TLjtoJk8pW+k9B/ELzy7TMrf8EQ=", - "dev": true, - "requires": { - "is-number": "0.1.1", - "repeat-string": "0.2.2" - } - }, - "is-number": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-0.1.1.tgz", - "integrity": "sha1-aaevEWlj1HIG7JvZtIoUIW8eOAY=", - "dev": true - }, - "repeat-string": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-0.2.2.tgz", - "integrity": "sha1-x6jTI2BoNiBZp+RlH8aITosftK4=", - "dev": true - } - } - }, - "expand-brackets": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", - "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", - "dev": true, - "requires": { - "is-posix-bracket": "0.1.1" - } - }, - "expand-range": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", - "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", - "dev": true, - "requires": { - "fill-range": "2.2.3" - } - }, - "exports-loader": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/exports-loader/-/exports-loader-0.6.4.tgz", - "integrity": "sha1-1w/GEhl1s1/BKDDPUnVL4nQPyIY=", - "dev": true, - "requires": { - "loader-utils": "1.1.0", - "source-map": "0.5.7" - } - }, - "express": { - "version": "4.16.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.16.2.tgz", - "integrity": "sha1-41xt/i1kt9ygpc1PIXgb4ymeB2w=", - "dev": true, - "requires": { - "accepts": "1.3.4", - "array-flatten": "1.1.1", - "body-parser": "1.18.2", - "content-disposition": "0.5.2", - "content-type": "1.0.4", - "cookie": "0.3.1", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "1.1.1", - "encodeurl": "1.0.1", - "escape-html": "1.0.3", - "etag": "1.8.1", - "finalhandler": "1.1.0", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "1.1.2", - "on-finished": "2.3.0", - "parseurl": "1.3.2", - "path-to-regexp": "0.1.7", - "proxy-addr": "2.0.2", - "qs": "6.5.1", - "range-parser": "1.2.0", - "safe-buffer": "5.1.1", - "send": "0.16.1", - "serve-static": "1.13.1", - "setprototypeof": "1.1.0", - "statuses": "1.3.1", - "type-is": "1.6.15", - "utils-merge": "1.0.1", - "vary": "1.1.2" - }, - "dependencies": { - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", - "dev": true - }, - "finalhandler": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz", - "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=", - "dev": true, - "requires": { - "debug": "2.6.9", - "encodeurl": "1.0.1", - "escape-html": "1.0.3", - "on-finished": "2.3.0", - "parseurl": "1.3.2", - "statuses": "1.3.1", - "unpipe": "1.0.0" - } - }, - "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", - "dev": true - } - } - }, - "extend": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", - "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=", - "dev": true - }, - "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" - } - }, - "extglob": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", - "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", - "dev": true, - "requires": { - "is-extglob": "1.0.0" - } - }, - "extract-text-webpack-plugin": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extract-text-webpack-plugin/-/extract-text-webpack-plugin-3.0.2.tgz", - "integrity": "sha512-bt/LZ4m5Rqt/Crl2HiKuAl/oqg0psx1tsTLkvWbJen1CtD+fftkZhMaQ9HOtY2gWsl2Wq+sABmMVi9z3DhKWQQ==", - "dev": true, - "requires": { - "async": "2.5.0", - "loader-utils": "1.1.0", - "schema-utils": "0.3.0", - "webpack-sources": "1.0.1" - } - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true - }, - "fast-deep-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz", - "integrity": "sha1-liVqO8l1WV6zbYLpkp0GDYk0Of8=", - "dev": true - }, - "fast-json-stable-stringify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", - "dev": true - }, - "fastparse": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.1.tgz", - "integrity": "sha1-0eJkOzipTXWDtHkGDmxK/8lAcfg=", - "dev": true - }, - "faye-websocket": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", - "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", - "dev": true, - "requires": { - "websocket-driver": "0.7.0" - } - }, - "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==", - "dev": true, - "requires": { - "loader-utils": "1.1.0", - "schema-utils": "0.3.0" - } - }, - "filename-regex": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", - "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", - "dev": true - }, - "fileset": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/fileset/-/fileset-2.0.3.tgz", - "integrity": "sha1-jnVIqW08wjJ+5eZ0FocjozO7oqA=", - "dev": true, - "requires": { - "glob": "7.1.2", - "minimatch": "3.0.4" - } - }, - "fill-range": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", - "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", - "dev": true, - "requires": { - "is-number": "2.1.0", - "isobject": "2.1.0", - "randomatic": "1.1.7", - "repeat-element": "1.1.2", - "repeat-string": "1.6.1" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "finalhandler": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.0.6.tgz", - "integrity": "sha1-AHrqM9Gk0+QgF/YkhIrVjSEvgU8=", - "dev": true, - "requires": { - "debug": "2.6.9", - "encodeurl": "1.0.1", - "escape-html": "1.0.3", - "on-finished": "2.3.0", - "parseurl": "1.3.2", - "statuses": "1.3.1", - "unpipe": "1.0.0" - } - }, - "find-cache-dir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-1.0.0.tgz", - "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=", - "dev": true, - "requires": { - "commondir": "1.0.1", - "make-dir": "1.1.0", - "pkg-dir": "2.0.0" - } - }, - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "dev": true, - "requires": { - "path-exists": "2.1.0", - "pinkie-promise": "2.0.1" - } - }, - "flatten": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.2.tgz", - "integrity": "sha1-2uRqnXj74lKSJYzB54CkHZXAN4I=", - "dev": true - }, - "flush-write-stream": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.0.2.tgz", - "integrity": "sha1-yBuQ2HRnZvGmCaRoCZRsRd2K5Bc=", - "dev": true, - "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.3" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "readable-stream": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", - "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "safe-buffer": "5.1.1", - "string_decoder": "1.0.3", - "util-deprecate": "1.0.2" - } - }, - "string_decoder": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", - "dev": true, - "requires": { - "safe-buffer": "5.1.1" - } - } - } - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true - }, - "for-own": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", - "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", - "dev": true, - "requires": { - "for-in": "1.0.2" - } - }, - "foreach": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", - "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", - "dev": true - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "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=", - "dev": true, - "requires": { - "asynckit": "0.4.0", - "combined-stream": "1.0.5", - "mime-types": "2.1.17" - } - }, - "forwarded": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", - "dev": true - }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "dev": true, - "requires": { - "map-cache": "0.2.2" - } - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", - "dev": true - }, - "from2": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", - "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", - "dev": true, - "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.3" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "readable-stream": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", - "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "safe-buffer": "5.1.1", - "string_decoder": "1.0.3", - "util-deprecate": "1.0.2" - } - }, - "string_decoder": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", - "dev": true, - "requires": { - "safe-buffer": "5.1.1" - } - } - } - }, - "fs-access": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/fs-access/-/fs-access-1.0.1.tgz", - "integrity": "sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o=", - "dev": true, - "requires": { - "null-check": "1.0.0" - } - }, - "fs-extra": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.2.tgz", - "integrity": "sha1-+RcExT0bRh+JNFKwwwfZmXZHq2s=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "jsonfile": "4.0.0", - "universalify": "0.1.1" - } - }, - "fs-write-stream-atomic": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", - "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "iferr": "0.1.5", - "imurmurhash": "0.1.4", - "readable-stream": "1.0.34" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "fstream": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", - "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "inherits": "2.0.3", - "mkdirp": "0.5.1", - "rimraf": "2.6.2" - } - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", - "dev": true, - "requires": { - "aproba": "1.2.0", - "console-control-strings": "1.1.0", - "has-unicode": "2.0.1", - "object-assign": "4.1.1", - "signal-exit": "3.0.2", - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wide-align": "1.1.2" - }, - "dependencies": { - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "1.0.1" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" - } - } - } - }, - "gaze": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.2.tgz", - "integrity": "sha1-hHIkZ3rbiHDWeSV+0ziP22HkAQU=", - "dev": true, - "optional": true, - "requires": { - "globule": "1.2.0" - } - }, - "generate-function": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz", - "integrity": "sha1-aFj+fAlpt9TpCTM3ZHrHn2DfvnQ=", - "dev": true, - "optional": true - }, - "generate-object-property": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", - "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=", - "dev": true, - "optional": true, - "requires": { - "is-property": "1.0.2" - } - }, - "get-caller-file": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz", - "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=", - "dev": true - }, - "get-stdin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", - "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", - "dev": true - }, - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "dev": true - }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "dev": true - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dev": true, - "requires": { - "assert-plus": "1.0.0" - } - }, - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, - "glob-base": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", - "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", - "dev": true, - "requires": { - "glob-parent": "2.0.0", - "is-glob": "2.0.1" - } - }, - "glob-parent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", - "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", - "dev": true, - "requires": { - "is-glob": "2.0.1" - } - }, - "globals": { - "version": "9.18.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", - "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", - "dev": true - }, - "globby": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", - "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", - "dev": true, - "requires": { - "array-union": "1.0.2", - "glob": "7.1.2", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" - } - }, - "globule": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/globule/-/globule-1.2.0.tgz", - "integrity": "sha1-HcScaCLdnoovoAuiopUAboZkvQk=", - "dev": true, - "optional": true, - "requires": { - "glob": "7.1.2", - "lodash": "4.17.4", - "minimatch": "3.0.4" - } - }, - "graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", - "dev": true - }, - "handle-thing": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-1.2.5.tgz", - "integrity": "sha1-/Xqtcmvxpf0W38KbL3pmAdJxOcQ=", - "dev": true - }, - "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.2.3", - "har-schema": "2.0.0" - } - }, - "has": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz", - "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=", - "dev": true, - "requires": { - "function-bind": "1.1.1" - } - }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - }, - "has-binary": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/has-binary/-/has-binary-0.1.7.tgz", - "integrity": "sha1-aOYesWIQyVRaClzOBqhzkS/h5ow=", - "dev": true, - "requires": { - "isarray": "0.0.1" - } - }, - "has-cors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", - "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=", - "dev": true - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true - }, - "has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", - "dev": true - }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "dev": true, - "requires": { - "get-value": "2.0.6", - "has-values": "1.0.0", - "isobject": "3.0.1" - } - }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "dev": true, - "requires": { - "is-number": "3.0.0", - "kind-of": "4.0.0" - }, - "dependencies": { - "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.5" - } - } - } - }, - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "requires": { - "is-buffer": "1.1.5" - } - } - } - }, - "hash-base": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-2.0.2.tgz", - "integrity": "sha1-ZuodhW206KVHDK32/OI65SRO8uE=", - "dev": true, - "requires": { - "inherits": "2.0.3" - } - }, - "hash.js": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", - "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", - "dev": true, - "requires": { - "inherits": "2.0.3", - "minimalistic-assert": "1.0.0" - } - }, - "hawk": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/hawk/-/hawk-6.0.2.tgz", - "integrity": "sha512-miowhl2+U7Qle4vdLqDdPt9m09K6yZhkLDTWGoUiUzrQCn+mHHSmfJgAyGaLRZbPmTqfFFjRV1QWCW0VWUJBbQ==", - "dev": true, - "requires": { - "boom": "4.3.1", - "cryptiles": "3.1.2", - "hoek": "4.2.0", - "sntp": "2.0.2" - } - }, - "he": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", - "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", - "dev": true - }, - "hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", - "dev": true, - "requires": { - "hash.js": "1.1.3", - "minimalistic-assert": "1.0.0", - "minimalistic-crypto-utils": "1.0.1" - } - }, - "hoek": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz", - "integrity": "sha512-v0XCLxICi9nPfYrS9RL8HbYnXi9obYAeLbSP00BmnZwCK9+Ih9WOjoZ8YoHCoav2csqn4FOz4Orldsy2dmDwmQ==", - "dev": true - }, - "homedir-polyfill": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz", - "integrity": "sha1-TCu8inWJmP7r9e1oWA921GdotLw=", - "dev": true, - "requires": { - "parse-passwd": "1.0.0" - } - }, - "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==", - "dev": true - }, - "hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", - "dev": true, - "requires": { - "inherits": "2.0.3", - "obuf": "1.1.1", - "readable-stream": "2.3.3", - "wbuf": "1.7.2" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "readable-stream": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", - "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "safe-buffer": "5.1.1", - "string_decoder": "1.0.3", - "util-deprecate": "1.0.2" - } - }, - "string_decoder": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", - "dev": true, - "requires": { - "safe-buffer": "5.1.1" - } - } - } - }, - "html-comment-regex": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.1.tgz", - "integrity": "sha1-ZouTd26q5V696POtRkswekljYl4=", - "dev": true - }, - "html-entities": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.2.1.tgz", - "integrity": "sha1-DfKTUfByEWNRXfueVUPl9u7VFi8=", - "dev": true - }, - "html-minifier": { - "version": "3.5.5", - "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.5.tgz", - "integrity": "sha512-g+1+NBycQI0fGnggd52JM8TRUweG7+9W2wrtjGitMAqc4G7maweAHvVAAjz9veHseIH3tYKE2lk2USGSoewIrQ==", - "dev": true, - "requires": { - "camel-case": "3.0.0", - "clean-css": "4.1.9", - "commander": "2.11.0", - "he": "1.1.1", - "ncname": "1.0.0", - "param-case": "2.1.1", - "relateurl": "0.2.7", - "uglify-js": "3.1.2" - } - }, - "html-webpack-plugin": { - "version": "2.30.1", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-2.30.1.tgz", - "integrity": "sha1-f5xCG36pHsRg9WUn1430hO51N9U=", - "dev": true, - "requires": { - "bluebird": "3.5.0", - "html-minifier": "3.5.5", - "loader-utils": "0.2.17", - "lodash": "4.17.4", - "pretty-error": "2.1.1", - "toposort": "1.0.3" - }, - "dependencies": { - "loader-utils": { - "version": "0.2.17", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", - "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", - "dev": true, - "requires": { - "big.js": "3.2.0", - "emojis-list": "2.1.0", - "json5": "0.5.1", - "object-assign": "4.1.1" - } - } - } - }, - "htmlparser2": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.3.0.tgz", - "integrity": "sha1-zHDQWln2VC5D8OaFyYLhTJJKnv4=", - "dev": true, - "requires": { - "domelementtype": "1.3.0", - "domhandler": "2.1.0", - "domutils": "1.1.6", - "readable-stream": "1.0.34" - }, - "dependencies": { - "domutils": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.1.6.tgz", - "integrity": "sha1-vdw94Jm5ou+sxRxiPyj0FuzFdIU=", - "dev": true, - "requires": { - "domelementtype": "1.3.0" - } - } - } - }, - "http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=", - "dev": true - }, - "http-errors": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", - "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", - "dev": true, - "requires": { - "depd": "1.1.1", - "inherits": "2.0.3", - "setprototypeof": "1.0.3", - "statuses": "1.3.1" - } - }, - "http-parser-js": { - "version": "0.4.8", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.8.tgz", - "integrity": "sha512-jmHp99g6/fLx0pRNJqzsQgjsclCHAY7NhIeA3/U+bsGNvgbvUCQFQY9m5AYpqpAxY/2VcikfbKpjQozSTiz0jA==", - "dev": true - }, - "http-proxy": { - "version": "1.16.2", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.16.2.tgz", - "integrity": "sha1-Bt/ykpUr9k2+hHH6nfcwZtTzd0I=", - "dev": true, - "requires": { - "eventemitter3": "1.2.0", - "requires-port": "1.0.0" - } - }, - "http-proxy-middleware": { - "version": "0.17.4", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.17.4.tgz", - "integrity": "sha1-ZC6ISIUdZvCdTxJJEoRtuutBuDM=", - "dev": true, - "requires": { - "http-proxy": "1.16.2", - "is-glob": "3.1.0", - "lodash": "4.17.4", - "micromatch": "2.3.11" - }, - "dependencies": { - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "2.1.1" - } - } - } - }, - "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" - } - }, - "https-browserify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-0.0.1.tgz", - "integrity": "sha1-P5E2XKvmC3ftDruiS0VOPgnZWoI=", - "dev": true - }, - "https-proxy-agent": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-1.0.0.tgz", - "integrity": "sha1-NffabEjOTdv6JkiRrFk+5f+GceY=", - "dev": true, - "requires": { - "agent-base": "2.1.1", - "debug": "2.6.9", - "extend": "3.0.1" - } - }, - "iconv-lite": { - "version": "0.4.19", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", - "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==", - "dev": true - }, - "icss-replace-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz", - "integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=", - "dev": true - }, - "icss-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-2.1.0.tgz", - "integrity": "sha1-g/Cg7DeL8yRheLbCrZE28TWxyWI=", - "dev": true, - "requires": { - "postcss": "6.0.12" - }, - "dependencies": { - "has-flag": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", - "dev": true - }, - "postcss": { - "version": "6.0.12", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.12.tgz", - "integrity": "sha512-K6SLofXEK43FBSyZ6/ExQV7ji24OEw4tEY6x1CAf7+tcoMWJoO24Rf3rVFVpk+5IQL1e1Cy3sTKfg7hXuLzafg==", - "dev": true, - "requires": { - "chalk": "2.1.0", - "source-map": "0.5.7", - "supports-color": "4.4.0" - } - }, - "supports-color": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz", - "integrity": "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==", - "dev": true, - "requires": { - "has-flag": "2.0.0" - } - } - } - }, - "ieee754": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.8.tgz", - "integrity": "sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q=", - "dev": true - }, - "iferr": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", - "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", - "dev": true - }, - "ignore": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.7.tgz", - "integrity": "sha512-YGG3ejvBNHRqu0559EOxxNFihD0AjpvHlC/pdGKd3X3ofe+CoJkYazwNJYTNebqpPKN+VVQbh4ZFn1DivMNuHA==", - "dev": true - }, - "image-size": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", - "integrity": "sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=", - "dev": true, - "optional": true - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true - }, - "in-publish": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.0.tgz", - "integrity": "sha1-4g/146KvwmkDILbcVSaCqcf631E=", - "dev": true, - "optional": true - }, - "indent-string": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", - "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", - "dev": true, - "requires": { - "repeating": "2.0.1" - } - }, - "indexes-of": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", - "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", - "dev": true - }, - "indexof": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", - "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "ini": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz", - "integrity": "sha1-BTfLedr1m1mhpRff9wbIbsA5Fi4=", - "dev": true - }, - "internal-ip": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-1.2.0.tgz", - "integrity": "sha1-rp+/k7mEh4eF1QqN4bNWlWBYz1w=", - "dev": true, - "requires": { - "meow": "3.7.0" - } - }, - "interpret": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.0.4.tgz", - "integrity": "sha1-ggzdWIuGj/sZGoCVBtbJyPISsbA=", - "dev": true - }, - "invariant": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz", - "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=", - "dev": true, - "requires": { - "loose-envify": "1.3.1" - } - }, - "invert-kv": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", - "dev": true - }, - "ip": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", - "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", - "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=", - "dev": true - }, - "is-absolute-url": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", - "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=", - "dev": true - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "6.0.2" - }, - "dependencies": { - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - } - } - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "dev": true, - "requires": { - "binary-extensions": "1.10.0" - } - }, - "is-buffer": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.5.tgz", - "integrity": "sha1-Hzsm72E7IUuIy8ojzGwB2Hlh7sw=", - "dev": true - }, - "is-builtin-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", - "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", - "dev": true, - "requires": { - "builtin-modules": "1.1.1" - } - }, - "is-callable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.3.tgz", - "integrity": "sha1-hut1OSgF3cM69xySoO7fdO52BLI=", - "dev": true - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "6.0.2" - }, - "dependencies": { - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - } - } - }, - "is-date-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", - "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", - "dev": true - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" - }, - "dependencies": { - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - } - } - }, - "is-directory": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", - "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", - "dev": true - }, - "is-dotfile": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", - "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", - "dev": true - }, - "is-equal-shallow": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", - "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", - "dev": true, - "requires": { - "is-primitive": "2.0.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - }, - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true - }, - "is-finite": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", - "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", - "dev": true, - "requires": { - "number-is-nan": "1.0.1" - } - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dev": true, - "requires": { - "is-extglob": "1.0.0" - } - }, - "is-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==", - "dev": true, - "optional": true, - "requires": { - "generate-function": "2.0.0", - "generate-object-property": "1.2.0", - "jsonpointer": "4.0.1", - "xtend": "4.0.1" - } - }, - "is-number": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", - "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - } - }, - "is-odd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-odd/-/is-odd-1.0.0.tgz", - "integrity": "sha1-O4qTLrAos3dcObsJ6RdnrM22kIg=", - "dev": true, - "requires": { - "is-number": "3.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" - } - } - } - }, - "is-path-cwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", - "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", - "dev": true - }, - "is-path-in-cwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz", - "integrity": "sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=", - "dev": true, - "requires": { - "is-path-inside": "1.0.0" - } - }, - "is-path-inside": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.0.tgz", - "integrity": "sha1-/AbloWg/vaE95mev9xe7wQpI838=", - "dev": true, - "requires": { - "path-is-inside": "1.0.2" - } - }, - "is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", - "dev": true - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "3.0.1" - } - }, - "is-posix-bracket": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", - "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", - "dev": true - }, - "is-primitive": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", - "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", - "dev": true - }, - "is-property": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", - "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=", - "dev": true, - "optional": true - }, - "is-regex": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", - "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", - "dev": true, - "requires": { - "has": "1.0.1" - } - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "dev": true - }, - "is-svg": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-2.1.0.tgz", - "integrity": "sha1-z2EJDaDZ77yrhyLeum8DIgjbsOk=", - "dev": true, - "requires": { - "html-comment-regex": "1.1.1" - } - }, - "is-symbol": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.1.tgz", - "integrity": "sha1-PMWfAAJRlLarLjjbrmaJJWtmBXI=", - "dev": true - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, - "is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", - "dev": true - }, - "is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", - "dev": true - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "isbinaryfile": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.2.tgz", - "integrity": "sha1-Sj6XTsDLqQBNP8bN5yCeppNopiE=", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true - }, - "istanbul-api": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/istanbul-api/-/istanbul-api-1.1.14.tgz", - "integrity": "sha1-JbxXAffGgMD//5E95G42GaOm5oA=", - "dev": true, - "requires": { - "async": "2.5.0", - "fileset": "2.0.3", - "istanbul-lib-coverage": "1.1.1", - "istanbul-lib-hook": "1.0.7", - "istanbul-lib-instrument": "1.8.0", - "istanbul-lib-report": "1.1.1", - "istanbul-lib-source-maps": "1.2.1", - "istanbul-reports": "1.1.2", - "js-yaml": "3.7.0", - "mkdirp": "0.5.1", - "once": "1.4.0" - } - }, - "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==", - "dev": true - }, - "istanbul-lib-hook": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-1.0.7.tgz", - "integrity": "sha512-3U2HB9y1ZV9UmFlE12Fx+nPtFqIymzrqCksrXujm3NVbAZIJg/RfYgO1XiIa0mbmxTjWpVEVlkIZJ25xVIAfkQ==", - "dev": true, - "requires": { - "append-transform": "0.4.0" - } - }, - "istanbul-lib-instrument": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-1.8.0.tgz", - "integrity": "sha1-ZvbJQhzJ7EcE928tsIS6kHiitTI=", - "dev": true, - "requires": { - "babel-generator": "6.26.0", - "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", - "semver": "5.4.1" - } - }, - "istanbul-lib-report": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-1.1.1.tgz", - "integrity": "sha512-tvF+YmCmH4thnez6JFX06ujIA19WPa9YUiwjc1uALF2cv5dmE3It8b5I8Ob7FHJ70H9Y5yF+TDkVa/mcADuw1Q==", - "dev": true, - "requires": { - "istanbul-lib-coverage": "1.1.1", - "mkdirp": "0.5.1", - "path-parse": "1.0.5", - "supports-color": "3.2.3" - } - }, - "istanbul-lib-source-maps": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.1.tgz", - "integrity": "sha512-mukVvSXCn9JQvdJl8wP/iPhqig0MRtuWuD4ZNKo6vB2Ik//AmhAKe3QnPN02dmkRe3lTudFk3rzoHhwU4hb94w==", - "dev": true, - "requires": { - "debug": "2.6.9", - "istanbul-lib-coverage": "1.1.1", - "mkdirp": "0.5.1", - "rimraf": "2.6.2", - "source-map": "0.5.7" - } - }, - "istanbul-reports": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-1.1.2.tgz", - "integrity": "sha1-D7Lj9qqZIr085F0F2KtNXo4HvU8=", - "dev": true, - "requires": { - "handlebars": "4.0.10" - }, - "dependencies": { - "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", - "dev": true - }, - "camelcase": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", - "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", - "dev": true, - "optional": true - }, - "cliui": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", - "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", - "dev": true, - "optional": true, - "requires": { - "center-align": "0.1.3", - "right-align": "0.1.3", - "wordwrap": "0.0.2" - }, - "dependencies": { - "wordwrap": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", - "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", - "dev": true, - "optional": true - } - } - }, - "handlebars": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.10.tgz", - "integrity": "sha1-PTDHGLCaPZbyPqTMH0A8TTup/08=", - "dev": true, - "requires": { - "async": "1.5.2", - "optimist": "0.6.1", - "source-map": "0.4.4", - "uglify-js": "2.8.29" - } - }, - "optimist": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", - "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", - "dev": true, - "requires": { - "minimist": "0.0.8", - "wordwrap": "0.0.3" - } - }, - "source-map": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", - "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", - "dev": true, - "requires": { - "amdefine": "1.0.1" - } - }, - "uglify-js": { - "version": "2.8.29", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", - "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", - "dev": true, - "optional": true, - "requires": { - "source-map": "0.5.7", - "uglify-to-browserify": "1.0.2", - "yargs": "3.10.0" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true, - "optional": true - } - } - }, - "yargs": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", - "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", - "dev": true, - "optional": true, - "requires": { - "camelcase": "1.2.1", - "cliui": "2.1.0", - "decamelize": "1.2.0", - "window-size": "0.1.0" - } - } - } - }, - "jasmine": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-2.8.0.tgz", - "integrity": "sha1-awicChFXax8W3xG4AUbZHU6Lij4=", - "dev": true, - "requires": { - "exit": "0.1.2", - "glob": "7.1.2", - "jasmine-core": "2.8.0" - }, - "dependencies": { - "jasmine-core": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-2.8.0.tgz", - "integrity": "sha1-vMl5rh+f0FcB5F5S5l06XWPxok4=", - "dev": true - } - } - }, - "jasmine-core": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-2.6.4.tgz", - "integrity": "sha1-3skmzQqfoof7bbXHVfpIfnTOysU=", - "dev": true - }, - "jasmine-spec-reporter": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/jasmine-spec-reporter/-/jasmine-spec-reporter-4.1.1.tgz", - "integrity": "sha1-Wm1Yq11hvqcwn7wnkjlRF1axtYg=", - "dev": true, - "requires": { - "colors": "1.1.2" - } - }, - "jasminewd2": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/jasminewd2/-/jasminewd2-2.1.0.tgz", - "integrity": "sha1-2llSddGuYx3nNqwKfH2Fyfc+9lI=", - "dev": true - }, - "jquery": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.2.1.tgz", - "integrity": "sha1-XE2d5lKvbNCncBVKYxu6ErAVx4c=" - }, - "jquery-ui": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/jquery-ui/-/jquery-ui-1.12.1.tgz", - "integrity": "sha1-vLQEXI3QU5wTS8FIjN0+dop6nlE=" - }, - "js-base64": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.3.2.tgz", - "integrity": "sha512-Y2/+DnfJJXT1/FCwUebUhLWb3QihxiSC42+ctHLGogmW2jPY6LCapMdFZXRvVP2z6qyKW7s6qncE/9gSqZiArw==", - "dev": true - }, - "js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", - "dev": true - }, - "js-yaml": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.7.0.tgz", - "integrity": "sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A=", - "dev": true, - "requires": { - "argparse": "1.0.9", - "esprima": "2.7.3" - } - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true, - "optional": true - }, - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", - "dev": true - }, - "json-loader": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/json-loader/-/json-loader-0.5.7.tgz", - "integrity": "sha512-QLPs8Dj7lnf3e3QYS1zkCo+4ZwqOiF9d/nZnYozTISxXWCfNs9yuky5rJw4/W34s7POaNlbZmQGaB5NiXCbP4w==", - "dev": true - }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "dev": true - }, - "json-schema-traverse": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", - "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", - "dev": true - }, - "json-stable-stringify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", - "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", - "dev": true, - "requires": { - "jsonify": "0.0.0" - } - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true - }, - "json3": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz", - "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=", - "dev": true - }, - "json5": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", - "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", - "dev": true - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11" - } - }, - "jsonify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", - "dev": true - }, - "jsonpointer": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz", - "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk=", - "dev": true, - "optional": true - }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "dev": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, - "karma": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/karma/-/karma-1.7.1.tgz", - "integrity": "sha512-k5pBjHDhmkdaUccnC7gE3mBzZjcxyxYsYVaqiL2G5AqlfLyBO5nw2VdNK+O16cveEPd/gIOWULH7gkiYYwVNHg==", - "dev": true, - "requires": { - "bluebird": "3.5.0", - "body-parser": "1.18.2", - "chokidar": "1.7.0", - "colors": "1.1.2", - "combine-lists": "1.0.1", - "connect": "3.6.5", - "core-js": "2.5.1", - "di": "0.0.1", - "dom-serialize": "2.2.1", - "expand-braces": "0.1.2", - "glob": "7.1.2", - "graceful-fs": "4.1.11", - "http-proxy": "1.16.2", - "isbinaryfile": "3.0.2", - "lodash": "3.10.1", - "log4js": "0.6.38", - "mime": "1.4.1", - "minimatch": "3.0.4", - "optimist": "0.6.1", - "qjobs": "1.1.5", - "range-parser": "1.2.0", - "rimraf": "2.6.2", - "safe-buffer": "5.1.1", - "socket.io": "1.7.3", - "source-map": "0.5.7", - "tmp": "0.0.31", - "useragent": "2.2.1" - }, - "dependencies": { - "lodash": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", - "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", - "dev": true - }, - "optimist": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", - "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", - "dev": true, - "requires": { - "minimist": "0.0.8", - "wordwrap": "0.0.3" - } - }, - "tmp": { - "version": "0.0.31", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.31.tgz", - "integrity": "sha1-jzirlDjhcxXl29izZX6L+yd65Kc=", - "dev": true, - "requires": { - "os-tmpdir": "1.0.2" - } - } - } - }, - "karma-chrome-launcher": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-2.1.1.tgz", - "integrity": "sha1-IWh5xorATY1RQOmWGboEtZr9Rs8=", - "dev": true, - "requires": { - "fs-access": "1.0.1", - "which": "1.3.0" - } - }, - "karma-cli": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/karma-cli/-/karma-cli-1.0.1.tgz", - "integrity": "sha1-rmw8WKMTodALRRZMRVubhs4X+WA=", - "dev": true, - "requires": { - "resolve": "1.4.0" - } - }, - "karma-coverage-istanbul-reporter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/karma-coverage-istanbul-reporter/-/karma-coverage-istanbul-reporter-1.3.0.tgz", - "integrity": "sha1-0ULNnFVzHJ42Pvc3To7xoxvr+ts=", - "dev": true, - "requires": { - "istanbul-api": "1.1.14", - "minimatch": "3.0.4" - } - }, - "karma-jasmine": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/karma-jasmine/-/karma-jasmine-1.1.0.tgz", - "integrity": "sha1-IuTAa/mhguUpTR9wXjczgRuBCs8=", - "dev": true - }, - "karma-jasmine-html-reporter": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/karma-jasmine-html-reporter/-/karma-jasmine-html-reporter-0.2.2.tgz", - "integrity": "sha1-SKjl7xiAdhfuK14zwRlMNbQ5Ukw=", - "dev": true, - "requires": { - "karma-jasmine": "1.1.0" - } - }, - "karma-source-map-support": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/karma-source-map-support/-/karma-source-map-support-1.2.0.tgz", - "integrity": "sha1-G/gee7SwiWJ6s1LsQXnhF8QGpUA=", - "dev": true, - "requires": { - "source-map-support": "0.4.18" - } - }, - "killable": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.0.tgz", - "integrity": "sha1-2ouEvUfeU5WHj5XWTQLyRJ/gXms=", - "dev": true - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.5" - } - }, - "lazy-cache": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-0.2.7.tgz", - "integrity": "sha1-f+3fLctu23fRHvHRF6tf/fCrG2U=", - "dev": true - }, - "lcid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", - "dev": true, - "requires": { - "invert-kv": "1.0.0" - } - }, - "less": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/less/-/less-2.7.2.tgz", - "integrity": "sha1-No1sxz4fsDmBGDKAkYdDxdz5s98=", - "dev": true, - "requires": { - "errno": "0.1.4", - "graceful-fs": "4.1.11", - "image-size": "0.5.5", - "mime": "1.4.1", - "mkdirp": "0.5.1", - "promise": "7.3.1", - "request": "2.82.0", - "source-map": "0.5.7" - } - }, - "less-loader": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-4.0.5.tgz", - "integrity": "sha1-rhVadAbKxqzSk9eFWH/P8PR4xN0=", - "dev": true, - "requires": { - "clone": "2.1.1", - "loader-utils": "1.1.0", - "pify": "2.3.0" - }, - "dependencies": { - "clone": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.1.tgz", - "integrity": "sha1-0hfR6WERjjrJpLi7oyhVU79kfNs=", - "dev": true - } - } - }, - "license-webpack-plugin": { - "version": "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==", - "dev": true, - "requires": { - "ejs": "2.5.7" - } - }, - "load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "parse-json": "2.2.0", - "pify": "2.3.0", - "pinkie-promise": "2.0.1", - "strip-bom": "2.0.0" - } - }, - "loader-runner": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.3.0.tgz", - "integrity": "sha1-9IKuqC1UPgeSFwDVpG7yb9rGuKI=", - "dev": true - }, - "loader-utils": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", - "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", - "dev": true, - "requires": { - "big.js": "3.2.0", - "emojis-list": "2.1.0", - "json5": "0.5.1" - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "requires": { - "p-locate": "2.0.0", - "path-exists": "3.0.0" - }, - "dependencies": { - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - } - } - }, - "lodash": { - "version": "4.17.4", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", - "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=" - }, - "lodash.assign": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", - "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=", - "dev": true, - "optional": true - }, - "lodash.camelcase": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=", - "dev": true - }, - "lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", - "dev": true - }, - "lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", - "dev": true - }, - "lodash.mergewith": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.0.tgz", - "integrity": "sha1-FQzwoWeR9ZA7iJHqsVRgknS96lU=", - "dev": true, - "optional": true - }, - "lodash.tail": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.tail/-/lodash.tail-4.1.1.tgz", - "integrity": "sha1-0jM6NtnncXyK0vfKyv7HwytERmQ=", - "dev": true - }, - "lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", - "dev": true - }, - "log4js": { - "version": "0.6.38", - "resolved": "https://registry.npmjs.org/log4js/-/log4js-0.6.38.tgz", - "integrity": "sha1-LElBFmldb7JUgJQ9P8hy5mKlIv0=", - "dev": true, - "requires": { - "readable-stream": "1.0.34", - "semver": "4.3.6" - }, - "dependencies": { - "semver": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz", - "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=", - "dev": true - } - } - }, - "loglevel": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.1.tgz", - "integrity": "sha1-4PyVEztu8nbNyIh82vJKpvFW+Po=", - "dev": true - }, - "longest": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", - "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", - "dev": true - }, - "loose-envify": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", - "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", - "dev": true, - "requires": { - "js-tokens": "3.0.2" - } - }, - "loud-rejection": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", - "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", - "dev": true, - "requires": { - "currently-unhandled": "0.4.1", - "signal-exit": "3.0.2" - } - }, - "lower-case": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", - "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=", - "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==", - "dev": true, - "requires": { - "pseudomap": "1.0.2", - "yallist": "2.1.2" - } - }, - "macaddress": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/macaddress/-/macaddress-0.2.8.tgz", - "integrity": "sha1-WQTcU3w57G2+/q6QIycTX6hRHxI=", - "dev": true - }, - "magic-string": { - "version": "0.22.4", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.22.4.tgz", - "integrity": "sha512-kxBL06p6iO2qPBHsqGK2b3cRwiRGpnmSuVWNhwHcMX7qJOUr1HvricYP1LZOCdkQBUp0jiWg2d6WJwR3vYgByw==", - "dev": true, - "requires": { - "vlq": "0.2.2" - } - }, - "make-dir": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.1.0.tgz", - "integrity": "sha512-0Pkui4wLJ7rxvmfUvs87skoEaxmu0hCUApF8nonzpl7q//FWp9zu8W61Scz4sd/kUiqDxvUhtoam2efDyiBzcA==", - "dev": true, - "requires": { - "pify": "3.0.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } - } - }, - "make-error": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.0.tgz", - "integrity": "sha1-Uq06M5zPEM5itAQLcI/nByRLi5Y=", - "dev": true - }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true - }, - "map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", - "dev": true - }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "dev": true, - "requires": { - "object-visit": "1.0.1" - } - }, - "math-expression-evaluator": { - "version": "1.2.17", - "resolved": "https://registry.npmjs.org/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz", - "integrity": "sha1-3oGf282E3M2PrlnGrreWFbnSZqw=", - "dev": true - }, - "md5.js": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.4.tgz", - "integrity": "sha1-6b296UogpawYsENA/Fdk1bCdkB0=", - "dev": true, - "requires": { - "hash-base": "3.0.4", - "inherits": "2.0.3" - }, - "dependencies": { - "hash-base": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", - "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", - "dev": true, - "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.1" - } - } - } - }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", - "dev": true - }, - "mem": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", - "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", - "dev": true, - "requires": { - "mimic-fn": "1.1.0" - } - }, - "memory-fs": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", - "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", - "dev": true, - "requires": { - "errno": "0.1.4", - "readable-stream": "2.3.3" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "readable-stream": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", - "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "safe-buffer": "5.1.1", - "string_decoder": "1.0.3", - "util-deprecate": "1.0.2" - } - }, - "string_decoder": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", - "dev": true, - "requires": { - "safe-buffer": "5.1.1" - } - } - } - }, - "meow": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", - "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", - "dev": true, - "requires": { - "camelcase-keys": "2.1.0", - "decamelize": "1.2.0", - "loud-rejection": "1.6.0", - "map-obj": "1.0.1", - "minimist": "1.2.0", - "normalize-package-data": "2.4.0", - "object-assign": "4.1.1", - "read-pkg-up": "1.0.1", - "redent": "1.0.0", - "trim-newlines": "1.0.0" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - } - } - }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", - "dev": true - }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", - "dev": true - }, - "micromatch": { - "version": "2.3.11", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", - "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", - "dev": true, - "requires": { - "arr-diff": "2.0.0", - "array-unique": "0.2.1", - "braces": "1.8.5", - "expand-brackets": "0.1.5", - "extglob": "0.3.2", - "filename-regex": "2.0.1", - "is-extglob": "1.0.0", - "is-glob": "2.0.1", - "kind-of": "3.2.2", - "normalize-path": "2.1.1", - "object.omit": "2.0.1", - "parse-glob": "3.0.4", - "regex-cache": "0.4.4" - } - }, - "miller-rabin": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.0.tgz", - "integrity": "sha1-SmL7HUKTPAVYOYL0xxb2+55sbT0=", - "dev": true, - "requires": { - "bn.js": "4.11.8", - "brorand": "1.1.0" - } - }, - "mime": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", - "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==", - "dev": true - }, - "mime-db": { - "version": "1.30.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz", - "integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE=", - "dev": true - }, - "mime-types": { - "version": "2.1.17", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz", - "integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=", - "dev": true, - "requires": { - "mime-db": "1.30.0" - } - }, - "mimic-fn": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.1.0.tgz", - "integrity": "sha1-5md4PZLonb00KBi1IwudYqZyrRg=", - "dev": true - }, - "minimalistic-assert": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz", - "integrity": "sha1-cCvi3aazf0g2vLP121ZkG2Sh09M=", - "dev": true - }, - "minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "1.1.8" - } - }, - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "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==", - "dev": true, - "requires": { - "concat-stream": "1.6.0", - "duplexify": "3.5.3", - "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", - "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==", - "dev": true, - "requires": { - "for-in": "1.0.2", - "is-extendable": "1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "2.0.4" - } - } - } - }, - "mixin-object": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mixin-object/-/mixin-object-2.0.1.tgz", - "integrity": "sha1-T7lJRB2rGCVA8f4DW6YOGUel5X4=", - "dev": true, - "requires": { - "for-in": "0.1.8", - "is-extendable": "0.1.1" - }, - "dependencies": { - "for-in": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-0.1.8.tgz", - "integrity": "sha1-2Hc5COMSVhCZUrH9ubP6hn0ndeE=", - "dev": true - } - } - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true, - "requires": { - "minimist": "0.0.8" - } - }, - "move-concurrently": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", - "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", - "dev": true, - "requires": { - "aproba": "1.2.0", - "copy-concurrently": "1.0.5", - "fs-write-stream-atomic": "1.0.10", - "mkdirp": "0.5.1", - "rimraf": "2.6.2", - "run-queue": "1.0.3" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "multicast-dns": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.1.1.tgz", - "integrity": "sha1-bn3oalcIcqsXBYrepxYLvsqBTd4=", - "dev": true, - "requires": { - "dns-packet": "1.2.2", - "thunky": "0.1.0" - } - }, - "multicast-dns-service-types": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", - "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", - "dev": true - }, - "nan": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.7.0.tgz", - "integrity": "sha1-2Vv3IeyHfgjbJ27T/G63j5CDrUY=", - "dev": true, - "optional": true - }, - "nanomatch": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.7.tgz", - "integrity": "sha512-/5ldsnyurvEw7wNpxLFgjVvBLMta43niEYOy0CJ4ntcYSbx6bugRUTQeFb4BR/WanEL1o3aQgHuVLHQaB6tOqg==", - "dev": true, - "requires": { - "arr-diff": "4.0.0", - "array-unique": "0.3.2", - "define-property": "1.0.0", - "extend-shallow": "2.0.1", - "fragment-cache": "0.2.1", - "is-odd": "1.0.0", - "kind-of": "5.1.0", - "object.pick": "1.3.0", - "regex-not": "1.0.0", - "snapdragon": "0.8.1", - "to-regex": "3.0.1" - }, - "dependencies": { - "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 - }, - "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 - } - } - }, - "ncname": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/ncname/-/ncname-1.0.0.tgz", - "integrity": "sha1-W1etGLHKCShk72Kwse2BlPODtxw=", - "dev": true, - "requires": { - "xml-char-classes": "1.0.0" - } - }, - "negotiator": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", - "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=", - "dev": true - }, - "ng2-bootstrap-modal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ng2-bootstrap-modal/-/ng2-bootstrap-modal-1.0.1.tgz", - "integrity": "sha1-8xZvymP9Ozrqyym41eO4cqtqseQ=" - }, - "ng2-simple-global": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/ng2-simple-global/-/ng2-simple-global-1.2.5.tgz", - "integrity": "sha512-vacav6SLvDZfS05XKyIeSA5AsUCa1ljCvMM8hoKYH5n4CsnhJdJjocymlzkfNo9rI2oIUx+MrmMoW1sixeTjUA==" - }, - "no-case": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", - "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", - "dev": true, - "requires": { - "lower-case": "1.1.4" - } - }, - "node-forge": { - "version": "0.6.33", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.6.33.tgz", - "integrity": "sha1-RjgRh59XPUUVWtap9D3ClujoXrw=", - "dev": true - }, - "node-gyp": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.6.2.tgz", - "integrity": "sha1-m/vlRWIoYoSDjnUOrAUpWFP6HGA=", - "dev": true, - "optional": true, - "requires": { - "fstream": "1.0.11", - "glob": "7.1.2", - "graceful-fs": "4.1.11", - "minimatch": "3.0.4", - "mkdirp": "0.5.1", - "nopt": "3.0.6", - "npmlog": "4.1.2", - "osenv": "0.1.4", - "request": "2.82.0", - "rimraf": "2.6.2", - "semver": "5.3.0", - "tar": "2.2.1", - "which": "1.3.0" - }, - "dependencies": { - "nopt": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", - "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", - "dev": true, - "optional": true, - "requires": { - "abbrev": "1.1.0" - } - }, - "semver": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", - "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", - "dev": true, - "optional": true - } - } - }, - "node-libs-browser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.0.0.tgz", - "integrity": "sha1-o6WeyXAkmFtG6Vg3lkb5bEthZkY=", - "dev": true, - "requires": { - "assert": "1.4.1", - "browserify-zlib": "0.1.4", - "buffer": "4.9.1", - "console-browserify": "1.1.0", - "constants-browserify": "1.0.0", - "crypto-browserify": "3.11.1", - "domain-browser": "1.1.7", - "events": "1.1.1", - "https-browserify": "0.0.1", - "os-browserify": "0.2.1", - "path-browserify": "0.0.0", - "process": "0.11.10", - "punycode": "1.4.1", - "querystring-es3": "0.2.1", - "readable-stream": "2.3.3", - "stream-browserify": "2.0.1", - "stream-http": "2.7.2", - "string_decoder": "0.10.31", - "timers-browserify": "2.0.4", - "tty-browserify": "0.0.0", - "url": "0.11.0", - "util": "0.10.3", - "vm-browserify": "0.0.4" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "readable-stream": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", - "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "safe-buffer": "5.1.1", - "string_decoder": "1.0.3", - "util-deprecate": "1.0.2" - }, - "dependencies": { - "string_decoder": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", - "dev": true, - "requires": { - "safe-buffer": "5.1.1" - } - } - } - } - } - }, - "node-modules-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/node-modules-path/-/node-modules-path-1.0.1.tgz", - "integrity": "sha1-QAlrCM560OoUaAhjr0ScfHWl0cg=", - "dev": true - }, - "nopt": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", - "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", - "dev": true, - "requires": { - "abbrev": "1.1.0", - "osenv": "0.1.4" - } - }, - "normalize-package-data": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", - "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", - "dev": true, - "requires": { - "hosted-git-info": "2.5.0", - "is-builtin-module": "1.0.0", - "semver": "5.4.1", - "validate-npm-package-license": "3.0.1" - } - }, - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "1.1.0" - } - }, - "normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", - "dev": true - }, - "normalize-url": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz", - "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=", - "dev": true, - "requires": { - "object-assign": "4.1.1", - "prepend-http": "1.0.4", - "query-string": "4.3.4", - "sort-keys": "1.1.2" - } - }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "dev": true, - "requires": { - "path-key": "2.0.1" - } - }, - "npmlog": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", - "dev": true, - "requires": { - "are-we-there-yet": "1.1.4", - "console-control-strings": "1.1.0", - "gauge": "2.7.4", - "set-blocking": "2.0.0" - } - }, - "nth-check": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.1.tgz", - "integrity": "sha1-mSms32KPwsQQmN6rgqxYDPFJquQ=", - "dev": true, - "requires": { - "boolbase": "1.0.0" - } - }, - "null-check": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/null-check/-/null-check-1.0.0.tgz", - "integrity": "sha1-l33/1xdgErnsMNKjnbXPcqBDnt0=", - "dev": true - }, - "num2fraction": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", - "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=", - "dev": true - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true - }, - "oauth-sign": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", - "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true - }, - "object-component": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz", - "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=", - "dev": true - }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "dev": true, - "requires": { - "copy-descriptor": "0.1.1", - "define-property": "0.2.5", - "kind-of": "3.2.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" - } - }, - "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" - } - }, - "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 - } - } - } - } - }, - "object-keys": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.11.tgz", - "integrity": "sha1-xUYBd4rVYPEULODgG8yotW0TQm0=", - "dev": true - }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "dev": true, - "requires": { - "isobject": "3.0.1" - } - }, - "object.omit": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", - "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", - "dev": true, - "requires": { - "for-own": "0.1.5", - "is-extendable": "0.1.1" - }, - "dependencies": { - "for-own": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", - "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", - "dev": true, - "requires": { - "for-in": "1.0.2" - } - } - } - }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "dev": true, - "requires": { - "isobject": "3.0.1" - } - }, - "obuf": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.1.tgz", - "integrity": "sha1-EEEktsYCxnlogaBCVB0220OlJk4=", - "dev": true - }, - "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "dev": true, - "requires": { - "ee-first": "1.1.1" - } - }, - "on-headers": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz", - "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c=", - "dev": true - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1.0.2" - } - }, - "opn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/opn/-/opn-5.1.0.tgz", - "integrity": "sha512-iPNl7SyM8L30Rm1sjGdLLheyHVw5YXVfi3SKWJzBI7efxRwHojfRFjwE/OLM6qp9xJYMgab8WicTU1cPoY+Hpg==", - "dev": true, - "requires": { - "is-wsl": "1.1.0" - } - }, - "options": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/options/-/options-0.0.6.tgz", - "integrity": "sha1-7CLTEoBrtT5zF3Pnza788cZDEo8=", - "dev": true - }, - "original": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/original/-/original-1.0.0.tgz", - "integrity": "sha1-kUf5P6FpbQS+YeAb1QuurKZWvTs=", - "dev": true, - "requires": { - "url-parse": "1.0.5" - }, - "dependencies": { - "url-parse": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.0.5.tgz", - "integrity": "sha1-CFSGBCKv3P7+tsllxmLUgAFpkns=", - "dev": true, - "requires": { - "querystringify": "0.0.4", - "requires-port": "1.0.0" - } - } - } - }, - "os-browserify": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.2.1.tgz", - "integrity": "sha1-Y/xMzuXS13Y9Jrv4YBB45sLgBE8=", - "dev": true - }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "dev": true - }, - "os-locale": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", - "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", - "dev": true, - "requires": { - "lcid": "1.0.0" - } - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true - }, - "osenv": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.4.tgz", - "integrity": "sha1-Qv5tWVPfBsgGS+bxdsPQWqqjRkQ=", - "dev": true, - "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" - } - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true - }, - "p-limit": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.1.0.tgz", - "integrity": "sha1-sH/y2aXYi+yAYDWJWiurZqJ5iLw=", - "dev": true - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "requires": { - "p-limit": "1.1.0" - } - }, - "p-map": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz", - "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==", - "dev": true - }, - "pako": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", - "integrity": "sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=", - "dev": true - }, - "parallel-transform": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.1.0.tgz", - "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=", - "dev": true, - "requires": { - "cyclist": "0.2.2", - "inherits": "2.0.3", - "readable-stream": "2.3.3" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "readable-stream": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", - "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "safe-buffer": "5.1.1", - "string_decoder": "1.0.3", - "util-deprecate": "1.0.2" - } - }, - "string_decoder": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", - "dev": true, - "requires": { - "safe-buffer": "5.1.1" - } - } - } - }, - "param-case": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", - "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=", - "dev": true, - "requires": { - "no-case": "2.3.2" - } - }, - "parse-asn1": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.0.tgz", - "integrity": "sha1-N8T5t+06tlx0gXtfJICTf7+XxxI=", - "dev": true, - "requires": { - "asn1.js": "4.9.1", - "browserify-aes": "1.0.8", - "create-hash": "1.1.3", - "evp_bytestokey": "1.0.3", - "pbkdf2": "3.0.14" - } - }, - "parse-glob": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", - "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", - "dev": true, - "requires": { - "glob-base": "0.3.0", - "is-dotfile": "1.0.3", - "is-extglob": "1.0.0", - "is-glob": "2.0.1" - } - }, - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true, - "requires": { - "error-ex": "1.3.1" - } - }, - "parse-passwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", - "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", - "dev": true - }, - "parsejson": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/parsejson/-/parsejson-0.0.3.tgz", - "integrity": "sha1-q343WfIJ7OmUN5c/fQ8fZK4OZKs=", - "dev": true, - "requires": { - "better-assert": "1.0.2" - } - }, - "parseqs": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", - "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", - "dev": true, - "requires": { - "better-assert": "1.0.2" - } - }, - "parseuri": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz", - "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", - "dev": true, - "requires": { - "better-assert": "1.0.2" - } - }, - "parseurl": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", - "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=", - "dev": true - }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "dev": true - }, - "path-browserify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz", - "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=", - "dev": true - }, - "path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", - "dev": true - }, - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true, - "requires": { - "pinkie-promise": "2.0.1" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", - "dev": true - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true - }, - "path-parse": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz", - "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=", - "dev": true - }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", - "dev": true - }, - "path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" - } - }, - "pbkdf2": { - "version": "3.0.14", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.14.tgz", - "integrity": "sha512-gjsZW9O34fm0R7PaLHRJmLLVfSoesxztjPjE9o6R+qtVJij90ltg1joIovN9GKrRW3t1PzhDDG3UMEMFfZ+1wA==", - "dev": true, - "requires": { - "create-hash": "1.1.3", - "create-hmac": "1.1.6", - "ripemd160": "2.0.1", - "safe-buffer": "5.1.1", - "sha.js": "2.4.9" - } - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "dev": true - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dev": true, - "requires": { - "pinkie": "2.0.4" - } - }, - "pkg-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", - "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", - "dev": true, - "requires": { - "find-up": "2.1.0" - }, - "dependencies": { - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "2.0.0" - } - } - } - }, - "portfinder": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.13.tgz", - "integrity": "sha1-uzLs2HwnEErm7kS1o8y/Drsa7ek=", - "dev": true, - "requires": { - "async": "1.5.2", - "debug": "2.6.9", - "mkdirp": "0.5.1" - }, - "dependencies": { - "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", - "dev": true - } - } - }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "dev": true - }, - "postcss": { - "version": "5.2.17", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.17.tgz", - "integrity": "sha1-z09Ze4ZNZcikkrLqvp1wbIecOIs=", - "dev": true, - "requires": { - "chalk": "1.1.3", - "js-base64": "2.3.2", - "source-map": "0.5.7", - "supports-color": "3.2.3" - }, - "dependencies": { - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - } - } - }, - "postcss-calc": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-5.3.1.tgz", - "integrity": "sha1-d7rnypKK2FcW4v2kLyYb98HWW14=", - "dev": true, - "requires": { - "postcss": "5.2.17", - "postcss-message-helpers": "2.0.0", - "reduce-css-calc": "1.3.0" - } - }, - "postcss-colormin": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-2.2.2.tgz", - "integrity": "sha1-ZjFBfV8OkJo9fsJrJMio0eT5bks=", - "dev": true, - "requires": { - "colormin": "1.1.2", - "postcss": "5.2.17", - "postcss-value-parser": "3.3.0" - } - }, - "postcss-convert-values": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz", - "integrity": "sha1-u9hZPFwf0uPRwyK7kl3K6Nrk1i0=", - "dev": true, - "requires": { - "postcss": "5.2.17", - "postcss-value-parser": "3.3.0" - } - }, - "postcss-discard-comments": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz", - "integrity": "sha1-vv6J+v1bPazlzM5Rt2uBUUvgDj0=", - "dev": true, - "requires": { - "postcss": "5.2.17" - } - }, - "postcss-discard-duplicates": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0.tgz", - "integrity": "sha1-uavye4isGIFYpesSq8riAmO5GTI=", - "dev": true, - "requires": { - "postcss": "5.2.17" - } - }, - "postcss-discard-empty": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz", - "integrity": "sha1-0rS9nVztXr2Nyt52QMfXzX9PkrU=", - "dev": true, - "requires": { - "postcss": "5.2.17" - } - }, - "postcss-discard-overridden": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz", - "integrity": "sha1-ix6vVU9ob7KIzYdMVWZ7CqNmjVg=", - "dev": true, - "requires": { - "postcss": "5.2.17" - } - }, - "postcss-discard-unused": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz", - "integrity": "sha1-vOMLLMWR/8Y0Mitfs0ZLbZNPRDM=", - "dev": true, - "requires": { - "postcss": "5.2.17", - "uniqs": "2.0.0" - } - }, - "postcss-filter-plugins": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/postcss-filter-plugins/-/postcss-filter-plugins-2.0.2.tgz", - "integrity": "sha1-bYWGJTTXNaxCDkqFgG4fXUKG2Ew=", - "dev": true, - "requires": { - "postcss": "5.2.17", - "uniqid": "4.1.1" - } - }, - "postcss-import": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-11.0.0.tgz", - "integrity": "sha1-qWLi34LTvFptpqOGhBdHIE9B71s=", - "dev": true, - "requires": { - "postcss": "6.0.16", - "postcss-value-parser": "3.3.0", - "read-cache": "1.0.0", - "resolve": "1.4.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true, - "requires": { - "color-convert": "1.9.0" - } - }, - "chalk": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", - "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", - "dev": true, - "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "4.5.0" - }, - "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" - } - } - } - }, - "has-flag": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", - "dev": true - }, - "postcss": { - "version": "6.0.16", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.16.tgz", - "integrity": "sha512-m758RWPmSjFH/2MyyG3UOW1fgYbR9rtdzz5UNJnlm7OLtu4B2h9C6gi+bE4qFKghsBRFfZT8NzoQBs6JhLotoA==", - "dev": true, - "requires": { - "chalk": "2.3.0", - "source-map": "0.6.1", - "supports-color": "5.1.0" - } - }, - "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 - }, - "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==", - "dev": true, - "requires": { - "has-flag": "2.0.0" - } - } - } - }, - "postcss-load-config": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-1.2.0.tgz", - "integrity": "sha1-U56a/J3chiASHr+djDZz4M5Q0oo=", - "dev": true, - "requires": { - "cosmiconfig": "2.2.2", - "object-assign": "4.1.1", - "postcss-load-options": "1.2.0", - "postcss-load-plugins": "2.3.0" - } - }, - "postcss-load-options": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/postcss-load-options/-/postcss-load-options-1.2.0.tgz", - "integrity": "sha1-sJixVZ3awt8EvAuzdfmaXP4rbYw=", - "dev": true, - "requires": { - "cosmiconfig": "2.2.2", - "object-assign": "4.1.1" - } - }, - "postcss-load-plugins": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/postcss-load-plugins/-/postcss-load-plugins-2.3.0.tgz", - "integrity": "sha1-dFdoEWWZrKLwCfrUJrABdQSdjZI=", - "dev": true, - "requires": { - "cosmiconfig": "2.2.2", - "object-assign": "4.1.1" - } - }, - "postcss-loader": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-2.0.10.tgz", - "integrity": "sha512-xQaDcEgJ/2JqFY18zpFkik8vyYs7oS5ZRbrjvDqkP97k2wYWfPT4+qA0m4o3pTSCsz0u26PNqs8ZO9FRUWAqrA==", - "dev": true, - "requires": { - "loader-utils": "1.1.0", - "postcss": "6.0.16", - "postcss-load-config": "1.2.0", - "schema-utils": "0.3.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true, - "requires": { - "color-convert": "1.9.0" - } - }, - "chalk": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", - "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", - "dev": true, - "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "4.5.0" - }, - "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" - } - } - } - }, - "has-flag": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", - "dev": true - }, - "postcss": { - "version": "6.0.16", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.16.tgz", - "integrity": "sha512-m758RWPmSjFH/2MyyG3UOW1fgYbR9rtdzz5UNJnlm7OLtu4B2h9C6gi+bE4qFKghsBRFfZT8NzoQBs6JhLotoA==", - "dev": true, - "requires": { - "chalk": "2.3.0", - "source-map": "0.6.1", - "supports-color": "5.1.0" - } - }, - "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 - }, - "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==", - "dev": true, - "requires": { - "has-flag": "2.0.0" - } - } - } - }, - "postcss-merge-idents": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz", - "integrity": "sha1-TFUwMTwI4dWzu/PSu8dH4njuonA=", - "dev": true, - "requires": { - "has": "1.0.1", - "postcss": "5.2.17", - "postcss-value-parser": "3.3.0" - } - }, - "postcss-merge-longhand": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2.tgz", - "integrity": "sha1-I9kM0Sewp3mUkVMyc5A0oaTz1lg=", - "dev": true, - "requires": { - "postcss": "5.2.17" - } - }, - "postcss-merge-rules": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz", - "integrity": "sha1-0d9d+qexrMO+VT8OnhDofGG19yE=", - "dev": true, - "requires": { - "browserslist": "1.7.7", - "caniuse-api": "1.6.1", - "postcss": "5.2.17", - "postcss-selector-parser": "2.2.3", - "vendors": "1.0.1" - } - }, - "postcss-message-helpers": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-message-helpers/-/postcss-message-helpers-2.0.0.tgz", - "integrity": "sha1-pPL0+rbk/gAvCu0ABHjN9S+bpg4=", - "dev": true - }, - "postcss-minify-font-values": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz", - "integrity": "sha1-S1jttWZB66fIR0qzUmyv17vey2k=", - "dev": true, - "requires": { - "object-assign": "4.1.1", - "postcss": "5.2.17", - "postcss-value-parser": "3.3.0" - } - }, - "postcss-minify-gradients": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz", - "integrity": "sha1-Xb2hE3NwP4PPtKPqOIHY11/15uE=", - "dev": true, - "requires": { - "postcss": "5.2.17", - "postcss-value-parser": "3.3.0" - } - }, - "postcss-minify-params": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz", - "integrity": "sha1-rSzgcTc7lDs9kwo/pZo1jCjW8fM=", - "dev": true, - "requires": { - "alphanum-sort": "1.0.2", - "postcss": "5.2.17", - "postcss-value-parser": "3.3.0", - "uniqs": "2.0.0" - } - }, - "postcss-minify-selectors": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz", - "integrity": "sha1-ssapjAByz5G5MtGkllCBFDEXNb8=", - "dev": true, - "requires": { - "alphanum-sort": "1.0.2", - "has": "1.0.1", - "postcss": "5.2.17", - "postcss-selector-parser": "2.2.3" - } - }, - "postcss-modules-extract-imports": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.1.0.tgz", - "integrity": "sha1-thTJcgvmgW6u41+zpfqh26agXds=", - "dev": true, - "requires": { - "postcss": "6.0.12" - }, - "dependencies": { - "has-flag": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", - "dev": true - }, - "postcss": { - "version": "6.0.12", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.12.tgz", - "integrity": "sha512-K6SLofXEK43FBSyZ6/ExQV7ji24OEw4tEY6x1CAf7+tcoMWJoO24Rf3rVFVpk+5IQL1e1Cy3sTKfg7hXuLzafg==", - "dev": true, - "requires": { - "chalk": "2.1.0", - "source-map": "0.5.7", - "supports-color": "4.4.0" - } - }, - "supports-color": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz", - "integrity": "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==", - "dev": true, - "requires": { - "has-flag": "2.0.0" - } - } - } - }, - "postcss-modules-local-by-default": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz", - "integrity": "sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=", - "dev": true, - "requires": { - "css-selector-tokenizer": "0.7.0", - "postcss": "6.0.12" - }, - "dependencies": { - "has-flag": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", - "dev": true - }, - "postcss": { - "version": "6.0.12", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.12.tgz", - "integrity": "sha512-K6SLofXEK43FBSyZ6/ExQV7ji24OEw4tEY6x1CAf7+tcoMWJoO24Rf3rVFVpk+5IQL1e1Cy3sTKfg7hXuLzafg==", - "dev": true, - "requires": { - "chalk": "2.1.0", - "source-map": "0.5.7", - "supports-color": "4.4.0" - } - }, - "supports-color": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz", - "integrity": "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==", - "dev": true, - "requires": { - "has-flag": "2.0.0" - } - } - } - }, - "postcss-modules-scope": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz", - "integrity": "sha1-1upkmUx5+XtipytCb75gVqGUu5A=", - "dev": true, - "requires": { - "css-selector-tokenizer": "0.7.0", - "postcss": "6.0.12" - }, - "dependencies": { - "has-flag": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", - "dev": true - }, - "postcss": { - "version": "6.0.12", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.12.tgz", - "integrity": "sha512-K6SLofXEK43FBSyZ6/ExQV7ji24OEw4tEY6x1CAf7+tcoMWJoO24Rf3rVFVpk+5IQL1e1Cy3sTKfg7hXuLzafg==", - "dev": true, - "requires": { - "chalk": "2.1.0", - "source-map": "0.5.7", - "supports-color": "4.4.0" - } - }, - "supports-color": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz", - "integrity": "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==", - "dev": true, - "requires": { - "has-flag": "2.0.0" - } - } - } - }, - "postcss-modules-values": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz", - "integrity": "sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=", - "dev": true, - "requires": { - "icss-replace-symbols": "1.1.0", - "postcss": "6.0.12" - }, - "dependencies": { - "has-flag": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", - "dev": true - }, - "postcss": { - "version": "6.0.12", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.12.tgz", - "integrity": "sha512-K6SLofXEK43FBSyZ6/ExQV7ji24OEw4tEY6x1CAf7+tcoMWJoO24Rf3rVFVpk+5IQL1e1Cy3sTKfg7hXuLzafg==", - "dev": true, - "requires": { - "chalk": "2.1.0", - "source-map": "0.5.7", - "supports-color": "4.4.0" - } - }, - "supports-color": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz", - "integrity": "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==", - "dev": true, - "requires": { - "has-flag": "2.0.0" - } - } - } - }, - "postcss-normalize-charset": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz", - "integrity": "sha1-757nEhLX/nWceO0WL2HtYrXLk/E=", - "dev": true, - "requires": { - "postcss": "5.2.17" - } - }, - "postcss-normalize-url": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz", - "integrity": "sha1-EI90s/L82viRov+j6kWSJ5/HgiI=", - "dev": true, - "requires": { - "is-absolute-url": "2.1.0", - "normalize-url": "1.9.1", - "postcss": "5.2.17", - "postcss-value-parser": "3.3.0" - } - }, - "postcss-ordered-values": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz", - "integrity": "sha1-7sbCpntsQSqNsgQud/6NpD+VwR0=", - "dev": true, - "requires": { - "postcss": "5.2.17", - "postcss-value-parser": "3.3.0" - } - }, - "postcss-reduce-idents": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz", - "integrity": "sha1-wsbSDMlYKE9qv75j92Cb9AkFmtM=", - "dev": true, - "requires": { - "postcss": "5.2.17", - "postcss-value-parser": "3.3.0" - } - }, - "postcss-reduce-initial": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz", - "integrity": "sha1-aPgGlfBF0IJjqHmtJA343WT2ROo=", - "dev": true, - "requires": { - "postcss": "5.2.17" - } - }, - "postcss-reduce-transforms": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz", - "integrity": "sha1-/3b02CEkN7McKYpC0uFEQCV3GuE=", - "dev": true, - "requires": { - "has": "1.0.1", - "postcss": "5.2.17", - "postcss-value-parser": "3.3.0" - } - }, - "postcss-selector-parser": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz", - "integrity": "sha1-+UN3iGBsPJrO4W/+jYsWKX8nu5A=", - "dev": true, - "requires": { - "flatten": "1.0.2", - "indexes-of": "1.0.1", - "uniq": "1.0.1" - } - }, - "postcss-svgo": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-2.1.6.tgz", - "integrity": "sha1-tt8YqmE7Zm4TPwittSGcJoSsEI0=", - "dev": true, - "requires": { - "is-svg": "2.1.0", - "postcss": "5.2.17", - "postcss-value-parser": "3.3.0", - "svgo": "0.7.2" - } - }, - "postcss-unique-selectors": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz", - "integrity": "sha1-mB1X0p3csz57Hf4f1DuGSfkzyh0=", - "dev": true, - "requires": { - "alphanum-sort": "1.0.2", - "postcss": "5.2.17", - "uniqs": "2.0.0" - } - }, - "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==", - "dev": true, - "requires": { - "mime": "1.4.1", - "minimatch": "3.0.4", - "mkdirp": "0.5.1", - "postcss": "6.0.16", - "xxhashjs": "0.2.2" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true, - "requires": { - "color-convert": "1.9.0" - } - }, - "chalk": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", - "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", - "dev": true, - "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "4.5.0" - }, - "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" - } - } - } - }, - "has-flag": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", - "dev": true - }, - "postcss": { - "version": "6.0.16", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.16.tgz", - "integrity": "sha512-m758RWPmSjFH/2MyyG3UOW1fgYbR9rtdzz5UNJnlm7OLtu4B2h9C6gi+bE4qFKghsBRFfZT8NzoQBs6JhLotoA==", - "dev": true, - "requires": { - "chalk": "2.3.0", - "source-map": "0.6.1", - "supports-color": "5.1.0" - } - }, - "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 - }, - "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==", - "dev": true, - "requires": { - "has-flag": "2.0.0" - } - } - } - }, - "postcss-value-parser": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz", - "integrity": "sha1-h/OPnxj3dKSrTIojL1xc6IcqnRU=", - "dev": true - }, - "postcss-zindex": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-2.2.0.tgz", - "integrity": "sha1-0hCd3AVbka9n/EyzsCWUZjnSryI=", - "dev": true, - "requires": { - "has": "1.0.1", - "postcss": "5.2.17", - "uniqs": "2.0.0" - } - }, - "prepend-http": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", - "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", - "dev": true - }, - "preserve": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", - "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", - "dev": true - }, - "pretty-error": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.1.tgz", - "integrity": "sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM=", - "dev": true, - "requires": { - "renderkid": "2.0.1", - "utila": "0.4.0" - } - }, - "process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", - "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 - }, - "promise": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", - "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", - "dev": true, - "optional": true, - "requires": { - "asap": "2.0.6" - } - }, - "promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", - "dev": true - }, - "protractor": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/protractor/-/protractor-5.1.2.tgz", - "integrity": "sha1-myIXQXCaTGLVzVPGqt1UpxE36V8=", - "dev": true, - "requires": { - "@types/node": "6.0.88", - "@types/q": "0.0.32", - "@types/selenium-webdriver": "2.53.42", - "blocking-proxy": "0.0.5", - "chalk": "1.1.3", - "glob": "7.1.2", - "jasmine": "2.8.0", - "jasminewd2": "2.1.0", - "optimist": "0.6.1", - "q": "1.4.1", - "saucelabs": "1.3.0", - "selenium-webdriver": "3.0.1", - "source-map-support": "0.4.18", - "webdriver-js-extender": "1.0.0", - "webdriver-manager": "12.0.6" - }, - "dependencies": { - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - } - }, - "del": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", - "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", - "dev": true, - "requires": { - "globby": "5.0.0", - "is-path-cwd": "1.0.0", - "is-path-in-cwd": "1.0.0", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1", - "rimraf": "2.6.2" - } - }, - "globby": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", - "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", - "dev": true, - "requires": { - "array-union": "1.0.2", - "arrify": "1.0.1", - "glob": "7.1.2", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" - } - }, - "optimist": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", - "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", - "dev": true, - "requires": { - "minimist": "0.0.8", - "wordwrap": "0.0.3" - } - }, - "q": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.4.1.tgz", - "integrity": "sha1-VXBbzZPF82c1MMLCy8DCs63cKG4=", - "dev": true - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - }, - "webdriver-manager": { - "version": "12.0.6", - "resolved": "https://registry.npmjs.org/webdriver-manager/-/webdriver-manager-12.0.6.tgz", - "integrity": "sha1-PfGkgZdwELTL+MnYXHpXeCjA5ws=", - "dev": true, - "requires": { - "adm-zip": "0.4.7", - "chalk": "1.1.3", - "del": "2.2.2", - "glob": "7.1.2", - "ini": "1.3.4", - "minimist": "1.2.0", - "q": "1.4.1", - "request": "2.82.0", - "rimraf": "2.6.2", - "semver": "5.4.1", - "xml2js": "0.4.19" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - } - } - } - } - }, - "proxy-addr": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.2.tgz", - "integrity": "sha1-ZXFQT0e7mI7IGAJT+F3X4UlSvew=", - "dev": true, - "requires": { - "forwarded": "0.1.2", - "ipaddr.js": "1.5.2" - } - }, - "prr": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/prr/-/prr-0.0.0.tgz", - "integrity": "sha1-GoS4WQgyVQFBGFPQCB7j+obikmo=", - "dev": true - }, - "pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", - "dev": true - }, - "public-encrypt": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.0.tgz", - "integrity": "sha1-OfaZ86RlYN1eusvKaTyvfGXBjMY=", - "dev": true, - "requires": { - "bn.js": "4.11.8", - "browserify-rsa": "4.0.1", - "create-hash": "1.1.3", - "parse-asn1": "5.1.0", - "randombytes": "2.0.5" - } - }, - "pump": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/pump/-/pump-1.0.3.tgz", - "integrity": "sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw==", - "dev": true, - "requires": { - "end-of-stream": "1.4.1", - "once": "1.4.0" - } - }, - "pumpify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.4.0.tgz", - "integrity": "sha512-2kmNR9ry+Pf45opRVirpNuIFotsxUGLaYqxIwuR77AYrYRMuFCz9eryHBS52L360O+NcR383CL4QYlMKPq4zYA==", - "dev": true, - "requires": { - "duplexify": "3.5.3", - "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": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true - }, - "q": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.0.tgz", - "integrity": "sha1-3QG6ydBtMObyGa7LglPunr3DCPE=", - "dev": true - }, - "qjobs": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.1.5.tgz", - "integrity": "sha1-ZZ3p8s+NzCehSBJ28gU3cnI4LnM=", - "dev": true - }, - "qs": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", - "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==", - "dev": true - }, - "query-string": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz", - "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=", - "dev": true, - "requires": { - "object-assign": "4.1.1", - "strict-uri-encode": "1.1.0" - } - }, - "querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", - "dev": true - }, - "querystring-es3": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", - "dev": true - }, - "querystringify": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-0.0.4.tgz", - "integrity": "sha1-DPf4T5Rj/wrlHExLFC2VvjdyTZw=", - "dev": true - }, - "randomatic": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz", - "integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==", - "dev": true, - "requires": { - "is-number": "3.0.0", - "kind-of": "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" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.5" - } - } - } - }, - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "requires": { - "is-buffer": "1.1.5" - } - } - } - }, - "randombytes": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.5.tgz", - "integrity": "sha512-8T7Zn1AhMsQ/HI1SjcCfT/t4ii3eAqco3yOcSzS4mozsOz69lHLsoMXmF9nZgnFanYscnSlUSgs8uZyKzpE6kg==", - "dev": true, - "requires": { - "safe-buffer": "5.1.1" - } - }, - "range-parser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", - "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=", - "dev": true - }, - "raw-body": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz", - "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=", - "dev": true, - "requires": { - "bytes": "3.0.0", - "http-errors": "1.6.2", - "iconv-lite": "0.4.19", - "unpipe": "1.0.0" - }, - "dependencies": { - "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", - "dev": true - } - } - }, - "raw-loader": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/raw-loader/-/raw-loader-0.5.1.tgz", - "integrity": "sha1-DD0L6u2KAclm2Xh793goElKpeao=", - "dev": true - }, - "read-cache": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", - "integrity": "sha1-5mTvMRYRZsl1HNvo28+GtftY93Q=", - "dev": true, - "requires": { - "pify": "2.3.0" - } - }, - "read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", - "dev": true, - "requires": { - "load-json-file": "1.1.0", - "normalize-package-data": "2.4.0", - "path-type": "1.1.0" - } - }, - "read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", - "dev": true, - "requires": { - "find-up": "1.1.2", - "read-pkg": "1.1.0" - } - }, - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "0.0.1", - "string_decoder": "0.10.31" - } - }, - "readdirp": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz", - "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "minimatch": "3.0.4", - "readable-stream": "2.3.3", - "set-immediate-shim": "1.0.1" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "readable-stream": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", - "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "safe-buffer": "5.1.1", - "string_decoder": "1.0.3", - "util-deprecate": "1.0.2" - } - }, - "string_decoder": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", - "dev": true, - "requires": { - "safe-buffer": "5.1.1" - } - } - } - }, - "redent": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", - "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", - "dev": true, - "requires": { - "indent-string": "2.1.0", - "strip-indent": "1.0.1" - } - }, - "reduce-css-calc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz", - "integrity": "sha1-dHyRTgSWFKTJz7umKYca0dKSdxY=", - "dev": true, - "requires": { - "balanced-match": "0.4.2", - "math-expression-evaluator": "1.2.17", - "reduce-function-call": "1.0.2" - } - }, - "reduce-function-call": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/reduce-function-call/-/reduce-function-call-1.0.2.tgz", - "integrity": "sha1-WiAL+S4ON3UXUv5FsKszD9S2vpk=", - "dev": true, - "requires": { - "balanced-match": "0.4.2" - } - }, - "reflect-metadata": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.10.tgz", - "integrity": "sha1-tPg3BEFqytiZiMmxVjXUfgO5NEo=", - "dev": true - }, - "regenerate": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.3.3.tgz", - "integrity": "sha512-jVpo1GadrDAK59t/0jRx5VxYWQEDkkEKi6+HjE3joFVLfDOh9Xrdh0dF1eSq+BI/SwvTQ44gSscJ8N5zYL61sg==", - "dev": true - }, - "regenerator-runtime": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz", - "integrity": "sha512-/aA0kLeRb5N9K0d4fw7ooEbI+xDe+DKD499EQqygGqeS8N3xto15p09uY2xj7ixP81sNPXvRLnAQIqdVStgb1A==", - "dev": true - }, - "regex-cache": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", - "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", - "dev": true, - "requires": { - "is-equal-shallow": "0.1.3" - } - }, - "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=", - "dev": true, - "requires": { - "extend-shallow": "2.0.1" - } - }, - "regexpu-core": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-1.0.0.tgz", - "integrity": "sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs=", - "dev": true, - "requires": { - "regenerate": "1.3.3", - "regjsgen": "0.2.0", - "regjsparser": "0.1.5" - } - }, - "regjsgen": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", - "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=", - "dev": true - }, - "regjsparser": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", - "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", - "dev": true, - "requires": { - "jsesc": "0.5.0" - } - }, - "relateurl": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=", - "dev": true - }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true - }, - "renderkid": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.1.tgz", - "integrity": "sha1-iYyr/Ivt5Le5ETWj/9Mj5YwNsxk=", - "dev": true, - "requires": { - "css-select": "1.2.0", - "dom-converter": "0.1.4", - "htmlparser2": "3.3.0", - "strip-ansi": "3.0.1", - "utila": "0.3.3" - }, - "dependencies": { - "utila": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/utila/-/utila-0.3.3.tgz", - "integrity": "sha1-1+jn1+MJEHCSsF+NloiCTWM6QiY=", - "dev": true - } - } - }, - "repeat-element": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", - "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=", - "dev": true - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true - }, - "repeating": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", - "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", - "dev": true, - "requires": { - "is-finite": "1.0.2" - } - }, - "request": { - "version": "2.82.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.82.0.tgz", - "integrity": "sha512-/QWqfmyTfQ4OYs6EhB1h2wQsX9ZxbuNePCvCm0Mdz/mxw73mjdg0D4QdIl0TQBFs35CZmMXLjk0iCGK395CUDg==", - "dev": true, - "requires": { - "aws-sign2": "0.7.0", - "aws4": "1.6.0", - "caseless": "0.12.0", - "combined-stream": "1.0.5", - "extend": "3.0.1", - "forever-agent": "0.6.1", - "form-data": "2.3.1", - "har-validator": "5.0.3", - "hawk": "6.0.2", - "http-signature": "1.2.0", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.17", - "oauth-sign": "0.8.2", - "performance-now": "2.1.0", - "qs": "6.5.1", - "safe-buffer": "5.1.1", - "stringstream": "0.0.5", - "tough-cookie": "2.3.3", - "tunnel-agent": "0.6.0", - "uuid": "3.1.0" - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true - }, - "require-from-string": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-1.2.1.tgz", - "integrity": "sha1-UpyczvJzgK3+yaL5ZbZJu+5jZBg=", - "dev": true - }, - "require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", - "dev": true - }, - "requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", - "dev": true - }, - "resolve": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.4.0.tgz", - "integrity": "sha512-aW7sVKPufyHqOmyyLzg/J+8606v5nevBgaliIlV7nUpVMsDnoBGV/cbSLNjZAg9q0Cfd/+easKVKQ8vOu8fn1Q==", - "dev": true, - "requires": { - "path-parse": "1.0.5" - } - }, - "resolve-cwd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", - "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", - "dev": true, - "requires": { - "resolve-from": "3.0.0" - } - }, - "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", - "dev": true - }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "dev": true - }, - "right-align": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", - "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", - "dev": true, - "requires": { - "align-text": "0.1.4" - } - }, - "rimraf": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", - "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", - "dev": true, - "requires": { - "glob": "7.1.2" - } - }, - "ripemd160": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.1.tgz", - "integrity": "sha1-D0WEKVxTo2KK9+bXmsohzlfRxuc=", - "dev": true, - "requires": { - "hash-base": "2.0.2", - "inherits": "2.0.3" - } - }, - "run-queue": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", - "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", - "dev": true, - "requires": { - "aproba": "1.2.0" - } - }, - "rxjs": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.4.3.tgz", - "integrity": "sha512-fSNi+y+P9ss+EZuV0GcIIqPUK07DEaMRUtLJvdcvMyFjc9dizuDjere+A4V7JrLGnm9iCc+nagV/4QdMTkqC4A==", - "requires": { - "symbol-observable": "1.0.4" - } - }, - "safe-buffer": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", - "dev": true - }, - "sass-graph": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.4.tgz", - "integrity": "sha1-E/vWPNHK8JCLn9k0dq1DpR0eC0k=", - "dev": true, - "optional": true, - "requires": { - "glob": "7.1.2", - "lodash": "4.17.4", - "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==", - "dev": true, - "requires": { - "async": "2.5.0", - "clone-deep": "0.3.0", - "loader-utils": "1.1.0", - "lodash.tail": "4.1.1", - "pify": "3.0.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } - } - }, - "saucelabs": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/saucelabs/-/saucelabs-1.3.0.tgz", - "integrity": "sha1-0kDoAJ33+ocwbsRXimm6O1xCT+4=", - "dev": true, - "requires": { - "https-proxy-agent": "1.0.0" - } - }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "dev": true - }, - "schema-utils": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.3.0.tgz", - "integrity": "sha1-9YdyIs4+kx7a4DnxfrNxbnE3+M8=", - "dev": true, - "requires": { - "ajv": "5.2.3" - } - }, - "scss-tokenizer": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz", - "integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=", - "dev": true, - "optional": true, - "requires": { - "js-base64": "2.3.2", - "source-map": "0.4.4" - }, - "dependencies": { - "source-map": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", - "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", - "dev": true, - "optional": true, - "requires": { - "amdefine": "1.0.1" - } - } - } - }, - "select-hose": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=", - "dev": true - }, - "selenium-webdriver": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-3.0.1.tgz", - "integrity": "sha1-ot6l2kqX9mcuiefKcnbO+jZRR6c=", - "dev": true, - "requires": { - "adm-zip": "0.4.7", - "rimraf": "2.6.2", - "tmp": "0.0.30", - "xml2js": "0.4.19" - }, - "dependencies": { - "tmp": { - "version": "0.0.30", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.30.tgz", - "integrity": "sha1-ckGdSovn1s51FI/YsyTlk6cRwu0=", - "dev": true, - "requires": { - "os-tmpdir": "1.0.2" - } - } - } - }, - "selfsigned": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.1.tgz", - "integrity": "sha1-v4y3uDJWxFUeMTR8YxF3jbme7FI=", - "dev": true, - "requires": { - "node-forge": "0.6.33" - } - }, - "semver": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", - "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==", - "dev": true - }, - "semver-dsl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/semver-dsl/-/semver-dsl-1.0.1.tgz", - "integrity": "sha1-02eN5VVeimH2Ke7QJTZq5fJzQKA=", - "dev": true, - "requires": { - "semver": "5.4.1" - } - }, - "send": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.16.1.tgz", - "integrity": "sha512-ElCLJdJIKPk6ux/Hocwhk7NFHpI3pVm/IZOYWqUmoxcgeyM+MpxHHKhb8QmlJDX1pU6WrgaHBkVNm73Sv7uc2A==", - "dev": true, - "requires": { - "debug": "2.6.9", - "depd": "1.1.1", - "destroy": "1.0.4", - "encodeurl": "1.0.1", - "escape-html": "1.0.3", - "etag": "1.8.1", - "fresh": "0.5.2", - "http-errors": "1.6.2", - "mime": "1.4.1", - "ms": "2.0.0", - "on-finished": "2.3.0", - "range-parser": "1.2.0", - "statuses": "1.3.1" - } - }, - "serialize-javascript": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.4.0.tgz", - "integrity": "sha1-fJWFFNtqwkQ6irwGLcn3iGp/YAU=", - "dev": true - }, - "serve-index": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.0.tgz", - "integrity": "sha1-0rKA/FYNYW7oG0i/D6gqvtJIXOc=", - "dev": true, - "requires": { - "accepts": "1.3.4", - "batch": "0.6.1", - "debug": "2.6.8", - "escape-html": "1.0.3", - "http-errors": "1.6.2", - "mime-types": "2.1.17", - "parseurl": "1.3.2" - }, - "dependencies": { - "debug": { - "version": "2.6.8", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", - "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", - "dev": true, - "requires": { - "ms": "2.0.0" - } - } - } - }, - "serve-static": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.1.tgz", - "integrity": "sha512-hSMUZrsPa/I09VYFJwa627JJkNs0NrfL1Uzuup+GqHfToR2KcsXFymXSV90hoyw3M+msjFuQly+YzIH/q0MGlQ==", - "dev": true, - "requires": { - "encodeurl": "1.0.1", - "escape-html": "1.0.3", - "parseurl": "1.3.2", - "send": "0.16.1" - } - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true - }, - "set-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", - "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", - "dev": true - }, - "set-value": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", - "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", - "dev": true, - "requires": { - "extend-shallow": "2.0.1", - "is-extendable": "0.1.1", - "is-plain-object": "2.0.4", - "split-string": "3.1.0" - } - }, - "setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", - "dev": true - }, - "setprototypeof": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", - "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=", - "dev": true - }, - "sha.js": { - "version": "2.4.9", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.9.tgz", - "integrity": "sha512-G8zektVqbiPHrylgew9Zg1VRB1L/DtXNUVAM6q4QLy8NE3qtHlFXTf8VLL4k1Yl6c7NMjtZUTdXV+X44nFaT6A==", - "dev": true, - "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.1" - } - }, - "shallow-clone": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-0.1.2.tgz", - "integrity": "sha1-WQnodLp3EG1zrEFM/sH/yofZcGA=", - "dev": true, - "requires": { - "is-extendable": "0.1.1", - "kind-of": "2.0.1", - "lazy-cache": "0.2.7", - "mixin-object": "2.0.1" - }, - "dependencies": { - "kind-of": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-2.0.1.tgz", - "integrity": "sha1-AY7HpM5+OobLkUG+UZ0kyPqpgbU=", - "dev": true, - "requires": { - "is-buffer": "1.1.5" - } - } - } - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, - "requires": { - "shebang-regex": "1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true - }, - "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", - "dev": true - }, - "silent-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/silent-error/-/silent-error-1.1.0.tgz", - "integrity": "sha1-IglwbxyFCp8dENDYQJGLRvJuG8k=", - "dev": true, - "requires": { - "debug": "2.6.9" - } - }, - "slash": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", - "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", - "dev": true - }, - "snapdragon": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.1.tgz", - "integrity": "sha1-4StUh/re0+PeoKyR6UAL91tAE3A=", - "dev": true, - "requires": { - "base": "0.11.2", - "debug": "2.6.9", - "define-property": "0.2.5", - "extend-shallow": "2.0.1", - "map-cache": "0.2.2", - "source-map": "0.5.7", - "source-map-resolve": "0.5.1", - "use": "2.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.5" - } - } - } - }, - "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.5" - } - } - } - }, - "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 - } - } - }, - "snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, - "requires": { - "define-property": "1.0.0", - "isobject": "3.0.1", - "snapdragon-util": "3.0.1" - } - }, - "snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, - "requires": { - "kind-of": "3.2.2" - } - }, - "sntp": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/sntp/-/sntp-2.0.2.tgz", - "integrity": "sha1-UGQRDwr4X3z9t9a2ekACjOUrSys=", - "dev": true, - "requires": { - "hoek": "4.2.0" - } - }, - "socket.io": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-1.7.3.tgz", - "integrity": "sha1-uK+cq6AJSeVo42nxMn6pvp6iRhs=", - "dev": true, - "requires": { - "debug": "2.3.3", - "engine.io": "1.8.3", - "has-binary": "0.1.7", - "object-assign": "4.1.0", - "socket.io-adapter": "0.5.0", - "socket.io-client": "1.7.3", - "socket.io-parser": "2.3.1" - }, - "dependencies": { - "debug": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", - "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", - "dev": true, - "requires": { - "ms": "0.7.2" - } - }, - "ms": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", - "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", - "dev": true - }, - "object-assign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz", - "integrity": "sha1-ejs9DpgGPUP0wD8uiubNUahog6A=", - "dev": true - } - } - }, - "socket.io-adapter": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-0.5.0.tgz", - "integrity": "sha1-y21LuL7IHhB4uZZ3+c7QBGBmu4s=", - "dev": true, - "requires": { - "debug": "2.3.3", - "socket.io-parser": "2.3.1" - }, - "dependencies": { - "debug": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", - "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", - "dev": true, - "requires": { - "ms": "0.7.2" - } - }, - "ms": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", - "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", - "dev": true - } - } - }, - "socket.io-client": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-1.7.3.tgz", - "integrity": "sha1-sw6GqhDV7zVGYBwJzeR2Xjgdo3c=", - "dev": true, - "requires": { - "backo2": "1.0.2", - "component-bind": "1.0.0", - "component-emitter": "1.2.1", - "debug": "2.3.3", - "engine.io-client": "1.8.3", - "has-binary": "0.1.7", - "indexof": "0.0.1", - "object-component": "0.0.3", - "parseuri": "0.0.5", - "socket.io-parser": "2.3.1", - "to-array": "0.1.4" - }, - "dependencies": { - "component-emitter": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", - "dev": true - }, - "debug": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", - "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", - "dev": true, - "requires": { - "ms": "0.7.2" - } - }, - "ms": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", - "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", - "dev": true - } - } - }, - "socket.io-parser": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-2.3.1.tgz", - "integrity": "sha1-3VMgJRA85Clpcya+/WQAX8/ltKA=", - "dev": true, - "requires": { - "component-emitter": "1.1.2", - "debug": "2.2.0", - "isarray": "0.0.1", - "json3": "3.3.2" - }, - "dependencies": { - "debug": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", - "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", - "dev": true, - "requires": { - "ms": "0.7.1" - } - }, - "ms": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", - "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", - "dev": true - } - } - }, - "sockjs-client": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.1.4.tgz", - "integrity": "sha1-W6vjhrd15M8U51IJEUUmVAFsixI=", - "dev": true, - "requires": { - "debug": "2.6.9", - "eventsource": "0.1.6", - "faye-websocket": "0.11.1", - "inherits": "2.0.3", - "json3": "3.3.2", - "url-parse": "1.1.9" - }, - "dependencies": { - "faye-websocket": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.1.tgz", - "integrity": "sha1-8O/hjE9W5PQK/H4Gxxn9XuYYjzg=", - "dev": true, - "requires": { - "websocket-driver": "0.7.0" - } - } - } - }, - "sort-keys": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", - "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", - "dev": true, - "requires": { - "is-plain-obj": "1.1.0" - } - }, - "source-list-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.0.tgz", - "integrity": "sha512-I2UmuJSRr/T8jisiROLU3A3ltr+swpniSmNPI4Ml3ZCX6tVnDsuZzK7F2hl5jTqbZBWCEKlj5HRQiPExXLgE8A==", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - }, - "source-map-loader": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-0.2.1.tgz", - "integrity": "sha1-SBJr6SML1H+tBeRqjDwuPS2r5Qc=", - "dev": true, - "requires": { - "async": "0.9.2", - "loader-utils": "0.2.17", - "source-map": "0.1.43" - }, - "dependencies": { - "async": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", - "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=", - "dev": true - }, - "loader-utils": { - "version": "0.2.17", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", - "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", - "dev": true, - "requires": { - "big.js": "3.2.0", - "emojis-list": "2.1.0", - "json5": "0.5.1", - "object-assign": "4.1.1" - } - }, - "source-map": { - "version": "0.1.43", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", - "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=", - "dev": true, - "requires": { - "amdefine": "1.0.1" - } - } - } - }, - "source-map-resolve": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.1.tgz", - "integrity": "sha512-0KW2wvzfxm8NCTb30z0LMNyPqWCdDGE2viwzUaucqJdkTRXtZiSY3I+2A6nVAjmdOy0I4gU8DwnVVGsk9jvP2A==", - "dev": true, - "requires": { - "atob": "2.0.3", - "decode-uri-component": "0.2.0", - "resolve-url": "0.2.1", - "source-map-url": "0.4.0", - "urix": "0.1.0" - } - }, - "source-map-support": { - "version": "0.4.18", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", - "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", - "dev": true, - "requires": { - "source-map": "0.5.7" - } - }, - "source-map-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", - "dev": true - }, - "spdx-correct": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", - "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=", - "dev": true, - "requires": { - "spdx-license-ids": "1.2.2" - } - }, - "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=", - "dev": true - }, - "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=", - "dev": true - }, - "spdy": { - "version": "3.4.7", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-3.4.7.tgz", - "integrity": "sha1-Qv9B7OXMD5mjpsKKq7c/XDsDrLw=", - "dev": true, - "requires": { - "debug": "2.6.9", - "handle-thing": "1.2.5", - "http-deceiver": "1.2.7", - "safe-buffer": "5.1.1", - "select-hose": "2.0.0", - "spdy-transport": "2.0.20" - } - }, - "spdy-transport": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-2.0.20.tgz", - "integrity": "sha1-c15yBUxIayNU/onnAiVgBKOazk0=", - "dev": true, - "requires": { - "debug": "2.6.9", - "detect-node": "2.0.3", - "hpack.js": "2.1.6", - "obuf": "1.1.1", - "readable-stream": "2.3.3", - "safe-buffer": "5.1.1", - "wbuf": "1.7.2" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "readable-stream": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", - "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "safe-buffer": "5.1.1", - "string_decoder": "1.0.3", - "util-deprecate": "1.0.2" - } - }, - "string_decoder": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", - "dev": true, - "requires": { - "safe-buffer": "5.1.1" - } - } - } - }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, - "requires": { - "extend-shallow": "3.0.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": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "sshpk": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz", - "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=", - "dev": true, - "requires": { - "asn1": "0.2.3", - "assert-plus": "1.0.0", - "bcrypt-pbkdf": "1.0.1", - "dashdash": "1.14.1", - "ecc-jsbn": "0.1.1", - "getpass": "0.1.7", - "jsbn": "0.1.1", - "tweetnacl": "0.14.5" - } - }, - "ssri": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-5.1.0.tgz", - "integrity": "sha512-TevC8fgxQKTfQ1nWtM9GNzr3q5rrHNntG9CDMH1k3QhSZI6Kb+NbjLRs8oPFZa2Hgo7zoekL+UTvoEk7tsbjQg==", - "dev": true, - "requires": { - "safe-buffer": "5.1.1" - } - }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "dev": true, - "requires": { - "define-property": "0.2.5", - "object-copy": "0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "0.1.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.5" - } - } - } - }, - "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.5" - } - } - } - }, - "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 - } - } - }, - "statuses": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", - "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=", - "dev": true - }, - "stdout-stream": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.0.tgz", - "integrity": "sha1-osfIWH5U2UJ+qe2zrD8s1SLfN4s=", - "dev": true, - "optional": true, - "requires": { - "readable-stream": "2.3.3" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true, - "optional": true - }, - "readable-stream": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", - "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", - "dev": true, - "optional": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "safe-buffer": "5.1.1", - "string_decoder": "1.0.3", - "util-deprecate": "1.0.2" - } - }, - "string_decoder": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "5.1.1" - } - } - } - }, - "stream-browserify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz", - "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=", - "dev": true, - "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.3" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "readable-stream": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", - "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "safe-buffer": "5.1.1", - "string_decoder": "1.0.3", - "util-deprecate": "1.0.2" - } - }, - "string_decoder": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", - "dev": true, - "requires": { - "safe-buffer": "5.1.1" - } - } - } - }, - "stream-each": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.2.tgz", - "integrity": "sha512-mc1dbFhGBxvTM3bIWmAAINbqiuAk9TATcfIQC8P+/+HJefgaiTlMn2dHvkX8qlI12KeYKSQ1Ua9RrIqrn1VPoA==", - "dev": true, - "requires": { - "end-of-stream": "1.4.1", - "stream-shift": "1.0.0" - } - }, - "stream-http": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.7.2.tgz", - "integrity": "sha512-c0yTD2rbQzXtSsFSVhtpvY/vS6u066PcXOX9kBB3mSO76RiUQzL340uJkGBWnlBg4/HZzqiUXtaVA7wcRcJgEw==", - "dev": true, - "requires": { - "builtin-status-codes": "3.0.0", - "inherits": "2.0.3", - "readable-stream": "2.3.3", - "to-arraybuffer": "1.0.1", - "xtend": "4.0.1" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "readable-stream": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", - "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "safe-buffer": "5.1.1", - "string_decoder": "1.0.3", - "util-deprecate": "1.0.2" - } - }, - "string_decoder": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", - "dev": true, - "requires": { - "safe-buffer": "5.1.1" - } - } - } - }, - "stream-shift": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", - "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=", - "dev": true - }, - "strict-uri-encode": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", - "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=", - "dev": true - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "4.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "3.0.0" - } - } - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - }, - "stringstream": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", - "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=", - "dev": true - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - }, - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true, - "requires": { - "is-utf8": "0.2.1" - } - }, - "strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", - "dev": true - }, - "strip-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", - "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", - "dev": true, - "requires": { - "get-stdin": "4.0.1" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true - }, - "style-loader": { - "version": "0.13.2", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.13.2.tgz", - "integrity": "sha1-dFMzhM9pjHEEx5URULSXF63C87s=", - "dev": true, - "requires": { - "loader-utils": "1.1.0" - } - }, - "stylus": { - "version": "0.54.5", - "resolved": "https://registry.npmjs.org/stylus/-/stylus-0.54.5.tgz", - "integrity": "sha1-QrlWCTHKcJDOhRWnmLqeaqPW3Hk=", - "dev": true, - "requires": { - "css-parse": "1.7.0", - "debug": "2.6.9", - "glob": "7.0.6", - "mkdirp": "0.5.1", - "sax": "0.5.8", - "source-map": "0.1.43" - }, - "dependencies": { - "glob": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.0.6.tgz", - "integrity": "sha1-IRuvr0nlJbjNkyYNFKsTYVKz9Xo=", - "dev": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, - "sax": { - "version": "0.5.8", - "resolved": "https://registry.npmjs.org/sax/-/sax-0.5.8.tgz", - "integrity": "sha1-1HLbIo6zMcJQaw6MFVJK25OdEsE=", - "dev": true - }, - "source-map": { - "version": "0.1.43", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", - "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=", - "dev": true, - "requires": { - "amdefine": "1.0.1" - } - } - } - }, - "stylus-loader": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/stylus-loader/-/stylus-loader-3.0.1.tgz", - "integrity": "sha1-d/SzT9Aw0lsmF7z1UT21sHMMQIk=", - "dev": true, - "requires": { - "loader-utils": "1.1.0", - "lodash.clonedeep": "4.5.0", - "when": "3.6.4" - } - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "requires": { - "has-flag": "1.0.0" - } - }, - "svgo": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-0.7.2.tgz", - "integrity": "sha1-n1dyQTlSE1xv779Ar+ak+qiLS7U=", - "dev": true, - "requires": { - "coa": "1.0.4", - "colors": "1.1.2", - "csso": "2.3.2", - "js-yaml": "3.7.0", - "mkdirp": "0.5.1", - "sax": "1.2.4", - "whet.extend": "0.9.9" - } - }, - "symbol-observable": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.4.tgz", - "integrity": "sha1-Kb9hXUqnEhvdiYsi1LP5vE4qoD0=" - }, - "tapable": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-0.2.8.tgz", - "integrity": "sha1-mTcqXJmb8t8WCvwNdL7U9HlIzSI=", - "dev": true - }, - "tar": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", - "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", - "dev": true, - "optional": true, - "requires": { - "block-stream": "0.0.9", - "fstream": "1.0.11", - "inherits": "2.0.3" - } - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true - }, - "through2": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", - "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", - "dev": true, - "requires": { - "readable-stream": "2.3.3", - "xtend": "4.0.1" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "readable-stream": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", - "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "safe-buffer": "5.1.1", - "string_decoder": "1.0.3", - "util-deprecate": "1.0.2" - } - }, - "string_decoder": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", - "dev": true, - "requires": { - "safe-buffer": "5.1.1" - } - } - } - }, - "thunky": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-0.1.0.tgz", - "integrity": "sha1-vzAUaCTituZ7Dy16Ssi+smkIaE4=", - "dev": true - }, - "time-stamp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-2.0.0.tgz", - "integrity": "sha1-lcakRTDhW6jW9KPsuMOj+sRto1c=", - "dev": true - }, - "timers-browserify": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.4.tgz", - "integrity": "sha512-uZYhyU3EX8O7HQP+J9fTVYwsq90Vr68xPEFo7yrVImIxYvHgukBEgOB/SgGoorWVTzGM/3Z+wUNnboA4M8jWrg==", - "dev": true, - "requires": { - "setimmediate": "1.0.5" - } - }, - "tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "requires": { - "os-tmpdir": "1.0.2" - } - }, - "to-array": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", - "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=", - "dev": true - }, - "to-arraybuffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", - "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", - "dev": true - }, - "to-fast-properties": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", - "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", - "dev": true - }, - "to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - } - }, - "to-regex": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.1.tgz", - "integrity": "sha1-FTWL7kosg712N3uh3ASdDxiDeq4=", - "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.5" - } - } - } - }, - "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.5" - } - } - } - }, - "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 - } - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "requires": { - "is-number": "3.0.0", - "repeat-string": "1.6.1" - }, - "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" - } - } - } - }, - "toposort": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/toposort/-/toposort-1.0.3.tgz", - "integrity": "sha1-8CzYp0vYvi/A6YYRw7rLlaFxhpw=", - "dev": true - }, - "tough-cookie": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.3.tgz", - "integrity": "sha1-C2GKVWW23qkL80JdBNVe3EdadWE=", - "dev": true, - "requires": { - "punycode": "1.4.1" - } - }, - "tree-kill": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.0.tgz", - "integrity": "sha512-DlX6dR0lOIRDFxI0mjL9IYg6OTncLm/Zt+JiBhE5OlFcAR8yc9S7FFXU9so0oda47frdM/JFsk7UjNt9vscKcg==", - "dev": true - }, - "trim-newlines": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", - "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", - "dev": true - }, - "trim-right": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", - "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", - "dev": true - }, - "true-case-path": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-1.0.2.tgz", - "integrity": "sha1-fskRMJJHZsf1c74wIMNPj9/QDWI=", - "dev": true, - "optional": true, - "requires": { - "glob": "6.0.4" - }, - "dependencies": { - "glob": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", - "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=", - "dev": true, - "optional": true, - "requires": { - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - } - } - }, - "ts-node": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-3.2.2.tgz", - "integrity": "sha1-u9KOOK9Kqj6WB2xGbhsiAZfBo84=", - "dev": true, - "requires": { - "arrify": "1.0.1", - "chalk": "2.1.0", - "diff": "3.3.1", - "make-error": "1.3.0", - "minimist": "1.2.0", - "mkdirp": "0.5.1", - "source-map-support": "0.4.18", - "tsconfig": "6.0.0", - "v8flags": "3.0.1", - "yn": "2.0.0" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - } - } - }, - "tsconfig": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/tsconfig/-/tsconfig-6.0.0.tgz", - "integrity": "sha1-aw6DdgA9evGGT434+J3QBZ/80DI=", - "dev": true, - "requires": { - "strip-bom": "3.0.0", - "strip-json-comments": "2.0.1" - }, - "dependencies": { - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - } - } - }, - "tslib": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.7.1.tgz", - "integrity": "sha1-vIAEFkaRkjp5/oN4u+s9ogF1OOw=" - }, - "tslint": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.3.2.tgz", - "integrity": "sha1-5WRZ+wlacwfxA7hAUhdPXju+9u0=", - "dev": true, - "requires": { - "babel-code-frame": "6.26.0", - "colors": "1.1.2", - "diff": "3.3.1", - "glob": "7.1.2", - "optimist": "0.6.1", - "resolve": "1.4.0", - "semver": "5.4.1", - "tslib": "1.7.1", - "tsutils": "2.8.2" - }, - "dependencies": { - "optimist": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", - "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", - "dev": true, - "requires": { - "minimist": "0.0.8", - "wordwrap": "0.0.3" - } - } - } - }, - "tsutils": { - "version": "2.8.2", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.8.2.tgz", - "integrity": "sha1-LBSGukMSYIRbCsb5Aq/Z1wio6mo=", - "dev": true, - "requires": { - "tslib": "1.7.1" - } - }, - "tty-browserify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", - "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", - "dev": true - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true, - "requires": { - "safe-buffer": "5.1.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true, - "optional": true - }, - "type-is": { - "version": "1.6.15", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.15.tgz", - "integrity": "sha1-yrEPtJCeRByChC6v4a1kbIGARBA=", - "dev": true, - "requires": { - "media-typer": "0.3.0", - "mime-types": "2.1.17" - } - }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", - "dev": true - }, - "typescript": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.4.2.tgz", - "integrity": "sha1-+DlfhdRZJ2BnyYiqQYN6j4KHCEQ=", - "dev": true - }, - "uglify-es": { - "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", - "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", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "uglify-js": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.1.2.tgz", - "integrity": "sha512-kKJ8zg7Ivw3DG9Ytgp4+iiSHq3HaHjEQMvyT2x2Bs8kSUwVemj6bPGFp6YWL81f5NAIOLVUKPxBSvqLRGXMpdw==", - "dev": true, - "requires": { - "commander": "2.11.0", - "source-map": "0.5.7" - } - }, - "uglify-to-browserify": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", - "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", - "dev": true, - "optional": true - }, - "uglifyjs-webpack-plugin": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.1.8.tgz", - "integrity": "sha512-XG8/QmR1pyPeE1kj2aigo5kos8umefB31zW+PMvAAytHSB0T/vQvN6sqt8+Sh+y0b0A7zlmxNi2dzRnj0wcqGA==", - "dev": true, - "requires": { - "cacache": "10.0.2", - "find-cache-dir": "1.0.0", - "schema-utils": "0.4.3", - "serialize-javascript": "1.4.0", - "source-map": "0.6.1", - "uglify-es": "3.3.9", - "webpack-sources": "1.1.0", - "worker-farm": "1.5.2" - }, - "dependencies": { - "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.2.3", - "ajv-keywords": "2.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "webpack-sources": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.1.0.tgz", - "integrity": "sha512-aqYp18kPphgoO5c/+NaUvEeACtZjMESmDChuD3NBciVpah3XpMEU9VAAtIaB1BsfJWWTSdv8Vv1m3T0aRk2dUw==", - "dev": true, - "requires": { - "source-list-map": "2.0.0", - "source-map": "0.6.1" - } - } - } - }, - "ultron": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz", - "integrity": "sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po=", - "dev": true - }, - "union-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", - "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", - "dev": true, - "requires": { - "arr-union": "3.1.0", - "get-value": "2.0.6", - "is-extendable": "0.1.1", - "set-value": "0.4.3" - }, - "dependencies": { - "set-value": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", - "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", - "dev": true, - "requires": { - "extend-shallow": "2.0.1", - "is-extendable": "0.1.1", - "is-plain-object": "2.0.4", - "to-object-path": "0.3.0" - } - } - } - }, - "uniq": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", - "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", - "dev": true - }, - "uniqid": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/uniqid/-/uniqid-4.1.1.tgz", - "integrity": "sha1-iSIN32t1GuUrX3JISGNShZa7hME=", - "dev": true, - "requires": { - "macaddress": "0.2.8" - } - }, - "uniqs": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", - "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=", - "dev": true - }, - "unique-filename": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.0.tgz", - "integrity": "sha1-0F8v5AMlYIcfMOk8vnNe6iAVFPM=", - "dev": true, - "requires": { - "unique-slug": "2.0.0" - } - }, - "unique-slug": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.0.tgz", - "integrity": "sha1-22Z258fMBimHj/GWCXx4hVrp9Ks=", - "dev": true, - "requires": { - "imurmurhash": "0.1.4" - } - }, - "universalify": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.1.tgz", - "integrity": "sha1-+nG63UQ3r0wUiEHjs7Fl+enlkLc=", - "dev": true - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", - "dev": true - }, - "unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "dev": true, - "requires": { - "has-value": "0.3.1", - "isobject": "3.0.1" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "dev": true, - "requires": { - "get-value": "2.0.6", - "has-values": "0.1.4", - "isobject": "2.1.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - } - } - }, - "upper-case": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", - "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=", - "dev": true - }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "dev": true - }, - "url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", - "dev": true, - "requires": { - "punycode": "1.3.2", - "querystring": "0.2.0" - }, - "dependencies": { - "punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", - "dev": true - } - } - }, - "url-loader": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-0.6.2.tgz", - "integrity": "sha512-h3qf9TNn53BpuXTTcpC+UehiRrl0Cv45Yr/xWayApjw6G8Bg2dGke7rIwDQ39piciWCWrC+WiqLjOh3SUp9n0Q==", - "dev": true, - "requires": { - "loader-utils": "1.1.0", - "mime": "1.4.1", - "schema-utils": "0.3.0" - } - }, - "url-parse": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.1.9.tgz", - "integrity": "sha1-xn8dd11R8KGJEd17P/rSe7nlvRk=", - "dev": true, - "requires": { - "querystringify": "1.0.0", - "requires-port": "1.0.0" - }, - "dependencies": { - "querystringify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-1.0.0.tgz", - "integrity": "sha1-YoYkIRLFtxL6ZU5SZlK/ahP/Bcs=", - "dev": true - } - } - }, - "use": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/use/-/use-2.0.2.tgz", - "integrity": "sha1-riig1y+TvyJCKhii43mZMRLeyOg=", - "dev": true, - "requires": { - "define-property": "0.2.5", - "isobject": "3.0.1", - "lazy-cache": "2.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.5" - } - } - } - }, - "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.5" - } - } - } - }, - "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 - }, - "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=", - "dev": true, - "requires": { - "lru-cache": "2.2.4", - "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": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", - "dev": true, - "requires": { - "inherits": "2.0.1" - }, - "dependencies": { - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", - "dev": true - } - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "utila": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", - "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=", - "dev": true - }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", - "dev": true - }, - "uuid": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz", - "integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g==", - "dev": true - }, - "v8flags": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.0.1.tgz", - "integrity": "sha1-3Oj8N5wX2fLJ6e142JzgAFKxt2s=", - "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=", - "dev": true, - "requires": { - "spdx-correct": "1.0.2", - "spdx-expression-parse": "1.0.4" - } - }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", - "dev": true - }, - "vendors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.1.tgz", - "integrity": "sha1-N61zyO5Bf7PVgOeFMSMH0nSEfyI=", - "dev": true - }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "dev": true, - "requires": { - "assert-plus": "1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "1.3.0" - } - }, - "vlq": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/vlq/-/vlq-0.2.2.tgz", - "integrity": "sha1-4xbVJXtAuGu0PLjV/qXX9U1rDKE=", - "dev": true - }, - "vm-browserify": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", - "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=", - "dev": true, - "requires": { - "indexof": "0.0.1" - } - }, - "void-elements": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", - "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=", - "dev": true - }, - "watchpack": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.4.0.tgz", - "integrity": "sha1-ShRyvLuVK9Cpu0A2gB+VTfs5+qw=", - "dev": true, - "requires": { - "async": "2.5.0", - "chokidar": "1.7.0", - "graceful-fs": "4.1.11" - } - }, - "wbuf": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.2.tgz", - "integrity": "sha1-1pe5nx9ZUS3ydRvkJ2nBWAtYAf4=", - "dev": true, - "requires": { - "minimalistic-assert": "1.0.0" - } - }, - "webdriver-js-extender": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/webdriver-js-extender/-/webdriver-js-extender-1.0.0.tgz", - "integrity": "sha1-gcUzqeM9W/tZe05j4s2yW1R3dRU=", - "dev": true, - "requires": { - "@types/selenium-webdriver": "2.53.42", - "selenium-webdriver": "2.53.3" - }, - "dependencies": { - "adm-zip": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.4.tgz", - "integrity": "sha1-ph7VrmkFw66lizplfSUDMJEFJzY=", - "dev": true - }, - "sax": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/sax/-/sax-0.6.1.tgz", - "integrity": "sha1-VjsZx8HeiS4Jv8Ty/DDjwn8JUrk=", - "dev": true - }, - "selenium-webdriver": { - "version": "2.53.3", - "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-2.53.3.tgz", - "integrity": "sha1-0p/1qVff8aG0ncRXdW5OS/vc4IU=", - "dev": true, - "requires": { - "adm-zip": "0.4.4", - "rimraf": "2.6.2", - "tmp": "0.0.24", - "ws": "1.1.2", - "xml2js": "0.4.4" - } - }, - "tmp": { - "version": "0.0.24", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.24.tgz", - "integrity": "sha1-1qXhmNFKmDXMby18PZ4wJCjIzxI=", - "dev": true - }, - "xml2js": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.4.tgz", - "integrity": "sha1-MREBAAMAiuGSQOuhdJe1fHKcVV0=", - "dev": true, - "requires": { - "sax": "0.6.1", - "xmlbuilder": "9.0.4" - } - } - } - }, - "webpack": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-3.10.0.tgz", - "integrity": "sha512-fxxKXoicjdXNUMY7LIdY89tkJJJ0m1Oo8PQutZ5rLgWbV5QVKI15Cn7+/IHnRTd3vfKfiwBx6SBqlorAuNA8LA==", - "dev": true, - "requires": { - "acorn": "5.1.2", - "acorn-dynamic-import": "2.0.2", - "ajv": "5.2.3", - "ajv-keywords": "2.1.0", - "async": "2.5.0", - "enhanced-resolve": "3.4.1", - "escope": "3.6.0", - "interpret": "1.0.4", - "json-loader": "0.5.7", - "json5": "0.5.1", - "loader-runner": "2.3.0", - "loader-utils": "1.1.0", - "memory-fs": "0.4.1", - "mkdirp": "0.5.1", - "node-libs-browser": "2.0.0", - "source-map": "0.5.7", - "supports-color": "4.5.0", - "tapable": "0.2.8", - "uglifyjs-webpack-plugin": "0.4.6", - "watchpack": "1.4.0", - "webpack-sources": "1.0.1", - "yargs": "8.0.2" - }, - "dependencies": { - "camelcase": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", - "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", - "dev": true - }, - "cliui": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", - "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", - "dev": true, - "requires": { - "center-align": "0.1.3", - "right-align": "0.1.3", - "wordwrap": "0.0.2" - } - }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "2.0.0" - } - }, - "has-flag": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "1.0.1" - } - }, - "load-json-file": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", - "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "parse-json": "2.2.0", - "pify": "2.3.0", - "strip-bom": "3.0.0" - } - }, - "os-locale": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", - "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", - "dev": true, - "requires": { - "execa": "0.7.0", - "lcid": "1.0.0", - "mem": "1.1.0" - } - }, - "path-type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", - "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", - "dev": true, - "requires": { - "pify": "2.3.0" - } - }, - "read-pkg": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", - "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", - "dev": true, - "requires": { - "load-json-file": "2.0.0", - "normalize-package-data": "2.4.0", - "path-type": "2.0.0" - } - }, - "read-pkg-up": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", - "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", - "dev": true, - "requires": { - "find-up": "2.1.0", - "read-pkg": "2.0.0" - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - }, - "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" - } - }, - "uglify-js": { - "version": "2.8.29", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", - "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", - "dev": true, - "requires": { - "source-map": "0.5.7", - "uglify-to-browserify": "1.0.2", - "yargs": "3.10.0" - }, - "dependencies": { - "yargs": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", - "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", - "dev": true, - "requires": { - "camelcase": "1.2.1", - "cliui": "2.1.0", - "decamelize": "1.2.0", - "window-size": "0.1.0" - } - } - } - }, - "uglifyjs-webpack-plugin": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-0.4.6.tgz", - "integrity": "sha1-uVH0q7a9YX5m9j64kUmOORdj4wk=", - "dev": true, - "requires": { - "source-map": "0.5.7", - "uglify-js": "2.8.29", - "webpack-sources": "1.0.1" - } - }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, - "wordwrap": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", - "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", - "dev": true - }, - "yargs": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-8.0.2.tgz", - "integrity": "sha1-YpmpBVsc78lp/355wdkY3Osiw2A=", - "dev": true, - "requires": { - "camelcase": "4.1.0", - "cliui": "3.2.0", - "decamelize": "1.2.0", - "get-caller-file": "1.0.2", - "os-locale": "2.1.0", - "read-pkg-up": "2.0.0", - "require-directory": "2.1.1", - "require-main-filename": "1.0.1", - "set-blocking": "2.0.0", - "string-width": "2.1.1", - "which-module": "2.0.0", - "y18n": "3.2.1", - "yargs-parser": "7.0.0" - }, - "dependencies": { - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", - "dev": true - }, - "cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", - "dev": true, - "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wrap-ansi": "2.1.0" - }, - "dependencies": { - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" - } - } - } - } - } - }, - "yargs-parser": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz", - "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=", - "dev": true, - "requires": { - "camelcase": "4.1.0" - }, - "dependencies": { - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", - "dev": true - } - } - } - } - }, - "webpack-core": { - "version": "0.6.9", - "resolved": "https://registry.npmjs.org/webpack-core/-/webpack-core-0.6.9.tgz", - "integrity": "sha1-/FcViMhVjad76e+23r3Fo7FyvcI=", - "dev": true, - "requires": { - "source-list-map": "0.1.8", - "source-map": "0.4.4" - }, - "dependencies": { - "source-list-map": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-0.1.8.tgz", - "integrity": "sha1-xVCyq1Qn9rPyH1r+rYjE9Vh7IQY=", - "dev": true - }, - "source-map": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", - "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", - "dev": true, - "requires": { - "amdefine": "1.0.1" - } - } - } - }, - "webpack-dev-middleware": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-1.12.0.tgz", - "integrity": "sha1-007++y7dp+HTtdvgcolRMhllFwk=", - "dev": true, - "requires": { - "memory-fs": "0.4.1", - "mime": "1.4.1", - "path-is-absolute": "1.0.1", - "range-parser": "1.2.0", - "time-stamp": "2.0.0" - } - }, - "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==", - "dev": true, - "requires": { - "ansi-html": "0.0.7", - "array-includes": "3.0.3", - "bonjour": "3.5.0", - "chokidar": "2.0.0", - "compression": "1.7.0", - "connect-history-api-fallback": "1.3.0", - "debug": "3.1.0", - "del": "3.0.0", - "express": "4.16.2", - "html-entities": "1.2.1", - "http-proxy-middleware": "0.17.4", - "import-local": "1.0.0", - "internal-ip": "1.2.0", - "ip": "1.1.5", - "killable": "1.0.0", - "loglevel": "1.6.1", - "opn": "5.1.0", - "portfinder": "1.0.13", - "selfsigned": "1.10.1", - "serve-index": "1.9.0", - "sockjs": "0.3.19", - "sockjs-client": "1.1.4", - "spdy": "3.4.7", - "strip-ansi": "3.0.1", - "supports-color": "5.1.0", - "webpack-dev-middleware": "1.12.2", - "yargs": "6.6.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.5", - "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.0", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.0.tgz", - "integrity": "sha512-P4O8UQRdGiMLWSizsApmXVQDBS6KCt7dSexgLKBmH5Hr1CZq7vsnscFh8oR1sP1ab1Zj0uCHCEzZeV6SfUf3rA==", - "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", - "repeat-element": "1.1.2", - "snapdragon": "0.8.1", - "snapdragon-node": "2.1.1", - "split-string": "3.1.0", - "to-regex": "3.0.1" - } - }, - "camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", - "dev": true - }, - "chokidar": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.0.tgz", - "integrity": "sha512-OgXCNv2U6TnG04D3tth0gsvdbV4zdbxFG3sYUqcoQMoEFVd1j1pZR6TZ8iknC45o9IJ6PeQI/J6wT/+cHcniAw==", - "dev": true, - "requires": { - "anymatch": "2.0.0", - "async-each": "1.0.1", - "braces": "2.3.0", - "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" - } - }, - "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" - } - }, - "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.0", - "snapdragon": "0.8.1", - "to-regex": "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" - } - }, - "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" - } - } - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "requires": { - "array-unique": "0.3.2", - "define-property": "1.0.0", - "expand-brackets": "2.1.4", - "extend-shallow": "2.0.1", - "fragment-cache": "0.2.1", - "regex-not": "1.0.0", - "snapdragon": "0.8.1", - "to-regex": "3.0.1" - } - }, - "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" - } - }, - "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" - } - } - } - }, - "has-flag": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", - "dev": true - }, - "import-local": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-1.0.0.tgz", - "integrity": "sha512-vAaZHieK9qjGo58agRBg+bhHX3hoTZU/Oa3GESWLz7t1U62fk63aHuDJJEteXoDeTCcPmUT+z38gkHPZkkmpmQ==", - "dev": true, - "requires": { - "pkg-dir": "2.0.0", - "resolve-cwd": "2.0.0" - } - }, - "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.5" - } - } - } - }, - "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.5" - } - } - } - }, - "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", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "1.0.1" - } - }, - "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.5" - } - } - } - }, - "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.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.5.tgz", - "integrity": "sha512-ykttrLPQrz1PUJcXjwsTUjGoPJ64StIGNE2lGVD1c9CuguJ+L7/navsE8IcDNndOoCMvYV0qc/exfVbMHkUhvA==", - "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", - "extglob": "2.0.4", - "fragment-cache": "0.2.1", - "kind-of": "6.0.2", - "nanomatch": "1.2.7", - "object.pick": "1.3.0", - "regex-not": "1.0.0", - "snapdragon": "0.8.1", - "to-regex": "3.0.1" - } - }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true - }, - "sockjs": { - "version": "0.3.19", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.19.tgz", - "integrity": "sha512-V48klKZl8T6MzatbLlzzRNhMepEys9Y4oGFpypBFFn1gLI/QQ9HtLLyWJNbPlwGLelOVOEijUbTTJeLLI59jLw==", - "dev": true, - "requires": { - "faye-websocket": "0.10.0", - "uuid": "3.1.0" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" - } - }, - "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==", - "dev": true, - "requires": { - "has-flag": "2.0.0" - } - }, - "webpack-dev-middleware": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-1.12.2.tgz", - "integrity": "sha512-FCrqPy1yy/sN6U/SaEZcHKRXGlqU0DUaEBL45jkUYoB8foVb6wCnbIJ1HKIx+qUFTW+3JpVcCJCxZ8VATL4e+A==", - "dev": true, - "requires": { - "memory-fs": "0.4.1", - "mime": "1.6.0", - "path-is-absolute": "1.0.1", - "range-parser": "1.2.0", - "time-stamp": "2.0.0" - } - }, - "yargs": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-6.6.0.tgz", - "integrity": "sha1-eC7CHvQDNF+DCoCMo9UTr1YGUgg=", - "dev": true, - "requires": { - "camelcase": "3.0.0", - "cliui": "3.2.0", - "decamelize": "1.2.0", - "get-caller-file": "1.0.2", - "os-locale": "1.4.0", - "read-pkg-up": "1.0.1", - "require-directory": "2.1.1", - "require-main-filename": "1.0.1", - "set-blocking": "2.0.0", - "string-width": "1.0.2", - "which-module": "1.0.0", - "y18n": "3.2.1", - "yargs-parser": "4.2.1" - } - }, - "yargs-parser": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-4.2.1.tgz", - "integrity": "sha1-KczqwNxPA8bIe0qfIX3RjJ90hxw=", - "dev": true, - "requires": { - "camelcase": "3.0.0" - } - } - } - }, - "webpack-merge": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.1.0.tgz", - "integrity": "sha1-atciI7PguDflMeRZfBmfkJNhUR4=", - "dev": true, - "requires": { - "lodash": "4.17.4" - } - }, - "webpack-sources": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.0.1.tgz", - "integrity": "sha512-05tMxipUCwHqYaVS8xc7sYPTly8PzXayRCB4dTxLhWTqlKUiwH6ezmEe0OSreL1c30LAuA3Zqmc+uEBUGFJDjw==", - "dev": true, - "requires": { - "source-list-map": "2.0.0", - "source-map": "0.5.7" - } - }, - "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=", - "dev": true, - "requires": { - "webpack-core": "0.6.9" - } - }, - "websocket-driver": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.0.tgz", - "integrity": "sha1-DK+dLXVdk67gSdS90NP+LMoqJOs=", - "dev": true, - "requires": { - "http-parser-js": "0.4.8", - "websocket-extensions": "0.1.2" - } - }, - "websocket-extensions": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.2.tgz", - "integrity": "sha1-Dhh4HeYpoYMIzhSBZQ9n/6JpOl0=", - "dev": true - }, - "when": { - "version": "3.6.4", - "resolved": "https://registry.npmjs.org/when/-/when-3.6.4.tgz", - "integrity": "sha1-RztRfsFZ4rhQBUl6E5g/CVQS404=", - "dev": true - }, - "whet.extend": { - "version": "0.9.9", - "resolved": "https://registry.npmjs.org/whet.extend/-/whet.extend-0.9.9.tgz", - "integrity": "sha1-+HfVv2SMl+WqVC+twW1qJZucEaE=", - "dev": true - }, - "which": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", - "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", - "dev": true, - "requires": { - "isexe": "2.0.0" - } - }, - "which-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", - "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", - "dev": true - }, - "wide-align": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz", - "integrity": "sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w==", - "dev": true, - "requires": { - "string-width": "1.0.2" - }, - "dependencies": { - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "1.0.1" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" - } - } - } - }, - "window-size": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", - "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", - "dev": true - }, - "wordwrap": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", - "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", - "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==", - "dev": true, - "requires": { - "errno": "0.1.4", - "xtend": "4.0.1" - } - }, - "wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", - "dev": true, - "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1" - }, - "dependencies": { - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "1.0.1" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" - } - } - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "ws": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.2.tgz", - "integrity": "sha1-iiRPoFJAHgjJiGz0SoUYnh/UBn8=", - "dev": true, - "requires": { - "options": "0.0.6", - "ultron": "1.0.2" - } - }, - "wtf-8": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wtf-8/-/wtf-8-1.0.0.tgz", - "integrity": "sha1-OS2LotDxw00e4tYw8V0O+2jhBIo=", - "dev": true - }, - "xml-char-classes": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/xml-char-classes/-/xml-char-classes-1.0.0.tgz", - "integrity": "sha1-ZGV4SKIP/F31g6Qq2KJ3tFErvE0=", - "dev": true - }, - "xml2js": { - "version": "0.4.19", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", - "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", - "dev": true, - "requires": { - "sax": "1.2.4", - "xmlbuilder": "9.0.4" - } - }, - "xmlbuilder": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.4.tgz", - "integrity": "sha1-UZy0ymhtAFqEINNJbz8MruzKWA8=", - "dev": true - }, - "xmlhttprequest-ssl": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.3.tgz", - "integrity": "sha1-GFqIjATspGw+QHDZn3tJ3jUomS0=", - "dev": true - }, - "xtend": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", - "dev": true - }, - "xxhashjs": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/xxhashjs/-/xxhashjs-0.2.2.tgz", - "integrity": "sha512-AkTuIuVTET12tpsVIQo+ZU6f/qDmKuRUcjaqR+OIvm+aCBsZ95i7UVY5WJ9TMsSaZ0DA2WxoZ4acu0sPH+OKAw==", - "dev": true, - "requires": { - "cuint": "0.2.2" - } - }, - "y18n": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", - "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", - "dev": true - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true - }, - "yargs": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz", - "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=", - "dev": true, - "optional": true, - "requires": { - "camelcase": "3.0.0", - "cliui": "3.2.0", - "decamelize": "1.2.0", - "get-caller-file": "1.0.2", - "os-locale": "1.4.0", - "read-pkg-up": "1.0.1", - "require-directory": "2.1.1", - "require-main-filename": "1.0.1", - "set-blocking": "2.0.0", - "string-width": "1.0.2", - "which-module": "1.0.0", - "y18n": "3.2.1", - "yargs-parser": "5.0.0" - }, - "dependencies": { - "camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", - "dev": true, - "optional": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "optional": true, - "requires": { - "number-is-nan": "1.0.1" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "optional": true, - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" - } - } - } - }, - "yargs-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz", - "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=", - "dev": true, - "optional": true, - "requires": { - "camelcase": "3.0.0" - }, - "dependencies": { - "camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", - "dev": true, - "optional": true - } - } - }, - "yeast": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", - "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=", - "dev": true - }, - "yn": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yn/-/yn-2.0.0.tgz", - "integrity": "sha1-5a2ryKz0CPY4X8dklWhMiOavaJo=", - "dev": true - }, - "zone.js": { - "version": "0.8.17", - "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.8.17.tgz", - "integrity": "sha1-TF5RhahX2o2nk9rzkZNxxaNrKgs=" - } - } -} diff --git a/dmp-admin/package.json b/dmp-admin/package.json deleted file mode 100644 index 9e8df40b4..000000000 --- a/dmp-admin/package.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "name": "dmp-admin", - "version": "0.0.0", - "license": "MIT", - "scripts": { - "ng": "ng", - "start": "ng serve", - "build": "ng build", - "test": "ng test", - "lint": "ng lint", - "e2e": "ng e2e" - }, - "private": true, - "dependencies": { - "@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/forms": "5.1.1", - "@angular/http": "5.1.1", - "@angular/material": "^5.0.1", - "@angular/platform-browser": "5.1.1", - "@angular/platform-browser-dynamic": "5.1.1", - "@angular/router": "5.1.1", - "@ng-bootstrap/ng-bootstrap": "^1.0.0-beta.5", - "angular-datatables": "^4.4.0", - "angular2-datatable": "^0.6.0", - "angular2-localstorage": "^0.4.0", - "bootstrap": "^3.3.7", - "bootstrap-menu": "^1.0.14", - "core-js": "^2.4.1", - "jquery": "^3.2.1", - "ng2-bootstrap-modal": "^1.0.1", - "ng2-simple-global": "^1.2.5", - "rxjs": "^5.4.2", - "zone.js": "^0.8.14", - "@ngx-translate/core": "^9.0.1", - "@ngx-translate/http-loader": "^2.0.0" - }, - "devDependencies": { - "@angular/cli": "1.6.5", - "@angular/compiler-cli": "^5.1.1", - "@angular/language-service": "^5.1.1", - "@types/jasmine": "~2.5.53", - "@types/jasminewd2": "~2.0.2", - "@types/jquery": "^3.2.12", - "@types/node": "~6.0.60", - "codelyzer": "~3.1.1", - "jasmine-core": "~2.6.2", - "jasmine-spec-reporter": "~4.1.0", - "karma": "~1.7.0", - "karma-chrome-launcher": "~2.1.1", - "karma-cli": "~1.0.1", - "karma-coverage-istanbul-reporter": "^1.2.1", - "karma-jasmine": "~1.1.0", - "karma-jasmine-html-reporter": "^0.2.2", - "protractor": "~5.1.2", - "ts-node": "~3.2.0", - "tslint": "~5.3.2", - "typescript": "2.4.2" - } -} diff --git a/dmp-admin/src/app/app.component.css b/dmp-admin/src/app/app.component.css deleted file mode 100644 index 75fcc7987..000000000 --- a/dmp-admin/src/app/app.component.css +++ /dev/null @@ -1,28 +0,0 @@ -.navbar-center { - position: absolute; - width: 100%; - left: 0; - text-align: center; - vertical-align: middle; - margin:0 auto; -} - -.invisible { - display:none; -} - -.visible { - display:block; -} - -.cursor{ - cursor: pointer; -} - -.hide{ - display:none; -} - -.show { - display:block; -} \ No newline at end of file diff --git a/dmp-admin/src/app/app.component.html b/dmp-admin/src/app/app.component.html deleted file mode 100644 index fb3975929..000000000 --- a/dmp-admin/src/app/app.component.html +++ /dev/null @@ -1,48 +0,0 @@ - -
- - - - - - - - - - -
\ No newline at end of file diff --git a/dmp-admin/src/app/app.component.spec.ts b/dmp-admin/src/app/app.component.spec.ts deleted file mode 100644 index 9510495a2..000000000 --- a/dmp-admin/src/app/app.component.spec.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { TestBed, async } from '@angular/core/testing'; - -import { AppComponent } from './app.component'; - -describe('AppComponent', () => { - beforeEach(async(() => { - TestBed.configureTestingModule({ - declarations: [ - AppComponent - ], - }).compileComponents(); - })); - - it('should create the app', async(() => { - const fixture = TestBed.createComponent(AppComponent); - const app = fixture.debugElement.componentInstance; - expect(app).toBeTruthy(); - })); - - it(`should have as title 'app'`, async(() => { - const fixture = TestBed.createComponent(AppComponent); - const app = fixture.debugElement.componentInstance; - expect(app.title).toEqual('app'); - })); - - it('should render title in a h1 tag', async(() => { - const fixture = TestBed.createComponent(AppComponent); - fixture.detectChanges(); - const compiled = fixture.debugElement.nativeElement; - expect(compiled.querySelector('h1').textContent).toContain('Welcome to app!'); - })); -}); diff --git a/dmp-admin/src/app/app.component.ts b/dmp-admin/src/app/app.component.ts deleted file mode 100644 index 176e3a616..000000000 --- a/dmp-admin/src/app/app.component.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { Component } from '@angular/core'; -import { TokenService, TokenProvider } from './services/login/token.service'; -import {Router} from '@angular/router'; - - - -@Component({ - selector: 'app-root', - templateUrl: './app.component.html', - styleUrls: ['./app.component.css'] -}) - -export class AppComponent { - - - constructor(private tokenService : TokenService, private router: Router) { - - } - - - //loggedInAs : string = null; - - showLogin : boolean = false; - - - login(){ - //redirect to login page - } - - logout(){ - this.tokenService.logout(); - } - - - - - -} - diff --git a/dmp-admin/src/app/app.constants.ts b/dmp-admin/src/app/app.constants.ts deleted file mode 100644 index 4e7918c93..000000000 --- a/dmp-admin/src/app/app.constants.ts +++ /dev/null @@ -1,6 +0,0 @@ -export const HostConfiguration = { - Server: 'http://192.168.32.67:8080/', //'http://dl043.madgik.di.uoa.gr:8080/' - App: 'localhost:4200/' // 'http://dl043.madgik.di.uoa.gr:8080/' - //CASHost: 'https://login-devel.uoa.gr/login', - //Service: 'http://elkefinman/login' -} \ No newline at end of file diff --git a/dmp-admin/src/app/app.module.ts b/dmp-admin/src/app/app.module.ts deleted file mode 100644 index 534969aa7..000000000 --- a/dmp-admin/src/app/app.module.ts +++ /dev/null @@ -1,143 +0,0 @@ -// import { CheckBoxComponent } from './components/checkbox/checkbox-component'; -// import { FreeTextData } from './models/DataField/FreeTextData'; -// import { BooleanDecisionComponent } from './components/booleanDecision/booleanDecision-component'; -// import { FreeTextComponent } from './components/freetext/freetext-component'; -// import { TextAreaComponent } from './components/textarea/textarea-component'; -// import { RadioBoxComponent } from './components/radiobox/radiobox-component'; -// import { WordlistComponent } from './components/wordlist/wordlist-component'; -// import { AutocompleteComponent } from './components/autocomplete/autocomplete-component'; -// import { ComboboxComponent } from './components/combobox/combobox-component'; - -//import { MaterialModule } from './shared/material/material.module'; -import { AuthService } from './services/auth/auth.service'; - -import { BrowserModule } from '@angular/platform-browser'; -import { RouterModule, Routes } from '@angular/router'; -import { NgModule } from '@angular/core'; -import { HttpClientModule, HttpClient, HTTP_INTERCEPTORS } from '@angular/common/http'; -import { HttpModule } from '@angular/http'; -import { DataTableModule } from "angular2-datatable"; -import { NgbModule } from '@ng-bootstrap/ng-bootstrap'; -import { DialogService } from "ng2-bootstrap-modal"; -import { ReactiveFormsModule } from '@angular/forms'; - -import { RestBase } from './services/rest-base'; -import { TokenService } from './services/login/token.service'; -import { NativeLoginService } from './services/login/native-login.service'; -import { DatasetsServiceService } from './services/datasets-service.service'; -import { DatasetProfileService } from './services/dataset-profile.service'; -import { DmpsServiceService } from './services/dmps-service.service'; -import { ProjectService } from './services/project-service'; -import { ServiceService } from './services/service-service'; -import { ResearcherService } from './services/researcher-service'; -import { OrganisationService } from './services/organisation-service'; -import { DmpProfileService } from './services/dmpprofile-service'; -import { RegistryService } from './services/registry-service'; -import { DatarepoService } from './services/datarepo-service'; -import { GlobalInterceptor } from './services/interceptor'; -import { Toolbox } from './services/toolbox'; - -import { DataFilterPipe } from './pipes/data-filter.pipe'; -import { DatasetProfileTableFilterPipe } from './pipes/datasetprofile-table-filter.pipe'; -import { DmpTableFilterPipe } from './pipes/dmp-table-filter.pipe'; -import { ServiceTableFilterPipe } from './pipes/service-table-filter.pipe'; -import { DmpProfileTableFilterPipe } from './pipes/dmp-profile-table-filter.pipe'; -import { ProjectTableFilterPipe } from './pipes/project-table-filter.pipe'; -import { RegistryTableFilterPipe } from './pipes/registry-table-filter.pipe'; -import { OrganisationTableFilterPipe } from './pipes/organisation-table-filter.pipe'; -import { ResearcherTableFilterPipe } from './pipes/researcher-table-filter.pipe'; -import { DatarepoTableFilterPipe } from './pipes/datarepo-table-filter.pipe'; - - -import { GooggleSignInComponent } from './login/googgle-sign-in/googgle-sign-in.component'; -import { MainSignInComponent } from './login/main-sign-in/main-sign-in.component'; -import { DatasetsViewerComponent } from './datasets-viewer/datasets-viewer.component'; -import { AppComponent } from './app.component'; -import { FormsModule } from '@angular/forms'; -import { ProfileEditorComponent } from './bootstrap/profile-editor/profile-editor.component'; -import { PropertiesEditorComponent } from './bootstrap/properties-editor/properties-editor.component'; -import { NewDatasetComponent } from './bootstrap/new-dataset/new-dataset.component'; -import { ConfirmationComponent } from './bootstrap/confirmation/confirmation.component'; -import { MainWindowComponent } from './main-window/main-window.component'; -import { AppRouting } from './routes'; -import { DmpProfileEditorComponent } from './managers/dmp-profile-editor/dmp-profile-editor.component'; -import { DatasetprofileEditorComponent } from './managers/datasetprofile-editor/datasetprofile-editor.component'; -import { DatasetProfileGUIEditorComponent } from './dataset-profile-gui-editor/dataset-profile-gui-editor.component'; - -import { DatasetProfileModule } from './dataset-profile-form/dataset-profile.module'; -import { UnauthorizedModule } from './unauthorized/unauthorized.module'; - -// import { FieldFormComponent } from './dataset-profile-form/field-form/field-form.component'; -// import { FormComponent } from './dataset-profile-form/form/form.component'; -// import { GroupFieldFormComponent } from './dataset-profile-form/groupfield-form/groupfield-form.component'; -// import { RuleFormComponent } from './dataset-profile-form/rule-component/rule.component'; -// import { SectionFormComponent } from './dataset-profile-form/section-form/section-form.component'; -// import { PageFormComponent } from './dataset-profile-form/page-form/page-component'; -// import { CompositeFieldFormComponent } from './dataset-profile-form/compositefield-form/compositefield-form.component'; - - - - -@NgModule({ - declarations: [ - DataFilterPipe, - DmpTableFilterPipe, - DmpProfileTableFilterPipe, - DatasetProfileTableFilterPipe, - ProjectTableFilterPipe, - OrganisationTableFilterPipe, - RegistryTableFilterPipe, - ServiceTableFilterPipe, - ResearcherTableFilterPipe, - DatarepoTableFilterPipe, - - AppComponent, - GooggleSignInComponent, - // FieldFormComponent, - // FormComponent, - // GroupFieldFormComponent, - // RuleFormComponent, - // SectionFormComponent, - // PageFormComponent, - // CompositeFieldFormComponent, - // ComboboxComponent, - // AutocompleteComponent, - // WordlistComponent, - // RadioBoxComponent, - DatasetsViewerComponent, - ProfileEditorComponent, - PropertiesEditorComponent, - NewDatasetComponent, - ConfirmationComponent, - MainWindowComponent, - DmpProfileEditorComponent, - MainSignInComponent, - DatasetprofileEditorComponent, - DatasetProfileGUIEditorComponent, - // TextAreaComponent, - // CheckBoxComponent, - // BooleanDecisionComponent, - // FreeTextComponent - ], - imports: [ - BrowserModule, - HttpClientModule, - HttpModule, - DataTableModule, - FormsModule, - ReactiveFormsModule, - NgbModule.forRoot(), - AppRouting - ], - providers: [AuthService, - { - provide: HTTP_INTERCEPTORS, - useClass: GlobalInterceptor, - multi: true, - }, - DatasetsServiceService, TokenService, DmpsServiceService, ResearcherService, - DialogService, DatasetProfileService, ProjectService, OrganisationService, DatarepoService, - DmpProfileService, RegistryService, ServiceService, NativeLoginService, HttpModule, Toolbox, HttpClient, RestBase], - bootstrap: [AppComponent] -}) -export class AppModule { } diff --git a/dmp-admin/src/app/bootstrap/confirmation/confirmation.component.css b/dmp-admin/src/app/bootstrap/confirmation/confirmation.component.css deleted file mode 100644 index 4838ba5c1..000000000 --- a/dmp-admin/src/app/bootstrap/confirmation/confirmation.component.css +++ /dev/null @@ -1,11 +0,0 @@ -.modal-header { - padding:9px 15px; - border-bottom:1px solid #eee; - background-color: #0480be; - -webkit-border-top-left-radius: 5px; - -webkit-border-top-right-radius: 5px; - -moz-border-radius-topleft: 5px; - -moz-border-radius-topright: 5px; - border-top-left-radius: 5px; - border-top-right-radius: 5px; - } \ No newline at end of file diff --git a/dmp-admin/src/app/bootstrap/confirmation/confirmation.component.html b/dmp-admin/src/app/bootstrap/confirmation/confirmation.component.html deleted file mode 100644 index df30add02..000000000 --- a/dmp-admin/src/app/bootstrap/confirmation/confirmation.component.html +++ /dev/null @@ -1,21 +0,0 @@ - - \ No newline at end of file diff --git a/dmp-admin/src/app/bootstrap/confirmation/confirmation.component.spec.ts b/dmp-admin/src/app/bootstrap/confirmation/confirmation.component.spec.ts deleted file mode 100644 index fd4da952c..000000000 --- a/dmp-admin/src/app/bootstrap/confirmation/confirmation.component.spec.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; - -import { ConfirmationComponent } from './confirmation.component'; - -describe('ConfirmationComponent', () => { - let component: ConfirmationComponent; - let fixture: ComponentFixture; - - beforeEach(async(() => { - TestBed.configureTestingModule({ - declarations: [ ConfirmationComponent ] - }) - .compileComponents(); - })); - - beforeEach(() => { - fixture = TestBed.createComponent(ConfirmationComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should be created', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/dmp-admin/src/app/bootstrap/confirmation/confirmation.component.ts b/dmp-admin/src/app/bootstrap/confirmation/confirmation.component.ts deleted file mode 100644 index 8ca119767..000000000 --- a/dmp-admin/src/app/bootstrap/confirmation/confirmation.component.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { Component, OnInit, Input,Output,EventEmitter } from '@angular/core'; - -@Component({ - selector: 'confirmation', - templateUrl: './confirmation.component.html', - styleUrls: ['./confirmation.component.css'] -}) -export class ConfirmationComponent implements OnInit { - - @Input() confirmationTitle : string; - @Input() confirmationDescr : string; - @Input() subjectObj : any; - - @Output() responseSender: EventEmitter = new EventEmitter(); - - constructor() { - - } - - - ngOnInit() { - - } - - saidNo(){ - this.responseSender.emit(false); - } - - saidYes(){ - this.responseSender.emit(true); - } - - -} diff --git a/dmp-admin/src/app/bootstrap/new-dataset/new-dataset.component.css b/dmp-admin/src/app/bootstrap/new-dataset/new-dataset.component.css deleted file mode 100644 index 5f501c275..000000000 --- a/dmp-admin/src/app/bootstrap/new-dataset/new-dataset.component.css +++ /dev/null @@ -1,7 +0,0 @@ -.form-control { - width: 540px; -} - -.form-control.props{ - height: 240px; -} \ No newline at end of file diff --git a/dmp-admin/src/app/bootstrap/new-dataset/new-dataset.component.html b/dmp-admin/src/app/bootstrap/new-dataset/new-dataset.component.html deleted file mode 100644 index aee313619..000000000 --- a/dmp-admin/src/app/bootstrap/new-dataset/new-dataset.component.html +++ /dev/null @@ -1,59 +0,0 @@ - - diff --git a/dmp-admin/src/app/bootstrap/new-dataset/new-dataset.component.spec.ts b/dmp-admin/src/app/bootstrap/new-dataset/new-dataset.component.spec.ts deleted file mode 100644 index 651222234..000000000 --- a/dmp-admin/src/app/bootstrap/new-dataset/new-dataset.component.spec.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; - -import { NewDatasetComponent } from './new-dataset.component'; - -describe('NewDatasetComponent', () => { - let component: NewDatasetComponent; - let fixture: ComponentFixture; - - beforeEach(async(() => { - TestBed.configureTestingModule({ - declarations: [ NewDatasetComponent ] - }) - .compileComponents(); - })); - - beforeEach(() => { - fixture = TestBed.createComponent(NewDatasetComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should be created', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/dmp-admin/src/app/bootstrap/new-dataset/new-dataset.component.ts b/dmp-admin/src/app/bootstrap/new-dataset/new-dataset.component.ts deleted file mode 100644 index 544165408..000000000 --- a/dmp-admin/src/app/bootstrap/new-dataset/new-dataset.component.ts +++ /dev/null @@ -1,53 +0,0 @@ -import { Component, OnInit, Output, EventEmitter } from '@angular/core'; -import { ReactiveFormsModule } from '@angular/forms'; -import { FormBuilder, FormGroup, Validators } from '@angular/forms'; -import { DatasetsServiceService } from '../../services/datasets-service.service'; - -declare var jQuery:any; - -@Component({ - selector: 'new-dataset', - templateUrl: './new-dataset.component.html', - styleUrls: ['./new-dataset.component.css'] -}) -export class NewDatasetComponent implements OnInit { - - - newdatasetform: FormGroup; - - @Output() idSender: EventEmitter = new EventEmitter(); - - constructor(private datasetsService : DatasetsServiceService, private fb: FormBuilder) { - - this.newdatasetform = this.fb.group({ - label: ['', Validators.required ], - dmp: '', - uri: '', - properties: '', - profile: '' - }); - - } - - ngOnInit() { - - //minimum dataset -> {"label": ""} - } - - - store(){ - for(var key in this.newdatasetform.value) { - if(this.newdatasetform.value[key]=="") - this.newdatasetform.value[key] = null; - } - this.datasetsService.setDataset(this.newdatasetform.value).subscribe( - (data) => { - jQuery("#newdataset-modal-container").modal("hide"); - this.idSender.emit(data.json().objID); - } - ); - - } - - -} diff --git a/dmp-admin/src/app/bootstrap/profile-editor/profile-editor.component.css b/dmp-admin/src/app/bootstrap/profile-editor/profile-editor.component.css deleted file mode 100644 index 02c3d8c48..000000000 --- a/dmp-admin/src/app/bootstrap/profile-editor/profile-editor.component.css +++ /dev/null @@ -1,25 +0,0 @@ -.margin10{ - margin-top: 10px; - margin-bottom: 10px; - margin-right: 10px; - margin-left: 10px; -} - - -/* The ones below are for fields*/ -.custom-table { - display: table; } - -label { - display: table-header-group; -} - -input { - display: table-row-group; -} - -input:focus + label { - color:black; - font-weight: bold; -} - diff --git a/dmp-admin/src/app/bootstrap/profile-editor/profile-editor.component.html b/dmp-admin/src/app/bootstrap/profile-editor/profile-editor.component.html deleted file mode 100644 index d01ea9eb4..000000000 --- a/dmp-admin/src/app/bootstrap/profile-editor/profile-editor.component.html +++ /dev/null @@ -1,66 +0,0 @@ -
- -
-

Editing profile: {{profileID}}

-
- - - -
- -
-
-
- - -
-
-
- - -
- -
- -
-
-
- - -
-
-
- - -
- -
- -
-
-
- - -
-
-
- - -
- -
- -
- - -
-
- - - - -
\ No newline at end of file diff --git a/dmp-admin/src/app/bootstrap/profile-editor/profile-editor.component.spec.ts b/dmp-admin/src/app/bootstrap/profile-editor/profile-editor.component.spec.ts deleted file mode 100644 index 7b84e709b..000000000 --- a/dmp-admin/src/app/bootstrap/profile-editor/profile-editor.component.spec.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; - -import { ProfileEditorComponent } from './profile-editor.component'; - -describe('ProfileEditorComponent', () => { - let component: ProfileEditorComponent; - let fixture: ComponentFixture; - - beforeEach(async(() => { - TestBed.configureTestingModule({ - declarations: [ ProfileEditorComponent ] - }) - .compileComponents(); - })); - - beforeEach(() => { - fixture = TestBed.createComponent(ProfileEditorComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should be created', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/dmp-admin/src/app/bootstrap/profile-editor/profile-editor.component.ts b/dmp-admin/src/app/bootstrap/profile-editor/profile-editor.component.ts deleted file mode 100644 index ef479a242..000000000 --- a/dmp-admin/src/app/bootstrap/profile-editor/profile-editor.component.ts +++ /dev/null @@ -1,93 +0,0 @@ -import { Component, OnInit, SimpleChanges, Input} from '@angular/core'; -import {DatasetProfileService} from '../../services/dataset-profile.service'; -import {ActivatedRoute} from '@angular/router'; - -import '../../../assets/custom.js'; -declare function simple_notifier(type: string, title: string, message:string): any; - -@Component({ - selector: 'profile-editor', - templateUrl: './profile-editor.component.html', - styleUrls: ['./profile-editor.component.css'] -}) -export class ProfileEditorComponent implements OnInit { - - public profileID: string = null; - - profile : any = new Array(); - - //for update sensing... - private haveChanges : boolean = false; - - constructor(private datasetProfileService: DatasetProfileService, private route: ActivatedRoute) { - this.profileID = route.snapshot.params['profileID']; - //console.log(route.snapshot.params['profileID']) - } - - ngOnChanges(changes: SimpleChanges) { - /* - if(this.profileID==null) - return; - if(changes.profileID != null){ - this.datasetProfileService.getDatasetProfileById(this.profileID).subscribe((data) => { - this.profile = data; - }); - } - */ - } - - ngOnInit() { - this.datasetProfileService.getDatasetProfileById(this.profileID).subscribe((data) => { - this.profile = data; - //console.log(data) - }); - } - - onFocusIn($event){ - console.log("on-focus-in"); - this.haveChanges = false; - } - - onValueChanged($event){ - console.log("on-text-changed"); - this.haveChanges = true; - } - - - onFocusOut($event, value:string){ - console.log("on-focus-out"); - if(this.haveChanges){ - var fieldName = $event.target.name; - this.datasetProfileService.getDatasetProfileById(this.profileID).subscribe((data) => { - var database_profile : any = data; - //update appropriate field - if(fieldName == 'profile-label') database_profile.label = this.profile.label; - if(fieldName == 'profile-definition') database_profile.definition = this.profile.definition; - if(fieldName == 'viewstyle-label') database_profile.viewstyle.label = this.profile.viewstyle.label; - if(fieldName == 'viewstyle-definition') database_profile.viewstyle.definition = this.profile.viewstyle.definition; - if(fieldName == 'ruleset-label') database_profile.ruleset.label = this.profile.ruleset.label; - if(fieldName == 'ruleset-definition') database_profile.ruleset.definition = this.profile.ruleset.definition; - //save back - this.datasetProfileService.updateDatasetProfile(database_profile); - simple_notifier("success",null,"Updated value of field"); - }); - } - } - - preventDefaults($event){ - if($event.code == 'Tab') { - $event.preventDefault(); - //AND NOW HACK THE TAB KEY WITHIN THE TEXT EDITOR - var start = $event.srcElement.selectionStart; - var end = $event.srcElement.selectionEnd; - // set textarea value to: text before caret + tab + text after caret - $event.target.value = $event.target.value.substring(0, start)+"\t"+$event.target.value.substring(end); - // put caret at right position again - $event.srcElement.selectionStart = - $event.srcElement.selectionEnd = start + 1; - } - } - - - -} diff --git a/dmp-admin/src/app/bootstrap/properties-editor/properties-editor.component.css b/dmp-admin/src/app/bootstrap/properties-editor/properties-editor.component.css deleted file mode 100644 index 926e4e5fd..000000000 --- a/dmp-admin/src/app/bootstrap/properties-editor/properties-editor.component.css +++ /dev/null @@ -1,3 +0,0 @@ -textarea.custom{ - border-style: dotted; -} \ No newline at end of file diff --git a/dmp-admin/src/app/bootstrap/properties-editor/properties-editor.component.html b/dmp-admin/src/app/bootstrap/properties-editor/properties-editor.component.html deleted file mode 100644 index a7ad14139..000000000 --- a/dmp-admin/src/app/bootstrap/properties-editor/properties-editor.component.html +++ /dev/null @@ -1,24 +0,0 @@ - - - \ No newline at end of file diff --git a/dmp-admin/src/app/bootstrap/properties-editor/properties-editor.component.spec.ts b/dmp-admin/src/app/bootstrap/properties-editor/properties-editor.component.spec.ts deleted file mode 100644 index bf0031010..000000000 --- a/dmp-admin/src/app/bootstrap/properties-editor/properties-editor.component.spec.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; - -import { PropertiesEditorComponent } from './properties-editor.component'; - -describe('PropertiesEditorComponent', () => { - let component: PropertiesEditorComponent; - let fixture: ComponentFixture; - - beforeEach(async(() => { - TestBed.configureTestingModule({ - declarations: [ PropertiesEditorComponent ] - }) - .compileComponents(); - })); - - beforeEach(() => { - fixture = TestBed.createComponent(PropertiesEditorComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should be created', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/dmp-admin/src/app/bootstrap/properties-editor/properties-editor.component.ts b/dmp-admin/src/app/bootstrap/properties-editor/properties-editor.component.ts deleted file mode 100644 index b0854cadb..000000000 --- a/dmp-admin/src/app/bootstrap/properties-editor/properties-editor.component.ts +++ /dev/null @@ -1,82 +0,0 @@ -import { Component, OnInit, Input, SimpleChanges } from '@angular/core'; -import { DatasetsServiceService } from '../../services/datasets-service.service'; - -import '../../../assets/custom.js'; -declare function simple_notifier(type: string, title: string, message:string): any; - -@Component({ - selector: 'properties-editor', - templateUrl: './properties-editor.component.html', - styleUrls: ['./properties-editor.component.css'] -}) -export class PropertiesEditorComponent implements OnInit { - - @Input('datasetID') datasetID : string; - private propstext : string; - - //for update sensing... - private haveChanges : boolean = false; - - - constructor(private datasetsService : DatasetsServiceService) { - - } - - ngOnInit() { - - } - - ngOnChanges(changes: SimpleChanges) { - - if(this.datasetID==null) - return; - if(changes.datasetID != null){ - this.datasetsService.getDatasetById(this.datasetID).subscribe((data) => { - this.propstext = data.properties; - }); - } - - } - - - onFocusIn($event){ - this.haveChanges = false; - } - - onTextChanged($event){ - this.haveChanges = true; - } - - onFocusOut($event){ - if(this.haveChanges){ - //console.log("Updating the value of properties to: "+$event.target.value+" on row with id: "+this.datasetID); - this.datasetsService.getDatasetById(this.datasetID).subscribe( (data) => { - data.properties = $event.target.value; - this.datasetsService.setDataset(data).subscribe( (data) => { - if(data.status == 201){ - simple_notifier("success",null,"Updated value of properties field"); - } - else{ - simple_notifier("danger",null,"Could not update value of properties field"); - } - }); - }); - } - } - - preventDefaults($event){ - if($event.code == 'Tab') { - $event.preventDefault(); - //AND NOW HACK THE TAB KEY WITHIN THE TEXT EDITOR - var start = $event.srcElement.selectionStart; - var end = $event.srcElement.selectionEnd; - // set textarea value to: text before caret + tab + text after caret - $event.target.value = $event.target.value.substring(0, start)+"\t"+$event.target.value.substring(end); - // put caret at right position again - $event.srcElement.selectionStart = - $event.srcElement.selectionEnd = start + 1; - } - } - - -} diff --git a/dmp-admin/src/app/common/validationTypes.ts b/dmp-admin/src/app/common/validationTypes.ts deleted file mode 100644 index 7dbeabd02..000000000 --- a/dmp-admin/src/app/common/validationTypes.ts +++ /dev/null @@ -1,4 +0,0 @@ -export enum ValidationTypes { - None = 0, - Required = 1 -} \ No newline at end of file diff --git a/dmp-admin/src/app/components/autocomplete/autocomplete-component.html b/dmp-admin/src/app/components/autocomplete/autocomplete-component.html deleted file mode 100644 index aa75c0aff..000000000 --- a/dmp-admin/src/app/components/autocomplete/autocomplete-component.html +++ /dev/null @@ -1,13 +0,0 @@ -
-
-
- - -
-
- - -
-
- -
\ No newline at end of file diff --git a/dmp-admin/src/app/components/autocomplete/autocomplete-component.ts b/dmp-admin/src/app/components/autocomplete/autocomplete-component.ts deleted file mode 100644 index 28fbcb69e..000000000 --- a/dmp-admin/src/app/components/autocomplete/autocomplete-component.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { AutocompleteData } from '../../models/DataField/AutocompleteData'; -import { Field } from '../../models/DataSetProfile/Field'; -import { FormGroup } from '@angular/forms'; -import { Component, Input, OnInit } from '@angular/core'; -import { FormArray } from '@angular/forms/src/model'; - -@Component({ - selector: 'autocomplete-component', - templateUrl: './autocomplete-component.html' -}) -export class AutocompleteComponent implements OnInit{ - @Input() dataModel: Field; - @Input() form: FormGroup; - private data:AutocompleteData = new AutocompleteData(); - - ngOnInit(){ - this.data.type= "autocomplete"; - let autocomplete: AutocompleteData = new AutocompleteData(); - //this.dataModel.data = new JsonSerializer().fromJSONObject(this.data,AutocompleteData); - //(this.form.get("data")).push(autocomplete.buildForm()); - this.form.addControl("data", this.data.buildForm()); - } -} \ No newline at end of file diff --git a/dmp-admin/src/app/components/booleanDecision/booleanDecision-component.html b/dmp-admin/src/app/components/booleanDecision/booleanDecision-component.html deleted file mode 100644 index 2411edac1..000000000 --- a/dmp-admin/src/app/components/booleanDecision/booleanDecision-component.html +++ /dev/null @@ -1,9 +0,0 @@ -
-
-
- - -
-
- -
\ No newline at end of file diff --git a/dmp-admin/src/app/components/booleanDecision/booleanDecision-component.ts b/dmp-admin/src/app/components/booleanDecision/booleanDecision-component.ts deleted file mode 100644 index c5f844075..000000000 --- a/dmp-admin/src/app/components/booleanDecision/booleanDecision-component.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { Field } from '../../models/DataSetProfile/Field'; -import { BooleanDecisionData } from '../../models/DataField/BooleanDecisionData'; -import { FormGroup } from '@angular/forms'; -import { Component, Input, OnInit } from '@angular/core'; -import { FormArray } from '@angular/forms/src/model'; - -@Component({ - selector: 'booleanDecision-component', - templateUrl: './booleanDecision-component.html' -}) -export class BooleanDecisionComponent implements OnInit{ - @Input() dataModel: Field; - @Input() form: FormGroup; - private data:BooleanDecisionData = new BooleanDecisionData(); - - ngOnInit(){ - this.form.addControl("data", this.data.buildForm()); - } -} \ No newline at end of file diff --git a/dmp-admin/src/app/components/checkbox/checkbox-component.html b/dmp-admin/src/app/components/checkbox/checkbox-component.html deleted file mode 100644 index 2411edac1..000000000 --- a/dmp-admin/src/app/components/checkbox/checkbox-component.html +++ /dev/null @@ -1,9 +0,0 @@ -
-
-
- - -
-
- -
\ No newline at end of file diff --git a/dmp-admin/src/app/components/checkbox/checkbox-component.ts b/dmp-admin/src/app/components/checkbox/checkbox-component.ts deleted file mode 100644 index d8553c086..000000000 --- a/dmp-admin/src/app/components/checkbox/checkbox-component.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { Field } from '../../models/DataSetProfile/Field'; -import { CheckBoxData } from '../../models/DataField/CheckBoxData'; -import { BooleanDecisionData } from '../../models/DataField/BooleanDecisionData'; -import { FormGroup } from '@angular/forms'; -import { Component, Input, OnInit } from '@angular/core'; -import { FormArray } from '@angular/forms/src/model'; - -@Component({ - selector: 'checkbox-component', - templateUrl: './checkbox-component.html' -}) -export class CheckBoxComponent implements OnInit{ - @Input() dataModel: Field; - @Input() form: FormGroup; - private data:CheckBoxData = new CheckBoxData(); - - ngOnInit(){ - this.form.addControl("data", this.data.buildForm()); - } -} \ No newline at end of file diff --git a/dmp-admin/src/app/components/combobox/combobox-component.html b/dmp-admin/src/app/components/combobox/combobox-component.html deleted file mode 100644 index a3eb851a1..000000000 --- a/dmp-admin/src/app/components/combobox/combobox-component.html +++ /dev/null @@ -1,16 +0,0 @@ -
- - -
-
- -
-
-
-
- -
-
-
\ No newline at end of file diff --git a/dmp-admin/src/app/components/combobox/combobox-component.ts b/dmp-admin/src/app/components/combobox/combobox-component.ts deleted file mode 100644 index 5e098dcf1..000000000 --- a/dmp-admin/src/app/components/combobox/combobox-component.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { Field } from '../../models/DataSetProfile/Field'; -import { FormGroup } from '@angular/forms'; -import { Component, Input, OnInit } from '@angular/core'; - -@Component({ - selector: 'combobox-component', - templateUrl: './combobox-component.html' -}) -export class ComboboxComponent implements OnInit{ - @Input() dataModel: Field; - @Input() form: FormGroup; - type: string; - options = [{id:"autocomplete", value: "autocomplete"}, {id:"wordlist", value: "wordlist"}]; - - ngOnInit(){ - if (this.dataModel.data && this.form.get("data")){ - this.type = this.form.get("data").get("type").value; - } - - } - - onchangeCombo(){ - if (this.form.get("data")) this.form.removeControl("data"); - } -} \ No newline at end of file diff --git a/dmp-admin/src/app/components/freetext/freetext-component.html b/dmp-admin/src/app/components/freetext/freetext-component.html deleted file mode 100644 index 2411edac1..000000000 --- a/dmp-admin/src/app/components/freetext/freetext-component.html +++ /dev/null @@ -1,9 +0,0 @@ -
-
-
- - -
-
- -
\ No newline at end of file diff --git a/dmp-admin/src/app/components/freetext/freetext-component.ts b/dmp-admin/src/app/components/freetext/freetext-component.ts deleted file mode 100644 index 0e1077469..000000000 --- a/dmp-admin/src/app/components/freetext/freetext-component.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { Field } from '../../models/DataSetProfile/Field'; -import { FreeTextData } from '../../models/DataField/FreeTextData'; -import { CheckBoxData } from '../../models/DataField/CheckBoxData'; -import { BooleanDecisionData } from '../../models/DataField/BooleanDecisionData'; -import { FormGroup } from '@angular/forms'; -import { Component, Input, OnInit } from '@angular/core'; -import { FormArray } from '@angular/forms/src/model'; - -@Component({ - selector: 'freetext-component', - templateUrl: './freetext-component.html' -}) -export class FreeTextComponent implements OnInit{ - @Input() dataModel: Field; - @Input() form: FormGroup; - private data:FreeTextData = new FreeTextData(); - - ngOnInit(){ - this.form.addControl("data", this.data.buildForm()); - } -} \ No newline at end of file diff --git a/dmp-admin/src/app/components/radiobox/radiobox-component.html b/dmp-admin/src/app/components/radiobox/radiobox-component.html deleted file mode 100644 index f33a91a9d..000000000 --- a/dmp-admin/src/app/components/radiobox/radiobox-component.html +++ /dev/null @@ -1,29 +0,0 @@ -
-
-
- - -
- -
-
-
-
- - -
-
- - -
-
-
-
-
- - -
\ No newline at end of file diff --git a/dmp-admin/src/app/components/radiobox/radiobox-component.ts b/dmp-admin/src/app/components/radiobox/radiobox-component.ts deleted file mode 100644 index 1744fd1d7..000000000 --- a/dmp-admin/src/app/components/radiobox/radiobox-component.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { FormGroup } from '@angular/forms'; -import { Field } from '../../models/DataSetProfile/Field'; -import { Component, Input, OnInit } from '@angular/core'; -import { RadioBoxData } from '../../models/DataField/RadioBoxData'; -import { FormArray } from '@angular/forms/src/model'; -import { ListingItem } from '../../models/Commons/ListingItem'; -import { JsonSerializer } from '../../utilities/JsonSerializer'; - -@Component({ - selector: 'radiobox-component', - templateUrl: './radiobox-component.html' -}) -export class RadioBoxComponent implements OnInit{ - @Input() dataModel: Field; - @Input() form: FormGroup; - private data: RadioBoxData = new RadioBoxData(); - private options = new Array(); - - ngOnInit(){ - //if (this.form.get("data")) this.form.removeControl("data"); - if (!this.form.get("data")) - this.form.addControl("data", this.data.buildForm()); - if(!this.dataModel.data) this.addNewRow(); - } - - addNewRow(){ - let radioListOptions:ListingItem = new ListingItem(); - (this.form.get("data").get("options")).push(radioListOptions.buildForm()); - this.data.options = []; - this.data.options.push(radioListOptions); - this.dataModel.data = JsonSerializer.fromJSONObject(this.data,RadioBoxData); - } -} \ No newline at end of file diff --git a/dmp-admin/src/app/components/textarea/textarea-component.html b/dmp-admin/src/app/components/textarea/textarea-component.html deleted file mode 100644 index 2411edac1..000000000 --- a/dmp-admin/src/app/components/textarea/textarea-component.html +++ /dev/null @@ -1,9 +0,0 @@ -
-
-
- - -
-
- -
\ No newline at end of file diff --git a/dmp-admin/src/app/components/textarea/textarea-component.ts b/dmp-admin/src/app/components/textarea/textarea-component.ts deleted file mode 100644 index 2a04a5566..000000000 --- a/dmp-admin/src/app/components/textarea/textarea-component.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { Field } from '../../models/DataSetProfile/Field'; -import { TextArea } from '../../models/DataField/TextArea'; -import { FreeTextData } from '../../models/DataField/FreeTextData'; -import { CheckBoxData } from '../../models/DataField/CheckBoxData'; -import { BooleanDecisionData } from '../../models/DataField/BooleanDecisionData'; -import { FormGroup } from '@angular/forms'; -import { Component, Input, OnInit } from '@angular/core'; -import { FormArray } from '@angular/forms/src/model'; - -@Component({ - selector: 'textarea-component', - templateUrl: './textarea-component.html' -}) -export class TextAreaComponent implements OnInit{ - @Input() dataModel: Field; - @Input() form: FormGroup; - private data:TextArea = new TextArea(); - - ngOnInit(){ - this.form.addControl("data", this.data.buildForm()); - } -} \ No newline at end of file diff --git a/dmp-admin/src/app/components/wordlist/wordlist-component.html b/dmp-admin/src/app/components/wordlist/wordlist-component.html deleted file mode 100644 index 73da25ad7..000000000 --- a/dmp-admin/src/app/components/wordlist/wordlist-component.html +++ /dev/null @@ -1,28 +0,0 @@ -
-
-
- - -
-
-
-
-
- - -
-
- - -
-
-
-
-
- - -
\ No newline at end of file diff --git a/dmp-admin/src/app/components/wordlist/wordlist-component.ts b/dmp-admin/src/app/components/wordlist/wordlist-component.ts deleted file mode 100644 index fba96b094..000000000 --- a/dmp-admin/src/app/components/wordlist/wordlist-component.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { FormGroup } from '@angular/forms'; -import { Field } from '../../models/DataSetProfile/Field'; -import { Component, Input, OnInit } from '@angular/core'; -import { WordListData } from '../../models/DataField/WordListData'; -import { FormArray } from '@angular/forms/src/model'; -import { ListingItem } from '../../models/Commons/ListingItem'; -import { JsonSerializer } from '../../utilities/JsonSerializer'; - -@Component({ - selector: 'wordlist-component', - templateUrl: './wordlist-component.html' -}) -export class WordlistComponent implements OnInit{ - @Input() dataModel: Field; - @Input() form: FormGroup; - private data: WordListData = new WordListData(); - private options = new Array(); - - ngOnInit(){ - this.data.type = "wordlist"; - // if (this.form.get("data")) this.form.removeControl("data"); - this.form.addControl("data", this.data.buildForm()); - if(!this.dataModel.data) - this.addNewRow(); - } - - addNewRow(){ - let wordListOptions:ListingItem = new ListingItem(); - (this.form.get("data").get("options")).push(wordListOptions.buildForm()); - this.data.options = []; - this.data.options.push(wordListOptions); - this.dataModel.data = JsonSerializer.fromJSONObject(this.data,WordListData); - } -} \ No newline at end of file diff --git a/dmp-admin/src/app/core/core.module.ts b/dmp-admin/src/app/core/core.module.ts deleted file mode 100644 index de1391420..000000000 --- a/dmp-admin/src/app/core/core.module.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { CommonModule } from '@angular/common'; -import { ModuleWithProviders, NgModule } from '@angular/core'; -import { MaterialModule } from '../material/material.module'; -@NgModule({ - imports: [ - CommonModule, - MaterialModule, - ] -}) - -export class CoreModule { - static forRoot(): ModuleWithProviders { - return { - ngModule: CoreModule, - providers: [ - ] - }; - } -} diff --git a/dmp-admin/src/app/core/criteria/Criteria.ts b/dmp-admin/src/app/core/criteria/Criteria.ts deleted file mode 100644 index d1f38607a..000000000 --- a/dmp-admin/src/app/core/criteria/Criteria.ts +++ /dev/null @@ -1,3 +0,0 @@ -export class Criteria { - public Like: string; -} diff --git a/dmp-admin/src/app/core/criteria/UserCriteria.ts b/dmp-admin/src/app/core/criteria/UserCriteria.ts deleted file mode 100644 index 21210ab35..000000000 --- a/dmp-admin/src/app/core/criteria/UserCriteria.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { Criteria } from './Criteria'; -import { Principal } from '../../models/login/Principal'; - -export class UserCriteria extends Criteria { - public Label: String; - public Roles: Principal.AppRole[]; -} diff --git a/dmp-admin/src/app/core/services/user-reference-data.service.ts b/dmp-admin/src/app/core/services/user-reference-data.service.ts deleted file mode 100644 index afeb7ffab..000000000 --- a/dmp-admin/src/app/core/services/user-reference-data.service.ts +++ /dev/null @@ -1,45 +0,0 @@ -import { UserListingModel } from '../../shared/components/criteria/models/errormodel/users/userListingModel'; -import 'rxjs/add/operator/map'; - -import { HttpClient, HttpHeaders } from '@angular/common/http'; -import { Injectable } from '@angular/core'; -import { Observable } from 'rxjs/Observable'; - -import { DataTableRequest } from '../../models/data-table/dataTableRequest'; -import { DataTableData } from '../../models/data-table/dataTableData'; -import { MyHttpService } from 'app/utilities/httpservice/myhttpservice.service'; -import { HostConfiguration } from 'app/app.constants'; - -@Injectable() -export class UserReferenceService { - - private actionUrl: string; - private headers: HttpHeaders; - - constructor(private http: MyHttpService) { - - this.actionUrl = HostConfiguration.Server + 'api/user/'; - - this.headers = new HttpHeaders(); - this.headers = this.headers.set('Content-Type', 'application/json'); - this.headers = this.headers.set('Accept', 'application/json'); - } - - // formatItem(utilities: Utilities, item: ConfigurationModel): ConfigurationModel { - // item.validFrom = new Date(item.validFrom); - // item.validTo = new Date(item.validTo); - // return item - // } - - getPaged(dataTableRequest: DataTableRequest): Observable> { - return this.http.post>(this.actionUrl + 'getPaged', JSON.stringify(dataTableRequest), { headers: this.headers }); - } - - updateRoles(itemToUpdate: UserListingModel): Observable { - return this.http.post(this.actionUrl + 'updateRoles', JSON.stringify(itemToUpdate), { headers: this.headers }); - } - - delete(id: String): Observable { - return this.http.delete(this.actionUrl + id, { headers: this.headers }); - } -} diff --git a/dmp-admin/src/app/dataset-profile-form/compositefield-form/compositefield-form.component.html b/dmp-admin/src/app/dataset-profile-form/compositefield-form/compositefield-form.component.html deleted file mode 100644 index 7424f1e1c..000000000 --- a/dmp-admin/src/app/dataset-profile-form/compositefield-form/compositefield-form.component.html +++ /dev/null @@ -1,83 +0,0 @@ -
- - -
- -
-
-
-
- - -
-
- - -
-
- - -
-
-
-
-
Multiplicity
-
- - -
- -
- - -
-
-
-
- - -
-
- - -
-
- -
-
- - - - - - - -
\ No newline at end of file diff --git a/dmp-admin/src/app/dataset-profile-form/compositefield-form/compositefield-form.component.ts b/dmp-admin/src/app/dataset-profile-form/compositefield-form/compositefield-form.component.ts deleted file mode 100644 index 0ee11f88a..000000000 --- a/dmp-admin/src/app/dataset-profile-form/compositefield-form/compositefield-form.component.ts +++ /dev/null @@ -1,57 +0,0 @@ -import { Component, Input } from '@angular/core'; -import { FormGroup } from '@angular/forms'; -import { FieldSet } from 'app/models/DataSetProfile/FieldSet'; -import { Field } from 'app/models/DataSetProfile/Field'; -import { FormArray, FormControl } from '@angular/forms/src/model'; - -@Component({ - selector: 'compositefield-form', - templateUrl: './compositefield-form.component.html', - styleUrls: [] -}) - -export class CompositeFieldFormComponent { - @Input() form: FormGroup; - @Input() dataModel: FieldSet; - @Input() indexPath: string; - - isComposite: boolean = false; - isMultiplicityEnabled: boolean = false; - - constructon() { } - - ngOnInit() { - //this.addNewField(); - if(this.form.get("multiplicity")) - if (this.form.get("multiplicity").value.min >1 || this.form.get("multiplicity").value.max >1 ) - this.isMultiplicityEnabled= true; - this.isComposite = this.dataModel.fields.length > 1; - } - - onIsCompositeChange(isComposite: boolean) { - if (!isComposite && (this.form.get("fields")).length > 1) { - for(let i = 0; i < (this.form.get("fields")).length - 1; i++) { - (this.form.get("fields")).removeAt(1); - } - this.dataModel.fields.splice(1); - } - } - - onIsMultiplicityEnabledChange(isMultiplicityEnabled: boolean) { - if (!isMultiplicityEnabled) { - (this.form.get('multiplicity').get("min")).setValue(0); - (this.form.get('multiplicity').get("max")).setValue(0); - } - } - - addNewField() { - let field: Field = new Field(); - this.dataModel.fields.push(field); - (this.form.get("fields")).push(field.buildForm()); - } - - DeleteField(index) { - this.dataModel.fields.splice(index, 1); - (this.form.get("fields")).removeAt(index); - } -} \ No newline at end of file diff --git a/dmp-admin/src/app/dataset-profile-form/dataset-profile.module.ts b/dmp-admin/src/app/dataset-profile-form/dataset-profile.module.ts deleted file mode 100644 index e01749a41..000000000 --- a/dmp-admin/src/app/dataset-profile-form/dataset-profile.module.ts +++ /dev/null @@ -1,77 +0,0 @@ -import { NgModule } from "@angular/core"; -import { CommonModule } from '@angular/common'; -import { FormsModule,ReactiveFormsModule } from '@angular/forms'; - -import { DatasetProfileRoutes } from "./dataset-profile.router"; -import { RouterModule } from "@angular/router"; - -import { FormComponent } from './form/form.component'; -import { GroupFieldFormComponent } from './groupfield-form/groupfield-form.component'; -import { RuleFormComponent } from './rule-component/rule.component'; -import { SectionFormComponent } from './section-form/section-form.component'; -import { PageFormComponent } from './page-form/page-component'; -import { CompositeFieldFormComponent } from './compositefield-form/compositefield-form.component'; -import { FieldFormComponent } from './field-form/field-form.component'; -import { HttpClientModule, HttpClient } from "@angular/common/http"; - -import { CheckBoxComponent } from '../components/checkbox/checkbox-component'; -import { FreeTextData } from '../models/DataField/FreeTextData'; -import { BooleanDecisionComponent } from '../components/booleanDecision/booleanDecision-component'; -import { FreeTextComponent } from '../components/freetext/freetext-component'; -import { TextAreaComponent } from '../components/textarea/textarea-component'; -import { RadioBoxComponent } from '../components/radiobox/radiobox-component'; -import { WordlistComponent } from '../components/wordlist/wordlist-component'; -import { AutocompleteComponent } from '../components/autocomplete/autocomplete-component'; -import { ComboboxComponent } from '../components/combobox/combobox-component'; - -@NgModule({ - imports: [ - CommonModule, - FormsModule, - HttpClientModule, - ReactiveFormsModule, - RouterModule, - RouterModule.forChild(DatasetProfileRoutes) - ], - - declarations: [ - FormComponent, - GroupFieldFormComponent, - RuleFormComponent, - SectionFormComponent, - PageFormComponent, - CompositeFieldFormComponent, - FieldFormComponent, - TextAreaComponent, - CheckBoxComponent, - BooleanDecisionComponent, - FreeTextComponent, - ComboboxComponent, - AutocompleteComponent, - WordlistComponent, - RadioBoxComponent - ], - - exports: [ - FormComponent, - GroupFieldFormComponent, - RuleFormComponent, - SectionFormComponent, - PageFormComponent, - CompositeFieldFormComponent, - FieldFormComponent, - TextAreaComponent, - CheckBoxComponent, - BooleanDecisionComponent, - FreeTextComponent, - ComboboxComponent, - AutocompleteComponent, - WordlistComponent, - RadioBoxComponent - ], - providers:[ - ] -}) - - -export class DatasetProfileModule { } \ No newline at end of file diff --git a/dmp-admin/src/app/dataset-profile-form/dataset-profile.router.ts b/dmp-admin/src/app/dataset-profile-form/dataset-profile.router.ts deleted file mode 100644 index 44e2337e6..000000000 --- a/dmp-admin/src/app/dataset-profile-form/dataset-profile.router.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { RouterModule, Routes } from '@angular/router'; -import { FormComponent } from 'app/dataset-profile-form/form/form.component'; - -export const DatasetProfileRoutes: Routes = [ - //{ path: "new/:dmpId", component: DatasetWizardComponent, canActivate: [AuthGuard] } - { - path: ':id', - component: FormComponent - }, - { - path: '', - component: FormComponent - } - -]; diff --git a/dmp-admin/src/app/dataset-profile-form/field-form/field-form.component.html b/dmp-admin/src/app/dataset-profile-form/field-form/field-form.component.html deleted file mode 100644 index 652a20e87..000000000 --- a/dmp-admin/src/app/dataset-profile-form/field-form/field-form.component.html +++ /dev/null @@ -1,120 +0,0 @@ -
-
-
-
- - -
-
-
-
- - -
-
-
-
-
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
-
-
Multiplicity
-
- - -
- -
- - -
-
-
-
- - -
-
-
- - -
-
-
- -
-
- -
-
- -
-
-
- - -
-
-
- {{i + 1}}. Rule {{i + 1}} - -
- -
-
-
-
- -
-
-
-
- - -
\ No newline at end of file diff --git a/dmp-admin/src/app/dataset-profile-form/field-form/field-form.component.ts b/dmp-admin/src/app/dataset-profile-form/field-form/field-form.component.ts deleted file mode 100644 index 6419defd4..000000000 --- a/dmp-admin/src/app/dataset-profile-form/field-form/field-form.component.ts +++ /dev/null @@ -1,53 +0,0 @@ -import { Field } from '../../models/DataSetProfile/Field'; -import { Rule } from '../../models/DataSetProfile/Rule'; -import { Component, Input } from '@angular/core'; -import { FormGroup, FormControl, FormArray } from '@angular/forms'; -import { ValidationTypes } from 'app/common/validationTypes'; - -@Component({ - selector: 'field-form', - templateUrl: './field-form.component.html', - styleUrls: [] -}) - -export class FieldFormComponent { - @Input() form: FormGroup; - @Input() dataModel: Field; - @Input() showMultiplicity: boolean = true; - @Input() indexPath: string; - validationsOptions: Array; - isFieldMultiplicityEnabled: boolean = false; - - constructon() { - } - - ngOnInit() { - if (this.form.get("multiplicity")) - if (this.form.get("multiplicity").value.min > 1 || this.form.get("multiplicity").value.max > 1) - this.isFieldMultiplicityEnabled = true; - this.validationsOptions = [{ key: 0, value: ValidationTypes[0] }, { key: 1, value: ValidationTypes[1] }] - // this.addNewRule(); - } - - onIsFieldMultiplicityEnabledChange(isFieldMultiplicityEnabled: boolean) { - if (!isFieldMultiplicityEnabled) { - (this.form.get('multiplicity').get("min")).setValue(0); - (this.form.get('multiplicity').get("max")).setValue(0); - } - } - - addNewRule() { - let rule: Rule = new Rule(); - this.dataModel.visible.rules.push(rule); - (this.form.get("visible").get("rules")).push(rule.buildForm()); - } - - DeleteRule(index) { - this.dataModel.visible.rules.splice(index, 1); - (this.form.get("visible").get("rules")).removeAt(index); - } - - onchangeCombo() { - if (this.form.get("data")) this.form.removeControl("data"); - } -} \ No newline at end of file diff --git a/dmp-admin/src/app/dataset-profile-form/form/form.component.html b/dmp-admin/src/app/dataset-profile-form/form/form.component.html deleted file mode 100644 index 2741ea42b..000000000 --- a/dmp-admin/src/app/dataset-profile-form/form/form.component.html +++ /dev/null @@ -1,73 +0,0 @@ -
-
-
-
-
- - -
-
- Label is required. -
-
-
-
- - - - - - - - - - -
-
-
\ No newline at end of file diff --git a/dmp-admin/src/app/dataset-profile-form/form/form.component.ts b/dmp-admin/src/app/dataset-profile-form/form/form.component.ts deleted file mode 100644 index 381b65890..000000000 --- a/dmp-admin/src/app/dataset-profile-form/form/form.component.ts +++ /dev/null @@ -1,88 +0,0 @@ -import { Section } from '../../models/DataSetProfile/Section'; -import { JsonSerializer } from '../../utilities/JsonSerializer'; -import { DatasetProfileService } from '../../services/dataset-profile.service'; -import { RestBase } from '../../services/rest-base'; -import { DatasetProfileModel } from '../../models/DataSetProfile/DatasetProfileModel'; -import { Page } from '../../models/DataSetProfile/Page'; -import { Component, OnInit } from '@angular/core'; -import { FormGroup, FormControl } from '@angular/forms'; -import { SectionFormComponent } from '../section-form/section-form.component'; -import { FormArray } from '@angular/forms/src/model'; -import { Router, ActivatedRoute, ParamMap, Params } from '@angular/router'; -import { PageFormComponent } from '../page-form/page-component' - -@Component({ - selector: 'form-comp', - templateUrl: './form.component.html', - styleUrls: [] -}) - -export class FormComponent { - - dataModel: DatasetProfileModel; - form: FormGroup; - private profileID: string; - - constructor(public restBase: RestBase, private datasetProfileService: DatasetProfileService, private route: ActivatedRoute) { - this.profileID = route.snapshot.params['id']; - } - - ngOnInit() { - - this.dataModel = JsonSerializer.fromJSONObject(new DatasetProfileModel(), DatasetProfileModel); - this.form = this.dataModel.buildForm(); - if (this.profileID) { - this.datasetProfileService.getDatasetProfileById(this.profileID).subscribe((data) => { - this.dataModel = JsonSerializer.fromJSONObject(data, DatasetProfileModel); - this.form = this.dataModel.buildForm(); - }); - } - else { - this.addSection(); - this.addPage(0); - } - } - - onIsMultiplicityEnabledChange(isMultiplicityEnabled: boolean) { - if (!isMultiplicityEnabled) { - (this.form.get('multiplicity').get("min")).setValue(0); - (this.form.get('multiplicity').get("max")).setValue(0); - } - } - - addSection() { - let section: Section = new Section(); - this.dataModel.sections.push(section); - (this.form.get("sections")).push(section.buildForm()); - } - - addPage(number) { - let page: Page = new Page(this.dataModel.pages.length); - this.dataModel.pages.push(page); - (this.form.get("pages")).push(page.buildForm()); - } - - DeleteSection(index) { - this.dataModel.sections.splice(index, 1); - (this.form.get("sections")).removeAt(index) - } - - DeletePage(index) { - this.dataModel.pages.splice(index, 1); - (this.form.get("pages")).removeAt(index) - } - - createForm(data) { - return this.restBase.post("/admin/addDmp", data); - } - updateForm(id, data) { - return this.restBase.post("/admin/addDmp/" + id, data); - } - onSubmit() { - let data = this.form.value; - - if (this.profileID) this.updateForm(this.profileID, data).subscribe(); - else this.createForm(data).subscribe(); - } - -} \ No newline at end of file diff --git a/dmp-admin/src/app/dataset-profile-form/groupfield-form/groupfield-form.component.html b/dmp-admin/src/app/dataset-profile-form/groupfield-form/groupfield-form.component.html deleted file mode 100644 index 3c63d1cd3..000000000 --- a/dmp-admin/src/app/dataset-profile-form/groupfield-form/groupfield-form.component.html +++ /dev/null @@ -1,66 +0,0 @@ -
- - -
-
-
- - {{i + 1}}. Field {{i + 1}} - -
- -
-
-
-
- -
-
-
-
- -
\ No newline at end of file diff --git a/dmp-admin/src/app/dataset-profile-form/groupfield-form/groupfield-form.component.ts b/dmp-admin/src/app/dataset-profile-form/groupfield-form/groupfield-form.component.ts deleted file mode 100644 index 266de2f0e..000000000 --- a/dmp-admin/src/app/dataset-profile-form/groupfield-form/groupfield-form.component.ts +++ /dev/null @@ -1,43 +0,0 @@ -import { Component, Input, OnInit } from '@angular/core'; -import { FormGroup } from '@angular/forms'; -import { FieldGroup } from 'app/models/DataSetProfile/FieldGroup'; -import { FieldSet } from 'app/models/DataSetProfile/FieldSet'; -import { FormArray } from '@angular/forms/src/model'; -import { Field } from 'app/models/DataSetProfile/Field'; - -@Component({ - selector: 'groupfield-form', - templateUrl: './groupfield-form.component.html', - styleUrls: [] -}) - -export class GroupFieldFormComponent { - @Input() form: FormGroup; - @Input() dataModel: FieldGroup; - @Input() indexPath: string; - - constructor(){} - - ngOnInit(){ - //this.addNewField(); - } - - addNewFieldSet(){ - let compositeField: FieldSet = new FieldSet(); - - let field: Field = new Field(); //create field at the same time - compositeField.fields.push(field); - //(this.form.get("compositeFields").get("fields")).push(field.buildForm()); - - - this.dataModel.compositeFields.push(compositeField); - (this.form.get("compositeFields")).push(compositeField.buildForm()); - - } - - DeleteFieldSet(index){ - this.dataModel.compositeFields.splice(index, 1); - (this.form.get("compositeFields")).removeAt(index); - } - -} \ No newline at end of file diff --git a/dmp-admin/src/app/dataset-profile-form/page-form/page-component.html b/dmp-admin/src/app/dataset-profile-form/page-form/page-component.html deleted file mode 100644 index 3ad68805d..000000000 --- a/dmp-admin/src/app/dataset-profile-form/page-form/page-component.html +++ /dev/null @@ -1,8 +0,0 @@ -
-
-
- - -
-
-
\ No newline at end of file diff --git a/dmp-admin/src/app/dataset-profile-form/page-form/page-component.ts b/dmp-admin/src/app/dataset-profile-form/page-form/page-component.ts deleted file mode 100644 index 5924b408a..000000000 --- a/dmp-admin/src/app/dataset-profile-form/page-form/page-component.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { Component, Input, Output, EventEmitter } from '@angular/core'; -import { FormGroup } from '@angular/forms' -import { Page } from 'app/models/DataSetProfile/Page' - -@Component({ - selector: 'page-form', - templateUrl: './page-component.html', - styleUrls: [] -}) - -export class PageFormComponent { - @Input() form: FormGroup; - @Input() dataModel: Page; - - TargetValidation() { - } - -} \ No newline at end of file diff --git a/dmp-admin/src/app/dataset-profile-form/rule-component/rule.component.html b/dmp-admin/src/app/dataset-profile-form/rule-component/rule.component.html deleted file mode 100644 index 7ddb10c84..000000000 --- a/dmp-admin/src/app/dataset-profile-form/rule-component/rule.component.html +++ /dev/null @@ -1,33 +0,0 @@ -
-
-
-
- - -
-
- - -
- - -
- - -
-
-
-
\ No newline at end of file diff --git a/dmp-admin/src/app/dataset-profile-form/rule-component/rule.component.ts b/dmp-admin/src/app/dataset-profile-form/rule-component/rule.component.ts deleted file mode 100644 index 01b70230f..000000000 --- a/dmp-admin/src/app/dataset-profile-form/rule-component/rule.component.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { Component, Input, Output, EventEmitter } from '@angular/core'; -import { FormGroup } from '@angular/forms' -import { Rule } from 'app/models/DataSetProfile/Rule' - -@Component({ - selector: 'rule-form', - templateUrl: './rule.component.html', - styleUrls: [] -}) - -export class RuleFormComponent { -@Input() form: FormGroup; -@Input() dataModel: FormGroup; - -TargetValidation(){ -} - -} \ No newline at end of file diff --git a/dmp-admin/src/app/dataset-profile-form/section-form/section-form.component.css b/dmp-admin/src/app/dataset-profile-form/section-form/section-form.component.css deleted file mode 100644 index 1ded10469..000000000 --- a/dmp-admin/src/app/dataset-profile-form/section-form/section-form.component.css +++ /dev/null @@ -1,5 +0,0 @@ -.section-container { - background-color: #f5f5f5; - border: 1px solid #e3e3e3; - padding: 24px; -} \ No newline at end of file diff --git a/dmp-admin/src/app/dataset-profile-form/section-form/section-form.component.html b/dmp-admin/src/app/dataset-profile-form/section-form/section-form.component.html deleted file mode 100644 index 1d3730e4f..000000000 --- a/dmp-admin/src/app/dataset-profile-form/section-form/section-form.component.html +++ /dev/null @@ -1,124 +0,0 @@ -
-
-
-
- - -
-
- - -
-
- - -
-
- - -
Page is required
-
-
- - - -
-
-
- - - - - - - - - -
-
-
- - {{i + 1}}. Field {{i + 1}} - -
- -
-
-
-
- -
-
-
-
- - - - - -
\ No newline at end of file diff --git a/dmp-admin/src/app/dataset-profile-form/section-form/section-form.component.ts b/dmp-admin/src/app/dataset-profile-form/section-form/section-form.component.ts deleted file mode 100644 index 051f148a9..000000000 --- a/dmp-admin/src/app/dataset-profile-form/section-form/section-form.component.ts +++ /dev/null @@ -1,64 +0,0 @@ -import { Component, OnInit, Input, ViewEncapsulation } from '@angular/core'; -import { FormGroup } from '@angular/forms'; -import { Section } from 'app/models/DataSetProfile/Section'; -import { FieldGroup } from 'app/models/DataSetProfile/FieldGroup'; -import { FormArray } from '@angular/forms/src/model'; -import { DatasetProfileModel } from 'app/models/DataSetProfile/DatasetProfileModel'; -import { FieldSet } from 'app/models/DataSetProfile/FieldSet'; -import { Field } from 'app/models/DataSetProfile/Field'; -import { Page } from 'app/models/DataSetProfile/Page'; -import { JsonSerializer } from 'app/utilities/JsonSerializer'; - -@Component({ - selector: 'section-form', - templateUrl: './section-form.component.html', - styleUrls: ['./section-form.component.css'], - encapsulation: ViewEncapsulation.None -}) - -export class SectionFormComponent { - @Input() form: FormGroup; - @Input() dataModel: Section; - @Input() indexPath: string; - - constructor() { } - - ngOnInit() { - var self = this; - this.form.root.get("pages").valueChanges.subscribe(function (value) { - self.keepPageSelectionValid(value); - }); - } - - addField() { - let fieldSet: FieldSet = new FieldSet(); - let field: Field = new Field(); - fieldSet.fields.push(field); - if (this.dataModel.fieldSets) - this.dataModel.fieldSets.push(fieldSet); - (this.form.get("fieldSets")).push(fieldSet.buildForm()); - } - - addSectioninSection() { - let section: Section = new Section(); - this.dataModel.sections.push(section); - (this.form.get("sections")).push(section.buildForm()); - } - - DeleteSectionInSection(index) { - this.dataModel.sections.splice(index); - (this.form.get("sections")).removeAt(index); - } - - DeleteFieldSet(index) { - this.dataModel.fieldSets.splice(index, 1); - (this.form.get("fieldSets")).removeAt(index); - } - - keepPageSelectionValid(pagesJson: Array) { - let selectedPage = this.form.get("page").value as String; - let pages: Array = JsonSerializer.fromJSONArray(pagesJson, Page); - if (pages.find(elem => elem.id === selectedPage) === undefined) - this.form.get("page").reset(); - } -} \ No newline at end of file diff --git a/dmp-admin/src/app/dataset-profile-gui-editor/dataset-profile-gui-editor.component.html b/dmp-admin/src/app/dataset-profile-gui-editor/dataset-profile-gui-editor.component.html deleted file mode 100644 index 625a5af77..000000000 --- a/dmp-admin/src/app/dataset-profile-gui-editor/dataset-profile-gui-editor.component.html +++ /dev/null @@ -1,68 +0,0 @@ -
-
-
-
-

Editing profile: {{profile?.label}}

-
-
- -
-
-
-
- - - -
- -
-
-
- - -
-
-
- - -
- -
- -
-
-
- - -
-
-
- - -
- -
- -
-
-
- - -
-
-
- - -
- -
- -
- - -
-
\ No newline at end of file diff --git a/dmp-admin/src/app/dataset-profile-gui-editor/dataset-profile-gui-editor.component.spec.ts b/dmp-admin/src/app/dataset-profile-gui-editor/dataset-profile-gui-editor.component.spec.ts deleted file mode 100644 index d4b474dd1..000000000 --- a/dmp-admin/src/app/dataset-profile-gui-editor/dataset-profile-gui-editor.component.spec.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; - -import { DatasetProfileGUIEditorComponent } from './dataset-profile-gui-editor.component'; - -describe('DatasetProfileEditorComponent', () => { - let component: DatasetProfileGUIEditorComponent; - let fixture: ComponentFixture; - - beforeEach(async(() => { - TestBed.configureTestingModule({ - declarations: [ DatasetProfileGUIEditorComponent ] - }) - .compileComponents(); - })); - - beforeEach(() => { - fixture = TestBed.createComponent(DatasetProfileGUIEditorComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should be created', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/dmp-admin/src/app/dataset-profile-gui-editor/dataset-profile-gui-editor.component.ts b/dmp-admin/src/app/dataset-profile-gui-editor/dataset-profile-gui-editor.component.ts deleted file mode 100644 index 6c36640e2..000000000 --- a/dmp-admin/src/app/dataset-profile-gui-editor/dataset-profile-gui-editor.component.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core'; - -@Component({ - selector: 'dataset-profile-gui-editor', - templateUrl: './dataset-profile-gui-editor.component.html', - styleUrls: ['./dataset-profile-gui-editor.component.css'] -}) -export class DatasetProfileGUIEditorComponent implements OnInit { - - constructor() { } - - @Input() profile: any; - @Output() notifyClick: EventEmitter = new EventEmitter(); - - ngOnInit() { - - } - - goToMain(){ - this.notifyClick.emit(1); - } - - -} diff --git a/dmp-admin/src/app/datasets-viewer/datasets-viewer.component.css b/dmp-admin/src/app/datasets-viewer/datasets-viewer.component.css deleted file mode 100644 index 3215586df..000000000 --- a/dmp-admin/src/app/datasets-viewer/datasets-viewer.component.css +++ /dev/null @@ -1,71 +0,0 @@ -div.container{ - margin-top: 30px; - margin-bottom: 30px; - margin-right: 30px; - margin-left: 30px; -} - -.dropdown-menu { - height: auto; - max-height: 180px; - overflow-x: hidden; -} - -.margined { - margin-left: 5px; - margin-right: 5px; -} - -.dropdown-menu::-webkit-scrollbar { - -webkit-appearance: none; - width: 4px; -} -.dropdown-menu::-webkit-scrollbar-thumb { - border-radius: 3px; - background-color: lightgray; - -webkit-box-shadow: 0 0 1px rgba(255,255,255,.75); -} -/* -.dropdown-list-elem { - margin-left: 5px; - margin-right: 5px; -} - - - -tr:hover { - background-color: #56615D; -} -td:hover { - background-color: #56615D; -} -*/ - - - -tr.hover:hover > * { - background-color: #eeeeee; -} - - -.red{ - color:red; - } - -.noborder{ - border-style: hidden; -} - -.invisible { - display:none; -} - -.visible { - display:block; -} - - -.dmp-btn-width{ - min-width: 140px; - max-width: 180px; -} \ No newline at end of file diff --git a/dmp-admin/src/app/datasets-viewer/datasets-viewer.component.html b/dmp-admin/src/app/datasets-viewer/datasets-viewer.component.html deleted file mode 100644 index a92228921..000000000 --- a/dmp-admin/src/app/datasets-viewer/datasets-viewer.component.html +++ /dev/null @@ -1,194 +0,0 @@ - -
-
-
- -
- -
-
-
-
-

Manage Datasets

-
-
- -
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
IDLabelDMPUriPropertiesProfile
{{dataset?.id}} - - - - - - - - - -
- -
- -
- -
- -
-
- - - - - - - -
-
- - - - - - - - - - - - - - - - - - -
-
-
-
-
-

Editing profile: {{profile?.label}}

-
-
- -
-
-
-
- - - -
- -
-
-
- - -
-
-
- - -
- -
- -
-
-
- - -
-
-
- - -
- -
- -
-
-
- - -
-
-
- - -
- -
- -
- - -
-
-
- - - diff --git a/dmp-admin/src/app/datasets-viewer/datasets-viewer.component.spec.ts b/dmp-admin/src/app/datasets-viewer/datasets-viewer.component.spec.ts deleted file mode 100644 index cd106290c..000000000 --- a/dmp-admin/src/app/datasets-viewer/datasets-viewer.component.spec.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; - -import { DatasetsViewerComponent } from './datasets-viewer.component'; - -describe('DatasetsViewerComponent', () => { - let component: DatasetsViewerComponent; - let fixture: ComponentFixture; - - beforeEach(async(() => { - TestBed.configureTestingModule({ - declarations: [ DatasetsViewerComponent ] - }) - .compileComponents(); - })); - - beforeEach(() => { - fixture = TestBed.createComponent(DatasetsViewerComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should be created', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/dmp-admin/src/app/datasets-viewer/datasets-viewer.component.ts b/dmp-admin/src/app/datasets-viewer/datasets-viewer.component.ts deleted file mode 100644 index 97f8be216..000000000 --- a/dmp-admin/src/app/datasets-viewer/datasets-viewer.component.ts +++ /dev/null @@ -1,366 +0,0 @@ -import { Component, Input, OnInit, AfterViewInit, ElementRef} from '@angular/core'; -import { DialogService } from "ng2-bootstrap-modal"; -import { Router } from '@angular/router'; -import { DatasetsServiceService } from '../services/datasets-service.service'; -import { DatasetProfileService } from '../services/dataset-profile.service'; -import { DmpsServiceService } from '../services/dmps-service.service'; -import { DatasetProfileGUIEditorComponent } from '../dataset-profile-gui-editor/dataset-profile-gui-editor.component'; - -import '../../assets/custom.js'; -declare function simple_notifier(type: string, title: string, message:string): any; - -import {Headers, Http, Response} from '@angular/http'; -import {Observable} from 'rxjs/Observable'; -import * as jQuery from 'jquery'; - -@Component({ - selector: 'app-datasets-viewer', - templateUrl: './datasets-viewer.component.html', - styleUrls: ['./datasets-viewer.component.css'] -}) -export class DatasetsViewerComponent implements OnInit, AfterViewInit { - - //This is the table data - public data: any[] = new Array(); - public filterQuery = ""; - public rowsOnPage = 10; - public sortBy = "email"; - public sortOrder = "asc"; - - //this is for viewing or not ids - private showIDs: boolean = false; - - //this is for switching between components - private viewingComponent: number = 1; - - public dmpsIDLabels : any = null; - - //for update sensing... - private haveChanges : boolean = false; - - //for popups - private clickedDatasetID: string; - - //this is the profile under edit - private profile : any; - - - constructor( - private el: ElementRef, - private datasetsService : DatasetsServiceService, - private datasetProfileService: DatasetProfileService, - private http : Http, - private dmpsService: DmpsServiceService, - private dialogService:DialogService, - private router: Router - ) { - - } - - - ngOnInit() : void { - //this.getDatasetIDs(); - this.getTabularDatasets(false); - this.dmpsIDLabels = this.dmpsService.getDmpIdsLabels().subscribe((data)=> {this.dmpsIDLabels = data;} ); - } - - ngAfterViewInit() { - - } - - onFocusIn($event){ - this.nullSafeProfile(); - this.haveChanges = false; - } - - onValueChanged($event){ - this.nullSafeProfile(); - this.haveChanges = true; - } - - onFocusOutLabel($event){ - if(this.haveChanges){ - let datasetID = $event.srcElement.parentElement.parentElement.children[0].textContent; - console.log("Updating the value of label to: "+$event.target.value+" on row with id: "+datasetID); - this.datasetsService.getDatasetById(datasetID).subscribe( (data) => { - data.label = $event.target.value; - this.datasetsService.setDataset(data).subscribe( (data) => { - //console.log(data); - }); - simple_notifier("success",null,"Updated value of label to '"+data.label+"'"); - }); - } - } - - - onFocusOutURI($event){ - if(this.haveChanges){ - let datasetID = $event.srcElement.parentElement.parentElement.children[0].textContent; - console.log("Updating the value of uri to: "+$event.target.value+" on row with id: "+datasetID); - this.datasetsService.getDatasetById(datasetID).subscribe( - (data) => { - data.uri = $event.target.value; - this.datasetsService.setDataset(data).subscribe( (data) => { - //console.log(data); - } - ); - simple_notifier("success",null,"Updated value of Uri to '"+data.uri+"'"); - } - ); - } - - } - - - - - onFocusOutProfileWin($event, value:string) { - this.nullSafeProfile(); - if(this.haveChanges){ - - //delete this.profile.id; - //delete this.profile.ruleset.id; - //delete this.profile.viewstyle.id; - - delete this.profile.dataset; - delete this.profile.ruleset.datasetProfile; - delete this.profile.viewstyle.datasetProfile; - - console.log("Saving profile: "+JSON.stringify(this.profile)); - - //save back - this.datasetProfileService.createDatasetProfile(this.profile).subscribe( - response => { - simple_notifier("success",null,"Saved Dataset Profile"); - console.log(response); - }, - err => { - simple_notifier("danger",null,"Could not save Dataset Profile"); - console.log(err); - } - ); - - /* - //save back - if(this.profile.id == null){ //if profile is new - //create profile and a) assign it on data[] and on current profile b) assign it to dataset - this.datasetProfileService.createDatasetProfile(this.profile).subscribe((resp) => { - - this.datasetsService.getDatasetById(this.clickedDatasetID).subscribe( (dataset) => { - - if(dataset.profile != null){ - this.profile.id = dataset.profile.id; - - } - dataset.profile = this.profile; - - console.log("SAVING DATASET: "+JSON.stringify(dataset)); - - this.datasetsService.setDataset(dataset).subscribe( (resp) => { - - //console.log(resp); - simple_notifier("success",null,"Updated profile element"); - }); - }); - - simple_notifier("success",null,"Updated profile element"); - }); - } - else{ - //this.getDatasetFromDataArray() - - console.log("this.profile") - console.log(this.profile) - - //this.profile.dataset = {"id": this.profile.dataset}; - - - this.datasetProfileService.updateDatasetProfile(this.profile).subscribe( - response => { - simple_notifier("success",null,"Saved DMP Profile"); - console.log(response); - }, - err => { - simple_notifier("danger",null,"Could not save DMP Profile"); - console.log(err); - } - ); - - } - */ - - } - - } - - - nullSafeProfile(){ - if(this.profile==null){ - console.log("BEFORE:"); - console.log(this.profile); - this.profile = {'label':null, 'definition':null, 'viewstyle':{'label':null, 'definition':null}, 'ruleset':{'label':null, 'definition':null}}; - console.log("AFTER:"); - console.log(this.profile); - } - } - - - - preventDefaults($event){ - if($event.code == 'Tab') { - $event.preventDefault(); - //AND NOW HACK THE TAB KEY WITHIN THE TEXT EDITOR - var start = $event.srcElement.selectionStart; - var end = $event.srcElement.selectionEnd; - // set textarea value to: text before caret + tab + text after caret - $event.target.value = $event.target.value.substring(0, start)+"\t"+$event.target.value.substring(end); - // put caret at right position again - $event.srcElement.selectionStart = - $event.srcElement.selectionEnd = start + 1; - } - } - - getTabularDatasets(notifyAlso){ - - this.datasetsService.fetchAllDatasets() - .map((elems) => { - let tmpData = new Array(); - for (let elem of elems) { - let row = { - "id": elem.id, - "label":elem.label, - "dmp": elem.dmp, - "uri": elem.uri, - "properties": elem.properties, - "profile": elem.profile - }; - tmpData.push(row); - } - return tmpData; - } - ) - .subscribe((data)=> { - this.data = data; - if(notifyAlso) - simple_notifier("info",null,"Refreshed table"); - }); - } - - - onShowingPropertiesModal($event){ - var trElem = $event.target; - while(trElem.nodeName != "TR") - trElem = trElem.parentElement; - this.clickedDatasetID = trElem.children[0].textContent; - } - - - gotoProfileEditor($event) { - var trElem = $event.target; - while(trElem.nodeName != "TR") - trElem = trElem.parentElement; - this.clickedDatasetID = trElem.children[0].textContent; - - if(this.clickedDatasetID == null) console.log("Could not retrieve the id of the clicked dataset"); - - var dataset = this.getDatasetFromDataArray(this.clickedDatasetID); - if(dataset != null){ - this.profile = dataset.profile; - this.goToEditor(); - } - - } - - getDatasetFromDataArray(datasetID){ - for(var dataRow of this.data){ - if(datasetID == dataRow.id) - return dataRow; - } - return null; - } - - - deleteDataset(dataset){ - this.datasetsService.deleteDataset(dataset).subscribe( - resp =>{ - console.log(status); - this.refreshTable(null); - simple_notifier("success",null,"Dataset was deleted"); - }, - err => { - simple_notifier("danger",null,"Dataset could not be deleted"); - } - ); - } - - - goToEditor(){ - this.viewingComponent = 2; - } - - goToMain(){ - this.viewingComponent = 1; - } - - - setDmpLabelValueOfDatasetID(datasetID, newVal){ - for(var i=0;i { - this.setDmpLabelValueOfDatasetID(datasetID, $event.target.text); - simple_notifier("success",null,"Assigned the dmp on dataset"); - }, - err => { - simple_notifier("danger",null,"Could not assign the dmp on dataset"); - } - ); - - } - - -} \ No newline at end of file diff --git a/dmp-admin/src/app/guards/auth.guard.ts b/dmp-admin/src/app/guards/auth.guard.ts deleted file mode 100644 index 1117cbfe2..000000000 --- a/dmp-admin/src/app/guards/auth.guard.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { AuthService } from '../services/auth/auth.service'; -import { Injectable } from '@angular/core'; -import { Router, CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router'; - -@Injectable() -export class AuthGuard implements CanActivate { - - constructor(private auth: AuthService, private router: Router) { } - canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean { - let url: string = state.url; - if (!this.auth.current()) { - this.router.navigate(['/unauthorized'], { queryParams: { returnUrl: url } }); - return false; - } - return true; - } -} diff --git a/dmp-admin/src/app/login/googgle-sign-in/googgle-sign-in.component.css b/dmp-admin/src/app/login/googgle-sign-in/googgle-sign-in.component.css deleted file mode 100644 index 7ecba8a01..000000000 --- a/dmp-admin/src/app/login/googgle-sign-in/googgle-sign-in.component.css +++ /dev/null @@ -1,11 +0,0 @@ -.nomargin{ - margin-top: 0px; - margin-bottom: 0px; - margin-left: 0px; - margin-right: 0px; -} - -.width-range { - max-width: 500px; - min-width: 300px; -} \ No newline at end of file diff --git a/dmp-admin/src/app/login/googgle-sign-in/googgle-sign-in.component.html b/dmp-admin/src/app/login/googgle-sign-in/googgle-sign-in.component.html deleted file mode 100644 index e84f17f92..000000000 --- a/dmp-admin/src/app/login/googgle-sign-in/googgle-sign-in.component.html +++ /dev/null @@ -1,12 +0,0 @@ - - - - -
- - -
- - - - diff --git a/dmp-admin/src/app/login/googgle-sign-in/googgle-sign-in.component.spec.ts b/dmp-admin/src/app/login/googgle-sign-in/googgle-sign-in.component.spec.ts deleted file mode 100644 index ee11f64bd..000000000 --- a/dmp-admin/src/app/login/googgle-sign-in/googgle-sign-in.component.spec.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; - -import { GooggleSignInComponent } from './googgle-sign-in.component'; - -describe('GooggleSignInComponent', () => { - let component: GooggleSignInComponent; - let fixture: ComponentFixture; - - beforeEach(async(() => { - TestBed.configureTestingModule({ - declarations: [ GooggleSignInComponent ] - }) - .compileComponents(); - })); - - beforeEach(() => { - fixture = TestBed.createComponent(GooggleSignInComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should be created', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/dmp-admin/src/app/login/googgle-sign-in/googgle-sign-in.component.ts b/dmp-admin/src/app/login/googgle-sign-in/googgle-sign-in.component.ts deleted file mode 100644 index d98a5b343..000000000 --- a/dmp-admin/src/app/login/googgle-sign-in/googgle-sign-in.component.ts +++ /dev/null @@ -1,82 +0,0 @@ -import { Component, OnInit, ElementRef, AfterViewInit, VERSION } from '@angular/core'; -import { TokenService, TokenProvider } from '../../services/login/token.service'; -import {Router} from '@angular/router'; - -declare const gapi: any; - -import '../../../assets/custom.js'; -declare function simple_notifier(type: string, title: string, message:string): any; - -@Component({ - selector: 'googgle-sign-in', - templateUrl: './googgle-sign-in.component.html', - styleUrls: ['./googgle-sign-in.component.css'] -}) -export class GooggleSignInComponent implements OnInit, AfterViewInit { - - //token:any; - - constructor(private element: ElementRef, private tokenService : TokenService, private router : Router) { - - } - - ngOnInit() { - } - - private clientId:string = '524432312250-sc9qsmtmbvlv05r44onl6l93ia3k9deo.apps.googleusercontent.com'; - - private scope = [ - 'profile', - 'email' - //, - //'https://www.googleapis.com/auth/plus.me', - //'https://www.googleapis.com/auth/contacts.readonly', - //'https://www.googleapis.com/auth/admin.directory.user.readonly' - ].join(' '); - - public auth2: any; - - public googleInit() { - - gapi.load('auth2', () => { - this.auth2 = gapi.auth2.init({ - client_id: this.clientId, - cookiepolicy: 'single_host_origin', - scope: this.scope - }); - var buttonElement = this.element.nativeElement.querySelector('#googleBtn'); - this.attachSignin(buttonElement); - }); - } - - public attachSignin(element) { - this.auth2.attachClickHandler(element, {}, - (googleUser) => { - simple_notifier("success",null,"Successful login"); - let profile = googleUser.getBasicProfile(); - this.tokenService.login(googleUser.getAuthResponse().id_token, TokenProvider.google, profile.getName(), profile.getEmail()); - }, function (error) { - simple_notifier("danger",null,"Failed to login"); - console.log(JSON.stringify(error, undefined, 2)); - }); - - } - - - - ngAfterViewInit() { - this.googleInit(); - } - -/* - signOut() { - var auth2 = gapi.auth2.getAuthInstance(); - auth2.signOut().then(function () { - console.log('User signed out.'); - }); - } -*/ - -} - - diff --git a/dmp-admin/src/app/login/main-sign-in/main-sign-in.component.css b/dmp-admin/src/app/login/main-sign-in/main-sign-in.component.css deleted file mode 100644 index e49f49b9a..000000000 --- a/dmp-admin/src/app/login/main-sign-in/main-sign-in.component.css +++ /dev/null @@ -1,75 +0,0 @@ -.form-signin -{ - max-width: 330px; - padding: 15px; - margin: 0 auto; -} -.form-signin .form-signin-heading, .form-signin .checkbox -{ - margin-bottom: 10px; -} -.form-signin .checkbox -{ - font-weight: normal; -} -.form-signin .form-control -{ - position: relative; - font-size: 16px; - height: auto; - padding: 10px; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} -.form-signin .form-control:focus -{ - z-index: 2; -} -.form-signin input[type="text"] -{ - margin-bottom: -1px; - border-bottom-left-radius: 0; - border-bottom-right-radius: 0; -} -.form-signin input[type="password"] -{ - margin-bottom: 10px; - border-top-left-radius: 0; - border-top-right-radius: 0; -} -.account-wall -{ - margin-top: 20px; - padding: 40px 0px 20px 0px; - background-color: #f7f7f7; - -moz-box-shadow: 0px 2px 2px rgba(0, 0, 0, 0.3); - -webkit-box-shadow: 0px 2px 2px rgba(0, 0, 0, 0.3); - box-shadow: 0px 2px 2px rgba(0, 0, 0, 0.3); -} -.login-title -{ - color: #555; - font-size: 18px; - font-weight: 400; - display: block; -} -.profile-img -{ - width: 96px; - height: 96px; - margin: 0 auto 10px; - display: block; - -moz-border-radius: 50%; - -webkit-border-radius: 50%; - border-radius: 50%; -} -.need-help -{ - margin-top: 10px; -} -.new-account -{ - display: block; - margin-top: 10px; -} \ No newline at end of file diff --git a/dmp-admin/src/app/login/main-sign-in/main-sign-in.component.html b/dmp-admin/src/app/login/main-sign-in/main-sign-in.component.html deleted file mode 100644 index 13b9a844f..000000000 --- a/dmp-admin/src/app/login/main-sign-in/main-sign-in.component.html +++ /dev/null @@ -1,43 +0,0 @@ -
-
-
-

- -
-
- -
- -
-
-
- -
-
- -
- diff --git a/dmp-admin/src/app/login/main-sign-in/main-sign-in.component.spec.ts b/dmp-admin/src/app/login/main-sign-in/main-sign-in.component.spec.ts deleted file mode 100644 index cd7c7a960..000000000 --- a/dmp-admin/src/app/login/main-sign-in/main-sign-in.component.spec.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; - -import { MainSignInComponent } from './main-sign-in.component'; - -describe('MainSignInComponent', () => { - let component: MainSignInComponent; - let fixture: ComponentFixture; - - beforeEach(async(() => { - TestBed.configureTestingModule({ - declarations: [ MainSignInComponent ] - }) - .compileComponents(); - })); - - beforeEach(() => { - fixture = TestBed.createComponent(MainSignInComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should be created', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/dmp-admin/src/app/login/main-sign-in/main-sign-in.component.ts b/dmp-admin/src/app/login/main-sign-in/main-sign-in.component.ts deleted file mode 100644 index bc305972c..000000000 --- a/dmp-admin/src/app/login/main-sign-in/main-sign-in.component.ts +++ /dev/null @@ -1,93 +0,0 @@ -import { Component, OnInit } from '@angular/core'; -import { FormBuilder, FormGroup, Validators } from '@angular/forms'; -import { NativeLoginService } from '../../services/login/native-login.service'; -import { TokenService, TokenProvider } from '../../services/login/token.service'; -import { Router } from '@angular/router'; - -import '../../../assets/custom.js'; -import { AuthService } from 'app/services/auth/auth.service'; -import { Credential } from 'app/models/login/Credential'; -import { ActivatedRoute, Params } from '@angular/router'; -import { NgZone } from '@angular/core'; - -@Component({ - selector: 'app-main-sign-in', - templateUrl: './main-sign-in.component.html', - styleUrls: ['./main-sign-in.component.css'] -}) -export class MainSignInComponent implements OnInit { - - - nativeLoginForm: any; - - creds: any = { "username": "", "password": "" }; - - - constructor(private fb: FormBuilder, private nativeLogin: NativeLoginService, private tokenService: TokenService, - private router: Router, private authservice: AuthService, public route: ActivatedRoute, private zone: NgZone) { - - } - - - createProjectEditorForm() { - - this.nativeLoginForm = this.fb.group({ - username: ['', Validators.required], - password: ['', Validators.required] - }); - - } - - - ngOnInit() { - this.createProjectEditorForm(); - } - - - login() { - //login using the credentials - - // this.nativeLogin.login(this.creds.username, this.creds.password).subscribe( - // response => { - - // simple_notifier("success",null,"Successful login"); - - // this.tokenService.login(response['token'], TokenProvider.native, this.creds.username, response['email']); - - // }, - // err => { - // simple_notifier("danger",null,"Failed to login"); - // } - // ); - let credentials = new Credential(); - credentials.username = this.creds.username; - credentials.secret = this.creds.password; - - this.authservice.nativeLogin(credentials).subscribe( - res => this.onLogInSuccess(res), - error => this.onLogInError(error) - ); - } - - - public onLogInSuccess(logoutMessage: any) { - // this.snackBar.openFromComponent(SnackBarNotificationComponent, { - // data: { message: 'GENERAL.SNACK-BAR.SUCCESSFUL-LOGIN', language: this.language }, - // duration: 3000, - // extraClasses: ['snackbar-success'] - // }); - this.route.queryParams.subscribe((params: Params) => { - let redirectUrl = params['returnUrl'] ? params['returnUrl'] : '/'; - this.zone.run(() => this.router.navigate([redirectUrl])); - }) -} - -public onLogInError(errorMessage: string) { - // this.snackBar.openFromComponent(SnackBarNotificationComponent, { - // data: { message: 'GENERAL.SNACK-BAR.UNSUCCESSFUL-LOGIN', language: this.language }, - // duration: 3000, - // extraClasses: ['snackbar-warning'] - // }) -} - -} diff --git a/dmp-admin/src/app/main-window/main-window.component.css b/dmp-admin/src/app/main-window/main-window.component.css deleted file mode 100644 index 302b09b6b..000000000 --- a/dmp-admin/src/app/main-window/main-window.component.css +++ /dev/null @@ -1,172 +0,0 @@ - -/* MY CUSTOM CSS */ - -.float-left{ - float: left; -} - - - - - - - - -/* -#3a679c -*/ - - - - -/* SIDEBAR's CSS */ -.nav-side-menu { - overflow: auto; - font-family: verdana; - font-size: 12px; - font-weight: 200; - background-color: #557DAA; - position: inherit; - top: 0px; - width: 300px; - height: 100%; - color: #e1ffff; - } - .nav-side-menu .brand { - background-color: #345881; - line-height: 50px; - display: block; - text-align: center; - font-size: 14px; - } - .nav-side-menu .toggle-btn { - display: none; - } - .nav-side-menu ul, - .nav-side-menu li { - list-style: none; - padding: 0px; - margin: 0px; - line-height: 35px; - cursor: pointer; - /* - .collapsed{ - .arrow:before{ - font-family: FontAwesome; - content: "\f053"; - display: inline-block; - padding-left:10px; - padding-right: 10px; - vertical-align: middle; - float:right; - } - } - */ - } - .nav-side-menu ul :not(collapsed) .arrow:before, - .nav-side-menu li :not(collapsed) .arrow:before { - font-family: FontAwesome; - content: "\f078"; - display: inline-block; - padding-left: 10px; - padding-right: 10px; - vertical-align: middle; - float: right; - } - .nav-side-menu ul .active, - .nav-side-menu li .active { - border-left: 3px solid #d19b3d; - background-color: #587AA1; - } - .nav-side-menu ul .sub-menu li.active, - .nav-side-menu li .sub-menu li.active { - color: #d19b3d; - } - .nav-side-menu ul .sub-menu li.active a, - .nav-side-menu li .sub-menu li.active a { - color: #d19b3d; - } - .nav-side-menu ul .sub-menu li, - .nav-side-menu li .sub-menu li { - background-color: #181c20; - border: none; - line-height: 28px; - border-bottom: 1px solid #18375A; - margin-left: 0px; - } - .nav-side-menu ul .sub-menu li:hover, - .nav-side-menu li .sub-menu li:hover { - background-color: #020203; - } - .nav-side-menu ul .sub-menu li:before, - .nav-side-menu li .sub-menu li:before { - font-family: FontAwesome; - content: "\f105"; - display: inline-block; - padding-left: 10px; - padding-right: 10px; - vertical-align: middle; - } - .nav-side-menu li { - padding-left: 0px; - border-left: 3px solid #2e353d; - border-bottom: 1px solid #23282e; - } - .nav-side-menu li a { - text-decoration: none; - color: #e1ffff; - } - .nav-side-menu li a i { - padding-left: 10px; - width: 20px; - padding-right: 20px; - } - .nav-side-menu li:hover { - border-left: 3px solid #d19b3d; - background-color: #4f5b69; - -webkit-transition: all 1s ease; - -moz-transition: all 1s ease; - -o-transition: all 1s ease; - -ms-transition: all 1s ease; - transition: all 1s ease; - } - @media (max-width: 767px) { - .nav-side-menu { - position: relative; - width: 100%; - margin-bottom: 10px; - } - .nav-side-menu .toggle-btn { - display: block; - cursor: pointer; - position: absolute; - right: 10px; - top: 10px; - z-index: 10 !important; - padding: 3px; - background-color: #ffffff; - color: #000; - width: 40px; - text-align: center; - } - .brand { - text-align: left !important; - font-size: 22px; - padding-left: 20px; - line-height: 50px !important; - } - } - @media (min-width: 767px) { - .nav-side-menu .menu-list .menu-content { - display: block; - } - } - /* - body { - margin: 0px; - padding: 0px; - } - */ -/* END OF SIDEBAR's CSS */ - - diff --git a/dmp-admin/src/app/main-window/main-window.component.html b/dmp-admin/src/app/main-window/main-window.component.html deleted file mode 100644 index 3c03daa7e..000000000 --- a/dmp-admin/src/app/main-window/main-window.component.html +++ /dev/null @@ -1,34 +0,0 @@ -
- -
- -
- - - -
- diff --git a/dmp-admin/src/app/main-window/main-window.component.spec.ts b/dmp-admin/src/app/main-window/main-window.component.spec.ts deleted file mode 100644 index b37c6cbe5..000000000 --- a/dmp-admin/src/app/main-window/main-window.component.spec.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; - -import { MainWindowComponent } from './main-window.component'; - -describe('MainWindowComponent', () => { - let component: MainWindowComponent; - let fixture: ComponentFixture; - - beforeEach(async(() => { - TestBed.configureTestingModule({ - declarations: [ MainWindowComponent ] - }) - .compileComponents(); - })); - - beforeEach(() => { - fixture = TestBed.createComponent(MainWindowComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/dmp-admin/src/app/main-window/main-window.component.ts b/dmp-admin/src/app/main-window/main-window.component.ts deleted file mode 100644 index 2281212fd..000000000 --- a/dmp-admin/src/app/main-window/main-window.component.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { Component, OnInit, Input } from '@angular/core'; -import { TokenService } from '../services/login/token.service'; - -@Component({ - selector: 'main-window', - templateUrl: './main-window.component.html', - styleUrls: ['../../assets/simple-sidebar.css', './main-window.component.css'] -}) -export class MainWindowComponent implements OnInit { - - constructor(public tokenService : TokenService) { - - } - - //@Input() loggedInAs; - - showSidebar : boolean = true; - - currentlySelected : string = ""; - - ngOnInit() { - - } - - setActive(val) { - this.currentlySelected = val; - } - - - -} diff --git a/dmp-admin/src/app/managers/datasetProfiles-material/datasetProfiles-material-list.html b/dmp-admin/src/app/managers/datasetProfiles-material/datasetProfiles-material-list.html deleted file mode 100644 index 62f70986b..000000000 --- a/dmp-admin/src/app/managers/datasetProfiles-material/datasetProfiles-material-list.html +++ /dev/null @@ -1,64 +0,0 @@ -
-

{{titlePrefix}} {{'DATASET-LISTING.TITLE' | translate}}

- - - - - - - - - - - - Label - {{row.label}} - - - - - Status - {{row.status}} - - - - - - Description - {{row.description}} - - - - - Created} - {{row.created | date:'shortDate'}} - - - - - {{'DATASET-LISTING.COLUMNS.ACTIONS' | translate}} - - - - - - - - - - - - - - - - - - - - -
\ No newline at end of file diff --git a/dmp-admin/src/app/managers/datasetProfiles-material/datasetProfiles-material-list.ts b/dmp-admin/src/app/managers/datasetProfiles-material/datasetProfiles-material-list.ts deleted file mode 100644 index b410f5d06..000000000 --- a/dmp-admin/src/app/managers/datasetProfiles-material/datasetProfiles-material-list.ts +++ /dev/null @@ -1,146 +0,0 @@ - -// import { Component, ViewChild, OnInit, AfterViewInit } from "@angular/core"; -// //import { MatPaginator, MatSort, MatSnackBar } from "@angular/material"; -// import { Router, Params, ActivatedRoute } from "@angular/router"; - - -// import { Observable } from "rxjs/Observable"; - - - -// @Component({ -// selector: 'app-dataset-listing-component', -// templateUrl: 'dataset-listing.component.html', -// styleUrls: ['./dataset-listing.component.scss'], -// providers: [DatasetService, DataManagementPlanService] -// }) -// export class DatasetListingComponent implements OnInit { - -// @ViewChild(MatPaginator) _paginator: MatPaginator; -// @ViewChild(MatSort) sort: MatSort; -// @ViewChild(DatasetCriteriaComponent) criteria: DatasetCriteriaComponent; - - -// dataSource: DatasetDataSource | null; -// displayedColumns: String[] = ['label', 'dmp', 'profile', 'dataRepositories', 'registries', 'services', 'description', 'created', 'actions']; -// pageEvent: PageEvent; -// titlePrefix: String; -// dmpId: String; - -// statuses = [ -// { value: '0', viewValue: 'Active' }, -// { value: '1', viewValue: 'Inactive' } -// ]; - -// constructor( -// private datasetService: DatasetService, -// private router: Router, -// private languageService: TranslateService, -// public snackBar: MatSnackBar, -// public route: ActivatedRoute, -// public dataManagementPlanService: DataManagementPlanService -// ) { - -// } - - -// ngOnInit() { -// this.route.params.subscribe((params: Params) => { -// this.dmpId = params['dmpId']; -// if(this.dmpId != null) this.setDmpTitle(this.dmpId); -// this.criteria.setCriteria(this.getDefaultCriteria(this.dmpId)); -// this.refresh(); -// this.criteria.setRefreshCallback(() => this.refresh()); -// }); -// } - -// setDmpTitle(dmpId: String) { -// this.dataManagementPlanService.getSingle(dmpId).map(data => data as DataManagementPlanModel) -// .subscribe(data => { -// this.titlePrefix = data.label; -// }); -// } - -// refresh() { -// this.dataSource = new DatasetDataSource(this.datasetService, this._paginator, this.sort, this.languageService, this.snackBar, this.criteria); -// } - -// rowClick(rowId: String) { -// this.router.navigate(['/datasets/edit/' + rowId]); -// } - -// getDefaultCriteria(dmpId: String): DatasetCriteria { -// const defaultCriteria = new DatasetCriteria(); -// if (dmpId != null) { -// defaultCriteria.dmpIds.push(dmpId); -// } -// return defaultCriteria; -// } - -// makeItPublic(id:String){debugger; -// this.datasetService.makeDatasetPublic(id).subscribe(); -// } - -// } - -// export class DatasetDataSource extends DataSource { - -// totalCount = 0; -// isLoadingResults = false; - -// constructor( -// private _service: DatasetService, -// private _paginator: MatPaginator, -// private _sort: MatSort, -// private _languageService: TranslateService, -// private _snackBar: MatSnackBar, -// private _criteria: DatasetCriteriaComponent -// ) { -// super(); - -// } - -// connect(): Observable { -// const displayDataChanges = [ -// this._paginator.page -// //this._sort.matSortChange -// ]; - - -// return Observable.merge(...displayDataChanges) -// .startWith(null) -// .switchMap(() => { -// setTimeout(() => { -// this.isLoadingResults = true; -// }); -// const startIndex = this._paginator.pageIndex * this._paginator.pageSize; -// const request = new DataTableRequest(startIndex, this._paginator.pageSize); -// request.criteria = this._criteria.criteria; -// return this._service.getPaged(request); -// }) -// /*.catch((error: any) => { -// this._snackBar.openFromComponent(SnackBarNotificationComponent, { -// data: { message: 'GENERAL.SNACK-BAR.FORMS-BAD-REQUEST', language: this._languageService }, -// duration: 3000, -// extraClasses: ['snackbar-warning'] -// }); -// //this._criteria.criteria.onCallbackError(error); -// return Observable.of(null); -// })*/ -// .map(result => { -// setTimeout(() => { -// this.isLoadingResults = false; -// }); -// return result; -// }) -// .map(result => { -// if (!result) { return []; } -// if (this._paginator.pageIndex === 0) { this.totalCount = result.totalCount; } -// return result.data; -// }); -// } - -// disconnect() { -// // No-op -// } -// } \ No newline at end of file diff --git a/dmp-admin/src/app/managers/datasetprofile-editor/datasetprofile-editor.component.html b/dmp-admin/src/app/managers/datasetprofile-editor/datasetprofile-editor.component.html deleted file mode 100644 index 61eb40641..000000000 --- a/dmp-admin/src/app/managers/datasetprofile-editor/datasetprofile-editor.component.html +++ /dev/null @@ -1,121 +0,0 @@ - -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - -
LabelCreatedDescriptionStatus
No elements
{{datasetProfile?.label}}{{datasetProfile?.created}}{{datasetProfile?.description}}{{datasetProfile?.status}}
- -
-
- - -
- -
-
- -
-
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
- -
- -
- - - - - - Manage Dataset Profiles - - - - Create Dataset profile - - - Edit this Dataset profile - - - Delete this - - - - Show full tree connections - - - \ No newline at end of file diff --git a/dmp-admin/src/app/managers/datasetprofile-editor/datasetprofile-editor.component.spec.ts b/dmp-admin/src/app/managers/datasetprofile-editor/datasetprofile-editor.component.spec.ts deleted file mode 100644 index 3b9452101..000000000 --- a/dmp-admin/src/app/managers/datasetprofile-editor/datasetprofile-editor.component.spec.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; - -import { DatasetprofileEditorComponent } from './datasetprofile-editor.component'; - -describe('DatasetprofileEditorComponent', () => { - let component: DatasetprofileEditorComponent; - let fixture: ComponentFixture; - - beforeEach(async(() => { - TestBed.configureTestingModule({ - declarations: [ DatasetprofileEditorComponent ] - }) - .compileComponents(); - })); - - beforeEach(() => { - fixture = TestBed.createComponent(DatasetprofileEditorComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should be created', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/dmp-admin/src/app/managers/datasetprofile-editor/datasetprofile-editor.component.ts b/dmp-admin/src/app/managers/datasetprofile-editor/datasetprofile-editor.component.ts deleted file mode 100644 index 64949e466..000000000 --- a/dmp-admin/src/app/managers/datasetprofile-editor/datasetprofile-editor.component.ts +++ /dev/null @@ -1,132 +0,0 @@ -import { Component, OnInit, ViewChild } from '@angular/core'; -import { DatasetProfileService } from '../../services/dataset-profile.service'; -import { ReactiveFormsModule } from '@angular/forms'; -import { FormBuilder, FormGroup, Validators } from '@angular/forms'; - -import '../../../assets/custom.js'; -declare function simple_notifier(type: string, title: string, message:string): any; - - -@Component({ - selector: 'app-datasetprofile-editor', - templateUrl: './datasetprofile-editor.component.html', - styleUrls: ['./datasetprofile-editor.component.css'] -}) -export class DatasetprofileEditorComponent implements OnInit { - - - constructor(private datasetProfileService : DatasetProfileService, private fb: FormBuilder) { - - } - - //whole dmp data model - tableData : any[] = new Array(); - - //DatasetProfile editor data model - editingDatasetProfile: any = {}; - datasetProfileEditorForm : any; - - //required by the table - public filterQuery = ""; - public rowsOnPage = 10; - //public sortBy = "email"; - public sortOrder = "asc"; - - //visibility rules for containers - tableVisible: boolean = true; - editorVisible: boolean = false; - - - // for tableIds - showIDs : boolean = false; - - - - - ngOnInit() { - this.getAllDatasetProfiles(false); - this.createDatasetProfileEditorForm(); - } - - createDatasetProfileEditorForm(){ - this.datasetProfileEditorForm = this.fb.group({ - id: '', - label: ['', Validators.required ], - ruleset: '', - viewstyle: '', - definition: '' - }); - - } - - switchToTable(){ - this.tableVisible = true; - this.editorVisible = false; - } - - switchToEditor(datasetProfileID){ - this.tableVisible = false; - this.editorVisible = true; - if(datasetProfileID == null){ - this.editingDatasetProfile = {id: null, label: "", created: "", description: "", status: "" }; - } - else{ - this.editingDatasetProfile = this.tableData.filter((datasetProfile) => datasetProfile.id === datasetProfileID)[0]; - } - } - - - getAllDatasetProfiles(showNotification : boolean){ - this.datasetProfileService.fetchAllDatasetProfiles().subscribe( (data) => { - this.tableData = data.payload; - if(showNotification) - simple_notifier("info",null,"Refreshed the table"); - }); - } - - - edit(data){ - this.switchToEditor(data); - } - - new(){ - this.switchToEditor(null); - } - - - - save(mouseEvent){ - this.datasetProfileService.createDatasetProfile(this.datasetProfileEditorForm.value).subscribe( - response => { - simple_notifier("success",null,"Saved dataset Profile"); - this.getAllDatasetProfiles(false); - this.switchToTable(); - }, - err => { - simple_notifier("danger",null,"Could not save dataset Profile"); - } - ); - } - - delete(data){ - console.log(data); - this.datasetProfileService.delete(data).subscribe( - (response) => { - simple_notifier("success",null,"Deleted dataset profile"); - this.getAllDatasetProfiles(false); - this.switchToTable(); - }, - (err) => { - simple_notifier("danger",null,"Could not delete dataset profile"); - } - ) - } - - - - refreshTable($event){ - this.getAllDatasetProfiles(true); - } - - -} diff --git a/dmp-admin/src/app/managers/dmp-profile-editor/dmp-profile-editor.component.css b/dmp-admin/src/app/managers/dmp-profile-editor/dmp-profile-editor.component.css deleted file mode 100644 index 002b130b0..000000000 --- a/dmp-admin/src/app/managers/dmp-profile-editor/dmp-profile-editor.component.css +++ /dev/null @@ -1,33 +0,0 @@ -.invisible { - display:none; -} - -.visible { - display:block; -} - -tr.hover:hover > * { - background-color: #eeeeee; -} - -.editor-container{ - padding-top: 10px; - padding-right: 10px; - padding-bottom: 10px; - padding-left: 10px; -} - -.button-150px { - max-width: 150px; -} - -.ng-template{ - text-align: right; -} - -.grayout-empty-table { - opacity: 0.6; /* Real browsers */ - filter: alpha(opacity = 60); /* MSIE */ - text-align: center; - vertical-align: middle; -} \ No newline at end of file diff --git a/dmp-admin/src/app/managers/dmp-profile-editor/dmp-profile-editor.component.html b/dmp-admin/src/app/managers/dmp-profile-editor/dmp-profile-editor.component.html deleted file mode 100644 index 2331ac389..000000000 --- a/dmp-admin/src/app/managers/dmp-profile-editor/dmp-profile-editor.component.html +++ /dev/null @@ -1,100 +0,0 @@ - -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
IDLabelDefinition
No elements
{{dmpProfile.id}}{{dmpProfile?.label}}{{dmpProfile?.definition}}
- -
-
- - -
- -
-
- -
-
-
- -
-
- -
-
- -
-
- -
-
- -
- -
- -
- - - - - - Manage DMP Profiles - - - - Create DMP Profile - - - Edit this DMP Profile - - - Delete this - - - - Show full tree connections - - - \ No newline at end of file diff --git a/dmp-admin/src/app/managers/dmp-profile-editor/dmp-profile-editor.component.spec.ts b/dmp-admin/src/app/managers/dmp-profile-editor/dmp-profile-editor.component.spec.ts deleted file mode 100644 index 778679e3d..000000000 --- a/dmp-admin/src/app/managers/dmp-profile-editor/dmp-profile-editor.component.spec.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; - -import { DmpProfileEditorComponent } from './dmp-profile-editor.component'; - -describe('DmpProfileEditorComponent', () => { - let component: DmpProfileEditorComponent; - let fixture: ComponentFixture; - - beforeEach(async(() => { - TestBed.configureTestingModule({ - declarations: [ DmpProfileEditorComponent ] - }) - .compileComponents(); - })); - - beforeEach(() => { - fixture = TestBed.createComponent(DmpProfileEditorComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should be created', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/dmp-admin/src/app/managers/dmp-profile-editor/dmp-profile-editor.component.ts b/dmp-admin/src/app/managers/dmp-profile-editor/dmp-profile-editor.component.ts deleted file mode 100644 index a91ad665a..000000000 --- a/dmp-admin/src/app/managers/dmp-profile-editor/dmp-profile-editor.component.ts +++ /dev/null @@ -1,132 +0,0 @@ -import { Component, OnInit, ViewChild } from '@angular/core'; -import { DmpProfileService } from '../../services/dmpprofile-service'; -import { ReactiveFormsModule } from '@angular/forms'; -import { FormBuilder, FormGroup, Validators } from '@angular/forms'; - -import '../../../assets/custom.js'; -declare function simple_notifier(type: string, title: string, message:string): any; - - -@Component({ - selector: 'app-dmp-profile-editor', - templateUrl: './dmp-profile-editor.component.html', - styleUrls: ['./dmp-profile-editor.component.css'] -}) -export class DmpProfileEditorComponent implements OnInit { - - constructor(private dmpProfileService : DmpProfileService, private fb: FormBuilder) { - - } - - //whole dmp data model - tableData : any[] = new Array(); - - //editor's data model - editingDmpProfile: any = {}; - dmpProfileEditorForm : any; - - //required by the table - public filterQuery = ""; - public rowsOnPage = 10; - //public sortBy = "email"; - public sortOrder = "asc"; - - //visibility rules for containers - tableVisible: boolean = true; - editorVisible: boolean = false; - - - // for tableIds - showIDs : boolean = false; - - - - - ngOnInit() { - this.getAllDmpProfiles(false); - this.createDmpProfileEditorForm(); - } - - createDmpProfileEditorForm(){ - this.dmpProfileEditorForm = this.fb.group({ - id: null, - label: ['', Validators.required ], - definition: '' - }); - - } - - switchToTable(){ - this.tableVisible = true; - this.editorVisible = false; - } - - switchToEditor(dmpProfileID){ - - this.tableVisible = false; - this.editorVisible = true; - if(dmpProfileID == null){ - this.editingDmpProfile = {id: null, label: "", definition: "" }; - } - else{ - this.editingDmpProfile = this.tableData.filter((dmpProfile) => dmpProfile.id === dmpProfileID)[0]; - } - - } - - - getAllDmpProfiles(showNotification : boolean){ - this.dmpProfileService.getAllDmpProfiles().subscribe( (data) => { - this.tableData = data; - if(showNotification) - simple_notifier("info",null,"Refreshed the table"); - }); - } - - - editDmpProfile(dmpProfile){ - this.switchToEditor(dmpProfile); - } - - newDmpProfile(){ - this.switchToEditor(null); - } - - - - save(mouseEvent){ - this.dmpProfileService.create(this.dmpProfileEditorForm.value).subscribe( - response => { - simple_notifier("success",null,"Saved DMP Profile"); - this.getAllDmpProfiles(false); - this.switchToTable(); - }, - err => { - simple_notifier("danger",null,"Could not save DMP Profile"); - } - ); - } - - delete(dmpProfile){ - this.dmpProfileService.delete(dmpProfile).subscribe( - (response) => { - simple_notifier("success",null,"Deleted DMP Profile"); - this.getAllDmpProfiles(false); - this.switchToTable(); - }, - (err) => { - simple_notifier("danger",null,"Could not delete DMP Profile"); - } - ) - } - - - - refreshTable($event){ - this.getAllDmpProfiles(true); - } - - - -} - diff --git a/dmp-admin/src/app/material/date/LocalizedDateAdapter.ts b/dmp-admin/src/app/material/date/LocalizedDateAdapter.ts deleted file mode 100644 index f1f94f65d..000000000 --- a/dmp-admin/src/app/material/date/LocalizedDateAdapter.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { NativeDateAdapter } from '@angular/material'; - - -export class LocalizedDateAdapter extends NativeDateAdapter { - - parse(value: any): Date | null { - const invalidDate = new Date(NaN); - if (typeof value === 'string') { - if (value === '') { return null; } else { - const splitted = value.split('/'); - if (splitted.length !== 3) { return invalidDate; } else { - const day = Number(splitted[0]); - const month = Number(splitted[1]) - 1; - const year = Number(splitted[2]); - - if (day < 1 || day > 31 || month < 0 || month > 11 || year < 1 || year > 9999) { return invalidDate; } - - return new Date(year, month, day); - } - } - } else { - const dateValue = typeof value === 'number' ? value : Date.parse(value); - return isNaN(dateValue) ? invalidDate : new Date(dateValue); - } - } - -} diff --git a/dmp-admin/src/app/material/material.module.ts b/dmp-admin/src/app/material/material.module.ts deleted file mode 100644 index 71b15cfc3..000000000 --- a/dmp-admin/src/app/material/material.module.ts +++ /dev/null @@ -1,100 +0,0 @@ -import { NgModule } from '@angular/core'; -import { - MatToolbarModule, - MatIconModule, - MatSidenavModule, - MatButtonModule, - MatTableModule, - MatPaginatorModule, - MatSortModule, - MatDialogModule, - MatDatepickerModule, - MatNativeDateModule, - MatInputModule, - MatFormFieldModule, - MatSnackBarModule, - MatAutocompleteModule, - MatExpansionModule, - MatSelectModule, - MatOptionModule, - MatCardModule, - MatProgressBarModule, - MatProgressSpinnerModule, - DateAdapter, - MatTooltipModule, - MatTabsModule, - MatChipsModule -} from '@angular/material'; -import { CdkTableModule } from '@angular/cdk/table'; -import { LocalizedDateAdapter } from './date/LocalizedDateAdapter'; -import { SnackBarNotificationComponent } from 'app/shared/notification/snack-bar-notification.component'; - -@NgModule({ - imports: [ - MatToolbarModule, - MatIconModule, - MatSidenavModule, - MatButtonModule, - MatTableModule, - MatPaginatorModule, - CdkTableModule, - MatSortModule, - MatDialogModule, - MatDatepickerModule, - MatNativeDateModule, - MatInputModule, - MatFormFieldModule, - MatSnackBarModule, - MatAutocompleteModule, - MatExpansionModule, - MatSelectModule, - MatOptionModule, - MatCardModule, - MatProgressBarModule, - MatProgressSpinnerModule, - MatTooltipModule, - MatTabsModule, - MatChipsModule - ], - - exports: [ - MatToolbarModule, - MatIconModule, - MatSidenavModule, - MatButtonModule, - MatTableModule, - MatPaginatorModule, - CdkTableModule, - MatSortModule, - MatDialogModule, - MatDatepickerModule, - MatNativeDateModule, - MatInputModule, - MatFormFieldModule, - MatSnackBarModule, - MatAutocompleteModule, - MatExpansionModule, - MatSelectModule, - MatOptionModule, - MatCardModule, - MatProgressBarModule, - MatProgressSpinnerModule, - MatTooltipModule, - MatTabsModule, - MatChipsModule - ], - - providers: [ - { provide: DateAdapter, useClass: LocalizedDateAdapter }, - ], - - entryComponents: [ - SnackBarNotificationComponent - ] -}) - -export class MaterialModule { - constructor(dateAdapter: DateAdapter) { - dateAdapter.setLocale('el-GR'); - } -} diff --git a/dmp-admin/src/app/models/BaseModel.ts b/dmp-admin/src/app/models/BaseModel.ts deleted file mode 100644 index c4cfd9e90..000000000 --- a/dmp-admin/src/app/models/BaseModel.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { FormBuilder } from '@angular/forms'; -export abstract class BaseModel{ - public formBuilder:FormBuilder = new FormBuilder(); -} \ No newline at end of file diff --git a/dmp-admin/src/app/models/Commons/ListingItem.ts b/dmp-admin/src/app/models/Commons/ListingItem.ts deleted file mode 100644 index 0d1383b07..000000000 --- a/dmp-admin/src/app/models/Commons/ListingItem.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { FormGenerator } from '../interfaces/FormGenerator'; -import { Serializable } from '../interfaces/Serializable'; -import { FormGroup, FormBuilder } from '@angular/forms' -export class ListingItem implements Serializable, FormGenerator{ - public label: string; - public value: string; - - fromJSONObject(item: any): ListingItem { - this.label = item.label; - this.value = item.value; - return this; - } - - buildForm(): FormGroup { - return new FormBuilder().group({ - label: [this.label], - value: [this.value] - }) - } -} \ No newline at end of file diff --git a/dmp-admin/src/app/models/DataField/AutocompleteData.ts b/dmp-admin/src/app/models/DataField/AutocompleteData.ts deleted file mode 100644 index 11873a833..000000000 --- a/dmp-admin/src/app/models/DataField/AutocompleteData.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { DataField } from './DataField'; -import { FormGroup } from '@angular/forms' - -export class AutocompleteData extends DataField{ - - public type:string; - public url:string; - - buildForm():FormGroup{ - return this.formBuilder.group({ - label:[this.label], - type:[this.type], - url:[this.url] - }) - } - - fromJSONObject(item:any):AutocompleteData{ - this.type = item.type; - this.url = item.url; - this.label = item.label; - return this; - } -} \ No newline at end of file diff --git a/dmp-admin/src/app/models/DataField/BooleanDecisionData.ts b/dmp-admin/src/app/models/DataField/BooleanDecisionData.ts deleted file mode 100644 index f8d8c9dd6..000000000 --- a/dmp-admin/src/app/models/DataField/BooleanDecisionData.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { DataField } from './DataField'; -import { FormGroup } from '@angular/forms'; -export class BooleanDecisionData extends DataField{ - - buildForm():FormGroup{ - let formGroup = this.formBuilder.group({ - label:this.label - }); - return formGroup; - } - - fromJSONObject(item:any):BooleanDecisionData{ - this.label = item.label - return this; - } -} \ No newline at end of file diff --git a/dmp-admin/src/app/models/DataField/CheckBoxData.ts b/dmp-admin/src/app/models/DataField/CheckBoxData.ts deleted file mode 100644 index ab3713697..000000000 --- a/dmp-admin/src/app/models/DataField/CheckBoxData.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { DataField } from './DataField'; -import { FormGroup } from '@angular/forms'; -export class CheckBoxData extends DataField{ - - buildForm():FormGroup{ - let formGroup = this.formBuilder.group({ - label:this.label - }); - return formGroup; - } - - fromJSONObject(item:any):CheckBoxData{ - this.label = item.label - return this; - } -} \ No newline at end of file diff --git a/dmp-admin/src/app/models/DataField/DataField.ts b/dmp-admin/src/app/models/DataField/DataField.ts deleted file mode 100644 index e520408df..000000000 --- a/dmp-admin/src/app/models/DataField/DataField.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { BaseModel } from '../BaseModel'; -import { FormGenerator } from '../interfaces/FormGenerator'; -import { Serializable } from '../interfaces/Serializable'; -import { FormGroup } from '@angular/forms' -export abstract class DataField extends BaseModel implements Serializable,FormGenerator{ - public label:string; - - buildForm():FormGroup{ - throw new Error("Build Form Is not not correctly overriden"); - } - - fromJSONObject(item:any):T{ - throw new Error("From Json Object is not correctly overriden") - } - -} \ No newline at end of file diff --git a/dmp-admin/src/app/models/DataField/FreeTextData.ts b/dmp-admin/src/app/models/DataField/FreeTextData.ts deleted file mode 100644 index f32703ec0..000000000 --- a/dmp-admin/src/app/models/DataField/FreeTextData.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { DataField } from './DataField'; -import { FormGroup } from '@angular/forms'; -export class FreeTextData extends DataField{ - - buildForm():FormGroup{ - let formGroup = this.formBuilder.group({ - label:this.label - }); - return formGroup; - } - - fromJSONObject(item:any):FreeTextData{ - this.label = item.label - return this; - } -} \ No newline at end of file diff --git a/dmp-admin/src/app/models/DataField/RadioBoxData.ts b/dmp-admin/src/app/models/DataField/RadioBoxData.ts deleted file mode 100644 index 186a65429..000000000 --- a/dmp-admin/src/app/models/DataField/RadioBoxData.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { JsonSerializer } from '../../utilities/JsonSerializer'; -import { DataField } from './DataField'; -import { ListingItem } from '../Commons/ListingItem'; -import { FormGroup } from '@angular/forms' - -export class RadioBoxData extends DataField{ - public options:Array; - - buildForm():FormGroup{ - let formGroup = this.formBuilder.group({ - label:[this.label] - }); - let optionsFormArray = new Array(); - if (this.options) { - this.options.forEach(item => { - let form: FormGroup = item.buildForm(); - optionsFormArray.push(form) - }) - } - formGroup.addControl('options', this.formBuilder.array(optionsFormArray)); - return formGroup; - } - - fromJSONObject(item:any):RadioBoxData{ - this.options = JsonSerializer.fromJSONArray(item.options,ListingItem); - this.label = item.label - return this; - } -} \ No newline at end of file diff --git a/dmp-admin/src/app/models/DataField/TextArea.ts b/dmp-admin/src/app/models/DataField/TextArea.ts deleted file mode 100644 index f5e24dbcc..000000000 --- a/dmp-admin/src/app/models/DataField/TextArea.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { DataField } from './DataField'; -import { FormGroup } from '@angular/forms'; -export class TextArea extends DataField - {{errorModel.description}} - {{'GENERAL.VALIDATION.REQUIRED' | translate}} - + + + {{errorModel.description}} + {{'GENERAL.VALIDATION.REQUIRED' | translate}} + - - - - - \ No newline at end of file + + + diff --git a/dmp-frontend/src/app/datasets/editor/dataset-editor.component.ts b/dmp-frontend/src/app/datasets/editor/dataset-editor.component.ts index 4e369f0fa..fbbfa07d5 100644 --- a/dmp-frontend/src/app/datasets/editor/dataset-editor.component.ts +++ b/dmp-frontend/src/app/datasets/editor/dataset-editor.component.ts @@ -19,7 +19,6 @@ import { ExternalSourcesItemModel } from "../../models/external-sources/External selector: 'app-dataset-editor-component', templateUrl: 'dataset-editor.component.html', styleUrls: ['./dataset-editor.component.scss'], - providers: [DatasetService, ExternalSourcesService], encapsulation: ViewEncapsulation.None }) export class DatasetEditorComponent implements AfterViewInit { @@ -31,11 +30,11 @@ export class DatasetEditorComponent implements AfterViewInit { // filtereddataRepositoriesAsync: boolean = false; // filteredRegistriesAsync: boolean = false; // filteredServicesAsync: boolean = false; - + // filtereddataRepositories: ExternalSourcesItemModel[]; // filteredRegistries: ExternalSourcesItemModel[]; // filteredServices: ExternalSourcesItemModel[]; - + constructor( private datasetService: DatasetService, private externalSourcesService: ExternalSourcesService, @@ -67,17 +66,17 @@ export class DatasetEditorComponent implements AfterViewInit { }); */ } - + public cancel(): void { this.router.navigate(['/datasets']); } // filterdataRepositories(value: string): void { - + // this.filtereddataRepositories = undefined; // if (value) { // this.filtereddataRepositoriesAsync = true; - + // this.externalSourcesService.searchDMPOrganizations(value).subscribe(items => { // this.filtereddataRepositories = items; // this.filtereddataRepositoriesAsync = false; @@ -91,11 +90,11 @@ export class DatasetEditorComponent implements AfterViewInit { // } // filterRegistries(value: string): void { - + // this.filteredRegistries = undefined; // if (value) { // this.filteredRegistriesAsync = true; - + // this.externalSourcesService.searchDMPResearchers(value).subscribe(items => { // this.filteredRegistries = items; // this.filteredRegistriesAsync = false; @@ -109,11 +108,11 @@ export class DatasetEditorComponent implements AfterViewInit { // } // filterServices(value: string): void { - + // this.filteredServices = undefined; // if (value) { // this.filteredServicesAsync = true; - + // this.externalSourcesService.searchDatasetService(value).subscribe(items => { // this.filteredServices = items; // this.filteredServicesAsync = false; @@ -125,4 +124,4 @@ export class DatasetEditorComponent implements AfterViewInit { // }); // } // } -} \ No newline at end of file +} diff --git a/dmp-frontend/src/app/datasets/listing/dataset-listing.component.html b/dmp-frontend/src/app/datasets/listing/dataset-listing.component.html index e438c4a05..c7c67040c 100644 --- a/dmp-frontend/src/app/datasets/listing/dataset-listing.component.html +++ b/dmp-frontend/src/app/datasets/listing/dataset-listing.component.html @@ -1,94 +1,96 @@
-

{{'DATASET-LISTING.TITLE' | translate}} {{titlePrefix}}

+

{{'DATASET-LISTING.TITLE' | translate}} {{titlePrefix}}

- - - - - - + + + + + + - - - {{'DATASET-LISTING.COLUMNS.NAME' | translate}} - {{row.label}} - + + + {{'DATASET-LISTING.COLUMNS.NAME' | translate}} + {{row.label}} + - - - {{'DATASET-LISTING.COLUMNS.DMP' | translate}} - {{row.dmp}} - + + + {{'DATASET-LISTING.COLUMNS.DMP' | translate}} + {{row.dmp}} + - - - {{'DATASET-LISTING.COLUMNS.PROFILE' | translate}} - {{row.profile}} - + + + {{'DATASET-LISTING.COLUMNS.PROFILE' | translate}} + {{row.profile}} + - - - {{'DATASET-LISTING.COLUMNS.DATAREPOSITORIES' | translate}} - {{row.dataRepositories}} - + + + {{'DATASET-LISTING.COLUMNS.DATAREPOSITORIES' | translate}} + {{row.dataRepositories}} + - - - {{'DATASET-LISTING.COLUMNS.REGISTRIES' | translate}} - {{row.registries}} - + + + {{'DATASET-LISTING.COLUMNS.REGISTRIES' | translate}} + {{row.registries}} + - - - {{'DATASET-LISTING.COLUMNS.SERVICES' | translate}} - {{row.services}} - + + + {{'DATASET-LISTING.COLUMNS.SERVICES' | translate}} + {{row.services}} + - - + - - - {{'DATASET-LISTING.COLUMNS.DESCRIPTION' | translate}} - {{row.description}} - + + + {{'DATASET-LISTING.COLUMNS.DESCRIPTION' | translate}} + {{row.description}} + - - - {{'DATASET-LISTING.COLUMNS.CREATED' | translate}} - {{row.created | date:'shortDate'}} - + + + {{'DATASET-LISTING.COLUMNS.CREATED' | translate}} + {{row.created | date:'shortDate'}} + - - - {{'DATASET-LISTING.COLUMNS.ACTIONS' | translate}} - - - - - - - - - + + + {{'DATASET-LISTING.COLUMNS.ACTIONS' | translate}} + + + + - - - + + + + - - - - + + + - -
\ No newline at end of file + + + + + + + diff --git a/dmp-frontend/src/app/datasets/listing/dataset-listing.component.ts b/dmp-frontend/src/app/datasets/listing/dataset-listing.component.ts index 71b715f1b..e8b119a3a 100644 --- a/dmp-frontend/src/app/datasets/listing/dataset-listing.component.ts +++ b/dmp-frontend/src/app/datasets/listing/dataset-listing.component.ts @@ -11,29 +11,31 @@ import { DataSource } from "@angular/cdk/table"; import { Observable } from "rxjs/Observable"; import { PageEvent } from '@angular/material'; -import { DataManagementPlanService } from "@app/services/data-management-plan/data-management-plan.service"; -import { DataManagementPlanModel } from "@app/models/data-managemnt-plans/DataManagementPlanModel"; -import { DatasetCriteriaComponent } from '@app/shared/components/criteria/datasets/datasets-criteria.component'; +import { DataManagementPlanService } from "../../services/data-management-plan/data-management-plan.service"; +import { DataManagementPlanModel } from "../../models/data-managemnt-plans/DataManagementPlanModel"; +import { DatasetCriteriaComponent } from '../../shared/components/criteria/datasets/datasets-criteria.component'; +import { BreadcrumbItem } from '../../shared/components/breadcrumb/definition/breadcrumb-item'; +import { IBreadCrumbComponent } from '../../shared/components/breadcrumb/definition/IBreadCrumbComponent'; @Component({ selector: 'app-dataset-listing-component', templateUrl: 'dataset-listing.component.html', styleUrls: ['./dataset-listing.component.scss'], - providers: [DatasetService, DataManagementPlanService] }) -export class DatasetListingComponent implements OnInit { +export class DatasetListingComponent implements OnInit, IBreadCrumbComponent { @ViewChild(MatPaginator) _paginator: MatPaginator; @ViewChild(MatSort) sort: MatSort; @ViewChild(DatasetCriteriaComponent) criteria: DatasetCriteriaComponent; + breadCrumbs: Observable; dataSource: DatasetDataSource | null; displayedColumns: String[] = ['label', 'dmp', 'profile', 'dataRepositories', 'registries', 'services', 'description', 'created', 'actions']; pageEvent: PageEvent; titlePrefix: String; - dmpId: String; + dmpId: string; statuses = [ { value: '0', viewValue: 'Active' }, @@ -53,14 +55,20 @@ export class DatasetListingComponent implements OnInit { ngOnInit() { - this.route.params.subscribe((params: Params) => { + + this.route.params.subscribe(async (params: Params) => { this.dmpId = params['dmpId']; this.criteria.setCriteria(this.getDefaultCriteria(this.dmpId)); this.refresh(); this.criteria.setRefreshCallback(() => this.refresh()); - if (this.dmpId != null) - if(params['dmpLabel']!=undefined) - this.titlePrefix ="for " + params['dmpLabel']; + if (this.dmpId != null) { + let dmp = await this.dataManagementPlanService.getSingle(this.dmpId).toPromise() + this.breadCrumbs = Observable.of([{ parentComponentName: "DataManagementPlanEditorComponent", label: dmp.label, url: "dmps/edit/" + this.dmpId }, { parentComponentName: null, label: 'Datasets', url: "dmps" }]) + if (params['dmpLabel'] != undefined) + this.titlePrefix = "for " + params['dmpLabel']; + } else { + this.breadCrumbs = Observable.of([{ parentComponentName: null, label: 'Datasets', url: "datasets" }]) + } }); } @@ -80,7 +88,7 @@ export class DatasetListingComponent implements OnInit { return defaultCriteria; } - makeItPublic(id: String) { + makeItPublic(id: String) { this.datasetService.makeDatasetPublic(id).subscribe(); } @@ -149,4 +157,4 @@ export class DatasetDataSource extends DataSource { disconnect() { // No-op } -} \ No newline at end of file +} diff --git a/dmp-frontend/src/app/dmp-profiles/dmp-profile-editor/dmp-profile-editor.component.html b/dmp-frontend/src/app/dmp-profiles/dmp-profile-editor/dmp-profile-editor.component.html new file mode 100644 index 000000000..9481f8aec --- /dev/null +++ b/dmp-frontend/src/app/dmp-profiles/dmp-profile-editor/dmp-profile-editor.component.html @@ -0,0 +1,63 @@ + + +
+
+ + + {{'DMP-PROFILE-EDITOR.TITLE.NEW' | translate}} + {{formGroup.get('label').value}} + + + + + + + {{baseErrorModel.label}} + {{'GENERAL.VALIDATION.REQUIRED' | translate}} + + +
+ + +
+ + + {{baseErrorModel.label}} + {{'GENERAL.VALIDATION.REQUIRED' | translate}} + + + + {{ getDMPProfileFieldTypeWithLanguage(fieldType) | translate}} + + {{baseErrorModel.type}} + {{'GENERAL.VALIDATION.REQUIRED' | translate}} + + + + {{ getDMPProfileFieldDataTypeWithLanguage(fieldDataType) | translate}} + + {{baseErrorModel.dataType}} + {{'GENERAL.VALIDATION.REQUIRED' | translate}} + + + {{'DMP-PROFILE-EDITOR.FIELDS.REQUIRED' | translate}} + +
+
+ +
+
+
+ + + +
+ +
+
+
+
\ No newline at end of file diff --git a/dmp-frontend/src/app/dmp-profiles/dmp-profile-editor/dmp-profile-editor.component.scss b/dmp-frontend/src/app/dmp-profiles/dmp-profile-editor/dmp-profile-editor.component.scss new file mode 100644 index 000000000..c1f0f8860 --- /dev/null +++ b/dmp-frontend/src/app/dmp-profiles/dmp-profile-editor/dmp-profile-editor.component.scss @@ -0,0 +1,39 @@ +.full-width { + width: 100%; +} + +.input-table { + table-layout: fixed; +} + +.table-card .mat-grid-tile { + background: rgba(0, 0, 0, 0.32); +} + +.dmp-profile-editor { + + .mat-form-field-full-width{ + mat-form-field { + width: 100%; + padding: 3px; + } + } + + + .mat-card { + margin: 16px 0; + } + + p { + margin: 16px; + } + + .left-button { + float: left; + } + + .description-area { + height: 100px; + } + +} diff --git a/dmp-frontend/src/app/dmp-profiles/dmp-profile-editor/dmp-profile-editor.component.ts b/dmp-frontend/src/app/dmp-profiles/dmp-profile-editor/dmp-profile-editor.component.ts new file mode 100644 index 000000000..8e3072942 --- /dev/null +++ b/dmp-frontend/src/app/dmp-profiles/dmp-profile-editor/dmp-profile-editor.component.ts @@ -0,0 +1,177 @@ +import { Component, ViewChild, OnInit, AfterViewInit, ViewEncapsulation } from "@angular/core"; +import { MatPaginator, MatSort, MatSnackBar } from "@angular/material"; +import { Router, ActivatedRoute, Params } from "@angular/router"; +import { TranslateService } from "@ngx-translate/core"; +import { DataSource } from "@angular/cdk/table"; +import { Observable } from "rxjs/Observable"; +import { DataManagementPlanService } from "../../services/data-management-plan/data-management-plan.service"; +import { ProjectModel } from "../../models/projects/ProjectModel"; +import { JsonSerializer } from "../../utilities/JsonSerializer"; +import { FormGroup, AbstractControl, FormControl, FormArray } from "@angular/forms"; +import { SnackBarNotificationComponent } from "../../shared/components/notificaiton/snack-bar-notification.component"; +import { BaseErrorModel } from "../../models/error/BaseErrorModel"; +import { TdDialogService } from "@covalent/core"; +import { HostConfiguration } from "../../app.constants"; +import { DataManagementPlanProfileService } from "../../services/data-management-plan-profile/datamanagement-profile.service"; +import { DataManagementPlanProfileModel } from "../../models/data-management-plan-profile/DataManagementPlanProfileModel"; +import { DMPProfileFieldDataType, DMPProfileType, DataManagementProfileField } from "../../models/data-management-plan-profile/DataManagementProfileField"; +import { Utilities } from "../../utilities/utilities"; +import { DataManagementPlanProfileListingModel } from "../../models/data-management-plan-profile/DataManagementPlanProfileListingModel"; + + + +@Component({ + selector: 'app-dmp-profile-editor-component', + templateUrl: 'dmp-profile-editor.component.html', + styleUrls: ['./dmp-profile-editor.component.scss'], + providers: [DataManagementPlanProfileService], + encapsulation: ViewEncapsulation.None +}) +export class DataManagementPlanProfileEditorComponent implements AfterViewInit { + + isNew = true; + dataManagementPlanProfileModel: DataManagementPlanProfileModel; + formGroup: FormGroup = null; + host = HostConfiguration.Server; + baseErrorModel: BaseErrorModel; + constructor( + private dmpProfileService: DataManagementPlanProfileService, + private route: ActivatedRoute, + public snackBar: MatSnackBar, + public router: Router, + public language: TranslateService, + private dialogService: TdDialogService + ) { + } + + ngAfterViewInit() { + this.route.params.subscribe((params: Params) => { + const itemId = params['id']; + + if (itemId != null) { + this.isNew = false; + this.dmpProfileService.getSingle(itemId).map(data => data as DataManagementPlanProfileModel) + .subscribe(data => { + this.dataManagementPlanProfileModel = JsonSerializer.fromJSONObject(data, DataManagementPlanProfileModel); + this.baseErrorModel = this.dataManagementPlanProfileModel.errorModel; + this.formGroup = this.dataManagementPlanProfileModel.buildForm(); + }); + } else { + this.dataManagementPlanProfileModel = new DataManagementPlanProfileModel(); + this.baseErrorModel = this.dataManagementPlanProfileModel.errorModel; + + setTimeout(() => { + this.formGroup = this.dataManagementPlanProfileModel.buildForm(); + }); + } + }); + } + + formSubmit(): void { + this.touchAllFormFields(this.formGroup); + if (!this.isFormValid()) { return; } + this.onSubmit(); + } + + public isFormValid() { + return this.formGroup.valid; + } + + onSubmit(): void { + this.dmpProfileService.createDataManagementPlan(this.formGroup.value).subscribe( + complete => this.onCallbackSuccess(), + error => this.onCallbackError(error) + ); + } + + onCallbackSuccess(): void { + this.snackBar.openFromComponent(SnackBarNotificationComponent, { + data: { message: this.isNew ? 'GENERAL.SNACK-BAR.SUCCESSFUL-CREATION' : 'GENERAL.SNACK-BAR.SUCCESSFUL-UPDATE', language: this.language }, + duration: 3000, + extraClasses: ['snackbar-success'] + }) + this.router.navigate(['/dmp-profiles']); + } + + onCallbackError(errorResponse: any) { + this.setErrorModel(errorResponse.error); + this.validateAllFormFields(this.formGroup); + } + + public setErrorModel(errorModel: BaseErrorModel) { + Object.keys(errorModel).forEach(item => { + (this.dataManagementPlanProfileModel.errorModel)[item] = (errorModel)[item]; + }) + } + + public cancel(): void { + this.router.navigate(['/dmp-profiles']); + } + + + public touchAllFormFields(formControl: AbstractControl) { + if (formControl instanceof FormControl) { + formControl.markAsTouched(); + } else if (formControl instanceof FormGroup) { + Object.keys(formControl.controls).forEach(item => { + const control = formControl.get(item); + this.touchAllFormFields(control); + }) + } + else if (formControl instanceof FormArray) { + formControl.controls.forEach(item => { + this.touchAllFormFields(item); + }) + } + } + + public validateAllFormFields(formControl: AbstractControl) { + if (formControl instanceof FormControl) { + formControl.updateValueAndValidity({ emitEvent: false }) + } else if (formControl instanceof FormGroup) { + Object.keys(formControl.controls).forEach(item => { + const control = formControl.get(item); + this.validateAllFormFields(control); + }) + } + else if (formControl instanceof FormArray) { + formControl.controls.forEach(item => { + this.validateAllFormFields(item); + }) + } + } + + addField() { + (this.formGroup.get("definition").get("fields")).push(new DataManagementProfileField().buildForm()) + } + + getDMPProfileFieldDataTypeValues(): Number[] { + let keys: string[] = Object.keys(DMPProfileFieldDataType); + keys = keys.slice(0, keys.length / 2); + const values: Number[] = keys.map(Number); + return values; + } + + getDMPProfileFieldDataTypeWithLanguage(role: DMPProfileFieldDataType): string { + let result = ''; + this.language.get(new Utilities().convertFromDMPProfileDataType(role)).subscribe((value: string) => { + result = value; + }); + return result; + } + + getDMPProfileFieldTypeValues(): Number[] { + let keys: string[] = Object.keys(DMPProfileType); + keys = keys.slice(0, keys.length / 2); + const values: Number[] = keys.map(Number); + return values; + } + + getDMPProfileFieldTypeWithLanguage(role: DMPProfileType): string { + let result = ''; + this.language.get(new Utilities().convertFromDMPProfileType(role)).subscribe((value: string) => { + result = value; + }); + return result; + } +} diff --git a/dmp-frontend/src/app/dmp-profiles/dmp-profile-listing/dmp-profile-listing.component.html b/dmp-frontend/src/app/dmp-profiles/dmp-profile-listing/dmp-profile-listing.component.html new file mode 100644 index 000000000..26e5bcf09 --- /dev/null +++ b/dmp-frontend/src/app/dmp-profiles/dmp-profile-listing/dmp-profile-listing.component.html @@ -0,0 +1,44 @@ +
+

{{titlePrefix}} {{'DATASET-LISTING.TITLE' | translate}}

+ + + + + + + + + + + + {{'DATASET-LISTING.COLUMNS.NAME' | translate}} + {{row.label}} + + + + + {{'DATASET-LISTING.COLUMNS.STATUS' | translate}} + {{row.status}} + + + + + {{'DATASET-LISTING.COLUMNS.CREATED' | translate}} + {{row.created | date:'shortDate'}} + + + + + + + + + + + + + + +
\ No newline at end of file diff --git a/dmp-frontend/src/app/dmp-profiles/dmp-profile-listing/dmp-profile-listing.component.scss b/dmp-frontend/src/app/dmp-profiles/dmp-profile-listing/dmp-profile-listing.component.scss new file mode 100644 index 000000000..2688cb118 --- /dev/null +++ b/dmp-frontend/src/app/dmp-profiles/dmp-profile-listing/dmp-profile-listing.component.scss @@ -0,0 +1,35 @@ +.mat-table { + margin: 24px; +} + +.mat-fab-bottom-right { + top: auto !important; + right: 20px !important; + bottom: 10px !important; + left: auto !important; + position: fixed !important; +} + +.full-width { + width: 100%; +} + +.mat-card { + margin: 16px 0; +} + +.mat-row { + cursor: pointer; +} + +mat-row:hover { + background-color: lightgray; +} + +// mat-row:nth-child(even){ +// background-color:red; +// } + +mat-row:nth-child(odd){ + background-color:#eef0fb; + } \ No newline at end of file diff --git a/dmp-frontend/src/app/dmp-profiles/dmp-profile-listing/dmp-profile-listing.component.ts b/dmp-frontend/src/app/dmp-profiles/dmp-profile-listing/dmp-profile-listing.component.ts new file mode 100644 index 000000000..b62e3d766 --- /dev/null +++ b/dmp-frontend/src/app/dmp-profiles/dmp-profile-listing/dmp-profile-listing.component.ts @@ -0,0 +1,139 @@ +import { Component, ViewChild, OnInit } from "@angular/core"; +import { MatPaginator, MatSort, PageEvent, MatSnackBar } from "@angular/material"; +import { DataManagementPlanProfileCriteriaComponent } from "../../shared/components/criteria/datamanagementplanprofile/dmp-profile-criteria.component"; +import { ActivatedRoute, Router, Params } from "@angular/router"; +import { TranslateService } from "@ngx-translate/core"; +import { DataSource } from "@angular/cdk/table"; +import { DataManagementPlanProfileCriteria } from "../../models/criteria/dmp-profile/DataManagementPlanProfileCriteria"; +import { Observable } from "rxjs"; +import { DataTableRequest } from "../../models/data-table/DataTableRequest"; +import { DataManagementPlanProfileListingModel } from "../../models/data-management-plan-profile/DataManagementPlanProfileListingModel"; +import { DataManagementPlanProfileService } from "../../services/data-management-plan-profile/datamanagement-profile.service"; + +@Component({ + selector: 'app-dmp-profile-listing-component', + templateUrl: 'dmp-profile-listing.component.html', + styleUrls: ['./dmp-profile-listing.component.scss'], + providers: [DataManagementPlanProfileService] +}) +export class DataManagementPlanProfileListingComponent implements OnInit { + + @ViewChild(MatPaginator) _paginator: MatPaginator; + @ViewChild(MatSort) sort: MatSort; + @ViewChild(DataManagementPlanProfileCriteriaComponent) criteria: DataManagementPlanProfileCriteriaComponent; + + + dataSource: DatasetDataSource | null; + displayedColumns: String[] = ['label', 'status', 'created']; + pageEvent: PageEvent; + titlePrefix: String; + dmpId: String; + + statuses = [ + { value: '0', viewValue: 'Active' }, + { value: '1', viewValue: 'Inactive' } + ]; + + constructor( + private router: Router, + private languageService: TranslateService, + public snackBar: MatSnackBar, + public route: ActivatedRoute, + public dataManagementPlanService: DataManagementPlanProfileService + ) { + + } + + + ngOnInit() { + this.route.params.subscribe((params: Params) => { + this.dmpId = params['dmpId']; + this.criteria.setCriteria(this.getDefaultCriteria()); + this.refresh(); + this.criteria.setRefreshCallback(() => this.refresh()); + }); + } + + refresh() { + this.dataSource = new DatasetDataSource(this.dataManagementPlanService, this._paginator, this.sort, this.languageService, this.snackBar, this.criteria); + } + + rowClick(rowId: String) { + this.router.navigate(['dmp-profiles/' + rowId]); + } + + getDefaultCriteria(): DataManagementPlanProfileCriteria { + const defaultCriteria = new DataManagementPlanProfileCriteria(); + return defaultCriteria; + } + + // makeItPublic(id: String) { + // debugger; + // this.datasetService.makeDatasetPublic(id).subscribe(); + // } + +} + +export class DatasetDataSource extends DataSource { + + totalCount = 0; + isLoadingResults = false; + + constructor( + private _service: DataManagementPlanProfileService, + private _paginator: MatPaginator, + private _sort: MatSort, + private _languageService: TranslateService, + private _snackBar: MatSnackBar, + private _criteria: DataManagementPlanProfileCriteriaComponent + ) { + super(); + + } + + connect(): Observable { + const displayDataChanges = [ + this._paginator.page + //this._sort.matSortChange + ]; + + + return Observable.merge(...displayDataChanges) + .startWith(null) + .switchMap(() => { + setTimeout(() => { + this.isLoadingResults = true; + }); + const startIndex = this._paginator.pageIndex * this._paginator.pageSize; + let fields: Array = new Array() + if (this._sort.active) fields = this._sort.direction === "asc" ? ["+" + this._sort.active] : ["-" + this._sort.active]; + const request = new DataTableRequest(startIndex, this._paginator.pageSize, { fields: fields }); + request.criteria = this._criteria.criteria; + return this._service.getPaged(request); + }) + /*.catch((error: any) => { + this._snackBar.openFromComponent(SnackBarNotificationComponent, { + data: { message: 'GENERAL.SNACK-BAR.FORMS-BAD-REQUEST', language: this._languageService }, + duration: 3000, + extraClasses: ['snackbar-warning'] + }); + //this._criteria.criteria.onCallbackError(error); + return Observable.of(null); + })*/ + .map(result => { + setTimeout(() => { + this.isLoadingResults = false; + }); + return result; + }) + .map(result => { + if (!result) { return []; } + if (this._paginator.pageIndex === 0) { this.totalCount = result.totalCount; } + return result.data; + }); + } + + disconnect() { + // No-op + } +} \ No newline at end of file diff --git a/dmp-frontend/src/app/dmp-profiles/dmp-profile.module.ts b/dmp-frontend/src/app/dmp-profiles/dmp-profile.module.ts new file mode 100644 index 000000000..a0b96af77 --- /dev/null +++ b/dmp-frontend/src/app/dmp-profiles/dmp-profile.module.ts @@ -0,0 +1,57 @@ +import { RouterModule } from '@angular/router'; +import { TranslateHttpLoader } from '@ngx-translate/http-loader'; +import { DatasetService } from '../services/dataset/dataset.service'; +import { DynamicFormModule } from '../form/dynamic-form.module'; +import { TranslateLoader, TranslateModule, TranslateService } from '@ngx-translate/core'; +import { CommonModule } from '@angular/common'; +import { HttpClient, HttpClientModule } from '@angular/common/http'; +import { NgModule } from '@angular/core'; +import { FormsModule, ReactiveFormsModule } from '@angular/forms'; + +import { SharedModule } from '../shared/shared.module' +import { DataManagementPlanProfileRoutes } from './dmp-profile.routes'; +import { DataManagementPlanProfileEditorComponent } from './dmp-profile-editor/dmp-profile-editor.component'; +import { DataManagementPlanProfileListingComponent } from './dmp-profile-listing/dmp-profile-listing.component'; +@NgModule({ + imports: [ + CommonModule, + FormsModule, + HttpClientModule, + SharedModule, + RouterModule.forChild(DataManagementPlanProfileRoutes), + ReactiveFormsModule, + DynamicFormModule, + TranslateModule.forRoot({ + loader: { + provide: TranslateLoader, + useFactory: HttpLoaderFactory, + deps: [HttpClient] + } + }), + ], + + declarations: [ + DataManagementPlanProfileEditorComponent, + DataManagementPlanProfileListingComponent + ], + + exports: [ + DataManagementPlanProfileEditorComponent, + DataManagementPlanProfileListingComponent, + RouterModule + ], + providers: [ + DatasetService + ] +}) + +export class DataManagamentPlanProfileModule { + constructor(private translate: TranslateService) { + translate.setDefaultLang('en'); + translate.use('en'); + } +} + +export function HttpLoaderFactory(httpClient: HttpClient) { + return new TranslateHttpLoader(httpClient, 'assets/lang/', '.json'); +} \ No newline at end of file diff --git a/dmp-frontend/src/app/dmp-profiles/dmp-profile.routes.ts b/dmp-frontend/src/app/dmp-profiles/dmp-profile.routes.ts new file mode 100644 index 000000000..d218aa830 --- /dev/null +++ b/dmp-frontend/src/app/dmp-profiles/dmp-profile.routes.ts @@ -0,0 +1,10 @@ +import { RouterModule, Routes } from '@angular/router'; +import { DataManagementPlanProfileListingComponent } from './dmp-profile-listing/dmp-profile-listing.component'; +import { DataManagementPlanProfileEditorComponent } from './dmp-profile-editor/dmp-profile-editor.component'; +import { AuthGuard } from '../shared/guards/auth.guard'; + +export const DataManagementPlanProfileRoutes: Routes = [ + { path: '', component: DataManagementPlanProfileListingComponent, canActivate: [AuthGuard] }, + { path: 'new', component: DataManagementPlanProfileEditorComponent, canActivate: [AuthGuard] }, + { path: ':id', component: DataManagementPlanProfileEditorComponent, canActivate: [AuthGuard] }, +]; diff --git a/dmp-frontend/src/app/dmps/dmps.module.ts b/dmp-frontend/src/app/dmps/dmps.module.ts index 4da957635..7de69d921 100644 --- a/dmp-frontend/src/app/dmps/dmps.module.ts +++ b/dmp-frontend/src/app/dmps/dmps.module.ts @@ -1,11 +1,11 @@ -import { AddResearchersComponent } from '../add-researchers/add-researchers.component'; +import { AddResearchersComponent } from '../shared/components/add-researchers/add-researchers.component'; import { DatasetWizardListingComponent } from './wizard/listing/dataset-wizard-listing.component'; import { DataManagementPlanWizardEditorComponent } from './wizard/editor/dmp-wizard-editor.component'; import { DataManagementPlanWizardComponent } from './wizard/dmp-wizard.component'; import { TranslateHttpLoader } from '@ngx-translate/http-loader'; import { BaseHttpService } from '../utilities/cite-http-service-module/base-http.service'; -import { InvitationAcceptedComponent } from '../invitation-accepted/invitation-accepted.component'; -import { InvitationComponent } from '../invitation/invitation.component'; +import { InvitationAcceptedComponent } from '../shared/components/invitation-accepted/invitation-accepted.component'; +import { InvitationComponent } from '../shared/components/invitation/invitation.component'; import { TranslateLoader, TranslateModule, TranslateService } from '@ngx-translate/core'; import { DataManagementPlanEditorComponent } from './editor/dmp-editor.component'; import { DataManagementPlanListingComponent } from './listing/dmp-listing.component'; @@ -17,67 +17,92 @@ import { CovalentDialogsModule } from '@covalent/core'; import { SharedModule } from '../shared/shared.module' import { NgModule } from '@angular/core'; -import { AvailableProfilesComponent } from '@app/available-profiles/available-profiles.component'; +import { AvailableProfilesComponent } from '../shared/components/available-profiles/available-profiles.component'; +import { DynamicDmpFieldResolver } from './editor/dynamic-field-resolver/dynamic-dmp-field-resolver.component'; +import { DynamicFieldsProjectComponent } from './editor/dynamic-fields-project/dynamic-fields-project.component'; +import { DynamicFieldProjectComponent } from './editor/dynamic-fields-project/dynamic-field-project/dynamic-field-project.component'; +import { BaseHttpModule } from '../utilities/cite-http-service-module/cite-http.module'; +import { DataManagementPlanService } from '../services/data-management-plan/data-management-plan.service'; +import { DataManagementPlanProfileService } from '../services/data-management-plan-profile/datamanagement-profile.service'; +import { ProjectService } from '../services/project/project.service'; +import { ExternalSourcesService } from '../services/external-sources/external-sources.service'; +import { MaterialModule } from '../shared/material/material.module'; +import { RouterModule } from '@angular/router'; +import { ResearcherService } from '../services/researchers/researchers.service'; +import { InvitationService } from '../services/invitation/invitation.service'; +import { DatasetService } from '../services/dataset/dataset.service'; @NgModule({ - imports: [ - CommonModule, - FormsModule, - HttpClientModule, - SharedModule, - ReactiveFormsModule, - DataManagementPlanRoutes, - TranslateModule.forRoot({ - loader: { - provide: TranslateLoader, - useFactory: HttpLoaderFactory, - deps: [HttpClient] - } - }), - CovalentDialogsModule - ], + imports: [ + CommonModule, + FormsModule, + HttpClientModule, + SharedModule, + MaterialModule, + RouterModule.forChild(DataManagementPlanRoutes), + ReactiveFormsModule, + TranslateModule.forRoot({ + loader: { + provide: TranslateLoader, + useFactory: HttpLoaderFactory, + deps: [HttpClient] + } + }), + CovalentDialogsModule + ], - declarations: [ - DataManagementPlanListingComponent, - DataManagementPlanEditorComponent, - InvitationComponent, - InvitationAcceptedComponent, - DataManagementPlanWizardComponent, - DataManagementPlanWizardEditorComponent, - DatasetWizardListingComponent, - AddResearchersComponent, - AvailableProfilesComponent - ], + declarations: [ + DataManagementPlanListingComponent, + DataManagementPlanEditorComponent, + InvitationComponent, + InvitationAcceptedComponent, + DataManagementPlanWizardComponent, + DataManagementPlanWizardEditorComponent, + DatasetWizardListingComponent, + AddResearchersComponent, + AvailableProfilesComponent, + DynamicDmpFieldResolver, + DynamicFieldsProjectComponent, + DynamicFieldProjectComponent + ], - exports: [ - DataManagementPlanListingComponent, - DataManagementPlanEditorComponent, - InvitationComponent, - InvitationAcceptedComponent, - DataManagementPlanWizardComponent, - DataManagementPlanWizardEditorComponent, - DatasetWizardListingComponent, - AddResearchersComponent, - AvailableProfilesComponent - - ], - entryComponents: [ - InvitationComponent, - AddResearchersComponent, - AvailableProfilesComponent - ], - providers: [ - BaseHttpService - ] + exports: [ + DataManagementPlanListingComponent, + DataManagementPlanEditorComponent, + InvitationComponent, + InvitationAcceptedComponent, + DataManagementPlanWizardComponent, + DataManagementPlanWizardEditorComponent, + DatasetWizardListingComponent, + AddResearchersComponent, + AvailableProfilesComponent, + DynamicFieldsProjectComponent, + DynamicFieldProjectComponent, + RouterModule + ], + entryComponents: [ + InvitationComponent, + AddResearchersComponent, + AvailableProfilesComponent + ], + providers: [ + ProjectService, + ResearcherService, + DatasetService, + InvitationService, + DataManagementPlanService, + ExternalSourcesService, + DataManagementPlanProfileService + ] }) export class DataManagementPlanModule { - constructor(private translate: TranslateService) { - translate.setDefaultLang('en'); - translate.use('en'); - } - } + constructor(private translate: TranslateService) { + translate.setDefaultLang('en'); + translate.use('en'); + } +} export function HttpLoaderFactory(httpClient: HttpClient) { - return new TranslateHttpLoader(httpClient, 'assets/lang/', '.json'); -} \ No newline at end of file + return new TranslateHttpLoader(httpClient, 'assets/lang/', '.json'); +} diff --git a/dmp-frontend/src/app/dmps/dmps.routes.ts b/dmp-frontend/src/app/dmps/dmps.routes.ts index 7faf3d2a4..b1469ff98 100644 --- a/dmp-frontend/src/app/dmps/dmps.routes.ts +++ b/dmp-frontend/src/app/dmps/dmps.routes.ts @@ -3,16 +3,65 @@ import { DataManagementPlanEditorComponent } from './editor/dmp-editor.component import { DataManagementPlanListingComponent } from './listing/dmp-listing.component'; import { DatasetListingComponent } from '../datasets/listing/dataset-listing.component'; import { RouterModule, Routes } from '@angular/router'; -import { InvitationAcceptedComponent } from '../invitation-accepted/invitation-accepted.component'; +import { InvitationAcceptedComponent } from '../shared/components/invitation-accepted/invitation-accepted.component'; -const routes: Routes = [ - { path: '', component: DataManagementPlanListingComponent }, - { path: 'viewversions/:groupId', component: DataManagementPlanListingComponent }, - { path: 'edit/:id', component: DataManagementPlanEditorComponent }, - { path: 'new', component: DataManagementPlanEditorComponent }, - { path: 'new_version/:id', component: DataManagementPlanWizardComponent, data: { clone: false } }, - { path: 'clone/:id', component: DataManagementPlanWizardComponent, data: { clone: true } }, - { path: "invitation/:id", component: InvitationAcceptedComponent } +export const DataManagementPlanRoutes: Routes = [ + { + path: '', + component: DataManagementPlanListingComponent, + data: { + breadcrumb: true + }, + }, + { + path: 'viewversions/:groupId', + component: DataManagementPlanListingComponent, + data: { + breadcrumb: true + }, + }, + { + path: 'project/:projectId', + component: DataManagementPlanListingComponent, + data: { + breadcrumb: true + }, + }, + { + path: 'edit/:id', + component: DataManagementPlanEditorComponent, + data: { + breadcrumb: true + }, + }, + { + path: 'new', + component: DataManagementPlanEditorComponent, + data: { + breadcrumbs: 'new' + } + }, + { + path: 'new_version/:id', + component: DataManagementPlanWizardComponent, + data: { + clone: false, + breadcrumb: true + }, + }, + { + path: 'clone/:id', + component: DataManagementPlanWizardComponent, + data: { + clone: false, + breadcrumb: true + }, + }, + { + path: "invitation/:id", + component: InvitationAcceptedComponent, + data: { + breadcrumb: true + }, + } ]; - -export const DataManagementPlanRoutes = RouterModule.forChild(routes); diff --git a/dmp-frontend/src/app/dmps/editor/dmp-editor.component.html b/dmp-frontend/src/app/dmps/editor/dmp-editor.component.html index a9dee3ca7..2dd084e5f 100644 --- a/dmp-frontend/src/app/dmps/editor/dmp-editor.component.html +++ b/dmp-frontend/src/app/dmps/editor/dmp-editor.component.html @@ -1,108 +1,143 @@
-
- - {{'DMP-EDITOR.TITLE.NEW' | translate}} - {{formGroup.get('label').value}} - - - - {{baseErrorModel.label}} - {{'GENERAL.VALIDATION.REQUIRED' | translate}} - + - - - {{errorModel.description}} - {{'GENERAL.VALIDATION.REQUIRED' | translate}} - - - + - - -
{{chip.label.substring(0, 1).toUpperCase()}}
- {{chip.label}} -
- -
- {{option.label}} -
-
- - - {{'GENERAL.VALIDATION.REQUIRED' | translate}} - -
- - View All + + {{'DMP-EDITOR.TITLE.NEW' | translate}} + +

{{formGroup.get('label').value}}

+
+
+ + + + + + + +
+ + + + {{baseErrorModel.label}} + {{'GENERAL.VALIDATION.REQUIRED' | translate}} + - + View All + + - - -
{{chip.name.substring(0, 1).toUpperCase()}}
- {{chip.name}} -
- -
- {{option.name}} -
-
- -
+ + +
{{chip.name.substring(0, 1).toUpperCase()}}
+ {{chip.name}} +
+ +
+ {{option.name}} +
+
+ +
-
- - -
{{chip.name.substring(0, 1).toUpperCase()}}
- {{chip.name}} -
- -
- {{option.name}} -
-
- -
+
+ + +
{{chip.name.substring(0, 1).toUpperCase()}}
+ {{chip.name}} +
+ +
+ {{option.name}} +
+
+ +
- -
+ +
- - - +

{{'DMP-EDITOR.FIELDS.PROFILE' | translate}}

+ + + + + + {{ option.label }} + + + + + + + + - -

Associated Users

- - person -
{{user.name}}
-
-
+ +

Associated Users

+ + person +
{{user.name}}
+
+
-
- - - - -
+
+ + + + +
-
-
- - -
\ No newline at end of file + + + + + + diff --git a/dmp-frontend/src/app/dmps/editor/dmp-editor.component.scss b/dmp-frontend/src/app/dmps/editor/dmp-editor.component.scss index f5333f1db..24c35d806 100644 --- a/dmp-frontend/src/app/dmps/editor/dmp-editor.component.scss +++ b/dmp-frontend/src/app/dmps/editor/dmp-editor.component.scss @@ -11,29 +11,25 @@ } .data-management-plan-editor { - - .mat-form-field-full-width{ + .mat-form-field-full-width { mat-form-field { width: 100%; padding: 3px; } } - - + .fill-space { + flex: 1 1 auto; + } .mat-card { margin: 16px 0; } - p { margin: 16px; } - .left-button { float: left; } - .description-area { height: 100px; } - -} +} \ No newline at end of file diff --git a/dmp-frontend/src/app/dmps/editor/dmp-editor.component.ts b/dmp-frontend/src/app/dmps/editor/dmp-editor.component.ts index 4df8f40d3..bd21fc334 100644 --- a/dmp-frontend/src/app/dmps/editor/dmp-editor.component.ts +++ b/dmp-frontend/src/app/dmps/editor/dmp-editor.component.ts @@ -5,7 +5,7 @@ import { TranslateService } from "@ngx-translate/core"; import { DataSource } from "@angular/cdk/table"; import { Observable } from "rxjs/Observable"; import { JsonSerializer } from "../../utilities/JsonSerializer"; -import { FormGroup } from "@angular/forms"; +import { FormGroup, FormControl } from "@angular/forms"; import { SnackBarNotificationComponent } from "../../shared/components/notificaiton/snack-bar-notification.component"; import { BaseErrorModel } from "../../models/error/BaseErrorModel"; import { DataManagementPlanService } from "../../services/data-management-plan/data-management-plan.service"; @@ -19,25 +19,33 @@ import { DatasetProfileModel } from "../../models/datasets/DatasetProfileModel"; import { AutoCompleteConfiguration } from "../../shared/components/autocomplete/AutoCompleteConfiguration"; import { ProjectCriteria } from "../../models/criteria/project/ProjectCriteria"; import { ProjectService } from "../../services/project/project.service"; -import { DmpUsersModel } from "@app/models/dmpUsers/DmpUsersModel"; -import { AddResearchersComponent } from "@app/add-researchers/add-researchers.component"; +import { DmpUsersModel } from "../../models/dmpUsers/DmpUsersModel"; +import { AddResearchersComponent } from "../../shared/components/add-researchers/add-researchers.component"; import { ViewContainerRef } from '@angular/core'; import { TdDialogService } from '@covalent/core'; -import { AvailableProfilesComponent } from "@app/available-profiles/available-profiles.component"; -import { AutoCompleteChipConfiguration } from "@app/shared/components/autocompleteChips/AutoCompleteChipConfiguration"; -import { BaseCriteria } from "@app/models/criteria/BaseCriteria"; +import { AvailableProfilesComponent } from "../../shared/components/available-profiles/available-profiles.component"; +import { AutoCompleteChipConfiguration } from "../../shared/components/autocompleteChips/AutoCompleteChipConfiguration"; +import { BaseCriteria } from "../../models/criteria/BaseCriteria"; +import { DataManagementPlanProfileService } from "../../services/data-management-plan-profile/datamanagement-profile.service"; +import { DataManagementPlanProfileListingModel } from "../../models/data-management-plan-profile/DataManagementPlanProfileListingModel"; +import { DataManagementPlanProfileCriteria } from "../../models/criteria/dmp-profile/DataManagementPlanProfileCriteria"; +import { DataManagementPlanProfile } from "../../models/data-management-plan-profile/DataManagementPlanProfile"; +import { LanguageResolverService } from "../../services/language-resolver/language-resolver.service"; +import { IBreadCrumbComponent } from "../../shared/components/breadcrumb/definition/IBreadCrumbComponent"; +import { BreadcrumbItem } from "../../shared/components/breadcrumb/definition/breadcrumb-item"; @Component({ selector: 'app-dmp-editor-component', templateUrl: 'dmp-editor.component.html', styleUrls: ['./dmp-editor.component.scss'], - providers: [DataManagementPlanService, ExternalSourcesService, ProjectService], encapsulation: ViewEncapsulation.None }) -export class DataManagementPlanEditorComponent implements AfterViewInit { +export class DataManagementPlanEditorComponent implements AfterViewInit, IBreadCrumbComponent { + breadCrumbs: Observable; isNew = true; + textCtrl = new FormControl(); dataManagementPlan: DataManagementPlanModel; formGroup: FormGroup = null; @@ -52,8 +60,10 @@ export class DataManagementPlanEditorComponent implements AfterViewInit { organisationsAutoCompleteConfiguration: AutoCompleteChipConfiguration; createNewVersion; associatedUsers: Array + filteredOptions: Observable constructor( + private dmpProfileService: DataManagementPlanProfileService, private dataManagementPlanService: DataManagementPlanService, private projectService: ProjectService, private externalSourcesService: ExternalSourcesService, @@ -64,9 +74,10 @@ export class DataManagementPlanEditorComponent implements AfterViewInit { private _service: DataManagementPlanService, public dialog: MatDialog, private _dialogService: TdDialogService, - private _viewContainerRef: ViewContainerRef + private _viewContainerRef: ViewContainerRef, + private languageResolverService: LanguageResolverService ) { - + this.filteredOptions = dmpProfileService.getAll({ criteria: new DataManagementPlanProfileCriteria() }); } ngAfterViewInit() { @@ -83,19 +94,38 @@ export class DataManagementPlanEditorComponent implements AfterViewInit { if (itemId != null) { this.isNew = false; this.dataManagementPlanService.getSingle(itemId).map(data => data as DataManagementPlanModel) - .subscribe(data => { + .subscribe(async data => { this.dataManagementPlan = JsonSerializer.fromJSONObject(data, DataManagementPlanModel); this.formGroup = this.dataManagementPlan.buildForm(); + if (this.formGroup.get("profile") && this.formGroup.get("profile").value) { + this.textCtrl.patchValue(this.formGroup.get("profile").value); + } + this.breadCrumbs = Observable.of([ + { + parentComponentName: "DataManagementPlanListingComponent", + label: 'DMPs', + url: "dmps", + notFoundResolver: [await this.projectService.getSingle(this.dataManagementPlan.project.id).map(x => ({ label: x.label, url: '/projects/edit/' + x.id }) as BreadcrumbItem).toPromise()] + }, + { + parentComponentName: null, + label: this.dataManagementPlan.label, + url: "/dmps/edit/" + this.dataManagementPlan.id + }] + ) this.associatedUsers = data.associatedUsers; }); } else { this.dataManagementPlan = new DataManagementPlanModel(); setTimeout(() => { this.formGroup = this.dataManagementPlan.buildForm(); + if (this.formGroup.get("profile") && this.formGroup.get("profile").value) { + this.textCtrl.patchValue(this.formGroup.get("profile").value); + } }); } + }); - // let clone = this.route.snapshot.data.clone; ginetai kai esti ikalyvas this.route .queryParams .subscribe(params => { @@ -113,7 +143,7 @@ export class DataManagementPlanEditorComponent implements AfterViewInit { return this.formGroup.valid; } - onSubmit(): void { + onSubmit(): void { this.dataManagementPlanService.createDataManagementPlan(this.formGroup.value).subscribe( complete => this.onCallbackSuccess(), error => this.onCallbackError(error) @@ -173,14 +203,10 @@ export class DataManagementPlanEditorComponent implements AfterViewInit { if (value) { this.filteringResearchersAsync = true; - this.externalSourcesService.searchDMPResearchers(value).subscribe(items => { + this.externalSourcesService.searchDMPResearchers({ criteria: { name: value, like: null } }).subscribe(items => { this.filteredResearchers = items; this.filteringResearchersAsync = false; - // this.filteredOrganisations = items.filter((filteredObj: any) => { - // return this.objectsModel ? this.objectsModel.indexOf(filteredObj) < 0 : true; - // }); - }); } } @@ -191,16 +217,6 @@ export class DataManagementPlanEditorComponent implements AfterViewInit { if (value) { this.filteredProfilesAsync = true; - // this.externalSourcesService.searchDMPProfiles(value).subscribe(items => { - // this.filteredProfiles = items; - // this.filteredProfilesAsync = false; - - // // this.filteredOrganisations = items.filter((filteredObj: any) => { - // // return this.objectsModel ? this.objectsModel.indexOf(filteredObj) < 0 : true; - // // }); - - // }); - const request = new RequestItem(); let criteria = new DatasetProfileCriteria(); criteria.like = value; @@ -221,7 +237,7 @@ export class DataManagementPlanEditorComponent implements AfterViewInit { dmpName: rowName } }); - + } availableProfiles() { @@ -232,25 +248,25 @@ export class DataManagementPlanEditorComponent implements AfterViewInit { } }); - dialogRef.afterClosed().subscribe(result => { + dialogRef.afterClosed().subscribe(result => { this.formGroup.get("profiles").setValue(result); }); - + return false; } openConfirm(dmpLabel, id): void { this._dialogService.openConfirm({ - message: 'Are you sure you want to delete the "' + dmpLabel +'"', + message: 'Are you sure you want to delete the "' + dmpLabel + '"', disableClose: true || false, // defaults to false viewContainerRef: this._viewContainerRef, //OPTIONAL title: 'Confirm', //OPTIONAL, hides if not provided cancelButton: 'No', //OPTIONAL, defaults to 'CANCEL' acceptButton: 'Yes' //OPTIONAL, defaults to 'ACCEPT' - // width: '500px', //OPTIONAL, defaults to 400px + // width: '500px', //OPTIONAL, defaults to 400px }).afterClosed().subscribe((accept: boolean) => { if (accept) { - this.dataManagementPlanService.delete(id).subscribe(()=>{ + this.dataManagementPlanService.delete(id).subscribe(() => { this.router.navigate(['/dmps']) }); } else { @@ -259,4 +275,34 @@ export class DataManagementPlanEditorComponent implements AfterViewInit { }); } -} \ No newline at end of file + + selectOption(option: any) { + this.dataManagementPlan.definition = null; + this.formGroup.get("profile").patchValue(option, { emitEvent: false }) + this.dmpProfileService.getSingle(option.id).subscribe(result => { + this.dataManagementPlan.definition = result.definition; + }) + } + + displayWith(item: any) { + if (!item) return null; + return item["label"]; + } + + redirectToProject() { + this.router.navigate(["projects/edit/" + this.dataManagementPlan.project.id]) + } + + redirectToDatasets() { + this.router.navigate(["datasets/dmp/" + this.dataManagementPlan.id]) + } + + newVersion(id: String, label: String) { + this.router.navigate(['/dmps/new_version/' + id, { dmpLabel: label }]); + } + + clone(id: String) { + this.router.navigate(['/dmps/clone/' + id]); + } + +} diff --git a/dmp-frontend/src/app/dmps/editor/dynamic-field-resolver/dynamic-dmp-field-resolver.component.html b/dmp-frontend/src/app/dmps/editor/dynamic-field-resolver/dynamic-dmp-field-resolver.component.html new file mode 100644 index 000000000..972942d61 --- /dev/null +++ b/dmp-frontend/src/app/dmps/editor/dynamic-field-resolver/dynamic-dmp-field-resolver.component.html @@ -0,0 +1,15 @@ +
+
+ + + + + + + + + + + +
+
\ No newline at end of file diff --git a/dmp-frontend/src/app/dmps/editor/dynamic-field-resolver/dynamic-dmp-field-resolver.component.scss b/dmp-frontend/src/app/dmps/editor/dynamic-field-resolver/dynamic-dmp-field-resolver.component.scss new file mode 100644 index 000000000..0612f2a24 --- /dev/null +++ b/dmp-frontend/src/app/dmps/editor/dynamic-field-resolver/dynamic-dmp-field-resolver.component.scss @@ -0,0 +1,12 @@ +.full-width { + width: 100%; +} + +.input-table { + table-layout: fixed; +} + +.table-card .mat-grid-tile { + background: rgba(0, 0, 0, 0.32); +} + diff --git a/dmp-frontend/src/app/dmps/editor/dynamic-field-resolver/dynamic-dmp-field-resolver.component.ts b/dmp-frontend/src/app/dmps/editor/dynamic-field-resolver/dynamic-dmp-field-resolver.component.ts new file mode 100644 index 000000000..8120092ca --- /dev/null +++ b/dmp-frontend/src/app/dmps/editor/dynamic-field-resolver/dynamic-dmp-field-resolver.component.ts @@ -0,0 +1,40 @@ +import { Component, ViewEncapsulation, AfterViewInit, Input, OnInit, OnDestroy } from "@angular/core"; +import { DataManagementPlanProfile } from "../../../models/data-management-plan-profile/DataManagementPlanProfile"; +import { DMPProfileFieldDataType, DMPProfileType } from "../../../models/data-management-plan-profile/DataManagementProfileField"; +import { FormGroup, FormBuilder, FormArray } from "@angular/forms"; +import { LanguageResolverService } from "../../../services/language-resolver/language-resolver.service"; + +@Component({ + selector: 'app-dynamic-dmp-field-resolver', + templateUrl: 'dynamic-dmp-field-resolver.component.html', + styleUrls: ['./dynamic-dmp-field-resolver.component.scss'], + encapsulation: ViewEncapsulation.None +}) +export class DynamicDmpFieldResolver implements OnInit, OnDestroy { + + + DMPProfileFieldDataType = DMPProfileFieldDataType; + DMPProfileType = DMPProfileType; + + @Input() + dataManagementPlanProfile: DataManagementPlanProfile; + + @Input() + formGroup: FormGroup + + ngOnInit(): void { + this.formGroup.addControl("properties", new FormBuilder().group([])); + (this.formGroup.get("properties")).addControl("fields", new FormBuilder().array([])) + + this.dataManagementPlanProfile.fields.forEach(item => { + (this.formGroup.get("properties").get("fields")).push(new FormBuilder().group({ + id: [item.id], + value: [item.value] + })) + }) + } + + ngOnDestroy(): void { + this.formGroup.removeControl("properties") + } +} diff --git a/dmp-frontend/src/app/dmps/editor/dynamic-fields-project/dynamic-field-project/dynamic-field-project.component.html b/dmp-frontend/src/app/dmps/editor/dynamic-fields-project/dynamic-field-project/dynamic-field-project.component.html new file mode 100644 index 000000000..a0140a70b --- /dev/null +++ b/dmp-frontend/src/app/dmps/editor/dynamic-fields-project/dynamic-field-project/dynamic-field-project.component.html @@ -0,0 +1,3 @@ + + \ No newline at end of file diff --git a/dmp-admin/src/assets/.gitkeep b/dmp-frontend/src/app/dmps/editor/dynamic-fields-project/dynamic-field-project/dynamic-field-project.component.scss similarity index 100% rename from dmp-admin/src/assets/.gitkeep rename to dmp-frontend/src/app/dmps/editor/dynamic-fields-project/dynamic-field-project/dynamic-field-project.component.scss diff --git a/dmp-frontend/src/app/dmps/editor/dynamic-fields-project/dynamic-field-project/dynamic-field-project.component.ts b/dmp-frontend/src/app/dmps/editor/dynamic-fields-project/dynamic-field-project/dynamic-field-project.component.ts new file mode 100644 index 000000000..c1ceb8688 --- /dev/null +++ b/dmp-frontend/src/app/dmps/editor/dynamic-fields-project/dynamic-field-project/dynamic-field-project.component.ts @@ -0,0 +1,84 @@ +import { Component, ViewEncapsulation, OnInit, Input, ViewChild } from "@angular/core"; +import { FormGroup } from "@angular/forms"; +import { DataManagementPlanService } from "../../../../services/data-management-plan/data-management-plan.service"; +import { AutoCompleteConfiguration } from "../../../../shared/components/autocomplete/AutoCompleteConfiguration"; +import { RequestItem } from "../../../../models/criteria/RequestItem"; +import { DynamicFieldProjectCriteria, DynamicFieldProjectCriteriaDependencies } from "../../../../models/dynamic-field-project/DynamicFieldProjectCriteria"; +import { AutoCompleteComponent } from "../../../../shared/components/auto-complete/auto-complete.component"; +import { DynamicFieldDependency } from "../../../../models/data-managemnt-plans/DynamicFieldDependency"; +import { LanguageResolverService } from "../../../../services/language-resolver/language-resolver.service"; + +@Component({ + selector: 'app-dynamic-field-project', + templateUrl: 'dynamic-field-project.component.html', + styleUrls: ['./dynamic-field-project.component.scss'], + encapsulation: ViewEncapsulation.None +}) +export class DynamicFieldProjectComponent implements OnInit { + + constructor(private languageResolverService: LanguageResolverService, private dmpService: DataManagementPlanService) { } + + @Input() + dependencies: Array + + @Input() + formGroup: FormGroup; + + @ViewChild(AutoCompleteComponent) + autocomplete: AutoCompleteComponent + + autoCompleteConfiguration: AutoCompleteConfiguration + + ngOnInit(): void { + let requestItem = new RequestItem() + requestItem.criteria = { id: this.formGroup.get("id").value, dynamicFields: this.buildDependencies() } + this.autoCompleteConfiguration = new AutoCompleteConfiguration(this.dmpService.getDynamicField.bind(this.dmpService), requestItem); + } + + hasUnResolvedDependencies() { + if (this.dependencies == null || this.dependencies.length == 0) { + if (this.formGroup.get("value").disabled) { + this.updateConfiguration(); + this.formGroup.get("value").enable({ onlySelf: true, emitEvent: false }) + } + return false; + } + for (let i = 0; i < this.dependencies.length; i++) { + if (!this.dependencies[i].get("value").value) { + this.formGroup.get("value").disable({ onlySelf: true, emitEvent: false }) + return true; + } + } + if (this.formGroup.get("value").disabled) { + this.updateConfiguration(); + this.formGroup.get("value").enable({ onlySelf: true, emitEvent: false }) + } + return false; + } + + updateConfiguration() { + let requestItem = new RequestItem() + requestItem.criteria = { id: this.formGroup.get("id").value, dynamicFields: this.buildDependencies() } + this.autoCompleteConfiguration = new AutoCompleteConfiguration(this.dmpService.getDynamicField.bind(this.dmpService), requestItem); + this.autocomplete.inputData = this.autoCompleteConfiguration; + } + + buildDependencies(): Array { + if (!this.dependencies || this.dependencies.length == 0) return [] + let dependencies = new Array(); + for (let i = 0; i < this.dependencies.length; i++) { + dependencies.push({ property: this.dependencies[i].get("id").value, value: this.assignFunction(this.dependencies[i].get("value").value) }) + } + return dependencies; + } + + displayFunction(item: any): any { + if (!item) return null; + return item["label"]; + } + + assignFunction(item: any): any { + if (!item) return null; + return item["id"]; + } +} diff --git a/dmp-frontend/src/app/dmps/editor/dynamic-fields-project/dynamic-fields-project.component.html b/dmp-frontend/src/app/dmps/editor/dynamic-fields-project/dynamic-fields-project.component.html new file mode 100644 index 000000000..26c6bec4b --- /dev/null +++ b/dmp-frontend/src/app/dmps/editor/dynamic-fields-project/dynamic-fields-project.component.html @@ -0,0 +1,7 @@ +
+
+
+ +
+
+
\ No newline at end of file diff --git a/dmp-admin/src/assets/custom.css b/dmp-frontend/src/app/dmps/editor/dynamic-fields-project/dynamic-fields-project.component.scss similarity index 100% rename from dmp-admin/src/assets/custom.css rename to dmp-frontend/src/app/dmps/editor/dynamic-fields-project/dynamic-fields-project.component.scss diff --git a/dmp-frontend/src/app/dmps/editor/dynamic-fields-project/dynamic-fields-project.component.ts b/dmp-frontend/src/app/dmps/editor/dynamic-fields-project/dynamic-fields-project.component.ts new file mode 100644 index 000000000..a42e9f721 --- /dev/null +++ b/dmp-frontend/src/app/dmps/editor/dynamic-fields-project/dynamic-fields-project.component.ts @@ -0,0 +1,33 @@ +import { Component, ViewEncapsulation, OnInit, OnDestroy, Input } from "@angular/core"; +import { FormGroup, FormArray } from "@angular/forms"; +import { DynamicFieldDependency } from "../../../models/data-managemnt-plans/DynamicFieldDependency"; + +@Component({ + selector: 'app-dynamic-fields-project', + templateUrl: 'dynamic-fields-project.component.html', + styleUrls: ['./dynamic-fields-project.component.scss'], + encapsulation: ViewEncapsulation.None +}) +export class DynamicFieldsProjectComponent implements OnInit { + + @Input() + formGroup: FormGroup; + + ngOnInit(): void { + } + + findDependencies(id: number) { + let formGroupDependencies: Array = new Array(); + let dynamicFieldDependency: DynamicFieldDependency[] = (this.formGroup.get("dynamicFields")).at(id).get("dependencies").value + if (dynamicFieldDependency.length > 0) { + dynamicFieldDependency.forEach(item => { + let length = (this.formGroup.get("dynamicFields")).length; + for (let i = 0; i < length; i++) { + let formGroup = (this.formGroup.get("dynamicFields")).at(i); + if (formGroup.get("id").value === item.id) formGroupDependencies.push(formGroup); + } + }) + } + return formGroupDependencies; + } +} diff --git a/dmp-frontend/src/app/dmps/listing/dmp-listing.component.html b/dmp-frontend/src/app/dmps/listing/dmp-listing.component.html index e2eb714f3..4da90fbb5 100644 --- a/dmp-frontend/src/app/dmps/listing/dmp-listing.component.html +++ b/dmp-frontend/src/app/dmps/listing/dmp-listing.component.html @@ -1,83 +1,86 @@
-

{{'DMP-LISTING.TITLE' | translate}}

+

{{'DMP-LISTING.TITLE' | translate}} {{titlePrefix}}

- - - - - - + + + + + + - - - {{'DMP-LISTING.COLUMNS.NAME' | translate}} - {{row.label}} - + + + {{'DMP-LISTING.COLUMNS.NAME' | translate}} + {{row.label}} + - - - {{'DMP-LISTING.COLUMNS.PROJECT' | translate}} - {{row.project}} - + + + {{'DMP-LISTING.COLUMNS.PROJECT' | translate}} + {{row.project}} + - - + - - - {{'DMP-LISTING.COLUMNS.CREATION-TIME' | translate}} - {{row.creationTime | date:'shortDate'}} - + + + {{'DMP-LISTING.COLUMNS.CREATION-TIME' | translate}} + {{row.creationTime | date:'shortDate'}} + - - - {{'DMP-LISTING.COLUMNS.ORGANISATIONS' | translate}} - {{row.organisations}} - + + + {{'DMP-LISTING.COLUMNS.ORGANISATIONS' | translate}} + {{row.organisations}} + - - - {{'DMP-LISTING.COLUMNS.LATEST_VERSION' | translate}} - {{row.version}} - + + + {{'DMP-LISTING.COLUMNS.LATEST_VERSION' | translate}} + {{row.version}} + - - - {{'DMP-LISTING.COLUMNS.DATASETS' | translate}} - {{row.numOfDatasets}} - + + + {{'DMP-LISTING.COLUMNS.DATASETS' | translate}} + + {{row.numOfDatasets}} + + - - {{'DMP-LISTING.COLUMNS.ACTIONS' | translate}} - - - - - - - - - - - - - + + {{'DMP-LISTING.COLUMNS.ACTIONS' | translate}} + + + + + + + + + + - - + + - - - - + + + + - -
\ No newline at end of file + + diff --git a/dmp-frontend/src/app/dmps/listing/dmp-listing.component.ts b/dmp-frontend/src/app/dmps/listing/dmp-listing.component.ts index d1f8082e9..c55dd4ee1 100644 --- a/dmp-frontend/src/app/dmps/listing/dmp-listing.component.ts +++ b/dmp-frontend/src/app/dmps/listing/dmp-listing.component.ts @@ -1,6 +1,6 @@ import { DataTableRequest } from '../../models/data-table/DataTableRequest'; import { DataManagementPlanListingModel } from '../../models/data-managemnt-plans/DataManagementPlanListingModel'; -import { InvitationComponent } from '../../invitation/invitation.component'; +import { InvitationComponent } from '../../shared/components/invitation/invitation.component'; import { DataManagementPlanCriteria } from '../../models/criteria/data-management-plan/DataManagementPlanCriteria'; import { DataManagementPlanCriteriaComponent, @@ -8,12 +8,15 @@ import { import { DataManagementPlanService } from '../../services/data-management-plan/data-management-plan.service'; import { Component, ViewChild, OnInit, AfterViewInit } from "@angular/core"; import { MatPaginator, MatSort, MatSnackBar, MatDialog } from "@angular/material"; -import { Router, ActivatedRoute } from "@angular/router"; +import { Router, ActivatedRoute, ActivatedRouteSnapshot } from "@angular/router"; import { TranslateService } from "@ngx-translate/core"; import { DataSource } from "@angular/cdk/table"; import { Observable } from "rxjs/Observable"; -import { DataManagementPlanRoutes } from '@app/dmps/dmps.routes'; -import { DatasetRoutes } from '@app/datasets/dataset.routes'; +import { DataManagementPlanRoutes } from '../../dmps/dmps.routes'; +import { DatasetRoutes } from '../../datasets/dataset.routes'; +import { ProjectModel } from '../../models/projects/ProjectModel'; +import { IBreadCrumbComponent } from '../../shared/components/breadcrumb/definition/IBreadCrumbComponent'; +import { BreadcrumbItem } from '../../shared/components/breadcrumb/definition/breadcrumb-item'; @@ -21,19 +24,22 @@ import { DatasetRoutes } from '@app/datasets/dataset.routes'; selector: 'app-dmp-listing-component', templateUrl: 'dmp-listing.component.html', styleUrls: ['./dmp-listing.component.scss'], - providers: [DataManagementPlanService] }) -export class DataManagementPlanListingComponent implements OnInit { +export class DataManagementPlanListingComponent implements OnInit, IBreadCrumbComponent { + @ViewChild(MatPaginator) _paginator: MatPaginator; @ViewChild(MatSort) sort: MatSort; @ViewChild(DataManagementPlanCriteriaComponent) criteria: DataManagementPlanCriteriaComponent; + breadCrumbs: Observable = Observable.of([]); dataSource: DataManagementPlanDataSource | null; displayedColumns: String[] = ['name', 'project', 'creationTime', 'organisations', 'version', 'numOfDatasets', 'actions']; itemId: string; - + projectId: string; + showProject: boolean; + titlePrefix: string; constructor( private dataManagementPlanService: DataManagementPlanService, private router: Router, @@ -46,11 +52,38 @@ export class DataManagementPlanListingComponent implements OnInit { } ngOnInit() { - this.route.params.subscribe(params => { - this.itemId = params['groupId']; - this.criteria.setCriteria(this.getDefaultCriteria()); - this.refresh(); - this.criteria.setRefreshCallback(() => this.refresh()); + this.route.params.subscribe(async params => { + let projectLabel; + if (params["projectId"]) { + this.projectId = params["projectId"]; + this.showProject = false; + let project = new ProjectModel(); + project.id = this.projectId; + this.criteria.setCriteria({ like: null, projects: [project], groupIds: null, allVersions: false }) + this.refresh(); + projectLabel = this.route.snapshot.queryParams.projectLabel + this.breadCrumbs = Observable.of([{ parentComponentName: "ProjectEditorComponent", label: projectLabel, url: "/projects/edit/" + this.projectId }, { parentComponentName: null, label: 'DMPs', url: "/dmps/project/" + this.projectId, params: { projectLabel: projectLabel } }]) + this.criteria.setRefreshCallback(() => this.refresh()); + } else { + this.itemId = params['groupId']; + this.showProject = true; + let breadCrumbs = []; + + if (this.itemId) { + let dmplabel = this.route.snapshot.queryParams.groupLabel + breadCrumbs.push({ parentComponentName: null, label: 'DMPs', url: "/dmps" }, { parentComponentName: null, label: 'DMPs Versions Of ' + dmplabel, url: "/dmps/viewversions/" + this.itemId }) + } + else breadCrumbs.push({ parentComponentName: null, label: 'DMPs', url: "/dmps" }) + this.breadCrumbs = Observable.of(breadCrumbs) + + this.criteria.setCriteria(this.getDefaultCriteria()); + this.refresh(); + this.criteria.setRefreshCallback(() => this.refresh()); + } + + if (this.projectId != null) + if (projectLabel != undefined) + this.titlePrefix = "for " + projectLabel; }) } @@ -67,20 +100,12 @@ export class DataManagementPlanListingComponent implements OnInit { this.router.navigate(['/datasets/new/' + rowId]); } - showDatasets(rowId: String, rowLabel:String) { - this.router.navigate(['/datasets/dmp/' + rowId, {dmpLabel:rowLabel}]); + showDatasets(rowId: String, rowLabel: String) { + this.router.navigate(['/datasets/dmp/' + rowId, { dmpLabel: rowLabel }]); } - newVersion(rowId: String, rowLabel:String) { - this.router.navigate(['/dmps/new_version/' + rowId, {dmpLabel:rowLabel}]); - } - - viewVersions(rowId: String) { - this.router.navigate(['/dmps/viewversions/' + rowId]); - } - - clone(rowId: String) { - this.router.navigate(['/dmps/clone/' + rowId]); + viewVersions(rowId: String, rowLabel: String) { + this.router.navigate(['/dmps/viewversions/' + rowId], { queryParams: { groupLabel: rowLabel } }); } getDefaultCriteria(): DataManagementPlanCriteria { diff --git a/dmp-frontend/src/app/dmps/wizard/dmp-wizard.component.ts b/dmp-frontend/src/app/dmps/wizard/dmp-wizard.component.ts index 7436d30ea..46a6a0b42 100644 --- a/dmp-frontend/src/app/dmps/wizard/dmp-wizard.component.ts +++ b/dmp-frontend/src/app/dmps/wizard/dmp-wizard.component.ts @@ -8,74 +8,78 @@ import { ActivatedRoute, Params, Router } from '@angular/router'; import { FormGroup } from '@angular/forms'; import { MatSnackBar } from '@angular/material'; import { TranslateService } from '@ngx-translate/core'; +import { IBreadCrumbComponent } from '../../shared/components/breadcrumb/definition/IBreadCrumbComponent'; +import { Observable } from 'rxjs/Observable'; +import { BreadcrumbItem } from '../../shared/components/breadcrumb/definition/breadcrumb-item'; @Component({ - selector: 'app-dmp-wizard-component', - templateUrl: 'dmp-wizard.component.html', - styleUrls: ['./dmp-wizard.component.scss'], - providers: [DataManagementPlanService] + selector: 'app-dmp-wizard-component', + templateUrl: 'dmp-wizard.component.html', + styleUrls: ['./dmp-wizard.component.scss'], }) -export class DataManagementPlanWizardComponent implements OnInit { - constructor( - private dataManagementPlanService: DataManagementPlanService, - private language: TranslateService, - public snackBar: MatSnackBar, - public route: ActivatedRoute, - private router: Router - ) { } +export class DataManagementPlanWizardComponent implements OnInit, IBreadCrumbComponent { + breadCrumbs: Observable; + constructor( + private dataManagementPlanService: DataManagementPlanService, + private language: TranslateService, + public snackBar: MatSnackBar, + public route: ActivatedRoute, + private router: Router + ) { } - itemId: string - dataManagementPlan: DataManagementPlanModel; - formGroup: FormGroup - isClone: boolean + itemId: string + dataManagementPlan: DataManagementPlanModel; + formGroup: FormGroup + isClone: boolean - ngOnInit(): void { - this.route.params.subscribe((params: Params) => { - this.itemId = params['id']; - this.dataManagementPlanService.getSingle(this.itemId).map(data => data as DataManagementPlanModel) - .subscribe(data => { - this.dataManagementPlan = JsonSerializer.fromJSONObject(data, DataManagementPlanModel); - this.isClone = this.route.snapshot.data.clone; - if(this.isClone == false) this.dataManagementPlan.version = this.dataManagementPlan.version + 1; - this.formGroup = this.dataManagementPlan.buildForm(); - - }); - }) + ngOnInit(): void { + + this.route.params.subscribe((params: Params) => { + this.itemId = params['id']; + this.dataManagementPlanService.getSingle(this.itemId).map(data => data as DataManagementPlanModel) + .subscribe(data => { + this.dataManagementPlan = JsonSerializer.fromJSONObject(data, DataManagementPlanModel); + this.isClone = this.route.snapshot.data.clone; + if (this.isClone == false) this.dataManagementPlan.version = this.dataManagementPlan.version + 1; + this.formGroup = this.dataManagementPlan.buildForm(); + + }); + }) + } + + + submit() { + if (this.isClone) { + this.dataManagementPlanService.clone(this.formGroup.getRawValue(), this.itemId).subscribe( + complete => this.onCallbackSuccess(), + error => this.onCallbackError(error) + ); + } else { + this.dataManagementPlanService.newVersion(this.formGroup.getRawValue(), this.itemId).subscribe( + complete => this.onCallbackSuccess(), + error => this.onCallbackError(error) + ); } + } + + onCallbackSuccess(): void { + this.snackBar.openFromComponent(SnackBarNotificationComponent, { + data: { message: 'GENERAL.SNACK-BAR.SUCCESSFUL-UPDATE', language: this.language }, + duration: 3000, + extraClasses: ['snackbar-success'] + }) + this.router.navigate(['/dmps']); + } + + onCallbackError(error: any) { + this.setErrorModel(error.error); + //this.validateAllFormFields(this.formGroup); + } + + public setErrorModel(errorModel: BaseErrorModel) { + Object.keys(errorModel).forEach(item => { + // (this.dataManagementPlan.errorModel)[item] = (errorModel)[item]; + }) + } - submit() { - if (this.isClone) { - this.dataManagementPlanService.clone(this.formGroup.value, this.itemId).subscribe( - complete => this.onCallbackSuccess(), - error => this.onCallbackError(error) - ); - } else { - this.dataManagementPlanService.newVersion(this.formGroup.value, this.itemId).subscribe( - complete => this.onCallbackSuccess(), - error => this.onCallbackError(error) - ); - } - } - - onCallbackSuccess(): void { - this.snackBar.openFromComponent(SnackBarNotificationComponent, { - data: { message: 'GENERAL.SNACK-BAR.SUCCESSFUL-UPDATE', language: this.language }, - duration: 3000, - extraClasses: ['snackbar-success'] - }) - this.router.navigate(['/dmps']); - } - - onCallbackError(error: any) { - this.setErrorModel(error.error); - //this.validateAllFormFields(this.formGroup); - } - - public setErrorModel(errorModel: BaseErrorModel) { - Object.keys(errorModel).forEach(item => { - // (this.dataManagementPlan.errorModel)[item] = (errorModel)[item]; - }) - } - - -} \ No newline at end of file +} diff --git a/dmp-frontend/src/app/dmps/wizard/editor/dmp-wizard-editor.component.html b/dmp-frontend/src/app/dmps/wizard/editor/dmp-wizard-editor.component.html index 8dcaa29f8..7ec69416c 100644 --- a/dmp-frontend/src/app/dmps/wizard/editor/dmp-wizard-editor.component.html +++ b/dmp-frontend/src/app/dmps/wizard/editor/dmp-wizard-editor.component.html @@ -3,7 +3,8 @@ - + {{baseErrorModel.label}} {{'GENERAL.VALIDATION.REQUIRED' | translate}} @@ -67,8 +68,9 @@ - - + + +

Associated Users

diff --git a/dmp-frontend/src/app/dmps/wizard/editor/dmp-wizard-editor.component.ts b/dmp-frontend/src/app/dmps/wizard/editor/dmp-wizard-editor.component.ts index 708a05cdf..4fb6774e9 100644 --- a/dmp-frontend/src/app/dmps/wizard/editor/dmp-wizard-editor.component.ts +++ b/dmp-frontend/src/app/dmps/wizard/editor/dmp-wizard-editor.component.ts @@ -19,170 +19,169 @@ import { TranslateService } from "@ngx-translate/core"; import { DataSource } from "@angular/cdk/table"; import { Observable } from "rxjs/Observable"; import { FormGroup } from '@angular/forms'; -import { AutoCompleteChipConfiguration } from "@app/shared/components/autocompleteChips/AutoCompleteChipConfiguration"; -import { BaseCriteria } from '@app/models/criteria/BaseCriteria'; +import { AutoCompleteChipConfiguration } from "../../../shared/components/autocompleteChips/AutoCompleteChipConfiguration"; +import { BaseCriteria } from '../../../models/criteria/BaseCriteria'; @Component({ - selector: 'app-dmp-wizard-editor-component', - templateUrl: 'dmp-wizard-editor.component.html', - styleUrls: ['./dmp-wizard-editor.component.scss'], - providers: [DataManagementPlanService, ExternalSourcesService, ProjectService], - encapsulation: ViewEncapsulation.None + selector: 'app-dmp-wizard-editor-component', + templateUrl: 'dmp-wizard-editor.component.html', + styleUrls: ['./dmp-wizard-editor.component.scss'], + encapsulation: ViewEncapsulation.None }) export class DataManagementPlanWizardEditorComponent implements AfterViewInit { - isNew = true; - @Input() formGroup: FormGroup = null; + isNew = true; + @Input() formGroup: FormGroup = null; - filteringOrganisationsAsync: boolean = false; - filteringResearchersAsync: boolean = false; - filteredProfilesAsync: boolean = false; - filteredOrganisations: ExternalSourcesItemModel[]; - filteredResearchers: ExternalSourcesItemModel[]; - filteredProfiles: DatasetProfileModel[]; + filteringOrganisationsAsync: boolean = false; + filteringResearchersAsync: boolean = false; + filteredProfilesAsync: boolean = false; + filteredOrganisations: ExternalSourcesItemModel[]; + filteredResearchers: ExternalSourcesItemModel[]; + filteredProfiles: DatasetProfileModel[]; - projectAutoCompleteConfiguration: AutoCompleteConfiguration; - organisationsAutoCompleteConfiguration: AutoCompleteChipConfiguration; - createNewVersion; - associatedUsers: Array - labelDisabled: boolean =false; + projectAutoCompleteConfiguration: AutoCompleteConfiguration; + organisationsAutoCompleteConfiguration: AutoCompleteChipConfiguration; + createNewVersion; + associatedUsers: Array + labelDisabled: boolean = false; - constructor( - private dataManagementPlanService: DataManagementPlanService, - private projectService: ProjectService, - private externalSourcesService: ExternalSourcesService, - private route: ActivatedRoute, - public snackBar: MatSnackBar, - public router: Router, - public language: TranslateService, - private _service: DataManagementPlanService - ) { + constructor( + private dataManagementPlanService: DataManagementPlanService, + private projectService: ProjectService, + private externalSourcesService: ExternalSourcesService, + private route: ActivatedRoute, + public snackBar: MatSnackBar, + public router: Router, + public language: TranslateService, + private _service: DataManagementPlanService + ) { + + } + + ngAfterViewInit() { + + let projectRequestItem: RequestItem = new RequestItem(); + projectRequestItem.criteria = new ProjectCriteria(); + this.projectAutoCompleteConfiguration = new AutoCompleteConfiguration(this.projectService.getWithExternal.bind(this.projectService), projectRequestItem); + + let organisationRequestItem: RequestItem = new RequestItem(); + organisationRequestItem.criteria = new BaseCriteria(); + this.organisationsAutoCompleteConfiguration = new AutoCompleteChipConfiguration(this.externalSourcesService.searchDMPOrganizations.bind(this.externalSourcesService), organisationRequestItem); + + this.route.data.subscribe(value => { + if (value.clone == false && this.formGroup.get("label").value) { + this.labelDisabled = true; + } + this.formGroup.controls["version"].disable(); + }) + } + + formSubmit(): void { + //this.touchAllFormFields(this.formGroup); + if (!this.isFormValid()) { return; } + this.onSubmit(); + } + + public isFormValid() { + return this.formGroup.valid; + } + + onSubmit(): void { + this.dataManagementPlanService.createDataManagementPlan(this.formGroup.getRawValue()).subscribe( + complete => this.onCallbackSuccess(), + error => this.onCallbackError(error) + ); + } + + onCallbackSuccess(): void { + this.snackBar.openFromComponent(SnackBarNotificationComponent, { + data: { message: this.isNew ? 'GENERAL.SNACK-BAR.SUCCESSFUL-CREATION' : 'GENERAL.SNACK-BAR.SUCCESSFUL-UPDATE', language: this.language }, + duration: 3000, + extraClasses: ['snackbar-success'] + }) + this.router.navigate(['/dmps']); + } + + onCallbackError(error: any) { + this.setErrorModel(error.error); + //this.validateAllFormFields(this.formGroup); + } + + public setErrorModel(errorModel: BaseErrorModel) { + Object.keys(errorModel).forEach(item => { + // (this.dataManagementPlan.errorModel)[item] = (errorModel)[item]; + }) + } + + public cancel(): void { + this.router.navigate(['/dmps']); + } + + filterOrganisations(value: string): void { + + this.filteredOrganisations = undefined; + if (value) { + this.filteringOrganisationsAsync = true; + + this.externalSourcesService.searchDMPOrganizations(value).subscribe(items => { + this.filteredOrganisations = items; + this.filteringOrganisationsAsync = false; + + // this.filteredOrganisations = items.filter((filteredObj: any) => { + // return this.objectsModel ? this.objectsModel.indexOf(filteredObj) < 0 : true; + // }); + + }); } + } - ngAfterViewInit() { + filterResearchers(value: string): void { - let projectRequestItem: RequestItem = new RequestItem(); - projectRequestItem.criteria = new ProjectCriteria(); - this.projectAutoCompleteConfiguration = new AutoCompleteConfiguration(this.projectService.getWithExternal.bind(this.projectService), projectRequestItem); + this.filteredResearchers = undefined; + if (value) { + this.filteringResearchersAsync = true; - let organisationRequestItem: RequestItem = new RequestItem(); - organisationRequestItem.criteria = new BaseCriteria(); - this.organisationsAutoCompleteConfiguration = new AutoCompleteChipConfiguration(this.externalSourcesService.searchDMPOrganizations.bind(this.externalSourcesService), organisationRequestItem); - - this.route.data.subscribe(value=>{ - if (value.clone==false && this.formGroup.get("label").value){ - this.labelDisabled = true; - } - this.formGroup.controls["version"].disable(); - }) + this.externalSourcesService.searchDMPResearchers({ criteria: { name: value, like: null } }).subscribe(items => { + this.filteredResearchers = items; + this.filteringResearchersAsync = false; + + // this.filteredOrganisations = items.filter((filteredObj: any) => { + // return this.objectsModel ? this.objectsModel.indexOf(filteredObj) < 0 : true; + // }); + + }); } + } - formSubmit(): void { - //this.touchAllFormFields(this.formGroup); - if (!this.isFormValid()) { return; } - this.onSubmit(); + filterProfiles(value: string): void { + + this.filteredProfiles = undefined; + if (value) { + this.filteredProfilesAsync = true; + + // this.externalSourcesService.searchDMPProfiles(value).subscribe(items => { + // this.filteredProfiles = items; + // this.filteredProfilesAsync = false; + + // // this.filteredOrganisations = items.filter((filteredObj: any) => { + // // return this.objectsModel ? this.objectsModel.indexOf(filteredObj) < 0 : true; + // // }); + + // }); + + const request = new RequestItem(); + let criteria = new DatasetProfileCriteria(); + criteria.like = value; + request.criteria = criteria; + this._service.searchDMPProfiles(request).subscribe(items => { + this.filteredProfiles = items; + this.filteredProfilesAsync = false; + }); } + } - public isFormValid() { - return this.formGroup.valid; - } - - onSubmit(): void { - this.dataManagementPlanService.createDataManagementPlan(this.formGroup.value).subscribe( - complete => this.onCallbackSuccess(), - error => this.onCallbackError(error) - ); - } - - onCallbackSuccess(): void { - this.snackBar.openFromComponent(SnackBarNotificationComponent, { - data: { message: this.isNew ? 'GENERAL.SNACK-BAR.SUCCESSFUL-CREATION' : 'GENERAL.SNACK-BAR.SUCCESSFUL-UPDATE', language: this.language }, - duration: 3000, - extraClasses: ['snackbar-success'] - }) - this.router.navigate(['/dmps']); - } - - onCallbackError(error: any) { - this.setErrorModel(error.error); - //this.validateAllFormFields(this.formGroup); - } - - public setErrorModel(errorModel: BaseErrorModel) { - Object.keys(errorModel).forEach(item => { - // (this.dataManagementPlan.errorModel)[item] = (errorModel)[item]; - }) - } - - public cancel(): void { - this.router.navigate(['/dmps']); - } - - filterOrganisations(value: string): void { - - this.filteredOrganisations = undefined; - if (value) { - this.filteringOrganisationsAsync = true; - - this.externalSourcesService.searchDMPOrganizations(value).subscribe(items => { - this.filteredOrganisations = items; - this.filteringOrganisationsAsync = false; - - // this.filteredOrganisations = items.filter((filteredObj: any) => { - // return this.objectsModel ? this.objectsModel.indexOf(filteredObj) < 0 : true; - // }); - - }); - - } - } - - filterResearchers(value: string): void { - - this.filteredResearchers = undefined; - if (value) { - this.filteringResearchersAsync = true; - - this.externalSourcesService.searchDMPResearchers(value).subscribe(items => { - this.filteredResearchers = items; - this.filteringResearchersAsync = false; - - // this.filteredOrganisations = items.filter((filteredObj: any) => { - // return this.objectsModel ? this.objectsModel.indexOf(filteredObj) < 0 : true; - // }); - - }); - } - } - - filterProfiles(value: string): void { - - this.filteredProfiles = undefined; - if (value) { - this.filteredProfilesAsync = true; - - // this.externalSourcesService.searchDMPProfiles(value).subscribe(items => { - // this.filteredProfiles = items; - // this.filteredProfilesAsync = false; - - // // this.filteredOrganisations = items.filter((filteredObj: any) => { - // // return this.objectsModel ? this.objectsModel.indexOf(filteredObj) < 0 : true; - // // }); - - // }); - - const request = new RequestItem(); - let criteria = new DatasetProfileCriteria(); - criteria.like = value; - request.criteria = criteria; - this._service.searchDMPProfiles(request).subscribe(items => { - this.filteredProfiles = items; - this.filteredProfilesAsync = false; - }); - } - } - -} \ No newline at end of file +} diff --git a/dmp-frontend/src/app/dmps/wizard/listing/dataset-wizard-listing.component.ts b/dmp-frontend/src/app/dmps/wizard/listing/dataset-wizard-listing.component.ts index b9a2a74d4..97f74830f 100644 --- a/dmp-frontend/src/app/dmps/wizard/listing/dataset-wizard-listing.component.ts +++ b/dmp-frontend/src/app/dmps/wizard/listing/dataset-wizard-listing.component.ts @@ -19,63 +19,62 @@ import { SelectionModel } from '@angular/cdk/collections'; @Component({ - selector: 'app-dataset-wizard-listing-component', - templateUrl: 'dataset-wizard-listing.component.html', - styleUrls: ['./dataset-wizard-listing.component.scss'], - providers: [DatasetService, DataManagementPlanService] + selector: 'app-dataset-wizard-listing-component', + templateUrl: 'dataset-wizard-listing.component.html', + styleUrls: ['./dataset-wizard-listing.component.scss'], }) export class DatasetWizardListingComponent implements OnInit { - @ViewChild(MatPaginator) _paginator: MatPaginator; - @ViewChild(MatSort) sort: MatSort; - @ViewChild(DatasetCriteriaComponent) criteria: DatasetCriteriaComponent; + @ViewChild(MatPaginator) _paginator: MatPaginator; + @ViewChild(MatSort) sort: MatSort; + @ViewChild(DatasetCriteriaComponent) criteria: DatasetCriteriaComponent; - titlePrefix: String; - datasets: DatasetListingModel[] = [] + titlePrefix: String; + datasets: DatasetListingModel[] = [] - @Input() dmpId: String; - @Input() formGroup: FormGroup - selection = new SelectionModel(true, []); + @Input() dmpId: String; + @Input() formGroup: FormGroup + selection = new SelectionModel(true, []); - statuses = [ - { value: '0', viewValue: 'Active' }, - { value: '1', viewValue: 'Inactive' } - ]; + statuses = [ + { value: '0', viewValue: 'Active' }, + { value: '1', viewValue: 'Inactive' } + ]; - constructor( - private datasetService: DatasetService, - private router: Router, - private languageService: TranslateService, - public snackBar: MatSnackBar, - public route: ActivatedRoute, - public dataManagementPlanService: DataManagementPlanService - ) { + constructor( + private datasetService: DatasetService, + private router: Router, + private languageService: TranslateService, + public snackBar: MatSnackBar, + public route: ActivatedRoute, + public dataManagementPlanService: DataManagementPlanService + ) { - } + } - ngOnInit() { - this.route.params.subscribe((params: Params) => { - if (this.dmpId != null) - if(params['dmpLabel']!=undefined) - this.titlePrefix ="for " + params['dmpLabel']; - }); - let request: DataTableRequest = new DataTableRequest(null, null, null); - request.criteria = new DatasetCriteria(); - request.criteria.dmpIds = [this.dmpId]; - this.datasetService.getPaged(request).subscribe(items => { - this.datasets = JsonSerializer.fromJSONArray(items.data, DatasetListingModel) - }) - this.formGroup.addControl("datasets", new FormBuilder().array(new Array())) - } + ngOnInit() { + this.route.params.subscribe((params: Params) => { + if (this.dmpId != null) + if (params['dmpLabel'] != undefined) + this.titlePrefix = "for " + params['dmpLabel']; + }); + let request: DataTableRequest = new DataTableRequest(null, null, null); + request.criteria = new DatasetCriteria(); + request.criteria.dmpIds = [this.dmpId]; + this.datasetService.getPaged(request).subscribe(items => { + this.datasets = JsonSerializer.fromJSONArray(items.data, DatasetListingModel) + }) + this.formGroup.addControl("datasets", new FormBuilder().array(new Array())) + } - selectionChanged(event,selectedItems) { - this.formGroup.removeControl("datasets"); - this.formGroup.addControl("datasets", new FormBuilder().array(new Array())) - selectedItems.selectedOptions.selected.forEach(element => { - (this.formGroup.get("datasets")).push(new FormBuilder().group({ id: element.value })) - }); - } + selectionChanged(event, selectedItems) { + this.formGroup.removeControl("datasets"); + this.formGroup.addControl("datasets", new FormBuilder().array(new Array())) + selectedItems.selectedOptions.selected.forEach(element => { + (this.formGroup.get("datasets")).push(new FormBuilder().group({ id: element.value })) + }); + } } diff --git a/dmp-frontend/src/app/entities/common/rule.ts b/dmp-frontend/src/app/entities/common/rule.ts deleted file mode 100644 index 687c665b9..000000000 --- a/dmp-frontend/src/app/entities/common/rule.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { Injectable } from '@angular/core'; -import {RuleStyle} from './rulestyle'; - -export class Rule { - ruleType: string; - ruleStyle: RuleStyle; - method: string; - ordinal: number; - target: string; - range: any[2]; - ruleText: string; - regex: string; - methodJs:string; -} \ No newline at end of file diff --git a/dmp-frontend/src/app/entities/common/rulestyle.ts b/dmp-frontend/src/app/entities/common/rulestyle.ts deleted file mode 100644 index 5097a69db..000000000 --- a/dmp-frontend/src/app/entities/common/rulestyle.ts +++ /dev/null @@ -1,6 +0,0 @@ - -export enum RuleStyle { - existence, - regex, - customValidation -} \ No newline at end of file diff --git a/dmp-frontend/src/app/entities/model/attribute.ts b/dmp-frontend/src/app/entities/model/attribute.ts deleted file mode 100644 index 0ba075666..000000000 --- a/dmp-frontend/src/app/entities/model/attribute.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { Injectable } from '@angular/core'; -import {Rule} from '../common/rule'; -import { Source } from './source'; - -@Injectable() -export class Attribute { - id: string; - datatype:string; - ordinal:number; - defaultValue: any; - multiplicityMin: number; - multiplicityMax: number; - validationType: any; - validation : Rule[]; - sources: Source[]; - url: string; -} diff --git a/dmp-frontend/src/app/entities/model/param.ts b/dmp-frontend/src/app/entities/model/param.ts deleted file mode 100644 index 7ebecb455..000000000 --- a/dmp-frontend/src/app/entities/model/param.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { Injectable } from '@angular/core'; - -@Injectable() -export class Param { - key: string; - value: string; - - constructor(){ - - } -} \ No newline at end of file diff --git a/dmp-frontend/src/app/entities/model/section.ts b/dmp-frontend/src/app/entities/model/section.ts deleted file mode 100644 index 9234283d8..000000000 --- a/dmp-frontend/src/app/entities/model/section.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { Injectable } from '@angular/core'; - -@Injectable() -export class Section { - title: string; - description: string; - id: string; - defaultVisibility: boolean; - ordinal: number; - page: number; -} \ No newline at end of file diff --git a/dmp-frontend/src/app/entities/model/source.ts b/dmp-frontend/src/app/entities/model/source.ts deleted file mode 100644 index b2df7d217..000000000 --- a/dmp-frontend/src/app/entities/model/source.ts +++ /dev/null @@ -1,13 +0,0 @@ - -import { Injectable } from '@angular/core'; -import { Param } from './param'; - -@Injectable() -export class Source { - id: string; - sourceType:string; - refid: string; - behaviour: string; - params: Param[]; - -} \ No newline at end of file diff --git a/dmp-frontend/src/app/form/dynamic-fields/dynamic-field-autocomplete/autocomplete-remote.component.html b/dmp-frontend/src/app/form/dynamic-fields/dynamic-field-autocomplete/autocomplete-remote.component.html index d2834228f..1092b89e9 100644 --- a/dmp-frontend/src/app/form/dynamic-fields/dynamic-field-autocomplete/autocomplete-remote.component.html +++ b/dmp-frontend/src/app/form/dynamic-fields/dynamic-field-autocomplete/autocomplete-remote.component.html @@ -1,3 +1,3 @@ -
- -
\ No newline at end of file + + \ No newline at end of file diff --git a/dmp-frontend/src/app/form/dynamic-fields/dynamic-field-autocomplete/autocomplete-remote.component.spec.ts b/dmp-frontend/src/app/form/dynamic-fields/dynamic-field-autocomplete/autocomplete-remote.component.spec.ts deleted file mode 100644 index b49ca7112..000000000 --- a/dmp-frontend/src/app/form/dynamic-fields/dynamic-field-autocomplete/autocomplete-remote.component.spec.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; - -import { AutocompleteRemoteComponent } from './autocomplete-remote.component'; - -describe('AutocompleteRemoteComponent', () => { - let component: AutocompleteRemoteComponent; - let fixture: ComponentFixture; - - beforeEach(async(() => { - TestBed.configureTestingModule({ - declarations: [ AutocompleteRemoteComponent ] - }) - .compileComponents(); - })); - - beforeEach(() => { - fixture = TestBed.createComponent(AutocompleteRemoteComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should be created', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/dmp-frontend/src/app/form/dynamic-fields/dynamic-field-autocomplete/autocomplete-remote.component.ts b/dmp-frontend/src/app/form/dynamic-fields/dynamic-field-autocomplete/autocomplete-remote.component.ts index 294f4a41b..30a17d46f 100644 --- a/dmp-frontend/src/app/form/dynamic-fields/dynamic-field-autocomplete/autocomplete-remote.component.ts +++ b/dmp-frontend/src/app/form/dynamic-fields/dynamic-field-autocomplete/autocomplete-remote.component.ts @@ -1,7 +1,12 @@ import { Field } from '../../../models/Field'; import { Component, OnInit, Input, Output, EventEmitter, forwardRef, ViewEncapsulation } from '@angular/core'; import { ControlValueAccessor, FormControl, FormGroup, NG_VALUE_ACCESSOR, Validators } from '@angular/forms'; - +import { DatasetProfileService } from '../../../services/dataset-profile.service'; +import { ActivatedRoute } from '@angular/router'; +import { AutoCompleteConfiguration } from '../../../shared/components/autocomplete/AutoCompleteConfiguration'; +import { RequestItem } from '../../../models/criteria/RequestItem'; +import { BaseCriteria } from '../../../models/criteria/BaseCriteria'; +import { AutocompleteLookupItem } from '../../../models/auto-complete/AutocompleteLookupItem'; declare var $: any; @@ -9,83 +14,49 @@ declare var $: any; selector: 'df-autocomplete', templateUrl: './autocomplete-remote.component.html', styleUrls: ['./autocomplete-remote.component.css'], - encapsulation: ViewEncapsulation.None + encapsulation: ViewEncapsulation.None, }) - - - export class AutocompleteRemoteComponent implements OnInit/* , ControlValueAccessor */ { @Input() field: Field; + @Input() disabled = false @Input() form: FormGroup; - private textFormGroup = new FormGroup({ text: new FormControl("") }); + private autoCompleteConfiguration: AutoCompleteConfiguration; private loading: boolean; + private datasetId; values: any[] = new Array(); typeaheadMS: number = 1400; - constructor() { - + constructor(private datasetProfileService: DatasetProfileService, route: ActivatedRoute) { + this.datasetId = route.snapshot.params['id']; } ngOnInit() { - let valueChanges = this.textFormGroup.controls['text'].valueChanges.share(); - valueChanges.subscribe(searchTerm => { - this.loading = true; - if (this.form.controls['text'].value) - this.resetFormGroupValue(); - }); - - valueChanges - .debounceTime(this.typeaheadMS) - .subscribe(searchTerm => { - if (typeof searchTerm === 'string') { - this.updateByQuery(searchTerm) - } - }); - + let autocompleteRequestItem: RequestItem = new RequestItem(); + autocompleteRequestItem.criteria = new AutocompleteLookupItem(); + autocompleteRequestItem.criteria.fieldID = this.field.id; + autocompleteRequestItem.criteria.profileID = this.datasetId; + this.autoCompleteConfiguration = new AutoCompleteConfiguration(this.datasetProfileService.queryAutocomplete.bind(this.datasetProfileService), autocompleteRequestItem); } - - resetFormGroupValue() { - this.form.patchValue({ value: null }, { emitEvent: false }); + displayWith(item: any) { + if (!item) return null; + if (typeof item === 'string') item = this.transform(item); + return item["label"]; } - - updateByQuery(query: string) { - // this.serverService.getThroughProxy(this.field.data.url, query).subscribe( - // response => { - // this.values.length = 0; - // /* response.data.forEach(element => { - // this.values.push(element.attributes.name); - // }); */ - // }, - // error => { - // } - // ); + assign(item: any) { + if (!item) return null; + return this.transform(item); } - - onChange: any = () => { }; - onTouched: any = () => { }; - - - registerOnChange(fn) { - this.onChange = fn; + transform(item: any) { + if (typeof item === 'string') return JSON.parse(item) + else return JSON.stringify(item); } - - registerOnTouched(fn) { - this.onTouched = fn; - } - - /* writeValue(value) { - if (value) { - this.value = value; - } - } */ - } diff --git a/dmp-frontend/src/app/form/dynamic-fields/dynamic-field-boolean-decision/dynamic-field-boolean-decision.component.ts b/dmp-frontend/src/app/form/dynamic-fields/dynamic-field-boolean-decision/dynamic-field-boolean-decision.component.ts index 1535432af..1d70c749f 100644 --- a/dmp-frontend/src/app/form/dynamic-fields/dynamic-field-boolean-decision/dynamic-field-boolean-decision.component.ts +++ b/dmp-frontend/src/app/form/dynamic-fields/dynamic-field-boolean-decision/dynamic-field-boolean-decision.component.ts @@ -1,21 +1,20 @@ import { FormGroup } from '@angular/forms'; import { Field } from '../../../models/Field'; import { Component, Input, OnInit, ViewEncapsulation } from '@angular/core'; -import { FieldBase } from '../field-base'; @Component({ - selector: 'df-booleanDecision', - templateUrl: './dynamic-field-boolean-decision.component.html', - styleUrls: [ - './dynamic-field-boolean-decision.component.css' - ], - encapsulation: ViewEncapsulation.None + selector: 'df-booleanDecision', + templateUrl: './dynamic-field-boolean-decision.component.html', + styleUrls: [ + './dynamic-field-boolean-decision.component.css' + ], + encapsulation: ViewEncapsulation.None }) -export class DynamicFieldBooleanDecisionComponent implements OnInit{ - @Input() field: Field; - @Input() form: FormGroup; +export class DynamicFieldBooleanDecisionComponent implements OnInit { + @Input() field: Field; + @Input() form: FormGroup; - ngOnInit(){ + ngOnInit() { - } -} \ No newline at end of file + } +} diff --git a/dmp-frontend/src/app/form/dynamic-fields/dynamic-field-checkbox/dynamic-field-checkbox.ts b/dmp-frontend/src/app/form/dynamic-fields/dynamic-field-checkbox/dynamic-field-checkbox.ts index 68da3eb8e..e676abf16 100644 --- a/dmp-frontend/src/app/form/dynamic-fields/dynamic-field-checkbox/dynamic-field-checkbox.ts +++ b/dmp-frontend/src/app/form/dynamic-fields/dynamic-field-checkbox/dynamic-field-checkbox.ts @@ -1,19 +1,17 @@ import { Field } from '../../../models/Field'; import { FormGroup } from '@angular/forms'; -import { Component, Input, ViewEncapsulation } from '@angular/core'; -import { FieldBase } from '../field-base'; +import { Component, Input, ViewEncapsulation, OnInit } from '@angular/core'; @Component({ - selector: 'df-checkbox', - templateUrl: './dynamic-field-checkbox.html', - styleUrls: [ - './dynamic-field-checkbox.css' - ], - encapsulation: ViewEncapsulation.None + selector: 'df-checkbox', + templateUrl: './dynamic-field-checkbox.html', + styleUrls: [ + './dynamic-field-checkbox.css' + ], + encapsulation: ViewEncapsulation.None }) export class DynamicFieldCheckBoxComponent { - @Input() field: Field; - @Input() form: FormGroup; + @Input() field: Field; + @Input() form: FormGroup; - -} \ No newline at end of file +} diff --git a/dmp-frontend/src/app/form/dynamic-fields/dynamic-field-dropdown/dynamic-field-dropdown.ts b/dmp-frontend/src/app/form/dynamic-fields/dynamic-field-dropdown/dynamic-field-dropdown.ts index d18c78f35..a38e75bd1 100644 --- a/dmp-frontend/src/app/form/dynamic-fields/dynamic-field-dropdown/dynamic-field-dropdown.ts +++ b/dmp-frontend/src/app/form/dynamic-fields/dynamic-field-dropdown/dynamic-field-dropdown.ts @@ -1,21 +1,20 @@ import { FormGroup } from '@angular/forms'; import { Field } from '../../../models/Field'; import { Component, Input, OnInit, ViewEncapsulation } from '@angular/core'; -import { FieldBase } from '../field-base'; @Component({ - selector: 'df-dropdown', - templateUrl: './dynamic-field-dropdown.html', - styleUrls: [ - './dynamic-field-dropdown.css' - ], - encapsulation: ViewEncapsulation.None + selector: 'df-dropdown', + templateUrl: './dynamic-field-dropdown.html', + styleUrls: [ + './dynamic-field-dropdown.css' + ], + encapsulation: ViewEncapsulation.None }) export class DynamicFieldDropdownComponent implements OnInit { - @Input() field: Field; - @Input() form: FormGroup; + @Input() field: Field; + @Input() form: FormGroup; - ngOnInit() { + ngOnInit() { - } -} \ No newline at end of file + } +} diff --git a/dmp-frontend/src/app/form/dynamic-fields/dynamic-field-radiobox/dynamic-field-radiobox.component.ts b/dmp-frontend/src/app/form/dynamic-fields/dynamic-field-radiobox/dynamic-field-radiobox.component.ts index c107b156d..9bf45b962 100644 --- a/dmp-frontend/src/app/form/dynamic-fields/dynamic-field-radiobox/dynamic-field-radiobox.component.ts +++ b/dmp-frontend/src/app/form/dynamic-fields/dynamic-field-radiobox/dynamic-field-radiobox.component.ts @@ -1,21 +1,21 @@ import { FormGroup } from '@angular/forms'; import { Field } from '../../../models/Field'; import { Component, Input, OnInit, ViewEncapsulation } from '@angular/core'; -import { FieldBase } from '../field-base'; + @Component({ - selector: 'df-radiobox', - templateUrl: './dynamic-field-radiobox.component.html', - styleUrls: [ - './dynamic-field-radiobox.component.css' - ], - encapsulation: ViewEncapsulation.None + selector: 'df-radiobox', + templateUrl: './dynamic-field-radiobox.component.html', + styleUrls: [ + './dynamic-field-radiobox.component.css' + ], + encapsulation: ViewEncapsulation.None }) export class DynamicFieldRadioBoxComponent implements OnInit { - @Input() field: Field; - @Input() form: FormGroup; + @Input() field: Field; + @Input() form: FormGroup; - ngOnInit() { + ngOnInit() { - } -} \ No newline at end of file + } +} diff --git a/dmp-frontend/src/app/form/dynamic-fields/dynamic-form-field.component.ts b/dmp-frontend/src/app/form/dynamic-fields/dynamic-form-field.component.ts index f12fa47e8..b9befd157 100644 --- a/dmp-frontend/src/app/form/dynamic-fields/dynamic-form-field.component.ts +++ b/dmp-frontend/src/app/form/dynamic-fields/dynamic-form-field.component.ts @@ -1,55 +1,51 @@ -import { VisibilityRulesService } from '../../visibility-rules/visibility-rules.service'; -import { VisibilityRuleSource } from '../../visibility-rules/models/VisibilityRuleSource'; import { Field } from '../../models/Field'; import { Component, Input, OnInit, ViewEncapsulation } from '@angular/core'; import { FormGroup, ValidatorFn, AbstractControl, Validators } from '@angular/forms'; import { ActivatedRoute } from '@angular/router'; - -import { FieldBase } from './field-base'; -import { RuleStyle } from '../../entities/common/rulestyle'; +import { VisibilityRulesService } from '../../utilities/visibility-rules/visibility-rules.service'; @Component({ - selector: 'df-field', - templateUrl: './dynamic-form-field.component.html', - // styles: ['.checkBoxLabelCustom {font-weight: 700;}'] - styleUrls: [ - './dynamic-form-field.component.css' - ], - encapsulation: ViewEncapsulation.None + selector: 'df-field', + templateUrl: './dynamic-form-field.component.html', + // styles: ['.checkBoxLabelCustom {font-weight: 700;}'] + styleUrls: [ + './dynamic-form-field.component.css' + ], + encapsulation: ViewEncapsulation.None }) -export class DynamicFormFieldComponent implements OnInit{ - @Input() field: Field; - @Input() form: FormGroup; - @Input() pathName:string; - @Input() path:string; - - constructor(private route: ActivatedRoute,private visibilityRulesService:VisibilityRulesService) { } +export class DynamicFormFieldComponent implements OnInit { + @Input() field: Field; + @Input() form: FormGroup; + @Input() pathName: string; + @Input() path: string; - ngOnInit(){ - this.form.get('value').valueChanges.subscribe(item => { - this.visibilityRulesService.updateValueAndVisibility(this.field.id) - }) - } + constructor(private route: ActivatedRoute, private visibilityRulesService: VisibilityRulesService) { } - ngOnChanges(changeRecord) { - - } + ngOnInit() { + this.form.get('value').valueChanges.subscribe(item => { + this.visibilityRulesService.updateValueAndVisibility(this.field.id) + }) + } - clearInput(){ - } + ngOnChanges(changeRecord) { - get isValid() { - return this.form.get("value").valid; - } - get isValidRequired() { - return this.form.get("value").hasError("required"); - } - get isValidPattern() { - return this.form.get("value").hasError("pattern"); - } - get isValidCustom() { - return this.form.get("value").hasError("forbiddenName"); - } -} \ No newline at end of file + } + + clearInput() { + } + + get isValid() { + return this.form.get("value").valid; + } + get isValidRequired() { + return this.form.get("value").hasError("required"); + } + get isValidPattern() { + return this.form.get("value").hasError("pattern"); + } + get isValidCustom() { + return this.form.get("value").hasError("forbiddenName"); + } +} diff --git a/dmp-frontend/src/app/form/dynamic-fields/field-base.ts b/dmp-frontend/src/app/form/dynamic-fields/field-base.ts deleted file mode 100644 index 21882a23f..000000000 --- a/dmp-frontend/src/app/form/dynamic-fields/field-base.ts +++ /dev/null @@ -1,51 +0,0 @@ -import { Rule } from '../../entities/common/rule'; -import { Attribute } from '../../entities/model/attribute'; - -export class FieldBase{ - value: T; - key: string; - label: string; - required:boolean; - order:number; - rules: Rule[]; - visible: boolean | string; - controlType:string; - group:string; - description:string; - attributes: Attribute; - regex:string; - url: string; - datatype: string; - - constructor(options: { - value?: T, - key?: string, - label?: string, - required?:boolean, - order?: number, - rules?: Rule[], - visible?: boolean | string, - controlType?: string - group?: string - description?: string, - attributes?: Attribute, - regex?:string, - url?: string, - datatype?:string - } = {}) { - this.value = options.value; - this.key = options.key || ''; - this.label = options.label || ''; - this.required = !! options.required; - this.order = options.order === undefined ? 1 : options.order; - this.rules = options.rules; - this.visible = options.visible; - this.controlType = options.controlType || ''; - this.group = options.group || ''; - this.description = options.description || ''; - this.attributes = options.attributes || new Attribute(); - this.regex = options.regex || ''; - this.url = options.url || ""; - this.datatype = options.datatype || ""; - } -} \ No newline at end of file diff --git a/dmp-frontend/src/app/form/dynamic-form-composite-field/dynamic-form-composite-field.ts b/dmp-frontend/src/app/form/dynamic-form-composite-field/dynamic-form-composite-field.ts index f90ca0daf..02cddeadd 100644 --- a/dmp-frontend/src/app/form/dynamic-form-composite-field/dynamic-form-composite-field.ts +++ b/dmp-frontend/src/app/form/dynamic-form-composite-field/dynamic-form-composite-field.ts @@ -1,7 +1,6 @@ -import { VisibilityRulesService } from '../../visibility-rules/visibility-rules.service'; +import { VisibilityRulesService } from '../../utilities/visibility-rules/visibility-rules.service'; import { CompositeField } from '../../models/CompositeField'; import { FormGroup, FormArray } from '@angular/forms'; -import { Section } from '../../entities/model/section'; import { Component, Input, OnInit, ViewEncapsulation } from '@angular/core'; import { Field } from '../../models/Field'; @Component({ @@ -30,5 +29,5 @@ export class DynamicFormCompositeFieldComponent implements OnInit { ((this.form.get("fields").get('' + fieldIndex).get('multiplicityItems'))).push(field.buildForm()); } - -} \ No newline at end of file + +} diff --git a/dmp-frontend/src/app/form/dynamic-form-group/dynamic-form-group.component.html b/dmp-frontend/src/app/form/dynamic-form-group/dynamic-form-group.component.html index d202b56e9..bab9a0d3c 100644 --- a/dmp-frontend/src/app/form/dynamic-form-group/dynamic-form-group.component.html +++ b/dmp-frontend/src/app/form/dynamic-form-group/dynamic-form-group.component.html @@ -1,10 +1,6 @@
-
- +
diff --git a/dmp-frontend/src/app/form/dynamic-form-group/dynamic-form-group.component.ts b/dmp-frontend/src/app/form/dynamic-form-group/dynamic-form-group.component.ts index e7e0b1331..4e0c0e301 100644 --- a/dmp-frontend/src/app/form/dynamic-form-group/dynamic-form-group.component.ts +++ b/dmp-frontend/src/app/form/dynamic-form-group/dynamic-form-group.component.ts @@ -1,9 +1,8 @@ -import { VisibilityRulesService } from '../../visibility-rules/visibility-rules.service'; +import { VisibilityRulesService } from '../../utilities/visibility-rules/visibility-rules.service'; import { FieldGroup } from '../../models/FieldGroup'; import { Component, Input, OnInit, ViewEncapsulation } from '@angular/core'; import { FormGroup, Validators, FormControl, FormArray } from '@angular/forms'; import { NgForm } from '@angular/forms'; -import { Rule } from '../../entities/common/rule'; import { CompositeField } from '../../models/CompositeField'; diff --git a/dmp-frontend/src/app/form/dynamic-form-section/dynamic-form-section.html b/dmp-frontend/src/app/form/dynamic-form-section/dynamic-form-section.html index 44ceeb416..a238ea2f7 100644 --- a/dmp-frontend/src/app/form/dynamic-form-section/dynamic-form-section.html +++ b/dmp-frontend/src/app/form/dynamic-form-section/dynamic-form-section.html @@ -1,38 +1,3 @@ - - - -
@@ -46,12 +11,6 @@ - -
@@ -64,13 +23,13 @@
+
+ + + +
-
- - - -
diff --git a/dmp-frontend/src/app/form/dynamic-form-section/dynamic-form-section.ts b/dmp-frontend/src/app/form/dynamic-form-section/dynamic-form-section.ts index 7a6901833..f3075af11 100644 --- a/dmp-frontend/src/app/form/dynamic-form-section/dynamic-form-section.ts +++ b/dmp-frontend/src/app/form/dynamic-form-section/dynamic-form-section.ts @@ -1,8 +1,8 @@ -import { VisibilityRulesService } from '../../visibility-rules/visibility-rules.service'; +import { VisibilityRulesService } from '../../utilities/visibility-rules/visibility-rules.service'; import { FormGroup, Form, FormArray } from '@angular/forms'; import { Component, Input, OnInit, ViewEncapsulation } from '@angular/core'; import { CompositeField } from '../../models/CompositeField'; -import { Section } from '@app/models/Section'; +import { Section } from '../../models/Section'; @Component({ @@ -33,9 +33,9 @@ export class DynamicFormSectionComponent implements OnInit { isVisible(pathname: string, fieldSet: CompositeField): boolean { if (!this.visibilityRulesService.isElementVisible(pathname, fieldSet.id)) return false; for (var i = 0; i < fieldSet.fields.length; i++) { - if (!this.visibilityRulesService.isElementVisible(pathname+'.fields.'+i, fieldSet.fields[i].id)) - return false; + if (this.visibilityRulesService.isElementVisible(pathname + '.fields.' + i, fieldSet.fields[i].id)) + return true; } - return true; + return false; } -} \ No newline at end of file +} diff --git a/dmp-frontend/src/app/form/dynamic-form.module.ts b/dmp-frontend/src/app/form/dynamic-form.module.ts index 31b5dc0e8..7d55a0c30 100644 --- a/dmp-frontend/src/app/form/dynamic-form.module.ts +++ b/dmp-frontend/src/app/form/dynamic-form.module.ts @@ -1,6 +1,6 @@ import { TranslateHttpLoader } from '@ngx-translate/http-loader'; import { PaginationService } from '../services/pagination.service'; -import { VisibilityRulesService } from '../visibility-rules/visibility-rules.service'; +import { VisibilityRulesService } from '../utilities/visibility-rules/visibility-rules.service'; import { DynamicFieldCheckBoxComponent } from './dynamic-fields/dynamic-field-checkbox/dynamic-field-checkbox'; import { ProgressBarComponent } from './pprogress-bar/progress-bar.component'; import { TableOfContentsFieldComponent } from './tableOfContents/table-of-content-field/table-of-content-field.component'; @@ -8,16 +8,16 @@ import { DynamicFormSectionComponent } from './dynamic-form-section/dynamic-form import { DynamicFieldDropdownComponent } from './dynamic-fields/dynamic-field-dropdown/dynamic-field-dropdown'; import { AutocompleteRemoteComponent } from './dynamic-fields/dynamic-field-autocomplete/autocomplete-remote.component'; import { - TableOfContentsSectionComponent, + TableOfContentsSectionComponent, } from './tableOfContents/table-of-content-section/table-of-content-section.component'; import { TableOfContentsGroupComponent } from './tableOfContents/table-of-content-group/table-of-content-group.component'; import { - TableOfContentsFieldSetComponent, + TableOfContentsFieldSetComponent, } from './tableOfContents/table-of-content-fieldset/table-of-content-fieldset.component'; import { DynamicFieldRadioBoxComponent } from './dynamic-fields/dynamic-field-radiobox/dynamic-field-radiobox.component'; import { TableOfContentsComponent } from './tableOfContents/table-of-contents.component'; import { - DynamicFieldBooleanDecisionComponent, + DynamicFieldBooleanDecisionComponent, } from './dynamic-fields/dynamic-field-boolean-decision/dynamic-field-boolean-decision.component'; import { DynamicFormGroupComponent } from './dynamic-form-group/dynamic-form-group.component'; import { DynamicFormCompositeFieldComponent } from './dynamic-form-composite-field/dynamic-form-composite-field'; @@ -29,69 +29,73 @@ import { HttpClient, HttpClientModule } from '@angular/common/http'; import { FormsModule, ReactiveFormsModule } from '@angular/forms'; import { CommonModule } from '@angular/common'; import { NgModule } from "@angular/core"; +import { DatasetProfileAdmin } from '../services/datasetProfileAdmin/datasetProfileAfmin.service'; +import { DatasetProfileService } from '../services/dataset-profile.service'; @NgModule({ - imports: [ - CommonModule, - FormsModule, - HttpClientModule, - SharedModule, - ReactiveFormsModule, - TranslateModule.forRoot({ - loader: { - provide: TranslateLoader, - useFactory: HttpLoaderFactory, - deps: [HttpClient] - } - }), - ], + imports: [ + CommonModule, + FormsModule, + HttpClientModule, + SharedModule, + ReactiveFormsModule, + TranslateModule.forRoot({ + loader: { + provide: TranslateLoader, + useFactory: HttpLoaderFactory, + deps: [HttpClient] + } + }), + ], - declarations: [ - DynamicFormComponent, - DynamicFormFieldComponent, - DynamicFormGroupComponent, - DynamicFormCompositeFieldComponent, - DynamicFieldBooleanDecisionComponent, - DynamicFieldRadioBoxComponent, - TableOfContentsComponent, - TableOfContentsFieldSetComponent, - TableOfContentsGroupComponent, - TableOfContentsSectionComponent, - AutocompleteRemoteComponent, - DynamicFieldDropdownComponent, - DynamicFormSectionComponent, - TableOfContentsFieldComponent, - ProgressBarComponent, - DynamicFieldCheckBoxComponent, - ], + declarations: [ + DynamicFormComponent, + DynamicFormFieldComponent, + DynamicFormGroupComponent, + DynamicFormCompositeFieldComponent, + DynamicFieldBooleanDecisionComponent, + DynamicFieldRadioBoxComponent, + TableOfContentsComponent, + TableOfContentsFieldSetComponent, + TableOfContentsGroupComponent, + TableOfContentsSectionComponent, + AutocompleteRemoteComponent, + DynamicFieldDropdownComponent, + DynamicFormSectionComponent, + TableOfContentsFieldComponent, + ProgressBarComponent, + DynamicFieldCheckBoxComponent, + ], - exports: [ - DynamicFormComponent, - DynamicFormFieldComponent, - DynamicFormGroupComponent, - DynamicFormCompositeFieldComponent, - DynamicFieldBooleanDecisionComponent, - DynamicFieldRadioBoxComponent, - TableOfContentsComponent, - TableOfContentsFieldSetComponent, - TableOfContentsGroupComponent, - TableOfContentsSectionComponent, - AutocompleteRemoteComponent, - DynamicFieldDropdownComponent, - DynamicFormSectionComponent, - TableOfContentsFieldComponent, - ProgressBarComponent, - DynamicFieldCheckBoxComponent, - ], - providers:[ - VisibilityRulesService, - PaginationService - ] + exports: [ + DynamicFormComponent, + DynamicFormFieldComponent, + DynamicFormGroupComponent, + DynamicFormCompositeFieldComponent, + DynamicFieldBooleanDecisionComponent, + DynamicFieldRadioBoxComponent, + TableOfContentsComponent, + TableOfContentsFieldSetComponent, + TableOfContentsGroupComponent, + TableOfContentsSectionComponent, + AutocompleteRemoteComponent, + DynamicFieldDropdownComponent, + DynamicFormSectionComponent, + TableOfContentsFieldComponent, + ProgressBarComponent, + DynamicFieldCheckBoxComponent, + ], + providers: [ + VisibilityRulesService, + PaginationService, + DatasetProfileService, + DatasetProfileAdmin + ] }) export class DynamicFormModule { } export function HttpLoaderFactory(httpClient: HttpClient) { - return new TranslateHttpLoader(httpClient, 'assets/lang/', '.json'); -} \ No newline at end of file + return new TranslateHttpLoader(httpClient, 'assets/lang/', '.json'); +} diff --git a/dmp-frontend/src/app/form/dynamic-form/dynamic-form.component.html b/dmp-frontend/src/app/form/dynamic-form/dynamic-form.component.html index 205fc78e8..3e913d2d6 100644 --- a/dmp-frontend/src/app/form/dynamic-form/dynamic-form.component.html +++ b/dmp-frontend/src/app/form/dynamic-form/dynamic-form.component.html @@ -39,7 +39,6 @@
--> -
- - - - - +
+
+ + +
+
+ + +
+
+ + +
+
+
+
+ +
+
+
\ No newline at end of file diff --git a/dmp-frontend/src/app/homepage/homepage.component.ts b/dmp-frontend/src/app/homepage/homepage.component.ts index 0d474a5e7..80d08027c 100644 --- a/dmp-frontend/src/app/homepage/homepage.component.ts +++ b/dmp-frontend/src/app/homepage/homepage.component.ts @@ -3,13 +3,12 @@ import { Router, ActivatedRoute } from '@angular/router'; import { DashboardService } from '../../app/services/dashboard/dashboard.service'; import { DashboardStatisticsModel } from '../models/dashboard/DashboardStatisticsModel'; import { JsonSerializer } from '../utilities/JsonSerializer'; -import { AuthService } from '@app/services/auth/auth.service'; +import { AuthService } from '../services/auth/auth.service'; @Component({ selector: 'homepage', templateUrl: './homepage.component.html', styleUrls: ['./homepage.component.css'], - providers: [] }) export class HomepageComponent implements OnInit { @@ -48,4 +47,4 @@ export class HomepageComponent implements OnInit { return !(!this.authentication.current()) } -} \ No newline at end of file +} diff --git a/dmp-frontend/src/app/invitation-accepted/invitation-accepted.component.ts b/dmp-frontend/src/app/invitation-accepted/invitation-accepted.component.ts deleted file mode 100644 index 5ed4bdbbd..000000000 --- a/dmp-frontend/src/app/invitation-accepted/invitation-accepted.component.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { JsonSerializer } from '../utilities/JsonSerializer'; -import { UserInvitationCriteria } from '../models/criteria/invitation/UserInvitationCriteria'; -import { RequestItem } from '../models/criteria/RequestItem'; -import { Invitation } from '../models/invitation/Invitation'; -import { InvitationService } from '../services/invitation/invitation.service'; -import { User } from '../models/invitation/User'; -import { Component, OnInit, Inject } from "@angular/core"; -import { FormGroup } from '@angular/forms'; -import { Params, ActivatedRoute, Router } from '@angular/router'; -import { MAT_DIALOG_DATA } from '@angular/material'; - -@Component({ - selector: 'app-invitation-accepted-component', - templateUrl: 'invitation-accepted.component.html', - providers: [InvitationService] - -}) -export class InvitationAcceptedComponent implements OnInit { - constructor( - private invitationService: InvitationService, - private route: ActivatedRoute, - public router: Router - ) { } - - ngOnInit(): void { - this.route.params.subscribe(params => { - let id = params["id"] - this.invitationService.exchange(id).subscribe(id=>{ - this.router.navigate(["dmps/edit/"+id]) - }) - } - ) - } -} \ No newline at end of file diff --git a/dmp-frontend/src/app/invitation/invitation.component.ts b/dmp-frontend/src/app/invitation/invitation.component.ts deleted file mode 100644 index b63c2f880..000000000 --- a/dmp-frontend/src/app/invitation/invitation.component.ts +++ /dev/null @@ -1,65 +0,0 @@ -import { JsonSerializer } from '../utilities/JsonSerializer'; -import { UserInvitationCriteria } from '../models/criteria/invitation/UserInvitationCriteria'; -import { RequestItem } from '../models/criteria/RequestItem'; -import { Invitation } from '../models/invitation/Invitation'; -import { InvitationService } from '../services/invitation/invitation.service'; -import { User } from '../models/invitation/User'; -import { Component, OnInit, Inject } from "@angular/core"; -import { FormGroup } from '@angular/forms'; -import { Params, ActivatedRoute, Router } from '@angular/router'; -import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material'; - -@Component({ - selector: 'app-invitation-component', - templateUrl: 'invitation.component.html', - providers: [InvitationService] - -}) -export class InvitationComponent implements OnInit { - - private formGroup: FormGroup; - - private filteredUsersAsync: boolean = false; - - private filteredUsers: User[]; - - constructor( - private invitationService: InvitationService, - private route: ActivatedRoute, - public router: Router, - public dialogRef: MatDialogRef, - @Inject(MAT_DIALOG_DATA) public data: any - ) { } - - ngOnInit(): void { - let invitation = new Invitation(); - invitation.dataManagementPlan = this.data.dmpId; - this.formGroup = invitation.buildForm(); - } - - - send(value: any) { - this.invitationService.inviteUsers(this.formGroup.value).subscribe( - null, null, () => this.dialogRef.close() - ); - } - - filterUsers(value: string): void { - this.filteredUsers = undefined; - if (value) { - this.filteredUsersAsync = true; - let request = new RequestItem(); - request.criteria = { like: value } - this.invitationService.getUsers(request).subscribe(items => { - this.filteredUsers = JsonSerializer.fromJSONArray(items, User); - if (!this.filteredUsers || this.filteredUsers.length == 0) { - let user = new User(); - user.email = value; - user.name = value; - this.filteredUsers.push(user) - } - this.filteredUsersAsync = false; - }); - } - } -} \ No newline at end of file diff --git a/dmp-frontend/src/app/models/DataField/AutocompleteData.ts b/dmp-frontend/src/app/models/DataField/AutocompleteData.ts index 11873a833..38372df5d 100644 --- a/dmp-frontend/src/app/models/DataField/AutocompleteData.ts +++ b/dmp-frontend/src/app/models/DataField/AutocompleteData.ts @@ -1,23 +1,32 @@ import { DataField } from './DataField'; -import { FormGroup } from '@angular/forms' +import { FormGroup } from '@angular/forms' +import { ListingItem } from '../common/ListingItem'; +import { JsonSerializer } from '../../utilities/JsonSerializer'; export class AutocompleteData extends DataField{ - public type:string; - public url:string; + public type: string; + public url: string; + public optionsRoot: string; + public autoCompleteOptions: ListingItem = new ListingItem(); - buildForm():FormGroup{ - return this.formBuilder.group({ - label:[this.label], - type:[this.type], - url:[this.url] - }) - } + buildForm(): FormGroup { + let formGroup = this.formBuilder.group({ + label: [this.label], + type: [this.type], + url: [this.url], + optionsRoot: [this.optionsRoot] + }) + formGroup.addControl("autoCompleteOptions", this.autoCompleteOptions.buildForm()); + return formGroup; + } - fromJSONObject(item:any):AutocompleteData{ - this.type = item.type; - this.url = item.url; - this.label = item.label; - return this; - } -} \ No newline at end of file + fromJSONObject(item: any): AutocompleteData { + this.type = item.type; + this.url = item.url; + this.label = item.label; + this.optionsRoot = item.optionsRoot; + this.autoCompleteOptions = JsonSerializer.fromJSONObject(item.autoCompleteOptions, ListingItem); + return this; + } +} diff --git a/dmp-frontend/src/app/models/DataField/RadioBoxData.ts b/dmp-frontend/src/app/models/DataField/RadioBoxData.ts index 443f61437..c52255ded 100644 --- a/dmp-frontend/src/app/models/DataField/RadioBoxData.ts +++ b/dmp-frontend/src/app/models/DataField/RadioBoxData.ts @@ -1,29 +1,29 @@ import { JsonSerializer } from '../../utilities/JsonSerializer'; import { DataField } from './DataField'; -import { ListingItem } from '../Common/ListingItem'; -import { FormGroup } from '@angular/forms' +import { ListingItem } from '../common/ListingItem'; +import { FormGroup } from '@angular/forms' export class RadioBoxData extends DataField{ - public options:Array; - - buildForm():FormGroup{ - let formGroup = this.formBuilder.group({ - label:[this.label] - }); - let optionsFormArray = new Array(); - if (this.options) { - this.options.forEach(item => { - let form: FormGroup = item.buildForm(); - optionsFormArray.push(form) - }) - } - formGroup.addControl('options', this.formBuilder.array(optionsFormArray)); - return formGroup; - } + public options: Array; - fromJSONObject(item:any):RadioBoxData{ - this.options = JsonSerializer.fromJSONArray(item.options,ListingItem); - this.label = item.label - return this; + buildForm(): FormGroup { + let formGroup = this.formBuilder.group({ + label: [this.label] + }); + let optionsFormArray = new Array(); + if (this.options) { + this.options.forEach(item => { + let form: FormGroup = item.buildForm(); + optionsFormArray.push(form) + }) } -} \ No newline at end of file + formGroup.addControl('options', this.formBuilder.array(optionsFormArray)); + return formGroup; + } + + fromJSONObject(item: any): RadioBoxData { + this.options = JsonSerializer.fromJSONArray(item.options, ListingItem); + this.label = item.label + return this; + } +} diff --git a/dmp-frontend/src/app/models/DataField/WordListData.ts b/dmp-frontend/src/app/models/DataField/WordListData.ts index e33d92970..8af946636 100644 --- a/dmp-frontend/src/app/models/DataField/WordListData.ts +++ b/dmp-frontend/src/app/models/DataField/WordListData.ts @@ -1,32 +1,32 @@ import { JsonSerializer } from '../../utilities/JsonSerializer'; -import { ListingItem } from '../Common/ListingItem'; +import { ListingItem } from '../common/ListingItem'; import { DataField } from './DataField'; -import { FormGroup } from '@angular/forms' +import { FormGroup } from '@angular/forms' export class WordListData extends DataField{ - public type:string; - public options:Array; - buildForm():FormGroup{ - let formGroup = this.formBuilder.group({ - type:[this.type], - label:[this.label] - }); - let optionsFormArray = new Array(); - if (this.options) { - this.options.forEach(item => { - let form: FormGroup = item.buildForm(); - optionsFormArray.push(form) - }) - } - formGroup.addControl('options', this.formBuilder.array(optionsFormArray)); - - return formGroup; + public type: string; + public options: Array; + buildForm(): FormGroup { + let formGroup = this.formBuilder.group({ + type: [this.type], + label: [this.label] + }); + let optionsFormArray = new Array(); + if (this.options) { + this.options.forEach(item => { + let form: FormGroup = item.buildForm(); + optionsFormArray.push(form) + }) } + formGroup.addControl('options', this.formBuilder.array(optionsFormArray)); - fromJSONObject(item:any):WordListData{ - this.type = item.type; - this.options = JsonSerializer.fromJSONArray(item.options,ListingItem); - this.label = item.label; - return this; - } -} \ No newline at end of file + return formGroup; + } + + fromJSONObject(item: any): WordListData { + this.type = item.type; + this.options = JsonSerializer.fromJSONArray(item.options, ListingItem); + this.label = item.label; + return this; + } +} diff --git a/dmp-frontend/src/app/models/DatasetProfileDefinitionModel.ts b/dmp-frontend/src/app/models/DatasetProfileDefinitionModel.ts index e0059a59d..e1795bd66 100644 --- a/dmp-frontend/src/app/models/DatasetProfileDefinitionModel.ts +++ b/dmp-frontend/src/app/models/DatasetProfileDefinitionModel.ts @@ -5,7 +5,7 @@ import { FormGenerator } from './interfaces/FormGenerator'; import { JsonSerializer } from '../utilities/JsonSerializer'; import { Section } from './Section'; import { Serializable } from './interfaces/Serializable'; -import { Page } from '@app/models/Page'; +import { Page } from '../models/Page'; export class DatasetProfileDefinitionModel extends BaseModel implements Serializable, FormGenerator{ public status: number public pages: Array; diff --git a/dmp-frontend/src/app/models/Field.ts b/dmp-frontend/src/app/models/Field.ts index c0bdcd268..ae2c386e0 100644 --- a/dmp-frontend/src/app/models/Field.ts +++ b/dmp-frontend/src/app/models/Field.ts @@ -5,7 +5,7 @@ import { JsonSerializer } from '../utilities/JsonSerializer'; import { Serializable } from './interfaces/Serializable'; import { Multiplicity } from './Multiplicity'; import { DefaultValue } from './DefaultValue'; -import { ValidationTypes } from '@app/models/common/ValidationTypes'; +import { ValidationTypes } from '../models/common/ValidationTypes'; import { ViewStyle } from './datasetProfileAdmin/ViewStyle'; export class Field extends BaseModel implements Serializable, FormGenerator{ diff --git a/dmp-frontend/src/app/models/Page.ts b/dmp-frontend/src/app/models/Page.ts index 996bd1406..d3c4e04c9 100644 --- a/dmp-frontend/src/app/models/Page.ts +++ b/dmp-frontend/src/app/models/Page.ts @@ -1,4 +1,4 @@ -import { Section } from "@app/models/Section"; +import { Section } from "../models/Section"; import { BaseModel } from './BaseModel'; import { FormGenerator } from './interfaces/FormGenerator'; import { Serializable } from './interfaces/Serializable'; @@ -10,20 +10,20 @@ export class Page extends BaseModel implements Serializable { public title: string; public sections: Array
; - fromJSONObject(item:any):Page{ + fromJSONObject(item: any): Page { this.ordinal = item.ordinal; this.title = item.title; - this.sections = JsonSerializer.fromJSONArray(item.sections,Section); + this.sections = JsonSerializer.fromJSONArray(item.sections, Section); return this; } - buildForm():FormGroup{ - let formGroup:FormGroup = new FormBuilder().group({}); + buildForm(): FormGroup { + let formGroup: FormGroup = new FormBuilder().group({}); let sectionsFormArray = new Array(); this.sections.forEach(item => { let form: FormGroup = item.buildForm(); sectionsFormArray.push(form) - }) + }) formGroup.addControl('sections', this.formBuilder.array(sectionsFormArray)); return formGroup; } diff --git a/dmp-frontend/src/app/models/auto-complete/AutocompleteLookupItem.ts b/dmp-frontend/src/app/models/auto-complete/AutocompleteLookupItem.ts new file mode 100644 index 000000000..fe31cb4da --- /dev/null +++ b/dmp-frontend/src/app/models/auto-complete/AutocompleteLookupItem.ts @@ -0,0 +1,6 @@ +import { BaseCriteria } from "../criteria/BaseCriteria"; + +export class AutocompleteLookupItem extends BaseCriteria { + public profileID: String; + public fieldID: String; +} \ No newline at end of file diff --git a/dmp-frontend/src/app/models/criteria/data-repository/DataRepositoryCriteria.ts b/dmp-frontend/src/app/models/criteria/data-repository/DataRepositoryCriteria.ts new file mode 100644 index 000000000..216e81835 --- /dev/null +++ b/dmp-frontend/src/app/models/criteria/data-repository/DataRepositoryCriteria.ts @@ -0,0 +1,4 @@ +import { BaseCriteria } from '../BaseCriteria'; +export class DataRepositoryCriteria extends BaseCriteria { + public type: string; +} diff --git a/dmp-frontend/src/app/models/criteria/dmp-profile/DataManagementPlanProfileCriteria.ts b/dmp-frontend/src/app/models/criteria/dmp-profile/DataManagementPlanProfileCriteria.ts new file mode 100644 index 000000000..d16e2cc6c --- /dev/null +++ b/dmp-frontend/src/app/models/criteria/dmp-profile/DataManagementPlanProfileCriteria.ts @@ -0,0 +1,4 @@ +import { BaseCriteria } from '../BaseCriteria'; +export class DataManagementPlanProfileCriteria extends BaseCriteria { + +} \ No newline at end of file diff --git a/dmp-frontend/src/app/models/criteria/dmp-profile/DataManagementPlanProfileCriteriaErrorModel.ts b/dmp-frontend/src/app/models/criteria/dmp-profile/DataManagementPlanProfileCriteriaErrorModel.ts new file mode 100644 index 000000000..cf9a909a5 --- /dev/null +++ b/dmp-frontend/src/app/models/criteria/dmp-profile/DataManagementPlanProfileCriteriaErrorModel.ts @@ -0,0 +1,4 @@ +import { BaseCriteriaErrorModel } from '../BaseCriteriaErrorModel'; +export class DataManagementPlanProfileCriteriaErrorModel extends BaseCriteriaErrorModel { + +} \ No newline at end of file diff --git a/dmp-frontend/src/app/models/criteria/external-dataset/ExternalDatasetCriteria.ts b/dmp-frontend/src/app/models/criteria/external-dataset/ExternalDatasetCriteria.ts index 6682f7702..2f69c518f 100644 --- a/dmp-frontend/src/app/models/criteria/external-dataset/ExternalDatasetCriteria.ts +++ b/dmp-frontend/src/app/models/criteria/external-dataset/ExternalDatasetCriteria.ts @@ -1,4 +1,4 @@ import { BaseCriteria } from '../BaseCriteria'; -export class ExternalDatasetCriteria extends BaseCriteria{ - -} \ No newline at end of file +export class ExternalDatasetCriteria extends BaseCriteria { + public type: string; +} diff --git a/dmp-frontend/src/app/models/criteria/registry/RegistryCriteria.ts b/dmp-frontend/src/app/models/criteria/registry/RegistryCriteria.ts new file mode 100644 index 000000000..95b42c82b --- /dev/null +++ b/dmp-frontend/src/app/models/criteria/registry/RegistryCriteria.ts @@ -0,0 +1,4 @@ +import { BaseCriteria } from '../BaseCriteria'; +export class RegistryCriteria extends BaseCriteria { + public type: string; +} diff --git a/dmp-frontend/src/app/models/criteria/researchers/ResearcherCriteria.ts b/dmp-frontend/src/app/models/criteria/researchers/ResearcherCriteria.ts new file mode 100644 index 000000000..9dd144963 --- /dev/null +++ b/dmp-frontend/src/app/models/criteria/researchers/ResearcherCriteria.ts @@ -0,0 +1,5 @@ +import { BaseCriteria } from "../../../models/criteria/BaseCriteria"; + +export class ResearcherCriteria extends BaseCriteria { + public name: String +} \ No newline at end of file diff --git a/dmp-frontend/src/app/models/criteria/services/ServicesCriteria.ts b/dmp-frontend/src/app/models/criteria/services/ServicesCriteria.ts new file mode 100644 index 000000000..3b253baae --- /dev/null +++ b/dmp-frontend/src/app/models/criteria/services/ServicesCriteria.ts @@ -0,0 +1,4 @@ +import { BaseCriteria } from '../BaseCriteria'; +export class ServicesCriteria extends BaseCriteria { + public type: string; +} diff --git a/dmp-frontend/src/app/models/data-management-plan-profile/DataManagementPlanProfile.ts b/dmp-frontend/src/app/models/data-management-plan-profile/DataManagementPlanProfile.ts new file mode 100644 index 000000000..323848e60 --- /dev/null +++ b/dmp-frontend/src/app/models/data-management-plan-profile/DataManagementPlanProfile.ts @@ -0,0 +1,27 @@ +import { DataManagementProfileField } from "./DataManagementProfileField"; +import { Serializable } from "../interfaces/Serializable"; +import { JsonSerializer } from "../../utilities/JsonSerializer"; +import { FormGenerator } from "../interfaces/FormGenerator"; +import { FormGroup, FormBuilder } from "@angular/forms"; + +export class DataManagementPlanProfile implements Serializable, FormGenerator{ + + public fields: DataManagementProfileField[] = new Array() + + fromJSONObject(item: any): DataManagementPlanProfile { + this.fields = JsonSerializer.fromJSONArray(item.fields, DataManagementProfileField); + return this; + } + + buildForm(): FormGroup { + let formBuilder = new FormBuilder(); + let formGroup = formBuilder.group({}); + let fieldsFormArray = new Array(); + this.fields.forEach(item => { + let form: FormGroup = item.buildForm(); + fieldsFormArray.push(form) + }) + formGroup.addControl('fields', formBuilder.array(fieldsFormArray)); + return formGroup; + } +} \ No newline at end of file diff --git a/dmp-frontend/src/app/models/data-management-plan-profile/DataManagementPlanProfileListingModel.ts b/dmp-frontend/src/app/models/data-management-plan-profile/DataManagementPlanProfileListingModel.ts new file mode 100644 index 000000000..d7d2de398 --- /dev/null +++ b/dmp-frontend/src/app/models/data-management-plan-profile/DataManagementPlanProfileListingModel.ts @@ -0,0 +1,11 @@ +export class DataManagementPlanProfileListingModel { + public id: string; + + public label: string; + + public status: number; + + public created: Date; + + public modified: Date; +} \ No newline at end of file diff --git a/dmp-frontend/src/app/models/data-management-plan-profile/DataManagementPlanProfileModel.ts b/dmp-frontend/src/app/models/data-management-plan-profile/DataManagementPlanProfileModel.ts new file mode 100644 index 000000000..992059bd1 --- /dev/null +++ b/dmp-frontend/src/app/models/data-management-plan-profile/DataManagementPlanProfileModel.ts @@ -0,0 +1,42 @@ +import { DataManagementProfileField } from "./DataManagementProfileField"; +import { Serializable } from "../interfaces/Serializable"; +import { JsonSerializer } from "../../utilities/JsonSerializer"; +import { DataManagementPlanProfile } from "./DataManagementPlanProfile"; +import { FormGenerator } from "../interfaces/FormGenerator"; +import { FormGroup, FormBuilder } from "@angular/forms"; +import { BaseErrorModel } from "../error/BaseErrorModel"; + +export class DataManagementPlanProfileModel implements Serializable, FormGenerator{ + + + public id: string; + public label: string; + public definition: DataManagementPlanProfile = new DataManagementPlanProfile(); + public status: number; + public created: Date; + public modified: Date; + public errorModel: BaseErrorModel = new BaseErrorModel(); + + + fromJSONObject(item: any): DataManagementPlanProfileModel { + this.id = item.id; + this.label = item.label; + this.definition = JsonSerializer.fromJSONObject(item.definition, DataManagementPlanProfile); + this.status = item.status; + this.created = item.created; + this.modified = item.modified; + return this; + } + + buildForm(): FormGroup { + let formGroup = new FormBuilder().group({ + id: [this.id], + label: [this.label], + status: [this.status], + created: [this.created], + modified: [this.modified] + }) + formGroup.addControl("definition", this.definition.buildForm()); + return formGroup; + } +} \ No newline at end of file diff --git a/dmp-frontend/src/app/models/data-management-plan-profile/DataManagementProfileField.ts b/dmp-frontend/src/app/models/data-management-plan-profile/DataManagementProfileField.ts new file mode 100644 index 000000000..e47ac7b55 --- /dev/null +++ b/dmp-frontend/src/app/models/data-management-plan-profile/DataManagementProfileField.ts @@ -0,0 +1,50 @@ +import { Serializable } from "../Serializable"; +import { FormGenerator } from "../interfaces/FormGenerator"; +import { FormGroup, FormBuilder } from "@angular/forms"; + +export enum DMPProfileType { + INPUT = 0 +} + +export enum DMPProfileFieldDataType { + DATE = 0, + NUMBER = 1, + TEXT = 2 +} + +export class DataManagementProfileField implements Serializable, FormGenerator{ + + + public type: DMPProfileType; + + public dataType: DMPProfileFieldDataType; + + public required: boolean = false; + + public label: string; + + public id: string + + public value:any + + fromJSONObject(item: any): DataManagementProfileField { + this.type = item.type; + this.dataType = item.dataType; + this.required = item.required; + this.label = item.label; + this.id = item.id + this.value = item.value + return this; + } + + buildForm(): FormGroup { + return new FormBuilder().group({ + type: [this.type], + id: [this.id], + dataType: [this.dataType], + required: [this.required], + label: [this.label] + }) + } +} + diff --git a/dmp-frontend/src/app/models/data-managemnt-plans/DataManagementPlanModel.ts b/dmp-frontend/src/app/models/data-managemnt-plans/DataManagementPlanModel.ts index b7f8c75f6..6c9b41735 100644 --- a/dmp-frontend/src/app/models/data-managemnt-plans/DataManagementPlanModel.ts +++ b/dmp-frontend/src/app/models/data-managemnt-plans/DataManagementPlanModel.ts @@ -10,73 +10,86 @@ import { ResearcherModel } from "../researcher/ResearcherModel"; import { JsonSerializer } from "../../utilities/JsonSerializer"; import { ProfileModel } from "../profile/ProfileModel"; import { Status } from "../Status"; -import { DmpUsersModel } from "@app/models/dmpUsers/DmpUsersModel"; +import { DmpUsersModel } from "../../models/dmpUsers/DmpUsersModel"; +import { DataManagementPlanProfile } from "../data-management-plan-profile/DataManagementPlanProfile"; +import { DynamicField } from "./DynamicField"; export class DataManagementPlanModel implements Serializable { - public id: String; - public label: String; - public groupId: String; - public version: number; - public status: Status = Status.Active; - public description: String; - public project: ProjectModel; - public organisations: OrganisationModel[] = []; - public researchers: ResearcherModel[] = []; - public profiles: ProfileModel[] = []; - public associatedUsers: DmpUsersModel[] = []; + public id: string; + public label: string; + public groupId: String; + public profile: String + public version: number; + public status: Status = Status.Active; + public description: String; + public project: ProjectModel; + public organisations: OrganisationModel[] = []; + public researchers: ResearcherModel[] = []; + public profiles: ProfileModel[] = []; + public associatedUsers: DmpUsersModel[] = []; + public definition: DataManagementPlanProfile + public dynamicFields: Array; + public errorModel: BaseErrorModel = new BaseErrorModel(); - public errorModel: BaseErrorModel = new BaseErrorModel(); + fromJSONObject(item: any): DataManagementPlanModel { + this.id = item.id; + this.profile = item.profile; + this.label = item.label; + this.groupId = item.groupId; + this.version = item.version; + this.status = item.status; + this.description = item.description; + this.project = JsonSerializer.fromJSONObject(item.project, ProjectModel); + this.organisations = JsonSerializer.fromJSONArray(item.organisations, OrganisationModel); + this.researchers = JsonSerializer.fromJSONArray(item.researchers, ResearcherModel); + this.profiles = JsonSerializer.fromJSONArray(item.profiles, ProfileModel); + this.associatedUsers = JsonSerializer.fromJSONArray(item.associatedUsers, DmpUsersModel); + this.definition = JsonSerializer.fromJSONObject(item.definition, DataManagementPlanProfile); + this.dynamicFields = JsonSerializer.fromJSONArray(item.dynamicFields, DynamicField); + return this; + } - fromJSONObject(item: any): DataManagementPlanModel { - this.id = item.id; - this.label = item.label; - this.groupId = item.groupId; - this.version = item.version; - this.status = item.status; - this.description = item.description; - this.project = JsonSerializer.fromJSONObject(item.project, ProjectModel); - this.organisations = JsonSerializer.fromJSONArray(item.organisations, OrganisationModel); - this.researchers = JsonSerializer.fromJSONArray(item.researchers, ResearcherModel); - this.profiles = JsonSerializer.fromJSONArray(item.profiles, ProfileModel); - this.associatedUsers = JsonSerializer.fromJSONArray(item.associatedUsers, DmpUsersModel); + buildForm(context: ValidationContext = null, disabled: boolean = false): FormGroup { + if (context == null) { context = this.createValidationContext(); } - return this; - } + const formGroup = new FormBuilder().group({ + id: [{ value: this.id, disabled: disabled }, context.getValidation('id').validators], + profile: [{ value: this.profile, disabled: disabled }, context.getValidation('profile').validators], + label: [{ value: this.label, disabled: disabled }, context.getValidation('label').validators], + groupId: [{ value: this.groupId, disabled: disabled }, context.getValidation('groupId').validators], + version: [{ value: this.version, disabled: disabled }, context.getValidation('version').validators], + status: [{ value: this.status, disabled: disabled }, context.getValidation('status').validators], + description: [{ value: this.description, disabled: disabled }, context.getValidation('description').validators], + project: [{ value: this.project, disabled: disabled }, context.getValidation('project').validators], + organisations: [{ value: this.organisations, disabled: disabled }, context.getValidation('organisations').validators], + researchers: [{ value: this.researchers, disabled: disabled }, context.getValidation('researchers').validators], + profiles: [{ value: this.profiles, disabled: disabled }, context.getValidation('profiles').validators], + associatedUsers: [{ value: this.associatedUsers, disabled: disabled }, context.getValidation('associatedUsers').validators], + }); - buildForm(context: ValidationContext = null, disabled: boolean = false): FormGroup { - if (context == null) { context = this.createValidationContext(); } + let dynamicFields = new Array(); + if (this.dynamicFields) this.dynamicFields.forEach(item => dynamicFields.push(item.buildForm())); - const formGroup = new FormBuilder().group({ - id: [{ value: this.id, disabled: disabled }, context.getValidation('id').validators], - label: [{ value: this.label, disabled: disabled }, context.getValidation('label').validators], - groupId: [{ value: this.groupId, disabled: disabled }, context.getValidation('groupId').validators], - version: [{ value: this.version, disabled: disabled }, context.getValidation('version').validators], - status: [{ value: this.status, disabled: disabled }, context.getValidation('status').validators], - description: [{ value: this.description, disabled: disabled }, context.getValidation('description').validators], - project: [{ value: this.project, disabled: disabled }, context.getValidation('project').validators], - organisations: [{ value: this.organisations, disabled: disabled }, context.getValidation('organisations').validators], - researchers: [{ value: this.researchers, disabled: disabled }, context.getValidation('researchers').validators], - profiles: [{ value: this.profiles, disabled: disabled }, context.getValidation('profiles').validators], - associatedUsers: [{ value: this.associatedUsers, disabled: disabled }, context.getValidation('associatedUsers').validators] - }); + formGroup.addControl("dynamicFields", new FormBuilder().array(dynamicFields)); - return formGroup; - } + return formGroup; + } - createValidationContext(): ValidationContext { - const baseContext: ValidationContext = new ValidationContext(); - baseContext.validation.push({ key: 'id', validators: [ BackendErrorValidator(this.errorModel, 'id')] }); - baseContext.validation.push({ key: 'label', validators: [Validators.required, BackendErrorValidator(this.errorModel, 'label')] }); - baseContext.validation.push({ key: 'groupId', validators: [BackendErrorValidator(this.errorModel, 'groupId')] }); - baseContext.validation.push({ key: 'version', validators: [BackendErrorValidator(this.errorModel, 'version')] }); - baseContext.validation.push({ key: 'status', validators: [Validators.required, BackendErrorValidator(this.errorModel, 'status')] }); - baseContext.validation.push({ key: 'description', validators: [Validators.required, BackendErrorValidator(this.errorModel, 'description')] }); - baseContext.validation.push({ key: 'project', validators: [Validators.required, BackendErrorValidator(this.errorModel, 'project')] }); - baseContext.validation.push({ key: 'organisations', validators: [Validators.required,BackendErrorValidator(this.errorModel, 'organisations')] }); - baseContext.validation.push({ key: 'researchers', validators: [BackendErrorValidator(this.errorModel, 'researchers')] }); - baseContext.validation.push({ key: 'profiles', validators: [Validators.required,BackendErrorValidator(this.errorModel, 'profiles')] }); - baseContext.validation.push({ key: 'associatedUsers', validators: [BackendErrorValidator(this.errorModel, 'associatedUsers')] }); + createValidationContext(): ValidationContext { + const baseContext: ValidationContext = new ValidationContext(); + baseContext.validation.push({ key: 'id', validators: [BackendErrorValidator(this.errorModel, 'id')] }); + baseContext.validation.push({ key: 'profile', validators: [BackendErrorValidator(this.errorModel, 'profile')] }); + baseContext.validation.push({ key: 'label', validators: [Validators.required, BackendErrorValidator(this.errorModel, 'label')] }); + baseContext.validation.push({ key: 'groupId', validators: [BackendErrorValidator(this.errorModel, 'groupId')] }); + baseContext.validation.push({ key: 'version', validators: [BackendErrorValidator(this.errorModel, 'version')] }); + baseContext.validation.push({ key: 'status', validators: [Validators.required, BackendErrorValidator(this.errorModel, 'status')] }); + baseContext.validation.push({ key: 'description', validators: [Validators.required, BackendErrorValidator(this.errorModel, 'description')] }); + baseContext.validation.push({ key: 'project', validators: [Validators.required, BackendErrorValidator(this.errorModel, 'project')] }); + baseContext.validation.push({ key: 'organisations', validators: [BackendErrorValidator(this.errorModel, 'organisations')] }); + baseContext.validation.push({ key: 'researchers', validators: [BackendErrorValidator(this.errorModel, 'researchers')] }); + baseContext.validation.push({ key: 'profiles', validators: [Validators.required, BackendErrorValidator(this.errorModel, 'profiles')] }); + baseContext.validation.push({ key: 'associatedUsers', validators: [BackendErrorValidator(this.errorModel, 'associatedUsers')] }); - return baseContext; - } -} \ No newline at end of file + return baseContext; + } +} diff --git a/dmp-frontend/src/app/models/data-managemnt-plans/DynamicField.ts b/dmp-frontend/src/app/models/data-managemnt-plans/DynamicField.ts new file mode 100644 index 000000000..af2f2824c --- /dev/null +++ b/dmp-frontend/src/app/models/data-managemnt-plans/DynamicField.ts @@ -0,0 +1,38 @@ +import { DynamicFieldDependency } from "./DynamicFieldDependency"; +import { Serializable } from "../Serializable"; +import { JsonSerializer } from "../../utilities/JsonSerializer"; +import { FormGroup, FormBuilder } from "@angular/forms"; +import { FormGenerator } from "../interfaces/FormGenerator"; + +export class DynamicField implements Serializable, FormGenerator{ + + public id: string; + public name: string; + public required: boolean; + public queryProperty; + public value: string; + public dependencies: Array; + + fromJSONObject(item: any): DynamicField { + this.id = item.id; + this.name = item.name; + this.required = item.required; + this.value = item.value; + this.queryProperty = item.queryProperty; + this.dependencies = JsonSerializer.fromJSONArray(item.dependencies, DynamicFieldDependency); + return this; + } + + buildForm(): FormGroup { + let builder = new FormBuilder(); + let formGroup = builder.group({ + id: [this.id], + name: [this.name], + required: [this.required], + value: [this.value], + queryProperty: [this.queryProperty], + dependencies: [this.dependencies] + }) + return formGroup; + } +} \ No newline at end of file diff --git a/dmp-frontend/src/app/models/data-managemnt-plans/DynamicFieldDependency.ts b/dmp-frontend/src/app/models/data-managemnt-plans/DynamicFieldDependency.ts new file mode 100644 index 000000000..6ac3ef456 --- /dev/null +++ b/dmp-frontend/src/app/models/data-managemnt-plans/DynamicFieldDependency.ts @@ -0,0 +1,21 @@ +import { Serializable } from "../Serializable"; +import { FormGenerator } from "../interfaces/FormGenerator"; +import { FormGroup, FormBuilder } from "@angular/forms"; + +export class DynamicFieldDependency implements Serializable, FormGenerator{ + public id: string + public queryProperty: string + + fromJSONObject(item: any): DynamicFieldDependency { + this.id = item.id; + this.queryProperty = item.queryProperty; + return this; + } + + buildForm(): FormGroup { + return new FormBuilder().group({ + id: [this.id], + queryProperty: [this.queryProperty] + }) + } +} \ No newline at end of file diff --git a/dmp-frontend/src/app/models/dataRepositories/DataRepositoryModel.ts b/dmp-frontend/src/app/models/dataRepositories/DataRepositoryModel.ts index 13d429099..693c9260f 100644 --- a/dmp-frontend/src/app/models/dataRepositories/DataRepositoryModel.ts +++ b/dmp-frontend/src/app/models/dataRepositories/DataRepositoryModel.ts @@ -1,17 +1,38 @@ import { Serializable } from "../Serializable"; +import { ValidationContext } from "../../utilities/validators/ValidationContext"; +import { FormBuilder, FormGroup } from "@angular/forms"; export class DataRepositoryModel implements Serializable { - public id: String; - public name: String; - public pid: String; - public uri: String; + public id: String; + public name: String; + public pid: String; + public uri: String; + public info: String; - fromJSONObject(item: any): DataRepositoryModel { - this.id = item.id; - this.name = item.name; - this.pid = item.pid; - this.uri = item.uri; + constructor(id?: String, name?: String, pid?: String, uri?: String, info?: String + ) { + this.id = id; + this.name = name; + this.pid = pid; + this.uri = uri; + this.info = info; + } + fromJSONObject(item: any): DataRepositoryModel { + this.id = item.id; + this.name = item.name; + this.pid = item.pid; + this.uri = item.uri; + this.info = item.info; + return this; + } - return this; - } -} \ No newline at end of file + buildForm(context: ValidationContext = null, disabled: boolean = false): FormGroup { + return new FormBuilder().group({ + id: [this.id], + name: [this.name], + pid: [this.pid], + uri: [this.uri], + info: [this.info] + }) + } +} diff --git a/dmp-frontend/src/app/models/datasetProfileAdmin/Field.ts b/dmp-frontend/src/app/models/datasetProfileAdmin/Field.ts index 4e4679a91..700461938 100644 --- a/dmp-frontend/src/app/models/datasetProfileAdmin/Field.ts +++ b/dmp-frontend/src/app/models/datasetProfileAdmin/Field.ts @@ -9,14 +9,14 @@ import { DataField } from '../DataField/DataField'; import { BaseModel } from '../BaseModel'; import { FormGroup, FormArray, FormControl } from '@angular/forms'; import { FormGenerator } from '../interfaces/FormGenerator'; -import { JsonSerializer } from 'app/utilities/JsonSerializer'; +import { JsonSerializer } from '../../utilities/JsonSerializer'; import { Serializable } from '../interfaces/Serializable'; import { Rule } from './Rule'; import { Multiplicity } from './Multiplicity'; import { DefaultValue } from './DefaultValue'; import { ViewStyle } from './ViewStyle'; import { Visibility } from './Visibility'; -import { ValidationTypes } from '@app/models/common/ValidationTypes'; +import { ValidationTypes } from '../../models/common/ValidationTypes'; export class Field extends BaseModel implements Serializable, FormGenerator{ @@ -64,10 +64,10 @@ export class Field extends BaseModel implements Serializable, FormGenerat ordinal: [this.ordinal] }); let valid = ValidationTypes.None - if (this.validations && this.validations[0]==1) valid = ValidationTypes.Required + if (this.validations && this.validations[0] == 1) valid = ValidationTypes.Required const arr = new FormArray([ new FormControl(valid) - ]); + ]); //formGroup.addControl("multiplicity", this.multiplicity.buildForm()); formGroup.addControl("validations", arr); diff --git a/dmp-frontend/src/app/models/datasets/DatasetModel.ts b/dmp-frontend/src/app/models/datasets/DatasetModel.ts index 002673c32..a1bf300cf 100644 --- a/dmp-frontend/src/app/models/datasets/DatasetModel.ts +++ b/dmp-frontend/src/app/models/datasets/DatasetModel.ts @@ -10,60 +10,60 @@ import { RegisterModel } from "../registers/RegisterModel"; import { DataRepositoryModel } from "../dataRepositories/DataRepositoryModel"; export class DatasetModel implements Serializable { - public id: String; - public label: String; - public profile: String; - public uri: String; - public status: String; - public description: String; - public services: ServiceModel[] = []; - public registries: RegisterModel[] = []; - public dataRepositories: DataRepositoryModel[] = []; + public id: String; + public label: String; + public profile: String; + public uri: String; + public status: String; + public description: String; + public services: ServiceModel[] = []; + public registries: RegisterModel[] = []; + public dataRepositories: DataRepositoryModel[] = []; - public errorModel: BaseErrorModel = new BaseErrorModel(); + public errorModel: BaseErrorModel = new BaseErrorModel(); - fromJSONObject(item: any): DatasetModel { - this.id = item.id; - this.label = item.label; - this.profile = item.profile; - this.uri = item.uri; - this.status = item.status; - this.description = item.description; - this.services = JsonSerializer.fromJSONArray(item.services, ServiceModel); - this.registries = JsonSerializer.fromJSONArray(item.registries, RegisterModel); - this.dataRepositories = JsonSerializer.fromJSONArray(item.dataRepositories, DataRepositoryModel); + fromJSONObject(item: any): DatasetModel { + this.id = item.id; + this.label = item.label; + this.profile = item.profile; + this.uri = item.uri; + this.status = item.status; + this.description = item.description; + this.services = JsonSerializer.fromJSONArray(item.services, ServiceModel); + this.registries = JsonSerializer.fromJSONArray(item.registries, RegisterModel); + this.dataRepositories = JsonSerializer.fromJSONArray(item.dataRepositories, DataRepositoryModel); - return this; - } + return this; + } - buildForm(context: ValidationContext = null, disabled: boolean = false): FormGroup { - if (context == null) { context = this.createValidationContext(); } + buildForm(context: ValidationContext = null, disabled: boolean = false): FormGroup { + if (context == null) { context = this.createValidationContext(); } - const formGroup = new FormBuilder().group({ - label: [{ value: this.label, disabled: disabled }, context.getValidation('label').validators], - profile: [{ value: this.profile, disabled: disabled }, context.getValidation('profile').validators], - uri: [{ value: this.uri, disabled: disabled }, context.getValidation('uri').validators], - status: [{ value: this.status, disabled: disabled }, context.getValidation('status').validators], - description: [{ value: this.description, disabled: disabled }, context.getValidation('description').validators], - services: [{ value: this.services, disabled: disabled }, context.getValidation('services').validators], - registries: [{ value: this.registries, disabled: disabled }, context.getValidation('registries').validators], - dataRepositories: [{ value: this.dataRepositories, disabled: disabled }, context.getValidation('dataRepositories').validators] - }); + const formGroup = new FormBuilder().group({ + label: [{ value: this.label, disabled: disabled }, context.getValidation('label').validators], + profile: [{ value: this.profile, disabled: disabled }, context.getValidation('profile').validators], + uri: [{ value: this.uri, disabled: disabled }, context.getValidation('uri').validators], + status: [{ value: this.status, disabled: disabled }, context.getValidation('status').validators], + description: [{ value: this.description, disabled: disabled }, context.getValidation('description').validators], + services: [{ value: this.services, disabled: disabled }, context.getValidation('services').validators], + registries: [{ value: this.registries, disabled: disabled }, context.getValidation('registries').validators], + dataRepositories: [{ value: this.dataRepositories, disabled: disabled }, context.getValidation('dataRepositories').validators] + }); - return formGroup; - } + return formGroup; + } - createValidationContext(): ValidationContext { - const baseContext: ValidationContext = new ValidationContext(); - baseContext.validation.push({ key: 'label', validators: [Validators.required, BackendErrorValidator(this.errorModel, 'label')] }); - baseContext.validation.push({ key: 'profile', validators: [Validators.required, BackendErrorValidator(this.errorModel, 'profile')] }); - baseContext.validation.push({ key: 'uri', validators: [Validators.required, BackendErrorValidator(this.errorModel, 'uri')] }); - baseContext.validation.push({ key: 'status', validators: [Validators.required, BackendErrorValidator(this.errorModel, 'status')] }); - baseContext.validation.push({ key: 'description', validators: [Validators.required, BackendErrorValidator(this.errorModel, 'description')] }); - baseContext.validation.push({ key: 'services', validators: [Validators.required, BackendErrorValidator(this.errorModel, 'services')] }); - baseContext.validation.push({ key: 'registries', validators: [Validators.required, BackendErrorValidator(this.errorModel, 'registries')] }); - baseContext.validation.push({ key: 'dataRepositories', validators: [Validators.required, BackendErrorValidator(this.errorModel, 'dataRepositories')] }); + createValidationContext(): ValidationContext { + const baseContext: ValidationContext = new ValidationContext(); + baseContext.validation.push({ key: 'label', validators: [Validators.required, BackendErrorValidator(this.errorModel, 'label')] }); + baseContext.validation.push({ key: 'profile', validators: [Validators.required, BackendErrorValidator(this.errorModel, 'profile')] }); + baseContext.validation.push({ key: 'uri', validators: [BackendErrorValidator(this.errorModel, 'uri')] }); + baseContext.validation.push({ key: 'status', validators: [Validators.required, BackendErrorValidator(this.errorModel, 'status')] }); + baseContext.validation.push({ key: 'description', validators: [BackendErrorValidator(this.errorModel, 'description')] }); + baseContext.validation.push({ key: 'services', validators: [Validators.required, BackendErrorValidator(this.errorModel, 'services')] }); + baseContext.validation.push({ key: 'registries', validators: [Validators.required, BackendErrorValidator(this.errorModel, 'registries')] }); + baseContext.validation.push({ key: 'dataRepositories', validators: [Validators.required, BackendErrorValidator(this.errorModel, 'dataRepositories')] }); - return baseContext; - } -} \ No newline at end of file + return baseContext; + } +} diff --git a/dmp-frontend/src/app/models/datasets/DatasetWizardModel.ts b/dmp-frontend/src/app/models/datasets/DatasetWizardModel.ts index e057b4181..2ffb17721 100644 --- a/dmp-frontend/src/app/models/datasets/DatasetWizardModel.ts +++ b/dmp-frontend/src/app/models/datasets/DatasetWizardModel.ts @@ -11,73 +11,112 @@ import { ServiceModel } from "../services/ServiceModel"; import { JsonSerializer } from "../../utilities/JsonSerializer"; import { RegisterModel } from "../registers/RegisterModel"; import { DataRepositoryModel } from "../dataRepositories/DataRepositoryModel"; -import { ExternalDatasetModel } from '@app/models/external-dataset/ExternalDatasetModel'; +import { ExternalDatasetModel } from '../../models/external-dataset/ExternalDatasetModel'; export class DatasetWizardModel implements Serializable { - public id: String; - public label: String; - public profile: DatasetProfileModel = new DatasetProfileModel(); - public uri: String; - public status: String; - public description: String; - public services: ServiceModel[] = []; - public registries: RegisterModel[] = []; - public dataRepositories: DataRepositoryModel[] = []; - public externalDatasets: ExternalDatasetModel[] = []; - public dmp: DataManagementPlanModel = new DataManagementPlanModel(); - public datasetProfileDefinition; - public errorModel: BaseErrorModel = new BaseErrorModel(); + public id: string; + public label: string; + public profile: DatasetProfileModel = new DatasetProfileModel(); + public uri: String; + public status: String; + public description: String; + public services: ServiceModel[] = []; + public registries: RegisterModel[] = []; + public dataRepositories: DataRepositoryModel[] = []; + public externalDatasets: ExternalDatasetModel[] = []; + public dmp: DataManagementPlanModel = new DataManagementPlanModel(); + public datasetProfileDefinition; + public errorModel: BaseErrorModel = new BaseErrorModel(); - fromJSONObject(item: any): DatasetWizardModel { - this.id = item.id; - this.label = item.label; - this.profile = item.profile; - this.uri = item.uri; - this.status = item.status; - this.description = item.description; - this.services = JsonSerializer.fromJSONArray(item.services, ServiceModel); - this.registries = JsonSerializer.fromJSONArray(item.registries, RegisterModel); - this.dataRepositories = JsonSerializer.fromJSONArray(item.dataRepositories, DataRepositoryModel); - this.dmp = JsonSerializer.fromJSONObject(item.dmp, DataManagementPlanModel); - this.profile = JsonSerializer.fromJSONObject(item.profile, DatasetProfileModel); - this.datasetProfileDefinition = JsonSerializer.fromJSONObject(item.datasetProfileDefinition, DatasetProfileDefinitionModel); - return this; - } + fromJSONObject(item: any): DatasetWizardModel { + this.id = item.id; + this.label = item.label; + this.profile = item.profile; + this.uri = item.uri; + this.status = item.status; + this.description = item.description; + this.services = JsonSerializer.fromJSONArray(item.services, ServiceModel); + this.registries = JsonSerializer.fromJSONArray(item.registries, RegisterModel); + this.dataRepositories = JsonSerializer.fromJSONArray(item.dataRepositories, DataRepositoryModel); + this.dmp = JsonSerializer.fromJSONObject(item.dmp, DataManagementPlanModel); + this.profile = JsonSerializer.fromJSONObject(item.profile, DatasetProfileModel); + this.externalDatasets = JsonSerializer.fromJSONArray(item.externalDatasets, ExternalDatasetModel); + this.datasetProfileDefinition = JsonSerializer.fromJSONObject(item.datasetProfileDefinition, DatasetProfileDefinitionModel); + return this; + } - buildForm(context: ValidationContext = null, disabled: boolean = false): FormGroup { - if (context == null) { context = this.createValidationContext(); } - const formGroup = new FormBuilder().group({ - id: [{ value: this.id, disabled: disabled }, context.getValidation('id').validators], - label: [{ value: this.label, disabled: disabled }, context.getValidation('label').validators], - uri: [{ value: this.uri, disabled: disabled }, context.getValidation('uri').validators], - status: [{ value: this.status, disabled: disabled }, context.getValidation('status').validators], - description: [{ value: this.description, disabled: disabled }, context.getValidation('description').validators], - services: [{ value: this.services, disabled: disabled }, context.getValidation('services').validators], - registries: [{ value: this.registries, disabled: disabled }, context.getValidation('registries').validators], - dataRepositories: [{ value: this.dataRepositories, disabled: disabled }, context.getValidation('dataRepositories').validators], - externalDatasets: [{ value: this.externalDatasets, disabled: disabled }, context.getValidation('externalDatasets').validators], - dmp: [{ value: this.dmp, disabled: disabled }, context.getValidation('dmp').validators] - }); - if (this.datasetProfileDefinition) formGroup.addControl("datasetProfileDefinition", this.datasetProfileDefinition.buildForm()) - formGroup.addControl("profile", this.profile.buildForm()) - return formGroup; - } + buildForm(context: ValidationContext = null, disabled: boolean = false): FormGroup { + if (context == null) { context = this.createValidationContext(); } + let formBuilder = new FormBuilder(); + const formGroup = formBuilder.group({ + id: [{ value: this.id, disabled: disabled }, context.getValidation('id').validators], + label: [{ value: this.label, disabled: disabled }, context.getValidation('label').validators], + uri: [{ value: this.uri, disabled: disabled }, context.getValidation('uri').validators], + status: [{ value: this.status, disabled: disabled }, context.getValidation('status').validators], + description: [{ value: this.description, disabled: disabled }, context.getValidation('description').validators], + dmp: [{ value: this.dmp, disabled: disabled }, context.getValidation('dmp').validators] + }); - createValidationContext(): ValidationContext { - const baseContext: ValidationContext = new ValidationContext(); - baseContext.validation.push({ key: 'id', validators: [BackendErrorValidator(this.errorModel, 'id')] }); - baseContext.validation.push({ key: 'label', validators: [Validators.required, BackendErrorValidator(this.errorModel, 'label')] }); - baseContext.validation.push({ key: 'profile', validators: [Validators.required, BackendErrorValidator(this.errorModel, 'profile')] }); - baseContext.validation.push({ key: 'uri', validators: [Validators.required, BackendErrorValidator(this.errorModel, 'uri')] }); - baseContext.validation.push({ key: 'status', validators: [BackendErrorValidator(this.errorModel, 'status')] }); - baseContext.validation.push({ key: 'description', validators: [Validators.required, BackendErrorValidator(this.errorModel, 'description')] }); - baseContext.validation.push({ key: 'services', validators: [BackendErrorValidator(this.errorModel, 'services')] }); - baseContext.validation.push({ key: 'registries', validators: [BackendErrorValidator(this.errorModel, 'registries')] }); - baseContext.validation.push({ key: 'dataRepositories', validators: [BackendErrorValidator(this.errorModel, 'dataRepositories')] }); - baseContext.validation.push({ key: 'externalDatasets', validators: [BackendErrorValidator(this.errorModel, 'externalDatasets')] }); - baseContext.validation.push({ key: 'dmp', validators: [BackendErrorValidator(this.errorModel, 'dmp')] }); //TODO - baseContext.validation.push({ key: 'datasetProfileDefinition', validators: [BackendErrorValidator(this.errorModel, 'datasetProfileDefinition')] }); //TODO + const externalDatasetsFormArray = new Array(); + if (this.externalDatasets && this.externalDatasets.length > 0) { + this.externalDatasets.forEach(item => { + externalDatasetsFormArray.push(item.buildForm(context.getValidation('externalDatasets').descendantValidations, disabled)) + }) + } else { + //externalDatasetsFormArray.push(new ExternalDatasetModel().buildForm(context.getValidation('externalDatasets').descendantValidations, disabled)); + } + formGroup.addControl('externalDatasets', formBuilder.array(externalDatasetsFormArray)); - return baseContext; - } -} \ No newline at end of file + const registriesFormArray = new Array(); + if (this.registries && this.registries.length > 0) { + this.registries.forEach(item => { + registriesFormArray.push(item.buildForm(context.getValidation('registries').descendantValidations, disabled)) + }) + } else { + //externalDatasetsFormArray.push(new ExternalDatasetModel().buildForm(context.getValidation('externalDatasets').descendantValidations, disabled)); + } + formGroup.addControl('registries', formBuilder.array(registriesFormArray)); + + const dataRepositoriesFormArray = new Array(); + if (this.dataRepositories && this.dataRepositories.length > 0) { + this.dataRepositories.forEach(item => { + dataRepositoriesFormArray.push(item.buildForm(context.getValidation('dataRepositories').descendantValidations, disabled)) + }) + } else { + //externalDatasetsFormArray.push(new ExternalDatasetModel().buildForm(context.getValidation('externalDatasets').descendantValidations, disabled)); + } + formGroup.addControl('dataRepositories', formBuilder.array(dataRepositoriesFormArray)); + + const servicesFormArray = new Array(); + if (this.services && this.services.length > 0) { + this.services.forEach(item => { + servicesFormArray.push(item.buildForm(context.getValidation('services').descendantValidations, disabled)) + }) + } else { + //externalDatasetsFormArray.push(new ExternalDatasetModel().buildForm(context.getValidation('externalDatasets').descendantValidations, disabled)); + } + formGroup.addControl('services', formBuilder.array(servicesFormArray)); + + if (this.datasetProfileDefinition) formGroup.addControl("datasetProfileDefinition", this.datasetProfileDefinition.buildForm()) + formGroup.addControl("profile", this.profile.buildForm()) + return formGroup; + } + + createValidationContext(): ValidationContext { + const baseContext: ValidationContext = new ValidationContext(); + baseContext.validation.push({ key: 'id', validators: [BackendErrorValidator(this.errorModel, 'id')] }); + baseContext.validation.push({ key: 'label', validators: [Validators.required, BackendErrorValidator(this.errorModel, 'label')] }); + baseContext.validation.push({ key: 'profile', validators: [Validators.required, BackendErrorValidator(this.errorModel, 'profile')] }); + baseContext.validation.push({ key: 'uri', validators: [BackendErrorValidator(this.errorModel, 'uri')] }); + baseContext.validation.push({ key: 'status', validators: [BackendErrorValidator(this.errorModel, 'status')] }); + baseContext.validation.push({ key: 'description', validators: [BackendErrorValidator(this.errorModel, 'description')] }); + baseContext.validation.push({ key: 'services', validators: [BackendErrorValidator(this.errorModel, 'services')] }); + baseContext.validation.push({ key: 'registries', validators: [BackendErrorValidator(this.errorModel, 'registries')] }); + baseContext.validation.push({ key: 'dataRepositories', validators: [BackendErrorValidator(this.errorModel, 'dataRepositories')] }); + baseContext.validation.push({ key: 'externalDatasets', validators: [BackendErrorValidator(this.errorModel, 'externalDatasets')] }); + baseContext.validation.push({ key: 'dmp', validators: [BackendErrorValidator(this.errorModel, 'dmp')] }); //TODO + baseContext.validation.push({ key: 'datasetProfileDefinition', validators: [BackendErrorValidator(this.errorModel, 'datasetProfileDefinition')] }); //TODO + + return baseContext; + } +} diff --git a/dmp-frontend/src/app/models/dynamic-field-project/DynamicFieldProjectCriteria.ts b/dmp-frontend/src/app/models/dynamic-field-project/DynamicFieldProjectCriteria.ts new file mode 100644 index 000000000..cf5372a80 --- /dev/null +++ b/dmp-frontend/src/app/models/dynamic-field-project/DynamicFieldProjectCriteria.ts @@ -0,0 +1,9 @@ +export class DynamicFieldProjectCriteria { + public id: string; + public dynamicFields: DynamicFieldProjectCriteriaDependencies[] +} + +export class DynamicFieldProjectCriteriaDependencies { + public value; + public property; +} \ No newline at end of file diff --git a/dmp-frontend/src/app/models/external-dataset/ExternalDatasetModel.ts b/dmp-frontend/src/app/models/external-dataset/ExternalDatasetModel.ts index d648bc8cb..a4957448d 100644 --- a/dmp-frontend/src/app/models/external-dataset/ExternalDatasetModel.ts +++ b/dmp-frontend/src/app/models/external-dataset/ExternalDatasetModel.ts @@ -2,29 +2,48 @@ import { BaseErrorModel } from '../error/BaseErrorModel'; import { Serializable } from "../Serializable"; import { FormGenerator } from "../interfaces/FormGenerator"; import { FormGroup, FormBuilder } from "@angular/forms"; +import { ValidationContext } from '../../utilities/validators/ValidationContext'; + +export enum ExternalDatasetType { + Source = 0, + Output = 1 +} export class ExternalDatasetModel implements Serializable, FormGenerator{ - public abbreviation: String; - public id: String; - public label: String; - public reference: String; - public errorModel: BaseErrorModel; - fromJSONObject(item: any): ExternalDatasetModel { - this.abbreviation = item.abbreviation; - this.id = item.id; - this.label = item.label; - this.reference = item.reference; + public abbreviation: String; + public id: String; + public label: String; + public reference: String; + public errorModel: BaseErrorModel; + public type: ExternalDatasetType; + public info: String; + constructor(id?: string, abbreviation?: string, label?: string, reference?: string, info?: string, type?: ExternalDatasetType) { + this.id = id; + this.label = label; + this.abbreviation = abbreviation; + this.reference = reference; + this.info = info; + this.type = type; + } + fromJSONObject(item: any): ExternalDatasetModel { + this.abbreviation = item.abbreviation; + this.id = item.id; + this.label = item.label; + this.reference = item.reference; + this.type = item.type; + this.info = item.info + return this; + } - return this; - } - - buildForm(): FormGroup { - return new FormBuilder().group({ - id: [this.id], - abbreviation: [this.abbreviation], - label: [this.label], - reference: [this.reference] - }) - } -} \ No newline at end of file + buildForm(context: ValidationContext = null, disabled: boolean = false): FormGroup { + return new FormBuilder().group({ + id: [this.id], + abbreviation: [this.abbreviation], + label: [this.label], + reference: [this.reference], + type: [this.type], + info: [this.info] + }) + } +} diff --git a/dmp-frontend/src/app/models/external-sources/ExternalSourcesConfiguration.ts b/dmp-frontend/src/app/models/external-sources/ExternalSourcesConfiguration.ts new file mode 100644 index 000000000..25c0a5d03 --- /dev/null +++ b/dmp-frontend/src/app/models/external-sources/ExternalSourcesConfiguration.ts @@ -0,0 +1,8 @@ +import { ExternalSourcesUrlModel } from "./ExternalSourcesUrlModel"; + +export class ExternalSourcesConfiguration { + public registries: Array + public dataRepositories: Array + public services: Array + public externalDatasets: Array +} \ No newline at end of file diff --git a/dmp-frontend/src/app/models/external-sources/ExternalSourcesUrlModel.ts b/dmp-frontend/src/app/models/external-sources/ExternalSourcesUrlModel.ts new file mode 100644 index 000000000..689587928 --- /dev/null +++ b/dmp-frontend/src/app/models/external-sources/ExternalSourcesUrlModel.ts @@ -0,0 +1,4 @@ +export class ExternalSourcesUrlModel { + public key: String; + public label: String; +} \ No newline at end of file diff --git a/dmp-frontend/src/app/models/files/ContentFile.ts b/dmp-frontend/src/app/models/files/ContentFile.ts new file mode 100644 index 000000000..e6229110d --- /dev/null +++ b/dmp-frontend/src/app/models/files/ContentFile.ts @@ -0,0 +1,16 @@ +import { Serializable } from "../../models/Serializable"; + +export class ContentFile implements Serializable{ + + private filename: string; + private id: string; + private location: string; + private type: string; + fromJSONObject(item: any): ContentFile { + this.filename = item.filename; + this.id = item.id; + this.location = item.location + this.type = item.type + return this; + } +} \ No newline at end of file diff --git a/dmp-frontend/src/app/models/language/Language.ts b/dmp-frontend/src/app/models/language/Language.ts new file mode 100644 index 000000000..45c089a1e --- /dev/null +++ b/dmp-frontend/src/app/models/language/Language.ts @@ -0,0 +1,4 @@ +export class Language { + public key: string; + public languageKey: string +} \ No newline at end of file diff --git a/dmp-frontend/src/app/models/login/Principal.ts b/dmp-frontend/src/app/models/login/Principal.ts index 3b58d651e..e6f5027f2 100644 --- a/dmp-frontend/src/app/models/login/Principal.ts +++ b/dmp-frontend/src/app/models/login/Principal.ts @@ -7,20 +7,21 @@ export class Principal implements Serializable { name: string; expiresAt: Date; appRoles: Principal.AppRole[]; - + avatarUrl: string; fromJSONObject(item: any): Principal { this.id = item.id; this.token = item.token; this.name = item.name; this.expiresAt = item.expiresAt; this.appRoles = item.authorities; + this.avatarUrl = item.avatarUrl; return this; } } export namespace Principal { export enum AppRole { - Admin = 2, + Admin = 2, Manager = 1, User = 0, } diff --git a/dmp-frontend/src/app/models/projects/ProjectListingModel.ts b/dmp-frontend/src/app/models/projects/ProjectListingModel.ts index 003fc5461..b654968b4 100644 --- a/dmp-frontend/src/app/models/projects/ProjectListingModel.ts +++ b/dmp-frontend/src/app/models/projects/ProjectListingModel.ts @@ -1,4 +1,8 @@ import { Serializable } from "../Serializable"; +import { ContentFile } from "../../models/files/ContentFile"; +import { JsonSerializer } from "../../utilities/JsonSerializer"; +import { UrlListingComponent } from "../../shared/components/url-listing/url-listing.component"; +import { UrlListingItem } from "../../shared/components/url-listing/UrlListingItem"; export class ProjectListingModel implements Serializable { public id: String; @@ -10,18 +14,21 @@ export class ProjectListingModel implements Serializable { public startDate: Date; public endDate: Date; public description: String; + public files: ContentFile[] = new Array(); + public dmps: UrlListingItem[] = new Array(); fromJSONObject(item: any): ProjectListingModel { this.id = item.id; this.label = item.label; - this.abbreviation = item.abbreviation; - this.reference = item.reference; - this.uri = item.uri; - this.status = item.status; - this.startDate = new Date(item.startdate); - this.endDate = new Date(item.enddate); - this.description = item.description; - + this.abbreviation = item.abbreviation; + this.reference = item.reference; + this.uri = item.uri; + this.status = item.status; + this.startDate = item.startdate ? new Date(item.startdate) : item.startDate; + this.endDate = item.enddate ? new Date(item.enddate) : item.endDate; + this.description = item.description; + this.files = JsonSerializer.fromJSONArray(item.files, ContentFile) + this.dmps = JsonSerializer.fromJSONArray(item.dmps, UrlListingItem) return this; } } \ No newline at end of file diff --git a/dmp-frontend/src/app/models/projects/ProjectModel.ts b/dmp-frontend/src/app/models/projects/ProjectModel.ts index 49e51c22d..3b7cb5727 100644 --- a/dmp-frontend/src/app/models/projects/ProjectModel.ts +++ b/dmp-frontend/src/app/models/projects/ProjectModel.ts @@ -4,62 +4,77 @@ import { FormGroup, FormBuilder, FormControl, Validators } from "@angular/forms" import { BackendErrorValidator } from "../../utilities/validators/BackendErrorValidator"; import { BaseErrorModel } from "../error/BaseErrorModel"; import { Status } from "../Status"; +import { ContentFile } from "../../models/files/ContentFile"; +import { JsonSerializer } from "../../utilities/JsonSerializer"; + +export enum ProjectType { + External = 0, + Internal = 1 +} export class ProjectModel implements Serializable { - public id: String; - public label: String; - public abbreviation: String; - public reference: String; - public uri: String; - public status: Status = Status.Active; - public startDate: Date; - public endDate: Date; - public description: String; + public id: string; + public label: string; + public abbreviation: string; + public reference: string; + public type: ProjectType = ProjectType.Internal; + public uri: String; + public status: Status = Status.Active; + public startDate: Date; + public endDate: Date; + public description: String; + public contentUrl: string; + public files: ContentFile[]; + public errorModel: BaseErrorModel = new BaseErrorModel(); - public errorModel: BaseErrorModel = new BaseErrorModel(); + fromJSONObject(item: any): ProjectModel { + this.id = item.id; + this.label = item.label; + this.type = item.type; + this.abbreviation = item.abbreviation; + this.reference = item.reference; + this.uri = item.uri; + this.status = item.status; + this.startDate = item.startDate ? new Date(item.startDate) : null; + this.endDate = item.endDate ? new Date(item.endDate) : null; + this.description = item.description; + this.contentUrl = item.contentUrl; + this.files = JsonSerializer.fromJSONArray(item.files, ContentFile) + return this; + } - fromJSONObject(item: any): ProjectModel { - this.id = item.id; - this.label = item.label; - this.abbreviation = item.abbreviation; - this.reference = item.reference; - this.uri = item.uri; - this.status = item.status; - this.startDate = new Date(item.startDate); - this.endDate = new Date(item.endDate); - this.description = item.description; + buildForm(context: ValidationContext = null, disabled: boolean = false): FormGroup { + if (context == null) { context = this.createValidationContext(); } - return this; - } + const formGroup = new FormBuilder().group({ + id: [{ value: this.id, disabled: disabled }, context.getValidation('id').validators], + label: [{ value: this.label, disabled: disabled }, context.getValidation('label').validators], + abbreviation: [{ value: this.abbreviation, disabled: disabled }, context.getValidation('abbreviation').validators], + uri: [{ value: this.uri, disabled: disabled }, context.getValidation('uri').validators], + status: [{ value: this.status, disabled: disabled }, context.getValidation('status').validators], + type: [{ value: this.type, disabled: disabled }, context.getValidation('type').validators], + description: [{ value: this.description, disabled: disabled }, context.getValidation('description').validators], + startDate: [{ value: this.startDate, disabled: disabled }, context.getValidation('startDate').validators], + endDate: [{ value: this.endDate, disabled: disabled }, context.getValidation('endDate').validators], + files: [{ value: this.files, disabled: disabled }, context.getValidation('files').validators] + }); - buildForm(context: ValidationContext = null, disabled: boolean = false): FormGroup { - if (context == null) { context = this.createValidationContext(); } + return formGroup; + } - const formGroup = new FormBuilder().group({ - id: [{ value: this.id, disabled: disabled }, context.getValidation('id').validators], - label: [{ value: this.label, disabled: disabled }, context.getValidation('label').validators], - abbreviation: [{ value: this.abbreviation, disabled: disabled }, context.getValidation('abbreviation').validators], - uri: [{ value: this.uri, disabled: disabled }, context.getValidation('uri').validators], - status: [{ value: this.status, disabled: disabled }, context.getValidation('status').validators], - description: [{ value: this.description, disabled: disabled }, context.getValidation('description').validators], - startDate: [{ value: this.startDate, disabled: disabled }, context.getValidation('startDate').validators], - endDate: [{ value: this.endDate, disabled: disabled }, context.getValidation('endDate').validators] - }); + createValidationContext(): ValidationContext { + const baseContext: ValidationContext = new ValidationContext(); + baseContext.validation.push({ key: 'id', validators: [] }); + baseContext.validation.push({ key: 'label', validators: [Validators.required, BackendErrorValidator(this.errorModel, 'label')] }); + baseContext.validation.push({ key: 'abbreviation', validators: [Validators.required, BackendErrorValidator(this.errorModel, 'abbreviation')] }); + baseContext.validation.push({ key: 'uri', validators: [BackendErrorValidator(this.errorModel, 'uri')] }); + baseContext.validation.push({ key: 'type', validators: [BackendErrorValidator(this.errorModel, 'type')] }); + baseContext.validation.push({ key: 'status', validators: [] }); + baseContext.validation.push({ key: 'description', validators: [Validators.required, BackendErrorValidator(this.errorModel, 'description')] }); + baseContext.validation.push({ key: 'startDate', validators: [BackendErrorValidator(this.errorModel, 'startDate')] }); + baseContext.validation.push({ key: 'endDate', validators: [BackendErrorValidator(this.errorModel, 'endDate')] }); + baseContext.validation.push({ key: 'files', validators: [BackendErrorValidator(this.errorModel, 'files')] }); - return formGroup; - } - - createValidationContext(): ValidationContext { - const baseContext: ValidationContext = new ValidationContext(); - baseContext.validation.push({ key: 'id', validators: [] }); - baseContext.validation.push({ key: 'label', validators: [Validators.required, BackendErrorValidator(this.errorModel, 'label')] }); - baseContext.validation.push({ key: 'abbreviation', validators: [Validators.required, BackendErrorValidator(this.errorModel, 'abbreviation')] }); - baseContext.validation.push({ key: 'uri', validators: [Validators.required, BackendErrorValidator(this.errorModel, 'uri')] }); - baseContext.validation.push({ key: 'status', validators: [] }); - baseContext.validation.push({ key: 'description', validators: [Validators.required, BackendErrorValidator(this.errorModel, 'description')] }); - baseContext.validation.push({ key: 'startDate', validators: [Validators.required, BackendErrorValidator(this.errorModel, 'startDate')] }); - baseContext.validation.push({ key: 'endDate', validators: [Validators.required, BackendErrorValidator(this.errorModel, 'endDate')] }); - - return baseContext; - } -} \ No newline at end of file + return baseContext; + } +} diff --git a/dmp-frontend/src/app/models/registers/RegisterModel.ts b/dmp-frontend/src/app/models/registers/RegisterModel.ts index f52389330..faf6f5f57 100644 --- a/dmp-frontend/src/app/models/registers/RegisterModel.ts +++ b/dmp-frontend/src/app/models/registers/RegisterModel.ts @@ -1,4 +1,6 @@ import { Serializable } from "../Serializable"; +import { ValidationContext } from "../../utilities/validators/ValidationContext"; +import { FormGroup, FormBuilder } from "@angular/forms"; export class RegisterModel implements Serializable { public abbreviation: String; @@ -8,6 +10,15 @@ export class RegisterModel implements Serializable { public reference: String; public uri: String; + constructor(abbreviation?: String, definition?: String, id?: String, label?: String, reference?: String, uri?: String) { + this.abbreviation = abbreviation; + this.definition = definition; + this.id = id; + this.label = label; + this.reference = reference; + this.uri = uri; + } + fromJSONObject(item: any): RegisterModel { this.abbreviation = item.abbreviation; this.definition = item.definition; @@ -18,4 +29,15 @@ export class RegisterModel implements Serializable { return this; } + + buildForm(context: ValidationContext = null, disabled: boolean = false): FormGroup { + return new FormBuilder().group({ + id: [this.id], + abbreviation: [this.abbreviation], + label: [this.label], + reference: [this.reference], + uri: [this.uri], + definition: [this.definition] + }) + } } \ No newline at end of file diff --git a/dmp-frontend/src/app/models/services/ServiceModel.ts b/dmp-frontend/src/app/models/services/ServiceModel.ts index 90f5a8194..8d9a2d7ae 100644 --- a/dmp-frontend/src/app/models/services/ServiceModel.ts +++ b/dmp-frontend/src/app/models/services/ServiceModel.ts @@ -1,4 +1,6 @@ import { Serializable } from "../Serializable"; +import { ValidationContext } from "../../utilities/validators/ValidationContext"; +import { FormBuilder, FormGroup } from "@angular/forms"; export class ServiceModel implements Serializable { public id: String; @@ -8,6 +10,14 @@ export class ServiceModel implements Serializable { public label: String; public reference: String; + constructor(id?: String, abbreviation?: String, definition?: String, uri?: String, label?: String, reference?: String) { + this.id = id; + this.abbreviation = abbreviation; + this.definition = definition; + this.uri = uri; + this.label = label; + this.reference = reference; + } fromJSONObject(item: any): ServiceModel { this.id = item.id; this.abbreviation = item.abbreviation; @@ -18,4 +28,15 @@ export class ServiceModel implements Serializable { return this; } + + buildForm(context: ValidationContext = null, disabled: boolean = false): FormGroup { + return new FormBuilder().group({ + id: [this.id], + abbreviation: [this.abbreviation], + label: [this.label], + reference: [this.reference], + uri: [this.uri], + definition: [this.definition] + }) + } } diff --git a/dmp-frontend/src/app/models/users/UserErrorModel.ts b/dmp-frontend/src/app/models/users/UserErrorModel.ts index 78f01c660..2bc10b4ad 100644 --- a/dmp-frontend/src/app/models/users/UserErrorModel.ts +++ b/dmp-frontend/src/app/models/users/UserErrorModel.ts @@ -1,4 +1,4 @@ -import { BaseErrorModel } from "@app/models/error/BaseErrorModel"; +import { BaseErrorModel } from "../../models/error/BaseErrorModel"; export class UserErrorModel extends BaseErrorModel { diff --git a/dmp-frontend/src/app/projects/editor/project-editor.component.html b/dmp-frontend/src/app/projects/editor/project-editor.component.html index bd2ef3aa8..683a90490 100644 --- a/dmp-frontend/src/app/projects/editor/project-editor.component.html +++ b/dmp-frontend/src/app/projects/editor/project-editor.component.html @@ -1,69 +1,96 @@
-
- - {{'PROJECT-EDITOR.TITLE.NEW' | translate}} - {{formGroup.get('label').value}} - + + + + {{'PROJECT-EDITOR.TITLE.NEW' | translate}} + {{formGroup.get('label').value}} +
+
+ + + +
+
+ - - - {{baseErrorModel.label}} - {{'GENERAL.VALIDATION.REQUIRED' | translate}} - + + + {{baseErrorModel.label}} + {{'GENERAL.VALIDATION.REQUIRED' | translate}} + - - - {{baseErrorModel.abbreviation}} - {{'GENERAL.VALIDATION.REQUIRED' | translate}} - + + + {{baseErrorModel.abbreviation}} + {{'GENERAL.VALIDATION.REQUIRED' | translate}} + - - - {{baseErrorModel.uri}} - {{'GENERAL.VALIDATION.REQUIRED' | translate}} - + + + {{baseErrorModel.uri}} + {{'GENERAL.VALIDATION.REQUIRED' | translate}} + - - - - - -
- - - - - {{this.project.errorModel.startDate}} - {{'GENERAL.VALIDATION.REQUIRED' | translate}} - - - - - - - {{baseErrorModel.endDate}} - {{'GENERAL.VALIDATION.REQUIRED' | translate}} - -
+ + + + + +
+ + + + + {{this.project.errorModel.startDate}} + {{'GENERAL.VALIDATION.REQUIRED' | translate}} + + + + + + + {{baseErrorModel.endDate}} + {{'GENERAL.VALIDATION.REQUIRED' | translate}} + +
- - - {{errorModel.description}} - {{'GENERAL.VALIDATION.REQUIRED' | translate}} - + + + {{errorModel.description}} + {{'GENERAL.VALIDATION.REQUIRED' | translate}} + +

{{this.languageResolverService.getBy('editorLogo') | translate}}

-
- - - -
+ + + + + +
+ + + + +
+
+ + + +
-
-
- -
\ No newline at end of file + + + +
diff --git a/dmp-frontend/src/app/projects/editor/project-editor.component.scss b/dmp-frontend/src/app/projects/editor/project-editor.component.scss index 31e8a8de3..9a5306381 100644 --- a/dmp-frontend/src/app/projects/editor/project-editor.component.scss +++ b/dmp-frontend/src/app/projects/editor/project-editor.component.scss @@ -6,6 +6,14 @@ table-layout: fixed; } +.logo-table { + table-layout: fixed; + display: inline-block; + td { + padding: 3px; + } +} + .table-card .mat-grid-tile { background: rgba(0, 0, 0, 0.32); } @@ -15,21 +23,22 @@ width: 100%; padding: 3px; } - + .fill-space { + flex: 1 1 auto; + } .mat-card { margin: 16px 0; } - p { margin: 16px; } - .left-button { float: left; } - + .right-button { + float: right; + } .description-area { height: 100px; } - -} +} \ No newline at end of file diff --git a/dmp-frontend/src/app/projects/editor/project-editor.component.ts b/dmp-frontend/src/app/projects/editor/project-editor.component.ts index d7817f28b..b68ca8f37 100644 --- a/dmp-frontend/src/app/projects/editor/project-editor.component.ts +++ b/dmp-frontend/src/app/projects/editor/project-editor.component.ts @@ -5,13 +5,20 @@ import { TranslateService } from "@ngx-translate/core"; import { DataSource } from "@angular/cdk/table"; import { Observable } from "rxjs/Observable"; import { DataManagementPlanService } from "../../services/data-management-plan/data-management-plan.service"; -import { ProjectModel } from "../../models/projects/ProjectModel"; +import { ProjectModel, ProjectType } from "../../models/projects/ProjectModel"; import { ProjectService } from "../../services/project/project.service"; import { JsonSerializer } from "../../utilities/JsonSerializer"; import { FormGroup, AbstractControl, FormControl, FormArray } from "@angular/forms"; import { SnackBarNotificationComponent } from "../../shared/components/notificaiton/snack-bar-notification.component"; import { BaseErrorModel } from "../../models/error/BaseErrorModel"; import { TdDialogService } from "@covalent/core"; +import { ProjectFileUploaderService } from "../../services/files/project-file-uploader.service"; +import { HostConfiguration } from "../../app.constants"; +import { LanguageResolverService } from "../../services/language-resolver/language-resolver.service"; +import { THIS_EXPR } from "@angular/compiler/src/output/output_ast"; +import { BaseHttpService } from "../../utilities/cite-http-service-module/base-http.service"; +import { IBreadCrumbComponent } from "../../shared/components/breadcrumb/definition/IBreadCrumbComponent"; +import { BreadcrumbItem } from "../../shared/components/breadcrumb/definition/breadcrumb-item"; @@ -19,27 +26,30 @@ import { TdDialogService } from "@covalent/core"; selector: 'app-project-editor-component', templateUrl: 'project-editor.component.html', styleUrls: ['./project-editor.component.scss'], - providers: [ProjectService], encapsulation: ViewEncapsulation.None }) -export class ProjectEditorComponent implements AfterViewInit { +export class ProjectEditorComponent implements OnInit, IBreadCrumbComponent { + breadCrumbs: Observable = Observable.of([]);; isNew = true; project: ProjectModel; formGroup: FormGroup = null; - + host = HostConfiguration.Server; + editMode = false; constructor( private projectService: ProjectService, private route: ActivatedRoute, public snackBar: MatSnackBar, public router: Router, public language: TranslateService, - private dialogService: TdDialogService + private dialogService: TdDialogService, + private uploaderService: ProjectFileUploaderService, + private languageResolverService: LanguageResolverService ) { } - ngAfterViewInit() { + ngOnInit() { this.route.params.subscribe((params: Params) => { const itemId = params['id']; @@ -48,9 +58,12 @@ export class ProjectEditorComponent implements AfterViewInit { this.projectService.getSingle(itemId).map(data => data as ProjectModel) .subscribe(data => { this.project = JsonSerializer.fromJSONObject(data, ProjectModel); - this.formGroup = this.project.buildForm(); + this.formGroup = this.project.buildForm(null, this.project.type == ProjectType.External || !this.editMode); + this.breadCrumbs = Observable.of([{ parentComponentName: "ProjectListingComponent", label: 'Projects', url: "/projects" }, { parentComponentName: null, label: this.project.label, url: "/projects/edit/" + this.project.id }]) + }); } else { + this.breadCrumbs = Observable.of([{ parentComponentName: "ProjectListingComponent", label: 'Projects', url: "/projects" }, { parentComponentName: null, label: "Project New", url: "/projects/new" }]) this.project = new ProjectModel(); setTimeout(() => { this.formGroup = this.project.buildForm(); @@ -135,18 +148,39 @@ export class ProjectEditorComponent implements AfterViewInit { } public validateAllFormFields(formControl: AbstractControl) { - if (formControl instanceof FormControl) { - formControl.updateValueAndValidity({ emitEvent: false }) - } else if (formControl instanceof FormGroup) { - Object.keys(formControl.controls).forEach(item => { - const control = formControl.get(item); - this.validateAllFormFields(control); - }) - } - else if (formControl instanceof FormArray) { - formControl.controls.forEach(item => { - this.validateAllFormFields(item); - }) - } - } -} \ No newline at end of file + if (formControl instanceof FormControl) { + formControl.updateValueAndValidity({ emitEvent: false }) + } else if (formControl instanceof FormGroup) { + Object.keys(formControl.controls).forEach(item => { + const control = formControl.get(item); + this.validateAllFormFields(control); + }) + } + else if (formControl instanceof FormArray) { + formControl.controls.forEach(item => { + this.validateAllFormFields(item); + }) + } + } + + public enableForm() { + if (!this.isExternalProject()) { + this.editMode = true; + this.formGroup.enable() + } + + } + + public disableForm() { + this.editMode = false; + this.formGroup.disable(); + } + + public goToProjectDmps() { + this.router.navigate(["dmps/project/" + this.project.id], { queryParams: { projectLabel: this.project.label } }) + } + + public isExternalProject() { + return this.project.type === ProjectType.External; + } +} diff --git a/dmp-frontend/src/app/projects/listing/project-listing.component.html b/dmp-frontend/src/app/projects/listing/project-listing.component.html index 509047b02..0a88cc1ad 100644 --- a/dmp-frontend/src/app/projects/listing/project-listing.component.html +++ b/dmp-frontend/src/app/projects/listing/project-listing.component.html @@ -1,53 +1,69 @@
-

{{'PROJECT-LISTING.TITLE' | translate}}

+

{{languageResolverService.getBy('listingTitle') | translate}}

- - - - - + + + + + - + - - - {{'PROJECT-LISTING.COLUMNS.NAME' | translate}} - {{row.label}} - - - - {{'PROJECT-LISTING.COLUMNS.ABBREVIATION' | translate}} - {{row.abbreviation}} - + + {{'PROJECT-LISTING.COLUMNS.AVATAR' | translate}} + + + + + + + {{'PROJECT-LISTING.COLUMNS.NAME' | translate}} + {{row.label}} + - - - {{'PROJECT-LISTING.COLUMNS.START' | translate}} - {{row.startDate | date:'shortDate'}} - + + + {{'PROJECT-LISTING.COLUMNS.ABBREVIATION' | translate}} + {{row.abbreviation}} + - - - {{'PROJECT-LISTING.COLUMNS.END' | translate}} - {{row.endDate | date:'shortDate'}} - + + + {{'PROJECT-LISTING.COLUMNS.START' | translate}} + {{row.startDate | date:'shortDate'}} + - - + + {{'PROJECT-LISTING.COLUMNS.END' | translate}} + {{row.endDate | date:'shortDate'}} + + + + + {{'PROJECT-LISTING.COLUMNS.DMPS' | translate}} + + + + + + + + - - + + - - - - + + + + - -
\ No newline at end of file + +
diff --git a/dmp-frontend/src/app/projects/listing/project-listing.component.ts b/dmp-frontend/src/app/projects/listing/project-listing.component.ts index e95751e62..cadef224c 100644 --- a/dmp-frontend/src/app/projects/listing/project-listing.component.ts +++ b/dmp-frontend/src/app/projects/listing/project-listing.component.ts @@ -8,34 +8,44 @@ import { Router } from "@angular/router"; import { TranslateService } from "@ngx-translate/core"; import { DataSource } from "@angular/cdk/table"; import { Observable } from "rxjs/Observable"; -import { ProjectCriteriaComponent } from '@app/shared/components/criteria/projects/projects-criteria.component'; +import { ProjectCriteriaComponent } from '../../shared/components/criteria/projects/projects-criteria.component'; +import { HostConfiguration } from '../../app.constants'; +import { LanguageService } from '../../services/language/language.service'; +import { LanguageResolverService } from '../../services/language-resolver/language-resolver.service'; +import { BreadcrumbItem } from '../../shared/components/breadcrumb/definition/breadcrumb-item'; +import { IBreadCrumbComponent } from '../../shared/components/breadcrumb/definition/IBreadCrumbComponent'; @Component({ selector: 'app-project-listing-component', templateUrl: 'project-listing.component.html', styleUrls: ['./project-listing.component.scss'], - providers: [ProjectService], encapsulation: ViewEncapsulation.None }) -export class ProjectListingComponent implements OnInit { +export class ProjectListingComponent implements OnInit, IBreadCrumbComponent { + + public breadCrumbs: Observable = Observable.of([]); @ViewChild(MatPaginator) _paginator: MatPaginator; @ViewChild(MatSort) sort: MatSort; @ViewChild(ProjectCriteriaComponent) criteria: ProjectCriteriaComponent; + host = HostConfiguration.Server; dataSource: ProjectDataSource | null; - displayedColumns: String[] = ['name', 'abbreviation', 'start', 'end']; + displayedColumns: String[] = ['avatar', 'name', 'abbreviation', 'start', 'end', "dmps"]; constructor( private projectService: ProjectService, private router: Router, private languageService: TranslateService, public snackBar: MatSnackBar, + private languageResolverService: LanguageResolverService ) { } ngOnInit() { + this.breadCrumbs = Observable.of([{ parentComponentName: null, label: 'Projects', url: "/projects" }]) + this.criteria.setCriteria(this.getDefaultCriteria()); this.refresh(); this.criteria.setRefreshCallback(() => this.refresh()); @@ -117,11 +127,19 @@ export class ProjectDataSource extends DataSource { .map(result => { if (!result) { return []; } if (this._paginator.pageIndex === 0) { this.totalCount = result.totalCount; } - return result.data; - }); + return result.data.map(item => { + item.dmps.map(dmp => { + dmp.url = "dmps/edit/" + dmp.url; + dmp.all = "dmps/project/" + item.id + return dmp; + }) + return item; + }); + }) + } disconnect() { // No-op } -} \ No newline at end of file +} diff --git a/dmp-frontend/src/app/projects/project.routes.ts b/dmp-frontend/src/app/projects/project.routes.ts index d63389d25..40d1feaf8 100644 --- a/dmp-frontend/src/app/projects/project.routes.ts +++ b/dmp-frontend/src/app/projects/project.routes.ts @@ -2,10 +2,30 @@ import { ProjectEditorComponent } from './editor/project-editor.component'; import { ProjectListingComponent } from './listing/project-listing.component'; import { RouterModule, Routes } from '@angular/router'; -const routes: Routes = [ - { path: '', component: ProjectListingComponent }, - { path: 'edit/:id', component: ProjectEditorComponent }, - { path: 'new', component: ProjectEditorComponent }, +export const ProjectRoutes: Routes = [ + { + path: '', + component: ProjectListingComponent, + data: { + breadcrumb: true + }, + }, + { + path: 'edit/:id', + component: ProjectEditorComponent, + data: { + breadcrumb: true + }, + /* resolve: { + project: ProjectResolver + } */ + }, + { + path: 'new', + component: ProjectEditorComponent, + data: { + breadcrumb: true + }, + }, ]; -export const ProjectRoutes = RouterModule.forChild(routes); diff --git a/dmp-frontend/src/app/projects/projects.module.ts b/dmp-frontend/src/app/projects/projects.module.ts index 015e78657..df39fc1df 100644 --- a/dmp-frontend/src/app/projects/projects.module.ts +++ b/dmp-frontend/src/app/projects/projects.module.ts @@ -11,43 +11,55 @@ import { CommonModule } from '@angular/common'; import { SharedModule } from '../shared/shared.module' import { NgModule } from '@angular/core'; +import { ProjectService } from '../services/project/project.service'; +import { ProjectFileUploaderService } from '../services/files/project-file-uploader.service'; +import { RouterModule } from '@angular/router'; +import { BaseHttpModule } from '../utilities/cite-http-service-module/cite-http.module'; +import { MaterialModule } from '../shared/material/material.module'; + @NgModule({ - imports: [ - CommonModule, - FormsModule, - HttpClientModule, - SharedModule, - ProjectRoutes, - ReactiveFormsModule, - TranslateModule.forRoot({ - loader: { - provide: TranslateLoader, - useFactory: HttpLoaderFactory, - deps: [HttpClient] - } - }), - ], + imports: [ + CommonModule, + FormsModule, + HttpClientModule, + SharedModule, + MaterialModule, + RouterModule.forChild(ProjectRoutes), + ReactiveFormsModule, + TranslateModule.forRoot({ + loader: { + provide: TranslateLoader, + useFactory: HttpLoaderFactory, + deps: [HttpClient] + } + }), + BaseHttpModule.forRoot() + ], - declarations: [ - ProjectListingComponent, - ProjectEditorComponent - ], + declarations: [ + ProjectListingComponent, + ProjectEditorComponent + ], - exports: [ - ProjectListingComponent, - ProjectEditorComponent, - ], providers: [ - BaseHttpService - ] + exports: [ + ProjectListingComponent, + ProjectEditorComponent, + RouterModule + ], + providers: [ + ProjectService, + ProjectFileUploaderService, + /* ProjectResolver */ + ] }) export class ProjectsModule { - constructor(private translate: TranslateService) { - translate.setDefaultLang('en'); - translate.use('en'); - } + constructor(private translate: TranslateService) { + translate.setDefaultLang('en'); + translate.use('en'); + } } export function HttpLoaderFactory(httpClient: HttpClient) { - return new TranslateHttpLoader(httpClient, 'assets/lang/', '.json'); + return new TranslateHttpLoader(httpClient, 'assets/lang/', '.json'); } diff --git a/dmp-frontend/src/app/services/auth/auth.service.ts b/dmp-frontend/src/app/services/auth/auth.service.ts index c9c8a76a6..6d6561dbf 100644 --- a/dmp-frontend/src/app/services/auth/auth.service.ts +++ b/dmp-frontend/src/app/services/auth/auth.service.ts @@ -14,136 +14,136 @@ import { SnackBarNotificationComponent } from '../../shared/components/notificai @Injectable() export class AuthService { - private actionUrl: string; - private headers: HttpHeaders; + private actionUrl: string; + private headers: HttpHeaders; - constructor( - private http: HttpClient, - public snackBar: MatSnackBar, - public language: TranslateService, - public router: Router - ) { + constructor( + private http: HttpClient, + public snackBar: MatSnackBar, + public language: TranslateService, + public router: Router + ) { - this.actionUrl = HostConfiguration.Server + 'auth/'; + this.actionUrl = HostConfiguration.Server + 'auth/'; - this.headers = new HttpHeaders(); - this.headers = this.headers.set('Content-Type', 'application/json'); - this.headers = this.headers.set('Accept', 'application/json'); - } + this.headers = new HttpHeaders(); + this.headers = this.headers.set('Content-Type', 'application/json'); + this.headers = this.headers.set('Accept', 'application/json'); + } - private clear(): void { - localStorage.removeItem('principal'); - } + private clear(): void { + localStorage.removeItem('principal'); + } - public current(principal?: Principal): Principal { - if (principal) { - localStorage.setItem('principal', JSON.stringify(principal)); - return principal; - } - const principalJson = localStorage.getItem('principal'); - if (!principalJson) { return null; } - const principalObj = JSON.parse(principalJson) as Principal; - return principalObj; - } + public current(principal?: Principal): Principal { + if (principal) { + localStorage.setItem('principal', JSON.stringify(principal)); + return principal; + } + const principalJson = localStorage.getItem('principal'); + if (!principalJson) { return null; } + const principalObj = JSON.parse(principalJson) as Principal; + return principalObj; + } - //public login(credential: Credential): Observable { - // const url = this.actionUrl + 'login'; + //public login(credential: Credential): Observable { + // const url = this.actionUrl + 'login'; - // return this.http.post(url, credential, { headers: this.headers }) - // .map((res: Response) => { - // let principal = this.current(new JsonSerializer().fromJSONObject(res, Principal)); - // //this.loginContextSubject.next(true); - // return principal; - // }) - // .catch((error: any) => { - // //this.loginContextSubject.next(false); - // return Observable.throw(error); - // }); - //} + // return this.http.post(url, credential, { headers: this.headers }) + // .map((res: Response) => { + // let principal = this.current(new JsonSerializer().fromJSONObject(res, Principal)); + // //this.loginContextSubject.next(true); + // return principal; + // }) + // .catch((error: any) => { + // //this.loginContextSubject.next(false); + // return Observable.throw(error); + // }); + //} - public login(loginInfo: LoginInfo): Observable { - const url = this.actionUrl + 'externallogin'; + public login(loginInfo: LoginInfo): Observable { + const url = this.actionUrl + 'externallogin'; - return this.http.post(url, loginInfo, { headers: this.headers }) - .map((res: any) => { - const principal = this.current(JsonSerializer.fromJSONObject(res.payload, Principal)); - //this.loginContextSubject.next(true); - return principal; - }) - .catch((error: any) => { - //this.loginContextSubject.next(false); - return Observable.throw(error); - }); - } + return this.http.post(url, loginInfo, { headers: this.headers }) + .map((res: any) => { + const principal = this.current(JsonSerializer.fromJSONObject(res.payload, Principal)); + //this.loginContextSubject.next(true); + return principal; + }) + .catch((error: any) => { + //this.loginContextSubject.next(false); + return Observable.throw(error); + }); + } - public nativeLogin(credentials: Credential): Observable { - const url = this.actionUrl + 'nativelogin'; + public nativeLogin(credentials: Credential): Observable { + const url = this.actionUrl + 'nativelogin'; - return this.http.post(url, credentials, { headers: this.headers }) - .map((res: any) => { - const principal = this.current(JsonSerializer.fromJSONObject(res.payload, Principal)); - //this.loginContextSubject.next(true); - return principal; - }) - .catch((error: any) => { - //this.loginContextSubject.next(false); - return Observable.throw(error); - }); - } + return this.http.post(url, credentials, { headers: this.headers }) + .map((res: any) => { + const principal = this.current(JsonSerializer.fromJSONObject(res.payload, Principal)); + //this.loginContextSubject.next(true); + return principal; + }) + .catch((error: any) => { + //this.loginContextSubject.next(false); + return Observable.throw(error); + }); + } - public logout(): void { - const url = this.actionUrl + 'logout'; - const principal = this.current(); - this.clear(); + public logout(): void { + const url = this.actionUrl + 'logout'; + const principal = this.current(); + this.clear(); - if (!principal) { return; } - let headers = this.headers; - headers = headers.set('AuthToken', principal.token) - this.http.post(url, null, { headers: headers }).subscribe( - res => this.onLogOutSuccess(res), - error => this.onLogOutError(error) - ) - } + if (!principal) { return; } + let headers = this.headers; + headers = headers.set('AuthToken', principal.token) + this.http.post(url, null, { headers: headers }).subscribe( + res => this.onLogOutSuccess(res), + error => this.onLogOutError(error) + ) + } - public me(): Observable { - const url = this.actionUrl + '/me'; - const principal = this.current(); - if (!principal) { - this.clear(); - return Observable.of(); - } - let headers = this.headers; - headers = headers.set('AuthToken', principal.token) - return this.http.post(url, null, { headers: headers }) - .map((res: any) => { - const princ = this.current(JsonSerializer.fromJSONObject(res.payload, Principal)); - return princ; - }) - .catch((error: any) => { - console.warn('could not retrieve me info:\n', error); - this.clear(); - const princ = this.current(); - this.router.navigate(['/login']); - return Observable.of(princ); - }); - } + public me(): Observable { + const url = this.actionUrl + '/me'; + const principal = this.current(); + if (!principal) { + this.clear(); + return Observable.of(); + } + let headers = this.headers; + headers = headers.set('AuthToken', principal.token) + return this.http.post(url, null, { headers: headers }) + .map((res: any) => { + const princ = this.current(JsonSerializer.fromJSONObject(res.payload, Principal)); + return princ; + }) + .catch((error: any) => { + console.warn('could not retrieve me info:\n', error); + this.clear(); + const princ = this.current(); + this.router.navigate(['/login']); + return Observable.of(princ); + }); + } - public onLogOutSuccess(logoutMessage: any) { - this.snackBar.openFromComponent(SnackBarNotificationComponent, { - data: { message: 'GENERAL.SNACK-BAR.SUCCESSFUL-LOGOUT', language: this.language }, - duration: 3000, - extraClasses: ['snackbar-success'] - }) - this.router.navigate(['/login']); - } + public onLogOutSuccess(logoutMessage: any) { + this.snackBar.openFromComponent(SnackBarNotificationComponent, { + data: { message: 'GENERAL.SNACK-BAR.SUCCESSFUL-LOGOUT', language: this.language }, + duration: 3000, + extraClasses: ['snackbar-success'] + }) + this.router.navigate(['/login']); + } - public onLogOutError(errorMessage: string) { - this.snackBar.openFromComponent(SnackBarNotificationComponent, { - data: { message: 'GENERAL.SNACK-BAR.UNSUCCESSFUL-LOGOUT', language: this.language }, - duration: 3000, - extraClasses: ['snackbar-warning'] - }) - this.router.navigate(['/login']); - } + public onLogOutError(errorMessage: string) { + this.snackBar.openFromComponent(SnackBarNotificationComponent, { + data: { message: 'GENERAL.SNACK-BAR.UNSUCCESSFUL-LOGOUT', language: this.language }, + duration: 3000, + extraClasses: ['snackbar-warning'] + }) + this.router.navigate(['/login']); + } } diff --git a/dmp-frontend/src/app/services/breadcrumb/breadcrumb-resolver.service.ts b/dmp-frontend/src/app/services/breadcrumb/breadcrumb-resolver.service.ts new file mode 100644 index 000000000..b60200afd --- /dev/null +++ b/dmp-frontend/src/app/services/breadcrumb/breadcrumb-resolver.service.ts @@ -0,0 +1,83 @@ +import { Component, Input, OnInit, AfterViewChecked, ViewChild, NgZone } from '@angular/core'; +import { HttpClient, HttpHeaders } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import { ActivatedRoute, Router } from '@angular/router'; +import { BreadcrumbItem } from '../../shared/components/breadcrumb/definition/breadcrumb-item'; +import { IBreadCrumbComponent } from '../../shared/components/breadcrumb/definition/IBreadCrumbComponent'; +import { Observable } from 'rxjs/Observable'; + +@Injectable() +export class BreadCrumbResolverService { + + private activeComponents = []; + private parentComponents = []; + private breadCrumbs: Observable = Observable.of([]); + constructor( + private router: Router, + private zone: NgZone + ) { } + + public push(component: any) { + let existingComponentIndex = this.activeComponents.map(x => x.constructor.name).indexOf(component.constructor.name); + if (existingComponentIndex !== -1) this.activeComponents.splice(existingComponentIndex, 1) + this.activeComponents.push(component); + } + + public clear() { + this.activeComponents.length = 0; + this.breadCrumbs = Observable.of([]) + } + + public resolve(activatedRoute: ActivatedRoute): Observable { + this.breadCrumbs = Observable.of([]) + let routeComponents = this.getComponentsFromRoute(activatedRoute, []); + this.activeComponents.filter(x => routeComponents.indexOf(x.constructor.name) !== -1).forEach(x => { + if (x.hasOwnProperty('breadCrumbs')) { + let componentItems = this.resolveDependentComponents((x).breadCrumbs, []); + this.breadCrumbs = Observable.of(componentItems); + } + }) + return this.breadCrumbs; + } + + private getComponentsFromRoute(activatedRoute: ActivatedRoute, routeComponents: any[]): any[] { + activatedRoute.children.forEach(x => { + if (x.children.length > 0) this.getComponentsFromRoute(x.children[0], routeComponents); + if (x.component) routeComponents.push(x.component['name']) + }) + if (activatedRoute.component) routeComponents.push(activatedRoute.component['name']) + + return routeComponents; + } + + resolveDependentComponents(items: Observable, components: any[]): any[] { + items.subscribe(breadCrumbs => { + breadCrumbs.forEach(async item => { + let parentComponent = item.parentComponentName ? this.findComponent(item.parentComponentName) : null + if (parentComponent && parentComponent.hasOwnProperty('breadCrumbs')) { + components = this.pushToStart(components, this.resolveDependentComponents((parentComponent).breadCrumbs, components)) + } else if (item.notFoundResolver) { + components = this.pushToStart(components, item.notFoundResolver) + //components = this.pushToStart(components, [unresolvedComponentItems]) + } + }) + components = this.pushToEnd(components, breadCrumbs); + }) + return components + } + + private findComponent(componentName: string): any { + for (let i = 0; i < this.activeComponents.length; i++) { + if (this.activeComponents[i].constructor.name === componentName) return this.activeComponents[i]; + } + return null + } + + pushToStart(first: any[], second: any[]) { + return [].concat(second.filter(x => first.map(firstX => firstX.label).indexOf(x.label) == -1), first); + } + + pushToEnd(first: any[], second: any[]) { + return [].concat(first, second.filter(x => first.map(firstX => firstX.label).indexOf(x.label) == -1)); + } +} diff --git a/dmp-frontend/src/app/services/data-management-plan-profile/datamanagement-profile.service.ts b/dmp-frontend/src/app/services/data-management-plan-profile/datamanagement-profile.service.ts new file mode 100644 index 000000000..0d07d28dd --- /dev/null +++ b/dmp-frontend/src/app/services/data-management-plan-profile/datamanagement-profile.service.ts @@ -0,0 +1,43 @@ +import { Injectable } from "@angular/core"; +import { HttpHeaders } from "@angular/common/http"; +import { BaseHttpService } from "../../utilities/cite-http-service-module/base-http.service"; +import { HostConfiguration } from "../../app.constants"; +import { DataTableRequest } from "../../models/data-table/DataTableRequest"; +import { DataTableData } from "../../models/data-table/DataTableData"; +import { Observable } from "rxjs/Observable"; +import { DataManagementPlanProfileCriteria } from "../../models/criteria/dmp-profile/DataManagementPlanProfileCriteria"; +import { DataManagementPlanProfileListingModel } from "../../models/data-management-plan-profile/DataManagementPlanProfileListingModel"; +import { DataManagementPlanProfileModel } from "../../models/data-management-plan-profile/DataManagementPlanProfileModel"; +import { RequestItem } from "../../models/criteria/RequestItem"; + +@Injectable() +export class DataManagementPlanProfileService { + + private actionUrl: string; + private headers: HttpHeaders; + + constructor(private http: BaseHttpService) { + + this.actionUrl = HostConfiguration.Server + 'dmpprofile/'; + + this.headers = new HttpHeaders(); + this.headers = this.headers.set('Content-Type', 'application/json'); + this.headers = this.headers.set('Accept', 'application/json'); + } + + getPaged(dataTableRequest: DataTableRequest): Observable> { + return this.http.post>(this.actionUrl + 'getPaged', dataTableRequest, { headers: this.headers }); + } + + getSingle(id: String): Observable { + return this.http.get(this.actionUrl + 'getSingle/' + id, { headers: this.headers }); + } + + createDataManagementPlan(dataManagementPlanModel: DataManagementPlanProfileModel): Observable { + return this.http.post(this.actionUrl + 'createOrUpdate', dataManagementPlanModel, { headers: this.headers }); + } + + getAll(criteria: RequestItem): Observable { + return this.http.post(this.actionUrl + 'get/' ,criteria, { headers: this.headers }); + } +} diff --git a/dmp-frontend/src/app/services/data-management-plan/data-management-plan.service.ts b/dmp-frontend/src/app/services/data-management-plan/data-management-plan.service.ts index 16cf5cd9f..21abe62af 100644 --- a/dmp-frontend/src/app/services/data-management-plan/data-management-plan.service.ts +++ b/dmp-frontend/src/app/services/data-management-plan/data-management-plan.service.ts @@ -38,7 +38,7 @@ export class DataManagementPlanService { } createDataManagementPlan(dataManagementPlanModel: DataManagementPlanModel): Observable { - return this.http.post(this.actionUrl + 'createOrUpdate', dataManagementPlanModel, { headers: this.headers }); + return this.http.post(this.actionUrl + 'createOrUpdate', dataManagementPlanModel, { headers: this.headers }); } inactivate(id: String): Observable { @@ -49,15 +49,19 @@ export class DataManagementPlanService { return this.http.post(this.actionUrl + "datasetprofiles/get", dataSetProfileRequest, { headers: this.headers }); } - newVersion(dataManagementPlanModel: DataManagementPlanModel, id:String): Observable { - return this.http.post(this.actionUrl + 'new/' + id , dataManagementPlanModel, { headers: this.headers }); + newVersion(dataManagementPlanModel: DataManagementPlanModel, id: String): Observable { + return this.http.post(this.actionUrl + 'new/' + id, dataManagementPlanModel, { headers: this.headers }); } - clone(dataManagementPlanModel: DataManagementPlanModel, id:String): Observable { - return this.http.post(this.actionUrl + 'clone/' + id , dataManagementPlanModel, { headers: this.headers }); + clone(dataManagementPlanModel: DataManagementPlanModel, id: String): Observable { + return this.http.post(this.actionUrl + 'clone/' + id, dataManagementPlanModel, { headers: this.headers }); } delete(id: String): Observable { return this.http.delete(this.actionUrl + 'delete/' + id, { headers: this.headers }); } + + getDynamicField(requestItem: RequestItem): any { + return this.http.post(this.actionUrl + "dynamic", requestItem, { headers: this.headers }) + } } diff --git a/dmp-frontend/src/app/services/dataset-profile.service.ts b/dmp-frontend/src/app/services/dataset-profile.service.ts index da174b7a0..81009cb85 100644 --- a/dmp-frontend/src/app/services/dataset-profile.service.ts +++ b/dmp-frontend/src/app/services/dataset-profile.service.ts @@ -1,38 +1,49 @@ import { Component, Input, OnInit, AfterViewChecked, ViewChild } from '@angular/core'; -import { HttpClient } from '@angular/common/http'; +import { HttpClient, HttpHeaders } from '@angular/common/http'; import { Injectable } from '@angular/core'; -import { DatasetProfileAdmin } from '@app/services/datasetProfileAdmin/datasetProfileAfmin.service'; +import { DatasetProfileAdmin } from '../services/datasetProfileAdmin/datasetProfileAfmin.service'; +import { HostConfiguration } from '../app.constants'; +import { Observable } from 'rxjs/Observable'; +import { RequestItem } from '../models/criteria/RequestItem'; +import { AutocompleteLookupItem } from '../models/auto-complete/AutocompleteLookupItem'; @Injectable() -export class DatasetProfileService implements OnInit { +export class DatasetProfileService { - constructor(public datasetProfileAdmin: DatasetProfileAdmin) { + private actionUrl: string; + private headers: HttpHeaders; + + constructor(private httpClient: HttpClient, private datasetProfileAdmin: DatasetProfileAdmin) { + this.actionUrl = HostConfiguration.Server + 'datasetwizard/'; + + this.headers = new HttpHeaders(); + this.headers = this.headers.set('Content-Type', 'application/json'); + this.headers = this.headers.set('Accept', 'application/json'); } - - ngOnInit(){ - + fetchAllDatasetProfiles() { + // return this.restBase.get("datasetprofiles/getAll"); } - fetchAllDatasetProfiles(){ - // return this.restBase.get("datasetprofiles/getAll"); - } - - getDatasetProfileById(datasetProfileID){ + getDatasetProfileById(datasetProfileID) { return this.datasetProfileAdmin.getDatasetProfileById(datasetProfileID); } - createDatasetProfile(datasetProfile){ - // return this.restBase.post("datasetprofile/create", datasetProfile); + createDatasetProfile(datasetProfile) { + // return this.restBase.post("datasetprofile/create", datasetProfile); } - updateDatasetProfile(datasetProfile){ - // return this.restBase.post("datasetprofile/update", datasetProfile); + updateDatasetProfile(datasetProfile) { + // return this.restBase.post("datasetprofile/update", datasetProfile); } - delete(datasetProfile){ - // return this.restBase.post("datasetprofile/delete", datasetProfile); + delete(datasetProfile) { + // return this.restBase.post("datasetprofile/delete", datasetProfile); } - -} \ No newline at end of file + queryAutocomplete(lookUpItem: RequestItem): Observable { + return this.httpClient.post(HostConfiguration.Server + "search/autocomplete", lookUpItem) + } + + +} diff --git a/dmp-frontend/src/app/services/dataset-wizard/dataset-wizard.service.ts b/dmp-frontend/src/app/services/dataset-wizard/dataset-wizard.service.ts index e2713a8bd..2ef2ef5be 100644 --- a/dmp-frontend/src/app/services/dataset-wizard/dataset-wizard.service.ts +++ b/dmp-frontend/src/app/services/dataset-wizard/dataset-wizard.service.ts @@ -10,7 +10,7 @@ import { Observable } from 'rxjs/Observable'; import { DataManagementPlanModel } from '../../models/data-managemnt-plans/DataManagementPlanModel'; import { DataManagementPlanCriteria } from '../../models/criteria/data-management-plan/DataManagementPlanCriteria'; import { RequestItem } from '../../models/criteria/RequestItem'; -import { DatasetProfileModel } from '@app/models/datasetprofile/DatasetProfileModel'; +import { DatasetProfileModel } from '../../models/datasetprofile/DatasetProfileModel'; import { ResponseContentType } from '@angular/http'; diff --git a/dmp-frontend/src/app/services/dataset/dataset.service.ts b/dmp-frontend/src/app/services/dataset/dataset.service.ts index 22939eba1..35dc02b34 100644 --- a/dmp-frontend/src/app/services/dataset/dataset.service.ts +++ b/dmp-frontend/src/app/services/dataset/dataset.service.ts @@ -9,7 +9,7 @@ import { DataTableData } from '../../models/data-table/DataTableData'; import { DatasetListingModel } from '../../models/datasets/DatasetListingModel'; import { DatasetModel } from '../../models/datasets/DatasetModel'; import { DatasetCriteria } from '../../models/criteria/dataset/DatasetCriteria'; -import { DatasetProfileModel } from '@app/models/datasetprofile/DatasetProfileModel'; +import { DatasetProfileModel } from '../../models/datasetprofile/DatasetProfileModel'; @@ -32,12 +32,12 @@ export class DatasetService { return this.http.post>(this.actionUrl + 'getPaged', dataTableRequest, { headers: this.headers }); } - makeDatasetPublic(id: String){ - return this.http.get(this.actionUrl + 'makepublic/' + id, { headers: this.headers }) + makeDatasetPublic(id: String) { + return this.http.get(this.actionUrl + 'makepublic/' + id, { headers: this.headers }) } - getDatasetProfiles(): Observable{ - return this.http.get(HostConfiguration.Server +'datasetprofiles/getAll', { headers: this.headers }) + getDatasetProfiles(): Observable { + return this.http.get(HostConfiguration.Server + 'datasetprofiles/getAll', { headers: this.headers }) } - + } diff --git a/dmp-frontend/src/app/services/datasetProfileAdmin/datasetProfileAfmin.service.ts b/dmp-frontend/src/app/services/datasetProfileAdmin/datasetProfileAfmin.service.ts index a6305b739..764adaca4 100644 --- a/dmp-frontend/src/app/services/datasetProfileAdmin/datasetProfileAfmin.service.ts +++ b/dmp-frontend/src/app/services/datasetProfileAdmin/datasetProfileAfmin.service.ts @@ -9,37 +9,37 @@ import { DatasetModel } from '../../models/datasets/DatasetModel'; import { DatasetCriteria } from '../../models/criteria/dataset/DatasetCriteria'; import { DatasetProfileModelAdmin } from '../../models/datasetProfileAdmin/DatasetProfileModelAdmin'; -import { DatasetListingModel } from '@app/models/datasets/DatasetListingModel'; +import { DatasetListingModel } from '../../models/datasets/DatasetListingModel'; @Injectable() export class DatasetProfileAdmin { - private actionUrl: string; - private headers: HttpHeaders; + private actionUrl: string; + private headers: HttpHeaders; - constructor(private http: BaseHttpService) { + constructor(private http: BaseHttpService) { - this.actionUrl = HostConfiguration.Server + 'admin/'; + this.actionUrl = HostConfiguration.Server + 'admin/'; - this.headers = new HttpHeaders(); - this.headers = this.headers.set('Content-Type', 'application/json'); - this.headers = this.headers.set('Accept', 'application/json'); - } - createForm(data) { - return this.http.post(this.actionUrl + 'addDmp', data, { headers: this.headers }); - } + this.headers = new HttpHeaders(); + this.headers = this.headers.set('Content-Type', 'application/json'); + this.headers = this.headers.set('Accept', 'application/json'); + } + createForm(data) { + return this.http.post(this.actionUrl + 'addDmp', data, { headers: this.headers }); + } - updateForm(id, data) { - return this.http.post(this.actionUrl + 'addDmp/' + id, data, { headers: this.headers }) - } + updateForm(id, data) { + return this.http.post(this.actionUrl + 'addDmp/' + id, data, { headers: this.headers }) + } - getDatasetProfileById(datasetProfileID){ - return this.http.get(this.actionUrl + 'get/' + datasetProfileID, { headers: this.headers }) - } + getDatasetProfileById(datasetProfileID) { + return this.http.get(this.actionUrl + 'get/' + datasetProfileID, { headers: this.headers }) + } + + getPaged(dataTableRequest: DataTableRequest): Observable> { + return this.http.post>(this.actionUrl + 'datasetprofiles/getPaged', dataTableRequest, { headers: this.headers }); + } - getPaged(dataTableRequest: DataTableRequest): Observable> { - return this.http.post>(this.actionUrl + 'datasetprofiles/getPaged', dataTableRequest, { headers: this.headers }); - } - } diff --git a/dmp-frontend/src/app/services/external-sources/external-sources-configuration.service.ts b/dmp-frontend/src/app/services/external-sources/external-sources-configuration.service.ts new file mode 100644 index 000000000..e31098525 --- /dev/null +++ b/dmp-frontend/src/app/services/external-sources/external-sources-configuration.service.ts @@ -0,0 +1,28 @@ +import { ExternalSourcesConfiguration } from "../../models/external-sources/ExternalSourcesConfiguration"; +import { BaseHttpService } from "../../utilities/cite-http-service-module/base-http.service"; +import { HostConfiguration } from "../../app.constants"; +import { HttpHeaders } from "@angular/common/http"; +import { Injectable } from "@angular/core"; +import { Observable } from "rxjs/Observable"; + + +@Injectable() +export class ExternalSourcesConfigurationService { + + private actionUrl: string; + private headers: HttpHeaders; + + constructor(private http: BaseHttpService) { + + this.actionUrl = HostConfiguration.Server + 'common/'; + + this.headers = new HttpHeaders(); + this.headers = this.headers.set('Content-Type', 'application/json'); + this.headers = this.headers.set('Accept', 'application/json'); + } + + public getExternalSourcesConfiguration(): Observable { + return this.http.get(this.actionUrl + "externalSourcesConfiguration", { headers: this.headers }); + } + +} diff --git a/dmp-frontend/src/app/services/external-sources/external-sources.service.ts b/dmp-frontend/src/app/services/external-sources/external-sources.service.ts index e2c7c84fd..569aa5487 100644 --- a/dmp-frontend/src/app/services/external-sources/external-sources.service.ts +++ b/dmp-frontend/src/app/services/external-sources/external-sources.service.ts @@ -5,51 +5,56 @@ import { HostConfiguration } from './../../app.constants'; import { BaseHttpService } from '../../utilities/cite-http-service-module/base-http.service'; import { Observable } from 'rxjs/Observable'; import { ExternalSourcesItemModel } from '../../models/external-sources/ExternalSourcesItemModel'; -import { BaseCriteria } from '@app/models/criteria/BaseCriteria'; -import { RequestItem } from '@app/models/criteria/RequestItem'; +import { BaseCriteria } from '../../models/criteria/BaseCriteria'; +import { RequestItem } from '../../models/criteria/RequestItem'; +import { ResearcherCriteria } from '../../models/criteria/researchers/ResearcherCriteria'; +import { ExternalDatasetCriteria } from '../../models/criteria/external-dataset/ExternalDatasetCriteria'; +import { RegistryCriteria } from '../../models/criteria/registry/RegistryCriteria'; +import { DataRepositoryCriteria } from '../../models/criteria/data-repository/DataRepositoryCriteria'; +import { ServicesCriteria } from '../../models/criteria/services/ServicesCriteria'; @Injectable() export class ExternalSourcesService { - private actionUrl: string; - private headers: HttpHeaders; + private actionUrl: string; + private headers: HttpHeaders; - constructor(private http: BaseHttpService) { + constructor(private http: BaseHttpService) { - this.actionUrl = HostConfiguration.Server + 'external/'; + this.actionUrl = HostConfiguration.Server + 'external/'; - this.headers = new HttpHeaders(); - this.headers = this.headers.set('Content-Type', 'application/json'); - this.headers = this.headers.set('Accept', 'application/json'); - } + this.headers = new HttpHeaders(); + this.headers = this.headers.set('Content-Type', 'application/json'); + this.headers = this.headers.set('Accept', 'application/json'); + } - public searchDatasetRegistry(like: string): Observable { - return this.http.get(this.actionUrl + "registries" + "?query=" + like, { headers: this.headers }); - } + public searchDatasetRegistry(requestItem: RequestItem): Observable { + return this.http.get(this.actionUrl + "registries" + "?query=" + requestItem.criteria.like + "&type=" + requestItem.criteria.type, { headers: this.headers }); + } - public searchDatasetRepository(like: string): Observable { - return this.http.get(this.actionUrl + "datarepos" + "?query=" + like, { headers: this.headers }); - } + public searchDatasetRepository(requestItem: RequestItem): Observable { + return this.http.get(this.actionUrl + "datarepos" + "?query=" + requestItem.criteria.like + "&type=" + requestItem.criteria.type, { headers: this.headers }); + } - public searchDatasetService(like: string): Observable { - return this.http.get(this.actionUrl + "services" + "?query=" + like, { headers: this.headers }); - } + public searchDatasetService(requestItem: RequestItem): Observable { + return this.http.get(this.actionUrl + "services" + "?query=" + requestItem.criteria.like + "&type=" + requestItem.criteria.type, { headers: this.headers }); + } - public searchDatasetSExternalDatasetservice(like: string): Observable { - return this.http.get(this.actionUrl + "datasets" + "?query=" + like, { headers: this.headers }); - } + public searchDatasetSExternalDatasetservice(requestItem: RequestItem): Observable { + return this.http.get(this.actionUrl + "datasets" + "?query=" + requestItem.criteria.like + "&type=" + requestItem.criteria.type, { headers: this.headers }); + } - public searchDMPResearchers(like: string): Observable { - return this.http.get(this.actionUrl + "researchers" + "?query=" + like, { headers: this.headers }); - } + public searchDMPResearchers(requestItem: RequestItem): Observable { + return this.http.post(HostConfiguration.Server + "/researchers/getWithExternal", requestItem, { headers: this.headers }); + } - public searchDMPOrganizations(like: string): Observable { - return this.http.get(this.actionUrl + "organisations" + "?query=" + like, { headers: this.headers }); - }//organizationscriteria.criteria.like + public searchDMPOrganizations(like: string): Observable { + return this.http.get(this.actionUrl + "organisations" + "?query=" + like, { headers: this.headers }); + }//organizationscriteria.criteria.like - public searchDMPProfiles(like: string): Observable { - return this.http.get(this.actionUrl + "datasetprofiles/get" + "?query=" + like, { headers: this.headers }); - } + public searchDMPProfiles(like: string): Observable { + return this.http.get(this.actionUrl + "datasetprofiles/get" + "?query=" + like, { headers: this.headers }); + } } diff --git a/dmp-frontend/src/app/services/files/project-file-uploader.service.ts b/dmp-frontend/src/app/services/files/project-file-uploader.service.ts new file mode 100644 index 000000000..4a4ce12fa --- /dev/null +++ b/dmp-frontend/src/app/services/files/project-file-uploader.service.ts @@ -0,0 +1,34 @@ +import 'rxjs/add/operator/map'; +import { HttpClient, HttpHeaders } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import { HostConfiguration } from './../../app.constants'; +import { BaseHttpService } from '../../utilities/cite-http-service-module/base-http.service'; +import { Observable } from 'rxjs/Observable'; +import { ExternalSourcesItemModel } from '../../models/external-sources/ExternalSourcesItemModel'; +import { BaseCriteria } from '../../models/criteria/BaseCriteria'; +import { RequestItem } from '../../models/criteria/RequestItem'; +import { ResearcherCriteria } from '../../models/criteria/researchers/ResearcherCriteria'; +import { FileUploader } from '../../shared/components/file-uploader/FileUploader'; +import { ContentFile } from '../../models/files/ContentFile'; + + +@Injectable() +export class ProjectFileUploaderService implements FileUploader { + + + private actionUrl: string; + private headers: HttpHeaders; + + constructor(private http: BaseHttpService) { + + this.actionUrl = HostConfiguration.Server + 'files/'; + + this.headers = new HttpHeaders(); + this.headers = this.headers.set('Content-Type', 'application/json'); + this.headers = this.headers.set('Accept', 'application/json'); + } + + uploadFile(formData: FormData): Observable { + return this.http.post(this.actionUrl + "upload", formData, this.headers); + } +} diff --git a/dmp-frontend/src/app/services/help-content/help-content.service.ts b/dmp-frontend/src/app/services/help-content/help-content.service.ts index f5756d583..f14e70982 100644 --- a/dmp-frontend/src/app/services/help-content/help-content.service.ts +++ b/dmp-frontend/src/app/services/help-content/help-content.service.ts @@ -9,48 +9,47 @@ import { CachedContentItem } from './CachedContentItem'; import { HostConfiguration } from '../../app.constants'; @Injectable() export class HelpContentService { - private _helpServiceUrl = HostConfiguration.HelpServiceUrl; - cache = new Map(); + private _helpServiceUrl = HostConfiguration.HelpServiceUrl; + cache = new Map(); - constructor(private http: Http) { - } + constructor(private http: Http) { + } - getActivePageContent(route: string) { - if (!this.cache.get(route) || !this.isValidCachedItem(route)) { - return this.http.get(this._helpServiceUrl + "/page/route?q=" + route) - .map(res => { - this.cache.set(route, { timestamp: Date.now(), content: res.json() }) - return res.json(); - }) - .catch(this.handleError) - } - return Observable.create(observer => observer.next(this.cache.get(route).content)); + getActivePageContent(route: string) { + if (!this.cache.get(route) || !this.isValidCachedItem(route)) { + return this.http.get(this._helpServiceUrl + "/page/route?q=" + route) + .map(res => { + this.cache.set(route, { timestamp: Date.now(), content: res.json() }) + return res.json(); + }) + .catch(this.handleError) } - private extractData(res: Response) { - let body = res.json(); - return body.data || {}; - } - private handleError(error: Response | any) { - // In a real world app, we might use a remote logging infrastructure - // We'd also dig deeper into the error to get a better message - let errMsg = ""; - console.log(error); - if (error instanceof Response) { - const body = error.text() || ''; - //const err = body.error || JSON.stringify(body); - errMsg = `${error.status} - ${error.statusText || ''} ${body}`; - } else { - errMsg = (error.message) ? error.message : - error.status ? `${error.status} - ${error.statusText}` : 'Server error'; - console.error(errMsg); // log to console instead - } - return Observable.throw(errMsg); + return Observable.create(observer => observer.next(this.cache.get(route).content)); + } + private extractData(res: Response) { + let body = res.json(); + return body.data || {}; + } + private handleError(error: Response | any) { + // In a real world app, we might use a remote logging infrastructure + // We'd also dig deeper into the error to get a better message + let errMsg = ""; + if (error instanceof Response) { + const body = error.text() || ''; + //const err = body.error || JSON.stringify(body); + errMsg = `${error.status} - ${error.statusText || ''} ${body}`; + } else { + errMsg = (error.message) ? error.message : + error.status ? `${error.status} - ${error.statusText}` : 'Server error'; + console.error(errMsg); // log to console instead } + return Observable.throw(errMsg); + } - isValidCachedItem(route) { - let cachedTimestamp = this.cache.get(route).timestamp; - let currentTimestamp = Date.now(); - if (currentTimestamp - cachedTimestamp > HostConfiguration.CacheLifeTimeMillis) return false; - else return true; - } -} \ No newline at end of file + isValidCachedItem(route) { + let cachedTimestamp = this.cache.get(route).timestamp; + let currentTimestamp = Date.now(); + if (currentTimestamp - cachedTimestamp > HostConfiguration.CacheLifeTimeMillis) return false; + else return true; + } +} diff --git a/dmp-frontend/src/app/services/language-resolver/language-resolver.service.ts b/dmp-frontend/src/app/services/language-resolver/language-resolver.service.ts new file mode 100644 index 000000000..0ead09628 --- /dev/null +++ b/dmp-frontend/src/app/services/language-resolver/language-resolver.service.ts @@ -0,0 +1,23 @@ +import { Injectable } from "@angular/core"; +import { LanguageService } from "../language/language.service"; + +@Injectable() +export class LanguageResolverService { + + private languageData = {}; + + constructor(private language: LanguageService) { + if (Object.keys(this.languageData).length == 0) { + this.language.getLang().subscribe(result => { + result.forEach(item => { + this.languageData[item.key] = item.languageKey; + }) + }) + } + } + + public getBy(key: string): string { + return this.languageData[key]; + } + +} \ No newline at end of file diff --git a/dmp-frontend/src/app/services/language/language.service.ts b/dmp-frontend/src/app/services/language/language.service.ts new file mode 100644 index 000000000..f49479601 --- /dev/null +++ b/dmp-frontend/src/app/services/language/language.service.ts @@ -0,0 +1,31 @@ +import { Injectable } from "@angular/core"; +import { HttpHeaders } from "@angular/common/http"; +import { BaseHttpService } from "../../utilities/cite-http-service-module/base-http.service"; +import { HostConfiguration } from "../../app.constants"; +import { Observable } from "rxjs/Observable"; +import { Invitation } from "../../models/invitation/Invitation"; +import { User } from "../../models/invitation/User"; +import { RequestItem } from "../../models/criteria/RequestItem"; +import { UserInvitationCriteria } from "../../models/criteria/invitation/UserInvitationCriteria"; +import { Language } from "../../models/language/Language"; + + +@Injectable() +export class LanguageService { + private actionUrl: string; + private headers: HttpHeaders; + + constructor(private http: BaseHttpService) { + + this.actionUrl = HostConfiguration.Server + 'common/'; + + this.headers = new HttpHeaders(); + this.headers = this.headers.set('Content-Type', 'application/json'); + this.headers = this.headers.set('Accept', 'application/json'); + } + + public getLang(): Observable { + return this.http.get(this.actionUrl + "language", { headers: this.headers }); + } + +} \ No newline at end of file diff --git a/dmp-frontend/src/app/services/researchers/researchers.service.ts b/dmp-frontend/src/app/services/researchers/researchers.service.ts index 07a0dbaaa..6daccbaba 100644 --- a/dmp-frontend/src/app/services/researchers/researchers.service.ts +++ b/dmp-frontend/src/app/services/researchers/researchers.service.ts @@ -7,7 +7,7 @@ import { Injectable } from "@angular/core"; import { HttpHeaders } from '@angular/common/http'; import { Observable } from 'rxjs/Observable'; import { RequestItem } from '../../models/criteria/RequestItem'; -import { ResearcherModel } from '@app/models/researcher/ResearcherModel'; +import { ResearcherModel } from '../../models/researcher/ResearcherModel'; @Injectable() export class ResearcherService { diff --git a/dmp-frontend/src/app/services/route-resolvers/dmp-editor-resolver.service.ts b/dmp-frontend/src/app/services/route-resolvers/dmp-editor-resolver.service.ts new file mode 100644 index 000000000..b97f8049b --- /dev/null +++ b/dmp-frontend/src/app/services/route-resolvers/dmp-editor-resolver.service.ts @@ -0,0 +1,34 @@ +/* import { Injectable } from "@angular/core"; +import { ProjectService } from "../project/project.service"; +import { RouterStateSnapshot, ActivatedRouteSnapshot } from "@angular/router"; +import { inherits } from "util"; +import { McBreadcrumbsResolver } from 'ngx-breadcrumbs'; + +@Injectable() +export class DMPEditorResolver extends McBreadcrumbsResolver { + + // Optional: inject any required dependencies + constructor(private projectService: ProjectService) { + super(); + } + + resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) { + + const projectId = route.params.id; + const myCrumbs = this.projectService.getSingle(projectId).map((project) => ( + { + text: project.label, + path: super.getFullPath(route.parent) + 'edit/' + project.id + } + )) + + // Note: the resolve method can return any of the following types: + // + // * IBreadcrumb[] + // * Observable + // * Promise + + return myCrumbs; + } +} + */ diff --git a/dmp-frontend/src/app/services/route-resolvers/dmp-group-resolver.service.ts b/dmp-frontend/src/app/services/route-resolvers/dmp-group-resolver.service.ts new file mode 100644 index 000000000..06e0e82e2 --- /dev/null +++ b/dmp-frontend/src/app/services/route-resolvers/dmp-group-resolver.service.ts @@ -0,0 +1,35 @@ +/* import { Injectable } from "@angular/core"; +import { ProjectService } from "../project/project.service"; +import { RouterStateSnapshot, ActivatedRouteSnapshot } from "@angular/router"; +import { inherits } from "util"; +import { McBreadcrumbsResolver } from 'ngx-breadcrumbs'; +import { DataManagementPlanService } from "../data-management-plan/data-management-plan.service"; + +@Injectable() +export class DMPGroupResolver extends McBreadcrumbsResolver { + + // Optional: inject any required dependencies + constructor(private dmpService: DataManagementPlanService) { + super(); + } + + resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) { + + const groupId = route.params.groupId; + const myCrumbs = this.dmpService.getSingle(groupId).map((dmp) => ( + { + text: dmp.label, + path: super.getFullPath(route.parent) + 'viewversions/' + dmp.id + } + )) + + // Note: the resolve method can return any of the following types: + // + // * IBreadcrumb[] + // * Observable + // * Promise + + return myCrumbs; + } +} + */ diff --git a/dmp-frontend/src/app/services/route-resolvers/project-resolver.service.ts b/dmp-frontend/src/app/services/route-resolvers/project-resolver.service.ts new file mode 100644 index 000000000..f7c98342e --- /dev/null +++ b/dmp-frontend/src/app/services/route-resolvers/project-resolver.service.ts @@ -0,0 +1,34 @@ +/* import { Injectable } from "@angular/core"; +import { ProjectService } from "../project/project.service"; +import { RouterStateSnapshot, ActivatedRouteSnapshot } from "@angular/router"; +import { inherits } from "util"; +import { McBreadcrumbsResolver } from 'ngx-breadcrumbs'; + +@Injectable() +export class ProjectResolver extends McBreadcrumbsResolver { + + // Optional: inject any required dependencies + constructor(private projectService: ProjectService) { + super(); + } + + resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) { + + const projectId = route.params.id; + const myCrumbs = this.projectService.getSingle(projectId).map((project) => ( + { + text: project.label, + path: super.getFullPath(route.parent) + 'edit/' + project.id + } + )) + + // Note: the resolve method can return any of the following types: + // + // * IBreadcrumb[] + // * Observable + // * Promise + + return myCrumbs; + } +} + */ diff --git a/dmp-frontend/src/app/services/user-reference/user-reference-data.service.ts b/dmp-frontend/src/app/services/user-reference/user-reference-data.service.ts index 5138341a4..e064c19e8 100644 --- a/dmp-frontend/src/app/services/user-reference/user-reference-data.service.ts +++ b/dmp-frontend/src/app/services/user-reference/user-reference-data.service.ts @@ -7,40 +7,44 @@ import { HttpClient, HttpHeaders } from '@angular/common/http'; import { Injectable } from '@angular/core'; import { Observable } from 'rxjs/Observable'; -import { DataTableRequest } from '../../models/data-table/dataTableRequest'; -import { DataTableData } from '../../models/data-table/dataTableData'; +import { DataTableRequest } from '../../models/data-table/DataTableRequest'; +import { DataTableData } from '../../models/data-table/DataTableData'; import { HostConfiguration } from 'app/app.constants'; @Injectable() export class UserReferenceService { - private actionUrl: string; - private headers: HttpHeaders; + private actionUrl: string; + private headers: HttpHeaders; - constructor(private http: BaseHttpService) { + constructor(private http: BaseHttpService) { - this.actionUrl = HostConfiguration.Server + '/user/'; + this.actionUrl = HostConfiguration.Server + '/user/'; - this.headers = new HttpHeaders(); - this.headers = this.headers.set('Content-Type', 'application/json'); - this.headers = this.headers.set('Accept', 'application/json'); - } + this.headers = new HttpHeaders(); + this.headers = this.headers.set('Content-Type', 'application/json'); + this.headers = this.headers.set('Accept', 'application/json'); + } - // formatItem(utilities: Utilities, item: ConfigurationModel): ConfigurationModel { - // item.validFrom = new Date(item.validFrom); - // item.validTo = new Date(item.validTo); - // return item - // } + // formatItem(utilities: Utilities, item: ConfigurationModel): ConfigurationModel { + // item.validFrom = new Date(item.validFrom); + // item.validTo = new Date(item.validTo); + // return item + // } - getPaged(dataTableRequest: DataTableRequest): Observable> { - return this.http.post>(this.actionUrl + 'getPaged', JSON.stringify(dataTableRequest), { headers: this.headers }); - } + getPaged(dataTableRequest: DataTableRequest): Observable> { + return this.http.post>(this.actionUrl + 'getPaged', JSON.stringify(dataTableRequest), { headers: this.headers }); + } - updateRoles(itemToUpdate: UserListingModel): Observable { - return this.http.post(this.actionUrl + 'updateRoles', JSON.stringify(itemToUpdate), { headers: this.headers }); - } + updateRoles(itemToUpdate: UserListingModel): Observable { + return this.http.post(this.actionUrl + 'updateRoles', JSON.stringify(itemToUpdate), { headers: this.headers }); + } - delete(id: String): Observable { - return this.http.delete(this.actionUrl + id, { headers: this.headers }); - } + delete(id: String): Observable { + return this.http.delete(this.actionUrl + id, { headers: this.headers }); + } + + getRecentActivity(): Observable { + return this.http.get(this.actionUrl + "recentActivity", { headers: this.headers }); + } } diff --git a/dmp-frontend/src/app/add-researchers/add-researchers.component.html b/dmp-frontend/src/app/shared/components/add-researchers/add-researchers.component.html similarity index 100% rename from dmp-frontend/src/app/add-researchers/add-researchers.component.html rename to dmp-frontend/src/app/shared/components/add-researchers/add-researchers.component.html diff --git a/dmp-frontend/src/app/shared/components/add-researchers/add-researchers.component.ts b/dmp-frontend/src/app/shared/components/add-researchers/add-researchers.component.ts new file mode 100644 index 000000000..db1332d83 --- /dev/null +++ b/dmp-frontend/src/app/shared/components/add-researchers/add-researchers.component.ts @@ -0,0 +1,38 @@ +import { JsonSerializer } from '../../../utilities/JsonSerializer'; +import { RequestItem } from '../../../models/criteria/RequestItem'; +import { Component, OnInit, Inject } from "@angular/core"; +import { FormGroup } from '@angular/forms'; +import { Params, ActivatedRoute, Router } from '@angular/router'; +import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material'; +import { ResearcherModel } from '../../../models/researcher/ResearcherModel'; +import { ResearcherService } from '../../../services/researchers/researchers.service'; + +@Component({ + selector: 'add-researchers-component', + templateUrl: 'add-researchers.component.html', + +}) +export class AddResearchersComponent implements OnInit { + + private formGroup: FormGroup; + + constructor( + private researcherService: ResearcherService, + private route: ActivatedRoute, + public router: Router, + public dialogRef: MatDialogRef, + @Inject(MAT_DIALOG_DATA) public data: any + ) { } + + ngOnInit(): void { + let researcher = new ResearcherModel(); + this.formGroup = researcher.buildForm(); + } + + + send(value: any) { + this.researcherService.createResearcher(this.formGroup.value).subscribe( + null, null, () => this.dialogRef.close() + ); + } +} diff --git a/dmp-frontend/src/app/shared/components/auto-complete/auto-complete.component.html b/dmp-frontend/src/app/shared/components/auto-complete/auto-complete.component.html new file mode 100644 index 000000000..8f255846f --- /dev/null +++ b/dmp-frontend/src/app/shared/components/auto-complete/auto-complete.component.html @@ -0,0 +1,14 @@ +
+ + + {{validationErrorString}} + {{'GENERAL.VALIDATION.REQUIRED' | translate}} + + + + {{ this.printText(option) }} + + + +
diff --git a/dmp-frontend/src/app/shared/components/auto-complete/auto-complete.component.scss b/dmp-frontend/src/app/shared/components/auto-complete/auto-complete.component.scss new file mode 100644 index 000000000..1138f7885 --- /dev/null +++ b/dmp-frontend/src/app/shared/components/auto-complete/auto-complete.component.scss @@ -0,0 +1,7 @@ +.auto-complete { + .mat-form-field { + width: 100%; + padding: 3px; + } + +} diff --git a/dmp-frontend/src/app/shared/components/auto-complete/auto-complete.component.ts b/dmp-frontend/src/app/shared/components/auto-complete/auto-complete.component.ts new file mode 100644 index 000000000..9d83979f4 --- /dev/null +++ b/dmp-frontend/src/app/shared/components/auto-complete/auto-complete.component.ts @@ -0,0 +1,114 @@ +import { Input, OnInit, Component, AfterViewInit, Output, EventEmitter, OnChanges } from '@angular/core'; +import { FormGroup, FormControl, FormGroupDirective, NgForm } from '@angular/forms'; +import { ErrorStateMatcher } from '@angular/material'; +import { AutoCompleteConfiguration } from '../autocomplete/AutoCompleteConfiguration'; + +@Component({ + selector: 'app-auto-complete', + templateUrl: './auto-complete.component.html', + styleUrls: ['./auto-complete.component.scss'] +}) +export class AutoCompleteComponent implements OnInit, ErrorStateMatcher { + + @Input() placeholder: String; + @Input() disabled: boolean; + + @Input() typeaheadMS: number; + @Input() formCtrl: FormControl; + @Input() required = false; + @Input() displayFunction: Function; + @Input() assignValueFunction: Function; + @Input() transformFunction: Function; + @Input() inputData: AutoCompleteConfiguration; + @Input() validationErrorString: String; + @Input() clear = false; + + @Output() onItemChange = new EventEmitter(); + + public textFormCtrl: FormControl; + public options: any[]; + + loading = false; + hasSelectedItem = false; + isUnchanged = true; + + constructor() { + + } + + ngOnInit() { + + this.textFormCtrl = new FormControl(); + if (this.disabled) this.textFormCtrl.disable(); + this.formCtrl.registerOnDisabledChange(isDisabled => { + if (isDisabled) this.textFormCtrl.disable({ onlySelf: true, emitEvent: false }); + else this.textFormCtrl.enable({ onlySelf: true, emitEvent: false }); + }) + if (this.formCtrl && this.formCtrl.value) { + this.textFormCtrl.patchValue(this.formCtrl.value, { emitEvent: false }); + this.hasSelectedItem = true; + } + + const valueChanges = this.textFormCtrl.valueChanges.share(); + + valueChanges.subscribe(searchTerm => { // reset value of input control every time the user starts typing + if (this.hasSelectedItem) { + this.hasSelectedItem = false; + this.onItemChange.emit(null); + if (this.formCtrl && this.formCtrl.value) { + this.formCtrl.patchValue(null, { emitEvent: false }); + } + } + this.isUnchanged = false; + }); + + valueChanges.debounceTime(this.typeaheadMS) + .do(value => { + if (this.hasSelectedItem) { this.loading = false; } + if (typeof value === 'string') { + this.loading = true; + this.inputData.requestItem.criteria["like"] = value; + this.inputData.callback(this.inputData.requestItem).map(res => { + this.options = res; + this.loading = false; + }).subscribe(); + } else { + this.loading = false; + } + }) + .subscribe(); + } + + printText(item: any): string { + if (this.displayFunction) { + return this.displayFunction(item) + } + else return item; + } + + getValue(item: any): string { + if (this.assignValueFunction) { + if (this.transformFunction) return this.assignValueFunction(this.transformFunction(item)) + else return this.assignValueFunction(item) + } + else return item; + } + + optionSelected(event: any) { + if (this.formCtrl) { this.formCtrl.patchValue(this.assignValueFunction ? this.assignValueFunction(event.option.value) : event.option.value, { emitEvent: false }); } + this.hasSelectedItem = true; + this.onItemChange.emit(this.assignValueFunction ? this.assignValueFunction(event.option.value) : event.option.value); + if (this.clear) { + this.options = []; + this.loading = false; + this.textFormCtrl.patchValue(null) + }; + } + + isErrorState(control: FormControl | null, form: FormGroupDirective | NgForm | null): boolean { + const isFormSubmitted = form && form.submitted; + const isControlInvalid = (control && control.invalid && (control.dirty || control.touched || isFormSubmitted)) || (!this.hasSelectedItem && !this.isUnchanged); + const isFormInvalid = form && form.enabled && form.invalid && (form.dirty || form.touched || isFormSubmitted); + return !!((isControlInvalid || isFormInvalid) && this.required); + } +} diff --git a/dmp-frontend/src/app/shared/components/autocomplete/autocomplete.component.html b/dmp-frontend/src/app/shared/components/autocomplete/autocomplete.component.html index 0db1d20f3..9cfb0053d 100644 --- a/dmp-frontend/src/app/shared/components/autocomplete/autocomplete.component.html +++ b/dmp-frontend/src/app/shared/components/autocomplete/autocomplete.component.html @@ -25,7 +25,7 @@
--> - + {{'GENERAL.VALIDATION.REQUIRED' | translate}} {{errorString}} diff --git a/dmp-frontend/src/app/shared/components/autocomplete/autocomplete.component.ts b/dmp-frontend/src/app/shared/components/autocomplete/autocomplete.component.ts index de25e16af..d37539754 100644 --- a/dmp-frontend/src/app/shared/components/autocomplete/autocomplete.component.ts +++ b/dmp-frontend/src/app/shared/components/autocomplete/autocomplete.component.ts @@ -14,8 +14,12 @@ import { ErrorStateMatcher, MatInput } from '@angular/material'; styleUrls: ['./autocomplete.component.scss'] }) export class AutocompleteComponent implements OnInit { + @Input() - configuration: AutoCompleteConfiguration; + disabled = false; + + @Input() + public configuration: AutoCompleteConfiguration; @Input() titleKey: String; @@ -39,9 +43,6 @@ export class AutocompleteComponent implements OnInit { @Input() required: boolean; - @Input() - disabled: boolean = false; - // @Input() selectedDropdownItem: AutoCompleteItem; // @Output() selectedDropdownItemChange = new EventEmitter(); @@ -69,8 +70,8 @@ export class AutocompleteComponent implements OnInit { valueChanges.subscribe(searchTerm => { if (this.hasSelectedItem) { this.resetFormControlValue(); - }else{ - this.loading = true; + } else { + this.loading = true; } }); valueChanges diff --git a/dmp-frontend/src/app/available-profiles/available-profiles.component.html b/dmp-frontend/src/app/shared/components/available-profiles/available-profiles.component.html similarity index 100% rename from dmp-frontend/src/app/available-profiles/available-profiles.component.html rename to dmp-frontend/src/app/shared/components/available-profiles/available-profiles.component.html diff --git a/dmp-frontend/src/app/shared/components/available-profiles/available-profiles.component.ts b/dmp-frontend/src/app/shared/components/available-profiles/available-profiles.component.ts new file mode 100644 index 000000000..4c1fd5d2d --- /dev/null +++ b/dmp-frontend/src/app/shared/components/available-profiles/available-profiles.component.ts @@ -0,0 +1,52 @@ +import { JsonSerializer } from '../../../utilities/JsonSerializer'; +import { RequestItem } from '../../../models/criteria/RequestItem'; +import { Component, OnInit, Inject } from "@angular/core"; +import { FormGroup } from '@angular/forms'; +import { Params, ActivatedRoute, Router } from '@angular/router'; +import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material'; +import { DatasetService } from '../../../services/dataset/dataset.service'; +import { DatasetProfileModel } from '../../../models/datasetprofile/DatasetProfileModel'; +import { DatasetProfileModule } from '../../../dataset-profile-form/dataset-profile.module'; + +@Component({ + selector: 'available-profiles-component', + templateUrl: 'available-profiles.component.html', + +}) +export class AvailableProfilesComponent implements OnInit { + + private formGroup: FormGroup; + private profiles: DatasetProfileModel[] = []; + private selectedProfiles: DatasetProfileModel[] = []; + + constructor( + private datasetService: DatasetService, + private route: ActivatedRoute, + public router: Router, + public dialogRef: MatDialogRef, + @Inject(MAT_DIALOG_DATA) public data: any + ) { } + + ngOnInit(): void { + + this.datasetService.getDatasetProfiles().subscribe(data => { + this.profiles = JsonSerializer.fromJSONArray(data, DatasetProfileModel) + } + ) + } + + addProfiles(profiles) { + // profiles.selectedOptions.forEach(element => { + // selectedProfiles.push(element.value) + // }); + + profiles.selectedOptions.selected.forEach(element => { + let selectedElement = new DatasetProfileModel(); + selectedElement.id = element.value.id; + selectedElement.label = element.value.label; + this.selectedProfiles.push(selectedElement) + }) + + this.dialogRef.close(this.selectedProfiles); + } +} diff --git a/dmp-frontend/src/app/shared/components/breadcrumb/breadcrumb.component.html b/dmp-frontend/src/app/shared/components/breadcrumb/breadcrumb.component.html new file mode 100644 index 000000000..21affeb1f --- /dev/null +++ b/dmp-frontend/src/app/shared/components/breadcrumb/breadcrumb.component.html @@ -0,0 +1,16 @@ + + +
    +
    +
    +
  1. + + {{ breadcrumb.label }} + +
  2. + chevron_right +
    +
    +
+
+
diff --git a/dmp-frontend/src/app/shared/components/breadcrumb/breadcrumb.component.scss b/dmp-frontend/src/app/shared/components/breadcrumb/breadcrumb.component.scss new file mode 100644 index 000000000..dfee11f93 --- /dev/null +++ b/dmp-frontend/src/app/shared/components/breadcrumb/breadcrumb.component.scss @@ -0,0 +1,5 @@ +ol.no-style { + li { + list-style-type: none; + } +} diff --git a/dmp-frontend/src/app/shared/components/breadcrumb/breadcrumb.component.ts b/dmp-frontend/src/app/shared/components/breadcrumb/breadcrumb.component.ts new file mode 100644 index 000000000..07baa4df7 --- /dev/null +++ b/dmp-frontend/src/app/shared/components/breadcrumb/breadcrumb.component.ts @@ -0,0 +1,40 @@ +import { Component, OnInit, ViewEncapsulation } from '@angular/core'; +import { ActivatedRoute, NavigationEnd, Router } from '@angular/router'; +import { BreadCrumbResolverService } from '../../../services/breadcrumb/breadcrumb-resolver.service'; +import { BreadcrumbItem } from './definition/breadcrumb-item'; +import { Observable } from 'rxjs/Observable'; + +@Component({ + selector: 'app-breadcrumb', + templateUrl: './breadcrumb.component.html', + styleUrls: ['./breadcrumb.component.scss'], + encapsulation: ViewEncapsulation.None +}) +export class BreadcrumbComponent implements OnInit { + breadcrumbs$ = this.router.events + .filter(event => event instanceof NavigationEnd) + .distinctUntilChanged() + .flatMap(event => this.buildBreadCrumb(this.activatedRoute.root)); + + + constructor( + public activatedRoute: ActivatedRoute, + private router: Router, + private breadCrumbService: BreadCrumbResolverService + ) { + + } + + ngOnInit() { + + } + + buildBreadCrumb(route: ActivatedRoute): Observable { + + return this.breadCrumbService.resolve(route); + } + + navigate(url, params) { + this.router.navigate([url, params]) + } +} diff --git a/dmp-frontend/src/app/shared/components/breadcrumb/definition/IBreadCrumbComponent.ts b/dmp-frontend/src/app/shared/components/breadcrumb/definition/IBreadCrumbComponent.ts new file mode 100644 index 000000000..1af00cb84 --- /dev/null +++ b/dmp-frontend/src/app/shared/components/breadcrumb/definition/IBreadCrumbComponent.ts @@ -0,0 +1,6 @@ +import { BreadcrumbItem } from "./breadcrumb-item"; +import { Observable } from "rxjs/Observable"; + +export interface IBreadCrumbComponent { + breadCrumbs: Observable +} diff --git a/dmp-frontend/src/app/shared/components/breadcrumb/definition/breadcrumb-item.ts b/dmp-frontend/src/app/shared/components/breadcrumb/definition/breadcrumb-item.ts new file mode 100644 index 000000000..661f1237c --- /dev/null +++ b/dmp-frontend/src/app/shared/components/breadcrumb/definition/breadcrumb-item.ts @@ -0,0 +1,9 @@ +import { Observable } from "rxjs/Observable"; + +export class BreadcrumbItem { + parentComponentName?: string; + label: string; + url: string; + params?: any = {}; + notFoundResolver?: any[] +} diff --git a/dmp-frontend/src/app/shared/components/criteria/data-management-plan/dmp-criteria.component.html b/dmp-frontend/src/app/shared/components/criteria/data-management-plan/dmp-criteria.component.html index 924f02e6c..34a3f3df4 100644 --- a/dmp-frontend/src/app/shared/components/criteria/data-management-plan/dmp-criteria.component.html +++ b/dmp-frontend/src/app/shared/components/criteria/data-management-plan/dmp-criteria.component.html @@ -1,28 +1,32 @@
- -
-
- - - {{baseErrorModel['Criteria.like']}} - -
-
- - -
{{chip.label.substring(0, 1).toUpperCase()}}
- {{chip.label}} -
- -
- {{option.label}} -
-
- -
-
-
-
-
\ No newline at end of file + + + +

{{'CRITERIA.FILTERS'| translate}}

+
+
+
+
+ + + {{baseErrorModel['Criteria.like']}} + +
+
+ + +
{{chip.label.substring(0, 1).toUpperCase()}}
+ {{chip.label}} +
+ +
+ {{option.label}} +
+
+ +
+
+
+
+ diff --git a/dmp-frontend/src/app/shared/components/criteria/data-management-plan/dmp-criteria.component.ts b/dmp-frontend/src/app/shared/components/criteria/data-management-plan/dmp-criteria.component.ts index d9eaf4c07..447982c27 100644 --- a/dmp-frontend/src/app/shared/components/criteria/data-management-plan/dmp-criteria.component.ts +++ b/dmp-frontend/src/app/shared/components/criteria/data-management-plan/dmp-criteria.component.ts @@ -1,5 +1,5 @@ import { TranslateService } from '@ngx-translate/core'; -import { Component, OnInit } from '@angular/core'; +import { Component, OnInit, Input } from '@angular/core'; import { FormControl, FormGroup, FormBuilder, Validators } from '@angular/forms'; import { BaseCriteriaComponent } from '../base/base-criteria.component'; import { ValidationContext, Validation } from '../../../../utilities/validators/ValidationContext'; @@ -13,67 +13,68 @@ import { RequestItem } from '../../../../models/criteria/RequestItem'; import { create } from 'domain'; @Component({ - selector: 'app-dmp-criteria-component', - templateUrl: './dmp-criteria.component.html', - styleUrls: ['./dmp-criteria.component.scss'], - providers: [ProjectService] + selector: 'app-dmp-criteria-component', + templateUrl: './dmp-criteria.component.html', + styleUrls: ['./dmp-criteria.component.scss'], }) export class DataManagementPlanCriteriaComponent extends BaseCriteriaComponent implements OnInit { - public criteria: DataManagementPlanCriteria = new DataManagementPlanCriteria(); - filteringProjectsAsync: boolean = false; - filteredProjects: ProjectModel[]; + @Input() + showProject: boolean; + public criteria: DataManagementPlanCriteria = new DataManagementPlanCriteria(); + filteringProjectsAsync: boolean = false; + filteredProjects: ProjectModel[]; - constructor( - public language: TranslateService, - public projectService: ProjectService, - public formBuilder: FormBuilder - ) { - super(new DataManagementPlanCriteriaErrorModel()); - } + constructor( + public language: TranslateService, + public projectService: ProjectService, + public formBuilder: FormBuilder + ) { + super(new DataManagementPlanCriteriaErrorModel()); + } - ngOnInit() { - super.ngOnInit(); - if (this.criteria == null) { this.criteria = new DataManagementPlanCriteria(); } - } + ngOnInit() { + super.ngOnInit(); + if (this.criteria == null) { this.criteria = new DataManagementPlanCriteria(); } + } - setCriteria(criteria: DataManagementPlanCriteria): void { - this.criteria = criteria; - } + setCriteria(criteria: DataManagementPlanCriteria): void { + this.criteria = criteria; + } - onCallbackError(error: any) { - this.setErrorModel(error.error); - } + onCallbackError(error: any) { + this.setErrorModel(error.error); + } - controlModified(): void { - this.clearErrorModel(); - if (this.refreshCallback != null && - (this.criteria.like == null || this.criteria.like.length == 0 || this.criteria.like.length > 2) - ) { - this.refreshCallback(); - } - } + controlModified(): void { + this.clearErrorModel(); + if (this.refreshCallback != null && + (this.criteria.like == null || this.criteria.like.length == 0 || this.criteria.like.length > 2) + ) { + this.refreshCallback(); + } + } - filterProjects(value: string): void { - - this.filteredProjects = undefined; - if (value) { - this.filteringProjectsAsync = true; - - let requestItem: RequestItem = new RequestItem(); - let criteria: ProjectCriteria = new ProjectCriteria(); - criteria.like = value; - requestItem.criteria = criteria; - this.projectService.get(requestItem).subscribe(items => { - this.filteredProjects = items; - this.filteringProjectsAsync = false; - - // this.filteredProjects = items.filter((filteredObj: any) => { - // return this.objectsModel ? this.objectsModel.indexOf(filteredObj) < 0 : true; - // }); - - }); - } - } + filterProjects(value: string): void { + + this.filteredProjects = undefined; + if (value) { + this.filteringProjectsAsync = true; + + let requestItem: RequestItem = new RequestItem(); + let criteria: ProjectCriteria = new ProjectCriteria(); + criteria.like = value; + requestItem.criteria = criteria; + this.projectService.get(requestItem).subscribe(items => { + this.filteredProjects = items; + this.filteringProjectsAsync = false; + + // this.filteredProjects = items.filter((filteredObj: any) => { + // return this.objectsModel ? this.objectsModel.indexOf(filteredObj) < 0 : true; + // }); + + }); + } + } } diff --git a/dmp-frontend/src/app/shared/components/criteria/datamanagementplanprofile/dmp-profile-criteria.component.html b/dmp-frontend/src/app/shared/components/criteria/datamanagementplanprofile/dmp-profile-criteria.component.html new file mode 100644 index 000000000..907de7938 --- /dev/null +++ b/dmp-frontend/src/app/shared/components/criteria/datamanagementplanprofile/dmp-profile-criteria.component.html @@ -0,0 +1,13 @@ +
+ +
+
+ + + {{baseErrorModel['Criteria.like']}} + +
+
+
+
\ No newline at end of file diff --git a/dmp-frontend/src/app/invitation-accepted/invitation-accepted.component.html b/dmp-frontend/src/app/shared/components/criteria/datamanagementplanprofile/dmp-profile-criteria.component.scss similarity index 100% rename from dmp-frontend/src/app/invitation-accepted/invitation-accepted.component.html rename to dmp-frontend/src/app/shared/components/criteria/datamanagementplanprofile/dmp-profile-criteria.component.scss diff --git a/dmp-frontend/src/app/shared/components/criteria/datamanagementplanprofile/dmp-profile-criteria.component.ts b/dmp-frontend/src/app/shared/components/criteria/datamanagementplanprofile/dmp-profile-criteria.component.ts new file mode 100644 index 000000000..fc8fa0827 --- /dev/null +++ b/dmp-frontend/src/app/shared/components/criteria/datamanagementplanprofile/dmp-profile-criteria.component.ts @@ -0,0 +1,58 @@ +import { TranslateService } from '@ngx-translate/core'; +import { Component, OnInit, Input } from '@angular/core'; +import { FormControl, FormGroup, FormBuilder, Validators } from '@angular/forms'; +import { BaseCriteriaComponent } from '../base/base-criteria.component'; +import { ValidationContext, Validation } from '../../../../utilities/validators/ValidationContext'; +import { BackendErrorValidator } from '../../../../utilities/validators/BackendErrorValidator'; +import { DataManagementPlanCriteria } from '../../../../models/criteria/data-management-plan/DataManagementPlanCriteria'; +import { DataManagementPlanCriteriaErrorModel } from '../../../../models/criteria/data-management-plan/DataManagementPlanCriteriaErrorModel'; +import { ProjectModel } from '../../../../models/projects/ProjectModel'; +import { ProjectCriteria } from '../../../../models/criteria/project/ProjectCriteria'; +import { RequestItem } from '../../../../models/criteria/RequestItem'; +import { create } from 'domain'; +import { DataManagementPlanProfileCriteria } from '../../../../models/criteria/dmp-profile/DataManagementPlanProfileCriteria'; +import { DataManagementPlanProfileCriteriaErrorModel } from '../../../../models/criteria/dmp-profile/DataManagementPlanProfileCriteriaErrorModel'; + +@Component({ + selector: 'app-dmp-profile-criteria-component', + templateUrl: './dmp-profile-criteria.component.html', + styleUrls: ['./dmp-profile-criteria.component.scss'], +}) + +export class DataManagementPlanProfileCriteriaComponent extends BaseCriteriaComponent implements OnInit { + + @Input() + showProject: boolean; + public criteria: DataManagementPlanProfileCriteria = new DataManagementPlanProfileCriteria(); + filteringProjectsAsync: boolean = false; + filteredProjects: ProjectModel[]; + + constructor( + public language: TranslateService, + public formBuilder: FormBuilder + ) { + super(new DataManagementPlanProfileCriteriaErrorModel()); + } + + ngOnInit() { + super.ngOnInit(); + if (this.criteria == null) { this.criteria = new DataManagementPlanCriteria(); } + } + + setCriteria(criteria: DataManagementPlanProfileCriteria): void { + this.criteria = criteria; + } + + onCallbackError(error: any) { + this.setErrorModel(error.error); + } + + controlModified(): void { + this.clearErrorModel(); + if (this.refreshCallback != null && + (this.criteria.like == null || this.criteria.like.length == 0 || this.criteria.like.length > 2) + ) { + this.refreshCallback(); + } + } +} diff --git a/dmp-frontend/src/app/shared/components/criteria/datasets/datasets-criteria.component.html b/dmp-frontend/src/app/shared/components/criteria/datasets/datasets-criteria.component.html index 139fa0fce..87ec2c7d8 100644 --- a/dmp-frontend/src/app/shared/components/criteria/datasets/datasets-criteria.component.html +++ b/dmp-frontend/src/app/shared/components/criteria/datasets/datasets-criteria.component.html @@ -1,7 +1,12 @@
- -
- -
- - - {{baseErrorModel['Criteria.like']}} - -
-
- - - - {{status.viewValue}} - - - {{baseErrorModel['Criteria.status']}} - -
-
-
+
+ + + {{baseErrorModel['Criteria.like']}} + +
+
+ + + + {{status.viewValue}} + + + {{baseErrorModel['Criteria.status']}} + +
+ +
\ No newline at end of file +[matDatepicker]="periodEndPicker" --> diff --git a/dmp-frontend/src/app/shared/components/criteria/projects/projects-criteria.component.html b/dmp-frontend/src/app/shared/components/criteria/projects/projects-criteria.component.html index 6ea508acc..351b0accd 100644 --- a/dmp-frontend/src/app/shared/components/criteria/projects/projects-criteria.component.html +++ b/dmp-frontend/src/app/shared/components/criteria/projects/projects-criteria.component.html @@ -1,32 +1,37 @@
- -
-
- - - {{baseErrorModel['criteria.like']}} - -
-
- - - - - - {{baseErrorModel['criteria.periodStart']}} - -
-
- - - {{baseErrorModel['criteria.periodEnd']}} - - - -
-
-
-
\ No newline at end of file + + + +

{{'CRITERIA.FILTERS'| translate}}

+
+
+
+
+ + + {{baseErrorModel['criteria.like']}} + +
+
+ + + + + + {{baseErrorModel['criteria.periodStart']}} + +
+
+ + + {{baseErrorModel['criteria.periodEnd']}} + + + +
+
+
+ diff --git a/dmp-frontend/src/app/shared/components/criteria/projects/projects-criteria.component.ts b/dmp-frontend/src/app/shared/components/criteria/projects/projects-criteria.component.ts index b2f025338..6be83ea46 100644 --- a/dmp-frontend/src/app/shared/components/criteria/projects/projects-criteria.component.ts +++ b/dmp-frontend/src/app/shared/components/criteria/projects/projects-criteria.component.ts @@ -6,6 +6,7 @@ import { ValidationContext, Validation } from '../../../../utilities/validators/ import { BackendErrorValidator } from '../../../../utilities/validators/BackendErrorValidator'; import { ProjectCriteria } from '../../../../models/criteria/project/ProjectCriteria'; import { ProjectCriteriaErrorModel } from '../../../../models/criteria/project/ProjectCriteriaErrorModel'; +import { LanguageResolverService } from '../../../../services/language-resolver/language-resolver.service'; @Component({ selector: 'app-projects-criteria-component', @@ -23,7 +24,8 @@ export class ProjectCriteriaComponent extends BaseCriteriaComponent implements O constructor( public language: TranslateService, - public formBuilder: FormBuilder + public formBuilder: FormBuilder, + public languageResolver: LanguageResolverService ) { super(new ProjectCriteriaErrorModel()); } diff --git a/dmp-frontend/src/app/shared/components/criteria/users/users-criteria.component.ts b/dmp-frontend/src/app/shared/components/criteria/users/users-criteria.component.ts index 1b7c07b1d..b87e83549 100644 --- a/dmp-frontend/src/app/shared/components/criteria/users/users-criteria.component.ts +++ b/dmp-frontend/src/app/shared/components/criteria/users/users-criteria.component.ts @@ -9,75 +9,74 @@ import { Principal } from '../../../../models/login/Principal'; import { FormBuilder, FormGroup } from '@angular/forms'; @Component({ - selector: 'users-criteria-component', - templateUrl: './users-criteria.component.html', - styleUrls: ['./users-criteria.component.scss'], + selector: 'users-criteria-component', + templateUrl: './users-criteria.component.html', + styleUrls: ['./users-criteria.component.scss'], }) export class UsersCriteriaComponent extends BaseCriteriaComponent implements OnInit { - public role: Principal.AppRole; - public criteria: UserCriteria = new UserCriteria(); + public role: Principal.AppRole; + public criteria: UserCriteria = new UserCriteria(); - constructor( - public language: TranslateService, - public errorModel: UserCriteriaErrorModel, - public formBuilder: FormBuilder - ) { - super(errorModel); - } + constructor( + public language: TranslateService, + public formBuilder: FormBuilder + ) { + super(new UserCriteriaErrorModel()); + } - ngOnInit() { - super.ngOnInit(); - if (this.criteria == null) { this.criteria = new UserCriteria(); } - if (this.formGroup == null) { this.formGroup = this.buildForm(); } - } + ngOnInit() { + super.ngOnInit(); + if (this.criteria == null) { this.criteria = new UserCriteria(); } + if (this.formGroup == null) { this.formGroup = this.buildForm(); } + } - setCriteria(criteria: UserCriteria): void { - this.criteria = criteria; - this.formGroup = this.buildForm(); - } + setCriteria(criteria: UserCriteria): void { + this.criteria = criteria; + this.formGroup = this.buildForm(); + } - public fromJSONObject(item: any): UserCriteria { - this.criteria = new UserCriteria(); - this.criteria.label = item.Label; - this.criteria.appRoles = item.appRoles; - return this.criteria; - } + public fromJSONObject(item: any): UserCriteria { + this.criteria = new UserCriteria(); + this.criteria.label = item.Label; + this.criteria.appRoles = item.appRoles; + return this.criteria; + } - buildForm(): FormGroup { - const context: ValidationContext = this.createValidationContext(); + buildForm(): FormGroup { + const context: ValidationContext = this.createValidationContext(); - return this.formBuilder.group({ - like: [this.criteria.label, context.getValidation('label').validators], - appRoles: [this.criteria.appRoles, context.getValidation('appRoles').validators], - }); - } + return this.formBuilder.group({ + like: [this.criteria.label, context.getValidation('label').validators], + appRoles: [this.criteria.appRoles, context.getValidation('appRoles').validators], + }); + } - createValidationContext(): ValidationContext { - const validationContext: ValidationContext = new ValidationContext(); - const validationArray: Validation[] = new Array(); + createValidationContext(): ValidationContext { + const validationContext: ValidationContext = new ValidationContext(); + const validationArray: Validation[] = new Array(); - validationArray.push({ key: 'label' }); - validationArray.push({ key: 'appRoles' }); + validationArray.push({ key: 'label' }); + validationArray.push({ key: 'appRoles' }); - validationContext.validation = validationArray; - return validationContext; - } + validationContext.validation = validationArray; + return validationContext; + } - getPrincipalAppRoleValues(): Number[] { - let keys: string[] = Object.keys(Principal.AppRole); - keys = keys.slice(0, keys.length / 2); - const values: Number[] = keys.map(Number); - return values; - } + getPrincipalAppRoleValues(): Number[] { + let keys: string[] = Object.keys(Principal.AppRole); + keys = keys.slice(0, keys.length / 2); + const values: Number[] = keys.map(Number); + return values; + } - getPrincipalAppRoleWithLanguage(role: Principal.AppRole): string { - let result = ''; - this.language.get(new Utilities().convertFromPrincipalAppRole(role)).subscribe((value: string) => { - result = value; - }); - return result; - } + getPrincipalAppRoleWithLanguage(role: Principal.AppRole): string { + let result = ''; + this.language.get(new Utilities().convertFromPrincipalAppRole(role)).subscribe((value: string) => { + result = value; + }); + return result; + } } diff --git a/dmp-frontend/src/app/shared/components/external-items/external-item-listing/external-item-listing.component.html b/dmp-frontend/src/app/shared/components/external-items/external-item-listing/external-item-listing.component.html new file mode 100644 index 000000000..be040b9ce --- /dev/null +++ b/dmp-frontend/src/app/shared/components/external-items/external-item-listing/external-item-listing.component.html @@ -0,0 +1,20 @@ +
+
+
+ + + + {{ option.label }} + + + + + +
+
+ + +
+
+
diff --git a/dmp-frontend/src/app/shared/components/external-items/external-item-listing/external-item-listing.component.scss b/dmp-frontend/src/app/shared/components/external-items/external-item-listing/external-item-listing.component.scss new file mode 100644 index 000000000..9cf774a68 --- /dev/null +++ b/dmp-frontend/src/app/shared/components/external-items/external-item-listing/external-item-listing.component.scss @@ -0,0 +1,3 @@ +.fxItems { + flex: 1 1 0 +} diff --git a/dmp-frontend/src/app/shared/components/external-items/external-item-listing/external-item-listing.component.ts b/dmp-frontend/src/app/shared/components/external-items/external-item-listing/external-item-listing.component.ts new file mode 100644 index 000000000..9568aaa26 --- /dev/null +++ b/dmp-frontend/src/app/shared/components/external-items/external-item-listing/external-item-listing.component.ts @@ -0,0 +1,60 @@ +import { Component, OnInit, Input, ContentChild, TemplateRef, ViewChild, Output, EventEmitter } from "@angular/core"; +import { AutoCompleteConfiguration } from "../../autocomplete/AutoCompleteConfiguration"; +import { FormGroup, FormControl, FormArray, AbstractControl } from "@angular/forms"; +import { ExternalSourcesUrlModel } from "../../../../models/external-sources/ExternalSourcesUrlModel"; + +@Component({ + selector: 'app-external-item-listing', + templateUrl: './external-item-listing.component.html', + styleUrls: ['./external-item-listing.component.scss'] +}) +export class ExternalItemListingComponent implements OnInit { + @Input() + public placeholder: string; + + @Input() + public formGroup: AbstractControl; + + @Input() + public autoCompleteConfiguration: AutoCompleteConfiguration; + + @Input() + public displayFunction: Function; + + @Input() + public disabled = true; + + @Input() + public titleKey: string; + + @Input() + parentTemplate; + + @Input() + public options: Array + + @Output() + public onItemChange = new EventEmitter(); + + public choice: string; + public formControl = new FormControl(); + + + ngOnInit() { + if (this.disabled) this.formControl.disable(); + } + + onItemChangeFunc(event) { + if (event) this.onItemChange.emit(event); + } + + selectionChange(event) { + if (this.formControl.disabled) this.formControl.enable(); + this.autoCompleteConfiguration.requestItem.criteria["type"] = event.value; + } + + deleteItem(name: number) { + (this.formGroup).removeAt(name) + } +} + diff --git a/dmp-frontend/src/app/shared/components/external-items/external-item/external-item.component.html b/dmp-frontend/src/app/shared/components/external-items/external-item/external-item.component.html new file mode 100644 index 000000000..18cb0553b --- /dev/null +++ b/dmp-frontend/src/app/shared/components/external-items/external-item/external-item.component.html @@ -0,0 +1,4 @@ + + diff --git a/dmp-frontend/src/app/invitation/invitation.component.scss b/dmp-frontend/src/app/shared/components/external-items/external-item/external-item.component.scss similarity index 100% rename from dmp-frontend/src/app/invitation/invitation.component.scss rename to dmp-frontend/src/app/shared/components/external-items/external-item/external-item.component.scss diff --git a/dmp-frontend/src/app/shared/components/external-items/external-item/external-item.component.ts b/dmp-frontend/src/app/shared/components/external-items/external-item/external-item.component.ts new file mode 100644 index 000000000..c463e8f36 --- /dev/null +++ b/dmp-frontend/src/app/shared/components/external-items/external-item/external-item.component.ts @@ -0,0 +1,43 @@ +import { Component, OnInit, Input, Output, EventEmitter } from "@angular/core"; +import { Placeholder } from "@angular/compiler/src/i18n/i18n_ast"; +import { AutoCompleteConfiguration } from "../../autocomplete/AutoCompleteConfiguration"; +import { FormGroup, FormControl } from "@angular/forms"; + +@Component({ + selector: 'app-external-item', + templateUrl: './external-item.component.html', + styleUrls: ['./external-item.component.scss'] +}) +export class ExternalItemComponent implements OnInit { + + @Input() + public placeholder: string; + + @Input() + public formGroup: FormGroup; + + @Input() + public autoCompleteConfiguration: AutoCompleteConfiguration; + + @Input() + public displayFunction: Function; + + @Input() + public disabled = false; + + @Input() + public titleKey: string; + + @Output() + public onItemChange = new EventEmitter(); + + @Input() + public formCtrl: FormControl; + + ngOnInit() { + } + + onItemChangeFunc(event) { + this.onItemChange.emit(event); + } +} diff --git a/dmp-frontend/src/app/shared/components/file-uploader/FileUploader.ts b/dmp-frontend/src/app/shared/components/file-uploader/FileUploader.ts new file mode 100644 index 000000000..92547f4fa --- /dev/null +++ b/dmp-frontend/src/app/shared/components/file-uploader/FileUploader.ts @@ -0,0 +1,6 @@ +import { Observable } from "rxjs"; +import { ContentFile } from "../../../models/files/ContentFile"; + +export interface FileUploader { + uploadFile(formData: FormData): Observable; +} \ No newline at end of file diff --git a/dmp-frontend/src/app/shared/components/file-uploader/file-uploader.component.html b/dmp-frontend/src/app/shared/components/file-uploader/file-uploader.component.html new file mode 100644 index 000000000..ce536bf8e --- /dev/null +++ b/dmp-frontend/src/app/shared/components/file-uploader/file-uploader.component.html @@ -0,0 +1,11 @@ + + file_upload + {{ files?.name }} + + attach_file + + {{label | translate}} + + + \ No newline at end of file diff --git a/dmp-frontend/src/app/shared/components/file-uploader/file-uploader.component.ts b/dmp-frontend/src/app/shared/components/file-uploader/file-uploader.component.ts new file mode 100644 index 000000000..0619c446a --- /dev/null +++ b/dmp-frontend/src/app/shared/components/file-uploader/file-uploader.component.ts @@ -0,0 +1,56 @@ +import { Component, Input, OnInit } from "@angular/core"; +import { FileUploader } from "../../../shared/components/file-uploader/FileUploader"; +import { FormControl } from "@angular/forms"; + +@Component({ + selector: 'app-fileuploader-component', + templateUrl: './file-uploader.component.html' +}) +export class FileUploaderComponent implements OnInit { + + files: File | FileList; + disabled: boolean = false; + + fileSelectMultipleMsg: string = 'No file(s) selected yet.'; + + @Input() + public label: string = 'FILE-UPLOADER.DEFAULT'; + + @Input() + public fileUploader: FileUploader; + + @Input() + form: FormControl; + + ngOnInit(): void { + } + + selectEvent(files: FileList | File): void { + this.label = 'FILE-UPLOADER.UPLOAD' + if (files instanceof FileList) { + let names: string[] = []; + for (let i: number = 0; i < files.length; i++) { + names.push(files[i].name); + } + this.fileSelectMultipleMsg = names.join(','); + } else { + this.fileSelectMultipleMsg = files.name; + } + } + + uploadEvent(files: FileList | File): void { + let formdata: FormData = new FormData(); + + if (files instanceof FileList) { + for (let i: number = 0; i < files.length; i++) { + formdata.append('file', files[i]); + } + } else { + formdata.append('file', files); + } + this.fileUploader.uploadFile(formdata).subscribe(files => this.form.patchValue(files)); + } + + cancelEvent(): void { + } +} diff --git a/dmp-frontend/src/app/shared/components/invitation-accepted/invitation-accepted.component.html b/dmp-frontend/src/app/shared/components/invitation-accepted/invitation-accepted.component.html new file mode 100644 index 000000000..e69de29bb diff --git a/dmp-frontend/src/app/shared/components/invitation-accepted/invitation-accepted.component.ts b/dmp-frontend/src/app/shared/components/invitation-accepted/invitation-accepted.component.ts new file mode 100644 index 000000000..3680c0f3d --- /dev/null +++ b/dmp-frontend/src/app/shared/components/invitation-accepted/invitation-accepted.component.ts @@ -0,0 +1,33 @@ +import { JsonSerializer } from '../../../utilities/JsonSerializer'; +import { UserInvitationCriteria } from '../../../models/criteria/invitation/UserInvitationCriteria'; +import { RequestItem } from '../../../models/criteria/RequestItem'; +import { Invitation } from '../../../models/invitation/Invitation'; +import { InvitationService } from '../../../services/invitation/invitation.service'; +import { User } from '../../../models/invitation/User'; +import { Component, OnInit, Inject } from "@angular/core"; +import { FormGroup } from '@angular/forms'; +import { Params, ActivatedRoute, Router } from '@angular/router'; +import { MAT_DIALOG_DATA } from '@angular/material'; + +@Component({ + selector: 'app-invitation-accepted-component', + templateUrl: 'invitation-accepted.component.html', + +}) +export class InvitationAcceptedComponent implements OnInit { + constructor( + private invitationService: InvitationService, + private route: ActivatedRoute, + public router: Router + ) { } + + ngOnInit(): void { + this.route.params.subscribe(params => { + let id = params["id"] + this.invitationService.exchange(id).subscribe(id => { + this.router.navigate(["dmps/edit/" + id]) + }) + } + ) + } +} diff --git a/dmp-frontend/src/app/invitation/invitation.component.html b/dmp-frontend/src/app/shared/components/invitation/invitation.component.html similarity index 100% rename from dmp-frontend/src/app/invitation/invitation.component.html rename to dmp-frontend/src/app/shared/components/invitation/invitation.component.html diff --git a/dmp-frontend/src/app/shared/components/invitation/invitation.component.scss b/dmp-frontend/src/app/shared/components/invitation/invitation.component.scss new file mode 100644 index 000000000..e69de29bb diff --git a/dmp-frontend/src/app/shared/components/invitation/invitation.component.ts b/dmp-frontend/src/app/shared/components/invitation/invitation.component.ts new file mode 100644 index 000000000..3eb679241 --- /dev/null +++ b/dmp-frontend/src/app/shared/components/invitation/invitation.component.ts @@ -0,0 +1,64 @@ +import { JsonSerializer } from '../../../utilities/JsonSerializer'; +import { UserInvitationCriteria } from '../../../models/criteria/invitation/UserInvitationCriteria'; +import { RequestItem } from '../../../models/criteria/RequestItem'; +import { Invitation } from '../../../models/invitation/Invitation'; +import { InvitationService } from '../../../services/invitation/invitation.service'; +import { User } from '../../../models/invitation/User'; +import { Component, OnInit, Inject } from "@angular/core"; +import { FormGroup } from '@angular/forms'; +import { Params, ActivatedRoute, Router } from '@angular/router'; +import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material'; + +@Component({ + selector: 'app-invitation-component', + templateUrl: 'invitation.component.html', + +}) +export class InvitationComponent implements OnInit { + + private formGroup: FormGroup; + + private filteredUsersAsync: boolean = false; + + private filteredUsers: User[]; + + constructor( + private invitationService: InvitationService, + private route: ActivatedRoute, + public router: Router, + public dialogRef: MatDialogRef, + @Inject(MAT_DIALOG_DATA) public data: any + ) { } + + ngOnInit(): void { + let invitation = new Invitation(); + invitation.dataManagementPlan = this.data.dmpId; + this.formGroup = invitation.buildForm(); + } + + + send(value: any) { + this.invitationService.inviteUsers(this.formGroup.value).subscribe( + null, null, () => this.dialogRef.close() + ); + } + + filterUsers(value: string): void { + this.filteredUsers = undefined; + if (value) { + this.filteredUsersAsync = true; + let request = new RequestItem(); + request.criteria = { like: value } + this.invitationService.getUsers(request).subscribe(items => { + this.filteredUsers = JsonSerializer.fromJSONArray(items, User); + if (!this.filteredUsers || this.filteredUsers.length == 0) { + let user = new User(); + user.email = value; + user.name = value; + this.filteredUsers.push(user) + } + this.filteredUsersAsync = false; + }); + } + } +} diff --git a/dmp-frontend/src/app/shared/components/navigation/navigation.component.css b/dmp-frontend/src/app/shared/components/navigation/navigation.component.css index 762f55639..f0668bffc 100644 --- a/dmp-frontend/src/app/shared/components/navigation/navigation.component.css +++ b/dmp-frontend/src/app/shared/components/navigation/navigation.component.css @@ -21,6 +21,11 @@ padding-right: 15px; } -.login-label{ - font-size:14px; +.login-label { + font-size: 14px; } + +.logo { + width: 38px; + height: 38px; +} \ No newline at end of file diff --git a/dmp-frontend/src/app/shared/components/navigation/navigation.component.html b/dmp-frontend/src/app/shared/components/navigation/navigation.component.html index 36bd8c1ce..70c5df432 100644 --- a/dmp-frontend/src/app/shared/components/navigation/navigation.component.html +++ b/dmp-frontend/src/app/shared/components/navigation/navigation.component.html @@ -1,14 +1,20 @@ - {{'NAV-BAR.TITLE' | translate}} +
- + - + +
+ +
+ {{this.getPrincipalName()}} +
+ + + + + + + + \ No newline at end of file diff --git a/dmp-frontend/src/app/user-management/admin-login/admin-login.component.scss b/dmp-frontend/src/app/user-management/admin-login/admin-login.component.scss new file mode 100644 index 000000000..ba8db6690 --- /dev/null +++ b/dmp-frontend/src/app/user-management/admin-login/admin-login.component.scss @@ -0,0 +1,139 @@ +.container{ + padding: 15px 30px; + } + + .card{ + box-shadow: 0 1px 4px 0 rgba(0, 0, 0, 0.14); + border-radius: 6px; + color: rgba(0,0,0, 0.87); + background: #fff; + } + + .card-raised{ + box-shadow: 0 10px 30px -12px rgba(0, 0, 0, 0.42), 0 4px 25px 0px rgba(0, 0, 0, 0.12), 0 8px 10px -5px rgba(0, 0, 0, 0.2); + } + + .page-title{ + margin-top: 40px; + } + + @media (min-width: 1200px) { + .container { + width: 100%; + } + } + + @media (min-width: 992px) { + .container { + width: 100%; + } + } + + @media (min-width: 768px) { + .container { + width: 100%; + } + } + + .container{ + height: 100%; + position: relative; + z-index: 1; + } + + .card{ + position: relative; + padding: 20px; + display: flex; + flex-direction: column; + align-items: center; + margin-top: 90px; + top: -90px; + -webkit-animation-name: card; + -moz-animation-name: card; + -o-animation-name: card; + animation-name: card; + -webkit-animation-duration: 600ms; + -moz-animation-duration: 600ms; + -o-animation-duration: 600ms; + animation-duration: 600ms; + -webkit-animation-fill-mode: forwards; + -moz-animation-fill-mode: forwards; + -o-animation-fill-mode: forwards; + animation-fill-mode: forwards; + } + + @-webkit-keyframes card { + from {top: -40px;} + to {top: 0;} + } + + @keyframes card { + from {top: -40px;} + to {top: 0;} + } + + .card-header{ + position: relative; + overflow: hidden; + top: -40px; + width: 100%; + padding: 25px; + border-radius: 3px; + background: linear-gradient(60deg, #aeb5b4, #9d9799); + box-shadow: 0 4px 20px 0px rgba(0, 0, 0, 0.14), 0 7px 10px -5px rgba(49, 46, 47, 0.4); + display: flex; + flex-direction: column; + align-items: center; + } + + .card-header h4{ + font-weight: 400; + color: #fff; + margin-bottom: 25px; + margin-top: 5px; + } + + .social-btns i{ + font-size: 21px; + color: #fff; + } + + .social-btns button{ + margin: 0 8px; + } + + .tip{ + margin-top: -20px; + } + + .form-row, .card-form, .mat-input-container{ + width: 100%; + } + + .card-form{ + padding: 5px; + } + + .form-row{ + position: relative; + display: flex; + align-items: center; + margin-top: 13px; + } + + .form-row i{ + position: relative; + top: -5px; + margin-right: 15px; + color: #555; + } + + .card-footer{ + margin: 10px; + } + + .card-footer button{ + color: #0c0b0b; + } + \ No newline at end of file diff --git a/dmp-frontend/src/app/user-management/admin-login/admin-login.component.ts b/dmp-frontend/src/app/user-management/admin-login/admin-login.component.ts new file mode 100644 index 000000000..f4b9eb83e --- /dev/null +++ b/dmp-frontend/src/app/user-management/admin-login/admin-login.component.ts @@ -0,0 +1,36 @@ +import { Credential } from '../../models/login/Credential'; +import { LoginOptions } from '../utilties/LoginOptions'; +import { LoginService } from '../utilties/login-service'; +import { HttpClient } from '@angular/common/http'; +import { Component, OnInit, ElementRef, AfterViewInit, VERSION, Injectable, NgZone } from '@angular/core'; +import { Router, ActivatedRoute, Params } from "@angular/router"; +import { MatPaginator, MatSort, MatSnackBar } from "@angular/material"; +import { TranslateService } from "@ngx-translate/core"; + + + +@Component({ + selector: 'admin-login', + templateUrl: './admin-login.component.html', + styleUrls: ['./admin-login.component.scss'] +}) +export class AdminLoginComponent implements OnInit { + + public auth2: any; + public credential: Credential = new Credential() + + constructor( + private loginService: LoginService + ) { + } + + + + ngOnInit() { + } + + public nativeLogin() { + this.loginService.nativeLogin(this.credential); + } + +} \ No newline at end of file diff --git a/dmp-frontend/src/app/user-management/login.module.ts b/dmp-frontend/src/app/user-management/login.module.ts index 08cdfcdb1..b03197782 100644 --- a/dmp-frontend/src/app/user-management/login.module.ts +++ b/dmp-frontend/src/app/user-management/login.module.ts @@ -10,33 +10,36 @@ import { LoginService } from './utilties/login-service'; import { LoginComponent } from './login/login.component'; import { ModuleWithProviders, NgModule } from "@angular/core"; import { CommonModule } from '@angular/common'; +import { AdminLoginComponent } from '../user-management/admin-login/admin-login.component'; @NgModule({ - imports: [ - SharedModule, - CommonModule, - LoginRoutes, - FormsModule - ], - declarations: [ - LoginComponent, - LinkedInLoginComponent, - TwitterLoginComponent - ], - exports: [ - LoginComponent, - LinkedInLoginComponent, - TwitterLoginComponent - ], - providers: [LoginService] + imports: [ + SharedModule, + CommonModule, + LoginRoutes, + FormsModule + ], + declarations: [ + LoginComponent, + LinkedInLoginComponent, + TwitterLoginComponent, + AdminLoginComponent + ], + exports: [ + LoginComponent, + LinkedInLoginComponent, + TwitterLoginComponent, + AdminLoginComponent + ], + providers: [LoginService] }) export class LoginModule { - static forRoot(config: LoginServiceConfiguration): ModuleWithProviders { - return { - ngModule: LoginModule, - providers: [ - { provide: LoginServiceConfiguration, useValue: config } - ], - }; - } -} \ No newline at end of file + static forRoot(config: LoginServiceConfiguration): ModuleWithProviders { + return { + ngModule: LoginModule, + providers: [ + { provide: LoginServiceConfiguration, useValue: config } + ], + }; + } +} diff --git a/dmp-frontend/src/app/user-management/login.routes.ts b/dmp-frontend/src/app/user-management/login.routes.ts index 67cd0ea80..312993625 100644 --- a/dmp-frontend/src/app/user-management/login.routes.ts +++ b/dmp-frontend/src/app/user-management/login.routes.ts @@ -2,9 +2,11 @@ import { TwitterLoginComponent } from './login/twitter-login/twitter-login.compo import { LinkedInLoginComponent } from './login/linkedin-login/linkedin-login.component'; import { LoginComponent } from './login/login.component'; import { RouterModule, Routes } from '@angular/router'; +import { AdminLoginComponent } from '../user-management/admin-login/admin-login.component'; const routes: Routes = [ { path: 'login', component: LoginComponent }, + { path: 'login/admin', component: AdminLoginComponent }, { path: 'login/linkedin', component: LinkedInLoginComponent }, { path: 'login/twitter', component: TwitterLoginComponent } ]; diff --git a/dmp-frontend/src/app/user-management/login/login.component.html b/dmp-frontend/src/app/user-management/login/login.component.html index b0318c465..7b7d630e8 100644 --- a/dmp-frontend/src/app/user-management/login/login.component.html +++ b/dmp-frontend/src/app/user-management/login/login.component.html @@ -41,6 +41,7 @@ +

You dont need to have a registered account for OpenDMPs

diff --git a/dmp-frontend/src/app/user-management/login/login.component.ts b/dmp-frontend/src/app/user-management/login/login.component.ts index 816f4a342..37161d966 100644 --- a/dmp-frontend/src/app/user-management/login/login.component.ts +++ b/dmp-frontend/src/app/user-management/login/login.component.ts @@ -14,7 +14,7 @@ import { TranslateService } from "@ngx-translate/core"; templateUrl: './login.component.html', styleUrls: ['./login.component.scss'] }) -export class LoginComponent implements OnInit { +export class LoginComponent implements AfterViewInit { public auth2: any; public credential: Credential = new Credential() @@ -26,7 +26,7 @@ export class LoginComponent implements OnInit { - ngOnInit() { + ngAfterViewInit() { this.loginService.initProviders(); } diff --git a/dmp-frontend/src/app/users/activity/RecentActivityTypes.ts b/dmp-frontend/src/app/users/activity/RecentActivityTypes.ts new file mode 100644 index 000000000..a4dd4cbc8 --- /dev/null +++ b/dmp-frontend/src/app/users/activity/RecentActivityTypes.ts @@ -0,0 +1,5 @@ +export enum RecentActivityTypes { + PROJECT = 0, + DATASET = 1, + DMP = 2 + } \ No newline at end of file diff --git a/dmp-frontend/src/app/users/activity/recent-activity.component.html b/dmp-frontend/src/app/users/activity/recent-activity.component.html new file mode 100644 index 000000000..3133e0393 --- /dev/null +++ b/dmp-frontend/src/app/users/activity/recent-activity.component.html @@ -0,0 +1,68 @@ +
+
+ + + + {{'RECENT-ACTIVITY.MY-TITLE-PROJECT' | translate}} + + + + + +

+ {{activity.label}} +

+

+ {{activity.timestamp | date:'shortDate'}} +

+
+
+
+ +
+ +
+
+ + + + {{'RECENT-ACTIVITY.MY-TITLE-DMP' | translate}} + + + + + +

+ {{activity.label}} +

+

+ {{activity.timestamp | date:'shortDate'}} +

+
+
+
+
+
+
+ + + + {{'RECENT-ACTIVITY.MY-TITLE-DATASET' | translate}} + + + + + +

+ {{activity.label}} +

+

+ {{activity.timestamp | date:'shortDate'}} +

+
+
+ +
+
+
+
\ No newline at end of file diff --git a/dmp-frontend/src/app/users/activity/recent-activity.component.scss b/dmp-frontend/src/app/users/activity/recent-activity.component.scss new file mode 100644 index 000000000..e69de29bb diff --git a/dmp-frontend/src/app/users/activity/recent-activity.component.ts b/dmp-frontend/src/app/users/activity/recent-activity.component.ts new file mode 100644 index 000000000..5aae16704 --- /dev/null +++ b/dmp-frontend/src/app/users/activity/recent-activity.component.ts @@ -0,0 +1,64 @@ +import { DataTableRequest } from '../../models/data-table/DataTableRequest'; +import { UserErrorModel } from '../../models/users/UserErrorModel'; +import { UserReferenceService } from '../../services/user-reference/user-reference-data.service'; +import { UserListingModel } from '../../models/users/UserListingModel'; +import { SnackBarNotificationComponent } from '../../shared/components/notificaiton/snack-bar-notification.component'; +import { UserCriteria } from '../../models/criteria/users/UserCriteria'; +import { UserCriteriaErrorModel } from '../../models/criteria/users/UserCriteriaErrorModel'; +import { Observable } from 'rxjs/Rx'; +import { Component, OnInit, AfterViewInit, ViewChild } from '@angular/core'; +import { UsersCriteriaComponent } from '../../shared/components/criteria/users/users-criteria.component'; +import { Router } from '@angular/router'; +import { Principal } from '../../models/login/Principal'; +import { MatPaginator, MatSort, MatSnackBar } from '@angular/material'; +import { TranslateService } from '@ngx-translate/core'; +import { DataSource } from '@angular/cdk/table'; +import { RecentActivityTypes } from '../../users/activity/RecentActivityTypes'; + + +@Component({ + selector: 'app-recent-activity', + templateUrl: './recent-activity.component.html', + styleUrls: ['./recent-activity.component.scss'], + providers: [ + UserReferenceService + ] +}) +export class RecentActivityComponent implements OnInit { + + datasetActivities: any[]; + projectActivities: any[]; + dmpActivities: any[]; + public RecentActivityTypes = RecentActivityTypes; + constructor( + private router: Router, + private userReferenceService: UserReferenceService + ) { } + + ngOnInit() { + this.userReferenceService.getRecentActivity().subscribe(response => { + this.datasetActivities = response["recentDatasetActivities"]; + this.dmpActivities = response["recentDmpActivities"]; + this.projectActivities = response["recentProjectActivities"]; + }) + } + + redirect(id: string, type: RecentActivityTypes) { + switch (type) { + case RecentActivityTypes.PROJECT: { + this.router.navigate(["projects/edit/" + id]); + return; + } + case RecentActivityTypes.DATASET: { + this.router.navigate(["datasets/edit/" + id]); + return; + } + case RecentActivityTypes.DMP: { + this.router.navigate(["dmps/edit/" + id]); + return; + } + default: throw new Error("Unsupported Activity Type ") + } + + } +} \ No newline at end of file diff --git a/dmp-frontend/src/app/users/components/roles/user-role-editor.component.ts b/dmp-frontend/src/app/users/components/roles/user-role-editor.component.ts index 45dbe0e61..f1fcbaf5e 100644 --- a/dmp-frontend/src/app/users/components/roles/user-role-editor.component.ts +++ b/dmp-frontend/src/app/users/components/roles/user-role-editor.component.ts @@ -11,157 +11,153 @@ import { Principal } from '../../../models/login/Principal'; import { MatSnackBar } from '@angular/material'; @Component({ - selector: 'user-role-editor-component', - templateUrl: './user-role-editor.component.html', - styleUrls: ['./user-role-editor.component.scss'], - providers: [ - UserReferenceService - ] + selector: 'user-role-editor-component', + templateUrl: './user-role-editor.component.html', + styleUrls: ['./user-role-editor.component.scss'], }) export class UserRoleEditorComponent implements OnInit { - @Input() public item: UserListingModel; - private formGroup: FormGroup = null; - private nowEditing = false; + @Input() public item: UserListingModel; + private formGroup: FormGroup = null; + private nowEditing = false; + private errorModel: UserErrorModel; + constructor( + private language: TranslateService, + private userService: UserReferenceService, + private formBuilder: FormBuilder, + private snackBar: MatSnackBar + ) { + } - constructor( - private language: TranslateService, - private userService: UserReferenceService, - private errorModel: UserErrorModel, - private formBuilder: FormBuilder, - private snackBar: MatSnackBar - ) { - } + ngOnInit() { + if (this.errorModel == null) { this.errorModel = new UserErrorModel(); } + if (this.formGroup == null) { this.formGroup = this.buildForm(); } + } - ngOnInit() { - if (this.errorModel == null) { this.errorModel = new UserErrorModel(); } - if (this.formGroup == null) { this.formGroup = this.buildForm(); } - } + buildForm(): FormGroup { + const context: ValidationContext = this.createValidationContext(); - buildForm(): FormGroup { - const context: ValidationContext = this.createValidationContext(); + return this.formBuilder.group({ + appRoles: new FormControl({ value: this.item.appRoles, disabled: true }, context.getValidation('appRoles').validators) + }); + } - return this.formBuilder.group({ - appRoles: new FormControl({ value: this.item.appRoles, disabled: true }, context.getValidation('appRoles').validators) - }); - } + createValidationContext(): ValidationContext { + const validationContext: ValidationContext = new ValidationContext(); + const validationArray: Validation[] = new Array(); - createValidationContext(): ValidationContext { - const validationContext: ValidationContext = new ValidationContext(); - const validationArray: Validation[] = new Array(); + validationArray.push({ key: 'appRoles' }); - validationArray.push({ key: 'appRoles' }); + validationContext.validation = validationArray; + return validationContext; + } - validationContext.validation = validationArray; - return validationContext; - } + formSubmit(): void { + this.clearErrorModel(); - formSubmit(): void { - this.clearErrorModel(); + const modifiedItem = new UserListingModel().fromJSONObject(this.item); + modifiedItem.appRoles = this.getFormControl('appRoles').value; - const modifiedItem = new UserListingModel().fromJSONObject(this.item); - modifiedItem.appRoles = this.getFormControl('appRoles').value; + if (!this.isFormValid()) { return; } + this.userService.updateRoles(modifiedItem).subscribe( + (res) => this.onCallbackSuccess(), + (error) => this.onCallbackError(error) + ); + } - if (!this.isFormValid()) { return; } - this.userService.updateRoles(modifiedItem).subscribe( - (res) => this.onCallbackSuccess(), - (error) => this.onCallbackError(error) - ); - } + editItem(): void { + this.formGroup.enable(); + this.nowEditing = true; + } - editItem(): void { - this.formGroup.enable(); - this.nowEditing = true; - } + isFormValid(): boolean { + this.touchAllFormFields(this.formGroup); + this.validateAllFormFields(this.formGroup); + return this.formGroup.valid; + } - isFormValid(): boolean { - this.touchAllFormFields(this.formGroup); - this.validateAllFormFields(this.formGroup); - return this.formGroup.valid; - } + getFormData(): any { + return this.formGroup.value; + } - getFormData(): any { - return this.formGroup.value; - } + getFormControl(controlName: string): AbstractControl { + return this.formGroup.get(controlName); + } - getFormControl(controlName: string): AbstractControl { - return this.formGroup.get(controlName); - } + validateAllFormFields(formControl: AbstractControl) { + if (formControl instanceof FormControl) { + formControl.updateValueAndValidity({ emitEvent: false }) + } else if (formControl instanceof FormGroup) { + Object.keys(formControl.controls).forEach(item => { + const control = formControl.get(item); + this.validateAllFormFields(control); + }) + } else if (formControl instanceof FormArray) { + formControl.controls.forEach(item => { + this.validateAllFormFields(item); + }) + } + } - validateAllFormFields(formControl: AbstractControl) { - if (formControl instanceof FormControl) { - formControl.updateValueAndValidity({ emitEvent: false }) - } else if (formControl instanceof FormGroup) { - Object.keys(formControl.controls).forEach(item => { - const control = formControl.get(item); - this.validateAllFormFields(control); - }) - } else if (formControl instanceof FormArray) { - formControl.controls.forEach(item => { - this.validateAllFormFields(item); - }) - } - } + touchAllFormFields(formControl: AbstractControl) { + if (formControl instanceof FormControl) { + formControl.markAsTouched(); + } else if (formControl instanceof FormGroup) { + Object.keys(formControl.controls).forEach(item => { + const control = formControl.get(item); + this.touchAllFormFields(control); + }) + } else if (formControl instanceof FormArray) { + formControl.controls.forEach(item => { + this.touchAllFormFields(item); + }) + } + } - touchAllFormFields(formControl: AbstractControl) { - if (formControl instanceof FormControl) { - formControl.markAsTouched(); - } else if (formControl instanceof FormGroup) { - Object.keys(formControl.controls).forEach(item => { - const control = formControl.get(item); - this.touchAllFormFields(control); - }) - } else if (formControl instanceof FormArray) { - formControl.controls.forEach(item => { - this.touchAllFormFields(item); - }) - } - } + setErrorModel(errorModel: UserErrorModel) { + Object.keys(errorModel).forEach(item => { + (this.errorModel)[item] = (errorModel)[item]; + }) + } - setErrorModel(errorModel: UserErrorModel) { - Object.keys(errorModel).forEach(item => { - (this.errorModel)[item] = (errorModel)[item]; - }) - } + clearErrorModel() { + Object.keys(this.errorModel).forEach(item => { + (this.errorModel)[item] = ''; + }) + } - clearErrorModel() { - Object.keys(this.errorModel).forEach(item => { - (this.errorModel)[item] = ''; - }) - } + onCallbackSuccess() { + this.nowEditing = false; + this.formGroup.disable(); + this.snackBar.openFromComponent(SnackBarNotificationComponent, { + data: { message: 'GENERAL.SNACK-BAR.SUCCESSFUL-UPDATE', language: this.language }, + duration: 3000, + extraClasses: ['snackbar-success'] + }); + } + onCallbackError(error: any) { + this.setErrorModel(error.error); + this.validateAllFormFields(this.formGroup); + this.snackBar.openFromComponent(SnackBarNotificationComponent, { + data: { message: 'GENERAL.SNACK-BAR.UNSUCCESSFUL-UPDATE', language: this.language }, + duration: 3000, + extraClasses: ['snackbar-warning'] + }); + } - onCallbackSuccess() { - this.nowEditing = false; - this.formGroup.disable(); - this.snackBar.openFromComponent(SnackBarNotificationComponent, { - data: { message: 'GENERAL.SNACK-BAR.SUCCESSFUL-UPDATE', language: this.language }, - duration: 3000, - extraClasses: ['snackbar-success'] - }); - } - onCallbackError(error: any) { - this.setErrorModel(error.error); - this.validateAllFormFields(this.formGroup); - this.snackBar.openFromComponent(SnackBarNotificationComponent, { - data: { message: 'GENERAL.SNACK-BAR.UNSUCCESSFUL-UPDATE', language: this.language }, - duration: 3000, - extraClasses: ['snackbar-warning'] - }); - } + getPrincipalAppRoleValues(): Number[] { + let keys: string[] = Object.keys(Principal.AppRole); + keys = keys.slice(0, keys.length / 2); + const values: Number[] = keys.map(Number); + return values; + } - getPrincipalAppRoleValues(): Number[] { - let keys: string[] = Object.keys(Principal.AppRole); - keys = keys.slice(0, keys.length / 2); - const values: Number[] = keys.map(Number); - return values; - } - - getPrincipalAppRoleWithLanguage(role: Principal.AppRole): string { - let result = ''; - this.language.get(new Utilities().convertFromPrincipalAppRole(role)).subscribe((value: string) => { - result = value; - }); - return result; - } + getPrincipalAppRoleWithLanguage(role: Principal.AppRole): string { + let result = ''; + this.language.get(new Utilities().convertFromPrincipalAppRole(role)).subscribe((value: string) => { + result = value; + }); + return result; + } } diff --git a/dmp-frontend/src/app/users/components/users.component.ts b/dmp-frontend/src/app/users/components/users.component.ts index c9e25f21b..256259f96 100644 --- a/dmp-frontend/src/app/users/components/users.component.ts +++ b/dmp-frontend/src/app/users/components/users.component.ts @@ -17,125 +17,120 @@ import { DataSource } from '@angular/cdk/table'; export class UsersDataSource extends DataSource { - totalCount = 0; - isLoadingResults = false; + totalCount = 0; + isLoadingResults = false; - constructor( - private _service: UserReferenceService, - private _paginator: MatPaginator, - private _sort: MatSort, - private _languageService: TranslateService, - private _snackBar: MatSnackBar, - private _criteria: UsersCriteriaComponent - ) { - super(); + constructor( + private _service: UserReferenceService, + private _paginator: MatPaginator, + private _sort: MatSort, + private _languageService: TranslateService, + private _snackBar: MatSnackBar, + private _criteria: UsersCriteriaComponent + ) { + super(); - //this._paginator.page.subscribe((pageEvent: PageEvent) => { - // this.store.dispatch(new LoadPhotosRequestAction(pageEvent.pageIndex, pageEvent.pageSize)) - //}) - } + //this._paginator.page.subscribe((pageEvent: PageEvent) => { + // this.store.dispatch(new LoadPhotosRequestAction(pageEvent.pageIndex, pageEvent.pageSize)) + //}) + } - connect(): Observable { - const displayDataChanges = [ - this._paginator.page - //this._sort.matSortChange - ]; + connect(): Observable { + const displayDataChanges = [ + this._paginator.page + //this._sort.matSortChange + ]; - // If the user changes the sort order, reset back to the first page. - //this._sort.matSortChange.subscribe(() => { - // this._paginator.pageIndex = 0; - //}) + // If the user changes the sort order, reset back to the first page. + //this._sort.matSortChange.subscribe(() => { + // this._paginator.pageIndex = 0; + //}) - return Observable.merge(...displayDataChanges) - .startWith(null) - .switchMap(() => { - setTimeout(() => { - this.isLoadingResults = true; - }); - const startIndex = this._paginator.pageIndex * this._paginator.pageSize; - let fields: Array = new Array() - if (this._sort.active) fields = this._sort.direction === "asc" ? ["+" + this._sort.active] : ["-" + this._sort.active]; - const request = new DataTableRequest(startIndex, this._paginator.pageSize, { fields: fields }); - request.criteria = this._criteria.getFormData(); - return this._service.getPaged(request); - }) - .catch((error: any) => { - this._snackBar.openFromComponent(SnackBarNotificationComponent, { - data: { message: 'GENERAL.SNACK-BAR.FORMS-BAD-REQUEST', language: this._languageService }, - duration: 3000, - extraClasses: ['snackbar-warning'] - }); - this._criteria.onCallbackError(error); - return Observable.of(null); - }) - .map(result => { - setTimeout(() => { - this.isLoadingResults = false; - }); - return result; - }) - .map(result => { - if (!result) { return []; } - if (this._paginator.pageIndex === 0) { this.totalCount = result.totalCount; } - //result.data.forEach((element: any) => { - // const roles: String[] = []; - // element.roles.forEach((role: any) => { - // this._languageService.get(this._utilities.convertFromPrincipalAppRole(role)).subscribe( - // value => roles.push(value) - // ); - // }); - // element.roles = roles; - //}); - return result.data; - }); - } + return Observable.merge(...displayDataChanges) + .startWith(null) + .switchMap(() => { + setTimeout(() => { + this.isLoadingResults = true; + }); + const startIndex = this._paginator.pageIndex * this._paginator.pageSize; + let fields: Array = new Array() + if (this._sort.active) fields = this._sort.direction === "asc" ? ["+" + this._sort.active] : ["-" + this._sort.active]; + const request = new DataTableRequest(startIndex, this._paginator.pageSize, { fields: fields }); + request.criteria = this._criteria.getFormData(); + return this._service.getPaged(request); + }) + .catch((error: any) => { + this._snackBar.openFromComponent(SnackBarNotificationComponent, { + data: { message: 'GENERAL.SNACK-BAR.FORMS-BAD-REQUEST', language: this._languageService }, + duration: 3000, + extraClasses: ['snackbar-warning'] + }); + this._criteria.onCallbackError(error); + return Observable.of(null); + }) + .map(result => { + setTimeout(() => { + this.isLoadingResults = false; + }); + return result; + }) + .map(result => { + if (!result) { return []; } + if (this._paginator.pageIndex === 0) { this.totalCount = result.totalCount; } + //result.data.forEach((element: any) => { + // const roles: String[] = []; + // element.roles.forEach((role: any) => { + // this._languageService.get(this._utilities.convertFromPrincipalAppRole(role)).subscribe( + // value => roles.push(value) + // ); + // }); + // element.roles = roles; + //}); + return result.data; + }); + } - disconnect() { - // No-op - } + disconnect() { + // No-op + } } @Component({ - selector: 'app-users-component', - templateUrl: './users.component.html', - styleUrls: ['./users.component.scss'], - providers: [ - UserReferenceService, - UserCriteriaErrorModel, - UserErrorModel - ], + selector: 'app-users-component', + templateUrl: './users.component.html', + styleUrls: ['./users.component.scss'] }) export class UsersComponent implements OnInit, AfterViewInit { - @ViewChild(MatPaginator) _paginator: MatPaginator; - @ViewChild(MatSort) sort: MatSort; - @ViewChild(UsersCriteriaComponent) criteria: UsersCriteriaComponent; + @ViewChild(MatPaginator) _paginator: MatPaginator; + @ViewChild(MatSort) sort: MatSort; + @ViewChild(UsersCriteriaComponent) criteria: UsersCriteriaComponent; - dataSource: UsersDataSource | null; - displayedColumns: String[] = ['name', 'email', 'lastloggedin', 'roles']; + dataSource: UsersDataSource | null; + displayedColumns: String[] = ['name', 'email', 'lastloggedin', 'roles']; - constructor(private userService: UserReferenceService, private router: Router, private languageService: TranslateService, public snackBar: MatSnackBar) { + constructor(private userService: UserReferenceService, private router: Router, private languageService: TranslateService, public snackBar: MatSnackBar) { - } + } - ngOnInit() { - //this.refresh(); //called on ngAfterViewInit with default criteria - } + ngOnInit() { + //this.refresh(); //called on ngAfterViewInit with default criteria + } - ngAfterViewInit() { - setTimeout(() => { - this.criteria.setRefreshCallback(() => this.refresh()); - this.criteria.setCriteria(this.getDefaultCriteria()); - this.criteria.controlModified(); - }); - } + ngAfterViewInit() { + setTimeout(() => { + this.criteria.setRefreshCallback(() => this.refresh()); + this.criteria.setCriteria(this.getDefaultCriteria()); + this.criteria.controlModified(); + }); + } - refresh() { - this.dataSource = new UsersDataSource(this.userService, this._paginator, this.sort, this.languageService, this.snackBar, this.criteria, ); - } + refresh() { + this.dataSource = new UsersDataSource(this.userService, this._paginator, this.sort, this.languageService, this.snackBar, this.criteria, ); + } - getDefaultCriteria(): UserCriteria { - const defaultCriteria = new UserCriteria(); - return defaultCriteria; - } + getDefaultCriteria(): UserCriteria { + const defaultCriteria = new UserCriteria(); + return defaultCriteria; + } } diff --git a/dmp-frontend/src/app/users/users.module.ts b/dmp-frontend/src/app/users/users.module.ts index 15e7e088d..ddd98f732 100644 --- a/dmp-frontend/src/app/users/users.module.ts +++ b/dmp-frontend/src/app/users/users.module.ts @@ -9,43 +9,55 @@ import { NgModule } from '@angular/core'; import { FormsModule, ReactiveFormsModule } from '@angular/forms'; import { UsersComponent } from './components/users.component'; -import { UsersRoutes } from './users.routes'; import { UserRoleEditorComponent } from './components/roles/user-role-editor.component'; +import { RecentActivityComponent } from '../users/activity/recent-activity.component'; +import { UserReferenceService } from '../services/user-reference/user-reference-data.service'; +import { RouterModule } from '@angular/router'; +import { UsersRoutes } from './users.routes'; +import { BaseHttpModule } from '../utilities/cite-http-service-module/cite-http.module'; +import { BaseHttpService } from '../utilities/cite-http-service-module/base-http.service'; @NgModule({ - imports: [ - CommonModule, - UsersRoutes, - SharedModule, - TranslateModule.forRoot({ - loader: { - provide: TranslateLoader, - useFactory: HttpLoaderFactory, - deps: [HttpClient] - } - }), - ReactiveFormsModule, - MaterialModule - ], + imports: [ + CommonModule, + SharedModule, + BaseHttpModule.forRoot(), - declarations: [ - UsersComponent, - UsersCriteriaComponent, - UserRoleEditorComponent - ], + RouterModule.forChild(UsersRoutes), + TranslateModule.forRoot({ + loader: { + provide: TranslateLoader, + useFactory: HttpLoaderFactory, + deps: [HttpClient] + } + }), + ReactiveFormsModule, + MaterialModule + ], - exports: [ - UsersComponent - ] + declarations: [ + UsersComponent, + UsersCriteriaComponent, + UserRoleEditorComponent, + ], + providers: [ + BaseHttpService, + UserReferenceService + + ], + exports: [ + UsersComponent + + ] }) export class UsersModule { - constructor(private translate: TranslateService) { - translate.setDefaultLang('en'); - translate.use('en'); - } + constructor(private translate: TranslateService) { + translate.setDefaultLang('en'); + translate.use('en'); + } } export function HttpLoaderFactory(httpClient: HttpClient) { - return new TranslateHttpLoader(httpClient, 'assets/lang/', '.json'); + return new TranslateHttpLoader(httpClient, 'assets/lang/', '.json'); } diff --git a/dmp-frontend/src/app/users/users.routes.ts b/dmp-frontend/src/app/users/users.routes.ts index 5717c9525..01a43cff8 100644 --- a/dmp-frontend/src/app/users/users.routes.ts +++ b/dmp-frontend/src/app/users/users.routes.ts @@ -1,8 +1,6 @@ import { RouterModule, Routes } from '@angular/router'; import { UsersComponent } from './components/users.component'; -const routes: Routes = [ - { path: '', component: UsersComponent } +export const UsersRoutes: Routes = [ + { path: '', component: UsersComponent } ]; - -export const UsersRoutes = RouterModule.forChild(routes); diff --git a/dmp-frontend/src/app/utilities/JsonSerializer.ts b/dmp-frontend/src/app/utilities/JsonSerializer.ts index da284c1ad..dbb28b1c5 100644 --- a/dmp-frontend/src/app/utilities/JsonSerializer.ts +++ b/dmp-frontend/src/app/utilities/JsonSerializer.ts @@ -1,8 +1,8 @@ import { Serializable } from '../models/interfaces/Serializable'; -export class JsonSerializer{ +export class JsonSerializer { public static fromJSONArray>(items: any[], type: { new(): T; }): T[] { - if(!items)return new Array(); + if (!items) return new Array(); const objectList: T[] = new Array(); for (let i = 0; i < items.length; i++) { objectList.push(new type().fromJSONObject(items[i])) @@ -11,7 +11,7 @@ export class JsonSerializer{ } public static fromJSONObject>(item: any, type: { new(): T; }): T { - if(!item)return null; + if (!item) return null; return new type().fromJSONObject(item); } } \ No newline at end of file diff --git a/dmp-frontend/src/app/utilities/UrlUtilities.ts b/dmp-frontend/src/app/utilities/UrlUtilities.ts new file mode 100644 index 000000000..3ae4a39c5 --- /dev/null +++ b/dmp-frontend/src/app/utilities/UrlUtilities.ts @@ -0,0 +1,17 @@ +import { Injectable } from "@angular/core"; + +@Injectable() +export class UrlUtilities { + + public applyUrlTemplate(url: string, params: any): string { + let paramsToString = ""; + if (params) paramsToString = "?" + let keys = Object.keys(params); + keys.forEach(x => { + if (keys.indexOf(x) > 0) paramsToString += "&" + paramsToString += x + "=" + params[x]; + }) + return url + paramsToString; + } + +} diff --git a/dmp-frontend/src/app/utilities/cite-http-service-module/base-http.service.ts b/dmp-frontend/src/app/utilities/cite-http-service-module/base-http.service.ts index f0188098c..13b61ec56 100644 --- a/dmp-frontend/src/app/utilities/cite-http-service-module/base-http.service.ts +++ b/dmp-frontend/src/app/utilities/cite-http-service-module/base-http.service.ts @@ -10,129 +10,132 @@ import { HttpClient } from '@angular/common/http'; import { AuthService } from '../../services/auth/auth.service'; import { SnackBarNotificationComponent } from '../../shared/components/notificaiton/snack-bar-notification.component'; import { BaseHttpResponseModel } from '../../models/http/BaseHttpResponseModel'; -import { ApiResponseCode } from '@app/utilities/types/ApiResponseCode'; +import { ApiResponseCode } from '../../utilities/types/ApiResponseCode'; @Injectable() export class BaseHttpService { - constructor( - protected http: HttpClient, - private router: Router, - private authService: AuthService, - public language: TranslateService, - public snackBar: MatSnackBar, - public route: ActivatedRoute - ) { - } - get(url: string, options?: any, appendOptions: boolean = true): Observable { - return this.interceptRepsonse(this.http.get(url, this.buildRequestOptions(appendOptions, options))); - } - post(url: string, body: any, options?: any, appendOptions: boolean = true): Observable { - return this.interceptRepsonse(this.http.post(url, body, this.buildRequestOptions(appendOptions, options))); - } - put(url: string, body: any, options?: any, appendOptions: boolean = true): Observable { - return this.interceptRepsonse(this.http.put(url, body, this.buildRequestOptions(appendOptions, options))); - } - delete(url: string, options?: any, appendOptions: boolean = true): Observable { - return this.interceptRepsonse(this.http.delete(url, this.buildRequestOptions(appendOptions, options))); - } - patch(url: string, body: any, options?: any, appendOptions: boolean = true): Observable { - return this.interceptRepsonse(this.http.patch(url, body, this.buildRequestOptions(appendOptions, options))); - } - head(url: string, options?: any, appendOptions: boolean = true): Observable { - return this.interceptRepsonse(this.http.head(url, this.buildRequestOptions(appendOptions, options))); - } - options(url: string, options?: any, appendOptions: boolean = true): Observable { - return this.interceptRepsonse(this.http.options(url, this.buildRequestOptions(appendOptions, options))); - } + constructor( + protected http: HttpClient, + private router: Router, + private authService: AuthService, + public language: TranslateService, + public snackBar: MatSnackBar, + public route: ActivatedRoute + ) { + } + get(url: string, options?: any, appendOptions: boolean = true): Observable { + return this.interceptRepsonse(this.http.get(url, this.buildRequestOptions(appendOptions, options))); + } + post(url: string, body: any, options?: any, appendOptions: boolean = true): Observable { + return this.interceptRepsonse(this.http.post(url, body, this.buildRequestOptions(appendOptions, options))); + } + put(url: string, body: any, options?: any, appendOptions: boolean = true): Observable { + return this.interceptRepsonse(this.http.put(url, body, this.buildRequestOptions(appendOptions, options))); + } + delete(url: string, options?: any, appendOptions: boolean = true): Observable { + return this.interceptRepsonse(this.http.delete(url, this.buildRequestOptions(appendOptions, options))); + } + patch(url: string, body: any, options?: any, appendOptions: boolean = true): Observable { + return this.interceptRepsonse(this.http.patch(url, body, this.buildRequestOptions(appendOptions, options))); + } + head(url: string, options?: any, appendOptions: boolean = true): Observable { + return this.interceptRepsonse(this.http.head(url, this.buildRequestOptions(appendOptions, options))); + } + options(url: string, options?: any, appendOptions: boolean = true): Observable { + return this.interceptRepsonse(this.http.options(url, this.buildRequestOptions(appendOptions, options))); + } - protected buildRequestOptions(appendOptions: boolean, options?: any): Object { - if (options == null) { - options = new RequestOptions(); - } - if (options.headers == null) { - options.headers = new Headers(); - } - if (!options.headers.has('Content-Type') && appendOptions) { - options.headers = options.headers.set('Content-Type', 'application/json'); - } - if (!options.headers.has('Content-Type') && appendOptions) { - options.headers = options.headers.set('Content-Type', 'application/json'); - } - if (!options.headers.has('AuthToken')) { - const principal = this.authService.current(); - if (principal) { - options.headers = options.headers.set('AuthToken', principal.token); - } - } + protected buildRequestOptions(appendOptions: boolean, options?: any): Object { + if (options == null) { + options = new RequestOptions(); + } + if (options.headers == null) { + options.headers = new Headers(); + } + if (!options.headers.has('Content-Type') && appendOptions) { + options.headers = options.headers.set('Content-Type', 'application/json'); + } + if (!options.headers.has('Content-Type') && appendOptions) { + options.headers = options.headers.set('Content-Type', 'application/json'); + } + if (!options.headers.has('AuthToken')) { + const principal = this.authService.current(); + if (principal) { + options.headers = options.headers.set('AuthToken', principal.token); + } + } - return options; - } + return options; + } - private interceptRepsonse(observable: Observable): Observable { - return observable - .catch((errorResponse) => { - if (errorResponse.status === 401) { - this.snackBar.openFromComponent(SnackBarNotificationComponent, { - data: { message: 'GENERAL.SNACK-BAR.SUCCESSFUL-LOGOUT', language: this.language }, - duration: 3000, - extraClasses: ['snackbar-success'] - }) - let currentPage = this.router.url; - this.router.navigate(['/unauthorized'], { queryParams: { returnUrl: currentPage } }); - //this.notification.httpError(error); - return Observable.of(); - } else { - let error: any = errorResponse.error - if (error.statusCode == ApiMessageCode.ERROR_MESSAGE) { - this.snackBar.openFromComponent(SnackBarNotificationComponent, { - data: { message: error.message, language: null }, - duration: 3000, - extraClasses: ['snackbar-warning'] - }) - return Observable.throw(errorResponse); - } - else { - this.snackBar.openFromComponent(SnackBarNotificationComponent, { - data: { message: 'GENERAL.ERRORS.HTTP-REQUEST-ERROR', language: this.language }, - duration: 3000, - extraClasses: ['snackbar-warning'] - }) - return Observable.throw(errorResponse); - } - } - }) - .map(response => { - if (response instanceof Blob) return response - if (response.statusCode == ApiMessageCode.SUCCESS_MESSAGE) { - //throw new Error('Request failed'); - this.snackBar.openFromComponent(SnackBarNotificationComponent, { - data: { message: response.message, language: null }, - duration: 3000, - extraClasses: ['snackbar-success'] - }) - return response.payload; + private interceptRepsonse(observable: Observable): Observable { + return observable + .catch((errorResponse) => { + if (errorResponse.status === 401) { + this.snackBar.openFromComponent(SnackBarNotificationComponent, { + data: { message: 'GENERAL.SNACK-BAR.SUCCESSFUL-LOGOUT', language: this.language }, + duration: 3000, + extraClasses: ['snackbar-success'] + }) + let currentPage = this.router.url; + this.router.navigate(['/unauthorized'], { queryParams: { returnUrl: currentPage } }); + //this.notification.httpError(error); + return Observable.of(); + } else { + let error: any = errorResponse.error + if (error.statusCode == ApiMessageCode.ERROR_MESSAGE) { + this.snackBar.openFromComponent(SnackBarNotificationComponent, { + data: { message: error.message, language: null }, + duration: 3000, + extraClasses: ['snackbar-warning'] + }) + return Observable.throw(errorResponse); + } + else if (error.statusCode == ApiMessageCode.VALIDATION_MESSAGE) { + return Observable.throw(errorResponse); + } + else { + this.snackBar.openFromComponent(SnackBarNotificationComponent, { + data: { message: 'GENERAL.ERRORS.HTTP-REQUEST-ERROR', language: this.language }, + duration: 3000, + extraClasses: ['snackbar-warning'] + }) + return Observable.throw(errorResponse); + } + } + }) + .map(response => { + if (response instanceof Blob) return response + if (response.statusCode == ApiMessageCode.SUCCESS_MESSAGE) { + //throw new Error('Request failed'); + this.snackBar.openFromComponent(SnackBarNotificationComponent, { + data: { message: response.message, language: null }, + duration: 3000, + extraClasses: ['snackbar-success'] + }) + return response.payload; - } - else if (response.statusCode == ApiMessageCode.NO_MESSAGE) { - return response.payload; - } - else { - return response.payload; - } - }); - } + } + else if (response.statusCode == ApiMessageCode.NO_MESSAGE) { + return response.payload; + } + else { + return response.payload; + } + }); + } - // public handleResponse(response: BaseHttpResponseModel) { - // if (response.statusCode < 200 || response.statusCode >= 300) { - // //throw new Error('Request failed'); - // this.snackBar.openFromComponent(SnackBarNotificationComponent, { - // data: { message: 'GENERAL.ERRORS.HTTP-REQUEST-ERROR', language: this.language }, - // duration: 3000, - // extraClasses: ['snackbar-warning'] - // }) - // } - // else { - // return response.payload; - // } - // } + // public handleResponse(response: BaseHttpResponseModel) { + // if (response.statusCode < 200 || response.statusCode >= 300) { + // //throw new Error('Request failed'); + // this.snackBar.openFromComponent(SnackBarNotificationComponent, { + // data: { message: 'GENERAL.ERRORS.HTTP-REQUEST-ERROR', language: this.language }, + // duration: 3000, + // extraClasses: ['snackbar-warning'] + // }) + // } + // else { + // return response.payload; + // } + // } } diff --git a/dmp-frontend/src/app/utilities/cite-http-service-module/cite-http.module.ts b/dmp-frontend/src/app/utilities/cite-http-service-module/cite-http.module.ts index b37b832b7..073fc064b 100644 --- a/dmp-frontend/src/app/utilities/cite-http-service-module/cite-http.module.ts +++ b/dmp-frontend/src/app/utilities/cite-http-service-module/cite-http.module.ts @@ -2,20 +2,24 @@ import { CommonModule } from '@angular/common'; import { NgModule, ModuleWithProviders } from '@angular/core'; import { AuthService } from '../../services/auth/auth.service'; import { BaseHttpService } from './base-http.service'; +import { TranslateService, TranslateModule, TranslateLoader } from '@ngx-translate/core'; +import { HttpLoaderFactory } from '../../projects/projects.module'; +import { HttpClient, HttpClientModule } from '@angular/common/http'; @NgModule({ - imports: [ - CommonModule - ] + imports: [ + CommonModule, + HttpClientModule + ] }) export class BaseHttpModule { - static forRoot(): ModuleWithProviders { - return { - ngModule: BaseHttpModule, - providers: [ - AuthService, - BaseHttpService - ] - }; - } + static forRoot(): ModuleWithProviders { + return { + ngModule: BaseHttpModule, + providers: [ + AuthService, + BaseHttpService + ] + }; + } } diff --git a/dmp-frontend/src/app/utilities/types/ApiMessageCode.ts b/dmp-frontend/src/app/utilities/types/ApiMessageCode.ts index 956406a15..c9c9b931f 100644 --- a/dmp-frontend/src/app/utilities/types/ApiMessageCode.ts +++ b/dmp-frontend/src/app/utilities/types/ApiMessageCode.ts @@ -3,5 +3,7 @@ export enum ApiMessageCode { SUCCESS_MESSAGE = 200, WARN_MESSAGE = 300, ERROR_MESSAGE = 400, - DEFAULT_ERROR_MESSAGE = 444 + DEFAULT_ERROR_MESSAGE = 444, + VALIDATION_MESSAGE = 445 + } \ No newline at end of file diff --git a/dmp-frontend/src/app/utilities/utilities.ts b/dmp-frontend/src/app/utilities/utilities.ts index f559bc5f6..ec01c5b7f 100644 --- a/dmp-frontend/src/app/utilities/utilities.ts +++ b/dmp-frontend/src/app/utilities/utilities.ts @@ -1,6 +1,7 @@ import { Injectable } from '@angular/core'; import { FormBuilder, FormArray, FormGroup } from '@angular/forms'; import { Principal } from '../models/login/Principal'; +import { DMPProfileFieldDataType, DMPProfileType } from '../models/data-management-plan-profile/DataManagementProfileField'; @Injectable() export class Utilities { @@ -12,4 +13,18 @@ export class Utilities { case Principal.AppRole.Manager: return 'TYPES.APP-ROLE.MANAGER' } } + + convertFromDMPProfileDataType(type: DMPProfileFieldDataType): string { + switch (type) { + case DMPProfileFieldDataType.DATE: return 'TYPES.DMP-PROFILE-FIELD.DATA-TYPE.DATE' + case DMPProfileFieldDataType.NUMBER: return 'TYPES.DMP-PROFILE-FIELD.DATA-TYPE.NUMBER' + case DMPProfileFieldDataType.TEXT: return 'TYPES.DMP-PROFILE-FIELD.DATA-TYPE.TEXT' + } + } + + convertFromDMPProfileType(type: DMPProfileType): string { + switch (type) { + case DMPProfileType.INPUT: return 'TYPES.DMP-PROFILE-FIELD.TYPE.INPUT' + } + } } diff --git a/dmp-frontend/src/app/visibility-rules/models/VisibilityRule.ts b/dmp-frontend/src/app/utilities/visibility-rules/models/VisibilityRule.ts similarity index 100% rename from dmp-frontend/src/app/visibility-rules/models/VisibilityRule.ts rename to dmp-frontend/src/app/utilities/visibility-rules/models/VisibilityRule.ts diff --git a/dmp-frontend/src/app/visibility-rules/models/VisibilityRuleSource.ts b/dmp-frontend/src/app/utilities/visibility-rules/models/VisibilityRuleSource.ts similarity index 100% rename from dmp-frontend/src/app/visibility-rules/models/VisibilityRuleSource.ts rename to dmp-frontend/src/app/utilities/visibility-rules/models/VisibilityRuleSource.ts diff --git a/dmp-frontend/src/app/utilities/visibility-rules/models/VisibilityRulesContext.ts b/dmp-frontend/src/app/utilities/visibility-rules/models/VisibilityRulesContext.ts new file mode 100644 index 000000000..eb8541f68 --- /dev/null +++ b/dmp-frontend/src/app/utilities/visibility-rules/models/VisibilityRulesContext.ts @@ -0,0 +1,32 @@ +import { VisibilityRuleSource } from './VisibilityRuleSource'; +import { VisibilityRule } from './VisibilityRule'; +import { Rule } from '../../../models/Rule'; +export class VisibilityRulesContext { + public rules: Array = new Array(); + + public getRulesFromKey(id: string): VisibilityRule { + + for (let i = 0; i < this.rules.length; i++) { + if (id == this.rules[i].targetControlId) return this.rules[i] + } + return null; + } + + public buildVisibilityRuleContext(items: Array) { + items.forEach(item => { + this.addToVisibilityRulesContext(item) + }); + } + + private addToVisibilityRulesContext(item: Rule): void { + for (let i = 0; i < this.rules.length; i++) { + if (this.rules[i].targetControlId == item.targetField) { + this.rules[i].sourceVisibilityRules.push({ sourceControlId: item.sourceField, sourceControlValue: item.requiredValue }); + return; + } + } + let newVisibilityRuleArray = [({ sourceControlId: item.sourceField, sourceControlValue: item.requiredValue })]; + this.rules.push({ targetControlId: item.targetField, sourceVisibilityRules: newVisibilityRuleArray }) + return; + } +} diff --git a/dmp-frontend/src/app/utilities/visibility-rules/visibility-rules.service.ts b/dmp-frontend/src/app/utilities/visibility-rules/visibility-rules.service.ts new file mode 100644 index 000000000..4959f0f1a --- /dev/null +++ b/dmp-frontend/src/app/utilities/visibility-rules/visibility-rules.service.ts @@ -0,0 +1,72 @@ +import { VisibilityRule } from './models/VisibilityRule'; +import { VisibilityRulesContext } from './models/VisibilityRulesContext'; +import { FormGroup } from '@angular/forms'; +import { Injectable } from '@angular/core'; +import { Rule } from '../../models/Rule'; +@Injectable() +export class VisibilityRulesService { + + public formGroup: FormGroup; + public visibilityRuleContext: VisibilityRulesContext; + public fieldsPathMemory: any = {}; + private elementVisibilityMap = new Map(); + + public isElementVisible(pathKey: string, id: string) { + if (!this.fieldsPathMemory[id] && pathKey) this.fieldsPathMemory[id] = pathKey; + if (pathKey && this.visibilityRuleContext.getRulesFromKey(id)) this.evaluateVisibility(this.visibilityRuleContext.getRulesFromKey(id)) + + if (this.checkElementVisibility(id)) { + return true + } else { + this.clearValues(pathKey) + return false; + } + } + + public checkElementVisibility(id: string): boolean { + if (!this.elementVisibilityMap.has(id) || this.elementVisibilityMap.get(id)) return true; + else return false; + } + + public buildVisibilityRules(item: Array) { + this.visibilityRuleContext = new VisibilityRulesContext(); + this.visibilityRuleContext.buildVisibilityRuleContext(item); + } + + public updateValueAndVisibility(id: string) { + let visibilityRules = this.visibilityRuleContext.rules.filter(item => item.sourceVisibilityRules.filter(source => source.sourceControlId === id).length > 0); + visibilityRules.forEach(item => this.evaluateVisibility(item)) + } + + private evaluateVisibility(visibilityRule: VisibilityRule) { + for (let i = 0; i < visibilityRule.sourceVisibilityRules.length; i++) { + let pathKey = this.fieldsPathMemory[visibilityRule.sourceVisibilityRules[i].sourceControlId]; + if (this.formGroup.get(pathKey + '.value') && ((this.formGroup.get(pathKey + '.value').value == null || this.formGroup.get(pathKey + '.value').value == undefined) || "" + this.formGroup.get(pathKey + '.value').value != "" + visibilityRule.sourceVisibilityRules[i].sourceControlValue)) { + if (this.formGroup.get(pathKey).parent.get("id")) { + if (!this.checkElementVisibility(this.formGroup.get(pathKey).parent.get("id").value)) { + this.elementVisibilityMap.set(visibilityRule.targetControlId, false) + return; + } + } + else { + this.elementVisibilityMap.set(visibilityRule.targetControlId, false) + return; + } + } + } + this.elementVisibilityMap.set(visibilityRule.targetControlId, true) + } + + private getParentPath(parentId: string): string { + return ''; + } + + private clearValues(pathKey) { + if (pathKey && this.formGroup.get(pathKey + '.value')) this.formGroup.get(pathKey + '.value').patchValue(null) + if (pathKey && this.formGroup.get(pathKey)["controls"].fields) { + for (var i = 0; i < this.formGroup.get(pathKey)["controls"].fields.length; i++) + this.clearValues(pathKey + '.fields.' + i); + } + + } +} diff --git a/dmp-frontend/src/app/visibility-rules/models/VisibilityRulesContext.ts b/dmp-frontend/src/app/visibility-rules/models/VisibilityRulesContext.ts deleted file mode 100644 index 68f8531fa..000000000 --- a/dmp-frontend/src/app/visibility-rules/models/VisibilityRulesContext.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { VisibilityRuleSource } from './VisibilityRuleSource'; -import { VisibilityRule } from './VisibilityRule'; -import { Rule } from '../../models/Rule' -export class VisibilityRulesContext { - public rules: Array = new Array(); - - public getRulesFromKey(id: string): VisibilityRule { - - for (let i = 0; i < this.rules.length; i++) { - if (id == this.rules[i].targetControlId) return this.rules[i] - } - return null; - } - - public buildVisibilityRuleContext(items: Array) { - items.forEach(item => { - this.addToVisibilityRulesContext(item) - }); - } - - private addToVisibilityRulesContext(item: Rule): void { - for (let i = 0; i < this.rules.length; i++) { - if (this.rules[i].targetControlId == item.targetField) { - this.rules[i].sourceVisibilityRules.push({ sourceControlId: item.sourceField, sourceControlValue: item.requiredValue }); - return; - } - } - let newVisibilityRuleArray = [({ sourceControlId: item.sourceField, sourceControlValue: item.requiredValue })]; - this.rules.push({ targetControlId: item.targetField, sourceVisibilityRules: newVisibilityRuleArray }) - return; - } -} \ No newline at end of file diff --git a/dmp-frontend/src/app/visibility-rules/visibility-rules.service.ts b/dmp-frontend/src/app/visibility-rules/visibility-rules.service.ts deleted file mode 100644 index 4c8b43901..000000000 --- a/dmp-frontend/src/app/visibility-rules/visibility-rules.service.ts +++ /dev/null @@ -1,63 +0,0 @@ -import { VisibilityRule } from './models/VisibilityRule'; -import { VisibilityRulesContext } from './models/VisibilityRulesContext'; -import { FormGroup } from '@angular/forms'; -import { Injectable } from '@angular/core'; -import { Rule } from '../models/Rule' -@Injectable() -export class VisibilityRulesService { - - public formGroup: FormGroup; - public visibilityRuleContext: VisibilityRulesContext; - public fieldsPathMemory: any = {}; - private elementVisibilityMap = new Map(); - - public isElementVisible(pathKey: string, id: string) { - if (!this.fieldsPathMemory[id] && pathKey) this.fieldsPathMemory[id] = pathKey; - if (this.checkElementVisibility(id)) { - return true - } else { - this.clearValues(pathKey) - return false; - } - } - - public checkElementVisibility(id: string): boolean { - if (!this.elementVisibilityMap.has(id) || this.elementVisibilityMap.get(id)) return true; - else return false; - } - - public buildVisibilityRules(item: Array) { - this.visibilityRuleContext = new VisibilityRulesContext(); - this.visibilityRuleContext.buildVisibilityRuleContext(item); - this.visibilityRuleContext.rules.forEach(item => this.evaluateVisibility(item)) - } - - public updateValueAndVisibility(id: string) { - let visibilityRules = this.visibilityRuleContext.rules.filter(item => item.sourceVisibilityRules.filter(source => source.sourceControlId === id).length > 0); - visibilityRules.forEach(item => this.evaluateVisibility(item)) - } - - private evaluateVisibility(visibilityRule: VisibilityRule) { - for (let i = 0; i < visibilityRule.sourceVisibilityRules.length; i++) { - let pathKey = this.fieldsPathMemory[visibilityRule.sourceVisibilityRules[i].sourceControlId]; - if (this.formGroup.get(pathKey + '.value') && (!this.formGroup.get(pathKey + '.value').value || ""+this.formGroup.get(pathKey + '.value').value != ""+visibilityRule.sourceVisibilityRules[i].sourceControlValue)) { - this.elementVisibilityMap.set(visibilityRule.targetControlId, false) - return; - } - this.elementVisibilityMap.set(visibilityRule.targetControlId, true) - } - } - - private getParentPath(parentId: string): string { - return ''; - } - - private clearValues(pathKey) { - if (pathKey && this.formGroup.get(pathKey + '.value')) this.formGroup.get(pathKey + '.value').patchValue(null) - if (pathKey && this.formGroup.get(pathKey)["controls"].fields) { - for (var i = 0; i < this.formGroup.get(pathKey)["controls"].fields.length; i++) - this.clearValues(pathKey + '.fields.' + i); - } - - } -} \ No newline at end of file diff --git a/dmp-frontend/src/app/welcomepage/welcomepage.component.ts b/dmp-frontend/src/app/welcomepage/welcomepage.component.ts index d67ebc8e9..c3a86acd2 100644 --- a/dmp-frontend/src/app/welcomepage/welcomepage.component.ts +++ b/dmp-frontend/src/app/welcomepage/welcomepage.component.ts @@ -4,23 +4,28 @@ import { DashboardService } from '../../app/services/dashboard/dashboard.service import { DashboardStatisticsModel } from '../models/dashboard/DashboardStatisticsModel'; import { JsonSerializer } from '../utilities/JsonSerializer'; import { HomepageComponent } from '../homepage/homepage.component' +import { IBreadcrumb } from 'ngx-breadcrumbs'; +import { IBreadCrumbComponent } from '../shared/components/breadcrumb/definition/IBreadCrumbComponent'; +import { Observable } from 'rxjs/Observable'; +import { BreadcrumbItem } from '../shared/components/breadcrumb/definition/breadcrumb-item'; @Component({ selector: 'welcomepage', templateUrl: './welcomepage.component.html', - // styleUrls: ['./homepage.component.css'], + // styleUrls: ['./homepage.component.css'], providers: [DashboardService] }) -export class WelcomepageComponent implements OnInit { +export class WelcomepageComponent implements OnInit, IBreadCrumbComponent { + breadCrumbs: Observable = Observable.of([]); private userInfo: any; private dashboardStatisticsData: DashboardStatisticsModel = new DashboardStatisticsModel(); - constructor( ) { + constructor() { } ngOnInit() { - + this.breadCrumbs = Observable.of([{ parentComponentName: null, label: 'Home', url: "/welcome" }]) } -} \ No newline at end of file +} diff --git a/dmp-frontend/src/assets/images/logo_cite.png b/dmp-frontend/src/assets/images/logo_cite.png new file mode 100644 index 000000000..55328a679 Binary files /dev/null and b/dmp-frontend/src/assets/images/logo_cite.png differ diff --git a/dmp-frontend/src/assets/images/openDmps.png b/dmp-frontend/src/assets/images/openDmps.png new file mode 100644 index 000000000..5750aa88c Binary files /dev/null and b/dmp-frontend/src/assets/images/openDmps.png differ diff --git a/dmp-frontend/src/assets/lang/en.json b/dmp-frontend/src/assets/lang/en.json index 8528aae7c..3ce0c2cba 100644 --- a/dmp-frontend/src/assets/lang/en.json +++ b/dmp-frontend/src/assets/lang/en.json @@ -1,228 +1,308 @@ { - "GENERAL": { - "VALIDATION": { - "REQUIRED": "Required" - }, - "DELETE-CONFIRMATION": { - "TITLE": "Warning", - "MESSAGE": "Are you sure you want to delete this item?", - "POSITIVE": "Yes", - "NEGATIVE": "Cancel" - }, - "SNACK-BAR": { - "SUCCESSFUL-CREATION": "Created Successfully", - "SUCCESSFUL-UPDATE": "Updated Successfully", - "SUCCESSFUL-LOGIN": "Successful Login", - "SUCCESSFUL-LOGOUT": "Successful Logout", - "UNSUCCESSFUL-LOGOUT": "Unsuccessful Logout", - "UNSUCCESSFUL-LOGIN": "Unsuccessful Login" - }, - "ERRORS":{ - "HTTP-REQUEST-ERROR":"An Unexpected Error Has Occured" - } + "GENERAL": { + "VALIDATION": { + "REQUIRED": "Required" }, - "NAV-BAR": { - "TITLE": "Data Management Plans", - "PROJECTS": "Projects", - "DMPS": "Plans", - "DATASETS": "Datasets", - "USERS": "Users", - "DATASETS(ADMIN)":"Dataset Profiles" - + "DELETE-CONFIRMATION": { + "TITLE": "Warning", + "MESSAGE": "Are you sure you want to delete this item?", + "POSITIVE": "Yes", + "NEGATIVE": "Cancel" }, - "PROJECT-LISTING": { - "TITLE": "Projects", - "COLUMNS": { - "NAME": "Name", - "ABBREVIATION": "Abbreviation", - "START": "Start", - "END": "End", - "ACTIONS": "Actions" - } + "SNACK-BAR": { + "SUCCESSFUL-CREATION": "Created Successfully", + "SUCCESSFUL-UPDATE": "Updated Successfully", + "SUCCESSFUL-LOGIN": "Successful Login", + "SUCCESSFUL-LOGOUT": "Successful Logout", + "UNSUCCESSFUL-LOGOUT": "Unsuccessful Logout", + "UNSUCCESSFUL-LOGIN": "Unsuccessful Login" }, - "DMP-LISTING": { - "TITLE": "Data Management Plans", - "COLUMNS": { - "NAME": "Name", - "PROJECT": "Project", - "PROFILE": "Profile", - "CREATION-TIME": "Creation Time", - "ORGANISATIONS": "Organisations", - "LATEST_VERSION": "Latest Version", - "ACTIONS": "Actions", - "DATASETS":"Datasets" - }, - "ACTIONS": { - "EDIT": "Edit", - "INVITE": "Invite", - "ADD-DATASET": "Add Dataset", - "DATASETS": "Datasets", - "NEW-VERSION": "New Version", - "VIEW-VERSION": "All Versions", - "CLONE" : "Clone" - } - }, - "DATASET-WIZARD": { - "FIRST-STEP": { - "TITLE": "Dataset Information", - "DMP": "Data Management Plan", - "PROFILE": "Dataset Profile" - }, - "SECOND-STEP": { - "TITLE": "External Sources" - }, - "THIRD-STEP": { - "TITLE": "Definition" - }, - "ACTIONS": { - "NEXT": "Next", - "BACK": "Back" - } - }, - "DATASET-LISTING": { - "TITLE": "Datasets", - "COLUMNS": { - "NAME": "Name", - "REFERNCE": "Reference", - "URI": "Uri", - "STATUS": "Status", - "DESCRIPTION": "Description", - "CREATED": "Created", - "ACTIONS": "Actions", - "DMP": "Dmp", - "PROFILE": "Profile", - "DATAREPOSITORIES": "Data Repositories", - "REGISTRIES": "Registries", - "SERVICES": "Services" - }, - "ACTIONS": { - "EDIT": "Edit", - "MAKE-IT-PUBLIC": "Make it public", - "VIEW": "View" - } - }, - "PROJECT-EDITOR": { - "TITLE": { - "NEW": "New Project", - "EDIT": "Edit" - }, - "FIELDS": { - "NAME": "Name", - "ABBREVIATION": "Abbreviation", - "URI": "URL", - "START": "Start", - "END": "End", - "DESCRIPTION": "Description" - }, - "ACTIONS": { - "SAVE": "Save", - "CANCEL": "Cancel", - "DELETE": "Delete" - } - }, - "DMP-EDITOR": { - "TITLE": { - "NEW": "New Data Management Plan", - "EDIT": "Edit" - }, - "FIELDS": { - "NAME": "Name", - "PROJECT": "Project", - "DESCRIPTION": "Description", - "ORGANISATIONS": "Organisations", - "RESEARCHERS": "Researchers", - "PROFILES": "Available Profiles" - }, - "ACTIONS": { - "SAVE": "Save", - "CANCEL": "Cancel", - "DELETE": "Remove" - } - }, - "CRITERIA": { - "PROJECTS": { - "LIKE": "Search", - "PERIOD-FROM": "Project Start", - "PERIOD-TO": "Project End" - }, - "DATA-SETS": { - "LIKE": "Search", - "PERIOD-FROM": "Start", - "PERIOD-TO": "End", - "STATUS": "Status" - }, - "DMP": { - "LIKE": "Search", - "PROJECTS": "Projects" - }, - "USERS": { - "LABEL": "Label", - "ROLE": "Role" - } - }, - "DATASET-EDITOR": { - "TITLE": { - "NEW": "New Data Management Plan", - "EDIT": "Edit" - }, - "FIELDS": { - "NAME": "Name", - "DESCRIPTION": "Description", - "PROFILE": "Profile", - "URI": "Uri", - "DATAREPOSITORIES": "Data Repositories", - "REGISTRIES": "Registries", - "SERVICES": "Services", - "EXTERNAL-DATASETS": "External Datasets" - }, - "ACTIONS": { - "SAVE": "Save", - "CANCEL": "Cancel", - "DELETE": "Delete" - } - }, - "INVITATION-EDITOR": { - "TITLE": "Send Invitations for ", - "AUTOCOMPLETE-TITLE": "User/Email", - "ACTIONS": { - "SEND-INVITATION": "Send Invitations", - "CANCEL": "Cancel" - } - }, - "USERS": { - "LISTING": { - "TITLE": "Users", - "EMAIL": "Email", - "LAST-LOGGED-IN": "Last Logged In", - "LABEL": "Label", - "ROLES": "Roles" - } - }, - "TYPES": { - "APP-ROLE": { - "ADMIN": "Admin", - "USER": "User", - "MANAGER": "Manager" - } - }, - "ADDRESEARCHERS-EDITOR": { - "TITLE": "Add a Researcher", - "FIRST_NAME": "First Name", - "LAST_NAME": "Last Name", - "ACTIONS": { - "SAVE": "Save", - "CANCEL": "Cancel" - } - }, - "DMP-WIZARD":{ - "FIRST-STEP":{ - "DMP":"DMP Editor", - "DATASETS":"Datasets" - }, - "ACTIONS": { - "NEXT": "Next", - "BACK": "Back", - "SAVE": "Save" - } + "ERRORS": { + "HTTP-REQUEST-ERROR": "An Unexpected Error Has Occured" } -} \ No newline at end of file + }, + "NAV-BAR": { + "TITLE": "OpenDMPS", + "PROJECTS": "Projects", + "DMPS": "Plans", + "DATASETS": "Datasets", + "USERS": "Users", + "DATASETS-ADMIN": "Dataset Profiles", + "DMP-PROFILES": "DMP Profiles", + "ABOUT": "About" + }, + "PROJECT-LISTING": { + "TITLE": "Projects", + "COLUMNS": { + "AVATAR": "Image", + "NAME": "Name", + "ABBREVIATION": "Abbreviation", + "START": "Start", + "END": "End", + "ACTIONS": "Actions", + "DMPS": "Dmps" + } + }, + "DMP-LISTING": { + "TITLE": "Data Management Plans", + "COLUMNS": { + "NAME": "Name", + "PROJECT": "Project", + "PROFILE": "Profile", + "CREATION-TIME": "Creation Time", + "ORGANISATIONS": "Organisations", + "LATEST_VERSION": "Latest Version", + "ACTIONS": "Actions", + "DATASETS": "Datasets" + }, + "ACTIONS": { + "EDIT": "Edit", + "INVITE": "Invite Contributors", + "ADD-DATASET": "Add Dataset To DMP", + "DATASETS": "List All DMP Datasets", + "NEW-VERSION": "New Version", + "VIEW-VERSION": "All DMP Versions", + "CLONE": "Clone" + } + }, + "DATASET-WIZARD": { + "EDITOR": { + "FIELDS": { + "EXTERNAL-DATASET-TYPE": "Type" + } + }, + "FIRST-STEP": { + "TITLE": "Dataset Information", + "DMP": "Data Management Plan", + "PROFILE": "Dataset Profile" + }, + "SECOND-STEP": { + "TITLE": "External Sources" + }, + "THIRD-STEP": { + "TITLE": "Definition" + }, + "ACTIONS": { + "NEXT": "Next", + "BACK": "Back", + "GO-TO-PROJECT": "Go to Dataset Project", + "GO-TO-DMP": "Go to Dataset DMP" + } + }, + "DATASET-LISTING": { + "TITLE": "Datasets", + "COLUMNS": { + "NAME": "Name", + "REFERNCE": "Reference", + "URI": "Uri", + "STATUS": "Status", + "DESCRIPTION": "Description", + "CREATED": "Created", + "ACTIONS": "Actions", + "DMP": "Dmp", + "PROFILE": "Profile", + "DATAREPOSITORIES": "Data Repositories", + "REGISTRIES": "Registries", + "SERVICES": "Services" + }, + "ACTIONS": { + "EDIT": "Edit", + "MAKE-IT-PUBLIC": "Make it public", + "VIEW": "View" + } + }, + "DMP-PROFILE-EDITOR": { + "TITLE": { + "NEW": "New DMP Profile", + "EDIT": "Edit" + }, + "FIELDS": { + "LABEL": "Name", + "TYPE": "Type", + "DATATYPE": "Data Type", + "REQUIRED": "Required" + }, + "ACTIONS": { + "SAVE": "Save", + "CANCEL": "Cancel", + "DELETE": "Delete" + } + }, + "PROJECT-EDITOR": { + "TITLE": { + "NEW": "New Project", + "EDIT": "Edit" + }, + "FIELDS": { + "LABEL": "Label", + "ABBREVIATION": "Abbreviation", + "URI": "URL", + "START": "Start", + "END": "End", + "DESCRIPTION": "Description", + "LOGO": "Project Logo" + }, + "ACTIONS": { + "SAVE": "Save", + "CANCEL": "Cancel", + "DELETE": "Delete", + "GO-TO-DMPS": "Go To DMPs" + } + }, + "DMP-EDITOR": { + "TITLE": { + "NEW": "New Data Management Plan", + "EDIT": "Edit" + }, + "FIELDS": { + "NAME": "Name", + "PROJECT": "Project", + "DESCRIPTION": "Description", + "ORGANISATIONS": "Organisations", + "RESEARCHERS": "Researchers", + "PROFILES": "Available Profiles", + "PROFILE": "DMP Profile", + "GRANT": "Grant", + "FUNDER": "Funder" + }, + "ACTIONS": { + "GO-TO-PROJECT": "Go To DMP Project", + "GO-TO-DATASETS": "Go To Datasets", + "SAVE": "Save", + "CANCEL": "Cancel", + "DELETE": "Remove" + } + }, + "CRITERIA": { + "FILTERS": "Filters", + + "PROJECTS": { + "LIKE": "Search", + "PERIOD-FROM": "Project Start", + "PERIOD-TO": "Project End" + }, + "DATA-SETS": { + "LIKE": "Search", + "PERIOD-FROM": "Start", + "PERIOD-TO": "End", + "STATUS": "Status" + }, + "DMP": { + "LIKE": "Search", + "PROJECTS": "Projects" + }, + "USERS": { + "LABEL": "Label", + "ROLE": "Role" + } + }, + "DATASET-EDITOR": { + "TITLE": { + "NEW": "New Data Management Plan", + "EDIT": "Edit" + }, + "FIELDS": { + "NAME": "Name of the Dataset", + "DESCRIPTION": "Description", + "PROFILE": "Profile", + "URI": "Uri", + "DATAREPOSITORIES": "Data Repositories", + "REGISTRIES": "Registries", + "SERVICES": "Services", + "EXTERNAL-DATASETS": "External Datasets", + "EXTERNAL-DATASET-TYPE": "External Datasets Type", + "EXTERNAL-DATASET-INFO": "External Datasets Info", + "DATAREPOSITORIES-INFO": "Data Repositories Info" + }, + "ACTIONS": { + "SAVE": "Save", + "CANCEL": "Cancel", + "DELETE": "Delete" + } + }, + "INVITATION-EDITOR": { + "TITLE": "Send Invitations for ", + "AUTOCOMPLETE-TITLE": "User/Email", + "ACTIONS": { + "SEND-INVITATION": "Send Invitations", + "CANCEL": "Cancel" + } + }, + "USERS": { + "LISTING": { + "TITLE": "Users", + "EMAIL": "Email", + "LAST-LOGGED-IN": "Last Logged In", + "LABEL": "Label", + "ROLES": "Roles" + } + }, + "TYPES": { + "APP-ROLE": { + "ADMIN": "Admin", + "USER": "User", + "MANAGER": "Manager" + }, + "DMP-PROFILE-FIELD": { + "DATA-TYPE": { + "DATE": "Date", + "NUMBER": "Number", + "TEXT": "Text" + }, + "TYPE": { + "INPUT": "Input" + } + }, + "EXTERNAL-DATASET-TYPE": { + "SOURCE": "Source", + "OUTPUT": "Output" + } + + }, + "ADDRESEARCHERS-EDITOR": { + "TITLE": "Add a Researcher", + "FIRST_NAME": "First Name", + "LAST_NAME": "Last Name", + "ACTIONS": { + "SAVE": "Save", + "CANCEL": "Cancel" + } + }, + "DMP-WIZARD": { + "FIRST-STEP": { + "DMP": "DMP Editor", + "DATASETS": "Datasets" + }, + "ACTIONS": { + "NEXT": "Next", + "BACK": "Back", + "SAVE": "Save" + } + }, + "RECENT-ACTIVITY": { + "MY-TITLE-PROJECT": "My Recent Project Activity", + "MY-TITLE-DMP": "My Recent Dmp Activity", + "MY-TITLE-DATASET": "My Recent Dataset Activity" + }, + "FILE-UPLOADER": { + "DEFAULT": "Choose a file", + "PROJECT": "", + "UPLOAD": "Upload" + }, + "URL-LISTING-COMPONENT": { + "SHOW-MORE": "Show more" + }, + "HOMEPAGE": { + "OPEN-DMPS": { + "STATS": "OpenDMPS Statistics" + }, + "MY-DMPS": { + "STATS": "My Statistics" + } + }, + "ABOUT": { + "TITLE": "-Our Mission-", + "MAIN-CONTENT": "Our goal is to make your research data FAIR, that is findable, accessible,interoperable and re-usable. These principles precede implementation choices and do not necessarily suggest any specific technology, standard, or implementationsolution.", + "CONTRIBUTORS": "Contributors" + } +} diff --git a/dmp-frontend/src/environments/environment.prod.ts b/dmp-frontend/src/environments/environment.prod.ts index 1c8a282f5..7f6a04de0 100644 --- a/dmp-frontend/src/environments/environment.prod.ts +++ b/dmp-frontend/src/environments/environment.prod.ts @@ -1,6 +1,6 @@ export const environment = { production: true, - Server: 'http://dl043.madgik.di.uoa.gr:8080/api/', - App: 'http://dl043.madgik.di.uoa.gr:8080/', - HelpServiceUrl:'localhost:5000/' + Server: 'http://localhost:8080/api/', + App: 'http://dl043.madgik.di.uoa.gr/', + HelpServiceUrl: 'http://dl043.madgik.di.uoa.gr:5555/' }; diff --git a/dmp-frontend/src/environments/environment.ts b/dmp-frontend/src/environments/environment.ts index 1fa785fcc..05a577f68 100644 --- a/dmp-frontend/src/environments/environment.ts +++ b/dmp-frontend/src/environments/environment.ts @@ -6,6 +6,6 @@ export const environment = { production: false, Server: 'http://devel-21.local.cite.gr:8080/api/', - App: 'localhost:4200/', - HelpServiceUrl:'localhost:5000/' + App: 'http://localhost:4200/', + HelpServiceUrl: 'localhost:5000/' }; diff --git a/dmp-frontend/src/polyfills.ts b/dmp-frontend/src/polyfills.ts index 7831e97b7..1c0925f52 100644 --- a/dmp-frontend/src/polyfills.ts +++ b/dmp-frontend/src/polyfills.ts @@ -19,23 +19,24 @@ */ /** IE9, IE10 and IE11 requires all of the following polyfills. **/ -// import 'core-js/es6/symbol'; -// import 'core-js/es6/object'; -// import 'core-js/es6/function'; -// import 'core-js/es6/parse-int'; -// import 'core-js/es6/parse-float'; -// import 'core-js/es6/number'; -// import 'core-js/es6/math'; -// import 'core-js/es6/string'; -// import 'core-js/es6/date'; -// import 'core-js/es6/array'; -// import 'core-js/es6/regexp'; -// import 'core-js/es6/map'; -// import 'core-js/es6/weak-map'; -// import 'core-js/es6/set'; +import 'core-js/es6/symbol'; +import 'core-js/es6/object'; +import 'core-js/es6/function'; +import 'core-js/es6/parse-int'; +import 'core-js/es6/parse-float'; +import 'core-js/es6/number'; +import 'core-js/es6/math'; +import 'core-js/es6/string'; +import 'core-js/es6/date'; +import 'core-js/es6/array'; +import 'core-js/es7/array'; //for array.includes +import 'core-js/es6/regexp'; +import 'core-js/es6/map'; +import 'core-js/es6/weak-map'; +import 'core-js/es6/set'; /** IE10 and IE11 requires the following for NgClass support on SVG elements */ -// import 'classlist.js'; // Run `npm install --save classlist.js`. +//import 'classlist.js'; // Run `npm install --save classlist.js`. /** Evergreen browsers require these. **/ import 'core-js/es6/reflect'; @@ -43,10 +44,10 @@ import 'core-js/es7/reflect'; /** - * Required to support Web Animations `@angular/animation`. + * Required to support Web Animations `@angular/platform-browser/animations`. * Needed for: All but Chrome, Firefox and Opera. http://caniuse.com/#feat=web-animation **/ -// import 'web-animations-js'; // Run `npm install --save web-animations-js`. +//import 'web-animations-js'; // Run `npm install --save web-animations-js`. @@ -65,8 +66,8 @@ import 'zone.js/dist/zone'; // Included with Angular CLI. * Date, currency, decimal and percent pipes. * Needed for: All but Chrome, Firefox, Edge, IE11 and Safari 10 */ -// import 'intl'; // Run `npm install --save intl`. +//import 'intl'; // Run `npm install --save intl`. /** * Need to import at least one locale-data with intl. */ -// import 'intl/locale-data/jsonp/en'; +//import 'intl/locale-data/jsonp/en'; diff --git a/dmp-frontend/src/styles.scss b/dmp-frontend/src/styles.scss index 401553fbd..2243763c2 100644 --- a/dmp-frontend/src/styles.scss +++ b/dmp-frontend/src/styles.scss @@ -1,30 +1,26 @@ /* @import "~@angular/material/prebuilt-themes/indigo-pink.css"; */ + @import '~@angular/material/theming'; @import '~@covalent/core/theming/all-theme'; - @include mat-core(); - // Define a theme. $primary: mat-palette($mat-indigo); -$accent: mat-palette($mat-pink, A200, A100, A400); - +$accent : mat-palette($mat-pink, A200, A100, A400); $theme: mat-light-theme($primary, $accent); - // Include all theme styles for the components. @include angular-material-theme($theme); @include covalent-theme($theme); - -.snackbar-warning{ - background-color: #F39010; - color: #F3EFEF; +.snackbar-warning { + background-color: #F39010; + color: #F3EFEF; } -.snackbar-success{ - background-color: #109204; - color: #F3EFEF; +.snackbar-success { + background-color: #109204; + color: #F3EFEF; } -.snackbar-error{ - background-color: #CF1407; - color: #111010; -} \ No newline at end of file +.snackbar-error { + background-color: #CF1407; + color: #111010; +} diff --git a/dmp-frontend/src/tsconfig.spec.json b/dmp-frontend/src/tsconfig.spec.json index 63d89ff28..18bad40ed 100644 --- a/dmp-frontend/src/tsconfig.spec.json +++ b/dmp-frontend/src/tsconfig.spec.json @@ -11,7 +11,8 @@ ] }, "files": [ - "test.ts" + "test.ts", + "polyfills.ts" ], "include": [ "**/*.spec.ts", diff --git a/dmp-frontend/tsconfig.json b/dmp-frontend/tsconfig.json index 9a726ee87..a6c016bf3 100644 --- a/dmp-frontend/tsconfig.json +++ b/dmp-frontend/tsconfig.json @@ -14,10 +14,6 @@ "lib": [ "es2017", "dom" - ], - "baseUrl": "./src/", - "paths": { - "@app/*": ["app/*"] - } + ] } } diff --git a/dmp-frontend/tslint.json b/dmp-frontend/tslint.json index 0db5751c7..9963d6c39 100644 --- a/dmp-frontend/tslint.json +++ b/dmp-frontend/tslint.json @@ -11,11 +11,15 @@ "check-space" ], "curly": true, + "deprecation": { + "severity": "warn" + }, "eofline": true, "forin": true, "import-blacklist": [ true, - "rxjs" + "rxjs", + "rxjs/Rx" ], "import-spacing": true, "indent": [ @@ -103,7 +107,6 @@ "variable-declaration": "nospace" } ], - "typeof-compare": true, "unified-signatures": true, "variable-name": false, "whitespace": [ @@ -126,6 +129,7 @@ "app", "kebab-case" ], + "no-output-on-prefix": true, "use-input-property-decorator": true, "use-output-property-decorator": true, "use-host-property-decorator": true, @@ -134,9 +138,6 @@ "use-life-cycle-interface": true, "use-pipe-transform-interface": true, "component-class-suffix": true, - "directive-class-suffix": true, - "no-access-missing-member": true, - "templates-use-public": true, - "invoke-injectable": true + "directive-class-suffix": true } } diff --git a/dmp-frontend/yarn.lock b/dmp-frontend/yarn.lock deleted file mode 100644 index fd3d82888..000000000 --- a/dmp-frontend/yarn.lock +++ /dev/null @@ -1,5494 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@angular-devkit/build-optimizer@~0.0.36": - version "0.0.36" - resolved "https://registry.yarnpkg.com/@angular-devkit/build-optimizer/-/build-optimizer-0.0.36.tgz#e816ee9be22dbb777724f0281acfa72cfff184b7" - dependencies: - loader-utils "^1.1.0" - source-map "^0.5.6" - typescript "~2.6.1" - webpack-sources "^1.0.1" - -"@angular-devkit/core@0.0.22": - version "0.0.22" - resolved "https://registry.yarnpkg.com/@angular-devkit/core/-/core-0.0.22.tgz#e90f46bf7ff47d260a767959267bc65ffee39ef1" - dependencies: - source-map "^0.5.6" - -"@angular-devkit/schematics@~0.0.42": - version "0.0.42" - resolved "https://registry.yarnpkg.com/@angular-devkit/schematics/-/schematics-0.0.42.tgz#34eea7136455545c8abd21edf94a36870a073fea" - dependencies: - "@angular-devkit/core" "0.0.22" - "@ngtools/json-schema" "^1.1.0" - "@schematics/schematics" "0.0.11" - minimist "^1.2.0" - rxjs "^5.5.2" - -"@angular/animations@^5.1.1": - version "5.1.1" - resolved "https://registry.yarnpkg.com/@angular/animations/-/animations-5.1.1.tgz#007621f8bcac15560e160582eb2e91025b6b9106" - dependencies: - tslib "^1.7.1" - -"@angular/cdk@^5.0.1": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@angular/cdk/-/cdk-5.0.1.tgz#c85e662fe2e1c58abde1dea0f0f18cdfcffc2066" - dependencies: - tslib "^1.7.1" - -"@angular/cli@1.6.1": - version "1.6.1" - resolved "https://registry.yarnpkg.com/@angular/cli/-/cli-1.6.1.tgz#6797995be1965bfc2e26234c728c9968cf7f3bdb" - dependencies: - "@angular-devkit/build-optimizer" "~0.0.36" - "@angular-devkit/schematics" "~0.0.42" - "@ngtools/json-schema" "1.1.0" - "@ngtools/webpack" "1.9.1" - "@schematics/angular" "~0.1.11" - autoprefixer "^6.5.3" - chalk "~2.2.0" - circular-dependency-plugin "^4.2.1" - common-tags "^1.3.1" - copy-webpack-plugin "^4.1.1" - core-object "^3.1.0" - css-loader "^0.28.1" - cssnano "^3.10.0" - denodeify "^1.2.1" - ember-cli-string-utils "^1.0.0" - exports-loader "^0.6.3" - extract-text-webpack-plugin "^3.0.2" - file-loader "^1.1.5" - fs-extra "^4.0.0" - glob "^7.0.3" - html-webpack-plugin "^2.29.0" - istanbul-instrumenter-loader "^2.0.0" - karma-source-map-support "^1.2.0" - less "^2.7.2" - less-loader "^4.0.5" - license-webpack-plugin "^1.0.0" - loader-utils "1.1.0" - lodash "^4.11.1" - memory-fs "^0.4.1" - minimatch "^3.0.4" - node-modules-path "^1.0.0" - nopt "^4.0.1" - opn "~5.1.0" - portfinder "~1.0.12" - postcss-custom-properties "^6.1.0" - postcss-loader "^2.0.8" - postcss-url "^7.1.2" - raw-loader "^0.5.1" - resolve "^1.1.7" - rxjs "^5.5.2" - sass-loader "^6.0.3" - semver "^5.1.0" - silent-error "^1.0.0" - source-map-loader "^0.2.0" - source-map-support "^0.4.1" - style-loader "^0.13.1" - stylus "^0.54.5" - stylus-loader "^3.0.1" - uglifyjs-webpack-plugin "~1.1.2" - url-loader "^0.6.2" - webpack "~3.10.0" - webpack-dev-middleware "~1.12.0" - webpack-dev-server "~2.9.3" - webpack-merge "^4.1.0" - webpack-sources "^1.0.0" - webpack-subresource-integrity "^1.0.1" - zone.js "^0.8.14" - optionalDependencies: - node-sass "^4.3.0" - -"@angular/common@5.1.1": - version "5.1.1" - resolved "https://registry.yarnpkg.com/@angular/common/-/common-5.1.1.tgz#b6444cf6508f9b0b5fc4c9b3107b3e37be1336c9" - dependencies: - tslib "^1.7.1" - -"@angular/compiler-cli@^5.1.1": - version "5.1.1" - resolved "https://registry.yarnpkg.com/@angular/compiler-cli/-/compiler-cli-5.1.1.tgz#579e6846ed493e7202e36eb5cea00cb1a61c927c" - dependencies: - chokidar "^1.4.2" - minimist "^1.2.0" - reflect-metadata "^0.1.2" - tsickle "^0.25.5" - -"@angular/compiler@5.1.1": - version "5.1.1" - resolved "https://registry.yarnpkg.com/@angular/compiler/-/compiler-5.1.1.tgz#7d7953229739e68de74ea821685e1d5569527ef3" - dependencies: - tslib "^1.7.1" - -"@angular/core@5.1.1": - version "5.1.1" - resolved "https://registry.yarnpkg.com/@angular/core/-/core-5.1.1.tgz#b6a6e2b2284f86279f096d857253f6643098d908" - dependencies: - tslib "^1.7.1" - -"@angular/forms@5.1.1": - version "5.1.1" - resolved "https://registry.yarnpkg.com/@angular/forms/-/forms-5.1.1.tgz#e38858a44e7b57b61f375087b76a79d6e2679b14" - dependencies: - tslib "^1.7.1" - -"@angular/http@5.1.1": - version "5.1.1" - resolved "https://registry.yarnpkg.com/@angular/http/-/http-5.1.1.tgz#45aa61ee61f212a34f958c444c999e8c9352ec23" - dependencies: - tslib "^1.7.1" - -"@angular/language-service@^5.1.1": - version "5.1.1" - resolved "https://registry.yarnpkg.com/@angular/language-service/-/language-service-5.1.1.tgz#731533a3b6ee4c8facda862a836db1930a011f07" - -"@angular/material@^5.0.1": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@angular/material/-/material-5.0.1.tgz#73ff8af76daf7c7ec56092a613637b21deb5d00e" - dependencies: - tslib "^1.7.1" - -"@angular/platform-browser-dynamic@5.1.1": - version "5.1.1" - resolved "https://registry.yarnpkg.com/@angular/platform-browser-dynamic/-/platform-browser-dynamic-5.1.1.tgz#4b7bd1cbdb3c93fdeb626b38fbd54286a73a76d0" - dependencies: - tslib "^1.7.1" - -"@angular/platform-browser@5.1.1": - version "5.1.1" - resolved "https://registry.yarnpkg.com/@angular/platform-browser/-/platform-browser-5.1.1.tgz#88a05132d822b760c9108a3eaf0da610f39c2ed9" - dependencies: - tslib "^1.7.1" - -"@angular/router@5.1.1": - version "5.1.1" - resolved "https://registry.yarnpkg.com/@angular/router/-/router-5.1.1.tgz#378e69edd28edadaff7b09b6ee407aadf7164220" - dependencies: - tslib "^1.7.1" - -"@covalent/core@^1.0.0-rc.1": - version "1.0.0-rc.1" - resolved "https://registry.yarnpkg.com/@covalent/core/-/core-1.0.0-rc.1.tgz#99a8dfaf53e8328759955ec404ce0ac0c8e60d25" - dependencies: - tslib "^1.7.1" - -"@ngtools/json-schema@1.1.0", "@ngtools/json-schema@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@ngtools/json-schema/-/json-schema-1.1.0.tgz#c3a0c544d62392acc2813a42c8a0dc6f58f86922" - -"@ngtools/webpack@1.9.1": - version "1.9.1" - resolved "https://registry.yarnpkg.com/@ngtools/webpack/-/webpack-1.9.1.tgz#c09db646432723f8f912412144313d4830b2eb4d" - dependencies: - chalk "~2.2.0" - enhanced-resolve "^3.1.0" - loader-utils "^1.0.2" - magic-string "^0.22.3" - semver "^5.3.0" - source-map "^0.5.6" - tree-kill "^1.0.0" - -"@ngx-translate/core@^9.0.1": - version "9.0.1" - resolved "https://registry.yarnpkg.com/@ngx-translate/core/-/core-9.0.1.tgz#000f2d863c4c94c818e1416ef43cca2c5c0c5848" - -"@ngx-translate/http-loader@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@ngx-translate/http-loader/-/http-loader-2.0.0.tgz#9c16d07cd070c67ada270a2e940281eb826b3f43" - -"@schematics/angular@~0.1.11": - version "0.1.11" - resolved "https://registry.yarnpkg.com/@schematics/angular/-/angular-0.1.11.tgz#b5f15320bbb60969d66c76a8ef6545058ac81ece" - dependencies: - "@angular-devkit/core" "0.0.22" - -"@schematics/schematics@0.0.11": - version "0.0.11" - resolved "https://registry.yarnpkg.com/@schematics/schematics/-/schematics-0.0.11.tgz#c8f70f270ed38f29b2873248126fd59abd635862" - -"@types/arrify@^1.0.1": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@types/arrify/-/arrify-1.0.2.tgz#4a6856b9bfd4713c781df95349c6b15db60d4de1" - -"@types/diff@^3.2.1": - version "3.2.2" - resolved "https://registry.yarnpkg.com/@types/diff/-/diff-3.2.2.tgz#4d6f45537322a7a420d353a0939513c7e96d14a6" - -"@types/minimist@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.0.tgz#69a23a3ad29caf0097f06eda59b361ee2f0639f6" - -"@types/mkdirp@^0.5.0": - version "0.5.2" - resolved "https://registry.yarnpkg.com/@types/mkdirp/-/mkdirp-0.5.2.tgz#503aacfe5cc2703d5484326b1b27efa67a339c1f" - dependencies: - "@types/node" "*" - -"@types/node@*", "@types/node@^8.0.27", "@types/node@^8.5.1": - version "8.5.1" - resolved "https://registry.yarnpkg.com/@types/node/-/node-8.5.1.tgz#4ec3020bcdfe2abffeef9ba3fbf26fca097514b5" - -"@types/source-map-support@^0.4.0": - version "0.4.0" - resolved "https://registry.yarnpkg.com/@types/source-map-support/-/source-map-support-0.4.0.tgz#a62a1866614af68c888173c001481f242aaf148b" - dependencies: - "@types/node" "*" - -"@types/strip-bom@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/strip-bom/-/strip-bom-3.0.0.tgz#14a8ec3956c2e81edb7520790aecf21c290aebd2" - -"@types/strip-json-comments@0.0.30": - version "0.0.30" - resolved "https://registry.yarnpkg.com/@types/strip-json-comments/-/strip-json-comments-0.0.30.tgz#9aa30c04db212a9a0649d6ae6fd50accc40748a1" - -"@types/v8flags@types/npm-v8flags#de224ae1cd5fd7dbb4e7158a6cc7a29e5315930d": - version "2.0.0" - resolved "https://codeload.github.com/types/npm-v8flags/tar.gz/de224ae1cd5fd7dbb4e7158a6cc7a29e5315930d" - -"@types/yn@types/npm-yn#ca75f6c82940fae6a06fb41d2d37a6aa9b4ea8e9": - version "2.0.0" - resolved "https://codeload.github.com/types/npm-yn/tar.gz/ca75f6c82940fae6a06fb41d2d37a6aa9b4ea8e9" - -abbrev@1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" - -accepts@~1.3.4: - version "1.3.4" - resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.4.tgz#86246758c7dd6d21a6474ff084a4740ec05eb21f" - dependencies: - mime-types "~2.1.16" - negotiator "0.6.1" - -acorn-dynamic-import@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz#c752bd210bef679501b6c6cb7fc84f8f47158cc4" - dependencies: - acorn "^4.0.3" - -acorn@^4.0.3: - version "4.0.13" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787" - -acorn@^5.0.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.2.1.tgz#317ac7821826c22c702d66189ab8359675f135d7" - -ajv-keywords@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-2.1.1.tgz#617997fc5f60576894c435f940d819e135b80762" - -ajv@^4.9.1: - version "4.11.8" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536" - dependencies: - co "^4.6.0" - json-stable-stringify "^1.0.1" - -ajv@^5.0.0, ajv@^5.1.0, ajv@^5.1.5: - version "5.5.1" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.1.tgz#b38bb8876d9e86bee994956a04e721e88b248eb2" - dependencies: - co "^4.6.0" - fast-deep-equal "^1.0.0" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.3.0" - -align-text@^0.1.1, align-text@^0.1.3: - version "0.1.4" - resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" - dependencies: - kind-of "^3.0.2" - longest "^1.0.1" - repeat-string "^1.5.2" - -alphanum-sort@^1.0.1, alphanum-sort@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" - -amdefine@>=0.0.4: - version "1.0.1" - resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" - -ansi-html@0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" - -ansi-regex@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" - -ansi-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" - -ansi-styles@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" - -ansi-styles@^3.1.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.0.tgz#c159b8d5be0f9e5a6f346dab94f16ce022161b88" - dependencies: - color-convert "^1.9.0" - -anymatch@^1.3.0: - version "1.3.2" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.2.tgz#553dcb8f91e3c889845dfdba34c77721b90b9d7a" - dependencies: - micromatch "^2.1.5" - normalize-path "^2.0.0" - -app-root-path@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/app-root-path/-/app-root-path-2.0.1.tgz#cd62dcf8e4fd5a417efc664d2e5b10653c651b46" - -aproba@^1.0.3, aproba@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" - -are-we-there-yet@~1.1.2: - version "1.1.4" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz#bb5dca382bb94f05e15194373d16fd3ba1ca110d" - dependencies: - delegates "^1.0.0" - readable-stream "^2.0.6" - -argparse@^1.0.7: - version "1.0.9" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.9.tgz#73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86" - dependencies: - sprintf-js "~1.0.2" - -arr-diff@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" - dependencies: - arr-flatten "^1.0.1" - -arr-flatten@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" - -array-find-index@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" - -array-flatten@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" - -array-flatten@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.1.tgz#426bb9da84090c1838d812c8150af20a8331e296" - -array-includes@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.0.3.tgz#184b48f62d92d7452bb31b323165c7f8bd02266d" - dependencies: - define-properties "^1.1.2" - es-abstract "^1.7.0" - -array-union@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" - dependencies: - array-uniq "^1.0.1" - -array-uniq@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" - -array-unique@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" - -arrify@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" - -asap@~2.0.3: - version "2.0.6" - resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" - -asn1.js@^4.0.0: - version "4.9.2" - resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.9.2.tgz#8117ef4f7ed87cd8f89044b5bff97ac243a16c9a" - dependencies: - bn.js "^4.0.0" - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - -asn1@~0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" - -assert-plus@1.0.0, assert-plus@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" - -assert-plus@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234" - -assert@^1.1.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/assert/-/assert-1.4.1.tgz#99912d591836b5a6f5b345c0f07eefc08fc65d91" - dependencies: - util "0.10.3" - -async-each@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" - -async-foreach@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/async-foreach/-/async-foreach-0.1.3.tgz#36121f845c0578172de419a97dbeb1d16ec34542" - -async@^1.5.2: - version "1.5.2" - resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" - -async@^2.1.2, async@^2.1.5, async@^2.4.1, async@^2.5.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/async/-/async-2.6.0.tgz#61a29abb6fcc026fea77e56d1c6ec53a795951f4" - dependencies: - lodash "^4.14.0" - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - -autoprefixer@^6.3.1, autoprefixer@^6.5.3: - version "6.7.7" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-6.7.7.tgz#1dbd1c835658e35ce3f9984099db00585c782014" - dependencies: - browserslist "^1.7.6" - caniuse-db "^1.0.30000634" - normalize-range "^0.1.2" - num2fraction "^1.2.2" - postcss "^5.2.16" - postcss-value-parser "^3.2.3" - -aws-sign2@~0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" - -aws-sign2@~0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" - -aws4@^1.2.1, aws4@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e" - -babel-code-frame@^6.11.0, babel-code-frame@^6.22.0, babel-code-frame@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" - dependencies: - chalk "^1.1.3" - esutils "^2.0.2" - js-tokens "^3.0.2" - -babel-generator@^6.18.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.0.tgz#ac1ae20070b79f6e3ca1d3269613053774f20dc5" - dependencies: - babel-messages "^6.23.0" - babel-runtime "^6.26.0" - babel-types "^6.26.0" - detect-indent "^4.0.0" - jsesc "^1.3.0" - lodash "^4.17.4" - source-map "^0.5.6" - trim-right "^1.0.1" - -babel-messages@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" - dependencies: - babel-runtime "^6.22.0" - -babel-runtime@^6.22.0, babel-runtime@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" - dependencies: - core-js "^2.4.0" - regenerator-runtime "^0.11.0" - -babel-template@^6.16.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02" - dependencies: - babel-runtime "^6.26.0" - babel-traverse "^6.26.0" - babel-types "^6.26.0" - babylon "^6.18.0" - lodash "^4.17.4" - -babel-traverse@^6.18.0, babel-traverse@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee" - dependencies: - babel-code-frame "^6.26.0" - babel-messages "^6.23.0" - babel-runtime "^6.26.0" - babel-types "^6.26.0" - babylon "^6.18.0" - debug "^2.6.8" - globals "^9.18.0" - invariant "^2.2.2" - lodash "^4.17.4" - -babel-types@^6.18.0, babel-types@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" - dependencies: - babel-runtime "^6.26.0" - esutils "^2.0.2" - lodash "^4.17.4" - to-fast-properties "^1.0.3" - -babylon@^6.18.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" - -balanced-match@^0.4.2: - version "0.4.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838" - -balanced-match@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" - -base64-js@^1.0.2: - version "1.2.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.2.1.tgz#a91947da1f4a516ea38e5b4ec0ec3773675e0886" - -batch@0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" - -bcrypt-pbkdf@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d" - dependencies: - tweetnacl "^0.14.3" - -big.js@^3.1.3: - version "3.2.0" - resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.2.0.tgz#a5fc298b81b9e0dca2e458824784b65c52ba588e" - -binary-extensions@^1.0.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.11.0.tgz#46aa1751fb6a2f93ee5e689bb1087d4b14c6c205" - -block-stream@*: - version "0.0.9" - resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" - dependencies: - inherits "~2.0.0" - -bluebird@^3.4.7, bluebird@^3.5.0, bluebird@^3.5.1: - version "3.5.1" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.1.tgz#d9551f9de98f1fcda1e683d17ee91a0602ee2eb9" - -bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: - version "4.11.8" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" - -body-parser@1.18.2: - version "1.18.2" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.18.2.tgz#87678a19d84b47d859b83199bd59bce222b10454" - dependencies: - bytes "3.0.0" - content-type "~1.0.4" - debug "2.6.9" - depd "~1.1.1" - http-errors "~1.6.2" - iconv-lite "0.4.19" - on-finished "~2.3.0" - qs "6.5.1" - raw-body "2.3.2" - type-is "~1.6.15" - -bonjour@^3.5.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/bonjour/-/bonjour-3.5.0.tgz#8e890a183d8ee9a2393b3844c691a42bcf7bc9f5" - dependencies: - array-flatten "^2.1.0" - deep-equal "^1.0.1" - dns-equal "^1.0.0" - dns-txt "^2.0.2" - multicast-dns "^6.0.1" - multicast-dns-service-types "^1.1.0" - -boolbase@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" - -boom@2.x.x: - version "2.10.1" - resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f" - dependencies: - hoek "2.x.x" - -boom@4.x.x: - version "4.3.1" - resolved "https://registry.yarnpkg.com/boom/-/boom-4.3.1.tgz#4f8a3005cb4a7e3889f749030fd25b96e01d2e31" - dependencies: - hoek "4.x.x" - -boom@5.x.x: - version "5.2.0" - resolved "https://registry.yarnpkg.com/boom/-/boom-5.2.0.tgz#5dd9da6ee3a5f302077436290cb717d3f4a54e02" - dependencies: - hoek "4.x.x" - -brace-expansion@^1.1.7: - version "1.1.8" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.8.tgz#c07b211c7c952ec1f8efd51a77ef0d1d3990a292" - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -braces@^1.8.2: - version "1.8.5" - resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" - dependencies: - expand-range "^1.8.1" - preserve "^0.2.0" - repeat-element "^1.1.2" - -brorand@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" - -browserify-aes@^1.0.0, browserify-aes@^1.0.4: - version "1.1.1" - resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.1.1.tgz#38b7ab55edb806ff2dcda1a7f1620773a477c49f" - dependencies: - buffer-xor "^1.0.3" - cipher-base "^1.0.0" - create-hash "^1.1.0" - evp_bytestokey "^1.0.3" - inherits "^2.0.1" - safe-buffer "^5.0.1" - -browserify-cipher@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.0.tgz#9988244874bf5ed4e28da95666dcd66ac8fc363a" - dependencies: - browserify-aes "^1.0.4" - browserify-des "^1.0.0" - evp_bytestokey "^1.0.0" - -browserify-des@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.0.tgz#daa277717470922ed2fe18594118a175439721dd" - dependencies: - cipher-base "^1.0.1" - des.js "^1.0.0" - inherits "^2.0.1" - -browserify-rsa@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524" - dependencies: - bn.js "^4.1.0" - randombytes "^2.0.1" - -browserify-sign@^4.0.0: - version "4.0.4" - resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.4.tgz#aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298" - dependencies: - bn.js "^4.1.1" - browserify-rsa "^4.0.0" - create-hash "^1.1.0" - create-hmac "^1.1.2" - elliptic "^6.0.0" - inherits "^2.0.1" - parse-asn1 "^5.0.0" - -browserify-zlib@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" - dependencies: - pako "~1.0.5" - -browserslist@^1.3.6, browserslist@^1.5.2, browserslist@^1.7.6: - version "1.7.7" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-1.7.7.tgz#0bd76704258be829b2398bb50e4b62d1a166b0b9" - dependencies: - caniuse-db "^1.0.30000639" - electron-to-chromium "^1.2.7" - -buffer-indexof@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz#52fabcc6a606d1a00302802648ef68f639da268c" - -buffer-xor@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" - -buffer@^4.3.0: - version "4.9.1" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298" - dependencies: - base64-js "^1.0.2" - ieee754 "^1.1.4" - isarray "^1.0.0" - -builtin-modules@^1.0.0, builtin-modules@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" - -builtin-status-codes@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" - -bytes@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" - -cacache@^10.0.0: - version "10.0.1" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-10.0.1.tgz#3e05f6e616117d9b54665b1b20c8aeb93ea5d36f" - dependencies: - bluebird "^3.5.0" - chownr "^1.0.1" - glob "^7.1.2" - graceful-fs "^4.1.11" - lru-cache "^4.1.1" - mississippi "^1.3.0" - mkdirp "^0.5.1" - move-concurrently "^1.0.1" - promise-inflight "^1.0.1" - rimraf "^2.6.1" - ssri "^5.0.0" - unique-filename "^1.1.0" - y18n "^3.2.1" - -camel-case@3.0.x: - version "3.0.0" - resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-3.0.0.tgz#ca3c3688a4e9cf3a4cda777dc4dcbc713249cf73" - dependencies: - no-case "^2.2.0" - upper-case "^1.1.1" - -camelcase-keys@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" - dependencies: - camelcase "^2.0.0" - map-obj "^1.0.0" - -camelcase@^1.0.2: - version "1.2.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" - -camelcase@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" - -camelcase@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" - -camelcase@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" - -caniuse-api@^1.5.2: - version "1.6.1" - resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-1.6.1.tgz#b534e7c734c4f81ec5fbe8aca2ad24354b962c6c" - dependencies: - browserslist "^1.3.6" - caniuse-db "^1.0.30000529" - lodash.memoize "^4.1.2" - lodash.uniq "^4.5.0" - -caniuse-db@^1.0.30000529, caniuse-db@^1.0.30000634, caniuse-db@^1.0.30000639: - version "1.0.30000783" - resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000783.tgz#16b30d47266a4f515cc69ae0316b670c9603cdbe" - -caseless@~0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.11.0.tgz#715b96ea9841593cc33067923f5ec60ebda4f7d7" - -caseless@~0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" - -center-align@^0.1.1: - version "0.1.3" - resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad" - dependencies: - align-text "^0.1.3" - lazy-cache "^1.0.3" - -chalk@^1.1.1, chalk@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" - dependencies: - ansi-styles "^2.2.1" - escape-string-regexp "^1.0.2" - has-ansi "^2.0.0" - strip-ansi "^3.0.0" - supports-color "^2.0.0" - -chalk@^2.0.0, chalk@^2.1.0, chalk@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.3.0.tgz#b5ea48efc9c1793dccc9b4767c93914d3f2d52ba" - dependencies: - ansi-styles "^3.1.0" - escape-string-regexp "^1.0.5" - supports-color "^4.0.0" - -chalk@~2.2.0: - version "2.2.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.2.2.tgz#4403f5cf18f35c05f51fbdf152bf588f956cf7cb" - dependencies: - ansi-styles "^3.1.0" - escape-string-regexp "^1.0.5" - supports-color "^4.0.0" - -chokidar@^1.4.2, chokidar@^1.6.0, chokidar@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.7.0.tgz#798e689778151c8076b4b360e5edd28cda2bb468" - dependencies: - anymatch "^1.3.0" - async-each "^1.0.0" - glob-parent "^2.0.0" - inherits "^2.0.1" - is-binary-path "^1.0.0" - is-glob "^2.0.0" - path-is-absolute "^1.0.0" - readdirp "^2.0.0" - optionalDependencies: - fsevents "^1.0.0" - -chownr@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.0.1.tgz#e2a75042a9551908bebd25b8523d5f9769d79181" - -cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - -circular-dependency-plugin@^4.2.1: - version "4.3.0" - resolved "https://registry.yarnpkg.com/circular-dependency-plugin/-/circular-dependency-plugin-4.3.0.tgz#2a12824e584546e1aeea5865b7bf234a11c4a695" - -clap@^1.0.9: - version "1.2.3" - resolved "https://registry.yarnpkg.com/clap/-/clap-1.2.3.tgz#4f36745b32008492557f46412d66d50cb99bce51" - dependencies: - chalk "^1.1.3" - -clean-css@4.1.x: - version "4.1.9" - resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.1.9.tgz#35cee8ae7687a49b98034f70de00c4edd3826301" - dependencies: - source-map "0.5.x" - -cliui@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" - dependencies: - center-align "^0.1.1" - right-align "^0.1.1" - wordwrap "0.0.2" - -cliui@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" - dependencies: - string-width "^1.0.1" - strip-ansi "^3.0.1" - wrap-ansi "^2.0.0" - -clone-deep@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-0.3.0.tgz#348c61ae9cdbe0edfe053d91ff4cc521d790ede8" - dependencies: - for-own "^1.0.0" - is-plain-object "^2.0.1" - kind-of "^3.2.2" - shallow-clone "^0.1.2" - -clone@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.3.tgz#298d7e2231660f40c003c2ed3140decf3f53085f" - -clone@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.1.tgz#d217d1e961118e3ac9a4b8bba3285553bf647cdb" - -co@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" - -coa@~1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/coa/-/coa-1.0.4.tgz#a9ef153660d6a86a8bdec0289a5c684d217432fd" - dependencies: - q "^1.1.2" - -code-point-at@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" - -codelyzer@~4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/codelyzer/-/codelyzer-4.0.2.tgz#d5e2390b97d95e73a7b1e6f0cf03e16cbf35b06f" - dependencies: - app-root-path "^2.0.1" - css-selector-tokenizer "^0.7.0" - cssauron "^1.4.0" - semver-dsl "^1.0.1" - source-map "^0.5.6" - sprintf-js "^1.0.3" - -color-convert@^1.3.0, color-convert@^1.9.0: - version "1.9.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.1.tgz#c1261107aeb2f294ebffec9ed9ecad529a6097ed" - dependencies: - color-name "^1.1.1" - -color-name@^1.0.0, color-name@^1.1.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - -color-string@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/color-string/-/color-string-0.3.0.tgz#27d46fb67025c5c2fa25993bfbf579e47841b991" - dependencies: - color-name "^1.0.0" - -color@^0.11.0: - version "0.11.4" - resolved "https://registry.yarnpkg.com/color/-/color-0.11.4.tgz#6d7b5c74fb65e841cd48792ad1ed5e07b904d764" - dependencies: - clone "^1.0.2" - color-convert "^1.3.0" - color-string "^0.3.0" - -colormin@^1.0.5: - version "1.1.2" - resolved "https://registry.yarnpkg.com/colormin/-/colormin-1.1.2.tgz#ea2f7420a72b96881a38aae59ec124a6f7298133" - dependencies: - color "^0.11.0" - css-color-names "0.0.4" - has "^1.0.1" - -colors@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" - -combined-stream@^1.0.5, combined-stream@~1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009" - dependencies: - delayed-stream "~1.0.0" - -commander@2.12.x, commander@^2.9.0, commander@~2.12.1: - version "2.12.2" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.12.2.tgz#0f5946c427ed9ec0d91a46bb9def53e54650e555" - -common-tags@^1.3.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.5.1.tgz#e2e39931a013cd02253defeed89a1ad615a27f07" - dependencies: - babel-runtime "^6.26.0" - -commondir@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" - -compressible@~2.0.11: - version "2.0.12" - resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.12.tgz#c59a5c99db76767e9876500e271ef63b3493bd66" - dependencies: - mime-db ">= 1.30.0 < 2" - -compression@^1.5.2: - version "1.7.1" - resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.1.tgz#eff2603efc2e22cf86f35d2eb93589f9875373db" - dependencies: - accepts "~1.3.4" - bytes "3.0.0" - compressible "~2.0.11" - debug "2.6.9" - on-headers "~1.0.1" - safe-buffer "5.1.1" - vary "~1.1.2" - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - -concat-stream@^1.5.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.0.tgz#0aac662fd52be78964d5532f694784e70110acf7" - dependencies: - inherits "^2.0.3" - readable-stream "^2.2.2" - typedarray "^0.0.6" - -connect-history-api-fallback@^1.3.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz#b06873934bc5e344fef611a196a6faae0aee015a" - -console-browserify@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10" - dependencies: - date-now "^0.1.4" - -console-control-strings@^1.0.0, console-control-strings@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" - -constants-browserify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" - -content-disposition@0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4" - -content-type@~1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" - -convert-source-map@^1.3.0: - version "1.5.1" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.1.tgz#b8278097b9bc229365de5c62cf5fcaed8b5599e5" - -cookie-signature@1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" - -cookie@0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" - -copy-concurrently@^1.0.0: - version "1.0.5" - resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" - dependencies: - aproba "^1.1.1" - fs-write-stream-atomic "^1.0.8" - iferr "^0.1.5" - mkdirp "^0.5.1" - rimraf "^2.5.4" - run-queue "^1.0.0" - -copy-webpack-plugin@^4.1.1: - version "4.2.3" - resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-4.2.3.tgz#4a3c61089f3b635777f0f0af346c338b39d63755" - dependencies: - bluebird "^3.5.1" - glob "^7.1.2" - is-glob "^4.0.0" - loader-utils "^0.2.15" - lodash "^4.3.0" - minimatch "^3.0.4" - -core-js@^2.4.0, core-js@^2.4.1: - version "2.5.3" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.3.tgz#8acc38345824f16d8365b7c9b4259168e8ed603e" - -core-object@^3.1.0: - version "3.1.5" - resolved "https://registry.yarnpkg.com/core-object/-/core-object-3.1.5.tgz#fa627b87502adc98045e44678e9a8ec3b9c0d2a9" - dependencies: - chalk "^2.0.0" - -core-util-is@1.0.2, core-util-is@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" - -cosmiconfig@^2.1.0, cosmiconfig@^2.1.1: - version "2.2.2" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-2.2.2.tgz#6173cebd56fac042c1f4390edf7af6c07c7cb892" - dependencies: - is-directory "^0.3.1" - js-yaml "^3.4.3" - minimist "^1.2.0" - object-assign "^4.1.0" - os-homedir "^1.0.1" - parse-json "^2.2.0" - require-from-string "^1.1.0" - -create-ecdh@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.0.tgz#888c723596cdf7612f6498233eebd7a35301737d" - dependencies: - bn.js "^4.1.0" - elliptic "^6.0.0" - -create-hash@^1.1.0, create-hash@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.1.3.tgz#606042ac8b9262750f483caddab0f5819172d8fd" - dependencies: - cipher-base "^1.0.1" - inherits "^2.0.1" - ripemd160 "^2.0.0" - sha.js "^2.4.0" - -create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: - version "1.1.6" - resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.6.tgz#acb9e221a4e17bdb076e90657c42b93e3726cf06" - dependencies: - cipher-base "^1.0.3" - create-hash "^1.1.0" - inherits "^2.0.1" - ripemd160 "^2.0.0" - safe-buffer "^5.0.1" - sha.js "^2.4.8" - -cross-spawn@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-3.0.1.tgz#1256037ecb9f0c5f79e3d6ef135e30770184b982" - dependencies: - lru-cache "^4.0.1" - which "^1.2.9" - -cross-spawn@^5.0.1: - version "5.1.0" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" - dependencies: - lru-cache "^4.0.1" - shebang-command "^1.2.0" - which "^1.2.9" - -cryptiles@2.x.x: - version "2.0.5" - resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8" - dependencies: - boom "2.x.x" - -cryptiles@3.x.x: - version "3.1.2" - resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-3.1.2.tgz#a89fbb220f5ce25ec56e8c4aa8a4fd7b5b0d29fe" - dependencies: - boom "5.x.x" - -crypto-browserify@^3.11.0: - version "3.12.0" - resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" - dependencies: - browserify-cipher "^1.0.0" - browserify-sign "^4.0.0" - create-ecdh "^4.0.0" - create-hash "^1.1.0" - create-hmac "^1.1.0" - diffie-hellman "^5.0.0" - inherits "^2.0.1" - pbkdf2 "^3.0.3" - public-encrypt "^4.0.0" - randombytes "^2.0.0" - randomfill "^1.0.3" - -css-color-names@0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0" - -css-loader@^0.28.1: - version "0.28.7" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-0.28.7.tgz#5f2ee989dd32edd907717f953317656160999c1b" - dependencies: - babel-code-frame "^6.11.0" - css-selector-tokenizer "^0.7.0" - cssnano ">=2.6.1 <4" - icss-utils "^2.1.0" - loader-utils "^1.0.2" - lodash.camelcase "^4.3.0" - object-assign "^4.0.1" - postcss "^5.0.6" - postcss-modules-extract-imports "^1.0.0" - postcss-modules-local-by-default "^1.0.1" - postcss-modules-scope "^1.0.0" - postcss-modules-values "^1.1.0" - postcss-value-parser "^3.3.0" - source-list-map "^2.0.0" - -css-parse@1.7.x: - version "1.7.0" - resolved "https://registry.yarnpkg.com/css-parse/-/css-parse-1.7.0.tgz#321f6cf73782a6ff751111390fc05e2c657d8c9b" - -css-select@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858" - dependencies: - boolbase "~1.0.0" - css-what "2.1" - domutils "1.5.1" - nth-check "~1.0.1" - -css-selector-tokenizer@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.7.0.tgz#e6988474ae8c953477bf5e7efecfceccd9cf4c86" - dependencies: - cssesc "^0.1.0" - fastparse "^1.1.1" - regexpu-core "^1.0.0" - -css-what@2.1: - version "2.1.0" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.0.tgz#9467d032c38cfaefb9f2d79501253062f87fa1bd" - -cssauron@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/cssauron/-/cssauron-1.4.0.tgz#a6602dff7e04a8306dc0db9a551e92e8b5662ad8" - dependencies: - through X.X.X - -cssesc@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-0.1.0.tgz#c814903e45623371a0477b40109aaafbeeaddbb4" - -"cssnano@>=2.6.1 <4", cssnano@^3.10.0: - version "3.10.0" - resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-3.10.0.tgz#4f38f6cea2b9b17fa01490f23f1dc68ea65c1c38" - dependencies: - autoprefixer "^6.3.1" - decamelize "^1.1.2" - defined "^1.0.0" - has "^1.0.1" - object-assign "^4.0.1" - postcss "^5.0.14" - postcss-calc "^5.2.0" - postcss-colormin "^2.1.8" - postcss-convert-values "^2.3.4" - postcss-discard-comments "^2.0.4" - postcss-discard-duplicates "^2.0.1" - postcss-discard-empty "^2.0.1" - postcss-discard-overridden "^0.1.1" - postcss-discard-unused "^2.2.1" - postcss-filter-plugins "^2.0.0" - postcss-merge-idents "^2.1.5" - postcss-merge-longhand "^2.0.1" - postcss-merge-rules "^2.0.3" - postcss-minify-font-values "^1.0.2" - postcss-minify-gradients "^1.0.1" - postcss-minify-params "^1.0.4" - postcss-minify-selectors "^2.0.4" - postcss-normalize-charset "^1.1.0" - postcss-normalize-url "^3.0.7" - postcss-ordered-values "^2.1.0" - postcss-reduce-idents "^2.2.2" - postcss-reduce-initial "^1.0.0" - postcss-reduce-transforms "^1.0.3" - postcss-svgo "^2.1.1" - postcss-unique-selectors "^2.0.2" - postcss-value-parser "^3.2.3" - postcss-zindex "^2.0.1" - -csso@~2.3.1: - version "2.3.2" - resolved "https://registry.yarnpkg.com/csso/-/csso-2.3.2.tgz#ddd52c587033f49e94b71fc55569f252e8ff5f85" - dependencies: - clap "^1.0.9" - source-map "^0.5.3" - -cuint@latest: - version "0.2.2" - resolved "https://registry.yarnpkg.com/cuint/-/cuint-0.2.2.tgz#408086d409550c2631155619e9fa7bcadc3b991b" - -currently-unhandled@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" - dependencies: - array-find-index "^1.0.1" - -cyclist@~0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-0.2.2.tgz#1b33792e11e914a2fd6d6ed6447464444e5fa640" - -d@1: - version "1.0.0" - resolved "https://registry.yarnpkg.com/d/-/d-1.0.0.tgz#754bb5bfe55451da69a58b94d45f4c5b0462d58f" - dependencies: - es5-ext "^0.10.9" - -dashdash@^1.12.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" - dependencies: - assert-plus "^1.0.0" - -date-now@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" - -debug@*, debug@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" - dependencies: - ms "2.0.0" - -debug@2.6.9, debug@^2.2.0, debug@^2.6.6, debug@^2.6.8: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - dependencies: - ms "2.0.0" - -decamelize@^1.0.0, decamelize@^1.1.1, decamelize@^1.1.2: - version "1.2.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" - -deep-equal@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5" - -deep-extend@~0.4.0: - version "0.4.2" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.2.tgz#48b699c27e334bf89f10892be432f6e4c7d34a7f" - -define-properties@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.2.tgz#83a73f2fea569898fb737193c8f873caf6d45c94" - dependencies: - foreach "^2.0.5" - object-keys "^1.0.8" - -defined@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" - -del@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/del/-/del-3.0.0.tgz#53ecf699ffcbcb39637691ab13baf160819766e5" - dependencies: - globby "^6.1.0" - is-path-cwd "^1.0.0" - is-path-in-cwd "^1.0.0" - p-map "^1.1.1" - pify "^3.0.0" - rimraf "^2.2.8" - -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - -delegates@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" - -denodeify@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/denodeify/-/denodeify-1.2.1.tgz#3a36287f5034e699e7577901052c2e6c94251631" - -depd@1.1.1, depd@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.1.tgz#5783b4e1c459f06fa5ca27f991f3d06e7a310359" - -des.js@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.0.tgz#c074d2e2aa6a8a9a07dbd61f9a15c2cd83ec8ecc" - dependencies: - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - -destroy@~1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" - -detect-indent@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" - dependencies: - repeating "^2.0.0" - -detect-libc@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" - -detect-node@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.3.tgz#a2033c09cc8e158d37748fbde7507832bd6ce127" - -diff@^3.1.0, diff@^3.2.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-3.4.0.tgz#b1d85507daf3964828de54b37d0d73ba67dda56c" - -diffie-hellman@^5.0.0: - version "5.0.2" - resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.2.tgz#b5835739270cfe26acf632099fded2a07f209e5e" - dependencies: - bn.js "^4.1.0" - miller-rabin "^4.0.0" - randombytes "^2.0.0" - -dns-equal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" - -dns-packet@^1.0.1: - version "1.2.2" - resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.2.2.tgz#a8a26bec7646438963fc86e06f8f8b16d6c8bf7a" - dependencies: - ip "^1.1.0" - safe-buffer "^5.0.1" - -dns-txt@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/dns-txt/-/dns-txt-2.0.2.tgz#b91d806f5d27188e4ab3e7d107d881a1cc4642b6" - dependencies: - buffer-indexof "^1.0.0" - -dom-converter@~0.1: - version "0.1.4" - resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.1.4.tgz#a45ef5727b890c9bffe6d7c876e7b19cb0e17f3b" - dependencies: - utila "~0.3" - -dom-serializer@0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.0.tgz#073c697546ce0780ce23be4a28e293e40bc30c82" - dependencies: - domelementtype "~1.1.1" - entities "~1.1.1" - -domain-browser@^1.1.1: - version "1.1.7" - resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.1.7.tgz#867aa4b093faa05f1de08c06f4d7b21fdf8698bc" - -domelementtype@1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.0.tgz#b17aed82e8ab59e52dd9c19b1756e0fc187204c2" - -domelementtype@~1.1.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.1.3.tgz#bd28773e2642881aec51544924299c5cd822185b" - -domhandler@2.1: - version "2.1.0" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.1.0.tgz#d2646f5e57f6c3bab11cf6cb05d3c0acf7412594" - dependencies: - domelementtype "1" - -domutils@1.1: - version "1.1.6" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.1.6.tgz#bddc3de099b9a2efacc51c623f28f416ecc57485" - dependencies: - domelementtype "1" - -domutils@1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf" - dependencies: - dom-serializer "0" - domelementtype "1" - -duplexify@^3.1.2, duplexify@^3.4.2: - version "3.5.1" - resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.5.1.tgz#4e1516be68838bc90a49994f0b39a6e5960befcd" - dependencies: - end-of-stream "^1.0.0" - inherits "^2.0.1" - readable-stream "^2.0.0" - stream-shift "^1.0.0" - -ecc-jsbn@~0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" - dependencies: - jsbn "~0.1.0" - -ee-first@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" - -ejs@^2.5.7: - version "2.5.7" - resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.5.7.tgz#cc872c168880ae3c7189762fd5ffc00896c9518a" - -electron-to-chromium@^1.2.7: - version "1.3.28" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.28.tgz#8dd4e6458086644e9f9f0a1cf32e2a1f9dffd9ee" - -elliptic@^6.0.0: - version "6.4.0" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.4.0.tgz#cac9af8762c85836187003c8dfe193e5e2eae5df" - dependencies: - bn.js "^4.4.0" - brorand "^1.0.1" - hash.js "^1.0.0" - hmac-drbg "^1.0.0" - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - minimalistic-crypto-utils "^1.0.0" - -ember-cli-string-utils@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/ember-cli-string-utils/-/ember-cli-string-utils-1.1.0.tgz#39b677fc2805f55173735376fcef278eaa4452a1" - -emojis-list@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" - -encodeurl@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.1.tgz#79e3d58655346909fe6f0f45a5de68103b294d20" - -end-of-stream@^1.0.0, end-of-stream@^1.1.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.0.tgz#7a90d833efda6cfa6eac0f4949dbb0fad3a63206" - dependencies: - once "^1.4.0" - -enhanced-resolve@^3.1.0, enhanced-resolve@^3.4.0: - version "3.4.1" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz#0421e339fd71419b3da13d129b3979040230476e" - dependencies: - graceful-fs "^4.1.2" - memory-fs "^0.4.0" - object-assign "^4.0.1" - tapable "^0.2.7" - -entities@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0" - -errno@^0.1.1, errno@^0.1.3, errno@^0.1.4: - version "0.1.6" - resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.6.tgz#c386ce8a6283f14fc09563b71560908c9bf53026" - dependencies: - prr "~1.0.1" - -error-ex@^1.2.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc" - dependencies: - is-arrayish "^0.2.1" - -es-abstract@^1.7.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.10.0.tgz#1ecb36c197842a00d8ee4c2dfd8646bb97d60864" - dependencies: - es-to-primitive "^1.1.1" - function-bind "^1.1.1" - has "^1.0.1" - is-callable "^1.1.3" - is-regex "^1.0.4" - -es-to-primitive@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.1.1.tgz#45355248a88979034b6792e19bb81f2b7975dd0d" - dependencies: - is-callable "^1.1.1" - is-date-object "^1.0.1" - is-symbol "^1.0.1" - -es5-ext@^0.10.14, es5-ext@^0.10.35, es5-ext@^0.10.9, es5-ext@~0.10.14: - version "0.10.37" - resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.37.tgz#0ee741d148b80069ba27d020393756af257defc3" - dependencies: - es6-iterator "~2.0.1" - es6-symbol "~3.1.1" - -es6-iterator@^2.0.1, es6-iterator@~2.0.1: - version "2.0.3" - resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" - dependencies: - d "1" - es5-ext "^0.10.35" - es6-symbol "^3.1.1" - -es6-map@^0.1.3: - version "0.1.5" - resolved "https://registry.yarnpkg.com/es6-map/-/es6-map-0.1.5.tgz#9136e0503dcc06a301690f0bb14ff4e364e949f0" - dependencies: - d "1" - es5-ext "~0.10.14" - es6-iterator "~2.0.1" - es6-set "~0.1.5" - es6-symbol "~3.1.1" - event-emitter "~0.3.5" - -es6-set@~0.1.5: - version "0.1.5" - resolved "https://registry.yarnpkg.com/es6-set/-/es6-set-0.1.5.tgz#d2b3ec5d4d800ced818db538d28974db0a73ccb1" - dependencies: - d "1" - es5-ext "~0.10.14" - es6-iterator "~2.0.1" - es6-symbol "3.1.1" - event-emitter "~0.3.5" - -es6-symbol@3.1.1, es6-symbol@^3.1.1, es6-symbol@~3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.1.tgz#bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77" - dependencies: - d "1" - es5-ext "~0.10.14" - -es6-weak-map@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.2.tgz#5e3ab32251ffd1538a1f8e5ffa1357772f92d96f" - dependencies: - d "1" - es5-ext "^0.10.14" - es6-iterator "^2.0.1" - es6-symbol "^3.1.1" - -escape-html@~1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" - -escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - -escope@^3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/escope/-/escope-3.6.0.tgz#e01975e812781a163a6dadfdd80398dc64c889c3" - dependencies: - es6-map "^0.1.3" - es6-weak-map "^2.0.1" - esrecurse "^4.1.0" - estraverse "^4.1.1" - -esprima@^2.6.0: - version "2.7.3" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" - -esprima@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.0.tgz#4499eddcd1110e0b218bacf2fa7f7f59f55ca804" - -esrecurse@^4.1.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.0.tgz#fa9568d98d3823f9a41d91e902dcab9ea6e5b163" - dependencies: - estraverse "^4.1.0" - object-assign "^4.0.1" - -estraverse@^4.1.0, estraverse@^4.1.1: - version "4.2.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" - -esutils@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" - -etag@~1.8.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" - -event-emitter@~0.3.5: - version "0.3.5" - resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39" - dependencies: - d "1" - es5-ext "~0.10.14" - -eventemitter3@1.x.x: - version "1.2.0" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-1.2.0.tgz#1c86991d816ad1e504750e73874224ecf3bec508" - -events@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" - -eventsource@0.1.6: - version "0.1.6" - resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-0.1.6.tgz#0acede849ed7dd1ccc32c811bb11b944d4f29232" - dependencies: - original ">=0.0.5" - -evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" - dependencies: - md5.js "^1.3.4" - safe-buffer "^5.1.1" - -execa@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" - dependencies: - cross-spawn "^5.0.1" - get-stream "^3.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" - -expand-brackets@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" - dependencies: - is-posix-bracket "^0.1.0" - -expand-range@^1.8.1: - version "1.8.2" - resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" - dependencies: - fill-range "^2.1.0" - -exports-loader@^0.6.3: - version "0.6.4" - resolved "https://registry.yarnpkg.com/exports-loader/-/exports-loader-0.6.4.tgz#d70fc6121975b35fc12830cf52754be2740fc886" - dependencies: - loader-utils "^1.0.2" - source-map "0.5.x" - -express@^4.16.2: - version "4.16.2" - resolved "https://registry.yarnpkg.com/express/-/express-4.16.2.tgz#e35c6dfe2d64b7dca0a5cd4f21781be3299e076c" - dependencies: - accepts "~1.3.4" - array-flatten "1.1.1" - body-parser "1.18.2" - content-disposition "0.5.2" - content-type "~1.0.4" - cookie "0.3.1" - cookie-signature "1.0.6" - debug "2.6.9" - depd "~1.1.1" - encodeurl "~1.0.1" - escape-html "~1.0.3" - etag "~1.8.1" - finalhandler "1.1.0" - fresh "0.5.2" - merge-descriptors "1.0.1" - methods "~1.1.2" - on-finished "~2.3.0" - parseurl "~1.3.2" - path-to-regexp "0.1.7" - proxy-addr "~2.0.2" - qs "6.5.1" - range-parser "~1.2.0" - safe-buffer "5.1.1" - send "0.16.1" - serve-static "1.13.1" - setprototypeof "1.1.0" - statuses "~1.3.1" - type-is "~1.6.15" - utils-merge "1.0.1" - vary "~1.1.2" - -extend@~3.0.0, extend@~3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" - -extglob@^0.3.1: - version "0.3.2" - resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" - dependencies: - is-extglob "^1.0.0" - -extract-text-webpack-plugin@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extract-text-webpack-plugin/-/extract-text-webpack-plugin-3.0.2.tgz#5f043eaa02f9750a9258b78c0a6e0dc1408fb2f7" - dependencies: - async "^2.4.1" - loader-utils "^1.1.0" - schema-utils "^0.3.0" - webpack-sources "^1.0.1" - -extsprintf@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" - -extsprintf@^1.2.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" - -fast-deep-equal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz#96256a3bc975595eb36d82e9929d060d893439ff" - -fast-json-stable-stringify@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" - -fastparse@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.1.tgz#d1e2643b38a94d7583b479060e6c4affc94071f8" - -faye-websocket@^0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.10.0.tgz#4e492f8d04dfb6f89003507f6edbf2d501e7c6f4" - dependencies: - websocket-driver ">=0.5.1" - -faye-websocket@~0.11.0: - version "0.11.1" - resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.1.tgz#f0efe18c4f56e4f40afc7e06c719fd5ee6188f38" - dependencies: - websocket-driver ">=0.5.1" - -file-loader@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-1.1.5.tgz#91c25b6b6fbe56dae99f10a425fd64933b5c9daa" - dependencies: - loader-utils "^1.0.2" - schema-utils "^0.3.0" - -filename-regex@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" - -fill-range@^2.1.0: - version "2.2.3" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723" - dependencies: - is-number "^2.1.0" - isobject "^2.0.0" - randomatic "^1.1.3" - repeat-element "^1.1.2" - repeat-string "^1.5.2" - -finalhandler@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.0.tgz#ce0b6855b45853e791b2fcc680046d88253dd7f5" - dependencies: - debug "2.6.9" - encodeurl "~1.0.1" - escape-html "~1.0.3" - on-finished "~2.3.0" - parseurl "~1.3.2" - statuses "~1.3.1" - unpipe "~1.0.0" - -find-cache-dir@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-1.0.0.tgz#9288e3e9e3cc3748717d39eade17cf71fc30ee6f" - dependencies: - commondir "^1.0.1" - make-dir "^1.0.0" - pkg-dir "^2.0.0" - -find-up@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" - dependencies: - path-exists "^2.0.0" - pinkie-promise "^2.0.0" - -find-up@^2.0.0, find-up@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" - dependencies: - locate-path "^2.0.0" - -flatten@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.2.tgz#dae46a9d78fbe25292258cc1e780a41d95c03782" - -flush-write-stream@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.0.2.tgz#c81b90d8746766f1a609a46809946c45dd8ae417" - dependencies: - inherits "^2.0.1" - readable-stream "^2.0.4" - -for-in@^0.1.3: - version "0.1.8" - resolved "https://registry.yarnpkg.com/for-in/-/for-in-0.1.8.tgz#d8773908e31256109952b1fdb9b3fa867d2775e1" - -for-in@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" - -for-own@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" - dependencies: - for-in "^1.0.1" - -for-own@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/for-own/-/for-own-1.0.0.tgz#c63332f415cedc4b04dbfe70cf836494c53cb44b" - dependencies: - for-in "^1.0.1" - -foreach@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" - -forever-agent@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" - -form-data@~2.1.1: - version "2.1.4" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.4.tgz#33c183acf193276ecaa98143a69e94bfee1750d1" - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.5" - mime-types "^2.1.12" - -form-data@~2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.1.tgz#6fb94fbd71885306d73d15cc497fe4cc4ecd44bf" - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.5" - mime-types "^2.1.12" - -forwarded@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" - -fresh@0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" - -from2@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" - dependencies: - inherits "^2.0.1" - readable-stream "^2.0.0" - -fs-extra@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.3.tgz#0d852122e5bc5beb453fb028e9c0c9bf36340c94" - dependencies: - graceful-fs "^4.1.2" - jsonfile "^4.0.0" - universalify "^0.1.0" - -fs-write-stream-atomic@^1.0.8: - version "1.0.10" - resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" - dependencies: - graceful-fs "^4.1.2" - iferr "^0.1.5" - imurmurhash "^0.1.4" - readable-stream "1 || 2" - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - -fsevents@^1.0.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.1.3.tgz#11f82318f5fe7bb2cd22965a108e9306208216d8" - dependencies: - nan "^2.3.0" - node-pre-gyp "^0.6.39" - -fstream-ignore@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/fstream-ignore/-/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105" - dependencies: - fstream "^1.0.0" - inherits "2" - minimatch "^3.0.0" - -fstream@^1.0.0, fstream@^1.0.10, fstream@^1.0.2: - version "1.0.11" - resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171" - dependencies: - graceful-fs "^4.1.2" - inherits "~2.0.0" - mkdirp ">=0.5 0" - rimraf "2" - -function-bind@^1.0.2, function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - -gauge@~2.7.3: - version "2.7.4" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" - dependencies: - aproba "^1.0.3" - console-control-strings "^1.0.0" - has-unicode "^2.0.0" - object-assign "^4.1.0" - signal-exit "^3.0.0" - string-width "^1.0.1" - strip-ansi "^3.0.1" - wide-align "^1.1.0" - -gaze@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/gaze/-/gaze-1.1.2.tgz#847224677adb8870d679257ed3388fdb61e40105" - dependencies: - globule "^1.0.0" - -generate-function@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.0.0.tgz#6858fe7c0969b7d4e9093337647ac79f60dfbe74" - -generate-object-property@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/generate-object-property/-/generate-object-property-1.2.0.tgz#9c0e1c40308ce804f4783618b937fa88f99d50d0" - dependencies: - is-property "^1.0.0" - -get-caller-file@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5" - -get-stdin@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" - -get-stream@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" - -getpass@^0.1.1: - version "0.1.7" - resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" - dependencies: - assert-plus "^1.0.0" - -glob-base@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" - dependencies: - glob-parent "^2.0.0" - is-glob "^2.0.0" - -glob-parent@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" - dependencies: - is-glob "^2.0.0" - -glob@7.0.x: - version "7.0.6" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.0.6.tgz#211bafaf49e525b8cd93260d14ab136152b3f57a" - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.2" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@^6.0.4: - version "6.0.4" - resolved "https://registry.yarnpkg.com/glob/-/glob-6.0.4.tgz#0f08860f6a155127b2fadd4f9ce24b1aab6e4d22" - dependencies: - inflight "^1.0.4" - inherits "2" - minimatch "2 || 3" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2, glob@~7.1.1: - version "7.1.2" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -globals@^9.18.0: - version "9.18.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" - -globby@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" - dependencies: - array-union "^1.0.1" - glob "^7.0.3" - object-assign "^4.0.1" - pify "^2.0.0" - pinkie-promise "^2.0.0" - -globule@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/globule/-/globule-1.2.0.tgz#1dc49c6822dd9e8a2fa00ba2a295006e8664bd09" - dependencies: - glob "~7.1.1" - lodash "~4.17.4" - minimatch "~3.0.2" - -graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6: - version "4.1.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" - -handle-thing@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-1.2.5.tgz#fd7aad726bf1a5fd16dfc29b2f7a6601d27139c4" - -har-schema@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e" - -har-schema@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" - -har-validator@~2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-2.0.6.tgz#cdcbc08188265ad119b6a5a7c8ab70eecfb5d27d" - dependencies: - chalk "^1.1.1" - commander "^2.9.0" - is-my-json-valid "^2.12.4" - pinkie-promise "^2.0.0" - -har-validator@~4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-4.2.1.tgz#33481d0f1bbff600dd203d75812a6a5fba002e2a" - dependencies: - ajv "^4.9.1" - har-schema "^1.0.5" - -har-validator@~5.0.3: - version "5.0.3" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.0.3.tgz#ba402c266194f15956ef15e0fcf242993f6a7dfd" - dependencies: - ajv "^5.1.0" - har-schema "^2.0.0" - -has-ansi@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" - dependencies: - ansi-regex "^2.0.0" - -has-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" - -has-flag@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" - -has-unicode@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" - -has@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28" - dependencies: - function-bind "^1.0.2" - -hash-base@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-2.0.2.tgz#66ea1d856db4e8a5470cadf6fce23ae5244ef2e1" - dependencies: - inherits "^2.0.1" - -hash-base@^3.0.0: - version "3.0.4" - resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918" - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - -hash.js@^1.0.0, hash.js@^1.0.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.3.tgz#340dedbe6290187151c1ea1d777a3448935df846" - dependencies: - inherits "^2.0.3" - minimalistic-assert "^1.0.0" - -hawk@3.1.3, hawk@~3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4" - dependencies: - boom "2.x.x" - cryptiles "2.x.x" - hoek "2.x.x" - sntp "1.x.x" - -hawk@~6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/hawk/-/hawk-6.0.2.tgz#af4d914eb065f9b5ce4d9d11c1cb2126eecc3038" - dependencies: - boom "4.x.x" - cryptiles "3.x.x" - hoek "4.x.x" - sntp "2.x.x" - -he@1.1.x: - version "1.1.1" - resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd" - -hmac-drbg@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" - dependencies: - hash.js "^1.0.3" - minimalistic-assert "^1.0.0" - minimalistic-crypto-utils "^1.0.1" - -hoek@2.x.x: - version "2.16.3" - resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" - -hoek@4.x.x: - version "4.2.0" - resolved "https://registry.yarnpkg.com/hoek/-/hoek-4.2.0.tgz#72d9d0754f7fe25ca2d01ad8f8f9a9449a89526d" - -homedir-polyfill@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz#4c2bbc8a758998feebf5ed68580f76d46768b4bc" - dependencies: - parse-passwd "^1.0.0" - -hosted-git-info@^2.1.4: - version "2.5.0" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.5.0.tgz#6d60e34b3abbc8313062c3b798ef8d901a07af3c" - -hpack.js@^2.1.6: - version "2.1.6" - resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" - dependencies: - inherits "^2.0.1" - obuf "^1.0.0" - readable-stream "^2.0.1" - wbuf "^1.1.0" - -html-comment-regex@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.1.tgz#668b93776eaae55ebde8f3ad464b307a4963625e" - -html-entities@^1.2.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.2.1.tgz#0df29351f0721163515dfb9e5543e5f6eed5162f" - -html-minifier@^3.2.3: - version "3.5.7" - resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.5.7.tgz#511e69bb5a8e7677d1012ebe03819aa02ca06208" - dependencies: - camel-case "3.0.x" - clean-css "4.1.x" - commander "2.12.x" - he "1.1.x" - ncname "1.0.x" - param-case "2.1.x" - relateurl "0.2.x" - uglify-js "3.2.x" - -html-webpack-plugin@^2.29.0: - version "2.30.1" - resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-2.30.1.tgz#7f9c421b7ea91ec460f56527d78df484ee7537d5" - dependencies: - bluebird "^3.4.7" - html-minifier "^3.2.3" - loader-utils "^0.2.16" - lodash "^4.17.3" - pretty-error "^2.0.2" - toposort "^1.0.0" - -htmlparser2@~3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.3.0.tgz#cc70d05a59f6542e43f0e685c982e14c924a9efe" - dependencies: - domelementtype "1" - domhandler "2.1" - domutils "1.1" - readable-stream "1.0" - -http-deceiver@^1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" - -http-errors@1.6.2, http-errors@~1.6.2: - version "1.6.2" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.2.tgz#0a002cc85707192a7e7946ceedc11155f60ec736" - dependencies: - depd "1.1.1" - inherits "2.0.3" - setprototypeof "1.0.3" - statuses ">= 1.3.1 < 2" - -http-parser-js@>=0.4.0: - version "0.4.9" - resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.4.9.tgz#ea1a04fb64adff0242e9974f297dd4c3cad271e1" - -http-proxy-middleware@~0.17.4: - version "0.17.4" - resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.17.4.tgz#642e8848851d66f09d4f124912846dbaeb41b833" - dependencies: - http-proxy "^1.16.2" - is-glob "^3.1.0" - lodash "^4.17.2" - micromatch "^2.3.11" - -http-proxy@^1.16.2: - version "1.16.2" - resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.16.2.tgz#06dff292952bf64dbe8471fa9df73066d4f37742" - dependencies: - eventemitter3 "1.x.x" - requires-port "1.x.x" - -http-signature@~1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf" - dependencies: - assert-plus "^0.2.0" - jsprim "^1.2.2" - sshpk "^1.7.0" - -http-signature@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" - dependencies: - assert-plus "^1.0.0" - jsprim "^1.2.2" - sshpk "^1.7.0" - -https-browserify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" - -iconv-lite@0.4.19: - version "0.4.19" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b" - -icss-replace-symbols@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz#06ea6f83679a7749e386cfe1fe812ae5db223ded" - -icss-utils@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-2.1.0.tgz#83f0a0ec378bf3246178b6c2ad9136f135b1c962" - dependencies: - postcss "^6.0.1" - -ieee754@^1.1.4: - version "1.1.8" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.8.tgz#be33d40ac10ef1926701f6f08a2d86fbfd1ad3e4" - -iferr@^0.1.5: - version "0.1.5" - resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" - -image-size@~0.5.0: - version "0.5.5" - resolved "https://registry.yarnpkg.com/image-size/-/image-size-0.5.5.tgz#09dfd4ab9d20e29eb1c3e80b8990378df9e3cb9c" - -import-local@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-0.1.1.tgz#b1179572aacdc11c6a91009fb430dbcab5f668a8" - dependencies: - pkg-dir "^2.0.0" - resolve-cwd "^2.0.0" - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - -in-publish@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/in-publish/-/in-publish-2.0.0.tgz#e20ff5e3a2afc2690320b6dc552682a9c7fadf51" - -indent-string@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" - dependencies: - repeating "^2.0.0" - -indexes-of@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" - -indexof@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@2.0.3, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" - -inherits@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" - -ini@~1.3.0: - version "1.3.5" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" - -internal-ip@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-1.2.0.tgz#ae9fbf93b984878785d50a8de1b356956058cf5c" - dependencies: - meow "^3.3.0" - -interpret@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.1.0.tgz#7ed1b1410c6a0e0f78cf95d3b8440c63f78b8614" - -invariant@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360" - dependencies: - loose-envify "^1.0.0" - -invert-kv@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" - -ip@^1.1.0, ip@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" - -ipaddr.js@1.5.2: - version "1.5.2" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.5.2.tgz#d4b505bde9946987ccf0fc58d9010ff9607e3fa0" - -is-absolute-url@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6" - -is-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - -is-binary-path@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" - dependencies: - binary-extensions "^1.0.0" - -is-buffer@^1.0.2, is-buffer@^1.1.5: - version "1.1.6" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" - -is-builtin-module@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe" - dependencies: - builtin-modules "^1.0.0" - -is-callable@^1.1.1, is-callable@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.3.tgz#86eb75392805ddc33af71c92a0eedf74ee7604b2" - -is-date-object@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" - -is-directory@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" - -is-dotfile@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1" - -is-equal-shallow@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" - dependencies: - is-primitive "^2.0.0" - -is-extendable@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" - -is-extglob@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" - -is-extglob@^2.1.0, is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - -is-finite@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" - dependencies: - number-is-nan "^1.0.0" - -is-fullwidth-code-point@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" - dependencies: - number-is-nan "^1.0.0" - -is-fullwidth-code-point@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" - -is-glob@^2.0.0, is-glob@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" - dependencies: - is-extglob "^1.0.0" - -is-glob@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" - dependencies: - is-extglob "^2.1.0" - -is-glob@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.0.tgz#9521c76845cc2610a85203ddf080a958c2ffabc0" - dependencies: - is-extglob "^2.1.1" - -is-my-json-valid@^2.12.4: - version "2.16.1" - resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.16.1.tgz#5a846777e2c2620d1e69104e5d3a03b1f6088f11" - dependencies: - generate-function "^2.0.0" - generate-object-property "^1.1.0" - jsonpointer "^4.0.0" - xtend "^4.0.0" - -is-number@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" - dependencies: - kind-of "^3.0.2" - -is-number@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" - dependencies: - kind-of "^3.0.2" - -is-path-cwd@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" - -is-path-in-cwd@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz#6477582b8214d602346094567003be8a9eac04dc" - dependencies: - is-path-inside "^1.0.0" - -is-path-inside@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" - dependencies: - path-is-inside "^1.0.1" - -is-plain-obj@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" - -is-plain-object@^2.0.1: - version "2.0.4" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" - dependencies: - isobject "^3.0.1" - -is-posix-bracket@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" - -is-primitive@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" - -is-property@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" - -is-regex@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" - dependencies: - has "^1.0.1" - -is-stream@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" - -is-svg@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-2.1.0.tgz#cf61090da0d9efbcab8722deba6f032208dbb0e9" - dependencies: - html-comment-regex "^1.1.0" - -is-symbol@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.1.tgz#3cc59f00025194b6ab2e38dbae6689256b660572" - -is-typedarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - -is-utf8@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" - -is-wsl@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" - -isarray@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" - -isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - -isobject@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" - dependencies: - isarray "1.0.0" - -isobject@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" - -isstream@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" - -istanbul-instrumenter-loader@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/istanbul-instrumenter-loader/-/istanbul-instrumenter-loader-2.0.0.tgz#e5492900ab0bba835efa8024cb00be9b3eea2700" - dependencies: - convert-source-map "^1.3.0" - istanbul-lib-instrument "^1.1.3" - loader-utils "^0.2.16" - object-assign "^4.1.0" - -istanbul-lib-coverage@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.1.1.tgz#73bfb998885299415c93d38a3e9adf784a77a9da" - -istanbul-lib-instrument@^1.1.3: - version "1.9.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.9.1.tgz#250b30b3531e5d3251299fdd64b0b2c9db6b558e" - dependencies: - babel-generator "^6.18.0" - babel-template "^6.16.0" - babel-traverse "^6.18.0" - babel-types "^6.18.0" - babylon "^6.18.0" - istanbul-lib-coverage "^1.1.1" - semver "^5.3.0" - -js-base64@^2.1.8, js-base64@^2.1.9: - version "2.4.0" - resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.4.0.tgz#9e566fee624751a1d720c966cd6226d29d4025aa" - -js-tokens@^3.0.0, js-tokens@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" - -js-yaml@^3.4.3: - version "3.10.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.10.0.tgz#2e78441646bd4682e963f22b6e92823c309c62dc" - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - -js-yaml@~3.7.0: - version "3.7.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.7.0.tgz#5c967ddd837a9bfdca5f2de84253abe8a1c03b80" - dependencies: - argparse "^1.0.7" - esprima "^2.6.0" - -jsbn@~0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" - -jsesc@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" - -jsesc@~0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" - -json-loader@^0.5.4: - version "0.5.7" - resolved "https://registry.yarnpkg.com/json-loader/-/json-loader-0.5.7.tgz#dca14a70235ff82f0ac9a3abeb60d337a365185d" - -json-schema-traverse@^0.3.0: - version "0.3.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" - -json-schema@0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" - -json-stable-stringify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" - dependencies: - jsonify "~0.0.0" - -json-stringify-safe@~5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" - -json3@^3.3.2: - version "3.3.2" - resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1" - -json5@^0.5.0, json5@^0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" - -jsonfile@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" - optionalDependencies: - graceful-fs "^4.1.6" - -jsonify@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" - -jsonpointer@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9" - -jsprim@^1.2.2: - version "1.4.1" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" - dependencies: - assert-plus "1.0.0" - extsprintf "1.3.0" - json-schema "0.2.3" - verror "1.10.0" - -karma-source-map-support@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/karma-source-map-support/-/karma-source-map-support-1.2.0.tgz#1bf81e7bb4b089627ab352ec4179e117c406a540" - dependencies: - source-map-support "^0.4.1" - -killable@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/killable/-/killable-1.0.0.tgz#da8b84bd47de5395878f95d64d02f2449fe05e6b" - -kind-of@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-2.0.1.tgz#018ec7a4ce7e3a86cb9141be519d24c8faa981b5" - dependencies: - is-buffer "^1.0.2" - -kind-of@^3.0.2, kind-of@^3.2.2: - version "3.2.2" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" - dependencies: - is-buffer "^1.1.5" - -kind-of@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" - dependencies: - is-buffer "^1.1.5" - -lazy-cache@^0.2.3: - version "0.2.7" - resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-0.2.7.tgz#7feddf2dcb6edb77d11ef1d117ab5ffdf0ab1b65" - -lazy-cache@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" - -lcid@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" - dependencies: - invert-kv "^1.0.0" - -less-loader@^4.0.5: - version "4.0.5" - resolved "https://registry.yarnpkg.com/less-loader/-/less-loader-4.0.5.tgz#ae155a7406cac6acd293d785587fcff0f478c4dd" - dependencies: - clone "^2.1.1" - loader-utils "^1.1.0" - pify "^2.3.0" - -less@^2.7.2: - version "2.7.3" - resolved "https://registry.yarnpkg.com/less/-/less-2.7.3.tgz#cc1260f51c900a9ec0d91fb6998139e02507b63b" - optionalDependencies: - errno "^0.1.1" - graceful-fs "^4.1.2" - image-size "~0.5.0" - mime "^1.2.11" - mkdirp "^0.5.0" - promise "^7.1.1" - request "2.81.0" - source-map "^0.5.3" - -license-webpack-plugin@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/license-webpack-plugin/-/license-webpack-plugin-1.1.1.tgz#76b2cedccc78f139fd7877e576f756cfc141b8c2" - dependencies: - ejs "^2.5.7" - -load-json-file@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" - dependencies: - graceful-fs "^4.1.2" - parse-json "^2.2.0" - pify "^2.0.0" - pinkie-promise "^2.0.0" - strip-bom "^2.0.0" - -load-json-file@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" - dependencies: - graceful-fs "^4.1.2" - parse-json "^2.2.0" - pify "^2.0.0" - strip-bom "^3.0.0" - -loader-runner@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.3.0.tgz#f482aea82d543e07921700d5a46ef26fdac6b8a2" - -loader-utils@1.1.0, loader-utils@^1.0.1, loader-utils@^1.0.2, loader-utils@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.1.0.tgz#c98aef488bcceda2ffb5e2de646d6a754429f5cd" - dependencies: - big.js "^3.1.3" - emojis-list "^2.0.0" - json5 "^0.5.0" - -loader-utils@^0.2.15, loader-utils@^0.2.16, loader-utils@~0.2.2: - version "0.2.17" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-0.2.17.tgz#f86e6374d43205a6e6c60e9196f17c0299bfb348" - dependencies: - big.js "^3.1.3" - emojis-list "^2.0.0" - json5 "^0.5.0" - object-assign "^4.0.1" - -locate-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" - dependencies: - p-locate "^2.0.0" - path-exists "^3.0.0" - -lodash.assign@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-4.2.0.tgz#0d99f3ccd7a6d261d19bdaeb9245005d285808e7" - -lodash.camelcase@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" - -lodash.clonedeep@^4.3.2, lodash.clonedeep@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" - -lodash.memoize@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" - -lodash.mergewith@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.mergewith/-/lodash.mergewith-4.6.0.tgz#150cf0a16791f5903b8891eab154609274bdea55" - -lodash.tail@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/lodash.tail/-/lodash.tail-4.1.1.tgz#d2333a36d9e7717c8ad2f7cacafec7c32b444664" - -lodash.uniq@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" - -lodash@^4.0.0, lodash@^4.11.1, lodash@^4.14.0, lodash@^4.17.2, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.3.0, lodash@~4.17.4: - version "4.17.4" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" - -loglevel@^1.4.1: - version "1.6.0" - resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.0.tgz#ae0caa561111498c5ba13723d6fb631d24003934" - -longest@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" - -loose-envify@^1.0.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848" - dependencies: - js-tokens "^3.0.0" - -loud-rejection@^1.0.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" - dependencies: - currently-unhandled "^0.4.1" - signal-exit "^3.0.0" - -lower-case@^1.1.1: - version "1.1.4" - resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.4.tgz#9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac" - -lru-cache@^4.0.1, lru-cache@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.1.tgz#622e32e82488b49279114a4f9ecf45e7cd6bba55" - dependencies: - pseudomap "^1.0.2" - yallist "^2.1.2" - -macaddress@^0.2.8: - version "0.2.8" - resolved "https://registry.yarnpkg.com/macaddress/-/macaddress-0.2.8.tgz#5904dc537c39ec6dbefeae902327135fa8511f12" - -magic-string@^0.22.3: - version "0.22.4" - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.22.4.tgz#31039b4e40366395618c1d6cf8193c53917475ff" - dependencies: - vlq "^0.2.1" - -make-dir@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.1.0.tgz#19b4369fe48c116f53c2af95ad102c0e39e85d51" - dependencies: - pify "^3.0.0" - -make-error@^1.1.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.0.tgz#52ad3a339ccf10ce62b4040b708fe707244b8b96" - -map-obj@^1.0.0, map-obj@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" - -math-expression-evaluator@^1.2.14: - version "1.2.17" - resolved "https://registry.yarnpkg.com/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz#de819fdbcd84dccd8fae59c6aeb79615b9d266ac" - -md5.js@^1.3.4: - version "1.3.4" - resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.4.tgz#e9bdbde94a20a5ac18b04340fc5764d5b09d901d" - dependencies: - hash-base "^3.0.0" - inherits "^2.0.1" - -media-typer@0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" - -mem@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/mem/-/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76" - dependencies: - mimic-fn "^1.0.0" - -memory-fs@^0.4.0, memory-fs@^0.4.1, memory-fs@~0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" - dependencies: - errno "^0.1.3" - readable-stream "^2.0.1" - -meow@^3.3.0, meow@^3.7.0: - version "3.7.0" - resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" - dependencies: - camelcase-keys "^2.0.0" - decamelize "^1.1.2" - loud-rejection "^1.0.0" - map-obj "^1.0.1" - minimist "^1.1.3" - normalize-package-data "^2.3.4" - object-assign "^4.0.1" - read-pkg-up "^1.0.1" - redent "^1.0.0" - trim-newlines "^1.0.0" - -merge-descriptors@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" - -methods@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" - -micromatch@^2.1.5, micromatch@^2.3.11: - version "2.3.11" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" - dependencies: - arr-diff "^2.0.0" - array-unique "^0.2.1" - braces "^1.8.2" - expand-brackets "^0.1.4" - extglob "^0.3.1" - filename-regex "^2.0.0" - is-extglob "^1.0.0" - is-glob "^2.0.1" - kind-of "^3.0.2" - normalize-path "^2.0.1" - object.omit "^2.0.0" - parse-glob "^3.0.4" - regex-cache "^0.4.2" - -miller-rabin@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" - dependencies: - bn.js "^4.0.0" - brorand "^1.0.1" - -"mime-db@>= 1.30.0 < 2": - version "1.32.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.32.0.tgz#485b3848b01a3cda5f968b4882c0771e58e09414" - -mime-db@~1.30.0: - version "1.30.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.30.0.tgz#74c643da2dd9d6a45399963465b26d5ca7d71f01" - -mime-types@^2.1.12, mime-types@~2.1.15, mime-types@~2.1.16, mime-types@~2.1.17, mime-types@~2.1.7: - version "2.1.17" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.17.tgz#09d7a393f03e995a79f8af857b70a9e0ab16557a" - dependencies: - mime-db "~1.30.0" - -mime@1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6" - -mime@^1.2.11, mime@^1.4.1, mime@^1.5.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" - -mimic-fn@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.1.0.tgz#e667783d92e89dbd342818b5230b9d62a672ad18" - -minimalistic-assert@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz#702be2dda6b37f4836bcb3f5db56641b64a1d3d3" - -minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" - -"minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.4, minimatch@~3.0.2: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" - dependencies: - brace-expansion "^1.1.7" - -minimist@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" - -minimist@^1.1.3, minimist@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" - -mississippi@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-1.3.0.tgz#d201583eb12327e3c5c1642a404a9cacf94e34f5" - dependencies: - concat-stream "^1.5.0" - duplexify "^3.4.2" - end-of-stream "^1.1.0" - flush-write-stream "^1.0.0" - from2 "^2.1.0" - parallel-transform "^1.1.0" - pump "^1.0.0" - pumpify "^1.3.3" - stream-each "^1.1.0" - through2 "^2.0.0" - -mixin-object@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/mixin-object/-/mixin-object-2.0.1.tgz#4fb949441dab182540f1fe035ba60e1947a5e57e" - dependencies: - for-in "^0.1.3" - is-extendable "^0.1.1" - -mkdirp@0.5.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" - dependencies: - minimist "0.0.8" - -move-concurrently@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" - dependencies: - aproba "^1.1.1" - copy-concurrently "^1.0.0" - fs-write-stream-atomic "^1.0.8" - mkdirp "^0.5.1" - rimraf "^2.5.4" - run-queue "^1.0.3" - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - -multicast-dns-service-types@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901" - -multicast-dns@^6.0.1: - version "6.2.1" - resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-6.2.1.tgz#c5035defa9219d30640558a49298067352098060" - dependencies: - dns-packet "^1.0.1" - thunky "^0.1.0" - -nan@^2.3.0, nan@^2.3.2: - version "2.8.0" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.8.0.tgz#ed715f3fe9de02b57a5e6252d90a96675e1f085a" - -ncname@1.0.x: - version "1.0.0" - resolved "https://registry.yarnpkg.com/ncname/-/ncname-1.0.0.tgz#5b57ad18b1ca092864ef62b0b1ed8194f383b71c" - dependencies: - xml-char-classes "^1.0.0" - -negotiator@0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" - -no-case@^2.2.0: - version "2.3.2" - resolved "https://registry.yarnpkg.com/no-case/-/no-case-2.3.2.tgz#60b813396be39b3f1288a4c1ed5d1e7d28b464ac" - dependencies: - lower-case "^1.1.1" - -node-forge@0.6.33: - version "0.6.33" - resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.6.33.tgz#463811879f573d45155ad6a9f43dc296e8e85ebc" - -node-gyp@^3.3.1: - version "3.6.2" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.6.2.tgz#9bfbe54562286284838e750eac05295853fa1c60" - dependencies: - fstream "^1.0.0" - glob "^7.0.3" - graceful-fs "^4.1.2" - minimatch "^3.0.2" - mkdirp "^0.5.0" - nopt "2 || 3" - npmlog "0 || 1 || 2 || 3 || 4" - osenv "0" - request "2" - rimraf "2" - semver "~5.3.0" - tar "^2.0.0" - which "1" - -node-libs-browser@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.1.0.tgz#5f94263d404f6e44767d726901fff05478d600df" - dependencies: - assert "^1.1.1" - browserify-zlib "^0.2.0" - buffer "^4.3.0" - console-browserify "^1.1.0" - constants-browserify "^1.0.0" - crypto-browserify "^3.11.0" - domain-browser "^1.1.1" - events "^1.0.0" - https-browserify "^1.0.0" - os-browserify "^0.3.0" - path-browserify "0.0.0" - process "^0.11.10" - punycode "^1.2.4" - querystring-es3 "^0.2.0" - readable-stream "^2.3.3" - stream-browserify "^2.0.1" - stream-http "^2.7.2" - string_decoder "^1.0.0" - timers-browserify "^2.0.4" - tty-browserify "0.0.0" - url "^0.11.0" - util "^0.10.3" - vm-browserify "0.0.4" - -node-modules-path@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/node-modules-path/-/node-modules-path-1.0.1.tgz#40096b08ce7ad0ea14680863af449c7c75a5d1c8" - -node-pre-gyp@^0.6.39: - version "0.6.39" - resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.39.tgz#c00e96860b23c0e1420ac7befc5044e1d78d8649" - dependencies: - detect-libc "^1.0.2" - hawk "3.1.3" - mkdirp "^0.5.1" - nopt "^4.0.1" - npmlog "^4.0.2" - rc "^1.1.7" - request "2.81.0" - rimraf "^2.6.1" - semver "^5.3.0" - tar "^2.2.1" - tar-pack "^3.4.0" - -node-sass@^4.3.0: - version "4.7.2" - resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-4.7.2.tgz#9366778ba1469eb01438a9e8592f4262bcb6794e" - dependencies: - async-foreach "^0.1.3" - chalk "^1.1.1" - cross-spawn "^3.0.0" - gaze "^1.0.0" - get-stdin "^4.0.1" - glob "^7.0.3" - in-publish "^2.0.0" - lodash.assign "^4.2.0" - lodash.clonedeep "^4.3.2" - lodash.mergewith "^4.6.0" - meow "^3.7.0" - mkdirp "^0.5.1" - nan "^2.3.2" - node-gyp "^3.3.1" - npmlog "^4.0.0" - request "~2.79.0" - sass-graph "^2.2.4" - stdout-stream "^1.4.0" - "true-case-path" "^1.0.2" - -"nopt@2 || 3": - version "3.0.6" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" - dependencies: - abbrev "1" - -nopt@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" - dependencies: - abbrev "1" - osenv "^0.1.4" - -normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: - version "2.4.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f" - dependencies: - hosted-git-info "^2.1.4" - is-builtin-module "^1.0.0" - semver "2 || 3 || 4 || 5" - validate-npm-package-license "^3.0.1" - -normalize-path@^2.0.0, normalize-path@^2.0.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" - dependencies: - remove-trailing-separator "^1.0.1" - -normalize-range@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" - -normalize-url@^1.4.0: - version "1.9.1" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.9.1.tgz#2cc0d66b31ea23036458436e3620d85954c66c3c" - dependencies: - object-assign "^4.0.1" - prepend-http "^1.0.0" - query-string "^4.1.0" - sort-keys "^1.0.0" - -npm-run-path@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" - dependencies: - path-key "^2.0.0" - -"npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.0, npmlog@^4.0.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" - dependencies: - are-we-there-yet "~1.1.2" - console-control-strings "~1.1.0" - gauge "~2.7.3" - set-blocking "~2.0.0" - -nth-check@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.1.tgz#9929acdf628fc2c41098deab82ac580cf149aae4" - dependencies: - boolbase "~1.0.0" - -num2fraction@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" - -number-is-nan@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" - -oauth-sign@~0.8.1, oauth-sign@~0.8.2: - version "0.8.2" - resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" - -object-assign@^4.0.1, object-assign@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - -object-keys@^1.0.8: - version "1.0.11" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d" - -object.omit@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" - dependencies: - for-own "^0.1.4" - is-extendable "^0.1.1" - -obuf@^1.0.0, obuf@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.1.tgz#104124b6c602c6796881a042541d36db43a5264e" - -on-finished@~2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" - dependencies: - ee-first "1.1.1" - -on-headers@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.1.tgz#928f5d0f470d49342651ea6794b0857c100693f7" - -once@^1.3.0, once@^1.3.1, once@^1.3.3, once@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - dependencies: - wrappy "1" - -opn@^5.1.0, opn@~5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/opn/-/opn-5.1.0.tgz#72ce2306a17dbea58ff1041853352b4a8fc77519" - dependencies: - is-wsl "^1.1.0" - -original@>=0.0.5: - version "1.0.0" - resolved "https://registry.yarnpkg.com/original/-/original-1.0.0.tgz#9147f93fa1696d04be61e01bd50baeaca656bd3b" - dependencies: - url-parse "1.0.x" - -os-browserify@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" - -os-homedir@^1.0.0, os-homedir@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" - -os-locale@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9" - dependencies: - lcid "^1.0.0" - -os-locale@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2" - dependencies: - execa "^0.7.0" - lcid "^1.0.0" - mem "^1.1.0" - -os-tmpdir@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" - -osenv@0, osenv@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.4.tgz#42fe6d5953df06c8064be6f176c3d05aaaa34644" - dependencies: - os-homedir "^1.0.0" - os-tmpdir "^1.0.0" - -p-finally@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" - -p-limit@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.1.0.tgz#b07ff2d9a5d88bec806035895a2bab66a27988bc" - -p-locate@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" - dependencies: - p-limit "^1.1.0" - -p-map@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b" - -pako@~1.0.5: - version "1.0.6" - resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.6.tgz#0101211baa70c4bca4a0f63f2206e97b7dfaf258" - -parallel-transform@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.1.0.tgz#d410f065b05da23081fcd10f28854c29bda33b06" - dependencies: - cyclist "~0.2.2" - inherits "^2.0.3" - readable-stream "^2.1.5" - -param-case@2.1.x: - version "2.1.1" - resolved "https://registry.yarnpkg.com/param-case/-/param-case-2.1.1.tgz#df94fd8cf6531ecf75e6bef9a0858fbc72be2247" - dependencies: - no-case "^2.2.0" - -parse-asn1@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.0.tgz#37c4f9b7ed3ab65c74817b5f2480937fbf97c712" - dependencies: - asn1.js "^4.0.0" - browserify-aes "^1.0.0" - create-hash "^1.1.0" - evp_bytestokey "^1.0.0" - pbkdf2 "^3.0.3" - -parse-glob@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" - dependencies: - glob-base "^0.3.0" - is-dotfile "^1.0.0" - is-extglob "^1.0.0" - is-glob "^2.0.0" - -parse-json@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" - dependencies: - error-ex "^1.2.0" - -parse-passwd@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" - -parseurl@~1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3" - -path-browserify@0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.0.tgz#a0b870729aae214005b7d5032ec2cbbb0fb4451a" - -path-exists@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" - dependencies: - pinkie-promise "^2.0.0" - -path-exists@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - -path-is-inside@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" - -path-key@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" - -path-parse@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1" - -path-to-regexp@0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" - -path-type@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" - dependencies: - graceful-fs "^4.1.2" - pify "^2.0.0" - pinkie-promise "^2.0.0" - -path-type@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" - dependencies: - pify "^2.0.0" - -pbkdf2@^3.0.3: - version "3.0.14" - resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.14.tgz#a35e13c64799b06ce15320f459c230e68e73bade" - dependencies: - create-hash "^1.1.2" - create-hmac "^1.1.4" - ripemd160 "^2.0.1" - safe-buffer "^5.0.1" - sha.js "^2.4.8" - -performance-now@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5" - -performance-now@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" - -pify@^2.0.0, pify@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" - -pify@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" - -pinkie-promise@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" - dependencies: - pinkie "^2.0.0" - -pinkie@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" - -pkg-dir@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" - dependencies: - find-up "^2.1.0" - -portfinder@^1.0.9, portfinder@~1.0.12: - version "1.0.13" - resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.13.tgz#bb32ecd87c27104ae6ee44b5a3ccbf0ebb1aede9" - dependencies: - async "^1.5.2" - debug "^2.2.0" - mkdirp "0.5.x" - -postcss-calc@^5.2.0: - version "5.3.1" - resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-5.3.1.tgz#77bae7ca928ad85716e2fda42f261bf7c1d65b5e" - dependencies: - postcss "^5.0.2" - postcss-message-helpers "^2.0.0" - reduce-css-calc "^1.2.6" - -postcss-colormin@^2.1.8: - version "2.2.2" - resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-2.2.2.tgz#6631417d5f0e909a3d7ec26b24c8a8d1e4f96e4b" - dependencies: - colormin "^1.0.5" - postcss "^5.0.13" - postcss-value-parser "^3.2.3" - -postcss-convert-values@^2.3.4: - version "2.6.1" - resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz#bbd8593c5c1fd2e3d1c322bb925dcae8dae4d62d" - dependencies: - postcss "^5.0.11" - postcss-value-parser "^3.1.2" - -postcss-custom-properties@^6.1.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/postcss-custom-properties/-/postcss-custom-properties-6.2.0.tgz#5d929a7f06e9b84e0f11334194c0ba9a30acfbe9" - dependencies: - balanced-match "^1.0.0" - postcss "^6.0.13" - -postcss-discard-comments@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz#befe89fafd5b3dace5ccce51b76b81514be00e3d" - dependencies: - postcss "^5.0.14" - -postcss-discard-duplicates@^2.0.1: - version "2.1.0" - resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0.tgz#b9abf27b88ac188158a5eb12abcae20263b91932" - dependencies: - postcss "^5.0.4" - -postcss-discard-empty@^2.0.1: - version "2.1.0" - resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz#d2b4bd9d5ced5ebd8dcade7640c7d7cd7f4f92b5" - dependencies: - postcss "^5.0.14" - -postcss-discard-overridden@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz#8b1eaf554f686fb288cd874c55667b0aa3668d58" - dependencies: - postcss "^5.0.16" - -postcss-discard-unused@^2.2.1: - version "2.2.3" - resolved "https://registry.yarnpkg.com/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz#bce30b2cc591ffc634322b5fb3464b6d934f4433" - dependencies: - postcss "^5.0.14" - uniqs "^2.0.0" - -postcss-filter-plugins@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/postcss-filter-plugins/-/postcss-filter-plugins-2.0.2.tgz#6d85862534d735ac420e4a85806e1f5d4286d84c" - dependencies: - postcss "^5.0.4" - uniqid "^4.0.0" - -postcss-load-config@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-1.2.0.tgz#539e9afc9ddc8620121ebf9d8c3673e0ce50d28a" - dependencies: - cosmiconfig "^2.1.0" - object-assign "^4.1.0" - postcss-load-options "^1.2.0" - postcss-load-plugins "^2.3.0" - -postcss-load-options@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/postcss-load-options/-/postcss-load-options-1.2.0.tgz#b098b1559ddac2df04bc0bb375f99a5cfe2b6d8c" - dependencies: - cosmiconfig "^2.1.0" - object-assign "^4.1.0" - -postcss-load-plugins@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/postcss-load-plugins/-/postcss-load-plugins-2.3.0.tgz#745768116599aca2f009fad426b00175049d8d92" - dependencies: - cosmiconfig "^2.1.1" - object-assign "^4.1.0" - -postcss-loader@^2.0.8: - version "2.0.9" - resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-2.0.9.tgz#001fdf7bfeeb159405ee61d1bb8e59b528dbd309" - dependencies: - loader-utils "^1.1.0" - postcss "^6.0.0" - postcss-load-config "^1.2.0" - schema-utils "^0.3.0" - -postcss-merge-idents@^2.1.5: - version "2.1.7" - resolved "https://registry.yarnpkg.com/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz#4c5530313c08e1d5b3bbf3d2bbc747e278eea270" - dependencies: - has "^1.0.1" - postcss "^5.0.10" - postcss-value-parser "^3.1.1" - -postcss-merge-longhand@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2.tgz#23d90cd127b0a77994915332739034a1a4f3d658" - dependencies: - postcss "^5.0.4" - -postcss-merge-rules@^2.0.3: - version "2.1.2" - resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz#d1df5dfaa7b1acc3be553f0e9e10e87c61b5f721" - dependencies: - browserslist "^1.5.2" - caniuse-api "^1.5.2" - postcss "^5.0.4" - postcss-selector-parser "^2.2.2" - vendors "^1.0.0" - -postcss-message-helpers@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/postcss-message-helpers/-/postcss-message-helpers-2.0.0.tgz#a4f2f4fab6e4fe002f0aed000478cdf52f9ba60e" - -postcss-minify-font-values@^1.0.2: - version "1.0.5" - resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz#4b58edb56641eba7c8474ab3526cafd7bbdecb69" - dependencies: - object-assign "^4.0.1" - postcss "^5.0.4" - postcss-value-parser "^3.0.2" - -postcss-minify-gradients@^1.0.1: - version "1.0.5" - resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz#5dbda11373703f83cfb4a3ea3881d8d75ff5e6e1" - dependencies: - postcss "^5.0.12" - postcss-value-parser "^3.3.0" - -postcss-minify-params@^1.0.4: - version "1.2.2" - resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz#ad2ce071373b943b3d930a3fa59a358c28d6f1f3" - dependencies: - alphanum-sort "^1.0.1" - postcss "^5.0.2" - postcss-value-parser "^3.0.2" - uniqs "^2.0.0" - -postcss-minify-selectors@^2.0.4: - version "2.1.1" - resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz#b2c6a98c0072cf91b932d1a496508114311735bf" - dependencies: - alphanum-sort "^1.0.2" - has "^1.0.1" - postcss "^5.0.14" - postcss-selector-parser "^2.0.0" - -postcss-modules-extract-imports@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.1.0.tgz#b614c9720be6816eaee35fb3a5faa1dba6a05ddb" - dependencies: - postcss "^6.0.1" - -postcss-modules-local-by-default@^1.0.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz#f7d80c398c5a393fa7964466bd19500a7d61c069" - dependencies: - css-selector-tokenizer "^0.7.0" - postcss "^6.0.1" - -postcss-modules-scope@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz#d6ea64994c79f97b62a72b426fbe6056a194bb90" - dependencies: - css-selector-tokenizer "^0.7.0" - postcss "^6.0.1" - -postcss-modules-values@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz#ecffa9d7e192518389f42ad0e83f72aec456ea20" - dependencies: - icss-replace-symbols "^1.1.0" - postcss "^6.0.1" - -postcss-normalize-charset@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz#ef9ee71212d7fe759c78ed162f61ed62b5cb93f1" - dependencies: - postcss "^5.0.5" - -postcss-normalize-url@^3.0.7: - version "3.0.8" - resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz#108f74b3f2fcdaf891a2ffa3ea4592279fc78222" - dependencies: - is-absolute-url "^2.0.0" - normalize-url "^1.4.0" - postcss "^5.0.14" - postcss-value-parser "^3.2.3" - -postcss-ordered-values@^2.1.0: - version "2.2.3" - resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz#eec6c2a67b6c412a8db2042e77fe8da43f95c11d" - dependencies: - postcss "^5.0.4" - postcss-value-parser "^3.0.1" - -postcss-reduce-idents@^2.2.2: - version "2.4.0" - resolved "https://registry.yarnpkg.com/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz#c2c6d20cc958284f6abfbe63f7609bf409059ad3" - dependencies: - postcss "^5.0.4" - postcss-value-parser "^3.0.2" - -postcss-reduce-initial@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz#68f80695f045d08263a879ad240df8dd64f644ea" - dependencies: - postcss "^5.0.4" - -postcss-reduce-transforms@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz#ff76f4d8212437b31c298a42d2e1444025771ae1" - dependencies: - has "^1.0.1" - postcss "^5.0.8" - postcss-value-parser "^3.0.1" - -postcss-selector-parser@^2.0.0, postcss-selector-parser@^2.2.2: - version "2.2.3" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz#f9437788606c3c9acee16ffe8d8b16297f27bb90" - dependencies: - flatten "^1.0.2" - indexes-of "^1.0.1" - uniq "^1.0.1" - -postcss-svgo@^2.1.1: - version "2.1.6" - resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-2.1.6.tgz#b6df18aa613b666e133f08adb5219c2684ac108d" - dependencies: - is-svg "^2.0.0" - postcss "^5.0.14" - postcss-value-parser "^3.2.3" - svgo "^0.7.0" - -postcss-unique-selectors@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz#981d57d29ddcb33e7b1dfe1fd43b8649f933ca1d" - dependencies: - alphanum-sort "^1.0.1" - postcss "^5.0.4" - uniqs "^2.0.0" - -postcss-url@^7.1.2: - version "7.3.0" - resolved "https://registry.yarnpkg.com/postcss-url/-/postcss-url-7.3.0.tgz#cf2f45e06743cf43cfea25309f81cbc003dc783f" - dependencies: - mime "^1.4.1" - minimatch "^3.0.4" - mkdirp "^0.5.0" - postcss "^6.0.1" - xxhashjs "^0.2.1" - -postcss-value-parser@^3.0.1, postcss-value-parser@^3.0.2, postcss-value-parser@^3.1.1, postcss-value-parser@^3.1.2, postcss-value-parser@^3.2.3, postcss-value-parser@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz#87f38f9f18f774a4ab4c8a232f5c5ce8872a9d15" - -postcss-zindex@^2.0.1: - version "2.2.0" - resolved "https://registry.yarnpkg.com/postcss-zindex/-/postcss-zindex-2.2.0.tgz#d2109ddc055b91af67fc4cb3b025946639d2af22" - dependencies: - has "^1.0.1" - postcss "^5.0.4" - uniqs "^2.0.0" - -postcss@^5.0.10, postcss@^5.0.11, postcss@^5.0.12, postcss@^5.0.13, postcss@^5.0.14, postcss@^5.0.16, postcss@^5.0.2, postcss@^5.0.4, postcss@^5.0.5, postcss@^5.0.6, postcss@^5.0.8, postcss@^5.2.16: - version "5.2.18" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.18.tgz#badfa1497d46244f6390f58b319830d9107853c5" - dependencies: - chalk "^1.1.3" - js-base64 "^2.1.9" - source-map "^0.5.6" - supports-color "^3.2.3" - -postcss@^6.0.0, postcss@^6.0.1, postcss@^6.0.13: - version "6.0.14" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.14.tgz#5534c72114739e75d0afcf017db853099f562885" - dependencies: - chalk "^2.3.0" - source-map "^0.6.1" - supports-color "^4.4.0" - -prepend-http@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" - -preserve@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" - -pretty-error@^2.0.2: - version "2.1.1" - resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.1.tgz#5f4f87c8f91e5ae3f3ba87ab4cf5e03b1a17f1a3" - dependencies: - renderkid "^2.0.1" - utila "~0.4" - -process-nextick-args@~1.0.6: - version "1.0.7" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" - -process@^0.11.10: - version "0.11.10" - resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" - -promise-inflight@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" - -promise@^7.1.1: - version "7.3.1" - resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" - dependencies: - asap "~2.0.3" - -proxy-addr@~2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.2.tgz#6571504f47bb988ec8180253f85dd7e14952bdec" - dependencies: - forwarded "~0.1.2" - ipaddr.js "1.5.2" - -prr@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" - -pseudomap@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" - -public-encrypt@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.0.tgz#39f699f3a46560dd5ebacbca693caf7c65c18cc6" - dependencies: - bn.js "^4.1.0" - browserify-rsa "^4.0.0" - create-hash "^1.1.0" - parse-asn1 "^5.0.0" - randombytes "^2.0.1" - -pump@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/pump/-/pump-1.0.3.tgz#5dfe8311c33bbf6fc18261f9f34702c47c08a954" - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -pumpify@^1.3.3: - version "1.3.5" - resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.3.5.tgz#1b671c619940abcaeac0ad0e3a3c164be760993b" - dependencies: - duplexify "^3.1.2" - inherits "^2.0.1" - pump "^1.0.0" - -punycode@1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" - -punycode@^1.2.4, punycode@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" - -q@^1.1.2: - version "1.5.1" - resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" - -qs@6.5.1, qs@~6.5.1: - version "6.5.1" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.1.tgz#349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8" - -qs@~6.3.0: - version "6.3.2" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.3.2.tgz#e75bd5f6e268122a2a0e0bda630b2550c166502c" - -qs@~6.4.0: - version "6.4.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" - -query-string@^4.1.0: - version "4.3.4" - resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb" - dependencies: - object-assign "^4.1.0" - strict-uri-encode "^1.0.0" - -querystring-es3@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" - -querystring@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" - -querystringify@0.0.x: - version "0.0.4" - resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-0.0.4.tgz#0cf7f84f9463ff0ae51c4c4b142d95be37724d9c" - -querystringify@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-1.0.0.tgz#6286242112c5b712fa654e526652bf6a13ff05cb" - -randomatic@^1.1.3: - version "1.1.7" - resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.7.tgz#c7abe9cc8b87c0baa876b19fde83fd464797e38c" - dependencies: - is-number "^3.0.0" - kind-of "^4.0.0" - -randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.0.5.tgz#dc009a246b8d09a177b4b7a0ae77bc570f4b1b79" - dependencies: - safe-buffer "^5.1.0" - -randomfill@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.3.tgz#b96b7df587f01dd91726c418f30553b1418e3d62" - dependencies: - randombytes "^2.0.5" - safe-buffer "^5.1.0" - -range-parser@^1.0.3, range-parser@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" - -raw-body@2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.3.2.tgz#bcd60c77d3eb93cde0050295c3f379389bc88f89" - dependencies: - bytes "3.0.0" - http-errors "1.6.2" - iconv-lite "0.4.19" - unpipe "1.0.0" - -raw-loader@^0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/raw-loader/-/raw-loader-0.5.1.tgz#0c3d0beaed8a01c966d9787bf778281252a979aa" - -rc@^1.1.7: - version "1.2.2" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.2.tgz#d8ce9cb57e8d64d9c7badd9876c7c34cbe3c7077" - dependencies: - deep-extend "~0.4.0" - ini "~1.3.0" - minimist "^1.2.0" - strip-json-comments "~2.0.1" - -read-pkg-up@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" - dependencies: - find-up "^1.0.0" - read-pkg "^1.0.0" - -read-pkg-up@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" - dependencies: - find-up "^2.0.0" - read-pkg "^2.0.0" - -read-pkg@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" - dependencies: - load-json-file "^1.0.0" - normalize-package-data "^2.3.2" - path-type "^1.0.0" - -read-pkg@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" - dependencies: - load-json-file "^2.0.0" - normalize-package-data "^2.3.2" - path-type "^2.0.0" - -"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.4, readable-stream@^2.0.6, readable-stream@^2.1.4, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.2.6, readable-stream@^2.2.9, readable-stream@^2.3.3: - version "2.3.3" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.3.tgz#368f2512d79f9d46fdfc71349ae7878bbc1eb95c" - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~1.0.6" - safe-buffer "~5.1.1" - string_decoder "~1.0.3" - util-deprecate "~1.0.1" - -readable-stream@1.0: - version "1.0.34" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "0.0.1" - string_decoder "~0.10.x" - -readdirp@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78" - dependencies: - graceful-fs "^4.1.2" - minimatch "^3.0.2" - readable-stream "^2.0.2" - set-immediate-shim "^1.0.1" - -redent@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" - dependencies: - indent-string "^2.1.0" - strip-indent "^1.0.1" - -reduce-css-calc@^1.2.6: - version "1.3.0" - resolved "https://registry.yarnpkg.com/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz#747c914e049614a4c9cfbba629871ad1d2927716" - dependencies: - balanced-match "^0.4.2" - math-expression-evaluator "^1.2.14" - reduce-function-call "^1.0.1" - -reduce-function-call@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/reduce-function-call/-/reduce-function-call-1.0.2.tgz#5a200bf92e0e37751752fe45b0ab330fd4b6be99" - dependencies: - balanced-match "^0.4.2" - -reflect-metadata@^0.1.2: - version "0.1.10" - resolved "https://registry.yarnpkg.com/reflect-metadata/-/reflect-metadata-0.1.10.tgz#b4f83704416acad89988c9b15635d47e03b9344a" - -regenerate@^1.2.1: - version "1.3.3" - resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.3.tgz#0c336d3980553d755c39b586ae3b20aa49c82b7f" - -regenerator-runtime@^0.11.0: - version "0.11.1" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" - -regex-cache@^0.4.2: - version "0.4.4" - resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd" - dependencies: - is-equal-shallow "^0.1.3" - -regexpu-core@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-1.0.0.tgz#86a763f58ee4d7c2f6b102e4764050de7ed90c6b" - dependencies: - regenerate "^1.2.1" - regjsgen "^0.2.0" - regjsparser "^0.1.4" - -regjsgen@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" - -regjsparser@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c" - dependencies: - jsesc "~0.5.0" - -relateurl@0.2.x: - version "0.2.7" - resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" - -remove-trailing-separator@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" - -renderkid@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-2.0.1.tgz#898cabfc8bede4b7b91135a3ffd323e58c0db319" - dependencies: - css-select "^1.1.0" - dom-converter "~0.1" - htmlparser2 "~3.3.0" - strip-ansi "^3.0.0" - utila "~0.3" - -repeat-element@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a" - -repeat-string@^1.5.2: - version "1.6.1" - resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" - -repeating@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" - dependencies: - is-finite "^1.0.0" - -request@2: - version "2.83.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.83.0.tgz#ca0b65da02ed62935887808e6f510381034e3356" - dependencies: - aws-sign2 "~0.7.0" - aws4 "^1.6.0" - caseless "~0.12.0" - combined-stream "~1.0.5" - extend "~3.0.1" - forever-agent "~0.6.1" - form-data "~2.3.1" - har-validator "~5.0.3" - hawk "~6.0.2" - http-signature "~1.2.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.17" - oauth-sign "~0.8.2" - performance-now "^2.1.0" - qs "~6.5.1" - safe-buffer "^5.1.1" - stringstream "~0.0.5" - tough-cookie "~2.3.3" - tunnel-agent "^0.6.0" - uuid "^3.1.0" - -request@2.81.0: - version "2.81.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0" - dependencies: - aws-sign2 "~0.6.0" - aws4 "^1.2.1" - caseless "~0.12.0" - combined-stream "~1.0.5" - extend "~3.0.0" - forever-agent "~0.6.1" - form-data "~2.1.1" - har-validator "~4.2.1" - hawk "~3.1.3" - http-signature "~1.1.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.7" - oauth-sign "~0.8.1" - performance-now "^0.2.0" - qs "~6.4.0" - safe-buffer "^5.0.1" - stringstream "~0.0.4" - tough-cookie "~2.3.0" - tunnel-agent "^0.6.0" - uuid "^3.0.0" - -request@~2.79.0: - version "2.79.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.79.0.tgz#4dfe5bf6be8b8cdc37fcf93e04b65577722710de" - dependencies: - aws-sign2 "~0.6.0" - aws4 "^1.2.1" - caseless "~0.11.0" - combined-stream "~1.0.5" - extend "~3.0.0" - forever-agent "~0.6.1" - form-data "~2.1.1" - har-validator "~2.0.6" - hawk "~3.1.3" - http-signature "~1.1.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.7" - oauth-sign "~0.8.1" - qs "~6.3.0" - stringstream "~0.0.4" - tough-cookie "~2.3.0" - tunnel-agent "~0.4.1" - uuid "^3.0.0" - -require-directory@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - -require-from-string@^1.1.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-1.2.1.tgz#529c9ccef27380adfec9a2f965b649bbee636418" - -require-main-filename@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" - -requires-port@1.0.x, requires-port@1.x.x, requires-port@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" - -resolve-cwd@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" - dependencies: - resolve-from "^3.0.0" - -resolve-from@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" - -resolve@^1.1.7, resolve@^1.3.2: - version "1.5.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.5.0.tgz#1f09acce796c9a762579f31b2c1cc4c3cddf9f36" - dependencies: - path-parse "^1.0.5" - -right-align@^0.1.1: - version "0.1.3" - resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef" - dependencies: - align-text "^0.1.1" - -rimraf@2, rimraf@^2.2.8, rimraf@^2.5.1, rimraf@^2.5.4, rimraf@^2.6.1: - version "2.6.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" - dependencies: - glob "^7.0.5" - -ripemd160@^2.0.0, ripemd160@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.1.tgz#0f4584295c53a3628af7e6d79aca21ce57d1c6e7" - dependencies: - hash-base "^2.0.0" - inherits "^2.0.1" - -run-queue@^1.0.0, run-queue@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" - dependencies: - aproba "^1.1.1" - -rxjs@^5.4.2, rxjs@^5.5.2: - version "5.5.5" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-5.5.5.tgz#e164f11d38eaf29f56f08c3447f74ff02dd84e97" - dependencies: - symbol-observable "1.0.1" - -safe-buffer@5.1.1, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" - -sass-graph@^2.2.4: - version "2.2.4" - resolved "https://registry.yarnpkg.com/sass-graph/-/sass-graph-2.2.4.tgz#13fbd63cd1caf0908b9fd93476ad43a51d1e0b49" - dependencies: - glob "^7.0.0" - lodash "^4.0.0" - scss-tokenizer "^0.2.3" - yargs "^7.0.0" - -sass-loader@^6.0.3: - version "6.0.6" - resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-6.0.6.tgz#e9d5e6c1f155faa32a4b26d7a9b7107c225e40f9" - dependencies: - async "^2.1.5" - clone-deep "^0.3.0" - loader-utils "^1.0.1" - lodash.tail "^4.1.1" - pify "^3.0.0" - -sax@0.5.x: - version "0.5.8" - resolved "https://registry.yarnpkg.com/sax/-/sax-0.5.8.tgz#d472db228eb331c2506b0e8c15524adb939d12c1" - -sax@~1.2.1: - version "1.2.4" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" - -schema-utils@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-0.3.0.tgz#f5877222ce3e931edae039f17eb3716e7137f8cf" - dependencies: - ajv "^5.0.0" - -scss-tokenizer@^0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz#8eb06db9a9723333824d3f5530641149847ce5d1" - dependencies: - js-base64 "^2.1.8" - source-map "^0.4.2" - -select-hose@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" - -selfsigned@^1.9.1: - version "1.10.1" - resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.1.tgz#bf8cb7b83256c4551e31347c6311778db99eec52" - dependencies: - node-forge "0.6.33" - -semver-dsl@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/semver-dsl/-/semver-dsl-1.0.1.tgz#d3678de5555e8a61f629eed025366ae5f27340a0" - dependencies: - semver "^5.3.0" - -"semver@2 || 3 || 4 || 5", semver@^5.1.0, semver@^5.3.0: - version "5.4.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e" - -semver@~5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" - -send@0.16.1: - version "0.16.1" - resolved "https://registry.yarnpkg.com/send/-/send-0.16.1.tgz#a70e1ca21d1382c11d0d9f6231deb281080d7ab3" - dependencies: - debug "2.6.9" - depd "~1.1.1" - destroy "~1.0.4" - encodeurl "~1.0.1" - escape-html "~1.0.3" - etag "~1.8.1" - fresh "0.5.2" - http-errors "~1.6.2" - mime "1.4.1" - ms "2.0.0" - on-finished "~2.3.0" - range-parser "~1.2.0" - statuses "~1.3.1" - -serialize-javascript@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.4.0.tgz#7c958514db6ac2443a8abc062dc9f7886a7f6005" - -serve-index@^1.7.2: - version "1.9.1" - resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" - dependencies: - accepts "~1.3.4" - batch "0.6.1" - debug "2.6.9" - escape-html "~1.0.3" - http-errors "~1.6.2" - mime-types "~2.1.17" - parseurl "~1.3.2" - -serve-static@1.13.1: - version "1.13.1" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.13.1.tgz#4c57d53404a761d8f2e7c1e8a18a47dbf278a719" - dependencies: - encodeurl "~1.0.1" - escape-html "~1.0.3" - parseurl "~1.3.2" - send "0.16.1" - -set-blocking@^2.0.0, set-blocking@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" - -set-immediate-shim@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" - -setimmediate@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" - -setprototypeof@1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.3.tgz#66567e37043eeb4f04d91bd658c0cbefb55b8e04" - -setprototypeof@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" - -sha.js@^2.4.0, sha.js@^2.4.8: - version "2.4.9" - resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.9.tgz#98f64880474b74f4a38b8da9d3c0f2d104633e7d" - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - -shallow-clone@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-0.1.2.tgz#5909e874ba77106d73ac414cfec1ffca87d97060" - dependencies: - is-extendable "^0.1.1" - kind-of "^2.0.1" - lazy-cache "^0.2.3" - mixin-object "^2.0.1" - -shebang-command@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" - dependencies: - shebang-regex "^1.0.0" - -shebang-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" - -signal-exit@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" - -silent-error@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/silent-error/-/silent-error-1.1.0.tgz#2209706f1c850a9f1d10d0d840918b46f26e1bc9" - dependencies: - debug "^2.2.0" - -sntp@1.x.x: - version "1.0.9" - resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198" - dependencies: - hoek "2.x.x" - -sntp@2.x.x: - version "2.1.0" - resolved "https://registry.yarnpkg.com/sntp/-/sntp-2.1.0.tgz#2c6cec14fedc2222739caf9b5c3d85d1cc5a2cc8" - dependencies: - hoek "4.x.x" - -sockjs-client@1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.1.4.tgz#5babe386b775e4cf14e7520911452654016c8b12" - dependencies: - debug "^2.6.6" - eventsource "0.1.6" - faye-websocket "~0.11.0" - inherits "^2.0.1" - json3 "^3.3.2" - url-parse "^1.1.8" - -sockjs@0.3.18: - version "0.3.18" - resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.18.tgz#d9b289316ca7df77595ef299e075f0f937eb4207" - dependencies: - faye-websocket "^0.10.0" - uuid "^2.0.2" - -sort-keys@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad" - dependencies: - is-plain-obj "^1.0.0" - -source-list-map@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.0.tgz#aaa47403f7b245a92fbc97ea08f250d6087ed085" - -source-list-map@~0.1.7: - version "0.1.8" - resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-0.1.8.tgz#c550b2ab5427f6b3f21f5afead88c4f5587b2106" - -source-map-loader@^0.2.0: - version "0.2.3" - resolved "https://registry.yarnpkg.com/source-map-loader/-/source-map-loader-0.2.3.tgz#d4b0c8cd47d54edce3e6bfa0f523f452b5b0e521" - dependencies: - async "^2.5.0" - loader-utils "~0.2.2" - source-map "~0.6.1" - -source-map-support@^0.4.1, source-map-support@^0.4.2: - version "0.4.18" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" - dependencies: - source-map "^0.5.6" - -source-map-support@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.0.tgz#2018a7ad2bdf8faf2691e5fddab26bed5a2bacab" - dependencies: - source-map "^0.6.0" - -source-map@0.1.x: - version "0.1.43" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.1.43.tgz#c24bc146ca517c1471f5dacbe2571b2b7f9e3346" - dependencies: - amdefine ">=0.0.4" - -source-map@0.5.x, source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.1: - version "0.5.7" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" - -source-map@^0.4.2, source-map@~0.4.1: - version "0.4.4" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" - dependencies: - amdefine ">=0.0.4" - -source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" - -spdx-correct@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-1.0.2.tgz#4b3073d933ff51f3912f03ac5519498a4150db40" - dependencies: - spdx-license-ids "^1.0.2" - -spdx-expression-parse@~1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz#9bdf2f20e1f40ed447fbe273266191fced51626c" - -spdx-license-ids@^1.0.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz#c9df7a3424594ade6bd11900d596696dc06bac57" - -spdy-transport@^2.0.18: - version "2.0.20" - resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-2.0.20.tgz#735e72054c486b2354fe89e702256004a39ace4d" - dependencies: - debug "^2.6.8" - detect-node "^2.0.3" - hpack.js "^2.1.6" - obuf "^1.1.1" - readable-stream "^2.2.9" - safe-buffer "^5.0.1" - wbuf "^1.7.2" - -spdy@^3.4.1: - version "3.4.7" - resolved "https://registry.yarnpkg.com/spdy/-/spdy-3.4.7.tgz#42ff41ece5cc0f99a3a6c28aabb73f5c3b03acbc" - dependencies: - debug "^2.6.8" - handle-thing "^1.2.5" - http-deceiver "^1.2.7" - safe-buffer "^5.0.1" - select-hose "^2.0.0" - spdy-transport "^2.0.18" - -sprintf-js@^1.0.3: - version "1.1.1" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.1.tgz#36be78320afe5801f6cea3ee78b6e5aab940ea0c" - -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - -sshpk@^1.7.0: - version "1.13.1" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.13.1.tgz#512df6da6287144316dc4c18fe1cf1d940739be3" - dependencies: - asn1 "~0.2.3" - assert-plus "^1.0.0" - dashdash "^1.12.0" - getpass "^0.1.1" - optionalDependencies: - bcrypt-pbkdf "^1.0.0" - ecc-jsbn "~0.1.1" - jsbn "~0.1.0" - tweetnacl "~0.14.0" - -ssri@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-5.0.0.tgz#13c19390b606c821f2a10d02b351c1729b94d8cf" - dependencies: - safe-buffer "^5.1.0" - -"statuses@>= 1.3.1 < 2": - version "1.4.0" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.4.0.tgz#bb73d446da2796106efcc1b601a253d6c46bd087" - -statuses@~1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.3.1.tgz#faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e" - -stdout-stream@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/stdout-stream/-/stdout-stream-1.4.0.tgz#a2c7c8587e54d9427ea9edb3ac3f2cd522df378b" - dependencies: - readable-stream "^2.0.1" - -stream-browserify@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.1.tgz#66266ee5f9bdb9940a4e4514cafb43bb71e5c9db" - dependencies: - inherits "~2.0.1" - readable-stream "^2.0.2" - -stream-each@^1.1.0: - version "1.2.2" - resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.2.tgz#8e8c463f91da8991778765873fe4d960d8f616bd" - dependencies: - end-of-stream "^1.1.0" - stream-shift "^1.0.0" - -stream-http@^2.7.2: - version "2.7.2" - resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.7.2.tgz#40a050ec8dc3b53b33d9909415c02c0bf1abfbad" - dependencies: - builtin-status-codes "^3.0.0" - inherits "^2.0.1" - readable-stream "^2.2.6" - to-arraybuffer "^1.0.0" - xtend "^4.0.0" - -stream-shift@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952" - -strict-uri-encode@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" - -string-width@^1.0.1, string-width@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" - dependencies: - code-point-at "^1.0.0" - is-fullwidth-code-point "^1.0.0" - strip-ansi "^3.0.0" - -string-width@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" - dependencies: - is-fullwidth-code-point "^2.0.0" - strip-ansi "^4.0.0" - -string_decoder@^1.0.0, string_decoder@~1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.3.tgz#0fc67d7c141825de94282dd536bec6b9bce860ab" - dependencies: - safe-buffer "~5.1.0" - -string_decoder@~0.10.x: - version "0.10.31" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" - -stringstream@~0.0.4, stringstream@~0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" - -strip-ansi@^3.0.0, strip-ansi@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" - dependencies: - ansi-regex "^2.0.0" - -strip-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" - dependencies: - ansi-regex "^3.0.0" - -strip-bom@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" - dependencies: - is-utf8 "^0.2.0" - -strip-bom@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" - -strip-eof@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" - -strip-indent@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" - dependencies: - get-stdin "^4.0.1" - -strip-json-comments@^2.0.0, strip-json-comments@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - -style-loader@^0.13.1: - version "0.13.2" - resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.13.2.tgz#74533384cf698c7104c7951150b49717adc2f3bb" - dependencies: - loader-utils "^1.0.2" - -stylus-loader@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/stylus-loader/-/stylus-loader-3.0.1.tgz#77f4b34fd030d25b2617bcf5513db5b0730c4089" - dependencies: - loader-utils "^1.0.2" - lodash.clonedeep "^4.5.0" - when "~3.6.x" - -stylus@^0.54.5: - version "0.54.5" - resolved "https://registry.yarnpkg.com/stylus/-/stylus-0.54.5.tgz#42b9560931ca7090ce8515a798ba9e6aa3d6dc79" - dependencies: - css-parse "1.7.x" - debug "*" - glob "7.0.x" - mkdirp "0.5.x" - sax "0.5.x" - source-map "0.1.x" - -supports-color@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" - -supports-color@^3.2.3: - version "3.2.3" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" - dependencies: - has-flag "^1.0.0" - -supports-color@^4.0.0, supports-color@^4.2.1, supports-color@^4.4.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.5.0.tgz#be7a0de484dec5c5cddf8b3d59125044912f635b" - dependencies: - has-flag "^2.0.0" - -svgo@^0.7.0: - version "0.7.2" - resolved "https://registry.yarnpkg.com/svgo/-/svgo-0.7.2.tgz#9f5772413952135c6fefbf40afe6a4faa88b4bb5" - dependencies: - coa "~1.0.1" - colors "~1.1.2" - csso "~2.3.1" - js-yaml "~3.7.0" - mkdirp "~0.5.1" - sax "~1.2.1" - whet.extend "~0.9.9" - -symbol-observable@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.1.tgz#8340fc4702c3122df5d22288f88283f513d3fdd4" - -tapable@^0.2.7: - version "0.2.8" - resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.2.8.tgz#99372a5c999bf2df160afc0d74bed4f47948cd22" - -tar-pack@^3.4.0: - version "3.4.1" - resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.4.1.tgz#e1dbc03a9b9d3ba07e896ad027317eb679a10a1f" - dependencies: - debug "^2.2.0" - fstream "^1.0.10" - fstream-ignore "^1.0.5" - once "^1.3.3" - readable-stream "^2.1.4" - rimraf "^2.5.1" - tar "^2.2.1" - uid-number "^0.0.6" - -tar@^2.0.0, tar@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1" - dependencies: - block-stream "*" - fstream "^1.0.2" - inherits "2" - -through2@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.3.tgz#0004569b37c7c74ba39c43f3ced78d1ad94140be" - dependencies: - readable-stream "^2.1.5" - xtend "~4.0.1" - -through@X.X.X: - version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - -thunky@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/thunky/-/thunky-0.1.0.tgz#bf30146824e2b6e67b0f2d7a4ac8beb26908684e" - -time-stamp@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-2.0.0.tgz#95c6a44530e15ba8d6f4a3ecb8c3a3fac46da357" - -timers-browserify@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.4.tgz#96ca53f4b794a5e7c0e1bd7cc88a372298fa01e6" - dependencies: - setimmediate "^1.0.4" - -to-arraybuffer@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" - -to-fast-properties@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" - -toposort@^1.0.0: - version "1.0.6" - resolved "https://registry.yarnpkg.com/toposort/-/toposort-1.0.6.tgz#c31748e55d210effc00fdcdc7d6e68d7d7bb9cec" - -tough-cookie@~2.3.0, tough-cookie@~2.3.3: - version "2.3.3" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.3.tgz#0b618a5565b6dea90bf3425d04d55edc475a7561" - dependencies: - punycode "^1.4.1" - -tree-kill@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.0.tgz#5846786237b4239014f05db156b643212d4c6f36" - -trim-newlines@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" - -trim-right@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" - -"true-case-path@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/true-case-path/-/true-case-path-1.0.2.tgz#7ec91130924766c7f573be3020c34f8fdfd00d62" - dependencies: - glob "^6.0.4" - -ts-node@~4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-4.0.1.tgz#4d368088b50c382d78285c029784ea0f32a4eb5c" - dependencies: - "@types/arrify" "^1.0.1" - "@types/diff" "^3.2.1" - "@types/minimist" "^1.2.0" - "@types/mkdirp" "^0.5.0" - "@types/node" "^8.0.27" - "@types/source-map-support" "^0.4.0" - "@types/v8flags" types/npm-v8flags#de224ae1cd5fd7dbb4e7158a6cc7a29e5315930d - "@types/yn" types/npm-yn#ca75f6c82940fae6a06fb41d2d37a6aa9b4ea8e9 - arrify "^1.0.0" - chalk "^2.3.0" - diff "^3.1.0" - make-error "^1.1.1" - minimist "^1.2.0" - mkdirp "^0.5.1" - source-map-support "^0.5.0" - tsconfig "^7.0.0" - v8flags "^3.0.0" - yn "^2.0.0" - -tsconfig@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/tsconfig/-/tsconfig-7.0.0.tgz#84538875a4dc216e5c4a5432b3a4dec3d54e91b7" - dependencies: - "@types/strip-bom" "^3.0.0" - "@types/strip-json-comments" "0.0.30" - strip-bom "^3.0.0" - strip-json-comments "^2.0.0" - -tsickle@^0.25.5: - version "0.25.5" - resolved "https://registry.yarnpkg.com/tsickle/-/tsickle-0.25.5.tgz#2891d29f97c4aab1306e06378d8496d1765a4bfe" - dependencies: - minimist "^1.2.0" - mkdirp "^0.5.1" - source-map "^0.5.6" - source-map-support "^0.4.2" - -tslib@^1.7.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.8.1.tgz#6946af2d1d651a7b1863b531d6e5afa41aa44eac" - -tslint@~5.8.0: - version "5.8.0" - resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.8.0.tgz#1f49ad5b2e77c76c3af4ddcae552ae4e3612eb13" - dependencies: - babel-code-frame "^6.22.0" - builtin-modules "^1.1.1" - chalk "^2.1.0" - commander "^2.9.0" - diff "^3.2.0" - glob "^7.1.1" - minimatch "^3.0.4" - resolve "^1.3.2" - semver "^5.3.0" - tslib "^1.7.1" - tsutils "^2.12.1" - -tsutils@^2.12.1: - version "2.13.0" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-2.13.0.tgz#0f52b6aabbc4216e72796b66db028c6cf173e144" - dependencies: - tslib "^1.7.1" - -tty-browserify@0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" - -tunnel-agent@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" - dependencies: - safe-buffer "^5.0.1" - -tunnel-agent@~0.4.1: - version "0.4.3" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.4.3.tgz#6373db76909fe570e08d73583365ed828a74eeeb" - -tweetnacl@^0.14.3, tweetnacl@~0.14.0: - version "0.14.5" - resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" - -type-is@~1.6.15: - version "1.6.15" - resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.15.tgz#cab10fb4909e441c82842eafe1ad646c81804410" - dependencies: - media-typer "0.3.0" - mime-types "~2.1.15" - -typedarray@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" - -typescript@2.4.2: - version "2.4.2" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.4.2.tgz#f8395f85d459276067c988aa41837a8f82870844" - -typescript@~2.6.1: - version "2.6.2" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.6.2.tgz#3c5b6fd7f6de0914269027f03c0946758f7673a4" - -uglify-es@^3.2.0: - version "3.2.2" - resolved "https://registry.yarnpkg.com/uglify-es/-/uglify-es-3.2.2.tgz#15c62b7775002c81b7987a1c49ecd3f126cace73" - dependencies: - commander "~2.12.1" - source-map "~0.6.1" - -uglify-js@3.2.x: - version "3.2.2" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.2.2.tgz#870e4b34ed733d179284f9998efd3293f7fd73f6" - dependencies: - commander "~2.12.1" - source-map "~0.6.1" - -uglify-js@^2.8.29: - version "2.8.29" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd" - dependencies: - source-map "~0.5.1" - yargs "~3.10.0" - optionalDependencies: - uglify-to-browserify "~1.0.0" - -uglify-to-browserify@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" - -uglifyjs-webpack-plugin@^0.4.6: - version "0.4.6" - resolved "https://registry.yarnpkg.com/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-0.4.6.tgz#b951f4abb6bd617e66f63eb891498e391763e309" - dependencies: - source-map "^0.5.6" - uglify-js "^2.8.29" - webpack-sources "^1.0.1" - -uglifyjs-webpack-plugin@~1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.1.3.tgz#3fb3d7e1da08839a737dd15f73b6712535254c22" - dependencies: - cacache "^10.0.0" - find-cache-dir "^1.0.0" - schema-utils "^0.3.0" - serialize-javascript "^1.4.0" - source-map "^0.6.1" - uglify-es "^3.2.0" - webpack-sources "^1.0.1" - worker-farm "^1.4.1" - -uid-number@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" - -uniq@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" - -uniqid@^4.0.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/uniqid/-/uniqid-4.1.1.tgz#89220ddf6b751ae52b5f72484863528596bb84c1" - dependencies: - macaddress "^0.2.8" - -uniqs@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02" - -unique-filename@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.0.tgz#d05f2fe4032560871f30e93cbe735eea201514f3" - dependencies: - unique-slug "^2.0.0" - -unique-slug@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.0.tgz#db6676e7c7cc0629878ff196097c78855ae9f4ab" - dependencies: - imurmurhash "^0.1.4" - -universalify@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.1.tgz#fa71badd4437af4c148841e3b3b165f9e9e590b7" - -unpipe@1.0.0, unpipe@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" - -upper-case@^1.1.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598" - -url-loader@^0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-0.6.2.tgz#a007a7109620e9d988d14bce677a1decb9a993f7" - dependencies: - loader-utils "^1.0.2" - mime "^1.4.1" - schema-utils "^0.3.0" - -url-parse@1.0.x: - version "1.0.5" - resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.0.5.tgz#0854860422afdcfefeb6c965c662d4800169927b" - dependencies: - querystringify "0.0.x" - requires-port "1.0.x" - -url-parse@^1.1.8: - version "1.2.0" - resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.2.0.tgz#3a19e8aaa6d023ddd27dcc44cb4fc8f7fec23986" - dependencies: - querystringify "~1.0.0" - requires-port "~1.0.0" - -url@^0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" - dependencies: - punycode "1.3.2" - querystring "0.2.0" - -util-deprecate@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - -util@0.10.3, util@^0.10.3: - version "0.10.3" - resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" - dependencies: - inherits "2.0.1" - -utila@~0.3: - version "0.3.3" - resolved "https://registry.yarnpkg.com/utila/-/utila-0.3.3.tgz#d7e8e7d7e309107092b05f8d9688824d633a4226" - -utila@~0.4: - version "0.4.0" - resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" - -utils-merge@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" - -uuid@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.3.tgz#67e2e863797215530dff318e5bf9dcebfd47b21a" - -uuid@^3.0.0, uuid@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.1.0.tgz#3dd3d3e790abc24d7b0d3a034ffababe28ebbc04" - -v8flags@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-3.0.1.tgz#dce8fc379c17d9f2c9e9ed78d89ce00052b1b76b" - dependencies: - homedir-polyfill "^1.0.1" - -validate-npm-package-license@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc" - dependencies: - spdx-correct "~1.0.0" - spdx-expression-parse "~1.0.0" - -vary@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" - -vendors@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.1.tgz#37ad73c8ee417fb3d580e785312307d274847f22" - -verror@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" - dependencies: - assert-plus "^1.0.0" - core-util-is "1.0.2" - extsprintf "^1.2.0" - -vlq@^0.2.1: - version "0.2.3" - resolved "https://registry.yarnpkg.com/vlq/-/vlq-0.2.3.tgz#8f3e4328cf63b1540c0d67e1b2778386f8975b26" - -vm-browserify@0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-0.0.4.tgz#5d7ea45bbef9e4a6ff65f95438e0a87c357d5a73" - dependencies: - indexof "0.0.1" - -watchpack@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.4.0.tgz#4a1472bcbb952bd0a9bb4036801f954dfb39faac" - dependencies: - async "^2.1.2" - chokidar "^1.7.0" - graceful-fs "^4.1.2" - -wbuf@^1.1.0, wbuf@^1.7.2: - version "1.7.2" - resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.2.tgz#d697b99f1f59512df2751be42769c1580b5801fe" - dependencies: - minimalistic-assert "^1.0.0" - -webpack-core@^0.6.8: - version "0.6.9" - resolved "https://registry.yarnpkg.com/webpack-core/-/webpack-core-0.6.9.tgz#fc571588c8558da77be9efb6debdc5a3b172bdc2" - dependencies: - source-list-map "~0.1.7" - source-map "~0.4.1" - -webpack-dev-middleware@^1.11.0, webpack-dev-middleware@~1.12.0: - version "1.12.2" - resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-1.12.2.tgz#f8fc1120ce3b4fc5680ceecb43d777966b21105e" - dependencies: - memory-fs "~0.4.1" - mime "^1.5.0" - path-is-absolute "^1.0.0" - range-parser "^1.0.3" - time-stamp "^2.0.0" - -webpack-dev-server@~2.9.3: - version "2.9.7" - resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-2.9.7.tgz#100ad6a14775478924d417ca6dcfb9d52a98faed" - dependencies: - ansi-html "0.0.7" - array-includes "^3.0.3" - bonjour "^3.5.0" - chokidar "^1.6.0" - compression "^1.5.2" - connect-history-api-fallback "^1.3.0" - debug "^3.1.0" - del "^3.0.0" - express "^4.16.2" - html-entities "^1.2.0" - http-proxy-middleware "~0.17.4" - import-local "^0.1.1" - internal-ip "1.2.0" - ip "^1.1.5" - killable "^1.0.0" - loglevel "^1.4.1" - opn "^5.1.0" - portfinder "^1.0.9" - selfsigned "^1.9.1" - serve-index "^1.7.2" - sockjs "0.3.18" - sockjs-client "1.1.4" - spdy "^3.4.1" - strip-ansi "^3.0.1" - supports-color "^4.2.1" - webpack-dev-middleware "^1.11.0" - yargs "^6.6.0" - -webpack-merge@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-4.1.1.tgz#f1197a0a973e69c6fbeeb6d658219aa8c0c13555" - dependencies: - lodash "^4.17.4" - -webpack-sources@^1.0.0, webpack-sources@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.1.0.tgz#a101ebae59d6507354d71d8013950a3a8b7a5a54" - dependencies: - source-list-map "^2.0.0" - source-map "~0.6.1" - -webpack-subresource-integrity@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/webpack-subresource-integrity/-/webpack-subresource-integrity-1.0.3.tgz#c0606d40090b070cde428bec8df3603216e472eb" - dependencies: - webpack-core "^0.6.8" - -webpack@~3.10.0: - version "3.10.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-3.10.0.tgz#5291b875078cf2abf42bdd23afe3f8f96c17d725" - dependencies: - acorn "^5.0.0" - acorn-dynamic-import "^2.0.0" - ajv "^5.1.5" - ajv-keywords "^2.0.0" - async "^2.1.2" - enhanced-resolve "^3.4.0" - escope "^3.6.0" - interpret "^1.0.0" - json-loader "^0.5.4" - json5 "^0.5.1" - loader-runner "^2.3.0" - loader-utils "^1.1.0" - memory-fs "~0.4.1" - mkdirp "~0.5.0" - node-libs-browser "^2.0.0" - source-map "^0.5.3" - supports-color "^4.2.1" - tapable "^0.2.7" - uglifyjs-webpack-plugin "^0.4.6" - watchpack "^1.4.0" - webpack-sources "^1.0.1" - yargs "^8.0.2" - -websocket-driver@>=0.5.1: - version "0.7.0" - resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.0.tgz#0caf9d2d755d93aee049d4bdd0d3fe2cca2a24eb" - dependencies: - http-parser-js ">=0.4.0" - websocket-extensions ">=0.1.1" - -websocket-extensions@>=0.1.1: - version "0.1.3" - resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.3.tgz#5d2ff22977003ec687a4b87073dfbbac146ccf29" - -when@~3.6.x: - version "3.6.4" - resolved "https://registry.yarnpkg.com/when/-/when-3.6.4.tgz#473b517ec159e2b85005497a13983f095412e34e" - -whet.extend@~0.9.9: - version "0.9.9" - resolved "https://registry.yarnpkg.com/whet.extend/-/whet.extend-0.9.9.tgz#f877d5bf648c97e5aa542fadc16d6a259b9c11a1" - -which-module@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" - -which-module@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" - -which@1, which@^1.2.9: - version "1.3.0" - resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a" - dependencies: - isexe "^2.0.0" - -wide-align@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.2.tgz#571e0f1b0604636ebc0dfc21b0339bbe31341710" - dependencies: - string-width "^1.0.2" - -window-size@0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" - -wordwrap@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" - -worker-farm@^1.4.1: - version "1.5.2" - resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.5.2.tgz#32b312e5dc3d5d45d79ef44acc2587491cd729ae" - dependencies: - errno "^0.1.4" - xtend "^4.0.1" - -wrap-ansi@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" - dependencies: - string-width "^1.0.1" - strip-ansi "^3.0.1" - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - -xml-char-classes@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/xml-char-classes/-/xml-char-classes-1.0.0.tgz#64657848a20ffc5df583a42ad8a277b4512bbc4d" - -xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" - -xxhashjs@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/xxhashjs/-/xxhashjs-0.2.1.tgz#9bbe9be896142976dfa34c061b2d068c43d30de0" - dependencies: - cuint latest - -y18n@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" - -yallist@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" - -yargs-parser@^4.2.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-4.2.1.tgz#29cceac0dc4f03c6c87b4a9f217dd18c9f74871c" - dependencies: - camelcase "^3.0.0" - -yargs-parser@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-5.0.0.tgz#275ecf0d7ffe05c77e64e7c86e4cd94bf0e1228a" - dependencies: - camelcase "^3.0.0" - -yargs-parser@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-7.0.0.tgz#8d0ac42f16ea55debd332caf4c4038b3e3f5dfd9" - dependencies: - camelcase "^4.1.0" - -yargs@^6.6.0: - version "6.6.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-6.6.0.tgz#782ec21ef403345f830a808ca3d513af56065208" - dependencies: - camelcase "^3.0.0" - cliui "^3.2.0" - decamelize "^1.1.1" - get-caller-file "^1.0.1" - os-locale "^1.4.0" - read-pkg-up "^1.0.1" - require-directory "^2.1.1" - require-main-filename "^1.0.1" - set-blocking "^2.0.0" - string-width "^1.0.2" - which-module "^1.0.0" - y18n "^3.2.1" - yargs-parser "^4.2.0" - -yargs@^7.0.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-7.1.0.tgz#6ba318eb16961727f5d284f8ea003e8d6154d0c8" - dependencies: - camelcase "^3.0.0" - cliui "^3.2.0" - decamelize "^1.1.1" - get-caller-file "^1.0.1" - os-locale "^1.4.0" - read-pkg-up "^1.0.1" - require-directory "^2.1.1" - require-main-filename "^1.0.1" - set-blocking "^2.0.0" - string-width "^1.0.2" - which-module "^1.0.0" - y18n "^3.2.1" - yargs-parser "^5.0.0" - -yargs@^8.0.2: - version "8.0.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-8.0.2.tgz#6299a9055b1cefc969ff7e79c1d918dceb22c360" - dependencies: - camelcase "^4.1.0" - cliui "^3.2.0" - decamelize "^1.1.1" - get-caller-file "^1.0.1" - os-locale "^2.0.0" - read-pkg-up "^2.0.0" - require-directory "^2.1.1" - require-main-filename "^1.0.1" - set-blocking "^2.0.0" - string-width "^2.0.0" - which-module "^2.0.0" - y18n "^3.2.1" - yargs-parser "^7.0.0" - -yargs@~3.10.0: - version "3.10.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1" - dependencies: - camelcase "^1.0.2" - cliui "^2.1.0" - decamelize "^1.0.0" - window-size "0.1.0" - -yn@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/yn/-/yn-2.0.0.tgz#e5adabc8acf408f6385fc76495684c88e6af689a" - -zone.js@^0.8.14, zone.js@^0.8.17: - version "0.8.18" - resolved "https://registry.yarnpkg.com/zone.js/-/zone.js-0.8.18.tgz#8cecb3977fcd1b3090562ff4570e2847e752b48d" diff --git a/dmp-javascript-engine/.classpath b/dmp-javascript-engine/.classpath deleted file mode 100644 index a47b97f01..000000000 --- a/dmp-javascript-engine/.classpath +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/dmp-javascript-engine/.gitignore b/dmp-javascript-engine/.gitignore deleted file mode 100644 index 09e3bc9b2..000000000 --- a/dmp-javascript-engine/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -/bin/ -/target/ diff --git a/dmp-javascript-engine/.project b/dmp-javascript-engine/.project deleted file mode 100644 index 1901da381..000000000 --- a/dmp-javascript-engine/.project +++ /dev/null @@ -1,23 +0,0 @@ - - - dmp-javascript-engine - - - - - - org.eclipse.jdt.core.javabuilder - - - - - org.eclipse.m2e.core.maven2Builder - - - - - - org.eclipse.m2e.core.maven2Nature - org.eclipse.jdt.core.javanature - - diff --git a/dmp-javascript-engine/.settings/org.eclipse.jdt.core.prefs b/dmp-javascript-engine/.settings/org.eclipse.jdt.core.prefs deleted file mode 100644 index 672496e10..000000000 --- a/dmp-javascript-engine/.settings/org.eclipse.jdt.core.prefs +++ /dev/null @@ -1,12 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 -org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.8 -org.eclipse.jdt.core.compiler.debug.lineNumber=generate -org.eclipse.jdt.core.compiler.debug.localVariable=generate -org.eclipse.jdt.core.compiler.debug.sourceFile=generate -org.eclipse.jdt.core.compiler.problem.assertIdentifier=error -org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning -org.eclipse.jdt.core.compiler.source=1.8 diff --git a/dmp-javascript-engine/.settings/org.eclipse.m2e.core.prefs b/dmp-javascript-engine/.settings/org.eclipse.m2e.core.prefs deleted file mode 100644 index f897a7f1c..000000000 --- a/dmp-javascript-engine/.settings/org.eclipse.m2e.core.prefs +++ /dev/null @@ -1,4 +0,0 @@ -activeProfiles= -eclipse.preferences.version=1 -resolveWorkspaceProjects=true -version=1 diff --git a/dmp-javascript-engine/pom.xml b/dmp-javascript-engine/pom.xml deleted file mode 100644 index 977b6a087..000000000 --- a/dmp-javascript-engine/pom.xml +++ /dev/null @@ -1,33 +0,0 @@ - - 4.0.0 - dmp-javascript-engine - dmp-javascript-engine - 0.0.1-SNAPSHOT - - - - maven-compiler-plugin - 3.6.1 - - 1.8 - 1.8 - - - - - - - - - junit - junit - 4.12 - test - - - - - - - \ No newline at end of file diff --git a/dmp-javascript-engine/src/main/java/dmp/javascript/JSEngine.java b/dmp-javascript-engine/src/main/java/dmp/javascript/JSEngine.java deleted file mode 100644 index 5d50e0ab5..000000000 --- a/dmp-javascript-engine/src/main/java/dmp/javascript/JSEngine.java +++ /dev/null @@ -1,38 +0,0 @@ -package dmp.javascript; - -import java.io.FileNotFoundException; -import java.io.FileReader; -import java.io.Reader; - -import javax.script.Invocable; -import javax.script.ScriptEngine; -import javax.script.ScriptEngineManager; -import javax.script.ScriptException; - -public class JSEngine { - - private ScriptEngine engine; - - - public JSEngine() { - try { - engine = new ScriptEngineManager().getEngineByName("nashorn"); - } - catch(Exception ex) { - engine = new ScriptEngineManager().getEngineByName("JavaScript"); - } - } - - public void addScript(String script) throws ScriptException { - engine.eval(script); - } - - public void addScript(Reader script) throws ScriptException, FileNotFoundException { - engine.eval(script); - } - - public Object executeFunction(String functionName, Object ... args ) throws NoSuchMethodException, ScriptException { - return ((Invocable) engine).invokeFunction(functionName, args); - } - -} diff --git a/dmp-javascript-engine/src/test/java/dmp/javascript/tests/TestEngine.java b/dmp-javascript-engine/src/test/java/dmp/javascript/tests/TestEngine.java deleted file mode 100644 index aec3d3c88..000000000 --- a/dmp-javascript-engine/src/test/java/dmp/javascript/tests/TestEngine.java +++ /dev/null @@ -1,95 +0,0 @@ -package dmp.javascript.tests; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; - -import java.io.FileNotFoundException; -import java.io.FileReader; - -import org.junit.After; -import org.junit.Before; -import org.junit.BeforeClass; -import org.junit.Ignore; -import org.junit.Test; - -import dmp.javascript.JSEngine; - -public class TestEngine { - - - private static JSEngine jsEngine; - - @BeforeClass - public static void init() { - - } - - @Before - public void beforeEachTest() { - jsEngine = new JSEngine(); - } - - @After - public void afterEachTest() { - - } - - @Test - public void testFunction1() { - try { - jsEngine.addScript("function f(){return 1;}"); - Object obj = jsEngine.executeFunction("f"); - assertEquals(1, obj); - } - catch(Exception ex) { - fail("Should not have thrown an exception"); - } - } - - @Test - public void testFunction2() { - try { - jsEngine.addScript("function mergeStr(p1,p2){return p1+p2;}"); - Object obj = jsEngine.executeFunction("mergeStr", "aaa", "bbb"); - assertEquals("aaabbb", obj); - } - catch(Exception ex) { - fail("Should not have thrown an exception"); - } - } - - @Test - public void testFunction3() { - try { - jsEngine.addScript("var a = 5;"); - jsEngine.addScript("function f(){return a;}"); - Object obj = jsEngine.executeFunction("f"); - assertEquals(5, obj); - } - catch(Exception ex) { - ex.printStackTrace(); - fail("Should not have thrown an exception"); - } - } - - @Test - public void testSubFunction() { - try { - jsEngine.addScript("function subf(){return \"sub\";}"); - jsEngine.addScript("function f(p){return subf()+p;}"); - Object obj = jsEngine.executeFunction("f", "aaa"); - assertEquals("subaaa", obj); - } - catch(Exception ex) { - fail("Should not have thrown an exception"); - } - } - - @Test(expected = FileNotFoundException.class) - public void testReaderException() throws Exception { - jsEngine.addScript(new FileReader("/sdghsfh/sdgafg/f.f")); - } - -} diff --git a/docker b/docker new file mode 100644 index 000000000..fd658fd8d Binary files /dev/null and b/docker differ diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 000000000..8c3a4baa2 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,121 @@ +--- +version: '3' +services: + # The environment variable "TAG" is used throughout this file to + # specify the version of the images to run. The default is set in the + # '.env' file in this folder. It can be overridden with any normal + # technique for setting environment variables, for example: + # + # TAG=6.0.0-beta1 docker-compose up + # + # REF: https://docs.docker.com/compose/compose-file/#variable-substitution + # + # Also be sure to set the ELASTIC_VERSION variable. For released versions, + # ${TAG} and ${ELASTIC_VERSION} will be identical, but for pre-release + # versions, ${TAG} might contain an extra build identifier, like + # "6.0.0-beta1-3eab5b40", so a full invocation might look like: + # + # ELASTIC_VERSION=6.0.0-beta1 TAG=6.0.0-beta1-3eab5b40 docker-compose up + # + dmp-backend: + build: + context: ./dmp-backend + args: + PROFILE: ${PROFILE} + container_name: dmp-backend + ports: ['0.0.0.0:8080:8080'] + links: + - logstash + networks: ['stack'] + + dmp-frontend: + build: + context: ./dmp-frontend + args: + env: ${ENV} + aot: ${AOT} + container_name: dmp-frontend + ports: ['0.0.0.0:80:80'] + networks: ['stack'] + + elasticsearch: + image: docker.elastic.co/elasticsearch/elasticsearch:${TAG} + container_name: elasticsearch + environment: ['http.host=0.0.0.0', 'transport.host=127.0.0.1', 'ELASTIC_PASSWORD=${ELASTIC_PASSWORD}'] + ports: ['0.0.0.0:9200:9200'] + networks: ['stack'] + + kibana: + image: docker.elastic.co/kibana/kibana:${TAG} + container_name: kibana + ports: ['0.0.0.0:5601:5601'] + networks: ['stack'] + depends_on: ['elasticsearch'] + + logstash: + image: docker.elastic.co/logstash/logstash:${TAG} + container_name: logstash + volumes: + - ./ELK.Docker/config/logstash.conf:/usr/share/logstash/pipeline/logstash.conf + ports: ['0.0.0.0:31311:31311'] + + networks: ['stack'] + depends_on: ['elasticsearch', 'setup_logstash'] + + filebeat: + image: docker.elastic.co/beats/filebeat:${TAG} + container_name: filebeat + command: -e -E 'output.elasticsearch.password=${ELASTIC_PASSWORD}' + networks: ['stack'] + depends_on: ['elasticsearch', 'setup_filebeat'] + + heartbeat: + image: docker.elastic.co/beats/heartbeat:${TAG} + container_name: heartbeat + command: -e -E 'output.elasticsearch.password=${ELASTIC_PASSWORD}' + networks: ['stack'] + depends_on: ['elasticsearch', 'setup_heartbeat'] + + # Run a short-lived container to set up Logstash. + setup_logstash: + image: centos:7 + container_name: setup_logstash + volumes: ['./ELK.Docker/scripts/setup-logstash.sh:/usr/local/bin/setup-logstash.sh:ro'] + # The script may have CR/LF line endings if using Docker for Windows, so + # make sure that they don't confuse Bash. + command: ['/bin/bash', '-c', 'cat /usr/local/bin/setup-logstash.sh | tr -d "\r" | bash'] + environment: ['ELASTIC_PASSWORD=${ELASTIC_PASSWORD}'] + networks: ['stack'] + depends_on: ['elasticsearch'] + + setup_kibana: + image: centos:7 + container_name: setup_kibana + volumes: ['./ELK.Docker/scripts/setup-kibana.sh:/usr/local/bin/setup-kibana.sh:ro'] + command: ['/bin/bash', '-c', 'cat /usr/local/bin/setup-kibana.sh | tr -d "\r" | bash'] + environment: ['ELASTIC_PASSWORD=${ELASTIC_PASSWORD}'] + networks: ['stack'] + depends_on: ['elasticsearch'] + + setup_filebeat: + image: docker.elastic.co/beats/filebeat:${TAG} + container_name: setup_filebeat + volumes: ['./ELK.Docker/scripts/setup-beat.sh:/usr/local/bin/setup-beat.sh:ro'] + command: ['/bin/bash', '-c', 'cat /usr/local/bin/setup-beat.sh | tr -d "\r" | bash -s filebeat'] + environment: ['ELASTIC_PASSWORD=${ELASTIC_PASSWORD}'] + networks: ['stack'] + depends_on: ['kibana'] + + setup_heartbeat: + image: docker.elastic.co/beats/heartbeat:${TAG} + container_name: setup_heartbeat + volumes: ['./ELK.Docker/scripts/setup-beat.sh:/usr/local/bin/setup-beat.sh:ro'] + command: ['/bin/bash', '-c', 'cat /usr/local/bin/setup-beat.sh | tr -d "\r" | bash -s heartbeat'] + environment: ['ELASTIC_PASSWORD=${ELASTIC_PASSWORD}'] + networks: ['stack'] + depends_on: ['kibana'] + +#volumes: + #esdata: + # driver: local +networks: {stack: {}} diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index 48e341a09..000000000 --- a/package-lock.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "lockfileVersion": 1 -}