diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index c2ab800b1..95ecf14b5 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -19,6 +19,7 @@ cache: - target/app.war stages: + - test - deploy_snapshot - build_test_container - deploy_test_container @@ -26,6 +27,12 @@ stages: - build_prod_container - deploy_prod_container +test: + stage: test + image: docker.si.cnr.it/cnr-maven:$CNR_MAVEN_VERSION + script: + - mvn -B clean compile sonar:sonar -Dsonar.host.url=http://sonar.si.cnr.it test package -fae + allow_failure: true deploy_dev_snapshot: stage: deploy_snapshot @@ -71,10 +78,12 @@ deploydockertest01e02: - test script: - echo "Deploy to dockertest01" + - sed -i "s/CONFIG_REPO_TOKEN/$CONFIG_REPO_TOKEN/g" ./src/main/docker/test/app-con-mancenter.yml - sshremote $SSH_CONNECT_DOCKERTEST01 "if [ -f ''/sites/sprint-flows-test/app.yml'' ]; then docker-compose -p sprint-flows-test -f /sites/sprint-flows-test/app.yml down --remove-orphans; fi && rm -rf /sites/sprint-flows-test && mkdir -p /sites/sprint-flows-test || echo NODIR" - scpremote ./src/main/docker/test/app-con-mancenter.yml $SSH_CONNECT_DOCKERTEST01:/sites/sprint-flows-test/app.yml - sshremote $SSH_CONNECT_DOCKERTEST01 "cd /sites/sprint-flows-test && docker-compose -p sprint-flows-test -f app.yml pull && docker-compose -p sprint-flows-test -f app.yml up -d" - echo "Deploy to dockertest02" + - sed -i "s/CONFIG_REPO_TOKEN/$CONFIG_REPO_TOKEN/g" ./src/main/docker/test/app-senza-mancenter.yml - sshremote $SSH_CONNECT_DOCKERTEST02 "if [ -f ''/sites/sprint-flows-test/app.yml'' ]; then docker-compose -p sprint-flows-test -f /sites/sprint-flows-test/app.yml down --remove-orphans; fi && rm -rf /sites/sprint-flows-test && mkdir -p /sites/sprint-flows-test || echo NODIR" - scpremote ./src/main/docker/test/app-senza-mancenter.yml $SSH_CONNECT_DOCKERTEST02:/sites/sprint-flows-test/app.yml - sshremote $SSH_CONNECT_DOCKERTEST02 "cd /sites/sprint-flows-test && docker-compose -p sprint-flows-test -f app.yml pull && docker-compose -p sprint-flows-test -f app.yml up -d" @@ -137,11 +146,12 @@ deploydockprod01: script: - echo "Deploy sprint-flows to dockprod01" - echo "setting secrets" - - sed -i "s/docker.si.cnr.it\/sprint-flows/docker.si.cnr.it\/sprint-flows:latest/g" ./src/main/docker/app-prod.yml + - sed -i "s/docker.si.cnr.it\/sprint-flows/docker.si.cnr.it\/sprint-flows:$CI_COMMIT_TAG/g" ./src/main/docker/app-prod.yml - sed -i "s/SPRING_DATASOURCE_PASSWORD_SED/$POSTGRESS_PASSWORD/g" ./src/main/docker/app-prod.yml - sed -i "s/SPRING_LDAP_MANAGERPASSWORD_SED/$LDAP_PASSWORD/g" ./src/main/docker/app-prod.yml - sed -i "s/ACE_PASSWORD_SED/$ACE_PASSWORD/g" ./src/main/docker/app-prod.yml - sed -i "s/CMIS_PASSWORD/$CMIS_PASSWORD/g" ./src/main/docker/app-prod.yml + - sed -i "s/CONFIG_REPO_TOKEN/$CONFIG_REPO_TOKEN/g" ./src/main/docker/app-prod.yml - echo "stopping service" - sshremote $SSH_CONNECT_DOCPROD01 "docker-compose -p $CI_PROJECT_NAME -f /sites/docker-flows/app.yml down -v --remove-orphans || echo NOFILE" - sshremote $SSH_CONNECT_DOCPROD01 "rm -rf /sites/docker-flows/ && mkdir -p /sites/docker-flows/" - echo "copying docker-compose file" @@ -168,6 +178,7 @@ deploydockprod02: - sed -i "s/SPRING_LDAP_MANAGERPASSWORD_SED/$LDAP_PASSWORD/g" ./src/main/docker/app-prod.yml - sed -i "s/ACE_PASSWORD_SED/$ACE_PASSWORD/g" ./src/main/docker/app-prod.yml - sed -i "s/CMIS_PASSWORD/$CMIS_PASSWORD/g" ./src/main/docker/app-prod.yml + - sed -i "s/CONFIG_REPO_TOKEN/$CONFIG_REPO_TOKEN/g" ./src/main/docker/app-prod.yml - echo "stopping service" - sshremote $SSH_CONNECT_DOCPROD02 "docker-compose -p $CI_PROJECT_NAME -f /sites/docker-flows/app.yml down -v --remove-orphans || echo NOFILE" - sshremote $SSH_CONNECT_DOCPROD02 "rm -rf /sites/docker-flows/ && mkdir -p /sites/docker-flows/" diff --git a/docs/screenshots/10 - Set Multipli di Dati.jpg b/docs/screenshots/10 - Set Multipli di Dati.jpg new file mode 100644 index 000000000..c4ff11af6 Binary files /dev/null and b/docs/screenshots/10 - Set Multipli di Dati.jpg differ diff --git "a/docs/screenshots/11 \342\200\223 visualizzazione set multiplo di dati.jpg" "b/docs/screenshots/11 \342\200\223 visualizzazione set multiplo di dati.jpg" new file mode 100644 index 000000000..0d256ac1e Binary files /dev/null and "b/docs/screenshots/11 \342\200\223 visualizzazione set multiplo di dati.jpg" differ diff --git "a/docs/screenshots/12 \342\200\223 Caricamento Documenti Tipologia 1.jpg" "b/docs/screenshots/12 \342\200\223 Caricamento Documenti Tipologia 1.jpg" new file mode 100644 index 000000000..004b611a3 Binary files /dev/null and "b/docs/screenshots/12 \342\200\223 Caricamento Documenti Tipologia 1.jpg" differ diff --git a/docs/screenshots/13 - Caricamento Documenti Tipologia 2.jpg b/docs/screenshots/13 - Caricamento Documenti Tipologia 2.jpg new file mode 100644 index 000000000..5220f4600 Binary files /dev/null and b/docs/screenshots/13 - Caricamento Documenti Tipologia 2.jpg differ diff --git a/docs/screenshots/14 - Caricamento Documenti Tipologia 3.jpg b/docs/screenshots/14 - Caricamento Documenti Tipologia 3.jpg new file mode 100644 index 000000000..983fc1d23 Binary files /dev/null and b/docs/screenshots/14 - Caricamento Documenti Tipologia 3.jpg differ diff --git a/docs/screenshots/15 - etichette sui documenti.jpg b/docs/screenshots/15 - etichette sui documenti.jpg new file mode 100644 index 000000000..edce2a863 Binary files /dev/null and b/docs/screenshots/15 - etichette sui documenti.jpg differ diff --git a/docs/screenshots/16 - gestione documenti extra flusso.jpg b/docs/screenshots/16 - gestione documenti extra flusso.jpg new file mode 100644 index 000000000..7a3aa8e4f Binary files /dev/null and b/docs/screenshots/16 - gestione documenti extra flusso.jpg differ diff --git a/docs/screenshots/17 - Documenti tipo 4.jpg b/docs/screenshots/17 - Documenti tipo 4.jpg new file mode 100644 index 000000000..18fff433d Binary files /dev/null and b/docs/screenshots/17 - Documenti tipo 4.jpg differ diff --git a/docs/screenshots/17- Elementi Dettagli Flusso.jpg b/docs/screenshots/17- Elementi Dettagli Flusso.jpg new file mode 100644 index 000000000..24af65cd9 Binary files /dev/null and b/docs/screenshots/17- Elementi Dettagli Flusso.jpg differ diff --git a/docs/screenshots/18 - Fasi del Flusso.jpg b/docs/screenshots/18 - Fasi del Flusso.jpg new file mode 100644 index 000000000..5061bbde0 Binary files /dev/null and b/docs/screenshots/18 - Fasi del Flusso.jpg differ diff --git a/docs/screenshots/2-avvio flusso.jpg b/docs/screenshots/2-avvio flusso.jpg new file mode 100644 index 000000000..000b1fd03 Binary files /dev/null and b/docs/screenshots/2-avvio flusso.jpg differ diff --git a/docs/screenshots/28 - scelta utente in avvio del flusso.jpg b/docs/screenshots/28 - scelta utente in avvio del flusso.jpg new file mode 100644 index 000000000..fc65ec99e Binary files /dev/null and b/docs/screenshots/28 - scelta utente in avvio del flusso.jpg differ diff --git a/docs/screenshots/3-testo.jpg b/docs/screenshots/3-testo.jpg new file mode 100644 index 000000000..975d719ac Binary files /dev/null and b/docs/screenshots/3-testo.jpg differ diff --git a/docs/screenshots/4 - Area di Testo.jpg b/docs/screenshots/4 - Area di Testo.jpg new file mode 100644 index 000000000..a47bc9413 Binary files /dev/null and b/docs/screenshots/4 - Area di Testo.jpg differ diff --git a/docs/screenshots/5 - opzioni scelta con bottoni.jpg b/docs/screenshots/5 - opzioni scelta con bottoni.jpg new file mode 100644 index 000000000..5a8eced0d Binary files /dev/null and b/docs/screenshots/5 - opzioni scelta con bottoni.jpg differ diff --git "a/docs/screenshots/6 - opzioni scelta con men\303\271 ad albero.jpg" "b/docs/screenshots/6 - opzioni scelta con men\303\271 ad albero.jpg" new file mode 100644 index 000000000..bf52358b6 Binary files /dev/null and "b/docs/screenshots/6 - opzioni scelta con men\303\271 ad albero.jpg" differ diff --git a/docs/screenshots/7 - Selezione tramite funzione di autocompletamento.jpg b/docs/screenshots/7 - Selezione tramite funzione di autocompletamento.jpg new file mode 100644 index 000000000..4883a951f Binary files /dev/null and b/docs/screenshots/7 - Selezione tramite funzione di autocompletamento.jpg differ diff --git "a/docs/screenshots/8 \342\200\223 azioni scelta.jpg" "b/docs/screenshots/8 \342\200\223 azioni scelta.jpg" new file mode 100644 index 000000000..92059e470 Binary files /dev/null and "b/docs/screenshots/8 \342\200\223 azioni scelta.jpg" differ diff --git "a/docs/screenshots/9 \342\200\223 nota informativa.jpg" "b/docs/screenshots/9 \342\200\223 nota informativa.jpg" new file mode 100644 index 000000000..90b270e12 Binary files /dev/null and "b/docs/screenshots/9 \342\200\223 nota informativa.jpg" differ diff --git a/docs/screenshots/Export .csv.JPG b/docs/screenshots/Export .csv.JPG new file mode 100644 index 000000000..59855c758 Binary files /dev/null and b/docs/screenshots/Export .csv.JPG differ diff --git a/docs/screenshots/Export Summary pdf.JPG b/docs/screenshots/Export Summary pdf.JPG new file mode 100644 index 000000000..4ef6cbb7f Binary files /dev/null and b/docs/screenshots/Export Summary pdf.JPG differ diff --git a/docs/screenshots/Flusso OIV.jpg b/docs/screenshots/Flusso OIV.jpg new file mode 100644 index 000000000..fc43dc413 Binary files /dev/null and b/docs/screenshots/Flusso OIV.jpg differ diff --git a/docs/screenshots/HOME.JPG b/docs/screenshots/HOME.JPG new file mode 100644 index 000000000..f90ecf54c Binary files /dev/null and b/docs/screenshots/HOME.JPG differ diff --git a/docs/screenshots/Manualistica.jpg b/docs/screenshots/Manualistica.jpg new file mode 100644 index 000000000..dd9761746 Binary files /dev/null and b/docs/screenshots/Manualistica.jpg differ diff --git a/docs/screenshots/Workflow details.JPG b/docs/screenshots/Workflow details.JPG new file mode 100644 index 000000000..a9509b6fd Binary files /dev/null and b/docs/screenshots/Workflow details.JPG differ diff --git a/docs/screenshots/chronology.JPG b/docs/screenshots/chronology.JPG new file mode 100644 index 000000000..7f08e0a8c Binary files /dev/null and b/docs/screenshots/chronology.JPG differ diff --git a/docs/screenshots/completed tasks.JPG b/docs/screenshots/completed tasks.JPG new file mode 100644 index 000000000..318756daf Binary files /dev/null and b/docs/screenshots/completed tasks.JPG differ diff --git a/docs/screenshots/dettagi oiv.jpg b/docs/screenshots/dettagi oiv.jpg new file mode 100644 index 000000000..e8392447a Binary files /dev/null and b/docs/screenshots/dettagi oiv.jpg differ diff --git a/docs/screenshots/dettagli flusso.JPG b/docs/screenshots/dettagli flusso.JPG new file mode 100644 index 000000000..f909daa74 Binary files /dev/null and b/docs/screenshots/dettagli flusso.JPG differ diff --git a/docs/screenshots/documenti scrivania.JPG b/docs/screenshots/documenti scrivania.JPG new file mode 100644 index 000000000..9577c3460 Binary files /dev/null and b/docs/screenshots/documenti scrivania.JPG differ diff --git a/docs/screenshots/flusso oiv con ruoli.jpg b/docs/screenshots/flusso oiv con ruoli.jpg new file mode 100644 index 000000000..4f1b9ae7c Binary files /dev/null and b/docs/screenshots/flusso oiv con ruoli.jpg differ diff --git a/docs/screenshots/help desk.jpg b/docs/screenshots/help desk.jpg new file mode 100644 index 000000000..af2133d88 Binary files /dev/null and b/docs/screenshots/help desk.jpg differ diff --git a/docs/screenshots/i miei compiti.jpg b/docs/screenshots/i miei compiti.jpg new file mode 100644 index 000000000..5d639a652 Binary files /dev/null and b/docs/screenshots/i miei compiti.jpg differ diff --git a/docs/screenshots/interazione scrivania digitale con altre applicazioni.JPG b/docs/screenshots/interazione scrivania digitale con altre applicazioni.JPG new file mode 100644 index 000000000..48ea9f01f Binary files /dev/null and b/docs/screenshots/interazione scrivania digitale con altre applicazioni.JPG differ diff --git a/docs/screenshots/menu.JPG b/docs/screenshots/menu.JPG new file mode 100644 index 000000000..f275cdb81 Binary files /dev/null and b/docs/screenshots/menu.JPG differ diff --git a/docs/screenshots/my tasks.JPG b/docs/screenshots/my tasks.JPG new file mode 100644 index 000000000..260e311f8 Binary files /dev/null and b/docs/screenshots/my tasks.JPG differ diff --git a/docs/screenshots/reasearch ative workflows.JPG b/docs/screenshots/reasearch ative workflows.JPG new file mode 100644 index 000000000..8f69fe9aa Binary files /dev/null and b/docs/screenshots/reasearch ative workflows.JPG differ diff --git a/docs/screenshots/reasearch completed workflows.JPG b/docs/screenshots/reasearch completed workflows.JPG new file mode 100644 index 000000000..b144ffac6 Binary files /dev/null and b/docs/screenshots/reasearch completed workflows.JPG differ diff --git a/docs/screenshots/ricerca oiv.jpg b/docs/screenshots/ricerca oiv.jpg new file mode 100644 index 000000000..896c0a2a9 Binary files /dev/null and b/docs/screenshots/ricerca oiv.jpg differ diff --git a/docs/screenshots/ricerca.jpg b/docs/screenshots/ricerca.jpg new file mode 100644 index 000000000..0d1c9e171 Binary files /dev/null and b/docs/screenshots/ricerca.jpg differ diff --git a/docs/screenshots/versione integrata.JPG b/docs/screenshots/versione integrata.JPG new file mode 100644 index 000000000..dbe126f4a Binary files /dev/null and b/docs/screenshots/versione integrata.JPG differ diff --git a/docs/screenshots/versione stand alone.JPG b/docs/screenshots/versione stand alone.JPG new file mode 100644 index 000000000..c9725e3b7 Binary files /dev/null and b/docs/screenshots/versione stand alone.JPG differ diff --git a/js.sh b/js.sh new file mode 100755 index 000000000..bc998849e --- /dev/null +++ b/js.sh @@ -0,0 +1,18 @@ +#!/usr/bin/env bash + +#echo '################ RIMOZIONE node_modules ###############################################' +#rm -r src/main/webapp/node_modules +#rm -r node_modules + +echo '################ RIMOZIONE bower_components ###############################################' +rm -r src/main/webapp/bower_components +#rm -r bower_components + + +#echo '################ INSTALL NPM ###############################################' +#npm install + + +echo '################ BOWER install ###############################################' +#bower install src/main/webapp/node_modules +bower install diff --git a/package-lock.json b/package-lock.json index e062daf1a..c0841a9a8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4,42 +4,106 @@ "lockfileVersion": 1, "requires": true, "dependencies": { + "@mrmlnc/readdir-enhanced": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz", + "integrity": "sha1-UkryQNGjYFJ7cwR17PoTRKpUDd4=", + "dev": true, + "requires": { + "call-me-maybe": "^1.0.1", + "glob-to-regexp": "^0.3.0" + } + }, + "@nodelib/fs.stat": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz", + "integrity": "sha1-K1o6s/kYzKSKjHVMCBaOPwPrphs=", + "dev": true + }, + "@sindresorhus/is": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.7.0.tgz", + "integrity": "sha1-mgb08TfuhNffBGDB/bETX/psUP0=", + "dev": true, + "optional": true + }, + "@sinonjs/commons": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.7.0.tgz", + "integrity": "sha512-qbk9AP+cZUsKdW1GJsBpxPKFmCJ0T8swwzVje3qFd+AkQb74Q/tiuzrdfFg8AD2g5HH/XbE/I8Uc1KYHVYWfhg==", + "dev": true, + "requires": { + "type-detect": "4.0.8" + } + }, + "@sinonjs/formatio": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sinonjs/formatio/-/formatio-2.0.0.tgz", + "integrity": "sha512-ls6CAMA6/5gG+O/IdsBcblvnd8qcO/l1TYoNeAzp3wcISOxlPXQEus0mLcdwazEkWjaBdaJ3TaxmNgCLWwvWzg==", + "dev": true, + "requires": { + "samsam": "1.3.0" + } + }, + "@sinonjs/samsam": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-3.3.3.tgz", + "integrity": "sha512-bKCMKZvWIjYD0BLGnNrxVuw4dkWCYsLqFOUWw8VgKF/+5Y+mE7LfHWPIYoDXowH+3a9LsWDMo0uAP8YDosPvHQ==", + "dev": true, + "requires": { + "@sinonjs/commons": "^1.3.0", + "array-from": "^2.1.1", + "lodash": "^4.17.15" + } + }, + "@sinonjs/text-encoding": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.1.tgz", + "integrity": "sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ==", + "dev": true + }, + "@types/q": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.2.tgz", + "integrity": "sha1-aQoUdbhPKohP0HzXl8APXzE1bqg=", + "dev": true + }, "abab": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/abab/-/abab-1.0.3.tgz", - "integrity": "sha1-uB3l9ydOxOdW15fNg08wNkJyTl0=", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/abab/-/abab-1.0.4.tgz", + "integrity": "sha1-X6rZwsB/YN12dw9xzwJbYqY8/U4=", "dev": true, "optional": true }, "abbrev": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.0.tgz", - "integrity": "sha1-0FVMIlZjbi9W58LlrRg/hZQo2B8=", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", "dev": true }, "accepts": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", - "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha1-UxvHJlF6OytB+FACHGzBXqq1B80=", "dev": true, "requires": { - "mime-types": "~2.1.18", - "negotiator": "0.6.1" + "mime-types": "~2.1.24", + "negotiator": "0.6.2" }, "dependencies": { "mime-db": { - "version": "1.35.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.35.0.tgz", - "integrity": "sha512-JWT/IcCTsB0Io3AhWUMjRqucrHSPsSf2xKLaRldJVULioggvkJvggZ3VXNNSRkCddE6D+BUI4HEIZIA2OjwIvg==", + "version": "1.43.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.43.0.tgz", + "integrity": "sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ==", "dev": true }, "mime-types": { - "version": "2.1.19", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.19.tgz", - "integrity": "sha512-P1tKYHVSZ6uFo26mtnve4HQFE3koh1UWVkp8YUC+ESBHe945xWSoXuHHiGarDqcEZ+whpCDnlNw5LON0kLo+sw==", + "version": "2.1.26", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.26.tgz", + "integrity": "sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ==", "dev": true, "requires": { - "mime-db": "~1.35.0" + "mime-db": "1.43.0" } } } @@ -149,7 +213,7 @@ "ansi-colors": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz", - "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==", + "integrity": "sha1-Y3S03V1HGP884npnGjscrQdxMqk=", "dev": true, "requires": { "ansi-wrap": "^0.1.0" @@ -204,12 +268,6 @@ "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=" }, - "ansicolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/ansicolors/-/ansicolors-0.2.1.tgz", - "integrity": "sha1-vgiVmQl7dKXJxKhKDNvNtivYeu8=", - "dev": true - }, "any-promise": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", @@ -217,13 +275,13 @@ "dev": true }, "anymatch": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.0.tgz", - "integrity": "sha1-o+Uvo5FoyCX/V7AkgSbOWo/5VQc=", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", + "integrity": "sha1-VT3Lj5HjyImEXf26NMd3IbkLnXo=", "dev": true, "requires": { - "arrify": "^1.0.0", - "micromatch": "^2.1.5" + "micromatch": "^2.1.5", + "normalize-path": "^2.0.0" } }, "append-buffer": { @@ -235,13 +293,30 @@ "buffer-equal": "^1.0.0" } }, + "arch": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/arch/-/arch-2.1.1.tgz", + "integrity": "sha1-j1wnMao1owkpIhuwZA7tZRdeyE4=", + "dev": true, + "optional": true + }, "archive-type": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/archive-type/-/archive-type-3.2.0.tgz", - "integrity": "sha1-nNnABpV+vpX62tW9YJiUKoE3N/Y=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/archive-type/-/archive-type-4.0.0.tgz", + "integrity": "sha1-+S5yIzBW38aWlHJ0nCZ72wRrHXA=", "dev": true, + "optional": true, "requires": { - "file-type": "^3.1.0" + "file-type": "^4.2.0" + }, + "dependencies": { + "file-type": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-4.4.0.tgz", + "integrity": "sha1-G2AOX8ofvcboDApwxxyNul95BsU=", + "dev": true, + "optional": true + } } }, "archy": { @@ -251,9 +326,9 @@ "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=", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", + "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", "dev": true, "requires": { "delegates": "^1.0.0", @@ -308,10 +383,16 @@ "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", "dev": true }, + "array-from": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/array-from/-/array-from-2.1.1.tgz", + "integrity": "sha1-z+nYwmYoudxa7MYqn12PHzUsEZU=", + "dev": true + }, "array-slice": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.0.0.tgz", - "integrity": "sha1-5zA08A3MH0CHYAj9IP6ud71LfC8=", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz", + "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==", "dev": true }, "array-union": { @@ -347,16 +428,10 @@ "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", "dev": true }, - "asn1": { - "version": "0.1.11", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.1.11.tgz", - "integrity": "sha1-VZvhg3bQik7E2+gId9J4GGObLfc=", - "dev": true - }, "assert-plus": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.1.5.tgz", - "integrity": "sha1-7nQAlBMALYTOxyGcasgRgS5yMWA=", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", "dev": true }, "assign-symbols": { @@ -379,9 +454,9 @@ }, "dependencies": { "escodegen-wallaby": { - "version": "1.6.11", - "resolved": "https://registry.npmjs.org/escodegen-wallaby/-/escodegen-wallaby-1.6.11.tgz", - "integrity": "sha1-ORAM3nQ/ms3SS9ho21oS+6zebtE=", + "version": "1.6.28", + "resolved": "https://registry.npmjs.org/escodegen-wallaby/-/escodegen-wallaby-1.6.28.tgz", + "integrity": "sha512-AbNtyow7oeTz/U4RRsvg99+iCPAjnjVqsp8elRFK6RwyHrH/q5UMaNGtXDINsL0p/4QEt6IflvX9v+aK/uOQQw==", "dev": true, "requires": { "esprima": "^2.7.1", @@ -390,17 +465,30 @@ "optionator": "^0.8.1", "source-map": "~0.2.0" } + }, + "estraverse": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz", + "integrity": "sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q=", + "dev": true + }, + "source-map": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz", + "integrity": "sha1-2rc/vPwrqBm03gO9b26qSBZLP50=", + "dev": true, + "optional": true, + "requires": { + "amdefine": ">=0.0.4" + } } } }, "async": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/async/-/async-2.5.0.tgz", - "integrity": "sha1-hDGQ/WtzV6C54clW7d3V7IRitU0=", - "dev": true, - "requires": { - "lodash": "^4.14.0" - } + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "dev": true }, "async-each": { "version": "1.0.1", @@ -415,9 +503,9 @@ "dev": true }, "async-limiter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", - "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha1-3TeelPDbgxCwgpH51kwyCXZmF/0=", "dev": true }, "asynckit": { @@ -426,6 +514,12 @@ "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", "dev": true }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha1-bZUX654DDSQ2ZmZR6GvZ9vE1M8k=", + "dev": true + }, "autoprefixer": { "version": "6.7.7", "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-6.7.7.tgz", @@ -441,9 +535,9 @@ } }, "aws-sign2": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", - "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=", + "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": { @@ -453,13 +547,21 @@ "dev": true }, "axios": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.17.1.tgz", - "integrity": "sha1-LY4+XQvb1zJ/kbyBT1xXZg+Bgk0=", + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.19.0.tgz", + "integrity": "sha1-jgm/89kSLhM/e4EByPvdAO09Krg=", "dev": true, "requires": { - "follow-redirects": "^1.2.5", - "is-buffer": "^1.1.5" + "follow-redirects": "1.5.10", + "is-buffer": "^2.0.2" + }, + "dependencies": { + "is-buffer": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz", + "integrity": "sha1-PlcvI8hBGlz9lVfISeNmXgspBiM=", + "dev": true + } } }, "babel-code-frame": { @@ -485,12 +587,92 @@ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", "dev": true }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha1-e95c7RRbbVUakNuH+DxVi060io8=", + "dev": true, + "requires": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "dependencies": { + "component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", + "dev": true + }, + "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.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } + } + }, "base64-arraybuffer": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.2.tgz", "integrity": "sha1-R030qfLaJOBd8xWMOx2zw81GoVQ=", "dev": true }, + "base64-js": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", + "integrity": "sha1-WOzoy3XdB+ce0IxzarxfrE2/jfE=", + "dev": true, + "optional": true + }, "base64id": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/base64id/-/base64id-0.1.0.tgz", @@ -535,29 +717,102 @@ } }, "bin-build": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/bin-build/-/bin-build-2.2.0.tgz", - "integrity": "sha1-EfjdYfcP/Por3KpbRvXo/t1CIcw=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bin-build/-/bin-build-3.0.0.tgz", + "integrity": "sha1-xXgKJaip+WbYJEIX5sH1CCoUOGE=", "dev": true, "optional": true, "requires": { - "archive-type": "^3.0.1", - "decompress": "^3.0.0", - "download": "^4.1.2", - "exec-series": "^1.0.0", - "rimraf": "^2.2.6", - "tempfile": "^1.0.0", - "url-regex": "^3.0.0" + "decompress": "^4.0.0", + "download": "^6.2.2", + "execa": "^0.7.0", + "p-map-series": "^1.0.0", + "tempfile": "^2.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, + "optional": true, + "requires": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "execa": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", + "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "dev": true, + "optional": true, + "requires": { + "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" + } + }, + "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, + "optional": true + } } }, "bin-check": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/bin-check/-/bin-check-2.0.0.tgz", - "integrity": "sha1-hvjm9CU4k99g3DFpV/WvAqywWTA=", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bin-check/-/bin-check-4.1.0.tgz", + "integrity": "sha1-/ElZcL3Ii7HVo1/BfmXEoUn8Skk=", "dev": true, "optional": true, "requires": { - "executable": "^1.0.0" + "execa": "^0.7.0", + "executable": "^4.1.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, + "optional": true, + "requires": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "execa": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", + "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "dev": true, + "optional": true, + "requires": { + "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" + } + }, + "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, + "optional": true + } } }, "bin-version": { @@ -590,124 +845,323 @@ } }, "bin-wrapper": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/bin-wrapper/-/bin-wrapper-3.0.2.tgz", - "integrity": "sha1-Z9MwYmLksaXy+I7iNGT2plVneus=", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bin-wrapper/-/bin-wrapper-4.1.0.tgz", + "integrity": "sha1-mTSPLPhQMePvfvzn5TAK6q6WBgU=", "dev": true, "optional": true, "requires": { - "bin-check": "^2.0.0", - "bin-version-check": "^2.1.0", - "download": "^4.0.0", - "each-async": "^1.1.1", - "lazy-req": "^1.0.0", - "os-filter-obj": "^1.0.0" - } - }, - "binary-extensions": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.8.0.tgz", - "integrity": "sha1-SOyNFt9Dd+rl+liEaCSAr02Vx3Q=", - "dev": true - }, - "binaryextensions": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/binaryextensions/-/binaryextensions-1.0.1.tgz", - "integrity": "sha1-HmN0iLNbWL2l9HdL+WpSEqjJB1U=", - "dev": true - }, - "bl": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/bl/-/bl-1.0.3.tgz", - "integrity": "sha1-/FQhoo/UImA2w7OJGmaiW8ZNIm4=", - "dev": true, - "requires": { - "readable-stream": "~2.0.5" + "bin-check": "^4.1.0", + "bin-version-check": "^4.0.0", + "download": "^7.1.0", + "import-lazy": "^3.1.0", + "os-filter-obj": "^2.0.0", + "pify": "^4.0.1" }, "dependencies": { - "readable-stream": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", - "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", + "bin-version": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bin-version/-/bin-version-3.1.0.tgz", + "integrity": "sha1-WwnrKAdSsb0o8MnbP5by9DtsCDk=", "dev": true, + "optional": true, "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "~1.0.0", - "process-nextick-args": "~1.0.6", - "string_decoder": "~0.10.x", - "util-deprecate": "~1.0.1" + "execa": "^1.0.0", + "find-versions": "^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 - } - } - }, - "blob": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.4.tgz", - "integrity": "sha1-vPEwUspURj8w+fx+lbmkdjCpSSE=", - "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 - }, - "body-parser": { - "version": "1.17.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.17.2.tgz", - "integrity": "sha1-+IkqvI+eYn1Crtr7yma/WrmRBO4=", - "dev": true, - "requires": { - "bytes": "2.4.0", - "content-type": "~1.0.2", - "debug": "2.6.7", - "depd": "~1.1.0", - "http-errors": "~1.6.1", - "iconv-lite": "0.4.15", - "on-finished": "~2.3.0", - "qs": "6.4.0", - "raw-body": "~2.2.0", - "type-is": "~1.6.15" - }, + "bin-version-check": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/bin-version-check/-/bin-version-check-4.0.0.tgz", + "integrity": "sha1-fYGcYklpkfgNiT5uAqMDI2Fgj3E=", + "dev": true, + "optional": true, + "requires": { + "bin-version": "^3.0.0", + "semver": "^5.6.0", + "semver-truncate": "^1.1.2" + } + }, + "download": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/download/-/download-7.1.0.tgz", + "integrity": "sha1-kFmqnXC1A+52oTKJe+beyOVYcjM=", + "dev": true, + "optional": true, + "requires": { + "archive-type": "^4.0.0", + "caw": "^2.0.1", + "content-disposition": "^0.5.2", + "decompress": "^4.2.0", + "ext-name": "^5.0.0", + "file-type": "^8.1.0", + "filenamify": "^2.0.0", + "get-stream": "^3.0.0", + "got": "^8.3.1", + "make-dir": "^1.2.0", + "p-event": "^2.1.0", + "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, + "optional": true + } + } + }, + "file-type": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-8.1.0.tgz", + "integrity": "sha1-JE87fvZBu+DMoZbHJ25LMyOZ9ow=", + "dev": true, + "optional": true + }, + "find-versions": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-3.2.0.tgz", + "integrity": "sha1-ECl/mAMKeGgpaBaQVF72We0dJU4=", + "dev": true, + "optional": true, + "requires": { + "semver-regex": "^2.0.0" + } + }, + "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, + "optional": true + }, + "got": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/got/-/got-8.3.2.tgz", + "integrity": "sha1-HSP2Q5Dpf3dsrFLluTbl9RTS6Tc=", + "dev": true, + "optional": true, + "requires": { + "@sindresorhus/is": "^0.7.0", + "cacheable-request": "^2.1.1", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "into-stream": "^3.1.0", + "is-retry-allowed": "^1.1.0", + "isurl": "^1.0.0-alpha5", + "lowercase-keys": "^1.0.0", + "mimic-response": "^1.0.0", + "p-cancelable": "^0.4.0", + "p-timeout": "^2.0.1", + "pify": "^3.0.0", + "safe-buffer": "^5.1.1", + "timed-out": "^4.0.1", + "url-parse-lax": "^3.0.0", + "url-to-options": "^1.0.1" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true, + "optional": true + } + } + }, + "import-lazy": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-3.1.0.tgz", + "integrity": "sha1-iRJ5ICyKIoD9vWZ029jaGh38Z8w=", + "dev": true, + "optional": true + }, + "p-cancelable": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.4.1.tgz", + "integrity": "sha1-NfNj1n1SCByNlYXje8zrfgu8sqA=", + "dev": true, + "optional": true + }, + "p-event": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/p-event/-/p-event-2.3.1.tgz", + "integrity": "sha1-WWJ57xaassPgyuiMHPuwgHmZPvY=", + "dev": true, + "optional": true, + "requires": { + "p-timeout": "^2.0.1" + } + }, + "p-timeout": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-2.0.1.tgz", + "integrity": "sha1-2N0ZeVldLcATnh/ka4tkbLPN8Dg=", + "dev": true, + "optional": true, + "requires": { + "p-finally": "^1.0.0" + } + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha1-SyzSXFDVmHNcUCkiJP2MbfQeMjE=", + "dev": true, + "optional": true + }, + "prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", + "dev": true, + "optional": true + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha1-qVT5Ma66UI0we78Gnv8MAclhFvc=", + "dev": true, + "optional": true + }, + "semver-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-2.0.0.tgz", + "integrity": "sha1-qTwsWERTmncCMzeRB7OMe0rJ0zg=", + "dev": true, + "optional": true + }, + "url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "dev": true, + "optional": true, + "requires": { + "prepend-http": "^2.0.0" + } + } + } + }, + "binary-extensions": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.8.0.tgz", + "integrity": "sha1-SOyNFt9Dd+rl+liEaCSAr02Vx3Q=", + "dev": true + }, + "binaryextensions": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/binaryextensions/-/binaryextensions-1.0.1.tgz", + "integrity": "sha1-HmN0iLNbWL2l9HdL+WpSEqjJB1U=", + "dev": true + }, + "bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dev": true, + "optional": true, + "requires": { + "file-uri-to-path": "1.0.0" + } + }, + "bl": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz", + "integrity": "sha1-oWCRFxcQPAdBDO9j71Gzl8Alr5w=", + "dev": true, + "requires": { + "readable-stream": "^2.3.5", + "safe-buffer": "^5.1.1" + }, "dependencies": { - "debug": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.7.tgz", - "integrity": "sha1-krrR9tBbu2u6Isyoi80OyJTChh4=", + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha1-eCDZsWEgzFXKmud5JoCufbptf+I=", + "dev": true + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha1-Hsoc9xGu+BTAT2IlKjamL2yyO1c=", "dev": true, "requires": { - "ms": "2.0.0" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha1-nPFhG6YmhdcDCunkujQUnDrwP8g=", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "blob": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.4.tgz", + "integrity": "sha1-vPEwUspURj8w+fx+lbmkdjCpSSE=", + "dev": true + }, + "bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha1-nyKcFb4nJFT/qXOs4NvueaGww28=", + "dev": true + }, + "body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha1-lrJwnlfJxOCab9Zqj9l5hE9p8Io=", + "dev": true, + "requires": { + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" + }, + "dependencies": { "http-errors": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.1.tgz", - "integrity": "sha1-X4uO2YrKVFZWv1cplzh/kEpyIlc=", + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha1-T1ApzxMjnzEDblsuVSkrz7zIXI8=", "dev": true, "requires": { - "depd": "1.1.0", + "depd": "~1.1.2", "inherits": "2.0.3", - "setprototypeof": "1.0.3", - "statuses": ">= 1.3.1 < 2" + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" } }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha1-QdwaAV49WB8WIXdr4xr7KHapsbw=", "dev": true }, - "qs": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", - "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=", + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", "dev": true } } @@ -718,19 +1172,10 @@ "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", "dev": 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.x.x" - } - }, "bower": { - "version": "1.7.9", - "resolved": "https://registry.npmjs.org/bower/-/bower-1.7.9.tgz", - "integrity": "sha1-tylsI5Pg117apso5ZIEy3SVYErA=", + "version": "1.8.8", + "resolved": "https://registry.npmjs.org/bower/-/bower-1.8.8.tgz", + "integrity": "sha1-glRL40ozrq5++4vfmQUkeyz/qYU=", "dev": true }, "boxen": { @@ -769,32 +1214,35 @@ } }, "browser-sync": { - "version": "2.24.6", - "resolved": "https://registry.npmjs.org/browser-sync/-/browser-sync-2.24.6.tgz", - "integrity": "sha512-3cVW8Ft3sPQ1t9gqZXBDZhTyRce8NW4wf5KzpCYcg6fWjPbyt+vZLvEo+sTq7c7eNQhi8lInQWbjIFEpoM2f7Q==", + "version": "2.26.7", + "resolved": "https://registry.npmjs.org/browser-sync/-/browser-sync-2.26.7.tgz", + "integrity": "sha1-EgKHcW60BWUadsx0/oUcMTUFV/k=", "dev": true, "requires": { - "browser-sync-ui": "v1.0.1", + "browser-sync-client": "^2.26.6", + "browser-sync-ui": "^2.26.4", "bs-recipes": "1.3.4", - "chokidar": "1.7.0", + "bs-snippet-injector": "^2.0.1", + "chokidar": "^2.0.4", "connect": "3.6.6", - "connect-history-api-fallback": "^1.5.0", + "connect-history-api-fallback": "^1", "dev-ip": "^1.0.1", - "easy-extender": "2.3.2", - "eazy-logger": "3.0.2", + "easy-extender": "^2.3.4", + "eazy-logger": "^3", "etag": "^1.8.1", "fresh": "^0.5.2", "fs-extra": "3.0.1", "http-proxy": "1.15.2", - "immutable": "3.8.2", - "localtunnel": "1.9.0", - "micromatch": "2.3.11", - "opn": "4.0.2", + "immutable": "^3", + "localtunnel": "1.9.2", + "micromatch": "^3.1.10", + "opn": "5.3.0", "portscanner": "2.1.1", "qs": "6.2.3", "raw-body": "^2.3.2", "resp-modifier": "6.0.2", "rx": "4.1.0", + "send": "0.16.2", "serve-index": "1.9.1", "serve-static": "1.13.2", "server-destroy": "1.0.1", @@ -803,10 +1251,78 @@ "yargs": "6.4.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.4", + "normalize-path": "^2.1.1" + }, + "dependencies": { + "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.0.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 + }, + "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 + }, + "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.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "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.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", "dev": true }, "camelcase": { @@ -816,20 +1332,23 @@ "dev": true }, "chokidar": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", - "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", "dev": true, "requires": { - "anymatch": "^1.3.0", - "async-each": "^1.0.0", - "fsevents": "^1.0.0", - "glob-parent": "^2.0.0", - "inherits": "^2.0.1", + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", "is-binary-path": "^1.0.0", - "is-glob": "^2.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", "path-is-absolute": "^1.0.0", - "readdirp": "^2.0.0" + "readdirp": "^2.2.1", + "upath": "^1.1.1" } }, "connect": { @@ -844,4259 +1363,8540 @@ "utils-merge": "1.0.1" } }, - "finalhandler": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz", - "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=", + "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", - "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" + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "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.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.0.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.0.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.0.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 + } } }, - "http-proxy": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.15.2.tgz", - "integrity": "sha1-ZC/cr/5S00SNK9o7AHnpQJBk2jE=", + "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": { - "eventemitter3": "1.x.x", - "requires-port": "1.x.x" + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } } }, - "iconv-lite": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", - "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", "dev": true, "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "micromatch": { - "version": "2.3.11", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", - "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", - "dev": true, - "requires": { - "arr-diff": "^2.0.0", - "array-unique": "^0.2.1", - "braces": "^1.8.2", - "expand-brackets": "^0.1.4", - "extglob": "^0.3.1", - "filename-regex": "^2.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.1", - "kind-of": "^3.0.2", - "normalize-path": "^2.0.1", - "object.omit": "^2.0.0", - "parse-glob": "^3.0.4", - "regex-cache": "^0.4.2" - } - }, - "opn": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/opn/-/opn-4.0.2.tgz", - "integrity": "sha1-erwi5kTf9jsKltWrfyeQwPAavJU=", - "dev": true, - "requires": { - "object-assign": "^4.0.1", - "pinkie-promise": "^2.0.0" - } - }, - "parseurl": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", - "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=", - "dev": true - }, - "raw-body": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz", - "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==", - "dev": true, - "requires": { - "bytes": "3.0.0", - "http-errors": "1.6.3", - "iconv-lite": "0.4.23", - "unpipe": "1.0.0" - } - }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", - "dev": true - }, - "yargs": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-6.4.0.tgz", - "integrity": "sha1-gW4ahm1VmMzzTlWW3c4i2S2kkNQ=", - "dev": true, - "requires": { - "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", - "window-size": "^0.2.0", - "y18n": "^3.2.1", - "yargs-parser": "^4.1.0" - } - }, - "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" - } - } - } - }, - "browser-sync-ui": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browser-sync-ui/-/browser-sync-ui-1.0.1.tgz", - "integrity": "sha512-RIxmwVVcUFhRd1zxp7m2FfLnXHf59x4Gtj8HFwTA//3VgYI3AKkaQAuDL8KDJnE59XqCshxZa13JYuIWtZlKQg==", - "dev": true, - "requires": { - "async-each-series": "0.1.1", - "connect-history-api-fallback": "^1.1.0", - "immutable": "^3.7.6", - "server-destroy": "1.0.1", - "socket.io-client": "2.0.4", - "stream-throttle": "^0.1.3" - }, - "dependencies": { - "after": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", - "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=", - "dev": true - }, - "arraybuffer.slice": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", - "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==", - "dev": true - }, - "base64-arraybuffer": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", - "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=", - "dev": true - }, - "component-emitter": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", - "dev": true - }, - "engine.io-client": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.1.6.tgz", - "integrity": "sha512-hnuHsFluXnsKOndS4Hv6SvUrgdYx1pk2NqfaDMW+GWdgfU3+/V25Cj7I8a0x92idSpa5PIhJRKxPvp9mnoLsfg==", - "dev": true, - "requires": { - "component-emitter": "1.2.1", - "component-inherit": "0.0.3", - "debug": "~3.1.0", - "engine.io-parser": "~2.1.1", - "has-cors": "1.1.0", - "indexof": "0.0.1", - "parseqs": "0.0.5", - "parseuri": "0.0.5", - "ws": "~3.3.1", - "xmlhttprequest-ssl": "~1.5.4", - "yeast": "0.1.2" + "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" }, "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "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": { - "ms": "2.0.0" + "is-descriptor": "^1.0.0" + } + }, + "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.0" } } } }, - "engine.io-parser": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.2.tgz", - "integrity": "sha512-dInLFzr80RijZ1rGpx1+56/uFoH7/7InhH3kZt+Ms6hT8tNx3NGW/WNSA/f8As1WkOfkuyb3tnRyuXGxusclMw==", - "dev": true, - "requires": { - "after": "0.8.2", - "arraybuffer.slice": "~0.0.7", - "base64-arraybuffer": "0.1.5", - "blob": "0.0.4", - "has-binary2": "~1.0.2" - } - }, - "isarray": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", - "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", - "dev": true - }, - "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.0" - } - }, - "parseuri": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz", - "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", + "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": { - "better-assert": "~1.0.0" + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } } }, - "socket.io-client": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.0.4.tgz", - "integrity": "sha1-CRilUkBtxeVAs4Dc2Xr8SmQzL44=", + "finalhandler": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz", + "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=", "dev": true, "requires": { - "backo2": "1.0.2", - "base64-arraybuffer": "0.1.5", - "component-bind": "1.0.0", - "component-emitter": "1.2.1", - "debug": "~2.6.4", - "engine.io-client": "~3.1.0", - "has-cors": "1.1.0", - "indexof": "0.0.1", - "object-component": "0.0.3", - "parseqs": "0.0.5", - "parseuri": "0.0.5", - "socket.io-parser": "~3.1.1", - "to-array": "0.1.4" + "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" } }, - "socket.io-parser": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.1.3.tgz", - "integrity": "sha512-g0a2HPqLguqAczs3dMECuA1RgoGFPyvDqcbaDEdCWY9g59kdUAz3YRmaJBNKXflrHNwB7Q12Gkf/0CZXfdHR7g==", + "fsevents": { + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.11.tgz", + "integrity": "sha512-+ux3lx6peh0BpvY0JebGyZoiR4D+oYzdPZMKJwkZ+sFkNJzpL7tXc/wehS49gUAxg3tmMHPHZkA8JU2rhhgDHw==", "dev": true, + "optional": true, "requires": { - "component-emitter": "1.2.1", - "debug": "~3.1.0", - "has-binary2": "~1.0.2", - "isarray": "2.0.1" + "bindings": "^1.5.0", + "nan": "^2.12.1", + "node-pre-gyp": "*" }, "dependencies": { + "abbrev": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "aproba": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "balanced-match": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "chownr": { + "version": "1.1.3", + "bundled": true, + "dev": true, + "optional": true + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "optional": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "optional": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "version": "3.2.6", + "bundled": true, "dev": true, + "optional": true, "requires": { - "ms": "2.0.0" + "ms": "^2.1.1" } - } - } - }, - "ultron": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", - "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==", - "dev": true - }, - "ws": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", - "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", - "dev": true, - "requires": { - "async-limiter": "~1.0.0", - "safe-buffer": "~5.1.0", - "ultron": "~1.1.0" - } - }, - "xmlhttprequest-ssl": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz", - "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=", - "dev": true - } - } - }, - "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.30000639", - "electron-to-chromium": "^1.2.7" - } - }, + }, + "deep-extend": { + "version": "0.6.0", + "bundled": true, + "dev": true, + "optional": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "detect-libc": { + "version": "1.0.3", + "bundled": true, + "dev": true, + "optional": true + }, + "fs-minipass": { + "version": "1.2.7", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.6.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "glob": { + "version": "7.1.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "iconv-lite": { + "version": "0.4.24", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ignore-walk": { + "version": "3.0.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "bundled": true, + "dev": true, + "optional": true + }, + "ini": { + "version": "1.3.5", + "bundled": true, + "dev": true, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "bundled": true, + "dev": true, + "optional": true + }, + "minipass": { + "version": "2.9.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "minizlib": { + "version": "1.3.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.9.0" + } + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "needle": { + "version": "2.4.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "debug": "^3.2.6", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + } + }, + "node-pre-gyp": { + "version": "0.14.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.1", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.2.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4.4.2" + } + }, + "nopt": { + "version": "4.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "npm-bundled": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "npm-normalize-package-bin": "^1.0.1" + } + }, + "npm-normalize-package-bin": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "npm-packlist": { + "version": "1.4.7", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" + } + }, + "npmlog": { + "version": "4.1.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "wrappy": "1" + } + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "osenv": { + "version": "0.1.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "process-nextick-args": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "rc": { + "version": "1.2.8", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "rimraf": { + "version": "2.7.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "glob": "^7.1.3" + } + }, + "safe-buffer": { + "version": "5.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "safer-buffer": { + "version": "2.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "sax": { + "version": "1.2.4", + "bundled": true, + "dev": true, + "optional": true + }, + "semver": { + "version": "5.7.1", + "bundled": true, + "dev": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "tar": { + "version": "4.4.13", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.8.6", + "minizlib": "^1.2.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.3" + } + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "wide-align": { + "version": "1.1.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "string-width": "^1.0.2 || 2" + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "yallist": { + "version": "3.1.1", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "http-proxy": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.15.2.tgz", + "integrity": "sha1-ZC/cr/5S00SNK9o7AHnpQJBk2jE=", + "dev": true, + "requires": { + "eventemitter3": "1.x.x", + "requires-port": "1.x.x" + } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "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.0" + } + }, + "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.0" + } + }, + "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" + } + }, + "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.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "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.0.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-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" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "nan": { + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", + "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==", + "dev": true, + "optional": true + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "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" + } + }, + "opn": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/opn/-/opn-5.3.0.tgz", + "integrity": "sha512-bYJHo/LOmoTd+pfiYhfZDnf9zekVJrY+cnS2a5F2x+w5ppvTqObojTP7WiFG+kVZs9Inw+qQ/lw7TroWwhdd2g==", + "dev": true, + "requires": { + "is-wsl": "^1.1.0" + } + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true + }, + "raw-body": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.1.tgz", + "integrity": "sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA==", + "dev": true, + "requires": { + "bytes": "3.1.0", + "http-errors": "1.7.3", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + }, + "readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + } + }, + "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.0" + } + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "dev": true + }, + "yargs": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-6.4.0.tgz", + "integrity": "sha1-gW4ahm1VmMzzTlWW3c4i2S2kkNQ=", + "dev": true, + "requires": { + "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", + "window-size": "^0.2.0", + "y18n": "^3.2.1", + "yargs-parser": "^4.1.0" + } + }, + "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" + } + } + } + }, + "browser-sync-client": { + "version": "2.26.6", + "resolved": "https://registry.npmjs.org/browser-sync-client/-/browser-sync-client-2.26.6.tgz", + "integrity": "sha1-5SAdOs6K7oivF2VrewwGILb45Ks=", + "dev": true, + "requires": { + "etag": "1.8.1", + "fresh": "0.5.2", + "mitt": "^1.1.3", + "rxjs": "^5.5.6" + } + }, + "browser-sync-ui": { + "version": "2.26.4", + "resolved": "https://registry.npmjs.org/browser-sync-ui/-/browser-sync-ui-2.26.4.tgz", + "integrity": "sha1-N3LxPGuT8tfTM/S+DKHsAqrpfbo=", + "dev": true, + "requires": { + "async-each-series": "0.1.1", + "connect-history-api-fallback": "^1", + "immutable": "^3", + "server-destroy": "1.0.1", + "socket.io-client": "^2.0.4", + "stream-throttle": "^0.1.3" + }, + "dependencies": { + "after": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", + "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=", + "dev": true + }, + "arraybuffer.slice": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", + "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==", + "dev": true + }, + "base64-arraybuffer": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", + "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=", + "dev": true + }, + "blob": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz", + "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==", + "dev": true + }, + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "dev": true + }, + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "engine.io-client": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.4.0.tgz", + "integrity": "sha512-a4J5QO2k99CM2a0b12IznnyQndoEvtA4UAldhGzKqnHf42I3Qs2W5SPnDvatZRcMaNZs4IevVicBPayxYt6FwA==", + "dev": true, + "requires": { + "component-emitter": "1.2.1", + "component-inherit": "0.0.3", + "debug": "~4.1.0", + "engine.io-parser": "~2.2.0", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "parseqs": "0.0.5", + "parseuri": "0.0.5", + "ws": "~6.1.0", + "xmlhttprequest-ssl": "~1.5.4", + "yeast": "0.1.2" + } + }, + "engine.io-parser": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.2.0.tgz", + "integrity": "sha512-6I3qD9iUxotsC5HEMuuGsKA0cXerGz+4uGcXQEkfBidgKf0amsjrrtwcbwK/nzpZBxclXlV7gGl9dgWvu4LF6w==", + "dev": true, + "requires": { + "after": "0.8.2", + "arraybuffer.slice": "~0.0.7", + "base64-arraybuffer": "0.1.5", + "blob": "0.0.5", + "has-binary2": "~1.0.2" + } + }, + "isarray": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", + "dev": true + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "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.0" + } + }, + "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.0" + } + }, + "socket.io-client": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.3.0.tgz", + "integrity": "sha512-cEQQf24gET3rfhxZ2jJ5xzAOo/xhZwK+mOqtGRg5IowZsMgwvHwnf/mCRapAAkadhM26y+iydgwsXGObBB5ZdA==", + "dev": true, + "requires": { + "backo2": "1.0.2", + "base64-arraybuffer": "0.1.5", + "component-bind": "1.0.0", + "component-emitter": "1.2.1", + "debug": "~4.1.0", + "engine.io-client": "~3.4.0", + "has-binary2": "~1.0.2", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "object-component": "0.0.3", + "parseqs": "0.0.5", + "parseuri": "0.0.5", + "socket.io-parser": "~3.3.0", + "to-array": "0.1.4" + } + }, + "socket.io-parser": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.3.0.tgz", + "integrity": "sha512-hczmV6bDgdaEbVqhAeVMM/jfUfzuEZHsQg6eOmLgJht6G3mPKMxYm75w2+qhAQZ+4X+1+ATZ+QFKeOZD5riHng==", + "dev": true, + "requires": { + "component-emitter": "1.2.1", + "debug": "~3.1.0", + "isarray": "2.0.1" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "ws": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.1.4.tgz", + "integrity": "sha512-eqZfL+NE/YQc1/ZynhojeV8q+H050oR8AZ2uIev7RU10svA9ZnJUddHcOUZTJLinZ9yEfdA2kSATS2qZK5fhJA==", + "dev": true, + "requires": { + "async-limiter": "~1.0.0" + } + }, + "xmlhttprequest-ssl": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz", + "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=", + "dev": true + } + } + }, + "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.30000639", + "electron-to-chromium": "^1.2.7" + } + }, "bs-recipes": { "version": "1.3.4", "resolved": "https://registry.npmjs.org/bs-recipes/-/bs-recipes-1.3.4.tgz", "integrity": "sha1-DS1NSKcYyMBEdp/cT4lZLci2lYU=", "dev": true }, - "buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", + "bs-snippet-injector": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bs-snippet-injector/-/bs-snippet-injector-2.0.1.tgz", + "integrity": "sha1-YbU5PxH1JVntEgaTEANDtu2wTdU=", + "dev": true + }, + "buffer-alloc": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", + "integrity": "sha1-iQ3ZDZI6hz4I4Q5f1RpX5bfM4Ow=", + "dev": true, + "requires": { + "buffer-alloc-unsafe": "^1.1.0", + "buffer-fill": "^1.0.0" + } + }, + "buffer-alloc-unsafe": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", + "integrity": "sha1-vX3CauKXLQ7aJTvgYdupkjScGfA=", + "dev": true + }, + "buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", + "dev": true + }, + "buffer-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.0.tgz", + "integrity": "sha1-WWFrSYME1Var1GaWayLu2j7KX74=", + "dev": true + }, + "buffer-fill": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", + "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=", + "dev": true + }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha1-MnE7wCj3XAL9txDXx7zsHyxgcO8=", + "dev": true + }, + "buffer-to-vinyl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/buffer-to-vinyl/-/buffer-to-vinyl-1.1.0.tgz", + "integrity": "sha1-APFfruOreh3aLN5tkSG//dB7ImI=", + "dev": true, + "requires": { + "file-type": "^3.1.0", + "readable-stream": "^2.0.2", + "uuid": "^2.0.1", + "vinyl": "^1.0.0" + }, + "dependencies": { + "file-type": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", + "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=", + "dev": true + }, + "uuid": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz", + "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=", + "dev": true + } + } + }, + "bufferstreams": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/bufferstreams/-/bufferstreams-1.1.1.tgz", + "integrity": "sha1-AWE3MGCsWYjv+ZBYcxEU9uGV1R4=", + "dev": true, + "requires": { + "readable-stream": "^2.0.2" + } + }, + "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 + }, + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha1-9s95M6Ng4FiPqf3oVlHNx/gF0fY=", + "dev": true + }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha1-Cn9GQWgxyLZi7jb+TnxZ129marI=", + "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.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.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.0" + }, + "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" + } + }, + "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" + } + } + } + }, + "union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + } + } + } + }, + "cacheable-request": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-2.1.4.tgz", + "integrity": "sha1-DYCIAbY0KtM8kd+dC0TcCbkeXD0=", + "dev": true, + "optional": true, + "requires": { + "clone-response": "1.0.2", + "get-stream": "3.0.0", + "http-cache-semantics": "3.8.1", + "keyv": "3.0.0", + "lowercase-keys": "1.0.0", + "normalize-url": "2.0.1", + "responselike": "1.0.2" + }, + "dependencies": { + "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, + "optional": true + }, + "lowercase-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz", + "integrity": "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=", + "dev": true, + "optional": true + }, + "normalize-url": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-2.0.1.tgz", + "integrity": "sha1-g1qdoVUfom9w6SMpBpojqmV01+Y=", + "dev": true, + "optional": true, + "requires": { + "prepend-http": "^2.0.0", + "query-string": "^5.0.1", + "sort-keys": "^2.0.0" + } + }, + "prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", + "dev": true, + "optional": true + }, + "query-string": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", + "integrity": "sha1-p4wBK3HBfgXy4/ojGd0zBoLvs8s=", + "dev": true, + "optional": true, + "requires": { + "decode-uri-component": "^0.2.0", + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" + } + }, + "sort-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", + "integrity": "sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg=", + "dev": true, + "optional": true, + "requires": { + "is-plain-obj": "^1.0.0" + } + } + } + }, + "call-me-maybe": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", + "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=", + "dev": true + }, + "caller-callsite": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", + "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", + "dev": true, + "requires": { + "callsites": "^2.0.0" + }, + "dependencies": { + "callsites": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", + "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", + "dev": true + } + } + }, + "caller-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", + "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", + "dev": true, + "requires": { + "callsites": "^0.2.0" + } + }, + "callsite": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", + "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=", + "dev": true + }, + "callsites": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", + "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", + "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.2.0", + "upper-case": "^1.1.1" + } + }, + "camelcase": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", + "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.0.0", + "map-obj": "^1.0.0" + }, + "dependencies": { + "camelcase": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", + "dev": true + } + } + }, + "caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha1-Xk2Q4idJYdRikZl99Znj7QCO5MA=", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + }, + "dependencies": { + "browserslist": { + "version": "4.8.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.8.3.tgz", + "integrity": "sha512-iU43cMMknxG1ClEZ2MDKeonKE1CCrFVkQK2AqO2YWFmvIrx4JWrvQ4w4hQez6EpVI8rHTtqh/ruHHDHSOKxvUg==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001017", + "electron-to-chromium": "^1.3.322", + "node-releases": "^1.1.44" + } + }, + "electron-to-chromium": { + "version": "1.3.336", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.336.tgz", + "integrity": "sha512-FtazvnXAizSVMxQNPqUcTv2UElY5r3uRPQwiU1Tyg/Yc2UFr+/3wqDoLIV9ES6ablW3IrCcR8uEK2ppxaNPWhw==", + "dev": true + } + } + }, + "caniuse-db": { + "version": "1.0.30000696", + "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000696.tgz", + "integrity": "sha1-5x9cYeH5bHo69OeRrF21XhFzdgQ=", + "dev": true + }, + "caniuse-lite": { + "version": "1.0.30001021", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001021.tgz", + "integrity": "sha1-517R72263VgKx+dyC7FvB7CD8lQ=", + "dev": true + }, + "capture-stack-trace": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz", + "integrity": "sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==", + "dev": true + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true + }, + "caw": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/caw/-/caw-2.0.1.tgz", + "integrity": "sha1-bDygcfwZRyCIPC3F2psHS/x+npU=", + "dev": true, + "optional": true, + "requires": { + "get-proxy": "^2.0.0", + "isurl": "^1.0.0-alpha5", + "tunnel-agent": "^0.6.0", + "url-to-options": "^1.0.1" + } + }, + "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.3", + "lazy-cache": "^1.0.3" + } + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "change-case": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/change-case/-/change-case-3.0.2.tgz", + "integrity": "sha1-/Uh0bM4C8D8KZyV30dOo3C7OsDc=", + "dev": true, + "requires": { + "camel-case": "^3.0.0", + "constant-case": "^2.0.0", + "dot-case": "^2.1.0", + "header-case": "^1.0.0", + "is-lower-case": "^1.1.0", + "is-upper-case": "^1.1.0", + "lower-case": "^1.1.1", + "lower-case-first": "^1.0.0", + "no-case": "^2.3.2", + "param-case": "^2.1.0", + "pascal-case": "^2.0.0", + "path-case": "^2.1.0", + "sentence-case": "^2.1.0", + "snake-case": "^2.1.0", + "swap-case": "^1.1.0", + "title-case": "^2.1.0", + "upper-case": "^1.1.1", + "upper-case-first": "^1.1.0" + } + }, + "chardet": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", + "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=", + "dev": true + }, + "cheerio": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-0.20.0.tgz", + "integrity": "sha1-XHEPK6uVZTJyhCugHG6mGzVF7DU=", + "dev": true, + "requires": { + "css-select": "~1.2.0", + "dom-serializer": "~0.1.0", + "entities": "~1.1.1", + "htmlparser2": "~3.8.1", + "jsdom": "^7.0.2", + "lodash": "^4.1.0" + }, + "dependencies": { + "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", + "domutils": "1.5.1", + "nth-check": "~1.0.1" + } + }, + "css-what": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", + "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==", + "dev": true + }, + "dom-serializer": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", + "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", + "dev": true, + "requires": { + "domelementtype": "^1.3.0", + "entities": "^1.1.1" + } + }, + "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", + "domelementtype": "1" + } + }, + "entities": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", + "dev": true + } + } + }, + "chokidar": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", + "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", + "dev": true, + "requires": { + "anymatch": "^1.3.0", + "async-each": "^1.0.0", + "fsevents": "^1.0.0", + "glob-parent": "^2.0.0", + "inherits": "^2.0.1", + "is-binary-path": "^1.0.0", + "is-glob": "^2.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.0.0" + }, + "dependencies": { + "glob-parent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "dev": true, + "requires": { + "is-glob": "^2.0.0" + } + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + } + } + }, + "circular-json": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.1.tgz", + "integrity": "sha1-vos2rvzN6LPKeqLWr8B6NyQsDS0=", + "dev": true + }, + "class-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/class-extend/-/class-extend-0.1.2.tgz", + "integrity": "sha1-gFeoKwD1P4Kl1ixQ74z/3sb6vDQ=", + "dev": true, + "requires": { + "object-assign": "^2.0.0" + }, + "dependencies": { + "object-assign": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-2.1.1.tgz", + "integrity": "sha1-Q8NuXVaf+OSBbE76i+AtJpZ8GKo=", + "dev": true + } + } + }, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha1-+TNprouafOAv1B+q0MqDAzGQxGM=", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "clean-css": { + "version": "3.4.28", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-3.4.28.tgz", + "integrity": "sha1-vxlF6C/ICPVWlebd6uwBQA79A/8=", + "dev": true, + "requires": { + "commander": "2.8.x", + "source-map": "0.4.x" + }, + "dependencies": { + "commander": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz", + "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=", + "dev": true, + "requires": { + "graceful-readlink": ">= 1.0.0" + } + }, + "source-map": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", + "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", + "dev": true, + "requires": { + "amdefine": ">=0.0.4" + } + } + } + }, + "cli-boxes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz", + "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=", + "dev": true + }, + "cli-cursor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", + "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", + "dev": true, + "requires": { + "restore-cursor": "^1.0.1" + } + }, + "cli-list": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/cli-list/-/cli-list-0.1.8.tgz", + "integrity": "sha1-rubUXExZv4AGi7loCJ+wbxrt3Ao=", + "dev": true + }, + "cli-table": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/cli-table/-/cli-table-0.3.1.tgz", + "integrity": "sha1-9TsFJmqLGguTSz0IIebi3FkUriM=", + "dev": true, + "requires": { + "colors": "1.0.3" + } + }, + "cli-usage": { + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/cli-usage/-/cli-usage-0.1.10.tgz", + "integrity": "sha1-LJ0wo4JLSNFhWAqPjV3+U9ZrANI=", + "dev": true, + "requires": { + "marked": "^0.7.0", + "marked-terminal": "^3.3.0" + }, + "dependencies": { + "ansi-escapes": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "ansicolors": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/ansicolors/-/ansicolors-0.3.2.tgz", + "integrity": "sha1-ZlWX3oap/+Oqm/vmyuXG6kJrSXk=", + "dev": true + }, + "cardinal": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/cardinal/-/cardinal-2.1.1.tgz", + "integrity": "sha1-fMEFXYItISlU0HsIXeolHMe8VQU=", + "dev": true, + "requires": { + "ansicolors": "~0.3.2", + "redeyed": "~2.1.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "marked": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/marked/-/marked-0.7.0.tgz", + "integrity": "sha512-c+yYdCZJQrsRjTPhUx7VKkApw9bwDkNbHUKo1ovgcfDjb2kc8rLuRbIFyXL5WOEUwzSSKo3IXpph2K6DqB/KZg==", + "dev": true + }, + "marked-terminal": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/marked-terminal/-/marked-terminal-3.3.0.tgz", + "integrity": "sha512-+IUQJ5VlZoAFsM5MHNT7g3RHSkA3eETqhRCdXv4niUMAKHQ7lb1yvAcuGPmm4soxhmtX13u4Li6ZToXtvSEH+A==", + "dev": true, + "requires": { + "ansi-escapes": "^3.1.0", + "cardinal": "^2.1.1", + "chalk": "^2.4.1", + "cli-table": "^0.3.1", + "node-emoji": "^1.4.1", + "supports-hyperlinks": "^1.0.1" + } + }, + "redeyed": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/redeyed/-/redeyed-2.1.1.tgz", + "integrity": "sha1-iYS1gV2ZyyIEacme7v/jiRPmzAs=", + "dev": true, + "requires": { + "esprima": "~4.0.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "cli-width": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-1.1.1.tgz", + "integrity": "sha1-pNKT72frt7iNSk1CwMzwDE0eNm0=", + "dev": true + }, + "cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "dev": true, + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wrap-ansi": "^2.0.0" + } + }, + "clone": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.2.tgz", + "integrity": "sha1-Jgt6meux7f4kdTgXX3gyQ8sZ0Uk=", + "dev": true + }, + "clone-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", + "integrity": "sha1-4+JbIHrE5wGvch4staFnksrD3Fg=", + "dev": true + }, + "clone-regexp": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/clone-regexp/-/clone-regexp-1.0.1.tgz", + "integrity": "sha512-Fcij9IwRW27XedRIJnSOEupS7RVcXtObJXbcUOX93UCLqqOdRpkvzKywOOSizmEK/Is3S/RHX9dLdfo6R1Q1mw==", + "dev": true, + "requires": { + "is-regexp": "^1.0.0", + "is-supported-regexp-flag": "^1.0.0" + } + }, + "clone-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", + "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "dev": true, + "optional": true, + "requires": { + "mimic-response": "^1.0.0" + } + }, + "clone-stats": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", + "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=", + "dev": true + }, + "cloneable-readable": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.2.tgz", + "integrity": "sha512-Bq6+4t+lbM8vhTs/Bef5c5AdEMtapp/iFb6+s4/Hh9MVTt8OLKH7ZOOZSCT+Ys7hsHvqv0GuMPJ1lnQJVHvxpg==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "process-nextick-args": "^2.0.0", + "readable-stream": "^2.3.5" + }, + "dependencies": { + "process-nextick-args": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", + "dev": true + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "co": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/co/-/co-3.1.0.tgz", + "integrity": "sha1-TqVOpaCJOBUxheFSEMaNkJK8G3g=", + "dev": true + }, + "coa": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", + "integrity": "sha1-Q/bCEVG07yv1cYfbDXPeIp4+fsM=", + "dev": true, + "requires": { + "@types/q": "^1.5.1", + "chalk": "^2.4.1", + "q": "^1.1.2" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "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 + }, + "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.0" + } + }, + "color": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/color/-/color-3.1.2.tgz", + "integrity": "sha1-aBSOf4XUGtdknF+oyBBvCY0inhA=", + "dev": true, + "requires": { + "color-convert": "^1.9.1", + "color-string": "^1.5.2" + }, + "dependencies": { + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "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-convert": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.0.tgz", + "integrity": "sha1-Gsz5fdc5uYO/mU1W/sj5WFNkG3o=", + "requires": { + "color-name": "^1.1.1" + } + }, + "color-name": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.2.tgz", + "integrity": "sha1-XIq3K2S9IhXWF66VWeuxSEdc+Y0=" + }, + "color-string": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.3.tgz", + "integrity": "sha1-ybvF8BtYtUkvPWhXRZy2WQziBMw=", + "dev": true, + "requires": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha1-k4NDeaHMmgxh+C9S8NBDIiUb1aI=" + }, + "colors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", + "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=", + "dev": true + }, + "combine-lists": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/combine-lists/-/combine-lists-1.0.1.tgz", + "integrity": "sha1-RYwH4J4NkA/Ci3Cj/sLazR0st/Y=", + "dev": true, + "requires": { + "lodash": "^4.5.0" + } + }, + "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.10.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.10.0.tgz", + "integrity": "sha1-4fXTJF3iRtGlygRwL6GtG9fkBf4=", + "dev": true, + "requires": { + "graceful-readlink": ">= 1.0.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 + }, + "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.2.2", + "typedarray": "^0.0.6" + } + }, + "concat-with-sourcemaps": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/concat-with-sourcemaps/-/concat-with-sourcemaps-1.1.0.tgz", + "integrity": "sha1-1OqT8FriV5CVG5nns7CeOQikCC4=", + "dev": true, + "requires": { + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true + } + } + }, + "config-chain": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.12.tgz", + "integrity": "sha1-D96NCRIA616AjK8l/mGMAvSOTvo=", + "dev": true, + "requires": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, + "configstore": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-1.4.0.tgz", + "integrity": "sha1-w1eB0FAdJowlxUuLF/YkDopPsCE=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "mkdirp": "^0.5.0", + "object-assign": "^4.0.1", + "os-tmpdir": "^1.0.0", + "osenv": "^0.1.0", + "uuid": "^2.0.1", + "write-file-atomic": "^1.1.2", + "xdg-basedir": "^2.0.0" + }, + "dependencies": { + "uuid": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz", + "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=", + "dev": true + } + } + }, + "connect": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", + "integrity": "sha1-XUk0iRDKpeB6AYALAw0MNfIEhPg=", + "dev": true, + "requires": { + "debug": "2.6.9", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", + "utils-merge": "1.0.1" + } + }, + "connect-history-api-fallback": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", + "integrity": "sha1-izIIk1kwjRERFdgcrT/Oq4iPl7w=", + "dev": true + }, + "console-stream": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/console-stream/-/console-stream-0.1.1.tgz", + "integrity": "sha1-oJX+B7IEZZVfL6/Si11yvM2UnUQ=", + "dev": true, + "optional": true + }, + "constant-case": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/constant-case/-/constant-case-2.0.0.tgz", + "integrity": "sha1-QXV2TTidP6nI7NKRhu1gBSQ7akY=", + "dev": true, + "requires": { + "snake-case": "^2.1.0", + "upper-case": "^1.1.1" + } + }, + "content-disposition": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha1-4TDK9+cnkIfFYWwgB9BIVpiYT70=", + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "5.1.2" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha1-mR7GnSluAxN0fVm9/St0XDX4go0=", + "dev": true, + "optional": true + } + } + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha1-4TjMdeBAxyexlm/l5fjJruJW/js=", + "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 + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "cosmiconfig": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", + "integrity": "sha1-BA9yaAnFked6F8CjYmykW08Wixo=", + "dev": true, + "requires": { + "import-fresh": "^2.0.0", + "is-directory": "^0.3.1", + "js-yaml": "^3.13.1", + "parse-json": "^4.0.0" + }, + "dependencies": { + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + } + } + }, + "create-error-class": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", + "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", + "dev": true, + "requires": { + "capture-stack-trace": "^1.0.0" + } + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha1-Sl7Hxk364iw6FBJNus3uhG2Ay8Q=", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha1-qVT5Ma66UI0we78Gnv8MAclhFvc=", + "dev": true + } + } + }, + "cross-spawn-async": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/cross-spawn-async/-/cross-spawn-async-2.2.5.tgz", + "integrity": "sha1-hF/wwINKPe2dFg2sptOQkGuyiMw=", + "dev": true, + "requires": { + "lru-cache": "^4.0.0", + "which": "^1.2.8" + } + }, + "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-declaration-sorter": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz", + "integrity": "sha1-wZiUD2OnbX42wecQGLABchBUyyI=", + "dev": true, + "requires": { + "postcss": "^7.0.1", + "timsort": "^0.3.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "postcss": { + "version": "7.0.26", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.26.tgz", + "integrity": "sha1-XtYVz8qzW6m7uCQUpPqI6hBClYc=", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "css-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", + "integrity": "sha1-ajRlM1ZjWTSoG6ymjQJVQyEF2+8=", + "dev": true, + "requires": { + "boolbase": "^1.0.0", + "css-what": "^3.2.1", + "domutils": "^1.7.0", + "nth-check": "^1.0.2" + } + }, + "css-select-base-adapter": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", + "integrity": "sha1-Oy/0lyzDYquIVhUHqVQIoUMhNdc=", + "dev": true + }, + "css-tree": { + "version": "1.0.0-alpha.37", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", + "integrity": "sha1-mL69YsTB2flg7DQM+fdSLjBwmiI=", + "dev": true, + "requires": { + "mdn-data": "2.0.4", + "source-map": "^0.6.1" + } + }, + "css-unit-converter": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/css-unit-converter/-/css-unit-converter-1.1.1.tgz", + "integrity": "sha1-2bkoGtz9jO2TW9urqDeGiX9k6ZY=", + "dev": true + }, + "css-what": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.2.1.tgz", + "integrity": "sha1-9KjxJCEGRiG0VnVeNKA6LCLfXaE=", + "dev": true + }, + "cssesc": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", + "integrity": "sha1-OxO9G7HLNuG8taTc0n9UxdyzVwM=", + "dev": true + }, + "cssnano": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.0.0.tgz", + "integrity": "sha1-4aQWHxfYLf9fuhepCnv9l63Xmhs=", + "dev": true, + "requires": { + "cosmiconfig": "^5.0.0", + "cssnano-preset-default": "^4.0.0", + "is-resolvable": "^1.0.0", + "postcss": "^6.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "cssnano-preset-default": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz", + "integrity": "sha1-UexmLM/KD4izltzZZ5zbkxvhf3Y=", + "dev": true, + "requires": { + "css-declaration-sorter": "^4.0.1", + "cssnano-util-raw-cache": "^4.0.1", + "postcss": "^7.0.0", + "postcss-calc": "^7.0.1", + "postcss-colormin": "^4.0.3", + "postcss-convert-values": "^4.0.1", + "postcss-discard-comments": "^4.0.2", + "postcss-discard-duplicates": "^4.0.2", + "postcss-discard-empty": "^4.0.1", + "postcss-discard-overridden": "^4.0.1", + "postcss-merge-longhand": "^4.0.11", + "postcss-merge-rules": "^4.0.3", + "postcss-minify-font-values": "^4.0.2", + "postcss-minify-gradients": "^4.0.2", + "postcss-minify-params": "^4.0.2", + "postcss-minify-selectors": "^4.0.2", + "postcss-normalize-charset": "^4.0.1", + "postcss-normalize-display-values": "^4.0.2", + "postcss-normalize-positions": "^4.0.2", + "postcss-normalize-repeat-style": "^4.0.2", + "postcss-normalize-string": "^4.0.2", + "postcss-normalize-timing-functions": "^4.0.2", + "postcss-normalize-unicode": "^4.0.1", + "postcss-normalize-url": "^4.0.1", + "postcss-normalize-whitespace": "^4.0.2", + "postcss-ordered-values": "^4.1.2", + "postcss-reduce-initial": "^4.0.3", + "postcss-reduce-transforms": "^4.0.2", + "postcss-svgo": "^4.0.2", + "postcss-unique-selectors": "^4.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "postcss": { + "version": "7.0.26", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.26.tgz", + "integrity": "sha1-XtYVz8qzW6m7uCQUpPqI6hBClYc=", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "cssnano-util-get-arguments": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz", + "integrity": "sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8=", + "dev": true + }, + "cssnano-util-get-match": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz", + "integrity": "sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0=", + "dev": true + }, + "cssnano-util-raw-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz", + "integrity": "sha1-sm1f1fcqEd/np4RvtMZyYPlr8oI=", + "dev": true, + "requires": { + "postcss": "^7.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "postcss": { + "version": "7.0.26", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.26.tgz", + "integrity": "sha1-XtYVz8qzW6m7uCQUpPqI6hBClYc=", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "cssnano-util-same-parent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz", + "integrity": "sha1-V0CC+yhZ0ttDOFWDXZqEVuoYu/M=", + "dev": true + }, + "csso": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.0.2.tgz", + "integrity": "sha1-5fgas6Vrju+38Aks5yeTKfRU3j0=", + "dev": true, + "requires": { + "css-tree": "1.0.0-alpha.37" + } + }, + "cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "dev": true, + "optional": true + }, + "cssstyle": { + "version": "0.2.37", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-0.2.37.tgz", + "integrity": "sha1-VBCXI0yyUTyDzu06zdwn/yeYfVQ=", + "dev": true, + "optional": true, + "requires": { + "cssom": "0.3.x" + } + }, + "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.1" + } + }, + "custom-event": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", + "integrity": "sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU=", + "dev": true + }, + "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.9" + } + }, + "dargs": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/dargs/-/dargs-4.1.0.tgz", + "integrity": "sha1-A6nbtLXC8Tm/FK5T8LiipqhvThc=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + } + } + }, + "dateformat": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz", + "integrity": "sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk=", + "dev": true, + "requires": { + "get-stdin": "^4.0.1", + "meow": "^3.3.0" + } + }, + "deap": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/deap/-/deap-1.0.1.tgz", + "integrity": "sha1-Bkbp4aCV/+ip5ATWjR923PV+Zvs=", + "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 + }, + "decompress": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.0.tgz", + "integrity": "sha1-eu3YVCflqS2s/lVnSnxQXpbQH50=", + "dev": true, + "optional": true, + "requires": { + "decompress-tar": "^4.0.0", + "decompress-tarbz2": "^4.0.0", + "decompress-targz": "^4.0.0", + "decompress-unzip": "^4.0.1", + "graceful-fs": "^4.1.10", + "make-dir": "^1.0.0", + "pify": "^2.3.0", + "strip-dirs": "^2.0.0" + } + }, + "decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "dev": true, + "requires": { + "mimic-response": "^1.0.0" + } + }, + "decompress-tar": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz", + "integrity": "sha1-cYy9P8sWIJcW5womuE57pFkuWvE=", + "dev": true, + "optional": true, + "requires": { + "file-type": "^5.2.0", + "is-stream": "^1.1.0", + "tar-stream": "^1.5.2" + }, + "dependencies": { + "file-type": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", + "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=", + "dev": true, + "optional": true + } + } + }, + "decompress-tarbz2": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz", + "integrity": "sha1-MIKluIDqQEOBY0nzeLVsUWvho5s=", + "dev": true, + "optional": true, + "requires": { + "decompress-tar": "^4.1.0", + "file-type": "^6.1.0", + "is-stream": "^1.1.0", + "seek-bzip": "^1.0.5", + "unbzip2-stream": "^1.0.9" + }, + "dependencies": { + "file-type": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz", + "integrity": "sha1-5QzXXTVv/tTjBtxPW89Sp5kDqRk=", + "dev": true, + "optional": true + } + } + }, + "decompress-targz": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz", + "integrity": "sha1-wJvDXE0R894J8tLaU+neI+fOHu4=", + "dev": true, + "optional": true, + "requires": { + "decompress-tar": "^4.1.1", + "file-type": "^5.2.0", + "is-stream": "^1.1.0" + }, + "dependencies": { + "file-type": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", + "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=", + "dev": true, + "optional": true + } + } + }, + "decompress-unzip": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz", + "integrity": "sha1-3qrM39FK6vhVePczroIQ+bSEj2k=", + "dev": true, + "optional": true, + "requires": { + "file-type": "^3.8.0", + "get-stream": "^2.2.0", + "pify": "^2.3.0", + "yauzl": "^2.4.2" + }, + "dependencies": { + "file-type": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", + "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=", + "dev": true, + "optional": true + }, + "get-stream": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz", + "integrity": "sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4=", + "dev": true, + "optional": true, + "requires": { + "object-assign": "^4.0.1", + "pinkie-promise": "^2.0.0" + } + } + } + }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true + }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, + "default-uid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/default-uid/-/default-uid-1.0.0.tgz", + "integrity": "sha1-/O+p359axAyJFtkS3R/hFGqjxZ4=", + "dev": true + }, + "defaults": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", + "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", + "dev": true, + "requires": { + "clone": "^1.0.2" + } + }, + "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.8" + } + }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha1-1Flono1lS6d+AqgX+HENcCyxbp0=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "dependencies": { + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } + } + }, + "del": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/del/-/del-2.2.1.tgz", + "integrity": "sha1-9nYwJkciCcTwNJERxawoCGi+xP4=", + "dev": true, + "requires": { + "globby": "^5.0.0", + "is-path-cwd": "^1.0.0", + "is-path-in-cwd": "^1.0.0", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "rimraf": "^2.2.8" + } + }, + "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 + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", "dev": true }, - "buffer-equal": { + "deprecated": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/deprecated/-/deprecated-0.0.1.tgz", + "integrity": "sha1-+cmvVGSvoeepcUWKi97yqpTVuxk=", + "dev": true + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", + "dev": true + }, + "detect-conflict": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/detect-conflict/-/detect-conflict-1.0.1.tgz", + "integrity": "sha1-CIZXpmqWHAUBnbfEIwiDsca0F24=", + "dev": true + }, + "detect-file": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.0.tgz", - "integrity": "sha1-WWFrSYME1Var1GaWayLu2j7KX74=", + "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", + "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=", "dev": true }, - "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "detect-newline": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-1.0.3.tgz", + "integrity": "sha1-6XsQA4d9cMCa8a81v63/Fo3kkg0=", + "dev": true, + "requires": { + "get-stdin": "^4.0.1", + "minimist": "^1.1.0" + } + }, + "dev-ip": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dev-ip/-/dev-ip-1.0.1.tgz", + "integrity": "sha1-p2o+0YVb56ASu4rBbLgPPADcKPA=", "dev": true }, - "buffer-to-vinyl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/buffer-to-vinyl/-/buffer-to-vinyl-1.1.0.tgz", - "integrity": "sha1-APFfruOreh3aLN5tkSG//dB7ImI=", + "di": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", + "integrity": "sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw=", + "dev": true + }, + "diff": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/diff/-/diff-2.2.3.tgz", + "integrity": "sha1-YOr9DSjukG5Oj/ClLBIpUhAzv5k=", + "dev": true + }, + "dir-glob": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.0.0.tgz", + "integrity": "sha1-CyBdK2rvmCOMooZZioIE0p0KADQ=", "dev": true, "requires": { - "file-type": "^3.1.0", - "readable-stream": "^2.0.2", - "uuid": "^2.0.1", - "vinyl": "^1.0.0" + "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": "sha1-zvMdyOCho7sNEFwM2Xzzv0f0428=", + "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 + } } }, - "bufferstreams": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/bufferstreams/-/bufferstreams-1.1.1.tgz", - "integrity": "sha1-AWE3MGCsWYjv+ZBYcxEU9uGV1R4=", + "doctrine": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.0.0.tgz", + "integrity": "sha1-xz2NKQnSIpHhoAejlYBNqLZl/mM=", "dev": true, "requires": { - "readable-stream": "^2.0.2" + "esutils": "^2.0.2", + "isarray": "^1.0.0" } }, - "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 + "dom-serialize": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", + "integrity": "sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs=", + "dev": true, + "requires": { + "custom-event": "~1.0.0", + "ent": "~2.2.0", + "extend": "^3.0.0", + "void-elements": "^2.0.0" + } }, - "bytes": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-2.4.0.tgz", - "integrity": "sha1-fZcZb51br39pNeJZhVSe3SpsIzk=", + "dom-serializer": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", + "integrity": "sha1-GvuB9TNxcXXUeGVd68XjMtn5u1E=", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + }, + "dependencies": { + "domelementtype": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.1.tgz", + "integrity": "sha1-H4vf6R9aeAYydOgDtL3O326U+U0=", + "dev": true + } + } + }, + "domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha1-0EjESzew0Qp/Kj1f7j9DM9eQSB8=", "dev": true }, - "caller-path": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", - "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", + "domhandler": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.3.0.tgz", + "integrity": "sha1-LeWaCCLVAn+r/28DLCsloqir5zg=", "dev": true, "requires": { - "callsites": "^0.2.0" + "domelementtype": "1" } }, - "callsite": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", - "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=", + "domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha1-Vuo0HoNOBuZ0ivehyyXaZ+qfjCo=", + "dev": true, + "requires": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "dot-case": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-2.1.1.tgz", + "integrity": "sha1-NNzzf1Co6TwrO8qLt/uRVcfaO+4=", + "dev": true, + "requires": { + "no-case": "^2.2.0" + } + }, + "dot-prop": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", + "integrity": "sha1-HxngwuGqDjJ5fEl5nyg3rGr2nFc=", + "dev": true, + "requires": { + "is-obj": "^1.0.0" + } + }, + "downgrade-root": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/downgrade-root/-/downgrade-root-1.2.2.tgz", + "integrity": "sha1-UxMZcVsOgf/MIusoR4uidkPhLGw=", + "dev": true, + "requires": { + "default-uid": "^1.0.0", + "is-root": "^1.0.0" + } + }, + "download": { + "version": "6.2.5", + "resolved": "https://registry.npmjs.org/download/-/download-6.2.5.tgz", + "integrity": "sha1-rNalQuTNC7Qspwz8mMnkOwcDlxQ=", + "dev": true, + "optional": true, + "requires": { + "caw": "^2.0.0", + "content-disposition": "^0.5.2", + "decompress": "^4.0.0", + "ext-name": "^5.0.0", + "file-type": "5.2.0", + "filenamify": "^2.0.0", + "get-stream": "^3.0.0", + "got": "^7.0.0", + "make-dir": "^1.0.0", + "p-event": "^1.0.0", + "pify": "^3.0.0" + }, + "dependencies": { + "file-type": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", + "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=", + "dev": true, + "optional": 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, + "optional": true + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true, + "optional": true + } + } + }, + "duplexer": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", + "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=", "dev": true }, - "callsites": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", - "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", + "duplexer2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", + "dev": true, + "requires": { + "readable-stream": "^2.0.2" + } + }, + "duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", "dev": true }, - "camel-case": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", - "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=", + "duplexify": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.5.0.tgz", + "integrity": "sha1-GqdzAC4VeEV+nZ1KULDMquvL1gQ=", + "dev": true, + "requires": { + "end-of-stream": "1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + }, + "dependencies": { + "end-of-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.0.0.tgz", + "integrity": "sha1-1FlucCc0qT5A6a+GQxnqvZn/Lw4=", + "dev": true, + "requires": { + "once": "~1.3.0" + } + }, + "once": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz", + "integrity": "sha1-suJhVXzkwxTsgwTz+oJmPkKXyiA=", + "dev": true, + "requires": { + "wrappy": "1" + } + } + } + }, + "each-async": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/each-async/-/each-async-1.1.1.tgz", + "integrity": "sha1-3uUim98KtrogEqOV4bhpq/iBNHM=", + "dev": true, + "requires": { + "onetime": "^1.0.0", + "set-immediate-shim": "^1.0.0" + } + }, + "easy-extender": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/easy-extender/-/easy-extender-2.3.4.tgz", + "integrity": "sha1-KYeJtk+aq6Yhacd6KztktMlYm48=", + "dev": true, + "requires": { + "lodash": "^4.17.10" + } + }, + "eazy-logger": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/eazy-logger/-/eazy-logger-3.0.2.tgz", + "integrity": "sha1-oyWqXlPROiIliJsqxBE7K5Y29Pw=", "dev": true, "requires": { - "no-case": "^2.2.0", - "upper-case": "^1.1.1" + "tfunk": "^3.0.1" } }, - "camelcase": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", - "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", - "dev": true + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "dev": true, + "optional": true, + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } }, - "camelcase-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", - "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", + "editions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/editions/-/editions-2.3.0.tgz", + "integrity": "sha512-jeXYwHPKbitU1l14dWlsl5Nm+b1Hsm7VX73BsrQ4RVwEcAQQIPFHTZAbVtuIGxZBrpdT2FXd8lbtrNBrzZxIsA==", "dev": true, "requires": { - "camelcase": "^2.0.0", - "map-obj": "^1.0.0" + "errlop": "^2.0.0", + "semver": "^6.3.0" }, "dependencies": { - "camelcase": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", - "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true } } }, - "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.3.6", - "caniuse-db": "^1.0.30000529", - "lodash.memoize": "^4.1.2", - "lodash.uniq": "^4.5.0" - } + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "dev": true }, - "caniuse-db": { - "version": "1.0.30000696", - "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000696.tgz", - "integrity": "sha1-5x9cYeH5bHo69OeRrF21XhFzdgQ=", + "ejs": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.4.2.tgz", + "integrity": "sha1-cFfrSBKVj7cxhBzZyjUzQ+/ll7E=", "dev": true }, - "capture-stack-trace": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz", - "integrity": "sha1-Sm+gc5nCa7pH8LJJa00PtAjFVQ0=", + "electron-to-chromium": { + "version": "1.3.14", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.14.tgz", + "integrity": "sha1-ZK8Pnv08PGrNV9cfg7Scp+6cS0M=", "dev": true }, - "cardinal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/cardinal/-/cardinal-1.0.0.tgz", - "integrity": "sha1-UOIcGwqjdyn5N33vGWtanOyTLuk=", + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "dev": true + }, + "end-of-stream": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.0.tgz", + "integrity": "sha1-epDYM+/abPpurA9JSduw+tOmMgY=", "dev": true, "requires": { - "ansicolors": "~0.2.1", - "redeyed": "~1.0.0" + "once": "^1.4.0" } }, - "caseless": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz", - "integrity": "sha1-cVuW6phBWTzDMGeSP17GDr2k99c=", - "dev": true - }, - "caw": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/caw/-/caw-1.2.0.tgz", - "integrity": "sha1-/7Im/n78VHKI3GLuPpcHPCEtEDQ=", + "engine.io": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.2.1.tgz", + "integrity": "sha1-tgKBw1SEpw7gNR6g6/+D7IyVIqI=", "dev": true, "requires": { - "get-proxy": "^1.0.1", - "is-obj": "^1.0.0", - "object-assign": "^3.0.0", - "tunnel-agent": "^0.4.0" + "accepts": "~1.3.4", + "base64id": "1.0.0", + "cookie": "0.3.1", + "debug": "~3.1.0", + "engine.io-parser": "~2.1.0", + "ws": "~3.3.1" }, "dependencies": { - "object-assign": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz", - "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=", + "after": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", + "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=", + "dev": true + }, + "arraybuffer.slice": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", + "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==", + "dev": true + }, + "base64-arraybuffer": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", + "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=", + "dev": true + }, + "base64id": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz", + "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=", + "dev": true + }, + "blob": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz", + "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==", + "dev": true + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha1-W7WgZyYotkFJVmuhaBnmFRjGcmE=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "engine.io-parser": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.3.tgz", + "integrity": "sha1-dXq5cPvy37Mse3SwMyFtVznveaY=", + "dev": true, + "requires": { + "after": "0.8.2", + "arraybuffer.slice": "~0.0.7", + "base64-arraybuffer": "0.1.5", + "blob": "0.0.5", + "has-binary2": "~1.0.2" + } + }, + "ultron": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", + "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==", "dev": true + }, + "ws": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", + "integrity": "sha1-8c+E/i1ekB686U767OeF8YeiKPI=", + "dev": true, + "requires": { + "async-limiter": "~1.0.0", + "safe-buffer": "~5.1.0", + "ultron": "~1.1.0" + } } } }, - "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.3", - "lazy-cache": "^1.0.3" - } - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "change-case": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/change-case/-/change-case-3.0.2.tgz", - "integrity": "sha512-Mww+SLF6MZ0U6kdg11algyKd5BARbyM4TbFBepwowYSR5ClfQGCGtxNXgykpN0uF/bstWeaGDT4JWaDh8zWAHA==", + "engine.io-client": { + "version": "1.6.9", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-1.6.9.tgz", + "integrity": "sha1-HWrUgEilCDyVCWlDsp0279shJAE=", "dev": true, "requires": { - "camel-case": "^3.0.0", - "constant-case": "^2.0.0", - "dot-case": "^2.1.0", - "header-case": "^1.0.0", - "is-lower-case": "^1.1.0", - "is-upper-case": "^1.1.0", - "lower-case": "^1.1.1", - "lower-case-first": "^1.0.0", - "no-case": "^2.3.2", - "param-case": "^2.1.0", - "pascal-case": "^2.0.0", - "path-case": "^2.1.0", - "sentence-case": "^2.1.0", - "snake-case": "^2.1.0", - "swap-case": "^1.1.0", - "title-case": "^2.1.0", - "upper-case": "^1.1.1", - "upper-case-first": "^1.1.0" + "component-emitter": "1.1.2", + "component-inherit": "0.0.3", + "debug": "2.2.0", + "engine.io-parser": "1.2.4", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "parsejson": "0.0.1", + "parseqs": "0.0.2", + "parseuri": "0.0.4", + "ws": "1.0.1", + "xmlhttprequest-ssl": "1.5.1", + "yeast": "0.1.2" }, "dependencies": { - "no-case": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", - "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", + "debug": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", + "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", "dev": true, "requires": { - "lower-case": "^1.1.1" + "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 } } }, - "cheerio": { - "version": "0.20.0", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-0.20.0.tgz", - "integrity": "sha1-XHEPK6uVZTJyhCugHG6mGzVF7DU=", + "engine.io-parser": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-1.2.4.tgz", + "integrity": "sha1-4Il7C/FOeS1M0qWVBVORnFaUjEI=", "dev": true, "requires": { - "css-select": "~1.2.0", - "dom-serializer": "~0.1.0", - "entities": "~1.1.1", - "htmlparser2": "~3.8.1", - "jsdom": "^7.0.2", - "lodash": "^4.1.0" + "after": "0.8.1", + "arraybuffer.slice": "0.0.6", + "base64-arraybuffer": "0.1.2", + "blob": "0.0.4", + "has-binary": "0.1.6", + "utf8": "2.1.0" + }, + "dependencies": { + "has-binary": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/has-binary/-/has-binary-0.1.6.tgz", + "integrity": "sha1-JTJvOc+k9hath4eJTjryz7x7bhA=", + "dev": true, + "requires": { + "isarray": "0.0.1" + } + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + } } }, - "chokidar": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.5.1.tgz", - "integrity": "sha1-QxFfzy2Pt08GtjCu7M0GcVoUbdE=", + "ent": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", + "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=", + "dev": true + }, + "entities": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.0.tgz", + "integrity": "sha1-aNYITKsbB5dnVA2A5Wo5tCPkq/Q=", + "dev": true + }, + "errlop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/errlop/-/errlop-2.0.0.tgz", + "integrity": "sha512-z00WIrQhtOMUnjdTG0O4f6hMG64EVccVDBy2WwgjcF8S4UB1exGYuc2OFwmdQmsJwLQVEIHWHPCz/omXXgAZHw==", + "dev": true + }, + "error": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/error/-/error-7.2.1.tgz", + "integrity": "sha512-fo9HBvWnx3NGUKMvMwB/CBCMMrfEJgbDTVDEkPygA3Bdd3lM1OyCd+rbQ8BwnpF6GdVeOLDNmyL4N5Bg80ZvdA==", "dev": true, "requires": { - "anymatch": "^1.3.0", - "async-each": "^1.0.0", - "fsevents": "^1.0.0", - "glob-parent": "^2.0.0", - "inherits": "^2.0.1", - "is-binary-path": "^1.0.0", - "is-glob": "^2.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.0.0" + "string-template": "~0.2.1" } }, - "circular-json": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.1.tgz", - "integrity": "sha1-vos2rvzN6LPKeqLWr8B6NyQsDS0=", - "dev": true - }, - "clap": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/clap/-/clap-1.2.0.tgz", - "integrity": "sha1-WckP4+E3EEdG/xlGmiemNP9oyFc=", + "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": { - "chalk": "^1.1.3" + "is-arrayish": "^0.2.1" } }, - "class-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/class-extend/-/class-extend-0.1.2.tgz", - "integrity": "sha1-gFeoKwD1P4Kl1ixQ74z/3sb6vDQ=", + "es-abstract": { + "version": "1.17.2", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.2.tgz", + "integrity": "sha1-llsQr1ZZe2MdoVhywXpAXobB/UY=", "dev": true, "requires": { - "object-assign": "^2.0.0" + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.1.5", + "is-regex": "^1.0.5", + "object-inspect": "^1.7.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.0", + "string.prototype.trimleft": "^2.1.1", + "string.prototype.trimright": "^2.1.1" }, "dependencies": { - "object-assign": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-2.1.1.tgz", - "integrity": "sha1-Q8NuXVaf+OSBbE76i+AtJpZ8GKo=", + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", + "dev": true + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true } } }, - "clean-css": { - "version": "3.4.27", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-3.4.27.tgz", - "integrity": "sha1-re91sxwWD/pdcvTeZ5ZuJmDBolU=", + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha1-5VzUyc3BiLzvsDs2bHNjI/xciYo=", "dev": true, "requires": { - "commander": "2.8.x", - "source-map": "0.4.x" - }, - "dependencies": { - "commander": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz", - "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=", - "dev": true, - "requires": { - "graceful-readlink": ">= 1.0.0" - } - }, - "source-map": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", - "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", - "dev": true, - "requires": { - "amdefine": ">=0.0.4" - } - } + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" } }, - "cli-boxes": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz", - "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=", - "dev": true + "es5-ext": { + "version": "0.10.23", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.23.tgz", + "integrity": "sha1-dXi1G+l0IHpUh4IbVlOMIk5Oezg=", + "dev": true, + "requires": { + "es6-iterator": "2", + "es6-symbol": "~3.1" + } }, - "cli-cursor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", - "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", + "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": { - "restore-cursor": "^1.0.1" + "d": "1", + "es5-ext": "^0.10.14", + "es6-symbol": "^3.1" } }, - "cli-list": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/cli-list/-/cli-list-0.1.8.tgz", - "integrity": "sha1-rubUXExZv4AGi7loCJ+wbxrt3Ao=", + "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", + "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-promise": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.4.tgz", + "integrity": "sha512-/NdNZVJg+uZgtm9eS3O6lrOLYmQag2DjdEXuPaHlZ6RuVqgqaVZfgYCepEIKsLqwdQArOPtC3XzRLqGGfT8KQQ==", "dev": true }, - "cli-table": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/cli-table/-/cli-table-0.3.1.tgz", - "integrity": "sha1-9TsFJmqLGguTSz0IIebi3FkUriM=", + "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": { - "colors": "1.0.3" + "d": "1", + "es5-ext": "~0.10.14", + "es6-iterator": "~2.0.1", + "es6-symbol": "3.1.1", + "event-emitter": "~0.3.5" } }, - "cli-usage": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/cli-usage/-/cli-usage-0.1.4.tgz", - "integrity": "sha1-fAHg3HBsI0s5yTODjI4gshdXduI=", + "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": { - "marked": "^0.3.6", - "marked-terminal": "^1.6.2" + "d": "1", + "es5-ext": "~0.10.14" } }, - "cli-width": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-1.1.1.tgz", - "integrity": "sha1-pNKT72frt7iNSk1CwMzwDE0eNm0=", - "dev": true - }, - "cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "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": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wrap-ansi": "^2.0.0" + "d": "1", + "es5-ext": "^0.10.14", + "es6-iterator": "^2.0.1", + "es6-symbol": "^3.1.1" } }, - "clone": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.2.tgz", - "integrity": "sha1-Jgt6meux7f4kdTgXX3gyQ8sZ0Uk=", + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", "dev": true }, - "clone-buffer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", - "integrity": "sha1-4+JbIHrE5wGvch4staFnksrD3Fg=", - "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=" }, - "clone-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-regexp/-/clone-regexp-1.0.0.tgz", - "integrity": "sha1-6uCiQT9VwJQvgYwin+/OhF1/Oxw=", + "escodegen": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.12.1.tgz", + "integrity": "sha512-Q8t2YZ+0e0pc7NRVj3B4tSQ9rim1oi4Fh46k2xhJ2qOiEwhQfdjyEQddWdj7ZFaKmU+5104vn1qrcjEPWq+bgQ==", "dev": true, + "optional": true, "requires": { - "is-regexp": "^1.0.0", - "is-supported-regexp-flag": "^1.0.0" + "esprima": "^3.1.3", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" + }, + "dependencies": { + "esprima": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", + "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=", + "dev": true, + "optional": true + } } }, - "clone-stats": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", - "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=", - "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.3", + "es6-weak-map": "^2.0.1", + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + }, + "dependencies": { + "estraverse": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", + "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", + "dev": true + } + } }, - "cloneable-readable": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.2.tgz", - "integrity": "sha512-Bq6+4t+lbM8vhTs/Bef5c5AdEMtapp/iFb6+s4/Hh9MVTt8OLKH7ZOOZSCT+Ys7hsHvqv0GuMPJ1lnQJVHvxpg==", + "eslint": { + "version": "3.19.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-3.19.0.tgz", + "integrity": "sha1-yPxiAcf0DdCJQbh8CFdnOGpnmsw=", "dev": true, "requires": { - "inherits": "^2.0.1", - "process-nextick-args": "^2.0.0", - "readable-stream": "^2.3.5" + "babel-code-frame": "^6.16.0", + "chalk": "^1.1.3", + "concat-stream": "^1.5.2", + "debug": "^2.1.1", + "doctrine": "^2.0.0", + "escope": "^3.6.0", + "espree": "^3.4.0", + "esquery": "^1.0.0", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "file-entry-cache": "^2.0.0", + "glob": "^7.0.3", + "globals": "^9.14.0", + "ignore": "^3.2.0", + "imurmurhash": "^0.1.4", + "inquirer": "^0.12.0", + "is-my-json-valid": "^2.10.0", + "is-resolvable": "^1.0.0", + "js-yaml": "^3.5.1", + "json-stable-stringify": "^1.0.0", + "levn": "^0.3.0", + "lodash": "^4.0.0", + "mkdirp": "^0.5.0", + "natural-compare": "^1.4.0", + "optionator": "^0.8.2", + "path-is-inside": "^1.0.1", + "pluralize": "^1.2.1", + "progress": "^1.1.8", + "require-uncached": "^1.0.2", + "shelljs": "^0.7.5", + "strip-bom": "^3.0.0", + "strip-json-comments": "~2.0.1", + "table": "^3.7.8", + "text-table": "~0.2.0", + "user-home": "^2.0.0" }, "dependencies": { - "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", + "cli-width": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.1.0.tgz", + "integrity": "sha1-sjTKIJsp72b8UY2bmNWEewDt8Ao=", "dev": true }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "estraverse": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", + "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", + "dev": true + }, + "inquirer": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-0.12.0.tgz", + "integrity": "sha1-HvK/1jUE3wvHV4X/+MLEHfEvB34=", "dev": true, "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "ansi-escapes": "^1.1.0", + "ansi-regex": "^2.0.0", + "chalk": "^1.0.0", + "cli-cursor": "^1.0.1", + "cli-width": "^2.0.0", + "figures": "^1.3.5", + "lodash": "^4.3.0", + "readline2": "^1.0.1", + "run-async": "^0.1.0", + "rx-lite": "^3.1.2", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.0", + "through": "^2.3.6" } }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "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": { - "safe-buffer": "~5.1.0" + "minimist": "0.0.8" + } + }, + "pluralize": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-1.2.1.tgz", + "integrity": "sha1-0aIUg/0iu0HlihL6NCGCMUCJfEU=", + "dev": true + }, + "shelljs": { + "version": "0.7.8", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.7.8.tgz", + "integrity": "sha1-3svPh0sNHl+3LhSxZKloMEjprLM=", + "dev": true, + "requires": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true } } }, - "co": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/co/-/co-3.1.0.tgz", - "integrity": "sha1-TqVOpaCJOBUxheFSEMaNkJK8G3g=", + "eslint-config-angular": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/eslint-config-angular/-/eslint-config-angular-0.5.0.tgz", + "integrity": "sha1-4KrgEy4550Z98/dUf+yBpE02hcQ=", "dev": true }, - "coa": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/coa/-/coa-1.0.3.tgz", - "integrity": "sha1-G1Sl4dz3fJkEVdTe6pjFZEFtyJM=", - "dev": true, - "requires": { - "q": "^1.1.2" - } - }, - "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=", + "eslint-plugin-angular": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-angular/-/eslint-plugin-angular-1.3.1.tgz", + "integrity": "sha1-Kw28Bzjj4qwW8cxSWz4kEMMZhOA=", "dev": true }, - "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.3.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=", - "requires": { - "color-name": "^1.1.1" - } - }, - "color-name": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.2.tgz", - "integrity": "sha1-XIq3K2S9IhXWF66VWeuxSEdc+Y0=" - }, - "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.0.0" - } - }, - "color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==" - }, - "colormin": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/colormin/-/colormin-1.1.2.tgz", - "integrity": "sha1-6i90IKcrlogaOKrlnsEkpvcpgTM=", + "espree": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/espree/-/espree-3.4.3.tgz", + "integrity": "sha1-KRC1zNSc6JPC//+qtP2LOjG4I3Q=", "dev": true, "requires": { - "color": "^0.11.0", - "css-color-names": "0.0.4", - "has": "^1.0.1" + "acorn": "^5.0.1", + "acorn-jsx": "^3.0.0" + }, + "dependencies": { + "acorn": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.0.3.tgz", + "integrity": "sha1-xGDfCEkUY/AozLguqzcwvwEIez0=", + "dev": true + } } }, - "colors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", - "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=", + "esprima": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", "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=", + "esquery": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.0.tgz", + "integrity": "sha1-z7qLV9f7qT8XKYqKAGoEzaE9gPo=", "dev": true, "requires": { - "lodash": "^4.5.0" + "estraverse": "^4.0.0" + }, + "dependencies": { + "estraverse": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", + "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", + "dev": true + } } }, - "combined-stream": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", - "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", + "esrecurse": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.0.tgz", + "integrity": "sha1-+pVo2Y04I/mkHZHpAtyrnqblsWM=", "dev": true, "requires": { - "delayed-stream": "~1.0.0" + "estraverse": "^4.1.0", + "object-assign": "^4.0.1" + }, + "dependencies": { + "estraverse": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", + "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", + "dev": true + } } }, - "commander": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.10.0.tgz", - "integrity": "sha1-4fXTJF3iRtGlygRwL6GtG9fkBf4=", + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true, - "requires": { - "graceful-readlink": ">= 1.0.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 + "optional": true }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "esutils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", "dev": true }, - "concat-stream": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz", - "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=", + "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": { - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" + "d": "1", + "es5-ext": "~0.10.14" } }, - "concat-with-sourcemaps": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/concat-with-sourcemaps/-/concat-with-sourcemaps-1.1.0.tgz", - "integrity": "sha512-4gEjHJFT9e+2W/77h/DS5SGUgwDaOwprX8L/gl5+3ixnzkVJJsZWDSelmN3Oilw3LNDZjZV0yqH1hLG3k6nghg==", + "event-stream": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", + "integrity": "sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE=", "dev": true, "requires": { - "source-map": "^0.6.1" + "duplexer": "~0.1.1", + "from": "~0", + "map-stream": "~0.1.0", + "pause-stream": "0.0.11", + "split": "0.3", + "stream-combiner": "~0.0.4", + "through": "~2.3.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==", + "map-stream": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", + "integrity": "sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ=", "dev": true } } }, - "config-chain": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.11.tgz", - "integrity": "sha1-q6CXR9++TD5w52am5BWG4YWfxvI=", - "dev": true, - "requires": { - "ini": "^1.3.4", - "proto-list": "~1.2.1" - } + "eventemitter3": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-1.2.0.tgz", + "integrity": "sha1-HIaZHYFq0eUEdQ5zh0Ik7PO+xQg=", + "dev": true }, - "configstore": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-1.4.0.tgz", - "integrity": "sha1-w1eB0FAdJowlxUuLF/YkDopPsCE=", + "exec-buffer": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/exec-buffer/-/exec-buffer-3.2.0.tgz", + "integrity": "sha1-sWhtvZBMfPmC5lLB9aebHlVzCCs=", "dev": true, + "optional": true, "requires": { - "graceful-fs": "^4.1.2", - "mkdirp": "^0.5.0", - "object-assign": "^4.0.1", - "os-tmpdir": "^1.0.0", - "osenv": "^0.1.0", - "uuid": "^2.0.1", - "write-file-atomic": "^1.1.2", - "xdg-basedir": "^2.0.0" + "execa": "^0.7.0", + "p-finally": "^1.0.0", + "pify": "^3.0.0", + "rimraf": "^2.5.4", + "tempfile": "^2.0.0" }, "dependencies": { - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true + "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, + "optional": true, + "requires": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "execa": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", + "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", "dev": true, + "optional": true, "requires": { - "minimist": "0.0.8" + "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" } + }, + "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, + "optional": true + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true, + "optional": true } } }, - "connect": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/connect/-/connect-3.4.1.tgz", - "integrity": "sha1-ohNh0/QJnvdhzabcSpc7seuwo00=", + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha1-xiNqW7TfbW8V6I5/AXeYIWdJ3dg=", + "dev": true, + "optional": true, + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "execall": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execall/-/execall-1.0.0.tgz", + "integrity": "sha1-c9CQTjlbPKsGWLCNCewlMH8pu3M=", + "dev": true, + "requires": { + "clone-regexp": "^1.0.0" + } + }, + "executable": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz", + "integrity": "sha1-QVMr/zYdPlevTXY7cFgtsY9dEzw=", + "dev": true, + "optional": true, + "requires": { + "pify": "^2.2.0" + } + }, + "exit-hook": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz", + "integrity": "sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=", + "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": { - "debug": "~2.2.0", - "finalhandler": "0.4.1", - "parseurl": "~1.3.1", - "utils-merge": "1.0.0" + "array-slice": "^0.2.3", + "array-unique": "^0.2.1", + "braces": "^0.1.2" }, "dependencies": { - "debug": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", - "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", + "array-slice": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz", + "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU=", + "dev": true + }, + "braces": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-0.1.5.tgz", + "integrity": "sha1-wIVxEIUpHYt1/ddOqw+FlygHEeY=", "dev": true, "requires": { - "ms": "0.7.1" + "expand-range": "^0.1.0" } }, - "ms": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", - "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", + "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 } } }, - "connect-history-api-fallback": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz", - "integrity": "sha1-sGhzk0vF40T+9hGhlqb6rgruAVo=", - "dev": true - }, - "console-stream": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/console-stream/-/console-stream-0.1.1.tgz", - "integrity": "sha1-oJX+B7IEZZVfL6/Si11yvM2UnUQ=", + "expand-brackets": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", "dev": true, - "optional": true + "requires": { + "is-posix-bracket": "^0.1.0" + } }, - "constant-case": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/constant-case/-/constant-case-2.0.0.tgz", - "integrity": "sha1-QXV2TTidP6nI7NKRhu1gBSQ7akY=", + "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": { - "snake-case": "^2.1.0", - "upper-case": "^1.1.1" + "fill-range": "^2.1.0" } }, - "content-type": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.2.tgz", - "integrity": "sha1-t9ETrueo3Se9IRM8TcJSnfFyHu0=", - "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 - }, - "core-js": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.4.1.tgz", - "integrity": "sha1-TekR5mew6ukSTjQlS1OupvxhjT4=", - "dev": true + "expand-tilde": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", + "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", + "dev": true, + "requires": { + "homedir-polyfill": "^1.0.1" + } }, - "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=" + "ext-list": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz", + "integrity": "sha1-C5jmTtgvWs8PKTG6v2khLvUt3Tc=", + "dev": true, + "optional": true, + "requires": { + "mime-db": "^1.28.0" + } }, - "create-error-class": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", - "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", + "ext-name": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ext-name/-/ext-name-5.0.0.tgz", + "integrity": "sha1-cHgZgdGD7hXROZPIgiBFxQbI8KY=", "dev": true, + "optional": true, "requires": { - "capture-stack-trace": "^1.0.0" + "ext-list": "^2.0.0", + "sort-keys-length": "^1.0.0" } }, - "cross-spawn": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-2.2.3.tgz", - "integrity": "sha1-+sViAt/T0N2GF3jy2iA79DS7ghw=", + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha1-+LETa0Bx+9jrFAr/hYsQGewpFfo=", + "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": { - "cross-spawn-async": "^2.2.2", - "spawn-sync": "^1.0.15" + "is-extendable": "^0.1.0" } }, - "cross-spawn-async": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/cross-spawn-async/-/cross-spawn-async-2.2.5.tgz", - "integrity": "sha1-hF/wwINKPe2dFg2sptOQkGuyiMw=", + "external-editor": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-1.1.1.tgz", + "integrity": "sha1-Etew24UPf/fnCBuvQAVwAGDEYAs=", "dev": true, "requires": { - "lru-cache": "^4.0.0", - "which": "^1.2.8" + "extend": "^3.0.0", + "spawn-sync": "^1.0.15", + "tmp": "^0.0.29" + }, + "dependencies": { + "tmp": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.29.tgz", + "integrity": "sha1-8lEl/w3Z2jzLDC3Tce4SiLuRKMA=", + "dev": true, + "requires": { + "os-tmpdir": "~1.0.1" + } + } } }, - "cryptiles": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", - "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", + "extglob": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", "dev": true, "requires": { - "boom": "2.x.x" + "is-extglob": "^1.0.0" + }, + "dependencies": { + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + } } }, - "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-select": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", - "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", + "extract-zip": { + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.6.7.tgz", + "integrity": "sha1-qEC0uK9kAyZMjbV/Txp0Mz74H+k=", "dev": true, "requires": { - "boolbase": "~1.0.0", - "css-what": "2.1", - "domutils": "1.5.1", - "nth-check": "~1.0.1" + "concat-stream": "1.6.2", + "debug": "2.6.9", + "mkdirp": "0.5.1", + "yauzl": "2.4.1" + }, + "dependencies": { + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "yauzl": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.4.1.tgz", + "integrity": "sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU=", + "dev": true, + "requires": { + "fd-slicer": "~1.0.1" + } + } } }, - "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=", + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", "dev": true }, - "cssnano": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-3.10.0.tgz", - "integrity": "sha1-Tzj2zqK5sX+gFJDyPx3GjqZcHDg=", + "fancy-log": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.0.tgz", + "integrity": "sha1-Rb4X0Cu5kX1gzP/UmVyZnmyMmUg=", "dev": true, "requires": { - "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" + "chalk": "^1.1.1", + "time-stamp": "^1.0.0" } }, - "csso": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/csso/-/csso-2.3.2.tgz", - "integrity": "sha1-3dUsWHAz9J6Utx/FVWnyUuj/X4U=", + "fast-deep-equal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", + "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", + "dev": true + }, + "fast-glob": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz", + "integrity": "sha1-aVOFfDr6R1//ku5gFdUtpwpM050=", "dev": true, "requires": { - "clap": "^1.0.9", - "source-map": "^0.5.3" + "@mrmlnc/readdir-enhanced": "^2.2.1", + "@nodelib/fs.stat": "^1.1.2", + "glob-parent": "^3.1.0", + "is-glob": "^4.0.0", + "merge2": "^1.2.3", + "micromatch": "^3.1.10" }, "dependencies": { - "source-map": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", - "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=", + "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 + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha1-NgSLv/TntH4TZkQxbJlmnqWukfE=", + "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.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha1-WXn9PxTNUxVl5fot8av/8d+u5yk=", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "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.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.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.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "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.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.0.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.0.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": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha1-cpyR4thXt6QZofmqZWhcTDP1hF0=", + "dev": true + } + } + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha1-rQD+TcYSqSMuhxhxHcXLWrAoVUM=", + "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" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "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.0" + } + } + } + }, + "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.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha1-dWfb6fL14kZ7x3q4PEopSCQHpdw=", + "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.0.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-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha1-LBY7P6+xtgbZ0Xko8FwqHDjgdnc=", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha1-B8BQNKbDSfoG4k+jWqdttFgM5N0=", + "dev": true + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha1-cIWbyVyYQJUvNZoGij/En57PrCM=", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha1-fLCd2jqGWFcFxks5pkZgOGguj+I=", + "dev": true, + "requires": { + "extend-shallow": "^3.0.0" + } } } }, - "cssom": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.2.tgz", - "integrity": "sha1-uANhcMefB6kP8vFuIihAJ6JDhIs=", + "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 + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "fd-slicer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz", + "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=", "dev": true, - "optional": true + "requires": { + "pend": "~1.2.0" + } }, - "cssstyle": { - "version": "0.2.37", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-0.2.37.tgz", - "integrity": "sha1-VBCXI0yyUTyDzu06zdwn/yeYfVQ=", + "figures": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", + "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", "dev": true, - "optional": true, "requires": { - "cssom": "0.3.x" + "escape-string-regexp": "^1.0.5", + "object-assign": "^4.1.0" } }, - "ctype": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/ctype/-/ctype-0.5.3.tgz", - "integrity": "sha1-gsGMJGH3QRTvFsE1IkrQuRRMoS8=", - "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=", + "file-entry-cache": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", + "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", "dev": true, "requires": { - "array-find-index": "^1.0.1" + "flat-cache": "^1.2.1", + "object-assign": "^4.0.1" } }, - "custom-event": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", - "integrity": "sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU=", + "file-saver": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/file-saver/-/file-saver-1.3.8.tgz", + "integrity": "sha1-zdTETTqiZOrC9o7BZbx5HDSvEjI=" + }, + "file-type": { + "version": "10.11.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-10.11.0.tgz", + "integrity": "sha1-KWHQnkZ1ufuaPua2npzSP0P9GJA=", "dev": true }, - "d": { + "file-uri-to-path": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", - "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "dev": true, + "optional": true + }, + "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 + }, + "filename-reserved-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz", + "integrity": "sha1-q/c9+rc10EVECr/qLZHzieu/oik=", + "dev": true, + "optional": true + }, + "filenamify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-2.1.0.tgz", + "integrity": "sha1-iPr0lfsbR6v9YSMAACoWIoxnfuk=", "dev": true, + "optional": true, "requires": { - "es5-ext": "^0.10.9" + "filename-reserved-regex": "^2.0.0", + "strip-outer": "^1.0.0", + "trim-repeated": "^1.0.0" } }, - "dargs": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/dargs/-/dargs-4.1.0.tgz", - "integrity": "sha1-A6nbtLXC8Tm/FK5T8LiipqhvThc=", + "fill-range": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", + "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", "dev": true, "requires": { - "number-is-nan": "^1.0.0" + "is-number": "^2.1.0", + "isobject": "^2.0.0", + "randomatic": "^3.0.0", + "repeat-element": "^1.1.2", + "repeat-string": "^1.5.2" } }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "filled-array": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/filled-array/-/filled-array-1.1.0.tgz", + "integrity": "sha1-w8T2xmO5I0WamqKZEtLQMfFQf4Q=", + "dev": true + }, + "finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha1-t+fQAP/RGTjQ/bBTUG9uur6fWH0=", "dev": true, "requires": { - "assert-plus": "^1.0.0" + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" }, "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", "dev": true } } }, - "dateformat": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz", - "integrity": "sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk=", - "dev": true, - "requires": { - "get-stdin": "^4.0.1", - "meow": "^3.3.0" - } - }, - "deap": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/deap/-/deap-1.0.1.tgz", - "integrity": "sha512-k75KYNZMvwAwes2xIPry/QTffXIchjD8QfABvvfTr80P85jv5ZcKqcoDo+vMe71nNnVnXYe8MA28weyqcf/DKw==", + "find-index": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/find-index/-/find-index-0.1.1.tgz", + "integrity": "sha1-Z101iyyjiS15Whq0cjL4tuLg3eQ=", "dev": true }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "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": { - "ms": "2.0.0" + "path-exists": "^2.0.0", + "pinkie-promise": "^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 - }, - "decompress": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/decompress/-/decompress-3.0.0.tgz", - "integrity": "sha1-rx3VDQbjv8QyRh033hGzjA2ZG+0=", + "find-versions": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-1.2.1.tgz", + "integrity": "sha1-y96fEuOFdaCvG+G5osXV/Y8Ya2I=", "dev": true, "requires": { - "buffer-to-vinyl": "^1.0.0", - "concat-stream": "^1.4.6", - "decompress-tar": "^3.0.0", - "decompress-tarbz2": "^3.0.0", - "decompress-targz": "^3.0.0", - "decompress-unzip": "^3.0.0", - "stream-combiner2": "^1.1.1", - "vinyl-assign": "^1.0.1", - "vinyl-fs": "^2.2.0" + "array-uniq": "^1.0.0", + "get-stdin": "^4.0.1", + "meow": "^3.5.0", + "semver-regex": "^1.0.0" } }, - "decompress-tar": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-3.1.0.tgz", - "integrity": "sha1-IXx4n5uURQ76rcXF5TeXj8MzxGY=", + "findup-sync": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz", + "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=", "dev": true, "requires": { - "is-tar": "^1.0.0", - "object-assign": "^2.0.0", - "strip-dirs": "^1.0.0", - "tar-stream": "^1.1.1", - "through2": "^0.6.1", - "vinyl": "^0.4.3" + "detect-file": "^1.0.0", + "is-glob": "^3.1.0", + "micromatch": "^3.0.4", + "resolve-dir": "^1.0.1" }, "dependencies": { - "clone": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz", - "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=", + "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 }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "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 }, - "object-assign": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-2.1.1.tgz", - "integrity": "sha1-Q8NuXVaf+OSBbE76i+AtJpZ8GKo=", + "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 }, - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", "dev": true, "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "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.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.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 + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "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.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.0.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.0.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.0.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 + } + } }, - "through2": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", + "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": { - "readable-stream": ">=1.0.33-1 <1.1.0-0", - "xtend": ">=4.0.0 <4.1.0-0" + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "extglob": { + "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" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "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.0" + } + } + } + }, + "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.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } } }, - "vinyl": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz", - "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=", + "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": { - "clone": "^0.2.0", - "clone-stats": "^0.0.1" + "kind-of": "^6.0.0" } - } - } - }, - "decompress-tarbz2": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-3.1.0.tgz", - "integrity": "sha1-iyOTVoE1X58YnYclag+L3ZbZZm0=", - "dev": true, - "requires": { - "is-bzip2": "^1.0.0", - "object-assign": "^2.0.0", - "seek-bzip": "^1.0.3", - "strip-dirs": "^1.0.0", - "tar-stream": "^1.1.1", - "through2": "^0.6.1", - "vinyl": "^0.4.3" - }, - "dependencies": { - "clone": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz", - "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=", - "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 - }, - "object-assign": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-2.1.1.tgz", - "integrity": "sha1-Q8NuXVaf+OSBbE76i+AtJpZ8GKo=", - "dev": true }, - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "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": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" + "kind-of": "^6.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 - }, - "through2": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", + "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": { - "readable-stream": ">=1.0.33-1 <1.1.0-0", - "xtend": ">=4.0.0 <4.1.0-0" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } }, - "vinyl": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz", - "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=", + "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": { - "clone": "^0.2.0", - "clone-stats": "^0.0.1" + "kind-of": "^3.0.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" + } + } } - } - } - }, - "decompress-targz": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-3.1.0.tgz", - "integrity": "sha1-ssE9+YFmJomRtxXWRH9kLpaW9aA=", - "dev": true, - "requires": { - "is-gzip": "^1.0.0", - "object-assign": "^2.0.0", - "strip-dirs": "^1.0.0", - "tar-stream": "^1.1.1", - "through2": "^0.6.1", - "vinyl": "^0.4.3" - }, - "dependencies": { - "clone": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz", - "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=", - "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 - }, - "object-assign": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-2.1.1.tgz", - "integrity": "sha1-Q8NuXVaf+OSBbE76i+AtJpZ8GKo=", - "dev": true }, - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "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": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" + "isobject": "^3.0.1" } }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true }, - "through2": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", "dev": true, "requires": { - "readable-stream": ">=1.0.33-1 <1.1.0-0", - "xtend": ">=4.0.0 <4.1.0-0" + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" } }, - "vinyl": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz", - "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=", + "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": { - "clone": "^0.2.0", - "clone-stats": "^0.0.1" + "extend-shallow": "^3.0.0" } } } }, - "decompress-unzip": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-3.4.0.tgz", - "integrity": "sha1-YUdbQVIGa74/7hL51inRX+ZHjus=", - "dev": true, - "requires": { - "is-zip": "^1.0.0", - "read-all-stream": "^3.0.0", - "stat-mode": "^0.2.0", - "strip-dirs": "^1.0.0", - "through2": "^2.0.0", - "vinyl": "^1.0.0", - "yauzl": "^2.2.1" - } - }, - "deep-extend": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.2.tgz", - "integrity": "sha1-SLaZwn4zS/ifEIkr5DL25MfTSn8=", - "dev": true - }, - "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", - "dev": true - }, - "default-uid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/default-uid/-/default-uid-1.0.0.tgz", - "integrity": "sha1-/O+p359axAyJFtkS3R/hFGqjxZ4=", - "dev": true - }, - "defaults": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", - "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", - "dev": true, - "requires": { - "clone": "^1.0.2" - } - }, - "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.8" - } - }, - "defined": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", - "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", - "dev": true - }, - "del": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/del/-/del-2.2.1.tgz", - "integrity": "sha1-9nYwJkciCcTwNJERxawoCGi+xP4=", - "dev": true, - "requires": { - "globby": "^5.0.0", - "is-path-cwd": "^1.0.0", - "is-path-in-cwd": "^1.0.0", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "rimraf": "^2.2.8" - } - }, - "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 - }, - "depd": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.0.tgz", - "integrity": "sha1-4b2Cxqq2ztlluXuIsX7T5SjKGMM=", - "dev": true - }, - "deprecated": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/deprecated/-/deprecated-0.0.1.tgz", - "integrity": "sha1-+cmvVGSvoeepcUWKi97yqpTVuxk=", - "dev": true - }, - "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", - "dev": true - }, - "detect-conflict": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/detect-conflict/-/detect-conflict-1.0.1.tgz", - "integrity": "sha1-CIZXpmqWHAUBnbfEIwiDsca0F24=", - "dev": true - }, - "detect-file": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-0.1.0.tgz", - "integrity": "sha1-STXe39lIhkjgBrASlWbpOGcR6mM=", - "dev": true, - "requires": { - "fs-exists-sync": "^0.1.0" - } - }, - "detect-newline": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-1.0.3.tgz", - "integrity": "sha1-6XsQA4d9cMCa8a81v63/Fo3kkg0=", + "fined": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fined/-/fined-1.2.0.tgz", + "integrity": "sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng==", "dev": true, "requires": { - "get-stdin": "^4.0.1", - "minimist": "^1.1.0" - } - }, - "dev-ip": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dev-ip/-/dev-ip-1.0.1.tgz", - "integrity": "sha1-p2o+0YVb56ASu4rBbLgPPADcKPA=", - "dev": true + "expand-tilde": "^2.0.2", + "is-plain-object": "^2.0.3", + "object.defaults": "^1.1.0", + "object.pick": "^1.2.0", + "parse-filepath": "^1.0.1" + } }, - "di": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", - "integrity": "sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw=", + "first-chunk-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz", + "integrity": "sha1-Wb+1DNkF9g18OUzT2ayqtOatk04=", "dev": true }, - "diff": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/diff/-/diff-2.2.3.tgz", - "integrity": "sha1-YOr9DSjukG5Oj/ClLBIpUhAzv5k=", + "flagged-respawn": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz", + "integrity": "sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==", "dev": true }, - "doctrine": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.0.0.tgz", - "integrity": "sha1-xz2NKQnSIpHhoAejlYBNqLZl/mM=", + "flat-cache": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.2.2.tgz", + "integrity": "sha1-+oZxTnLCHbiGAXYezy9VXRq8a5Y=", "dev": true, "requires": { - "esutils": "^2.0.2", - "isarray": "^1.0.0" + "circular-json": "^0.3.1", + "del": "^2.0.2", + "graceful-fs": "^4.1.2", + "write": "^0.2.1" } }, - "dom-serialize": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", - "integrity": "sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs=", + "flush-write-stream": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.0.3.tgz", + "integrity": "sha512-calZMC10u0FMUqoiunI2AiGIIUtUIvifNwkHhNupZH4cbNnW1Itkoh/Nf5HFYmDrwWPjrUxpkZT0KhuCq0jmGw==", "dev": true, "requires": { - "custom-event": "~1.0.0", - "ent": "~2.2.0", - "extend": "^3.0.0", - "void-elements": "^2.0.0" + "inherits": "^2.0.1", + "readable-stream": "^2.0.4" } }, - "dom-serializer": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", - "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", + "follow-redirects": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz", + "integrity": "sha1-e3qfmuov3/NnhqlP9kPtB/T/Xio=", "dev": true, "requires": { - "domelementtype": "~1.1.1", - "entities": "~1.1.1" + "debug": "=3.1.0" }, "dependencies": { - "domelementtype": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", - "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=", - "dev": true + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha1-W7WgZyYotkFJVmuhaBnmFRjGcmE=", + "dev": true, + "requires": { + "ms": "2.0.0" + } } } }, - "domelementtype": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz", - "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=", + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", "dev": true }, - "domhandler": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.3.0.tgz", - "integrity": "sha1-LeWaCCLVAn+r/28DLCsloqir5zg=", - "dev": true, - "requires": { - "domelementtype": "1" - } - }, - "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", - "domelementtype": "1" - } - }, - "dot-case": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-2.1.1.tgz", - "integrity": "sha1-NNzzf1Co6TwrO8qLt/uRVcfaO+4=", - "dev": true, - "requires": { - "no-case": "^2.2.0" - } - }, - "dot-prop": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-2.4.0.tgz", - "integrity": "sha1-hI4o9/HVB0DGdHqzywdnBGK2+Jw=", + "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": { - "is-obj": "^1.0.0" + "for-in": "^1.0.1" } }, - "downgrade-root": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/downgrade-root/-/downgrade-root-1.2.2.tgz", - "integrity": "sha1-UxMZcVsOgf/MIusoR4uidkPhLGw=", - "dev": true, - "requires": { - "default-uid": "^1.0.0", - "is-root": "^1.0.0" - } + "foreach": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", + "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", + "dev": true }, - "download": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/download/-/download-4.4.3.tgz", - "integrity": "sha1-qlX9rTktldS2jowr4D4MKqIbqaw=", - "dev": true, - "requires": { - "caw": "^1.0.1", - "concat-stream": "^1.4.7", - "each-async": "^1.0.0", - "filenamify": "^1.0.1", - "got": "^5.0.0", - "gulp-decompress": "^1.2.0", - "gulp-rename": "^1.2.0", - "is-url": "^1.2.0", - "object-assign": "^4.0.1", - "read-all-stream": "^3.0.0", - "readable-stream": "^2.0.2", - "stream-combiner2": "^1.1.1", - "vinyl": "^1.0.0", - "vinyl-fs": "^2.2.0", - "ware": "^1.2.0" - } + "foreachasync": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/foreachasync/-/foreachasync-3.0.0.tgz", + "integrity": "sha1-VQKYfchxS+M5IJfzLgBxyd7gfPY=", + "dev": true }, - "duplexer": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", - "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=", + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", "dev": true }, - "duplexer2": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", - "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", - "dev": true, - "requires": { - "readable-stream": "^2.0.2" - } + "fork-stream": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/fork-stream/-/fork-stream-0.0.4.tgz", + "integrity": "sha1-24Sfznf2cIpfjzhq5TOgkHtUrnA=", + "dev": true }, - "duplexify": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.5.0.tgz", - "integrity": "sha1-GqdzAC4VeEV+nZ1KULDMquvL1gQ=", + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", "dev": true, "requires": { - "end-of-stream": "1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.0", - "stream-shift": "^1.0.0" + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" }, "dependencies": { - "end-of-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.0.0.tgz", - "integrity": "sha1-1FlucCc0qT5A6a+GQxnqvZn/Lw4=", - "dev": true, - "requires": { - "once": "~1.3.0" - } - }, - "once": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz", - "integrity": "sha1-suJhVXzkwxTsgwTz+oJmPkKXyiA=", + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "dev": true, "requires": { - "wrappy": "1" + "delayed-stream": "~1.0.0" } } } }, - "each-async": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/each-async/-/each-async-1.1.1.tgz", - "integrity": "sha1-3uUim98KtrogEqOV4bhpq/iBNHM=", + "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": { - "onetime": "^1.0.0", - "set-immediate-shim": "^1.0.0" + "map-cache": "^0.2.2" } }, - "easy-extender": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/easy-extender/-/easy-extender-2.3.2.tgz", - "integrity": "sha1-PTJI/r4rFZYHMW2PnPSRwWZIIh0=", - "dev": true, - "requires": { - "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=", - "dev": true - } - } + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "dev": true }, - "eazy-logger": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/eazy-logger/-/eazy-logger-3.0.2.tgz", - "integrity": "sha1-oyWqXlPROiIliJsqxBE7K5Y29Pw=", + "from": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", + "integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=", + "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, + "optional": true, "requires": { - "tfunk": "^3.0.1" + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" } }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "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, - "optional": true, "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" + "null-check": "^1.0.0" } }, - "editions": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/editions/-/editions-1.3.3.tgz", - "integrity": "sha1-CQcQG92iD6w8vjNMJ8vQaI3Jmls=", - "dev": true - }, - "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.4.2", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.4.2.tgz", - "integrity": "sha1-cFfrSBKVj7cxhBzZyjUzQ+/ll7E=", - "dev": true - }, - "electron-to-chromium": { - "version": "1.3.14", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.14.tgz", - "integrity": "sha1-ZK8Pnv08PGrNV9cfg7Scp+6cS0M=", + "fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha1-a+Dem+mYzhavivwkSXue6bfM2a0=", "dev": true }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", - "dev": true + "fs-extra": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz", + "integrity": "sha1-N5TzeMWLNC6n27sjCVEJxLO2IpE=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^3.0.0", + "universalify": "^0.1.0" + } }, - "end-of-stream": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.0.tgz", - "integrity": "sha1-epDYM+/abPpurA9JSduw+tOmMgY=", + "fs-mkdirp-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz", + "integrity": "sha1-C3gV/DIBxqaeFNuYzgmMFpNSWes=", "dev": true, "requires": { - "once": "^1.4.0" + "graceful-fs": "^4.1.11", + "through2": "^2.0.3" } }, - "engine.io": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.2.0.tgz", - "integrity": "sha512-mRbgmAtQ4GAlKwuPnnAvXXwdPhEx+jkc0OBCLrXuD/CRvwNK3AxRSnqK4FSqmAMRRHryVJP8TopOvmEaA64fKw==", + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.11.tgz", + "integrity": "sha512-+ux3lx6peh0BpvY0JebGyZoiR4D+oYzdPZMKJwkZ+sFkNJzpL7tXc/wehS49gUAxg3tmMHPHZkA8JU2rhhgDHw==", "dev": true, + "optional": true, "requires": { - "accepts": "~1.3.4", - "base64id": "1.0.0", - "cookie": "0.3.1", - "debug": "~3.1.0", - "engine.io-parser": "~2.1.0", - "ws": "~3.3.1" + "bindings": "^1.5.0", + "nan": "^2.12.1", + "node-pre-gyp": "*" }, "dependencies": { - "after": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", - "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=", - "dev": true + "abbrev": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true }, - "arraybuffer.slice": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", - "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==", - "dev": true + "ansi-regex": { + "version": "2.1.1", + "bundled": true, + "dev": true, + "optional": 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 + "aproba": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true }, - "base64id": { + "are-we-there-yet": { + "version": "1.1.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "balanced-match": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz", - "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=", - "dev": true + "bundled": true, + "dev": true, + "optional": true + }, + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "chownr": { + "version": "1.1.3", + "bundled": true, + "dev": true, + "optional": true + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "optional": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "optional": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true }, "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "version": "3.2.6", + "bundled": true, "dev": true, + "optional": true, "requires": { - "ms": "2.0.0" + "ms": "^2.1.1" } }, - "engine.io-parser": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.2.tgz", - "integrity": "sha512-dInLFzr80RijZ1rGpx1+56/uFoH7/7InhH3kZt+Ms6hT8tNx3NGW/WNSA/f8As1WkOfkuyb3tnRyuXGxusclMw==", + "deep-extend": { + "version": "0.6.0", + "bundled": true, + "dev": true, + "optional": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "detect-libc": { + "version": "1.0.3", + "bundled": true, "dev": true, + "optional": true + }, + "fs-minipass": { + "version": "1.2.7", + "bundled": true, + "dev": true, + "optional": true, "requires": { - "after": "0.8.2", - "arraybuffer.slice": "~0.0.7", - "base64-arraybuffer": "0.1.5", - "blob": "0.0.4", - "has-binary2": "~1.0.2" + "minipass": "^2.6.0" } }, - "ultron": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", - "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==", - "dev": true + "fs.realpath": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true }, - "ws": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", - "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", + "gauge": { + "version": "2.7.4", + "bundled": true, "dev": true, + "optional": true, "requires": { - "async-limiter": "~1.0.0", - "safe-buffer": "~5.1.0", - "ultron": "~1.1.0" + "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" } - } - } - }, - "engine.io-client": { - "version": "1.6.9", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-1.6.9.tgz", - "integrity": "sha1-HWrUgEilCDyVCWlDsp0279shJAE=", - "dev": true, - "requires": { - "component-emitter": "1.1.2", - "component-inherit": "0.0.3", - "debug": "2.2.0", - "engine.io-parser": "1.2.4", - "has-cors": "1.1.0", - "indexof": "0.0.1", - "parsejson": "0.0.1", - "parseqs": "0.0.2", - "parseuri": "0.0.4", - "ws": "1.0.1", - "xmlhttprequest-ssl": "1.5.1", - "yeast": "0.1.2" - }, - "dependencies": { - "debug": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", - "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", + }, + "glob": { + "version": "7.1.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "iconv-lite": { + "version": "0.4.24", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ignore-walk": { + "version": "3.0.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "bundled": true, + "dev": true, + "optional": true + }, + "ini": { + "version": "1.3.5", + "bundled": true, "dev": true, - "requires": { - "ms": "0.7.1" - } + "optional": true }, - "ms": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", - "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", - "dev": true - } - } - }, - "engine.io-parser": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-1.2.4.tgz", - "integrity": "sha1-4Il7C/FOeS1M0qWVBVORnFaUjEI=", - "dev": true, - "requires": { - "after": "0.8.1", - "arraybuffer.slice": "0.0.6", - "base64-arraybuffer": "0.1.2", - "blob": "0.0.4", - "has-binary": "0.1.6", - "utf8": "2.1.0" - }, - "dependencies": { - "has-binary": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/has-binary/-/has-binary-0.1.6.tgz", - "integrity": "sha1-JTJvOc+k9hath4eJTjryz7x7bhA=", + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, "dev": true, + "optional": true, "requires": { - "isarray": "0.0.1" + "number-is-nan": "^1.0.0" } }, "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - } - } - }, - "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 - }, - "error": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/error/-/error-7.0.2.tgz", - "integrity": "sha1-pfdf/02ZJhJt2sDqXcOOaJFTywI=", - "dev": true, - "requires": { - "string-template": "~0.2.1", - "xtend": "~4.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" - } - }, - "es5-ext": { - "version": "0.10.23", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.23.tgz", - "integrity": "sha1-dXi1G+l0IHpUh4IbVlOMIk5Oezg=", - "dev": true, - "requires": { - "es6-iterator": "2", - "es6-symbol": "~3.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", - "es5-ext": "^0.10.14", - "es6-symbol": "^3.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", - "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-promise": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.4.tgz", - "integrity": "sha512-/NdNZVJg+uZgtm9eS3O6lrOLYmQag2DjdEXuPaHlZ6RuVqgqaVZfgYCepEIKsLqwdQArOPtC3XzRLqGGfT8KQQ==", - "dev": true - }, - "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", - "es5-ext": "~0.10.14", - "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", - "es5-ext": "~0.10.14" - } - }, - "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", - "es5-ext": "^0.10.14", - "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=" - }, - "escodegen": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz", - "integrity": "sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg=", - "dev": true, - "requires": { - "esprima": "^2.7.1", - "estraverse": "^1.9.1", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.2.0" - } - }, - "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.3", - "es6-weak-map": "^2.0.1", - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - }, - "dependencies": { - "estraverse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", - "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", - "dev": true - } - } - }, - "eslint": { - "version": "3.19.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-3.19.0.tgz", - "integrity": "sha1-yPxiAcf0DdCJQbh8CFdnOGpnmsw=", - "dev": true, - "requires": { - "babel-code-frame": "^6.16.0", - "chalk": "^1.1.3", - "concat-stream": "^1.5.2", - "debug": "^2.1.1", - "doctrine": "^2.0.0", - "escope": "^3.6.0", - "espree": "^3.4.0", - "esquery": "^1.0.0", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "file-entry-cache": "^2.0.0", - "glob": "^7.0.3", - "globals": "^9.14.0", - "ignore": "^3.2.0", - "imurmurhash": "^0.1.4", - "inquirer": "^0.12.0", - "is-my-json-valid": "^2.10.0", - "is-resolvable": "^1.0.0", - "js-yaml": "^3.5.1", - "json-stable-stringify": "^1.0.0", - "levn": "^0.3.0", - "lodash": "^4.0.0", - "mkdirp": "^0.5.0", - "natural-compare": "^1.4.0", - "optionator": "^0.8.2", - "path-is-inside": "^1.0.1", - "pluralize": "^1.2.1", - "progress": "^1.1.8", - "require-uncached": "^1.0.2", - "shelljs": "^0.7.5", - "strip-bom": "^3.0.0", - "strip-json-comments": "~2.0.1", - "table": "^3.7.8", - "text-table": "~0.2.0", - "user-home": "^2.0.0" - }, - "dependencies": { - "cli-width": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.1.0.tgz", - "integrity": "sha1-sjTKIJsp72b8UY2bmNWEewDt8Ao=", - "dev": true + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true }, - "estraverse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", - "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", - "dev": true + "minimatch": { + "version": "3.0.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "bundled": true, + "dev": true, + "optional": true }, - "inquirer": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-0.12.0.tgz", - "integrity": "sha1-HvK/1jUE3wvHV4X/+MLEHfEvB34=", + "minipass": { + "version": "2.9.0", + "bundled": true, "dev": true, + "optional": true, "requires": { - "ansi-escapes": "^1.1.0", - "ansi-regex": "^2.0.0", - "chalk": "^1.0.0", - "cli-cursor": "^1.0.1", - "cli-width": "^2.0.0", - "figures": "^1.3.5", - "lodash": "^4.3.0", - "readline2": "^1.0.1", - "run-async": "^0.1.0", - "rx-lite": "^3.1.2", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.0", - "through": "^2.3.6" + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" } }, - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true + "minizlib": { + "version": "1.3.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.9.0" + } }, "mkdirp": { "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "needle": { + "version": "2.4.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "debug": "^3.2.6", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + } + }, + "node-pre-gyp": { + "version": "0.14.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.1", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.2.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4.4.2" + } + }, + "nopt": { + "version": "4.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "npm-bundled": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "npm-normalize-package-bin": "^1.0.1" + } + }, + "npm-normalize-package-bin": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "npm-packlist": { + "version": "1.4.7", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" + } + }, + "npmlog": { + "version": "4.1.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "wrappy": "1" + } + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "osenv": { + "version": "0.1.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "process-nextick-args": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "rc": { + "version": "1.2.8", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "rimraf": { + "version": "2.7.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "glob": "^7.1.3" + } + }, + "safe-buffer": { + "version": "5.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "safer-buffer": { + "version": "2.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "sax": { + "version": "1.2.4", + "bundled": true, + "dev": true, + "optional": true + }, + "semver": { + "version": "5.7.1", + "bundled": true, + "dev": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, "dev": true, + "optional": true, "requires": { - "minimist": "0.0.8" + "safe-buffer": "~5.1.0" } }, - "pluralize": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-1.2.1.tgz", - "integrity": "sha1-0aIUg/0iu0HlihL6NCGCMUCJfEU=", - "dev": true - }, - "shelljs": { - "version": "0.7.8", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.7.8.tgz", - "integrity": "sha1-3svPh0sNHl+3LhSxZKloMEjprLM=", + "strip-ansi": { + "version": "3.0.1", + "bundled": true, "dev": true, + "optional": true, "requires": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" + "ansi-regex": "^2.0.0" } }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - } - } - }, - "eslint-config-angular": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/eslint-config-angular/-/eslint-config-angular-0.5.0.tgz", - "integrity": "sha1-4KrgEy4550Z98/dUf+yBpE02hcQ=", - "dev": true - }, - "eslint-plugin-angular": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-angular/-/eslint-plugin-angular-1.3.1.tgz", - "integrity": "sha1-Kw28Bzjj4qwW8cxSWz4kEMMZhOA=", - "dev": true - }, - "espree": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/espree/-/espree-3.4.3.tgz", - "integrity": "sha1-KRC1zNSc6JPC//+qtP2LOjG4I3Q=", - "dev": true, - "requires": { - "acorn": "^5.0.1", - "acorn-jsx": "^3.0.0" - }, - "dependencies": { - "acorn": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.0.3.tgz", - "integrity": "sha1-xGDfCEkUY/AozLguqzcwvwEIez0=", - "dev": true - } - } - }, - "esprima": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", - "dev": true - }, - "esquery": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.0.tgz", - "integrity": "sha1-z7qLV9f7qT8XKYqKAGoEzaE9gPo=", - "dev": true, - "requires": { - "estraverse": "^4.0.0" - }, - "dependencies": { - "estraverse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", - "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", - "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.1.0", - "object-assign": "^4.0.1" - }, - "dependencies": { - "estraverse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", - "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", - "dev": true - } - } - }, - "estraverse": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz", - "integrity": "sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q=", - "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", - "es5-ext": "~0.10.14" - } - }, - "event-stream": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", - "integrity": "sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE=", - "dev": true, - "requires": { - "duplexer": "~0.1.1", - "from": "~0", - "map-stream": "~0.1.0", - "pause-stream": "0.0.11", - "split": "0.3", - "stream-combiner": "~0.0.4", - "through": "~2.3.1" - }, - "dependencies": { - "map-stream": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", - "integrity": "sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ=", - "dev": true - } - } - }, - "eventemitter3": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-1.2.0.tgz", - "integrity": "sha1-HIaZHYFq0eUEdQ5zh0Ik7PO+xQg=", - "dev": true - }, - "exec-buffer": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/exec-buffer/-/exec-buffer-3.1.0.tgz", - "integrity": "sha1-hRtG0GL8qby8b/h4FpPijo2oBAI=", - "dev": true, - "optional": true, - "requires": { - "execa": "^0.5.0", - "p-finally": "^1.0.0", - "pify": "^2.3.0", - "rimraf": "^2.5.4", - "tempfile": "^1.0.0" - } - }, - "exec-series": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/exec-series/-/exec-series-1.0.3.tgz", - "integrity": "sha1-bSV6m+rEgqhyx3g7yGFYOfx3FDo=", - "dev": true, - "optional": true, - "requires": { - "async-each-series": "^1.1.0", - "object-assign": "^4.1.0" - }, - "dependencies": { - "async-each-series": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/async-each-series/-/async-each-series-1.1.0.tgz", - "integrity": "sha1-9C/YFV048hpbjqB8KOBj7RcAsTg=", + "strip-json-comments": { + "version": "2.0.1", + "bundled": true, "dev": true, "optional": true - } - } - }, - "execa": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.5.1.tgz", - "integrity": "sha1-3j+4XLjW6RyFvLzrFkWBeFy1ezY=", - "dev": true, - "optional": true, - "requires": { - "cross-spawn": "^4.0.0", - "get-stream": "^2.2.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - }, - "dependencies": { - "cross-spawn": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-4.0.2.tgz", - "integrity": "sha1-e5JHYhwjrf3ThWAEqCPL45dCTUE=", + }, + "tar": { + "version": "4.4.13", + "bundled": true, "dev": true, "optional": true, "requires": { - "lru-cache": "^4.0.1", - "which": "^1.2.9" + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.8.6", + "minizlib": "^1.2.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.3" } - } - } - }, - "execall": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execall/-/execall-1.0.0.tgz", - "integrity": "sha1-c9CQTjlbPKsGWLCNCewlMH8pu3M=", - "dev": true, - "requires": { - "clone-regexp": "^1.0.0" - } - }, - "executable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/executable/-/executable-1.1.0.tgz", - "integrity": "sha1-h3mA6REvM5EGbaNyZd562ENKtNk=", - "dev": true, - "optional": true, - "requires": { - "meow": "^3.1.0" - } - }, - "exit-hook": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz", - "integrity": "sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=", - "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.2" - }, - "dependencies": { - "array-slice": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz", - "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU=", - "dev": true }, - "braces": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/braces/-/braces-0.1.5.tgz", - "integrity": "sha1-wIVxEIUpHYt1/ddOqw+FlygHEeY=", + "util-deprecate": { + "version": "1.0.2", + "bundled": true, "dev": true, - "requires": { - "expand-range": "^0.1.0" - } + "optional": true }, - "expand-range": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-0.1.1.tgz", - "integrity": "sha1-TLjtoJk8pW+k9B/ELzy7TMrf8EQ=", + "wide-align": { + "version": "1.1.3", + "bundled": true, "dev": true, + "optional": true, "requires": { - "is-number": "^0.1.1", - "repeat-string": "^0.2.2" + "string-width": "^1.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 + "wrappy": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": 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 + "yallist": { + "version": "3.1.1", + "bundled": true, + "dev": true, + "optional": 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.0" - } - }, - "expand-range": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", - "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", - "dev": true, - "requires": { - "fill-range": "^2.1.0" - } - }, - "expand-tilde": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-1.2.2.tgz", - "integrity": "sha1-C4HrqJflo9MdHD0QL48BRB5VlEk=", + "fullname": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fullname/-/fullname-2.1.0.tgz", + "integrity": "sha1-xGvw98PyT9WzNY0A5KQTgO74c1A=", "dev": true, "requires": { - "os-homedir": "^1.0.1" + "npmconf": "^2.1.1", + "pify": "^2.2.0", + "pinkie-promise": "^2.0.0" } }, - "extend": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", - "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=", + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha1-pWiZ0+o8m6uHS7l3O3xe3pL0iV0=", "dev": true }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "gauge": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-1.2.7.tgz", + "integrity": "sha1-6c7FSD09TuDvRLYKfZnkk14TbZM=", "dev": true, "requires": { - "is-extendable": "^0.1.0" + "ansi": "^0.3.0", + "has-unicode": "^2.0.0", + "lodash.pad": "^4.1.0", + "lodash.padend": "^4.1.0", + "lodash.padstart": "^4.1.0" } }, - "external-editor": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-1.1.1.tgz", - "integrity": "sha1-Etew24UPf/fnCBuvQAVwAGDEYAs=", + "gaze": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/gaze/-/gaze-0.5.2.tgz", + "integrity": "sha1-QLcJU30k0dRXZ9takIaJ3+aaxE8=", "dev": true, "requires": { - "extend": "^3.0.0", - "spawn-sync": "^1.0.15", - "tmp": "^0.0.29" + "globule": "~0.1.0" } }, - "extglob": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", - "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "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 + }, + "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, "requires": { - "is-extglob": "^1.0.0" + "is-property": "^1.0.0" } }, - "extract-zip": { - "version": "1.6.7", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.6.7.tgz", - "integrity": "sha1-qEC0uK9kAyZMjbV/Txp0Mz74H+k=", + "generator-jhipster": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/generator-jhipster/-/generator-jhipster-3.6.1.tgz", + "integrity": "sha1-+5WqvjnBRLBkptHoB+BcaZNVFFU=", "dev": true, "requires": { - "concat-stream": "1.6.2", - "debug": "2.6.9", + "chalk": "1.1.3", + "cheerio": "0.20.0", + "ejs": "2.4.2", + "glob": "7.0.3", + "html-wiring": "1.2.0", + "insight": "0.8.2", + "jhipster-core": "1.1.7", + "js-yaml": "3.6.1", + "lodash": "4.13.1", "mkdirp": "0.5.1", - "yauzl": "2.4.1" + "pluralize": "2.0.0", + "semver": "5.1.0", + "shelljs": "0.7.0", + "wordwrap": "1.0.0", + "yeoman-generator": "0.22.6", + "yo": "1.8.4" }, "dependencies": { - "concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "glob": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.0.3.tgz", + "integrity": "sha1-CqI1kxpKlqwT1g/6wvuHe9btT1g=", "dev": true, "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, - "yauzl": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.4.1.tgz", - "integrity": "sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU=", + "js-yaml": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.6.1.tgz", + "integrity": "sha1-bl/mfYsgXOTSL60Ft3geja3MSzA=", "dev": true, "requires": { - "fd-slicer": "~1.0.1" + "argparse": "^1.0.7", + "esprima": "^2.6.0" } + }, + "lodash": { + "version": "4.13.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.13.1.tgz", + "integrity": "sha1-g+SxCRP0hJbU0W/sSlYK8u50S2g=", + "dev": true + }, + "semver": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.1.0.tgz", + "integrity": "sha1-hfLPhVBGXE3wAM99hvawVBBqueU=", + "dev": true } } }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true - }, - "fancy-log": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.0.tgz", - "integrity": "sha1-Rb4X0Cu5kX1gzP/UmVyZnmyMmUg=", - "dev": true, - "requires": { - "chalk": "^1.1.1", - "time-stamp": "^1.0.0" - } - }, - "fast-deep-equal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", - "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", - "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 - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, - "fd-slicer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz", - "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=", - "dev": true, - "requires": { - "pend": "~1.2.0" - } - }, - "figures": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", - "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5", - "object-assign": "^4.1.0" - } - }, - "file-entry-cache": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", - "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", - "dev": true, - "requires": { - "flat-cache": "^1.2.1", - "object-assign": "^4.0.1" - } - }, - "file-saver": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/file-saver/-/file-saver-1.3.8.tgz", - "integrity": "sha512-spKHSBQIxxS81N/O21WmuXA2F6wppUCsutpzenOeZzOCCJ5gEfcbqJP983IrpLXzYmXnMUa6J03SubcNPdKrlg==" - }, - "file-type": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", - "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=", - "dev": true - }, - "filename-regex": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", - "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", + "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 }, - "filename-reserved-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-1.0.0.tgz", - "integrity": "sha1-5hz4BfDeHJhFZ9A4bcXfUO5a9+Q=", - "dev": true + "get-own-enumerable-property-symbols": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.0.tgz", + "integrity": "sha512-CIJYJC4GGF06TakLg8z4GQKvDsx9EMspVxOYih7LerEL/WosUnFIww45CGfxfeKHqlg3twgUrYRT1O3WQqjGCg==" }, - "filenamify": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-1.2.1.tgz", - "integrity": "sha1-qfL/0RxQO+0wABUCknI3jx8TZaU=", + "get-proxy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/get-proxy/-/get-proxy-2.1.0.tgz", + "integrity": "sha1-NJ8rTZHUTE1NTpy6KtkBQ/rF75M=", "dev": true, + "optional": true, "requires": { - "filename-reserved-regex": "^1.0.0", - "strip-outer": "^1.0.0", - "trim-repeated": "^1.0.0" + "npm-conf": "^1.1.0" } }, - "fill-range": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", - "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", + "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": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha1-wbJVV189wh1Zv8ec09K0axw6VLU=", "dev": true, + "optional": true, "requires": { - "is-number": "^2.1.0", - "isobject": "^2.0.0", - "randomatic": "^3.0.0", - "repeat-element": "^1.1.2", - "repeat-string": "^1.5.2" + "pump": "^3.0.0" + }, + "dependencies": { + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "optional": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + } } }, - "filled-array": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/filled-array/-/filled-array-1.1.0.tgz", - "integrity": "sha1-w8T2xmO5I0WamqKZEtLQMfFQf4Q=", + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", "dev": true }, - "finalhandler": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-0.4.1.tgz", - "integrity": "sha1-haF8bFmpRxfSYtYSMNSw6+PUoU0=", + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", "dev": true, "requires": { - "debug": "~2.2.0", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "unpipe": "~1.0.0" + "assert-plus": "^1.0.0" }, "dependencies": { - "debug": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", - "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + } + } + }, + "gh-got": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/gh-got/-/gh-got-2.4.0.tgz", + "integrity": "sha1-qlFBiRHKXk+SQ3EUzRIJODpKoBk=", + "dev": true, + "requires": { + "got": "^5.2.0", + "object-assign": "^4.0.1", + "pinkie-promise": "^2.0.0" + }, + "dependencies": { + "got": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/got/-/got-5.7.1.tgz", + "integrity": "sha1-X4FjWmHkplifGAVp6k44FoClHzU=", "dev": true, "requires": { - "ms": "0.7.1" + "create-error-class": "^3.0.1", + "duplexer2": "^0.1.4", + "is-redirect": "^1.0.0", + "is-retry-allowed": "^1.0.0", + "is-stream": "^1.0.0", + "lowercase-keys": "^1.0.0", + "node-status-codes": "^1.0.0", + "object-assign": "^4.0.1", + "parse-json": "^2.1.0", + "pinkie-promise": "^2.0.0", + "read-all-stream": "^3.0.0", + "readable-stream": "^2.0.5", + "timed-out": "^3.0.0", + "unzip-response": "^1.0.2", + "url-parse-lax": "^1.0.0" } }, - "ms": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", - "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", + "timed-out": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-3.1.3.tgz", + "integrity": "sha1-lYYL/MXHbCd/j4Mm/Q9bLiDrohc=", "dev": true } } }, - "find-index": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/find-index/-/find-index-0.1.1.tgz", - "integrity": "sha1-Z101iyyjiS15Whq0cjL4tuLg3eQ=", - "dev": true + "gifsicle": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/gifsicle/-/gifsicle-4.0.1.tgz", + "integrity": "sha1-MOHmHj7kiE73AmQbLpihXCEnsuI=", + "dev": true, + "optional": true, + "requires": { + "bin-build": "^3.0.0", + "bin-wrapper": "^4.0.0", + "execa": "^1.0.0", + "logalot": "^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=", + "github-username": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/github-username/-/github-username-2.1.0.tgz", + "integrity": "sha1-IA5aEEr0K6CKVAlscI1LbsL6JWs=", "dev": true, "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" + "gh-got": "^2.2.0", + "meow": "^3.5.0" } }, - "find-versions": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-1.2.1.tgz", - "integrity": "sha1-y96fEuOFdaCvG+G5osXV/Y8Ya2I=", + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha1-wZyd+aAocC1nhhI4SmVSQExjbRU=", "dev": true, "requires": { - "array-uniq": "^1.0.0", - "get-stdin": "^4.0.1", - "meow": "^3.5.0", - "semver-regex": "^1.0.0" + "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" } }, - "findup-sync": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.4.3.tgz", - "integrity": "sha1-QAQ5Kee8YK3wt/SCfExudaDeyhI=", + "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": { - "detect-file": "^0.1.0", - "is-glob": "^2.0.1", - "micromatch": "^2.3.7", - "resolve-dir": "^0.1.0" + "glob-parent": "^2.0.0", + "is-glob": "^2.0.0" + }, + "dependencies": { + "glob-parent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "dev": true, + "requires": { + "is-glob": "^2.0.0" + } + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + } } }, - "fined": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fined/-/fined-1.1.0.tgz", - "integrity": "sha1-s33IRLdqL15wgeiE98CuNE8VNHY=", + "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": { - "expand-tilde": "^2.0.2", - "is-plain-object": "^2.0.3", - "object.defaults": "^1.1.0", - "object.pick": "^1.2.0", - "parse-filepath": "^1.0.1" + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + } + }, + "glob-stream": { + "version": "5.3.5", + "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-5.3.5.tgz", + "integrity": "sha1-pVZlqajM3EGRWofHAeMtTgFvrSI=", + "dev": true, + "requires": { + "extend": "^3.0.0", + "glob": "^5.0.3", + "glob-parent": "^3.0.0", + "micromatch": "^2.3.7", + "ordered-read-streams": "^0.3.0", + "through2": "^0.6.0", + "to-absolute-glob": "^0.1.1", + "unique-stream": "^2.0.2" }, "dependencies": { - "expand-tilde": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", - "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", + "glob": { + "version": "5.0.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", + "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", + "dev": true, + "requires": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + }, + "through2": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", + "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", "dev": true, "requires": { - "homedir-polyfill": "^1.0.1" + "readable-stream": ">=1.0.33-1 <1.1.0-0", + "xtend": ">=4.0.0 <4.1.0-0" } } } }, - "first-chunk-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz", - "integrity": "sha1-Wb+1DNkF9g18OUzT2ayqtOatk04=", + "glob-to-regexp": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz", + "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=", "dev": true }, - "flagged-respawn": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-0.3.2.tgz", - "integrity": "sha1-/xke3c1wiKZ1smEP/8l2vpuAdLU=", - "dev": true + "glob-watcher": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-0.0.6.tgz", + "integrity": "sha1-uVtKjfdLOcgymLDAXJeLTZo7cQs=", + "dev": true, + "requires": { + "gaze": "^0.5.1" + } }, - "flat-cache": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.2.2.tgz", - "integrity": "sha1-+oZxTnLCHbiGAXYezy9VXRq8a5Y=", + "glob2base": { + "version": "0.0.12", + "resolved": "https://registry.npmjs.org/glob2base/-/glob2base-0.0.12.tgz", + "integrity": "sha1-nUGbPijxLoOjYhZKJ3BVkiycDVY=", "dev": true, "requires": { - "circular-json": "^0.3.1", - "del": "^2.0.2", - "graceful-fs": "^4.1.2", - "write": "^0.2.1" + "find-index": "^0.1.1" + } + }, + "global-modules": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", + "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", + "dev": true, + "requires": { + "global-prefix": "^1.0.1", + "is-windows": "^1.0.1", + "resolve-dir": "^1.0.0" + } + }, + "global-prefix": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", + "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", + "dev": true, + "requires": { + "expand-tilde": "^2.0.2", + "homedir-polyfill": "^1.0.1", + "ini": "^1.3.4", + "is-windows": "^1.0.1", + "which": "^1.2.14" } }, - "flatten": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.2.tgz", - "integrity": "sha1-2uRqnXj74lKSJYzB54CkHZXAN4I=", + "globals": { + "version": "9.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", + "integrity": "sha1-qjiWs+abSH8X4x7SFD1pqOMMLYo=", "dev": true }, - "flush-write-stream": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.0.3.tgz", - "integrity": "sha512-calZMC10u0FMUqoiunI2AiGIIUtUIvifNwkHhNupZH4cbNnW1Itkoh/Nf5HFYmDrwWPjrUxpkZT0KhuCq0jmGw==", + "globby": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", + "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", "dev": true, "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.4" + "array-union": "^1.0.1", + "arrify": "^1.0.0", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" } }, - "follow-redirects": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.2.tgz", - "integrity": "sha512-kssLorP/9acIdpQ2udQVTiCS5LQmdEz9mvdIfDcl1gYX2tPKFADHSyFdvJS040XdFsPzemWtgI3q8mFVCxtX8A==", + "globule": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/globule/-/globule-0.1.0.tgz", + "integrity": "sha1-2cjt3h2nnRJaFRt5UzuXhnY0auU=", "dev": true, "requires": { - "debug": "^3.1.0" + "glob": "~3.1.21", + "lodash": "~1.0.1", + "minimatch": "~0.2.11" }, "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "glob": { + "version": "3.1.21", + "resolved": "https://registry.npmjs.org/glob/-/glob-3.1.21.tgz", + "integrity": "sha1-0p4KBV3qUTj00H7UDomC6DwgZs0=", "dev": true, "requires": { - "ms": "2.0.0" + "graceful-fs": "~1.2.0", + "inherits": "1", + "minimatch": "~0.2.11" + } + }, + "graceful-fs": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz", + "integrity": "sha1-FaSAaldUfLLS2/J/QuiajDRRs2Q=", + "dev": true + }, + "inherits": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-1.0.2.tgz", + "integrity": "sha1-ykMJ2t7mtUzAuNJH6NfHoJdb3Js=", + "dev": true + }, + "lodash": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-1.0.2.tgz", + "integrity": "sha1-j1dWDIO1n8JwvT1WG2kAQ0MOJVE=", + "dev": true + }, + "lru-cache": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz", + "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=", + "dev": true + }, + "minimatch": { + "version": "0.2.14", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz", + "integrity": "sha1-x054BXT2PG+aCQ6Q775u9TpqdWo=", + "dev": true, + "requires": { + "lru-cache": "2", + "sigmund": "~1.0.0" } } } }, - "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": "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.1" - } - }, - "foreach": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", - "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", - "dev": true - }, - "foreachasync": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/foreachasync/-/foreachasync-3.0.0.tgz", - "integrity": "sha1-VQKYfchxS+M5IJfzLgBxyd7gfPY=", - "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 - }, - "fork-stream": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/fork-stream/-/fork-stream-0.0.4.tgz", - "integrity": "sha1-24Sfznf2cIpfjzhq5TOgkHtUrnA=", - "dev": true - }, - "form-data": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-1.0.1.tgz", - "integrity": "sha1-rjFduaSQf6BlUCMEpm13M0de43w=", + "glogg": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.0.tgz", + "integrity": "sha1-f+DxmfV6yQbPUS/urY+Q7kooT8U=", "dev": true, "requires": { - "async": "^2.0.1", - "combined-stream": "^1.0.5", - "mime-types": "^2.1.11" + "sparkles": "^1.0.0" } }, - "formatio": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/formatio/-/formatio-1.1.1.tgz", - "integrity": "sha1-XtPM1jZVEJc4NGXZlhmRAOhhYek=", + "got": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/got/-/got-7.1.0.tgz", + "integrity": "sha1-BUUP2ECU5rvqVvRRpDqcKJFmOFo=", "dev": true, "requires": { - "samsam": "~1.1" + "decompress-response": "^3.2.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "is-plain-obj": "^1.1.0", + "is-retry-allowed": "^1.0.0", + "is-stream": "^1.0.0", + "isurl": "^1.0.0-alpha5", + "lowercase-keys": "^1.0.0", + "p-cancelable": "^0.3.0", + "p-timeout": "^1.1.1", + "safe-buffer": "^5.0.1", + "timed-out": "^4.0.0", + "url-parse-lax": "^1.0.0", + "url-to-options": "^1.0.1" + }, + "dependencies": { + "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 + } } }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", "dev": true }, - "from": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", - "integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=", + "graceful-readlink": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", + "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=", "dev": true }, - "fs-access": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/fs-access/-/fs-access-1.0.1.tgz", - "integrity": "sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o=", + "group-array": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/group-array/-/group-array-0.3.4.tgz", + "integrity": "sha1-fOAttnFp7y20cvEyPCVepWYbN0g=", "dev": true, "requires": { - "null-check": "^1.0.0" + "arr-flatten": "^1.0.1", + "for-own": "^0.1.4", + "get-value": "^2.0.6", + "kind-of": "^3.1.0", + "split-string": "^1.0.1", + "union-value": "^1.0.1" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "dependencies": { + "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.0" + }, + "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" + } + }, + "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" + } + } + } + } + } + }, + "union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + } + } } }, - "fs-exists-sync": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz", - "integrity": "sha1-mC1ok6+RjnLQjeyehnP/K1qNat0=", - "dev": true - }, - "fs-extra": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz", - "integrity": "sha1-N5TzeMWLNC6n27sjCVEJxLO2IpE=", + "grouped-queue": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/grouped-queue/-/grouped-queue-0.3.3.tgz", + "integrity": "sha1-wWfSpTGcWg4JZO9qJbfC34mWyFw=", "dev": true, "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^3.0.0", - "universalify": "^0.1.0" + "lodash": "^4.17.2" } }, - "fs-mkdirp-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz", - "integrity": "sha1-C3gV/DIBxqaeFNuYzgmMFpNSWes=", + "growly": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", + "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", + "dev": true + }, + "gruntfile-editor": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/gruntfile-editor/-/gruntfile-editor-1.2.1.tgz", + "integrity": "sha1-Nm/B+Ty/BFgT4USK7x2p8YKJ1es=", "dev": true, "requires": { - "graceful-fs": "^4.1.11", - "through2": "^2.0.3" + "ast-query": "^2.0.0", + "lodash": "^4.6.1" } }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "fsevents": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.4.tgz", - "integrity": "sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg==", + "gulp": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/gulp/-/gulp-3.9.1.tgz", + "integrity": "sha1-VxzkWSjdQK9lFPxAEYZgFsE4RbQ=", "dev": true, - "optional": true, "requires": { - "nan": "^2.9.2", - "node-pre-gyp": "^0.10.0" - }, - "dependencies": { - "abbrev": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "ansi-regex": { - "version": "2.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "aproba": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true + "archy": "^1.0.0", + "chalk": "^1.0.0", + "deprecated": "^0.0.1", + "gulp-util": "^3.0.0", + "interpret": "^1.0.0", + "liftoff": "^2.1.0", + "minimist": "^1.1.0", + "orchestrator": "^0.3.0", + "pretty-hrtime": "^1.0.0", + "semver": "^4.1.0", + "tildify": "^1.0.0", + "v8flags": "^2.0.2", + "vinyl-fs": "^0.3.0" + }, + "dependencies": { + "clone": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz", + "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=", + "dev": true }, - "are-we-there-yet": { - "version": "1.1.4", - "bundled": true, + "glob": { + "version": "4.5.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-4.5.3.tgz", + "integrity": "sha1-xstz0yJsHv7wTePFbQEvAzd+4V8=", "dev": true, - "optional": true, "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^2.0.1", + "once": "^1.3.0" } }, - "balanced-match": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "brace-expansion": { - "version": "1.1.11", - "bundled": true, + "glob-stream": { + "version": "3.1.18", + "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-3.1.18.tgz", + "integrity": "sha1-kXCl8St5Awb9/lmPMT+PeVT9FDs=", "dev": true, - "optional": true, "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "glob": "^4.3.1", + "glob2base": "^0.0.12", + "minimatch": "^2.0.1", + "ordered-read-streams": "^0.1.0", + "through2": "^0.6.1", + "unique-stream": "^1.0.0" } }, - "chownr": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true, + "graceful-fs": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.12.tgz", + "integrity": "sha512-J55gaCS4iTTJfTXIxSVw3EMQckcqkpdRv3IR7gu6sq0+tbC363Zx6KH/SEwXASK9JRbhyZmVjJEVJIOxYsB3Qg==", "dev": true, - "optional": true + "requires": { + "natives": "^1.1.3" + } }, - "concat-map": { + "isarray": { "version": "0.0.1", - "bundled": true, - "dev": true, - "optional": true + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true, + "minimatch": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.10.tgz", + "integrity": "sha1-jQh8OcazjAAbl/ynzm0OHoCvusc=", "dev": true, - "optional": true + "requires": { + "brace-expansion": "^1.0.0" + } }, - "core-util-is": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true + "ordered-read-streams": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-0.1.0.tgz", + "integrity": "sha1-/VZamvjrRHO6abbtijQ1LLVS8SY=", + "dev": true }, - "debug": { - "version": "2.6.9", - "bundled": true, + "readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", "dev": true, - "optional": true, "requires": { - "ms": "2.0.0" + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" } }, - "deep-extend": { - "version": "0.5.1", - "bundled": true, - "dev": true, - "optional": true + "semver": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz", + "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=", + "dev": true }, - "delegates": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true + "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 }, - "detect-libc": { - "version": "1.0.3", - "bundled": true, + "strip-bom": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-1.0.0.tgz", + "integrity": "sha1-hbiGLzhEtabV7IRnqTWYFzo295Q=", "dev": true, - "optional": true + "requires": { + "first-chunk-stream": "^1.0.0", + "is-utf8": "^0.2.0" + } }, - "fs-minipass": { - "version": "1.2.5", - "bundled": true, + "through2": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", + "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", "dev": true, - "optional": true, "requires": { - "minipass": "^2.2.1" + "readable-stream": ">=1.0.33-1 <1.1.0-0", + "xtend": ">=4.0.0 <4.1.0-0" } }, - "fs.realpath": { + "unique-stream": { "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true + "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-1.0.0.tgz", + "integrity": "sha1-1ZpKdUJ0R9mqbJHnAmP40mpLEEs=", + "dev": true }, - "gauge": { - "version": "2.7.4", - "bundled": true, + "vinyl": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz", + "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=", "dev": true, - "optional": true, "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" + "clone": "^0.2.0", + "clone-stats": "^0.0.1" } }, - "glob": { - "version": "7.1.2", - "bundled": true, + "vinyl-fs": { + "version": "0.3.14", + "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-0.3.14.tgz", + "integrity": "sha1-mmhRzhysHBzqX+hsCTHWIMLPqeY=", "dev": true, - "optional": true, "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "defaults": "^1.0.0", + "glob-stream": "^3.1.5", + "glob-watcher": "^0.0.6", + "graceful-fs": "^3.0.0", + "mkdirp": "^0.5.0", + "strip-bom": "^1.0.0", + "through2": "^0.6.1", + "vinyl": "^0.4.0" } - }, - "has-unicode": { + } + } + }, + "gulp-angular-filesort": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/gulp-angular-filesort/-/gulp-angular-filesort-1.2.1.tgz", + "integrity": "sha1-n040GDmCU3oDHg/GUY1jxO1saNw=", + "dev": true, + "requires": { + "ng-dependencies": "^0.8.1", + "plugin-error": "^1.0.1", + "through2": "^2.0.0", + "toposort": "^1.0.0" + } + }, + "gulp-angular-templatecache": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/gulp-angular-templatecache/-/gulp-angular-templatecache-2.2.1.tgz", + "integrity": "sha512-MAsOPoefYUaZ9a19+inieP+1r+/dD+QNy0QqYQD4WKn7nYiHob4cjJLIfZGl3M3wRGBxPM+la0zqUDSfUJWozQ==", + "dev": true, + "requires": { + "event-stream": "3.3.4", + "gulp-concat": "2.6.1", + "gulp-footer": "2.0.1", + "gulp-header": "2.0.5", + "jsesc": "2.5.1", + "lodash.template": "^4.4.0", + "through2": "^2.0.3" + }, + "dependencies": { + "gulp-footer": { "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "iconv-lite": { - "version": "0.4.21", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safer-buffer": "^2.1.0" - } - }, - "ignore-walk": { - "version": "3.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/gulp-footer/-/gulp-footer-2.0.1.tgz", + "integrity": "sha512-leXmoTEwXjklKuIE+8xGhuqlN/OdWubnkn3W/jNzmxxYbzQVjCtl2XI5iZztgPKLZ+Mh1t+7tTTGyVQqZva4+A==", "dev": true, - "optional": true, "requires": { - "minimatch": "^3.0.4" + "event-stream": "*", + "lodash._reescape": "^3.0.0", + "lodash._reevaluate": "^3.0.0", + "lodash._reinterpolate": "^3.0.0", + "lodash.template": "^3.6.2" + }, + "dependencies": { + "lodash.template": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-3.6.2.tgz", + "integrity": "sha1-+M3sxhaaJVvpCYrosMU9N4kx0U8=", + "dev": true, + "requires": { + "lodash._basecopy": "^3.0.0", + "lodash._basetostring": "^3.0.0", + "lodash._basevalues": "^3.0.0", + "lodash._isiterateecall": "^3.0.0", + "lodash._reinterpolate": "^3.0.0", + "lodash.escape": "^3.0.0", + "lodash.keys": "^3.0.0", + "lodash.restparam": "^3.0.0", + "lodash.templatesettings": "^3.0.0" + } + } } }, - "inflight": { - "version": "1.0.6", - "bundled": true, + "lodash.template": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.4.0.tgz", + "integrity": "sha1-5zoDhcg1VZF0bgILmWecaQ5o+6A=", "dev": true, - "optional": true, "requires": { - "once": "^1.3.0", - "wrappy": "1" + "lodash._reinterpolate": "~3.0.0", + "lodash.templatesettings": "^4.0.0" + }, + "dependencies": { + "lodash.templatesettings": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.1.0.tgz", + "integrity": "sha1-K01OlbpEDZFf8IvImeRVNmZxMxY=", + "dev": true, + "requires": { + "lodash._reinterpolate": "~3.0.0" + } + } } + } + } + }, + "gulp-autoprefixer": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/gulp-autoprefixer/-/gulp-autoprefixer-3.1.0.tgz", + "integrity": "sha1-KzraQ5/bEg7U6zpXSxIiNKi6KDo=", + "dev": true, + "requires": { + "autoprefixer": "^6.0.0", + "gulp-util": "^3.0.0", + "postcss": "^5.0.4", + "through2": "^2.0.0", + "vinyl-sourcemaps-apply": "^0.2.0" + } + }, + "gulp-changed": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/gulp-changed/-/gulp-changed-1.3.1.tgz", + "integrity": "sha1-slrLPpa4Snq7g9K5XFZyBFvLbTY=", + "dev": true, + "requires": { + "gulp-util": "^3.0.0", + "through2": "^2.0.0" + } + }, + "gulp-concat": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/gulp-concat/-/gulp-concat-2.6.1.tgz", + "integrity": "sha1-Yz0WyV2IUEYorQJmVmPO5aR5M1M=", + "dev": true, + "requires": { + "concat-with-sourcemaps": "^1.0.0", + "through2": "^2.0.0", + "vinyl": "^2.0.0" + }, + "dependencies": { + "clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", + "dev": true }, - "inherits": { - "version": "2.0.3", - "bundled": true, - "dev": true, - "optional": true - }, - "ini": { - "version": "1.3.5", - "bundled": true, - "dev": true, - "optional": true - }, - "is-fullwidth-code-point": { + "clone-stats": { "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "number-is-nan": "^1.0.0" - } + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", + "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=", + "dev": true }, - "isarray": { + "replace-ext": { "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", + "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", + "dev": true }, - "minimatch": { - "version": "3.0.4", - "bundled": true, + "vinyl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.0.tgz", + "integrity": "sha1-2FsH2pbkWNJbL/4Z/s6fLKoT7YY=", "dev": true, - "optional": true, "requires": { - "brace-expansion": "^1.1.7" + "clone": "^2.1.1", + "clone-buffer": "^1.0.0", + "clone-stats": "^1.0.0", + "cloneable-readable": "^1.0.0", + "remove-trailing-separator": "^1.0.1", + "replace-ext": "^1.0.0" } - }, - "minimist": { - "version": "0.0.8", - "bundled": true, - "dev": true, - "optional": true - }, - "minipass": { - "version": "2.2.4", - "bundled": true, - "dev": true, - "optional": true, + } + } + }, + "gulp-debug": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/gulp-debug/-/gulp-debug-4.0.0.tgz", + "integrity": "sha1-A2+VOcP7avcg4BqepcGV/HPynVs=", + "requires": { + "chalk": "^2.3.0", + "fancy-log": "^1.3.2", + "plur": "^3.0.0", + "stringify-object": "^3.0.0", + "through2": "^2.0.0", + "tildify": "^1.1.2" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "requires": { - "safe-buffer": "^5.1.1", - "yallist": "^3.0.0" + "color-convert": "^1.9.0" } }, - "minizlib": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "optional": true, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "requires": { - "minipass": "^2.2.1" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, - "mkdirp": { - "version": "0.5.1", - "bundled": true, - "dev": true, - "optional": true, + "fancy-log": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.3.tgz", + "integrity": "sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==", "requires": { - "minimist": "0.0.8" + "ansi-gray": "^0.1.1", + "color-support": "^1.1.3", + "parse-node-version": "^1.0.0", + "time-stamp": "^1.0.0" } }, - "ms": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, - "needle": { - "version": "2.2.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "debug": "^2.1.2", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - } + "irregular-plurals": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/irregular-plurals/-/irregular-plurals-2.0.0.tgz", + "integrity": "sha512-Y75zBYLkh0lJ9qxeHlMjQ7bSbyiSqNW/UOPWDmzC7cXskL1hekSITh1Oc6JV0XCWWZ9DE8VYSB71xocLk3gmGw==" }, - "node-pre-gyp": { - "version": "0.10.0", - "bundled": true, - "dev": true, - "optional": true, + "plur": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/plur/-/plur-3.1.1.tgz", + "integrity": "sha512-t1Ax8KUvV3FFII8ltczPn2tJdjqbd1sIzu6t4JL7nQ3EyeL/lTrj5PWKb06ic5/6XYDr65rQ4uzQEGN70/6X5w==", "requires": { - "detect-libc": "^1.0.2", - "mkdirp": "^0.5.1", - "needle": "^2.2.0", - "nopt": "^4.0.1", - "npm-packlist": "^1.1.6", - "npmlog": "^4.0.2", - "rc": "^1.1.7", - "rimraf": "^2.6.1", - "semver": "^5.3.0", - "tar": "^4" + "irregular-plurals": "^2.0.0" } }, - "nopt": { - "version": "4.0.1", - "bundled": true, - "dev": true, - "optional": true, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "requires": { - "abbrev": "1", - "osenv": "^0.1.4" + "has-flag": "^3.0.0" } - }, - "npm-bundled": { - "version": "1.0.3", - "bundled": true, - "dev": true, - "optional": true - }, - "npm-packlist": { - "version": "1.1.10", - "bundled": true, + } + } + }, + "gulp-decompress": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gulp-decompress/-/gulp-decompress-1.2.0.tgz", + "integrity": "sha1-jutlpeAV+O2FMsr+KEVJYGJvDcc=", + "dev": true, + "requires": { + "archive-type": "^3.0.0", + "decompress": "^3.0.0", + "gulp-util": "^3.0.1", + "readable-stream": "^2.0.2" + }, + "dependencies": { + "archive-type": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/archive-type/-/archive-type-3.2.0.tgz", + "integrity": "sha1-nNnABpV+vpX62tW9YJiUKoE3N/Y=", "dev": true, - "optional": true, "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1" + "file-type": "^3.1.0" } }, - "npmlog": { - "version": "4.1.2", - "bundled": true, + "clone": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz", + "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=", + "dev": true + }, + "decompress": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/decompress/-/decompress-3.0.0.tgz", + "integrity": "sha1-rx3VDQbjv8QyRh033hGzjA2ZG+0=", "dev": true, - "optional": true, "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" + "buffer-to-vinyl": "^1.0.0", + "concat-stream": "^1.4.6", + "decompress-tar": "^3.0.0", + "decompress-tarbz2": "^3.0.0", + "decompress-targz": "^3.0.0", + "decompress-unzip": "^3.0.0", + "stream-combiner2": "^1.1.1", + "vinyl-assign": "^1.0.1", + "vinyl-fs": "^2.2.0" } }, - "number-is-nan": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "object-assign": { - "version": "4.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "once": { - "version": "1.4.0", - "bundled": true, + "decompress-tar": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-3.1.0.tgz", + "integrity": "sha1-IXx4n5uURQ76rcXF5TeXj8MzxGY=", "dev": true, - "optional": true, "requires": { - "wrappy": "1" + "is-tar": "^1.0.0", + "object-assign": "^2.0.0", + "strip-dirs": "^1.0.0", + "tar-stream": "^1.1.1", + "through2": "^0.6.1", + "vinyl": "^0.4.3" } }, - "os-homedir": { - "version": "1.0.2", - "bundled": true, + "decompress-tarbz2": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-3.1.0.tgz", + "integrity": "sha1-iyOTVoE1X58YnYclag+L3ZbZZm0=", "dev": true, - "optional": true + "requires": { + "is-bzip2": "^1.0.0", + "object-assign": "^2.0.0", + "seek-bzip": "^1.0.3", + "strip-dirs": "^1.0.0", + "tar-stream": "^1.1.1", + "through2": "^0.6.1", + "vinyl": "^0.4.3" + } }, - "os-tmpdir": { - "version": "1.0.2", - "bundled": true, + "decompress-targz": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-3.1.0.tgz", + "integrity": "sha1-ssE9+YFmJomRtxXWRH9kLpaW9aA=", "dev": true, - "optional": true + "requires": { + "is-gzip": "^1.0.0", + "object-assign": "^2.0.0", + "strip-dirs": "^1.0.0", + "tar-stream": "^1.1.1", + "through2": "^0.6.1", + "vinyl": "^0.4.3" + } }, - "osenv": { - "version": "0.1.5", - "bundled": true, + "decompress-unzip": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-3.4.0.tgz", + "integrity": "sha1-YUdbQVIGa74/7hL51inRX+ZHjus=", "dev": true, - "optional": true, "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" + "is-zip": "^1.0.0", + "read-all-stream": "^3.0.0", + "stat-mode": "^0.2.0", + "strip-dirs": "^1.0.0", + "through2": "^2.0.0", + "vinyl": "^1.0.0", + "yauzl": "^2.2.1" + }, + "dependencies": { + "clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", + "dev": true + }, + "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.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "requires": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "vinyl": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz", + "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=", + "dev": true, + "requires": { + "clone": "^1.0.0", + "clone-stats": "^0.0.1", + "replace-ext": "0.0.1" + } + } } }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true + "file-type": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", + "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=", + "dev": true + }, + "is-natural-number": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-2.1.1.tgz", + "integrity": "sha1-fUxXKDd+84bD4ZSpkRv1fG3DNec=", + "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 + }, + "object-assign": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-2.1.1.tgz", + "integrity": "sha1-Q8NuXVaf+OSBbE76i+AtJpZ8GKo=", + "dev": true }, "process-nextick-args": { - "version": "2.0.0", - "bundled": true, + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + }, + "strip-dirs": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-1.1.1.tgz", + "integrity": "sha1-lgu9EoeETzl1pFWKoQOoJV4kVqA=", "dev": true, - "optional": true + "requires": { + "chalk": "^1.0.0", + "get-stdin": "^4.0.1", + "is-absolute": "^0.1.5", + "is-natural-number": "^2.0.0", + "minimist": "^1.1.0", + "sum-up": "^1.0.1" + } }, - "rc": { - "version": "1.2.7", - "bundled": true, + "through2": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", + "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", "dev": true, - "optional": true, "requires": { - "deep-extend": "^0.5.1", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" + "readable-stream": ">=1.0.33-1 <1.1.0-0", + "xtend": ">=4.0.0 <4.1.0-0" }, "dependencies": { - "minimist": { - "version": "1.2.0", - "bundled": true, + "readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", "dev": true, - "optional": true + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } } } }, - "readable-stream": { - "version": "2.3.6", - "bundled": true, + "vinyl": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz", + "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=", "dev": true, - "optional": true, "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "clone": "^0.2.0", + "clone-stats": "^0.0.1" + } + } + } + }, + "gulp-eslint": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/gulp-eslint/-/gulp-eslint-3.0.1.tgz", + "integrity": "sha1-BOV+PhjGl0JnwSz2hV3HF9SjE70=", + "dev": true, + "requires": { + "bufferstreams": "^1.1.1", + "eslint": "^3.0.0", + "gulp-util": "^3.0.6" + } + }, + "gulp-flatten": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/gulp-flatten/-/gulp-flatten-0.3.0.tgz", + "integrity": "sha1-g7krlnu0M/QBhWV2g4XumucaOOQ=", + "dev": true, + "requires": { + "gulp-util": "^3.0.7", + "through2": "^2.0.0" + } + }, + "gulp-footer": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/gulp-footer/-/gulp-footer-1.0.5.tgz", + "integrity": "sha1-6Eynd+Jmvnu8LUXS3w5+uo36PlQ=", + "dev": true, + "requires": { + "event-stream": "*", + "gulp-util": "*", + "lodash.assign": "*" + } + }, + "gulp-header": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/gulp-header/-/gulp-header-2.0.5.tgz", + "integrity": "sha512-7bOIiHvM1GUHIG3LRH+UIanOxyjSys0FbzzgUBlV2cZIIZihEW+KKKKm0ejUBNGvRdhISEFFr6HlptXoa28gtQ==", + "dev": true, + "requires": { + "concat-with-sourcemaps": "*", + "lodash.template": "^4.4.0", + "through2": "^2.0.0" + }, + "dependencies": { + "lodash.template": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.4.0.tgz", + "integrity": "sha1-5zoDhcg1VZF0bgILmWecaQ5o+6A=", + "dev": true, + "requires": { + "lodash._reinterpolate": "~3.0.0", + "lodash.templatesettings": "^4.0.0" } }, - "rimraf": { - "version": "2.6.2", - "bundled": true, + "lodash.templatesettings": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.1.0.tgz", + "integrity": "sha1-K01OlbpEDZFf8IvImeRVNmZxMxY=", + "dev": true, + "requires": { + "lodash._reinterpolate": "~3.0.0" + } + } + } + }, + "gulp-htmlmin": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/gulp-htmlmin/-/gulp-htmlmin-2.0.0.tgz", + "integrity": "sha1-EspjV2Q3qt/IWdKt36QcOO/OqGk=", + "dev": true, + "requires": { + "bufferstreams": "^1.1.0", + "gulp-util": "^3.0.7", + "html-minifier": "^2.1.0", + "object-assign": "^4.0.1", + "readable-stream": "^2.0.2", + "tryit": "^1.0.1" + } + }, + "gulp-if": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/gulp-if/-/gulp-if-2.0.1.tgz", + "integrity": "sha1-VfPt+Czs389gNapdBoaXmqsNrCg=", + "dev": true, + "requires": { + "gulp-match": "^1.0.2", + "ternary-stream": "^2.0.0", + "through2": "^2.0.1" + } + }, + "gulp-imagemin": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/gulp-imagemin/-/gulp-imagemin-5.0.3.tgz", + "integrity": "sha1-uCNq/1I+69LUtVKoFKNd8H7nELw=", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "fancy-log": "^1.3.2", + "imagemin": "^6.0.0", + "imagemin-gifsicle": "^6.0.1", + "imagemin-jpegtran": "^6.0.0", + "imagemin-optipng": "^6.0.0", + "imagemin-svgo": "^7.0.0", + "plugin-error": "^1.0.1", + "plur": "^3.0.1", + "pretty-bytes": "^5.1.0", + "through2-concurrent": "^2.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=", "dev": true, - "optional": true, "requires": { - "glob": "^7.0.5" + "color-convert": "^1.9.0" } }, - "safe-buffer": { - "version": "5.1.1", - "bundled": true, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ=", "dev": true, - "optional": true + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } }, - "safer-buffer": { - "version": "2.1.2", - "bundled": true, + "fancy-log": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.3.tgz", + "integrity": "sha1-28GRVPVYaQFQojlToK29A1vkX8c=", "dev": true, - "optional": true + "requires": { + "ansi-gray": "^0.1.1", + "color-support": "^1.1.3", + "parse-node-version": "^1.0.0", + "time-stamp": "^1.0.0" + } }, - "sax": { - "version": "1.2.4", - "bundled": true, - "dev": true, - "optional": true + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true }, - "semver": { + "supports-color": { "version": "5.5.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha1-4uaaRKyHcveKHsCzW2id9lMO/I8=", "dev": true, - "optional": true - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "gulp-inject": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/gulp-inject/-/gulp-inject-4.1.0.tgz", + "integrity": "sha1-z+0E84S1E9SzFFj/zmuTSRSg0zs=", + "dev": true, + "requires": { + "arrify": "^1.0.1", + "escape-string-regexp": "^1.0.5", + "event-stream": "^3.1.0", + "group-array": "^0.3.0", + "gulp-util": "^3.0.0", + "stream-to-array": "^2.3.0", + "through2": "^2.0.1" + } + }, + "gulp-match": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/gulp-match/-/gulp-match-1.0.3.tgz", + "integrity": "sha1-kcfA1/Kb7NZgbVfYCn+Hdqh6uo4=", + "dev": true, + "requires": { + "minimatch": "^3.0.3" + } + }, + "gulp-natural-sort": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/gulp-natural-sort/-/gulp-natural-sort-0.1.1.tgz", + "integrity": "sha1-sRI5k7lPkhPijQ9N+wq2MeO4Kcg=", + "dev": true, + "requires": { + "natural-compare-lite": "^1.0.0", + "through": "^2.3.4" + } + }, + "gulp-ng-annotate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/gulp-ng-annotate/-/gulp-ng-annotate-2.0.0.tgz", + "integrity": "sha1-hKg9sfAWUgvXD5pc+p8/6J4logU=", + "dev": true, + "requires": { + "bufferstreams": "^1.1.0", + "gulp-util": "^3.0.7", + "merge": "^1.2.0", + "ng-annotate": "^1.2.1", + "through2": "^2.0.1", + "vinyl-sourcemaps-apply": "^0.2.1" + } + }, + "gulp-ng-constant": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gulp-ng-constant/-/gulp-ng-constant-1.2.0.tgz", + "integrity": "sha1-XftunOAvQyi8Jry2vUGggo4ADGo=", + "dev": true, + "requires": { + "js-yaml": "^3.2.7", + "lodash": "^4.14.1", + "plugin-error": "^0.1.2", + "replace-ext": "^1.0.0", + "through2": "^2.0.0", + "vinyl": "^2.1.0" + }, + "dependencies": { + "arr-diff": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-1.1.0.tgz", + "integrity": "sha1-aHwydYFjWI/vfeezb6vklesaOZo=", "dev": true, - "optional": true + "requires": { + "arr-flatten": "^1.0.1", + "array-slice": "^0.2.3" + } }, - "signal-exit": { - "version": "3.0.2", - "bundled": true, - "dev": true, - "optional": true + "arr-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-2.1.0.tgz", + "integrity": "sha1-IPnqtexw9cfSFbEHexw5Fh0pLH0=", + "dev": true }, - "string-width": { - "version": "1.0.2", - "bundled": true, + "array-slice": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz", + "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU=", + "dev": true + }, + "clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", + "dev": true + }, + "clone-stats": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", + "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=", + "dev": true + }, + "extend-shallow": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-1.1.4.tgz", + "integrity": "sha1-Gda/lN/AnXa6cR85uHLSH/TdkHE=", "dev": true, - "optional": true, "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" + "kind-of": "^1.1.0" } }, - "string_decoder": { - "version": "1.1.1", - "bundled": true, + "kind-of": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-1.1.0.tgz", + "integrity": "sha1-FAo9LUGjbS78+pN3tiwk+ElaXEQ=", + "dev": true + }, + "plugin-error": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-0.1.2.tgz", + "integrity": "sha1-O5uzM1zPAPQl4HQ34ZJ2ln2kes4=", "dev": true, - "optional": true, "requires": { - "safe-buffer": "~5.1.0" + "ansi-cyan": "^0.1.1", + "ansi-red": "^0.1.1", + "arr-diff": "^1.0.1", + "arr-union": "^2.0.1", + "extend-shallow": "^1.1.2" } }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, + "replace-ext": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", + "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", + "dev": true + }, + "vinyl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.0.tgz", + "integrity": "sha1-2FsH2pbkWNJbL/4Z/s6fLKoT7YY=", "dev": true, - "optional": true, "requires": { - "ansi-regex": "^2.0.0" + "clone": "^2.1.1", + "clone-buffer": "^1.0.0", + "clone-stats": "^1.0.0", + "cloneable-readable": "^1.0.0", + "remove-trailing-separator": "^1.0.1", + "replace-ext": "^1.0.0" } + } + } + }, + "gulp-notify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/gulp-notify/-/gulp-notify-2.2.0.tgz", + "integrity": "sha1-BGyChcKS6X7tThWgCcJsu+XO8TU=", + "dev": true, + "requires": { + "gulp-util": "^3.0.2", + "lodash.template": "^3.0.0", + "node-notifier": "^4.1.0", + "node.extend": "^1.1.3", + "through2": "^0.6.3" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true }, - "strip-json-comments": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "tar": { - "version": "4.4.1", - "bundled": true, + "readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", "dev": true, - "optional": true, "requires": { - "chownr": "^1.0.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.2.4", - "minizlib": "^1.1.0", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.1", - "yallist": "^3.0.2" + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" } }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true + "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 }, - "wide-align": { - "version": "1.1.2", - "bundled": true, + "through2": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", + "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", "dev": true, - "optional": true, "requires": { - "string-width": "^1.0.2" + "readable-stream": ">=1.0.33-1 <1.1.0-0", + "xtend": ">=4.0.0 <4.1.0-0" } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "yallist": { - "version": "3.0.2", - "bundled": true, - "dev": true, - "optional": true } } }, - "fullname": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fullname/-/fullname-2.1.0.tgz", - "integrity": "sha1-xGvw98PyT9WzNY0A5KQTgO74c1A=", + "gulp-plumber": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/gulp-plumber/-/gulp-plumber-1.1.0.tgz", + "integrity": "sha1-8SF2wtBCL2AwbCQv/2oBo5T6ugk=", "dev": true, "requires": { - "npmconf": "^2.1.1", - "pify": "^2.2.0", - "pinkie-promise": "^2.0.0" + "gulp-util": "^3", + "through2": "^2" } }, - "function-bind": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.0.tgz", - "integrity": "sha1-FhdnFMgBeY5Ojyz391KUZ7tKV3E=", + "gulp-rename": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/gulp-rename/-/gulp-rename-1.2.2.tgz", + "integrity": "sha1-OtRCh2PwXidk3sHGfYaNsnVoeBc=", "dev": true }, - "gauge": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-1.2.7.tgz", - "integrity": "sha1-6c7FSD09TuDvRLYKfZnkk14TbZM=", + "gulp-replace": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/gulp-replace/-/gulp-replace-0.5.4.tgz", + "integrity": "sha1-aaZ5FLvRPFYr/xT1BKQDeWqg2qk=", "dev": true, "requires": { - "ansi": "^0.3.0", - "has-unicode": "^2.0.0", - "lodash.pad": "^4.1.0", - "lodash.padend": "^4.1.0", - "lodash.padstart": "^4.1.0" + "istextorbinary": "1.0.2", + "readable-stream": "^2.0.1", + "replacestream": "^4.0.0" } }, - "gaze": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/gaze/-/gaze-0.5.2.tgz", - "integrity": "sha1-QLcJU30k0dRXZ9takIaJ3+aaxE8=", + "gulp-rev": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/gulp-rev/-/gulp-rev-7.1.0.tgz", + "integrity": "sha1-DPYlbYVHgBgZecaIFGWUDNLl8iA=", "dev": true, "requires": { - "globule": "~0.1.0" + "gulp-util": "^3.0.0", + "modify-filename": "^1.1.0", + "object-assign": "^4.0.1", + "rev-hash": "^1.0.0", + "rev-path": "^1.0.0", + "sort-keys": "^1.0.0", + "through2": "^2.0.0", + "vinyl-file": "^1.1.0" + }, + "dependencies": { + "vinyl-file": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/vinyl-file/-/vinyl-file-1.3.0.tgz", + "integrity": "sha1-qgVjTTqGe6kUR77bs0r8sm9E9uc=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "strip-bom": "^2.0.0", + "strip-bom-stream": "^1.0.0", + "vinyl": "^1.1.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 + "gulp-rev-replace": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/gulp-rev-replace/-/gulp-rev-replace-0.4.3.tgz", + "integrity": "sha1-crUYSPXwk61Ld7HSQRCB63is1G4=", + "dev": true, + "requires": { + "gulp-util": "^3.0.7", + "through2": "^2.0.0" + } }, - "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=", + "gulp-sourcemaps": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/gulp-sourcemaps/-/gulp-sourcemaps-1.6.0.tgz", + "integrity": "sha1-uG/zSdgBzrVuHZ59x7vLS33uYAw=", "dev": true, "requires": { - "is-property": "^1.0.0" + "convert-source-map": "^1.1.1", + "graceful-fs": "^4.1.2", + "strip-bom": "^2.0.0", + "through2": "^2.0.0", + "vinyl": "^1.0.0" } }, - "generator-jhipster": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/generator-jhipster/-/generator-jhipster-3.6.1.tgz", - "integrity": "sha1-+5WqvjnBRLBkptHoB+BcaZNVFFU=", + "gulp-uglify": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/gulp-uglify/-/gulp-uglify-1.5.4.tgz", + "integrity": "sha1-UkeI2HZm0J+dDCH7IXf5ADmmWMk=", "dev": true, "requires": { - "chalk": "1.1.3", - "cheerio": "0.20.0", - "ejs": "2.4.2", - "glob": "7.0.3", - "html-wiring": "1.2.0", - "insight": "0.8.2", - "jhipster-core": "1.1.7", - "js-yaml": "3.6.1", - "lodash": "4.13.1", - "mkdirp": "0.5.1", - "pluralize": "2.0.0", - "semver": "5.1.0", - "shelljs": "0.7.0", - "wordwrap": "1.0.0", - "yeoman-generator": "0.22.6", - "yo": "1.8.4" + "deap": "^1.0.0", + "fancy-log": "^1.0.0", + "gulp-util": "^3.0.0", + "isobject": "^2.0.0", + "through2": "^2.0.0", + "uglify-js": "2.6.4", + "uglify-save-license": "^0.4.1", + "vinyl-sourcemaps-apply": "^0.2.0" + } + }, + "gulp-useref": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/gulp-useref/-/gulp-useref-3.1.5.tgz", + "integrity": "sha1-vrjgCcGfgZ9gTejRkdsSi9JEqnA=", + "dev": true, + "requires": { + "event-stream": "^3.3.4", + "extend": "^3.0.1", + "glob": "^7.1.2", + "gulp-concat": "^2.6.1", + "gulp-if": "^2.0.2", + "is-relative-url": "1.0.0", + "plugin-error": "^1.0.1", + "through2": "^2.0.3", + "useref": "^1.4.1", + "vinyl-fs": "^3.0.2" }, "dependencies": { - "glob": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.0.3.tgz", - "integrity": "sha1-CqI1kxpKlqwT1g/6wvuHe9btT1g=", + "clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", + "dev": true + }, + "clone-stats": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", + "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=", + "dev": true + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + } + }, + "glob-stream": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz", + "integrity": "sha1-cEXJlBOz65SIjYOrRtC0BMx73eQ=", + "dev": true, + "requires": { + "extend": "^3.0.0", + "glob": "^7.1.1", + "glob-parent": "^3.1.0", + "is-negated-glob": "^1.0.0", + "ordered-read-streams": "^1.0.0", + "pumpify": "^1.3.5", + "readable-stream": "^2.1.5", + "remove-trailing-separator": "^1.0.1", + "to-absolute-glob": "^2.0.0", + "unique-stream": "^2.0.2" + } + }, + "gulp-if": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/gulp-if/-/gulp-if-2.0.2.tgz", + "integrity": "sha1-pJe351cwBQQcqivIt92jyARE1ik=", + "dev": true, + "requires": { + "gulp-match": "^1.0.3", + "ternary-stream": "^2.0.1", + "through2": "^2.0.1" + } + }, + "is-absolute": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", + "integrity": "sha1-OV4a6EsR8mrReV5zwXN45IowFXY=", + "dev": true, + "requires": { + "is-relative": "^1.0.0", + "is-windows": "^1.0.1" + } + }, + "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.0" + } + }, + "is-relative": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", + "integrity": "sha1-obtpNc6MXboei5dUubLcwCDiJg0=", + "dev": true, + "requires": { + "is-unc-path": "^1.0.0" + } + }, + "is-unc-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", + "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", + "dev": true, + "requires": { + "unc-path-regex": "^0.1.2" + } + }, + "is-valid-glob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz", + "integrity": "sha1-Kb8+/3Ab4tTTFdusw5vDn+j2Aao=", + "dev": true + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true + }, + "ordered-read-streams": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz", + "integrity": "sha1-d8DLN8QVJdZBZtmQ/61+xqDhNj4=", "dev": true, "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "readable-stream": "^2.0.1" } }, - "lodash": { - "version": "4.13.1", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.13.1.tgz", - "integrity": "sha1-g+SxCRP0hJbU0W/sSlYK8u50S2g=", + "process-nextick-args": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", "dev": true }, - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "replace-ext": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", + "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", "dev": true }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { - "minimist": "0.0.8" + "safe-buffer": "~5.1.0" } }, - "semver": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.1.0.tgz", - "integrity": "sha1-hfLPhVBGXE3wAM99hvawVBBqueU=", - "dev": true + "to-absolute-glob": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz", + "integrity": "sha1-GGX0PZ50sIItufFFt4z/fQ98hJs=", + "dev": true, + "requires": { + "is-absolute": "^1.0.0", + "is-negated-glob": "^1.0.0" + } + }, + "vinyl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.0.tgz", + "integrity": "sha1-2FsH2pbkWNJbL/4Z/s6fLKoT7YY=", + "dev": true, + "requires": { + "clone": "^2.1.1", + "clone-buffer": "^1.0.0", + "clone-stats": "^1.0.0", + "cloneable-readable": "^1.0.0", + "remove-trailing-separator": "^1.0.1", + "replace-ext": "^1.0.0" + } + }, + "vinyl-fs": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-3.0.3.tgz", + "integrity": "sha1-yFhJQF9nQo/qu71cXb3WT0fTG8c=", + "dev": true, + "requires": { + "fs-mkdirp-stream": "^1.0.0", + "glob-stream": "^6.1.0", + "graceful-fs": "^4.0.0", + "is-valid-glob": "^1.0.0", + "lazystream": "^1.0.0", + "lead": "^1.0.0", + "object.assign": "^4.0.4", + "pumpify": "^1.3.5", + "readable-stream": "^2.3.3", + "remove-bom-buffer": "^3.0.0", + "remove-bom-stream": "^1.2.0", + "resolve-options": "^1.1.0", + "through2": "^2.0.0", + "to-through": "^2.0.0", + "value-or-function": "^3.0.0", + "vinyl": "^2.0.0", + "vinyl-sourcemap": "^1.1.0" + } } } }, - "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-own-enumerable-property-symbols": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.0.tgz", - "integrity": "sha512-CIJYJC4GGF06TakLg8z4GQKvDsx9EMspVxOYih7LerEL/WosUnFIww45CGfxfeKHqlg3twgUrYRT1O3WQqjGCg==" - }, - "get-proxy": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/get-proxy/-/get-proxy-1.1.0.tgz", - "integrity": "sha1-iUhUSRvFkbDxR9euVw9cZ4tyVus=", - "dev": true, - "requires": { - "rc": "^1.1.2" - } - }, - "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": "2.3.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz", - "integrity": "sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4=", - "dev": true, - "optional": true, - "requires": { - "object-assign": "^4.0.1", - "pinkie-promise": "^2.0.0" - } - }, - "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=", + "gulp-util": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.8.tgz", + "integrity": "sha1-AFTh50RQLifATBh8PsxQXdVLu08=", "dev": true, "requires": { - "assert-plus": "^1.0.0" + "array-differ": "^1.0.0", + "array-uniq": "^1.0.2", + "beeper": "^1.0.0", + "chalk": "^1.0.0", + "dateformat": "^2.0.0", + "fancy-log": "^1.1.0", + "gulplog": "^1.0.0", + "has-gulplog": "^0.1.0", + "lodash._reescape": "^3.0.0", + "lodash._reevaluate": "^3.0.0", + "lodash._reinterpolate": "^3.0.0", + "lodash.template": "^3.0.0", + "minimist": "^1.1.0", + "multipipe": "^0.1.2", + "object-assign": "^3.0.0", + "replace-ext": "0.0.1", + "through2": "^2.0.0", + "vinyl": "^0.5.0" }, "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dateformat": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-2.0.0.tgz", + "integrity": "sha1-J0Pjq7XD/CRi5SfcpEXgTp9N7hc=", "dev": true - } - } - }, - "gh-got": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/gh-got/-/gh-got-2.4.0.tgz", - "integrity": "sha1-qlFBiRHKXk+SQ3EUzRIJODpKoBk=", - "dev": true, - "requires": { - "got": "^5.2.0", - "object-assign": "^4.0.1", - "pinkie-promise": "^2.0.0" - } - }, - "gifsicle": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/gifsicle/-/gifsicle-3.0.4.tgz", - "integrity": "sha1-9Fy17RAWW2ZdySng6TKLbIId+js=", - "dev": true, - "optional": true, - "requires": { - "bin-build": "^2.0.0", - "bin-wrapper": "^3.0.0", - "logalot": "^2.0.0" - } - }, - "github-username": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/github-username/-/github-username-2.1.0.tgz", - "integrity": "sha1-IA5aEEr0K6CKVAlscI1LbsL6JWs=", - "dev": true, - "requires": { - "gh-got": "^2.2.0", - "meow": "^3.5.0" - } - }, - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha1-wZyd+aAocC1nhhI4SmVSQExjbRU=", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-base": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", - "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", - "dev": true, - "requires": { - "glob-parent": "^2.0.0", - "is-glob": "^2.0.0" + }, + "object-assign": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz", + "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=", + "dev": true + }, + "vinyl": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.5.3.tgz", + "integrity": "sha1-sEVbOPxeDPMNQyUTLkYZcMIJHN4=", + "dev": true, + "requires": { + "clone": "^1.0.0", + "clone-stats": "^0.0.1", + "replace-ext": "0.0.1" + } + } } }, - "glob-parent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", - "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "gulplog": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz", + "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=", "dev": true, "requires": { - "is-glob": "^2.0.0" + "glogg": "^1.0.0" } }, - "glob-stream": { - "version": "5.3.5", - "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-5.3.5.tgz", - "integrity": "sha1-pVZlqajM3EGRWofHAeMtTgFvrSI=", + "handlebars": { + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.2.tgz", + "integrity": "sha1-ARJ7OEAVagknBYd5SCAxr+DnMNc=", "dev": true, "requires": { - "extend": "^3.0.0", - "glob": "^5.0.3", - "glob-parent": "^3.0.0", - "micromatch": "^2.3.7", - "ordered-read-streams": "^0.3.0", - "through2": "^0.6.0", - "to-absolute-glob": "^0.1.1", - "unique-stream": "^2.0.2" + "neo-async": "^2.6.0", + "optimist": "^0.6.1", + "source-map": "^0.6.1", + "uglify-js": "^3.1.4" }, "dependencies": { - "glob": { - "version": "5.0.15", - "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true, - "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } + "optional": true }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "uglify-js": { + "version": "3.7.5", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.7.5.tgz", + "integrity": "sha1-J4x8JJJ6xaMtMzb8aP1K4Rd6SGo=", "dev": true, + "optional": true, "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" + "commander": "~2.20.3", + "source-map": "~0.6.1" } - }, - "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=", + } + } + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "dev": true + }, + "har-validator": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", + "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", + "dev": true, + "requires": { + "ajv": "^6.5.5", + "har-schema": "^2.0.0" + }, + "dependencies": { + "ajv": { + "version": "6.10.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", + "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", "dev": true, "requires": { - "is-extglob": "^2.1.0" + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" } }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "fast-deep-equal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", "dev": true }, - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true - }, - "through2": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", - "dev": true, - "requires": { - "readable-stream": ">=1.0.33-1 <1.1.0-0", - "xtend": ">=4.0.0 <4.1.0-0" - } } } }, - "glob-watcher": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-0.0.6.tgz", - "integrity": "sha1-uVtKjfdLOcgymLDAXJeLTZo7cQs=", + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha1-ci18v8H2qoJB8W3YFOAR4fQeh5Y=", "dev": true, "requires": { - "gaze": "^0.5.1" + "function-bind": "^1.1.1" } }, - "glob2base": { - "version": "0.0.12", - "resolved": "https://registry.npmjs.org/glob2base/-/glob2base-0.0.12.tgz", - "integrity": "sha1-nUGbPijxLoOjYhZKJ3BVkiycDVY=", + "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": { - "find-index": "^0.1.1" + "ansi-regex": "^2.0.0" } }, - "global-modules": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-0.2.3.tgz", - "integrity": "sha1-6lo77ULG1s6ZWk+KEmm12uIjgo0=", + "has-binary": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/has-binary/-/has-binary-0.1.7.tgz", + "integrity": "sha1-aOYesWIQyVRaClzOBqhzkS/h5ow=", + "dev": true, + "requires": { + "isarray": "0.0.1" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + } + } + }, + "has-binary2": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz", + "integrity": "sha1-d3asYn8+p3JQz8My2rfd9eT10R0=", "dev": true, "requires": { - "global-prefix": "^0.1.4", - "is-windows": "^0.2.0" + "isarray": "2.0.1" + }, + "dependencies": { + "isarray": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", + "dev": true + } } }, - "global-prefix": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-0.1.5.tgz", - "integrity": "sha1-jTvGuNo8qBEqFg2NSW/wRiv+948=", + "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-gulplog": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/has-gulplog/-/has-gulplog-0.1.0.tgz", + "integrity": "sha1-ZBTIKRNpfaUVkDl9r7EvIpZ4Ec4=", "dev": true, "requires": { - "homedir-polyfill": "^1.0.0", - "ini": "^1.3.4", - "is-windows": "^0.2.0", - "which": "^1.2.12" + "sparkles": "^1.0.0" } }, - "globals": { - "version": "9.18.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", - "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", + "has-symbol-support-x": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz", + "integrity": "sha1-FAn5i8ACR9pF2mfO4KNvKC/yZFU=", "dev": true }, - "globby": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", - "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", + "has-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", + "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", + "dev": true + }, + "has-to-string-tag-x": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz", + "integrity": "sha1-oEWrOD17SyASoAFIqwql8pAETU0=", "dev": true, "requires": { - "array-union": "^1.0.1", - "arrify": "^1.0.0", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" + "has-symbol-support-x": "^1.4.1" } }, - "globule": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/globule/-/globule-0.1.0.tgz", - "integrity": "sha1-2cjt3h2nnRJaFRt5UzuXhnY0auU=", + "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": { - "glob": "~3.1.21", - "lodash": "~1.0.1", - "minimatch": "~0.2.11" + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" }, "dependencies": { - "glob": { - "version": "3.1.21", - "resolved": "https://registry.npmjs.org/glob/-/glob-3.1.21.tgz", - "integrity": "sha1-0p4KBV3qUTj00H7UDomC6DwgZs0=", - "dev": true, - "requires": { - "graceful-fs": "~1.2.0", - "inherits": "1", - "minimatch": "~0.2.11" - } - }, - "graceful-fs": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz", - "integrity": "sha1-FaSAaldUfLLS2/J/QuiajDRRs2Q=", - "dev": true - }, - "inherits": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-1.0.2.tgz", - "integrity": "sha1-ykMJ2t7mtUzAuNJH6NfHoJdb3Js=", - "dev": true - }, - "lodash": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-1.0.2.tgz", - "integrity": "sha1-j1dWDIO1n8JwvT1WG2kAQ0MOJVE=", - "dev": true - }, - "lru-cache": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz", - "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=", - "dev": true - }, - "minimatch": { - "version": "0.2.14", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz", - "integrity": "sha1-x054BXT2PG+aCQ6Q775u9TpqdWo=", - "dev": true, - "requires": { - "lru-cache": "2", - "sigmund": "~1.0.0" - } + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true } } }, - "glogg": { + "has-values": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.0.tgz", - "integrity": "sha1-f+DxmfV6yQbPUS/urY+Q7kooT8U=", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", "dev": true, "requires": { - "sparkles": "^1.0.0" + "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.0.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" + } + } } }, - "got": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/got/-/got-5.7.1.tgz", - "integrity": "sha1-X4FjWmHkplifGAVp6k44FoClHzU=", + "hasha": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/hasha/-/hasha-2.2.0.tgz", + "integrity": "sha1-eNfL/B5tZjA/55g3NlmEUXsvbuE=", "dev": true, "requires": { - "create-error-class": "^3.0.1", - "duplexer2": "^0.1.4", - "is-redirect": "^1.0.0", - "is-retry-allowed": "^1.0.0", - "is-stream": "^1.0.0", - "lowercase-keys": "^1.0.0", - "node-status-codes": "^1.0.0", - "object-assign": "^4.0.1", - "parse-json": "^2.1.0", - "pinkie-promise": "^2.0.0", - "read-all-stream": "^3.0.0", - "readable-stream": "^2.0.5", - "timed-out": "^3.0.0", - "unzip-response": "^1.0.2", - "url-parse-lax": "^1.0.0" + "is-stream": "^1.0.1", + "pinkie-promise": "^2.0.0" } }, - "graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "he": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", + "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", "dev": true }, - "graceful-readlink": { + "header-case": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", - "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=", - "dev": true - }, - "group-array": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/group-array/-/group-array-0.3.3.tgz", - "integrity": "sha1-u9nS9xjfS+M/D7kEMqrxtDYOSY8=", + "resolved": "https://registry.npmjs.org/header-case/-/header-case-1.0.1.tgz", + "integrity": "sha1-lTWXMZfBRLCWE81l0xfvGZY70C0=", "dev": true, "requires": { - "arr-flatten": "^1.0.1", - "for-own": "^0.1.4", - "get-value": "^2.0.6", - "kind-of": "^3.1.0", - "split-string": "^1.0.1", - "union-value": "^0.2.3" + "no-case": "^2.2.0", + "upper-case": "^1.1.3" } }, - "grouped-queue": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/grouped-queue/-/grouped-queue-0.3.3.tgz", - "integrity": "sha1-wWfSpTGcWg4JZO9qJbfC34mWyFw=", + "hex-color-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", + "integrity": "sha1-TAb8y0YC/iYCs8k9+C1+fb8aio4=", + "dev": true + }, + "homedir-polyfill": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", + "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", "dev": true, "requires": { - "lodash": "^4.17.2" - }, - "dependencies": { - "lodash": { - "version": "4.17.4", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", - "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", - "dev": true - } + "parse-passwd": "^1.0.0" } }, - "growly": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", - "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", + "hosted-git-info": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.5.0.tgz", + "integrity": "sha1-bWDjSzq7yDEwYsO3mO+NkBoHrzw=", "dev": true }, - "gruntfile-editor": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/gruntfile-editor/-/gruntfile-editor-1.2.1.tgz", - "integrity": "sha1-Nm/B+Ty/BFgT4USK7x2p8YKJ1es=", + "hsl-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz", + "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=", + "dev": true + }, + "hsla-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz", + "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=", + "dev": true + }, + "html-comment-regex": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.2.tgz", + "integrity": "sha1-l9RoiutcgYhqNk+qDK0d2hTUM6c=", + "dev": true + }, + "html-minifier": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-2.1.7.tgz", + "integrity": "sha1-kFHW/LvPIU7TB+GtdPQyu5rWVcw=", "dev": true, "requires": { - "ast-query": "^2.0.0", - "lodash": "^4.6.1" + "change-case": "3.0.x", + "clean-css": "3.4.x", + "commander": "2.9.x", + "he": "1.1.x", + "ncname": "1.0.x", + "relateurl": "0.2.x", + "uglify-js": "2.6.x" + }, + "dependencies": { + "commander": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", + "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=", + "dev": true, + "requires": { + "graceful-readlink": ">= 1.0.0" + } + } } }, - "gulp": { - "version": "3.9.1", - "resolved": "https://registry.npmjs.org/gulp/-/gulp-3.9.1.tgz", - "integrity": "sha1-VxzkWSjdQK9lFPxAEYZgFsE4RbQ=", + "html-wiring": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/html-wiring/-/html-wiring-1.2.0.tgz", + "integrity": "sha1-xfkKd24KJyQdxt+QIsNxhtAnD54=", "dev": true, "requires": { - "archy": "^1.0.0", - "chalk": "^1.0.0", - "deprecated": "^0.0.1", - "gulp-util": "^3.0.0", - "interpret": "^1.0.0", - "liftoff": "^2.1.0", - "minimist": "^1.1.0", - "orchestrator": "^0.3.0", - "pretty-hrtime": "^1.0.0", - "semver": "^4.1.0", - "tildify": "^1.0.0", - "v8flags": "^2.0.2", - "vinyl-fs": "^0.3.0" + "cheerio": "^0.19.0", + "detect-newline": "^1.0.3" }, "dependencies": { - "clone": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz", - "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=", - "dev": true - }, - "glob": { - "version": "4.5.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-4.5.3.tgz", - "integrity": "sha1-xstz0yJsHv7wTePFbQEvAzd+4V8=", + "cheerio": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-0.19.0.tgz", + "integrity": "sha1-dy5wFfLuKZZQltcepBdbdas1SSU=", "dev": true, "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^2.0.1", - "once": "^1.3.0" + "css-select": "~1.0.0", + "dom-serializer": "~0.1.0", + "entities": "~1.1.1", + "htmlparser2": "~3.8.1", + "lodash": "^3.2.0" } }, - "glob-stream": { - "version": "3.1.18", - "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-3.1.18.tgz", - "integrity": "sha1-kXCl8St5Awb9/lmPMT+PeVT9FDs=", + "css-select": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.0.0.tgz", + "integrity": "sha1-sRIcpRhI3SZOIkTQWM7iVN7rRLA=", "dev": true, "requires": { - "glob": "^4.3.1", - "glob2base": "^0.0.12", - "minimatch": "^2.0.1", - "ordered-read-streams": "^0.1.0", - "through2": "^0.6.1", - "unique-stream": "^1.0.0" + "boolbase": "~1.0.0", + "css-what": "1.0", + "domutils": "1.4", + "nth-check": "~1.0.0" } }, - "graceful-fs": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.11.tgz", - "integrity": "sha1-dhPHeKGv6mLyXGMKCG1/Osu92Bg=", + "css-what": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-1.0.0.tgz", + "integrity": "sha1-18wt9FGAZm+Z0rFEYmOUaeAPc2w=", + "dev": true + }, + "dom-serializer": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", + "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", "dev": true, "requires": { - "natives": "^1.1.0" + "domelementtype": "^1.3.0", + "entities": "^1.1.1" } }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "minimatch": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.10.tgz", - "integrity": "sha1-jQh8OcazjAAbl/ynzm0OHoCvusc=", + "domutils": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.4.3.tgz", + "integrity": "sha1-CGVRN5bGswYDGFDhdVFrr4C3Km8=", "dev": true, "requires": { - "brace-expansion": "^1.0.0" + "domelementtype": "1" } }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "entities": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", + "dev": true + }, + "lodash": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", + "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", + "dev": true + } + } + }, + "htmlparser2": { + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz", + "integrity": "sha1-mWwosZFRaovoZQGn15dX5ccMEGg=", + "dev": true, + "requires": { + "domelementtype": "1", + "domhandler": "2.3", + "domutils": "1.5", + "entities": "1.0", + "readable-stream": "1.1" + }, + "dependencies": { + "domutils": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", + "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", "dev": true, "requires": { - "minimist": "0.0.8" - }, - "dependencies": { - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true - } + "dom-serializer": "0", + "domelementtype": "1" } }, - "ordered-read-streams": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-0.1.0.tgz", - "integrity": "sha1-/VZamvjrRHO6abbtijQ1LLVS8SY=", + "entities": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz", + "integrity": "sha1-sph6o4ITR/zeZCsk/fyeT7cSvyY=", + "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 }, "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", "dev": true, "requires": { "core-util-is": "~1.0.0", @@ -5105,198 +9905,168 @@ "string_decoder": "~0.10.x" } }, - "semver": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz", - "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=", - "dev": true - }, "string_decoder": { "version": "0.10.31", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", "dev": true + } + } + }, + "http-cache-semantics": { + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz", + "integrity": "sha1-ObDhat2bYFvwqe89nar0hDtMrNI=", + "dev": true, + "optional": true + }, + "http-errors": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz", + "integrity": "sha1-bGGeT5xgMIw4UZSYwU+7EKrOuwY=", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + }, + "dependencies": { + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true }, - "strip-bom": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-1.0.0.tgz", - "integrity": "sha1-hbiGLzhEtabV7IRnqTWYFzo295Q=", - "dev": true, - "requires": { - "first-chunk-stream": "^1.0.0", - "is-utf8": "^0.2.0" - } - }, - "through2": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", - "dev": true, - "requires": { - "readable-stream": ">=1.0.33-1 <1.1.0-0", - "xtend": ">=4.0.0 <4.1.0-0" - } - }, - "unique-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-1.0.0.tgz", - "integrity": "sha1-1ZpKdUJ0R9mqbJHnAmP40mpLEEs=", + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, - "vinyl": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz", - "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=", - "dev": true, - "requires": { - "clone": "^0.2.0", - "clone-stats": "^0.0.1" - } + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", + "dev": true }, - "vinyl-fs": { - "version": "0.3.14", - "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-0.3.14.tgz", - "integrity": "sha1-mmhRzhysHBzqX+hsCTHWIMLPqeY=", - "dev": true, - "requires": { - "defaults": "^1.0.0", - "glob-stream": "^3.1.5", - "glob-watcher": "^0.0.6", - "graceful-fs": "^3.0.0", - "mkdirp": "^0.5.0", - "strip-bom": "^1.0.0", - "through2": "^0.6.1", - "vinyl": "^0.4.0" - } + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "dev": true } } }, - "gulp-angular-filesort": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/gulp-angular-filesort/-/gulp-angular-filesort-1.2.1.tgz", - "integrity": "sha512-KkB43Uof1JI7qVEBq5tAILoMbBrxSZyhOgirtVKvwXhXRspqfytR6tcGpdlxHAsQ3edLuyjpA3c6o5zhSAmbOA==", + "http-proxy": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.0.tgz", + "integrity": "sha1-2+VfY+daNH2389mZdPJpKjFKajo=", "dev": true, "requires": { - "ng-dependencies": "^0.8.1", - "plugin-error": "^1.0.1", - "through2": "^2.0.0", - "toposort": "^1.0.0" + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "dependencies": { + "eventemitter3": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.0.tgz", + "integrity": "sha1-1lF2FjiH7lnzhtZMgmELaWpKdOs=", + "dev": true + } } }, - "gulp-angular-templatecache": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/gulp-angular-templatecache/-/gulp-angular-templatecache-2.2.1.tgz", - "integrity": "sha512-MAsOPoefYUaZ9a19+inieP+1r+/dD+QNy0QqYQD4WKn7nYiHob4cjJLIfZGl3M3wRGBxPM+la0zqUDSfUJWozQ==", + "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": { - "event-stream": "3.3.4", - "gulp-concat": "2.6.1", - "gulp-footer": "2.0.1", - "gulp-header": "2.0.5", - "jsesc": "2.5.1", - "lodash.template": "^4.4.0", - "through2": "^2.0.3" - }, - "dependencies": { - "gulp-footer": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/gulp-footer/-/gulp-footer-2.0.1.tgz", - "integrity": "sha512-leXmoTEwXjklKuIE+8xGhuqlN/OdWubnkn3W/jNzmxxYbzQVjCtl2XI5iZztgPKLZ+Mh1t+7tTTGyVQqZva4+A==", - "dev": true, - "requires": { - "event-stream": "*", - "lodash._reescape": "^3.0.0", - "lodash._reevaluate": "^3.0.0", - "lodash._reinterpolate": "^3.0.0", - "lodash.template": "^3.6.2" - }, - "dependencies": { - "lodash.template": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-3.6.2.tgz", - "integrity": "sha1-+M3sxhaaJVvpCYrosMU9N4kx0U8=", - "dev": true, - "requires": { - "lodash._basecopy": "^3.0.0", - "lodash._basetostring": "^3.0.0", - "lodash._basevalues": "^3.0.0", - "lodash._isiterateecall": "^3.0.0", - "lodash._reinterpolate": "^3.0.0", - "lodash.escape": "^3.0.0", - "lodash.keys": "^3.0.0", - "lodash.restparam": "^3.0.0", - "lodash.templatesettings": "^3.0.0" - } - } - } - }, - "lodash.template": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.4.0.tgz", - "integrity": "sha1-5zoDhcg1VZF0bgILmWecaQ5o+6A=", - "dev": true, - "requires": { - "lodash._reinterpolate": "~3.0.0", - "lodash.templatesettings": "^4.0.0" - }, - "dependencies": { - "lodash.templatesettings": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.1.0.tgz", - "integrity": "sha1-K01OlbpEDZFf8IvImeRVNmZxMxY=", - "dev": true, - "requires": { - "lodash._reinterpolate": "~3.0.0" - } - } - } - } + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" } }, - "gulp-autoprefixer": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/gulp-autoprefixer/-/gulp-autoprefixer-3.1.0.tgz", - "integrity": "sha1-KzraQ5/bEg7U6zpXSxIiNKi6KDo=", + "humanize-string": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/humanize-string/-/humanize-string-1.0.2.tgz", + "integrity": "sha512-PH5GBkXqFxw5+4eKaKRIkD23y6vRd/IXSl7IldyJxEXpDH9SEIXRORkBtkGni/ae2P7RVOw6Wxypd2tGXhha1w==", "dev": true, "requires": { - "autoprefixer": "^6.0.0", - "gulp-util": "^3.0.0", - "postcss": "^5.0.4", - "through2": "^2.0.0", - "vinyl-sourcemaps-apply": "^0.2.0" + "decamelize": "^1.0.0" } }, - "gulp-changed": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/gulp-changed/-/gulp-changed-1.3.1.tgz", - "integrity": "sha1-slrLPpa4Snq7g9K5XFZyBFvLbTY=", + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha1-ICK0sl+93CHS9SSXSkdKr+czkIs=", "dev": true, "requires": { - "gulp-util": "^3.0.0", - "through2": "^2.0.0" + "safer-buffer": ">= 2.1.2 < 3" } }, - "gulp-concat": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/gulp-concat/-/gulp-concat-2.6.1.tgz", - "integrity": "sha1-Yz0WyV2IUEYorQJmVmPO5aR5M1M=", + "ieee754": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha1-7BaFWOlaoYH9h9N/VcMrvLZwi4Q=", + "dev": true, + "optional": true + }, + "ignore": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.3.tgz", + "integrity": "sha1-QyNS5XrM2HqzEQ6C0/6g5HgSFW0=", + "dev": true + }, + "imagemin": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/imagemin/-/imagemin-6.1.0.tgz", + "integrity": "sha1-YlCLRlco/qNsA83AfZFf4tjPnhM=", "dev": true, "requires": { - "concat-with-sourcemaps": "^1.0.0", - "through2": "^2.0.0", - "vinyl": "^2.0.0" + "file-type": "^10.7.0", + "globby": "^8.0.1", + "make-dir": "^1.0.0", + "p-pipe": "^1.1.0", + "pify": "^4.0.1", + "replace-ext": "^1.0.0" }, "dependencies": { - "clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", + "globby": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-8.0.2.tgz", + "integrity": "sha1-VpdhnM2VxSdduy1vqkIIfBqUHY0=", + "dev": true, + "requires": { + "array-union": "^1.0.1", + "dir-glob": "2.0.0", + "fast-glob": "^2.0.2", + "glob": "^7.1.2", + "ignore": "^3.3.5", + "pify": "^3.0.0", + "slash": "^1.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } + } + }, + "ignore": { + "version": "3.3.10", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", + "integrity": "sha1-Cpf7h2mG6AgcYxFg+PnziRV/AEM=", "dev": true }, - "clone-stats": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", - "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=", + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha1-SyzSXFDVmHNcUCkiJP2MbfQeMjE=", "dev": true }, "replace-ext": { @@ -5304,52 +10074,62 @@ "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", "dev": true - }, - "vinyl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.0.tgz", - "integrity": "sha512-MBH+yP0kC/GQ5GwBqrTPTzEfiiLjta7hTtvQtbxBgTeSXsmKQRQecjibMbxIXzVT3Y9KJK+drOz1/k+vsu8Nkg==", - "dev": true, - "requires": { - "clone": "^2.1.1", - "clone-buffer": "^1.0.0", - "clone-stats": "^1.0.0", - "cloneable-readable": "^1.0.0", - "remove-trailing-separator": "^1.0.1", - "replace-ext": "^1.0.0" - } } } }, - "gulp-cssnano": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/gulp-cssnano/-/gulp-cssnano-2.1.2.tgz", - "integrity": "sha1-4IoJdx7FRUpUnxoAW90lbLjl4KM=", + "imagemin-gifsicle": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/imagemin-gifsicle/-/imagemin-gifsicle-6.0.1.tgz", + "integrity": "sha1-arrU6VVm1S5aEEq6HCS087SFgbM=", + "dev": true, + "optional": true, + "requires": { + "exec-buffer": "^3.0.0", + "gifsicle": "^4.0.0", + "is-gif": "^3.0.0" + } + }, + "imagemin-jpegtran": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/imagemin-jpegtran/-/imagemin-jpegtran-6.0.0.tgz", + "integrity": "sha1-yNO8+27JxWHCCphxQoVL5w2QsE8=", "dev": true, + "optional": true, "requires": { - "cssnano": "^3.0.0", - "gulp-util": "^3.0.6", - "object-assign": "^4.0.1", - "vinyl-sourcemaps-apply": "^0.2.1" + "exec-buffer": "^3.0.0", + "is-jpg": "^2.0.0", + "jpegtran-bin": "^4.0.0" } }, - "gulp-debug": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/gulp-debug/-/gulp-debug-4.0.0.tgz", - "integrity": "sha512-cn/GhMD2nVZCVxAl5vWao4/dcoZ8wUJ8w3oqTvQaGDmC1vT7swNOEbhQTWJp+/otKePT64aENcqAQXDcdj5H1g==", + "imagemin-optipng": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/imagemin-optipng/-/imagemin-optipng-6.0.0.tgz", + "integrity": "sha1-pr/HtUL8CPxofoPfsTEkkXmlGmg=", + "dev": true, + "optional": true, "requires": { - "chalk": "^2.3.0", - "fancy-log": "^1.3.2", - "plur": "^3.0.0", - "stringify-object": "^3.0.0", - "through2": "^2.0.0", - "tildify": "^1.1.2" + "exec-buffer": "^3.0.0", + "is-png": "^1.0.0", + "optipng-bin": "^5.0.0" + } + }, + "imagemin-svgo": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/imagemin-svgo/-/imagemin-svgo-7.0.0.tgz", + "integrity": "sha1-oi0KWReg0PN+Q2kyww9eAA+pGxw=", + "dev": true, + "optional": true, + "requires": { + "is-svg": "^3.0.0", + "svgo": "^1.0.5" }, "dependencies": { "ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "optional": true, "requires": { "color-convert": "^1.9.0" } @@ -5358,1012 +10138,1211 @@ "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "optional": true, "requires": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" } }, - "fancy-log": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.3.tgz", - "integrity": "sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==", + "coa": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", + "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", + "dev": true, + "optional": true, "requires": { - "ansi-gray": "^0.1.1", - "color-support": "^1.1.3", - "parse-node-version": "^1.0.0", - "time-stamp": "^1.0.0" + "@types/q": "^1.5.1", + "chalk": "^2.4.1", + "q": "^1.1.2" + } + }, + "csso": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.0.2.tgz", + "integrity": "sha512-kS7/oeNVXkHWxby5tHVxlhjizRCSv8QdU7hB2FpdAibDU8FjTAolhNjKNTiLzXtUrKT6HwClE81yXwEk1309wg==", + "dev": true, + "optional": true, + "requires": { + "css-tree": "1.0.0-alpha.37" } }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, - "irregular-plurals": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/irregular-plurals/-/irregular-plurals-2.0.0.tgz", - "integrity": "sha512-Y75zBYLkh0lJ9qxeHlMjQ7bSbyiSqNW/UOPWDmzC7cXskL1hekSITh1Oc6JV0XCWWZ9DE8VYSB71xocLk3gmGw==" + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "optional": true }, - "plur": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/plur/-/plur-3.1.1.tgz", - "integrity": "sha512-t1Ax8KUvV3FFII8ltczPn2tJdjqbd1sIzu6t4JL7nQ3EyeL/lTrj5PWKb06ic5/6XYDr65rQ4uzQEGN70/6X5w==", + "is-svg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-3.0.0.tgz", + "integrity": "sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ==", + "dev": true, + "optional": true, "requires": { - "irregular-plurals": "^2.0.0" + "html-comment-regex": "^1.1.0" } }, + "stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "dev": true, + "optional": true + }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "optional": true, "requires": { "has-flag": "^3.0.0" } + }, + "svgo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", + "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", + "dev": true, + "optional": true, + "requires": { + "chalk": "^2.4.1", + "coa": "^2.0.2", + "css-select": "^2.0.0", + "css-select-base-adapter": "^0.1.1", + "css-tree": "1.0.0-alpha.37", + "csso": "^4.0.2", + "js-yaml": "^3.13.1", + "mkdirp": "~0.5.1", + "object.values": "^1.1.0", + "sax": "~1.2.4", + "stable": "^0.1.8", + "unquote": "~1.1.1", + "util.promisify": "~1.0.0" + } } } }, - "gulp-decompress": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gulp-decompress/-/gulp-decompress-1.2.0.tgz", - "integrity": "sha1-jutlpeAV+O2FMsr+KEVJYGJvDcc=", + "immutable": { + "version": "3.8.2", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.8.2.tgz", + "integrity": "sha1-wkOZUUVbs5kT2vKBN28VMOEErfM=", + "dev": true + }, + "import-fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", + "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", "dev": true, "requires": { - "archive-type": "^3.0.0", - "decompress": "^3.0.0", - "gulp-util": "^3.0.1", - "readable-stream": "^2.0.2" + "caller-path": "^2.0.0", + "resolve-from": "^3.0.0" + }, + "dependencies": { + "caller-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", + "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", + "dev": true, + "requires": { + "caller-callsite": "^2.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 + } } }, - "gulp-eslint": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/gulp-eslint/-/gulp-eslint-3.0.1.tgz", - "integrity": "sha1-BOV+PhjGl0JnwSz2hV3HF9SjE70=", + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": 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": { - "bufferstreams": "^1.1.1", - "eslint": "^3.0.0", - "gulp-util": "^3.0.6" + "repeating": "^2.0.0" } }, - "gulp-flatten": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/gulp-flatten/-/gulp-flatten-0.3.0.tgz", - "integrity": "sha1-g7krlnu0M/QBhWV2g4XumucaOOQ=", + "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": { - "gulp-util": "^3.0.7", - "through2": "^2.0.0" + "once": "^1.3.0", + "wrappy": "1" } }, - "gulp-footer": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/gulp-footer/-/gulp-footer-1.0.5.tgz", - "integrity": "sha1-6Eynd+Jmvnu8LUXS3w5+uo36PlQ=", + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha1-7uJfVtscnsYIXgwid4CD9Zar+Sc=", + "dev": true + }, + "inquirer": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-0.10.1.tgz", + "integrity": "sha1-6iXkzmnKFF4FyZ5G3P7AXkASWUo=", "dev": true, "requires": { - "event-stream": "*", - "gulp-util": "*", - "lodash.assign": "*" + "ansi-escapes": "^1.1.0", + "ansi-regex": "^2.0.0", + "chalk": "^1.0.0", + "cli-cursor": "^1.0.1", + "cli-width": "^1.0.1", + "figures": "^1.3.5", + "lodash": "^3.3.1", + "readline2": "^1.0.1", + "run-async": "^0.1.0", + "rx-lite": "^3.1.2", + "strip-ansi": "^3.0.0", + "through": "^2.3.6" + }, + "dependencies": { + "lodash": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", + "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", + "dev": true + } + } + }, + "insight": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/insight/-/insight-0.8.2.tgz", + "integrity": "sha1-GMKs8bYFVJEnj8dSnx8h0y4fDto=", + "dev": true, + "requires": { + "async": "^1.4.2", + "chalk": "^1.0.0", + "configstore": "^1.0.0", + "inquirer": "^0.10.0", + "lodash.debounce": "^3.0.1", + "node-uuid": "^1.4.7", + "object-assign": "^4.0.1", + "os-name": "^1.0.0", + "request": "^2.40.0", + "tough-cookie": "^2.0.0" + } + }, + "interpret": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.0.3.tgz", + "integrity": "sha1-y8NcYu7uc/Gat7EKgBURQBr8D5A=", + "dev": true + }, + "into-stream": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-3.1.0.tgz", + "integrity": "sha1-lvsKk2wSur1v8XUqF9BWFqvQlMY=", + "dev": true, + "optional": true, + "requires": { + "from2": "^2.1.1", + "p-is-promise": "^1.1.0" + }, + "dependencies": { + "p-is-promise": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz", + "integrity": "sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4=", + "dev": true, + "optional": true + } + } + }, + "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 + }, + "irregular-plurals": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/irregular-plurals/-/irregular-plurals-2.0.0.tgz", + "integrity": "sha1-OdQPBbAPZW0Lf6RxIw3TtxSvKHI=", + "dev": true + }, + "is": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/is/-/is-3.2.1.tgz", + "integrity": "sha1-0Kwq1V63sL7JJqUmb2xmKqqD3KU=", + "dev": true + }, + "is-absolute": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-0.1.7.tgz", + "integrity": "sha1-hHSREZ/MtftDYhfMc39/qtUPYD8=", + "dev": true, + "requires": { + "is-relative": "^0.1.0" + } + }, + "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": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" } }, - "gulp-header": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/gulp-header/-/gulp-header-2.0.5.tgz", - "integrity": "sha512-7bOIiHvM1GUHIG3LRH+UIanOxyjSys0FbzzgUBlV2cZIIZihEW+KKKKm0ejUBNGvRdhISEFFr6HlptXoa28gtQ==", + "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": { - "concat-with-sourcemaps": "*", - "lodash.template": "^4.4.0", - "through2": "^2.0.0" - }, - "dependencies": { - "lodash.template": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.4.0.tgz", - "integrity": "sha1-5zoDhcg1VZF0bgILmWecaQ5o+6A=", - "dev": true, - "requires": { - "lodash._reinterpolate": "~3.0.0", - "lodash.templatesettings": "^4.0.0" - } - }, - "lodash.templatesettings": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.1.0.tgz", - "integrity": "sha1-K01OlbpEDZFf8IvImeRVNmZxMxY=", - "dev": true, - "requires": { - "lodash._reinterpolate": "~3.0.0" - } - } + "binary-extensions": "^1.0.0" } }, - "gulp-htmlmin": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/gulp-htmlmin/-/gulp-htmlmin-2.0.0.tgz", - "integrity": "sha1-EspjV2Q3qt/IWdKt36QcOO/OqGk=", + "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": { - "bufferstreams": "^1.1.0", - "gulp-util": "^3.0.7", - "html-minifier": "^2.1.0", - "object-assign": "^4.0.1", - "readable-stream": "^2.0.2", - "tryit": "^1.0.1" + "builtin-modules": "^1.0.0" } }, - "gulp-if": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/gulp-if/-/gulp-if-2.0.1.tgz", - "integrity": "sha1-VfPt+Czs389gNapdBoaXmqsNrCg=", + "is-bzip2": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-bzip2/-/is-bzip2-1.0.0.tgz", + "integrity": "sha1-XuWOqlounIDiFAe+3yOuWsCRs/w=", + "dev": true + }, + "is-callable": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", + "integrity": "sha1-9+RrWWiQRW23Tn9ul2yzJz0G+qs=", + "dev": true + }, + "is-color-stop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", + "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=", "dev": true, "requires": { - "gulp-match": "^1.0.2", - "ternary-stream": "^2.0.0", - "through2": "^2.0.1" + "css-color-names": "^0.0.4", + "hex-color-regex": "^1.1.0", + "hsl-regex": "^1.0.0", + "hsla-regex": "^1.0.0", + "rgb-regex": "^1.0.1", + "rgba-regex": "^1.0.0" } }, - "gulp-imagemin": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/gulp-imagemin/-/gulp-imagemin-3.0.2.tgz", - "integrity": "sha1-hPyWNiqMwPyH9gnXC3Q6xC3e3VM=", + "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": { - "chalk": "^1.0.0", - "gulp-util": "^3.0.0", - "imagemin": "^5.0.0", - "imagemin-gifsicle": "^5.0.0", - "imagemin-jpegtran": "^5.0.0", - "imagemin-optipng": "^5.1.0", - "imagemin-svgo": "^5.1.0", - "plur": "^2.0.0", - "pretty-bytes": "^2.0.1", - "through2-concurrent": "^1.1.0" + "kind-of": "^3.0.2" } }, - "gulp-inject": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/gulp-inject/-/gulp-inject-4.1.0.tgz", - "integrity": "sha1-z+0E84S1E9SzFFj/zmuTSRSg0zs=", + "is-date-object": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", + "integrity": "sha1-vac28s2P0G0yhE53Q7+nSUw7/X4=", + "dev": true + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=", "dev": true, "requires": { - "arrify": "^1.0.1", - "escape-string-regexp": "^1.0.5", - "event-stream": "^3.1.0", - "group-array": "^0.3.0", - "gulp-util": "^3.0.0", - "stream-to-array": "^2.3.0", - "through2": "^2.0.1" + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha1-cpyR4thXt6QZofmqZWhcTDP1hF0=", + "dev": true + } } }, - "gulp-match": { + "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-docker": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-1.1.0.tgz", + "integrity": "sha1-8EN01O7lMQ6ajhE78UlUEeRhdqE=", + "dev": true + }, + "is-dotfile": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/gulp-match/-/gulp-match-1.0.3.tgz", - "integrity": "sha1-kcfA1/Kb7NZgbVfYCn+Hdqh6uo4=", + "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": { - "minimatch": "^3.0.3" + "is-primitive": "^2.0.0" } }, - "gulp-natural-sort": { + "is-extendable": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/gulp-natural-sort/-/gulp-natural-sort-0.1.1.tgz", - "integrity": "sha1-sRI5k7lPkhPijQ9N+wq2MeO4Kcg=", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "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-finite": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", + "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", "dev": true, "requires": { - "natural-compare-lite": "^1.0.0", - "through": "^2.3.4" + "number-is-nan": "^1.0.0" } }, - "gulp-ng-annotate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/gulp-ng-annotate/-/gulp-ng-annotate-2.0.0.tgz", - "integrity": "sha1-hKg9sfAWUgvXD5pc+p8/6J4logU=", + "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": { - "bufferstreams": "^1.1.0", - "gulp-util": "^3.0.7", - "merge": "^1.2.0", - "ng-annotate": "^1.2.1", - "through2": "^2.0.1", - "vinyl-sourcemaps-apply": "^0.2.1" + "number-is-nan": "^1.0.0" } }, - "gulp-ng-constant": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gulp-ng-constant/-/gulp-ng-constant-1.2.0.tgz", - "integrity": "sha512-Ig0nnyJEeyd9RqQwNkE1uUeldo6UcZ+HMs6qNYvztcTbj0do2GC99sK10pqThMLpiQ51ENwVlR5t4PKuVAd0fQ==", - "dev": true, - "requires": { - "js-yaml": "^3.2.7", - "lodash": "^4.14.1", - "plugin-error": "^0.1.2", - "replace-ext": "^1.0.0", - "through2": "^2.0.0", - "vinyl": "^2.1.0" - }, - "dependencies": { - "arr-diff": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-1.1.0.tgz", - "integrity": "sha1-aHwydYFjWI/vfeezb6vklesaOZo=", - "dev": true, - "requires": { - "arr-flatten": "^1.0.1", - "array-slice": "^0.2.3" - } - }, - "arr-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-2.1.0.tgz", - "integrity": "sha1-IPnqtexw9cfSFbEHexw5Fh0pLH0=", - "dev": true - }, - "array-slice": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz", - "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU=", - "dev": true - }, - "clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", - "dev": true - }, - "clone-stats": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", - "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=", - "dev": true - }, - "extend-shallow": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-1.1.4.tgz", - "integrity": "sha1-Gda/lN/AnXa6cR85uHLSH/TdkHE=", - "dev": true, - "requires": { - "kind-of": "^1.1.0" - } - }, - "kind-of": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-1.1.0.tgz", - "integrity": "sha1-FAo9LUGjbS78+pN3tiwk+ElaXEQ=", - "dev": true - }, - "plugin-error": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-0.1.2.tgz", - "integrity": "sha1-O5uzM1zPAPQl4HQ34ZJ2ln2kes4=", - "dev": true, - "requires": { - "ansi-cyan": "^0.1.1", - "ansi-red": "^0.1.1", - "arr-diff": "^1.0.1", - "arr-union": "^2.0.1", - "extend-shallow": "^1.1.2" - } - }, - "replace-ext": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", - "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", - "dev": true - }, - "vinyl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.0.tgz", - "integrity": "sha512-MBH+yP0kC/GQ5GwBqrTPTzEfiiLjta7hTtvQtbxBgTeSXsmKQRQecjibMbxIXzVT3Y9KJK+drOz1/k+vsu8Nkg==", - "dev": true, - "requires": { - "clone": "^2.1.1", - "clone-buffer": "^1.0.0", - "clone-stats": "^1.0.0", - "cloneable-readable": "^1.0.0", - "remove-trailing-separator": "^1.0.1", - "replace-ext": "^1.0.0" - } - } + "is-gif": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-gif/-/is-gif-3.0.0.tgz", + "integrity": "sha1-xL5gsmowHWlbuDOyDZtdZsbPg7E=", + "dev": true, + "optional": true, + "requires": { + "file-type": "^10.4.0" } }, - "gulp-notify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/gulp-notify/-/gulp-notify-2.2.0.tgz", - "integrity": "sha1-BGyChcKS6X7tThWgCcJsu+XO8TU=", + "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": { - "gulp-util": "^3.0.2", - "lodash.template": "^3.0.0", - "node-notifier": "^4.1.0", - "node.extend": "^1.1.3", - "through2": "^0.6.3" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - }, - "through2": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", - "dev": true, - "requires": { - "readable-stream": ">=1.0.33-1 <1.1.0-0", - "xtend": ">=4.0.0 <4.1.0-0" - } - } + "is-extglob": "^2.1.0" } }, - "gulp-plumber": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/gulp-plumber/-/gulp-plumber-1.1.0.tgz", - "integrity": "sha1-8SF2wtBCL2AwbCQv/2oBo5T6ugk=", + "is-gzip": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-gzip/-/is-gzip-1.0.0.tgz", + "integrity": "sha1-bKiwe5nHeZgCWQDlVc7Y7YCHmoM=", + "dev": true + }, + "is-jpg": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-jpg/-/is-jpg-2.0.0.tgz", + "integrity": "sha1-LhmX+m6RZuqsAkLarkQ0A+TvHZc=", + "dev": true, + "optional": true + }, + "is-lower-case": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/is-lower-case/-/is-lower-case-1.1.3.tgz", + "integrity": "sha1-fhR75HaNxGbbO/shzGCzHmrWk5M=", "dev": true, "requires": { - "gulp-util": "^3", - "through2": "^2" + "lower-case": "^1.1.0" } }, - "gulp-rename": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/gulp-rename/-/gulp-rename-1.2.2.tgz", - "integrity": "sha1-OtRCh2PwXidk3sHGfYaNsnVoeBc=", + "is-my-ip-valid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-my-ip-valid/-/is-my-ip-valid-1.0.0.tgz", + "integrity": "sha1-ezUbjo7dTTmV1NBmaA5mTZRpaCQ=", "dev": true }, - "gulp-replace": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/gulp-replace/-/gulp-replace-0.5.4.tgz", - "integrity": "sha1-aaZ5FLvRPFYr/xT1BKQDeWqg2qk=", + "is-my-json-valid": { + "version": "2.20.0", + "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.20.0.tgz", + "integrity": "sha1-E0Wm/KPo2u/BDQ+ncGf1TO2v1Zo=", "dev": true, "requires": { - "istextorbinary": "1.0.2", - "readable-stream": "^2.0.1", - "replacestream": "^4.0.0" + "generate-function": "^2.0.0", + "generate-object-property": "^1.1.0", + "is-my-ip-valid": "^1.0.0", + "jsonpointer": "^4.0.0", + "xtend": "^4.0.0" } }, - "gulp-rev": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/gulp-rev/-/gulp-rev-7.1.0.tgz", - "integrity": "sha1-DPYlbYVHgBgZecaIFGWUDNLl8iA=", + "is-natural-number": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz", + "integrity": "sha1-q5124dtM7VHjXeDHLr7PCfc0zeg=", + "dev": true, + "optional": true + }, + "is-negated-glob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz", + "integrity": "sha1-aRC8pdqMleeEtXUbl2z1oQ/uNtI=", + "dev": true + }, + "is-npm": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", + "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=", + "dev": true + }, + "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": { - "gulp-util": "^3.0.0", - "modify-filename": "^1.1.0", - "object-assign": "^4.0.1", - "rev-hash": "^1.0.0", - "rev-path": "^1.0.0", - "sort-keys": "^1.0.0", - "through2": "^2.0.0", - "vinyl-file": "^1.1.0" - }, - "dependencies": { - "vinyl-file": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/vinyl-file/-/vinyl-file-1.3.0.tgz", - "integrity": "sha1-qgVjTTqGe6kUR77bs0r8sm9E9uc=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "strip-bom": "^2.0.0", - "strip-bom-stream": "^1.0.0", - "vinyl": "^1.1.0" - } - } + "kind-of": "^3.0.2" } }, - "gulp-rev-replace": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/gulp-rev-replace/-/gulp-rev-replace-0.4.3.tgz", - "integrity": "sha1-crUYSPXwk61Ld7HSQRCB63is1G4=", + "is-number-like": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/is-number-like/-/is-number-like-1.0.8.tgz", + "integrity": "sha1-LhKWILUIkQQuROm7uzBZPnXPu+M=", "dev": true, "requires": { - "gulp-util": "^3.0.7", - "through2": "^2.0.0" + "lodash.isfinite": "^3.3.2" } }, - "gulp-sourcemaps": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/gulp-sourcemaps/-/gulp-sourcemaps-1.6.0.tgz", - "integrity": "sha1-uG/zSdgBzrVuHZ59x7vLS33uYAw=", + "is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=" + }, + "is-object": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.1.tgz", + "integrity": "sha1-iVJojF7C/9awPsyF52ngKQMINHA=", + "dev": true + }, + "is-path-cwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", + "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", + "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": { - "convert-source-map": "^1.1.1", - "graceful-fs": "^4.1.2", - "strip-bom": "^2.0.0", - "through2": "^2.0.0", - "vinyl": "^1.0.0" + "is-path-inside": "^1.0.0" } }, - "gulp-uglify": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/gulp-uglify/-/gulp-uglify-1.5.4.tgz", - "integrity": "sha1-UkeI2HZm0J+dDCH7IXf5ADmmWMk=", + "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": { - "deap": "^1.0.0", - "fancy-log": "^1.0.0", - "gulp-util": "^3.0.0", - "isobject": "^2.0.0", - "through2": "^2.0.0", - "uglify-js": "2.6.4", - "uglify-save-license": "^0.4.1", - "vinyl-sourcemaps-apply": "^0.2.0" + "path-is-inside": "^1.0.1" + } + }, + "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.3", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.3.tgz", + "integrity": "sha1-wVvz5LZrYtcu+vKSWEhmPsvGGbY=", + "dev": true, + "requires": { + "isobject": "^3.0.0" + }, + "dependencies": { + "isobject": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.0.tgz", + "integrity": "sha1-OVZSF/NmF4nooKDAgNX35rxG4aA=", + "dev": true + } + } + }, + "is-png": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-png/-/is-png-1.1.0.tgz", + "integrity": "sha1-1XSxK/J1wDUEVVcLDltXqwYgd84=", + "dev": true, + "optional": true + }, + "is-posix-bracket": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", + "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", + "dev": true + }, + "is-primitive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", + "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", + "dev": true + }, + "is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", + "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", + "dev": true + }, + "is-property": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", + "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=", + "dev": true + }, + "is-redirect": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", + "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=", + "dev": true + }, + "is-regex": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz", + "integrity": "sha1-OdWJo1i/GJZ/cmlnEguPwa7XTq4=", + "dev": true, + "requires": { + "has": "^1.0.3" } }, - "gulp-useref": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/gulp-useref/-/gulp-useref-3.1.5.tgz", - "integrity": "sha1-vrjgCcGfgZ9gTejRkdsSi9JEqnA=", + "is-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", + "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=" + }, + "is-relative": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-0.1.3.tgz", + "integrity": "sha1-kF/uiuhvRbPsYUvDwVyGnfCHboI=", + "dev": true + }, + "is-relative-url": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-relative-url/-/is-relative-url-1.0.0.tgz", + "integrity": "sha1-h6nTXop4m0ngebTX1p1kYS6ODh8=", "dev": true, "requires": { - "event-stream": "^3.3.4", - "extend": "^3.0.1", - "glob": "^7.1.2", - "gulp-concat": "^2.6.1", - "gulp-if": "^2.0.2", - "is-relative-url": "1.0.0", - "plugin-error": "^1.0.1", - "through2": "^2.0.3", - "useref": "^1.4.1", - "vinyl-fs": "^3.0.2" + "is-absolute-url": "^1.0.0" }, "dependencies": { - "clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", - "dev": true - }, - "clone-stats": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", - "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=", - "dev": true - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - } - }, - "glob-stream": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz", - "integrity": "sha1-cEXJlBOz65SIjYOrRtC0BMx73eQ=", - "dev": true, - "requires": { - "extend": "^3.0.0", - "glob": "^7.1.1", - "glob-parent": "^3.1.0", - "is-negated-glob": "^1.0.0", - "ordered-read-streams": "^1.0.0", - "pumpify": "^1.3.5", - "readable-stream": "^2.1.5", - "remove-trailing-separator": "^1.0.1", - "to-absolute-glob": "^2.0.0", - "unique-stream": "^2.0.2" - } - }, - "gulp-if": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/gulp-if/-/gulp-if-2.0.2.tgz", - "integrity": "sha1-pJe351cwBQQcqivIt92jyARE1ik=", - "dev": true, - "requires": { - "gulp-match": "^1.0.3", - "ternary-stream": "^2.0.1", - "through2": "^2.0.1" - } - }, - "is-absolute": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", - "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", - "dev": true, - "requires": { - "is-relative": "^1.0.0", - "is-windows": "^1.0.1" - } - }, - "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.0" - } - }, - "is-relative": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", - "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", - "dev": true, - "requires": { - "is-unc-path": "^1.0.0" - } - }, - "is-unc-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", - "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", - "dev": true, - "requires": { - "unc-path-regex": "^0.1.2" - } - }, - "is-valid-glob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz", - "integrity": "sha1-Kb8+/3Ab4tTTFdusw5vDn+j2Aao=", - "dev": true - }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true - }, - "ordered-read-streams": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz", - "integrity": "sha1-d8DLN8QVJdZBZtmQ/61+xqDhNj4=", - "dev": true, - "requires": { - "readable-stream": "^2.0.1" - } - }, - "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", - "dev": true - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "replace-ext": { + "is-absolute-url": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", - "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-1.0.0.tgz", + "integrity": "sha1-LX7w/QuyqI2sfpIlPGgIoKziS/s=", "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "to-absolute-glob": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz", - "integrity": "sha1-GGX0PZ50sIItufFFt4z/fQ98hJs=", - "dev": true, - "requires": { - "is-absolute": "^1.0.0", - "is-negated-glob": "^1.0.0" - } - }, - "vinyl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.0.tgz", - "integrity": "sha512-MBH+yP0kC/GQ5GwBqrTPTzEfiiLjta7hTtvQtbxBgTeSXsmKQRQecjibMbxIXzVT3Y9KJK+drOz1/k+vsu8Nkg==", - "dev": true, - "requires": { - "clone": "^2.1.1", - "clone-buffer": "^1.0.0", - "clone-stats": "^1.0.0", - "cloneable-readable": "^1.0.0", - "remove-trailing-separator": "^1.0.1", - "replace-ext": "^1.0.0" - } - }, - "vinyl-fs": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-3.0.3.tgz", - "integrity": "sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng==", - "dev": true, - "requires": { - "fs-mkdirp-stream": "^1.0.0", - "glob-stream": "^6.1.0", - "graceful-fs": "^4.0.0", - "is-valid-glob": "^1.0.0", - "lazystream": "^1.0.0", - "lead": "^1.0.0", - "object.assign": "^4.0.4", - "pumpify": "^1.3.5", - "readable-stream": "^2.3.3", - "remove-bom-buffer": "^3.0.0", - "remove-bom-stream": "^1.2.0", - "resolve-options": "^1.1.0", - "through2": "^2.0.0", - "to-through": "^2.0.0", - "value-or-function": "^3.0.0", - "vinyl": "^2.0.0", - "vinyl-sourcemap": "^1.1.0" - } } } }, - "gulp-util": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.8.tgz", - "integrity": "sha1-AFTh50RQLifATBh8PsxQXdVLu08=", + "is-resolvable": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.0.0.tgz", + "integrity": "sha1-jfV8YeouPFAUCNEA+wE8+NbgzGI=", + "dev": true, + "requires": { + "tryit": "^1.0.1" + } + }, + "is-retry-allowed": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", + "integrity": "sha1-13hIi9CkZmo76KFIK58rqv7eqLQ=", + "dev": true + }, + "is-root": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-root/-/is-root-1.0.0.tgz", + "integrity": "sha1-B7bCM7w5TNnQK6FclmvWZg1jQtU=", + "dev": true + }, + "is-scoped": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-scoped/-/is-scoped-1.0.0.tgz", + "integrity": "sha1-RJypgpnnEwOCViieyytUDcQ3yzA=", + "dev": true, + "requires": { + "scoped-regex": "^1.0.0" + } + }, + "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-supported-regexp-flag": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-supported-regexp-flag/-/is-supported-regexp-flag-1.0.1.tgz", + "integrity": "sha512-3vcJecUUrpgCqc/ca0aWeNu64UGgxcvO60K/Fkr1N6RSvfGCTU60UKN68JDmKokgba0rFFJs12EnzOQa14ubKQ==", + "dev": true + }, + "is-svg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-3.0.0.tgz", + "integrity": "sha1-kyHb0pwhLlypnE+peUxxS8r6L3U=", + "dev": true, + "requires": { + "html-comment-regex": "^1.1.0" + } + }, + "is-symbol": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", + "integrity": "sha1-OOEBS55jKb4N6dJKQU/XRB7GGTc=", "dev": true, "requires": { - "array-differ": "^1.0.0", - "array-uniq": "^1.0.2", - "beeper": "^1.0.0", - "chalk": "^1.0.0", - "dateformat": "^2.0.0", - "fancy-log": "^1.1.0", - "gulplog": "^1.0.0", - "has-gulplog": "^0.1.0", - "lodash._reescape": "^3.0.0", - "lodash._reevaluate": "^3.0.0", - "lodash._reinterpolate": "^3.0.0", - "lodash.template": "^3.0.0", - "minimist": "^1.1.0", - "multipipe": "^0.1.2", - "object-assign": "^3.0.0", - "replace-ext": "0.0.1", - "through2": "^2.0.0", - "vinyl": "^0.5.0" + "has-symbols": "^1.0.1" }, "dependencies": { - "dateformat": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-2.0.0.tgz", - "integrity": "sha1-J0Pjq7XD/CRi5SfcpEXgTp9N7hc=", - "dev": true - }, - "object-assign": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz", - "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=", + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", "dev": true - }, - "vinyl": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.5.3.tgz", - "integrity": "sha1-sEVbOPxeDPMNQyUTLkYZcMIJHN4=", - "dev": true, - "requires": { - "clone": "^1.0.0", - "clone-stats": "^0.0.1", - "replace-ext": "0.0.1" - } } } }, - "gulplog": { + "is-tar": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz", - "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=", + "resolved": "https://registry.npmjs.org/is-tar/-/is-tar-1.0.0.tgz", + "integrity": "sha1-L2suF5LB9bs2UZrKqdZcDSb+hT0=", + "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-unc-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", + "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", "dev": true, "requires": { - "glogg": "^1.0.0" + "unc-path-regex": "^0.1.2" } }, - "handlebars": { - "version": "4.0.11", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.11.tgz", - "integrity": "sha1-Ywo13+ApS8KB7a5v/F0yn8eYLcw=", + "is-upper-case": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-upper-case/-/is-upper-case-1.1.2.tgz", + "integrity": "sha1-jQsfp+eTOh5YSDYA7H2WYcuvdW8=", "dev": true, "requires": { - "async": "^1.4.0", - "optimist": "^0.6.1", - "source-map": "^0.4.4", - "uglify-js": "^2.6" - }, - "dependencies": { - "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", - "dev": true - }, - "source-map": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", - "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", - "dev": true, - "requires": { - "amdefine": ">=0.0.4" - } - } + "upper-case": "^1.1.0" } }, - "har-schema": { + "is-url": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", + "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==", + "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-valid-glob": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-0.3.0.tgz", + "integrity": "sha1-1LVcafUYhvm2XHDWwmItN+KfSP4=", + "dev": true + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true + }, + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "dev": true + }, + "is-zip": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-zip/-/is-zip-1.0.0.tgz", + "integrity": "sha1-R7Co/004p2QxzP2ZqOFaTIa6IyU=", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "isbinaryfile": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.3.tgz", + "integrity": "sha1-XW3vPt6/boyoyunDAYOoBLX4voA=", + "dev": true, + "requires": { + "buffer-alloc": "^1.2.0" + } + }, + "isexe": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", "dev": true }, - "har-validator": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz", - "integrity": "sha1-zcvAgYgmWtEZtqWnyKtw7s+10n0=", + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", "dev": true, "requires": { - "chalk": "^1.1.1", - "commander": "^2.9.0", - "is-my-json-valid": "^2.12.4", - "pinkie-promise": "^2.0.0" + "isarray": "1.0.0" } }, - "has": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz", - "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=", + "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": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/istanbul/-/istanbul-0.4.5.tgz", + "integrity": "sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs=", "dev": true, "requires": { - "function-bind": "^1.0.2" + "abbrev": "1.0.x", + "async": "1.x", + "escodegen": "1.8.x", + "esprima": "2.7.x", + "glob": "^5.0.15", + "handlebars": "^4.0.1", + "js-yaml": "3.x", + "mkdirp": "0.5.x", + "nopt": "3.x", + "once": "1.x", + "resolve": "1.1.x", + "supports-color": "^3.1.0", + "which": "^1.1.1", + "wordwrap": "^1.0.0" + }, + "dependencies": { + "abbrev": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", + "integrity": "sha1-kbR5JYinc4wl813W9jdSovh3YTU=", + "dev": true + }, + "escodegen": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz", + "integrity": "sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg=", + "dev": true, + "requires": { + "esprima": "^2.7.1", + "estraverse": "^1.9.1", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.2.0" + } + }, + "estraverse": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz", + "integrity": "sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q=", + "dev": true + }, + "glob": { + "version": "5.0.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", + "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", + "dev": true, + "requires": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "resolve": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", + "dev": true + }, + "source-map": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz", + "integrity": "sha1-2rc/vPwrqBm03gO9b26qSBZLP50=", + "dev": true, + "optional": true, + "requires": { + "amdefine": ">=0.0.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" + } + } } }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "istextorbinary": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/istextorbinary/-/istextorbinary-1.0.2.tgz", + "integrity": "sha1-rOGTVNGpoBc+/rEITOD4ewrX3s8=", "dev": true, "requires": { - "ansi-regex": "^2.0.0" + "binaryextensions": "~1.0.0", + "textextensions": "~1.0.0" } }, - "has-binary": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/has-binary/-/has-binary-0.1.7.tgz", - "integrity": "sha1-aOYesWIQyVRaClzOBqhzkS/h5ow=", + "isurl": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", + "integrity": "sha1-sn9PSfPNqj6kSgpbfzRi5u3DnWc=", "dev": true, "requires": { - "isarray": "0.0.1" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - } + "has-to-string-tag-x": "^1.2.0", + "is-object": "^1.0.1" } }, - "has-binary2": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz", - "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==", + "jasmine-core": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-2.4.1.tgz", + "integrity": "sha1-b4OrOg8WlRcizgfSBsdz1XzIOL4=", + "dev": true + }, + "jhipster-core": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/jhipster-core/-/jhipster-core-1.1.7.tgz", + "integrity": "sha1-63BjUyy8QK3eCU0yc7w5EVdAWps=", "dev": true, "requires": { - "isarray": "2.0.1" + "lodash": "4.14.2" }, "dependencies": { - "isarray": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", - "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", + "lodash": { + "version": "4.14.2", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.14.2.tgz", + "integrity": "sha1-u8zOY3OkAPv9CoxnykL20e9BZDI=", "dev": true } } }, - "has-cors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", - "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=", - "dev": true - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true - }, - "has-gulplog": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/has-gulplog/-/has-gulplog-0.1.0.tgz", - "integrity": "sha1-ZBTIKRNpfaUVkDl9r7EvIpZ4Ec4=", + "jpegtran-bin": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jpegtran-bin/-/jpegtran-bin-4.0.0.tgz", + "integrity": "sha1-0ArtgJ+6eqbzCBflnu5N3xmPjxA=", "dev": true, + "optional": true, "requires": { - "sparkles": "^1.0.0" + "bin-build": "^3.0.0", + "bin-wrapper": "^4.0.0", + "logalot": "^2.0.0" } }, - "has-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", - "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", + "js-base64": { + "version": "2.1.9", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.1.9.tgz", + "integrity": "sha1-8OgK4DmkvWVLXygfyT8EqRSn/M4=", "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=", + "js-tokens": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.1.tgz", + "integrity": "sha1-COnxMkhKLEWjCQfp3E1VZ7fxFNc=", "dev": true }, - "hasha": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/hasha/-/hasha-2.2.0.tgz", - "integrity": "sha1-eNfL/B5tZjA/55g3NlmEUXsvbuE=", + "js-yaml": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha1-r/FRswv9+o5J4F2iLnQV6d+jeEc=", "dev": true, "requires": { - "is-stream": "^1.0.1", - "pinkie-promise": "^2.0.0" + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "dependencies": { + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + } } }, - "hawk": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", - "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true, + "optional": true + }, + "jsdom": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-7.2.2.tgz", + "integrity": "sha1-QLQCdwwr2iNGkJa+6Rq2deOx/G4=", "dev": true, + "optional": true, "requires": { - "boom": "2.x.x", - "cryptiles": "2.x.x", - "hoek": "2.x.x", - "sntp": "1.x.x" + "abab": "^1.0.0", + "acorn": "^2.4.0", + "acorn-globals": "^1.0.4", + "cssom": ">= 0.3.0 < 0.4.0", + "cssstyle": ">= 0.2.29 < 0.3.0", + "escodegen": "^1.6.1", + "nwmatcher": ">= 1.3.7 < 2.0.0", + "parse5": "^1.5.1", + "request": "^2.55.0", + "sax": "^1.1.4", + "symbol-tree": ">= 3.1.0 < 4.0.0", + "tough-cookie": "^2.2.0", + "webidl-conversions": "^2.0.0", + "whatwg-url-compat": "~0.6.5", + "xml-name-validator": ">= 2.0.1 < 3.0.0" } }, - "he": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", - "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", + "jsesc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.1.tgz", + "integrity": "sha1-5CGiqOINawgZ3yiQj3glJrlt0f4=", "dev": true }, - "header-case": { + "json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", + "dev": true, + "optional": true + }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha1-u4Z8+zRQ5pEHwTHRxRS6s9yLyqk=", + "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/header-case/-/header-case-1.0.1.tgz", - "integrity": "sha1-lTWXMZfBRLCWE81l0xfvGZY70C0=", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", + "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", "dev": true, "requires": { - "no-case": "^2.2.0", - "upper-case": "^1.1.3" + "jsonify": "~0.0.0" } }, - "hoek": { - "version": "2.16.3", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", - "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", + "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 }, - "homedir-polyfill": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz", - "integrity": "sha1-TCu8inWJmP7r9e1oWA921GdotLw=", + "json3": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/json3/-/json3-3.2.6.tgz", + "integrity": "sha1-9u/JPAagTemuxTBT3yVZuxniA4s=", + "dev": true + }, + "jsonfile": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz", + "integrity": "sha1-pezG9l9T9mLEQVx2daAzHQmS7GY=", "dev": true, "requires": { - "parse-passwd": "^1.0.0" + "graceful-fs": "^4.1.6" } }, - "hosted-git-info": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.5.0.tgz", - "integrity": "sha1-bWDjSzq7yDEwYsO3mO+NkBoHrzw=", + "jsonify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", "dev": true }, - "html-comment-regex": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.1.tgz", - "integrity": "sha1-ZouTd26q5V696POtRkswekljYl4=", + "jsonpointer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz", + "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk=", "dev": true }, - "html-minifier": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-2.1.7.tgz", - "integrity": "sha1-kFHW/LvPIU7TB+GtdPQyu5rWVcw=", + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", "dev": true, "requires": { - "change-case": "3.0.x", - "clean-css": "3.4.x", - "commander": "2.9.x", - "he": "1.1.x", - "ncname": "1.0.x", - "relateurl": "0.2.x", - "uglify-js": "2.6.x" + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" }, "dependencies": { - "commander": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", - "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=", - "dev": true, - "requires": { - "graceful-readlink": ">= 1.0.0" - } + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true } } }, - "html-wiring": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/html-wiring/-/html-wiring-1.2.0.tgz", - "integrity": "sha1-xfkKd24KJyQdxt+QIsNxhtAnD54=", + "just-extend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.0.2.tgz", + "integrity": "sha512-FrLwOgm+iXrPV+5zDU6Jqu4gCRXbWEQg2O3SKONsWE4w7AXFRkryS53bpWdaL9cNol+AmR3AEYz6kn+o0fCPnw==", + "dev": true + }, + "karma": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/karma/-/karma-1.1.2.tgz", + "integrity": "sha1-eM0J4KfTghxiMpH9Hsm61al2PIU=", "dev": true, "requires": { - "cheerio": "^0.19.0", - "detect-newline": "^1.0.3" + "bluebird": "^3.3.0", + "body-parser": "^1.12.4", + "chokidar": "^1.4.1", + "colors": "^1.1.0", + "combine-lists": "^1.0.0", + "connect": "^3.3.5", + "core-js": "^2.2.0", + "di": "^0.0.1", + "dom-serialize": "^2.2.0", + "expand-braces": "^0.1.1", + "glob": "^7.0.3", + "graceful-fs": "^4.1.2", + "http-proxy": "^1.13.0", + "isbinaryfile": "^3.0.0", + "lodash": "^3.8.0", + "log4js": "^0.6.31", + "mime": "^1.3.4", + "minimatch": "^3.0.0", + "optimist": "^0.6.1", + "qjobs": "^1.1.4", + "rimraf": "^2.3.3", + "socket.io": "1.4.7", + "source-map": "^0.5.3", + "tmp": "0.0.28", + "useragent": "^2.1.9" }, "dependencies": { - "cheerio": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-0.19.0.tgz", - "integrity": "sha1-dy5wFfLuKZZQltcepBdbdas1SSU=", + "accepts": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.1.4.tgz", + "integrity": "sha1-1xyW99QdD+2iw4zRToonwEFY30o=", "dev": true, "requires": { - "css-select": "~1.0.0", - "dom-serializer": "~0.1.0", - "entities": "~1.1.1", - "htmlparser2": "~3.8.1", - "lodash": "^3.2.0" + "mime-types": "~2.0.4", + "negotiator": "0.4.9" } }, - "css-select": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.0.0.tgz", - "integrity": "sha1-sRIcpRhI3SZOIkTQWM7iVN7rRLA=", + "colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha1-xQSRR51MG9rtLJztMs98fcI2D3g=", + "dev": true + }, + "core-js": { + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz", + "integrity": "sha1-OIMUafmSK97Y7iHJ3EaYXgOZMIw=", + "dev": true + }, + "debug": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", + "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", "dev": true, "requires": { - "boolbase": "~1.0.0", - "css-what": "1.0", - "domutils": "1.4", - "nth-check": "~1.0.0" + "ms": "0.7.1" } }, - "css-what": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-1.0.0.tgz", - "integrity": "sha1-18wt9FGAZm+Z0rFEYmOUaeAPc2w=", - "dev": true - }, - "domutils": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.4.3.tgz", - "integrity": "sha1-CGVRN5bGswYDGFDhdVFrr4C3Km8=", + "engine.io": { + "version": "1.6.10", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-1.6.10.tgz", + "integrity": "sha1-+H2E4b0h0aLsf43u8MYgVKzfsno=", "dev": true, "requires": { - "domelementtype": "1" + "accepts": "1.1.4", + "base64id": "0.1.0", + "debug": "2.2.0", + "engine.io-parser": "1.2.4", + "ws": "1.0.1" } }, "lodash": { @@ -6371,3719 +11350,4910 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", "dev": true - } - } - }, - "htmlparser2": { - "version": "3.8.3", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz", - "integrity": "sha1-mWwosZFRaovoZQGn15dX5ccMEGg=", - "dev": true, - "requires": { - "domelementtype": "1", - "domhandler": "2.3", - "domutils": "1.5", - "entities": "1.0", - "readable-stream": "1.1" - }, - "dependencies": { - "entities": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz", - "integrity": "sha1-sph6o4ITR/zeZCsk/fyeT7cSvyY=", + }, + "mime-db": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.12.0.tgz", + "integrity": "sha1-PQxjGA9FjrENMlqqN9fFiuMS6dc=", "dev": true }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "mime-types": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.0.14.tgz", + "integrity": "sha1-MQ4VnbI+B3+Lsit0jav6SVcUCqY=", + "dev": true, + "requires": { + "mime-db": "~1.12.0" + } + }, + "ms": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", + "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", "dev": true }, - "readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "negotiator": { + "version": "0.4.9", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.4.9.tgz", + "integrity": "sha1-kuRrbbU8fkIe1koryU8IvnYw3z8=", + "dev": true + }, + "socket.io": { + "version": "1.4.7", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-1.4.7.tgz", + "integrity": "sha1-krf3y4jFeX1NruJ5/oB12+bT+hw=", "dev": true, "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" + "debug": "2.2.0", + "engine.io": "1.6.10", + "has-binary": "0.1.7", + "socket.io-adapter": "0.4.0", + "socket.io-client": "1.4.6", + "socket.io-parser": "2.2.6" } }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", "dev": true + }, + "tmp": { + "version": "0.0.28", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.28.tgz", + "integrity": "sha1-Fyc1t/YU6nrzlmT6hM8N5OUV0SA=", + "dev": true, + "requires": { + "os-tmpdir": "~1.0.1" + } } } }, - "http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "karma-chrome-launcher": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-1.0.1.tgz", + "integrity": "sha1-vlrnxCZPmgouIuPZhL6zJa2SyMs=", "dev": true, "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" + "fs-access": "^1.0.0", + "which": "^1.2.1" + } + }, + "karma-coverage": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/karma-coverage/-/karma-coverage-1.1.2.tgz", + "integrity": "sha1-zAnc61iagxAayl/nDCh2Re84dok=", + "dev": true, + "requires": { + "dateformat": "^1.0.6", + "istanbul": "^0.4.0", + "lodash": "^4.17.0", + "minimatch": "^3.0.0", + "source-map": "^0.5.1" }, "dependencies": { - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", - "dev": true - }, - "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", - "dev": true - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", "dev": true } } }, - "http-proxy": { - "version": "1.13.3", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.13.3.tgz", - "integrity": "sha1-1ewOJdoMSy7a6qlHZnJkDe2lliM=", - "dev": true, - "requires": { - "eventemitter3": "1.x.x", - "requires-port": "1.x.x" - } + "karma-jasmine": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/karma-jasmine/-/karma-jasmine-1.0.2.tgz", + "integrity": "sha1-wLOrMnvyB9tg4X+ifbN8/e9djmw=", + "dev": true }, - "http-signature": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-0.11.0.tgz", - "integrity": "sha1-F5bPZ6ABrVzWhJ3KCZFIXwkIn+Y=", + "karma-junit-reporter": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/karma-junit-reporter/-/karma-junit-reporter-1.1.0.tgz", + "integrity": "sha1-Evj/ggUGB6HU8RkvAhHv3ktZyj4=", "dev": true, "requires": { - "asn1": "0.1.11", - "assert-plus": "^0.1.5", - "ctype": "0.5.3" + "path-is-absolute": "^1.0.0", + "xmlbuilder": "8.2.2" } }, - "humanize-string": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/humanize-string/-/humanize-string-1.0.1.tgz", - "integrity": "sha1-/OLWxUXvwl3qHyMjUYLJjaAYC0I=", + "karma-phantomjs-launcher": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/karma-phantomjs-launcher/-/karma-phantomjs-launcher-1.0.4.tgz", + "integrity": "sha1-0jyjSAG9qYY60xjju0vUBisTrNI=", "dev": true, "requires": { - "decamelize": "^1.0.0" + "lodash": "^4.0.1", + "phantomjs-prebuilt": "^2.1.7" } }, - "iconv-lite": { - "version": "0.4.15", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.15.tgz", - "integrity": "sha1-/iZaIYrGpXz+hUkn6dBMGYJe3es=", + "karma-script-launcher": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/karma-script-launcher/-/karma-script-launcher-1.0.0.tgz", + "integrity": "sha1-zQF8TeXvCeWp2nkydhdhCN1LVC0=", "dev": true }, - "ignore": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.3.tgz", - "integrity": "sha1-QyNS5XrM2HqzEQ6C0/6g5HgSFW0=", + "kew": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/kew/-/kew-0.7.0.tgz", + "integrity": "sha1-edk9LTM2PW/dKXCzNdkUGtWR15s=", "dev": true }, - "imagemin": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/imagemin/-/imagemin-5.3.1.tgz", - "integrity": "sha1-8Zwu7h5xumxlWMUV+fyWaAGJptQ=", + "keyv": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.0.0.tgz", + "integrity": "sha1-RJI7o55osSp87H32wyaMAx8u83M=", "dev": true, + "optional": true, "requires": { - "file-type": "^4.1.0", - "globby": "^6.1.0", - "make-dir": "^1.0.0", - "p-pipe": "^1.1.0", - "pify": "^2.3.0", - "replace-ext": "^1.0.0" - }, - "dependencies": { - "file-type": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-4.4.0.tgz", - "integrity": "sha1-G2AOX8ofvcboDApwxxyNul95BsU=", - "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.1", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "replace-ext": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", - "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", - "dev": true - } + "json-buffer": "3.0.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + }, + "klaw": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", + "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.9" } }, - "imagemin-gifsicle": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/imagemin-gifsicle/-/imagemin-gifsicle-5.1.0.tgz", - "integrity": "sha1-Lk3c2ioQmyIcq67EmOHi3SjKdo8=", + "latest-version": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-2.0.0.tgz", + "integrity": "sha1-VvjWE5YghHuAF/jx9NeOIRMkFos=", "dev": true, - "optional": true, "requires": { - "exec-buffer": "^3.0.0", - "gifsicle": "^3.0.0", - "is-gif": "^1.0.0" + "package-json": "^2.0.0" } }, - "imagemin-jpegtran": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/imagemin-jpegtran/-/imagemin-jpegtran-5.0.2.tgz", - "integrity": "sha1-5ogiY7j3kW/duABkDPddLpcNKtY=", + "lazy-cache": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", + "dev": true + }, + "lazypipe": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lazypipe/-/lazypipe-1.0.1.tgz", + "integrity": "sha1-FHGu9rN6NA1Rw030Rpnc7wZMGUA=", "dev": true, - "optional": true, "requires": { - "exec-buffer": "^3.0.0", - "is-jpg": "^1.0.0", - "jpegtran-bin": "^3.0.0" + "stream-combiner": "*" } }, - "imagemin-optipng": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/imagemin-optipng/-/imagemin-optipng-5.2.1.tgz", - "integrity": "sha1-0i2kEsCfX/AKQzmWC5ioix2+hpU=", + "lazystream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", + "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", "dev": true, - "optional": true, "requires": { - "exec-buffer": "^3.0.0", - "is-png": "^1.0.0", - "optipng-bin": "^3.0.0" + "readable-stream": "^2.0.5" } }, - "imagemin-svgo": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/imagemin-svgo/-/imagemin-svgo-5.2.2.tgz", - "integrity": "sha1-UBaZ9XiXMKV5IrhzbqFcU/e1WDg=", + "lcid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", "dev": true, - "optional": true, "requires": { - "is-svg": "^2.0.0", - "svgo": "^0.7.0" + "invert-kv": "^1.0.0" } }, - "immutable": { - "version": "3.8.2", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.8.2.tgz", - "integrity": "sha1-wkOZUUVbs5kT2vKBN28VMOEErfM=", - "dev": true - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true + "lead": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lead/-/lead-1.0.0.tgz", + "integrity": "sha1-bxT5mje+Op3XhPVJVpDlkDRm7kI=", + "dev": true, + "requires": { + "flush-write-stream": "^1.0.2" + } }, - "indent-string": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", - "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", "dev": true, "requires": { - "repeating": "^2.0.0" + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" } }, - "indexes-of": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", - "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", - "dev": true + "liftoff": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-2.5.0.tgz", + "integrity": "sha1-IAkpG7Mc6oYbvxCnwVooyvdcMew=", + "dev": true, + "requires": { + "extend": "^3.0.0", + "findup-sync": "^2.0.0", + "fined": "^1.0.1", + "flagged-respawn": "^1.0.0", + "is-plain-object": "^2.0.4", + "object.map": "^1.0.0", + "rechoir": "^0.6.2", + "resolve": "^1.1.7" + }, + "dependencies": { + "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" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } }, - "indexof": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", - "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", + "limiter": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/limiter/-/limiter-1.1.5.tgz", + "integrity": "sha1-j5KiWzsWxhMSk6DMg0tKg4oqp8I=", "dev": true }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "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": { - "once": "^1.3.0", - "wrappy": "1" + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" } }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - }, - "ini": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz", - "integrity": "sha1-BTfLedr1m1mhpRff9wbIbsA5Fi4=", - "dev": true - }, - "inquirer": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-0.10.1.tgz", - "integrity": "sha1-6iXkzmnKFF4FyZ5G3P7AXkASWUo=", + "localtunnel": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/localtunnel/-/localtunnel-1.9.2.tgz", + "integrity": "sha1-ABL8q8Kc+WTBMKAYWHaKortlta8=", "dev": true, "requires": { - "ansi-escapes": "^1.1.0", - "ansi-regex": "^2.0.0", - "chalk": "^1.0.0", - "cli-cursor": "^1.0.1", - "cli-width": "^1.0.1", - "figures": "^1.3.5", - "lodash": "^3.3.1", - "readline2": "^1.0.1", - "run-async": "^0.1.0", - "rx-lite": "^3.1.2", - "strip-ansi": "^3.0.0", - "through": "^2.3.6" + "axios": "0.19.0", + "debug": "4.1.1", + "openurl": "1.1.1", + "yargs": "6.6.0" }, "dependencies": { - "lodash": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", - "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", + "camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "dev": true + }, + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true + }, + "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.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-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" + } } } }, - "insight": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/insight/-/insight-0.8.2.tgz", - "integrity": "sha1-GMKs8bYFVJEnj8dSnx8h0y4fDto=", + "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": { - "async": "^1.4.2", - "chalk": "^1.0.0", - "configstore": "^1.0.0", - "inquirer": "^0.10.0", - "lodash.debounce": "^3.0.1", - "node-uuid": "^1.4.7", - "object-assign": "^4.0.1", - "os-name": "^1.0.0", - "request": "^2.40.0", - "tough-cookie": "^2.0.0" + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" }, "dependencies": { - "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "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 } } }, - "interpret": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.0.3.tgz", - "integrity": "sha1-y8NcYu7uc/Gat7EKgBURQBr8D5A=", + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha1-tEf2ZwoEVbv+7dETku/zMOoJdUg=", + "dev": true + }, + "lodash._arraycopy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._arraycopy/-/lodash._arraycopy-3.0.0.tgz", + "integrity": "sha1-due3wfH7klRzdIeKVi7Qaj5Q9uE=", + "dev": true + }, + "lodash._arrayeach": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._arrayeach/-/lodash._arrayeach-3.0.0.tgz", + "integrity": "sha1-urFWsqkNPxu9XGU0AzSeXlkz754=", + "dev": true + }, + "lodash._baseassign": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz", + "integrity": "sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=", + "dev": true, + "requires": { + "lodash._basecopy": "^3.0.0", + "lodash.keys": "^3.0.0" + } + }, + "lodash._baseclone": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/lodash._baseclone/-/lodash._baseclone-3.3.0.tgz", + "integrity": "sha1-MDUZv2OT/n5C802LYw73eU41Qrc=", + "dev": true, + "requires": { + "lodash._arraycopy": "^3.0.0", + "lodash._arrayeach": "^3.0.0", + "lodash._baseassign": "^3.0.0", + "lodash._basefor": "^3.0.0", + "lodash.isarray": "^3.0.0", + "lodash.keys": "^3.0.0" + } + }, + "lodash._basecopy": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", + "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=", "dev": true }, - "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=", + "lodash._basefor": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash._basefor/-/lodash._basefor-3.0.3.tgz", + "integrity": "sha1-dVC06SGO8J+tJDQ7YSAhx5tMIMI=", "dev": true }, - "ip-regex": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-1.0.3.tgz", - "integrity": "sha1-3FiQdvZZ9BnCIgOaMzFvHHOH7/0=", - "dev": true, - "optional": true + "lodash._basetostring": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz", + "integrity": "sha1-0YYdh3+CSlL2aYMtyvPuFVZqB9U=", + "dev": true }, - "irregular-plurals": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/irregular-plurals/-/irregular-plurals-1.2.0.tgz", - "integrity": "sha1-OPKZg0uowAwwvpxVThNyaXUv86w=", + "lodash._basevalues": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz", + "integrity": "sha1-W3dXYoAr3j0yl1A+JjAIIP32Ybc=", "dev": true }, - "is": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/is/-/is-3.2.1.tgz", - "integrity": "sha1-0Kwq1V63sL7JJqUmb2xmKqqD3KU=", + "lodash._bindcallback": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz", + "integrity": "sha1-5THCdkTPi1epnhftlbNcdIeJOS4=", "dev": true }, - "is-absolute": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-0.1.7.tgz", - "integrity": "sha1-hHSREZ/MtftDYhfMc39/qtUPYD8=", - "dev": true, - "requires": { - "is-relative": "^0.1.0" - } + "lodash._getnative": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", + "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=", + "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=", + "lodash._isiterateecall": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", + "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=", "dev": true }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "lodash._reescape": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._reescape/-/lodash._reescape-3.0.0.tgz", + "integrity": "sha1-Kx1vXf4HyKNVdT5fJ/rH8c3hYWo=", "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=", + "lodash._reevaluate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz", + "integrity": "sha1-WLx0xAZklTrgsSTYBpltrKQx4u0=", + "dev": true + }, + "lodash._reinterpolate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", + "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=", + "dev": true + }, + "lodash._root": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash._root/-/lodash._root-3.0.1.tgz", + "integrity": "sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI=", + "dev": true + }, + "lodash.assign": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", + "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=", + "dev": true + }, + "lodash.clonedeep": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-3.0.2.tgz", + "integrity": "sha1-oKHkDYKl6on/WxR7hETtY9koJ9s=", "dev": true, "requires": { - "binary-extensions": "^1.0.0" + "lodash._baseclone": "^3.0.0", + "lodash._bindcallback": "^3.0.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 + "lodash.debounce": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-3.1.1.tgz", + "integrity": "sha1-gSIRw3ipTMKdWqTjNGzwv846ffU=", + "dev": true, + "requires": { + "lodash._getnative": "^3.0.0" + } }, - "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=", + "lodash.escape": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-3.2.0.tgz", + "integrity": "sha1-mV7g3BjBtIzJLv+ucaEKq1tIdpg=", "dev": true, "requires": { - "builtin-modules": "^1.0.0" + "lodash._root": "^3.0.0" } }, - "is-bzip2": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-bzip2/-/is-bzip2-1.0.0.tgz", - "integrity": "sha1-XuWOqlounIDiFAe+3yOuWsCRs/w=", + "lodash.get": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=", "dev": true }, - "is-docker": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-1.1.0.tgz", - "integrity": "sha1-8EN01O7lMQ6ajhE78UlUEeRhdqE=", + "lodash.isarguments": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", + "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=", "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=", + "lodash.isarray": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", + "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=", "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=", + "lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=", + "dev": true + }, + "lodash.isfinite": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/lodash.isfinite/-/lodash.isfinite-3.3.2.tgz", + "integrity": "sha1-+4m2WpqAKBgz8LdHizpRBPiY67M=", + "dev": true + }, + "lodash.keys": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", + "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", "dev": true, "requires": { - "is-primitive": "^2.0.0" + "lodash._getnative": "^3.0.0", + "lodash.isarguments": "^3.0.0", + "lodash.isarray": "^3.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=", + "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 }, - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "lodash.pad": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/lodash.pad/-/lodash.pad-4.5.1.tgz", + "integrity": "sha1-QzCUmoM6fI2iLMIPaibE1Z3runA=", "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.0" - } + "lodash.padend": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/lodash.padend/-/lodash.padend-4.6.1.tgz", + "integrity": "sha1-U8y6BH0G4VjTEfRdpiX05J5vFm4=", + "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=", + "lodash.padstart": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/lodash.padstart/-/lodash.padstart-4.6.1.tgz", + "integrity": "sha1-0uPuv/DZ05rVD1y9G1KnvOa7YRs=", + "dev": true + }, + "lodash.restparam": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz", + "integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=", + "dev": true + }, + "lodash.template": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-3.6.2.tgz", + "integrity": "sha1-+M3sxhaaJVvpCYrosMU9N4kx0U8=", "dev": true, "requires": { - "number-is-nan": "^1.0.0" + "lodash._basecopy": "^3.0.0", + "lodash._basetostring": "^3.0.0", + "lodash._basevalues": "^3.0.0", + "lodash._isiterateecall": "^3.0.0", + "lodash._reinterpolate": "^3.0.0", + "lodash.escape": "^3.0.0", + "lodash.keys": "^3.0.0", + "lodash.restparam": "^3.0.0", + "lodash.templatesettings": "^3.0.0" } }, - "is-gif": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-gif/-/is-gif-1.0.0.tgz", - "integrity": "sha1-ptKumIkwB7/6l6HYwB1jIFgyCX4=", - "dev": true, - "optional": true - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "lodash.templatesettings": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz", + "integrity": "sha1-+zB4RHU7Zrnxr6VOJix0UwfbqOU=", "dev": true, "requires": { - "is-extglob": "^1.0.0" + "lodash._reinterpolate": "^3.0.0", + "lodash.escape": "^3.0.0" } }, - "is-gzip": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-gzip/-/is-gzip-1.0.0.tgz", - "integrity": "sha1-bKiwe5nHeZgCWQDlVc7Y7YCHmoM=", - "dev": true - }, - "is-jpg": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-jpg/-/is-jpg-1.0.0.tgz", - "integrity": "sha1-KVnBfnNDDbOCZNp1uQ3VTy2G2hw=", - "dev": true, - "optional": 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 }, - "is-lower-case": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/is-lower-case/-/is-lower-case-1.1.3.tgz", - "integrity": "sha1-fhR75HaNxGbbO/shzGCzHmrWk5M=", + "log-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz", + "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=", "dev": true, "requires": { - "lower-case": "^1.1.0" + "chalk": "^1.0.0" } }, - "is-my-json-valid": { - "version": "2.16.0", - "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.16.0.tgz", - "integrity": "sha1-8Hndm/2uZe4gOKrorLyGqxCeNpM=", + "log4js": { + "version": "0.6.38", + "resolved": "https://registry.npmjs.org/log4js/-/log4js-0.6.38.tgz", + "integrity": "sha1-LElBFmldb7JUgJQ9P8hy5mKlIv0=", "dev": true, "requires": { - "generate-function": "^2.0.0", - "generate-object-property": "^1.1.0", - "jsonpointer": "^4.0.0", - "xtend": "^4.0.0" + "readable-stream": "~1.0.2", + "semver": "~4.3.3" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "semver": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz", + "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=", + "dev": true + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + } } }, - "is-natural-number": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-2.1.1.tgz", - "integrity": "sha1-fUxXKDd+84bD4ZSpkRv1fG3DNec=", - "dev": true + "logalot": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/logalot/-/logalot-2.1.0.tgz", + "integrity": "sha1-X46MkNME7fElMJUaVVSruMXj9VI=", + "dev": true, + "optional": true, + "requires": { + "figures": "^1.3.5", + "squeak": "^1.0.0" + } }, - "is-negated-glob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz", - "integrity": "sha1-aRC8pdqMleeEtXUbl2z1oQ/uNtI=", + "lolex": { + "version": "2.7.5", + "resolved": "https://registry.npmjs.org/lolex/-/lolex-2.7.5.tgz", + "integrity": "sha512-l9x0+1offnKKIzYVjyXU2SiwhXDLekRzKyhnbyldPHvC7BvLPVpdNUNR2KeMAiCN2D/kLNttZgQD5WjSxuBx3Q==", "dev": true }, - "is-npm": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", - "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=", + "longest": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", + "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", "dev": true }, - "is-number": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", - "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", + "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": { - "kind-of": "^3.0.2" + "currently-unhandled": "^0.4.1", + "signal-exit": "^3.0.0" } }, - "is-number-like": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/is-number-like/-/is-number-like-1.0.8.tgz", - "integrity": "sha512-6rZi3ezCyFcn5L71ywzz2bS5b2Igl1En3eTlZlvKjpz1n3IZLAYMbKYAIQgFmEu0GENg92ziU/faEOA/aixjbA==", + "lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=", + "dev": true + }, + "lower-case-first": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/lower-case-first/-/lower-case-first-1.0.2.tgz", + "integrity": "sha1-5dp8JvKacHO+AtUrrJmA5ZIq36E=", "dev": true, "requires": { - "lodash.isfinite": "^3.3.2" + "lower-case": "^1.1.2" } }, - "is-obj": { + "lowercase-keys": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=" - }, - "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=", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha1-b54wtHCE2XGnyCD/FabFFnt0wm8=", "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=", + "lpad-align": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/lpad-align/-/lpad-align-1.1.2.tgz", + "integrity": "sha1-IfYArBwwlcPG5JfuZyce4ISB/p4=", "dev": true, + "optional": true, "requires": { - "is-path-inside": "^1.0.0" + "get-stdin": "^4.0.1", + "indent-string": "^2.1.0", + "longest": "^1.0.0", + "meow": "^3.3.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=", + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha1-i75Q6oW+1ZvJ4z3KuCNe6bz0Q80=", "dev": true, "requires": { - "path-is-inside": "^1.0.1" + "pseudomap": "^1.0.2", + "yallist": "^2.1.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.3", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.3.tgz", - "integrity": "sha1-wVvz5LZrYtcu+vKSWEhmPsvGGbY=", + "main-bower-files": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/main-bower-files/-/main-bower-files-2.13.1.tgz", + "integrity": "sha1-fhvFxJg1LM7NXfCH8T1fMbwFfT4=", "dev": true, "requires": { - "isobject": "^3.0.0" + "chalk": "^1.0.0", + "extend": "^2.0.1", + "globby": "^2.0.0", + "multimatch": "^2.0.0", + "path-exists": "^1.0.0", + "strip-json-comments": "^1.0.2", + "vinyl-fs": "^2.4.3" }, "dependencies": { - "isobject": { + "extend": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-2.0.2.tgz", + "integrity": "sha1-G3SYVAAXG4VVSJRFnJeN5u9FOrc=", + "dev": true + }, + "glob": { + "version": "5.0.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", + "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", + "dev": true, + "requires": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "globby": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-2.1.0.tgz", + "integrity": "sha1-npGSvNM/Srak+JTl5+qLcTITxII=", + "dev": true, + "requires": { + "array-union": "^1.0.1", + "async": "^1.2.1", + "glob": "^5.0.3", + "object-assign": "^3.0.0" + } + }, + "object-assign": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.0.tgz", - "integrity": "sha1-OVZSF/NmF4nooKDAgNX35rxG4aA=", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz", + "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=", "dev": true - } - } - }, - "is-png": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-png/-/is-png-1.1.0.tgz", - "integrity": "sha1-1XSxK/J1wDUEVVcLDltXqwYgd84=", - "dev": true, - "optional": true - }, - "is-posix-bracket": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", - "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", - "dev": true - }, - "is-primitive": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", - "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", - "dev": true - }, - "is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", - "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", - "dev": true - }, - "is-property": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", - "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=", - "dev": true - }, - "is-redirect": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", - "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=", - "dev": true - }, - "is-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", - "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=" - }, - "is-relative": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-0.1.3.tgz", - "integrity": "sha1-kF/uiuhvRbPsYUvDwVyGnfCHboI=", - "dev": true + }, + "path-exists": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-1.0.0.tgz", + "integrity": "sha1-1aiZjrce83p0w06w2eum6HjuoIE=", + "dev": true + }, + "strip-json-comments": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz", + "integrity": "sha1-HhX7ysl9Pumb8tc7TGVrCCu6+5E=", + "dev": true + } + } }, - "is-relative-url": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-relative-url/-/is-relative-url-1.0.0.tgz", - "integrity": "sha1-h6nTXop4m0ngebTX1p1kYS6ODh8=", + "make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha1-ecEDO4BRW9bSTsmTPoYMp17ifww=", "dev": true, "requires": { - "is-absolute-url": "^1.0.0" + "pify": "^3.0.0" }, "dependencies": { - "is-absolute-url": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-1.0.0.tgz", - "integrity": "sha1-LX7w/QuyqI2sfpIlPGgIoKziS/s=", + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", "dev": true } } }, - "is-resolvable": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.0.0.tgz", - "integrity": "sha1-jfV8YeouPFAUCNEA+wE8+NbgzGI=", + "make-iterator": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz", + "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==", "dev": true, "requires": { - "tryit": "^1.0.1" + "kind-of": "^6.0.2" + }, + "dependencies": { + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true + } } }, - "is-retry-allowed": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz", - "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=", - "dev": true - }, - "is-root": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-root/-/is-root-1.0.0.tgz", - "integrity": "sha1-B7bCM7w5TNnQK6FclmvWZg1jQtU=", - "dev": true - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", "dev": true }, - "is-supported-regexp-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-supported-regexp-flag/-/is-supported-regexp-flag-1.0.0.tgz", - "integrity": "sha1-i1IMhfrnolM4LUsCZS4EVXbhO7g=", + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", "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.0" - } - }, - "is-tar": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-tar/-/is-tar-1.0.0.tgz", - "integrity": "sha1-L2suF5LB9bs2UZrKqdZcDSb+hT0=", + "map-stream": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.0.6.tgz", + "integrity": "sha1-0u9OuBGihkTHqJiZhcacL91JaCc=", "dev": true }, - "is-typedarray": { + "map-visit": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, - "is-unc-path": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-0.1.2.tgz", - "integrity": "sha1-arBTpyVzwQJQ/0FqOBTDUXivObk=", - "dev": true, - "requires": { - "unc-path-regex": "^0.1.0" - } - }, - "is-upper-case": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-upper-case/-/is-upper-case-1.1.2.tgz", - "integrity": "sha1-jQsfp+eTOh5YSDYA7H2WYcuvdW8=", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", "dev": true, "requires": { - "upper-case": "^1.1.0" + "object-visit": "^1.0.0" } }, - "is-url": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.2.tgz", - "integrity": "sha1-SYkFpZO/R8wtnn9zg3K792lsfyY=", + "math-random": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.4.tgz", + "integrity": "sha1-XdaUPJOFSCZwFtTjTwV1gwgMUUw=", "dev": true }, - "is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "mdn-data": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", + "integrity": "sha1-aZs8OKxvHXKAkaZGULZdOIUC/Vs=", "dev": true }, - "is-valid-glob": { + "media-typer": { "version": "0.3.0", - "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-0.3.0.tgz", - "integrity": "sha1-1LVcafUYhvm2XHDWwmItN+KfSP4=", - "dev": true - }, - "is-windows": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-0.2.0.tgz", - "integrity": "sha1-3hqm1j6indJIc3tp8f+LgALSEIw=", - "dev": true - }, - "is-zip": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-zip/-/is-zip-1.0.0.tgz", - "integrity": "sha1-R7Co/004p2QxzP2ZqOFaTIa6IyU=", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "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=", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", "dev": true }, - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "mem-fs": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/mem-fs/-/mem-fs-1.1.3.tgz", + "integrity": "sha1-uK6NLj/Lb10/kWXBLUVRoGXZicw=", "dev": true, "requires": { - "isarray": "1.0.0" + "through2": "^2.0.0", + "vinyl": "^1.1.0", + "vinyl-file": "^2.0.0" } }, - "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": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/istanbul/-/istanbul-0.4.5.tgz", - "integrity": "sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs=", + "mem-fs-editor": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/mem-fs-editor/-/mem-fs-editor-2.3.0.tgz", + "integrity": "sha1-QqCuH1Xnb9A/CefHsVtjB731yxM=", "dev": true, "requires": { - "abbrev": "1.0.x", - "async": "1.x", - "escodegen": "1.8.x", - "esprima": "2.7.x", - "glob": "^5.0.15", - "handlebars": "^4.0.1", - "js-yaml": "3.x", - "mkdirp": "0.5.x", - "nopt": "3.x", - "once": "1.x", - "resolve": "1.1.x", - "supports-color": "^3.1.0", - "which": "^1.1.1", - "wordwrap": "^1.0.0" + "commondir": "^1.0.1", + "deep-extend": "^0.4.0", + "ejs": "^2.3.1", + "glob": "^7.0.3", + "globby": "^4.0.0", + "mkdirp": "^0.5.0", + "multimatch": "^2.0.0", + "rimraf": "^2.2.8", + "through2": "^2.0.0", + "vinyl": "^1.1.0" }, "dependencies": { - "abbrev": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", - "integrity": "sha1-kbR5JYinc4wl813W9jdSovh3YTU=", - "dev": true - }, - "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", - "dev": true - }, - "glob": { - "version": "5.0.15", - "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", - "dev": true, - "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "resolve": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", - "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", + "deep-extend": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.2.tgz", + "integrity": "sha1-SLaZwn4zS/ifEIkr5DL25MfTSn8=", "dev": true }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "globby": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-4.1.0.tgz", + "integrity": "sha1-CA9UVJ7BuCpsYOYx/ILhIR2+lfg=", "dev": true, "requires": { - "has-flag": "^1.0.0" + "array-union": "^1.0.1", + "arrify": "^1.0.0", + "glob": "^6.0.1", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "dependencies": { + "glob": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", + "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=", + "dev": true, + "requires": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + } } } } }, - "istextorbinary": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/istextorbinary/-/istextorbinary-1.0.2.tgz", - "integrity": "sha1-rOGTVNGpoBc+/rEITOD4ewrX3s8=", + "meow": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", + "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", + "dev": true, + "requires": { + "camelcase-keys": "^2.0.0", + "decamelize": "^1.1.2", + "loud-rejection": "^1.0.0", + "map-obj": "^1.0.1", + "minimist": "^1.1.3", + "normalize-package-data": "^2.3.4", + "object-assign": "^4.0.1", + "read-pkg-up": "^1.0.1", + "redent": "^1.0.0", + "trim-newlines": "^1.0.0" + } + }, + "merge": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/merge/-/merge-1.2.1.tgz", + "integrity": "sha1-OL6/gMMiCopIe2/Ps5QbsRcgwUU=", + "dev": true + }, + "merge-stream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz", + "integrity": "sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=", "dev": true, "requires": { - "binaryextensions": "~1.0.0", - "textextensions": "~1.0.0" + "readable-stream": "^2.0.1" } }, - "jasmine-core": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-2.4.1.tgz", - "integrity": "sha1-b4OrOg8WlRcizgfSBsdz1XzIOL4=", + "merge2": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.3.0.tgz", + "integrity": "sha1-WzZu6DsvFYLEj4fkfPGpNSEDyoE=", "dev": true }, - "jhipster-core": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/jhipster-core/-/jhipster-core-1.1.7.tgz", - "integrity": "sha1-63BjUyy8QK3eCU0yc7w5EVdAWps=", + "micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", "dev": true, "requires": { - "lodash": "4.14.2" + "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" }, "dependencies": { - "lodash": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.14.2.tgz", - "integrity": "sha1-u8zOY3OkAPv9CoxnykL20e9BZDI=", + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } } } }, - "jpegtran-bin": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/jpegtran-bin/-/jpegtran-bin-3.2.0.tgz", - "integrity": "sha1-9g7PSumZwL2tLp+83ytvCYHnops=", - "dev": true, - "optional": true, - "requires": { - "bin-build": "^2.0.0", - "bin-wrapper": "^3.0.0", - "logalot": "^2.0.0" - } - }, - "js-base64": { - "version": "2.1.9", - "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.1.9.tgz", - "integrity": "sha1-8OgK4DmkvWVLXygfyT8EqRSn/M4=", + "mime": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", + "integrity": "sha1-Eh+evEnjdm8xGnbh+hyAA8SwOqY=", "dev": true }, - "js-tokens": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.1.tgz", - "integrity": "sha1-COnxMkhKLEWjCQfp3E1VZ7fxFNc=", + "mime-db": { + "version": "1.43.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.43.0.tgz", + "integrity": "sha1-ChLgUCZQ5HPXNVNQUOfI9OtPrlg=", "dev": true }, - "js-yaml": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.6.1.tgz", - "integrity": "sha1-bl/mfYsgXOTSL60Ft3geja3MSzA=", + "mime-types": { + "version": "2.1.26", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.26.tgz", + "integrity": "sha1-nJIfwJt+FJpl39wNpNIJlyALCgY=", "dev": true, "requires": { - "argparse": "^1.0.7", - "esprima": "^2.6.0" + "mime-db": "1.43.0" } }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true, - "optional": true + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "dev": true }, - "jsdom": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-7.2.2.tgz", - "integrity": "sha1-QLQCdwwr2iNGkJa+6Rq2deOx/G4=", + "mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha1-SSNTiHju9CBjy4o+OweYeBSHqxs=", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=", "dev": true, - "optional": true, "requires": { - "abab": "^1.0.0", - "acorn": "^2.4.0", - "acorn-globals": "^1.0.4", - "cssom": ">= 0.3.0 < 0.4.0", - "cssstyle": ">= 0.2.29 < 0.3.0", - "escodegen": "^1.6.1", - "nwmatcher": ">= 1.3.7 < 2.0.0", - "parse5": "^1.5.1", - "request": "^2.55.0", - "sax": "^1.1.4", - "symbol-tree": ">= 3.1.0 < 4.0.0", - "tough-cookie": "^2.2.0", - "webidl-conversions": "^2.0.0", - "whatwg-url-compat": "~0.6.5", - "xml-name-validator": ">= 2.0.1 < 3.0.0" + "brace-expansion": "^1.1.7" } }, - "jsesc": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.1.tgz", - "integrity": "sha1-5CGiqOINawgZ3yiQj3glJrlt0f4=", + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "mitt": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-1.2.0.tgz", + "integrity": "sha1-yyTmVpyAbjG9TjmVeH/jigT9+Q0=", "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 + "mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha1-ESC0PcNZp4Xc5ltVuC4lfM9HlWY=", + "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": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + }, + "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" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "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=", + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", "dev": true, "requires": { - "jsonify": "~0.0.0" + "minimist": "0.0.8" + }, + "dependencies": { + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + } } }, - "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=", + "modify-filename": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/modify-filename/-/modify-filename-1.1.0.tgz", + "integrity": "sha1-mi3sg4Bvuy2XXyK+7IWcoms5OqE=", "dev": true }, - "json3": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/json3/-/json3-3.2.6.tgz", - "integrity": "sha1-9u/JPAagTemuxTBT3yVZuxniA4s=", + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true }, - "jsonfile": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz", - "integrity": "sha1-pezG9l9T9mLEQVx2daAzHQmS7GY=", + "multimatch": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-2.1.0.tgz", + "integrity": "sha1-nHkGoi+0wCkZ4vX3UWG0zb1LKis=", "dev": true, "requires": { - "graceful-fs": "^4.1.6" + "array-differ": "^1.0.0", + "array-union": "^1.0.1", + "arrify": "^1.0.0", + "minimatch": "^3.0.0" } }, - "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 - }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "multipipe": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/multipipe/-/multipipe-0.1.2.tgz", + "integrity": "sha1-Ko8t33Du1WTf8tV/HhoTfZ8FB4s=", "dev": true, "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" + "duplexer2": "0.0.2" }, "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "duplexer2": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz", + "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=", + "dev": true, + "requires": { + "readable-stream": "~1.1.9" + } + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", "dev": true } } }, - "karma": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/karma/-/karma-1.1.2.tgz", - "integrity": "sha1-eM0J4KfTghxiMpH9Hsm61al2PIU=", + "mute-stream": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.5.tgz", + "integrity": "sha1-j7+rsKmKJT0xhDMfno3rc3L6xsA=", + "dev": true + }, + "nan": { + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", + "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==", + "dev": true, + "optional": true + }, + "nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha1-uHqKpPwN6P5r6IiVs4mD/yZb0Rk=", "dev": true, "requires": { - "bluebird": "^3.3.0", - "body-parser": "^1.12.4", - "chokidar": "^1.4.1", - "colors": "^1.1.0", - "combine-lists": "^1.0.0", - "connect": "^3.3.5", - "core-js": "^2.2.0", - "di": "^0.0.1", - "dom-serialize": "^2.2.0", - "expand-braces": "^0.1.1", - "glob": "^7.0.3", - "graceful-fs": "^4.1.2", - "http-proxy": "^1.13.0", - "isbinaryfile": "^3.0.0", - "lodash": "^3.8.0", - "log4js": "^0.6.31", - "mime": "^1.3.4", - "minimatch": "^3.0.0", - "optimist": "^0.6.1", - "qjobs": "^1.1.4", - "rimraf": "^2.3.3", - "socket.io": "1.4.7", - "source-map": "^0.5.3", - "tmp": "0.0.28", - "useragent": "^2.1.9" + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" }, "dependencies": { - "accepts": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.1.4.tgz", - "integrity": "sha1-1xyW99QdD+2iw4zRToonwEFY30o=", - "dev": true, - "requires": { - "mime-types": "~2.0.4", - "negotiator": "0.4.9" - } + "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 }, - "colors": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", - "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", + "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 }, - "debug": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", - "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", + "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": { - "ms": "0.7.1" + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" } }, - "engine.io": { - "version": "1.6.10", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-1.6.10.tgz", - "integrity": "sha1-+H2E4b0h0aLsf43u8MYgVKzfsno=", + "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": { - "accepts": "1.1.4", - "base64id": "0.1.0", - "debug": "2.2.0", - "engine.io-parser": "1.2.4", - "ws": "1.0.1" + "is-plain-object": "^2.0.4" } }, - "lodash": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", - "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", - "dev": true - }, - "mime": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.3.6.tgz", - "integrity": "sha1-WR2E02U6awtKO5343lqoEI5y5eA=", - "dev": true - }, - "mime-db": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.12.0.tgz", - "integrity": "sha1-PQxjGA9FjrENMlqqN9fFiuMS6dc=", - "dev": true - }, - "mime-types": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.0.14.tgz", - "integrity": "sha1-MQ4VnbI+B3+Lsit0jav6SVcUCqY=", + "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": { - "mime-db": "~1.12.0" + "isobject": "^3.0.1" } }, - "ms": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", - "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", "dev": true }, - "negotiator": { - "version": "0.4.9", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.4.9.tgz", - "integrity": "sha1-kuRrbbU8fkIe1koryU8IvnYw3z8=", + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true }, - "socket.io": { - "version": "1.4.7", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-1.4.7.tgz", - "integrity": "sha1-krf3y4jFeX1NruJ5/oB12+bT+hw=", - "dev": true, - "requires": { - "debug": "2.2.0", - "engine.io": "1.6.10", - "has-binary": "0.1.7", - "socket.io-adapter": "0.4.0", - "socket.io-client": "1.4.6", - "socket.io-parser": "2.2.6" - } - }, - "source-map": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", - "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=", + "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 }, - "tmp": { - "version": "0.0.28", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.28.tgz", - "integrity": "sha1-Fyc1t/YU6nrzlmT6hM8N5OUV0SA=", + "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": { - "os-tmpdir": "~1.0.1" + "isobject": "^3.0.1" } } } }, - "karma-chrome-launcher": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-1.0.1.tgz", - "integrity": "sha1-vlrnxCZPmgouIuPZhL6zJa2SyMs=", + "natives": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/natives/-/natives-1.1.6.tgz", + "integrity": "sha512-6+TDFewD4yxY14ptjKaS63GVdtKiES1pTPyxn9Jb0rBqPMZ7VcCiooEhPNsr+mqHtMGxa/5c/HhcC4uPEUw/nA==", + "dev": true + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha1-F7CVgZiJef3a/gIB6TG6kzyWy7Q=", + "dev": true + }, + "ncname": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/ncname/-/ncname-1.0.0.tgz", + "integrity": "sha1-W1etGLHKCShk72Kwse2BlPODtxw=", "dev": true, "requires": { - "fs-access": "^1.0.0", - "which": "^1.2.1" + "xml-char-classes": "^1.0.0" } }, - "karma-coverage": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/karma-coverage/-/karma-coverage-1.1.2.tgz", - "integrity": "sha512-eQawj4Cl3z/CjxslYy9ariU4uDh7cCNFZHNWXWRpl0pNeblY/4wHR7M7boTYXWrn9bY0z2pZmr11eKje/S/hIw==", + "negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha1-/qz3zPUlp3rpY0Q2pkiD/+yjRvs=", + "dev": true + }, + "neo-async": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz", + "integrity": "sha1-rCetpmFn+ohJpq3dg39rGJrSCBw=", + "dev": true + }, + "ng-annotate": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/ng-annotate/-/ng-annotate-1.2.2.tgz", + "integrity": "sha1-3D/FG6Cy+LOF2+BH9NoG9YCh/WE=", "dev": true, "requires": { - "dateformat": "^1.0.6", - "istanbul": "^0.4.0", - "lodash": "^4.17.0", - "minimatch": "^3.0.0", - "source-map": "^0.5.1" + "acorn": "~2.6.4", + "alter": "~0.2.0", + "convert-source-map": "~1.1.2", + "optimist": "~0.6.1", + "ordered-ast-traverse": "~1.1.1", + "simple-fmt": "~0.1.0", + "simple-is": "~0.2.0", + "source-map": "~0.5.3", + "stable": "~0.1.5", + "stringmap": "~0.2.2", + "stringset": "~0.2.1", + "tryor": "~0.1.2" }, "dependencies": { + "acorn": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-2.6.4.tgz", + "integrity": "sha1-6x9FtKQ/ox0DcBpexG87Umc+kO4=", + "dev": true + }, + "convert-source-map": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz", + "integrity": "sha1-SCnId+n+SbMWHzvzZziI4gRpmGA=", + "dev": true + }, "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", + "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=", "dev": true } } }, - "karma-jasmine": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/karma-jasmine/-/karma-jasmine-1.0.2.tgz", - "integrity": "sha1-wLOrMnvyB9tg4X+ifbN8/e9djmw=", - "dev": true - }, - "karma-junit-reporter": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/karma-junit-reporter/-/karma-junit-reporter-1.1.0.tgz", - "integrity": "sha1-Evj/ggUGB6HU8RkvAhHv3ktZyj4=", - "dev": true, - "requires": { - "path-is-absolute": "^1.0.0", - "xmlbuilder": "8.2.2" - } - }, - "karma-phantomjs-launcher": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/karma-phantomjs-launcher/-/karma-phantomjs-launcher-1.0.4.tgz", - "integrity": "sha1-0jyjSAG9qYY60xjju0vUBisTrNI=", + "ng-dependencies": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/ng-dependencies/-/ng-dependencies-0.8.1.tgz", + "integrity": "sha1-GP1jMscC4PPjdKNv4e1FXGdSu2g=", "dev": true, "requires": { - "lodash": "^4.0.1", - "phantomjs-prebuilt": "^2.1.7" + "esprima": "^2.6.0", + "estraverse": "^4.2.0", + "lodash": "^4.0.0" + }, + "dependencies": { + "estraverse": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", + "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", + "dev": true + } } }, - "karma-script-launcher": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/karma-script-launcher/-/karma-script-launcher-1.0.0.tgz", - "integrity": "sha1-zQF8TeXvCeWp2nkydhdhCN1LVC0=", - "dev": true - }, - "kew": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/kew/-/kew-0.7.0.tgz", - "integrity": "sha1-edk9LTM2PW/dKXCzNdkUGtWR15s=", + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha1-ozeKdpbOfSI+iPybdkvX7xCJ42Y=", "dev": true }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "nise": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/nise/-/nise-1.5.3.tgz", + "integrity": "sha512-Ymbac/94xeIrMf59REBPOv0thr+CJVFMhrlAkW/gjCIE58BGQdCj0x7KRCb3yz+Ga2Rz3E9XXSvUyyxqqhjQAQ==", "dev": true, "requires": { - "is-buffer": "^1.1.5" + "@sinonjs/formatio": "^3.2.1", + "@sinonjs/text-encoding": "^0.7.1", + "just-extend": "^4.0.2", + "lolex": "^5.0.1", + "path-to-regexp": "^1.7.0" + }, + "dependencies": { + "@sinonjs/formatio": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/@sinonjs/formatio/-/formatio-3.2.2.tgz", + "integrity": "sha512-B8SEsgd8gArBLMD6zpRw3juQ2FVSsmdd7qlevyDqzS9WTCtvF55/gAL+h6gue8ZvPYcdiPdvueM/qm//9XzyTQ==", + "dev": true, + "requires": { + "@sinonjs/commons": "^1", + "@sinonjs/samsam": "^3.1.0" + } + }, + "lolex": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/lolex/-/lolex-5.1.2.tgz", + "integrity": "sha512-h4hmjAvHTmd+25JSwrtTIuwbKdwg5NzZVRMLn9saij4SZaepCrTCxPr35H/3bjwfMJtN+t3CX8672UIkglz28A==", + "dev": true, + "requires": { + "@sinonjs/commons": "^1.7.0" + } + } } }, - "klaw": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", - "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", + "no-case": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", + "integrity": "sha1-YLgTOWvjmz8SiKTB7V0efSi0ZKw=", "dev": true, "requires": { - "graceful-fs": "^4.1.9" + "lower-case": "^1.1.1" } }, - "latest-version": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-2.0.0.tgz", - "integrity": "sha1-VvjWE5YghHuAF/jx9NeOIRMkFos=", + "node-emoji": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.5.1.tgz", + "integrity": "sha1-/ZGOQSdpv4xEgFEjgjOECyr/FqE=", "dev": true, "requires": { - "package-json": "^2.0.0" + "string.prototype.codepointat": "^0.2.0" } }, - "lazy-cache": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", - "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", - "dev": true - }, - "lazy-req": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/lazy-req/-/lazy-req-1.1.0.tgz", - "integrity": "sha1-va6+rTD42CQDnODOFJ1Nqge6H6w=", - "dev": true, - "optional": true - }, - "lazypipe": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lazypipe/-/lazypipe-1.0.1.tgz", - "integrity": "sha1-FHGu9rN6NA1Rw030Rpnc7wZMGUA=", + "node-notifier": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-4.6.1.tgz", + "integrity": "sha1-BW0UJE89zBzq3+aK+c/wxUc6M/M=", "dev": true, "requires": { - "stream-combiner": "*" + "cli-usage": "^0.1.1", + "growly": "^1.2.0", + "lodash.clonedeep": "^3.0.0", + "minimist": "^1.1.1", + "semver": "^5.1.0", + "shellwords": "^0.1.0", + "which": "^1.0.5" } }, - "lazystream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", - "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", + "node-releases": { + "version": "1.1.45", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.45.tgz", + "integrity": "sha1-TPfpF11xsTF/Ff/WjOY7zh1T6fI=", "dev": true, "requires": { - "readable-stream": "^2.0.5" + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=", + "dev": true + } } }, - "lcid": { + "node-status-codes": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "resolved": "https://registry.npmjs.org/node-status-codes/-/node-status-codes-1.0.0.tgz", + "integrity": "sha1-WuVUHQJGRdMqWPzdyc7s6nrjrC8=", + "dev": true + }, + "node-uuid": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.8.tgz", + "integrity": "sha1-sEDrCSOWivq/jTL7HxfxFn/auQc=", + "dev": true + }, + "node.extend": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/node.extend/-/node.extend-1.1.8.tgz", + "integrity": "sha1-Cqs+Y3ifTm1otCvAAHOtGIEkPPA=", "dev": true, "requires": { - "invert-kv": "^1.0.0" + "has": "^1.0.3", + "is": "^3.2.1" + }, + "dependencies": { + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + } } }, - "lead": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lead/-/lead-1.0.0.tgz", - "integrity": "sha1-bxT5mje+Op3XhPVJVpDlkDRm7kI=", + "nopt": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", "dev": true, "requires": { - "flush-write-stream": "^1.0.2" + "abbrev": "1" } }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "normalize-package-data": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", + "integrity": "sha1-EvlaMH1YNSB1oEkHuErIvpisAS8=", "dev": true, "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" + "hosted-git-info": "^2.1.4", + "is-builtin-module": "^1.0.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" } }, - "liftoff": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-2.3.0.tgz", - "integrity": "sha1-qY8v9nGD2Lp8+soQVIvX/wVQs4U=", + "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": { - "extend": "^3.0.0", - "findup-sync": "^0.4.2", - "fined": "^1.0.1", - "flagged-respawn": "^0.3.2", - "lodash.isplainobject": "^4.0.4", - "lodash.isstring": "^4.0.1", - "lodash.mapvalues": "^4.4.0", - "rechoir": "^0.6.2", - "resolve": "^1.1.7" + "remove-trailing-separator": "^1.0.1" } }, - "limiter": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/limiter/-/limiter-1.1.3.tgz", - "integrity": "sha512-zrycnIMsLw/3ZxTbW7HCez56rcFGecWTx5OZNplzcXUUmJLmoYArC6qdJzmAN5BWiNXGcpjhF9RQ1HSv5zebEw==", + "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 }, - "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=", + "normalize-url": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz", + "integrity": "sha1-suHE3E98bVd0PfczpPWXjRhlBVk=", + "dev": true + }, + "now-and-later": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-2.0.0.tgz", + "integrity": "sha1-vGHLtFbXnLMiB85HygUTb/Ln1u4=", "dev": true, "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" + "once": "^1.3.2" } }, - "localtunnel": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/localtunnel/-/localtunnel-1.9.0.tgz", - "integrity": "sha512-wCIiIHJ8kKIcWkTQE3m1VRABvsH2ZuOkiOpZUofUCf6Q42v3VIZ+Q0YfX1Z4sYDRj0muiKL1bLvz1FeoxsPO0w==", + "npm-conf": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/npm-conf/-/npm-conf-1.1.3.tgz", + "integrity": "sha1-JWzEe9DiGMJZxOlVC/QTvCGSr/k=", "dev": true, + "optional": true, "requires": { - "axios": "0.17.1", - "debug": "2.6.8", - "openurl": "1.1.1", - "yargs": "6.6.0" + "config-chain": "^1.1.11", + "pify": "^3.0.0" }, "dependencies": { - "camelcase": { + "pify": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", - "dev": true - }, - "debug": { - "version": "2.6.8", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", - "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "yargs": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-6.6.0.tgz", - "integrity": "sha1-eC7CHvQDNF+DCoCMo9UTr1YGUgg=", + "optional": true + } + } + }, + "npm-keyword": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/npm-keyword/-/npm-keyword-4.2.0.tgz", + "integrity": "sha1-mP/r/bsTNvJ+9f4brKDcrNCs9sA=", + "dev": true, + "requires": { + "got": "^5.0.0", + "object-assign": "^4.0.1", + "pinkie-promise": "^2.0.0", + "registry-url": "^3.0.3" + }, + "dependencies": { + "got": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/got/-/got-5.7.1.tgz", + "integrity": "sha1-X4FjWmHkplifGAVp6k44FoClHzU=", "dev": true, "requires": { - "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" + "create-error-class": "^3.0.1", + "duplexer2": "^0.1.4", + "is-redirect": "^1.0.0", + "is-retry-allowed": "^1.0.0", + "is-stream": "^1.0.0", + "lowercase-keys": "^1.0.0", + "node-status-codes": "^1.0.0", + "object-assign": "^4.0.1", + "parse-json": "^2.1.0", + "pinkie-promise": "^2.0.0", + "read-all-stream": "^3.0.0", + "readable-stream": "^2.0.5", + "timed-out": "^3.0.0", + "unzip-response": "^1.0.2", + "url-parse-lax": "^1.0.0" } }, - "yargs-parser": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-4.2.1.tgz", - "integrity": "sha1-KczqwNxPA8bIe0qfIX3RjJ90hxw=", + "timed-out": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-3.1.3.tgz", + "integrity": "sha1-lYYL/MXHbCd/j4Mm/Q9bLiDrohc=", + "dev": true + } + } + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, + "optional": true, + "requires": { + "path-key": "^2.0.0" + } + }, + "npmconf": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/npmconf/-/npmconf-2.1.3.tgz", + "integrity": "sha512-iTK+HI68GceCoGOHAQiJ/ik1iDfI7S+cgyG8A+PP18IU3X83kRhQIRhAUNj4Bp2JMx6Zrt5kCiozYa9uGWTjhA==", + "dev": true, + "requires": { + "config-chain": "~1.1.8", + "inherits": "~2.0.0", + "ini": "^1.2.0", + "mkdirp": "^0.5.0", + "nopt": "~3.0.1", + "once": "~1.3.0", + "osenv": "^0.1.0", + "safe-buffer": "^5.1.1", + "semver": "2 || 3 || 4", + "uid-number": "0.0.5" + }, + "dependencies": { + "once": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz", + "integrity": "sha1-suJhVXzkwxTsgwTz+oJmPkKXyiA=", "dev": true, "requires": { - "camelcase": "^3.0.0" + "wrappy": "1" } + }, + "semver": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz", + "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=", + "dev": true } } }, - "lodash": { - "version": "4.17.10", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz", - "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==", - "dev": true - }, - "lodash._arraycopy": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._arraycopy/-/lodash._arraycopy-3.0.0.tgz", - "integrity": "sha1-due3wfH7klRzdIeKVi7Qaj5Q9uE=", - "dev": true - }, - "lodash._arrayeach": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._arrayeach/-/lodash._arrayeach-3.0.0.tgz", - "integrity": "sha1-urFWsqkNPxu9XGU0AzSeXlkz754=", - "dev": true - }, - "lodash._baseassign": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz", - "integrity": "sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=", + "npmlog": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-2.0.4.tgz", + "integrity": "sha1-mLUlMPJRTKkNCexbIsiEZyI3VpI=", "dev": true, "requires": { - "lodash._basecopy": "^3.0.0", - "lodash.keys": "^3.0.0" + "ansi": "~0.3.1", + "are-we-there-yet": "~1.1.2", + "gauge": "~1.2.5" } }, - "lodash._baseclone": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/lodash._baseclone/-/lodash._baseclone-3.3.0.tgz", - "integrity": "sha1-MDUZv2OT/n5C802LYw73eU41Qrc=", + "nth-check": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", + "integrity": "sha1-sr0pXDfj3VijvwcAN2Zjuk2c8Fw=", "dev": true, "requires": { - "lodash._arraycopy": "^3.0.0", - "lodash._arrayeach": "^3.0.0", - "lodash._baseassign": "^3.0.0", - "lodash._basefor": "^3.0.0", - "lodash.isarray": "^3.0.0", - "lodash.keys": "^3.0.0" + "boolbase": "~1.0.0" } }, - "lodash._basecopy": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", - "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=", + "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 }, - "lodash._basefor": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash._basefor/-/lodash._basefor-3.0.3.tgz", - "integrity": "sha1-dVC06SGO8J+tJDQ7YSAhx5tMIMI=", + "num2fraction": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", + "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=", "dev": true }, - "lodash._basetostring": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz", - "integrity": "sha1-0YYdh3+CSlL2aYMtyvPuFVZqB9U=", + "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 }, - "lodash._basevalues": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz", - "integrity": "sha1-W3dXYoAr3j0yl1A+JjAIIP32Ybc=", - "dev": true + "nwmatcher": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/nwmatcher/-/nwmatcher-1.4.4.tgz", + "integrity": "sha512-3iuY4N5dhgMpCUrOVnuAdGrgxVqV2cJpM+XNccjR2DKOB1RUP0aA+wGXEiNziG/UKboFyGBIoKOaNlJxx8bciQ==", + "dev": true, + "optional": true }, - "lodash._bindcallback": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz", - "integrity": "sha1-5THCdkTPi1epnhftlbNcdIeJOS4=", + "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 }, - "lodash._getnative": { - "version": "3.9.1", - "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", - "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=", + "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 }, - "lodash._isiterateecall": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", - "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=", + "object-component": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz", + "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=", "dev": true }, - "lodash._reescape": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._reescape/-/lodash._reescape-3.0.0.tgz", - "integrity": "sha1-Kx1vXf4HyKNVdT5fJ/rH8c3hYWo=", + "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.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "object-inspect": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", + "integrity": "sha1-9Pa9GBrXfwBrXs5gvQtvOY/3Smc=", "dev": true }, - "lodash._reevaluate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz", - "integrity": "sha1-WLx0xAZklTrgsSTYBpltrKQx4u0=", + "object-keys": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.12.tgz", + "integrity": "sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag==", "dev": true }, - "lodash._reinterpolate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", - "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=", + "object-path": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/object-path/-/object-path-0.9.2.tgz", + "integrity": "sha1-D9mnT8X60a45aLWGvaXGMr1sBaU=", "dev": true }, - "lodash._root": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._root/-/lodash._root-3.0.1.tgz", - "integrity": "sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI=", + "object-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/object-values/-/object-values-1.0.0.tgz", + "integrity": "sha1-cq+DljARnluYw7AruMJ+MjcVgQU=", "dev": true }, - "lodash.assign": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", - "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=", - "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.0" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "object.assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", + "integrity": "sha1-lovxEA15Vrs8oIbwBvhGs7xACNo=", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.0", + "object-keys": "^1.0.11" + }, + "dependencies": { + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + } + } + }, + "object.defaults": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", + "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=", + "dev": true, + "requires": { + "array-each": "^1.0.1", + "array-slice": "^1.0.0", + "for-own": "^1.0.0", + "isobject": "^3.0.0" + }, + "dependencies": { + "for-own": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", + "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", + "dev": true, + "requires": { + "for-in": "^1.0.1" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "object.getownpropertydescriptors": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz", + "integrity": "sha1-Npvx+VktiridcS3O1cuBx8U1Jkk=", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1" + }, + "dependencies": { + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "requires": { + "object-keys": "^1.0.12" + } + } + } + }, + "object.map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz", + "integrity": "sha1-z4Plncj8wK1fQlDh94s7gb2AHTc=", + "dev": true, + "requires": { + "for-own": "^1.0.0", + "make-iterator": "^1.0.0" + }, + "dependencies": { + "for-own": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", + "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", + "dev": true, + "requires": { + "for-in": "^1.0.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.4", + "is-extendable": "^0.1.1" + } + }, + "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" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } }, - "lodash.clonedeep": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-3.0.2.tgz", - "integrity": "sha1-oKHkDYKl6on/WxR7hETtY9koJ9s=", + "object.values": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.1.tgz", + "integrity": "sha1-aKmezeNWt+kpWjxeDOMdyMlT3l4=", "dev": true, "requires": { - "lodash._baseclone": "^3.0.0", - "lodash._bindcallback": "^3.0.0" + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1", + "function-bind": "^1.1.1", + "has": "^1.0.3" + }, + "dependencies": { + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "requires": { + "object-keys": "^1.0.12" + } + } } }, - "lodash.debounce": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-3.1.1.tgz", - "integrity": "sha1-gSIRw3ipTMKdWqTjNGzwv846ffU=", + "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": { - "lodash._getnative": "^3.0.0" + "ee-first": "1.1.1" } }, - "lodash.escape": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-3.2.0.tgz", - "integrity": "sha1-mV7g3BjBtIzJLv+ucaEKq1tIdpg=", + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, "requires": { - "lodash._root": "^3.0.0" + "wrappy": "1" } }, - "lodash.isarguments": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", - "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=", + "onetime": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", + "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", "dev": true }, - "lodash.isarray": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", - "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=", + "openurl": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/openurl/-/openurl-1.1.1.tgz", + "integrity": "sha1-OHW0sO96UsFW8NtB1GCduw+Us4c=", "dev": true }, - "lodash.isequal": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", - "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=", - "dev": true + "opn": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/opn/-/opn-3.0.3.tgz", + "integrity": "sha1-ttmec5n3jWXDuq/+8fsojpuFJDo=", + "dev": true, + "requires": { + "object-assign": "^4.0.1" + } }, - "lodash.isfinite": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/lodash.isfinite/-/lodash.isfinite-3.3.2.tgz", - "integrity": "sha1-+4m2WpqAKBgz8LdHizpRBPiY67M=", - "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.1", + "wordwrap": "~0.0.2" + }, + "dependencies": { + "minimist": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", + "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=", + "dev": true + }, + "wordwrap": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", + "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", + "dev": true + } + } }, - "lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=", - "dev": true + "optionator": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", + "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", + "dev": true, + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.4", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "wordwrap": "~1.0.0" + } }, - "lodash.isstring": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=", + "options": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/options/-/options-0.0.6.tgz", + "integrity": "sha1-7CLTEoBrtT5zF3Pnza788cZDEo8=", "dev": true }, - "lodash.keys": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", - "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", + "optipng-bin": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/optipng-bin/-/optipng-bin-5.1.0.tgz", + "integrity": "sha1-p8erYAo6taF32uL5TC2ACqOGtak=", "dev": true, + "optional": true, "requires": { - "lodash._getnative": "^3.0.0", - "lodash.isarguments": "^3.0.0", - "lodash.isarray": "^3.0.0" + "bin-build": "^3.0.0", + "bin-wrapper": "^4.0.0", + "logalot": "^2.0.0" } }, - "lodash.mapvalues": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz", - "integrity": "sha1-G6+lAF3p3W9PJmaMMMo3IwzJaJw=", - "dev": true + "orchestrator": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/orchestrator/-/orchestrator-0.3.8.tgz", + "integrity": "sha1-FOfp4nZPcxX7rBhOUGx6pt+UrX4=", + "dev": true, + "requires": { + "end-of-stream": "~0.1.5", + "sequencify": "~0.0.7", + "stream-consume": "~0.1.0" + }, + "dependencies": { + "end-of-stream": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-0.1.5.tgz", + "integrity": "sha1-jhdyBsPICDfYVjLouTWd/osvbq8=", + "dev": true, + "requires": { + "once": "~1.3.0" + } + }, + "once": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz", + "integrity": "sha1-suJhVXzkwxTsgwTz+oJmPkKXyiA=", + "dev": true, + "requires": { + "wrappy": "1" + } + } + } }, - "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 + "ordered-ast-traverse": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ordered-ast-traverse/-/ordered-ast-traverse-1.1.1.tgz", + "integrity": "sha1-aEOhcLwO7otSDMjdwd3TqjD6BXw=", + "dev": true, + "requires": { + "ordered-esprima-props": "~1.1.0" + } }, - "lodash.pad": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/lodash.pad/-/lodash.pad-4.5.1.tgz", - "integrity": "sha1-QzCUmoM6fI2iLMIPaibE1Z3runA=", + "ordered-esprima-props": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ordered-esprima-props/-/ordered-esprima-props-1.1.0.tgz", + "integrity": "sha1-qYJwht9fAQqmDpvQK24DNc6i/8s=", "dev": true }, - "lodash.padend": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/lodash.padend/-/lodash.padend-4.6.1.tgz", - "integrity": "sha1-U8y6BH0G4VjTEfRdpiX05J5vFm4=", - "dev": true + "ordered-read-streams": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-0.3.0.tgz", + "integrity": "sha1-cTfmmzKYuzQiR6G77jiByA4v14s=", + "dev": true, + "requires": { + "is-stream": "^1.0.1", + "readable-stream": "^2.0.1" + } }, - "lodash.padstart": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/lodash.padstart/-/lodash.padstart-4.6.1.tgz", - "integrity": "sha1-0uPuv/DZ05rVD1y9G1KnvOa7YRs=", - "dev": true + "os-filter-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/os-filter-obj/-/os-filter-obj-2.0.0.tgz", + "integrity": "sha1-HAti1fOiRCdJotE55t3e5ugdjRY=", + "dev": true, + "optional": true, + "requires": { + "arch": "^2.1.0" + } }, - "lodash.restparam": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz", - "integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=", - "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=" }, - "lodash.template": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-3.6.2.tgz", - "integrity": "sha1-+M3sxhaaJVvpCYrosMU9N4kx0U8=", + "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": { - "lodash._basecopy": "^3.0.0", - "lodash._basetostring": "^3.0.0", - "lodash._basevalues": "^3.0.0", - "lodash._isiterateecall": "^3.0.0", - "lodash._reinterpolate": "^3.0.0", - "lodash.escape": "^3.0.0", - "lodash.keys": "^3.0.0", - "lodash.restparam": "^3.0.0", - "lodash.templatesettings": "^3.0.0" + "lcid": "^1.0.0" } }, - "lodash.templatesettings": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz", - "integrity": "sha1-+zB4RHU7Zrnxr6VOJix0UwfbqOU=", + "os-name": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/os-name/-/os-name-1.0.3.tgz", + "integrity": "sha1-GzefZINa98Wn9JizV8uVIVwVnt8=", "dev": true, "requires": { - "lodash._reinterpolate": "^3.0.0", - "lodash.escape": "^3.0.0" + "osx-release": "^1.0.0", + "win-release": "^1.0.0" } }, - "lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", + "os-shim": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/os-shim/-/os-shim-0.1.3.tgz", + "integrity": "sha1-a2LDeRz3kJ6jXtRuF2WLtBfLORc=", "dev": true }, - "log-symbols": { + "os-tmpdir": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz", - "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=", + "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.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", "dev": true, "requires": { - "chalk": "^1.0.0" + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" } }, - "log4js": { - "version": "0.6.38", - "resolved": "https://registry.npmjs.org/log4js/-/log4js-0.6.38.tgz", - "integrity": "sha1-LElBFmldb7JUgJQ9P8hy5mKlIv0=", + "osx-release": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/osx-release/-/osx-release-1.1.0.tgz", + "integrity": "sha1-8heRGigTaUmvG/kwiyQeJzfTzWw=", "dev": true, "requires": { - "readable-stream": "~1.0.2", - "semver": "~4.3.3" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "semver": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz", - "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=", - "dev": true - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - } + "minimist": "^1.1.0" } }, - "logalot": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/logalot/-/logalot-2.1.0.tgz", - "integrity": "sha1-X46MkNME7fElMJUaVVSruMXj9VI=", + "p-cancelable": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.3.0.tgz", + "integrity": "sha1-ueEjgAvOu3rBOkeb4ZW1B7mNMPo=", + "dev": true + }, + "p-event": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-event/-/p-event-1.3.0.tgz", + "integrity": "sha1-jmtPT2XHK8W2/ii3XtqHT5akoIU=", "dev": true, "optional": true, "requires": { - "figures": "^1.3.5", - "squeak": "^1.0.0" + "p-timeout": "^1.1.1" } }, - "lolex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/lolex/-/lolex-1.3.2.tgz", - "integrity": "sha1-fD2mL/yzDw9agKJWbKJORdigHzE=", - "dev": true - }, - "longest": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", - "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", "dev": true }, - "loud-rejection": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", - "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", "dev": true, "requires": { - "currently-unhandled": "^0.4.1", - "signal-exit": "^3.0.0" + "p-try": "^1.0.0" } }, - "lower-case": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", - "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=", - "dev": true - }, - "lower-case-first": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/lower-case-first/-/lower-case-first-1.0.2.tgz", - "integrity": "sha1-5dp8JvKacHO+AtUrrJmA5ZIq36E=", + "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": { - "lower-case": "^1.1.2" + "p-limit": "^1.1.0" } }, - "lowercase-keys": { + "p-map-series": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz", - "integrity": "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=", - "dev": true - }, - "lpad-align": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/lpad-align/-/lpad-align-1.1.2.tgz", - "integrity": "sha1-IfYArBwwlcPG5JfuZyce4ISB/p4=", + "resolved": "https://registry.npmjs.org/p-map-series/-/p-map-series-1.0.0.tgz", + "integrity": "sha1-v5j+V1cFZYqeE1G++4WuTB8Hvco=", "dev": true, "optional": true, "requires": { - "get-stdin": "^4.0.1", - "indent-string": "^2.1.0", - "longest": "^1.0.0", - "meow": "^3.3.0" + "p-reduce": "^1.0.0" } }, - "lru-cache": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz", - "integrity": "sha1-Yi4y6CSItJJ5EUpPns9F581rulU=", + "p-pipe": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/p-pipe/-/p-pipe-1.2.0.tgz", + "integrity": "sha1-SxoROZoRUgpneQ7loMHViB1r7+k=", + "dev": true + }, + "p-reduce": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-1.0.0.tgz", + "integrity": "sha1-GMKw3ZNqRpClKfgjH1ig/bakffo=", + "dev": true, + "optional": true + }, + "p-timeout": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-1.2.1.tgz", + "integrity": "sha1-XrOzU7f86Z8QGhA4iAuwVOu+o4Y=", "dev": true, "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" + "p-finally": "^1.0.0" } }, - "macaddress": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/macaddress/-/macaddress-0.2.9.tgz", - "integrity": "sha512-k4F1JUof6cQXxNFzx3thLby4oJzXTXQueAOOts944Vqizn+Rjc2QNFenT9FJSLU1CH3PmrHRSyZs2E+Cqw+P2w==", + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", "dev": true }, - "main-bower-files": { - "version": "2.13.1", - "resolved": "https://registry.npmjs.org/main-bower-files/-/main-bower-files-2.13.1.tgz", - "integrity": "sha1-fhvFxJg1LM7NXfCH8T1fMbwFfT4=", + "package-json": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-2.4.0.tgz", + "integrity": "sha1-DRW9Z9HLvduyyiIv8u24a8sxqLs=", "dev": true, "requires": { - "chalk": "^1.0.0", - "extend": "^2.0.1", - "globby": "^2.0.0", - "multimatch": "^2.0.0", - "path-exists": "^1.0.0", - "strip-json-comments": "^1.0.2", - "vinyl-fs": "^2.4.3" + "got": "^5.0.0", + "registry-auth-token": "^3.0.1", + "registry-url": "^3.0.3", + "semver": "^5.1.0" }, "dependencies": { - "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", - "dev": true + "got": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/got/-/got-5.7.1.tgz", + "integrity": "sha1-X4FjWmHkplifGAVp6k44FoClHzU=", + "dev": true, + "requires": { + "create-error-class": "^3.0.1", + "duplexer2": "^0.1.4", + "is-redirect": "^1.0.0", + "is-retry-allowed": "^1.0.0", + "is-stream": "^1.0.0", + "lowercase-keys": "^1.0.0", + "node-status-codes": "^1.0.0", + "object-assign": "^4.0.1", + "parse-json": "^2.1.0", + "pinkie-promise": "^2.0.0", + "read-all-stream": "^3.0.0", + "readable-stream": "^2.0.5", + "timed-out": "^3.0.0", + "unzip-response": "^1.0.2", + "url-parse-lax": "^1.0.0" + } }, - "extend": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend/-/extend-2.0.1.tgz", - "integrity": "sha1-HugBBonnOV/5RIJByYZSvHWagmA=", + "timed-out": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-3.1.3.tgz", + "integrity": "sha1-lYYL/MXHbCd/j4Mm/Q9bLiDrohc=", "dev": true - }, - "glob": { - "version": "5.0.15", - "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", + } + } + }, + "pad-component": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/pad-component/-/pad-component-0.0.1.tgz", + "integrity": "sha1-rR8izhvw/cDW3dkIrxfzUaQEuKw=", + "dev": true + }, + "param-case": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", + "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=", + "dev": true, + "requires": { + "no-case": "^2.2.0" + } + }, + "parse-filepath": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", + "integrity": "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=", + "dev": true, + "requires": { + "is-absolute": "^1.0.0", + "map-cache": "^0.2.0", + "path-root": "^0.1.1" + }, + "dependencies": { + "is-absolute": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", + "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", "dev": true, "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "is-relative": "^1.0.0", + "is-windows": "^1.0.1" } }, - "globby": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-2.1.0.tgz", - "integrity": "sha1-npGSvNM/Srak+JTl5+qLcTITxII=", + "is-relative": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", + "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", "dev": true, "requires": { - "array-union": "^1.0.1", - "async": "^1.2.1", - "glob": "^5.0.3", - "object-assign": "^3.0.0" + "is-unc-path": "^1.0.0" } - }, - "object-assign": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz", - "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=", - "dev": true - }, - "path-exists": { + } + } + }, + "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.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.0" + }, + "dependencies": { + "is-extglob": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-1.0.0.tgz", - "integrity": "sha1-1aiZjrce83p0w06w2eum6HjuoIE=", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", "dev": true }, - "strip-json-comments": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz", - "integrity": "sha1-HhX7ysl9Pumb8tc7TGVrCCu6+5E=", - "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" + } } } }, - "make-dir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.0.0.tgz", - "integrity": "sha1-l6ARdR6R3YfPre9Ygy67BJNt6Xg=", + "parse-help": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/parse-help/-/parse-help-0.1.1.tgz", + "integrity": "sha1-L035Qud6VYG7qZZ8DD9I5MZtfdo=", + "dev": true, + "requires": { + "execall": "^1.0.0" + } + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", "dev": true, "requires": { - "pify": "^2.3.0" + "error-ex": "^1.2.0" } }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true - }, - "map-obj": { + "parse-node-version": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", - "dev": true + "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", + "integrity": "sha1-4rXb7eAOf6m8NjYH9TMn6LBzGJs=" }, - "map-stream": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.0.6.tgz", - "integrity": "sha1-0u9OuBGihkTHqJiZhcacL91JaCc=", + "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 }, - "marked": { - "version": "0.3.19", - "resolved": "https://registry.npmjs.org/marked/-/marked-0.3.19.tgz", - "integrity": "sha512-ea2eGWOqNxPcXv8dyERdSr/6FmzvWwzjMxpfGB/sbMccXoct+xY+YukPD+QTUZwyvK7BZwcr4m21WBOW41pAkg==", - "dev": true + "parse5": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-1.5.1.tgz", + "integrity": "sha1-m387DeMr543CQBsXVzzK8Pb1nZQ=", + "dev": true, + "optional": true }, - "marked-terminal": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/marked-terminal/-/marked-terminal-1.7.0.tgz", - "integrity": "sha1-yMRgiBx3LHYEtkNnAH7l938SWQQ=", + "parsejson": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/parsejson/-/parsejson-0.0.1.tgz", + "integrity": "sha1-mxDGwNglq1ieaFFTgm3go7oni8w=", "dev": true, "requires": { - "cardinal": "^1.0.0", - "chalk": "^1.1.3", - "cli-table": "^0.3.1", - "lodash.assign": "^4.2.0", - "node-emoji": "^1.4.1" + "better-assert": "~1.0.0" } }, - "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 - }, - "math-random": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.1.tgz", - "integrity": "sha1-izqsWIuKZuSXXjzepn97sylgH6w=", - "dev": true - }, - "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-fs": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/mem-fs/-/mem-fs-1.1.3.tgz", - "integrity": "sha1-uK6NLj/Lb10/kWXBLUVRoGXZicw=", + "parseqs": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.2.tgz", + "integrity": "sha1-nf5wss3aw4i95PNbHyQPpYrb5sc=", "dev": true, "requires": { - "through2": "^2.0.0", - "vinyl": "^1.1.0", - "vinyl-file": "^2.0.0" + "better-assert": "~1.0.0" } }, - "mem-fs-editor": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/mem-fs-editor/-/mem-fs-editor-2.3.0.tgz", - "integrity": "sha1-QqCuH1Xnb9A/CefHsVtjB731yxM=", + "parseuri": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.4.tgz", + "integrity": "sha1-gGWCo5iH4eoY3V4v4OAZAiaOk1A=", "dev": true, "requires": { - "commondir": "^1.0.1", - "deep-extend": "^0.4.0", - "ejs": "^2.3.1", - "glob": "^7.0.3", - "globby": "^4.0.0", - "mkdirp": "^0.5.0", - "multimatch": "^2.0.0", - "rimraf": "^2.2.8", - "through2": "^2.0.0", - "vinyl": "^1.1.0" - }, - "dependencies": { - "globby": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-4.1.0.tgz", - "integrity": "sha1-CA9UVJ7BuCpsYOYx/ILhIR2+lfg=", - "dev": true, - "requires": { - "array-union": "^1.0.1", - "arrify": "^1.0.0", - "glob": "^6.0.1", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "dependencies": { - "glob": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", - "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=", - "dev": true, - "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - } - } - }, - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "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" - } - } + "better-assert": "~1.0.0" } }, - "meow": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", - "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha1-naGee+6NEt/wUT7Vt2lXeTvC6NQ=", + "dev": true + }, + "pascal-case": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-2.0.1.tgz", + "integrity": "sha1-LVeNNFX2YNpl7KGO+VtODekSdh4=", "dev": true, "requires": { - "camelcase-keys": "^2.0.0", - "decamelize": "^1.1.2", - "loud-rejection": "^1.0.0", - "map-obj": "^1.0.1", - "minimist": "^1.1.3", - "normalize-package-data": "^2.3.4", - "object-assign": "^4.0.1", - "read-pkg-up": "^1.0.1", - "redent": "^1.0.0", - "trim-newlines": "^1.0.0" + "camel-case": "^3.0.0", + "upper-case-first": "^1.1.0" } }, - "merge": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/merge/-/merge-1.2.0.tgz", - "integrity": "sha1-dTHjnUlJwoGma4xabgJl6LBYlNo=", + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", "dev": true }, - "merge-stream": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz", - "integrity": "sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=", + "path-case": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/path-case/-/path-case-2.1.1.tgz", + "integrity": "sha1-lLgDfDctP+KQbkZbtF4l0ibo7qU=", "dev": true, "requires": { - "readable-stream": "^2.0.1" + "no-case": "^2.2.0" } }, - "micromatch": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.8.tgz", - "integrity": "sha1-lPv4837Z7eyga/HI97dD+19vWFQ=", + "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": { - "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" + "pinkie-promise": "^2.0.0" } }, - "mime": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", - "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==", + "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 }, - "mime-db": { - "version": "1.27.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.27.0.tgz", - "integrity": "sha1-gg9XIpa70g7CXtVeW13oaeVDbrE=", + "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 }, - "mime-types": { - "version": "2.1.15", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.15.tgz", - "integrity": "sha1-pOv1BkCUVpI3uM9wBGd20J/JKu0=", - "dev": true, - "requires": { - "mime-db": "~1.27.0" - } + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "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-root": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", + "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=", "dev": true, "requires": { - "brace-expansion": "^1.1.7" + "path-root-regex": "^0.1.0" } }, - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "path-root-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", + "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=", "dev": true }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "path-to-regexp": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", + "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", "dev": true, "requires": { - "minimist": "0.0.8" + "isarray": "0.0.1" }, "dependencies": { - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", "dev": true } } }, - "modify-filename": { + "path-type": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/modify-filename/-/modify-filename-1.1.0.tgz", - "integrity": "sha1-mi3sg4Bvuy2XXyK+7IWcoms5OqE=", - "dev": true - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + } }, - "multimatch": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-2.1.0.tgz", - "integrity": "sha1-nHkGoi+0wCkZ4vX3UWG0zb1LKis=", + "pause-stream": { + "version": "0.0.11", + "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", + "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=", "dev": true, "requires": { - "array-differ": "^1.0.0", - "array-union": "^1.0.1", - "arrify": "^1.0.0", - "minimatch": "^3.0.0" + "through": "~2.3" } }, - "multipipe": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/multipipe/-/multipipe-0.1.2.tgz", - "integrity": "sha1-Ko8t33Du1WTf8tV/HhoTfZ8FB4s=", + "pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", + "dev": true + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true + }, + "phantomjs-prebuilt": { + "version": "2.1.16", + "resolved": "https://registry.npmjs.org/phantomjs-prebuilt/-/phantomjs-prebuilt-2.1.16.tgz", + "integrity": "sha1-79ISpKOWbTZHaE6ouniFSb4q7+8=", "dev": true, "requires": { - "duplexer2": "0.0.2" + "es6-promise": "^4.0.3", + "extract-zip": "^1.6.5", + "fs-extra": "^1.0.0", + "hasha": "^2.2.0", + "kew": "^0.7.0", + "progress": "^1.1.8", + "request": "^2.81.0", + "request-progress": "^2.0.1", + "which": "^1.2.10" }, "dependencies": { - "duplexer2": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz", - "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=", + "ajv": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", + "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", "dev": true, "requires": { - "readable-stream": "~1.1.9" + "co": "^4.6.0", + "fast-deep-equal": "^1.0.0", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.3.0" } }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", "dev": true }, - "readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "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 + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "dev": true + }, + "form-data": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz", + "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", "dev": true, "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" + "asynckit": "^0.4.0", + "combined-stream": "1.0.6", + "mime-types": "^2.1.12" + }, + "dependencies": { + "combined-stream": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", + "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", + "dev": true, + "requires": { + "delayed-stream": "~1.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=", + "fs-extra": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-1.0.0.tgz", + "integrity": "sha1-zTzl9+fLYUWIP8rjGR6Yd/hYeVA=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^2.1.0", + "klaw": "^1.0.0" + } + }, + "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.1.0", + "har-schema": "^2.0.0" + } + }, + "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.2.2", + "sshpk": "^1.7.0" + } + }, + "jsonfile": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", + "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "mime-db": { + "version": "1.35.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.35.0.tgz", + "integrity": "sha512-JWT/IcCTsB0Io3AhWUMjRqucrHSPsSf2xKLaRldJVULioggvkJvggZ3VXNNSRkCddE6D+BUI4HEIZIA2OjwIvg==", "dev": true - } - } - }, - "mute-stream": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.5.tgz", - "integrity": "sha1-j7+rsKmKJT0xhDMfno3rc3L6xsA=", - "dev": true - }, - "nan": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz", - "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==", - "dev": true, - "optional": true - }, - "natives": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/natives/-/natives-1.1.0.tgz", - "integrity": "sha1-6f+EFBimsux6SV6TmYT3jxY+bjE=", - "dev": true + }, + "mime-types": { + "version": "2.1.19", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.19.tgz", + "integrity": "sha512-P1tKYHVSZ6uFo26mtnve4HQFE3koh1UWVkp8YUC+ESBHe945xWSoXuHHiGarDqcEZ+whpCDnlNw5LON0kLo+sw==", + "dev": true, + "requires": { + "mime-db": "~1.35.0" + } + }, + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "dev": true + }, + "request": { + "version": "2.87.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.87.0.tgz", + "integrity": "sha512-fcogkm7Az5bsS6Sl0sibkbhcKsnyon/jV1kF3ajGmF0c8HrttdKTPRT9hieOaQHA5HEq6r8OyWOo/o781C1tNw==", + "dev": true, + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.6.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.5", + "extend": "~3.0.1", + "forever-agent": "~0.6.1", + "form-data": "~2.3.1", + "har-validator": "~5.0.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.17", + "oauth-sign": "~0.8.2", + "performance-now": "^2.1.0", + "qs": "~6.5.1", + "safe-buffer": "^5.1.1", + "tough-cookie": "~2.3.3", + "tunnel-agent": "^0.6.0", + "uuid": "^3.1.0" + } + }, + "tough-cookie": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", + "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", + "dev": true, + "requires": { + "punycode": "^1.4.1" + } + }, + "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.0.1" + } + }, + "uuid": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", + "dev": true + } + } }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", "dev": true }, - "natural-compare-lite": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", - "integrity": "sha1-F7CVgZiJef3a/gIB6TG6kzyWy7Q=", + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", "dev": true }, - "ncname": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/ncname/-/ncname-1.0.0.tgz", - "integrity": "sha1-W1etGLHKCShk72Kwse2BlPODtxw=", + "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": { - "xml-char-classes": "^1.0.0" + "pinkie": "^2.0.0" } }, - "negotiator": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", - "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=", - "dev": true - }, - "ng-annotate": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/ng-annotate/-/ng-annotate-1.2.2.tgz", - "integrity": "sha1-3D/FG6Cy+LOF2+BH9NoG9YCh/WE=", + "plugin-error": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-1.0.1.tgz", + "integrity": "sha1-dwFr2JGdCsN3/c3QMiMolTyleBw=", "dev": true, "requires": { - "acorn": "~2.6.4", - "alter": "~0.2.0", - "convert-source-map": "~1.1.2", - "optimist": "~0.6.1", - "ordered-ast-traverse": "~1.1.1", - "simple-fmt": "~0.1.0", - "simple-is": "~0.2.0", - "source-map": "~0.5.3", - "stable": "~0.1.5", - "stringmap": "~0.2.2", - "stringset": "~0.2.1", - "tryor": "~0.1.2" + "ansi-colors": "^1.0.1", + "arr-diff": "^4.0.0", + "arr-union": "^3.1.0", + "extend-shallow": "^3.0.2" }, "dependencies": { - "acorn": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-2.6.4.tgz", - "integrity": "sha1-6x9FtKQ/ox0DcBpexG87Umc+kO4=", + "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 }, - "convert-source-map": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz", - "integrity": "sha1-SCnId+n+SbMWHzvzZziI4gRpmGA=", - "dev": true + "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" + } }, - "source-map": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", - "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=", - "dev": true - } - } - }, - "ng-dependencies": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/ng-dependencies/-/ng-dependencies-0.8.1.tgz", - "integrity": "sha1-GP1jMscC4PPjdKNv4e1FXGdSu2g=", - "dev": true, - "requires": { - "esprima": "^2.6.0", - "estraverse": "^4.2.0", - "lodash": "^4.0.0" - }, - "dependencies": { - "estraverse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", - "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", + "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" + } + }, + "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" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true } } }, - "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.1" - } - }, - "node": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/node/-/node-12.1.0.tgz", - "integrity": "sha512-WhAwVIfjIuvuuMT660SxCB6yltqxbJyH9eTUDN4Vd7qxjZpS2o2a1zjf8P8o6tObYgkbvXoTSxSCb7uHOH2clg==", - "requires": { - "node-bin-setup": "^1.0.0" - } - }, - "node-bin-setup": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/node-bin-setup/-/node-bin-setup-1.0.6.tgz", - "integrity": "sha512-uPIxXNis1CRbv1DwqAxkgBk5NFV3s7cMN/Gf556jSw6jBvV7ca4F9lRL/8cALcZecRibeqU+5dFYqFFmzv5a0Q==" - }, - "node-emoji": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.5.1.tgz", - "integrity": "sha1-/ZGOQSdpv4xEgFEjgjOECyr/FqE=", - "dev": true, - "requires": { - "string.prototype.codepointat": "^0.2.0" - } - }, - "node-notifier": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-4.6.1.tgz", - "integrity": "sha1-BW0UJE89zBzq3+aK+c/wxUc6M/M=", + "plur": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/plur/-/plur-3.1.1.tgz", + "integrity": "sha1-YCZ5Z4ZqjYEVBP5Y8vqrojdUals=", "dev": true, "requires": { - "cli-usage": "^0.1.1", - "growly": "^1.2.0", - "lodash.clonedeep": "^3.0.0", - "minimist": "^1.1.1", - "semver": "^5.1.0", - "shellwords": "^0.1.0", - "which": "^1.0.5" + "irregular-plurals": "^2.0.0" } }, - "node-status-codes": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-status-codes/-/node-status-codes-1.0.0.tgz", - "integrity": "sha1-WuVUHQJGRdMqWPzdyc7s6nrjrC8=", - "dev": true - }, - "node-uuid": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.8.tgz", - "integrity": "sha1-sEDrCSOWivq/jTL7HxfxFn/auQc=", + "pluralize": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-2.0.0.tgz", + "integrity": "sha1-crcmqm+sHt7uQiVsfY3CVrM1Z38=", "dev": true }, - "node.extend": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/node.extend/-/node.extend-1.1.6.tgz", - "integrity": "sha1-p7iCyC1sk6SGOlUEvV3o7IYli5Y=", - "dev": true, - "requires": { - "is": "^3.1.0" - } - }, - "nopt": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", - "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", - "dev": true, - "requires": { - "abbrev": "1" - } - }, - "normalize-package-data": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", - "integrity": "sha1-EvlaMH1YNSB1oEkHuErIvpisAS8=", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "is-builtin-module": "^1.0.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "normalize-path": { + "portscanner": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "resolved": "https://registry.npmjs.org/portscanner/-/portscanner-2.1.1.tgz", + "integrity": "sha1-6rtAnk3iSVD1oqUW01rnaTQ/u5Y=", "dev": true, "requires": { - "remove-trailing-separator": "^1.0.1" + "async": "1.5.2", + "is-number-like": "^1.0.3" + }, + "dependencies": { + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "dev": true + } } }, - "normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", + "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 }, - "normalize-url": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz", - "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=", - "dev": true, - "requires": { - "object-assign": "^4.0.1", - "prepend-http": "^1.0.0", - "query-string": "^4.1.0", - "sort-keys": "^1.0.0" - } - }, - "now-and-later": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-2.0.0.tgz", - "integrity": "sha1-vGHLtFbXnLMiB85HygUTb/Ln1u4=", - "dev": true, - "requires": { - "once": "^1.3.2" - } - }, - "npm-keyword": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/npm-keyword/-/npm-keyword-4.2.0.tgz", - "integrity": "sha1-mP/r/bsTNvJ+9f4brKDcrNCs9sA=", - "dev": true, - "requires": { - "got": "^5.0.0", - "object-assign": "^4.0.1", - "pinkie-promise": "^2.0.0", - "registry-url": "^3.0.3" - } - }, - "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=", + "postcss": { + "version": "5.2.17", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.17.tgz", + "integrity": "sha1-z09Ze4ZNZcikkrLqvp1wbIecOIs=", "dev": true, - "optional": true, "requires": { - "path-key": "^2.0.0" + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + }, + "dependencies": { + "source-map": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", + "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=", + "dev": true + }, + "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" + } + } } }, - "npmconf": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/npmconf/-/npmconf-2.1.2.tgz", - "integrity": "sha1-ZmBqSnNvHnegWaoHGnnJSreBhTo=", + "postcss-calc": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.1.tgz", + "integrity": "sha1-Ntd7qwI7Dsu5eJ2E3LI8SUEUVDY=", "dev": true, "requires": { - "config-chain": "~1.1.8", - "inherits": "~2.0.0", - "ini": "^1.2.0", - "mkdirp": "^0.5.0", - "nopt": "~3.0.1", - "once": "~1.3.0", - "osenv": "^0.1.0", - "semver": "2 || 3 || 4", - "uid-number": "0.0.5" + "css-unit-converter": "^1.1.1", + "postcss": "^7.0.5", + "postcss-selector-parser": "^5.0.0-rc.4", + "postcss-value-parser": "^3.3.1" }, "dependencies": { - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "requires": { - "minimist": "0.0.8" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } } }, - "once": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz", - "integrity": "sha1-suJhVXzkwxTsgwTz+oJmPkKXyiA=", + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "postcss": { + "version": "7.0.26", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.26.tgz", + "integrity": "sha1-XtYVz8qzW6m7uCQUpPqI6hBClYc=", "dev": true, "requires": { - "wrappy": "1" + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" } }, - "semver": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz", - "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=", + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } } } }, - "npmlog": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-2.0.4.tgz", - "integrity": "sha1-mLUlMPJRTKkNCexbIsiEZyI3VpI=", + "postcss-colormin": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz", + "integrity": "sha1-rgYLzpPteUrHEmTwgTLVUJVr04E=", "dev": true, "requires": { - "ansi": "~0.3.1", - "are-we-there-yet": "~1.1.2", - "gauge": "~1.2.5" + "browserslist": "^4.0.0", + "color": "^3.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "browserslist": { + "version": "4.8.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.8.3.tgz", + "integrity": "sha512-iU43cMMknxG1ClEZ2MDKeonKE1CCrFVkQK2AqO2YWFmvIrx4JWrvQ4w4hQez6EpVI8rHTtqh/ruHHDHSOKxvUg==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001017", + "electron-to-chromium": "^1.3.322", + "node-releases": "^1.1.44" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "electron-to-chromium": { + "version": "1.3.336", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.336.tgz", + "integrity": "sha512-FtazvnXAizSVMxQNPqUcTv2UElY5r3uRPQwiU1Tyg/Yc2UFr+/3wqDoLIV9ES6ablW3IrCcR8uEK2ppxaNPWhw==", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "postcss": { + "version": "7.0.26", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.26.tgz", + "integrity": "sha1-XtYVz8qzW6m7uCQUpPqI6hBClYc=", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } } }, - "nth-check": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.1.tgz", - "integrity": "sha1-mSms32KPwsQQmN6rgqxYDPFJquQ=", + "postcss-convert-values": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz", + "integrity": "sha1-yjgT7U2g+BL51DcDWE5Enr4Ymn8=", "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 - }, - "nwmatcher": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/nwmatcher/-/nwmatcher-1.4.1.tgz", - "integrity": "sha1-eumwew6oBNt+JfBctf5Al9TklJ8=", - "dev": true, - "optional": 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-keys": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.12.tgz", - "integrity": "sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag==", - "dev": true - }, - "object-path": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/object-path/-/object-path-0.9.2.tgz", - "integrity": "sha1-D9mnT8X60a45aLWGvaXGMr1sBaU=", - "dev": true - }, - "object-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/object-values/-/object-values-1.0.0.tgz", - "integrity": "sha1-cq+DljARnluYw7AruMJ+MjcVgQU=", - "dev": true + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "postcss": { + "version": "7.0.26", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.26.tgz", + "integrity": "sha1-XtYVz8qzW6m7uCQUpPqI6hBClYc=", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } }, - "object.assign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", - "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "postcss-discard-comments": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz", + "integrity": "sha1-H7q9LCRr/2qq15l7KwkY9NevQDM=", "dev": true, "requires": { - "define-properties": "^1.1.2", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.0", - "object-keys": "^1.0.11" + "postcss": "^7.0.0" }, "dependencies": { - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true + }, + "postcss": { + "version": "7.0.26", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.26.tgz", + "integrity": "sha1-XtYVz8qzW6m7uCQUpPqI6hBClYc=", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } } } }, - "object.defaults": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", - "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=", + "postcss-discard-duplicates": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz", + "integrity": "sha1-P+EzzTyCKC5VD8myORdqkge3hOs=", "dev": true, "requires": { - "array-each": "^1.0.1", - "array-slice": "^1.0.0", - "for-own": "^1.0.0", - "isobject": "^3.0.0" + "postcss": "^7.0.0" }, "dependencies": { - "for-own": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", - "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { - "for-in": "^1.0.1" + "color-convert": "^1.9.0" } }, - "isobject": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "has-flag": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.0.tgz", - "integrity": "sha1-OVZSF/NmF4nooKDAgNX35rxG4aA=", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true + }, + "postcss": { + "version": "7.0.26", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.26.tgz", + "integrity": "sha1-XtYVz8qzW6m7uCQUpPqI6hBClYc=", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } } } }, - "object.omit": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", - "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", - "dev": true, - "requires": { - "for-own": "^0.1.4", - "is-extendable": "^0.1.1" - } - }, - "object.pick": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.2.0.tgz", - "integrity": "sha1-tTkr7peC2m2ft9avr1OXefEjTCs=", - "dev": true, - "requires": { - "isobject": "^2.1.0" - } - }, - "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "dev": true, - "requires": { - "ee-first": "1.1.1" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", - "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", - "dev": true - }, - "openurl": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/openurl/-/openurl-1.1.1.tgz", - "integrity": "sha1-OHW0sO96UsFW8NtB1GCduw+Us4c=", - "dev": true - }, - "opn": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/opn/-/opn-3.0.3.tgz", - "integrity": "sha1-ttmec5n3jWXDuq/+8fsojpuFJDo=", - "dev": true, - "requires": { - "object-assign": "^4.0.1" - } - }, - "optimist": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", - "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", + "postcss-discard-empty": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz", + "integrity": "sha1-yMlR6fc+2UKAGUWERKAq2Qu592U=", "dev": true, "requires": { - "minimist": "~0.0.1", - "wordwrap": "~0.0.2" + "postcss": "^7.0.0" }, "dependencies": { - "minimist": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", - "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=", - "dev": true + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } }, - "wordwrap": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", - "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true + }, + "postcss": { + "version": "7.0.26", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.26.tgz", + "integrity": "sha1-XtYVz8qzW6m7uCQUpPqI6hBClYc=", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } } } - }, - "optionator": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", - "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", - "dev": true, - "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.4", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "wordwrap": "~1.0.0" - } - }, - "options": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/options/-/options-0.0.6.tgz", - "integrity": "sha1-7CLTEoBrtT5zF3Pnza788cZDEo8=", - "dev": true - }, - "optipng-bin": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/optipng-bin/-/optipng-bin-3.1.4.tgz", - "integrity": "sha1-ldNPLEiHBPb9cGBr/qDGWfHZXYQ=", - "dev": true, - "optional": true, - "requires": { - "bin-build": "^2.0.0", - "bin-wrapper": "^3.0.0", - "logalot": "^2.0.0" - } - }, - "orchestrator": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/orchestrator/-/orchestrator-0.3.8.tgz", - "integrity": "sha1-FOfp4nZPcxX7rBhOUGx6pt+UrX4=", + }, + "postcss-discard-overridden": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz", + "integrity": "sha1-ZSrvipZybwKfXj4AFG7npOdV/1c=", "dev": true, "requires": { - "end-of-stream": "~0.1.5", - "sequencify": "~0.0.7", - "stream-consume": "~0.1.0" + "postcss": "^7.0.0" }, "dependencies": { - "end-of-stream": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-0.1.5.tgz", - "integrity": "sha1-jhdyBsPICDfYVjLouTWd/osvbq8=", + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { - "once": "~1.3.0" + "color-convert": "^1.9.0" } }, - "once": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz", - "integrity": "sha1-suJhVXzkwxTsgwTz+oJmPkKXyiA=", + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "requires": { - "wrappy": "1" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "postcss": { + "version": "7.0.26", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.26.tgz", + "integrity": "sha1-XtYVz8qzW6m7uCQUpPqI6hBClYc=", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=", + "dev": true, + "requires": { + "has-flag": "^3.0.0" } } } }, - "ordered-ast-traverse": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ordered-ast-traverse/-/ordered-ast-traverse-1.1.1.tgz", - "integrity": "sha1-aEOhcLwO7otSDMjdwd3TqjD6BXw=", - "dev": true, - "requires": { - "ordered-esprima-props": "~1.1.0" - } - }, - "ordered-esprima-props": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ordered-esprima-props/-/ordered-esprima-props-1.1.0.tgz", - "integrity": "sha1-qYJwht9fAQqmDpvQK24DNc6i/8s=", - "dev": true - }, - "ordered-read-streams": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-0.3.0.tgz", - "integrity": "sha1-cTfmmzKYuzQiR6G77jiByA4v14s=", - "dev": true, - "requires": { - "is-stream": "^1.0.1", - "readable-stream": "^2.0.1" - } - }, - "os-filter-obj": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/os-filter-obj/-/os-filter-obj-1.0.3.tgz", - "integrity": "sha1-WRUzDZDs7VV9LZOKMcbdIU2cY60=", - "dev": true, - "optional": true - }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" - }, - "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-name": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/os-name/-/os-name-1.0.3.tgz", - "integrity": "sha1-GzefZINa98Wn9JizV8uVIVwVnt8=", - "dev": true, - "requires": { - "osx-release": "^1.0.0", - "win-release": "^1.0.0" - } - }, - "os-shim": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/os-shim/-/os-shim-0.1.3.tgz", - "integrity": "sha1-a2LDeRz3kJ6jXtRuF2WLtBfLORc=", - "dev": true - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "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.0", - "os-tmpdir": "^1.0.0" - } - }, - "osx-release": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/osx-release/-/osx-release-1.1.0.tgz", - "integrity": "sha1-8heRGigTaUmvG/kwiyQeJzfTzWw=", - "dev": true, - "requires": { - "minimist": "^1.1.0" - } - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true, - "optional": true - }, - "p-pipe": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-pipe/-/p-pipe-1.1.0.tgz", - "integrity": "sha1-Lp3HzFfOZ9LOLbNIygPyhzGFQHU=", - "dev": true - }, - "package-json": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-2.4.0.tgz", - "integrity": "sha1-DRW9Z9HLvduyyiIv8u24a8sxqLs=", + "postcss-merge-longhand": { + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz", + "integrity": "sha1-YvSaE+Sg7gTnuY9CuxYGLKJUniQ=", "dev": true, "requires": { - "got": "^5.0.0", - "registry-auth-token": "^3.0.1", - "registry-url": "^3.0.3", - "semver": "^5.1.0" + "css-color-names": "0.0.4", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "stylehacks": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "postcss": { + "version": "7.0.26", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.26.tgz", + "integrity": "sha1-XtYVz8qzW6m7uCQUpPqI6hBClYc=", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } } }, - "pad-component": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/pad-component/-/pad-component-0.0.1.tgz", - "integrity": "sha1-rR8izhvw/cDW3dkIrxfzUaQEuKw=", - "dev": true - }, - "param-case": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", - "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=", + "postcss-merge-rules": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz", + "integrity": "sha1-NivqT/Wh+Y5AdacTxsslrv75plA=", "dev": true, "requires": { - "no-case": "^2.2.0" + "browserslist": "^4.0.0", + "caniuse-api": "^3.0.0", + "cssnano-util-same-parent": "^4.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0", + "vendors": "^1.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "browserslist": { + "version": "4.8.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.8.3.tgz", + "integrity": "sha512-iU43cMMknxG1ClEZ2MDKeonKE1CCrFVkQK2AqO2YWFmvIrx4JWrvQ4w4hQez6EpVI8rHTtqh/ruHHDHSOKxvUg==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001017", + "electron-to-chromium": "^1.3.322", + "node-releases": "^1.1.44" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "electron-to-chromium": { + "version": "1.3.336", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.336.tgz", + "integrity": "sha512-FtazvnXAizSVMxQNPqUcTv2UElY5r3uRPQwiU1Tyg/Yc2UFr+/3wqDoLIV9ES6ablW3IrCcR8uEK2ppxaNPWhw==", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "postcss": { + "version": "7.0.26", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.26.tgz", + "integrity": "sha1-XtYVz8qzW6m7uCQUpPqI6hBClYc=", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "postcss-selector-parser": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz", + "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=", + "dev": true, + "requires": { + "dot-prop": "^4.1.1", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } } }, - "parse-filepath": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.1.tgz", - "integrity": "sha1-FZ1hVdQ5BNFsEO9piRHaHpGWm3M=", + "postcss-minify-font-values": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz", + "integrity": "sha1-zUw0TM5HQ0P6xdgiBqssvLiv1aY=", "dev": true, "requires": { - "is-absolute": "^0.2.3", - "map-cache": "^0.2.0", - "path-root": "^0.1.1" + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" }, "dependencies": { - "is-absolute": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-0.2.6.tgz", - "integrity": "sha1-IN5p89uULvLYe5wto28XIjWxtes=", + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { - "is-relative": "^0.2.1", - "is-windows": "^0.2.0" + "color-convert": "^1.9.0" } }, - "is-relative": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-0.2.1.tgz", - "integrity": "sha1-0n9MfVFtF1+2ENuEu+7yPDvJeqU=", + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "postcss": { + "version": "7.0.26", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.26.tgz", + "integrity": "sha1-XtYVz8qzW6m7uCQUpPqI6hBClYc=", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=", "dev": true, "requires": { - "is-unc-path": "^0.1.1" + "has-flag": "^3.0.0" } } } }, - "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.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.0" - } - }, - "parse-help": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/parse-help/-/parse-help-0.1.1.tgz", - "integrity": "sha1-L035Qud6VYG7qZZ8DD9I5MZtfdo=", - "dev": true, - "requires": { - "execall": "^1.0.0" - } - }, - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true, - "requires": { - "error-ex": "^1.2.0" - } - }, - "parse-node-version": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", - "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==" - }, - "parse-passwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", - "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", - "dev": true - }, - "parse5": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-1.5.1.tgz", - "integrity": "sha1-m387DeMr543CQBsXVzzK8Pb1nZQ=", - "dev": true, - "optional": true - }, - "parsejson": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/parsejson/-/parsejson-0.0.1.tgz", - "integrity": "sha1-mxDGwNglq1ieaFFTgm3go7oni8w=", - "dev": true, - "requires": { - "better-assert": "~1.0.0" - } - }, - "parseqs": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.2.tgz", - "integrity": "sha1-nf5wss3aw4i95PNbHyQPpYrb5sc=", - "dev": true, - "requires": { - "better-assert": "~1.0.0" - } - }, - "parseuri": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.4.tgz", - "integrity": "sha1-gGWCo5iH4eoY3V4v4OAZAiaOk1A=", - "dev": true, - "requires": { - "better-assert": "~1.0.0" - } - }, - "parseurl": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.1.tgz", - "integrity": "sha1-yKuMkiO6NIiKpkopeyiFO+wY2lY=", - "dev": true - }, - "pascal-case": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-2.0.1.tgz", - "integrity": "sha1-LVeNNFX2YNpl7KGO+VtODekSdh4=", - "dev": true, - "requires": { - "camel-case": "^3.0.0", - "upper-case-first": "^1.1.0" - } - }, - "path-case": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/path-case/-/path-case-2.1.1.tgz", - "integrity": "sha1-lLgDfDctP+KQbkZbtF4l0ibo7qU=", - "dev": true, - "requires": { - "no-case": "^2.2.0" - } - }, - "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=", + "postcss-minify-gradients": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz", + "integrity": "sha1-k7KcL/UJnFNe7NpWxKpuZlpmNHE=", "dev": true, "requires": { - "pinkie-promise": "^2.0.0" + "cssnano-util-get-arguments": "^4.0.0", + "is-color-stop": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "postcss": { + "version": "7.0.26", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.26.tgz", + "integrity": "sha1-XtYVz8qzW6m7uCQUpPqI6hBClYc=", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } } }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", - "dev": true - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true, - "optional": 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-root": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", - "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=", + "postcss-minify-params": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz", + "integrity": "sha1-a5zvAwwR41Jh+V9hjJADbWgNuHQ=", "dev": true, "requires": { - "path-root-regex": "^0.1.0" + "alphanum-sort": "^1.0.0", + "browserslist": "^4.0.0", + "cssnano-util-get-arguments": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "uniqs": "^2.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "browserslist": { + "version": "4.8.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.8.3.tgz", + "integrity": "sha512-iU43cMMknxG1ClEZ2MDKeonKE1CCrFVkQK2AqO2YWFmvIrx4JWrvQ4w4hQez6EpVI8rHTtqh/ruHHDHSOKxvUg==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001017", + "electron-to-chromium": "^1.3.322", + "node-releases": "^1.1.44" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "electron-to-chromium": { + "version": "1.3.336", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.336.tgz", + "integrity": "sha512-FtazvnXAizSVMxQNPqUcTv2UElY5r3uRPQwiU1Tyg/Yc2UFr+/3wqDoLIV9ES6ablW3IrCcR8uEK2ppxaNPWhw==", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "postcss": { + "version": "7.0.26", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.26.tgz", + "integrity": "sha1-XtYVz8qzW6m7uCQUpPqI6hBClYc=", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } } }, - "path-root-regex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", - "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=", - "dev": true - }, - "path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "postcss-minify-selectors": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz", + "integrity": "sha1-4uXrQL/uUA0M2SQ1APX46kJi+9g=", "dev": true, "requires": { - "graceful-fs": "^4.1.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" + "alphanum-sort": "^1.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "postcss": { + "version": "7.0.26", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.26.tgz", + "integrity": "sha1-XtYVz8qzW6m7uCQUpPqI6hBClYc=", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "postcss-selector-parser": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz", + "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=", + "dev": true, + "requires": { + "dot-prop": "^4.1.1", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } } }, - "pause-stream": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", - "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=", + "postcss-normalize-charset": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz", + "integrity": "sha1-izWt067oOhNrBHHg1ZvlilAoXdQ=", "dev": true, "requires": { - "through": "~2.3" + "postcss": "^7.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "postcss": { + "version": "7.0.26", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.26.tgz", + "integrity": "sha1-XtYVz8qzW6m7uCQUpPqI6hBClYc=", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } } }, - "pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", - "dev": true - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true - }, - "phantomjs-prebuilt": { - "version": "2.1.16", - "resolved": "https://registry.npmjs.org/phantomjs-prebuilt/-/phantomjs-prebuilt-2.1.16.tgz", - "integrity": "sha1-79ISpKOWbTZHaE6ouniFSb4q7+8=", + "postcss-normalize-display-values": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz", + "integrity": "sha1-Db4EpM6QY9RmftK+R2u4MMglk1o=", "dev": true, "requires": { - "es6-promise": "^4.0.3", - "extract-zip": "^1.6.5", - "fs-extra": "^1.0.0", - "hasha": "^2.2.0", - "kew": "^0.7.0", - "progress": "^1.1.8", - "request": "^2.81.0", - "request-progress": "^2.0.1", - "which": "^1.2.10" + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" }, "dependencies": { - "ajv": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", - "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { - "co": "^4.6.0", - "fast-deep-equal": "^1.0.0", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.3.0" + "color-convert": "^1.9.0" } }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "dev": true + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", - "dev": true + "postcss": { + "version": "7.0.26", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.26.tgz", + "integrity": "sha1-XtYVz8qzW6m7uCQUpPqI6hBClYc=", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } }, - "form-data": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz", - "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-normalize-positions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz", + "integrity": "sha1-BfdX+E8mBDc3g2ipH4ky1LECkX8=", + "dev": true, + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "requires": { - "asynckit": "^0.4.0", - "combined-stream": "1.0.6", - "mime-types": "^2.1.12" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" }, "dependencies": { - "combined-stream": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", - "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "requires": { - "delayed-stream": "~1.0.0" + "has-flag": "^3.0.0" } } } }, - "fs-extra": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-1.0.0.tgz", - "integrity": "sha1-zTzl9+fLYUWIP8rjGR6Yd/hYeVA=", + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "postcss": { + "version": "7.0.26", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.26.tgz", + "integrity": "sha1-XtYVz8qzW6m7uCQUpPqI6hBClYc=", "dev": true, "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^2.1.0", - "klaw": "^1.0.0" + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" } }, - "har-validator": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz", - "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=", "dev": true, "requires": { - "ajv": "^5.1.0", - "har-schema": "^2.0.0" + "has-flag": "^3.0.0" } - }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + } + } + }, + "postcss-normalize-repeat-style": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz", + "integrity": "sha1-xOu8KJ85kaAo1EdRy90RkYsXkQw=", + "dev": true, + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" + "color-convert": "^1.9.0" } }, - "jsonfile": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", - "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "requires": { - "graceful-fs": "^4.1.6" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } } }, - "mime-db": { - "version": "1.35.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.35.0.tgz", - "integrity": "sha512-JWT/IcCTsB0Io3AhWUMjRqucrHSPsSf2xKLaRldJVULioggvkJvggZ3VXNNSRkCddE6D+BUI4HEIZIA2OjwIvg==", + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, - "mime-types": { - "version": "2.1.19", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.19.tgz", - "integrity": "sha512-P1tKYHVSZ6uFo26mtnve4HQFE3koh1UWVkp8YUC+ESBHe945xWSoXuHHiGarDqcEZ+whpCDnlNw5LON0kLo+sw==", + "postcss": { + "version": "7.0.26", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.26.tgz", + "integrity": "sha1-XtYVz8qzW6m7uCQUpPqI6hBClYc=", "dev": true, "requires": { - "mime-db": "~1.35.0" + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" } }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", - "dev": true - }, - "request": { - "version": "2.87.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.87.0.tgz", - "integrity": "sha512-fcogkm7Az5bsS6Sl0sibkbhcKsnyon/jV1kF3ajGmF0c8HrttdKTPRT9hieOaQHA5HEq6r8OyWOo/o781C1tNw==", + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=", "dev": true, "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.6.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.5", - "extend": "~3.0.1", - "forever-agent": "~0.6.1", - "form-data": "~2.3.1", - "har-validator": "~5.0.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.17", - "oauth-sign": "~0.8.2", - "performance-now": "^2.1.0", - "qs": "~6.5.1", - "safe-buffer": "^5.1.1", - "tough-cookie": "~2.3.3", - "tunnel-agent": "^0.6.0", - "uuid": "^3.1.0" + "has-flag": "^3.0.0" } - }, - "tough-cookie": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", - "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", + } + } + }, + "postcss-normalize-string": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz", + "integrity": "sha1-zUTECrB6DHo23F6Zqs4eyk7CaQw=", + "dev": true, + "requires": { + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { - "punycode": "^1.4.1" + "color-convert": "^1.9.0" } }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "requires": { - "safe-buffer": "^5.0.1" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } } }, - "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true + }, + "postcss": { + "version": "7.0.26", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.26.tgz", + "integrity": "sha1-XtYVz8qzW6m7uCQUpPqI6hBClYc=", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } } } }, - "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.0" - } - }, - "plugin-error": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-1.0.1.tgz", - "integrity": "sha512-L1zP0dk7vGweZME2i+EeakvUNqSrdiI3F91TwEoYiGrAfUXmVv6fJIq4g82PAXxNsWOp0J7ZqQy/3Szz0ajTxA==", + "postcss-normalize-timing-functions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz", + "integrity": "sha1-jgCcoqOUnNr4rSPmtquZy159KNk=", "dev": true, "requires": { - "ansi-colors": "^1.0.1", - "arr-diff": "^4.0.0", - "arr-union": "^3.1.0", - "extend-shallow": "^3.0.2" + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" }, "dependencies": { - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "postcss": { + "version": "7.0.26", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.26.tgz", + "integrity": "sha1-XtYVz8qzW6m7uCQUpPqI6hBClYc=", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-normalize-unicode": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz", + "integrity": "sha1-hBvUj9zzAZrUuqdJOj02O1KuHPs=", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" + "color-convert": "^1.9.0" } }, - "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==", + "browserslist": { + "version": "4.8.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.8.3.tgz", + "integrity": "sha512-iU43cMMknxG1ClEZ2MDKeonKE1CCrFVkQK2AqO2YWFmvIrx4JWrvQ4w4hQez6EpVI8rHTtqh/ruHHDHSOKxvUg==", "dev": true, "requires": { - "is-plain-object": "^2.0.4" + "caniuse-lite": "^1.0.30001017", + "electron-to-chromium": "^1.3.322", + "node-releases": "^1.1.44" } }, - "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==", + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "requires": { - "isobject": "^3.0.1" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } } }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "electron-to-chromium": { + "version": "1.3.336", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.336.tgz", + "integrity": "sha512-FtazvnXAizSVMxQNPqUcTv2UElY5r3uRPQwiU1Tyg/Yc2UFr+/3wqDoLIV9ES6ablW3IrCcR8uEK2ppxaNPWhw==", "dev": true - } - } - }, - "plur": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/plur/-/plur-2.1.2.tgz", - "integrity": "sha1-dIJFLBoPUI4+NE6uwxLJHCncZVo=", - "dev": true, - "requires": { - "irregular-plurals": "^1.0.0" - } - }, - "pluralize": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-2.0.0.tgz", - "integrity": "sha1-crcmqm+sHt7uQiVsfY3CVrM1Z38=", - "dev": true - }, - "portscanner": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/portscanner/-/portscanner-2.1.1.tgz", - "integrity": "sha1-6rtAnk3iSVD1oqUW01rnaTQ/u5Y=", - "dev": true, - "requires": { - "async": "1.5.2", - "is-number-like": "^1.0.3" - }, - "dependencies": { - "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true + }, + "postcss": { + "version": "7.0.26", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.26.tgz", + "integrity": "sha1-XtYVz8qzW6m7uCQUpPqI6hBClYc=", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } } } }, - "postcss": { - "version": "5.2.17", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.17.tgz", - "integrity": "sha1-z09Ze4ZNZcikkrLqvp1wbIecOIs=", + "postcss-normalize-url": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz", + "integrity": "sha1-EOQ3+GvHx+WPe5ZS7YeNqqlfquE=", "dev": true, "requires": { - "chalk": "^1.1.3", - "js-base64": "^2.1.9", - "source-map": "^0.5.6", - "supports-color": "^3.2.3" + "is-absolute-url": "^2.0.0", + "normalize-url": "^3.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" }, "dependencies": { - "source-map": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", - "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=", + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, + "postcss": { + "version": "7.0.26", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.26.tgz", + "integrity": "sha1-XtYVz8qzW6m7uCQUpPqI6hBClYc=", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=", "dev": true, "requires": { - "has-flag": "^1.0.0" + "has-flag": "^3.0.0" } } } }, - "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.0.2", - "postcss-message-helpers": "^2.0.0", - "reduce-css-calc": "^1.2.6" - } - }, - "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.0.5", - "postcss": "^5.0.13", - "postcss-value-parser": "^3.2.3" - } - }, - "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.0.11", - "postcss-value-parser": "^3.1.2" - } - }, - "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.0.14" - } - }, - "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.0.4" - } - }, - "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.0.14" - } - }, - "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.0.16" - } - }, - "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.0.14", - "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.0.4", - "uniqid": "^4.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.0.10", - "postcss-value-parser": "^3.1.1" - } - }, - "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.0.4" - } - }, - "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.5.2", - "caniuse-api": "^1.5.2", - "postcss": "^5.0.4", - "postcss-selector-parser": "^2.2.2", - "vendors": "^1.0.0" - } - }, - "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.0.1", - "postcss": "^5.0.4", - "postcss-value-parser": "^3.0.2" - } - }, - "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.0.12", - "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.1", - "postcss": "^5.0.2", - "postcss-value-parser": "^3.0.2", - "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.0.14", - "postcss-selector-parser": "^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.0.5" - } - }, - "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=", + "postcss-normalize-whitespace": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz", + "integrity": "sha1-vx1AcP5Pzqh9E0joJdjMDF+qfYI=", "dev": true, "requires": { - "is-absolute-url": "^2.0.0", - "normalize-url": "^1.4.0", - "postcss": "^5.0.14", - "postcss-value-parser": "^3.2.3" + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "postcss": { + "version": "7.0.26", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.26.tgz", + "integrity": "sha1-XtYVz8qzW6m7uCQUpPqI6hBClYc=", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=", + "dev": true, + "requires": { + "has-flag": "^3.0.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.0.4", - "postcss-value-parser": "^3.0.1" - } - }, - "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=", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz", + "integrity": "sha1-DPdcgg7H1cTSgBiVWeC1ceusDu4=", "dev": true, "requires": { - "postcss": "^5.0.4", - "postcss-value-parser": "^3.0.2" + "cssnano-util-get-arguments": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "postcss": { + "version": "7.0.26", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.26.tgz", + "integrity": "sha1-XtYVz8qzW6m7uCQUpPqI6hBClYc=", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=", + "dev": true, + "requires": { + "has-flag": "^3.0.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=", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz", + "integrity": "sha1-f9QuvqXpyBRgljniwuhK4nC6SN8=", "dev": true, "requires": { - "postcss": "^5.0.4" + "browserslist": "^4.0.0", + "caniuse-api": "^3.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "browserslist": { + "version": "4.8.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.8.3.tgz", + "integrity": "sha512-iU43cMMknxG1ClEZ2MDKeonKE1CCrFVkQK2AqO2YWFmvIrx4JWrvQ4w4hQez6EpVI8rHTtqh/ruHHDHSOKxvUg==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001017", + "electron-to-chromium": "^1.3.322", + "node-releases": "^1.1.44" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "electron-to-chromium": { + "version": "1.3.336", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.336.tgz", + "integrity": "sha512-FtazvnXAizSVMxQNPqUcTv2UElY5r3uRPQwiU1Tyg/Yc2UFr+/3wqDoLIV9ES6ablW3IrCcR8uEK2ppxaNPWhw==", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "postcss": { + "version": "7.0.26", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.26.tgz", + "integrity": "sha1-XtYVz8qzW6m7uCQUpPqI6hBClYc=", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } } }, "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=", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz", + "integrity": "sha1-F++kBerMbge+NBSlyi0QdGgdTik=", "dev": true, "requires": { - "has": "^1.0.1", - "postcss": "^5.0.8", - "postcss-value-parser": "^3.0.1" + "cssnano-util-get-match": "^4.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "postcss": { + "version": "7.0.26", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.26.tgz", + "integrity": "sha1-XtYVz8qzW6m7uCQUpPqI6hBClYc=", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=", + "dev": true, + "requires": { + "has-flag": "^3.0.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=", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", + "integrity": "sha1-JJBENWaXsztk8aj3yAki3d7nGVw=", "dev": true, "requires": { - "flatten": "^1.0.2", + "cssesc": "^2.0.0", "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=", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.2.tgz", + "integrity": "sha1-F7mXvHEbMzurFDqu07jT1uPTglg=", "dev": true, "requires": { - "is-svg": "^2.0.0", - "postcss": "^5.0.14", - "postcss-value-parser": "^3.2.3", - "svgo": "^0.7.0" + "is-svg": "^3.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "svgo": "^1.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "postcss": { + "version": "7.0.26", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.26.tgz", + "integrity": "sha1-XtYVz8qzW6m7uCQUpPqI6hBClYc=", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } } }, "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=", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz", + "integrity": "sha1-lEaRHzKJv9ZMbWgPBzwDsfnuS6w=", "dev": true, "requires": { - "alphanum-sort": "^1.0.1", - "postcss": "^5.0.4", + "alphanum-sort": "^1.0.0", + "postcss": "^7.0.0", "uniqs": "^2.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "postcss": { + "version": "7.0.26", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.26.tgz", + "integrity": "sha1-XtYVz8qzW6m7uCQUpPqI6hBClYc=", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } } }, "postcss-value-parser": { @@ -10092,17 +16262,6 @@ "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.0.4", - "uniqs": "^2.0.0" - } - }, "prelude-ls": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", @@ -10122,15 +16281,10 @@ "dev": true }, "pretty-bytes": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-2.0.1.tgz", - "integrity": "sha1-FV7E0ANvQTkecEXW2+SWPVJdJk8=", - "dev": true, - "requires": { - "get-stdin": "^4.0.1", - "meow": "^3.1.0", - "number-is-nan": "^1.0.0" - } + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.3.0.tgz", + "integrity": "sha1-8oSeJ9t5+01s/iR2T8QTTxZZifI=", + "dev": true }, "pretty-hrtime": { "version": "1.0.3", @@ -10167,10 +16321,16 @@ "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", "dev": true }, + "psl": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.7.0.tgz", + "integrity": "sha512-5NsSEDv8zY70ScRnOTn7bK7eanl2MvFrOrS/R6x+dBt5g1ghnj9Zv90kO8GwT8gxcu2ANyFprnFYB85IogIJOQ==", + "dev": true + }, "pump": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "integrity": "sha1-Ejma3W5M91Jtlzy8i1zi4pCLOQk=", "dev": true, "requires": { "end-of-stream": "^1.1.0", @@ -10180,7 +16340,7 @@ "pumpify": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", - "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", + "integrity": "sha1-NlE74karJ1cLGjdKXOJ4v9dDcM4=", "dev": true, "requires": { "duplexify": "^3.6.0", @@ -10209,15 +16369,15 @@ "dev": true }, "q": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.0.tgz", - "integrity": "sha1-3QG6ydBtMObyGa7LglPunr3DCPE=", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", "dev": true }, "qjobs": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.1.5.tgz", - "integrity": "sha1-ZZ3p8s+NzCehSBJ28gU3cnI4LnM=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz", + "integrity": "sha1-xF6cYYAL0IfviNfiVkI73Unl0HE=", "dev": true }, "qs": { @@ -10226,20 +16386,10 @@ "integrity": "sha1-HPyyXBCpsrSDBT/zn138kjOQjP4=", "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.0", - "strict-uri-encode": "^1.0.0" - } - }, "randomatic": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.0.0.tgz", - "integrity": "sha512-VdxFOIEY3mNO5PtSRkkle/hPJDHvQhK21oa73K4yAc9qmp6N429gAyF1gZMOTMeS0/AYzaV/2Trcef+NaIonSA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz", + "integrity": "sha1-t3bvxZN1mE42xTey9RofCv8Noe0=", "dev": true, "requires": { "is-number": "^4.0.0", @@ -10250,109 +16400,451 @@ "is-number": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", - "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", + "integrity": "sha1-ACbjf1RU1z41bf5lZGmYZ8an8P8=", + "dev": true + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true + } + } + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha1-PPNwI9GZ4cJNGlW4SADC8+ZGgDE=", + "dev": true + }, + "raw-body": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha1-oc5vucm8NWylLoklarWQWeE9AzI=", + "dev": true, + "requires": { + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "dependencies": { + "http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha1-T1ApzxMjnzEDblsuVSkrz7zIXI8=", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + } + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "dev": true + } + } + }, + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + } + }, + "read-all-stream": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/read-all-stream/-/read-all-stream-3.1.0.tgz", + "integrity": "sha1-NcPhd/IHjveJ7kv6+kNzB06u9Po=", + "dev": true, + "requires": { + "pinkie-promise": "^2.0.0", + "readable-stream": "^2.0.0" + } + }, + "read-chunk": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-chunk/-/read-chunk-1.0.1.tgz", + "integrity": "sha1-X2jKswfmY/GZk1J9m1icrORmEZQ=", + "dev": true + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "dev": true, + "requires": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + } + }, + "read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "dev": true, + "requires": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + } + }, + "readable-stream": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.2.tgz", + "integrity": "sha1-WgTfBeT1f+Pw3Gj90R3FyXx+b00=", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~1.0.6", + "safe-buffer": "~5.1.0", + "string_decoder": "~1.0.0", + "util-deprecate": "~1.0.1" + } + }, + "readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha1-DodiKjMlqjPokihcr4tOhGUppSU=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + }, + "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 + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha1-NgSLv/TntH4TZkQxbJlmnqWukfE=", + "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.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha1-WXn9PxTNUxVl5fot8av/8d+u5yk=", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "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.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.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.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "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.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.0.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.0.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": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha1-cpyR4thXt6QZofmqZWhcTDP1hF0=", + "dev": true + } + } + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha1-rQD+TcYSqSMuhxhxHcXLWrAoVUM=", + "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" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "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.0" + } + } + } + }, + "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.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "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.0.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-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha1-LBY7P6+xtgbZ0Xko8FwqHDjgdnc=", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true }, "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha1-B8BQNKbDSfoG4k+jWqdttFgM5N0=", "dev": true + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha1-cIWbyVyYQJUvNZoGij/En57PrCM=", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha1-fLCd2jqGWFcFxks5pkZgOGguj+I=", + "dev": true, + "requires": { + "extend-shallow": "^3.0.0" + } } } }, - "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.2.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.2.0.tgz", - "integrity": "sha1-mUl2z2pQlqQRYoQEkvC9xdbn+5Y=", - "dev": true, - "requires": { - "bytes": "2.4.0", - "iconv-lite": "0.4.15", - "unpipe": "1.0.0" - } - }, - "rc": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.1.tgz", - "integrity": "sha1-LgPo5C7kULjLPc5lvhv4l04d/ZU=", - "dev": true, - "requires": { - "deep-extend": "~0.4.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - } - }, - "read-all-stream": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/read-all-stream/-/read-all-stream-3.1.0.tgz", - "integrity": "sha1-NcPhd/IHjveJ7kv6+kNzB06u9Po=", - "dev": true, - "requires": { - "pinkie-promise": "^2.0.0", - "readable-stream": "^2.0.0" - } - }, - "read-chunk": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-chunk/-/read-chunk-1.0.1.tgz", - "integrity": "sha1-X2jKswfmY/GZk1J9m1icrORmEZQ=", - "dev": true - }, - "read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", - "dev": true, - "requires": { - "load-json-file": "^1.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^1.0.0" - } - }, - "read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", - "dev": true, - "requires": { - "find-up": "^1.0.0", - "read-pkg": "^1.0.0" - } - }, - "readable-stream": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.2.tgz", - "integrity": "sha1-WgTfBeT1f+Pw3Gj90R3FyXx+b00=", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~1.0.6", - "safe-buffer": "~5.1.0", - "string_decoder": "~1.0.0", - "util-deprecate": "~1.0.1" - } - }, - "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.2", - "minimatch": "^3.0.2", - "readable-stream": "^2.0.2", - "set-immediate-shim": "^1.0.1" - } - }, "readline2": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/readline2/-/readline2-1.0.1.tgz", @@ -10383,73 +16875,65 @@ "strip-indent": "^1.0.1" } }, - "redeyed": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/redeyed/-/redeyed-1.0.1.tgz", - "integrity": "sha1-6WwZO0DAgWsArshCaY5hGF5VSYo=", - "dev": true, - "requires": { - "esprima": "~3.0.0" - }, - "dependencies": { - "esprima": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.0.0.tgz", - "integrity": "sha1-U88kes2ncxPlUcOqLnM0LT+099k=", - "dev": true - } - } - }, - "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=", + "regex-cache": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", + "integrity": "sha1-db3FiioUls7EihKDW8VMjVYjNt0=", "dev": true, "requires": { - "balanced-match": "^0.4.2", - "math-expression-evaluator": "^1.2.14", - "reduce-function-call": "^1.0.1" - }, - "dependencies": { - "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 - } + "is-equal-shallow": "^0.1.3" } }, - "reduce-function-call": { + "regex-not": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/reduce-function-call/-/reduce-function-call-1.0.2.tgz", - "integrity": "sha1-WiAL+S4ON3UXUv5FsKszD9S2vpk=", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha1-H07OJ+ALC2XgJHpoEOaoXYOldSw=", "dev": true, "requires": { - "balanced-match": "^0.4.2" + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" }, "dependencies": { - "balanced-match": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", - "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=", + "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" + } + }, + "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" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true } } }, - "regex-cache": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.3.tgz", - "integrity": "sha1-mxpsNdTQ3871cRrmUejp09cRQUU=", - "dev": true, - "requires": { - "is-equal-shallow": "^0.1.3", - "is-primitive": "^2.0.0" - } - }, "registry-auth-token": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.1.tgz", - "integrity": "sha1-+w0yie4Nmtosu1KvXf5mywcNMAY=", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.4.0.tgz", + "integrity": "sha512-4LM6Fw8eBQdwMYcES4yTnn2TqIasbXuwDx3um+QRs7S55aMKCBKBxvPXl2RiUjHwuJLTyYfxSpmfSAjQpcuP+A==", "dev": true, "requires": { "rc": "^1.1.6", @@ -10474,7 +16958,7 @@ "remove-bom-buffer": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz", - "integrity": "sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ==", + "integrity": "sha1-wr8eN3Ug0yT2I4kuM8EMrCwlK1M=", "dev": true, "requires": { "is-buffer": "^1.1.5", @@ -10537,37 +17021,75 @@ } }, "request": { - "version": "2.65.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.65.0.tgz", - "integrity": "sha1-zBo7xyuWJUc0/DQpbaMi+Uht3ro=", + "version": "2.88.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", + "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", "dev": true, "requires": { - "aws-sign2": "~0.6.0", - "bl": "~1.0.0", - "caseless": "~0.11.0", - "combined-stream": "~1.0.5", - "extend": "~3.0.0", + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", "forever-agent": "~0.6.1", - "form-data": "~1.0.0-rc3", - "har-validator": "~2.0.2", - "hawk": "~3.1.0", - "http-signature": "~0.11.0", + "form-data": "~2.3.2", + "har-validator": "~5.1.0", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", "isstream": "~0.1.2", "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.7", - "node-uuid": "~1.4.3", - "oauth-sign": "~0.8.0", - "qs": "~5.2.0", - "stringstream": "~0.0.4", - "tough-cookie": "~2.2.0", - "tunnel-agent": "~0.4.1" + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.4.3", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" }, "dependencies": { + "aws4": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.9.1.tgz", + "integrity": "sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug==", + "dev": true + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "dev": true + }, "qs": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-5.2.1.tgz", - "integrity": "sha1-gB/uAw4LlFDWOFrcSKTMVbRK7fw=", + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "dev": true + }, + "safe-buffer": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", + "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==", "dev": true + }, + "tough-cookie": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", + "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", + "dev": true, + "requires": { + "psl": "^1.1.24", + "punycode": "^1.4.1" + } } } }, @@ -10618,13 +17140,13 @@ } }, "resolve-dir": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-0.1.1.tgz", - "integrity": "sha1-shklmlYC+sXFxJatiUpujMQwJh4=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", + "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", "dev": true, "requires": { - "expand-tilde": "^1.2.2", - "global-modules": "^0.2.3" + "expand-tilde": "^2.0.0", + "global-modules": "^1.0.0" } }, "resolve-from": { @@ -10642,6 +17164,12 @@ "value-or-function": "^3.0.0" } }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "dev": true + }, "resp-modifier": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/resp-modifier/-/resp-modifier-6.0.2.tgz", @@ -10652,6 +17180,16 @@ "minimatch": "^3.0.2" } }, + "responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "dev": true, + "optional": true, + "requires": { + "lowercase-keys": "^1.0.0" + } + }, "restore-cursor": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", @@ -10662,6 +17200,12 @@ "onetime": "^1.0.0" } }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha1-uKSCXVvbH8P29Twrwz+BOIaBx7w=", + "dev": true + }, "rev-hash": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/rev-hash/-/rev-hash-1.0.0.tgz", @@ -10677,6 +17221,18 @@ "modify-filename": "^1.0.0" } }, + "rgb-regex": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz", + "integrity": "sha1-wODWiC3w4jviVKR16O3UGRX+rrE=", + "dev": true + }, + "rgba-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz", + "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=", + "dev": true + }, "right-align": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", @@ -10736,27 +17292,51 @@ "integrity": "sha1-Gc5QLKVyZl87ZHsQk5+X/RYV8QI=", "dev": true }, + "rxjs": { + "version": "5.5.12", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.12.tgz", + "integrity": "sha1-b6YbinfD15PbrycL7i9D9lLXQcw=", + "dev": true, + "requires": { + "symbol-observable": "1.0.1" + } + }, "safe-buffer": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", "integrity": "sha1-iTMSr2myEj3vcfV4iQAWce6yyFM=" }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "requires": { + "ret": "~0.1.10" + } + }, "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "integrity": "sha1-RPoWGwGHuVSd2Eu5GAL5vYOFzWo=", "dev": true }, "samsam": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/samsam/-/samsam-1.1.2.tgz", - "integrity": "sha1-vsEf3IOp/aBjQBIQ5AF2wwJNFWc=", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/samsam/-/samsam-1.3.0.tgz", + "integrity": "sha512-1HwIYD/8UlOtFS3QO3w7ey+SdSDFE4HRNLZoZRYVQefrOY3l17epswImeB1ijgJFQJodIaHcwkp3r/myBjFVbg==", "dev": true }, "sax": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "integrity": "sha1-KBYjTiN4vdxOU1T6tcqold9xANk=", + "dev": true + }, + "scoped-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/scoped-regex/-/scoped-regex-1.0.0.tgz", + "integrity": "sha1-o0a7Gs1CB65wvXwMfKnlZra63bg=", "dev": true }, "seek-bzip": { @@ -10812,7 +17392,7 @@ "send": { "version": "0.16.2", "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", - "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", + "integrity": "sha1-bsyh4PjBVtFBWXVZhI32RzCmu8E=", "dev": true, "requires": { "debug": "2.6.9", @@ -10836,10 +17416,28 @@ "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", "dev": true }, + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + } + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha1-0L2FU2iHtv58DYGMuWLZ2RxU5lY=", + "dev": true + }, "statuses": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", + "integrity": "sha1-u3PURtonlhBu/MG2AaJT1sRr0Ic=", "dev": true } } @@ -10875,25 +17473,55 @@ "parseurl": "~1.3.2" }, "dependencies": { - "mime-db": { - "version": "1.35.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.35.0.tgz", - "integrity": "sha512-JWT/IcCTsB0Io3AhWUMjRqucrHSPsSf2xKLaRldJVULioggvkJvggZ3VXNNSRkCddE6D+BUI4HEIZIA2OjwIvg==", + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true + }, + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + } + }, + "mime-db": { + "version": "1.43.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.43.0.tgz", + "integrity": "sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ==", "dev": true }, "mime-types": { - "version": "2.1.19", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.19.tgz", - "integrity": "sha512-P1tKYHVSZ6uFo26mtnve4HQFE3koh1UWVkp8YUC+ESBHe945xWSoXuHHiGarDqcEZ+whpCDnlNw5LON0kLo+sw==", + "version": "2.1.26", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.26.tgz", + "integrity": "sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ==", "dev": true, "requires": { - "mime-db": "~1.35.0" + "mime-db": "1.43.0" } }, "parseurl": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", - "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha1-0L2FU2iHtv58DYGMuWLZ2RxU5lY=", + "dev": true + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", "dev": true } } @@ -10901,7 +17529,7 @@ "serve-static": { "version": "1.13.2", "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", - "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", + "integrity": "sha1-CV6Ecv1bRiN9tQzkhqQ/S4bGzsE=", "dev": true, "requires": { "encodeurl": "~1.0.2", @@ -10911,9 +17539,9 @@ }, "dependencies": { "parseurl": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", - "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", "dev": true } } @@ -10936,22 +17564,25 @@ "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", "dev": true }, - "set-value": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", - "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha1-fpWsskqpL1iF4KvvW6ExMw1K5oM=", + "dev": true + }, + "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": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.1", - "to-object-path": "^0.3.0" + "shebang-regex": "^1.0.0" } }, - "setprototypeof": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", - "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=", + "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 }, "shelljs": { @@ -10995,18 +17626,67 @@ "integrity": "sha1-Krt1qt453rXMgVzhDmGRFkhQuvA=", "dev": true }, + "simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", + "dev": true, + "requires": { + "is-arrayish": "^0.3.1" + }, + "dependencies": { + "is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha1-RXSirlb3qyBolvtDHq7tBm/fjwM=", + "dev": true + } + } + }, "sinon": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/sinon/-/sinon-1.17.7.tgz", - "integrity": "sha1-RUKk9JugxFwF6y6d2dID4rjv4L8=", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-5.1.1.tgz", + "integrity": "sha512-h/3uHscbt5pQNxkf7Y/Lb9/OM44YNCicHakcq73ncbrIS8lXg+ZGOZbtuU+/km4YnyiCYfQQEwANaReJz7KDfw==", "dev": true, "requires": { - "formatio": "1.1.1", - "lolex": "1.3.2", - "samsam": "1.1.2", - "util": ">=0.10.3 <1" + "@sinonjs/formatio": "^2.0.0", + "diff": "^3.5.0", + "lodash.get": "^4.4.2", + "lolex": "^2.4.2", + "nise": "^1.3.3", + "supports-color": "^5.4.0", + "type-detect": "^4.0.8" + }, + "dependencies": { + "diff": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } } }, + "slash": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", + "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", + "dev": true + }, "slice-ansi": { "version": "0.0.4", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", @@ -11028,19 +17708,115 @@ "no-case": "^2.2.0" } }, - "sntp": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", - "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha1-ZJIufFZbDhQgS6GqfWlkJ40lGC0=", + "dev": true, + "requires": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.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.0" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha1-bBdfhv8UvbByRWPo88GwIaKGhTs=", + "dev": true, + "requires": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha1-+VZHlIbyrNeXAGk/b3uAXkWrVuI=", "dev": true, "requires": { - "hoek": "2.x.x" + "kind-of": "^3.2.0" } }, "socket.io": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.1.1.tgz", - "integrity": "sha512-rORqq9c+7W0DAK3cleWNSyfv/qKXV99hV4tZe+gGLfBECw3XEhBy7x85F3wypA9688LKjtwO9pX9L33/xQI8yA==", + "integrity": "sha1-oGnF/qvuPmshSnW0DOBlLhz7mYA=", "dev": true, "requires": { "debug": "~3.1.0", @@ -11069,6 +17845,12 @@ "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=", "dev": true }, + "blob": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz", + "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==", + "dev": true + }, "component-emitter": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", @@ -11078,7 +17860,7 @@ "debug": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "integrity": "sha1-W7WgZyYotkFJVmuhaBnmFRjGcmE=", "dev": true, "requires": { "ms": "2.0.0" @@ -11087,7 +17869,7 @@ "engine.io-client": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.2.1.tgz", - "integrity": "sha512-y5AbkytWeM4jQr7m/koQLc5AxpRKC1hEVUb/s1FUAWEJq5AzJJ4NLvzuKPuxtDi5Mq755WuDvZ6Iv2rXj4PTzw==", + "integrity": "sha1-b1TAR13khxWKGnx30QF4cItq3TY=", "dev": true, "requires": { "component-emitter": "1.2.1", @@ -11104,15 +17886,15 @@ } }, "engine.io-parser": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.2.tgz", - "integrity": "sha512-dInLFzr80RijZ1rGpx1+56/uFoH7/7InhH3kZt+Ms6hT8tNx3NGW/WNSA/f8As1WkOfkuyb3tnRyuXGxusclMw==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.3.tgz", + "integrity": "sha1-dXq5cPvy37Mse3SwMyFtVznveaY=", "dev": true, "requires": { "after": "0.8.2", "arraybuffer.slice": "~0.0.7", "base64-arraybuffer": "0.1.5", - "blob": "0.0.4", + "blob": "0.0.5", "has-binary2": "~1.0.2" } }, @@ -11141,15 +17923,15 @@ } }, "socket.io-adapter": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.1.tgz", - "integrity": "sha1-KoBeihTWNyEk3ZFZrUUC+MsH8Gs=", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.2.tgz", + "integrity": "sha512-WzZRUj1kUjrTIrUKpZLEzFZ1OLj5FwLlAFQs9kuZJzJi5DKdU7FsWc36SNmA8iDOtwBQyT8FkrriRM8vXLYz8g==", "dev": true }, "socket.io-client": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.1.1.tgz", - "integrity": "sha512-jxnFyhAuFxYfjqIgduQlhzqTcOEQSn+OHKVfAxWaNWa7ecP7xSNk2Dx/3UEsDcY7NcFafxvNvKPmmO7HTwTxGQ==", + "integrity": "sha1-3LOBA0NqtFeN2wJmOK4vIbYjZx8=", "dev": true, "requires": { "backo2": "1.0.2", @@ -11171,7 +17953,7 @@ "socket.io-parser": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.2.0.tgz", - "integrity": "sha512-FYiBx7rc/KORMJlgsXysflWx/RIvtqZbyGLlHZvjfmPTPeuD/I8MaW7cfFrj5tRltICJdgwflhfZ3NVVbVLFQA==", + "integrity": "sha1-58Yii2qh+BTmFIrqMltRqpSZ4Hc=", "dev": true, "requires": { "component-emitter": "1.2.1", @@ -11188,7 +17970,7 @@ "ws": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", - "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", + "integrity": "sha1-8c+E/i1ekB686U767OeF8YeiKPI=", "dev": true, "requires": { "async-limiter": "~1.0.0", @@ -11351,6 +18133,16 @@ "is-plain-obj": "^1.0.0" } }, + "sort-keys-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sort-keys-length/-/sort-keys-length-1.0.1.tgz", + "integrity": "sha1-nLb09OnkgVWmqgZx7dM2/xR5oYg=", + "dev": true, + "optional": true, + "requires": { + "sort-keys": "^1.0.0" + } + }, "sort-on": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/sort-on/-/sort-on-1.3.0.tgz", @@ -11359,18 +18151,44 @@ "requires": { "arrify": "^1.0.0", "dot-prop": "^2.0.0" + }, + "dependencies": { + "dot-prop": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-2.4.0.tgz", + "integrity": "sha1-hI4o9/HVB0DGdHqzywdnBGK2+Jw=", + "dev": true, + "requires": { + "is-obj": "^1.0.0" + } + } } }, "source-map": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz", - "integrity": "sha1-2rc/vPwrqBm03gO9b26qSBZLP50=", + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha1-GQhmvs51U+H48mei7oLGBrVQmho=", "dev": true, - "optional": true, "requires": { - "amdefine": ">=0.0.4" + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" } }, + "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 + }, "sparkles": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.0.tgz", @@ -11490,6 +18308,27 @@ "integrity": "sha1-5sgLYjEj19gM8TLOU480YokHJQI=", "dev": true }, + "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.0" + } + } + } + }, "statuses": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", @@ -11516,9 +18355,9 @@ } }, "stream-consume": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/stream-consume/-/stream-consume-0.1.0.tgz", - "integrity": "sha1-pB6tGm1ggc63n2WwYZAbbY89HQ8=", + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/stream-consume/-/stream-consume-0.1.1.tgz", + "integrity": "sha512-tNa3hzgkjEP7XbCkbRXe1jpg+ievoa0O4SCFlMOYEscGSS4JJsckGL8swUyAa/ApGU3Ae4t6Honor4HhL+tRyg==", "dev": true }, "stream-shift": { @@ -11550,7 +18389,8 @@ "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 + "dev": true, + "optional": true }, "string-length": { "version": "1.0.1", @@ -11584,6 +18424,48 @@ "integrity": "sha1-aybpvTr8qnvjtCabUm3huCAArHg=", "dev": true }, + "string.prototype.trimleft": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz", + "integrity": "sha1-m9uKxqvW1gKxek7TIYcNL43O/HQ=", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "function-bind": "^1.1.1" + }, + "dependencies": { + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "requires": { + "object-keys": "^1.0.12" + } + } + } + }, + "string.prototype.trimright": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.1.tgz", + "integrity": "sha1-RAMUsVmWyGbOigNBiU1FGGIAxdk=", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "function-bind": "^1.1.1" + }, + "dependencies": { + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "requires": { + "object-keys": "^1.0.12" + } + } + } + }, "string_decoder": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", @@ -11595,7 +18477,7 @@ "stringify-object": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", - "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", + "integrity": "sha1-cDBlrvyhkwDTzoivT1s5VtdVZik=", "requires": { "get-own-enumerable-property-symbols": "^3.0.0", "is-obj": "^1.0.1", @@ -11614,12 +18496,6 @@ "integrity": "sha1-7yWcTjSTRDd/zRyRPdLoSMnAQrU=", "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", @@ -11649,17 +18525,13 @@ } }, "strip-dirs": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-1.1.1.tgz", - "integrity": "sha1-lgu9EoeETzl1pFWKoQOoJV4kVqA=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz", + "integrity": "sha1-SYdzYmT8NEzyD2w0rKnRPR1O1sU=", "dev": true, + "optional": true, "requires": { - "chalk": "^1.0.0", - "get-stdin": "^4.0.1", - "is-absolute": "^0.1.5", - "is-natural-number": "^2.0.0", - "minimist": "^1.1.0", - "sum-up": "^1.0.1" + "is-natural-number": "^4.0.1" } }, "strip-eof": { @@ -11685,14 +18557,112 @@ "dev": true }, "strip-outer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.0.tgz", - "integrity": "sha1-qsC6YNLpDF1PJ1/Yhp/ZotMQ/7g=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz", + "integrity": "sha1-sv0qv2YEudHmATBXGV34Nrip1jE=", "dev": true, "requires": { "escape-string-regexp": "^1.0.2" } }, + "stylehacks": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.3.tgz", + "integrity": "sha1-Zxj8r00eB9ihMYaQiB6NlnJqcdU=", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "browserslist": { + "version": "4.8.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.8.3.tgz", + "integrity": "sha512-iU43cMMknxG1ClEZ2MDKeonKE1CCrFVkQK2AqO2YWFmvIrx4JWrvQ4w4hQez6EpVI8rHTtqh/ruHHDHSOKxvUg==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001017", + "electron-to-chromium": "^1.3.322", + "node-releases": "^1.1.44" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "electron-to-chromium": { + "version": "1.3.336", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.336.tgz", + "integrity": "sha512-FtazvnXAizSVMxQNPqUcTv2UElY5r3uRPQwiU1Tyg/Yc2UFr+/3wqDoLIV9ES6ablW3IrCcR8uEK2ppxaNPWhw==", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "postcss": { + "version": "7.0.26", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.26.tgz", + "integrity": "sha1-XtYVz8qzW6m7uCQUpPqI6hBClYc=", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "postcss-selector-parser": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz", + "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=", + "dev": true, + "requires": { + "dot-prop": "^4.1.1", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, "sudo-block": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/sudo-block/-/sudo-block-1.2.0.tgz", @@ -11719,50 +18689,101 @@ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", "dev": true }, + "supports-hyperlinks": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-1.0.1.tgz", + "integrity": "sha1-cdrt82zBBgrFEAw1G7PaSMKcDvc=", + "dev": true, + "requires": { + "has-flag": "^2.0.0", + "supports-color": "^5.0.0" + }, + "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 + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + }, + "dependencies": { + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + } + } + } + } + }, "svgo": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-0.7.2.tgz", - "integrity": "sha1-n1dyQTlSE1xv779Ar+ak+qiLS7U=", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", + "integrity": "sha1-ttxRHAYzRsnkFbgeQ0ARRbltQWc=", "dev": true, "requires": { - "coa": "~1.0.1", - "colors": "~1.1.2", - "csso": "~2.3.1", - "js-yaml": "~3.7.0", + "chalk": "^2.4.1", + "coa": "^2.0.2", + "css-select": "^2.0.0", + "css-select-base-adapter": "^0.1.1", + "css-tree": "1.0.0-alpha.37", + "csso": "^4.0.2", + "js-yaml": "^3.13.1", "mkdirp": "~0.5.1", - "sax": "~1.2.1", - "whet.extend": "~0.9.9" + "object.values": "^1.1.0", + "sax": "~1.2.4", + "stable": "^0.1.8", + "unquote": "~1.1.1", + "util.promisify": "~1.0.0" }, "dependencies": { - "colors": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", - "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", - "dev": true + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } }, - "js-yaml": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.7.0.tgz", - "integrity": "sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A=", + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "requires": { - "argparse": "^1.0.7", - "esprima": "^2.6.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "requires": { - "minimist": "0.0.8" + "has-flag": "^3.0.0" } } } @@ -11777,10 +18798,16 @@ "upper-case": "^1.1.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 + }, "symbol-tree": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.2.tgz", - "integrity": "sha1-rifbOPZgp64uHDt9G8KQgZuFGeY=", + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", "dev": true, "optional": true }, @@ -11846,9 +18873,9 @@ }, "dependencies": { "cli-width": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.1.0.tgz", - "integrity": "sha1-sjTKIJsp72b8UY2bmNWEewDt8Ao=", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", + "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", "dev": true }, "inquirer": { @@ -11873,23 +18900,6 @@ "through": "^2.3.6" } }, - "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" - }, - "dependencies": { - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true - } - } - }, "mute-stream": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.6.tgz", @@ -11918,26 +18928,36 @@ } }, "tar-stream": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.5.4.tgz", - "integrity": "sha1-NlSc8E7RrumyowwBQyUiONr5QBY=", + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", + "integrity": "sha1-jqVdqzeXIlPZqa+Q/c1VmuQ1xVU=", "dev": true, "requires": { "bl": "^1.0.0", + "buffer-alloc": "^1.2.0", "end-of-stream": "^1.0.0", - "readable-stream": "^2.0.0", + "fs-constants": "^1.0.0", + "readable-stream": "^2.3.0", + "to-buffer": "^1.1.1", "xtend": "^4.0.0" } }, + "temp-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz", + "integrity": "sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0=", + "dev": true, + "optional": true + }, "tempfile": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/tempfile/-/tempfile-1.1.1.tgz", - "integrity": "sha1-W8xOrsxKsscH2LwR2ZzMmiyyh/I=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/tempfile/-/tempfile-2.0.0.tgz", + "integrity": "sha1-awRGhWqbERTRhW/8vlCczLCXcmU=", "dev": true, "optional": true, "requires": { - "os-tmpdir": "^1.0.0", - "uuid": "^2.0.1" + "temp-dir": "^1.0.0", + "uuid": "^3.0.1" } }, "ternary-stream": { @@ -11996,9 +19016,9 @@ } }, "through2-concurrent": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/through2-concurrent/-/through2-concurrent-1.1.1.tgz", - "integrity": "sha1-EctOpMnjG8puTB5tukjRxyjDUks=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/through2-concurrent/-/through2-concurrent-2.0.0.tgz", + "integrity": "sha1-yd0sFGUE7Jli28hqUWi2PWYmafo=", "dev": true, "requires": { "through2": "^2.0.0" @@ -12028,9 +19048,15 @@ "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=" }, "timed-out": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-3.1.3.tgz", - "integrity": "sha1-lYYL/MXHbCd/j4Mm/Q9bLiDrohc=", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", + "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=", + "dev": true + }, + "timsort": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", + "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=", "dev": true }, "title-case": { @@ -12044,18 +19070,18 @@ } }, "titleize": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/titleize/-/titleize-1.0.0.tgz", - "integrity": "sha1-fTUHIgYYMLpmF2MeDP0+oIOY2Vo=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/titleize/-/titleize-1.0.1.tgz", + "integrity": "sha512-rUwGDruKq1gX+FFHbTl5qjI7teVO7eOe+C8IcQ7QT+1BK3eEUXJqbZcBOeaRP4FwSC/C1A5jDoIVta0nIQ9yew==", "dev": true }, "tmp": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.29.tgz", - "integrity": "sha1-8lEl/w3Z2jzLDC3Tce4SiLuRKMA=", + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha1-bTQzWIl2jSGyvNoKonfO07G/rfk=", "dev": true, "requires": { - "os-tmpdir": "~1.0.1" + "os-tmpdir": "~1.0.2" } }, "to-absolute-glob": { @@ -12073,6 +19099,12 @@ "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=", "dev": true }, + "to-buffer": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", + "integrity": "sha1-STvUj2LXxD/N7TE6A9ytsuEhOoA=", + "dev": true + }, "to-object-path": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", @@ -12082,6 +19114,75 @@ "kind-of": "^3.0.2" } }, + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha1-E8/dmzNlUvMLUfM6iuG0Knp1mc4=", + "dev": true, + "requires": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + }, + "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" + } + }, + "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" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "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.0.2" + } + } + } + }, "to-through": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-through/-/to-through-2.0.0.tgz", @@ -12091,6 +19192,12 @@ "through2": "^2.0.3" } }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha1-fhvjRw8ed5SLxD2Uo8j013UrpVM=", + "dev": true + }, "toposort": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/toposort/-/toposort-1.0.7.tgz", @@ -12098,10 +19205,22 @@ "dev": true }, "tough-cookie": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.2.2.tgz", - "integrity": "sha1-yDoYMPTl7wuT7yo0iOck+N4Basc=", - "dev": true + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dev": true, + "requires": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "dependencies": { + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + } + } }, "tr46": { "version": "0.0.3", @@ -12143,12 +19262,21 @@ "integrity": "sha1-gUXkynyv9ArN48z5Rui4u3W0Fys=", "dev": true }, - "tunnel-agent": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz", - "integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=", + "tslib": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", + "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==", "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.0.1" + } + }, "tweetnacl": { "version": "0.14.5", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", @@ -12175,14 +19303,20 @@ "prelude-ls": "~1.1.2" } }, + "type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true + }, "type-is": { - "version": "1.6.15", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.15.tgz", - "integrity": "sha1-yrEPtJCeRByChC6v4a1kbIGARBA=", + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha1-TlUs0F3wlGfcvE73Od6J8s83wTE=", "dev": true, "requires": { "media-typer": "0.3.0", - "mime-types": "~2.1.15" + "mime-types": "~2.1.24" } }, "typedarray": { @@ -12194,7 +19328,7 @@ "ua-parser-js": { "version": "0.7.17", "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.17.tgz", - "integrity": "sha512-uRdSdu1oA1rncCQL7sCj8vSyZkgtL7faaw9Tc9rZ3mGgraQ7+Pdx7w5mnOSF3gw9ZNG6oc+KXfkon3bKuROm0g==", + "integrity": "sha1-6exflJi57JEOeuOsYmqAXE0J7Kw=", "dev": true }, "uglify-js": { @@ -12282,6 +19416,30 @@ "integrity": "sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po=", "dev": true }, + "unbzip2-stream": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.3.3.tgz", + "integrity": "sha1-0VbSBeZw2NjDk+HALr1QZCKHP2o=", + "dev": true, + "optional": true, + "requires": { + "buffer": "^5.2.1", + "through": "^2.3.8" + }, + "dependencies": { + "buffer": { + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.4.3.tgz", + "integrity": "sha1-P7ycaetxPTI+P8Gole7gcQwHIRU=", + "dev": true, + "optional": true, + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4" + } + } + } + }, "unc-path-regex": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", @@ -12289,42 +19447,21 @@ "dev": true }, "underscore.string": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.3.4.tgz", - "integrity": "sha1-LCo/n4PmR2L9xF5s6sZRQoZCE9s=", + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.3.5.tgz", + "integrity": "sha512-g+dpmgn+XBneLmXXo+sGlW5xQEt4ErkS3mgeN2GFbremYeMBSJKr9Wf2KJplQVaiPY/f7FN6atosWYNm9ovrYg==", "dev": true, "requires": { "sprintf-js": "^1.0.3", "util-deprecate": "^1.0.2" } }, - "union-value": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-0.2.4.tgz", - "integrity": "sha1-c3UVJ4ZnkFfns3qmdug0aPwCdPA=", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^0.4.3" - } - }, "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", @@ -12341,18 +19478,70 @@ "through2-filter": "^2.0.0" } }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", - "dev": true - }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha1-tkb2m+OULavOzJ1mOcgNwQXvqmY=", + "dev": true + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "dev": true + }, + "unquote": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", + "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=", + "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.0" + }, + "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.3", + "has-values": "^0.1.4", + "isobject": "^2.0.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 + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, "untildify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/untildify/-/untildify-2.1.0.tgz", @@ -12368,6 +19557,12 @@ "integrity": "sha1-uYTwh3/AqJwsdzzB73tbIytbBv4=", "dev": true }, + "upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha1-j2bbzVWog6za5ECK+LA1pQRMGJQ=", + "dev": true + }, "update-notifier": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-0.6.3.tgz", @@ -12408,20 +19603,11 @@ "is-obj": "^1.0.0" } }, - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "uuid": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz", + "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=", "dev": true - }, - "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" - } } } }, @@ -12440,6 +19626,29 @@ "upper-case": "^1.1.1" } }, + "uri-js": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", + "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + }, + "dependencies": { + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + } + } + }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "dev": true + }, "url-parse-lax": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", @@ -12449,15 +19658,17 @@ "prepend-http": "^1.0.1" } }, - "url-regex": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/url-regex/-/url-regex-3.2.0.tgz", - "integrity": "sha1-260eDJ4p4QXdCx8J9oYvf9tIJyQ=", - "dev": true, - "optional": true, - "requires": { - "ip-regex": "^1.0.1" - } + "url-to-options": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz", + "integrity": "sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k=", + "dev": true + }, + "use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha1-1QyMrHmhn7wg8pEfVuuXP04QBw8=", + "dev": true }, "user-home": { "version": "2.0.0", @@ -12469,21 +19680,13 @@ } }, "useragent": { - "version": "2.1.13", - "resolved": "https://registry.npmjs.org/useragent/-/useragent-2.1.13.tgz", - "integrity": "sha1-u6Q+iqJNXOuDwpN0c+EC4h33TBA=", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/useragent/-/useragent-2.3.0.tgz", + "integrity": "sha1-IX+UOtVAyyEoZYqyP8lg9qiMmXI=", "dev": true, "requires": { - "lru-cache": "2.2.x", + "lru-cache": "4.1.x", "tmp": "0.0.x" - }, - "dependencies": { - "lru-cache": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.2.4.tgz", - "integrity": "sha1-bGWGGb7PFAMdDQtZSxYELOTcBj0=", - "dev": true - } } }, "useref": { @@ -12498,38 +19701,50 @@ "integrity": "sha1-DP7FyAUtRKI+OqqQgQToB1+V39U=", "dev": true }, - "util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "util.promisify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", + "integrity": "sha1-a693dLgO6w91INi4HQeYKlmruu4=", "dev": true, "requires": { - "inherits": "2.0.1" + "define-properties": "^1.1.3", + "es-abstract": "^1.17.2", + "has-symbols": "^1.0.1", + "object.getownpropertydescriptors": "^2.1.0" }, "dependencies": { - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "requires": { + "object-keys": "^1.0.12" + } + }, + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", "dev": true } } }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, "utils-merge": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.0.tgz", - "integrity": "sha1-ApT7kiu5N1FTVBxPcJYjHyh8ivg=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", "dev": true }, "uuid": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz", - "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz", + "integrity": "sha1-RWjwIW54dg7h2/Ok0s9T4iQRKGY=", "dev": true }, "v8flags": { @@ -12572,9 +19787,9 @@ "dev": true }, "vendors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.1.tgz", - "integrity": "sha1-N61zyO5Bf7PVgOeFMSMH0nSEfyI=", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.3.tgz", + "integrity": "sha1-pkZ3gavTZiF8BQ+CAuflDMnu+MA=", "dev": true }, "verror": { @@ -12675,23 +19890,6 @@ "through2-filter": "^2.0.0", "vali-date": "^1.0.0", "vinyl": "^1.0.0" - }, - "dependencies": { - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "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" - } - } } }, "vinyl-sourcemap": { @@ -12730,7 +19928,7 @@ "vinyl": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.0.tgz", - "integrity": "sha512-MBH+yP0kC/GQ5GwBqrTPTzEfiiLjta7hTtvQtbxBgTeSXsmKQRQecjibMbxIXzVT3Y9KJK+drOz1/k+vsu8Nkg==", + "integrity": "sha1-2FsH2pbkWNJbL/4Z/s6fLKoT7YY=", "dev": true, "requires": { "clone": "^2.1.1", @@ -12767,9 +19965,9 @@ "dev": true }, "walk": { - "version": "2.3.9", - "resolved": "https://registry.npmjs.org/walk/-/walk-2.3.9.tgz", - "integrity": "sha1-MbTbZnjyrgHDnqn7hyWpAx5Vins=", + "version": "2.3.14", + "resolved": "https://registry.npmjs.org/walk/-/walk-2.3.14.tgz", + "integrity": "sha512-5skcWAUmySj6hkBdH6B6+3ddMjVQYH5Qy9QGbPmN8kVmLteXk+yVXg+yfk1nbX30EYakahLrr8iPcCxJQSCBeg==", "dev": true, "requires": { "foreachasync": "^3.0.0" @@ -12801,12 +19999,6 @@ "tr46": "~0.0.1" } }, - "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.2.14", "resolved": "https://registry.npmjs.org/which/-/which-1.2.14.tgz", @@ -13051,13 +20243,24 @@ } }, "yauzl": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.8.0.tgz", - "integrity": "sha1-eUUK/yKyqcWkHvVOAtuQfM+/nuI=", + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", "dev": true, "requires": { "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.0.1" + "fd-slicer": "~1.1.0" + }, + "dependencies": { + "fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", + "dev": true, + "requires": { + "pend": "~1.2.0" + } + } } }, "yeast": { @@ -13129,11 +20332,203 @@ }, "dependencies": { "cli-width": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.1.0.tgz", - "integrity": "sha1-sjTKIJsp72b8UY2bmNWEewDt8Ao=", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", + "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", + "dev": true + }, + "glob": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", + "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=", + "dev": true, + "requires": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "globby": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-4.1.0.tgz", + "integrity": "sha1-CA9UVJ7BuCpsYOYx/ILhIR2+lfg=", + "dev": true, + "requires": { + "array-union": "^1.0.1", + "arrify": "^1.0.0", + "glob": "^6.0.1", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "inquirer": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-1.2.3.tgz", + "integrity": "sha1-TexvMvN+97sLLtPx0aXD9UUHSRg=", + "dev": true, + "requires": { + "ansi-escapes": "^1.1.0", + "chalk": "^1.0.0", + "cli-cursor": "^1.0.1", + "cli-width": "^2.0.0", + "external-editor": "^1.1.0", + "figures": "^1.3.5", + "lodash": "^4.3.0", + "mute-stream": "0.0.6", + "pinkie-promise": "^2.0.0", + "run-async": "^2.2.0", + "rx": "^4.1.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.0", + "through": "^2.3.6" + } + }, + "mute-stream": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.6.tgz", + "integrity": "sha1-SJYrGeFp/R38JAs/HnMXYnu8R9s=", + "dev": true + }, + "run-async": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", + "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", + "dev": true, + "requires": { + "is-promise": "^2.1.0" + } + } + } + }, + "yeoman-generator": { + "version": "0.22.6", + "resolved": "https://registry.npmjs.org/yeoman-generator/-/yeoman-generator-0.22.6.tgz", + "integrity": "sha1-JF3caurDeIBO6nPfJk9p2qH+DaM=", + "dev": true, + "requires": { + "async": "^1.4.2", + "chalk": "^1.0.0", + "class-extend": "^0.1.0", + "cli-table": "^0.3.1", + "cross-spawn": "^2.0.0", + "dargs": "^4.0.0", + "dateformat": "^1.0.11", + "debug": "^2.1.0", + "detect-conflict": "^1.0.0", + "download": "^4.1.2", + "error": "^7.0.2", + "find-up": "^1.0.0", + "github-username": "^2.0.0", + "glob": "^6.0.1", + "gruntfile-editor": "^1.0.0", + "html-wiring": "^1.0.0", + "inquirer": "^0.11.0", + "istextorbinary": "^1.0.2", + "lodash": "^3.5.0", + "mem-fs-editor": "^2.0.0", + "mkdirp": "^0.5.0", + "nopt": "^3.0.0", + "path-exists": "^2.0.0", + "path-is-absolute": "^1.0.0", + "pretty-bytes": "^2.0.1", + "read-chunk": "^1.0.1", + "read-pkg-up": "^1.0.1", + "rimraf": "^2.2.0", + "run-async": "^2.0.0", + "shelljs": "^0.5.0", + "text-table": "^0.2.0", + "through2": "^2.0.0", + "underscore.string": "^3.0.3", + "user-home": "^2.0.0", + "xdg-basedir": "^2.0.0", + "yeoman-assert": "^2.0.0", + "yeoman-environment": "^1.1.0", + "yeoman-test": "^1.0.0", + "yeoman-welcome": "^1.0.0" + }, + "dependencies": { + "caw": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/caw/-/caw-1.2.0.tgz", + "integrity": "sha1-/7Im/n78VHKI3GLuPpcHPCEtEDQ=", + "dev": true, + "requires": { + "get-proxy": "^1.0.1", + "is-obj": "^1.0.0", + "object-assign": "^3.0.0", + "tunnel-agent": "^0.4.0" + }, + "dependencies": { + "object-assign": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz", + "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=", + "dev": true + } + } + }, + "cross-spawn": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-2.2.3.tgz", + "integrity": "sha1-+sViAt/T0N2GF3jy2iA79DS7ghw=", + "dev": true, + "requires": { + "cross-spawn-async": "^2.2.2", + "spawn-sync": "^1.0.15" + } + }, + "download": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/download/-/download-4.4.3.tgz", + "integrity": "sha1-qlX9rTktldS2jowr4D4MKqIbqaw=", + "dev": true, + "requires": { + "caw": "^1.0.1", + "concat-stream": "^1.4.7", + "each-async": "^1.0.0", + "filenamify": "^1.0.1", + "got": "^5.0.0", + "gulp-decompress": "^1.2.0", + "gulp-rename": "^1.2.0", + "is-url": "^1.2.0", + "object-assign": "^4.0.1", + "read-all-stream": "^3.0.0", + "readable-stream": "^2.0.2", + "stream-combiner2": "^1.1.1", + "vinyl": "^1.0.0", + "vinyl-fs": "^2.2.0", + "ware": "^1.2.0" + } + }, + "filename-reserved-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-1.0.0.tgz", + "integrity": "sha1-5hz4BfDeHJhFZ9A4bcXfUO5a9+Q=", "dev": true }, + "filenamify": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-1.2.1.tgz", + "integrity": "sha1-qfL/0RxQO+0wABUCknI3jx8TZaU=", + "dev": true, + "requires": { + "filename-reserved-regex": "^1.0.0", + "strip-outer": "^1.0.0", + "trim-repeated": "^1.0.0" + } + }, + "get-proxy": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/get-proxy/-/get-proxy-1.1.0.tgz", + "integrity": "sha1-iUhUSRvFkbDxR9euVw9cZ4tyVus=", + "dev": true, + "requires": { + "rc": "^1.1.2" + } + }, "glob": { "version": "6.0.4", "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", @@ -13147,48 +20542,78 @@ "path-is-absolute": "^1.0.0" } }, - "globby": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-4.1.0.tgz", - "integrity": "sha1-CA9UVJ7BuCpsYOYx/ILhIR2+lfg=", + "got": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/got/-/got-5.7.1.tgz", + "integrity": "sha1-X4FjWmHkplifGAVp6k44FoClHzU=", "dev": true, "requires": { - "array-union": "^1.0.1", - "arrify": "^1.0.0", - "glob": "^6.0.1", + "create-error-class": "^3.0.1", + "duplexer2": "^0.1.4", + "is-redirect": "^1.0.0", + "is-retry-allowed": "^1.0.0", + "is-stream": "^1.0.0", + "lowercase-keys": "^1.0.0", + "node-status-codes": "^1.0.0", "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" + "parse-json": "^2.1.0", + "pinkie-promise": "^2.0.0", + "read-all-stream": "^3.0.0", + "readable-stream": "^2.0.5", + "timed-out": "^3.0.0", + "unzip-response": "^1.0.2", + "url-parse-lax": "^1.0.0" } }, "inquirer": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-1.2.3.tgz", - "integrity": "sha1-TexvMvN+97sLLtPx0aXD9UUHSRg=", + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-0.11.4.tgz", + "integrity": "sha1-geM3ToNhvq/y2XAWIG01nQsy+k0=", "dev": true, "requires": { "ansi-escapes": "^1.1.0", + "ansi-regex": "^2.0.0", "chalk": "^1.0.0", "cli-cursor": "^1.0.1", - "cli-width": "^2.0.0", - "external-editor": "^1.1.0", + "cli-width": "^1.0.1", "figures": "^1.3.5", - "lodash": "^4.3.0", - "mute-stream": "0.0.6", - "pinkie-promise": "^2.0.0", - "run-async": "^2.2.0", - "rx": "^4.1.0", + "lodash": "^3.3.1", + "readline2": "^1.0.1", + "run-async": "^0.1.0", + "rx-lite": "^3.1.2", "string-width": "^1.0.1", "strip-ansi": "^3.0.0", "through": "^2.3.6" + }, + "dependencies": { + "run-async": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-0.1.0.tgz", + "integrity": "sha1-yK1KXhEGYeQCp9IbUw4AnyX444k=", + "dev": true, + "requires": { + "once": "^1.3.0" + } + } } }, - "mute-stream": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.6.tgz", - "integrity": "sha1-SJYrGeFp/R38JAs/HnMXYnu8R9s=", + "lodash": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", + "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", "dev": true }, + "pretty-bytes": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-2.0.1.tgz", + "integrity": "sha1-FV7E0ANvQTkecEXW2+SWPVJdJk8=", + "dev": true, + "requires": { + "get-stdin": "^4.0.1", + "meow": "^3.1.0", + "number-is-nan": "^1.0.0" + } + }, "run-async": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", @@ -13197,126 +20622,416 @@ "requires": { "is-promise": "^2.1.0" } + }, + "shelljs": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.5.3.tgz", + "integrity": "sha1-xUmCuZbHbvDB5rWfvcWCX1txMRM=", + "dev": true + }, + "timed-out": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-3.1.3.tgz", + "integrity": "sha1-lYYL/MXHbCd/j4Mm/Q9bLiDrohc=", + "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 } } }, - "yeoman-generator": { - "version": "0.22.6", - "resolved": "https://registry.npmjs.org/yeoman-generator/-/yeoman-generator-0.22.6.tgz", - "integrity": "sha1-JF3caurDeIBO6nPfJk9p2qH+DaM=", + "yeoman-test": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/yeoman-test/-/yeoman-test-1.9.1.tgz", + "integrity": "sha512-aWB8CglmjBfXd+U5g5Cm1b8KVW0uotjo521IgkepvhNXiAX/YswHYGVnbEFb0m9ZdXztELuNJn2UtuwgFZIw6Q==", "dev": true, "requires": { - "async": "^1.4.2", - "chalk": "^1.0.0", - "class-extend": "^0.1.0", - "cli-table": "^0.3.1", - "cross-spawn": "^2.0.0", - "dargs": "^4.0.0", - "dateformat": "^1.0.11", - "debug": "^2.1.0", - "detect-conflict": "^1.0.0", - "download": "^4.1.2", - "error": "^7.0.2", - "find-up": "^1.0.0", - "github-username": "^2.0.0", - "glob": "^6.0.1", - "gruntfile-editor": "^1.0.0", - "html-wiring": "^1.0.0", - "inquirer": "^0.11.0", - "istextorbinary": "^1.0.2", - "lodash": "^3.5.0", - "mem-fs-editor": "^2.0.0", - "mkdirp": "^0.5.0", - "nopt": "^3.0.0", - "path-exists": "^2.0.0", - "path-is-absolute": "^1.0.0", - "pretty-bytes": "^2.0.1", - "read-chunk": "^1.0.1", - "read-pkg-up": "^1.0.1", - "rimraf": "^2.2.0", - "run-async": "^2.0.0", - "shelljs": "^0.5.0", - "text-table": "^0.2.0", - "through2": "^2.0.0", - "underscore.string": "^3.0.3", - "user-home": "^2.0.0", - "xdg-basedir": "^2.0.0", - "yeoman-assert": "^2.0.0", - "yeoman-environment": "^1.1.0", - "yeoman-test": "^1.0.0", - "yeoman-welcome": "^1.0.0" + "inquirer": "^5.2.0", + "lodash": "^4.17.10", + "mkdirp": "^0.5.1", + "pinkie-promise": "^2.0.1", + "rimraf": "^2.4.4", + "sinon": "^5.0.7", + "yeoman-environment": "^2.3.0", + "yeoman-generator": "^2.0.5" }, "dependencies": { + "ansi-escapes": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", + "dev": true + }, + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "dev": true, + "requires": { + "lodash": "^4.17.14" + } + }, + "binaryextensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binaryextensions/-/binaryextensions-2.2.0.tgz", + "integrity": "sha512-bHhs98rj/7i/RZpCSJ3uk55pLXOItjIrh2sRQZSM6OoktScX+LxJzvlU+FELp9j3TdcddTmmYArLSGptCTwjuw==", + "dev": true + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "dev": true, + "requires": { + "restore-cursor": "^2.0.0" + } + }, + "cli-width": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", + "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", + "dev": true + }, + "clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", + "dev": true + }, + "clone-stats": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", + "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=", + "dev": true + }, + "dargs": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/dargs/-/dargs-5.1.0.tgz", + "integrity": "sha1-7H6lDHhWTNNsnV7Bj2Yyn63ieCk=", + "dev": true + }, + "dateformat": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", + "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", + "dev": true + }, + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "diff": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "dev": true + }, + "ejs": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.7.4.tgz", + "integrity": "sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA==", + "dev": true + }, + "external-editor": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz", + "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==", + "dev": true, + "requires": { + "chardet": "^0.4.0", + "iconv-lite": "^0.4.17", + "tmp": "^0.0.33" + } + }, + "figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "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" + } + }, + "gh-got": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/gh-got/-/gh-got-6.0.0.tgz", + "integrity": "sha512-F/mS+fsWQMo1zfgG9MD8KWvTWPPzzhuVwY++fhQ5Ggd+0P+CAMHtzMZhNxG+TqGfHDChJKsbh6otfMGqO2AKBw==", + "dev": true, + "requires": { + "got": "^7.0.0", + "is-plain-obj": "^1.1.0" + } + }, + "github-username": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/github-username/-/github-username-4.1.0.tgz", + "integrity": "sha1-y+KABBiDIG2kISrp5LXxacML9Bc=", + "dev": true, + "requires": { + "gh-got": "^6.0.0" + } + }, + "globby": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-8.0.2.tgz", + "integrity": "sha512-yTzMmKygLp8RUpG1Ymu2VXPSJQZjNAZPD4ywgYEaG7e4tBJeUQBO8OpXrf1RCNcEs5alsoJYPAMiIHP0cmeC7w==", + "dev": true, + "requires": { + "array-union": "^1.0.1", + "dir-glob": "2.0.0", + "fast-glob": "^2.0.2", + "glob": "^7.1.2", + "ignore": "^3.3.5", + "pify": "^3.0.0", + "slash": "^1.0.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "ignore": { + "version": "3.3.10", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", + "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", + "dev": true + }, + "inquirer": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-5.2.0.tgz", + "integrity": "sha512-E9BmnJbAKLPGonz0HeWHtbKf+EeSP93paWO3ZYoUpq/aowXvYGjjCSuashhXPpzbArIjBbji39THkxTz9ZeEUQ==", + "dev": true, + "requires": { + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.0", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^2.1.0", + "figures": "^2.0.0", + "lodash": "^4.3.0", + "mute-stream": "0.0.7", + "run-async": "^2.2.0", + "rxjs": "^5.5.2", + "string-width": "^2.1.0", + "strip-ansi": "^4.0.0", + "through": "^2.3.6" + } + }, + "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 }, - "glob": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", - "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=", + "istextorbinary": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/istextorbinary/-/istextorbinary-2.6.0.tgz", + "integrity": "sha512-+XRlFseT8B3L9KyjxxLjfXSLMuErKDsd8DBNrsaxoViABMEZlOSCstwmw0qpoFX3+U6yWU1yhLudAe6/lETGGA==", + "dev": true, + "requires": { + "binaryextensions": "^2.1.2", + "editions": "^2.2.0", + "textextensions": "^2.5.0" + } + }, + "load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + } + }, + "log-symbols": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", + "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", "dev": true, "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "chalk": "^2.0.1" } }, - "inquirer": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-0.11.4.tgz", - "integrity": "sha1-geM3ToNhvq/y2XAWIG01nQsy+k0=", + "mem-fs-editor": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/mem-fs-editor/-/mem-fs-editor-4.0.3.tgz", + "integrity": "sha512-tgWmwI/+6vwu6POan82dTjxEpwAoaj0NAFnghtVo/FcLK2/7IhPUtFUUYlwou4MOY6OtjTUJtwpfH1h+eSUziw==", "dev": true, "requires": { - "ansi-escapes": "^1.1.0", - "ansi-regex": "^2.0.0", - "chalk": "^1.0.0", - "cli-cursor": "^1.0.1", - "cli-width": "^1.0.1", - "figures": "^1.3.5", - "lodash": "^3.3.1", - "readline2": "^1.0.1", - "run-async": "^0.1.0", - "rx-lite": "^3.1.2", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.0", - "through": "^2.3.6" + "commondir": "^1.0.1", + "deep-extend": "^0.6.0", + "ejs": "^2.5.9", + "glob": "^7.0.3", + "globby": "^7.1.1", + "isbinaryfile": "^3.0.2", + "mkdirp": "^0.5.0", + "multimatch": "^2.0.0", + "rimraf": "^2.2.8", + "through2": "^2.0.0", + "vinyl": "^2.0.1" }, "dependencies": { - "run-async": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-0.1.0.tgz", - "integrity": "sha1-yK1KXhEGYeQCp9IbUw4AnyX444k=", + "globby": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/globby/-/globby-7.1.1.tgz", + "integrity": "sha1-+yzP+UAfhgCUXfral0QMypcrhoA=", "dev": true, "requires": { - "once": "^1.3.0" + "array-union": "^1.0.1", + "dir-glob": "^2.0.0", + "glob": "^7.1.2", + "ignore": "^3.3.5", + "pify": "^3.0.0", + "slash": "^1.0.0" } } } }, - "lodash": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", - "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "mute-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", "dev": true }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", "dev": true, "requires": { - "minimist": "0.0.8" + "mimic-fn": "^1.0.0" + } + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "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 + }, + "pretty-bytes": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-4.0.2.tgz", + "integrity": "sha1-sr+C5zUNZcbDOqlaqlpPYyf2HNk=", + "dev": true + }, + "read-chunk": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/read-chunk/-/read-chunk-2.1.0.tgz", + "integrity": "sha1-agTAkoAF7Z1C4aasVgDhnLx/9lU=", + "dev": true, + "requires": { + "pify": "^3.0.0", + "safe-buffer": "^5.1.1" + } + }, + "read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", + "dev": true, + "requires": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + } + }, + "read-pkg-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", + "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=", + "dev": true, + "requires": { + "find-up": "^2.0.0", + "read-pkg": "^3.0.0" + } + }, + "replace-ext": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", + "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", + "dev": true + }, + "restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "dev": true, + "requires": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" } }, "run-async": { @@ -13329,159 +21044,221 @@ } }, "shelljs": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.5.3.tgz", - "integrity": "sha1-xUmCuZbHbvDB5rWfvcWCX1txMRM=", - "dev": true - } - } - }, - "yeoman-test": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/yeoman-test/-/yeoman-test-1.6.0.tgz", - "integrity": "sha1-q/8pFzPhbokj2e78hpHGMoiL+Ug=", - "dev": true, - "requires": { - "inquirer": "^1.0.2", - "lodash": "^4.3.0", - "mkdirp": "^0.5.1", - "pinkie-promise": "^2.0.1", - "rimraf": "^2.4.4", - "sinon": "^1.17.2", - "yeoman-environment": "^1.5.2", - "yeoman-generator": "^0.24.1" - }, - "dependencies": { - "cli-width": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.1.0.tgz", - "integrity": "sha1-sjTKIJsp72b8UY2bmNWEewDt8Ao=", - "dev": true - }, - "cross-spawn": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-4.0.2.tgz", - "integrity": "sha1-e5JHYhwjrf3ThWAEqCPL45dCTUE=", + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.3.tgz", + "integrity": "sha512-fc0BKlAWiLpwZljmOvAOTE/gXawtCoNrP5oaY7KIaQbbyHeQVg01pSEuEGvGh3HEdBU4baCD7wQBwADmM/7f7A==", "dev": true, "requires": { - "lru-cache": "^4.0.1", - "which": "^1.2.9" + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" } }, - "inquirer": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-1.2.3.tgz", - "integrity": "sha1-TexvMvN+97sLLtPx0aXD9UUHSRg=", + "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": { - "ansi-escapes": "^1.1.0", - "chalk": "^1.0.0", - "cli-cursor": "^1.0.1", - "cli-width": "^2.0.0", - "external-editor": "^1.1.0", - "figures": "^1.3.5", - "lodash": "^4.3.0", - "mute-stream": "0.0.6", - "pinkie-promise": "^2.0.0", - "run-async": "^2.2.0", - "rx": "^4.1.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.0", - "through": "^2.3.6" + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" } }, - "istextorbinary": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/istextorbinary/-/istextorbinary-2.1.0.tgz", - "integrity": "sha1-2+0qb1G+L3R1to+JRlgRFBt1iHQ=", + "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": { - "binaryextensions": "1 || 2", - "editions": "^1.1.1", - "textextensions": "1 || 2" + "ansi-regex": "^3.0.0" } }, - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", "dev": true }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "requires": { - "minimist": "0.0.8" + "has-flag": "^3.0.0" } }, - "mute-stream": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.6.tgz", - "integrity": "sha1-SJYrGeFp/R38JAs/HnMXYnu8R9s=", + "textextensions": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/textextensions/-/textextensions-2.6.0.tgz", + "integrity": "sha512-49WtAWS+tcsy93dRt6P0P3AMD2m5PvXRhuEA0kaXos5ZLlujtYmpmFsB+QvWUSxE1ZsstmYXfQ7L40+EcQgpAQ==", "dev": true }, - "pretty-bytes": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-3.0.1.tgz", - "integrity": "sha1-J9AAjXeAY6C0gRuzXHnxvV1fvM8=", + "untildify": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/untildify/-/untildify-3.0.3.tgz", + "integrity": "sha512-iSk/J8efr8uPT/Z4eSUywnqyrQU7DSdMfdqK4iWEaUVVmcP5JcnpRqmVMwcwcnmI1ATFNgC5V90u09tBynNFKA==", + "dev": true + }, + "vinyl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.0.tgz", + "integrity": "sha512-MBH+yP0kC/GQ5GwBqrTPTzEfiiLjta7hTtvQtbxBgTeSXsmKQRQecjibMbxIXzVT3Y9KJK+drOz1/k+vsu8Nkg==", "dev": true, "requires": { - "number-is-nan": "^1.0.0" + "clone": "^2.1.1", + "clone-buffer": "^1.0.0", + "clone-stats": "^1.0.0", + "cloneable-readable": "^1.0.0", + "remove-trailing-separator": "^1.0.1", + "replace-ext": "^1.0.0" } }, - "run-async": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", - "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", + "yeoman-environment": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/yeoman-environment/-/yeoman-environment-2.7.0.tgz", + "integrity": "sha512-YNzSUWgJVSgnm0qgLON4Gb2nTm+kywBiWjK4MbvosjUP2YJJ30lNhEx7ukyzKRPUlsavd5IsuALtF6QaVrq81A==", "dev": true, "requires": { - "is-promise": "^2.1.0" + "chalk": "^2.4.1", + "cross-spawn": "^6.0.5", + "debug": "^3.1.0", + "diff": "^3.5.0", + "escape-string-regexp": "^1.0.2", + "globby": "^8.0.1", + "grouped-queue": "^0.3.3", + "inquirer": "^6.0.0", + "is-scoped": "^1.0.0", + "lodash": "^4.17.10", + "log-symbols": "^2.2.0", + "mem-fs": "^1.1.0", + "strip-ansi": "^4.0.0", + "text-table": "^0.2.0", + "untildify": "^3.0.3" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, + "external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "requires": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + } + }, + "inquirer": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz", + "integrity": "sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==", + "dev": true, + "requires": { + "ansi-escapes": "^3.2.0", + "chalk": "^2.4.2", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^3.0.3", + "figures": "^2.0.0", + "lodash": "^4.17.12", + "mute-stream": "0.0.7", + "run-async": "^2.2.0", + "rxjs": "^6.4.0", + "string-width": "^2.1.0", + "strip-ansi": "^5.1.0", + "through": "^2.3.6" + }, + "dependencies": { + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "rxjs": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.4.tgz", + "integrity": "sha512-naMQXcgEo3csAEGvw/NydRA0fuS2nDZJiw1YUWFKU7aPPAPGZEsD4Iimit96qwCieH6y614MCLYwdkrWx7z/7Q==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + } } }, "yeoman-generator": { - "version": "0.24.1", - "resolved": "https://registry.npmjs.org/yeoman-generator/-/yeoman-generator-0.24.1.tgz", - "integrity": "sha1-HKdEKdnFyV2wsihZ7BgKJZm8H44=", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/yeoman-generator/-/yeoman-generator-2.0.5.tgz", + "integrity": "sha512-rV6tJ8oYzm4mmdF2T3wjY+Q42jKF2YiiD0VKfJ8/0ZYwmhCKC9Xs2346HVLPj/xE13i68psnFJv7iS6gWRkeAg==", "dev": true, "requires": { - "async": "^2.0.0", - "chalk": "^1.0.0", - "class-extend": "^0.1.0", + "async": "^2.6.0", + "chalk": "^2.3.0", "cli-table": "^0.3.1", - "cross-spawn": "^4.0.0", - "dargs": "^4.0.0", - "dateformat": "^1.0.11", - "debug": "^2.1.0", + "cross-spawn": "^6.0.5", + "dargs": "^5.1.0", + "dateformat": "^3.0.3", + "debug": "^3.1.0", "detect-conflict": "^1.0.0", "error": "^7.0.2", - "find-up": "^1.0.0", - "github-username": "^2.0.0", - "glob": "^7.0.3", - "gruntfile-editor": "^1.0.0", - "html-wiring": "^1.0.0", - "istextorbinary": "^2.1.0", - "lodash": "^4.11.1", - "mem-fs-editor": "^2.0.0", - "mkdirp": "^0.5.0", - "nopt": "^3.0.0", - "path-exists": "^2.0.0", - "path-is-absolute": "^1.0.0", - "pretty-bytes": "^3.0.1", - "read-chunk": "^1.0.0", - "read-pkg-up": "^1.0.1", - "rimraf": "^2.2.0", + "find-up": "^2.1.0", + "github-username": "^4.0.0", + "istextorbinary": "^2.2.1", + "lodash": "^4.17.10", + "make-dir": "^1.1.0", + "mem-fs-editor": "^4.0.0", + "minimist": "^1.2.0", + "pretty-bytes": "^4.0.2", + "read-chunk": "^2.1.0", + "read-pkg-up": "^3.0.0", + "rimraf": "^2.6.2", "run-async": "^2.0.0", - "shelljs": "^0.7.0", + "shelljs": "^0.8.0", "text-table": "^0.2.0", "through2": "^2.0.0", - "underscore.string": "^3.0.3", - "user-home": "^2.0.0", - "yeoman-assert": "^2.0.0", - "yeoman-environment": "^1.1.0", - "yeoman-test": "^1.0.0", - "yeoman-welcome": "^1.0.0" + "yeoman-environment": "^2.0.5" + }, + "dependencies": { + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } } } } @@ -13533,12 +21310,6 @@ "yosay": "^1.0.0" }, "dependencies": { - "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", - "dev": true - }, "cross-spawn": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz", @@ -13549,6 +21320,29 @@ "which": "^1.2.9" } }, + "got": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/got/-/got-5.7.1.tgz", + "integrity": "sha1-X4FjWmHkplifGAVp6k44FoClHzU=", + "dev": true, + "requires": { + "create-error-class": "^3.0.1", + "duplexer2": "^0.1.4", + "is-redirect": "^1.0.0", + "is-retry-allowed": "^1.0.0", + "is-stream": "^1.0.0", + "lowercase-keys": "^1.0.0", + "node-status-codes": "^1.0.0", + "object-assign": "^4.0.1", + "parse-json": "^2.1.0", + "pinkie-promise": "^2.0.0", + "read-all-stream": "^3.0.0", + "readable-stream": "^2.0.5", + "timed-out": "^3.0.0", + "unzip-response": "^1.0.2", + "url-parse-lax": "^1.0.0" + } + }, "inquirer": { "version": "0.11.4", "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-0.11.4.tgz", @@ -13614,6 +21408,12 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", "dev": true + }, + "timed-out": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-3.1.3.tgz", + "integrity": "sha1-lYYL/MXHbCd/j4Mm/Q9bLiDrohc=", + "dev": true } } }, diff --git a/package.json b/package.json index d8eb10736..5f31003ea 100644 --- a/package.json +++ b/package.json @@ -20,13 +20,13 @@ "gulp-angular-templatecache": "^2.2.1", "gulp-autoprefixer": "3.1.0", "gulp-changed": "1.3.1", - "gulp-cssnano": "2.1.2", + "cssnano": "4.0.0", "gulp-eslint": "3.0.1", "gulp-flatten": "0.3.0", "gulp-footer": "1.0.5", "gulp-htmlmin": "2.0.0", "gulp-if": "2.0.1", - "gulp-imagemin": "3.0.2", + "gulp-imagemin": "^5.0.3", "gulp-inject": "4.1.0", "gulp-natural-sort": "0.1.1", "gulp-ng-annotate": "2.0.0", diff --git a/pom.xml b/pom.xml index afd7d61ea..5773bd672 100644 --- a/pom.xml +++ b/pom.xml @@ -1,5 +1,6 @@ - + 4.0.0 @@ -32,8 +33,9 @@ 9.7.0 1.15 2.1.7 + 1.12.0 0.7.7.201606060606 - + 3.0.6 6.6.0 2.2.0 3.5 @@ -156,6 +158,17 @@ + + biz.paluch.logging + logstash-gelf + ${gelf.version} + + + org.codehaus.janino + janino + ${janino.version} + + com.github.ralfstuckert.pdfbox-layout pdfbox1-layout @@ -217,12 +230,56 @@ sprint-ldap ${sprint.version} + + net.dongliu + gson-java8-datatype + 1.1.0 + + + net.sf.jasperreports + jasperreports + ${jasperreports.version} + + + xml-apis + xml-apis + + + jackson-databind + com.fasterxml.jackson.core + + + jackson-core + com.fasterxml.jackson.core + + + jackson-annotations + com.fasterxml.jackson.core + + + castor + org.codehaus.castor + + + jdtcore + eclipse + + + com.lowagie + itext + + + org.olap4j + olap4j + + + + + net.sf.jasperreports + jasperreports-fonts + 6.0.0 + - - - - - it.cnr.si.storage storage-cloud-commons @@ -325,12 +382,10 @@ 1.13 - org.codehaus.groovy - groovy - 2.4.3 - compile + org.jsoup + jsoup + 1.8.2 - org.hibernate hibernate-core @@ -351,11 +406,6 @@ json 20160810 - - org.jsoup - jsoup - 1.8.2 - org.olap4j olap4j @@ -379,6 +429,12 @@ 3.0.6.RELEASE + + org.springframework.cloud + spring-cloud-config-server + 1.1.3.RELEASE + + @@ -834,7 +890,7 @@ gulp - build --no-notification + build diff --git a/pom.xml.releaseBackup b/pom.xml.releaseBackup new file mode 100644 index 000000000..fe73cc552 --- /dev/null +++ b/pom.xml.releaseBackup @@ -0,0 +1,852 @@ + + + 4.0.0 + + + archetype + it.cnr.si + 1.0.7 + + + it.cnr.si.flows + sprint-flows + 0.3.0-SNAPSHOT + war + + + sprint-flows + + + 3.0.0 + + + + scm:git:ssh://git@git.si.cnr.it/dev/sprint-flows.git + scm:git:ssh://git@git.si.cnr.it/dev/sprint-flows.git + HEAD + + + + 2.3.3 + 5.22.0 + 3.5.2 + 9.7.0 + 1.11 + 2.1.7 + 0.7.7.201606060606 + 2.9 + 6.6.0 + 2.2.0 + 3.5 + 3.4.2 + 1.0.0.Final + 1.4.1 + 3.0.1 + 3.0.0 + yyyyMMddHHmmss + + + 3.0.2 + 2.5.0 + 1.4.0.RELEASE + 4.1.1.RELEASE + 4.3.2.RELEASE + 2.0.1 + it.cnr.si.FlowsApp + 0.0.6 + + + + + + com.github.ralfstuckert.pdfbox-layout + pdfbox1-layout + 0.8.1 + + + com.opencsv + opencsv + 3.9 + + + org.apache.pdfbox + pdfbox + 1.8.12 + + + org.apache.poi + poi + 3.6 + + + org.json + json + 20160810 + + + org.slf4j + slf4j-api + 1.7.21 + + + org.springframework + spring-context + ${spring.version} + + + org.springframework + spring-core + ${spring.version} + + + org.springframework + spring-tx + ${spring.version} + + + org.springframework + spring-web + ${spring.version} + + + org.springframework + spring-webmvc + ${spring.version} + + + org.springframework.security + spring-security-config + ${spring.security.version} + + + org.springframework.security + spring-security-core + ${spring.security.version} + + + org.springframework.security + spring-security-data + ${spring.security.version} + + + org.springframework.security + spring-security-ldap + ${spring.security.version} + + + org.springframework.security + spring-security-web + ${spring.security.version} + + + org.thymeleaf + thymeleaf-spring4 + 3.0.6.RELEASE + + + + + + + com.github.ralfstuckert.pdfbox-layout + pdfbox1-layout + 0.8.1 + + + com.lowagie + itext + 2.1.7.js2 + + + + com.opencsv + opencsv + 3.9 + + + + + io.github.openfeign + feign-core + ${feign.version} + + + io.github.openfeign + feign-gson + ${feign.version} + + + io.github.openfeign.form + feign-form + 3.3.0 + + + + it.cnr + jada-ejb3 + ${jada.version} + + + persistence-api + javax.persistence + + + + + it.cnr.commons + firmadigitale + ${firmadigitale.version} + + + + it.cnr.si + ace-client + ${ace-client.version} + + + + it.cnr.si + storage-cloud-cmis + ${storage-cloud-cmis.version} + + + it.cnr.si + storage-cloud-commons + ${storage-cloud-cmis.version} + + + it.cnr.si.sprint + sprint-core + ${sprint.version} + + + json + org.apache.geronimo.bundles + + + + + it.cnr.si.sprint + sprint-ldap + ${sprint.version} + + + net.dongliu + gson-java8-datatype + 1.1.0 + + + net.sf.jasperreports + jasperreports + ${jasperreports.version} + + + xml-apis + xml-apis + + + jackson-databind + com.fasterxml.jackson.core + + + jackson-core + com.fasterxml.jackson.core + + + jackson-annotations + com.fasterxml.jackson.core + + + castor + org.codehaus.castor + + + jdtcore + eclipse + + + com.lowagie + itext + + + org.olap4j + olap4j + + + + + net.sf.jasperreports + jasperreports-fonts + 6.0.0 + + + org.activiti + activiti-spring-boot-starter-actuator + ${activiti.version} + + + + org.activiti + activiti-spring-boot-starter-basic + ${activiti.version} + + + + org.activiti + activiti-spring-boot-starter-rest-api + ${activiti.version} + + + + org.apache.pdfbox + pdfbox + 1.8.12 + + + org.apache.poi + poi + 3.6 + + + org.apache.tika + tika-core + 1.13 + + + org.codehaus.groovy + groovy + 2.4.3 + compile + + + org.json + json + 20160810 + + + org.jsoup + jsoup + 1.8.2 + + + org.olap4j + olap4j + 1.2.0 + + + org.projectlombok + lombok + 1.18.0 + provided + + + org.springframework.boot + spring-boot-starter-test + ${spring-boot.version} + test + + + org.thymeleaf + thymeleaf-spring4 + 3.0.6.RELEASE + + + + + spring-boot:run + + + + org.eclipse.m2e + lifecycle-mapping + 1.0.0 + + + + + + org.jacoco + jacoco-maven-plugin + ${jacoco-maven-plugin.version} + + prepare-agent + + + + + + + + + com.github.eirslett + frontend-maven-plugin + ${frontend-maven-plugin.version} + + install-node-and-npm + npm + bower + gulp + + + + + + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + ${spring-boot.version} + + + + repackage + + + ${start-class} + + + + + ${start-class} + + + + + + + com.github.ekryd.sortpom + sortpom-maven-plugin + ${sortpom-maven-plugin.version} + + + verify + + sort + + + + + true + 4 + groupId,artifactId + groupId,artifactId + true + false + + + + com.spotify + docker-maven-plugin + 0.4.10 + + sprint + src/main/docker + + + / + ${project.build.directory} + ${project.build.finalName}.war + + + + + + io.gatling + gatling-maven-plugin + ${gatling-maven-plugin.version} + + src/test/gatling/conf + src/test/gatling/data + target/gatling/results + src/test/gatling/bodies + src/test/gatling/simulations + + * + + + + org.apache.maven.plugins + maven-eclipse-plugin + 2.10 + + true + true + + + + org.apache.maven.plugins + maven-enforcer-plugin + ${maven-enforcer-plugin.version} + + + enforce-versions + + enforce + + + + + + + You are running an older version of + Maven. + JHipster requires at least Maven + 3.0 + [3.0.0,) + + + You are running an older version of + Java. + JHipster requires at least JDK + ${java.version} + [${java.version}.0,) + + + + + + org.apache.maven.plugins + maven-resources-plugin + ${maven-resources-plugin.version} + + + default-resources + validate + + copy-resources + + + target/classes + false + + # + + + + src/main/resources/ + true + + **/*.xml + **/*.yml + + + + src/main/resources/ + false + + **/*.xml + **/*.yml + + + + + + + + + org.apache.maven.plugins + maven-surefire-plugin + 2.12.4 + + -Djava.security.egd=file:/dev/./urandom + -Xmx256m + ${surefireArgLine} + + alphabetical + + + + org.bsc.maven + maven-processor-plugin + 2.2.4 + + + process + generate-sources + + process + + + + + + org.mapstruct + mapstruct-processor + ${mapstruct.version} + + + + ${project.build.directory}/generated-sources + + org.mapstruct.ap.MappingProcessor + + + true + spring + + + + + + + org.jacoco + jacoco-maven-plugin + ${jacoco-maven-plugin.version} + + + pre-unit-tests + + prepare-agent + + + + ${project.testresult.directory}/coverage/jacoco/jacoco.exec + + surefireArgLine + + + + + post-unit-test + test + + report + + + ${project.testresult.directory}/coverage/jacoco/jacoco.exec + ${project.testresult.directory}/coverage/jacoco + + + + + + org.liquibase + liquibase-maven-plugin + ${liquibase.version} + + + org.javassist + javassist + 3.18.2-GA + + + org.liquibase.ext + liquibase-hibernate4 + ${liquibase-hibernate4.version} + + + org.springframework.boot + spring-boot-starter-data-jpa + ${spring-boot.version} + + + + src/main/resources/config/liquibase/master.xml + src/main/resources/config/liquibase/changelog/${maven.build.timestamp}_changelog.xml + + public + + + + + + flows + + + jdbc:h2:file:./DB-H2/flows-oiv;DB_CLOSE_DELAY=-1 + hibernate:spring:it.cnr.si.domain?dialect=&hibernate.ejb.naming_strategy=org.springframework.boot.orm.jpa.hibernate.SpringNamingStrategy + true + debug + oauth_access_token, + oauth_approvals, + oauth_client_details, + oauth_client_token, + oauth_code, + oauth_refresh_token + + + + org.sonarsource.scanner.maven + sonar-maven-plugin + ${sonar-maven-plugin.version} + + + org.springframework.boot + spring-boot-maven-plugin + + true + + + + + + + + + no-liquibase + + ,no-liquibase + + + + swagger + + ,swagger + + + + dev + + true + + + + + org.apache.maven.plugins + maven-war-plugin + ${maven-war-plugin.version} + + src/main/webapp/ + WEB-INF/lib/tomcat-*.jar + + + + + + + DEBUG + + dev${profile.no-liquibase} + + + + org.springframework.boot + spring-boot-devtools + ${spring-boot.version} + true + + + org.springframework.boot + spring-boot-starter-tomcat + ${spring-boot.version} + + + + + prod + + + + com.github.eirslett + frontend-maven-plugin + 1.0 + + + install node and npm + + install-node-and-npm + + + v6.17.1 + 3.10.5 + + + + npm install + + npm + + + install + + + + bower install + + bower + + + install --allow-root --no-color + + + + gulp build + + gulp + + + build --no-notification + + + + gulp test + test + + gulp + + + test --no-notification + + + + + + maven-clean-plugin + 2.5 + + + + target/www/ + + + + + + org.apache.maven.plugins + maven-war-plugin + ${maven-war-plugin.version} + + false + target/www/ + WEB-INF/lib/tomcat-*.jar + + + + org.springframework.boot + spring-boot-maven-plugin + ${spring-boot.version} + + true + + + + + + + INFO + + prod${profile.swagger}${profile.no-liquibase} + + + + org.springframework.boot + spring-boot-starter-tomcat + ${spring-boot.version} + + + + + diff --git a/src/batch/java/it/cnr/si/flows/batch/AggiornaFlussiAcquistiPerTrasparenzaURP.java b/src/batch/java/it/cnr/si/flows/batch/AggiornaFlussiAcquistiPerTrasparenzaURP.java new file mode 100644 index 000000000..279dc42d0 --- /dev/null +++ b/src/batch/java/it/cnr/si/flows/batch/AggiornaFlussiAcquistiPerTrasparenzaURP.java @@ -0,0 +1,173 @@ +package it.cnr.si.flows.batch; + +import com.opencsv.CSVParser; +import feign.FeignException; +import it.cnr.si.FlowsApp; +import it.cnr.si.flows.ng.exception.UnexpectedResultException; +import it.cnr.si.flows.ng.service.AceBridgeService; +import it.cnr.si.flows.ng.service.SiperService; +import it.cnr.si.service.AceService; +import it.cnr.si.service.MembershipService; +import it.cnr.si.service.RelationshipService; +import it.cnr.si.service.dto.anagrafica.letture.EntitaOrganizzativaWebDto; +import it.cnr.si.service.dto.anagrafica.letture.GerarchiaWebDto; +import it.cnr.si.service.dto.anagrafica.scritture.EntitaOrganizzativaDto; + +import org.activiti.engine.HistoryService; +import org.activiti.engine.RuntimeService; +import org.activiti.engine.history.HistoricProcessInstance; +import org.activiti.engine.history.HistoricProcessInstanceQuery; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.ActiveProfiles; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.web.client.HttpClientErrorException; + +import javax.inject.Inject; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +@SpringBootTest(classes = FlowsApp.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) +@ActiveProfiles(profiles = "dev,cnr") +@RunWith(SpringJUnit4ClassRunner.class) +public class AggiornaFlussiAcquistiPerTrasparenzaURP { + + private static final Logger log = LoggerFactory.getLogger(AggiornaFlussiAcquistiPerTrasparenzaURP.class); + + @Inject + private AceService aceService; + @Inject + private AceBridgeService aceBridgeService; + @Inject + private SiperService siperService; + @Inject + private MembershipService membershipService; + @Inject + private HistoryService historyService; + @Inject + private RuntimeService runtimeService; + @Inject + private RelationshipService relationshipService; + @Value("${ace.url}") + private String aceURL; + + private final Map errors = new HashMap<>(); + int personNr = 1; + int cnt = 0; + List results = new ArrayList<>(); + EntitaOrganizzativaWebDto entitaOrganizzativaResponsabileStruttura = null; + + //@Test questa riga non va mai messa su git + //@Test + public void runBatch() throws IOException { + + results.add("---------- LISTA RISULTATI -----------------"); + + + HistoricProcessInstanceQuery historicProcessInstanceQuery = historyService.createHistoricProcessInstanceQuery() + .includeProcessVariables() + .processDefinitionKey("acquisti") + .unfinished(); + //.processInstanceNameLike("%Pre Determina%") + //.variableValueEquals("flagIsTrasparenza", "true"); + historicProcessInstanceQuery.list().forEach(processInstance -> { + cnt++; + log.info("{}) il processo: {}, id = {} del flusso {}", cnt, processInstance.getId(), processInstance.getName(), processInstance.getProcessDefinitionKey()); + if(processInstance.getProcessVariables().get("strumentoAcquisizione") != null) { + log.info(" strumentoAcquisizione: {} ", processInstance.getProcessVariables().get("strumentoAcquisizione").toString()); + } + setFlagIsTrasparenza(processInstance); + setDataScadenzaBando(processInstance); + setStatoFinaleDomanda(processInstance); + }); + + //RPINT RISULTATI + results.forEach(result -> { + log.info(result); + }); + } + + private void setFlagIsTrasparenza(HistoricProcessInstance processInstance) { + + if(!(processInstance.getName().indexOf("Modifica Decisione") != -1) + && !(processInstance.getName().indexOf("Pre Determina") != -1) + && !(processInstance.getName().indexOf("Verifica Decisione") != -1) + && !(processInstance.getName().indexOf("Firma Decisione") != -1) + && !(processInstance.getName().indexOf("Annulla Decisione") != -1) + && !(processInstance.getName().indexOf("Protocollo Decisione") != -1) + ) + { + if (processInstance.getProcessVariables().get("flagIsTrasparenza") != null) { + log.info(" *** il processo: " + processInstance.getId() + " -- " + processInstance.getName() + " flagIsTrasparenza: " + processInstance.getProcessVariables().get("flagIsTrasparenza").toString()); + } else { + results.add(" *** AGGIUNGO flagIsTrasparenza true al processo: " + processInstance.getId() + " -- " + processInstance.getName() ); + runtimeService.setVariable(processInstance.getId(), "flagIsTrasparenza", "true"); + } + } + } + + private void setDataScadenzaBando(HistoricProcessInstance processInstance) { + + if(!(processInstance.getName().indexOf("Modifica Decisione") != -1) + && !(processInstance.getName().indexOf("Pre Determina") != -1) + && !(processInstance.getName().indexOf("Verifica Decisione") != -1) + && !(processInstance.getName().indexOf("Firma Decisione") != -1) + && !(processInstance.getName().indexOf("Annulla Decisione") != -1) + && !(processInstance.getName().indexOf("Protocollo Decisione") != -1) + && (processInstance.getProcessVariables().get("strumentoAcquisizione").toString().indexOf("PROCEDURA SELETTIVA") != -1) + ) + { + if (processInstance.getProcessVariables().get("dataScadenzaBando") != null) { + log.info(" ---- " + processInstance.getId() + " -- " + processInstance.getName() + " dataScadenzaBando: " + processInstance.getProcessVariables().get("dataScadenzaBando").toString()); + } else { + results.add(" ---- AGGIUNGO dataScadenzaBando 2019-09-12T22:00:00.000Z al processo: " + processInstance.getId() + " -- " + processInstance.getName() ); + runtimeService.setVariable(processInstance.getId(), "dataScadenzaBando", "2019-09-12T22:00:00.000Z"); + } + } + } + + private void setStatoFinaleDomanda(HistoricProcessInstance processInstance) { + + if (processInstance.getProcessVariables().get("statoFinaleDomanda") != null) { + log.info(" *** il processo: " + processInstance.getId() + " -- " + processInstance.getName() + " statoFinaleDomanda: " + processInstance.getProcessVariables().get("statoFinaleDomanda").toString()); + } else { + results.add(" *** AGGIUNGO statoFinaleDomanda IN CORSO al processo: " + processInstance.getId() + " -- " + processInstance.getName() ); + runtimeService.setVariable(processInstance.getId(), "statoFinaleDomanda", "IN CORSO"); + } + } +} + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/batch/java/it/cnr/si/flows/batch/GenerazioneJsonperPDF.java b/src/batch/java/it/cnr/si/flows/batch/GenerazioneJsonperPDF.java new file mode 100644 index 000000000..6ddae32f4 --- /dev/null +++ b/src/batch/java/it/cnr/si/flows/batch/GenerazioneJsonperPDF.java @@ -0,0 +1,116 @@ +package it.cnr.si.flows.batch; + +import it.cnr.si.FlowsApp; +import it.cnr.si.flows.ng.service.AceBridgeService; +import it.cnr.si.flows.ng.service.SiperService; +import it.cnr.si.service.AceService; +import org.activiti.engine.HistoryService; +import org.activiti.engine.RuntimeService; +import org.activiti.engine.history.HistoricProcessInstance; +import org.activiti.engine.impl.persistence.entity.VariableInstance; +import org.activiti.engine.impl.persistence.entity.VariableInstanceEntity; +import org.activiti.engine.impl.variable.LongStringType; +import org.activiti.engine.impl.variable.SerializableType; +import org.apache.commons.lang.StringEscapeUtils; +import org.json.JSONObject; +import org.junit.runner.RunWith; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.ActiveProfiles; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +import javax.inject.Inject; +import java.io.IOException; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; +import java.util.TimeZone; + +@SpringBootTest(classes = FlowsApp.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) +@ActiveProfiles(profiles = "dev,cnr") +@RunWith(SpringJUnit4ClassRunner.class) +public class GenerazioneJsonperPDF { + + private static final Logger log = LoggerFactory.getLogger(GenerazioneJsonperPDF.class); + + @Inject + private AceService aceService; + @Inject + private AceBridgeService aceBridgeService; + @Inject + private SiperService siperService; + @Inject + private HistoryService historyService; + @Inject + private RuntimeService runtimeService; + + + + private final Map errors = new HashMap<>(); + int personNr = 0; + + //@Test questa riga non va mai messa su git + //@Test + public void runBatch() throws IOException { + String processInstanceId = "25001"; + //Sotituisco la lista di variabili da quelle storiche (historicProcessInstance.getProcessVariables() )a quelle attuali (variableInstanceJson) + JSONObject variableInstanceJson = new JSONObject(); + + HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery() + .includeProcessVariables() + .processInstanceId(processInstanceId) + .singleResult(); + + // Verifico se il workflow sia terminato + if((historicProcessInstance != null) && (historicProcessInstance.getEndTime() != null)){ + //carico le processVariables e rimappo in formato json il campo stringa "valutazioneEsperienze_json" + variableInstanceJson = new JSONObject(historicProcessInstance.getProcessVariables()); + } else { + Map tutteVariabiliMap = runtimeService.getVariableInstances(processInstanceId); + for (Map.Entry entry : tutteVariabiliMap.entrySet()) { + String key = entry.getKey(); + VariableInstance value = entry.getValue(); + //le variabili di tipo serializable (file) non vanno inseriti nel json delle variabili che verranno inseriti nel pdf + //(ho testato valutazioni esperienze_Json fino a 11000 caratteri ed a questo livello appare come longString) + if((!(((VariableInstanceEntity) value).getType() instanceof SerializableType)) || (((VariableInstanceEntity) value).getType() instanceof LongStringType)){ + if(key.toString().equals("startDate")) { + Date startDate = (Date)value.getValue(); + SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm"); + sdf.setTimeZone(TimeZone.getTimeZone("Europe/Rome")); + variableInstanceJson.put(key, sdf.format(startDate)); + } else { + // ... + String valueEscaped = StringEscapeUtils.escapeHtml(value.getValue().toString()); + variableInstanceJson.put(key, valueEscaped); + } + } + } + log.info("variableInstanceJson: {}", variableInstanceJson); + } + } + + +} + + + + + + + + + + + + + + + + + + + + + diff --git a/src/batch/java/it/cnr/si/flows/batch/PopolazioneProfiliAcquistiBatch.java b/src/batch/java/it/cnr/si/flows/batch/PopolazioneProfiliAcquistiBatch.java new file mode 100644 index 000000000..57de8ea25 --- /dev/null +++ b/src/batch/java/it/cnr/si/flows/batch/PopolazioneProfiliAcquistiBatch.java @@ -0,0 +1,128 @@ +package it.cnr.si.flows.batch; + +import com.opencsv.CSVParser; +import it.cnr.si.FlowsApp; +import it.cnr.si.flows.ng.service.AceBridgeService; +import it.cnr.si.service.AceService; +import it.cnr.si.service.dto.anagrafica.letture.EntitaOrganizzativaWebDto; +import it.cnr.si.service.dto.anagrafica.letture.PersonaWebDto; +import org.junit.runner.RunWith; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.ActiveProfiles; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +import javax.inject.Inject; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.time.LocalDate; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Stream; + +@SpringBootTest(classes = FlowsApp.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) +@ActiveProfiles(profiles = "dev,cnr") +@RunWith(SpringJUnit4ClassRunner.class) +public class PopolazioneProfiliAcquistiBatch { + + private static final Logger log = LoggerFactory.getLogger(PopolazioneProfiliAcquistiBatch.class); + + @Inject + private AceService aceService; + @Inject + private AceBridgeService aceBridgeService; + private final Map errors = new HashMap<>(); + + //@Test questa riga non va mai messa su git + public void runBatch() throws IOException { + Map persone = getPersoneDaFile(); + + persone.forEach( (username, siglaRuolo) -> { + inserisciRuolo(username, siglaRuolo); + }); + + errors.forEach( (tripla, risultato) -> { + log.error(tripla +": "+ risultato); + }); + } + + private void inserisciRuolo(String username, String siglaRuolo) { + + EntitaOrganizzativaWebDto afferenzaUtente = aceBridgeService.getAfferenzaUtente(username); + String cdsuo = afferenzaUtente.getCdsuo(); + + + List eos = aceService.entitaOrganizzativaFind(null, null, cdsuo, LocalDate.now(), null).getItems(); + PersonaWebDto persona = aceService.personaByUsername(username); + + eos.forEach(eo -> { + + Integer idRuolo = aceService.getRuoloBySigla(siglaRuolo).getId(); + Integer idEo = eo.getId(); + Integer idPersona = persona.getId(); + + try { + aceService.associaRuoloPersona(idRuolo, idPersona, idEo); + log.info("Associato ruolo {} persona {} eo {}", idRuolo, idPersona, idEo); + errors.put(username + " "+ siglaRuolo + " "+ eo.getSigla() + "("+ eo.getId() +")", "OK"); + } catch (RuntimeException e) { + if (e.getMessage().contains("Il Ruolo specificato e' gia' presente")) { + errors.put(username + " "+ siglaRuolo + " "+ eo.getSigla() + "("+ eo.getId() +")", "PRESENTE"); + } else { + log.error("Errore nella richiesta", e); + errors.put(username + " "+ siglaRuolo + " "+ eo.getSigla() + "("+ eo.getId() +")", e.getMessage()); + } + } + }); + + + } + + private Map getPersoneDaFile() throws IOException { + + CSVParser parser = new CSVParser(','); + + Stream lines = Files.lines(Paths.get("./src/batch/resources/batch/190627 associazione utenze ruolo per ACE 07 maggio.csv")); + + Map associazioni = new HashMap<>(); + + lines + .skip(1). + forEach(l -> { + try { + + String[] values = parser.parseLine(l); + log.info(values[0] + " " + values[1]); + associazioni.put(values[0], values[1]); + + } catch (IOException e) {e.printStackTrace();} + }); + + + return associazioni; + } +} + + + + + + + + + + + + + + + + + + + + + diff --git a/src/batch/java/it/cnr/si/flows/batch/PopolazioneProfiliPerCDSUOAcquistiBatch.java b/src/batch/java/it/cnr/si/flows/batch/PopolazioneProfiliPerCDSUOAcquistiBatch.java new file mode 100644 index 000000000..60bd26c68 --- /dev/null +++ b/src/batch/java/it/cnr/si/flows/batch/PopolazioneProfiliPerCDSUOAcquistiBatch.java @@ -0,0 +1,207 @@ +package it.cnr.si.flows.batch; + + +import com.opencsv.CSVParser; +import feign.FeignException; +import it.cnr.si.FlowsApp; +import it.cnr.si.flows.ng.exception.UnexpectedResultException; +import it.cnr.si.flows.ng.service.AceBridgeService; +import it.cnr.si.flows.ng.service.SiperService; +import it.cnr.si.flows.ng.utils.Utils.associazioneRuoloPersonaCDSUO; +import it.cnr.si.service.AceService; +import it.cnr.si.service.MembershipService; +import it.cnr.si.service.RelationshipService; +import it.cnr.si.service.dto.anagrafica.letture.EntitaOrganizzativaWebDto; +import org.junit.runner.RunWith; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.ActiveProfiles; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.web.client.HttpClientErrorException; + +import javax.inject.Inject; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.util.HashMap; +import java.util.Map; +import java.util.Set; +import java.util.stream.Stream; + +@SpringBootTest(classes = FlowsApp.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) +@ActiveProfiles(profiles = "dev,cnr") +@RunWith(SpringJUnit4ClassRunner.class) +public class PopolazioneProfiliPerCDSUOAcquistiBatch { + + private static final Logger log = LoggerFactory.getLogger(PopolazioneProfiliPerCDSUOAcquistiBatch.class); + + @Inject + private AceService aceService; + @Inject + private AceBridgeService aceBridgeService; + @Inject + private SiperService siperService; + @Inject + private RelationshipService relationshipService; + @Inject + private MembershipService membershipService; + private final Map errors = new HashMap<>(); + + int i = 0; + + //@Test questa riga non va mai messa su git + //@Test + public void runBatch() throws IOException { + //String[][] persone = getPersoneDaFile(); + + Map persone = new HashMap(); + persone = getPersoneDaFile(); + + + for (int i = 0; i < persone.size(); i++) { + inserisciRuolo(persone.get(i).getPersona(), persone.get(i).getRuolo(), persone.get(i).getCdsuo()); + // fruit is an element of the `fruits` array. + } + + + + + errors.forEach( (tripla, risultato) -> { + log.error(tripla +": "+ risultato); + }); + } + + private void inserisciRuolo(String username, String siglaRuolo, String idCDSUO) { + + //EntitaOrganizzativaWebDto afferenzaUtente = aceBridgeService.getAfferenzaUtente(username); + //String cdsuo = afferenzaUtente.getCdsuo(); + + log.info("****** UTENTE {} ******", username); + + String cdsuoAppartenenzaUtente = null; + try { + cdsuoAppartenenzaUtente = aceBridgeService.getAfferenzaUtente(username).getCdsuo(); + } catch(UnexpectedResultException | FeignException | HttpClientErrorException error1) { + log.info("WARNING: L'UTENTE {} NON esiste in anagrafica ACE !!!!!!!!!!!!!!! ", username); + cdsuoAppartenenzaUtente = siperService.getCDSUOAfferenzaUtente(username).get("codice_uo").toString(); + } + finally { + if (cdsuoAppartenenzaUtente.equalsIgnoreCase(idCDSUO)) { + log.info("OK -- ID CDSUO CORRISPONDE {}",idCDSUO); + } else + { + log.info("ERROR -- ID CDSUO trovato {} non CORRISPONDE a quello indicato {}",cdsuoAppartenenzaUtente, idCDSUO); + } + Object insdipResponsabileUo = new Object(); + String usernameResponsabileUO = null; + EntitaOrganizzativaWebDto entitaOrganizzativaRespUo = null; + try { + insdipResponsabileUo = siperService.getResponsabileCDSUO(cdsuoAppartenenzaUtente).get(0).get("codice_sede"); + log.info("getResponsabileCDSUO FUNZIONA "); + usernameResponsabileUO = siperService.getResponsabileCDSUO(cdsuoAppartenenzaUtente).get(0).get("uid").toString(); + try { + entitaOrganizzativaRespUo = aceService.entitaOrganizzativaFindByTerm(insdipResponsabileUo.toString()).get(0); + } catch(UnexpectedResultException | FeignException | HttpClientErrorException error3) { + log.info("-------------- WARNING: entitaOrganizzativaRespUo NON RIESCO A TROVARE L'ENTITA' ORGANIZZATIVA per la CDSUO {}", cdsuoAppartenenzaUtente); + try { + entitaOrganizzativaRespUo = aceService.entitaOrganizzativaFindByTerm(insdipResponsabileUo.toString()).get(0); + } catch(UnexpectedResultException | FeignException | HttpClientErrorException error4) { + log.info("-------------- ERROR: entitaOrganizzativaRespUo 2o TENTATIVO NON RIESCO A TROVARE L'ENTITA' ORGANIZZATIVA per la CDSUO {}", cdsuoAppartenenzaUtente); + } + } + finally { + + Integer idEntitaorganizzativaResponsabileUtente = entitaOrganizzativaRespUo.getId(); + String siglaEntitaorganizzativaResponsabileUtente = entitaOrganizzativaRespUo.getSigla().toString(); + String denominazioneEntitaorganizzativaResponsabileUtente = entitaOrganizzativaRespUo.getDenominazione().toString(); + String cdsuoEntitaorganizzativaResponsabileUtente = entitaOrganizzativaRespUo.getCdsuo().toString(); + String idnsipEntitaorganizzativaResponsabileUtente = entitaOrganizzativaRespUo.getIdnsip().toString(); + log.info("OK: L'utente {} ha come responsabile {} della struttura {} ({}) [ID: {}] [CDSUO: {}] [IDNSIP: {}]", username, usernameResponsabileUO, denominazioneEntitaorganizzativaResponsabileUtente, siglaEntitaorganizzativaResponsabileUtente, idEntitaorganizzativaResponsabileUtente, cdsuoEntitaorganizzativaResponsabileUtente, idnsipEntitaorganizzativaResponsabileUtente); + String gruppoDirigenteRichiedente = "responsabileFirmaAcquisti@" + idEntitaorganizzativaResponsabileUtente; + + Set members = membershipService.getAllUsersInGroup(gruppoDirigenteRichiedente); + //List members = membershipService.findMembersInGroup(gruppoDirigenteRichiedente); + if (members.size() == 0) { + log.info(" ERROR: Il gruppo RESPONSABILE STRUTTURA: {} NON HA NESSUNO", gruppoDirigenteRichiedente); + } + if (members.size() > 1) { + log.info(" ERROR: Il gruppo RESPONSABILE STRUTTURA: {} HA PIU' MEMBRI", gruppoDirigenteRichiedente); + } + members.forEach(member -> { + log.info("L'utente {} fa parte del gruppo {} ", member.toString(), gruppoDirigenteRichiedente); + }); + + Integer idRuolo = aceService.getRuoloBySigla(siglaRuolo).getId(); + Integer idPersona = aceService.getPersonaByUsername(username).getId(); + + try { + log.info("Associato ruolo {} persona {} eo {}", idRuolo, idPersona, idEntitaorganizzativaResponsabileUtente); + aceService.associaRuoloPersona(idRuolo, idPersona, idEntitaorganizzativaResponsabileUtente); + errors.put(username + " "+ siglaRuolo + " "+ siglaEntitaorganizzativaResponsabileUtente + "("+ idEntitaorganizzativaResponsabileUtente +")", "OK"); + } catch (RuntimeException e) { + if (e.getMessage().contains("Il Ruolo specificato e' gia' presente")) { + errors.put(username + " "+ siglaRuolo + " "+ siglaEntitaorganizzativaResponsabileUtente + "("+ idEntitaorganizzativaResponsabileUtente +")", "PRESENTE"); + } else { + log.error("Errore nella richiesta", e); + errors.put(username + " "+ siglaRuolo + " "+ siglaEntitaorganizzativaResponsabileUtente + "("+ idEntitaorganizzativaResponsabileUtente +")", e.getMessage()); + } + } + + } + } catch(UnexpectedResultException | FeignException | HttpClientErrorException error2) { + log.info("-------------- ERROR: getResponsabileCDSUO NON HA FUNZIONATO!!!!!!!!!!!!!!! l'utente {} non ha RESPONSABILE UO per la CDSUO {}", username, cdsuoAppartenenzaUtente); + } + finally { + log.info("-------------- NEXT"); + + + } + } + +// List eos = aceService.entitaOrganizzativaFind(null, null, cdsuo, LocalDate.now(), null).getItems(); +// PersonaWebDto persona = aceService.personaByUsername(username); +// +// eos.forEach(eo -> { +// + +// }); + + + } + + private Map getPersoneDaFile() throws IOException { + + CSVParser parser = new CSVParser(','); + +// INSERIMENTO FILE CON NOMINATIVI +// Stream lines = Files.lines(Paths.get("./src/batch/resources/batch/singoloGruppoUtentiProceduraAcquisti.csv")); +// Stream lines = Files.lines(Paths.get("./src/batch/resources/batch/ProceduraAcquisti-Utenti-ICCOM.csv")); +// Stream lines = Files.lines(Paths.get("./src/batch/resources/batch/ProceduraAcquisti-Utenti-SISINFO.csv")); + Stream lines = Files.lines(Paths.get("./src/batch/resources/batch/ProceduraAcquisti-Utenti-IFN.csv")); + + + i = 0; + + Map associazioni = new HashMap(); + + lines + .skip(1). + forEach(l -> { + try { + + String[] values = parser.parseLine(l); + log.info(values[0] + " " + values[1]); + associazioneRuoloPersonaCDSUO asso = new associazioneRuoloPersonaCDSUO(); + asso.setPersona(values[0]); + asso.setRuolo(values[1]); + asso.setCdsuo(values[2]); + associazioni.putIfAbsent(i, asso) ; + i=i+1; + + } catch (IOException e) {e.printStackTrace();} + }); + + return associazioni; + } +} diff --git a/src/batch/java/it/cnr/si/flows/batch/RimozioneProfiliPerCDSUOAcquistiBatch.java b/src/batch/java/it/cnr/si/flows/batch/RimozioneProfiliPerCDSUOAcquistiBatch.java new file mode 100644 index 000000000..e9d1dacdc --- /dev/null +++ b/src/batch/java/it/cnr/si/flows/batch/RimozioneProfiliPerCDSUOAcquistiBatch.java @@ -0,0 +1,186 @@ +package it.cnr.si.flows.batch; + + +import com.opencsv.CSVParser; +import it.cnr.si.FlowsApp; +import it.cnr.si.flows.ng.service.AceBridgeService; +import it.cnr.si.flows.ng.service.SiperService; +import it.cnr.si.flows.ng.utils.Utils.associazioneRuoloPersonaCDSUO; +import it.cnr.si.service.AceService; +import it.cnr.si.service.MembershipService; +import it.cnr.si.service.dto.anagrafica.letture.EntitaOrganizzativaWebDto; +import org.junit.runner.RunWith; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.ActiveProfiles; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +import javax.inject.Inject; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.time.LocalDate; +import java.util.*; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +@SpringBootTest(classes = FlowsApp.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) +@ActiveProfiles(profiles = "dev,cnr") +@RunWith(SpringJUnit4ClassRunner.class) +public class RimozioneProfiliPerCDSUOAcquistiBatch { + + private static final Logger log = LoggerFactory.getLogger(RimozioneProfiliPerCDSUOAcquistiBatch.class); + + @Inject + private AceService aceService; + @Inject + private AceBridgeService aceBridgeService; + @Inject + private SiperService siperService; + @Inject + private MembershipService membershipService; + private final Map errors = new HashMap<>(); + + int i = 0; + List results = new ArrayList<>(); + //@Test questa riga non va mai messa su git + //@Test + public void runBatch() throws IOException { + //String[][] persone = getPersoneDaFile(); + + results.add("---------- LISTA RISULTATI -----------------"); + + Map persone = new HashMap(); + persone = getPersoneDaFile(); + + + for (int i = 0; i < persone.size(); i++) { + results.add("---------- LISTA Persone con ruolo '" + persone.get(i).getRuolo() + "' per CDSUO: " + persone.get(i).getCdsuo() + "-----------------"); + inserisciRuolo(persone.get(i).getPersona(), persone.get(i).getRuolo(), persone.get(i).getCdsuo()); + // fruit is an element of the `fruits` array. + } + + + errors.forEach( (tripla, risultato) -> { + log.error(tripla +": "+ risultato); + }); + + + + results.forEach(result -> { + log.info(result); + }); + + + } + + private void inserisciRuolo(String username, String siglaRuolo, String cdsuo) { + + //EntitaOrganizzativaWebDto afferenzaUtente = aceBridgeService.getAfferenzaUtente(username); + //String cdsuo = afferenzaUtente.getCdsuo(); + + log.info("****** UTENTE {} ******", username); + + //List ListaIdCDSUO = aceBridgeService.getUoLike(cdsuo); + List ListaIdCDSUO = aceService.entitaOrganizzativaFind(null, null, cdsuo, LocalDate.now(), null) + .getItems() + .stream() + //.filter(e -> Enum.TipiEOPerAutocomplete.contains(e.getTipo().getId())) + // .map(e -> Pair.of(e.getId(), e.getCdsuo() +" - "+ e.getDenominazione())) + .collect(Collectors.toList()); + + log.info(" INFO: Il gruppo CDSUO {} HA nr.{} strutture", cdsuo, ListaIdCDSUO.size()); + results.add("Il gruppo CDSUO [" + cdsuo +"] ha nr. "+ ListaIdCDSUO.size() + " strutture"); + ListaIdCDSUO.forEach(idCDSUO -> { + log.info("La Struttura {} [{} ] fa parte del gruppo CDSUO: {} ", idCDSUO.getDenominazione(), idCDSUO.getId(), cdsuo); + String gruppoRuolo = siglaRuolo + "@" + idCDSUO.getId(); + Set members = membershipService.getAllUsersInGroup(gruppoRuolo); + //List members = membershipService.findMembersInGroup(gruppoRuolo); + if (members.size() == 0) { + log.info(" INFO: Il gruppo {} NON HA NESSUNO", gruppoRuolo); + } + if (members.size() > 1) { + log.info(" INFO: Il gruppo {} HA PIU' MEMBRI", gruppoRuolo); + } + members.forEach(member -> { + log.info("L'utente {} fa parte del gruppo {} ", member.toString(), gruppoRuolo); + results.add("L'utente " + member.toString() +" a parte del gruppo "+ gruppoRuolo + " [" + idCDSUO.getDenominazioneBreve() + " / " + idCDSUO.getSigla() + " / " + idCDSUO.getIdnsip() + "]"); + Integer idRuolo = aceService.getRuoloBySigla(siglaRuolo).getId(); + Integer idPersona = aceService.getPersonaByUsername(member.toString()).getId(); + log.info("idRuolo {} / idPersona {} ", idRuolo, idPersona); + }); + + }); + + // try { + // log.info("Associato ruolo {} persona {} eo {}", idRuolo, idPersona, idEntitaorganizzativaResponsabileUtente); + // aceService.associaRuoloPersona(idRuolo, idPersona, idEntitaorganizzativaResponsabileUtente); + // errors.put(username + " "+ siglaRuolo + " "+ siglaEntitaorganizzativaResponsabileUtente + "("+ idEntitaorganizzativaResponsabileUtente +")", "OK"); + // } catch (RuntimeException e) { + // if (e.getMessage().contains("Il Ruolo specificato e' gia' presente")) { + // errors.put(username + " "+ siglaRuolo + " "+ siglaEntitaorganizzativaResponsabileUtente + "("+ idEntitaorganizzativaResponsabileUtente +")", "PRESENTE"); + // } else { + // log.error("Errore nella richiesta", e); + // errors.put(username + " "+ siglaRuolo + " "+ siglaEntitaorganizzativaResponsabileUtente + "("+ idEntitaorganizzativaResponsabileUtente +")", e.getMessage()); + // } + // } + + + + + } + + private Map getPersoneDaFile() throws IOException { + + CSVParser parser = new CSVParser(','); + + // INSERIMENTO FILE CON NOMINATIVI + // Stream lines = Files.lines(Paths.get("./src/batch/resources/batch/singoloGruppoUtentiProceduraAcquisti.csv")); + Stream lines = Files.lines(Paths.get("./src/batch/resources/batch/ProceduraAcquisti-ListaRimozioneRuoliPerCDSUO.csv")); + + i = 0; + + Map associazioni = new HashMap(); + + lines + .skip(1). + forEach(l -> { + try { + + String[] values = parser.parseLine(l); + log.info(values[0] + " " + values[1]); + associazioneRuoloPersonaCDSUO asso = new associazioneRuoloPersonaCDSUO(); + asso.setPersona(values[0]); + asso.setRuolo(values[1]); + asso.setCdsuo(values[2]); + associazioni.putIfAbsent(i, asso) ; + i=i+1; + + } catch (IOException e) {e.printStackTrace();} + }); + + return associazioni; + } +} + + + + + + + + + + + + + + + + + + + + + diff --git a/src/batch/java/it/cnr/si/flows/batch/VerificaDirettoriAccordiBilaterali.java b/src/batch/java/it/cnr/si/flows/batch/VerificaDirettoriAccordiBilaterali.java new file mode 100644 index 000000000..2a6c2da9b --- /dev/null +++ b/src/batch/java/it/cnr/si/flows/batch/VerificaDirettoriAccordiBilaterali.java @@ -0,0 +1,229 @@ +package it.cnr.si.flows.batch; + +import com.opencsv.CSVParser; +import feign.FeignException; +import it.cnr.si.FlowsApp; +import it.cnr.si.flows.ng.exception.UnexpectedResultException; +import it.cnr.si.flows.ng.service.AceBridgeService; +import it.cnr.si.flows.ng.service.SiperService; +import it.cnr.si.service.AceService; +import it.cnr.si.service.MembershipService; +import it.cnr.si.service.RelationshipService; +import it.cnr.si.service.dto.anagrafica.letture.EntitaOrganizzativaWebDto; +import it.cnr.si.service.dto.anagrafica.letture.GerarchiaWebDto; +import it.cnr.si.service.dto.anagrafica.scritture.EntitaOrganizzativaDto; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.ActiveProfiles; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.web.client.HttpClientErrorException; + +import javax.inject.Inject; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +@SpringBootTest(classes = FlowsApp.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) +@ActiveProfiles(profiles = "dev,cnr") +@RunWith(SpringJUnit4ClassRunner.class) +public class VerificaDirettoriAccordiBilaterali { + + private static final Logger log = LoggerFactory.getLogger(VerificaDirettoriAccordiBilaterali.class); + + @Inject + private AceService aceService; + @Inject + private AceBridgeService aceBridgeService; + @Inject + private SiperService siperService; + @Inject + private MembershipService membershipService; + @Inject + private RelationshipService relationshipService; + @Value("${ace.url}") + private String aceURL; + + private final Map errors = new HashMap<>(); + int personNr = 1; + List results = new ArrayList<>(); + EntitaOrganizzativaWebDto entitaOrganizzativaResponsabileStruttura = null; + + //@Test questa riga non va mai messa su git + @Test + public void runBatch() throws IOException { + Map persone = getPersoneDaFile(); + + results.add("---------- LISTA RISULTATI -----------------"); + + persone.forEach( (username, siglaRuolo) -> { + log.info("****** VERIFICA DIRETTORE PER UTENTE {} nr.{} di:{} totali ******", username, personNr, persone.size()); + personNr = personNr + 1; + verificaDirettore(username, siglaRuolo); + }); + + errors.forEach( (tripla, risultato) -> { + log.error(tripla +": "+ risultato); + }); + + //RPINT RISULTATI + results.forEach(result -> { + log.info(result); + }); + } + + private void verificaDirettore(String username, String siglaRuolo) { + + log.info("****** UTENTE {} ******", username); + + String userNameresponsabileSede = aceService.bossSedeByUsername(username).getUsername().toString(); + results.add("BOSS --- userNameresponsabileSede " + userNameresponsabileSede); + + String cdsuoAppartenenzaUtente = null; + try { + //cdsuoAppartenenzaUtente = aceBridgeService.getAfferenzaUtente(username).getCdsuo(); + cdsuoAppartenenzaUtente = aceBridgeService.getAfferenzaUtenteTipoSede(username).getCdsuo(); + } catch(UnexpectedResultException | FeignException | HttpClientErrorException error1) { + log.info("WARNING: L'UTENTE {} NON esiste in anagrafica ACE !!!!!!!!!!!!!!! ", username); + //cdsuoAppartenenzaUtente = siperService.getCDSUOAfferenzaUtente(username).get("codice_uo").toString(); + results.add("WARNING: L'UTENTE " + username + " NON esiste in anagrafica ACE !!!!!!!!!!!!!!! "); + } + finally { + if(cdsuoAppartenenzaUtente != null) { + Object insdipAppartenenzaUtente = new Object(); + //insdipAppartenenzaUtente = aceBridgeService.getAfferenzaUtente(username).getIdnsip(); + log.info("-------------- getAfferenzaUtente {}", aceBridgeService.getAfferenzaUtente(username).getIdnsip()); + log.info("-------------- getSede {}", aceBridgeService.getAfferenzaUtenteTipoSede(username).getIdnsip()); + + insdipAppartenenzaUtente = aceBridgeService.getAfferenzaUtenteTipoSede(username).getIdnsip(); + String usernameDirettore = null; + EntitaOrganizzativaWebDto entitaOrganizzativaUtente = null; + try { + entitaOrganizzativaUtente = aceService.entitaOrganizzativaFindByTerm(insdipAppartenenzaUtente.toString()).get(0); + } catch(UnexpectedResultException | FeignException | HttpClientErrorException error3) { + log.info("-------------- WARNING: entitaOrganizzativaUtente NON RIESCO A TROVARE L'ENTITA' ORGANIZZATIVA per la IDNSIP {}", insdipAppartenenzaUtente); + } + finally { + try { + usernameDirettore = siperService.getDirettoreCDSUO(cdsuoAppartenenzaUtente).get(0).get("uid").toString(); + } catch(UnexpectedResultException | FeignException | HttpClientErrorException error6) { + log.info("-------------- ERROR: usernameDirettore NON RIESCO A TROVARE il direttore per la CDSUO {}", cdsuoAppartenenzaUtente); + results.add("ERROR: " + username + " --usernameDirettore NON RIESCO A TROVARE il direttore per la CDSUO " + cdsuoAppartenenzaUtente); + } + finally { + if (usernameDirettore != null) { + // NEW + List listaGerarchia = null; + try { + listaGerarchia = aceBridgeService.getParents(entitaOrganizzativaUtente.getId()); + } catch(UnexpectedResultException | FeignException | HttpClientErrorException | IndexOutOfBoundsException error5) { + results.add("ERROR: " + username + " --la struttura " + entitaOrganizzativaUtente.getId() + " -- CDSUO " +entitaOrganizzativaUtente.getCdsuo()+ " -- IDNSIP " +entitaOrganizzativaUtente.getIdnsip() + " NON HA PARTENT"); + } + finally { + if (listaGerarchia != null) { + + log.info("-------------- listaGerarchia size {}", listaGerarchia.size()); + List gerarchiaResults = listaGerarchia.stream() + .filter(gerarchiaSingola -> gerarchiaSingola.getTipo().getId() == 2 || gerarchiaSingola.getTipo().getId() == 1) + .collect(Collectors.toList()); + if (gerarchiaResults.size() != 1) { + throw new IllegalStateException(); + } + GerarchiaWebDto gerarchia = gerarchiaResults.get(0); + if (gerarchia.getTipo().getId() == 1) { + entitaOrganizzativaResponsabileStruttura = gerarchia.getPadre(); + } else { + entitaOrganizzativaResponsabileStruttura = entitaOrganizzativaUtente; + } + log.info("-------------- padre: id: {} [{}], Gerarchia tipo: {} [{}]", entitaOrganizzativaResponsabileStruttura.getId(), entitaOrganizzativaResponsabileStruttura.getDenominazione(), gerarchia.getTipo().getId(), gerarchia.getTipo().getDescr()); + // CHECK DIRETTORE + String nomeDirettoreSiper = usernameDirettore.toString(); + String gruppoResponsabileStrutturaPadre = "responsabile-struttura@" + entitaOrganizzativaResponsabileStruttura.getId(); + + Set membriResponsabileStrutturaPadre = membershipService.getAllUsersInGroup(gruppoResponsabileStrutturaPadre); + log.info("nr membriResponsabileStrutturaPadre {} per struttura {} ", membriResponsabileStrutturaPadre.size(), entitaOrganizzativaResponsabileStruttura.getId()); + if (membriResponsabileStrutturaPadre.size() == 0){ + log.info("NO --- il direttore della struttura padre {} [{}] NON ESISTE ", entitaOrganizzativaResponsabileStruttura.getId(), entitaOrganizzativaResponsabileStruttura.getDenominazione()); + } + if (membriResponsabileStrutturaPadre.size() > 1){ + log.info("NO --- ci sono {} direttori per la struttura padre {} [{}] ", membriResponsabileStrutturaPadre.size(), entitaOrganizzativaResponsabileStruttura.getId(), entitaOrganizzativaResponsabileStruttura.getDenominazione()); + } + membriResponsabileStrutturaPadre.forEach(responsabile -> { + if(responsabile.toString().equals(nomeDirettoreSiper)) { + log.info("il direttore trovato in ACE nella struttura (padre) {} [{}] è {} CORRISPONDE al direttore trovato su SIPER {} ", entitaOrganizzativaResponsabileStruttura.getId(), entitaOrganizzativaResponsabileStruttura.getDenominazione(), responsabile.toString(), nomeDirettoreSiper); + results.add("OK --- " + username + " -- il direttore della struttura padre [" + entitaOrganizzativaResponsabileStruttura.getId() + " - " + entitaOrganizzativaResponsabileStruttura.getDenominazione() +" [" + responsabile.toString() +"] CORRISPONDE al direttore SIPER "+ nomeDirettoreSiper + " --"); + + } else { + log.info("il direttore trovato in ACE nella struttura padre {} [{}] è {} NON CORRISPONDE al direttore trovato su SIPER {} ", entitaOrganizzativaResponsabileStruttura.getId(), entitaOrganizzativaResponsabileStruttura.getDenominazione(), responsabile.toString(), nomeDirettoreSiper); + results.add("NO --- " + username + " -- il direttore della struttura padre [" + entitaOrganizzativaResponsabileStruttura.getId() + " - " + entitaOrganizzativaResponsabileStruttura.getDenominazione() +" [" + responsabile.toString() +"] NON CORRISPONDE al direttore SIPER "+ nomeDirettoreSiper + " --"); + } + }); + + //FINE - NEW + + } + } + } + } + } + } + } + } + + private Map getPersoneDaFile() throws IOException { + + CSVParser parser = new CSVParser(','); + + //Stream lines = Files.lines(Paths.get("./src/batch/resources/batch/utentiGenericiTest.csv")); + Stream lines = Files.lines(Paths.get("./src/batch/resources/batch/utentiDomandeAccordiBilaterali1.csv")); + Map associazioni = new HashMap<>(); + + lines + .skip(1). + forEach(l -> { + try { + + String[] values = parser.parseLine(l); + log.info(values[0] + " " + values[1]); + associazioni.put(values[0], values[1]); + + } catch (IOException e) {e.printStackTrace();} + }); + + + return associazioni; + } +} + + + + + + + + + + + + + + + + + + + + + diff --git a/src/batch/java/it/cnr/si/flows/batch/VerificaDirettoriBoss.java b/src/batch/java/it/cnr/si/flows/batch/VerificaDirettoriBoss.java new file mode 100644 index 000000000..0c7c8e718 --- /dev/null +++ b/src/batch/java/it/cnr/si/flows/batch/VerificaDirettoriBoss.java @@ -0,0 +1,248 @@ +package it.cnr.si.flows.batch; + +import com.opencsv.CSVParser; +import feign.FeignException; +import it.cnr.si.FlowsApp; +import it.cnr.si.flows.ng.exception.UnexpectedResultException; +import it.cnr.si.flows.ng.service.AceBridgeService; +import it.cnr.si.flows.ng.service.SiperService; +import it.cnr.si.service.AceService; +import it.cnr.si.service.MembershipService; +import it.cnr.si.service.RelationshipService; +import it.cnr.si.service.dto.anagrafica.letture.EntitaOrganizzativaWebDto; +import it.cnr.si.service.dto.anagrafica.letture.GerarchiaWebDto; +import it.cnr.si.service.dto.anagrafica.scritture.BossDto; +import it.cnr.si.service.dto.anagrafica.scritture.EntitaOrganizzativaDto; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.ActiveProfiles; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.web.client.HttpClientErrorException; + +import javax.inject.Inject; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +@SpringBootTest(classes = FlowsApp.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) +@ActiveProfiles(profiles = "dev,cnr") +@RunWith(SpringJUnit4ClassRunner.class) +public class VerificaDirettoriBoss { + + private static final Logger log = LoggerFactory.getLogger(VerificaDirettoriBoss.class); + + @Inject + private AceService aceService; + @Inject + private AceBridgeService aceBridgeService; + @Inject + private SiperService siperService; + @Inject + private MembershipService membershipService; + @Inject + private RelationshipService relationshipService; + @Value("${ace.url}") + private String aceURL; + + private final Map errors = new HashMap<>(); + int personNr = 1; + List results = new ArrayList<>(); + EntitaOrganizzativaWebDto entitaOrganizzativaResponsabileStruttura = null; + + //@Test questa riga non va mai messa su git + //@Test + public void runBatch() throws IOException { + Map persone = getPersoneDaFile(); + + results.add("---------- LISTA RISULTATI -----------------"); + + persone.forEach( (username, siglaRuolo) -> { + log.info("****** VERIFICA DIRETTORE PER UTENTE {} nr.{} di:{} totali ******", username, personNr, persone.size()); + personNr = personNr + 1; + verificaDirettore(username, siglaRuolo); + }); + + errors.forEach( (tripla, risultato) -> { + log.error(tripla +": "+ risultato); + }); + + //RPINT RISULTATI + results.forEach(result -> { + log.info(result); + }); + } + + private void verificaDirettore(String username, String siglaRuolo) { + + log.info("****** UTENTE {} ******", username); + BossDto direttoreACE = null; + BossDto responsabileSede = null; + String usernameDirettoreACE = ""; + String usernameDirettoreSIPER = ""; + String denominazioneEntitaOrganizzativaDirettoreAce = null; + String denominazioneEntitaOrganizzativaDirettoreSIPER = null; + String siglaEntitaOrganizzativaDirettoreACE = null; + String siglaEntitaOrganizzativaDirettoreSIPER = null; + String ruoloEntitaOrganizzativaDirettore = null; + String cdsuoAppartenenzaUtente = null; + Integer idEntitaOrganizzativaDirettoreACE = 0; + + + try { + //cdsuoAppartenenzaUtente = aceBridgeService.getAfferenzaUtente(username).getCdsuo(); + cdsuoAppartenenzaUtente = aceBridgeService.getAfferenzaUtenteTipoSede(username).getCdsuo(); + } catch(UnexpectedResultException | FeignException | HttpClientErrorException error1) { + log.info("WARNING: L'UTENTE {} NON esiste in anagrafica ACE !!!!!!!!!!!!!!! ", username); + //cdsuoAppartenenzaUtente = siperService.getCDSUOAfferenzaUtente(username).get("codice_uo").toString(); + results.add("WARNING: L'UTENTE " + username + " NON esiste in anagrafica ACE !!!!!!!!!!!!!!! "); + } + finally { + if(cdsuoAppartenenzaUtente != null) { + Object insdipAppartenenzaUtente = new Object(); + //insdipAppartenenzaUtente = aceBridgeService.getAfferenzaUtente(username).getIdnsip(); + log.info("-------------- getAfferenzaUtente {}", aceBridgeService.getAfferenzaUtente(username).getIdnsip()); + log.info("-------------- getSede {}", aceBridgeService.getAfferenzaUtenteTipoSede(username).getIdnsip()); + + insdipAppartenenzaUtente = aceBridgeService.getAfferenzaUtenteTipoSede(username).getIdnsip(); + EntitaOrganizzativaWebDto entitaOrganizzativaUtente = null; + try { + entitaOrganizzativaUtente = aceService.entitaOrganizzativaFindByTerm(insdipAppartenenzaUtente.toString()).get(0); + } catch(UnexpectedResultException | FeignException | HttpClientErrorException error3) { + log.info("-------------- WARNING: entitaOrganizzativaUtente NON RIESCO A TROVARE L'ENTITA' ORGANIZZATIVA per la IDNSIP {}", insdipAppartenenzaUtente); + } + finally { + try { + usernameDirettoreSIPER = siperService.getDirettoreCDSUO(cdsuoAppartenenzaUtente).get(0).get("uid").toString(); + denominazioneEntitaOrganizzativaDirettoreSIPER = siperService.getDirettoreCDSUO(cdsuoAppartenenzaUtente).get(0).get("struttura_appartenenza").toString(); + siglaEntitaOrganizzativaDirettoreSIPER = siperService.getDirettoreCDSUO(cdsuoAppartenenzaUtente).get(0).get("sigla_sede").toString(); + } catch(UnexpectedResultException | FeignException | HttpClientErrorException error6) { + log.info("-------------- ERROR: usernameDirettoreSIPER SIPER NON RIESCO A TROVARE il direttore per la CDSUO {}", cdsuoAppartenenzaUtente); + results.add("ERROR: " + username + " --usernameDirettoreSIPER SIPER NON RIESCO A TROVARE il direttore per la CDSUO " + cdsuoAppartenenzaUtente + "IDSIP (" + insdipAppartenenzaUtente + ") - CDSUO (" + entitaOrganizzativaUtente + ")"); + } + finally { + if (usernameDirettoreSIPER != null) { + + try { + direttoreACE = aceService.bossDirettoreByUsername(username); + usernameDirettoreACE = direttoreACE.getUsername().toString(); + results.add("BOSS --- userNameDirettore ACE " + usernameDirettoreACE + " idEntitaOrganizzativa: [" + direttoreACE.getIdEntitaOrganizzativa() + "] - denominazioneEO: " + direttoreACE.getDenominazioneEO() + " (" + direttoreACE.getSiglaEO() +")"); + idEntitaOrganizzativaDirettoreACE = direttoreACE.getIdEntitaOrganizzativa(); + denominazioneEntitaOrganizzativaDirettoreAce = direttoreACE.getDenominazioneEO(); + siglaEntitaOrganizzativaDirettoreACE = direttoreACE.getSiglaEO(); + ruoloEntitaOrganizzativaDirettore = direttoreACE.getDescrRuolo(); + } catch(UnexpectedResultException | FeignException | HttpClientErrorException | IndexOutOfBoundsException error5) { + results.add("ERROR ACE: " + username + " --usernameDirettore ACE NON RIESCO A TROVARE il direttore per l'utente " + username + " - con errore: " + error5.getMessage()); + } + + finally { + if (direttoreACE != null) { + // CHECK DIRETTORE + String gruppoResponsabileStrutturaPadre = "responsabile-struttura@" + idEntitaOrganizzativaDirettoreACE; + Set membriResponsabileStruttura = membershipService.getAllUsersInGroup(gruppoResponsabileStrutturaPadre); + log.info("nr membriResponsabileStruttura {} per struttura {} ", membriResponsabileStruttura.size(), idEntitaOrganizzativaDirettoreACE); + if (membriResponsabileStruttura.size() == 0){ + log.info("NO --- il ResponsabileStruttura della struttura ACE id:{} [{}] NON ESISTE ", idEntitaOrganizzativaDirettoreACE, denominazioneEntitaOrganizzativaDirettoreAce); + results.add("NO --- il ResponsabileStruttura della struttura ACE id:" + idEntitaOrganizzativaDirettoreACE +" [" + denominazioneEntitaOrganizzativaDirettoreAce + "] NON ESISTE " ); + } + if (membriResponsabileStruttura.size() > 1){ + results.add("NO --- ci sono " + membriResponsabileStruttura.size() + " direttori per la struttura ACE id: " + idEntitaOrganizzativaDirettoreACE +" [" + denominazioneEntitaOrganizzativaDirettoreAce + "] NON ESISTE " ); + log.info("NO --- ci sono {} direttori per la struttura ACE id: {} [{}] ", membriResponsabileStruttura.size(), idEntitaOrganizzativaDirettoreACE, denominazioneEntitaOrganizzativaDirettoreAce); + } + String direttore_SIPER = usernameDirettoreSIPER; + String direttore_ACE = usernameDirettoreACE; + String DenominazioneEO_SIPER = denominazioneEntitaOrganizzativaDirettoreSIPER; + String DenominazioneEO_ACE = denominazioneEntitaOrganizzativaDirettoreAce; + String siglaEO_SIPER = siglaEntitaOrganizzativaDirettoreSIPER; + String siglaEO_ACE = siglaEntitaOrganizzativaDirettoreACE; + Integer idEO_ACE = idEntitaOrganizzativaDirettoreACE; + String ruoloEODirettore_ACE = ruoloEntitaOrganizzativaDirettore; + membriResponsabileStruttura.forEach(responsabile -> { + //CONFRONTO SIPER + if(responsabile.toString().equals(direttore_SIPER)) { + log.info("il direttore trovato in ACE nella struttura SIPER {} [{}] è {} CORRISPONDE al direttore trovato su SIPER {} ", siglaEO_SIPER, DenominazioneEO_SIPER, responsabile.toString(), direttore_SIPER); + results.add("OK --- " + username + " -- il direttore della struttura SIPER [" + siglaEO_SIPER + " - " + DenominazioneEO_SIPER +" [" + responsabile.toString() +"] CORRISPONDE al direttore SIPER "+ direttore_SIPER + " --"); + + } else { + log.info("il direttore trovato in ACE nella struttura SIPER {} [{}] è {} NON CORRISPONDE al direttore trovato su SIPER {} ", siglaEO_SIPER, DenominazioneEO_SIPER, responsabile.toString(), direttore_SIPER); + results.add("NO --- " + username + " -- il direttore della struttura SIPER [" + siglaEO_SIPER + " - " + DenominazioneEO_SIPER +" [" + responsabile.toString() +"] NON CORRISPONDE al direttore SIPER "+ direttore_SIPER + " --"); + } + //CONFRONTO ACE + if(responsabile.toString().equals(direttore_ACE)) { + log.info("il direttore trovato in ACE nella struttura ACE id:{} {} [{}] è {} CORRISPONDE al direttore trovato su ACE BOSS {} ", siglaEO_ACE, idEO_ACE, DenominazioneEO_ACE, responsabile.toString(), direttore_ACE); + results.add("OK --- " + username + " -- il direttore della struttura ACE id: " + idEO_ACE + " [" + siglaEO_ACE + " - " + DenominazioneEO_ACE +" [" + responsabile.toString() +"] CORRISPONDE al direttore ACE "+ direttore_ACE + " --"); + + } else { + log.info("il direttore trovato in ACE nella struttura ACE id:{} {} [{}] è {} NON CORRISPONDE al direttore trovato su ACE BOSS {} ", siglaEO_ACE, idEO_ACE, DenominazioneEO_ACE, responsabile.toString(), direttore_ACE); + results.add("NO --- " + username + " -- il direttore della struttura ACE id: " + idEO_ACE + " [" + siglaEO_ACE + " - " + DenominazioneEO_ACE +" [" + responsabile.toString() +"] NON CORRISPONDE al direttore ACE "+ direttore_ACE + " --"); + } + }); + + //FINE - NEW + + } + } + } + } + } + } + } + } + + private Map getPersoneDaFile() throws IOException { + + CSVParser parser = new CSVParser(','); + + Stream lines = Files.lines(Paths.get("./src/batch/resources/batch/utentiGenericiTest.csv")); + //Stream lines = Files.lines(Paths.get("./src/batch/resources/batch/utentiDomandeAccordiBilaterali1.csv")); + Map associazioni = new HashMap<>(); + + lines + .skip(1). + forEach(l -> { + try { + + String[] values = parser.parseLine(l); + log.info(values[0] + " " + values[1]); + associazioni.put(values[0], values[1]); + + } catch (IOException e) {e.printStackTrace();} + }); + + + return associazioni; + } +} + + + + + + + + + + + + + + + + + + + + + diff --git a/src/batch/java/it/cnr/si/flows/batch/VerificaDomandeAccordiBilaterali.java b/src/batch/java/it/cnr/si/flows/batch/VerificaDomandeAccordiBilaterali.java new file mode 100644 index 000000000..6791724d0 --- /dev/null +++ b/src/batch/java/it/cnr/si/flows/batch/VerificaDomandeAccordiBilaterali.java @@ -0,0 +1,246 @@ +package it.cnr.si.flows.batch; + +import com.opencsv.CSVParser; +import feign.FeignException; +import it.cnr.si.FlowsApp; +import it.cnr.si.flows.ng.exception.UnexpectedResultException; +import it.cnr.si.flows.ng.service.AceBridgeService; +import it.cnr.si.flows.ng.service.SiperService; +import it.cnr.si.flows.ng.utils.Enum; +import it.cnr.si.service.AceService; +import it.cnr.si.service.MembershipService; +import it.cnr.si.service.RelationshipService; +import it.cnr.si.service.dto.anagrafica.enums.Carattere; +import it.cnr.si.service.dto.anagrafica.letture.EntitaOrganizzativaWebDto; +import it.cnr.si.service.dto.anagrafica.scritture.BossDto; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.ActiveProfiles; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.web.client.HttpClientErrorException; + +import javax.inject.Inject; + +import static it.cnr.si.flows.ng.utils.Utils.PROCESS_VISUALIZER; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.stream.Stream; + +@SpringBootTest(classes = FlowsApp.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) +@ActiveProfiles(profiles = "dev,cnr") +@RunWith(SpringJUnit4ClassRunner.class) +public class VerificaDomandeAccordiBilaterali { + + private static final Logger log = LoggerFactory.getLogger(VerificaDomandeAccordiBilaterali.class); + + @Inject + private AceService aceService; + @Inject + private AceBridgeService aceBridgeService; + @Inject + private SiperService siperService; + @Inject + private MembershipService membershipService; + @Inject + private RelationshipService relationshipService; + + + private final Map errors = new HashMap<>(); + int personNr = 1; + List results = new ArrayList<>(); + + //@Test questa riga non va mai messa su git + //@Test + public void runBatch() throws IOException { + Map persone = getPersoneDaFile(); + + results.add("---------- LISTA RISULTATI -----------------"); + + + persone.forEach( (username, siglaRuolo) -> { + log.info("****** VERIFICA DIRETTORE PER UTENTE {} nr.{} di:{} totali ******", username, personNr, persone.size()); + personNr = personNr + 1; + results.add("----------utente nr "+personNr +"/" + persone.size()+ ": L'UTENTE " + username + " NON esiste in anagrafica ACE !!!!!!!!!!!!!!! "); + verificaDirettore(username, siglaRuolo); + }); + + errors.forEach( (tripla, risultato) -> { + log.error(tripla +": "+ risultato); + }); + + + //RPINT RISULTATI + results.forEach(result -> { + log.info(result); + }); + } + + private void verificaDirettore(String username, String siglaRuolo) { + EntitaOrganizzativaWebDto entitaOrganizzativaResponsabileStruttura = null; + + String richiedente = username; + // log.info("L'utente {} sta avviando il flusso {} (con titolo {})", initiator, execution.getId(), execution.getVariable(Enum.VariableEnum.title.name())); + //Integer cdsuoAppartenenzaUtente = aceBridgeService.getEntitaOrganizzativaDellUtente(richiedente.toString()).getId(); + String cdsuoAppartenenzaUtente = null; + String idnsipAppartenenzaUtente = null; + String denominazioneAppartenenzaUtente = null; + String siglaAppartenenzaUtente = null; + BossDto responsabileStrutturaRichiedente = new BossDto(); + Integer idEntitaResponsabileStrutturaRichiedente = null; + String userNameResponsabileStrutturaRichiedente = null; + Carattere carattereEntitaOrganizzativa = null; + int IdEntitaOrganizzativa = 0; + boolean afferenzaACE = true; + boolean bossACE = true; + + + try { + EntitaOrganizzativaWebDto entitaOrganizzativaUtente = aceBridgeService.getAfferenzaUtenteTipoSede(richiedente.toString()); + cdsuoAppartenenzaUtente = entitaOrganizzativaUtente.getCdsuo(); + idnsipAppartenenzaUtente = entitaOrganizzativaUtente.getIdnsip(); + denominazioneAppartenenzaUtente = entitaOrganizzativaUtente.getDenominazione(); + siglaAppartenenzaUtente = entitaOrganizzativaUtente.getSigla(); + carattereEntitaOrganizzativa = entitaOrganizzativaUtente.getCarattere(); + IdEntitaOrganizzativa = entitaOrganizzativaUtente.getId(); + } catch(UnexpectedResultException | FeignException e) { + afferenzaACE = false; + Map afferenzaUtente = siperService.getCDSUOAfferenzaUtente(richiedente.toString()); + cdsuoAppartenenzaUtente = afferenzaUtente.get("codice_uo").toString(); + idnsipAppartenenzaUtente = afferenzaUtente.get("codice_sede").toString(); + denominazioneAppartenenzaUtente = afferenzaUtente.get("struttura_appartenenza").toString(); + siglaAppartenenzaUtente = afferenzaUtente.get("sigla_sede").toString(); + results.add("WARNING: L'UTENTE " + username + " NON esiste in anagrafica ACE !!!!!!!!!!!!!!! "); + List listaEntità = aceService.entitaOrganizzativaFindByTerm(cdsuoAppartenenzaUtente); + if (listaEntità.size() == 1) { + carattereEntitaOrganizzativa = listaEntità.get(0).getCarattere(); + IdEntitaOrganizzativa = listaEntità.get(0).getId(); + } else { + results.add("WARNING: L'UTENTE " + username + " NON esiste in anagrafica ACE e SIPER ATTRIBUISCE un cdsuo " + cdsuoAppartenenzaUtente + " CHE NON CORRISPONDE IN ACE !!!!!!!!!!!!!!! "); + } + } + finally { + + if (carattereEntitaOrganizzativa != null) { + if (carattereEntitaOrganizzativa.equals(it.cnr.si.service.dto.anagrafica.enums.Carattere.RICERCA)) { + try { + responsabileStrutturaRichiedente = aceService.bossDirettoreByUsername(richiedente.toString()); + } catch(UnexpectedResultException | FeignException e) { + bossACE = false; + results.add("ERROR: L'UTENTE " + username + " fallisce per aceService.bossDirettoreByUsername " ); + responsabileStrutturaRichiedente.setIdEntitaOrganizzativa(IdEntitaOrganizzativa); + responsabileStrutturaRichiedente.setUsername(siperService.getDirettoreCDSUO(cdsuoAppartenenzaUtente).get(0).get("uid").toString()); + responsabileStrutturaRichiedente.setSiglaEO(siglaAppartenenzaUtente); + responsabileStrutturaRichiedente.setDenominazioneEO(siglaAppartenenzaUtente); + Set listaMembriResponsabileStruttura = membershipService.getAllUsersInGroup("responsabile-struttura@" + IdEntitaOrganizzativa); + if (listaMembriResponsabileStruttura.size() < 1 && !listaMembriResponsabileStruttura.contains(responsabileStrutturaRichiedente.getUsername())) { + log.info("responsabileStrutturaRichiedente {} trovato in SIPER non trova corrispondenza con quello in ACE]", responsabileStrutturaRichiedente.getUsername()); + results.add("WARNING: IL DIRETTORE " + responsabileStrutturaRichiedente + "DELL'UTENTE " + username + " trovato in SIPER non trova corrispondenza con quello in ACE "); + throw new IllegalStateException(); + } + } + finally { + log.info("responsabileStrutturaRichiedente {} ", responsabileStrutturaRichiedente.getUsername()); + } + } else { + try { + responsabileStrutturaRichiedente = aceService.bossSedeResponsabileByUsername(richiedente.toString()); + } catch(UnexpectedResultException | FeignException e) { + bossACE = false; + results.add("WARNING: IL DIRETTORE DELL'UTENTE " + username + " NON SI RICAVA IN ACE CON BOSS!!!!!!!!!!!!!!! "); + responsabileStrutturaRichiedente.setIdEntitaOrganizzativa(IdEntitaOrganizzativa); + responsabileStrutturaRichiedente.setUsername(siperService.getDirettoreCDSUO(cdsuoAppartenenzaUtente).get(0).get("uid").toString()); + responsabileStrutturaRichiedente.setSiglaEO(siglaAppartenenzaUtente); + responsabileStrutturaRichiedente.setDenominazioneEO(siglaAppartenenzaUtente); + Set listaMembriResponsabileStruttura = membershipService.getAllUsersInGroup("responsabile-struttura@" + IdEntitaOrganizzativa); + if (listaMembriResponsabileStruttura.size() < 1 && !listaMembriResponsabileStruttura.contains(responsabileStrutturaRichiedente.getUsername())) { + log.info("responsabileStrutturaRichiedente {} trovato in SIPER non trova corrispondenza con quello in ACE]", responsabileStrutturaRichiedente.getUsername()); + results.add("WARNING: IL DIRETTORE " + responsabileStrutturaRichiedente + "DELL'UTENTE " + username + " trovato in SIPER non trova corrispondenza con quello in ACE "); + throw new IllegalStateException(); + } + } + finally { + log.info("responsabileStrutturaRichiedente {} ]", responsabileStrutturaRichiedente.getUsername()); + } + + } + if (responsabileStrutturaRichiedente != null) { + idEntitaResponsabileStrutturaRichiedente = responsabileStrutturaRichiedente.getIdEntitaOrganizzativa(); + userNameResponsabileStrutturaRichiedente = responsabileStrutturaRichiedente.getUsername(); + String usernameDirettore = siperService.getDirettoreCDSUO(cdsuoAppartenenzaUtente).get(0).get("uid").toString(); + if (!userNameResponsabileStrutturaRichiedente.equals(usernameDirettore)) { + log.info("responsabileStrutturaRichiedente {} trovato in SIPER non trova corrispondenza con quello in ACE]", responsabileStrutturaRichiedente.getUsername()); + results.add("WARNING: IL DIRETTORE " + responsabileStrutturaRichiedente + "DELL'UTENTE " + username + " trovato in SIPER non trova corrispondenza con quello in ACE: " + responsabileStrutturaRichiedente.getUsername()); + throw new IllegalStateException(); + } + } + String siglaEntitaorganizzativaResponsabileUtente = responsabileStrutturaRichiedente.getSiglaEO(); + String denominazioneEntitaorganizzativaResponsabileUtente = responsabileStrutturaRichiedente.getDenominazioneEO(); + String cdsuoEntitaorganizzativaResponsabileUtente = aceService.entitaOrganizzativaById(idEntitaResponsabileStrutturaRichiedente).getCdsuo(); + String idnsipEntitaorganizzativaResponsabileUtente = aceService.entitaOrganizzativaById(idEntitaResponsabileStrutturaRichiedente).getIdnsip(); + log.info("L'utente {} ha come direttore {} della struttura {} ({}) [ID: {}] [CDSUO: {}] [IDNSIP: {}]", richiedente.toString(), responsabileStrutturaRichiedente.getUsername(), denominazioneEntitaorganizzativaResponsabileUtente, siglaEntitaorganizzativaResponsabileUtente, idEntitaResponsabileStrutturaRichiedente, cdsuoEntitaorganizzativaResponsabileUtente, idnsipEntitaorganizzativaResponsabileUtente); + String gruppoDirigenteRichiedente = "responsabile-struttura@" + idEntitaResponsabileStrutturaRichiedente; + results.add("OK: L'UTENTE " + username + " ha come direttore " + responsabileStrutturaRichiedente.getUsername() + " -- " + denominazioneEntitaorganizzativaResponsabileUtente + "[ID: " + idEntitaResponsabileStrutturaRichiedente + "] [CDSUO: " + cdsuoEntitaorganizzativaResponsabileUtente +" ] [IDNSIP: " + idnsipEntitaorganizzativaResponsabileUtente + "]"); + + + } + } + } + + private Map getPersoneDaFile() throws IOException { + + CSVParser parser = new CSVParser(','); + + //Stream lines = Files.lines(Paths.get("./src/batch/resources/batch/utentiDomandeAccordiBilaterali5.csv")); + //Stream lines = Files.lines(Paths.get("./src/batch/resources/batch/utentiDomandeAccordiBilaterali5.csv")); + Stream lines = Files.lines(Paths.get("./src/batch/resources/batch/utentiGenericiTest.csv")); + + Map associazioni = new HashMap<>(); + + lines + .skip(1). + forEach(l -> { + try { + + String[] values = parser.parseLine(l); + log.info(values[0] + " " + values[1]); + associazioni.put(values[0], values[1]); + + } catch (IOException e) {e.printStackTrace();} + }); + + + return associazioni; + } +} + + + + + + + + + + + + + + + + + + + + + diff --git a/src/batch/java/it/cnr/si/flows/batch/VerificaNuovaProceduraDomandeAccordiBilaterali.java b/src/batch/java/it/cnr/si/flows/batch/VerificaNuovaProceduraDomandeAccordiBilaterali.java new file mode 100644 index 000000000..d8615a048 --- /dev/null +++ b/src/batch/java/it/cnr/si/flows/batch/VerificaNuovaProceduraDomandeAccordiBilaterali.java @@ -0,0 +1,174 @@ +package it.cnr.si.flows.batch; + +import com.opencsv.CSVParser; +import feign.FeignException; +import it.cnr.si.FlowsApp; +import it.cnr.si.flows.ng.exception.UnexpectedResultException; +import it.cnr.si.flows.ng.service.AceBridgeService; +import it.cnr.si.flows.ng.service.SiperService; +import it.cnr.si.service.AceService; +import it.cnr.si.service.MembershipService; +import it.cnr.si.service.RelationshipService; +import it.cnr.si.service.dto.anagrafica.letture.EntitaOrganizzativaWebDto; +import org.junit.runner.RunWith; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.ActiveProfiles; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.web.client.HttpClientErrorException; + +import javax.inject.Inject; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.util.HashMap; +import java.util.Map; +import java.util.Set; +import java.util.stream.Stream; + +@SpringBootTest(classes = FlowsApp.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) +@ActiveProfiles(profiles = "dev,cnr") +@RunWith(SpringJUnit4ClassRunner.class) +public class VerificaNuovaProceduraDomandeAccordiBilaterali { + + private static final Logger log = LoggerFactory.getLogger(VerificaNuovaProceduraDomandeAccordiBilaterali.class); + + @Inject + private AceService aceService; + @Inject + private AceBridgeService aceBridgeService; + @Inject + private SiperService siperService; + @Inject + private MembershipService membershipService; + @Inject + private RelationshipService relationshipService; + + + private final Map errors = new HashMap<>(); + int personNr = 1; + + //@Test questa riga non va mai messa su git + //@Test + public void runBatch() throws IOException { + Map persone = getPersoneDaFile(); + + persone.forEach( (username, siglaRuolo) -> { + log.info("****** VERIFICA DIRETTORE PER UTENTE {} nr.{} di:{} totali ******", username, personNr, persone.size()); + personNr = personNr + 1; + verificaDirettore(username, siglaRuolo); + }); + + errors.forEach( (tripla, risultato) -> { + log.error(tripla +": "+ risultato); + }); + } + + private void verificaDirettore(String username, String siglaRuolo) { + + log.info("****** UTENTE {} ******", username); + + String cdsuoAppartenenzaUtente = null; + try { + cdsuoAppartenenzaUtente = aceBridgeService.getAfferenzaUtente(username).getCdsuo(); + } catch(UnexpectedResultException | FeignException | HttpClientErrorException error1) { + log.info("WARNING: L'UTENTE {} NON esiste in anagrafica ACE !!!!!!!!!!!!!!! ", username); + cdsuoAppartenenzaUtente = siperService.getCDSUOAfferenzaUtente(username).get("codice_uo").toString(); + } + finally { + Object insdipResponsabileUo = new Object(); + String usernameDirettore = null; + EntitaOrganizzativaWebDto entitaOrganizzativaDirUo = null; + try { + insdipResponsabileUo = siperService.getDirettoreCDSUO(cdsuoAppartenenzaUtente).get(0).get("codice_sede"); + log.info("getDirettoreCDSUO FUNZIONA "); + usernameDirettore = siperService.getDirettoreCDSUO(cdsuoAppartenenzaUtente).get(0).get("uid").toString(); + try { + entitaOrganizzativaDirUo = aceService.entitaOrganizzativaFindByTerm(insdipResponsabileUo.toString()).get(0); + } catch(UnexpectedResultException | FeignException | HttpClientErrorException error3) { + log.info("-------------- WARNING: entitaOrganizzativaDirUo NON RIESCO A TROVARE L'ENTITA' ORGANIZZATIVA per la CDSUO {}", cdsuoAppartenenzaUtente); + try { + entitaOrganizzativaDirUo = aceService.entitaOrganizzativaFindByTerm(insdipResponsabileUo.toString()).get(0); + } catch(UnexpectedResultException | FeignException | HttpClientErrorException error4) { + log.info("-------------- ERROR: entitaOrganizzativaDirUo 2o TENTATIVO NON RIESCO A TROVARE L'ENTITA' ORGANIZZATIVA per la CDSUO {}", cdsuoAppartenenzaUtente); + } + } + finally { + + Integer idEntitaorganizzativaResponsabileUtente = entitaOrganizzativaDirUo.getId(); + String siglaEntitaorganizzativaResponsabileUtente = entitaOrganizzativaDirUo.getSigla().toString(); + String denominazioneEntitaorganizzativaResponsabileUtente = entitaOrganizzativaDirUo.getDenominazione().toString(); + String cdsuoEntitaorganizzativaResponsabileUtente = entitaOrganizzativaDirUo.getCdsuo().toString(); + String idnsipEntitaorganizzativaResponsabileUtente = entitaOrganizzativaDirUo.getIdnsip().toString(); + log.info("OK: L'utente {} ha come direttore {} della struttura {} ({}) [ID: {}] [CDSUO: {}] [IDNSIP: {}]", username, usernameDirettore, denominazioneEntitaorganizzativaResponsabileUtente, siglaEntitaorganizzativaResponsabileUtente, idEntitaorganizzativaResponsabileUtente, cdsuoEntitaorganizzativaResponsabileUtente, idnsipEntitaorganizzativaResponsabileUtente); + String gruppoDirigenteRichiedente = "responsabile-struttura@" + idEntitaorganizzativaResponsabileUtente; + + Set members = membershipService.getAllUsersInGroup(gruppoDirigenteRichiedente); + //List members = membershipService.findMembersInGroup(gruppoDirigenteRichiedente); + if (members.size() == 0) { + log.info(" ERROR: Il gruppo RESPONSABILE STRUTTURA: {} NON HA NESSUNO", gruppoDirigenteRichiedente); + } + if (members.size() > 1) { + log.info(" ERROR: Il gruppo RESPONSABILE STRUTTURA: {} HA PIU' MEMBRI", gruppoDirigenteRichiedente); + } + members.forEach(member -> { + log.info("L'utente {} fa parte del gruppo {} ", member.toString(), gruppoDirigenteRichiedente); + }); + } + } catch(UnexpectedResultException | FeignException | HttpClientErrorException error2) { + log.info("-------------- ERROR: getDirettoreCDSUO NON HA FUNZIONATO!!!!!!!!!!!!!!! l'utente {} non ha DIRETTORE per la CDSUO {}", username, cdsuoAppartenenzaUtente); + } + finally { + log.info("-------------- NEXT"); + + + } + } + } + + private Map getPersoneDaFile() throws IOException { + + CSVParser parser = new CSVParser(','); + + Stream lines = Files.lines(Paths.get("./src/batch/resources/batch/utentiDomandeAccordiBilaterali5.csv")); + + Map associazioni = new HashMap<>(); + + lines + .skip(1). + forEach(l -> { + try { + + String[] values = parser.parseLine(l); + log.info(values[0] + " " + values[1]); + associazioni.put(values[0], values[1]); + + } catch (IOException e) {e.printStackTrace();} + }); + + + return associazioni; + } +} + + + + + + + + + + + + + + + + + + + + + diff --git a/src/batch/java/it/cnr/si/flows/batch/VerificaProceduraAcquisti.java b/src/batch/java/it/cnr/si/flows/batch/VerificaProceduraAcquisti.java new file mode 100644 index 000000000..f982eec9e --- /dev/null +++ b/src/batch/java/it/cnr/si/flows/batch/VerificaProceduraAcquisti.java @@ -0,0 +1,152 @@ +package it.cnr.si.flows.batch; + +import com.opencsv.CSVParser; +import feign.FeignException; +import it.cnr.si.FlowsApp; +import it.cnr.si.flows.ng.exception.UnexpectedResultException; +import it.cnr.si.flows.ng.service.AceBridgeService; +import it.cnr.si.flows.ng.service.SiperService; +import it.cnr.si.service.AceService; +import it.cnr.si.service.dto.anagrafica.letture.EntitaOrganizzativaWebDto; +import org.junit.runner.RunWith; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.ActiveProfiles; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.web.client.HttpClientErrorException; + +import javax.inject.Inject; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.util.HashMap; +import java.util.Map; +import java.util.stream.Stream; + +@SpringBootTest(classes = FlowsApp.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) +//@ActiveProfiles(profiles = "dev,cnr") +@ActiveProfiles(profiles = "dev,cnr") +@RunWith(SpringJUnit4ClassRunner.class) +public class VerificaProceduraAcquisti { + + private static final Logger log = LoggerFactory.getLogger(VerificaProceduraAcquisti.class); + + @Inject + private AceService aceService; + @Inject + private AceBridgeService aceBridgeService; + @Inject + private SiperService siperService; + private final Map errors = new HashMap<>(); + int personNr = 0; + + //@Test questa riga non va mai messa su git + //@Test + public void runBatch() throws IOException { + Map persone = getPersoneDaFile(); + + persone.forEach( (username, siglaRuolo) -> { + log.info("****** VERIFICA RESPONSABILE PER UTENTE {} nr.{} di:{} totali ******", username, personNr, persone.size()); + personNr = personNr + 1; + verificaDirettore(username, siglaRuolo); + }); + + errors.forEach( (tripla, risultato) -> { + log.error(tripla +": "+ risultato); + }); + } + + private void verificaDirettore(String username, String siglaRuolo) { + + log.info("****** UTENTE {} ******", username); + + String cdsuoAppartenenzaUtente = null; + try { + cdsuoAppartenenzaUtente = aceBridgeService.getAfferenzaUtente(username).getCdsuo(); + } catch(UnexpectedResultException | FeignException | HttpClientErrorException error1) { + log.info("L'UTENTE {} NON esiste in anagrafica ACE !!!!!!!!!!!!!!! ", username); + try { + cdsuoAppartenenzaUtente = siperService.getCDSUOAfferenzaUtente(username).get("codice_uo").toString(); + } catch(UnexpectedResultException | FeignException | HttpClientErrorException error2) { + log.info("L'UTENTE {} NON esiste in anagrafica SIPER !!!!!!!!!!!!!!! ", username); + } + finally { + log.info("------------------------------ "); + } + } + finally { + if (cdsuoAppartenenzaUtente == null) { + log.info("L'UTENTE {} NON esiste in anagrafica ACE e SIPER !!!!!!!!!!!!!!! ", username); + } else { + Map responsabileUo; + try { + responsabileUo = siperService.getResponsabileCDSUO(cdsuoAppartenenzaUtente).get(0); + String idnsipResponsabileUo = responsabileUo.get("codice_sede").toString(); + log.info("-------------- getResponsabileCDSUO FUNZIONA per CDSUO {} con IDNSIP {}", cdsuoAppartenenzaUtente, idnsipResponsabileUo); + String usernameResponsabile = responsabileUo.get("uid").toString(); + EntitaOrganizzativaWebDto entitaOrganizzativaRespUo = null; + try { + entitaOrganizzativaRespUo = aceService.entitaOrganizzativaFindByTerm(idnsipResponsabileUo.toString()).get(0); + } catch(UnexpectedResultException | FeignException | HttpClientErrorException error4) { + log.info("-------------- entitaOrganizzativaRespUo NON RIESCO A TROVARE L'ENTITA' ORGANIZZATIVA per la IDNSIP {}", idnsipResponsabileUo); + } + + Integer idEntitaorganizzativaResponsabileUtente = entitaOrganizzativaRespUo.getId(); + String siglaEntitaorganizzativaResponsabileUtente = entitaOrganizzativaRespUo.getSigla().toString(); + String denominazioneEntitaorganizzativaResponsabileUtente = entitaOrganizzativaRespUo.getDenominazione().toString(); + String cdsuoEntitaorganizzativaResponsabileUtente = entitaOrganizzativaRespUo.getCdsuo().toString(); + String idnsipEntitaorganizzativaResponsabileUtente = entitaOrganizzativaRespUo.getIdnsip().toString(); + log.info("L'utente {} ha come Responsabile {} della struttura {} ({}) [ID: {}] [CDSUO: {}] [IDNSIP: {}]", username, usernameResponsabile, denominazioneEntitaorganizzativaResponsabileUtente, siglaEntitaorganizzativaResponsabileUtente, idEntitaorganizzativaResponsabileUtente, cdsuoEntitaorganizzativaResponsabileUtente, idnsipEntitaorganizzativaResponsabileUtente); + } catch(UnexpectedResultException | FeignException | HttpClientErrorException error3) { + log.info("-------------- getResponsabileCDSUO NON HA FUNZIONATO!!!!!!!!!!!!!!! l'utente {} non ha Responsabile per la CDSUO {}", username, cdsuoAppartenenzaUtente); + } + } + } + } + + private Map getPersoneDaFile() throws IOException { + + CSVParser parser = new CSVParser(','); + + Stream lines = Files.lines(Paths.get("./src/batch/resources/batch/utentiProceduraAcquisti.csv")); + + Map associazioni = new HashMap<>(); + + lines + .skip(1). + forEach(l -> { + try { + + String[] values = parser.parseLine(l); + log.info(values[0] + " " + values[1]); + associazioni.put(values[0], values[1]); + + } catch (IOException e) {e.printStackTrace();} + }); + + + return associazioni; + } +} + + + + + + + + + + + + + + + + + + + + + diff --git a/src/batch/java/it/cnr/si/flows/batch/VerificaRestBoss.java b/src/batch/java/it/cnr/si/flows/batch/VerificaRestBoss.java new file mode 100644 index 000000000..bee232fe0 --- /dev/null +++ b/src/batch/java/it/cnr/si/flows/batch/VerificaRestBoss.java @@ -0,0 +1,234 @@ +package it.cnr.si.flows.batch; + +import com.opencsv.CSVParser; +import feign.FeignException; +import it.cnr.si.FlowsApp; +import it.cnr.si.flows.ng.exception.UnexpectedResultException; +import it.cnr.si.flows.ng.service.AceBridgeService; +import it.cnr.si.flows.ng.service.SiperService; +import it.cnr.si.service.AceService; +import it.cnr.si.service.FlowsLdapAccountService; +import it.cnr.si.service.MembershipService; +import it.cnr.si.service.RelationshipService; +import it.cnr.si.service.dto.anagrafica.letture.EntitaOrganizzativaWebDto; +import it.cnr.si.service.dto.anagrafica.letture.GerarchiaWebDto; +import it.cnr.si.service.dto.anagrafica.scritture.BossDto; +import it.cnr.si.service.dto.anagrafica.scritture.EntitaOrganizzativaDto; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.ActiveProfiles; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.web.client.HttpClientErrorException; + +import javax.inject.Inject; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +@SpringBootTest(classes = FlowsApp.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) +@ActiveProfiles(profiles = "dev,cnr") +@RunWith(SpringJUnit4ClassRunner.class) +public class VerificaRestBoss { + + private static final Logger log = LoggerFactory.getLogger(VerificaRestBoss.class); + + @Inject + private AceService aceService; + @Inject + private AceBridgeService aceBridgeService; + @Inject + private SiperService siperService; + @Inject + private MembershipService membershipService; + @Inject + private RelationshipService relationshipService; + @Value("${ace.url}") + private String aceURL; + + @Inject + private FlowsLdapAccountService flowsLdapAccountService; + + + private final Map errors = new HashMap<>(); + int personNr = 1; + List results = new ArrayList<>(); + EntitaOrganizzativaWebDto entitaOrganizzativaResponsabileStruttura = null; + + //@Test questa riga non va mai messa su git + //@Test + public void runBatch() throws IOException { + Map persone = getPersoneDaFile(); + + results.add("---------- LISTA RISULTATI -----------------"); + + persone.forEach( (username, siglaRuolo) -> { + log.info("****** VERIFICA DIRETTORE PER UTENTE {} nr.{} di:{} totali ******", username, personNr, persone.size()); + personNr = personNr + 1; + verifica4RestBoss(username, siglaRuolo); + }); + + errors.forEach( (tripla, risultato) -> { + log.error(tripla +": "+ risultato); + }); + + //RPINT RISULTATI + results.forEach(result -> { + log.info(result); + }); + } + + private void verifica4RestBoss(String username, String siglaRuolo) { + + log.info("****** UTENTE {} ******", username); + BossDto direttoreACE = null; + BossDto responsabileSede = null; + BossDto direttore0 = null; + BossDto direttore1 = null; + BossDto direttore2 = null; + BossDto bossSede = null; + + String usernameDirettoreACE = ""; + String usernameDirettoreSIPER = ""; + String denominazioneEntitaOrganizzativaDirettoreAce = null; + String denominazioneEntitaOrganizzativaDirettoreSIPER = null; + String siglaEntitaOrganizzativaDirettoreACE = null; + String siglaEntitaOrganizzativaDirettoreSIPER = null; + String ruoloEntitaOrganizzativaDirettore = null; + String cdsuoAppartenenzaUtente = null; + Integer idEntitaOrganizzativaDirettoreACE = 0; + + + List> utente = flowsLdapAccountService.getFulluser(username); + if (utente.size() > 0) { + if (utente.get(0).get("cnrextra4") != null) { + String livelloUtente = utente.get(0).get("cnrextra4").toString(); + log.info("OK: L'UTENTE {} IN LDAP FIGURA COME DIPENDENTE ed ha come livello {} ", username, livelloUtente); + } else { + log.info("OK: L'UTENTE {} IN LDAP FIGURA COME NON DIPENDENTE ", username ); + results.add("WARNING: L'UTENTE "+ username + " IN LDAP FIGURA COME NON DIPENDENTE " ); + } + try { + direttoreACE = aceService.bossDirettoreByUsername(username); + log.info("OK: L'UTENTE {} ha direttoreACE {} ", username, direttoreACE.getUsername()); + results.add("OK: L'UTENTE "+ username + " ha responsabileSede " + direttoreACE.getUsername()); + } catch(UnexpectedResultException | FeignException | HttpClientErrorException error1) { + log.info("ERROR: L'UTENTE {} NON direttoreACE ", username); + results.add("ERROR: L'UTENTE "+ username + " NON ha responsabileSede " + " - con errore: " + error1.getMessage()); + } finally { + try { + direttore0 = aceService.bossLevelByUsername(0, username); + log.info("OK: L'UTENTE {} ha direttore 0 {} ", username, direttore0.getUsername()); + results.add("OK: L'UTENTE "+ username + " ha responsabileSede " + direttore0.getUsername()); + } catch(UnexpectedResultException | FeignException | HttpClientErrorException error1) { + log.info("ERROR: L'UTENTE {} NON ha direttore 0 ", username); + results.add("ERROR: L'UTENTE "+ username + " NON ha responsabileSede " + " - con errore: " + error1.getMessage() ); + } finally { + try { + direttore1 = aceService.bossLevelByUsername(1, username); + log.info("OK: L'UTENTE {} ha direttore 1 {} ", username, direttore1.getUsername()); + results.add("OK: L'UTENTE "+ username + " ha responsabileSede " + direttore1.getUsername()); + } catch(UnexpectedResultException | FeignException | HttpClientErrorException error1) { + log.info("WARNING: L'UTENTE {} NON ha direttore 1 ", username); + results.add("ERROR: L'UTENTE "+ username + " NON ha responsabileSede " + " - con errore: " + error1.getMessage() ); + } finally { + try { + direttore2 = aceService.bossLevelByUsername(0, username); + log.info("OK: L'UTENTE {} ha direttore 2 {} ", username, direttore2.getUsername()); + results.add("OK: L'UTENTE "+ username + " ha responsabileSede " + direttore2.getUsername()); + } catch(UnexpectedResultException | FeignException | HttpClientErrorException error1) { + if (error1.getMessage().contains("Responsabile Sede not found") ) { + log.info("WARNING: L'UTENTE {} NON ha direttore 2 ", username); + results.add("WARNING: L'UTENTE "+ username + " NON ha responsabileSede " + " - con errore: " + error1.getMessage() ); + } else { + log.info("ERROR: L'UTENTE {} NON ha direttore 2 ", username); + results.add("ERROR: L'UTENTE "+ username + " NON ha responsabileSede " + " - con errore: " + error1.getMessage() ); + } + } finally { + try { + bossSede = aceService.bossSedeByUsername(username); + log.info("OK: L'UTENTE {} ha boss Sede {} ", username, bossSede.getUsername()); + results.add("OK: L'UTENTE "+ username + " ha responsabileSede " + bossSede.getUsername()); + } catch(UnexpectedResultException | FeignException | HttpClientErrorException error1) { + log.info("WARNING: L'UTENTE {} NON ha boss Sede ", username); + results.add("ERROR: L'UTENTE "+ username + " NON ha bossSede " + " - con errore: " + error1.getMessage() ); + } finally { + try { + responsabileSede = aceService.bossSedeResponsabileByUsername(username); + log.info("OK: L'UTENTE {} ha responsabileSede {} ", username, responsabileSede.getUsername()); + results.add("OK: L'UTENTE "+ username + " ha responsabileSede " + responsabileSede.getUsername()); + } catch(UnexpectedResultException | FeignException | HttpClientErrorException error1) { + log.info("WARNING: L'UTENTE {} NON ha responsabileSede ", username); + results.add("WARNING: L'UTENTE "+ username + " NON ha responsabileSede " + " - con errore: " + error1.getMessage() ); + } finally { + results.add(" ------------------------------------------------------------------------------------------------ "); + } + } + } + } + } + } + } else { + log.info("ERROR: L'UTENTE {} NON direttoreACE ", username); + results.add("ERROR: L'UTENTE "+ username + " NON E' PRESENTE IN LDAP"); + } + + } + + private Map getPersoneDaFile() throws IOException { + + CSVParser parser = new CSVParser(','); + + Stream lines = Files.lines(Paths.get("./src/batch/resources/batch/utentiGenericiTest.csv")); + //Stream lines = Files.lines(Paths.get("./src/batch/resources/batch/utentiDomandeAccordiBilaterali1.csv")); + Map associazioni = new HashMap<>(); + + lines + .skip(1). + forEach(l -> { + try { + + String[] values = parser.parseLine(l); + log.info(values[0] + " " + values[1]); + associazioni.put(values[0], values[1]); + + } catch (IOException e) {e.printStackTrace();} + }); + + + return associazioni; + } +} + + + + + + + + + + + + + + + + + + + + + diff --git a/src/batch/java/it/cnr/si/flows/batch/associazione utenze ruolo per ACE 07 maggio.csv b/src/batch/java/it/cnr/si/flows/batch/associazione utenze ruolo per ACE 07 maggio.csv new file mode 100644 index 000000000..5c1d554a3 --- /dev/null +++ b/src/batch/java/it/cnr/si/flows/batch/associazione utenze ruolo per ACE 07 maggio.csv @@ -0,0 +1,4 @@ +userName,siglaRuolo +caterina.flore,staffAmministrativo +massimiliano.pilloni,staffAmministrativo +simona.foddi,staffAmministrativo \ No newline at end of file diff --git a/src/batch/resources/batch/190627 associazione utenze ruolo per ACE 07 maggio.csv b/src/batch/resources/batch/190627 associazione utenze ruolo per ACE 07 maggio.csv new file mode 100644 index 000000000..f7b668172 --- /dev/null +++ b/src/batch/resources/batch/190627 associazione utenze ruolo per ACE 07 maggio.csv @@ -0,0 +1,5 @@ +userName,siglaRuolo +giovanni.bortolan,sfd +anna.penna,staffAmministrativo +roberto.puccinelli,sfd +silvia.rossi,staffAmministrativo \ No newline at end of file diff --git a/src/batch/resources/batch/ProceduraAcquisti-ListaRimozioneRuoliPerCDSUO.csv b/src/batch/resources/batch/ProceduraAcquisti-ListaRimozioneRuoliPerCDSUO.csv new file mode 100644 index 000000000..1980635fa --- /dev/null +++ b/src/batch/resources/batch/ProceduraAcquisti-ListaRimozioneRuoliPerCDSUO.csv @@ -0,0 +1,4 @@ +userName,siglaRuolo,cdsuo +all,responsabileFirmaAcquisti,000411 +all,staffAmministrativo,000411 +all,sfd,000411 diff --git a/src/batch/resources/batch/ProceduraAcquisti-Utenti-ICCOM.csv b/src/batch/resources/batch/ProceduraAcquisti-Utenti-ICCOM.csv new file mode 100644 index 000000000..e895c9c2d --- /dev/null +++ b/src/batch/resources/batch/ProceduraAcquisti-Utenti-ICCOM.csv @@ -0,0 +1,21 @@ +userName,siglaRuolo,cdsuo +francesco.vizza,responsabileFirmaAcquisti,020000 +simone.ferrini,staffAmministrativo,020000 +massimo.santarelli,staffAmministrativo,020000 +lucia.angellotti,staffAmministrativo,020000 +francesco.bonaccini,staffAmministrativo,020000 +caterina.monitillo,staffAmministrativo,020000 +fabio.migliacci,sfd,020000 +valentina.morello,sfd,020000 +caterina.fusco,responsabileFirmaAcquisti,020001 +angela.rafaschieri,staffAmministrativo,020001 +stefano.carito,staffAmministrativo,020001 +angela.rafaschieri,sfd,020001 +stefano.carito,sfd,020001 +claudia.forte,responsabileFirmaAcquisti,020003 +manuela.cempini,staffAmministrativo,020003 +maurizio.picchi,staffAmministrativo,020003 +manuela.cempini,sfd,020003 +maurizio.picchi,sfd,020003 +cinzia.dellaporta,sfd,020003 +giuliana.morelli,sfd,020003 diff --git a/src/batch/resources/batch/ProceduraAcquisti-Utenti-IFN.csv b/src/batch/resources/batch/ProceduraAcquisti-Utenti-IFN.csv new file mode 100644 index 000000000..d1cf8efe9 --- /dev/null +++ b/src/batch/resources/batch/ProceduraAcquisti-Utenti-IFN.csv @@ -0,0 +1,7 @@ +userName,siglaRuolo,cdsuo +mariagaia.ghigliani,staffAmministrativo,036000 +sandra.perazin,staffAmministrativo,036000 +mirella.chinello,staffAmministrativo,036000 +federica.ambrosio,staffAmministrativo,036000 +laura.podini,staffAmministrativo,036000 +angela.loiudice,staffAmministrativo,036004 diff --git a/src/batch/resources/batch/ProceduraAcquisti-Utenti-SISINFO.csv b/src/batch/resources/batch/ProceduraAcquisti-Utenti-SISINFO.csv new file mode 100644 index 000000000..3d48445a6 --- /dev/null +++ b/src/batch/resources/batch/ProceduraAcquisti-Utenti-SISINFO.csv @@ -0,0 +1,7 @@ +userName,siglaRuolo,cdsuo +maurizio.lancia,responsabileFirmaAcquisti,000411 +silvia.rossi,staffAmministrativo,000411 +anna.penna,staffAmministrativo,000411 +roberto.puccinelli,sfd,000411 +paoloenricocirone,sfd,000411 +marcinireneusz.trycz,sfd,000411 \ No newline at end of file diff --git a/src/batch/resources/batch/ProceduraAcquisti-Utenti-TOTALE CNR.csv b/src/batch/resources/batch/ProceduraAcquisti-Utenti-TOTALE CNR.csv new file mode 100644 index 000000000..346a79802 --- /dev/null +++ b/src/batch/resources/batch/ProceduraAcquisti-Utenti-TOTALE CNR.csv @@ -0,0 +1,312 @@ +userName,siglaRuolo,cdsuo +giovanni.rinaldi,responsabileFirmaAcquisti,003000 +claudio.gentile,sfd,003000 +adalinda.colluccini,staffAmministrativo,003000 +carmelo.miano,staffAmministrativo,004000 +vasile,staffAmministrativo,004000 +simona.galvano,sfd,006000 +annamaria.briuolo,staffAmministrativo,006000 +marilenalucia.demarco,staffAmministrativo,006000 +fabioantonino.viscuso,staffAmministrativo,006000 +simona.garaventa,staffAmministrativo,008000 +tatiana.marescalchi,staffAmministrativo,008000 +rosaanna.cascone,staffAmministrativo,008000 +alessia.bonafede,staffAmministrativo,008000 +fulvia.ivaldi,staffAmministrativo,008000 +antonella.tomasino,staffAmministrativo,008000 +rosa.claps,staffAmministrativo,008000 +ornella.rimoldi,responsabileFirmaAcquisti,009000 +clara.castoldi,staffAmministrativo,009000 +vincenzo.longo@cnr.it,responsabileFirmaAcquisti,012000 +vincenzo.longo,responsabileFirmaAcquisti,012000 +iole.farina,staffAmministrativo,012000 +massimo.sabatiniterreni@cnr.it,staffAmministrativo,012000 +massimo.sabatiniterreni,staffAmministrativo,012000 +mario.incarnato,sfd,013000 +giorgia.cruciani,staffAmministrativo,013000 +isabella.monosi,staffAmministrativo,013000 +barbara.ognibene,staffAmministrativo,013000 +sabrina.sanzone,sfd,014000 +alessandro.pensato,staffAmministrativo,014000 +antoniogiulio.rizzo,staffAmministrativo,014000 +laura.marra,staffAmministrativo,015000 +camilla.chieco,sfd,016000 +marcellomancini,responsabileFirmaAcquisti,017000 +antonio.iandolo,sfd,017000 +stefania.daniele,staffAmministrativo,017000 +antonella.aiello,staffAmministrativo,019000 +tito.carozza,staffAmministrativo,019000 +tito.carozza,staffAmministrativo,019000 +maria.giglio,staffAmministrativo,019000 +francesco.rassu,staffAmministrativo,019000 +valentina.morello,responsabileFirmaAcquisti,020000 +maurizio.picchi,sfd,020000 +manuela.cempini,staffAmministrativo,020000 +loredana.salzano,sfd,024000 +loredana.salzano,sfd,024000 +mariagrazia.distante,staffAmministrativo,024000 +mariagrazia.distante,staffAmministrativo,024000 +giovanni.filograsso,staffAmministrativo,027000 +carlo.pluchino,staffAmministrativo,027000 +francesca.vergari,staffAmministrativo,027000 +andreagiuseppe.gardi,staffAmministrativo,028000 +lugia.riggio,staffAmministrativo,028000 +giuseppina.ippolito,staffAmministrativo,030000 +maria.peluso,staffAmministrativo,030000 +giulia.speranza,staffAmministrativo,030000 +tiziana.collodel,sfd,031000 +silvia.schiavon,sfd,031000 +annamaria.tirloni,staffAmministrativo,031000 +elena.parodi,staffAmministrativo,031000 +chiara.liseranivonberger,sfd,032000 +angela.azzurrini,staffAmministrativo,032000 +anna.papa,staffAmministrativo,032000 +cinzia.bagnesi,sfd,035000 +silviamaria.rossi,sfd,035000 +mariagaia.ghigliani,staffAmministrativo,036000 +sandra.perazin,staffAmministrativo,036000 +mirella.chinello,staffAmministrativo,036000 +federica.ambrosio,staffAmministrativo,036000 +laura.podini,staffAmministrativo,036000 +alfredo.digiacomo,staffAmministrativo,039000 +giovanni.maga,responsabileFirmaAcquisti,040000 +iovanna.lattanzi,responsabileFirmaAcquisti,040000 +stefano.lussignoli,sfd,040000 +simonetta.bianchi,staffAmministrativo,041000 +michele.livorti,staffAmministrativo,041000 +chiara.nobile,staffAmministrativo,041000 +cira.nocerino,staffAmministrativo,041000 +aldo.sampino,staffAmministrativo,041000 +luca.scutigliani,staffAmministrativo,041000 +elena.delia,staffAmministrativo,043000 +susanna.delchicca,staffAmministrativo,043000 +dorina.gentile,responsabileFirmaAcquisti,044000 +claudio.baesso,sfd,044000 +luca.albertario,staffAmministrativo,044000 +paolo.casella,staffAmministrativo,044000 +simone.berti,staffAmministrativo,046000 +tiziana.davanzo,staffAmministrativo,046000 +serena.desantis,staffAmministrativo,046000 +pamelabarletta,sfd,047000 +antonella.gadducci,staffAmministrativo,048000 +michela.saviozzi,staffAmministrativo,048000 +noemi.terreni,staffAmministrativo,048000 +eleonora.carletti,responsabileFirmaAcquisti,049000 +francesca.marzola,staffAmministrativo,049000 +silvia.zeni,staffAmministrativo,049000 +paola.bertelli,staffAmministrativo,049000 +nadia.petrone,staffAmministrativo,049000 +michela.spagnuolo,responsabileFirmaAcquisti,050000 +giovanna.placentino,sfd,050000 +maria.grizzaffi,staffAmministrativo,050000 +andrea.zappettini,responsabileFirmaAcquisti,052000 +antonella.massa,staffAmministrativo,052000 +monica.cagol,staffAmministrativo,052000 +aldo.rosati,staffAmministrativo,053000 +stefano.tardiola,staffAmministrativo,053000 +eugenia.sansone,responsabileFirmaAcquisti,054000 +gabriellapalma.bonasia,sfd,054000 +giovanna.loffredo,staffAmministrativo,054000 +gerardinoberardone,staffAmministrativo,055000 +tiziana.forlenza,staffAmministrativo,055000 +luigi.franco,staffAmministrativo,055000 +lucia.telesca,staffAmministrativo,055000 +cristiana.cimini,staffAmministrativo,057000 +annarosa.florio,staffAmministrativo,057000 +monica.gigliotti,staffAmministrativo,057000 +carmelaalessandra.lagreca,staffAmministrativo,057000 +giovannaanna.leanza,staffAmministrativo,057000 +gerardo.valentino,responsabileFirmaAcquisti,058000 +luana.barone,staffAmministrativo,058000 +robertalucia.morvillo,staffAmministrativo,058000 +nicola.resciniti,staffAmministrativo,058000 +cleliacristina.lamon,staffAmministrativo,060000 +barbara.roncolini,staffAmministrativo,061000 +antonio.rubino,staffAmministrativo,061000 +francesca.tonin,staffAmministrativo,061000 +damiano.barbato,staffAmministrativo,061000 +cesare.rossi,staffAmministrativo,061000 +elisa.ceccarelli,staffAmministrativo,063000 +massimo.didio,staffAmministrativo,063000 +marco.grasso,staffAmministrativo,063000 +federica.talpo,staffAmministrativo,063000 +fausto.guzzettig,responsabileFirmaAcquisti,066000 +paola.cianchelli,staffAmministrativo,066000 +massimo.guadagno,staffAmministrativo,066000 +elea.vairo,staffAmministrativo,066000 +massimiliana.peron,staffAmministrativo,067000 +giuseppina.monteleone,staffAmministrativo,067000 +roberta.tassi,staffAmministrativo,067000 +mariagiovanna.felici,sfd,068000 +cinzia.cascioli,staffAmministrativo,068000 +patrizia.re,staffAmministrativo,068000 +roberto.amato,staffAmministrativo,069000 +riccardo.chirone,responsabileFirmaAcquisti,070000 +vincenzo.scognamiglio,sfd,070000 +antonella.napolitano,staffAmministrativo,070000 +emanuela.desimone,staffAmministrativo,071000 +giosue.piccolo,staffAmministrativo,071000 +maria.mottola,staffAmministrativo,072000 +nadia.russo,staffAmministrativo,072000 +generoso.sole,staffAmministrativo,072000 +laura.mengozzi,staffAmministrativo,073000 +francesco.montaleone,staffAmministrativo,073000 +marina.castelli,staffAmministrativo,073000 +kristiana.manoleva,staffAmministrativo,073000 +pierangela.cempini,sfd,074000 +giovanni.ricci,staffAmministrativo,074000 +rita.zaghi,staffAmministrativo,075000 +nicoletta.campagna,staffAmministrativo,075000 +riccardo.manca,staffAmministrativo,075000 +serena.zaniboni,staffAmministrativo,075000 +sabato.dauria,responsabileFirmaAcquisti,076000 +maria.staiano,sfd,076000 +franca.lettieri,staffAmministrativo,076000 +marinella.cavallo,staffAmministrativo,077000 +filomena.epifani,staffAmministrativo,077000 +salvatore.lisi,staffAmministrativo,077000 +annamaria.pascali,staffAmministrativo,077000 +alessio.neri,staffAmministrativo,078000 +sara.alocci,responsabileFirmaAcquisti,079000 +marcello.boscato,staffAmministrativo,079000 +marinella.delauro,staffAmministrativo,080000 +sara.ferluga,staffAmministrativo,080000 +barbara.baso,staffAmministrativo,080000 +patrizia.dallolio,staffAmministrativo,080000 +barbara.bianchi,staffAmministrativo,080000 +paola.focaccia,staffAmministrativo,080000 +sebastiano.cavallaro,responsabileFirmaAcquisti,081000 +ariangela.belvedere,sfd,081000 +mariapatrizia.dangelo,staffAmministrativo,081000 +alessandramaccioni,staffAmministrativo,082000 +ilaria.giuliodori,staffAmministrativo,082000 +marco.vannini,staffAmministrativo,082000 +fabio.testi,staffAmministrativo,082000 +renza.benzi,staffAmministrativo,082000 +adriana.capriglione,staffAmministrativo,083000 +alessandro.ortu,staffAmministrativo,083000 +franca.serra,staffAmministrativo,083000 +annelise.arcuri,staffAmministrativo,084000 +simonetta.bedini,staffAmministrativo,084000 +lucia.sollima,staffAmministrativo,084000 +raffaella.villani,staffAmministrativo,084000 +giuseppa.giglio,staffAmministrativo,087000 +andrea.laruffa,staffAmministrativo,087000 +enzo.lucia,staffAmministrativo,087000 +roberto.petrucci,staffAmministrativo,087000 +raffaella.rossi,staffAmministrativo,087000 +ornella.ferrajolo,responsabileFirmaAcquisti,088000 +roberto.storchi,staffAmministrativo,088000 +teresa.perri,staffAmministrativo,091000 +francesca.agostini,staffAmministrativo,092000 +marialuisa.agostini,staffAmministrativo,092000 +concetta.casigli,staffAmministrativo,093000 +massimorosario.meglio,staffAmministrativo,093000 +nadia.fichera,staffAmministrativo,095000 +giuseppe-napoli,staffAmministrativo,095000 +marco.striseo,staffAmministrativo,096000 +ignazia.barraco,staffAmministrativo,096000 +elena.castoldi,staffAmministrativo,096000 +francesco.morello,staffAmministrativo,096000 +alberto.figoli,responsabileFirmaAcquisti,097000 +anna.nigri,staffAmministrativo,097000 +antonio.andaloro,sfd,099000 +mario.giorgianni,staffAmministrativo,099000 +maria.vurchio,staffAmministrativo,100000 +mariagiovanna.torti,staffAmministrativo,100000 +loredana.ansalone,staffAmministrativo,100000 +giuseppe.sabatelli,staffAmministrativo,100000 +simona.daguanno,staffAmministrativo,101000 +sonia.schenone,staffAmministrativo,102000 +paola.parodi,staffAmministrativo,102000 +gabriella.mandarino,staffAmministrativo,102000 +doriana.dhrami,staffAmministrativo,102000 +vincenza.zito,staffAmministrativo,102000 +davide.ceresa,sfd,103000 +alessandra.tafaro,sfd,103000 +giuseppe.bono,staffAmministrativo,103000 +michele.attolico,staffAmministrativo,103000 +gaetana.fioretto,staffAmministrativo,103000 +sebastiano.faro,responsabileFirmaAcquisti,104000 +monica.giustizieri,staffAmministrativo,104000 +annamaria.iozzo,staffAmministrativo,104000 +clementina.falco,staffAmministrativo,106000 +alfio.fallica,staffAmministrativo,106000 +ilaria.bizzarri,staffAmministrativo,106000 +mariagioia.danna,staffAmministrativo,108000 +barbara.zama,staffAmministrativo,108000 +barbara.zama,staffAmministrativo,108000 +giuseppe.faraglia,responsabileFirmaAcquisti,109000 +beatrice.ricci,staffAmministrativo,111000 +simona.checchi,staffAmministrativo,111000 +elisa.guberti,staffAmministrativo,111000 +roberta.parenti,staffAmministrativo,111000 +stefano.fabris,responsabileFirmaAcquisti,114000 +martina.centazzo,staffAmministrativo,114000 +claudia.babic,staffAmministrativo,114000 +gabriella.dorligo,staffAmministrativo,114000 +lucia.sorba,responsabileFirmaAcquisti,115000 +giovanna.diprima,staffAmministrativo,115000 +giuseppe.sconocchia,responsabileFirmaAcquisti,116000 +rita.carbonetti@cnr.it,staffAmministrativo,116000 +nunziatina.cherubini,staffAmministrativo,116000 +pamela.apa,staffAmministrativo,116000 +annarita.carnevale,staffAmministrativo,117000 +silvana.iannone,staffAmministrativo,117000 +domenico.barile,staffAmministrativo,118000 +ivana.divita,staffAmministrativo,118000 +emanuela.fiucci,staffAmministrativo,118000 +salvatore.scicchigno,staffAmministrativo,118000 +mariomontanino,responsabileFirmaAcquisti,119000 +andrea.sorrentino,responsabileFirmaAcquisti,119000 +raffaella.damore,staffAmministrativo,119000 +giovanni.nasti,staffAmministrativo,119000 +manuel.nisi,staffAmministrativo,119000 +anna.principe,staffAmministrativo,119000 +mariarosaria.sessa,staffAmministrativo,119000 +mariaserenella.vitale,staffAmministrativo,119000 +mariaserenella.vitale,staffAmministrativo,119000 +concetta.mottura,staffAmministrativo,121000 +jose.saporita,staffAmministrativo,121000 +luciana.savino,staffAmministrativo,121000 +jessica.amicucci,sfd,122000 +simona.franguelli,sfd,122000 +marco.dadduzio,staffAmministrativo,122000 +mariangela.giglio,staffAmministrativo,122000 +filippo.angotzi,staffAmministrativo,124000 +marialuisa.carelli,staffAmministrativo,124000 +pietrofilippo.fiducioso,staffAmministrativo,124000 +annamaria.toncini,staffAmministrativo,124000 +silvia.trucco,staffAmministrativo,124000 +giovanni.medde,staffAmministrativo,125000 +angelina.riggio,staffAmministrativo,126000 +elisabetta.sanvito,staffAmministrativo,126000 +alba.guercio,staffAmministrativo,126000 +carolina.allocchio,staffAmministrativo,126000 +elisa.tessarin,staffAmministrativo,127000 +luca.pitolli,responsabileFirmaAcquisti,301000 +laura.dorazi,staffAmministrativo,301000 +rossella.longo,staffAmministrativo,301000 +giuseppe.rosa,sfd,303000 +elisabetta.desalvia,sfd,303000 +cesareciotti,responsabileFirmaAcquisti,305000 +cesareciotti,staffAmministrativo,305000 +roberta.zuin,staffAmministrativo,312000 +monia.dechecchi,staffAmministrativo,312000 +antonella.barizza,staffAmministrativo,312000 +elena.parpaiola,staffAmministrativo,312000 +robertazuin,staffAmministrativo,312000 +daniela.lughi,sfd,313000 +tiziana.cremonini,staffAmministrativo,313000 +giovannabalzani,staffAmministrativo,313000 +michele.cheli,staffAmministrativo,314000 +fabio.grassini,staffAmministrativo,314000 +paola.fruzzetti,staffAmministrativo,314000 +giusepp.grippo,sfd,315000 +giuseppe.grippo,staffAmministrativo,315000 +stefania.venetoperrone,staffAmministrativo,315000 +amelia.crispo,staffAmministrativo,316000 +elea.vairo,staffAmministrativo,316000 +patrizia.amato,responsabileFirmaAcquisti,317000 +stefania.zangara,sfd,317000 +maria.quarto,staffAmministrativo,319000 diff --git a/src/batch/resources/batch/singoloGruppoUtentiProceduraAcquisti.csv b/src/batch/resources/batch/singoloGruppoUtentiProceduraAcquisti.csv new file mode 100644 index 000000000..a385f1266 --- /dev/null +++ b/src/batch/resources/batch/singoloGruppoUtentiProceduraAcquisti.csv @@ -0,0 +1,5 @@ +userName,siglaRuolo,cdsuo +mario.incarnato,responsabileFirmaAcquisti,013000 +giorgia.cruciani,staffAmministrativo,013000 +barbara.ognibene,staffAmministrativo,013000 +isabella.monosi,sfd,013000 diff --git a/src/batch/resources/batch/utentiDomandeAccordiBilaterali1.csv b/src/batch/resources/batch/utentiDomandeAccordiBilaterali1.csv new file mode 100644 index 000000000..3b86fd299 --- /dev/null +++ b/src/batch/resources/batch/utentiDomandeAccordiBilaterali1.csv @@ -0,0 +1,2 @@ +userName,ruolo +maurocarraro,initiator \ No newline at end of file diff --git a/src/batch/resources/batch/utentiDomandeAccordiBilaterali2.csv b/src/batch/resources/batch/utentiDomandeAccordiBilaterali2.csv new file mode 100644 index 000000000..e63b180b0 --- /dev/null +++ b/src/batch/resources/batch/utentiDomandeAccordiBilaterali2.csv @@ -0,0 +1,50 @@ +userName,ruolo +gaspare.varvaro,initiator +stefania.depalo,initiator +annarita.poli,initiator +elisabettarocca,initiator +claudia.tortiglione,initiator +maurizio.avella,initiator +stefania.romano,initiator +roberto.franzosi,initiator +lucia.alberti,initiator +luigi.gallo,initiator +marinella.petrocchi,initiator +cinzia.caliendo,initiator +alessandro.braggio,initiator +alberto.figoli,initiator +giancarlo.colombo,initiator +ida.oggiano,initiator +giovanni.longo,initiator +fabio.rizzo,initiator +marco.ferraro,initiator +graziella.chinizittelli,initiator +andrea.macchi,initiator +mariaisabel.noguesgonzalez,initiator +vincenza.colonna,initiator +salvatore.vasta,initiator +cinzia.cepek,initiator +angelo.bonanno,initiator +marina.baldi,initiator +annanora.tassetti,initiator +alessandropaciaroni,initiator +carlopunta,initiator +angelantonio.minafra,initiator +enzotramontano ,initiator +tersilla.virgili,initiator +francesco.gai,initiator +matteo.bosi,initiator +oliver.morsch,initiator +francesco.cordero,initiator +paolo.colasante,initiator +andrea.farina,initiator +mauro.zarrelli,initiator +andrea.trombettoni,initiator +paolo.villa,initiator +gennaro.gentile,initiator +claudio.ferrari,initiator +stefano.ubaldini,initiator +mariacristina.cocca,initiator +biancaelena.maserti,initiator +silvia.caponi,initiator +mariateresa.artese,initiator \ No newline at end of file diff --git a/src/batch/resources/batch/utentiDomandeAccordiBilaterali3.csv b/src/batch/resources/batch/utentiDomandeAccordiBilaterali3.csv new file mode 100644 index 000000000..55f4d0016 --- /dev/null +++ b/src/batch/resources/batch/utentiDomandeAccordiBilaterali3.csv @@ -0,0 +1,50 @@ +userName,ruolo +trifone.daddabbo,initiator +claudio.castellano,initiator +fabrizio.valenza,initiator +erika.kozma,initiator +giuseppe.tagarelli,initiator +marcello.raspa,initiator +federica.bondino,initiator +mikhail.iakimov,initiator +giacomo.saielli,initiator +lorenza.fiumi,initiator +alessandro.taloni,initiator +barbara.cortese,initiator +roberta.varriale,initiator +luciano.telesca,initiator +giuseppina.andreotti,initiator +elena.paoletti,initiator +elisabetta.preziosi,initiator +albertodilieto,initiator +alessandra.forni,initiator +katrin.schroeder,initiator +luigi.sorrentino,initiator +ivan.cibrariobertolotti,initiator +luciana.baldoni,initiator +luigi.tosi,initiator +antonio.franca,initiator +roberto.verucchi,initiator +frank.heins,initiator +bruno.zappone,initiator +francesco.paolocci,initiator +stefano.amalfitano,initiator +alina.polonia,initiator +marco.cuffaro,initiator +gianluca.accorsi,initiator +rada.novakovic,initiator +gianna.reginato,initiator +claudio.conti,initiator +giuseppe.parrella,initiator +aldo.nicosia,initiator +guido.toci,initiator +michele.iafisco,initiator +chiara.baldacchini,initiator +gianluca.gubbiotti,initiator +pietro.calandra,initiator +barbara.patrizi,initiator +stefano.pignattimoranodicustoza,initiator +maurizio.vurro,initiator +piero.toscano,initiator +manuelabozzi,initiator +raffaella.salvemini,initiator \ No newline at end of file diff --git a/src/batch/resources/batch/utentiDomandeAccordiBilaterali4.csv b/src/batch/resources/batch/utentiDomandeAccordiBilaterali4.csv new file mode 100644 index 000000000..3e8401aec --- /dev/null +++ b/src/batch/resources/batch/utentiDomandeAccordiBilaterali4.csv @@ -0,0 +1,36 @@ +userName,ruolo +alessandro.stroppa,initiator +raffaellamaria.balestrini,initiator +antonio.varriale,initiator +stefano.veronesi,initiator +vittorianna.tasco,initiator +massimo.cuscuna,initiator +rocco.caliandro,initiator +marco.moracci,initiator +davide.peddis,initiator +marina.bufacchi,initiator +sabina.porfido,initiator +francesco.petracchini,initiator +maurocarraro,initiator +davidriccardo.armando,initiator +claudio.ferrari,initiator +marcello.tagliavia,initiator +saramaria.valsecchi,initiator +katia.dambrosio,initiator +stefano.pelli,initiator +antonio.pepe,initiator +ferdinandoauricchio,initiator +claudia.conti,initiator +andrea.angelini,initiator +dario.dicara,initiator +claudia.pagano,initiator +lauragiuditta.ragona,initiator +sandra.donnici,initiator +giorgio.iabichino,initiator +stefano.taiti,initiator +renato.buzio,initiator +diego.copetti,initiator +claudia.forte,initiator +patrick.fiorenza,initiator +emanuela.proietti,initiator +sabina.spiga,initiator diff --git a/src/batch/resources/batch/utentiDomandeAccordiBilaterali5.csv b/src/batch/resources/batch/utentiDomandeAccordiBilaterali5.csv new file mode 100644 index 000000000..732e48d7e --- /dev/null +++ b/src/batch/resources/batch/utentiDomandeAccordiBilaterali5.csv @@ -0,0 +1,2 @@ +userName,ruolo +lauragiuditta.ragona,initiator \ No newline at end of file diff --git a/src/batch/resources/batch/utentiDomandeAccordiBilaterali6.csv b/src/batch/resources/batch/utentiDomandeAccordiBilaterali6.csv new file mode 100644 index 000000000..513bf9d3b --- /dev/null +++ b/src/batch/resources/batch/utentiDomandeAccordiBilaterali6.csv @@ -0,0 +1,3 @@ +userName,ruolo +luciana.baldoni,initiator +susanna.monti,initiator \ No newline at end of file diff --git a/src/batch/resources/batch/utentiGenericiTest.csv b/src/batch/resources/batch/utentiGenericiTest.csv new file mode 100644 index 000000000..501c329c8 --- /dev/null +++ b/src/batch/resources/batch/utentiGenericiTest.csv @@ -0,0 +1,355 @@ +userName,ruolo +luciana.baldoni,initiator +stefania.siracusano,initiator +francamatilde.tecchio,initiator +andrea.trombettoni,initiator +ada.sacca,initiator +susanna.monti,initiator +andrea.frazzica,initiator +fabrizio.dabbene,initiator +donato.bini,initiator +valentina.colcelli,initiator +loredana.debartolo,initiator +giovanni.cantele,initiator +cinzia.giannini,initiator +vincenza.antonucci,initiator +angelo.digarbo,initiator +bennydanilo.belviso,initiator +roberto.flammini,initiator +theofanis.raptis,initiator +roberta.angelini,initiator +annaelisabetta.boccaccio,initiator +eva.bystrenova,initiator +marco.bonini,initiator +giovanni.roviello,initiator +fabrizio.gherardi,initiator +federica.blando,initiator +dritan.siliqi,initiator +lorenzo.ulivi,initiator +angela.tino,initiator +pierfrancesco.cerruti,initiator +loredana.debartolo,initiator +bennydanilo.belviso,initiator +lorenzo.ulivi,initiator +mauro.rossi,initiator +angelo.freni,initiator +patrick.fiorenza,initiator +stefania.depalo,initiator +alberto.figoli,initiator +fabio.rizzo,initiator +marco.ferraro,initiator +annanora.tassetti,initiator +andrea.farina,initiator +andrea.trombettoni,initiator +silvia.caponi,initiator +vincenzo.alterio,initiator +francesco.cordero,initiator +pietro.calandra,initiator +massimo.cuscuna,initiator +sabina.spiga,initiator +roberta.angelini,initiator +fabrizio.gherardi,initiator +paolo.villa,initiator +alessandra.forni,initiator +guido.toci,initiator +maurizio.vurro,initiator +sandra.donnici,initiator +diego.copetti,initiator +francescosaverio.marra,initiator +marinella.petrocchi,initiator +piero.toscano,initiator +stefania.siracusano,initiator +claudio.castellano,initiator +bruno.zappone,initiator +marco.cuffaro,initiator +katia.dambrosio,initiator +luciano.telesca,initiator +giuseppina.andreotti,initiator +luigi.tosi,initiator +roberto.verucchi,initiator +stefano.taiti,initiator +gianluca.accorsi,initiator +francesco.paolocci,initiator +davidriccardo.armando,initiator +stefano.pelli,initiator +claudia.conti,initiator +francamatilde.tecchio,initiator +eva.bystrenova,initiator +patrick.fiorenza,initiator +claudio.ferrari,initiator +stefano.ubaldini,initiator +trifone.daddabbo,initiator +fabrizio.valenza,initiator +erika.kozma,initiator +ivan.cibrariobertolotti,initiator +luciana.baldoni,initiator +marina.bufacchi,initiator +iacopo.carusotto,initiator +giuseppe.greco,initiator +cinzia.giannini,initiator +federica.blando,initiator +giuseppe.patane,initiator +ada.sacca,initiator +giacomo.saielli,initiator +saramaria.valsecchi,initiator +renato.buzio,initiator +michele.iafisco,initiator +francesco.petracchini,initiator +alessio.sapienza,initiator +giancarlo.colombo,initiator +mariateresa.artese,initiator +rada.novakovic,initiator +rocco.caliandro,initiator +biancaelena.maserti,initiator +giuseppe.tagarelli,initiator +mikhail.iakimov,initiator +giovanni.roviello,initiator +roberto.franzosi,initiator +lucia.alberti,initiator +chiara.baldacchini,initiator +barbara.patrizi,initiator +emanuela.noris,initiator +lorenza.fiumi,initiator +luciano.telesca,initiator +stefano.amalfitano,initiator +alina.polonia,initiator +lauragiuditta.ragona,initiator +corrada.geraci,initiator +maurizio.avella,initiator +francesco.gai,initiator +federica.bondino,initiator +angelo.bonanno,initiator +elisabetta.preziosi,initiator +katrin.schroeder,initiator +emma.piacentini,initiator +onofrio.marago,initiator +theofanis.raptis,initiator +laura.pucci,initiator +flavia.pizzi,initiator +angelantonio.minafra,initiator +federica.bondino,initiator +giovanni.ruggieri,initiator +marco.lazzarino,initiator +jacopo.chiggiato,initiator +fabiana.calo,initiator +salvatore.capasso,initiator +graziella.chinizittelli,initiator +marina.baldi,initiator +antonio.franca,initiator +dario.dicara,initiator +andrea.trombettoni,initiator +claudia.forte,initiator +alessandro.paciaroni,initiator +maurizio.ferrari,initiator +fabrizio.roccaforte,initiator +alessandro.stroppa,initiator +mariaisabel.noguesgonzalez,initiator +luigi.sorrentino,initiator +francesca.buscemi,initiator +gianfrancoemanuele.modoni,initiator +massimo.zacchini,initiator +francesca.ravera,initiator +lucia.calucci,initiator +giovanni.roviello,initiator +daniele.malfitana,initiator +claudia.soria,initiator +idamaria.fusco,initiator +giovanna.sannino,initiator +andrea.gerbi,initiator +angelo.digarbo,initiator +chiara.botta,initiator +laura.fedele,initiator +giulio.cimini,initiator +alessandra.forni,initiator +alvise.benetazzo,initiator +loredana.debartolo,initiator +mauriliamaria.monti,initiator +alfonso.martone,initiator +simonamaria.monti,initiator +gianni.picchi,initiator +federico.spagnoli,initiator +lauravalentina.spinolo,initiator +giorgio.deluca,initiator +crescenzo.violante,initiator +angela.celetti,initiator +luigi.ambrosio,initiator +sante.laviola,initiator +paola.avallone,initiator +roberta.varriale,initiator +francesca.costabile,initiator +raffaellamaria.balestrini,initiator +renata.denaro,initiator +alessandro.ellero,initiator +pellegrino.musto,initiator +elianalanfranca.tassi,initiator +immacolata.caruso,initiator +mariella.baratti,initiator +alberto.zanelli,initiator +anna.tonazzini,initiator +tilde.decaro,initiator +alessandra.ricelli,initiator +claudia.mattioni,initiator +annamaria.panniello,initiator +mariaantonietta.dettori,initiator +vittorianna.tasco,initiator +fulvio.pupilli,initiator +viviana.scognamiglio,initiator +francesco.capitelli,initiator +anna.moliterni,initiator +alfredo.ronca,initiator +lucia.alberti,initiator +francesca.colosi,initiator +francescosaverio.marra,initiator +luciano.telesca,initiator +alessio.sapienza,initiator +mauro.rossi,initiator +angelo.freni,initiator +stefania.maggi,initiator +emanuela.noris,initiator +daniela.gaglio,initiator +massimo.esposito,initiator +sara.marinelli,initiator +vincenzo.alterio,initiator +luca.pappalardo,initiator +giuseppe.patane,initiator +corrada.geraci,initiator +marianicoletta.ravasio,initiator +roberto.flammini,initiator +claudiaroberta.calidonna,initiator +massimo.fraticelli,initiator +edgardo.ambrosi,initiator +salvatore.dinapoli,initiator +dafne.tomassetti,initiator +alessandro.stroppa,initiator +raffaellamaria.balestrini,initiator +antonio.varriale,initiator +stefano.veronesi,initiator +vittorianna.tasco,initiator +massimo.cuscuna,initiator +rocco.caliandro,initiator +davide.peddis,initiator +marina.bufacchi,initiator +sabina.porfido,initiator +francesco.petracchini,initiator +maurocarraro,initiator +davidriccardo.armando,initiator +claudio.ferrari,initiator +saramaria.valsecchi,initiator +katia.dambrosio,initiator +stefano.pelli,initiator +antonio.pepe,initiator +ferdinandoauricchio,initiator +claudia.conti,initiator +andrea.angelini,initiator +dario.dicara,initiator +claudia.pagano,initiator +lauragiuditta.ragona,initiator +sandra.donnici,initiator +giorgio.iabichino,initiator +stefano.taiti,initiator +renato.buzio,initiator +diego.copetti,initiator +claudia.forte,initiator +patrick.fiorenza,initiator +emanuela.proietti,initiator +sabina.spiga,initiator +gaspare.varvaro,initiator +stefania.depalo,initiator +annarita.poli,initiator +elisabettarocca,initiator +claudia.tortiglione,initiator +maurizio.avella,initiator +stefania.romano,initiator +roberto.franzosi,initiator +lucia.alberti,initiator +luigi.gallo,initiator +marinella.petrocchi,initiator +cinzia.caliendo,initiator +alessandro.braggio,initiator +alberto.figoli,initiator +giancarlo.colombo,initiator +ida.oggiano,initiator +giovanni.longo,initiator +fabio.rizzo,initiator +marco.ferraro,initiator +graziella.chinizittelli,initiator +andrea.macchi,initiator +mariaisabel.noguesgonzalez,initiator +vincenza.colonna,initiator +salvatore.vasta,initiator +cinzia.cepek,initiator +angelo.bonanno,initiator +marina.baldi,initiator +annanora.tassetti,initiator +carlopunta,initiator +angelantonio.minafra,initiator +tersilla.virgili,initiator +francesco.gai,initiator +matteo.bosi,initiator +oliver.morsch,initiator +francesco.cordero,initiator +paolo.colasante,initiator +andrea.farina,initiator +mauro.zarrelli,initiator +andrea.trombettoni,initiator +paolo.villa,initiator +gennaro.gentile,initiator +claudio.ferrari,initiator +stefano.ubaldini,initiator +mariacristina.cocca,initiator +biancaelena.maserti,initiator +silvia.caponi,initiator +mariateresa.artese,initiator +trifone.daddabbo,initiator +claudio.castellano,initiator +fabrizio.valenza,initiator +erika.kozma,initiator +giuseppe.tagarelli,initiator +marcello.raspa,initiator +federica.bondino,initiator +mikhail.iakimov,initiator +giacomo.saielli,initiator +lorenza.fiumi,initiator +alessandro.taloni,initiator +barbara.cortese,initiator +roberta.varriale,initiator +luciano.telesca,initiator +giuseppina.andreotti,initiator +elena.paoletti,initiator +elisabetta.preziosi,initiator +albertodilieto,initiator +alessandra.forni,initiator +katrin.schroeder,initiator +luigi.sorrentino,initiator +ivan.cibrariobertolotti,initiator +luciana.baldoni,initiator +luigi.tosi,initiator +antonio.franca,initiator +roberto.verucchi,initiator +frank.heins,initiator +bruno.zappone,initiator +francesco.paolocci,initiator +stefano.amalfitano,initiator +alina.polonia,initiator +marco.cuffaro,initiator +gianluca.accorsi,initiator +rada.novakovic,initiator +gianna.reginato,initiator +claudio.conti,initiator +giuseppe.parrella,initiator +aldo.nicosia,initiator +guido.toci,initiator +michele.iafisco,initiator +chiara.baldacchini,initiator +gianluca.gubbiotti,initiator +pietro.calandra,initiator +barbara.patrizi,initiator +stefano.pignattimoranodicustoza,initiator +maurizio.vurro,initiator +piero.toscano,initiator +manuelabozzi,initiator +raffaella.salvemini,initiator +enzotramontano,initiator +pierluigi.sanbiagio,initiator +angela.boggero,initiator +marco.moracci,initiator \ No newline at end of file diff --git a/src/batch/resources/batch/utentiProceduraAcquisti.csv b/src/batch/resources/batch/utentiProceduraAcquisti.csv new file mode 100644 index 000000000..60a02b10c --- /dev/null +++ b/src/batch/resources/batch/utentiProceduraAcquisti.csv @@ -0,0 +1,175 @@ +userName,siglaRuolo +fausto.guzzetti,responsabileFirmaAcquisti +marcello.mancini,responsabileFirmaAcquisti +gerardo.valentino,responsabileFirmaAcquisti +giuseppe.faraglia,responsabileFirmaAcquisti +giuseppe.sconocchia,responsabileFirmaAcquisti +luca.pitolli,responsabileFirmaAcquisti +eugenia.sansone,responsabileFirmaAcquisti +andrea.sorrentino,responsabileFirmaAcquisti +mario.montanino,responsabileFirmaAcquisti +alberto.figoli,responsabileFirmaAcquisti +riccardo.chirone,responsabileFirmaAcquisti +sebastiano.cavallaro,responsabileFirmaAcquisti +patrizia.amato,responsabileFirmaAcquisti +ornella.ferrajolo,responsabileFirmaAcquisti +giovanni.rinaldi,responsabileFirmaAcquisti +sabato.dauria,responsabileFirmaAcquisti +anna.principe,staffAmministrativo +adriana.capriglione,staffAmministrativo +paola.cianchelli,staffAmministrativo +elea.vairo,staffAmministrativo +massimo.guadagno,staffAmministrativo +francesca.agostini,staffAmministrativo +manuel.nisi,staffAmministrativo +roberto.storchi,staffAmministrativo +giovanni.filograsso,staffAmministrativo +francesca.vergari,staffAmministrativo +carlo.pluchino,staffAmministrativo +marialuisa.agostini,staffAmministrativo +lucia.telesca,staffAmministrativo +tiziana.forlenza,staffAmministrativo +antonella.aiello,staffAmministrativo +gerardino.berardone,staffAmministrativo +tito.carozza,staffAmministrativo +tito.carozza,staffAmministrativo +giovanni.medde,staffAmministrativo +francesco.rassu,staffAmministrativo +maria.giglio,staffAmministrativo +luana.barone,staffAmministrativo +nicola.resciniti,staffAmministrativo +isabella.monosi,staffAmministrativo +barbara.ognibene,staffAmministrativo +pamela.papa,staffAmministrativo +giorgia.cruciani,staffAmministrativo +alessandro.ortu,staffAmministrativo +franca.serra,staffAmministrativo +luigi.franco,staffAmministrativo +mariaserenella.vitale,staffAmministrativo +laura.marra,staffAmministrativo +roberto.amato,staffAmministrativo +marinella.cavallo,staffAmministrativo +filomena.epifani,staffAmministrativo +nunziatina.cherubini,staffAmministrativo +mariagrazia.distante,staffAmministrativo +salvatore.lisi,staffAmministrativo +antonella.napolitano,staffAmministrativo +fabioantonino.viscuso,staffAmministrativo +annamaria.briuolo,staffAmministrativo +marilenalucia.demarco,staffAmministrativo +mariaserenella.vitale,staffAmministrativo +annamaria.pascali,staffAmministrativo +massimo.didio,staffAmministrativo +marco.grasso,staffAmministrativo +federica.talpo,staffAmministrativo +elisa.ceccarelli,staffAmministrativo +massimorosario.meglio,staffAmministrativo +concetta.casigli,staffAmministrativo +stefania.venetoperrone,staffAmministrativo +rossella.longo,staffAmministrativo +cristiana.cimini,staffAmministrativo +giuseppe.grippo,staffAmministrativo +monica.gigliotti,staffAmministrativo +giovanna.loffredo,staffAmministrativo +giovannaanna.leanza,staffAmministrativo +simone.berti,staffAmministrativo +laura.dorazi,staffAmministrativo +giuseppe-napoli,staffAmministrativo +amelia.crispo,staffAmministrativo +elea.vairo,staffAmministrativo +robertalucia.morvillo,staffAmministrativo +annarita.carnevale,staffAmministrativo +silvana.iannone,staffAmministrativo +marialuisa.carelli,staffAmministrativo +pietrofilippo.fiducioso,staffAmministrativo +filippo.angotzi,staffAmministrativo +nadia.fichera,staffAmministrativo +domenico.barile,staffAmministrativo +ivana.divita,staffAmministrativo +emanuela.fiucci,staffAmministrativo +enzo.lucia,staffAmministrativo +salvatore.scicchigno,staffAmministrativo +andrea.laruffa,staffAmministrativo +carmelaalessandra.lagreca,staffAmministrativo +raffaella.damore,staffAmministrativo +giosue.piccolo,staffAmministrativo +stefania.daniele,staffAmministrativo +carmelo.miano,staffAmministrativo +mario.vasile,staffAmministrativo +raffaella.rossi,staffAmministrativo +generoso.sole,staffAmministrativo +nadia.russo,staffAmministrativo +maria.mottola,staffAmministrativo +simonetta.bianchi,staffAmministrativo +aldo.sampino,staffAmministrativo +michele.livorti,staffAmministrativo +chiara.nobile,staffAmministrativo +luca.scutigliani,staffAmministrativo +cira.nocerino,staffAmministrativo +alfredo.digiacomo,staffAmministrativo +roberto.petrucci,staffAmministrativo +anna.nigri,staffAmministrativo +mariangela.giglio,staffAmministrativo +marco.dadduzio,staffAmministrativo +antoniogiulio.rizzo,staffAmministrativo +alessandro.pensato,staffAmministrativo +rita.carbonetti,staffAmministrativo +raffaella.villani,staffAmministrativo +cleliacristina.lamon,staffAmministrativo +serena.desantis,staffAmministrativo +tiziana.davanzo,staffAmministrativo +lucia.sollima,staffAmministrativo +annelise.arcuri,staffAmministrativo +giuseppina.ippolito,staffAmministrativo +maria.peluso,staffAmministrativo +giulia.speranza,staffAmministrativo +mariapatrizia.dangelo,staffAmministrativo +simonetta.bedini,staffAmministrativo +franca.lettieri,staffAmministrativo +annarosa.florio,staffAmministrativo +aldo.rosati,staffAmministrativo +mario.giorgianni,staffAmministrativo +emanuela.desimone,staffAmministrativo +casimiro.provenzano,staffAmministrativo +davide.larosa,staffAmministrativo +stefano.tardiola,staffAmministrativo +alessio.neri,staffAmministrativo +teresa.perri,staffAmministrativo +maria.quarto,staffAmministrativo +giuseppa.giglio,staffAmministrativo +patrizia.re,staffAmministrativo +cinzia.cascioli,staffAmministrativo +giovanni.nasti,staffAmministrativo +mariarosaria.sessa,staffAmministrativo +adalinda.colluccini,staffAmministrativo +antonio.iandolo,sfd +pamela.barletta,sfd +loredana.salzano,sfd +vincenzo.scognamiglio,sfd +simona.galvano,sfd +gabriellapalma.bonasia,sfd +mario.incarnato,sfd +giuseppe.grippo,sfd +jessica.amicucci,sfd +simona.franguelli,sfd +sabrina.sanzone,sfd +ariangela.belvedere,sfd +maria.staiano,sfd +antoniopietrofrancesco.andaloro,sfd +mariagrazia.distante,sfd +stefania.zangara,sfd +mariagiovanna.felici,sfd +claudio.gentile,sfd +silvia.rossi,sfd +casimiro.provenzano,sfd +anna.penna,sfd +fabio.migliacci,sfd +pietro.cambria,sfd +giorgia.cruciani,sfd +iole.farina,sfd +mariaelena.secci,sfd +angela.loiudice,sfd +nicoletta.campagna,sfd +patriziaalessandra.fulle,sfd +giovanna.guidicelli,sfd + diff --git a/src/main/docker/app-prod.yml b/src/main/docker/app-prod.yml index c166a2195..f1d2030e4 100644 --- a/src/main/docker/app-prod.yml +++ b/src/main/docker/app-prod.yml @@ -8,6 +8,9 @@ services: - SPRING_LDAP_MANAGERPASSWORD=SPRING_LDAP_MANAGERPASSWORD_SED - ACE_PASSWORD=ACE_PASSWORD_SED - USER_ADMIN_PASSWORD=CMIS_PASSWORD + - SPRING_CLOUD_CONFIG_SERVER_GIT_URI=http://git.si.cnr.it/devops/configuration-repo.git + - SPRING_CLOUD_CONFIG_SERVER_GIT_USERNAME=flows + - SPRING_CLOUD_CONFIG_SERVER_GIT_PASSWORD=CONFIG_REPO_TOKEN - JHIPSTER_SLEEP=10 # gives time for the database to boot before the application - CACHE_HAZELCAST_MEMBERS=150.146.7.79:1481,150.146.7.52:1481 ports: @@ -15,9 +18,9 @@ services: - 1481:1481 - 1482:1482 logging: - driver: "gelf" - options: - gelf-address: "udp://log.cedrc.cnr.it:3514" - tag: "sprint-flows" - gelf-compression-type: "gzip" - gelf-compression-level: "3" + driver: "gelf" + options: + gelf-address: "udp://log.cedrc.cnr.it:3514" + tag: "sprint-flows" + gelf-compression-type: "gzip" + gelf-compression-level: "3" \ No newline at end of file diff --git a/src/main/docker/demo-cnr/docker-compose.yml b/src/main/docker/demo-cnr/docker-compose.yml index b782c8901..940b3559a 100644 --- a/src/main/docker/demo-cnr/docker-compose.yml +++ b/src/main/docker/demo-cnr/docker-compose.yml @@ -10,6 +10,9 @@ services: - SPRING_DATASOURCE_URL=jdbc:postgresql://postgresql:5432/flows - SPRING_DATASOURCE_USERNAME=activiti - SPRING_DATASOURCE_PASSWORD=activitipw + - SPRING_CLOUD_CONFIG_SERVER_GIT_URI=http://git.si.cnr.it/devops/configuration-repo.git + - SPRING_CLOUD_CONFIG_SERVER_GIT_USERNAME=flows + - SPRING_CLOUD_CONFIG_SERVER_GIT_PASSWORD=CONFIG_REPO_TOKEN - JHIPSTER_SLEEP=10 # gives time for the database to boot before the application ports: - 9200:8080 diff --git a/src/main/docker/demo-oiv/docker-compose.yml b/src/main/docker/demo-oiv/docker-compose.yml index 766396a5d..ba614bc67 100644 --- a/src/main/docker/demo-oiv/docker-compose.yml +++ b/src/main/docker/demo-oiv/docker-compose.yml @@ -11,6 +11,9 @@ services: - SPRING_DATASOURCE_URL=jdbc:postgresql://postgresql:5432/flows - SPRING_DATASOURCE_USERNAME=activiti - SPRING_DATASOURCE_PASSWORD=activitipw +# - SPRING_CLOUD_CONFIG_SERVER_GIT_URI=http://git.si.cnr.it/devops/configuration-repo.git +# - SPRING_CLOUD_CONFIG_SERVER_GIT_USERNAME=flows +# - SPRING_CLOUD_CONFIG_SERVER_GIT_PASSWORD=CONFIG_REPO_TOKEN - JHIPSTER_SLEEP=10 # gives time for the database to boot before the application ports: - "9201:8080" diff --git a/src/main/docker/dev/docker-compose.yml b/src/main/docker/dev/docker-compose.yml index 35dbc0c30..6182d0986 100644 --- a/src/main/docker/dev/docker-compose.yml +++ b/src/main/docker/dev/docker-compose.yml @@ -22,6 +22,9 @@ services: - CACHE_HAZELCAST_OUTBOUNDPORT=1486 - CACHE_HAZELCAST_MEMBERS=150.146.40.97:1485,150.146.40.97:1585 - CACHE_HAZELCAST_MANCENTER=http://150.146.40.97:1483/mancenter + - SPRING_CLOUD_CONFIG_SERVER_GIT_URI=http://git.si.cnr.it/devops/configuration-repo.git + - SPRING_CLOUD_CONFIG_SERVER_GIT_USERNAME=flows + - SPRING_CLOUD_CONFIG_SERVER_GIT_PASSWORD=CONFIG_REPO_TOKEN ports: - 1481:8080 - 1485:1485 diff --git a/src/main/docker/test/app-con-mancenter.yml b/src/main/docker/test/app-con-mancenter.yml index 61421ba55..dbeaf29ee 100644 --- a/src/main/docker/test/app-con-mancenter.yml +++ b/src/main/docker/test/app-con-mancenter.yml @@ -20,6 +20,9 @@ services: - JHIPSTER_SLEEP=10 # gives time for the database to boot before the application - CACHE_HAZELCAST_PUBLICIP=150.146.206.150 - CACHE_HAZELCAST_MEMBERS=150.146.206.150:1485,150.146.206.152:1485 + - SPRING_CLOUD_CONFIG_SERVER_GIT_URI=http://git.si.cnr.it/devops/configuration-repo.git + - SPRING_CLOUD_CONFIG_SERVER_GIT_USERNAME=flows + - SPRING_CLOUD_CONFIG_SERVER_GIT_PASSWORD=CONFIG_REPO_TOKEN ports: - 1481:8080 - 1485:1485 diff --git a/src/main/docker/test/app-senza-mancenter.yml b/src/main/docker/test/app-senza-mancenter.yml index 80de12b67..9aaad13e2 100644 --- a/src/main/docker/test/app-senza-mancenter.yml +++ b/src/main/docker/test/app-senza-mancenter.yml @@ -17,6 +17,9 @@ services: - JHIPSTER_SLEEP=10 # gives time for the database to boot before the application - CACHE_HAZELCAST_PUBLICIP=150.146.206.152 - CACHE_HAZELCAST_MEMBERS=150.146.206.150:1485,150.146.206.152:1485 + - SPRING_CLOUD_CONFIG_SERVER_GIT_URI=http://git.si.cnr.it/devops/configuration-repo.git + - SPRING_CLOUD_CONFIG_SERVER_GIT_USERNAME=flows + - SPRING_CLOUD_CONFIG_SERVER_GIT_PASSWORD=CONFIG_REPO_TOKEN ports: - 1481:8080 - 1485:1485 diff --git a/src/main/java/it/cnr/si/FlowsApp.java b/src/main/java/it/cnr/si/FlowsApp.java index 6c3030504..77f5d9fbb 100644 --- a/src/main/java/it/cnr/si/FlowsApp.java +++ b/src/main/java/it/cnr/si/FlowsApp.java @@ -75,7 +75,7 @@ public void initApplication() { .filter(p -> p.equals("cnr") || p.equals("oiv") || p.equals("showcase")) .count(); if (profiles != 1) { - log.error("Selezionare esattamente un profilo tra 'cnr' e 'oiv'"); + log.error("Selezionare esattamente un profilo tra 'cnr', 'oiv' e 'showcase'"); System.exit(1); } } @@ -94,9 +94,9 @@ public static void main(String[] args) throws UnknownHostException { Environment env = appContext.getEnvironment(); log.info("\n----------------------------------------------------------\n\t" + - "Application '{}' is running! Access URLs:\n\t" + - "Local: \t\thttp://127.0.0.1:{}\n\t" + - "External: \thttp://{}:{}\n----------------------------------------------------------", + "Application '{}' is running! Access URLs:\n\t" + + "Local: \t\thttp://127.0.0.1:{}\n\t" + + "External: \thttp://{}:{}\n----------------------------------------------------------", env.getProperty("spring.application.name"), env.getProperty("server.port"), InetAddress.getLocalHost().getHostAddress(), diff --git a/src/main/java/it/cnr/si/config/EventScheduler.java b/src/main/java/it/cnr/si/config/EventScheduler.java new file mode 100644 index 000000000..ecb4ba27c --- /dev/null +++ b/src/main/java/it/cnr/si/config/EventScheduler.java @@ -0,0 +1,55 @@ +package it.cnr.si.config; + +import com.hazelcast.core.HazelcastInstance; +import com.hazelcast.core.Member; +import it.cnr.si.service.ExternalMessageService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Profile; +import org.springframework.scheduling.annotation.EnableScheduling; +import org.springframework.scheduling.annotation.Scheduled; + +import javax.inject.Inject; + +@Profile("!test") +@EnableScheduling +@Configuration +public class EventScheduler { + + private final Logger log = LoggerFactory.getLogger(EventScheduler.class); + + @Inject + private ExternalMessageService externalMessageService; + @Inject + private HazelcastInstance hazelcastInstance; + @Inject + private ExternalMessageSender externalMessageSender; + + @Scheduled(fixedDelay = 600000, initialDelay = 10000) // 10m + public void scheduledSendMessages() { + + // Soltanto un nodo dovrebbe effettuare l'invio degli ExternalMessage + // Verifico che il nodo corrente sia il master del cluster + // prendendo il primo dei member e confrontando se e' il member corrente + // https://github.com/hazelcast/hazelcast/issues/3760#issuecomment-57928166 + Member master = hazelcastInstance.getCluster().getMembers().iterator().next(); + if (master == hazelcastInstance.getCluster().getLocalMember()) { + externalMessageSender.sendMessages(); + } else { + log.debug("Non sono il master, non processo le rest ExternalMessage"); + } + } + + @Scheduled(fixedDelay = 21600000, initialDelay = 60000) // 6h + public void scheduledSendErrorMessages() { + + Member master = hazelcastInstance.getCluster().getMembers().iterator().next(); + if (master == hazelcastInstance.getCluster().getLocalMember()) { + externalMessageSender.sendErrorMessages(); + } else { + log.debug("Non sono il master, non processo le rest ExternalMessage in errore"); + } + } + +} diff --git a/src/main/java/it/cnr/si/config/ExternalMessageSender.java b/src/main/java/it/cnr/si/config/ExternalMessageSender.java index d00741e37..fd236fd2b 100644 --- a/src/main/java/it/cnr/si/config/ExternalMessageSender.java +++ b/src/main/java/it/cnr/si/config/ExternalMessageSender.java @@ -19,6 +19,7 @@ import org.springframework.http.client.ClientHttpResponse; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Service; import org.springframework.util.MultiValueMap; import org.springframework.web.client.RestTemplate; @@ -107,6 +108,7 @@ public void sendErrorMessagesDo() { } private void send(ExternalMessage msg) { + // TODO refactor : il metodo send dovrebbe sendare, non sendare-e-salvare log.debug("Tentativo della rest {}", msg); diff --git a/src/main/java/it/cnr/si/config/SecurityConfigurationLDAP.java b/src/main/java/it/cnr/si/config/SecurityConfigurationLDAP.java index d28a2e4d8..4e3131aa8 100644 --- a/src/main/java/it/cnr/si/config/SecurityConfigurationLDAP.java +++ b/src/main/java/it/cnr/si/config/SecurityConfigurationLDAP.java @@ -47,7 +47,7 @@ public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception String url = propertyResolver.getProperty("url"); if (propertyResolver != null && url != null) { log.info("ldap server: " + url); - + auth.ldapAuthentication() .userDetailsContextMapper(userDetailsContextMapper) .ldapAuthoritiesPopulator(authPopulator) diff --git a/src/main/java/it/cnr/si/domain/Draft.java b/src/main/java/it/cnr/si/domain/Draft.java new file mode 100644 index 000000000..98659aa8f --- /dev/null +++ b/src/main/java/it/cnr/si/domain/Draft.java @@ -0,0 +1,108 @@ +package it.cnr.si.domain; + +import org.hibernate.annotations.Cache; +import org.hibernate.annotations.CacheConcurrencyStrategy; + +import javax.persistence.*; +import javax.validation.constraints.NotNull; +import java.io.Serializable; +import java.util.Objects; + +/** + * A Faq. + */ +@Entity +@Table(name = "draft") +@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) +public class Draft implements Serializable { + + private static final long serialVersionUID = 1L; + + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + private Long id; + + @NotNull + @Column(name = "task_id", nullable = false) + private Long taskId; + + @NotNull + @Column(name = "json", nullable = false) + private String json; + + @Column(name = "username") + private String username; + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + Draft draft = (Draft) o; + return Objects.equals(id, draft.id) && + Objects.equals(taskId, draft.taskId) && + Objects.equals(json, draft.json) && + Objects.equals(username, draft.username); + } + + @Override + public int hashCode() { + return Objects.hash(id, taskId, json); + } + + public static long getSerialVersionUID() { + return serialVersionUID; + } + + public void setId(Long id) { + this.id = id; + } + + public void setTaskId(Long taskId) { + this.taskId = taskId; + } + + public void setJson(String json) { + this.json = json; + } + + public void setUsername(String username) { + this.username = username; + } + + public Long getId() { + return id; + } + + public Long getTaskId() { + return taskId; + } + + public String getJson() { + return json; + } + + public String getUsername() { + return username; + } + + public Draft taskId(Long taskId) { + this.taskId = taskId; + return this; + } + + public Draft json(String json) { + this.json = json; + return this; + } + + + @Override + public String toString() { + return "Draft{" + + "id=" + id + + ", taskId=" + taskId + + ", json='" + json + '\'' + + ", username='" + username + '\'' + + '}'; + } +} diff --git a/src/main/java/it/cnr/si/flows/ng/config/FlowsListenersConfiguration.java b/src/main/java/it/cnr/si/flows/ng/config/FlowsListenersConfiguration.java index 5a6cc009b..9f43fd8f6 100644 --- a/src/main/java/it/cnr/si/flows/ng/config/FlowsListenersConfiguration.java +++ b/src/main/java/it/cnr/si/flows/ng/config/FlowsListenersConfiguration.java @@ -30,82 +30,82 @@ @AutoConfigureAfter(FlowsProcessEngineConfigurations.class) public class FlowsListenersConfiguration { - private static final Logger LOGGER = LoggerFactory.getLogger(FlowsListenersConfiguration.class); - @Inject - private ApplicationContext appContext; - @Inject - private RepositoryService repositoryService; - @Inject - private RuntimeService runtimeService; - @Inject - private Environment env; - - @PostConstruct - public void init() throws IOException { - createDeployments(); - addGlobalListeners(); - } - - private void createDeployments() throws IOException { - - Collection activeProfiles = Arrays.asList(env.getActiveProfiles()); - if (activeProfiles.contains("dev") || activeProfiles.contains("test")) { - - String dir = null; - if (activeProfiles.contains("cnr")) - dir = "cnr"; - else if (activeProfiles.contains("oiv")) - dir = "oiv"; - else if (activeProfiles.contains("showcase")) - dir = "showcase"; - else - System.exit(1); - - for (Resource resource : appContext.getResources("classpath:processes/" + dir + "/*.bpmn*")) { - LOGGER.info("\n ------- definition {}", resource.getFilename()); - List processes = repositoryService.createProcessDefinitionQuery() - .processDefinitionKey(resource.getFilename().split("[.]")[0]) - .list(); - - if (processes.size() == 0) { - DeploymentBuilder builder = repositoryService.createDeployment(); - builder.addInputStream(resource.getFilename(), resource.getInputStream()); - builder.deploy(); - } - } - } - } - - /** - * ATTENZIONE: L'ordine dei listener e' importante - */ - private void addGlobalListeners() { - LOGGER.info("Adding Flows Listeners"); - - SaveSummaryAtProcessCompletion processEndListener = (SaveSummaryAtProcessCompletion) - appContext.getAutowireCapableBeanFactory().createBean(SaveSummaryAtProcessCompletion.class, - AutowireCapableBeanFactory.AUTOWIRE_BY_TYPE, true); - SetStato beanSetStato = (SetStato) appContext.getAutowireCapableBeanFactory() - .createBean(SetStato.class, AutowireCapableBeanFactory.AUTOWIRE_BY_TYPE, true); - MailNotificationListener mailSender = (MailNotificationListener) - appContext.getAutowireCapableBeanFactory().createBean(MailNotificationListener.class, - AutowireCapableBeanFactory.AUTOWIRE_BY_TYPE, true); - VisibilitySetter visibilitySetter = (VisibilitySetter) - appContext.getAutowireCapableBeanFactory().createBean(VisibilitySetter.class, - AutowireCapableBeanFactory.AUTOWIRE_BY_TYPE, true); - - AddFlowsAttachmentsListener addAttachments = (AddFlowsAttachmentsListener) - appContext.getAutowireCapableBeanFactory().createBean(AddFlowsAttachmentsListener.class, - AutowireCapableBeanFactory.AUTOWIRE_BY_TYPE, true); - - //quando viene "iniziato un task" e quando viene svolta una qualsiasi attività (serve per la "fine della Process Instance) - runtimeService.addEventListener(mailSender); - runtimeService.addEventListener(visibilitySetter); - runtimeService.addEventListener(addAttachments, PROCESS_STARTED, TASK_COMPLETED); - runtimeService.addEventListener(processEndListener, PROCESS_COMPLETED); - runtimeService.addEventListener(beanSetStato, TASK_CREATED, HISTORIC_ACTIVITY_INSTANCE_ENDED); - - - - } + private static final Logger LOGGER = LoggerFactory.getLogger(FlowsListenersConfiguration.class); + @Inject + private ApplicationContext appContext; + @Inject + private RepositoryService repositoryService; + @Inject + private RuntimeService runtimeService; + @Inject + private Environment env; + + @PostConstruct + public void init() throws IOException { + createDeployments(); + addGlobalListeners(); + } + + private void createDeployments() throws IOException { + + Collection activeProfiles = Arrays.asList(env.getActiveProfiles()); + if (activeProfiles.contains("dev") || activeProfiles.contains("unittests")) { + + String dir = null; + if (activeProfiles.contains("cnr")) + dir = "cnr"; + else if (activeProfiles.contains("oiv")) + dir = "oiv"; + else if (activeProfiles.contains("showcase")) + dir = "showcase"; + else + System.exit(1); + + for (Resource resource : appContext.getResources("classpath:processes/" + dir + "/*.bpmn*")) { + LOGGER.info("\n ------- definition {}", resource.getFilename()); + List processes = repositoryService.createProcessDefinitionQuery() + .processDefinitionKey(resource.getFilename().split("[.]")[0]) + .list(); + + if (processes.size() == 0) { + DeploymentBuilder builder = repositoryService.createDeployment(); + builder.addInputStream(resource.getFilename(), resource.getInputStream()); + builder.deploy(); + } + } + } + } + + /** + * ATTENZIONE: L'ordine dei listener e' importante + */ + private void addGlobalListeners() { + LOGGER.info("Adding Flows Listeners"); + + SaveSummaryAtProcessCompletion processEndListener = (SaveSummaryAtProcessCompletion) + appContext.getAutowireCapableBeanFactory().createBean(SaveSummaryAtProcessCompletion.class, + AutowireCapableBeanFactory.AUTOWIRE_BY_TYPE, true); + SetStato beanSetStato = (SetStato) appContext.getAutowireCapableBeanFactory() + .createBean(SetStato.class, AutowireCapableBeanFactory.AUTOWIRE_BY_TYPE, true); + MailNotificationListener mailSender = (MailNotificationListener) + appContext.getAutowireCapableBeanFactory().createBean(MailNotificationListener.class, + AutowireCapableBeanFactory.AUTOWIRE_BY_TYPE, true); + VisibilitySetter visibilitySetter = (VisibilitySetter) + appContext.getAutowireCapableBeanFactory().createBean(VisibilitySetter.class, + AutowireCapableBeanFactory.AUTOWIRE_BY_TYPE, true); + + AddFlowsAttachmentsListener addAttachments = (AddFlowsAttachmentsListener) + appContext.getAutowireCapableBeanFactory().createBean(AddFlowsAttachmentsListener.class, + AutowireCapableBeanFactory.AUTOWIRE_BY_TYPE, true); + + //quando viene "iniziato un task" e quando viene svolta una qualsiasi attività (serve per la "fine della Process Instance) + runtimeService.addEventListener(mailSender); + runtimeService.addEventListener(visibilitySetter); + runtimeService.addEventListener(addAttachments, PROCESS_STARTED, TASK_COMPLETED); + runtimeService.addEventListener(processEndListener, PROCESS_COMPLETED); + runtimeService.addEventListener(beanSetStato, TASK_CREATED, HISTORIC_ACTIVITY_INSTANCE_ENDED); + + + + } } \ No newline at end of file diff --git a/src/main/java/it/cnr/si/flows/ng/config/LogPrologSettingFilter.java b/src/main/java/it/cnr/si/flows/ng/config/LogPrologSettingFilter.java new file mode 100644 index 000000000..4310af1dd --- /dev/null +++ b/src/main/java/it/cnr/si/flows/ng/config/LogPrologSettingFilter.java @@ -0,0 +1,27 @@ +package it.cnr.si.flows.ng.config; + +import it.cnr.si.flows.ng.utils.SecurityUtils; +import org.slf4j.MDC; +import org.springframework.web.filter.GenericFilterBean; + +import javax.servlet.FilterChain; +import javax.servlet.ServletException; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; +import java.io.IOException; + +public class LogPrologSettingFilter extends GenericFilterBean { + + @Override + public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { + try { + if (!SecurityUtils.getCurrentUserAuthorities().contains("PREVIOUS_ADMINISTRATOR")) + MDC.put("currentUser", SecurityUtils.getCurrentUserLogin()); + else + MDC.put("currentUser", "admin as " + SecurityUtils.getCurrentUserLogin()); + } catch (Exception e) { + MDC.put("currentUser", "undefined"); + } + chain.doFilter(request, response); + } +} diff --git a/src/main/java/it/cnr/si/flows/ng/config/SwitchUserSecurityConfiguration.java b/src/main/java/it/cnr/si/flows/ng/config/SwitchUserSecurityConfiguration.java index 596f3134f..0b9f4481d 100644 --- a/src/main/java/it/cnr/si/flows/ng/config/SwitchUserSecurityConfiguration.java +++ b/src/main/java/it/cnr/si/flows/ng/config/SwitchUserSecurityConfiguration.java @@ -48,9 +48,10 @@ protected void configure(HttpSecurity http) throws Exception { .antMatchers(IMPERSONATE_START_URL).hasRole("ADMIN") .antMatchers(IMPERSONATE_EXIT_URL).hasRole("PREVIOUS_ADMINISTRATOR") .and() - .addFilterAfter(switchUserFilter(), FilterSecurityInterceptor.class); + .addFilterAfter(switchUserFilter(), FilterSecurityInterceptor.class) + .addFilterAfter(logPrologSettingFilter(), OAuthCookieSwithUserFilter.class); } - + @Profile(value = {"cnr"}) @Bean public LdapUserDetailsManager getLdapUserDetailsManager(LdapContextSource ctx) { return new LdapUserDetailsManager(ctx); @@ -106,4 +107,9 @@ public SwitchUserFilter switchUserFilter() { filter.setTargetUrl("/"); return filter; } + + @Bean + public LogPrologSettingFilter logPrologSettingFilter() { + return new LogPrologSettingFilter(); + } } diff --git a/src/main/java/it/cnr/si/flows/ng/dto/TimerSettings.java b/src/main/java/it/cnr/si/flows/ng/dto/TimerSettings.java index 6d256d4a5..4b2e1ccd1 100644 --- a/src/main/java/it/cnr/si/flows/ng/dto/TimerSettings.java +++ b/src/main/java/it/cnr/si/flows/ng/dto/TimerSettings.java @@ -6,6 +6,7 @@ import javax.persistence.*; import javax.validation.constraints.*; import java.io.Serializable; +import java.util.Date; import java.util.Objects; /** @@ -17,11 +18,11 @@ public class TimerSettings implements Serializable { private static final long serialVersionUID = 1L; - + @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id; - + @NotNull @Column(name = "processInstanceId", nullable = false) private String processInstanceId; @@ -30,6 +31,10 @@ public class TimerSettings implements Serializable { @Column(name = "timerId", nullable = false) private String timerId; + @NotNull + @Column(name = "newDate", nullable = false) + private Date newDate; + @NotNull @Column(name = "yearAddValue", nullable = false) private int yearAddValue; @@ -37,11 +42,11 @@ public class TimerSettings implements Serializable { @NotNull @Column(name = "monthAddValue", nullable = false) private int monthAddValue; - + @NotNull @Column(name = "dayAddValue", nullable = false) private int dayAddValue; - + @NotNull @Column(name = "hourAddValue", nullable = false) private int hourAddValue; @@ -84,6 +89,21 @@ public void setTimerId(String timerId) { this.timerId = timerId; } + + public Date getNewDate() { + return newDate; + } + + public TimerSettings newDate(Date newDate) { + this.newDate = newDate; + return this; + } + + public void setNewDate(Date newDate) { + this.newDate = newDate; + + } + public int getYearAddValue() { return yearAddValue; } @@ -96,7 +116,7 @@ public TimerSettings yearAddValue(int yearAddValue) { public void setYearAddValue(int yearAddValue) { this.yearAddValue = yearAddValue; } - + public int getMonthAddValue() { return yearAddValue; @@ -154,16 +174,17 @@ public void setMinuteAddValue(int minuteAddValue) { public int hashCode() { return Objects.hashCode(id); } - + @Override public String toString() { return "timer{" + - ", processInstanceId='" + processInstanceId + "'" + - ", yearAddValue='" + yearAddValue + "'" + - ", monthAddValue='" + monthAddValue + "'" + - ", dayAddValue='" + dayAddValue + "'" + - ", hourAddValue='" + hourAddValue + "'" + - ", minuteAddValue='" + minuteAddValue + "'" + - '}'; + ", processInstanceId='" + processInstanceId + "'" + + ", yearAddValue='" + yearAddValue + "'" + + ", monthAddValue='" + monthAddValue + "'" + + ", dayAddValue='" + dayAddValue + "'" + + ", hourAddValue='" + hourAddValue + "'" + + ", minuteAddValue='" + minuteAddValue + "'" + + '}'; } + } diff --git a/src/main/java/it/cnr/si/flows/ng/ldap/FlowsAuthoritiesPopulator.java b/src/main/java/it/cnr/si/flows/ng/ldap/FlowsAuthoritiesPopulator.java index 6fcf48e27..1b5b5c80a 100644 --- a/src/main/java/it/cnr/si/flows/ng/ldap/FlowsAuthoritiesPopulator.java +++ b/src/main/java/it/cnr/si/flows/ng/ldap/FlowsAuthoritiesPopulator.java @@ -1,7 +1,7 @@ package it.cnr.si.flows.ng.ldap; import it.cnr.si.flows.ng.utils.Utils; -import it.cnr.si.service.RelationshipService; +import it.cnr.si.service.MembershipService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.context.annotation.Profile; @@ -28,10 +28,10 @@ public class FlowsAuthoritiesPopulator implements LdapAuthoritiesPopulator { private final Logger log = LoggerFactory.getLogger(FlowsAuthoritiesPopulator.class); - @Inject - private RelationshipService relationshipService; @Inject private Environment env; + @Inject + private MembershipService membershipService; @Override public Collection getGrantedAuthorities(DirContextOperations userData, String username) { @@ -49,7 +49,7 @@ public Collection getGrantedAuthorities(DirContextOperations u log.debug("no attribute {} defined for user {}", DEPARTMENT_NUMBER, username); } - List fullGrantedAuthorities = relationshipService.getAllGroupsForUser(username) + List fullGrantedAuthorities = membershipService.getAllGroupsForUser(username) .stream() .map(Utils::addLeadingRole) .map(SimpleGrantedAuthority::new) diff --git a/src/main/java/it/cnr/si/flows/ng/listeners/MailNotificationListener.java b/src/main/java/it/cnr/si/flows/ng/listeners/MailNotificationListener.java index 6d7fffa58..65fbc090c 100644 --- a/src/main/java/it/cnr/si/flows/ng/listeners/MailNotificationListener.java +++ b/src/main/java/it/cnr/si/flows/ng/listeners/MailNotificationListener.java @@ -29,229 +29,229 @@ @Component public class MailNotificationListener implements ActivitiEventListener { - private static final Logger LOGGER = LoggerFactory.getLogger(MailNotificationListener.class); - public static final List ACCEPTED_EVENTS = Arrays.asList( - ActivitiEventType.TASK_CREATED, - ActivitiEventType.TASK_ASSIGNED, - ActivitiEventType.TASK_COMPLETED, - ActivitiEventType.SEQUENCEFLOW_TAKEN, - ActivitiEventType.PROCESS_STARTED, - ActivitiEventType.PROCESS_COMPLETED, - ActivitiEventType.PROCESS_CANCELLED); - - @Inject - private FlowsMailService mailService; - @Inject - private RuntimeService runtimeService; - @Autowired(required = false) - private AceBridgeService aceBridgeService; - @Inject - private NotificationRuleRepository notificationService; - @Inject - private Environment env; - @Inject - private MembershipService membershipService; - @Inject - private FlowsProcessInstanceService flowsProcessInstanceService; - @Inject - private MailConfguration mailConfguration; - @Inject - private RelationshipService relationshipService; - - - @Override - public void onEvent(ActivitiEvent event) { - ActivitiEventType type = event.getType(); - - if (type == ActivitiEventType.TASK_CREATED ) - sendStandardCandidateNotification(event); - - if (ACCEPTED_EVENTS.contains(type) ) - sendRuleNotification(event); - } - - - private Map integrateVariables(ActivitiEvent event, Map variables) { - switch (event.getType()){ - case PROCESS_STARTED: - variables.put("stato", ((ExecutionEntity) ((ActivitiEntityWithVariablesEvent) event).getEntity()).getCurrentActivityName()); - break; - case SEQUENCEFLOW_TAKEN: - variables.put("stato", ((ActivitiSequenceFlowTakenEventImpl)event).getTargetActivityName()); - variables.put("processInstanceId", ((ActivitiSequenceFlowTakenEventImpl)event).getProcessInstanceId()); - break; - case TASK_COMPLETED: - case TASK_ASSIGNED: - case TASK_CREATED: - variables.put("stato", ((TaskEntity)((ActivitiEntityEvent)event).getEntity()).getName()); - variables.put("nextTaskId", ((TaskEntity)((ActivitiEntityEvent)event).getEntity()).getId()); - variables.put("processInstanceId", ((TaskEntity)((ActivitiEntityEvent)event).getEntity()).getProcessInstanceId()); - break; - case PROCESS_CANCELLED: - variables.put("stato", ((ActivitiEventType)event.getType()).name() + " - con causa: " + ((ActivitiProcessCancelledEventImpl) event).getCause()); - break; - case PROCESS_COMPLETED: - variables.put("stato", ((ExecutionEntity)((ActivitiEntityEventImpl) event).getEntity()).getActivity().getProperty("name")); - break; - } - - variables.put("serverUrl", mailConfguration.getMailUrl()); - - return variables; - } - - private Map sendStandardCandidateNotification(ActivitiEvent event) { - - String executionId = event.getExecutionId(); - Map variables = runtimeService.getVariables(executionId); - - //integro le variabili con quelle conservate nel name del processo - Map integratedVariables = integrateVariables(event, variables); - ActivitiEntityEvent taskEvent = (ActivitiEntityEvent) event; - TaskEntity task = (TaskEntity) taskEvent.getEntity(); - - Set candidates = ((TaskEntity)taskEvent.getEntity()).getCandidates(); - if (Arrays.asList(env.getActiveProfiles()).contains("cnr")) { - - if (Optional.ofNullable(aceBridgeService).isPresent()) { - candidates.forEach(c -> { - if (c.getGroupId() != null) { - Set members = relationshipService.getAllUsersInGroup(c.getGroupId()); - LOGGER.info("Sto inviando mail standard a {} del gruppo {} per il task", members, c.getGroupId(), task.getName()); - members.forEach(m -> { - mailService.sendFlowEventNotification(FlowsMailService.TASK_ASSEGNATO_AL_GRUPPO_HTML, integratedVariables, task.getName(), m, c.getGroupId()); - }); - } - }); - } - - } else { - - candidates.forEach(c -> { - if (c.getGroupId() != null) { - List members = membershipService.findMembersInGroup(c.getGroupId()); - members.forEach(m -> { - mailService.sendFlowEventNotification(FlowsMailService.TASK_ASSEGNATO_AL_GRUPPO_HTML, integratedVariables, task.getName(), m, c.getGroupId()); - }); - } - }); - - } - return integratedVariables; - } - - private void sendRuleNotification(ActivitiEvent event) { - - ActivitiEventType type = event.getType(); - String executionId = event.getExecutionId(); - - Map variables = runtimeService.getVariables(executionId); - - - //integro le variabili con quelle conservate nel name del processo - Map integratedVariables = integrateVariables(event, variables); - - // Notifiche personalizzate - List notificationRules; - - String processDefinitionId = event.getProcessDefinitionId(); - String processDefinitionKey = processDefinitionId.split(":")[0]; - - switch (type) { - case TASK_CREATED: - case TASK_ASSIGNED: - case TASK_COMPLETED: - ActivitiEntityEvent taskEvent = (ActivitiEntityEvent) event; - TaskEntity task = (TaskEntity) taskEvent.getEntity(); - notificationRules = notificationService.findGroupsByProcessIdEventTypeTaskName(processDefinitionKey, type.toString(), task.getTaskDefinitionKey()); - send(integratedVariables, notificationRules, FlowsMailService.TASK_NOTIFICATION, task.getName()); - break; - - case SEQUENCEFLOW_TAKEN: + private static final Logger LOGGER = LoggerFactory.getLogger(MailNotificationListener.class); + public static final List ACCEPTED_EVENTS = Arrays.asList( + ActivitiEventType.TASK_CREATED, + ActivitiEventType.TASK_ASSIGNED, + ActivitiEventType.TASK_COMPLETED, + ActivitiEventType.SEQUENCEFLOW_TAKEN, + ActivitiEventType.PROCESS_STARTED, + ActivitiEventType.PROCESS_COMPLETED, + ActivitiEventType.PROCESS_CANCELLED); + + @Inject + private FlowsMailService mailService; + @Inject + private RuntimeService runtimeService; + @Autowired(required = false) + private AceBridgeService aceBridgeService; + @Inject + private NotificationRuleRepository notificationService; + @Inject + private Environment env; + @Inject + private MembershipService membershipService; + @Inject + private FlowsProcessInstanceService flowsProcessInstanceService; + @Inject + private MailConfguration mailConfguration; + @Inject + private RelationshipService relationshipService; + + + @Override + public void onEvent(ActivitiEvent event) { + ActivitiEventType type = event.getType(); + + if (type == ActivitiEventType.TASK_CREATED ) + sendStandardCandidateNotification(event); + + if (ACCEPTED_EVENTS.contains(type) ) + sendRuleNotification(event); + } + + + private Map integrateVariables(ActivitiEvent event, Map variables) { + switch (event.getType()){ + case PROCESS_STARTED: + variables.put("stato", ((ExecutionEntity) ((ActivitiEntityWithVariablesEvent) event).getEntity()).getCurrentActivityName()); + break; + case SEQUENCEFLOW_TAKEN: + variables.put("stato", ((ActivitiSequenceFlowTakenEventImpl)event).getTargetActivityName()); + variables.put("processInstanceId", ((ActivitiSequenceFlowTakenEventImpl)event).getProcessInstanceId()); + break; + case TASK_COMPLETED: + case TASK_ASSIGNED: + case TASK_CREATED: + variables.put("stato", ((TaskEntity)((ActivitiEntityEvent)event).getEntity()).getName()); + variables.put("nextTaskId", ((TaskEntity)((ActivitiEntityEvent)event).getEntity()).getId()); + variables.put("processInstanceId", ((TaskEntity)((ActivitiEntityEvent)event).getEntity()).getProcessInstanceId()); + break; + case PROCESS_CANCELLED: + variables.put("stato", ((ActivitiEventType)event.getType()).name() + " - con causa: " + ((ActivitiProcessCancelledEventImpl) event).getCause()); + break; + case PROCESS_COMPLETED: + variables.put("stato", ((ExecutionEntity)((ActivitiEntityEventImpl) event).getEntity()).getActivity().getProperty("name")); + break; + } + + variables.put("serverUrl", mailConfguration.getMailUrl()); + + return variables; + } + + private Map sendStandardCandidateNotification(ActivitiEvent event) { + + String executionId = event.getExecutionId(); + Map variables = runtimeService.getVariables(executionId); + + //integro le variabili con quelle conservate nel name del processo + Map integratedVariables = integrateVariables(event, variables); + ActivitiEntityEvent taskEvent = (ActivitiEntityEvent) event; + TaskEntity task = (TaskEntity) taskEvent.getEntity(); + + Set candidates = ((TaskEntity)taskEvent.getEntity()).getCandidates(); + if (Arrays.asList(env.getActiveProfiles()).contains("cnr")) { + + if (Optional.ofNullable(aceBridgeService).isPresent()) { + candidates.forEach(c -> { + if (c.getGroupId() != null) { + Set members = membershipService.getAllUsersInGroup(c.getGroupId()); + LOGGER.info("Sto inviando mail standard a {} del gruppo {} per il task", members, c.getGroupId(), task.getName()); + members.forEach(m -> { + mailService.sendFlowEventNotification(FlowsMailService.TASK_ASSEGNATO_AL_GRUPPO_HTML, integratedVariables, task.getName(), m, c.getGroupId()); + }); + } + }); + } + + } else { + + candidates.forEach(c -> { + if (c.getGroupId() != null) { + Set members = membershipService.getAllUsersInGroup(c.getGroupId()); + members.forEach(m -> { + mailService.sendFlowEventNotification(FlowsMailService.TASK_ASSEGNATO_AL_GRUPPO_HTML, integratedVariables, task.getName(), m, c.getGroupId()); + }); + } + }); + + } + return integratedVariables; + } + + private void sendRuleNotification(ActivitiEvent event) { + + ActivitiEventType type = event.getType(); + String executionId = event.getExecutionId(); + + Map variables = runtimeService.getVariables(executionId); + + + //integro le variabili con quelle conservate nel name del processo + Map integratedVariables = integrateVariables(event, variables); + + // Notifiche personalizzate + List notificationRules; + + String processDefinitionId = event.getProcessDefinitionId(); + String processDefinitionKey = processDefinitionId.split(":")[0]; + + switch (type) { + case TASK_CREATED: + case TASK_ASSIGNED: + case TASK_COMPLETED: + ActivitiEntityEvent taskEvent = (ActivitiEntityEvent) event; + TaskEntity task = (TaskEntity) taskEvent.getEntity(); + notificationRules = notificationService.findGroupsByProcessIdEventTypeTaskName(processDefinitionKey, type.toString(), task.getTaskDefinitionKey()); + send(integratedVariables, notificationRules, FlowsMailService.TASK_NOTIFICATION, task.getName()); + break; + + case SEQUENCEFLOW_TAKEN: ActivitiSequenceFlowTakenEvent seqTaken = (ActivitiSequenceFlowTakenEvent) event; - notificationRules = notificationService.findGroupsByProcessIdEventTypeTaskName(processDefinitionKey, type.toString(), seqTaken.getId()); - send(integratedVariables, notificationRules, FlowsMailService.FLOW_NOTIFICATION, null); - break; - - case PROCESS_STARTED: - case PROCESS_COMPLETED: - case PROCESS_CANCELLED: - notificationRules = notificationService.findGroupsByProcessIdEventType(processDefinitionKey, type.toString()); - send(integratedVariables, notificationRules, FlowsMailService.PROCESS_NOTIFICATION, null); - break; - - default: - // no action - break; - } - - } - - /** - * Per ogni notification rule invia delle mail - * Se la notification rule e' riferita a una persona, manda la mail alla persona contenuta nella variabile recipients - * Se la notification rule e' riferita a un gruppo, manda la mail alle persone member dei gruppi contenti nella variabile recipients - * @param variables - * @param notificationRules - * @param nt - * @param tn - */ - private void send(Map variables, List notificationRules, String nt, String tn) { - - LOGGER.info("Sto inviando secondo le notification rule :{} ({}, {})", notificationRules, nt, tn); - notificationRules.stream() - .forEach(rule -> { - LOGGER.debug("rule.getRecipients(): {}", rule.getRecipients()); - - if (rule.isPersona()) { - Stream.of(rule.getRecipients().split(",")) - .map(s -> s.trim()) - .forEach(personVariableName -> { - LOGGER.debug("personVariableName: {}", personVariableName); - String person = (String) personVariableName; - LOGGER.debug("Invio la mail {} all'utente {}", nt, person); - mailService.sendFlowEventNotification(nt, variables, tn, person, null); - }); - } else { - if (Arrays.asList(env.getActiveProfiles()).contains("cnr")) { - - if (Optional.ofNullable(aceBridgeService).isPresent()) { - Stream.of(rule.getRecipients().split(",")) - .map(s -> s.trim()) - .forEach(groupVariableName -> { - LOGGER.debug("variables.get(groupVariableName): {}", variables.get(groupVariableName)); - String groupName = (String) variables.get(groupVariableName); - - Set members = relationshipService.getAllUsersInGroup(groupName); - - LOGGER.debug("Invio la mail {} al gruppo {} con utenti {}", nt, groupName, members); - members.forEach(member -> { - mailService.sendFlowEventNotification(nt, variables, tn, member, groupName); - }); - }); - } - } else { - Stream.of(rule.getRecipients().split(",")) - .map(s -> s.trim()) - .forEach(groupVariableName -> { - LOGGER.debug("groupVariableName: {}", groupVariableName); - String groupName = (String) groupVariableName; - List members = membershipService.findMembersInGroup(groupName); - LOGGER.debug("Invio la mail {} al gruppo {} con utenti {}", nt, groupName, members); - members.forEach(member -> { - mailService.sendFlowEventNotification(nt, variables, tn, member, groupName); - }); - }); - } - - } - }); - } - - - @Override - public boolean isFailOnException() { - // TODO Auto-generated method stub - return false; - } + notificationRules = notificationService.findGroupsByProcessIdEventTypeTaskName(processDefinitionKey, type.toString(), seqTaken.getId()); + send(integratedVariables, notificationRules, FlowsMailService.FLOW_NOTIFICATION, null); + break; + + case PROCESS_STARTED: + case PROCESS_COMPLETED: + case PROCESS_CANCELLED: + notificationRules = notificationService.findGroupsByProcessIdEventType(processDefinitionKey, type.toString()); + send(integratedVariables, notificationRules, FlowsMailService.PROCESS_NOTIFICATION, null); + break; + + default: + // no action + break; + } + + } + + /** + * Per ogni notification rule invia delle mail + * Se la notification rule e' riferita a una persona, manda la mail alla persona contenuta nella variabile recipients + * Se la notification rule e' riferita a un gruppo, manda la mail alle persone member dei gruppi contenti nella variabile recipients + * @param variables + * @param notificationRules + * @param nt + * @param tn + */ + private void send(Map variables, List notificationRules, String nt, String tn) { + + LOGGER.info("Sto inviando secondo le notification rule :{} ({}, {})", notificationRules, nt, tn); + notificationRules.stream() + .forEach(rule -> { + LOGGER.debug("rule.getRecipients(): {}", rule.getRecipients()); + + if (rule.isPersona()) { + Stream.of(rule.getRecipients().split(",")) + .map(s -> s.trim()) + .forEach(personVariableName -> { + LOGGER.debug("personVariableName: {}", personVariableName); + String person = (String) personVariableName; + LOGGER.debug("Invio la mail {} all'utente {}", nt, person); + mailService.sendFlowEventNotification(nt, variables, tn, person, null); + }); + } else { + if (Arrays.asList(env.getActiveProfiles()).contains("cnr")) { + + if (Optional.ofNullable(aceBridgeService).isPresent()) { + Stream.of(rule.getRecipients().split(",")) + .map(s -> s.trim()) + .forEach(groupVariableName -> { + LOGGER.debug("variables.get(groupVariableName): {}", variables.get(groupVariableName)); + String groupName = (String) variables.get(groupVariableName); + + Set members = membershipService.getAllUsersInGroup(groupName); + + LOGGER.debug("Invio la mail {} al gruppo {} con utenti {}", nt, groupName, members); + members.forEach(member -> { + mailService.sendFlowEventNotification(nt, variables, tn, member, groupName); + }); + }); + } + } else { + Stream.of(rule.getRecipients().split(",")) + .map(s -> s.trim()) + .forEach(groupVariableName -> { + LOGGER.debug("groupVariableName: {}", groupVariableName); + String groupName = (String) groupVariableName; + Set members = membershipService.getAllUsersInGroup(groupName); + LOGGER.debug("Invio la mail {} al gruppo {} con utenti {}", nt, groupName, members); + members.forEach(member -> { + mailService.sendFlowEventNotification(nt, variables, tn, member, groupName); + }); + }); + } + + } + }); + } + + + @Override + public boolean isFailOnException() { + // TODO Auto-generated method stub + return false; + } } diff --git a/src/main/java/it/cnr/si/flows/ng/listeners/SaveSummaryAtProcessCompletion.java b/src/main/java/it/cnr/si/flows/ng/listeners/SaveSummaryAtProcessCompletion.java index e5c4913a3..2a67cd4f3 100644 --- a/src/main/java/it/cnr/si/flows/ng/listeners/SaveSummaryAtProcessCompletion.java +++ b/src/main/java/it/cnr/si/flows/ng/listeners/SaveSummaryAtProcessCompletion.java @@ -56,6 +56,7 @@ public void onEvent(ActivitiEvent event) { pdfToDB.setName(fileName); pdfToDB.setFilename(fileName); pdfToDB.setMimetype(MediaType.PDF.toString()); + pdfToDB.setPath((String) runtimeService.getVariable(event.getExecutionId(), "pathFascicoloDocumenti")); attachmentService.saveAttachmentFuoriTask( event.getExecutionId(), fileName, pdfToDB, outputStream.toByteArray()); } diff --git a/src/main/java/it/cnr/si/flows/ng/listeners/SostituisciDocumentoListener.java b/src/main/java/it/cnr/si/flows/ng/listeners/SostituisciDocumentoListener.java index 14c7c9182..69ccfe865 100644 --- a/src/main/java/it/cnr/si/flows/ng/listeners/SostituisciDocumentoListener.java +++ b/src/main/java/it/cnr/si/flows/ng/listeners/SostituisciDocumentoListener.java @@ -1,55 +1,55 @@ -package it.cnr.si.flows.ng.listeners; - -import it.cnr.si.flows.ng.dto.FlowsAttachment; -import it.cnr.si.flows.ng.service.FlowsAttachmentService; -import org.activiti.engine.delegate.DelegateExecution; -import org.activiti.engine.delegate.ExecutionListener; -import org.activiti.engine.delegate.Expression; -import org.apache.commons.lang3.SerializationUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.stereotype.Component; - -import javax.inject.Inject; - -import static it.cnr.si.flows.ng.utils.Enum.Azione.Sostituzione; -import static it.cnr.si.flows.ng.utils.Enum.Stato.Sostituito; - - -@Component -public class SostituisciDocumentoListener implements ExecutionListener { - - private static final long serialVersionUID = -56001764662303256L; - - private static final Logger LOGGER = LoggerFactory.getLogger(SostituisciDocumentoListener.class); - - private Expression nomeFileDaSostituire; - - @Inject - private FlowsAttachmentService attachmentService; - - @Override - public void notify(DelegateExecution execution) throws Exception { - if (!execution.getEventName().equals(ExecutionListener.EVENTNAME_TAKE)) - throw new IllegalStateException("Questo Listener accetta solo eventi 'take'."); - if (nomeFileDaSostituire.getValue(execution) == null) - throw new IllegalStateException("Questo Listener ha bisogno del campo 'nomeFileDaSostituire' nella process definition (nel Task Listener - Fields)."); - - String nomeVariabileFile = (String) nomeFileDaSostituire.getValue(execution); - - FlowsAttachment originale = (FlowsAttachment) execution.getVariable(nomeVariabileFile); - FlowsAttachment copia = SerializationUtils.clone(originale); - - LOGGER.debug("Ricarico il file {} originale, ma con gli stati puliti", nomeVariabileFile); - originale.clearStato(); - originale.setAzione(Sostituzione); - attachmentService.saveAttachment(execution, nomeVariabileFile, originale, null); - - LOGGER.debug("Salvo una copia per futuro riferimento"); - copia.setAzione(Sostituzione); - copia.addStato(Sostituito); - copia.setName("Provvedimento di Aggiudicazione Sostiutito"); - // TODO il nome "provvedimentiRespinti" dovrebbe sempre essere un Expression - attachmentService.saveAttachmentInArray(execution, "provvedimentiRespinti", copia); - } -} +package it.cnr.si.flows.ng.listeners; + +import it.cnr.si.flows.ng.dto.FlowsAttachment; +import it.cnr.si.flows.ng.service.FlowsAttachmentService; +import org.activiti.engine.delegate.DelegateExecution; +import org.activiti.engine.delegate.ExecutionListener; +import org.activiti.engine.delegate.Expression; +import org.apache.commons.lang3.SerializationUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +import javax.inject.Inject; + +import static it.cnr.si.flows.ng.utils.Enum.Azione.Sostituzione; +import static it.cnr.si.flows.ng.utils.Enum.Stato.Sostituito; + + +@Component +public class SostituisciDocumentoListener implements ExecutionListener { + + private static final long serialVersionUID = -56001764662303256L; + + private static final Logger LOGGER = LoggerFactory.getLogger(SostituisciDocumentoListener.class); + + private Expression nomeFileDaSostituire; + + @Inject + private FlowsAttachmentService attachmentService; + + @Override + public void notify(DelegateExecution execution) throws Exception { + if (!execution.getEventName().equals(ExecutionListener.EVENTNAME_TAKE)) + throw new IllegalStateException("Questo Listener accetta solo eventi 'take'."); + if (nomeFileDaSostituire.getValue(execution) == null) + throw new IllegalStateException("Questo Listener ha bisogno del campo 'nomeFileDaSostituire' nella process definition (nel Task Listener - Fields)."); + + String nomeVariabileFile = (String) nomeFileDaSostituire.getValue(execution); + + FlowsAttachment originale = (FlowsAttachment) execution.getVariable(nomeVariabileFile); + FlowsAttachment copia = SerializationUtils.clone(originale); + + LOGGER.debug("Ricarico il file {} originale, ma con gli stati puliti", nomeVariabileFile); + originale.clearStato(); + originale.setAzione(Sostituzione); + attachmentService.saveAttachment(execution, nomeVariabileFile, originale, null); + + LOGGER.debug("Salvo una copia per futuro riferimento"); + copia.setAzione(Sostituzione); + copia.addStato(Sostituito); + copia.setName("Provvedimento di Aggiudicazione Sostiutito"); + // TODO il nome "provvedimentiRespinti" dovrebbe sempre essere un Expression + attachmentService.saveAttachmentInArray(execution, "provvedimentiRespinti", copia); + } +} diff --git a/src/main/java/it/cnr/si/flows/ng/listeners/VisibilitySetter.java b/src/main/java/it/cnr/si/flows/ng/listeners/VisibilitySetter.java index 60d5ded61..4b77db865 100644 --- a/src/main/java/it/cnr/si/flows/ng/listeners/VisibilitySetter.java +++ b/src/main/java/it/cnr/si/flows/ng/listeners/VisibilitySetter.java @@ -25,96 +25,96 @@ public class VisibilitySetter implements ActivitiEventListener { - @SuppressWarnings("unused") - private final Logger log = LoggerFactory.getLogger(VisibilitySetter.class); + @SuppressWarnings("unused") + private final Logger log = LoggerFactory.getLogger(VisibilitySetter.class); - @Inject - private TaskService taskService; - @Inject - private RuntimeService runtimeService; + @Inject + private TaskService taskService; + @Inject + private RuntimeService runtimeService; - @Override - public void onEvent(ActivitiEvent event) { - if (event.getType().equals(ActivitiEventType.TASK_CREATED)) { + @Override + public void onEvent(ActivitiEvent event) { + if (event.getType().equals(ActivitiEventType.TASK_CREATED)) { - ActivitiEntityEventImpl taskEvent = (ActivitiEntityEventImpl) event; - TaskEntity task = (TaskEntity) taskEvent.getEntity(); + ActivitiEntityEventImpl taskEvent = (ActivitiEntityEventImpl) event; + TaskEntity task = (TaskEntity) taskEvent.getEntity(); - String processInstanceId = event.getProcessInstanceId(); + String processInstanceId = event.getProcessInstanceId(); - String processDefinitionId = task.getProcessDefinitionId(); - String currentTaskKey = task.getTaskDefinitionKey(); + String processDefinitionId = task.getProcessDefinitionId(); + String currentTaskKey = task.getTaskDefinitionKey(); - setDefaultVisibilityRules(task.getId(), processInstanceId); - setAdditionalVisibilityRules(event, processInstanceId, processDefinitionId, currentTaskKey); + setDefaultVisibilityRules(task.getId(), processInstanceId); + setAdditionalVisibilityRules(event, processInstanceId, processDefinitionId, currentTaskKey); - } else if (event.getType().equals(ActivitiEventType.PROCESS_STARTED)) { + } else if (event.getType().equals(ActivitiEventType.PROCESS_STARTED)) { - Map variables = runtimeService.getVariables(event.getExecutionId()); - String processInstanceId = event.getProcessInstanceId(); + Map variables = runtimeService.getVariables(event.getExecutionId()); + String processInstanceId = event.getProcessInstanceId(); - runtimeService.addUserIdentityLink(processInstanceId, variables.get("initiator").toString(), Utils.PROCESS_VISUALIZER); - runtimeService.addGroupIdentityLink(processInstanceId, "supervisore#flussi@" + CNR_CODE, Utils.PROCESS_VISUALIZER); - runtimeService.addGroupIdentityLink(processInstanceId, "responsabile#flussi@" + CNR_CODE, Utils.PROCESS_VISUALIZER); + runtimeService.addUserIdentityLink(processInstanceId, variables.get("initiator").toString(), Utils.PROCESS_VISUALIZER); + runtimeService.addGroupIdentityLink(processInstanceId, "supervisore#flussi@" + CNR_CODE, Utils.PROCESS_VISUALIZER); + runtimeService.addGroupIdentityLink(processInstanceId, "responsabile#flussi@" + CNR_CODE, Utils.PROCESS_VISUALIZER); - String processDefinitionKeyVersionated = (String) variables.get("processDefinitionId"); - String processDefinitionKey = processDefinitionKeyVersionated.split(":")[0]; - if (processDefinitionKey != null) { - runtimeService.addGroupIdentityLink(processInstanceId, "supervisore#"+ processDefinitionKey, Utils.PROCESS_VISUALIZER); - runtimeService.addGroupIdentityLink(processInstanceId, "responsabile#"+ processDefinitionKey, Utils.PROCESS_VISUALIZER); - runtimeService.addGroupIdentityLink(processInstanceId, "supervisore#"+ processDefinitionKey +"@" + CNR_CODE, Utils.PROCESS_VISUALIZER); - runtimeService.addGroupIdentityLink(processInstanceId, "responsabile#"+ processDefinitionKey +"@" + CNR_CODE, Utils.PROCESS_VISUALIZER); + String processDefinitionKeyVersionated = (String) variables.get("processDefinitionId"); + String processDefinitionKey = processDefinitionKeyVersionated.split(":")[0]; + if (processDefinitionKey != null) { + runtimeService.addGroupIdentityLink(processInstanceId, "supervisore#"+ processDefinitionKey, Utils.PROCESS_VISUALIZER); + runtimeService.addGroupIdentityLink(processInstanceId, "responsabile#"+ processDefinitionKey, Utils.PROCESS_VISUALIZER); + runtimeService.addGroupIdentityLink(processInstanceId, "supervisore#"+ processDefinitionKey +"@" + CNR_CODE, Utils.PROCESS_VISUALIZER); + runtimeService.addGroupIdentityLink(processInstanceId, "responsabile#"+ processDefinitionKey +"@" + CNR_CODE, Utils.PROCESS_VISUALIZER); - } + } - String idStruttura = (String) variables.get(ID_STRUTTURA); - if (idStruttura!= null) { - // TODO inserire if se è un flusso organizzato per strutture + String idStruttura = (String) variables.get(ID_STRUTTURA); + if (idStruttura!= null) { + // TODO inserire if se è un flusso organizzato per strutture - runtimeService.addGroupIdentityLink(processInstanceId, "supervisore-struttura@"+ idStruttura , Utils.PROCESS_VISUALIZER); - runtimeService.addGroupIdentityLink(processInstanceId, "responsabile-struttura@"+ idStruttura, Utils.PROCESS_VISUALIZER); - } + runtimeService.addGroupIdentityLink(processInstanceId, "supervisore-struttura@"+ idStruttura , Utils.PROCESS_VISUALIZER); + runtimeService.addGroupIdentityLink(processInstanceId, "responsabile-struttura@"+ idStruttura, Utils.PROCESS_VISUALIZER); + } - if (processDefinitionKey != null && idStruttura!= null) { - runtimeService.addGroupIdentityLink(processInstanceId, "supervisore#"+ processDefinitionKey +"@"+ idStruttura, Utils.PROCESS_VISUALIZER); - runtimeService.addGroupIdentityLink(processInstanceId, "responsabile#"+ processDefinitionKey +"@"+ idStruttura, Utils.PROCESS_VISUALIZER); - } - } - } + if (processDefinitionKey != null && idStruttura!= null) { + runtimeService.addGroupIdentityLink(processInstanceId, "supervisore#"+ processDefinitionKey +"@"+ idStruttura, Utils.PROCESS_VISUALIZER); + runtimeService.addGroupIdentityLink(processInstanceId, "responsabile#"+ processDefinitionKey +"@"+ idStruttura, Utils.PROCESS_VISUALIZER); + } + } + } - private void setDefaultVisibilityRules(String taskId, String processInstanceId) { - taskService.getIdentityLinksForTask(taskId).stream() - .filter(l -> l.getType().equals(IdentityLinkType.CANDIDATE) && l.getGroupId() != null) - .forEach(l -> runtimeService.addGroupIdentityLink(processInstanceId, l.getGroupId(), Utils.PROCESS_VISUALIZER)); + private void setDefaultVisibilityRules(String taskId, String processInstanceId) { + taskService.getIdentityLinksForTask(taskId).stream() + .filter(l -> l.getType().equals(IdentityLinkType.CANDIDATE) && l.getGroupId() != null) + .forEach(l -> runtimeService.addGroupIdentityLink(processInstanceId, l.getGroupId(), Utils.PROCESS_VISUALIZER)); - taskService.getIdentityLinksForTask(taskId).stream() - .filter(l -> l.getType().equals(IdentityLinkType.ASSIGNEE)) - .forEach(l -> runtimeService.addUserIdentityLink(processInstanceId, l.getUserId(), Utils.PROCESS_VISUALIZER)); - } + taskService.getIdentityLinksForTask(taskId).stream() + .filter(l -> l.getType().equals(IdentityLinkType.ASSIGNEE)) + .forEach(l -> runtimeService.addUserIdentityLink(processInstanceId, l.getUserId(), Utils.PROCESS_VISUALIZER)); + } - private void setAdditionalVisibilityRules(ActivitiEvent event, String processInstanceId, String processDefinitionId, - String currentTaskKey) { - List groups = VisibilityMapping.GroupVisibilityMappingForProcessInstance.get(processDefinitionId +"-"+ currentTaskKey); + private void setAdditionalVisibilityRules(ActivitiEvent event, String processInstanceId, String processDefinitionId, + String currentTaskKey) { + List groups = VisibilityMapping.GroupVisibilityMappingForProcessInstance.get(processDefinitionId +"-"+ currentTaskKey); - if (groups != null) - for (String group : groups) { - runtimeService.addGroupIdentityLink(processInstanceId, group, Utils.PROCESS_VISUALIZER); - } + if (groups != null) + for (String group : groups) { + runtimeService.addGroupIdentityLink(processInstanceId, group, Utils.PROCESS_VISUALIZER); + } - List users = VisibilityMapping.UserVisibilityMappingForProcessInstance.get(processDefinitionId +"-"+ currentTaskKey); + List users = VisibilityMapping.UserVisibilityMappingForProcessInstance.get(processDefinitionId +"-"+ currentTaskKey); - if (users != null) - for (String user : users) { - runtimeService.addGroupIdentityLink(processInstanceId, user, Utils.PROCESS_VISUALIZER); - } - } + if (users != null) + for (String user : users) { + runtimeService.addGroupIdentityLink(processInstanceId, user, Utils.PROCESS_VISUALIZER); + } + } - @Override - public boolean isFailOnException() { - // TODO Auto-generated method stub - return false; - } + @Override + public boolean isFailOnException() { + // TODO Auto-generated method stub + return false; + } } diff --git a/src/main/java/it/cnr/si/flows/ng/listeners/cnr/accordiInternazionaliDomande/ManageProcessAccordiInternazionaliDomande_v1.java b/src/main/java/it/cnr/si/flows/ng/listeners/cnr/accordiInternazionaliDomande/ManageProcessAccordiInternazionaliDomande_v1.java index bd24c4233..a3e44f4ca 100644 --- a/src/main/java/it/cnr/si/flows/ng/listeners/cnr/accordiInternazionaliDomande/ManageProcessAccordiInternazionaliDomande_v1.java +++ b/src/main/java/it/cnr/si/flows/ng/listeners/cnr/accordiInternazionaliDomande/ManageProcessAccordiInternazionaliDomande_v1.java @@ -1,7 +1,13 @@ package it.cnr.si.flows.ng.listeners.cnr.accordiInternazionaliDomande; - +import it.cnr.si.domain.enumeration.ExternalApplication; +import it.cnr.si.domain.enumeration.ExternalMessageVerb; +import it.cnr.si.flows.ng.dto.FlowsAttachment; +import it.cnr.si.flows.ng.service.*; +import it.cnr.si.flows.ng.utils.Enum; +import it.cnr.si.flows.ng.utils.Enum.StatoDomandeAccordiInternazionaliEnum; +import it.cnr.si.service.ExternalMessageService; import org.activiti.engine.ManagementService; import org.activiti.engine.RuntimeService; import org.activiti.engine.TaskService; @@ -15,32 +21,19 @@ import org.springframework.context.annotation.Profile; import org.springframework.stereotype.Component; -import it.cnr.si.flows.ng.service.FirmaDocumentoService; -import it.cnr.si.flows.ng.service.FlowsAttachmentService; -import it.cnr.si.flows.ng.service.FlowsMailService; -import it.cnr.si.flows.ng.service.FlowsPdfService; -import it.cnr.si.flows.ng.service.FlowsProcessInstanceService; -import it.cnr.si.flows.ng.service.ProtocolloDocumentoService; -import it.cnr.si.service.ExternalMessageService; -import it.cnr.si.domain.enumeration.ExternalMessageVerb; -import it.cnr.si.flows.ng.utils.Enum; -import it.cnr.si.flows.ng.utils.Enum.StatoDomandeAccordiInternazionaliEnum; -import it.cnr.si.flows.ng.dto.FlowsAttachment; -import static it.cnr.si.flows.ng.utils.Utils.PROCESS_VISUALIZER; -import it.cnr.si.domain.enumeration.ExternalApplication; - +import javax.inject.Inject; import java.util.HashMap; import java.util.List; import java.util.Map; -import javax.inject.Inject; +import static it.cnr.si.flows.ng.utils.Enum.VariableEnum.statoFinaleDomanda; +import static it.cnr.si.flows.ng.utils.Utils.PROCESS_VISUALIZER; @Component @Profile("cnr") public class ManageProcessAccordiInternazionaliDomande_v1 implements ExecutionListener { private static final long serialVersionUID = 686169707042367215L; private static final Logger LOGGER = LoggerFactory.getLogger(ManageProcessAccordiInternazionaliDomande_v1.class); - public static final String STATO_FINALE_DOMANDA = "statoFinaleDomanda"; @Value("${cnr.abil.url}") @@ -160,27 +153,30 @@ public void notify(DelegateExecution execution) throws Exception { restToApplicazioneAccordiBilaterali(execution, Enum.StatoDomandeAccordiInternazionaliEnum.VALUTATA_SCIENTIFICAMENTE); };break; case "endevent-respinta-start": { - execution.setVariable(STATO_FINALE_DOMANDA, "DOMANDA RESPINTA"); + execution.setVariable(statoFinaleDomanda.name(), "DOMANDA RESPINTA"); restToApplicazioneAccordiBilaterali(execution, Enum.StatoDomandeAccordiInternazionaliEnum.RESPINTA); flowsProcessInstanceService.updateSearchTerms(executionId, processInstanceId, "RESPINTA"); };break; case "endevent-non-autorizzata-start": { - execution.setVariable(STATO_FINALE_DOMANDA, "DOMANDA NON AUTORIZZATA"); + execution.setVariable(statoFinaleDomanda.name(), "DOMANDA NON AUTORIZZATA"); + if(execution.getVariable("sceltaUtente") != "Respingi") { + execution.setVariable("notaDomandaRespinta", "Scadenza termini temporali Valutazione Dirigente"); + } restToApplicazioneAccordiBilaterali(execution, Enum.StatoDomandeAccordiInternazionaliEnum.RESPINTA); flowsProcessInstanceService.updateSearchTerms(executionId, processInstanceId, "NON AUTORIZZATA"); };break; case "endevent-annullata-start": { - execution.setVariable(STATO_FINALE_DOMANDA, "DOMANDA ANNULLATA"); + execution.setVariable(statoFinaleDomanda.name(), "DOMANDA ANNULLATA"); restToApplicazioneAccordiBilaterali(execution, Enum.StatoDomandeAccordiInternazionaliEnum.RESPINTA); flowsProcessInstanceService.updateSearchTerms(executionId, processInstanceId, "ANNULLATA"); };break; case "endevent-non-finanziata-start": { - execution.setVariable(STATO_FINALE_DOMANDA, "DOMANDA NON FINANZIATA"); + execution.setVariable(statoFinaleDomanda.name(), "DOMANDA NON FINANZIATA"); restToApplicazioneAccordiBilaterali(execution, Enum.StatoDomandeAccordiInternazionaliEnum.RESPINTA); flowsProcessInstanceService.updateSearchTerms(executionId, processInstanceId, "NON FINANZIATA"); };break; case "endevent-approvata-start": { - execution.setVariable(STATO_FINALE_DOMANDA, "DOMANDA APPROVATA"); + execution.setVariable(statoFinaleDomanda.name(), "DOMANDA APPROVATA"); flowsProcessInstanceService.updateSearchTerms(executionId, processInstanceId, Enum.StatoDomandeAccordiInternazionaliEnum.RESPINTA.toString()); flowsProcessInstanceService.updateSearchTerms(executionId, processInstanceId, "APPROVATA"); restToApplicazioneAccordiBilaterali(execution, Enum.StatoDomandeAccordiInternazionaliEnum.ACCETATA); diff --git a/src/main/java/it/cnr/si/flows/ng/listeners/cnr/acquisti/ManageProcessAcquisti_v1.java b/src/main/java/it/cnr/si/flows/ng/listeners/cnr/acquisti/ManageProcessAcquisti_v1.java index 53db0835f..54e789eb4 100644 --- a/src/main/java/it/cnr/si/flows/ng/listeners/cnr/acquisti/ManageProcessAcquisti_v1.java +++ b/src/main/java/it/cnr/si/flows/ng/listeners/cnr/acquisti/ManageProcessAcquisti_v1.java @@ -35,6 +35,9 @@ import java.util.Map; import java.util.TimeZone; +import static it.cnr.si.flows.ng.utils.Enum.Stato.Revocato; +import static it.cnr.si.flows.ng.utils.Enum.VariableEnum.flagIsTrasparenza; +import static it.cnr.si.flows.ng.utils.Enum.VariableEnum.statoFinaleDomanda; import static it.cnr.si.flows.ng.utils.Utils.PROCESS_VISUALIZER; import static it.cnr.si.security.PermissionEvaluatorImpl.ID_STRUTTURA; @@ -43,7 +46,6 @@ public class ManageProcessAcquisti_v1 implements ExecutionListener { private static final long serialVersionUID = 686169707042367215L; private static final Logger LOGGER = LoggerFactory.getLogger(ManageProcessAcquisti_v1.class); - public static final String STATO_FINALE_DOMANDA = "statoFinaleDomanda"; @Inject private FirmaDocumentoService firmaDocumentoService; @@ -173,6 +175,7 @@ public void CalcolaTotaleImpegni(DelegateExecution execution) { throw new BpmnError("400", "Formato Impegno Non Valido: " + impegno.getString("importoLordo")); } impegno.put("uo_label", aceBridgeService.getUoById(Integer.parseInt(impegno.get("uo").toString())).getDenominazione()); + impegno.put("cdsuo", aceBridgeService.getUoById(Integer.parseInt(impegno.get("uo").toString())).getCdsuo()); } execution.setVariable("impegni_json", impegni.toString()); @@ -481,11 +484,21 @@ public Map createSiglaPayload(DelegateExecution execution) throw } // DITTE INVITATE ditteInvitate_json if(execution.getVariable("ditteInvitate_json") != null){ - put("listaDitteInvitateExt", execution.getVariable("ditteInvitate_json").toString()); + String ditteInvitateString = execution.getVariable("ditteInvitate_json").toString(); + JSONArray ditteInvitate = new JSONArray(ditteInvitateString); + put("listaDitteInvitateExt", ditteInvitate); } // IMPEGNI impegni_json if(execution.getVariable("impegni_json") != null){ - put("listaUoAbilitateExt", execution.getVariable("impegni_json").toString()); + String impegniString = execution.getVariable("impegni_json").toString(); + JSONArray impegni = new JSONArray(impegniString); + for ( int i = 0; i < impegni.length(); i++) { + JSONObject impegno = impegni.getJSONObject(i); + impegno.put("uo_label", aceBridgeService.getUoById(Integer.parseInt(impegno.get("uo").toString())).getDenominazione()); + impegno.put("cdsuo", aceBridgeService.getUoById(Integer.parseInt(impegno.get("uo").toString())).getCdsuo()); + } + execution.setVariable("impegni_json", impegni.toString()); + put("listaUoAbilitateExt", impegni); } } }; @@ -525,6 +538,8 @@ public void notify(DelegateExecution execution) throws Exception { // START case "process-start": { startAcquistiSetGroupsAndVisibility.configuraVariabiliStart(execution); + execution.setVariable(statoFinaleDomanda.name(), "IN CORSO"); + execution.setVariable(flagIsTrasparenza.name(), "false"); };break; case "pre-determina-start": { pubblicaFilePubblicabiliURP(execution); @@ -533,7 +548,7 @@ public void notify(DelegateExecution execution) throws Exception { pubblicaFilePubblicabiliURP(execution); };break; case "end-annullato-start": { - execution.setVariable(STATO_FINALE_DOMANDA, "ANNULLATO"); + execution.setVariable(statoFinaleDomanda.name(), "ANNULLATO"); flowsProcessInstanceService.updateSearchTerms(executionId, processInstanceId, "ANNULLATO"); };break; // START DECISIONE-CONTRATTARE @@ -696,7 +711,7 @@ public void notify(DelegateExecution execution) throws Exception { case "end-stipulato-start": { pubblicaTuttiFilePubblicabili(execution); controllaFilePubblicabiliTrasparenza(execution); - execution.setVariable(STATO_FINALE_DOMANDA, "STIPULATO"); + execution.setVariable(statoFinaleDomanda.name(), "STIPULATO"); flowsProcessInstanceService.updateSearchTerms(executionId, processInstanceId, "STIPULATO"); //TODO implementare le url a seconda del contesto String urlSigla = "www.google.it"; @@ -741,19 +756,20 @@ public void notify(DelegateExecution execution) throws Exception { // FINE ACQUISTI case "end-revocato-start": { - execution.setVariable(STATO_FINALE_DOMANDA, "REVOCATO"); - flowsProcessInstanceService.updateSearchTerms(executionId, processInstanceId, "REVOCATO"); + execution.setVariable(statoFinaleDomanda.name(), Revocato); + flowsProcessInstanceService.updateSearchTerms(executionId, processInstanceId, Revocato.name()); };break; // FINE FLUSSO case "process-end": { - // if(execution.getVariable(STATO_FINALE_DOMANDA).toString().equals("STIPULATO")){ + // if(execution.getVariable(statoFinaleDomanda.name()).toString().equals("STIPULATO")){ // pubblicaTuttiFilePubblicabili(execution); // } };break; //SUBFLUSSI case "DECISIONE-CONTRATTARE-end": { + execution.setVariable(flagIsTrasparenza.name(), "true"); attachmentList = attachmentService.getAttachementsForProcessInstance(processInstanceId); if(sceltaUtente != null && sceltaUtente.equals("RevocaSemplice")) { for (String key : attachmentList.keySet()) { diff --git a/src/main/java/it/cnr/si/flows/ng/listeners/cnr/acquisti/StartAcquistiRevocaSetGroupsAndVisibility.java b/src/main/java/it/cnr/si/flows/ng/listeners/cnr/acquisti/StartAcquistiRevocaSetGroupsAndVisibility.java index 109a3d1a2..6adecda89 100644 --- a/src/main/java/it/cnr/si/flows/ng/listeners/cnr/acquisti/StartAcquistiRevocaSetGroupsAndVisibility.java +++ b/src/main/java/it/cnr/si/flows/ng/listeners/cnr/acquisti/StartAcquistiRevocaSetGroupsAndVisibility.java @@ -1,7 +1,7 @@ package it.cnr.si.flows.ng.listeners.cnr.acquisti; import it.cnr.si.flows.ng.service.AceBridgeService; -import it.cnr.si.service.RelationshipService; +import it.cnr.si.service.MembershipService; import org.activiti.engine.RuntimeService; import org.activiti.engine.delegate.BpmnError; import org.activiti.engine.delegate.DelegateExecution; @@ -25,12 +25,12 @@ public class StartAcquistiRevocaSetGroupsAndVisibility implements ExecutionListe private static final long serialVersionUID = 686169707042367215L; private static final Logger LOGGER = LoggerFactory.getLogger(StartAcquistiRevocaSetGroupsAndVisibility.class); - @Inject - private RelationshipService relationshipService; @Autowired(required = false) private AceBridgeService aceBridgeService; @Inject private RuntimeService runtimeService; + @Inject + private MembershipService membershipService; @Override public void notify(DelegateExecution execution) throws Exception { @@ -38,7 +38,7 @@ public void notify(DelegateExecution execution) throws Exception { String initiator = (String) execution.getVariable("initiator"); LOGGER.info("L'utente {} sta avviando il flusso {} (con titolo {})", initiator, execution.getId(), execution.getVariable("title")); - List groups = relationshipService.getAllGroupsForUser(initiator).stream() + List groups = membershipService.getAllGroupsForUser(initiator).stream() .filter(g -> g.startsWith("responsabile#")) .collect(Collectors.toList()); @@ -65,7 +65,7 @@ public void notify(DelegateExecution execution) throws Exception { execution.setVariable("organizzazioneStruttura", "Complessa"); } execution.setVariable("nomeStruttura", aceBridgeService.getNomeStruturaById(Integer.parseInt(struttura))); - + runtimeService.addGroupIdentityLink(execution.getProcessInstanceId(), gruppoRT, PROCESS_VISUALIZER); runtimeService.addGroupIdentityLink(execution.getProcessInstanceId(), gruppoFirmaAcquisti, PROCESS_VISUALIZER); runtimeService.addGroupIdentityLink(execution.getProcessInstanceId(), gruppoStaffAmministrativo, PROCESS_VISUALIZER); diff --git a/src/main/java/it/cnr/si/flows/ng/listeners/cnr/acquisti/StartAcquistiSetGroupsAndVisibility.java b/src/main/java/it/cnr/si/flows/ng/listeners/cnr/acquisti/StartAcquistiSetGroupsAndVisibility.java index d0de67e63..a3913f0c0 100644 --- a/src/main/java/it/cnr/si/flows/ng/listeners/cnr/acquisti/StartAcquistiSetGroupsAndVisibility.java +++ b/src/main/java/it/cnr/si/flows/ng/listeners/cnr/acquisti/StartAcquistiSetGroupsAndVisibility.java @@ -5,6 +5,7 @@ import it.cnr.si.flows.ng.service.SiperService; import it.cnr.si.flows.ng.utils.Enum; import it.cnr.si.service.AceService; +import it.cnr.si.service.MembershipService; import it.cnr.si.service.RelationshipService; import org.activiti.engine.RuntimeService; import org.activiti.engine.delegate.BpmnError; @@ -31,84 +32,93 @@ @Service public class StartAcquistiSetGroupsAndVisibility { - private static final Logger LOGGER = LoggerFactory.getLogger(StartAcquistiSetGroupsAndVisibility.class); - - @Inject - private RelationshipService relationshipService; - @Autowired(required = false) - private AceBridgeService aceBridgeService; - @Inject - private RuntimeService runtimeService; - @Inject - private CounterService counterService; + private static final Logger LOGGER = LoggerFactory.getLogger(StartAcquistiSetGroupsAndVisibility.class); + + @Inject + private RelationshipService relationshipService; + @Autowired(required = false) + private AceBridgeService aceBridgeService; + @Inject + private RuntimeService runtimeService; + @Inject + private CounterService counterService; @Inject private AceService aceService; @Inject private SiperService siperService; - + @Inject + private MembershipService membershipService; + public void configuraVariabiliStart(DelegateExecution execution) throws IOException, ParseException { - String initiator = (String) execution.getVariable(Enum.VariableEnum.initiator.name()); - // LOGGER.info("L'utente {} sta avviando il flusso {} (con titolo {})", initiator, execution.getId(), execution.getVariable(Enum.VariableEnum.title.name())); - LOGGER.info("L'utente {} sta avviando il flusso {} (con titolo {})", initiator, execution.getId(), execution.getVariable("title")); - - List groups = relationshipService.getAllGroupsForUser(initiator).stream() - .filter(g -> g.startsWith("staffAmministrativo@")) - .collect(Collectors.toList()); - - if (groups.isEmpty()) - throw new BpmnError("403", "L'utente non e' abilitato ad avviare questo flusso"); - else { - - String gruppoRT = groups.get(0); - //String struttura = gruppoRT.substring(gruppoRT.lastIndexOf('@') +1); - // idStruttura variabile che indica che il flusso è diviso per strutture (implica la visibilità distinta tra strutture) - - // NUOVA PROCEDURA PER PRENDERE L'ENTITA' ORGANIZZATIVA DI RIFERIMENTO - String cdsuoAppartenenzaUtente = aceBridgeService.getAfferenzaUtente(initiator).getCdsuo(); - Object insdipResponsabileUo = siperService.getResponsabileCDSUO(cdsuoAppartenenzaUtente).get(0).get("codice_sede"); - String struttura = aceService.entitaOrganizzativaFindByTerm(insdipResponsabileUo.toString()).get(0).getId().toString(); - - execution.setVariable(idStruttura.name(), struttura); - String gruppoFirmaAcquisti = "responsabileFirmaAcquisti@"+ struttura; - String gruppoStaffAmministrativo = "staffAmministrativo@"+ struttura; - String gruppoSFD = "sfd@"+ struttura; - String applicazioneSigla = "app.sigla"; - - LOGGER.debug("Imposto i gruppi del flusso {}, {}, {}, {}", gruppoRT, gruppoSFD, gruppoStaffAmministrativo, gruppoFirmaAcquisti); - - //Check se il gruppo SFD ha membri - List members = aceBridgeService.getUsersInAceGroup(gruppoSFD); - if (members.isEmpty()) { - execution.setVariable("organizzazioneStruttura", "Semplice"); - } else { - execution.setVariable("organizzazioneStruttura", "Complessa"); - } - execution.setVariable("nomeStruttura", aceBridgeService.getNomeStruturaById(Integer.parseInt(struttura))); - - runtimeService.addGroupIdentityLink(execution.getProcessInstanceId(), gruppoRT, PROCESS_VISUALIZER); - runtimeService.addGroupIdentityLink(execution.getProcessInstanceId(), gruppoFirmaAcquisti, PROCESS_VISUALIZER); - runtimeService.addGroupIdentityLink(execution.getProcessInstanceId(), gruppoStaffAmministrativo, PROCESS_VISUALIZER); - runtimeService.addGroupIdentityLink(execution.getProcessInstanceId(), gruppoSFD, PROCESS_VISUALIZER); - runtimeService.addUserIdentityLink(execution.getProcessInstanceId(), applicazioneSigla, PROCESS_VISUALIZER); -// runtimeService.addGroupIdentityLink(execution.getProcessInstanceId(), "segreteria@" + struttura, PROCESS_VISUALIZER); - - execution.setVariable("gruppoRT", gruppoRT); - execution.setVariable("gruppoFirmaAcquisti", gruppoFirmaAcquisti); - execution.setVariable(Enum.VariableEnum.gruppoStaffAmministrativo.name(), gruppoStaffAmministrativo); - execution.setVariable("gruppoSFD", gruppoSFD); - execution.setVariable("sigla", applicazioneSigla); - //SET VARIABILI Direzione flusso - execution.setVariable("statoImpegni", "provvisori"); + String initiator = (String) execution.getVariable(Enum.VariableEnum.initiator.name()); + // LOGGER.info("L'utente {} sta avviando il flusso {} (con titolo {})", initiator, execution.getId(), execution.getVariable(Enum.VariableEnum.title.name())); + LOGGER.info("L'utente {} sta avviando il flusso {} (con titolo {})", initiator, execution.getId(), execution.getVariable("title")); + + List groups = membershipService.getAllGroupsForUser(initiator).stream() + .filter(g -> g.startsWith("staffAmministrativo@")) + .collect(Collectors.toList()); + + if (groups.isEmpty()) + throw new BpmnError("403", "L'utente non e' abilitato ad avviare questo flusso"); + else { + + //String gruppoStaffAmministrativo = groups.get(0); +// String struttura = gruppoStaffAmministrativo.substring(gruppoStaffAmministrativo.lastIndexOf('@') +1); +// // idStruttura variabile che indica che il flusso è diviso per strutture (implica la visibilità distinta tra strutture) +// +// // NUOVA PROCEDURA PER PRENDERE L'ENTITA' ORGANIZZATIVA DI RIFERIMENTO +// String cdsuoAppartenenzaUtente = aceBridgeService.getAfferenzaUtente(initiator).getCdsuo(); +// Object insdipResponsabileUo = siperService.getResponsabileCDSUO(cdsuoAppartenenzaUtente).get(0).get("codice_sede"); +// String strutturaAppartenenza = aceService.entitaOrganizzativaFindByTerm(insdipResponsabileUo.toString()).get(0).getId().toString(); +// +// if (!struttura.equals(strutturaAppartenenza)) { +// LOGGER.info("TEST l'utente {} sta avviando il flusso {} con per una struttura [{}] diversa da quella di appartenenza [{}])", initiator, execution.getId(), struttura,strutturaAppartenenza); +// } +// +// execution.setVariable(idStruttura.name(), struttura); + + String struttura = execution.getVariable(idStruttura.name()).toString(); + + String gruppoFirmaAcquisti = "responsabileFirmaAcquisti@"+ struttura; + String gruppoStaffAmministrativo = "staffAmministrativo@"+ struttura; + String gruppoSFD = "sfd@"+ struttura; + String applicazioneSigla = "app.sigla"; + + LOGGER.debug("Imposto i gruppi del flusso {}, {}, {}, {}", gruppoStaffAmministrativo, gruppoSFD, gruppoStaffAmministrativo, gruppoFirmaAcquisti); + + //Check se il gruppo SFD ha membri + List members = aceBridgeService.getUsersInAceGroup(gruppoSFD); + if (members.isEmpty()) { + execution.setVariable("organizzazioneStruttura", "Semplice"); + } else { + execution.setVariable("organizzazioneStruttura", "Complessa"); + } + execution.setVariable("nomeStruttura", aceBridgeService.getNomeStruturaById(Integer.parseInt(struttura))); + + runtimeService.addGroupIdentityLink(execution.getProcessInstanceId(), gruppoStaffAmministrativo, PROCESS_VISUALIZER); + runtimeService.addGroupIdentityLink(execution.getProcessInstanceId(), gruppoFirmaAcquisti, PROCESS_VISUALIZER); + runtimeService.addGroupIdentityLink(execution.getProcessInstanceId(), gruppoStaffAmministrativo, PROCESS_VISUALIZER); + runtimeService.addGroupIdentityLink(execution.getProcessInstanceId(), gruppoSFD, PROCESS_VISUALIZER); + runtimeService.addUserIdentityLink(execution.getProcessInstanceId(), applicazioneSigla, PROCESS_VISUALIZER); + // runtimeService.addGroupIdentityLink(execution.getProcessInstanceId(), "segreteria@" + struttura, PROCESS_VISUALIZER); + + execution.setVariable("gruppoStaffAmministrativo", gruppoStaffAmministrativo); + execution.setVariable("gruppoFirmaAcquisti", gruppoFirmaAcquisti); + execution.setVariable(Enum.VariableEnum.gruppoStaffAmministrativo.name(), gruppoStaffAmministrativo); + execution.setVariable("gruppoSFD", gruppoSFD); + execution.setVariable("sigla", applicazioneSigla); + //SET VARIABILI Direzione flusso + execution.setVariable("statoImpegni", "provvisori"); if (execution.getVariable("tipologiaAffidamentoDiretto") == null) { - execution.setVariable("tipologiaAffidamentoDiretto", "normale"); + execution.setVariable("tipologiaAffidamentoDiretto", "normale"); } - //SET CONTATORE ACQUISTO STRUTTURA + //SET CONTATORE ACQUISTO STRUTTURA String counterId = aceBridgeService.getUoById(Integer.parseInt(struttura)).getCdsuo() + "-ACQ-" + Calendar.getInstance().get(Calendar.YEAR); String key = counterId + "-" + counterService.getNext(counterId); - execution.setVariable("codiceAcquistoStruttura", key); - } + execution.setVariable("codiceAcquistoStruttura", key); + } - } + } } \ No newline at end of file diff --git a/src/main/java/it/cnr/si/flows/ng/listeners/cnr/shortTermMobilityBandi/ManageProcessShortTermMobilityBandi_v1.java b/src/main/java/it/cnr/si/flows/ng/listeners/cnr/shortTermMobilityBandi/ManageProcessShortTermMobilityBandi_v1.java new file mode 100644 index 000000000..78efd0948 --- /dev/null +++ b/src/main/java/it/cnr/si/flows/ng/listeners/cnr/shortTermMobilityBandi/ManageProcessShortTermMobilityBandi_v1.java @@ -0,0 +1,249 @@ +package it.cnr.si.flows.ng.listeners.cnr.shortTermMobilityBandi; + + + + +import org.activiti.engine.RuntimeService; +import org.activiti.engine.TaskService; +import org.activiti.engine.delegate.DelegateExecution; +import org.activiti.engine.delegate.ExecutionListener; +import org.activiti.engine.delegate.Expression; +import org.activiti.engine.impl.TaskServiceImpl; +import org.activiti.engine.runtime.ProcessInstance; +import org.activiti.engine.task.Task; +import org.activiti.rest.common.api.DataResponse; +import org.activiti.rest.service.api.history.HistoricProcessInstanceResponse; +import org.apache.commons.io.FileUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.context.annotation.Profile; +import org.springframework.stereotype.Component; + +import com.google.common.net.MediaType; + +import it.cnr.si.flows.ng.service.FirmaDocumentoService; +import it.cnr.si.flows.ng.service.FlowsAttachmentService; +import it.cnr.si.flows.ng.service.FlowsCsvService; +import it.cnr.si.flows.ng.service.FlowsProcessInstanceService; +import it.cnr.si.flows.ng.service.FlowsTaskService; +import it.cnr.si.flows.ng.service.ProtocolloDocumentoService; +import it.cnr.si.flows.ng.utils.Enum; +import it.cnr.si.flows.ng.dto.FlowsAttachment; +import it.cnr.si.flows.ng.exception.TaskFailedException; +import it.cnr.si.flows.ng.listeners.cnr.acquisti.service.AcquistiService; + +import static it.cnr.si.flows.ng.utils.Utils.PROCESS_VISUALIZER; +import static it.cnr.si.flows.ng.utils.Enum.Azione.GenerazioneDaSistema; +import static it.cnr.si.flows.ng.utils.Enum.VariableEnum.statoFinaleDomanda; + +import java.io.File; +import java.io.IOException; +import java.io.PrintWriter; +import java.nio.file.Files; +import java.nio.file.attribute.FileAttribute; +import java.nio.file.attribute.FileAttributeView; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.inject.Inject; +import javax.servlet.http.HttpServletResponse; + +@Component +@Profile("cnr") +public class ManageProcessShortTermMobilityBandi_v1 implements ExecutionListener { + private static final long serialVersionUID = 686169707042367215L; + private static final Logger LOGGER = LoggerFactory.getLogger(ManageProcessShortTermMobilityBandi_v1.class); + public static final String STATO_FINALE_VERBALE = "statoFinaleDomanda"; + + @Inject + private FirmaDocumentoService firmaDocumentoService; + @Inject + private ProtocolloDocumentoService protocolloDocumentoService; + @Inject + private FlowsProcessInstanceService flowsProcessInstanceService; + @Inject + private StartShortTermMobilityBandiSetGroupsAndVisibility startShortTermMobilityBandiSetGroupsAndVisibility; + @Inject + private RuntimeService runtimeService; + @Inject + private TaskService taskService; + @Inject + private FlowsCsvService flowsCsvService; + @Inject + private FlowsAttachmentService flowsAttachmentService; + @Inject + private FlowsTaskService flowsTaskService; + + + private Expression faseEsecuzione; + + + @Override + public void notify(DelegateExecution execution) throws Exception { + //(OivPdfService oivPdfService = new OivPdfService(); + + Map attachmentList; + String processInstanceId = execution.getProcessInstanceId(); + String executionId = execution.getId(); + String stato = execution.getCurrentActivityName(); + String sceltaUtente = "start"; + if(execution.getVariable("sceltaUtente") != null) { + sceltaUtente = (String) execution.getVariable("sceltaUtente"); + } + + LOGGER.info("ProcessInstanceId: " + processInstanceId); + String faseEsecuzioneValue = "noValue"; + faseEsecuzioneValue = faseEsecuzione.getValue(execution).toString(); + LOGGER.info("-- azioneScelta: " + faseEsecuzioneValue + " con sceltaUtente: " + sceltaUtente); + + switch(faseEsecuzioneValue){ + // START + case "process-start": { + startShortTermMobilityBandiSetGroupsAndVisibility.configuraVariabiliStart(execution); + execution.setVariable("tutteDomandeAccettateFlag", "false"); + };break; + + case "elenco-domande-start": { + // VERIFICA TUTTE LE DOMANDE DI FLUSSI ATTIVI PER QUEL BANDO +// List processinstancesListaPerBando = runtimeService.createProcessInstanceQuery() +// .processDefinitionKey("short-term-mobility-domande") +// .variableValueEquals("idBando", execution.getVariable("idBando")) +// .list(); + + };break; + + // START + case "caricamento-verbale-start": { + creaExportCsvDomandePerBando(execution, (execution.getVariable("idBando").toString())); + flowsProcessInstanceService.updateSearchTerms(executionId, processInstanceId, stato); + };break; + + case "firma-verbale-end": { + + if(sceltaUtente != null && sceltaUtente.equals("Firma")) { + firmaDocumentoService.eseguiFirma(execution, "verbale"); + } + };break; + case "protocollo-verbale-end": { + if(sceltaUtente != null && sceltaUtente.equals("Protocolla")) { + protocolloDocumentoService.protocolla(execution, "verbale"); + } + };break; + case "endevent-bando-start": { + execution.setVariable(STATO_FINALE_VERBALE, "VERBALE APPROVATO"); + flowsProcessInstanceService.updateSearchTerms(executionId, processInstanceId, "APPROVATO"); + };break; + + case "process-end": { + //sbloccaDomandeBando(execution); + + // VERIFICA TUTTE LE DOMANDE DI FLUSSI ATTIVI PER QUEL BANDO + List processinstancesListaPerBando = runtimeService.createProcessInstanceQuery() + .processDefinitionKey("short-term-mobility-domande") + .variableValueEquals("idBando", execution.getVariable("idBando")) + .variableValueEquals(statoFinaleDomanda.name(), Enum.StatoDomandeSTMEnum.VALUTATA_SCIENTIFICAMENTE.toString()) + .list(); + + //AGGIUNGE IL LINK AL BANDO + processinstancesListaPerBando.forEach((processInstance) -> { + if (runtimeService.getVariable(processInstance.getProcessInstanceId(), "linkToOtherWorkflows") != null) { + String linkToOtherWorkflows = runtimeService.getVariable(processInstance.getProcessInstanceId(), "linkToOtherWorkflows").toString(); + runtimeService.setVariable(processInstance.getProcessInstanceId(), "linkToOtherWorkflows", linkToOtherWorkflows + "," + execution.getProcessInstanceId()); + } else { + runtimeService.setVariable(processInstance.getProcessInstanceId(), "linkToOtherWorkflows", execution.getProcessInstanceId()); + } + //SBLOCCA TUTTE LE DOMANDE ATTIVE DI QUEL BANDO + runtimeService.signal(processInstance.getId()); + LOGGER.info("-- sblocco la processInstance: " + processInstance.getName() + " (" + processInstance.getId() + ") "); + }); + + + + + };break; + // DEFAULT + default: { + };break; + + } + } + + + private void sbloccaDomandeBando(DelegateExecution execution) { + + String executionId = execution.getId(); + String idBando = runtimeService.getVariable(executionId, "idBando", String.class); + + try { + List taskIstances = taskService + .createTaskQuery() + //.taskDefinitionKey("valutazione-domande-bando") + .processDefinitionKey("short-term-mobility-domande") + .taskDefinitionKey("valutazione-domande-bando") + .processVariableValueEquals("idBando", idBando) + .active() + .list(); + + LOGGER.info("nr istanze trovate:" + taskIstances.size()); + + taskIstances.forEach(taskIstance -> { + String taskId = taskIstance.getId(); + LOGGER.debug(" key: " + runtimeService.getVariable(taskIstance.getProcessInstanceId(), "key", String.class) + " titolo: "+ runtimeService.getVariable(taskIstance.getProcessInstanceId(), "titolo", String.class) + " ProcessInstanceId: "+ taskIstance.getProcessInstanceId() + " taskid: "+ taskId + " getTaskDefinitionKey: " + taskIstance.getTaskDefinitionKey() + " [" + taskIstance.getName() + "]"); + LOGGER.debug("Sblocco la Domanda per il task: "+ taskId + " della Domanda: " + taskService.getVariable(taskId, "idDomanda") + " del Bando nr: " + taskService.getVariable(taskId, "idBando")); + + Map variabili = new HashMap<>(); + variabili.put("sceltaUtente", "graduatoria da verbale"); + variabili.put("linkToOtherWorkflows", execution.getProcessInstanceId()); + if (execution.getVariable("linkToOtherWorkflows") != null) { + execution.setVariable("linkToOtherWorkflows", execution.getVariable("linkToOtherWorkflows").toString() + "," + taskIstance.getProcessInstanceId()); + } else { + execution.setVariable("linkToOtherWorkflows", taskIstance.getProcessInstanceId()); + } + taskService.complete(taskId, variabili); + }); + //throw new RuntimeException("Errore per provare la transazione atomica dello sblocco delle domande"); + + // LOGGER.info("Domande sbloccate correttamente"); + + } catch ( RuntimeException e) { + LOGGER.error("Errore nel completamento dei task relativi al flusso " + executionId, e); + throw e; + } + + } + + + private void creaExportCsvDomandePerBando(DelegateExecution execution, String idBando) throws IOException { + String processInstanceId = execution.getProcessInstanceId(); + Map req = new HashMap<>(); + if (idBando != null) { + req.put("idBando", "integer="+idBando); + } + //req.put(processDefinitionKey, processDefinitionKey); + String order = "ASC"; + Integer firstResult = -1; + Integer maxResults = -1; + String processDefinitionKey = "short-term-mobility-domande"; + Boolean activeFlag = true; + + DataResponse flussiAttivaPerBando = flowsProcessInstanceService.search(req, processDefinitionKey, activeFlag, order, firstResult, maxResults, true); + File tempFile = File.createTempFile("prefix-", "-suffix"); + //File tempFile = File.createTempFile("MyAppName-", ".tmp"); + PrintWriter writer = new PrintWriter(tempFile); + //creo il csv corrispondente + String fileName = "ExportCsvDomandeBando" + idBando + ".csv"; + //String downloadName = "ExportCsvDomandeBando" + idBando; + String labelFile = "Export Csv Domande Bando"; + flowsTaskService.buildCsv((List) flussiAttivaPerBando.getData(), writer, processDefinitionKey); + byte[] contents = FileUtils.readFileToByteArray(tempFile); + FlowsAttachment documentoGenerato = new FlowsAttachment(); + documentoGenerato.setFilename(fileName); + documentoGenerato.setName(fileName); + documentoGenerato.setLabel(labelFile); + documentoGenerato.setAzione(GenerazioneDaSistema); + documentoGenerato.setMimetype(MediaType.MICROSOFT_EXCEL.toString()); + documentoGenerato.setPath(runtimeService.getVariable(processInstanceId, "pathFascicoloDocumenti", String.class)); + flowsAttachmentService.saveAttachmentFuoriTask(processInstanceId, fileName, documentoGenerato, contents); + } +} diff --git a/src/main/java/it/cnr/si/flows/ng/listeners/cnr/shortTermMobilityBandi/StartShortTermMobilityBandiSetGroupsAndVisibility.java b/src/main/java/it/cnr/si/flows/ng/listeners/cnr/shortTermMobilityBandi/StartShortTermMobilityBandiSetGroupsAndVisibility.java new file mode 100644 index 000000000..f9f21fd5b --- /dev/null +++ b/src/main/java/it/cnr/si/flows/ng/listeners/cnr/shortTermMobilityBandi/StartShortTermMobilityBandiSetGroupsAndVisibility.java @@ -0,0 +1,70 @@ +package it.cnr.si.flows.ng.listeners.cnr.shortTermMobilityBandi; + + + +import it.cnr.si.flows.ng.repository.SetTimerDuedateCmd; +import it.cnr.si.flows.ng.service.FlowsProcessInstanceService; +import it.cnr.si.flows.ng.service.FlowsTimerService; +import it.cnr.si.flows.ng.utils.Enum; + +import org.activiti.engine.HistoryService; +import org.activiti.engine.ManagementService; +import org.activiti.engine.RuntimeService; +import org.activiti.engine.delegate.DelegateExecution; +import org.activiti.engine.runtime.Job; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.context.annotation.Profile; +import org.springframework.stereotype.Component; +import org.springframework.stereotype.Service; + +import javax.inject.Inject; + +import java.io.IOException; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.List; + +import static it.cnr.si.flows.ng.utils.Utils.PROCESS_VISUALIZER; + + + +@Component +@Profile("cnr") + +@Service +public class StartShortTermMobilityBandiSetGroupsAndVisibility { + private static final Logger LOGGER = LoggerFactory.getLogger(StartShortTermMobilityBandiSetGroupsAndVisibility.class); + + @Inject + private RuntimeService runtimeService; + + + public void configuraVariabiliStart(DelegateExecution execution) throws IOException, ParseException { + + String initiator = (String) execution.getVariable(Enum.VariableEnum.initiator.name()); + // LOGGER.info("L'utente {} sta avviando il flusso {} (con titolo {})", initiator, execution.getId(), execution.getVariable(Enum.VariableEnum.title.name())); + LOGGER.info("L'utente {} sta avviando il flusso {} (con titolo {})", initiator, execution.getId(), execution.getVariable("title")); + + String gruppoValidatoriShortTermMobility = "validatoriShortTermMobility@0000"; + String gruppoUfficioProtocollo = "ufficioProtocolloShortTermMobility@0000"; + String gruppoValutatoreScientificoDipartimento = "valutatoreScientificoDipartimento@0000"; + String gruppoResponsabileAccordiInternazionali = "responsabileAccordiInternazionali@0000"; + String applicazioneShortTermMobility = "app.abil"; + + LOGGER.debug("Imposto i gruppi del flusso {}, {}, {}", gruppoValidatoriShortTermMobility, gruppoResponsabileAccordiInternazionali, gruppoUfficioProtocollo); + + runtimeService.addGroupIdentityLink(execution.getProcessInstanceId(), gruppoValidatoriShortTermMobility, PROCESS_VISUALIZER); + runtimeService.addGroupIdentityLink(execution.getProcessInstanceId(), gruppoResponsabileAccordiInternazionali, PROCESS_VISUALIZER); + runtimeService.addGroupIdentityLink(execution.getProcessInstanceId(), applicazioneShortTermMobility, PROCESS_VISUALIZER); + runtimeService.addGroupIdentityLink(execution.getProcessInstanceId(), gruppoUfficioProtocollo, PROCESS_VISUALIZER); + runtimeService.addGroupIdentityLink(execution.getProcessInstanceId(), gruppoValutatoreScientificoDipartimento, PROCESS_VISUALIZER); + + execution.setVariable("gruppoValidatoriShortTermMobility", gruppoValidatoriShortTermMobility); + execution.setVariable("gruppoResponsabileAccordiInternazionali", gruppoResponsabileAccordiInternazionali); + execution.setVariable("gruppoUfficioProtocollo", gruppoUfficioProtocollo); + execution.setVariable("applicazioneShortTermMobility", applicazioneShortTermMobility); + execution.setVariable("gruppoValutatoreScientificoDipartimento", gruppoValutatoreScientificoDipartimento); + } +} \ No newline at end of file diff --git a/src/main/java/it/cnr/si/flows/ng/listeners/cnr/shortTermMobilityDomande/ManageProcessShortTermMobilityDomande_v1.java b/src/main/java/it/cnr/si/flows/ng/listeners/cnr/shortTermMobilityDomande/ManageProcessShortTermMobilityDomande_v1.java new file mode 100644 index 000000000..871058223 --- /dev/null +++ b/src/main/java/it/cnr/si/flows/ng/listeners/cnr/shortTermMobilityDomande/ManageProcessShortTermMobilityDomande_v1.java @@ -0,0 +1,329 @@ +package it.cnr.si.flows.ng.listeners.cnr.shortTermMobilityDomande; + + +import it.cnr.si.domain.enumeration.ExternalApplication; +import it.cnr.si.domain.enumeration.ExternalMessageVerb; +import it.cnr.si.flows.ng.dto.FlowsAttachment; +import it.cnr.si.flows.ng.service.*; +import it.cnr.si.flows.ng.utils.Enum; +import it.cnr.si.flows.ng.utils.Enum.StatoDomandeSTMEnum; +import it.cnr.si.flows.ng.utils.Enum.StatoDomandeSTMEnum; +import it.cnr.si.service.ExternalMessageService; +import org.activiti.engine.ManagementService; +import org.activiti.engine.RepositoryService; +import org.activiti.engine.RuntimeService; +import org.activiti.engine.TaskService; +import org.activiti.engine.delegate.DelegateExecution; +import org.activiti.engine.delegate.ExecutionListener; +import org.activiti.engine.delegate.Expression; +import org.activiti.engine.runtime.Job; +import org.activiti.engine.runtime.ProcessInstance; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Profile; +import org.springframework.stereotype.Component; + +import javax.inject.Inject; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import static it.cnr.si.flows.ng.utils.Enum.VariableEnum.initiator; +import static it.cnr.si.flows.ng.utils.Enum.VariableEnum.statoFinaleDomanda; +import static it.cnr.si.flows.ng.utils.Utils.PROCESS_VISUALIZER; + +@Component +@Profile("cnr") +public class ManageProcessShortTermMobilityDomande_v1 implements ExecutionListener { + private static final long serialVersionUID = 686169707042367215L; + private static final Logger LOGGER = LoggerFactory.getLogger(ManageProcessShortTermMobilityDomande_v1.class); + + + @Value("${cnr.abil.url}") + private String urlShortTermMobility; + @Value("${cnr.abil.domandePath}") + private String pathDomandeShortTermMobility; + + @Inject + private FirmaDocumentoService firmaDocumentoService; + @Inject + private ProtocolloDocumentoService protocolloDocumentoService; + @Inject + private FlowsProcessInstanceService flowsProcessInstanceService; + @Inject + private StartShortTermMobilityDomandeSetGroupsAndVisibility startAccordiInternazionaliDomandeSetGroupsAndVisibility; + @Inject + private RuntimeService runtimeService; + @Inject + private FlowsPdfService flowsPdfService; + @Inject + private FlowsAttachmentService flowsAttachmentService; + @Inject + private ExternalMessageService externalMessageService; + @Inject + private TaskService taskService; + @Inject + private FlowsTaskService flowsTaskService; + @Inject + private ManagementService managementService; + @Inject + private RepositoryService repositoryService; + + + private Expression faseEsecuzione; + + public void restToApplicazioneSTM(DelegateExecution execution, StatoDomandeSTMEnum statoDomanda) { + + // @Value("${cnr.accordi-bilaterali.url}") + // private String urlShortTermMobility; + // @Value("${cnr.accordi-bilaterali.usr}") + // private String usrAccordiBilaterali; + // @Value("${cnr.accordi-bilaterali.psw}") + // private String pswAccordiBilaterali; + Double idDomanda = Double.parseDouble(execution.getVariable("idDomanda").toString()); + Map abilPayload = new HashMap() + { + { + put("idDomanda", idDomanda); + put("stato", statoDomanda.name().toString()); + } + }; + + String url = urlShortTermMobility + pathDomandeShortTermMobility; + externalMessageService.createExternalMessage(url, ExternalMessageVerb.POST, abilPayload, ExternalApplication.ABIL); + } + + + @Override + public void notify(DelegateExecution execution) throws Exception { + + Map attachmentList; + String processInstanceId = execution.getProcessInstanceId(); + String executionId = execution.getId(); + String stato = execution.getCurrentActivityName(); + String sceltaUtente = "start"; + if(execution.getVariable("sceltaUtente") != null) { + sceltaUtente = (String) execution.getVariable("sceltaUtente"); + } + LOGGER.info("ProcessInstanceId: " + processInstanceId); + String faseEsecuzioneValue = "noValue"; + faseEsecuzioneValue = faseEsecuzione.getValue(execution).toString(); + LOGGER.info("-- azioneScelta: " + faseEsecuzioneValue + " con sceltaUtente: " + sceltaUtente); + //CHECK PER ANNULLO FLUSSO + if (execution.getVariableInstance("motivazioneEliminazione") == null) { + switch(faseEsecuzioneValue){ + // START + case "process-start": { + startAccordiInternazionaliDomandeSetGroupsAndVisibility.configuraVariabiliStart(execution); + };break; + // START + case "validazione-start": { + flowsProcessInstanceService.updateSearchTerms(executionId, processInstanceId, stato); + };break; + case "validazione-end": { + //flowsProcessInstanceService.updateSearchTerms(executionId, processInstanceId, stato); + String idDipartimento = execution.getVariable("dipartimentoId").toString(); + String gruppoValutatoreScientificoSTMDipartimento = "valutatoreScientificoDipartimento@" + idDipartimento; + runtimeService.addGroupIdentityLink(execution.getProcessInstanceId(), gruppoValutatoreScientificoSTMDipartimento, PROCESS_VISUALIZER); + execution.setVariable("gruppoValutatoreScientificoSTMDipartimento", gruppoValutatoreScientificoSTMDipartimento); + LOGGER.debug("Imposto i gruppi dipartimento : {} - del flusso {}", idDipartimento, gruppoValutatoreScientificoSTMDipartimento); + // INPUT DEVE PREVEDERE LA DOMANDA PDF - NON GENERO LA DOMANDA + // String nomeFile="domandaShortTermMobility"; + // String labelFile="Domanda"; + // flowsPdfService.makePdf(nomeFile, processInstanceId); + // FlowsAttachment documentoGenerato = runtimeService.getVariable(processInstanceId, nomeFile, FlowsAttachment.class); + // documentoGenerato.setLabel(labelFile); + // flowsAttachmentService.saveAttachmentFuoriTask(processInstanceId, nomeFile, documentoGenerato, null); + };break; + case "modifica-start": { + restToApplicazioneSTM(execution, Enum.StatoDomandeSTMEnum.IN_MODIFICA); + };break; + + case "pre-accettazione-start": { + if(sceltaUtente.equals("Respingi")) { + execution.setVariable(statoFinaleDomanda.name(), Enum.StatoDomandeSTMEnum.RESPINTA.toString()); + restToApplicazioneSTM(execution, Enum.StatoDomandeSTMEnum.RESPINTA); + flowsProcessInstanceService.updateSearchTerms(executionId, processInstanceId, Enum.StatoDomandeSTMEnum.RESPINTA.toString()); + } else { + if(sceltaUtente.equals("Annulla")) { + execution.setVariable(statoFinaleDomanda.name(), Enum.StatoDomandeSTMEnum.ANNULLATA.toString()); + restToApplicazioneSTM(execution, Enum.StatoDomandeSTMEnum.ANNULLATA); + flowsProcessInstanceService.updateSearchTerms(executionId, processInstanceId, Enum.StatoDomandeSTMEnum.ANNULLATA.toString()); + } + else{ + execution.setVariable(statoFinaleDomanda.name(), Enum.StatoDomandeSTMEnum.VALIDATA.toString()); + restToApplicazioneSTM(execution, Enum.StatoDomandeSTMEnum.VALIDATA); + flowsProcessInstanceService.updateSearchTerms(executionId, processInstanceId, Enum.StatoDomandeSTMEnum.VALIDATA.toString()); + } + } + };break; + + // case "endevent-non-validata-start": { + // execution.setVariable(statoFinaleDomanda.name(), Enum.StatoDomandeSTMEnum.RESPINTA); + // restToApplicazioneSTM(execution, Enum.StatoDomandeSTMEnum.RESPINTA); + // flowsProcessInstanceService.updateSearchTerms(executionId, processInstanceId, Enum.StatoDomandeSTMEnum.RESPINTA.toString()); + // };break; + // case "endevent-validata-start": { + // execution.setVariable(statoFinaleDomanda.name(), Enum.StatoDomandeSTMEnum.VALIDATA); + // restToApplicazioneSTM(execution, Enum.StatoDomandeSTMEnum.VALIDATA); + // flowsProcessInstanceService.updateSearchTerms(executionId, processInstanceId, Enum.StatoDomandeSTMEnum.VALIDATA.toString()); + // };break; + // case "endevent-annullata-start": { + // execution.setVariable(statoFinaleDomanda.name(), Enum.StatoDomandeSTMEnum.ANNULLATA); + // restToApplicazioneSTM(execution, Enum.StatoDomandeSTMEnum.ANNULLATA); + // flowsProcessInstanceService.updateSearchTerms(executionId, processInstanceId, Enum.StatoDomandeSTMEnum.ANNULLATA.toString()); + // };break; + // SUBFLUSSO VALIDAZIONE DIRIGENTE + case "validazioneDirigente-end": { + LOGGER.debug("**** validazioneDirigente-end"); + };break; + case "endevent-respinta-start": { + execution.setVariable(statoFinaleDomanda.name(), Enum.StatoDomandeSTMEnum.RESPINTA.toString()); + restToApplicazioneSTM(execution, Enum.StatoDomandeSTMEnum.RESPINTA); + flowsProcessInstanceService.updateSearchTerms(executionId, processInstanceId, Enum.StatoDomandeSTMEnum.RESPINTA.toString()); + };break; + case "endevent-autorizzata-start": { + execution.setVariable(statoFinaleDomanda.name(), Enum.StatoDomandeSTMEnum.AUTORIZZATA.toString()); + restToApplicazioneSTM(execution, Enum.StatoDomandeSTMEnum.AUTORIZZATA); + flowsProcessInstanceService.updateSearchTerms(executionId, processInstanceId, Enum.StatoDomandeSTMEnum.AUTORIZZATA.toString()); + };break; + case "accettazione-start": { + LOGGER.debug("**** accettazione-start"); + };break; + case "accettazione-end": { + LOGGER.debug("**** accettazione-end"); + execution.setVariable("domandaCorrenteAccettataFlag", "false"); + execution.setVariable("tutteDomandeAccettateFlag", "false"); + // int domandaCorrenteAccettata = 0; + if(!sceltaUtente.equals("Respingi")) { + // domandaCorrenteAccettata = 1; + execution.setVariable(statoFinaleDomanda.name(), Enum.StatoDomandeSTMEnum.ACCETTATA.toString()); + execution.setVariable("domandaCorrenteAccettataFlag", "true"); + restToApplicazioneSTM(execution, Enum.StatoDomandeSTMEnum.ACCETTATA); + flowsProcessInstanceService.updateSearchTerms(executionId, processInstanceId, Enum.StatoDomandeSTMEnum.ACCETTATA.toString()); + } + List processinstancesListaDomandeAccettatePerBando = runtimeService.createProcessInstanceQuery() + .processDefinitionKey("short-term-mobility-domande") + .variableValueEquals(statoFinaleDomanda.name(), Enum.StatoDomandeSTMEnum.ACCETTATA.toString()) + .variableValueEquals("idBando", execution.getVariable("idBando")) + .list(); + List processinstancesListaDomandeAttivePerBando = runtimeService.createProcessInstanceQuery() + .processDefinitionKey("short-term-mobility-domande") + .variableValueEquals("idBando", execution.getVariable("idBando")) + .list(); + LOGGER.debug("**** domande bando: {}, nr attive = {} - nr accettate= {} - domanda corrente accettata: {}", execution.getVariable("idBando"), processinstancesListaDomandeAttivePerBando.size(), processinstancesListaDomandeAccettatePerBando.size(), execution.getVariable("domandaCorrenteAccettataFlag").toString()); + + if ((processinstancesListaDomandeAttivePerBando.size() == processinstancesListaDomandeAccettatePerBando.size() + 1) && (execution.getVariable("domandaCorrenteAccettataFlag").toString().equals("true"))) { + execution.setVariable("tutteDomandeAccettateFlag", "true"); + processinstancesListaDomandeAccettatePerBando.forEach(( processInstance) -> { + runtimeService.signal(processInstance.getId()); + LOGGER.info("-- sblocco la processInstance: " + processInstance.getName() + " (" + processInstance.getId() + ") "); + }); + + } + };break; + + + case "pre-valutazione-start": { + LOGGER.debug("**** pre-valutazione-start"); + // if(execution.getVariable("domandaCorrenteAccettataFlag").equals("true")) { + // runtimeService.signal(execution.getProcessInstanceId()); + // LOGGER.info("-- sblocco la Corrente processInstance: " + execution.getProcessBusinessKey() + " (" + execution.getProcessInstanceId() + ") "); + // } + };break; + + case "valutazione-scientifica-start": { + LOGGER.debug("**** valutazione-scientifica-start"); + };break; + + case "valutazione-scientifica-end": { + LOGGER.info("-- valutazione-scientifica: valutazione-scientifica"); + execution.setVariable("domandaCorrenteValutataFlag", "false"); + if(execution.getVariable("sceltaUtente").equals("CambiaDipartimento")) { + String idDipartimento = execution.getVariable("dipartimentoId").toString(); + String gruppoValutatoreScientificoSTMDipartimento = "valutatoreScientificoDipartimento@" + idDipartimento; + runtimeService.addGroupIdentityLink(execution.getProcessInstanceId(), gruppoValutatoreScientificoSTMDipartimento, PROCESS_VISUALIZER); + execution.setVariable("gruppoValutatoreScientificoSTMDipartimento", gruppoValutatoreScientificoSTMDipartimento); + LOGGER.debug("Imposto i gruppi dipartimento : {} - del flusso {}", idDipartimento, gruppoValutatoreScientificoSTMDipartimento); + } else { + execution.setVariable("domandaCorrenteValutataFlag", "true"); + execution.setVariable(statoFinaleDomanda.name(), Enum.StatoDomandeSTMEnum.VALUTATA_SCIENTIFICAMENTE.toString()); + restToApplicazioneSTM(execution, Enum.StatoDomandeSTMEnum.VALUTATA_SCIENTIFICAMENTE); + flowsProcessInstanceService.updateSearchTerms(executionId, processInstanceId, Enum.StatoDomandeSTMEnum.VALUTATA_SCIENTIFICAMENTE.toString()); + //CREAZIONE PDF VALUTAZIONE + String nomeFile="valutazioneShortTermMobility"; + String labelFile="Scheda Valutazione Domanda"; + execution.setVariable("punteggio_totale", (Double.parseDouble(execution.getVariable("punteggio_curriculum").toString().replaceAll(",", ".")) + Double.parseDouble(execution.getVariable("punteggio_patnerIstituzioneStraniera").toString().replaceAll(",", "."))+ Double.parseDouble(execution.getVariable("punteggio_programmaDiRicerca").toString().replaceAll(",", ".")))); + flowsPdfService.makePdf(nomeFile, processInstanceId); + FlowsAttachment documentoGenerato = runtimeService.getVariable(processInstanceId, nomeFile, FlowsAttachment.class); + documentoGenerato.setLabel(labelFile); + flowsAttachmentService.saveAttachmentFuoriTask(processInstanceId, nomeFile, documentoGenerato, null); + // VERIFICA TUTTE LE DOMANDE DI FLUSSI ATTIVI PER QUEL BANDO + List processinstancesListaPerBando = runtimeService.createProcessInstanceQuery() + .processDefinitionKey("short-term-mobility-domande") + .variableValueEquals("idBando", execution.getVariable("idBando")) + .list(); + List processinstancesListaDomandeValutatePerBando = runtimeService.createProcessInstanceQuery() + .processDefinitionKey("short-term-mobility-domande") + .variableValueEquals("idBando", execution.getVariable("idBando")) + .variableValueEquals(statoFinaleDomanda.name(), Enum.StatoDomandeSTMEnum.VALUTATA_SCIENTIFICAMENTE.toString()) + .list(); + + if ((processinstancesListaPerBando.size() == processinstancesListaDomandeValutatePerBando.size() + 1) && (execution.getVariable("domandaCorrenteValutataFlag").toString().equals("true"))) { + //START FLUSSO BANDI + // Creazione flusso bando se non presente la presenza del flusso bando + + List processinstancesBandiPerBando = runtimeService.createProcessInstanceQuery() + .processDefinitionKey("short-term-mobility-bandi") + .variableValueEquals("idBando", execution.getVariable("idBando")) + .list(); + if (processinstancesBandiPerBando.size() == 0) + { + String processDefinitionId = repositoryService.createProcessDefinitionQuery().processDefinitionKeyLike("short-term-mobility-bandi").orderByProcessDefinitionVersion().desc().list().get(0).getId(); + //START del flusso bando + Map data = new HashMap<>(); + data.put(Enum.VariableEnum.titolo.name(), execution.getVariable("bando")); + data.put(Enum.VariableEnum.descrizione.name(), execution.getVariable("shortTermMobilityName")); + data.put(Enum.VariableEnum.initiator.name(), "app.scrivaniadigitale"); + data.put("idBando", execution.getVariable("idBando")); + data.put("processDefinitionId", processDefinitionId); + data.put(initiator.name(), "app.scrivaniadigitale"); + + LOGGER.info("-- EFFETTUO START FLUSSO short-term-mobility-bandi CON titolo: " + data.get("titolo") + " descrizione" + data.get("descrizione") + " initiator " + data.get("initiator") + " idBando" + data.get("idBando") ); + + flowsTaskService.startProcessInstance(processDefinitionId, data); + } else { + // Aziona il receive task "elenco-domande" + LOGGER.info("-- Bando già avviato: " + processinstancesBandiPerBando.get(0).getBusinessKey() ); + } + } + } + };break; + //TIMERS + case "timer-chiusura-bando-end": { + int nrNotifiche = 1; + if(execution.getVariable("numeroNotificheTimer2") != null) { + nrNotifiche = (Integer.parseInt(execution.getVariable("numeroNotificheTimer2").toString()) + 1); + } + execution.setVariable("numeroNotificheTimer2", nrNotifiche); + LOGGER.debug("Timer2 nrNotifiche: {}", nrNotifiche); + };break; + + // DEFAULT + default: { + };break; + + } + } else { + restToApplicazioneSTM(execution, Enum.StatoDomandeSTMEnum.CANCELLATA); + List timerAttivi = managementService.createJobQuery().timers().processInstanceId(processInstanceId).list(); + timerAttivi.forEach(singoloTimer -> { + if (singoloTimer.getId() != null) { + LOGGER.debug("cancello il timer: {}", singoloTimer.getId()); + managementService.deleteJob(singoloTimer.getId()); + } + }); + } + } +} diff --git a/src/main/java/it/cnr/si/flows/ng/listeners/cnr/shortTermMobilityDomande/StartShortTermMobilityDomandeSetGroupsAndVisibility.java b/src/main/java/it/cnr/si/flows/ng/listeners/cnr/shortTermMobilityDomande/StartShortTermMobilityDomandeSetGroupsAndVisibility.java new file mode 100644 index 000000000..11ba023a9 --- /dev/null +++ b/src/main/java/it/cnr/si/flows/ng/listeners/cnr/shortTermMobilityDomande/StartShortTermMobilityDomandeSetGroupsAndVisibility.java @@ -0,0 +1,144 @@ +package it.cnr.si.flows.ng.listeners.cnr.shortTermMobilityDomande; + + + +import it.cnr.si.flows.ng.exception.UnexpectedResultException; +import it.cnr.si.flows.ng.repository.SetTimerDuedateCmd; +import it.cnr.si.flows.ng.service.AceBridgeService; +import it.cnr.si.flows.ng.service.FlowsTimerService; +import it.cnr.si.flows.ng.service.SiperService; +import it.cnr.si.flows.ng.utils.Enum; +import it.cnr.si.service.AceService; +import it.cnr.si.service.dto.anagrafica.letture.EntitaOrganizzativaWebDto; + +import org.activiti.engine.ManagementService; +import org.activiti.engine.RuntimeService; +import org.activiti.engine.delegate.DelegateExecution; +import org.activiti.engine.runtime.Job; +import org.h2.util.New; +import org.joda.time.DateTime; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.context.annotation.Profile; +import org.springframework.stereotype.Component; +import org.springframework.stereotype.Service; + +import feign.FeignException; + +import javax.inject.Inject; + +import java.io.IOException; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.util.Date; +import java.util.List; +import java.util.TimeZone; + +import static it.cnr.si.flows.ng.utils.Utils.PROCESS_VISUALIZER; + +@Component +@Profile("cnr") + +@Service +public class StartShortTermMobilityDomandeSetGroupsAndVisibility { + private static final Logger LOGGER = LoggerFactory.getLogger(StartShortTermMobilityDomandeSetGroupsAndVisibility.class); + + @Inject + private RuntimeService runtimeService; + @Inject + private AceBridgeService aceBridgeService; + @Inject + private AceService aceService; + @Inject + private SiperService siperService; + @Inject + private ManagementService managementService; + @Inject + private FlowsTimerService flowsTimerService; + + public void configuraVariabiliStart(DelegateExecution execution) throws IOException, ParseException { + + String initiator = (String) execution.getVariable(Enum.VariableEnum.initiator.name()); + //SET TIMER +// LOGGER.debug("scadenzaPresentazioneDomande {}", execution.getVariable("scadenzaPresentazioneDomande").toString()); + String scadenzaPresentazioneDomande = execution.getVariable("scadenzaPresentazioneDomande", String.class); + execution.setVariable("statoFinaleDomanda", Enum.StatoDomandeSTMEnum.APERTA.toString()); + + + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss"); + Date newTimerDate = sdf.parse(scadenzaPresentazioneDomande); + ////SimpleDateFormat formatter=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + //Date newTimerDate = formatter.parse(execution.getVariable("scadenzaPresentazioneDomande").toString().substring(0, 19)); + //LocalDateTime newTimerLocalDate = LocalDateTime.parse( execution.getVariable("scadenzaPresentazioneDomande").toString() ) ; + //Date newTimerDate = Date.from(newTimerLocalDate.atZone(ZoneId.systemDefault()).toInstant()); + + //2011-03-11T12:13:14 + //2019-09-21T01:12:00.000Z + String timerId = "timerChiusuraBando"; + + List jobTimerChiusuraBando = flowsTimerService.getTimer(execution.getProcessInstanceId(),timerId); + if(jobTimerChiusuraBando.size() > 0){ + LOGGER.info("------ DATA: {} per timer: {} " + jobTimerChiusuraBando.get(0).getDuedate(), timerId); + managementService.executeCommand(new SetTimerDuedateCmd(jobTimerChiusuraBando.get(0).getId(), newTimerDate)); + } else { + LOGGER.info("------ " + timerId + ": TIMER SCADUTO: "); + } + + + String proponente = execution.getVariable("userNameProponente", String.class); + // LOGGER.info("L'utente {} sta avviando il flusso {} (con titolo {})", initiator, execution.getId(), execution.getVariable(Enum.VariableEnum.title.name())); + LOGGER.info("L'utente {} sta avviando il flusso {} (con titolo {})", initiator, execution.getId(), execution.getVariable("title")); + //Integer cdsuoAppartenenzaUtente = aceBridgeService.getEntitaOrganizzativaDellUtente(proponente.toString()).getId(); + String cdsuoAppartenenzaUtente = null; + try { + cdsuoAppartenenzaUtente = aceBridgeService.getAfferenzaUtente(proponente.toString()).getCdsuo(); + } catch(UnexpectedResultException | FeignException e) { + cdsuoAppartenenzaUtente = siperService.getCDSUOAfferenzaUtente(proponente.toString()).get("codice_uo").toString(); + } + finally { + LOGGER.debug("getDirettoreCDSUO FUNZIONA "); + Object insdipResponsabileUo = siperService.getDirettoreCDSUO(cdsuoAppartenenzaUtente).get(0).get("codice_sede"); + String usernameDirettore = siperService.getDirettoreCDSUO(cdsuoAppartenenzaUtente).get(0).get("uid").toString(); + EntitaOrganizzativaWebDto entitaOrganizzativaDirUo = aceService.entitaOrganizzativaFindByTerm(insdipResponsabileUo.toString()).get(0); + Integer idEntitaorganizzativaResponsabileUtente = entitaOrganizzativaDirUo.getId(); + String siglaEntitaorganizzativaResponsabileUtente = entitaOrganizzativaDirUo.getSigla().toString(); + String denominazioneEntitaorganizzativaResponsabileUtente = entitaOrganizzativaDirUo.getDenominazione().toString(); + String cdsuoEntitaorganizzativaResponsabileUtente = entitaOrganizzativaDirUo.getCdsuo().toString(); + String idnsipEntitaorganizzativaResponsabileUtente = entitaOrganizzativaDirUo.getIdnsip().toString(); + LOGGER.info("L'utente {} ha come direttore {} della struttura {} ({}) [ID: {}] [CDSUO: {}] [IDNSIP: {}]", proponente.toString(), usernameDirettore, denominazioneEntitaorganizzativaResponsabileUtente, siglaEntitaorganizzativaResponsabileUtente, idEntitaorganizzativaResponsabileUtente, cdsuoEntitaorganizzativaResponsabileUtente, idnsipEntitaorganizzativaResponsabileUtente); + + String gruppoValidatoriShortTermMobility = "validatoriShortTermMobility@0000"; + String gruppoUfficioProtocollo = "ufficioProtocolloShortTermMobility@0000"; + String gruppoValutatoreScientificoSTMDipartimento = "valutatoreScientificoSTMDipartimento@0000"; + String gruppoResponsabileAccordiInternazionali = "responsabileAccordiInternazionali@0000"; + //DA CAMBIARE - ricavando il direttore della persona che afferisce alla sua struttura + String gruppoDirigenteProponente = "responsabile-struttura@" + idEntitaorganizzativaResponsabileUtente; + + String applicazioneSTM = "app.abil"; + String applicazioneScrivaniaDigitale = "app.scrivaniadigitale"; + + LOGGER.debug("Imposto i gruppi del flusso {}, {}, {}", gruppoValidatoriShortTermMobility, gruppoResponsabileAccordiInternazionali, gruppoUfficioProtocollo); + LOGGER.debug("Imposto i gruppi del flusso {}, {}, {}", gruppoValidatoriShortTermMobility, gruppoResponsabileAccordiInternazionali, gruppoUfficioProtocollo); + + runtimeService.addGroupIdentityLink(execution.getProcessInstanceId(), gruppoValidatoriShortTermMobility, PROCESS_VISUALIZER); + runtimeService.addGroupIdentityLink(execution.getProcessInstanceId(), gruppoResponsabileAccordiInternazionali, PROCESS_VISUALIZER); + runtimeService.addGroupIdentityLink(execution.getProcessInstanceId(), applicazioneSTM, PROCESS_VISUALIZER); + runtimeService.addGroupIdentityLink(execution.getProcessInstanceId(), gruppoUfficioProtocollo, PROCESS_VISUALIZER); + runtimeService.addGroupIdentityLink(execution.getProcessInstanceId(), gruppoDirigenteProponente, PROCESS_VISUALIZER); + runtimeService.addGroupIdentityLink(execution.getProcessInstanceId(), gruppoValutatoreScientificoSTMDipartimento, PROCESS_VISUALIZER); + runtimeService.addGroupIdentityLink(execution.getProcessInstanceId(), applicazioneScrivaniaDigitale, PROCESS_VISUALIZER); + + execution.setVariable("strutturaValutazioneDirigente", idEntitaorganizzativaResponsabileUtente + "-" + denominazioneEntitaorganizzativaResponsabileUtente); + execution.setVariable("gruppoValidatoriShortTermMobility", gruppoValidatoriShortTermMobility); + execution.setVariable("gruppoResponsabileAccordiInternazionali", gruppoResponsabileAccordiInternazionali); + execution.setVariable("gruppoUfficioProtocollo", gruppoUfficioProtocollo); + execution.setVariable("applicazioneSTM", applicazioneSTM); + execution.setVariable("gruppoDirigenteProponente", gruppoDirigenteProponente); + execution.setVariable("gruppoValutatoreScientificoSTMDipartimento", gruppoValutatoreScientificoSTMDipartimento); + execution.setVariable("applicazioneScrivaniaDigitale", applicazioneScrivaniaDigitale); + execution.setVariable("cdsuoProponente", cdsuoAppartenenzaUtente); + } + } +} \ No newline at end of file diff --git a/src/main/java/it/cnr/si/flows/ng/listeners/oiv/ManageProcessIscrizioneElencoOiv.java b/src/main/java/it/cnr/si/flows/ng/listeners/oiv/ManageProcessIscrizioneElencoOiv.java index 659fa90a6..484b77e8d 100644 --- a/src/main/java/it/cnr/si/flows/ng/listeners/oiv/ManageProcessIscrizioneElencoOiv.java +++ b/src/main/java/it/cnr/si/flows/ng/listeners/oiv/ManageProcessIscrizioneElencoOiv.java @@ -33,6 +33,7 @@ import java.util.stream.Stream; import static it.cnr.si.flows.ng.utils.Enum.PdfType.*; +import static it.cnr.si.flows.ng.utils.Enum.VariableEnum.statoFinaleDomanda; @Component @@ -41,7 +42,6 @@ public class ManageProcessIscrizioneElencoOiv implements ExecutionListener { private static final long serialVersionUID = 686169707042367215L; private static final Logger LOGGER = LoggerFactory.getLogger(ManageProcessIscrizioneElencoOiv.class); - public static final String STATO_FINALE_DOMANDA = "statoFinaleDomanda"; public static final String TEMPI_PROCEDIMENTALI_DOMANDA = "tempiProcedimentaliDomanda"; public static final String TEMPI_SOCCORSO_ISTRUTTORIO = "tempiSoccorsoIstruttorio"; public static final String TEMPI_PREAVVISO_RIGETTO = "tempiPreavvisoRigetto"; @@ -243,7 +243,7 @@ public void notify(DelegateExecution execution) throws Exception { } break; case END_IMPROCEDIBILE: { - execution.setVariable(STATO_FINALE_DOMANDA, "IMPROCEDIBILE"); + execution.setVariable(statoFinaleDomanda.name(), "IMPROCEDIBILE"); final Pair pair = createOivPdf.creaPdfOiv(execution, improcedibile.name()); comunicazioni( Optional.ofNullable(execution.getVariable(ID_DOMANDA)) @@ -260,12 +260,12 @@ public void notify(DelegateExecution execution) throws Exception { .filter(String.class::isInstance) .map(String.class::cast) .orElse(null))); - execution.setVariable(STATO_FINALE_DOMANDA, "DOMANDA APPROVATA"); + execution.setVariable(statoFinaleDomanda.name(), "DOMANDA APPROVATA"); } ; break; case END_RESPINTA: { - execution.setVariable(STATO_FINALE_DOMANDA, "RESPINTA"); + execution.setVariable(statoFinaleDomanda.name(), "RESPINTA"); } ; break; diff --git a/src/main/java/it/cnr/si/flows/ng/resource/FlowsLookupResource.java b/src/main/java/it/cnr/si/flows/ng/resource/FlowsLookupResource.java index 4aa95658a..7091f3916 100644 --- a/src/main/java/it/cnr/si/flows/ng/resource/FlowsLookupResource.java +++ b/src/main/java/it/cnr/si/flows/ng/resource/FlowsLookupResource.java @@ -4,6 +4,7 @@ import it.cnr.si.flows.ng.ldap.LdapPersonToSearchResultMapper; import it.cnr.si.flows.ng.service.AceBridgeService; import it.cnr.si.flows.ng.service.SiperService; +import it.cnr.si.flows.ng.utils.SecurityUtils; import it.cnr.si.flows.ng.utils.Utils; import it.cnr.si.security.AuthoritiesConstants; import it.cnr.si.service.FlowsLdapAccountService; @@ -28,6 +29,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; @RestController @RequestMapping("api/lookup") @@ -39,7 +41,7 @@ public class FlowsLookupResource { @Inject private LdapTemplate ldapTemplate; @Inject - private AceBridgeService aceService; + private AceBridgeService aceBridgeService; @Inject private ManagementService managementService; @Inject @@ -54,31 +56,50 @@ public class FlowsLookupResource { @RequestMapping(value = "/ace/user/{username:.+}", method = RequestMethod.GET) @Secured(AuthoritiesConstants.ADMIN) public List getAce(@PathVariable String username) { - return aceService.getAceGroupsForUser(username); + return aceBridgeService.getAceGroupsForUser(username); } @RequestMapping(value = "/ace/usersingroup/{groupname:.+}", method = RequestMethod.GET) @Secured(AuthoritiesConstants.ADMIN) public List getAceGroup(@PathVariable String groupname) { - return aceService.getUsersInAceGroup(groupname); + return aceBridgeService.getUsersInAceGroup(groupname); } @RequestMapping(value = "/ace/groupdetail/{id:.+}", method = RequestMethod.GET) @Secured(AuthoritiesConstants.ADMIN) public String getAceGroupDetail(@PathVariable Integer id) { - return aceService.getNomeStruturaById(id); + return aceBridgeService.getNomeStruturaById(id); } @RequestMapping(value = "/ace/uo/{id:.+}", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) @Secured(AuthoritiesConstants.USER) public ResponseEntity getUoById(@PathVariable Integer id) { - EntitaOrganizzativaWebDto s = aceService.getUoById(id); + EntitaOrganizzativaWebDto s = aceBridgeService.getUoById(id); Utils.SearchResult r = new Utils.SearchResult(s.getId().toString(), s.getCdsuo() +" - "+ s.getDenominazione()); return ResponseEntity.ok(r); } + @RequestMapping(value = "/ace/user/cdsuoabilitate", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) + @Secured(AuthoritiesConstants.USER) + public ResponseEntity> getCdsUoAbilitate() { + + List CDSUOs = SecurityUtils.getCurrentUserAuthorities().stream() + .map(Utils::removeLeadingRole) + .filter(role -> role.startsWith("staffAmministrativo")) + .map(role -> role.split("@")[1]) + .map(idEo -> { + Integer id = Integer.parseInt(idEo); + return aceBridgeService.getStrutturaById(id); + }) + .map(eo -> { + return new Utils.SearchResult(String.valueOf(eo.getId()), eo.getCdsuo() +" - "+ eo.getDenominazioneBreve()); + }).collect(Collectors.toList()); + + return ResponseEntity.ok(CDSUOs); + } + @RequestMapping(value = "/ldap/user/{username:.+}", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) @Secured(AuthoritiesConstants.USER) public ResponseEntity getUserByUsername(@PathVariable String username) { @@ -114,8 +135,8 @@ public ResponseEntity>> getResponsabileSede(@PathVariab public ResponseEntity runCron() { log.info("Running crons"); - extenalMessageSender.sendMessagesDo(); - extenalMessageSender.sendErrorMessagesDo(); + extenalMessageSender.sendMessages(); + extenalMessageSender.sendErrorMessages(); return ResponseEntity.ok().build(); } diff --git a/src/main/java/it/cnr/si/flows/ng/resource/FlowsProcessInstanceResource.java b/src/main/java/it/cnr/si/flows/ng/resource/FlowsProcessInstanceResource.java index 34115abda..7f575c635 100644 --- a/src/main/java/it/cnr/si/flows/ng/resource/FlowsProcessInstanceResource.java +++ b/src/main/java/it/cnr/si/flows/ng/resource/FlowsProcessInstanceResource.java @@ -1,9 +1,9 @@ package it.cnr.si.flows.ng.resource; import com.codahale.metrics.annotation.Timed; -import it.cnr.si.domain.View; import it.cnr.si.flows.ng.dto.FlowsAttachment; import it.cnr.si.flows.ng.service.FlowsProcessInstanceService; +import it.cnr.si.flows.ng.utils.Enum; import it.cnr.si.flows.ng.utils.Utils; import it.cnr.si.repository.ViewRepository; import it.cnr.si.security.AuthoritiesConstants; @@ -14,6 +14,7 @@ import org.activiti.engine.history.HistoricProcessInstance; import org.activiti.engine.history.HistoricTaskInstance; import org.activiti.engine.history.HistoricVariableInstance; +import org.activiti.engine.impl.persistence.entity.HistoricDetailVariableInstanceUpdateEntity; import org.activiti.rest.common.api.DataResponse; import org.activiti.rest.service.api.RestResponseFactory; import org.activiti.rest.service.api.runtime.process.ProcessInstanceActionRequest; @@ -21,6 +22,7 @@ import org.activiti.rest.service.api.runtime.process.ProcessInstanceResponse; import org.codehaus.jackson.map.ObjectMapper; import org.json.JSONArray; +import org.json.JSONObject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.core.env.Environment; @@ -36,462 +38,431 @@ import javax.servlet.http.HttpServletRequest; import javax.websocket.server.PathParam; import java.io.IOException; -import java.text.DateFormat; -import java.text.ParseException; -import java.text.SimpleDateFormat; import java.util.*; import java.util.Map.Entry; import java.util.stream.Collectors; -import static it.cnr.si.flows.ng.utils.Enum.ProcessDefinitionEnum.acquisti; import static it.cnr.si.flows.ng.utils.Enum.Stato.PubblicatoTrasparenza; import static it.cnr.si.flows.ng.utils.Enum.Stato.PubblicatoUrp; +import static it.cnr.si.flows.ng.utils.Enum.VariableEnum.statoFinaleDomanda; @RestController @RequestMapping("api/processInstances") public class FlowsProcessInstanceResource { - private static final Logger LOGGER = LoggerFactory.getLogger(FlowsProcessInstanceResource.class); - public static final String EXPORT_TRASPARENZA = "export-trasparenza"; - public static final String EXPORT_URP = "export-urp"; - public static final String STATO_FINALE_DOMANDA = "statoFinaleDomanda"; - - - @Inject - private RestResponseFactory restResponseFactory; - @Inject - private HistoryService historyService; - @Inject - private ProcessInstanceResource processInstanceResource; - @Inject - private RuntimeService runtimeService; - @Inject - private FlowsProcessInstanceService flowsProcessInstanceService; - @Inject - private ViewRepository viewRepository; - @Inject - private UserDetailsService flowsUserDetailsService; - @Inject - private PermissionEvaluatorImpl permissionEvaluator; - @Inject - private Utils utils; - @Inject - private Environment env; - - - - /** - * Restituisce le Processs Instances avviate dall'utente loggato - * - * @param firstResult il primo elemento da restituire - * @param maxResults l`ultimo elemento da restituire - * @param order l`ordine di presentazione dei risultati (DESC/ASC) - * @param active provessi attivi/terminati - * @param processDefinitionKey the process definition key - * @param params i paramnetri della ricerca - * @return the my processes - */ - @PostMapping(value = "/myProcessInstances") - @Secured(AuthoritiesConstants.USER) - @Timed - public ResponseEntity getMyProcessInstances( - @PathParam("firstResult") int firstResult, - @PathParam("maxResults") int maxResults, - @PathParam("order") String order, - @PathParam("active") boolean active, - @PathParam("processDefinitionKey") String processDefinitionKey, - @RequestBody Map params) { - - params.put("initiator", SecurityUtils.getCurrentUserLogin()); - DataResponse response = flowsProcessInstanceService.search(params, processDefinitionKey, active, order, firstResult, maxResults, true); - - return new ResponseEntity<>(response, HttpStatus.OK); - } - - - // TODO questo metodo restituisce ResponseEntity di due tipi diversi - HistoricProcessInstance e Map - @GetMapping(value = "", produces = MediaType.APPLICATION_JSON_VALUE) - @Secured(AuthoritiesConstants.USER) - @PreAuthorize("hasRole('ROLE_ADMIN') OR @permissionEvaluator.canVisualize(#processInstanceId, @flowsUserDetailsService)") - @Timed - public ResponseEntity getProcessInstanceById( - @RequestParam("processInstanceId") String processInstanceId, - @RequestParam(value = "detail", required = false, defaultValue = "true") Boolean detail) { - if (!detail) { - return new ResponseEntity(flowsProcessInstanceService.getProcessInstance(processInstanceId), HttpStatus.OK); - } else { - return new ResponseEntity(flowsProcessInstanceService.getProcessInstanceWithDetails(processInstanceId), HttpStatus.OK); - } - } - - - - @GetMapping(value = "/currentTask", produces = MediaType.APPLICATION_JSON_VALUE) - @Secured(AuthoritiesConstants.USER) - @PreAuthorize("hasRole('ROLE_ADMIN') OR @permissionEvaluator.canVisualize(#processInstanceId, @flowsUserDetailsService)") - @Timed - public ResponseEntity getCurrentTaskProcessInstanceById(@RequestParam("processInstanceId") String processInstanceId) { - HistoricTaskInstance result = flowsProcessInstanceService.getCurrentTaskOfProcessInstance(processInstanceId); - - return new ResponseEntity(result, HttpStatus.OK); - } - - - - @DeleteMapping(value = "deleteProcessInstance", produces = MediaType.APPLICATION_JSON_VALUE) - @Secured(AuthoritiesConstants.ADMIN) - @Timed - public ResponseEntity delete( - @RequestParam(value = "processInstanceId", required = true) String processInstanceId, - @RequestParam(value = "deleteReason", required = true) String deleteReason) { - - runtimeService.setVariable(processInstanceId, STATO_FINALE_DOMANDA, "ELIMINATO"); - runtimeService.setVariable(processInstanceId, "motivazioneEliminazione", deleteReason); - flowsProcessInstanceService.updateSearchTerms(flowsProcessInstanceService.getCurrentTaskOfProcessInstance(processInstanceId).getExecutionId(), processInstanceId, "ELIMINATO"); - - runtimeService.deleteProcessInstance(processInstanceId, deleteReason); - return new ResponseEntity(HttpStatus.OK); - } - - // TODO ??? - @DeleteMapping(value = "suspendProcessInstance", produces = MediaType.APPLICATION_JSON_VALUE) - @PreAuthorize("hasRole('ROLE_ADMIN') || @permissionEvaluator.isResponsabile(#taskId, #processInstanceId, @flowsUserDetailsService)") - @Timed - public ProcessInstanceResponse suspend( - HttpServletRequest request, - @RequestParam(value = "processInstanceId", required = true) String processInstanceId) { - ProcessInstanceActionRequest action = new ProcessInstanceActionRequest(); - action.setAction(ProcessInstanceActionRequest.ACTION_SUSPEND); - return processInstanceResource.performProcessInstanceAction(processInstanceId, action, request); - } - - - - @PostMapping(value = "/variable", produces = MediaType.APPLICATION_JSON_VALUE) - @Timed - @Secured(AuthoritiesConstants.ADMIN) - public ResponseEntity setVariable( - @RequestParam("processInstanceId") String processInstanceId, - @RequestParam("variableName") String variableName, - @RequestParam("value") String value) { - runtimeService.setVariable(processInstanceId, variableName, value); - return ResponseEntity.ok().build(); - } - - - - /** - * Restituisce l'istanza della variabile della Process Instance - * - * @param processInstanceId il process instance id della ProcessInstance di cui si vuole "recuperare la variabile - * @param variableName il nome della variable - * @return la variableInstance - */ - @GetMapping(value = "/variable", produces = MediaType.APPLICATION_JSON_VALUE) - @Timed - @Secured(AuthoritiesConstants.ADMIN) - public ResponseEntity getVariable( - @RequestParam("processInstanceId") String processInstanceId, - @RequestParam("variableName") String variableName) { - - return new ResponseEntity( - historyService.createHistoricVariableInstanceQuery() - .processInstanceId(processInstanceId) - .variableName(variableName) - .list() - .stream() - .sorted((a, b) -> b.getLastUpdatedTime().compareTo(a.getLastUpdatedTime()) ) - .findFirst().orElse(null), - HttpStatus.OK); - } - - - /** - * Gets process instances for trasparenza. - * - * @param processDefinition la process definition (es; "acquisti") - * @param startYear anno di inizio dell`intervallo temporale - * @param endYear anno di fine dell`intervallo temporale - * @param firstResult il primo risultato che si vuole recuperare - * @param maxResults il numero (massimo) di risultati che si vuole recuperare - * @param order l`ordine (ASC o DESC) in base alla data di start del flusso (non richiesto, può anche essere nullo) - * @return le process instances da esportare in trasparenza - * @throws ParseException the parse exception - */ - @PostMapping(value = "/getProcessInstancesForTrasparenza", produces = MediaType.APPLICATION_JSON_VALUE) - @Secured(AuthoritiesConstants.ADMIN) - @PreAuthorize("hasRole('ROLE_applicazione-portalecnr@0000')") - @Timed - public ResponseEntity>> getProcessInstancesForTrasparenza( - @RequestParam("processDefinition") String processDefinition, - @RequestParam("startYear") int startYear, - @RequestParam("endYear") int endYear, - @RequestParam("firstResult") int firstResult, - @RequestParam("maxResults") int maxResults, - @RequestParam(name = "order", required = false) String order) throws ParseException { - - DateFormat formatoData = new SimpleDateFormat("dd-MM-yyyy"); - List historicProcessInstances = - flowsProcessInstanceService.getPIForExternalServices(processDefinition, - formatoData.parse("01-01-" + startYear), - formatoData.parse("31-12-" + endYear), - firstResult, maxResults, order); - return new ResponseEntity<>(getMappedPI(processDefinition, historicProcessInstances, EXPORT_TRASPARENZA), HttpStatus.OK); - } - - - @PostMapping(value = "/getProcessInstancesForURP", produces = MediaType.APPLICATION_JSON_VALUE) - @Secured(AuthoritiesConstants.ADMIN) - @PreAuthorize("hasRole('ROLE_applicazione-portalecnr@0000')") - @Timed - public ResponseEntity>> getProcessInstancesForURP( - @RequestParam("processDefinition") String processDefinition, - @RequestParam("startYear") int startYear, - @RequestParam("endYear") int endYear, - @RequestParam("firstResult") int firstResult, - @RequestParam("maxResults") int maxResults, - @RequestParam(name = "order", required = false) String order) throws ParseException { - - DateFormat formatoData = new SimpleDateFormat("dd-MM-yyyy"); - List historicProcessInstances = - flowsProcessInstanceService.getPIForExternalServices(processDefinition, - formatoData.parse("01-01-" + startYear), - formatoData.parse("31-12-" + endYear), - firstResult, maxResults, order); - return new ResponseEntity<>(getMappedPI(processDefinition, historicProcessInstances, EXPORT_URP), HttpStatus.OK); - } - - - - @PostMapping(value = "/getProcessInstancesForCigs", produces = MediaType.APPLICATION_JSON_VALUE) - @Secured(AuthoritiesConstants.ADMIN) - @PreAuthorize("hasRole('ROLE_applicazione-portalecnr@0000')") - @Timed - public ResponseEntity>> getProcessInstancesForCigs( - @RequestParam("cigs") String cigs) { - - List cigsList = new ArrayList(Arrays.asList(cigs.split(","))); - - List exportTrasparenza = new ArrayList<>(); - - List historicProcessInstances = null; - List> mappedProcessInstances = null; - boolean mappaFlag = false; - - for (int i = 0; i < cigsList.size(); i++) { - String currentCig = cigsList.get(i); - historicProcessInstances = historyService.createHistoricProcessInstanceQuery() - .variableValueEquals("cig", currentCig) - .includeProcessVariables() - .list(); - - - View trasparenza = viewRepository.getViewByProcessidType(acquisti.getValue(), EXPORT_TRASPARENZA); - String view = trasparenza.getView(); - JSONArray fields = new JSONArray(view); - for (int j = 0; j < fields.length(); j++) { - exportTrasparenza.add(fields.getString(j)); - } - - List> mappedProcessInstancesNew = historicProcessInstances.stream() - .map(instance -> trasformaVariabiliPerTrasparenza(instance, exportTrasparenza)) - .collect(Collectors.toList()); - - if (!mappaFlag) { - mappedProcessInstances = mappedProcessInstancesNew; - mappaFlag = true; - } else { - mappedProcessInstances.addAll(mappedProcessInstancesNew); - } - } - - return new ResponseEntity<>(mappedProcessInstances, HttpStatus.OK); - } - - - - @PostMapping(value = "/getProcessInstancesbyProcessInstanceIds", produces = MediaType.APPLICATION_JSON_VALUE) - @Secured(AuthoritiesConstants.ADMIN) - @PreAuthorize("hasRole('ROLE_applicazione-portalecnr@0000')") - @Timed - public ResponseEntity>> getProcessInstancesbyProcessInstanceIds( - @RequestParam("processInstanceIds") String processInstanceIds) { - - Set processInstanceIdsList = new HashSet(Arrays.asList(processInstanceIds.split(","))); - - List exportTrasparenza = new ArrayList<>(); - - List historicProcessInstances = null; - List> mappedProcessInstances = null; - - historicProcessInstances = historyService.createHistoricProcessInstanceQuery() - .processInstanceIds(processInstanceIdsList) - .includeProcessVariables() - .list(); - - - View trasparenza = viewRepository.getViewByProcessidType(acquisti.getValue(), EXPORT_TRASPARENZA); - String view = trasparenza.getView(); - JSONArray fields = new JSONArray(view); - for (int j = 0; j < fields.length(); j++) { - exportTrasparenza.add(fields.getString(j)); - } - - mappedProcessInstances = historicProcessInstances.stream() - .map(instance -> trasformaVariabiliPerTrasparenza(instance, exportTrasparenza)) - .collect(Collectors.toList()); - - return new ResponseEntity<>(mappedProcessInstances, HttpStatus.OK); - } - - - - @PostMapping(value = "/identityLinks", produces = MediaType.APPLICATION_JSON_VALUE) - @Timed - @Secured(AuthoritiesConstants.ADMIN) - public ResponseEntity setIdentityLink( - @RequestParam("processInstanceId") String processInstanceId, - @RequestParam("identityLinkType") String identityLinkType, - @RequestParam(value = "groupId", required = false) String groupId, - @RequestParam(value = "userId", required = false) String userId) { - - if (groupId != null && !groupId.isEmpty()) { - LOGGER.info("Aggiunta IdentityLink - Pi: {}, groupId: {}, type: {}", processInstanceId, groupId, identityLinkType); - runtimeService.addGroupIdentityLink(processInstanceId, groupId, identityLinkType); - } else { - if (userId != null && !userId.isEmpty()){ - LOGGER.info("Aggiunta IdentityLink - Pi: {}, userId: {}, type: {}", processInstanceId, userId, identityLinkType); - runtimeService.addUserIdentityLink(processInstanceId,userId,identityLinkType); - } - } - return ResponseEntity.ok().build(); - } - - - - @DeleteMapping(value = "/identityLinks", produces = MediaType.APPLICATION_JSON_VALUE) - @Timed - @Secured(AuthoritiesConstants.ADMIN) - public ResponseEntity deleteIdentityLink( - @RequestParam("processInstanceId") String processInstanceId, - @RequestParam("identityLinkType") String identityLinkType, - @RequestParam(value = "groupId", required=false) String groupId, - @RequestParam(value = "userId", required=false) String userId) { - - if(groupId != null && !groupId.isEmpty()) { - LOGGER.info("Cancellazione IdentityLink - Pi: {}, groupId: {}, type: {}", processInstanceId, groupId, identityLinkType); - runtimeService.deleteGroupIdentityLink(processInstanceId, groupId, identityLinkType); - }else{ - if(userId != null && !userId.isEmpty()) { - LOGGER.info("Cancellazione IdentityLink - Pi: {}, userId: {}, type: {}", processInstanceId, userId, identityLinkType); - runtimeService.deleteUserIdentityLink(processInstanceId, userId, identityLinkType); - } - } - return ResponseEntity.ok().build(); - } - - - private static Object mapVariable(HistoricProcessInstance instance, String field) { - if (instance.getProcessVariables().get(field) == null) - return null; - // todo: metodo di Martin da scrivere meglio(doppio return e catch vuoti)? - if (field.endsWith("_json")) { - try { - return new ObjectMapper().readValue((String) instance.getProcessVariables().get(field), List.class); - } catch (IOException e) { - } - try { - return new ObjectMapper().readValue((String) instance.getProcessVariables().get(field), Map.class); - } catch (IOException e) { - } - } - return instance.getProcessVariables().get(field); - } - - - private List> getDocumentiPubblicabiliTrasparenza(HistoricProcessInstance instance) { - List> documentiPubblicabili = new ArrayList<>(); - for (Entry entry : instance.getProcessVariables().entrySet()) { - String key = entry.getKey(); - Object value = entry.getValue(); - - if (value instanceof FlowsAttachment) { - FlowsAttachment attachment = (FlowsAttachment) value; - if (attachment.getStati().contains(PubblicatoTrasparenza)) { - - Map metadatiDocumento = new HashMap<>(); - metadatiDocumento.put("filename", attachment.getFilename()); - metadatiDocumento.put("name", attachment.getName()); - metadatiDocumento.put("label", attachment.getLabel()); - metadatiDocumento.put("key", attachment.getUrl()); - metadatiDocumento.put("path", attachment.getPath()); - metadatiDocumento.put("download", env.getProperty("repository.base.url") + "d/a/workspace/SpacesStore/" + attachment.getUrl().split(";")[0] + "/" + attachment.getName()); - documentiPubblicabili.add(metadatiDocumento); - } - } - } - return documentiPubblicabili; - } - - - private List> getDocumentiPubblicabiliURP(HistoricProcessInstance instance) { - List> documentiPubblicabili = new ArrayList<>(); - for (Entry entry : instance.getProcessVariables().entrySet()) { - String key = entry.getKey(); - Object value = entry.getValue(); - - if (value instanceof FlowsAttachment) { - FlowsAttachment attachment = (FlowsAttachment) value; - if (attachment.getStati().contains(PubblicatoUrp)) { - - Map metadatiDocumento = new HashMap<>(); - metadatiDocumento.put("filename", attachment.getFilename()); - metadatiDocumento.put("name", attachment.getName()); - metadatiDocumento.put("label", attachment.getLabel()); - metadatiDocumento.put("key", attachment.getUrl()); - metadatiDocumento.put("path", attachment.getPath()); - metadatiDocumento.put("download", env.getProperty("repository.base.url") + "d/a/workspace/SpacesStore/" + attachment.getUrl().split(";")[0] + "/" + attachment.getName()); - documentiPubblicabili.add(metadatiDocumento); - } - } - } - return documentiPubblicabili; - } - - - private Map trasformaVariabiliPerTrasparenza(HistoricProcessInstance instance, List viewExportTrasparenza) { - Map mappedVariables = new HashMap<>(); - - viewExportTrasparenza.stream().forEach(field -> { - mappedVariables.put(field, mapVariable(instance, field)); - }); - mappedVariables.put("documentiPubblicabili", getDocumentiPubblicabiliTrasparenza(instance)); - - return mappedVariables; - } - - - private Map trasformaVariabiliPerURP(HistoricProcessInstance instance, List viewExportURP) { - Map mappedVariables = new HashMap<>(); - - viewExportURP.stream().forEach(field -> { - mappedVariables.put(field, mapVariable(instance, field)); - }); - mappedVariables.put("documentiPubblicabili", getDocumentiPubblicabiliURP(instance)); - - return mappedVariables; - } - - - private List> getMappedPI(@RequestParam("processDefinition") String processDefinition, List historicProcessInstances, String typeView) { - String viewTrasparenza = viewRepository.getViewByProcessidType(processDefinition, typeView).getView(); - JSONArray fieldsTrasparenza = new JSONArray(viewTrasparenza); - List exportTrasparenza = new ArrayList<>(); - for (int i = 0; i < fieldsTrasparenza.length(); i++) - exportTrasparenza.add(fieldsTrasparenza.getString(i)); - - return historicProcessInstances.stream() - .map(instance -> trasformaVariabiliPerTrasparenza(instance, exportTrasparenza)) - .collect(Collectors.toList()); - } + private static final Logger LOGGER = LoggerFactory.getLogger(FlowsProcessInstanceResource.class); + public static final String EXPORT_TRASPARENZA = "export-trasparenza"; + public static final String EXPORT_URP = "export-urp"; + + + @Inject + private RestResponseFactory restResponseFactory; + @Inject + private HistoryService historyService; + @Inject + private ProcessInstanceResource processInstanceResource; + @Inject + private RuntimeService runtimeService; + @Inject + private FlowsProcessInstanceService flowsProcessInstanceService; + @Inject + private ViewRepository viewRepository; + @Inject + private UserDetailsService flowsUserDetailsService; + @Inject + private PermissionEvaluatorImpl permissionEvaluator; + @Inject + private Utils utils; + @Inject + private Environment env; + + + + /** + * Restituisce le Processs Instances avviate dall'utente loggato + * + * @param firstResult il primo elemento da restituire + * @param maxResults l`ultimo elemento da restituire + * @param order l`ordine di presentazione dei risultati (DESC/ASC) + * @param active provessi attivi/terminati + * @param processDefinitionKey the process definition key + * @param params i paramnetri della ricerca + * @return the my processes + */ + @PostMapping(value = "/myProcessInstances") + @Secured(AuthoritiesConstants.USER) + @Timed + public ResponseEntity getMyProcessInstances( + @PathParam("firstResult") int firstResult, + @PathParam("maxResults") int maxResults, + @PathParam("order") String order, + @PathParam("active") boolean active, + @PathParam("processDefinitionKey") String processDefinitionKey, + @RequestBody Map params) { + + params.put("initiator", SecurityUtils.getCurrentUserLogin()); + DataResponse response = flowsProcessInstanceService.search(params, processDefinitionKey, active, order, firstResult, maxResults, true); + + return new ResponseEntity<>(response, HttpStatus.OK); + } + + + // TODO questo metodo restituisce ResponseEntity di due tipi diversi - HistoricProcessInstance e Map + @GetMapping(value = "", produces = MediaType.APPLICATION_JSON_VALUE) + @Secured(AuthoritiesConstants.USER) + @PreAuthorize("hasRole('ROLE_ADMIN') OR @permissionEvaluator.canVisualize(#processInstanceId, @flowsUserDetailsService)") + @Timed + public ResponseEntity getProcessInstanceById( + @RequestParam("processInstanceId") String processInstanceId, + @RequestParam(value = "detail", required = false, defaultValue = "true") Boolean detail) { + if (!detail) { + return new ResponseEntity(flowsProcessInstanceService.getProcessInstance(processInstanceId), HttpStatus.OK); + } else { + return new ResponseEntity(flowsProcessInstanceService.getProcessInstanceWithDetails(processInstanceId), HttpStatus.OK); + } + } + + + + @GetMapping(value = "/currentTask", produces = MediaType.APPLICATION_JSON_VALUE) + @Secured(AuthoritiesConstants.USER) + @PreAuthorize("hasRole('ROLE_ADMIN') OR @permissionEvaluator.canVisualize(#processInstanceId, @flowsUserDetailsService)") + @Timed + public ResponseEntity getCurrentTaskProcessInstanceById(@RequestParam("processInstanceId") String processInstanceId) { + HistoricTaskInstance result = flowsProcessInstanceService.getCurrentTaskOfProcessInstance(processInstanceId); + + return new ResponseEntity(result, HttpStatus.OK); + } + + + + @DeleteMapping(value = "deleteProcessInstance", produces = MediaType.APPLICATION_JSON_VALUE) + @Secured(AuthoritiesConstants.ADMIN) + @Timed + public ResponseEntity delete( + @RequestParam(value = "processInstanceId", required = true) String processInstanceId, + @RequestParam(value = "deleteReason", required = true) String deleteReason) { + + runtimeService.setVariable(processInstanceId, statoFinaleDomanda.name(), "ELIMINATO"); + runtimeService.setVariable(processInstanceId, "motivazioneEliminazione", deleteReason); + try { + flowsProcessInstanceService.updateSearchTerms(flowsProcessInstanceService.getCurrentTaskOfProcessInstance(processInstanceId).getExecutionId(), processInstanceId, "ELIMINATO"); + } catch(RuntimeException error1) { + return new ResponseEntity("Errore nell`aggiornamento di stato, DESCRIZIONE, TITOLO, INITIATOR nel \"name\" della PI", HttpStatus.INTERNAL_SERVER_ERROR); + }finally { + runtimeService.deleteProcessInstance(processInstanceId, deleteReason); + } + return new ResponseEntity(HttpStatus.OK); + } + + // TODO ??? + @DeleteMapping(value = "suspendProcessInstance", produces = MediaType.APPLICATION_JSON_VALUE) + @PreAuthorize("hasRole('ROLE_ADMIN') || @permissionEvaluator.isResponsabile(#taskId, #processInstanceId, @flowsUserDetailsService)") + @Timed + public ProcessInstanceResponse suspend( + HttpServletRequest request, + @RequestParam(value = "processInstanceId", required = true) String processInstanceId) { + ProcessInstanceActionRequest action = new ProcessInstanceActionRequest(); + action.setAction(ProcessInstanceActionRequest.ACTION_SUSPEND); + return processInstanceResource.performProcessInstanceAction(processInstanceId, action, request); + } + + + + @PostMapping(value = "/variable", produces = MediaType.APPLICATION_JSON_VALUE) + @Timed + @Secured(AuthoritiesConstants.ADMIN) + public ResponseEntity setVariable( + @RequestParam("processInstanceId") String processInstanceId, + @RequestParam("variableName") String variableName, + @RequestParam("value") String value) { + runtimeService.setVariable(processInstanceId, variableName, value); + return ResponseEntity.ok().build(); + } + + + + /** + * Restituisce l'istanza della variabile della Process Instance + * + * @param processInstanceId il process instance id della ProcessInstance di cui si vuole "recuperare la variabile + * @param variableName il nome della variable + * @return la variableInstance + */ + @GetMapping(value = "/variable", produces = MediaType.APPLICATION_JSON_VALUE) + @Timed + @Secured(AuthoritiesConstants.ADMIN) + public ResponseEntity getVariable( + @RequestParam("processInstanceId") String processInstanceId, + @RequestParam("variableName") String variableName) { + + return new ResponseEntity( + historyService.createHistoricVariableInstanceQuery() + .processInstanceId(processInstanceId) + .variableName(variableName) + .list() + .stream() + .sorted((a, b) -> b.getLastUpdatedTime().compareTo(a.getLastUpdatedTime()) ) + .findFirst().orElse(null), + HttpStatus.OK); + } + + + /** + * Gets process instances for trasparenza. + * + * @param firstResult il primo risultato che si vuole recuperare + * @param maxResults il numero (massimo) di risultati che si vuole recuperare + * @param order l`ordine (ASC o DESC) in base alla data di start del flusso (non richiesto, può anche essere nullo) + * @return le process instances da esportare in trasparenza + */ + @GetMapping(value = "/getProcessInstancesForTrasparenza", produces = MediaType.APPLICATION_JSON_VALUE) + @PreAuthorize("hasRole('ROLE_ADMIN') or hasRole('ROLE_applicazione-portalecnr@0000')") + @Timed + public ResponseEntity>> getProcessInstancesForTrasparenza( + @RequestParam("firstResult") int firstResult, + @RequestParam("maxResults") int maxResults, + @RequestParam(name = "order", required = false) String order) { + + List historicProcessInstances = + flowsProcessInstanceService.getProcessInstancesForTrasparenza(firstResult, maxResults, order); + + return new ResponseEntity<>(mappingPI("acquisti", historicProcessInstances, EXPORT_TRASPARENZA), HttpStatus.OK); + } + + + @GetMapping(value = "/getProcessInstancesForURP", produces = MediaType.APPLICATION_JSON_VALUE) + @PreAuthorize("hasRole('ROLE_ADMIN') or hasRole('ROLE_applicazione-portalecnr@0000')") + @Timed + public ResponseEntity>> getProcessInstancesForURP( + @RequestParam("terminiRicorso") int terminiRicorso, + @RequestParam(name = "avvisiScaduti", required = false) Boolean avvisiScaduti, + @RequestParam(name = "gareScadute", required = false) Boolean gareScadute, + @RequestParam("firstResult") int firstResult, + @RequestParam("maxResults") int maxResults, + @RequestParam(name = "order", required = false) String order) { + + List historicProcessInstances = + flowsProcessInstanceService.getProcessInstancesForURP(terminiRicorso, avvisiScaduti, gareScadute, firstResult, maxResults, order); + + return new ResponseEntity<>(mappingPI("acquisti", historicProcessInstances, EXPORT_URP), HttpStatus.OK); + } + + + + // @PostMapping(value = "/getProcessInstancesForCigs", produces = MediaType.APPLICATION_JSON_VALUE) + // @Secured(AuthoritiesConstants.ADMIN) + // @PreAuthorize("hasRole('ROLE_applicazione-portalecnr@0000')") + // @Timed + // public ResponseEntity>> getProcessInstancesForCigs( + // @RequestParam("cigs") String cigs) { + // + // List cigsList = new ArrayList(Arrays.asList(cigs.split(","))); + // + // List exportTrasparenza = new ArrayList<>(); + // + // List historicProcessInstances = null; + // List> mappedProcessInstances = null; + // boolean mappaFlag = false; + // + // for (int i = 0; i < cigsList.size(); i++) { + // String currentCig = cigsList.get(i); + // historicProcessInstances = historyService.createHistoricProcessInstanceQuery() + // .variableValueEquals("cig", currentCig) + // .includeProcessVariables() + // .list(); + // + // + // View trasparenza = viewRepository.getViewByProcessidType(acquisti.getValue(), EXPORT_TRASPARENZA); + // String view = trasparenza.getView(); + // JSONArray fields = new JSONArray(view); + // for (int j = 0; j < fields.length(); j++) { + // exportTrasparenza.add(fields.getString(j)); + // } + // + // List> mappedProcessInstancesNew = historicProcessInstances.stream() + // .map(instance -> trasformaVariabiliPerTrasparenza(instance, exportTrasparenza)) + // .collect(Collectors.toList()); + // + // if (!mappaFlag) { + // mappedProcessInstances = mappedProcessInstancesNew; + // mappaFlag = true; + // } else { + // mappedProcessInstances.addAll(mappedProcessInstancesNew); + // } + // } + // + // return new ResponseEntity<>(mappedProcessInstances, HttpStatus.OK); + // } + + + + @PostMapping(value = "/identityLinks", produces = MediaType.APPLICATION_JSON_VALUE) + @Timed + @Secured(AuthoritiesConstants.ADMIN) + public ResponseEntity setIdentityLink( + @RequestParam("processInstanceId") String processInstanceId, + @RequestParam("identityLinkType") String identityLinkType, + @RequestParam(value = "groupId", required = false) String groupId, + @RequestParam(value = "userId", required = false) String userId) { + + if (groupId != null && !groupId.isEmpty()) { + LOGGER.info("Aggiunta IdentityLink - Pi: {}, groupId: {}, type: {}", processInstanceId, groupId, identityLinkType); + runtimeService.addGroupIdentityLink(processInstanceId, groupId, identityLinkType); + } else { + if (userId != null && !userId.isEmpty()){ + LOGGER.info("Aggiunta IdentityLink - Pi: {}, userId: {}, type: {}", processInstanceId, userId, identityLinkType); + runtimeService.addUserIdentityLink(processInstanceId,userId,identityLinkType); + } + } + return ResponseEntity.ok().build(); + } + + + + @DeleteMapping(value = "/identityLinks", produces = MediaType.APPLICATION_JSON_VALUE) + @Timed + @Secured(AuthoritiesConstants.ADMIN) + public ResponseEntity deleteIdentityLink( + @RequestParam("processInstanceId") String processInstanceId, + @RequestParam("identityLinkType") String identityLinkType, + @RequestParam(value = "groupId", required=false) String groupId, + @RequestParam(value = "userId", required=false) String userId) { + + if(groupId != null && !groupId.isEmpty()) { + LOGGER.info("Cancellazione IdentityLink - Pi: {}, groupId: {}, type: {}", processInstanceId, groupId, identityLinkType); + runtimeService.deleteGroupIdentityLink(processInstanceId, groupId, identityLinkType); + }else{ + if(userId != null && !userId.isEmpty()) { + LOGGER.info("Cancellazione IdentityLink - Pi: {}, userId: {}, type: {}", processInstanceId, userId, identityLinkType); + runtimeService.deleteUserIdentityLink(processInstanceId, userId, identityLinkType); + } + } + return ResponseEntity.ok().build(); + } + + + private List> mappingPI(String processDefinition, List historicProcessInstances, String typeView) { + String view = viewRepository.getViewByProcessidType(processDefinition, typeView).getView(); + JSONArray jsonFieldsToExport = new JSONArray(view); + + List> response = null; + + if(typeView != null) { + if (typeView.equals(EXPORT_URP)) { + response = historicProcessInstances.stream() + .map(instance -> trasformaVariabili(instance, jsonFieldsToExport, false)) + .collect(Collectors.toList()); + } else if (typeView.equals(EXPORT_TRASPARENZA)) { + response = historicProcessInstances.stream() + .map(instance -> trasformaVariabili(instance, jsonFieldsToExport, true)) + .collect(Collectors.toList()); + } + } + return response; + } + + + private Map trasformaVariabili(HistoricProcessInstance instance, JSONArray viewExport, boolean isTrasparenza) { + HashMap mappedVariables = new HashMap<>(); + + if (isTrasparenza) { + mappedVariables.put("documentiPubblicabiliInTrasparenza", getDocumentiPubblicabiliTrasparenza(instance)); + } else { + mappedVariables.put("documentiPubblicabiliInURP", getDocumentiPubblicabiliURP(instance)); + } + + viewExport.forEach(field -> { + Object variable = instance.getProcessVariables().get(field); + switch (field.toString()) { + case "businessKey": + mappedVariables.put(field.toString(), instance.getBusinessKey()); + break; + case "stato": + mappedVariables.put(field.toString(), new JSONObject(instance.getName()).getString("stato")); + break; + case "terminata": + mappedVariables.put(field.toString(), instance.getEndTime() != null ? true : false); + break; + case "impegni_json": + try { + mappedVariables.put(field.toString(), new ObjectMapper().readValue(variable != null ? (String) variable : "", List.class)); + } catch (IOException e) { + LOGGER.error("Errore nel mapping delle variabili di tipo \"impegni_json\"", e); + } + break; + default: + mappedVariables.put(field.toString(), variable != null ? variable.toString():""); + break; + } + }); + + return mappedVariables; + } + + + private List> getDocumentiPubblicabiliTrasparenza(HistoricProcessInstance instance) { + List> documentiPubblicabili = new ArrayList<>(); + for (Entry entry : instance.getProcessVariables().entrySet()) { + Object value = entry.getValue(); + + if (value instanceof FlowsAttachment) { + FlowsAttachment attachment = (FlowsAttachment) value; + if (attachment.getStati().contains(PubblicatoTrasparenza)) { + + Map metadatiDocumento = new HashMap<>(); + metadatiDocumento.put("filename", attachment.getFilename()); + metadatiDocumento.put("name", attachment.getName()); + metadatiDocumento.put("label", attachment.getLabel()); + metadatiDocumento.put("key", attachment.getUrl()); + metadatiDocumento.put("path", attachment.getPath()); + metadatiDocumento.put("download", env.getProperty("repository.base.url") + "d/a/workspace/SpacesStore/" + attachment.getUrl().split(";")[0] + "/" + attachment.getName()); + documentiPubblicabili.add(metadatiDocumento); + } + } + } + return documentiPubblicabili; + } + + + private List> getDocumentiPubblicabiliURP(HistoricProcessInstance instance) { + List> documentiPubblicabili = new ArrayList<>(); + for (Entry entry : instance.getProcessVariables().entrySet()) { + Object value = entry.getValue(); + + if (value instanceof FlowsAttachment) { + FlowsAttachment attachment = (FlowsAttachment) value; + if (attachment.getStati().contains(PubblicatoUrp)) { + + Map metadatiDocumento = new HashMap<>(); + metadatiDocumento.put("filename", attachment.getFilename()); + metadatiDocumento.put("name", attachment.getName()); + metadatiDocumento.put("label", attachment.getLabel()); + metadatiDocumento.put("key", attachment.getUrl()); + metadatiDocumento.put("path", attachment.getPath()); + metadatiDocumento.put("download", env.getProperty("repository.base.url") + "d/a/workspace/SpacesStore/" + attachment.getUrl().split(";")[0] + "/" + attachment.getName()); + // recupero la data di pubblicvazione in URP + Optional dataPubblicazione = historyService.createHistoricDetailQuery() + .processInstanceId(instance.getId()) + .variableUpdates() + .orderByVariableRevision() + .excludeTaskDetails() + .asc() + .list() + .stream() + .map(h -> (HistoricDetailVariableInstanceUpdateEntity) h) + .filter(h -> h.getName().equals(attachment.getName()) && + ((FlowsAttachment) h.getValue()).getMetadati().containsKey("azione") && + ((Enum.Azione)((FlowsAttachment) h.getValue()).getMetadati().get("azione")).name().equals(Enum.Azione.PubblicazioneUrp.name())) + .findAny(); + + if(dataPubblicazione.isPresent()) + metadatiDocumento.put("dataPubblicazione", dataPubblicazione.get().getTime()); + + documentiPubblicabili.add(metadatiDocumento); + } + } + } + return documentiPubblicabili; + } } \ No newline at end of file diff --git a/src/main/java/it/cnr/si/flows/ng/resource/FlowsRestExceptionHandler.java b/src/main/java/it/cnr/si/flows/ng/resource/FlowsRestExceptionHandler.java index 77919e72f..9a8392748 100644 --- a/src/main/java/it/cnr/si/flows/ng/resource/FlowsRestExceptionHandler.java +++ b/src/main/java/it/cnr/si/flows/ng/resource/FlowsRestExceptionHandler.java @@ -51,7 +51,7 @@ protected ResponseEntity HandleNull(RuntimeException ex, WebRequest requ LOGGER.error(bodyOfResponse, ex); return handleExceptionInternal(ex, bodyOfResponse, - new HttpHeaders(), HttpStatus.INTERNAL_SERVER_ERROR, request); + new HttpHeaders(), HttpStatus.INTERNAL_SERVER_ERROR, request); } @@ -59,7 +59,7 @@ protected ResponseEntity HandleNull(RuntimeException ex, WebRequest requ protected ResponseEntity HandleProcessDefinitionAndTaskIdEmpty(ProcessDefinitionAndTaskIdEmptyException ex, WebRequest request) { String bodyOfResponse = "Fornire almeno un taskId o un definitionId"; return handleExceptionInternal(ex, bodyOfResponse, - new HttpHeaders(), HttpStatus.BAD_REQUEST, request); + new HttpHeaders(), HttpStatus.BAD_REQUEST, request); } @@ -71,7 +71,7 @@ protected ResponseEntity HandleAccessDenied(AccessDeniedException ex, We String bodyOfResponse = "L'utente non ha i permessi necessari per eseguire l'azione richiesta"; return handleExceptionInternal(ex, bodyOfResponse, - new HttpHeaders(), HttpStatus.FORBIDDEN, request); + new HttpHeaders(), HttpStatus.FORBIDDEN, request); } @@ -90,7 +90,7 @@ protected ResponseEntity HandleUnknownException(BpmnError ex, WebRequest LOGGER.error("L'utente {} ha cercato di a completare il task {} / avviare il flusso {}, ma c'e' stato un errore: {}", username, taskId, definitionId, ex.getMessage()); return handleExceptionInternal(ex, Utils.mapOf("message", ex.getMessage()), - new HttpHeaders(), Utils.getStatus(ex.getErrorCode()), request); + new HttpHeaders(), Utils.getStatus(ex.getErrorCode()), request); } @@ -159,7 +159,7 @@ protected ResponseEntity HandleUnknownException(Exception ex, WebRequest Map res = Utils.mapOf("message", "Errore non gestito. Contattare gli amminstratori specificando il numero di riferimento: " + rif); return handleExceptionInternal(ex, res, - new HttpHeaders(), HttpStatus.INTERNAL_SERVER_ERROR, request); + new HttpHeaders(), HttpStatus.INTERNAL_SERVER_ERROR, request); } @ExceptionHandler(RuntimeException.class) @@ -170,7 +170,7 @@ protected ResponseEntity HandleUnknownRuntimeException(RuntimeException Map res = Utils.mapOf("message", "Errore non gestito. Contattare gli amminstratori specificando il numero di riferimento: " + rif); return handleExceptionInternal(ex, res, - new HttpHeaders(), HttpStatus.INTERNAL_SERVER_ERROR, request); + new HttpHeaders(), HttpStatus.INTERNAL_SERVER_ERROR, request); } diff --git a/src/main/java/it/cnr/si/flows/ng/resource/FlowsSearchResource.java b/src/main/java/it/cnr/si/flows/ng/resource/FlowsSearchResource.java index de5f027e7..5e28c1825 100644 --- a/src/main/java/it/cnr/si/flows/ng/resource/FlowsSearchResource.java +++ b/src/main/java/it/cnr/si/flows/ng/resource/FlowsSearchResource.java @@ -51,7 +51,7 @@ public ResponseEntity search(@RequestBody Map para boolean isTaskQuery = util.getBoolean(params, "isTaskQuery", false); int page = util.getInteger(params, "page", 1); - Integer maxResults = 20; + Integer maxResults = util.getInteger(params, "maxResult", 20); Integer firstResult = maxResults * (page-1) ; DataResponse result; diff --git a/src/main/java/it/cnr/si/flows/ng/resource/FlowsTaskResource.java b/src/main/java/it/cnr/si/flows/ng/resource/FlowsTaskResource.java index 39126f0aa..c7cf1d7bb 100644 --- a/src/main/java/it/cnr/si/flows/ng/resource/FlowsTaskResource.java +++ b/src/main/java/it/cnr/si/flows/ng/resource/FlowsTaskResource.java @@ -96,10 +96,10 @@ public ResponseEntity getMyTasks( @RequestBody(required = false) String body){ DataResponse response = flowsTaskService.getMyTasks(body!=null ? new JSONArray(body) : new JSONArray(), - processDefinition, - firstResult, - maxResults, - order); + processDefinition, + firstResult, + maxResults, + order); return ResponseEntity.ok(response); } @@ -115,10 +115,10 @@ public ResponseEntity getAvailableTasks( @RequestBody(required = false) String body) { DataResponse response = flowsTaskService.getAvailableTask(body!=null ? new JSONArray(body) : new JSONArray(), - processDefinition, - firstResult, - maxResults, - order); + processDefinition, + firstResult, + maxResults, + order); return ResponseEntity.ok(response); } @@ -135,10 +135,10 @@ public ResponseEntity taskAssignedInMyGroups( @RequestBody(required = false) String body) { DataResponse response = flowsTaskService.taskAssignedInMyGroups(body!=null ? new JSONArray(body) : new JSONArray(), - processDefinition, - firstResult, - maxResults, - order); + processDefinition, + firstResult, + maxResults, + order); return ResponseEntity.ok(response); } @@ -236,8 +236,8 @@ public ResponseEntity> addCandidateGroup( return new ResponseEntity<>(HttpStatus.OK); } - - + + @DeleteMapping(value = "/removeCandidateGroup/{group:.*}", produces = MediaType.APPLICATION_JSON_VALUE) @PreAuthorize("hasRole('ROLE_ADMIN')") @@ -263,8 +263,8 @@ public ResponseEntity> removeCandidateGroup( return new ResponseEntity<>(HttpStatus.OK); } - - + + @DeleteMapping(value = "/claim/{taskId}", produces = MediaType.APPLICATION_JSON_VALUE) @PreAuthorize("hasRole('ROLE_ADMIN') OR @permissionEvaluator.canClaimTask(#taskId, @flowsUserDetailsService)") @Timed @@ -308,10 +308,10 @@ public ResponseEntity getTasksCompletedByMe( @RequestBody(required = false) String body) { DataResponse response = flowsTaskService.getTasksCompletedByMe(body!=null ? new JSONArray(body) : new JSONArray(), - processDefinition, - firstResult, - maxResults, - order); + processDefinition, + firstResult, + maxResults, + order); return ResponseEntity.ok(response); } diff --git a/src/main/java/it/cnr/si/flows/ng/resource/FlowsTimerResource.java b/src/main/java/it/cnr/si/flows/ng/resource/FlowsTimerResource.java index ac7e1437d..109ece7bd 100644 --- a/src/main/java/it/cnr/si/flows/ng/resource/FlowsTimerResource.java +++ b/src/main/java/it/cnr/si/flows/ng/resource/FlowsTimerResource.java @@ -42,7 +42,7 @@ public class FlowsTimerResource { private FlowsTimerService flowsTimerService; @Inject private RestResponseFactory restResponseFactory; - + @RequestMapping(value = "/timer/{processId}", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) @PreAuthorize("hasRole('ROLE_ADMIN') OR @permissionEvaluator.canVisualizeTask(#taskId, @flowsUserDetailsService)") @Timed @@ -54,12 +54,12 @@ public ResponseEntity getProcessTimers(@PathVariable("processId") Strin response.setData(restResponseFactory.createJobResponseList(timerList)); return ResponseEntity.ok(response); } - + @RequestMapping(value = "/timer/{processId}/{timerId}", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) @PreAuthorize("hasRole('ROLE_ADMIN') OR @permissionEvaluator.canVisualizeTask(#taskId, @flowsUserDetailsService)") @Timed public ResponseEntity getProcessSingleTimer(@PathVariable("processId") String processInstanceId, - @PathVariable("timerId") String timerId) throws IOException, ParseException { + @PathVariable("timerId") String timerId) throws IOException, ParseException { List timerList = flowsTimerService.getTimer(processInstanceId, timerId); LOGGER.info("timerList.size(): " + timerList.size()); @@ -68,7 +68,7 @@ public ResponseEntity getProcessSingleTimer(@PathVariable("process response.setData(restResponseFactory.createJobResponseList(timerList)); return ResponseEntity.ok(response); } - + @RequestMapping(value = "/timer/setTimerValuesFromNow", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE) @PreAuthorize("hasRole('ROLE_ADMIN') OR @permissionEvaluator.canVisualizeTask(#taskId, @flowsUserDetailsService)") @Timed @@ -78,20 +78,44 @@ public ResponseEntity setTimerValuesFromNow( DataResponse response = new DataResponse(); - + + try { + flowsTimerService.setTimerValuesFromNow(timer.getProcessInstanceId(), timer.getTimerId(), timer.getYearAddValue(), timer.getMonthAddValue(), timer.getDayAddValue(), timer.getHourAddValue(), timer.getMinuteAddValue()); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (ParseException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + //return ResponseEntity.ok(response); + return new ResponseEntity<>(HttpStatus.OK); + } + + + @RequestMapping(value = "/timer/setTimer", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE) + @PreAuthorize("hasRole('ROLE_ADMIN') OR @permissionEvaluator.canVisualizeTask(#taskId, @flowsUserDetailsService)") + @Timed + public ResponseEntity setTimer( + //HttpServletRequest req, + @RequestBody TimerSettings timer) { + + + DataResponse response = new DataResponse(); + try { - flowsTimerService.setTimerValuesFromNow(timer.getProcessInstanceId(), timer.getTimerId(), timer.getYearAddValue(), timer.getMonthAddValue(), timer.getDayAddValue(), timer.getHourAddValue(), timer.getMinuteAddValue()); - } catch (IOException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (ParseException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } + flowsTimerService.setTimer(timer.getProcessInstanceId(), timer.getTimerId(), timer.getNewDate()); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (ParseException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } //return ResponseEntity.ok(response); return new ResponseEntity<>(HttpStatus.OK); } - } \ No newline at end of file diff --git a/src/main/java/it/cnr/si/flows/ng/service/AceBridgeService.java b/src/main/java/it/cnr/si/flows/ng/service/AceBridgeService.java index 0aaea2917..632517051 100644 --- a/src/main/java/it/cnr/si/flows/ng/service/AceBridgeService.java +++ b/src/main/java/it/cnr/si/flows/ng/service/AceBridgeService.java @@ -50,6 +50,8 @@ public List getAceGroupsForUser(String loginUsername) { /** * ATTENZIONE! Usare ???() per prendere tutti gli utenti, compresi col ruolo-nel-ruolo * Usare questo solo per prendere solo i gruppi di uno specifico gruppo Ace + * + * L'unico utilizzo giustificato di questo service e' in MembershipService */ @Deprecated public List getUsersInAceGroup(String groupName) { @@ -92,7 +94,7 @@ public List getUoLike(String uoName) { } -// todo: in futuro rendere cacheable? + // todo: in futuro rendere cacheable? public List getUoByTipo(int tipo) { return aceService.entitaOrganizzativaFind(null, null, null, LocalDate.now(), tipo) @@ -121,10 +123,14 @@ public String getNomeStruturaById(Integer id) { if (id == 0) { return "CNR"; } else { - return aceService.entitaOrganizzativaById(id).getDenominazione(); + return getStrutturaById(id).getDenominazione(); } } + public EntitaOrganizzativaWebDto getStrutturaById(Integer id) { + return aceService.entitaOrganizzativaById(id); + } + // @Cacheable("nomiEstesiGruppiRuoloStruttura") public String getExtendedGroupNome(String groupRuoloStrutturaName) { if (groupRuoloStrutturaName == null) @@ -162,21 +168,42 @@ public EntitaOrganizzativaWebDto getAfferenzaUtente(String username) { } - public EntitaOrganizzativaWebDto getEntitaOrganizzativaDellUtente(String username) { + public EntitaOrganizzativaWebDto getAfferenzaUtenteTipoSede(String username) { + + PersonaWebDto persona = aceService.getPersonaByUsername(username); + List personaEntitaOrganizzativaWebDtos = aceService.personaEntitaOrganizzativaFind(null, null, null, persona.getId(), TipoAppartenenza.SEDE, null, null, null, null); + List afferenze = personaEntitaOrganizzativaWebDtos.stream() + .filter(p -> Objects.isNull(p.getFineValidita())) + .collect(Collectors.toList()); + + if (afferenze.size() == 0) + throw new UnexpectedResultException("Nessuna afferenza corrente per l'utente: "+ username); + if (afferenze.size() > 1) + throw new UnexpectedResultException("L'utente risulta avere piu' di una afferenza: "+ username); + + return afferenze.get(0).getEntitaOrganizzativa(); + } + + + public EntitaOrganizzativaWebDto getEntitaOrganizzativaDellUtente(String username) { - String cdsuo = getAfferenzaUtente(username).getCdsuo(); + String cdsuo = getAfferenzaUtente(username).getCdsuo(); - PageDto entitaOrganizzativaWebDtoPageDto = aceService.entitaOrganizzativaFind(null, null, cdsuo, LocalDate.now(), null); + PageDto entitaOrganizzativaWebDtoPageDto = aceService.entitaOrganizzativaFind(null, null, cdsuo, LocalDate.now(), null); - List eos = entitaOrganizzativaWebDtoPageDto.getItems().stream() - .filter(eo -> Objects.isNull(eo.getEntitaLocale())) - .collect(Collectors.toList()); + List eos = entitaOrganizzativaWebDtoPageDto.getItems().stream() + .filter(eo -> Objects.isNull(eo.getEntitaLocale())) + .collect(Collectors.toList()); - if (eos.size() == 0) - throw new UnexpectedResultException("Nessuna entita' organizzativa per il cdsuo: "+ cdsuo); - if (eos.size() > 1) - throw new UnexpectedResultException("Il Cdsuo risulta avere piu' entita' organizzative: "+ username); + if (eos.size() == 0) + throw new UnexpectedResultException("Nessuna entita' organizzativa per il cdsuo: "+ cdsuo); + if (eos.size() > 1) + throw new UnexpectedResultException("Il Cdsuo risulta avere piu' entita' organizzative: "+ username); - return eos.get(0); - } + return eos.get(0); + } + + public List getParents(long id) { + return aceService.getParentsForEo(id); + } } \ No newline at end of file diff --git a/src/main/java/it/cnr/si/flows/ng/service/FirmaDocumentoService.java b/src/main/java/it/cnr/si/flows/ng/service/FirmaDocumentoService.java index 9a7a1ebf5..0d7c3f7c7 100644 --- a/src/main/java/it/cnr/si/flows/ng/service/FirmaDocumentoService.java +++ b/src/main/java/it/cnr/si/flows/ng/service/FirmaDocumentoService.java @@ -11,7 +11,6 @@ import javax.inject.Inject; import java.util.Date; -import java.util.List; import static it.cnr.si.flows.ng.utils.Enum.Azione.Firma; import static it.cnr.si.flows.ng.utils.Enum.Stato.Firmato; @@ -31,8 +30,8 @@ public void eseguiFirma(DelegateExecution execution, String nomeVariabileFile) { if (nomeVariabileFile == null) throw new IllegalStateException("Questo Listener ha bisogno del campo 'nomeFileDaFirmare' nella process definition (nel Task Listener - Fields)."); if (execution.getVariable("sceltaUtente") != null && - !"Firma Multipla".equals(execution.getVariable("sceltaUtente")) && - "Firma".equals(execution.getVariable("sceltaUtente")) ) { + !"Firma Multipla".equals(execution.getVariable("sceltaUtente")) && + "Firma".equals(execution.getVariable("sceltaUtente")) ) { String stringaOscurante = "******"; // TODO: validare presenza di queste tre variabili diff --git a/src/main/java/it/cnr/si/flows/ng/service/FlowsAttachmentService.java b/src/main/java/it/cnr/si/flows/ng/service/FlowsAttachmentService.java index d4113a355..71c10821a 100644 --- a/src/main/java/it/cnr/si/flows/ng/service/FlowsAttachmentService.java +++ b/src/main/java/it/cnr/si/flows/ng/service/FlowsAttachmentService.java @@ -37,366 +37,366 @@ @Service public class FlowsAttachmentService { - public static final String USER_SUFFIX = "_username"; - public static final String STATO_SUFFIX = "_stato"; - public static final String FILENAME_SUFFIX = "_filename"; - public static final String MIMETYPE_SUFFIX = "_mimetype"; - public static final String NUMERI_PROTOCOLLO = "numeriProtocollo"; - public static final String NUMERI_PROTOCOLLO_SEPARATOR = "::"; - @Deprecated - public static final String ARRAY_SUFFIX_REGEX = "\\[\\d+\\]"; - - - public static final String[] SUFFIXES = new String[] {USER_SUFFIX, STATO_SUFFIX, FILENAME_SUFFIX, MIMETYPE_SUFFIX}; - - private static final Logger LOGGER = LoggerFactory.getLogger(FlowsAttachmentService.class); - - @Autowired - private TaskService taskService; - @Autowired - private RuntimeService runtimeService; - @Inject - private HistoryService historyService; - @Inject - private FlowsAttachmentService attachmentService; - @Inject - private StoreService storeService; - @Inject - private StorageService storageService; + public static final String USER_SUFFIX = "_username"; + public static final String STATO_SUFFIX = "_stato"; + public static final String FILENAME_SUFFIX = "_filename"; + public static final String MIMETYPE_SUFFIX = "_mimetype"; + public static final String NUMERI_PROTOCOLLO = "numeriProtocollo"; + public static final String NUMERI_PROTOCOLLO_SEPARATOR = "::"; + @Deprecated + public static final String ARRAY_SUFFIX_REGEX = "\\[\\d+\\]"; + + + public static final String[] SUFFIXES = new String[] {USER_SUFFIX, STATO_SUFFIX, FILENAME_SUFFIX, MIMETYPE_SUFFIX}; + + private static final Logger LOGGER = LoggerFactory.getLogger(FlowsAttachmentService.class); + + @Autowired + private TaskService taskService; + @Autowired + private RuntimeService runtimeService; + @Inject + private HistoryService historyService; + @Inject + private FlowsAttachmentService attachmentService; + @Inject + private StoreService storeService; + @Inject + private StorageService storageService; @Inject private Environment env; - /** - * - * Quando ricevo una MultiPartHTTPRequest e ne ho estratto una Map(String, Object) data - * Estraggo i singoli parametri dalla mappa in un {@link FlowsAttachment} att aggiornato, secondo il fileName - * - * Se passo un att nullo, verra' creato un att nuovo - * - * @param att att - * @param data att - * @param taskId att - * @param taskName att - * @param processKey att - * @param fileName att - * @param path att - * @return att nuovo o aggiornato - */ - public FlowsAttachment extractSingleAttachment(FlowsAttachment att, Map data, String taskId, String taskName, String processKey, String fileName, String path) { - - LOGGER.info("inserisco come variabile il file {}", fileName); - byte[] filebytes = (byte[]) data.get(fileName + "_data"); - String originalFilename = (String) data.get(fileName + "_filename"); - String nodeRef = (String) data.get(fileName + "_nodeRef"); - - if (att == null) { - if (filebytes != null) { - att = new FlowsAttachment(); - - setAttachmentProperties(att, taskId, taskName, fileName, data); - att.setAzione(Caricamento); - - att.setFilename(originalFilename); - att.setMimetype(getMimetype(filebytes)); - att.setUrl(saveOrUpdateBytes(filebytes, fileName, originalFilename, processKey, path)); - att.setPath(path); - - } else if (nodeRef != null) { - att = new FlowsAttachment(); - - setAttachmentProperties(att, taskId, taskName, fileName, data); - att.setAzione(linkDaAltraApplicazione); - - att.setFilename(originalFilename); - att.setUrl(nodeRef); - att.setMimetype( (String) data.get(fileName + "_mimetype") ); - att.setPath( (String) data.get(fileName + "_path") ); - } - } else { - setAttachmentProperties(att, taskId, taskName, fileName, data); - att.setAzione(Aggiornamento); - - if (filebytes != null) { - att.setFilename(originalFilename); - att.setMimetype(getMimetype(filebytes)); - att.setUrl(saveOrUpdateBytes(filebytes, fileName, originalFilename, processKey, path)); - att.setPath(path); - } - } - return att; - } - - - private void setAttachmentProperties(FlowsAttachment att, String taskId, String taskName, String fileName, Map data) { - - att.setName(fileName); - att.setTime(new Date()); - att.setTaskId(taskId); - att.setTaskName(taskName); - att.setUsername(SecurityUtils.getCurrentUserLogin()); - - att.setLabel( String.valueOf(data.get(fileName+"_label"))); - att.setPubblicazioneUrp( "true".equals(data.get(fileName+"_pubblicazioneUrp"))); - att.setPubblicazioneTrasparenza("true".equals(data.get(fileName+"_pubblicazioneTrasparenza"))); - att.setProtocollo( "true".equals(data.get(fileName+"_protocollo"))); - - if (att.isProtocollo()) { - att.setDataProtocollo( String.valueOf(data.get(fileName+"_dataProtocollo"))); - att.setNumeroProtocollo( String.valueOf(data.get(fileName+"_numeroProtocollo"))); - } else { - att.setDataProtocollo(null); - att.setNumeroProtocollo(null); - } - - } - - /** - * Salva gli attachment di un Process Instance dai listners (e non dai service) - * (HA BISOGNO del DelegateExecution). - * * - * @param execution l'execution (processInstance) in cui inserire l'allegato - * @param variableName Nome della "tipologia" dell'allegato ("rigetto", "carta d'identità", cv", ecc.) - * @param att l'attachment vero e proprio - * @param content il contenuto binario dell'attachment o null per aggiornare solo i metadati - */ - public void saveAttachment(DelegateExecution execution, String variableName, FlowsAttachment att, byte[] content) { - - att.setUsername(SecurityUtils.getCurrentUserLogin()); - att.setTime(new Date()); - att.setTaskId((String) execution.getVariable("taskId")); - att.setTaskName(execution.getCurrentActivityName()); - - if (content != null) { - String key = execution.getVariable("key", String.class); - att.setUrl(saveOrUpdateBytes(content, variableName, att.getFilename(), key, att.getPath())); - } - - runtimeService.setVariable(execution.getId(), variableName, att); - } - - - /** - * Salva gli attachment di un Process Instance NON dai listners ma dai service - * (NON ha bisogno del DelegateExecution). - * * - * @param taskId l'id del task in cui viene "allegato" il documento - * @param variableName Nome della "tipologia" dell'allegato ("rigetto", "carta d'identità", cv", ecc.) - * @param att l'attachment vero e proprio - * @param content il contenuto binario dell'attachment o null per aggiornare solo i metadati - */ - public void saveAttachment(String taskId, String variableName, FlowsAttachment att, byte[] content) { - - att.setUsername(SecurityUtils.getCurrentUserLogin()); - att.setTime(new Date()); - att.setTaskId(taskId); - Task task = taskService.createTaskQuery().active().taskId(taskId).singleResult(); - att.setTaskName(task.getName()); - - if (content != null) { - String key = runtimeService.getVariable(task.getExecutionId(), "key", String.class); - att.setUrl(saveOrUpdateBytes(content, variableName, att.getFilename(), key, att.getPath())); - } - - runtimeService.setVariable(task.getExecutionId(), variableName, att); - } - - public void saveAttachmentFuoriTask(String executionId, String variableName, FlowsAttachment att, byte[] content) { - - att.setUsername(SecurityUtils.getCurrentUserLogin()); - att.setTime(new Date()); - att.setTaskName("Fuori task"); - - if (content != null) { - String key = runtimeService.getVariable(executionId, "key", String.class); - att.setUrl(saveOrUpdateBytes(content, variableName, att.getFilename(), key, att.getPath())); - } - - runtimeService.setVariable(executionId, variableName, att); - } - - @Deprecated // TODO - public void saveAttachmentInArray(DelegateExecution execution, String arrayName, FlowsAttachment att) { - - att.setTime(new Date()); - att.setTaskName(execution.getCurrentActivityName()); - att.setTaskId( (String) execution.getVariable("taskId")); - - int nextIndex = getNextIndexByProcessInstanceId(execution.getId(), arrayName); - - execution.setVariable(arrayName + nextIndex, att); - } - - /** - * Se ho degli attachments multipli (per esempio allegati[0]) - * Ho bisogno di salvarli con nomi univoci - * (per poter aggiornare gli allegati gia' presenti (es. allegato[0] e allegato[1]) e caricarne di nuovi (es. allegato[2]) - * Per cui, se sto aggiornando un file, vado dritto col nomefile (es. allegato[1]) - * invece se ne sto caricando uno nuovo, ho bisogno di sapere l'ultimo indice non ancora utilizzato - * - * @param fileName nome File - * @param processInstanceId id - * @return next calculated index - */ - public int getNextIndexByProcessInstanceId(String processInstanceId, String fileName) { - int index = 0; - String variableName = fileName + index; - while ( runtimeService.hasVariable(processInstanceId, variableName) == true ) { - variableName = fileName + (++index); - } - return index; - } - - public Map getCurrentAttachments(DelegateExecution execution) { - - Map attachments = new HashMap<>(); - - for (Entry entry : runtimeService.getVariables(execution.getId()).entrySet() ) - if (entry.getValue() instanceof FlowsAttachment) - attachments.put(entry.getKey(), (FlowsAttachment) entry.getValue()); - - return attachments; - - } - - public Map getAttachementsForProcessInstance(String processInstanceId) { - Map processVariables = historyService.createHistoricProcessInstanceQuery() - .processInstanceId(processInstanceId) - .includeProcessVariables() - .singleResult() - .getProcessVariables(); - - return processVariables.entrySet().stream() - .filter(e -> e.getValue() instanceof FlowsAttachment) + /** + * + * Quando ricevo una MultiPartHTTPRequest e ne ho estratto una Map(String, Object) data + * Estraggo i singoli parametri dalla mappa in un {@link FlowsAttachment} att aggiornato, secondo il fileName + * + * Se passo un att nullo, verra' creato un att nuovo + * + * @param att att + * @param data att + * @param taskId att + * @param taskName att + * @param processKey att + * @param fileName att + * @param path att + * @return att nuovo o aggiornato + */ + public FlowsAttachment extractSingleAttachment(FlowsAttachment att, Map data, String taskId, String taskName, String processKey, String fileName, String path) { + + LOGGER.info("inserisco come variabile il file {}", fileName); + byte[] filebytes = (byte[]) data.get(fileName + "_data"); + String originalFilename = (String) data.get(fileName + "_filename"); + String nodeRef = (String) data.get(fileName + "_nodeRef"); + + if (att == null) { + if (filebytes != null) { + att = new FlowsAttachment(); + + setAttachmentProperties(att, taskId, taskName, fileName, data); + att.setAzione(Caricamento); + + att.setFilename(originalFilename); + att.setMimetype(getMimetype(filebytes)); + att.setUrl(saveOrUpdateBytes(filebytes, fileName, originalFilename, processKey, path)); + att.setPath(path); + + } else if (nodeRef != null) { + att = new FlowsAttachment(); + + setAttachmentProperties(att, taskId, taskName, fileName, data); + att.setAzione(linkDaAltraApplicazione); + + att.setFilename(originalFilename); + att.setUrl(nodeRef); + att.setMimetype( (String) data.get(fileName + "_mimetype") ); + att.setPath( (String) data.get(fileName + "_path") ); + } + } else { + setAttachmentProperties(att, taskId, taskName, fileName, data); + att.setAzione(Aggiornamento); + + if (filebytes != null) { + att.setFilename(originalFilename); + att.setMimetype(getMimetype(filebytes)); + att.setUrl(saveOrUpdateBytes(filebytes, fileName, originalFilename, processKey, path)); + att.setPath(path); + } + } + return att; + } + + + private void setAttachmentProperties(FlowsAttachment att, String taskId, String taskName, String fileName, Map data) { + + att.setName(fileName); + att.setTime(new Date()); + att.setTaskId(taskId); + att.setTaskName(taskName); + att.setUsername(SecurityUtils.getCurrentUserLogin()); + + att.setLabel( String.valueOf(data.get(fileName+"_label"))); + att.setPubblicazioneUrp( "true".equals(data.get(fileName+"_pubblicazioneUrp"))); + att.setPubblicazioneTrasparenza("true".equals(data.get(fileName+"_pubblicazioneTrasparenza"))); + att.setProtocollo( "true".equals(data.get(fileName+"_protocollo"))); + + if (att.isProtocollo()) { + att.setDataProtocollo( String.valueOf(data.get(fileName+"_dataProtocollo"))); + att.setNumeroProtocollo( String.valueOf(data.get(fileName+"_numeroProtocollo"))); + } else { + att.setDataProtocollo(null); + att.setNumeroProtocollo(null); + } + + } + + /** + * Salva gli attachment di un Process Instance dai listners (e non dai service) + * (HA BISOGNO del DelegateExecution). + * * + * @param execution l'execution (processInstance) in cui inserire l'allegato + * @param variableName Nome della "tipologia" dell'allegato ("rigetto", "carta d'identità", cv", ecc.) + * @param att l'attachment vero e proprio + * @param content il contenuto binario dell'attachment o null per aggiornare solo i metadati + */ + public void saveAttachment(DelegateExecution execution, String variableName, FlowsAttachment att, byte[] content) { + + att.setUsername(SecurityUtils.getCurrentUserLogin()); + att.setTime(new Date()); + att.setTaskId((String) execution.getVariable("taskId")); + att.setTaskName(execution.getCurrentActivityName()); + + if (content != null) { + String key = execution.getVariable("key", String.class); + att.setUrl(saveOrUpdateBytes(content, variableName, att.getFilename(), key, att.getPath())); + } + + runtimeService.setVariable(execution.getId(), variableName, att); + } + + + /** + * Salva gli attachment di un Process Instance NON dai listners ma dai service + * (NON ha bisogno del DelegateExecution). + * * + * @param taskId l'id del task in cui viene "allegato" il documento + * @param variableName Nome della "tipologia" dell'allegato ("rigetto", "carta d'identità", cv", ecc.) + * @param att l'attachment vero e proprio + * @param content il contenuto binario dell'attachment o null per aggiornare solo i metadati + */ + public void saveAttachment(String taskId, String variableName, FlowsAttachment att, byte[] content) { + + att.setUsername(SecurityUtils.getCurrentUserLogin()); + att.setTime(new Date()); + att.setTaskId(taskId); + Task task = taskService.createTaskQuery().active().taskId(taskId).singleResult(); + att.setTaskName(task.getName()); + + if (content != null) { + String key = runtimeService.getVariable(task.getExecutionId(), "key", String.class); + att.setUrl(saveOrUpdateBytes(content, variableName, att.getFilename(), key, att.getPath())); + } + + runtimeService.setVariable(task.getExecutionId(), variableName, att); + } + + public void saveAttachmentFuoriTask(String executionId, String variableName, FlowsAttachment att, byte[] content) { + + att.setUsername(SecurityUtils.getCurrentUserLogin()); + att.setTime(new Date()); + att.setTaskName("Fuori task"); + + if (content != null) { + String key = runtimeService.getVariable(executionId, "key", String.class); + att.setUrl(saveOrUpdateBytes(content, variableName, att.getFilename(), key, att.getPath())); + } + + runtimeService.setVariable(executionId, variableName, att); + } + + @Deprecated // TODO + public void saveAttachmentInArray(DelegateExecution execution, String arrayName, FlowsAttachment att) { + + att.setTime(new Date()); + att.setTaskName(execution.getCurrentActivityName()); + att.setTaskId( (String) execution.getVariable("taskId")); + + int nextIndex = getNextIndexByProcessInstanceId(execution.getId(), arrayName); + + execution.setVariable(arrayName + nextIndex, att); + } + + /** + * Se ho degli attachments multipli (per esempio allegati[0]) + * Ho bisogno di salvarli con nomi univoci + * (per poter aggiornare gli allegati gia' presenti (es. allegato[0] e allegato[1]) e caricarne di nuovi (es. allegato[2]) + * Per cui, se sto aggiornando un file, vado dritto col nomefile (es. allegato[1]) + * invece se ne sto caricando uno nuovo, ho bisogno di sapere l'ultimo indice non ancora utilizzato + * + * @param fileName nome File + * @param processInstanceId id + * @return next calculated index + */ + public int getNextIndexByProcessInstanceId(String processInstanceId, String fileName) { + int index = 0; + String variableName = fileName + index; + while ( runtimeService.hasVariable(processInstanceId, variableName) == true ) { + variableName = fileName + (++index); + } + return index; + } + + public Map getCurrentAttachments(DelegateExecution execution) { + + Map attachments = new HashMap<>(); + + for (Entry entry : runtimeService.getVariables(execution.getId()).entrySet() ) + if (entry.getValue() instanceof FlowsAttachment) + attachments.put(entry.getKey(), (FlowsAttachment) entry.getValue()); + + return attachments; + + } + + public Map getAttachementsForProcessInstance(String processInstanceId) { + Map processVariables = historyService.createHistoricProcessInstanceQuery() + .processInstanceId(processInstanceId) + .includeProcessVariables() + .singleResult() + .getProcessVariables(); + + return processVariables.entrySet().stream() + .filter(e -> e.getValue() instanceof FlowsAttachment) // .peek(e -> ((FlowsAttachment) e.getValue()).setBytes(null)) - .collect(Collectors.toMap(k -> k.getKey(), v -> ((FlowsAttachment) v.getValue()))); - } - - - public void setPubblicabileTrasparenza(DelegateExecution execution, String nomeFile, Boolean flagPubblicazione) { - Map attachmentList = getCurrentAttachments(execution); - FlowsAttachment att = attachmentList.get(nomeFile); - if (att != null) { - if (flagPubblicazione) { - att.setAzione(PubblicazioneTrasparenza); - att.addStato(PubblicatoTrasparenza); - att.setPubblicazioneTrasparenza(false); - } else { - att.setAzione(RimozioneDaPubblicazioneTrasparenza); - att.removeStato(PubblicatoTrasparenza); - att.setPubblicazioneTrasparenza(false); - } - saveAttachmentFuoriTask(execution.getProcessInstanceId(), nomeFile, att, null); - } - } - - public void setPubblicabileUrp(DelegateExecution execution, String nomeFile, Boolean flagPubblicazione) { - //Map attachmentList = attachmentService.getAttachementsForProcessInstance(processInstanceId); - Map attachmentList = getCurrentAttachments(execution); - - FlowsAttachment att = attachmentList.get(nomeFile); - if (att != null) { - if (flagPubblicazione) { - att.setAzione(PubblicazioneUrp); - att.addStato(PubblicatoUrp); - att.setPubblicazioneUrp(false); - } else { - att.setAzione(RimozioneDaPubblicazioneUrp); - att.removeStato(PubblicatoUrp); - att.setPubblicazioneUrp(false); - } - saveAttachmentFuoriTask(execution.getProcessInstanceId(), nomeFile, att, null); - } - } - - public void setPubblicabileTrasparenza(String processInstanceId, String nomeVariabileFile, Boolean flagPubblicazione) { - - ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult(); - setPubblicabileTrasparenza((ExecutionEntity) processInstance, nomeVariabileFile, flagPubblicazione); - } - - public void setPubblicabileUrp(String processInstanceId, String nomeVariabileFile, Boolean flagPubblicazione) { - - ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult(); - setPubblicabileUrp((ExecutionEntity) processInstance, nomeVariabileFile, flagPubblicazione); - } - - public String mergeProtocolli(Map attachments, String taskId) { - List numeriProtocollo = attachments.entrySet().stream() - .map(key -> key.getValue()) - .map(FlowsAttachment::getNumeroProtocollo) - .collect(Collectors.toList()); - - String vecchiNumeriProtocollo = null; - if (!taskId.equals("start")) { - String processId = taskService.createTaskQuery().taskId(taskId).singleResult().getProcessInstanceId(); - vecchiNumeriProtocollo = runtimeService.getVariable(processId, NUMERI_PROTOCOLLO, String.class); - } - - return mergeProtocolli(vecchiNumeriProtocollo, numeriProtocollo); - } - - public static String addProtocollo(String vecchiProtocolli, String nuovoProtocollo) { - return mergeProtocolli(vecchiProtocolli, Arrays.asList(nuovoProtocollo)); - } - - public static String mergeProtocolli(String vecchiProtocolli, List nuoviProtocolli) { - - Stream protocolliStream = nuoviProtocolli.stream(); - - if (vecchiProtocolli != null) { - Stream vecchiProtocolliStream = Arrays.stream(vecchiProtocolli.split(NUMERI_PROTOCOLLO_SEPARATOR)); - protocolliStream = Stream.concat(vecchiProtocolliStream, protocolliStream); - } - - return protocolliStream - .filter(Objects::nonNull) - .distinct() - .collect(Collectors.joining(NUMERI_PROTOCOLLO_SEPARATOR)); - } - - public String saveOrUpdateBytes(byte[] bytes, String attachmentName, String fileName, String processKey, String path) { - - ByteArrayInputStream bais = new ByteArrayInputStream(bytes); + .collect(Collectors.toMap(k -> k.getKey(), v -> ((FlowsAttachment) v.getValue()))); + } + + + public void setPubblicabileTrasparenza(DelegateExecution execution, String nomeFile, Boolean flagPubblicazione) { + Map attachmentList = getCurrentAttachments(execution); + FlowsAttachment att = attachmentList.get(nomeFile); + if (att != null) { + if (flagPubblicazione) { + att.setAzione(PubblicazioneTrasparenza); + att.addStato(PubblicatoTrasparenza); + att.setPubblicazioneTrasparenza(false); + } else { + att.setAzione(RimozioneDaPubblicazioneTrasparenza); + att.removeStato(PubblicatoTrasparenza); + att.setPubblicazioneTrasparenza(false); + } + saveAttachmentFuoriTask(execution.getProcessInstanceId(), nomeFile, att, null); + } + } + + public void setPubblicabileUrp(DelegateExecution execution, String nomeFile, Boolean flagPubblicazione) { + //Map attachmentList = attachmentService.getAttachementsForProcessInstance(processInstanceId); + Map attachmentList = getCurrentAttachments(execution); + + FlowsAttachment att = attachmentList.get(nomeFile); + if (att != null) { + if (flagPubblicazione) { + att.setAzione(PubblicazioneUrp); + att.addStato(PubblicatoUrp); + att.setPubblicazioneUrp(false); + } else { + att.setAzione(RimozioneDaPubblicazioneUrp); + att.removeStato(PubblicatoUrp); + att.setPubblicazioneUrp(false); + } + saveAttachmentFuoriTask(execution.getProcessInstanceId(), nomeFile, att, null); + } + } + + public void setPubblicabileTrasparenza(String processInstanceId, String nomeVariabileFile, Boolean flagPubblicazione) { + + ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult(); + setPubblicabileTrasparenza((ExecutionEntity) processInstance, nomeVariabileFile, flagPubblicazione); + } + + public void setPubblicabileUrp(String processInstanceId, String nomeVariabileFile, Boolean flagPubblicazione) { + + ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult(); + setPubblicabileUrp((ExecutionEntity) processInstance, nomeVariabileFile, flagPubblicazione); + } + + public String mergeProtocolli(Map attachments, String taskId) { + List numeriProtocollo = attachments.entrySet().stream() + .map(key -> key.getValue()) + .map(FlowsAttachment::getNumeroProtocollo) + .collect(Collectors.toList()); + + String vecchiNumeriProtocollo = null; + if (!taskId.equals("start")) { + String processId = taskService.createTaskQuery().taskId(taskId).singleResult().getProcessInstanceId(); + vecchiNumeriProtocollo = runtimeService.getVariable(processId, NUMERI_PROTOCOLLO, String.class); + } + + return mergeProtocolli(vecchiNumeriProtocollo, numeriProtocollo); + } + + public static String addProtocollo(String vecchiProtocolli, String nuovoProtocollo) { + return mergeProtocolli(vecchiProtocolli, Arrays.asList(nuovoProtocollo)); + } + + public static String mergeProtocolli(String vecchiProtocolli, List nuoviProtocolli) { + + Stream protocolliStream = nuoviProtocolli.stream(); + + if (vecchiProtocolli != null) { + Stream vecchiProtocolliStream = Arrays.stream(vecchiProtocolli.split(NUMERI_PROTOCOLLO_SEPARATOR)); + protocolliStream = Stream.concat(vecchiProtocolliStream, protocolliStream); + } + + return protocolliStream + .filter(Objects::nonNull) + .distinct() + .collect(Collectors.joining(NUMERI_PROTOCOLLO_SEPARATOR)); + } + + public String saveOrUpdateBytes(byte[] bytes, String attachmentName, String fileName, String processKey, String path) { + + ByteArrayInputStream bais = new ByteArrayInputStream(bytes); Collection activeProfiles = Arrays.asList(env.getActiveProfiles()); - StorageFile storageFile = new StorageFile(bais, - getMimetype(bais), - attachmentName); + StorageFile storageFile = new StorageFile(bais, + getMimetype(bais), + attachmentName); - storageFile.setTitle(fileName); - storageFile.setDescription(fileName); + storageFile.setTitle(fileName); + storageFile.setDescription(fileName); - StorageObject so = storeService.restoreSimpleDocument( - storageFile, - new ByteArrayInputStream(storageFile.getBytes()), - storageFile.getContentType(), - attachmentName, + StorageObject so = storeService.restoreSimpleDocument( + storageFile, + new ByteArrayInputStream(storageFile.getBytes()), + storageFile.getContentType(), + attachmentName, path, - true); + true); // StorageObject updatedSo = storeService.getStorageObjectBykey( // so.getPropertyValue("cmis:objectId").split(";")[0]); - return so.getPropertyValue("cmis:objectId"); - } + return so.getPropertyValue("cmis:objectId"); + } - public InputStream getAttachmentContent(String key) { - return storeService.getResource(key); - } + public InputStream getAttachmentContent(String key) { + return storeService.getResource(key); + } - public byte[] getAttachmentContentBytes(String key) { - try { - return IOUtils.toByteArray(getAttachmentContent(key)); - } catch (IOException e) { - throw new RuntimeException(e); - } - } + public byte[] getAttachmentContentBytes(String key) { + try { + return IOUtils.toByteArray(getAttachmentContent(key)); + } catch (IOException e) { + throw new RuntimeException(e); + } + } - public InputStream getAttachmentContent(FlowsAttachment att) { - return getAttachmentContent(att.getUrl()); - } + public InputStream getAttachmentContent(FlowsAttachment att) { + return getAttachmentContent(att.getUrl()); + } - public byte[] getAttachmentContentBytes(FlowsAttachment att) { - return getAttachmentContentBytes(att.getUrl()); - } + public byte[] getAttachmentContentBytes(FlowsAttachment att) { + return getAttachmentContentBytes(att.getUrl()); + } } diff --git a/src/main/java/it/cnr/si/flows/ng/service/FlowsFirmaService.java b/src/main/java/it/cnr/si/flows/ng/service/FlowsFirmaService.java index 5eec082d8..5ad6dc63c 100644 --- a/src/main/java/it/cnr/si/flows/ng/service/FlowsFirmaService.java +++ b/src/main/java/it/cnr/si/flows/ng/service/FlowsFirmaService.java @@ -20,13 +20,13 @@ /** - * + * * Firma Service - * + * * Utilizza codice da {@code ArubaSignServiceClient} in firmadigitale-1.11.jar - * + * * Il codice e' duplicato ed esteso. - * + * * @author mtrycz * */ @@ -55,7 +55,7 @@ public class FlowsFirmaService { put("0003", "Credenziali errate"); put("0004", "PIN errato"); }}; - + @Value("${cnr.firma.signcertid}") private String RemoteSignServiceCertId; @Value("${cnr.firma.typeotpauth}") @@ -77,7 +77,7 @@ public void init() { } public byte[] firma(String username, String password, String otp, byte[] bytes) throws ArubaSignServiceException { - + // TODO verificare se poter usare un singolo client, e non ricrearlo ogni volta ArubaSignServiceClient client = new ArubaSignServiceClient(); @@ -115,14 +115,14 @@ public List firmaMultipla(String username, String password, String throw new ArubaSignServiceException("error while invoking pdfsignatureV2", e); } } - + /** * TODO Convenire su un formato adeguato per la firma grafica, se la si vuole - * + * * @return */ private PdfSignApparence getApparence() { -// +// // PdfSignApparence apparence = new PdfSignApparence(); // apparence.setLeftx(100); // apparence.setLefty(100); @@ -136,11 +136,11 @@ private PdfSignApparence getApparence() { } /** - * Questo e' il metodo personalizzato da firmadigitale-1.11.jar + * Questo e' il metodo personalizzato da firmadigitale-1.11.jar */ private byte[] pdfsignatureV2(Auth identity, byte[] bytes, - PdfSignApparence apparence) throws ArubaSignServiceException { - + PdfSignApparence apparence) throws ArubaSignServiceException { + ArubaSignService service = getServicePort(); LOGGER.debug("version " + service.getVersion()); @@ -165,7 +165,7 @@ private byte[] pdfsignatureV2(Auth identity, byte[] bytes, "error while invoking pdfsignatureV2", e); } } - + /** * Questo metodo di utilita' e' ricopiato dalla libreria perche' e' privato */ @@ -182,7 +182,7 @@ private ArubaSignService getServicePort() throws ArubaSignServiceException { return new ArubaSignServiceService(url, qname) .getArubaSignServicePort(); } - + /** * Questo metodo di utilita' e' ricopiato dalla libreria perche' e' privato */ @@ -195,12 +195,12 @@ private SignRequestV2 getRequest(Auth identity, byte[] bytes) { return request; } - + /** * Questo metodo di utilita' e' ricopiato dalla libreria perche' e' privato */ private Auth getIdentity(String username, String password, String otp) { - + Auth identity = new Auth(); identity.setUser(username); identity.setUserPWD(password); diff --git a/src/main/java/it/cnr/si/flows/ng/service/FlowsPdfService.java b/src/main/java/it/cnr/si/flows/ng/service/FlowsPdfService.java index 77cb3d736..bab55fc8b 100644 --- a/src/main/java/it/cnr/si/flows/ng/service/FlowsPdfService.java +++ b/src/main/java/it/cnr/si/flows/ng/service/FlowsPdfService.java @@ -288,7 +288,7 @@ public Pair makePdf(String tipologiaDoc, String processInstance variableInstanceJson.put(key, valueEscaped); } } - } + } } LOGGER.info("variableInstanceJson: {}", variableInstanceJson); } @@ -297,12 +297,18 @@ public Pair makePdf(String tipologiaDoc, String processInstance JSONObject processVariables = mappingVariables(variableInstanceJson, processInstanceId); //creo il pdf corrispondente String utenteRichiedente = "sistema"; - String fileName = tipologiaDoc + ".pdf"; + String fileName = tipologiaDoc + ".pdf"; if(processVariables.has("nomeRichiedente")) { utenteRichiedente = processVariables.getString("nomeRichiedente"); fileName = tipologiaDoc + "-" + utenteRichiedente + ".pdf"; - } + } + + if(processVariables.has("userNameRichiedente")) { + utenteRichiedente = processVariables.getString("userNameRichiedente"); + fileName = tipologiaDoc + "-" + utenteRichiedente + ".pdf"; + } + return Pair.of(fileName, makePdf(Enum.PdfType.valueOf(tipologiaDoc), processVariables, fileName, utenteRichiedente, processInstanceId)); } diff --git a/src/main/java/it/cnr/si/flows/ng/service/FlowsProcessInstanceService.java b/src/main/java/it/cnr/si/flows/ng/service/FlowsProcessInstanceService.java index 5dc1263b8..51e753d5e 100644 --- a/src/main/java/it/cnr/si/flows/ng/service/FlowsProcessInstanceService.java +++ b/src/main/java/it/cnr/si/flows/ng/service/FlowsProcessInstanceService.java @@ -4,6 +4,7 @@ import it.cnr.si.domain.View; import it.cnr.si.flows.ng.dto.FlowsAttachment; import it.cnr.si.flows.ng.repository.FlowsHistoricProcessInstanceQuery; +import it.cnr.si.flows.ng.utils.Enum; import it.cnr.si.flows.ng.utils.Utils; import it.cnr.si.repository.ViewRepository; import it.cnr.si.security.PermissionEvaluatorImpl; @@ -27,8 +28,6 @@ import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.stereotype.Service; -import org.springframework.web.bind.annotation.RequestParam; - import javax.inject.Inject; import java.io.IOException; import java.io.PrintWriter; @@ -36,8 +35,11 @@ import java.util.stream.Collectors; import java.util.stream.Stream; -import static it.cnr.si.flows.ng.resource.FlowsProcessInstanceResource.EXPORT_TRASPARENZA; +import static it.cnr.si.flows.ng.utils.Enum.Stato.Annullato; +import static it.cnr.si.flows.ng.utils.Enum.Stato.Revocato; +import static it.cnr.si.flows.ng.utils.Enum.VariableEnum.*; import static it.cnr.si.flows.ng.utils.Utils.*; +import static it.cnr.si.flows.ng.service.FlowsTaskService.*; /** @@ -46,392 +48,460 @@ @Service public class FlowsProcessInstanceService { - private static final Logger LOGGER = LoggerFactory.getLogger(FlowsProcessInstanceService.class); - @Inject - private FlowsAttachmentService flowsAttachmentService; - @Inject - private HistoryService historyService; - @Inject - private RestResponseFactory restResponseFactory; - @Inject - private RepositoryService repositoryService; - @Inject - private TaskService taskService; - @Inject - private ViewRepository viewRepository; - @Inject - private ManagementService managementService; - @Inject - private RuntimeService runtimeService; - @Autowired(required = false) - private AceBridgeService aceBridgeService; - @Inject - PermissionEvaluatorImpl permissionEvaluator; - @Inject - private UserDetailsService flowsUserDetailsService; - @Inject - private Utils utils; - - public HistoricTaskInstance getCurrentTaskOfProcessInstance(String processInstanceId) { - return historyService.createHistoricTaskInstanceQuery() - .processInstanceId(processInstanceId) - .list() - .stream() - .filter(historicTaskInstance -> !Optional.ofNullable(historicTaskInstance.getEndTime()).isPresent()) - .findAny() - .orElseThrow(() -> new RuntimeException("Nessun Task attivo")); - } - - public HistoricProcessInstance getProcessInstance(String processInstanceId) { - return historyService.createHistoricProcessInstanceQuery() - .processInstanceId(processInstanceId) - .singleResult(); - } - - public Map getProcessInstanceWithDetails(String processInstanceId) { - Map result = new HashMap<>(); - - // PrecessInstance metadata - HistoricProcessInstance processInstance = historyService.createHistoricProcessInstanceQuery() - .processInstanceId(processInstanceId) - .includeProcessVariables() - .singleResult(); - - //Durante la fase di creazione di una Process Instance viene richiamato questo metodo ma la query sarà vuota perchè la Pi effettivamente non è stata ancora creata - if(processInstance != null) { - HistoricProcessInstanceResponse entity = restResponseFactory.createHistoricProcessInstanceResponse(processInstance); - result.put("entity", entity); - - Map variabili = new HashMap<>(); - entity.getVariables().forEach(v -> variabili.put(v.getName(), v)); - result.put("variabili", variabili); // Modifica per vedere piu' comodamente le variabili - - HistoricVariableInstance links = historyService - .createHistoricVariableInstanceQuery() - .processInstanceId(processInstanceId) - .variableName("linkToOtherWorkflows") - .singleResult(); - - - if (links != null) { - - List> linkedFlows = new ArrayList<>(); - String value = (String) links.getValue(); - String[] values = value.split(","); - - for (String linkedProcessId : values) { - if(permissionEvaluator.canVisualize(linkedProcessId, flowsUserDetailsService)) { - HistoricProcessInstance linkedProcessInstance = historyService - .createHistoricProcessInstanceQuery() - .processInstanceId(linkedProcessId) - .includeProcessVariables() - .singleResult(); - - if (linkedProcessInstance != null) { - String key = linkedProcessInstance.getBusinessKey(); - - Map linkedObject = new HashMap<>(); - linkedObject.put("id", linkedProcessId); - linkedObject.put("key", key); - linkedObject.put("titolo", linkedProcessInstance.getProcessVariables().get("titolo")); - - linkedFlows.add(linkedObject); - } - } - } - if (!linkedFlows.isEmpty()) - result.put("linkedProcesses", linkedFlows); - } - } - - // ProcessDefinition (static) metadata - ReadOnlyProcessDefinition processDefinition = ((RepositoryServiceImpl) repositoryService).getDeployedProcessDefinition(processInstance.getProcessDefinitionId()); - - // Attachments - Map attachements = flowsAttachmentService.getAttachementsForProcessInstance(processInstanceId); - - result.put("attachments", attachements); - - final Map identityLinks = new LinkedHashMap<>(); - Map processLinks = new HashMap<>(); - processLinks.put("links", restResponseFactory.createHistoricIdentityLinkResponseList(historyService.getHistoricIdentityLinksForProcessInstance(processInstanceId))); - identityLinks.put("process", processLinks); - - List taskList = historyService.createHistoricTaskInstanceQuery() - .includeTaskLocalVariables() - .includeProcessVariables() - .processInstanceId(processInstanceId) - .list(); - - //History - ArrayList> history = new ArrayList<>(); - - taskList - .forEach( - task -> { - List links = historyService.getHistoricIdentityLinksForTask(task.getId()); - HashMap entity = new HashMap<>(); - entity.put("historyTask", restResponseFactory.createHistoricTaskInstanceResponse(task)); - - // Sostituisco l'id interno del gruppo con la dicitura estesa - entity.put("historyIdentityLink", Optional.ofNullable(links) - .map(historicIdentityLinks -> restResponseFactory.createHistoricIdentityLinkResponseList(historicIdentityLinks)) - .filter(historicIdentityLinkResponses -> !historicIdentityLinkResponses.isEmpty()) - .map(historicIdentityLinkResponses -> historicIdentityLinkResponses.stream()) - .orElse(Stream.empty()) - .map(h -> { - if (Optional.ofNullable(aceBridgeService).isPresent()) { - h.setGroupId(aceBridgeService.getExtendedGroupNome(h.getGroupId())); - } - return h; - }).collect(Collectors.toList())); - history.add(entity); - - // se il task è quello attivo prendo anche i gruppi o gli utenti assegnee/candidate - if(task.getEndTime() == null) { - Map identityLink = new HashMap<>(); - String taskDefinitionKey = task.getTaskDefinitionKey(); - PvmActivity taskDefinition = processDefinition.findActivity(taskDefinitionKey); - TaskDefinition taskDef = (TaskDefinition) taskDefinition.getProperty("taskDefinition"); - List taskLinks = taskService.getIdentityLinksForTask(task.getId()); - - identityLink.put("links", restResponseFactory.createRestIdentityLinks(taskLinks)); - identityLink.put("assignee", taskDef.getAssigneeExpression()); - identityLink.put("candidateGroups", taskDef.getCandidateGroupIdExpressions()); - identityLink.put("candidateUsers", taskDef.getCandidateUserIdExpressions()); - - identityLinks.put(task.getId(), identityLink); - } - }); - - result.put("identityLinks", identityLinks); - - result.put("history", history); - - // permessi aggiuntivi - result.put("canPublish", permissionEvaluator.canPublishAttachment(processInstanceId)); - result.put("canUpdateAttachments", permissionEvaluator.canUpdateAttachment(processInstanceId, flowsUserDetailsService)); - - - return result; - } - - - public DataResponse search(Map searchParams, String processDefinitionKey, boolean active, String order, int firstResult, int maxResults, boolean includeVariables) { - - FlowsHistoricProcessInstanceQuery processQuery = new FlowsHistoricProcessInstanceQuery(managementService); - - setSearchTerms(searchParams, processQuery); - - List authorities = Utils.getCurrentUserAuthorities(); - - // solo l'admin e se sto facendo una query per "flussi avvaiti da me" IGNORO LE REGOLE DI VISIBILITÀ - if (!authorities.contains("ADMIN") || searchParams.containsKey(Utils.INITIATOR) ) { - processQuery.setVisibleToGroups(authorities); - processQuery.setVisibleToUser(SecurityContextHolder.getContext().getAuthentication().getName()); - } - - if (!processDefinitionKey.equals(ALL_PROCESS_INSTANCES)) - processQuery.processDefinitionKey(processDefinitionKey); - - if(includeVariables) - processQuery.includeProcessVariables(); - - if (active) - processQuery.unfinished(); - else - processQuery.finished(); - - if (order.equals(ASC)) - processQuery.orderByProcessInstanceStartTime().asc(); - else if (order.equals(DESC)) - processQuery.orderByProcessInstanceStartTime().desc(); - - - - List processesRaw; - if (firstResult != -1 && maxResults != -1) - processesRaw = processQuery.listPage(firstResult, maxResults); - else - processesRaw = processQuery.list(); - - DataResponse response = new DataResponse(); - response.setStart(firstResult); - response.setSize(processesRaw.size());// numero di task restituiti - response.setTotal(processQuery.count()); //numero totale di task avviati da me - response.setData(restResponseFactory.createHistoricProcessInstanceResponseList(processesRaw)); - - return response; - } - - - private void setSearchTerms(Map params, FlowsHistoricProcessInstanceQuery processQuery) { - - String title = params.remove("title"); - String titolo = params.remove(TITOLO); - String initiator = params.remove(INITIATOR); - String descrizione = params.remove(DESCRIZIONE); - - //i campi "titolo, "title", "initiator", "descrizione" sono salvati in un json in name e non come variabili di Process Instance - if (title != null || titolo != null || initiator != null || descrizione != null) { - String appo = ""; - //l'ordine delle field di ricerca è importante nella query sul campo singolo "name" - //todo: è una porcata ma avere i campi in "name" migliora di moltissimo le prestazioni della ricerca - if (descrizione != null) - appo += "%\"descrizione\":\"%" + descrizione.substring(descrizione.indexOf('=') + 1) + "%\"%"; - if (titolo != null) - appo += "%\"titolo\":\"%" + titolo.substring(titolo.indexOf('=') + 1) + "%\"%"; - if (initiator != null) - appo += "%\"initiator\":\"%" + initiator.substring(initiator.indexOf('=') + 1) + "%\"%"; - if (title != null) - appo += "%\"title\":\"%" + title.substring(title.indexOf('=') + 1) + "%\"%"; - - processQuery.processInstanceNameLikeIgnoreCase(appo); - } - - params.forEach((key, typevalue) -> { - if (typevalue != null && typevalue.contains("=")) { - String type = typevalue.substring(0, typevalue.indexOf('=')); - String value = typevalue.substring(typevalue.indexOf('=')+1); - if(!value.isEmpty()) { - if (key.equals("businessKey")) { - processQuery.processInstanceBusinessKey(value); - } else { - switch (type) { - case "textEqual": - processQuery.variableValueEquals(key, value); - break; - case "boolean": - // gestione variabili booleane - processQuery.variableValueEquals(key, Boolean.valueOf(value)); - break; - default: - //variabili con la wildcard (%value%) - processQuery.variableValueLikeIgnoreCase(key, "%" + value + "%"); - break; - } - } - } - }else { - //per processInstances, PrintWriter printWriter, String processDefinitionKey) throws IOException { - // vista (campi e variabili) da inserire nel csv in base alla tipologia di flusso selezionato - View view = null; - if (!processDefinitionKey.equals(ALL_PROCESS_INSTANCES)) { - view = viewRepository.getViewByProcessidType(processDefinitionKey, "export-csv"); - } - CSVWriter writer = new CSVWriter(printWriter, '\t'); - ArrayList entriesIterable = new ArrayList<>(); - boolean hasHeaders = false; - ArrayList headers = new ArrayList<>(); - headers.add("Business Key"); - headers.add("Start Date"); - for (HistoricProcessInstanceResponse pi : processInstances) { - List variables = pi.getVariables(); - ArrayList tupla = new ArrayList<>(); - //field comuni a tutte le Process Instances (Business Key, Start date) - tupla.add(pi.getBusinessKey()); - tupla.add(utils.formattaDataOra(pi.getStartTime())); - - //field specifici per ogni procesDefinition - if (view != null) { - try { - JSONArray fields = new JSONArray(view.getView()); - for (int i = 0; i < fields.length(); i++) { - JSONObject field = fields.getJSONObject(i); - tupla.add(Utils.filterProperties(variables, field.getString("varName"))); - //solo per il primo ciclo, prendo le label dei field specifici - if (!hasHeaders) - headers.add(field.getString("label")); - } - } catch (JSONException e) { - LOGGER.error("Errore nel processamento del JSON", e); - throw new IOException(e); - } - } - if (!hasHeaders) { - //inserisco gli headers come intestazione dei field del csv - entriesIterable.add(0, utils.getArray(headers)); - hasHeaders = true; - } - entriesIterable.add(utils.getArray(tupla)); - } - writer.writeAll(entriesIterable); - writer.close(); - } - - public List getPIForExternalServices(String processDefinition, Date startDate, Date endDate, int firstResult, int maxResults, String order) { - List historicProcessInstances; - - HistoricProcessInstanceQuery historicProcessInstanceQuery = historyService.createHistoricProcessInstanceQuery() - .unfinished() - .processDefinitionKey(processDefinition) - .startedAfter(startDate) - .startedBefore(endDate) - .includeProcessVariables(); - if (order != null && order.equals(DESC)){ - historicProcessInstances = historicProcessInstanceQuery - .orderByProcessInstanceStartTime().desc() - .listPage(firstResult, maxResults); - } else { -// default - historicProcessInstances = historicProcessInstanceQuery - .orderByProcessInstanceStartTime().asc() - .listPage(firstResult, maxResults); - } - return historicProcessInstances; - } - - - private void processDate(HistoricProcessInstanceQuery processQuery, String key, String value) { - // TODO remove deprecated api javax.xml - Calendar calendar = javax.xml.bind.DatatypeConverter.parseDateTime(value); - - if (key.contains("Less")) - processQuery.startedBefore(calendar.getTime()); - else if (key.contains("Great")) - processQuery.startedAfter(calendar.getTime()); - } + private static final Logger LOGGER = LoggerFactory.getLogger(FlowsProcessInstanceService.class); + @Inject + private FlowsAttachmentService flowsAttachmentService; + @Inject + private HistoryService historyService; + @Inject + private RestResponseFactory restResponseFactory; + @Inject + private RepositoryService repositoryService; + @Inject + private TaskService taskService; + @Inject + private ViewRepository viewRepository; + @Inject + private ManagementService managementService; + @Inject + private RuntimeService runtimeService; + @Autowired(required = false) + private AceBridgeService aceBridgeService; + @Inject + PermissionEvaluatorImpl permissionEvaluator; + @Inject + private UserDetailsService flowsUserDetailsService; + @Inject + private Utils utils; + @Inject + private FlowsAttachmentService attachmentService; + + + + public HistoricTaskInstance getCurrentTaskOfProcessInstance(String processInstanceId) { + return historyService.createHistoricTaskInstanceQuery() + .processInstanceId(processInstanceId) + .list() + .stream() + .filter(historicTaskInstance -> !Optional.ofNullable(historicTaskInstance.getEndTime()).isPresent()) + .findAny() + .orElseThrow(() -> new RuntimeException("Nessun Task attivo")); + } + + public HistoricProcessInstance getProcessInstance(String processInstanceId) { + return historyService.createHistoricProcessInstanceQuery() + .processInstanceId(processInstanceId) + .singleResult(); + } + + public Map getProcessInstanceWithDetails(String processInstanceId) { + Map result = new HashMap<>(); + + // PrecessInstance metadata + HistoricProcessInstance processInstance = historyService.createHistoricProcessInstanceQuery() + .processInstanceId(processInstanceId) + .includeProcessVariables() + .singleResult(); + + //Durante la fase di creazione di una Process Instance viene richiamato questo metodo ma la query sarà vuota perchè la Pi effettivamente non è stata ancora creata + if(processInstance != null) { + HistoricProcessInstanceResponse entity = restResponseFactory.createHistoricProcessInstanceResponse(processInstance); + result.put("entity", entity); + + Map variabili = new HashMap<>(); + entity.getVariables().forEach(v -> variabili.put(v.getName(), v)); + result.put("variabili", variabili); // Modifica per vedere piu' comodamente le variabili + + HistoricVariableInstance links = historyService + .createHistoricVariableInstanceQuery() + .processInstanceId(processInstanceId) + .variableName("linkToOtherWorkflows") + .singleResult(); + + + if (links != null) { + + List> linkedFlows = new ArrayList<>(); + String value = (String) links.getValue(); + String[] values = value.split(","); + + for (String linkedProcessId : values) { + if(permissionEvaluator.canVisualize(linkedProcessId, flowsUserDetailsService)) { + HistoricProcessInstance linkedProcessInstance = historyService + .createHistoricProcessInstanceQuery() + .processInstanceId(linkedProcessId) + .includeProcessVariables() + .singleResult(); + + if (linkedProcessInstance != null) { + String key = linkedProcessInstance.getBusinessKey(); + + Map linkedObject = new HashMap<>(); + linkedObject.put("id", linkedProcessId); + linkedObject.put("key", key); + linkedObject.put("titolo", linkedProcessInstance.getProcessVariables().get("titolo")); + + linkedFlows.add(linkedObject); + } + } + } + if (!linkedFlows.isEmpty()) + result.put("linkedProcesses", linkedFlows); + } + } + + // ProcessDefinition (static) metadata + ReadOnlyProcessDefinition processDefinition = ((RepositoryServiceImpl) repositoryService).getDeployedProcessDefinition(processInstance.getProcessDefinitionId()); + + // Attachments + Map attachements = flowsAttachmentService.getAttachementsForProcessInstance(processInstanceId); + + result.put("attachments", attachements); + + final Map identityLinks = new LinkedHashMap<>(); + Map processLinks = new HashMap<>(); + processLinks.put("links", restResponseFactory.createHistoricIdentityLinkResponseList(historyService.getHistoricIdentityLinksForProcessInstance(processInstanceId))); + identityLinks.put("process", processLinks); + + List taskList = historyService.createHistoricTaskInstanceQuery() + .includeTaskLocalVariables() + .includeProcessVariables() + .processInstanceId(processInstanceId) + .list(); + + //History + ArrayList> history = new ArrayList<>(); + + taskList + .forEach( + task -> { + List links = historyService.getHistoricIdentityLinksForTask(task.getId()); + HashMap entity = new HashMap<>(); + entity.put("historyTask", restResponseFactory.createHistoricTaskInstanceResponse(task)); + + // Sostituisco l'id interno del gruppo con la dicitura estesa + entity.put("historyIdentityLink", Optional.ofNullable(links) + .map(historicIdentityLinks -> restResponseFactory.createHistoricIdentityLinkResponseList(historicIdentityLinks)) + .filter(historicIdentityLinkResponses -> !historicIdentityLinkResponses.isEmpty()) + .map(historicIdentityLinkResponses -> historicIdentityLinkResponses.stream()) + .orElse(Stream.empty()) + .map(h -> { + if (Optional.ofNullable(aceBridgeService).isPresent()) { + h.setGroupId(aceBridgeService.getExtendedGroupNome(h.getGroupId())); + } + return h; + }).collect(Collectors.toList())); + history.add(entity); + + // se il task è quello attivo prendo anche i gruppi o gli utenti assegnee/candidate + if(task.getEndTime() == null) { + Map identityLink = new HashMap<>(); + String taskDefinitionKey = task.getTaskDefinitionKey(); + PvmActivity taskDefinition = processDefinition.findActivity(taskDefinitionKey); + TaskDefinition taskDef = (TaskDefinition) taskDefinition.getProperty("taskDefinition"); + List taskLinks = taskService.getIdentityLinksForTask(task.getId()); + + identityLink.put("links", restResponseFactory.createRestIdentityLinks(taskLinks)); + identityLink.put("assignee", taskDef.getAssigneeExpression()); + identityLink.put("candidateGroups", taskDef.getCandidateGroupIdExpressions()); + identityLink.put("candidateUsers", taskDef.getCandidateUserIdExpressions()); + + identityLinks.put(task.getId(), identityLink); + } + }); + + result.put("identityLinks", identityLinks); + + result.put("history", history); + + // permessi aggiuntivi + result.put("canPublish", permissionEvaluator.canPublishAttachment(processInstanceId)); + result.put("canUpdateAttachments", permissionEvaluator.canUpdateAttachment(processInstanceId, flowsUserDetailsService)); + + + return result; + } + + + public DataResponse search(Map searchParams, String processDefinitionKey, boolean active, String order, int firstResult, int maxResults, boolean includeVariables) { + + FlowsHistoricProcessInstanceQuery processQuery = new FlowsHistoricProcessInstanceQuery(managementService); + + if (firstResult != -1 && maxResults != -1) { + processQuery.setFirstResult(firstResult); + processQuery.setMaxResults(maxResults); + } + setSearchTerms(searchParams, processQuery); + + List authorities = Utils.getCurrentUserAuthorities(); + + // solo l'admin e se sto facendo una query per "flussi avvaiti da me" IGNORO LE REGOLE DI VISIBILITÀ + if (!authorities.contains("ADMIN") || searchParams.containsKey(Utils.INITIATOR) ) { + processQuery.setVisibleToGroups(authorities); + processQuery.setVisibleToUser(SecurityContextHolder.getContext().getAuthentication().getName()); + } + + if (!processDefinitionKey.equals(ALL_PROCESS_INSTANCES)) + processQuery.processDefinitionKey(processDefinitionKey); + + if(includeVariables) + processQuery.includeProcessVariables(); + + if (active) + processQuery.unfinished(); + else + processQuery.finished(); + + if (order.equals(ASC)) + processQuery.orderByProcessInstanceStartTime().asc(); + else if (order.equals(DESC)) + processQuery.orderByProcessInstanceStartTime().desc(); + + + + List processesRaw; + if (firstResult != -1 && maxResults != -1) + processesRaw = processQuery.listPage(firstResult, maxResults); + else + processesRaw = processQuery.list(); + + DataResponse response = new DataResponse(); + response.setStart(firstResult); + response.setSize(processesRaw.size());// numero di task restituiti + response.setTotal(processQuery.count()); //numero totale di task avviati da me + response.setData(restResponseFactory.createHistoricProcessInstanceResponseList(processesRaw)); + + return response; + } + + + private void setSearchTerms(Map params, FlowsHistoricProcessInstanceQuery processQuery) { + + String title = params.remove("title"); + String titolo = params.remove(TITOLO); + String initiator = params.remove(INITIATOR); + String descrizione = params.remove(DESCRIZIONE); + + //i campi "titolo, "title", "initiator", "descrizione" sono salvati in un json in name e non come variabili di Process Instance + if (title != null || titolo != null || initiator != null || descrizione != null) { + String appo = ""; + //l'ordine delle field di ricerca è importante nella query sul campo singolo "name" + //todo: è una porcata ma avere i campi in "name" migliora di moltissimo le prestazioni della ricerca + if (descrizione != null) + appo += "%\"descrizione\":\"%" + descrizione.substring(descrizione.indexOf('=') + 1) + "%\"%"; + if (titolo != null) + appo += "%\"titolo\":\"%" + titolo.substring(titolo.indexOf('=') + 1) + "%\"%"; + if (initiator != null) + appo += "%\"initiator\":\"%" + initiator.substring(initiator.indexOf('=') + 1) + "%\"%"; + if (title != null) + appo += "%\"title\":\"%" + title.substring(title.indexOf('=') + 1) + "%\"%"; + + processQuery.processInstanceNameLikeIgnoreCase(appo); + } + + params.forEach((key, typevalue) -> { + if (typevalue != null && typevalue.contains("=")) { + String type = typevalue.substring(0, typevalue.indexOf('=')); + String value = typevalue.substring(typevalue.indexOf('=')+1); + if(!value.isEmpty()) { + if (key.equals("businessKey")) { + processQuery.processInstanceBusinessKey(value); + } else { + switch (type) { + case "textEqual": + processQuery.variableValueEquals(key, value); + break; + case "boolean": + // gestione variabili booleane + processQuery.variableValueEquals(key, Boolean.valueOf(value)); + break; + default: + //variabili con la wildcard (%value%) + processQuery.variableValueLikeIgnoreCase(key, "%" + value + "%"); + break; + } + } + } + }else { + //per processInstances, PrintWriter printWriter, String processDefinitionKey) throws IOException { + // vista (campi e variabili) da inserire nel csv in base alla tipologia di flusso selezionato + View view = null; + if (!processDefinitionKey.equals(ALL_PROCESS_INSTANCES)) { + view = viewRepository.getViewByProcessidType(processDefinitionKey, "export-csv"); + } + CSVWriter writer = new CSVWriter(printWriter, '\t'); + ArrayList entriesIterable = new ArrayList<>(); + boolean hasHeaders = false; + ArrayList headers = new ArrayList<>(); + headers.add("Business Key"); + headers.add("Start Date"); + for (HistoricProcessInstanceResponse pi : processInstances) { + List variables = pi.getVariables(); + ArrayList tupla = new ArrayList<>(); + //field comuni a tutte le Process Instances (Business Key, Start date) + tupla.add(pi.getBusinessKey()); + tupla.add(utils.formattaDataOra(pi.getStartTime())); + + //field specifici per ogni procesDefinition + if (view != null) { + try { + JSONArray fields = new JSONArray(view.getView()); + for (int i = 0; i < fields.length(); i++) { + JSONObject field = fields.getJSONObject(i); + tupla.add(Utils.filterProperties(variables, field.getString("varName"))); + //solo per il primo ciclo, prendo le label dei field specifici + if (!hasHeaders) + headers.add(field.getString("label")); + } + } catch (JSONException e) { + LOGGER.error("Errore nel processamento del JSON", e); + throw new IOException(e); + } + } + if (!hasHeaders) { + //inserisco gli headers come intestazione dei field del csv + entriesIterable.add(0, utils.getArray(headers)); + hasHeaders = true; + } + entriesIterable.add(utils.getArray(tupla)); + } + writer.writeAll(entriesIterable); + writer.close(); + } + + + public List getProcessInstancesForURP(int terminiRicorso, Boolean avvisiScaduti, Boolean gareScadute, int firstResult, int maxResults, String order) { + + HistoricProcessInstanceQuery historicProcessInstanceQuery = historyService.createHistoricProcessInstanceQuery() + .includeProcessVariables() + .processDefinitionKey("acquisti") + .or() + .variableValueNotEquals(statoFinaleDomanda.name(), Annullato.name()) + .variableValueNotEquals(statoFinaleDomanda.name(), Revocato.name()) + .endOr(); + Calendar dataTerminiRicorso = Calendar.getInstance(); + dataTerminiRicorso.setTime(new Date()); + + String now = utils.formattaData(new Date()); + if(gareScadute != null){ + historicProcessInstanceQuery + .variableValueLike("strumentoAcquisizione", "PROCEDURA SELETTIVA%"); + if(gareScadute){ + // GARE SCADUTE IN ATTESA DI ESITO: data scadenza presentazione offerta < NOW && data scadenza presentazione offerta - termini di ricorso >= NOW + if(terminiRicorso != 0) + dataTerminiRicorso.add(Calendar.DAY_OF_MONTH, -terminiRicorso); + + historicProcessInstanceQuery + .variableValueLessThan(dataScadenzaBando.name(), now) + .variableValueGreaterThanOrEqual(dataScadenzaBando.name(), utils.formattaData(dataTerminiRicorso.getTime())); + LOGGER.info("SCADUTE IN ATTESA DI ESITO nr flussi {}", historicProcessInstanceQuery.count()); + + } else { + // GARE IN CORSO data scadenza presentazione offerta >= NOW + historicProcessInstanceQuery + .variableValueGreaterThanOrEqual(dataScadenzaBando.name(), now); + LOGGER.info("GARE IN CORSO nei flussi {}", historicProcessInstanceQuery.count()); + + } + } + + if(avvisiScaduti != null){ + if(avvisiScaduti){ + // AVVISI SCADUTI: data scadenza presentazione offerta < NOW && data scadenza presentazione offerta + terminiRicorso >= NOW + dataTerminiRicorso.add(Calendar.DAY_OF_MONTH, -terminiRicorso); + + historicProcessInstanceQuery + .variableValueLessThan(dataScadenzaAvvisoPreDetermina.name(), now) + .variableValueGreaterThanOrEqual(dataScadenzaAvvisoPreDetermina.name(), utils.formattaData(dataTerminiRicorso.getTime())); + }else{ + // AVVISI IN CORSO: data scadenza presentazione offerta >= NOW + historicProcessInstanceQuery + .variableValueGreaterThanOrEqual(dataScadenzaAvvisoPreDetermina.name(), now); + } + } + utils.orderProcess(order, historicProcessInstanceQuery); + + return historicProcessInstanceQuery.listPage(firstResult, maxResults); + } + + + + public List getProcessInstancesForTrasparenza(int firstResult, int maxResults, String order) { + + HistoricProcessInstanceQuery historicProcessInstanceQuery = historyService.createHistoricProcessInstanceQuery() + .includeProcessVariables() + .processDefinitionKey("acquisti") + .unfinished() + .variableValueEquals(flagIsTrasparenza.name(), "true"); + + utils.orderProcess(order, historicProcessInstanceQuery); + + return historicProcessInstanceQuery.listPage(firstResult, maxResults); + } + + + + private void processDate(HistoricProcessInstanceQuery processQuery, String key, String value) { + Calendar calendar = javax.xml.bind.DatatypeConverter.parseDateTime(value); + + if (key.contains("Less")) + processQuery.startedBefore(calendar.getTime()); + else if (key.contains("Great")) + processQuery.startedAfter(calendar.getTime()); + } } diff --git a/src/main/java/it/cnr/si/flows/ng/service/FlowsTaskService.java b/src/main/java/it/cnr/si/flows/ng/service/FlowsTaskService.java index 295bac1e0..f70643cb5 100644 --- a/src/main/java/it/cnr/si/flows/ng/service/FlowsTaskService.java +++ b/src/main/java/it/cnr/si/flows/ng/service/FlowsTaskService.java @@ -12,6 +12,8 @@ import it.cnr.si.flows.ng.utils.Utils; import it.cnr.si.repository.ViewRepository; import it.cnr.si.security.PermissionEvaluatorImpl; +import it.cnr.si.service.DraftService; +import it.cnr.si.service.MembershipService; import it.cnr.si.service.RelationshipService; import org.activiti.engine.*; import org.activiti.engine.history.HistoricIdentityLink; @@ -88,6 +90,8 @@ public class FlowsTaskService { @Inject private RelationshipService relationshipService; @Inject + private MembershipService membershipService; + @Inject private ViewRepository viewRepository; @Inject private Utils utils; @@ -95,6 +99,8 @@ public class FlowsTaskService { private RestResponseFactory restResponseFactory; @Inject private Environment env; + @Inject + private DraftService draftService; public DataResponse search(Map params, String processInstanceId, boolean active, String order, int firstResult, int maxResults) { HistoricTaskInstanceQuery taskQuery = historyService.createHistoricTaskInstanceQuery(); @@ -235,27 +241,27 @@ public DataResponse taskAssignedInMyGroups(JSONArray searchParams, String proces List result = new ArrayList<>(); - List usersInMyGroups = relationshipService.getUsersInMyGroups(username); + Set usersInMyGroups = membershipService.getUsersInMyGroups(username); //risulta avere prestazioni leggermente migliori questo approccio rispetto a quello commentato - // (test effettuati con 300 Pi e 30 Task assegnati ad altri utenti nei miei gruppi + // (test effettuati con 300 Pi e 30 Task assegnati ad altri utenti nei miei gruppi // prendo i task assegnati agli utenti trovati for (String user : usersInMyGroups) { - List tasks = taskQuery.taskAssignee(user).list() - .stream() - .filter(t -> - taskService.getIdentityLinksForTask(t.getId()).stream().anyMatch(il -> - il.getType().equals(IdentityLinkType.CANDIDATE) && userAuthorities.contains(il.getGroupId()) ) - ).collect(Collectors.toList()); - - result.addAll(restResponseFactory.createTaskResponseList(tasks)); - } -// result = restResponseFactory.createTaskResponseList(taskQuery.list().stream() -// .filter(t -> usersInMyGroups.contains(t.getAssignee()) || taskService.getIdentityLinksForTask(t.getId()).stream().anyMatch(il -> il.getType().equals(IdentityLinkType.CANDIDATE) && userAuthorities.contains(il.getGroupId()))) -// .collect(Collectors.toList())); + List tasks = taskQuery.taskAssignee(user).list() + .stream() + .filter(t -> + taskService.getIdentityLinksForTask(t.getId()).stream().anyMatch(il -> + il.getType().equals(IdentityLinkType.CANDIDATE) && userAuthorities.contains(il.getGroupId()) ) + ).collect(Collectors.toList()); + + result.addAll(restResponseFactory.createTaskResponseList(tasks)); + } + // result = restResponseFactory.createTaskResponseList(taskQuery.list().stream() + // .filter(t -> usersInMyGroups.contains(t.getAssignee()) || taskService.getIdentityLinksForTask(t.getId()).stream().anyMatch(il -> il.getType().equals(IdentityLinkType.CANDIDATE) && userAuthorities.contains(il.getGroupId()))) + // .collect(Collectors.toList())); List responseList = result.subList(firstResult <= result.size() ? firstResult : result.size(), - maxResults <= result.size() ? maxResults : result.size()); + maxResults <= result.size() ? maxResults : result.size()); DataResponse response = new DataResponse(); response.setStart(firstResult); response.setSize(responseList.size()); @@ -314,6 +320,7 @@ public ProcessInstance startProcessInstance(String definitionId, Map data) { taskService.addUserIdentityLink(taskId, username, TASK_EXECUTOR); try { taskService.complete(taskId, data); + + draftService.deleteDraftByTaskId(Long.valueOf(taskId)); } catch (Exception e) { if (e instanceof ActivitiObjectNotFoundException) LOGGER.error("Task {} NON trovato", taskId); @@ -403,6 +416,7 @@ public void buildCsv(List processInstances, Pri ArrayList entriesIterable = new ArrayList<>(); boolean hasHeaders = false; ArrayList headers = new ArrayList<>(); + headers.add("processInstanceId"); headers.add("Identificativo Flusso"); headers.add("Titolo"); headers.add("Descrizione"); @@ -415,6 +429,7 @@ public void buildCsv(List processInstances, Pri List variables = processInstance.getVariables(); ArrayList tupla = new ArrayList<>(); //field comuni a tutte le Process Instances (name , Start date) + tupla.add(processInstance.getId()); tupla.add(processInstance.getBusinessKey()); // inizio spacchettamento fields @@ -457,14 +472,14 @@ private void addIsReleasableVariables(List tasks) { isUnclaimableVariable.setName("isReleasable"); // if has candidate groups or users -> can release isUnclaimableVariable.setValue(taskService.getIdentityLinksForTask(task.getId()) - .stream() - .anyMatch(l -> l.getType().equals(IdentityLinkType.CANDIDATE))); + .stream() + .anyMatch(l -> l.getType().equals(IdentityLinkType.CANDIDATE))); task.getVariables().add(isUnclaimableVariable); } } - private static String ellipsis(String in, int length) { + static String ellipsis(String in, int length) { return in.length() < length ? in: in.substring(0, length - 3) + "..."; } } \ No newline at end of file diff --git a/src/main/java/it/cnr/si/flows/ng/service/FlowsTimerService.java b/src/main/java/it/cnr/si/flows/ng/service/FlowsTimerService.java index 3913eff8c..307d97a48 100644 --- a/src/main/java/it/cnr/si/flows/ng/service/FlowsTimerService.java +++ b/src/main/java/it/cnr/si/flows/ng/service/FlowsTimerService.java @@ -14,6 +14,7 @@ import java.io.IOException; import java.text.ParseException; +import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; @@ -49,6 +50,9 @@ public class FlowsTimerService { @Inject private RepositoryService repositoryService; + @Inject + private FlowsTimerService flowsTimerService; + public List getTimers(String processInstanceId) throws IOException, ParseException { @@ -62,13 +66,33 @@ public List getTimers(String processInstanceId) throws IOException, ParseExcepti { String timerName = ((TimerEntity) job).getJobHandlerConfiguration() .split(":")[1] - .replace("\"", "") - .replace("}", ""); + .replace("\"", "") + .replace("}", ""); LOGGER.info("getDuedate {}, getId {}, TimerDeclarationImpl {}", job.getDuedate(), job.getId(), timerName); } return timerJobs; } + + public void setTimer(String processInstanceId, String timerId, Date date) throws IOException, ParseException { + + // TIMER + LOGGER.debug("setTimer {}", date); + // SimpleDateFormat formatter=new SimpleDateFormat("dd-MMM-yyyy HH:mm:ss"); + //Date newTimerDate = formatter.parse(date); + Date newTimerDate = date; + + List jobTimer = flowsTimerService.getTimer(processInstanceId,timerId); + if(jobTimer.size() > 0){ + LOGGER.info("------ DATA: {} per timer: {} " + jobTimer.get(0).getDuedate(), timerId); + } else { + LOGGER.info("------ " + timerId + ": TIMER SCADUTO: "); + } + + managementService.executeCommand(new SetTimerDuedateCmd(jobTimer.get(0).getId(), newTimerDate)); + + } + public List getTimer(String processInstanceId, String timerId) throws IOException, ParseException { // TIMER @@ -82,8 +106,8 @@ public List getTimer(String processInstanceId, String timerId) throws IOExceptio { String timerName = ((TimerEntity) job).getJobHandlerConfiguration() .split(":")[1] - .replace("\"", "") - .replace("}", ""); + .replace("\"", "") + .replace("}", ""); LOGGER.info("getDuedate {}, getId {}, TimerDeclarationImpl {}", job.getDuedate(), job.getId(), timerName); if (timerName.equals(timerId)) { LOGGER.info("--- DATA FINE PROCEDURA: {}, getId: {}, timerName: {}", job.getDuedate(), job.getId(), timerName); @@ -107,17 +131,17 @@ public void setTimerValuesFromNow(String processInstanceId, String timerId, int { String timerName = ((TimerEntity) job).getJobHandlerConfiguration() .split(":")[1] - .replace("\"", "") - .replace("}", ""); + .replace("\"", "") + .replace("}", ""); LOGGER.debug("getDuedate {}, getId {}, TimerDeclarationImpl {}", job.getDuedate(), job.getId(), timerName); if (timerName.equals(timerId)) { LOGGER.debug("--- CAMBIO DATA Duedate: {}, getId: {}, timerName: {}", job.getDuedate(), job.getId(), timerName); //job.wait(). - int yearAddValueInt = 0; - int monthAddValueInt = 0; - int hourAddValueInt = 0; - int dayAddValueInt = 0; - int minuteAddValueInt = 0; + int yearAddValueInt = 0; + int monthAddValueInt = 0; + int hourAddValueInt = 0; + int dayAddValueInt = 0; + int minuteAddValueInt = 0; if (yearAddValue != 0) { try { yearAddValueInt = yearAddValue; diff --git a/src/main/java/it/cnr/si/flows/ng/service/ProtocolloDocumentoService.java b/src/main/java/it/cnr/si/flows/ng/service/ProtocolloDocumentoService.java index b1ce517d2..c73438af9 100644 --- a/src/main/java/it/cnr/si/flows/ng/service/ProtocolloDocumentoService.java +++ b/src/main/java/it/cnr/si/flows/ng/service/ProtocolloDocumentoService.java @@ -2,7 +2,6 @@ import it.cnr.si.flows.ng.dto.FlowsAttachment; -import it.cnr.si.flows.ng.service.FlowsAttachmentService; import org.activiti.engine.delegate.DelegateExecution; @@ -18,15 +17,13 @@ import javax.inject.Inject; -import it.cnr.si.flows.ng.service.FlowsAttachmentService; - @Service public class ProtocolloDocumentoService { private static final Logger LOGGER = LoggerFactory.getLogger(ProtocolloDocumentoService.class); - @Inject - private FlowsAttachmentService flowsAttachmentService; - + @Inject + private FlowsAttachmentService flowsAttachmentService; + public void protocolla(DelegateExecution execution, String nomeVariabileFile) throws IOException, ParseException { if (nomeVariabileFile == null) @@ -45,8 +42,8 @@ public void protocolla(DelegateExecution execution, String nomeVariabileFile) t //execution.setVariable("numeroProtocollo_" + nomeVariabileFile, valoreNumeroProtocollo); //execution.setVariable("dataProtocollo_" + nomeVariabileFile, valoreDataProtocollo); att.getMetadati().put("numeroProtocollo", valoreNumeroProtocollo); - att.getMetadati().put("dataProtocollo", valoreDataProtocollo); - execution.setVariable("numeriProtocollo", flowsAttachmentService.addProtocollo(execution.getVariable("numeriProtocollo").toString(), valoreNumeroProtocollo)); + att.getMetadati().put("dataProtocollo", valoreDataProtocollo); + execution.setVariable("numeriProtocollo", flowsAttachmentService.addProtocollo(execution.getVariable("numeriProtocollo").toString(), valoreNumeroProtocollo)); } // se il numero e data di protocollo sono già variabili con la sintassi diff --git a/src/main/java/it/cnr/si/flows/ng/utils/Enum.java b/src/main/java/it/cnr/si/flows/ng/utils/Enum.java index 38ebee72c..b2b225e66 100644 --- a/src/main/java/it/cnr/si/flows/ng/utils/Enum.java +++ b/src/main/java/it/cnr/si/flows/ng/utils/Enum.java @@ -6,6 +6,7 @@ public class Enum { public enum Actions { revoca("Revoca"), + annulla("Annulla"), revocaSemplice("RevocaSemplice"), RevocaConProvvedimento("RevocaConProvvedimento"); @@ -54,7 +55,8 @@ public enum Stato { Annullato, PubblicatoUrp, PubblicatoTrasparenza, - Sostituito + Sostituito, + Revocato } @@ -78,25 +80,48 @@ public enum Azione { } public enum StatoDomandeAccordiInternazionaliEnum { - APERTA, - CHIUSA, - INVIATA, - RESPINTA, - VALUTATA_SCIENTIFICAMENTE, - ACCETATA, - CANCELLATA; + APERTA, + CHIUSA, + INVIATA, + RESPINTA, + VALUTATA_SCIENTIFICAMENTE, + ACCETATA, + CANCELLATA; + } + + public enum StatoDomandeSTMEnum { + APERTA, + CHIUSA, + INVIATA, + VALIDATA, + NON_VALIDATA, + IN_MODIFICA, + RESPINTA, + VALUTATA_SCIENTIFICAMENTE, + AUTORIZZATA, + ANNULLATA, + ACCETTATA, + ACCETTAZIONE, + CANCELLATA; } public enum ProcessDefinitionEnum { - acquisti("acquisti"), - permessiFerie("permessi-ferie"), - accordiInternazionaliBandi("accordi-internazionali-bandi"), - accordiInternazionaliDomande("accordi-internazionali-domande"), - iscrizioneElencoOiv("iscrizione-elenco-oiv"); + acquisti("acquisti","acquisti"), + permessiFerie("permessi-ferie", "permessi-ferie"), + accordiInternazionaliBandi("accordi-internazionali-bandi", "accordi-internazionali-bandi"), + accordiInternazionaliDomande("accordi-internazionali-domande", "accordi-internazionali-domande"), + iscrizioneElencoOiv("iscrizione-elenco-oiv", "iscrizione-elenco-oiv"), + testAcquistiAvvisi("testAcquistiAvvisi", "acquisti"); + private String value; - ProcessDefinitionEnum(String value) { + private String processDefinition; + + public String getProcessDefinition() { return processDefinition; } + + ProcessDefinitionEnum(String value, String processDefinition) { + this.processDefinition = processDefinition; this.value = value; } @@ -119,7 +144,11 @@ public enum VariableEnum { startDate, endDate, gruppoRA, - gruppoStaffAmministrativo; + gruppoStaffAmministrativo, + dataScadenzaAvvisoPreDetermina, + dataScadenzaBando, + flagIsTrasparenza, + statoFinaleDomanda; } @@ -136,6 +165,7 @@ public enum PdfType { preavvisoRigettoDef10Giorni, valutazioneProgettoAccordiBilaterali, domandaAccordiBilaterali, + valutazioneShortTermMobility, preavvisoRigettoCambioFascia; PdfType() { diff --git a/src/main/java/it/cnr/si/repository/DraftRepository.java b/src/main/java/it/cnr/si/repository/DraftRepository.java new file mode 100644 index 000000000..edb0d4bf1 --- /dev/null +++ b/src/main/java/it/cnr/si/repository/DraftRepository.java @@ -0,0 +1,24 @@ +package it.cnr.si.repository; + +import it.cnr.si.domain.Draft; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; + +import java.util.List; + +/** + * Spring Data JPA repository for the Faq entity. + */ +@SuppressWarnings("unused") +public interface DraftRepository extends JpaRepository { + + @Query("select draft from Draft draft where draft.taskId =:taskId AND draft.username=:username") + public Draft getDraftByTaskIdAndUsername(@Param("taskId") Long taskId, @Param("username") String username); + + @Query("select draft from Draft draft where draft.taskId =:taskId AND draft.username is null)") + public Draft getDraftByTaskId(@Param("taskId") Long taskId); + + @Query("select draft from Draft draft where draft.taskId =:taskId") + List getAllDraftByTaskId(@Param("taskId") Long taskId); +} diff --git a/src/main/java/it/cnr/si/security/PermissionEvaluatorImpl.java b/src/main/java/it/cnr/si/security/PermissionEvaluatorImpl.java index f7c8ae114..b04ce2d2a 100644 --- a/src/main/java/it/cnr/si/security/PermissionEvaluatorImpl.java +++ b/src/main/java/it/cnr/si/security/PermissionEvaluatorImpl.java @@ -266,7 +266,7 @@ public boolean canClaimTask(String taskId, org.springframework.security.core.use public boolean isResponsabile(String taskId, String processInstanceId, org.springframework.security.core.userdetails.UserDetailsService flowsUserDetailsService) { String user = SecurityUtils.getCurrentUserLogin(); - List groups = aceBridgeService.getAceGroupsForUser(user); // TODO + List groups = aceBridgeService.getAceGroupsForUser(user); Task task; if(!processInstanceId.isEmpty()){ task = taskService.createTaskQuery() @@ -319,7 +319,7 @@ public boolean canUpdateAttachment(String processInstanceId, org.springframework a.contains(responsabile + "#flussi@" + idStruttura)); boolean isRuoloFlusso = false; - if (instance.getProcessDefinitionKey().equals(acquisti.getValue())) { + if (instance.getProcessDefinitionKey().equals(acquisti.getProcessDefinition())) { String rup = String.valueOf(instance.getProcessVariables().get("rup")); String nomeGruppoFirma = "responsabileFirmaAcquisti@" + idStruttura; @@ -341,7 +341,7 @@ public boolean canPublishAttachment(String processInstanceId) { .singleResult(); String username = SecurityUtils.getCurrentUserLogin(); - if (instance.getProcessDefinitionKey().equals(acquisti.getValue())) { + if (instance.getProcessDefinitionKey().equals(acquisti.getProcessDefinition())) { String rup = String.valueOf(instance.getProcessVariables().get("rup")); if (username.equals(rup)) diff --git a/src/main/java/it/cnr/si/service/DraftService.java b/src/main/java/it/cnr/si/service/DraftService.java new file mode 100644 index 000000000..429074da4 --- /dev/null +++ b/src/main/java/it/cnr/si/service/DraftService.java @@ -0,0 +1,90 @@ +package it.cnr.si.service; + +import it.cnr.si.domain.Draft; +import it.cnr.si.repository.DraftRepository; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.inject.Inject; +import java.util.List; + +/** + * Service Implementation for managing Avviso. + */ +@Service +@Transactional +public class DraftService { + + @Inject + private DraftRepository draftRepository; + + /** + * Find draft draft. + * nel caso in cui non si specifichi l`username si recupera un Draft che può essere letto da tutti + * + * @param taskId the task id + * @param username the username + * @return the draft + */ + public Draft findDraft(Long taskId, String username) { + Draft dbDraft; + + if(username.isEmpty()) + dbDraft = draftRepository.getDraftByTaskId(taskId); + else + dbDraft = draftRepository.getDraftByTaskIdAndUsername(taskId, username); + + return dbDraft; + } + + + /** + * Save draft. + * + * @param draft the draft + * @return the draft + */ + public Draft save(Draft draft) { + return draftRepository.save(draft); + } + + /** + * Find all list. + * + * @return the list + */ + public List findAll() { + return draftRepository.findAll(); + } + + /** + * Find one draft. + * + * @param id the id + * @return the draft + */ + public Draft findOne(Long id) { + return draftRepository.findOne(id); + } + + /** + * Delete. + * + * @param id the id + */ + public void delete(Long id) { + draftRepository.delete(id); + } + + /** + * Delete draft by task id. + * + * @param taskId the task id + */ + public void deleteDraftByTaskId(Long taskId) { + List drafts = draftRepository.getAllDraftByTaskId(taskId); + for(Draft draft : drafts) { + draftRepository.delete(draft.getId()); + } + } +} diff --git a/src/main/java/it/cnr/si/service/FlowsUserService.java b/src/main/java/it/cnr/si/service/FlowsUserService.java index 225f34845..04afe6eef 100644 --- a/src/main/java/it/cnr/si/service/FlowsUserService.java +++ b/src/main/java/it/cnr/si/service/FlowsUserService.java @@ -189,7 +189,7 @@ public void updateUser( public void deleteUser(String login) { jdbcTokenStore.findTokensByUserName(login).stream().forEach(token -> - jdbcTokenStore.removeAccessToken(token)); + jdbcTokenStore.removeAccessToken(token)); flowsUserRepository.findOneByLogin(login).ifPresent(u -> { flowsUserRepository.delete(u); log.debug("Deleted User: {}", u); diff --git a/src/main/java/it/cnr/si/service/MembershipService.java b/src/main/java/it/cnr/si/service/MembershipService.java index ee138b865..8e3e362a4 100644 --- a/src/main/java/it/cnr/si/service/MembershipService.java +++ b/src/main/java/it/cnr/si/service/MembershipService.java @@ -1,21 +1,24 @@ package it.cnr.si.service; +import com.codahale.metrics.annotation.Timed; import it.cnr.si.domain.Membership; +import it.cnr.si.domain.Relationship; import it.cnr.si.flows.ng.service.AceBridgeService; import it.cnr.si.flows.ng.utils.Utils; import it.cnr.si.repository.MembershipRepository; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.env.Environment; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; -import org.springframework.security.core.GrantedAuthority; -import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.inject.Inject; import java.util.*; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.ForkJoinPool; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -27,12 +30,17 @@ public class MembershipService { private final Logger log = LoggerFactory.getLogger(MembershipService.class); - + @Inject private MembershipRepository membershipRepository; @Autowired(required = false) - private AceBridgeService aceService; + private AceBridgeService aceBridgeService; + @Inject + private RelationshipService relationshipService; + @Inject + private Environment env; + public Membership save(Membership membership) { log.debug("Request to save Membership : {}", membership); @@ -40,13 +48,13 @@ public Membership save(Membership membership) { } - @Transactional(readOnly = true) + @Transactional(readOnly = true) public Page findAll(Pageable pageable) { log.debug("Request to get all Memberships"); return membershipRepository.findAll(pageable); } - @Transactional(readOnly = true) + @Transactional(readOnly = true) public Membership findOne(Long id) { log.debug("Request to get Membership : {}", id); return membershipRepository.findOne(id); @@ -60,7 +68,6 @@ public void delete(Long id) { membershipRepository.delete(id); } - /** * Get one membership by username and groupname. * @@ -75,49 +82,182 @@ public Membership findOneByUsernameAndGroupname(String username, String groupnam } - public Set getGroupNamesForUser(String username) { - return membershipRepository.findGroupNamesForUser(username); + public Page getGroupsWithRole(Pageable pageable, String user, String role) { + return membershipRepository.getGroupsWithRole(role, user, pageable); + } + + + public List getMembershipByGroupName(String groupName) { + return membershipRepository.getMembershipByGroupName(groupName); } + /* --- */ - public List getAllAdditionalAuthoritiesForUser(String username) { - return Stream.concat(getGroupNamesForUser(username).stream(), getACEGroupsForUser(username).stream()) - .distinct() - .map(Utils::addLeadingRole) - .map(SimpleGrantedAuthority::new) - .collect(Collectors.toList()); + // Se a qualcuno dovesse servire puo' rendere questo metodo public, ma non credo - martin 4/9/19 + private Set getLocalGroupsForUser(String username) { + return membershipRepository.findGroupNamesForUser(username); } - private Set getACEGroupsForUser(String username) { - return Optional.ofNullable(aceService) + // Se a qualcuno dovesse servire puo' rendere questo metodo public, ma non credo - martin 4/9/19 + private Set getAceGroupsForUser(String username) { + return Optional.ofNullable(aceBridgeService) .map(aceBridgeService -> aceBridgeService.getAceGroupsForUser(username)) .map(strings -> strings.stream()) .orElse(Stream.empty()) .collect(Collectors.toSet()); } + /** + * Dato uno username restituisce tutti suoi gruppi, sia di ACE che di Membership, + * compresi quelli ereditati + * + * I nomi dei gruppi NON hanno il ROLE_ + * + * @param username + * @return + */ + public Set getAllGroupsForUser(String username) { + + Set groups = new HashSet<>(); + groups.addAll( getAceGroupsForUser(username) ); + groups.addAll( getLocalGroupsForUser(username) ); + + groups.addAll( getAllChildGroupsRecursively(groups, new HashSet<>()) ); + + return groups; + } + + /* --- */ + + /** + * DEPRACATED : questo metodo va a scalare solo un livello di relationship tra gruppi + * @param groupName + * @return + */ @Deprecated - public List findMembersInGroup(String groupName) { + public List getUsersInGroup(String groupName) { List result = membershipRepository.findMembersInGroup(groupName); - Optional.ofNullable(aceService) - .map(aceBridgeService -> aceService.getUsersInAceGroup(groupName)) - .filter(strings -> !strings.isEmpty()) - .ifPresent(strings -> result.addAll(strings)); + Set users = getUsersInAceGroup(groupName); + result.addAll(users); return result; } + // Se a qualcuno dovesse servire puo' rendere questo metodo public, ma non credo - martin 4/9/19 + @SuppressWarnings("deprecation") // Questo e' l'unico modo giusto di usare il metodo aceBridgeService.getUsersInAceGroup + private Set getUsersInAceGroup(String groupName) { + return Optional.ofNullable(aceBridgeService) + .map(aceBridgeService -> aceBridgeService.getUsersInAceGroup(groupName)) + .filter(strings -> !strings.isEmpty()) + .map(strings -> strings.stream()) + .orElse(Stream.empty()) + .collect(Collectors.toSet()); + } + - public Page getGroupsWithRole(Pageable pageable, String user, String role) { - return membershipRepository.getGroupsWithRole(role, user, pageable); + public Set getAllUsersInGroup(String groupName) { + + Set groups = new HashSet<>(); + groups.add(groupName); + groups.addAll( getAllParentGroupsRecursively(groups, new HashSet<>()) ); + + Set result = new HashSet<>(); + + return groups.stream() + .map(this::getUsersInAceGroup) + .flatMap(list -> list.stream()) + .collect(Collectors.toSet()); } - public List getMembershipByGroupName(String groupName) { - return membershipRepository.getMembershipByGroupName(groupName); + @Timed + public Set getUsersInMyGroups(String username) { + + // puo' capitare che un'utente ha *molti* gruppi + // cerco di velocizzare le cose con un parallelStream + + ForkJoinPool forkJoinPool = new ForkJoinPool(3); + Set otherUsers = null; + try { + otherUsers = forkJoinPool.submit( + () -> getAllGroupsForUser(username).parallelStream() // recupero tutti i gruppi per l'utente richiesto + .map(myGroup -> getAllUsersInGroup(myGroup)) // per ogni gruppo recupero i suoi membri + .flatMap(list -> list.stream()) // ho uno stream di liste di stringhe che trasformo in uno stream di stringhe + .filter(user -> !user.equals(username)) // non mi interessa includere l'utente con cui ho chiamato + .collect(Collectors.toSet()) + ).get(); + return otherUsers; + } catch (InterruptedException | ExecutionException e) { + throw new RuntimeException(e); + } + } + + private Set getAllChildGroupsRecursively(Set resultSoFar, Set visited) { + + log.trace("resultsSoFar {}, visited {}", resultSoFar, visited); + Set buffer = new HashSet<>(); + + for (String group : resultSoFar) { + + Set children = relationshipService.getAllRelationshipForGroup(group); + for (Relationship child : children) { + if (!visited.contains(child.getGroupRelationship())) { + buffer.add(child.getGroupRelationship()); + } + } + + if (group.contains("@")) { + String role = group.substring(0, group.indexOf('@')); + children = relationshipService.findRelationshipForStructure(role); + + for (Relationship child : children) { + if (!visited.contains(child.getGroupRelationship())) { + visited.add(group); + buffer.add(Utils.replaceStruttura(child.getGroupRelationship(), group.substring(group.indexOf('@')))); + } + } + } + } + + if (!buffer.isEmpty()) + resultSoFar.addAll(getAllChildGroupsRecursively(buffer, visited)); + + return buffer; + } - public List getGroupForUser(String userName) { - return membershipRepository.getGroupForUser(userName); + private Set getAllParentGroupsRecursively(Set resultSoFar, Set visited) { + + log.trace("resultsSoFar {}, visited {}", resultSoFar, visited); + Set buffer = new HashSet<>(); + + for (String group : resultSoFar) { + + Set parents = relationshipService.getRelationshipsForGroupRelationship(group); + for (Relationship parent : parents) { + if (!visited.contains(parent.getGroupName())) { + buffer.add(parent.getGroupName()); + } + } + + if (group.contains("@")) { + String role = group.substring(0, group.indexOf('@')); + parents = relationshipService.findRelationshipForStructureByGroupRelationship(role); + + for (Relationship parent : parents) { + if (!visited.contains(parent.getGroupName())) { + visited.add(group); + buffer.add(Utils.replaceStruttura(parent.getGroupName(), group.substring(group.indexOf('@')))); + } + } + } + } + + if (!buffer.isEmpty()) + getAllParentGroupsRecursively(buffer, visited); + + return buffer; + } + } diff --git a/src/main/java/it/cnr/si/service/RelationshipService.java b/src/main/java/it/cnr/si/service/RelationshipService.java index f9c1cc597..1cb8cd01c 100644 --- a/src/main/java/it/cnr/si/service/RelationshipService.java +++ b/src/main/java/it/cnr/si/service/RelationshipService.java @@ -1,33 +1,18 @@ package it.cnr.si.service; -import com.codahale.metrics.annotation.Timed; import it.cnr.si.domain.Relationship; -import it.cnr.si.flows.ng.service.AceBridgeService; -import it.cnr.si.flows.ng.utils.Utils; -import it.cnr.si.repository.CnrgroupRepository; import it.cnr.si.repository.RelationshipRepository; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.core.env.Environment; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; -import org.springframework.security.core.GrantedAuthority; -import org.springframework.security.core.authority.SimpleGrantedAuthority; -import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.inject.Inject; -import java.util.*; -import java.util.stream.Collectors; -import java.util.stream.Stream; +import java.util.Set; -import static it.cnr.si.flows.ng.utils.Enum.Role.*; - -/** - * Service Implementation for managing Relationship. - */ @Service @Transactional public class RelationshipService { @@ -36,15 +21,6 @@ public class RelationshipService { @Inject private RelationshipRepository relationshipRepository; - @Autowired(required = false) - private AceBridgeService aceBridgeService; - @Inject - private CnrgroupRepository cnrgroupRepository; - @Inject - private MembershipService membershipService; - @Inject - private Environment env; - /** * Save a relationship. @@ -99,239 +75,13 @@ public Set getRelationshipsForGroupRelationship(String groupRelati return relationshipRepository.getRelationshipsForGroupRelationship(groupRelationship); } - @Timed - @Deprecated // questo metodo non e' ricorsivo, quindi se abbiamo gruppi nei gruppi nei gruppi non puo' funzionare - public List getAllGroupsForUserOLD(String username) { - - Set merged; - if (Arrays.asList(env.getActiveProfiles()).contains("cnr")) { - - //A) recupero la lista dei gruppi a cui appartiene direttamente l'utente - Set aceGroup = getAceGroupsForUser(username); - //B) recupero i children dei gruppi "supervisori" e "responsabili" - // TODO ????? - Set aceGroupWithChildren = getACEChildren(aceGroup); - - //C) recupero i gruppi "associati" nel nostro db (getAllRelationship) e mergio - merged = Stream.concat(aceGroupWithChildren.stream(), getAllRelationship(aceGroupWithChildren).stream()) - .distinct() - .map(Utils::addLeadingRole) - .collect(Collectors.toSet()); - } else { - // A) Se sono su OIV, carico le Membership - merged = getLocalGroupsForUser(username); - } - - return merged.stream() - .map(SimpleGrantedAuthority::new) - .collect(Collectors.toList()); - } - - // TODO attenzione: questo metodo, a differenza di getAceGroupsForUser aggiunge i ROLE_ - private Set getLocalGroupsForUser(String username) { - return membershipService.getGroupNamesForUser(username); - } - - // TODO ?????? - @Deprecated - private Set getACEChildren(Set aceGroup) { - //Filtro solo i gruppi di tipo "responsabili" o "supervisori" - Set groupToSearchChildren = aceGroup.stream() - .filter(group -> group.contains(supervisore.getValue()) || - group.contains(supervisoreStruttura.getValue()) || - group.contains(responsabile.getValue()) || - group.contains(responsabileStruttura.getValue())) - .collect(Collectors.toSet()); - //cerco i children dei gruppi che ho filtrato - Set children = new HashSet<>(); -// for (String group : groupToSearchChildren) { - //todo: ancora da implementare in ACE -// children.addAll(); -// } - return Stream.concat(aceGroup.stream(), children.stream()) - .distinct() - .collect(Collectors.toSet()); - } - - private Set getAllRelationship(Set aceGropupWithParents) { - Set result = new HashSet<>(); - for (String group : aceGropupWithParents) { - //match esatto (ad es.: ra@2216 -> supervisore#acquistitrasparenza@STRUTTURA) - result.addAll(relationshipRepository.findRelationshipGroup(group).stream() - .map(Relationship::getGroupRelationship) - .collect(Collectors.toSet()) - ); - //match "@STRUTTURA" (ad es. relationship: ra@STRUTTURA -> supervisore#acquistitrasparenza@STRUTTURA) - if (group.contains("@")) { - String role = group.substring(0, group.indexOf('@')); - Set relationshipGroupForStructure = relationshipRepository.findRelationshipForStructure( - group.contains("@") ? role : group); - - // rimpiazzo "@STRUTTURA" nella relationship trovata con il CODICE SPECIFICO della struttura - result.addAll(relationshipGroupForStructure.stream() - .map(relationship -> { - if (relationship.getGroupRelationship().contains("@")) { - String struttura = group.substring(group.indexOf('@'), group.length()); - return Utils.replaceStruttura(relationship.getGroupRelationship(), struttura); - } else - return relationship.getGroupRelationship(); - }) - .collect(Collectors.toSet())); - } - } - //mapping in modo da recuperare il distinct - return result.stream() - .collect(Collectors.toSet()); - } - - public Set getAceGroupsForUser(String username) { - return Optional.ofNullable(aceBridgeService) - .map(aceBridgeService -> aceBridgeService.getAceGroupsForUser(username)) - .map(strings -> strings.stream()) - .orElse(Stream.empty()) - .collect(Collectors.toSet()); - } - - @Timed - public List getUsersInMyGroups(String username) { - - List usersInMyGroups = new ArrayList<>(); - - Set newGroups = getAllGroupsForUser(username); - - List myGroups = SecurityContextHolder.getContext().getAuthentication().getAuthorities() - .parallelStream() - .map(GrantedAuthority::getAuthority) - .map(Utils::removeLeadingRole) - .filter(group -> group.indexOf("afferenza") <= -1) - .filter(group -> group.indexOf("USER") <= -1) - .filter(group -> group.indexOf("DEPARTMENT") <= -1) - .filter(group -> group.indexOf("PREVIOUS") <= -1) - .collect(Collectors.toList()); - - if (Arrays.asList(env.getActiveProfiles()).contains("cnr")) { - //filtro in ACE gli utenti che appartengono agli stessi gruppi dell'utente loggato - usersInMyGroups.addAll(getUsersInGroups(myGroups)); - } else { - //filtro in Membership gli utenti che appartengono agli stessi gruppi dell'utente loggato - for (String myGroup : myGroups) { - // se qui dovesse throware null, - // reipostare usersInMyGroups.addAll(membershipService.findMembersInGroup(myGroup) != null ? membershipService.findMembersInGroup(myGroup) : new ArrayList<>()); - // Martin - usersInMyGroups.addAll(membershipService.findMembersInGroup(myGroup)); - } - } - - usersInMyGroups = usersInMyGroups.stream() - .distinct() - .filter(user -> !user.equals(username)) - .collect(Collectors.toList()); - - return usersInMyGroups; - } - - public Set getUsersInGroups(Collection myGroups) { - Set result = new HashSet<>(); - for (String myGroup : myGroups) { - try { - result.addAll(aceBridgeService.getUsersInAceGroup(myGroup)); - } catch (RuntimeException e) { - log.warn("Il ruolo {} non esiste in ACE", myGroup); - } - } - return result; - } - - - - public Set getAllGroupsForUser(String username) { - - Set groups = new HashSet<>(); - groups.addAll( getAceGroupsForUser(username) ); - groups.addAll( getLocalGroupsForUser(username) ); - - groups.addAll( getAllChildGroupsRecursively(groups, new HashSet<>()) ); - - return groups; + public Set findRelationshipForStructure(String groupName) { + return relationshipRepository.findRelationshipForStructure(groupName); } - public Set getAllUsersInGroup(String groupName) { - - Set groups = new HashSet<>(); - groups.add(groupName); - - groups.addAll( getAllParentGroupsRecursively(groups, new HashSet<>()) ); - - return getUsersInGroups(groups); + public Set findRelationshipForStructureByGroupRelationship(@Param("groupRelationship") String groupRelationship) { + return relationshipRepository.findRelationshipForStructureByGroupRelationship(groupRelationship); } - private Set getAllChildGroupsRecursively(Set resultSoFar, Set visited) { - - log.trace("resultsSoFar {}, visited {}", resultSoFar, visited); - Set buffer = new HashSet<>(); - - for (String group : resultSoFar) { - - Set children = relationshipRepository.findRelationshipGroup(group); - for (Relationship child : children) { - if (!visited.contains(child.getGroupRelationship())) { - buffer.add(child.getGroupRelationship()); - } - } - - if (group.contains("@")) { - String role = group.substring(0, group.indexOf('@')); - children = relationshipRepository.findRelationshipForStructure(role); - - for (Relationship child : children) { - if (!visited.contains(child.getGroupRelationship())) { - visited.add(group); - buffer.add(Utils.replaceStruttura(child.getGroupRelationship(), group.substring(group.indexOf('@')))); - } - } - } - } - - if (!buffer.isEmpty()) - resultSoFar.addAll(getAllChildGroupsRecursively(buffer, visited)); - - return buffer; - - } - - private Set getAllParentGroupsRecursively(Set resultSoFar, Set visited) { - - log.trace("resultsSoFar {}, visited {}", resultSoFar, visited); - Set buffer = new HashSet<>(); - - for (String group : resultSoFar) { - - Set parents = relationshipRepository.getRelationshipsForGroupRelationship(group); - for (Relationship parent : parents) { - if (!visited.contains(parent.getGroupName())) { - buffer.add(parent.getGroupName()); - } - } - - if (group.contains("@")) { - String role = group.substring(0, group.indexOf('@')); - parents = relationshipRepository.findRelationshipForStructureByGroupRelationship(role); - - for (Relationship parent : parents) { - if (!visited.contains(parent.getGroupName())) { - visited.add(group); - buffer.add(Utils.replaceStruttura(parent.getGroupName(), group.substring(group.indexOf('@')))); - } - } - } - } - - if (!buffer.isEmpty()) - getAllParentGroupsRecursively(buffer, visited); - - return buffer; - - } - } diff --git a/src/main/java/it/cnr/si/web/rest/DraftResource.java b/src/main/java/it/cnr/si/web/rest/DraftResource.java new file mode 100644 index 000000000..b6aaacbbb --- /dev/null +++ b/src/main/java/it/cnr/si/web/rest/DraftResource.java @@ -0,0 +1,136 @@ +package it.cnr.si.web.rest; + +import com.codahale.metrics.annotation.Timed; +import it.cnr.si.domain.Draft; +import it.cnr.si.service.DraftService; +import it.cnr.si.web.rest.util.HeaderUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import javax.inject.Inject; +import java.net.URISyntaxException; +import java.util.List; +import java.util.Optional; + +/** + * REST controller for managing Draft. + */ +@RestController +@RequestMapping("/api") +public class DraftResource { + + private final Logger log = LoggerFactory.getLogger(DraftResource.class); + + @Inject + private DraftService draftService; + + + /** + * PUT /drafts : Save or Updates an existing draft. + * nel caso in cui non si specifichi l`username si recupera un Draft che può essere letto da tutti, + * viceversa, se si specifica uno username, il Draft potrà essere letto solo da qurello username + * + * @param taskId the draft to update + * @param json the json + * @param username the username + * @return the ResponseEntity with status 200 (OK) and with body the updated draft, or with status 400 (Bad Request) if the draft is not valid, or with status 500 (Internal Server Error) if the draft couldnt be updated + * @throws URISyntaxException if the Location URI syntax is incorrect + */ + @PutMapping(value = "/drafts/updateDraft", + produces = MediaType.APPLICATION_JSON_VALUE) + @Timed + public ResponseEntity updateDraft(@RequestParam("taskId") Long taskId, @RequestParam("json") String json, @RequestParam("username") String username) throws URISyntaxException { + Draft dbDraft = draftService.findDraft(taskId, username); + + if (dbDraft == null) { + dbDraft = new Draft(); + } + dbDraft.setJson(json); + dbDraft.setTaskId(taskId); + dbDraft.setUsername(username.isEmpty() ? null : username); + + Draft result = draftService.save(dbDraft); + return ResponseEntity.ok() + .headers(HeaderUtil.createEntityUpdateAlert("draft", result.getId().toString())) + .body(result); + } + + /** + * GET /drafts : get all the drafts. + * + * @return the ResponseEntity with status 200 (OK) and the list of drafts in body + */ + @GetMapping(value = "/drafts", + produces = MediaType.APPLICATION_JSON_VALUE) + @Timed + public ResponseEntity> getAllDrafts() { + log.debug("REST request to get all Drafts"); + List drafts = draftService.findAll(); + + return Optional.ofNullable(drafts) + .map(result -> new ResponseEntity<>( + result, + HttpStatus.OK)) + .orElse(new ResponseEntity<>(HttpStatus.NOT_FOUND)); + } + + + /** + * GET /drafts/:id : get the "id" draft. + * + * @param id the id of the draft to retrieve + * @return the ResponseEntity with status 200 (OK) and with body the draft, or with status 404 (Not Found) + */ + @GetMapping(value = "/draft/{id}", + produces = MediaType.APPLICATION_JSON_VALUE) + @Timed + public ResponseEntity getDraftById(@PathVariable Long id) { + log.debug("REST request to get Draft : {}", id); + Draft draft = draftService.findOne(id); + return Optional.ofNullable(draft) + .map(result -> new ResponseEntity<>( + result, + HttpStatus.OK)) + .orElse(new ResponseEntity<>(HttpStatus.NOT_FOUND)); + } + + /** + * GET /drafts/getDraftByTaskId : restituisce i draft associati ad un utente + * + * @param taskId the id of the draft to retrieve + * @param username the username + * @return the ResponseEntity with status 200 (OK) and with body the draft, or with status 404 (Not Found) + */ + @GetMapping(value = "/draft/getDraftByTaskId", + produces = MediaType.APPLICATION_JSON_VALUE) + @Timed + public ResponseEntity getDraftByTaskId(@RequestParam("taskId") Long taskId, @RequestParam("username") String username) { + log.debug("REST request to get Draft by taskId : {}", taskId); + Draft draft = draftService.findDraft(taskId, username); + + return Optional.ofNullable(draft) + .map(result -> new ResponseEntity<>( + result, + HttpStatus.OK)) + .orElse(new ResponseEntity<>(HttpStatus.NOT_FOUND)); + } + + /** + * DELETE /draft/:id : delete the "id" Draft. + * + * @param id the id of the Draft to delete + * @return the ResponseEntity with status 200 (OK) + */ + @DeleteMapping(value = "/draft/{id}", + produces = MediaType.APPLICATION_JSON_VALUE) + @Timed + public ResponseEntity deleteDraft(@PathVariable Long id) { + log.debug("REST request to delete Draft : {}", id); + draftService.delete(id); + return ResponseEntity.ok().headers(HeaderUtil.createEntityDeletionAlert("draft", id.toString())).build(); + } +} \ No newline at end of file diff --git a/src/main/resources/config/application-demo.yml b/src/main/resources/config/application-demo.yml new file mode 100644 index 000000000..e69de29bb diff --git a/src/main/resources/config/application-dev.yml b/src/main/resources/config/application-dev.yml new file mode 100644 index 000000000..e69de29bb diff --git a/src/main/resources/config/application-showcase.yml b/src/main/resources/config/application-showcase.yml new file mode 100644 index 000000000..061925dd8 --- /dev/null +++ b/src/main/resources/config/application-showcase.yml @@ -0,0 +1,42 @@ +spring: + datasource: + type: com.zaxxer.hikari.HikariDataSource + # l'url del db viene modificata all'avvio dell'applicazione a seconda del profilo (cnr => flows-cnr, + # oiv => flows-oiv) in modo che l'applicazione punti un db diverso a seconda del profilo + url: jdbc:h2:file:./DB-H2/flows;DB_CLOSE_DELAY=-1 + username: flows + password: + jpa: + database-platform: it.cnr.si.domain.util.FixedH2Dialect + database: H2 + show-sql: false + open-in-view: false + hibernate: + ddl-auto: none + naming: + strategy: org.springframework.boot.orm.jpa.hibernate.SpringNamingStrategy + properties: + hibernate.cache.use_second_level_cache: true + hibernate.cache.use_query_cache: false + hibernate.generate_statistics: false + hibernate.cache.region.factory_class: it.cnr.si.config.hazelcast.HazelcastCacheRegionFactory + hibernate.cache.use_minimal_puts: true + hibernate.cache.hazelcast.use_lite_member: true + +server: + port: 8080 + +ajp: + port: 8099 + timeout: 120000 + +cnr: + filesystem: + directory: /tmp/sprint-flows-showcase + +showcase: + mail: + mail.port: 587 + mail.user: + mail.password: + diff --git a/src/main/resources/config/application-test.yml b/src/main/resources/config/application-test.yml new file mode 100644 index 000000000..e69de29bb diff --git a/src/main/resources/config/bootstrap.yml b/src/main/resources/config/bootstrap.yml new file mode 100644 index 000000000..d54e0f395 --- /dev/null +++ b/src/main/resources/config/bootstrap.yml @@ -0,0 +1,10 @@ +spring: + application: + name: flows + cloud: + config: + server: + bootstrap: true + git: + uri: git@git.si.cnr.it:devops/configuration-repo.git + searchPaths: '{application}' diff --git a/src/main/resources/config/liquibase/cnr/changelog/20170216081459_added_entity_Form.xml b/src/main/resources/config/liquibase/cnr/changelog/20170216081459_added_entity_Form.xml index c3dd9d164..c0c70587a 100644 --- a/src/main/resources/config/liquibase/cnr/changelog/20170216081459_added_entity_Form.xml +++ b/src/main/resources/config/liquibase/cnr/changelog/20170216081459_added_entity_Form.xml @@ -85,5 +85,29 @@ + + + + + + + + + + + + + + diff --git a/src/main/resources/config/liquibase/cnr/changelog/20170504083856_added_entity_View.xml b/src/main/resources/config/liquibase/cnr/changelog/20170504083856_added_entity_View.xml index 43b9c6c0e..5f7bb0353 100644 --- a/src/main/resources/config/liquibase/cnr/changelog/20170504083856_added_entity_View.xml +++ b/src/main/resources/config/liquibase/cnr/changelog/20170504083856_added_entity_View.xml @@ -83,5 +83,29 @@ + + + + + + + + + + + + + + diff --git a/src/main/resources/config/liquibase/cnr/changelog/20190723085228_added_entity_Draft.xml b/src/main/resources/config/liquibase/cnr/changelog/20190723085228_added_entity_Draft.xml new file mode 100644 index 000000000..6003c7185 --- /dev/null +++ b/src/main/resources/config/liquibase/cnr/changelog/20190723085228_added_entity_Draft.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/config/liquibase/cnr/master.xml b/src/main/resources/config/liquibase/cnr/master.xml index d47d584a2..043ff1b4b 100644 --- a/src/main/resources/config/liquibase/cnr/master.xml +++ b/src/main/resources/config/liquibase/cnr/master.xml @@ -36,5 +36,7 @@ relativeToChangelogFile="false"/> + \ No newline at end of file diff --git a/src/main/resources/config/liquibase/cnr/new/acquisti-form.csv b/src/main/resources/config/liquibase/cnr/new/acquisti-form.csv index 5d6eafda4..eb8816f80 100644 --- a/src/main/resources/config/liquibase/cnr/new/acquisti-form.csv +++ b/src/main/resources/config/liquibase/cnr/new/acquisti-form.csv @@ -1,7 +1,7 @@ ID;PROCESS_DEFINITION_KEY;VERSION;TASK_ID;FORM 10000;acquisti;1;search-pi;
10001;acquisti;1;search-ti;
-10002;acquisti;1;start;"
Lo Staff Amministrativo Direzione può avviare il flusso Acquisti. Lo Staff Amministrativo Direzione sceglie se inserire dei documenti di Pre Determina che devono essere pubblicati in URP (mediante la scelta ‘Gestione Documenti Pre Determina in URP’ o, mediante la scelta ‘Predisponi la Determina’, predispone la ‘Decisione a Contrattare’ e la ‘Nomina del RUP’ in formato word/pdf e li carica nel sistema insieme alla Richiesta di Acquisto e ad eventuali allegati; inserisce le informazioni richieste relativamente all’acquisizione e agli impegni provvisori; inserisce nel sistema il nominativo del RUP e la priorità del flusso. I dati verranno inoltrati al Supporto alle Funzioni Direzionali se la struttura prevede questo ruolo altrimenti verranno inoltrati alla firma del direttore.
" +10002;acquisti;1;start;"
Lo Staff Amministrativo Direzione può avviare il flusso Acquisti. Lo Staff Amministrativo Direzione sceglie se inserire dei documenti di Pre Determina che devono essere pubblicati in URP (mediante la scelta ‘Gestione Documenti Pre Determina in URP’ o, mediante la scelta ‘Predisponi la Determina’, predispone la ‘Decisione a Contrattare’ e la ‘Nomina del RUP’ in formato word/pdf e li carica nel sistema insieme alla Richiesta di Acquisto e ad eventuali allegati; inserisce le informazioni richieste relativamente all’acquisizione e agli impegni provvisori; inserisce nel sistema il nominativo del RUP e la priorità del flusso. I dati verranno inoltrati al Supporto alle Funzioni Direzionali se la struttura prevede questo ruolo altrimenti verranno inoltrati alla firma del direttore.
" 10009;acquisti;1;predisposizione-revoca-2;"
Lo Staff Amministrativo Direzione ha il compito di verificare la volontà e la possibilità di annullamento della procedura. Se la procedura non deve essere revocata effettuando la scelta ‘Riproponi alla Firma’ il flusso tornerà al compito precedente. Per la revoca Lo Staff Amministrativo Direzione dovrà effettuare la scelta ‘Revoca con Provvedimento’ caricando il Provvedimento di Revoca.
" -10011;acquisti;1;modifica-decisione;"
Il Responsabile Acquisti ha il compito di rielaborare la decisione a contrattare con Nomina RUP secondo le indicazioni espresse nel commento. Il Responsabile Acquisti potrà caricare i documenti modificati (facendo l'upload del nuovo documento) e sottoporli nuovamente al ciclo di validazioni tramite l'azione 'Invia alla verifica'.”
" +10011;acquisti;1;modifica-decisione;"
Il Responsabile Acquisti ha il compito di rielaborare la decisione a contrattare con Nomina RUP secondo le indicazioni espresse nel commento. Il Responsabile Acquisti potrà caricare i documenti modificati (facendo l'upload del nuovo documento) e sottoporli nuovamente al ciclo di validazioni tramite l'azione 'Invia alla verifica'.”
" +10013;acquisti;1;espletamento-procedura;"
Il Responsabile Unico del Procedimento (RUP) ha il compito caricare il file Avviso di Post Informazione ed eventualmente il file RDO ed inserire nella maschera di inserimento tutti i dettagli necessari per il completamento dell’acquisto; Al termine di questa azione il flusso terminerà.
" 10014;acquisti;1;predisposizione-provvedimento-aggiudicazione;"
Lo Staff Amministrativo Direzione ha il compito di predisporre il Provvedimento di Aggiudicazione;. inserisce le informazioni richieste dal form e tramite l'azione 'Inoltra Provvedimento di Aggiudicazione' caricarnel sistema il file word/pdf che verrà inoltrato al Supporto alle Funzioni Direzionali.
" 10015;acquisti;1;verifica-provvedimento-aggiudicazione;"
" -10034;acquisti;1;ditteCandidate;"
" +10034;acquisti;1;ditteCandidate;"
" 10035;acquisti;1;revoca-stipula-mepa-consip;"
Lo Staff Amministrativo Direzione ha il compito di verificare la volontà e la possibilità di annullamento della procedura. Se la procedura non deve essere revocata effettuando la scelta ‘Annulla’ il flusso tornerà al compito precedente. Per la revoca Lo Staff Amministrativo Direzione dovrà effettuare la scelta ‘Revoca con Provvedimento’ caricando il Provvedimento di Revoca.
" -10037;acquisti;1;ditteCandidateInput;"
" \ No newline at end of file +10036;acquisti;1;pre-determina;"
Lo Staff Amministrativo Direzione tramite la scelta 'Pubblica Documenti Pre Determina in URP' ha il compito di caricare i documenti di pre Determina (facendo l'upload del nuovo documento) pubblicandoli in URP mentre tramite 'Predisponi la Determina' ha il compito di caricare i documenti necessari per la Determina a Contrarre.
" +10508;short-term-mobility-bandi;1;firma-verbale;"
FIRMA VERBALE
" diff --git a/src/main/resources/config/liquibase/cnr/new/short-term-mobility-bandi-view.csv b/src/main/resources/config/liquibase/cnr/new/short-term-mobility-bandi-view.csv new file mode 100644 index 000000000..98222380c --- /dev/null +++ b/src/main/resources/config/liquibase/cnr/new/short-term-mobility-bandi-view.csv @@ -0,0 +1,4 @@ +ID;PROCESS_ID;VERSION;TYPE;VIEW +10502;short-term-mobility-bandi;1;detail;


BANDO

+10503;short-term-mobility-bandi;1;export-csv;[{ varName: 'accordoBilaterale', label: 'Accordo Bilaterale' }, { varName: 'bando', label: 'Bando' }, { varName: 'idBando', label: 'ID Bando' }, { varName: 'scadenzaPresentazioneDomande', label: 'Data Scadenza Presentazione Domande' }, { varName: 'titolo', label: 'Titolo Domanda' }, { varName: 'descrizione', label: 'Descrizione Domanda' }, { varName: 'dataInvioDomanda', label: 'Data di invio domanda' }, { varName: 'dipartimento', label: 'Dipartimento' }, { varName: 'dipartimentoId', label: 'Codice Dipartimento' }, { varName: 'strutturaValutazioneDirigente', label: 'Struttura Valutazione Dirigente' }, { varName: 'nomeCognomeRichiedente', label: 'Nome e Cognome Responsabile Italiano' }, { varName: 'dataNascitaRichiedente', label: 'Data di nascita Responsabile Italiano' }, { varName: 'codiceFiscaleRichiedente', label: 'Codice Fiscale Responsabile Italiano' }, { varName: 'sessoRichiedente', label: 'Sesso Richiedente' }, { varName: 'emailRichiedente', label: 'email Richiedente' }, { varName: 'punteggio_totale', label: 'PUNTEGGIO TOTALE' }, { varName: 'punteggio_qualitaGruppoDiRicerca', label: 'PUNTEGGIO 1 - Qualita del progetto' }, { varName: 'punteggio_qualitaProgetto', label: 'PUNTEGGIO 2 - Qualita del gruppo di ricerca' }, { varName: 'punteggio_pianoDiLavoro', label: 'PUNTEGGIO 3 - Appropriatezza e giustificazione del piano di lavoro' }, { varName: 'punteggio_valoreAggiunto', label: 'PUNTEGGIO 4 -Valore aggiunto e piu ampio impatto della cooperazione bilaterale' }, { varName: 'notaDomandaRespinta', label: 'Commento Domanda respinta' }, { varName: 'notaMancatoFinanziamento', label: 'Commento Mancato Finanziamento' } ] +10505;short-term-mobility-bandi;1;search; diff --git a/src/main/resources/config/liquibase/cnr/new/short-term-mobility-domande-form.csv b/src/main/resources/config/liquibase/cnr/new/short-term-mobility-domande-form.csv new file mode 100644 index 000000000..fbeab470a --- /dev/null +++ b/src/main/resources/config/liquibase/cnr/new/short-term-mobility-domande-form.csv @@ -0,0 +1,8 @@ +ID;PROCESS_DEFINITION_KEY;VERSION;TASK_ID;FORM +10700;short-term-mobility-domande;1;search-pi;"
" +10701;short-term-mobility-domande;1;search-ti;"
" +10702;short-term-mobility-domande;1;start;"
START
" +10706;short-term-mobility-domande;1;valutazione-scientifica;"
VALUTAZIONE SCIENTIFICA


" +10709;short-term-mobility-domande;1;accettazione;"
ACCETTAZIONE
" diff --git a/src/main/resources/config/liquibase/cnr/new/short-term-mobility-domande-view.csv b/src/main/resources/config/liquibase/cnr/new/short-term-mobility-domande-view.csv new file mode 100644 index 000000000..71bc5f5fd --- /dev/null +++ b/src/main/resources/config/liquibase/cnr/new/short-term-mobility-domande-view.csv @@ -0,0 +1,4 @@ +ID;PROCESS_ID;VERSION;TYPE;VIEW +10702;short-term-mobility-domande;1;detail;


BANDO


DOMANDA


DATI PROPONENTE ITALIANO


DATI FRUITORE


ISTITUZIONE APPARTENENZA FRUITORE


VALUTAZIONE SCIENTIFICA

{{$parent.vm.data.entity.variabili.commento_curriculum}} {{$parent.vm.data.entity.variabili.commento_patnerIstituzioneStraniera}} {{$parent.vm.data.entity.variabili.commento_programmaDiRicerca}}


+10703;short-term-mobility-domande;1;export-csv;[{ varName: 'accordoBilaterale', label: 'Accordo Bilaterale' }, { varName: 'bando', label: 'Bando' }, { varName: 'idBando', label: 'ID Bando' }, { varName: 'scadenzaPresentazioneDomande', label: 'Data Scadenza Presentazione Domande' }, { varName: 'titolo', label: 'Titolo Domanda' }, { varName: 'descrizione', label: 'Descrizione Domanda' }, { varName: 'dataInvioDomanda', label: 'Data di invio domanda' }, { varName: 'dipartimento', label: 'Dipartimento' }, { varName: 'dipartimentoId', label: 'Codice Dipartimento' }, { varName: 'strutturaValutazioneDirigente', label: 'Struttura Valutazione Dirigente' }, { varName: 'nomeCognomeProponente', label: 'Nome e Cognome Proponente' }, { varName: 'dataNascitaRichiedente', label: 'Data di nascita Proponente' }, { varName: 'codiceFiscaleRichiedente', label: 'Codice Fiscale Proponente' }, { varName: 'sessoRichiedente', label: 'Sesso Richiedente' }, { varName: 'emailRichiedente', label: 'email Richiedente' }, { varName: 'punteggio_totale', label: 'PUNTEGGIO TOTALE' }, { varName: 'punteggio_curriculum', label: 'PUNTEGGIO 1 - Curriculum vitae - pubblicazioni' }, { varName: 'punteggio_patnerIstituzioneStraniera', label: 'PUNTEGGIO 2 - Partner e Istituzione straniera' }, { varName: 'punteggio_programmaDiRicerca', label: 'PUNTEGGIO 3 - Programma di ricerca' },{ varName: 'notaDomandaRespinta', label: 'Commento Domanda respinta' }, { varName: 'notaMancatoFinanziamento', label: 'Commento Mancato Finanziamento' } ] +10705;short-term-mobility-domande;1;search; diff --git a/src/main/resources/config/liquibase/oiv/changelog/20170504083856_added_entity_View.xml b/src/main/resources/config/liquibase/oiv/changelog/20170504083856_added_entity_View.xml index 84a8e8065..b5fba4051 100644 --- a/src/main/resources/config/liquibase/oiv/changelog/20170504083856_added_entity_View.xml +++ b/src/main/resources/config/liquibase/oiv/changelog/20170504083856_added_entity_View.xml @@ -24,18 +24,32 @@ - + + + - + + + +

DATI RICHIEDENTE


DOMANDA




PREAVVISO DI RIGETTO


ESITO DOMANDA


SOCCORSO ISTRUTTORIO

-2;iscrizione-elenco-oiv;search; -3;iscrizione-elenco-oiv;export-csv;[{ varName: 'nomeRichiedente', label: 'Nome Cognome Richiedente' }, { varName: 'dataNascitaRichiedente', label: 'Data di nascita' }, { varName: 'sessoRichiedente', label: 'Sesso' }, { varName: 'codiceFiscaleRichiedente', label: 'Codice Fiscale' }, { varName: 'emailRichiedente', label: 'Indirizzo mail' }, { varName: 'fasciaAppartenenza', label: 'Fascia di Appartenenza' }, { varName: 'dataIscrizioneElenco', label: 'Data Iscrizione' }, { varName: 'codiceIscrizioneElenco', label: 'Codice di iscrizione in elenco (se il soggetto risulta già iscritto)' }, { varName: 'nomeIstruttore', label: 'Nome Cognome Istruttore' }, { varName: 'sessoIstruttore', label: 'Sesso' }, { varName: 'telefonoIstruttore', label: 'Interno telefonico' }, { varName: 'emailIstruttore', label: 'Indirizzo mail' }, { varName: 'motivazioneCambioIstruttore', label: 'Motivazione cambio Istruttore' }, { varName: 'tempiPreavvisoRigetto', label: 'Tempi Preavviso Rigetto' }, { varName: 'tempiProcedimentaliDomanda', label: 'Tempi Procedimentali Domanda' }, { varName: 'tipologiaRichiesta', label: 'Tipologia Richiesta' }, { varName: 'dataInvioDomanda', label: 'Data di invio domanda' }, { varName: 'dataScadenzaTerminiDomanda', label: 'Data scadenza termini domanda' }, { varName: 'valutazioneEsperienze_json', label: 'TABELLA - ESPERIENZA /INCARICHI' }, { varName: 'fasciaAppartenenzaProposta ', label: 'Fascia di Appartenenza proposta ' }, { varName: 'fasciaAppartenenzaAttribuita ', label: 'Fascia di Appartenenza Attribuita ' }, { varName: 'valutazioneIstruttore ', label: 'Giudizio Complessivo Istruttore ' }, { varName: 'statoFinaleDomanda ', label: 'Stato Finale Domanda ' }, { varName: 'fascia_professionale_indeterminata ', label: 'fascia_professionale_indeterminata ' }, { varName: 'domanda_priva_dettagli_esperienze ', label: 'domanda_priva_dettagli_esperienze ' }, { varName: 'domanda_provvisoria ', label: 'domanda_provvisoria ' }, { varName: 'domanda_non_firmata ', label: 'domanda_non_firmata ' }, { varName: 'anomalie_certificato ', label: 'anomalie_certificato ' }, { varName: 'domanda_incompleta ', label: 'domanda_incompleta ' }, { varName: 'documento_scaduto ', label: 'documento_scaduto ' }, { varName: 'documento_illegibile ', label: 'documento_illegibile ' }, { varName: 'domanda_firmata_non_leggibile ', label: 'domanda_firmata_non_leggibile ' }, { varName: 'cv_non_allegato ', label: 'cv_non_allegato ' }, { varName: 'documento_non_allegato ', label: 'documento_non_allegato ' }, { varName: 'documento_non_completo ', label: 'documento_non_completo ' }, { varName: 'domanda_senza_dati_documento ', label: 'domanda_senza_dati_documento ' }, { varName: 'motivazioneStandard ', label: 'Anomalia per Domanda non firmata ' }, { varName: 'osservazioniDG ', label: 'Osservazioni DG ' }, { varName: 'osservazioniRichiedente ', label: 'Osservazioni Richiedente ' }, { varName: 'tempiSoccorsoIstruttorio ', label: 'Tempi Soccorso istruttorio ' }, { varName: 'osservazioniGeneraliSoccorso ', label: 'Osservazioni Generali Soccorso ' }, { varName: 'osservazioniSoccorsoRichiedente ', label: 'Osservazioni Richiedente ' }, { varName: 'dataComunicazioneSoccorsoIstruttorio ', label: 'Data Comunicazione Utente ' }, { varName: 'dataInvioSoccorsoIstruttorio ', label: 'Data Invio Soccorso Istruttorio ' }, { varName: 'dataTermineSoccorsoIstruttorio ', label: 'Data Termine Presentazione Soccorso Istruttorio ' }, { varName: 'dataPreavviso ', label: 'Data Preavviso di Rigetto ' }, { varName: 'protocolloPreavviso ', label: 'Nr Protocollo Preavviso di Rigetto ' }, { varName: 'motivazioneValutazioneDifformeDaIstruttore ', label: 'Testo Motivazione valutazione difforme da valutazione Istruttore ' }, { varName: 'osservazioniRichiedente ', label: 'Osservazioni Richiedente ' }, { varName: 'motivazioneStandard ', label: 'Motivazione Standard(Flag)' }, { varName: '', label: 'Testo Motivazione Specifica ' }, { varName: 'dataRigetto ', label: 'Data Protocollo Rigetto ' }, { varName: 'protocolloRigetto ', label: 'Nr Protocollo Rigetto ' }, { varName: 'osservazioniDG ', label: 'Osservazioni DG ' }, { varName: 'da calcolare ', label: 'Rigetto per Decorso termini di Presentazione delle Osservazioni(Flag)' }, { varName: 'da calcolare ', label: 'Tempo totale Istruttoria ' }, { varName: 'da calcolare ', label: 'Domanda Oltre Tempi di Scadenza(Flag)' } ] +ID;PROCESS_ID;TYPE;VERSION;VIEW +1;iscrizione-elenco-oiv;detail;1;

DATI RICHIEDENTE


DOMANDA




PREAVVISO DI RIGETTO


ESITO DOMANDA


SOCCORSO ISTRUTTORIO

+2;iscrizione-elenco-oiv;search;1; +3;iscrizione-elenco-oiv;export-csv;1;[{ varName: 'nomeRichiedente', label: 'Nome Cognome Richiedente' }, { varName: 'dataNascitaRichiedente', label: 'Data di nascita' }, { varName: 'sessoRichiedente', label: 'Sesso' }, { varName: 'codiceFiscaleRichiedente', label: 'Codice Fiscale' }, { varName: 'emailRichiedente', label: 'Indirizzo mail' }, { varName: 'fasciaAppartenenza', label: 'Fascia di Appartenenza' }, { varName: 'dataIscrizioneElenco', label: 'Data Iscrizione' }, { varName: 'codiceIscrizioneElenco', label: 'Codice di iscrizione in elenco (se il soggetto risulta già iscritto)' }, { varName: 'nomeIstruttore', label: 'Nome Cognome Istruttore' }, { varName: 'sessoIstruttore', label: 'Sesso' }, { varName: 'telefonoIstruttore', label: 'Interno telefonico' }, { varName: 'emailIstruttore', label: 'Indirizzo mail' }, { varName: 'motivazioneCambioIstruttore', label: 'Motivazione cambio Istruttore' }, { varName: 'tempiPreavvisoRigetto', label: 'Tempi Preavviso Rigetto' }, { varName: 'tempiProcedimentaliDomanda', label: 'Tempi Procedimentali Domanda' }, { varName: 'tipologiaRichiesta', label: 'Tipologia Richiesta' }, { varName: 'dataInvioDomanda', label: 'Data di invio domanda' }, { varName: 'dataScadenzaTerminiDomanda', label: 'Data scadenza termini domanda' }, { varName: 'valutazioneEsperienze_json', label: 'TABELLA - ESPERIENZA /INCARICHI' }, { varName: 'fasciaAppartenenzaProposta ', label: 'Fascia di Appartenenza proposta ' }, { varName: 'fasciaAppartenenzaAttribuita ', label: 'Fascia di Appartenenza Attribuita ' }, { varName: 'valutazioneIstruttore ', label: 'Giudizio Complessivo Istruttore ' }, { varName: 'statoFinaleDomanda ', label: 'Stato Finale Domanda ' }, { varName: 'fascia_professionale_indeterminata ', label: 'fascia_professionale_indeterminata ' }, { varName: 'domanda_priva_dettagli_esperienze ', label: 'domanda_priva_dettagli_esperienze ' }, { varName: 'domanda_provvisoria ', label: 'domanda_provvisoria ' }, { varName: 'domanda_non_firmata ', label: 'domanda_non_firmata ' }, { varName: 'anomalie_certificato ', label: 'anomalie_certificato ' }, { varName: 'domanda_incompleta ', label: 'domanda_incompleta ' }, { varName: 'documento_scaduto ', label: 'documento_scaduto ' }, { varName: 'documento_illegibile ', label: 'documento_illegibile ' }, { varName: 'domanda_firmata_non_leggibile ', label: 'domanda_firmata_non_leggibile ' }, { varName: 'cv_non_allegato ', label: 'cv_non_allegato ' }, { varName: 'documento_non_allegato ', label: 'documento_non_allegato ' }, { varName: 'documento_non_completo ', label: 'documento_non_completo ' }, { varName: 'domanda_senza_dati_documento ', label: 'domanda_senza_dati_documento ' }, { varName: 'motivazioneStandard ', label: 'Anomalia per Domanda non firmata ' }, { varName: 'osservazioniDG ', label: 'Osservazioni DG ' }, { varName: 'osservazioniRichiedente ', label: 'Osservazioni Richiedente ' }, { varName: 'tempiSoccorsoIstruttorio ', label: 'Tempi Soccorso istruttorio ' }, { varName: 'osservazioniGeneraliSoccorso ', label: 'Osservazioni Generali Soccorso ' }, { varName: 'osservazioniSoccorsoRichiedente ', label: 'Osservazioni Richiedente ' }, { varName: 'dataComunicazioneSoccorsoIstruttorio ', label: 'Data Comunicazione Utente ' }, { varName: 'dataInvioSoccorsoIstruttorio ', label: 'Data Invio Soccorso Istruttorio ' }, { varName: 'dataTermineSoccorsoIstruttorio ', label: 'Data Termine Presentazione Soccorso Istruttorio ' }, { varName: 'dataPreavviso ', label: 'Data Preavviso di Rigetto ' }, { varName: 'protocolloPreavviso ', label: 'Nr Protocollo Preavviso di Rigetto ' }, { varName: 'motivazioneValutazioneDifformeDaIstruttore ', label: 'Testo Motivazione valutazione difforme da valutazione Istruttore ' }, { varName: 'osservazioniRichiedente ', label: 'Osservazioni Richiedente ' }, { varName: 'motivazioneStandard ', label: 'Motivazione Standard(Flag)' }, { varName: '', label: 'Testo Motivazione Specifica ' }, { varName: 'dataRigetto ', label: 'Data Protocollo Rigetto ' }, { varName: 'protocolloRigetto ', label: 'Nr Protocollo Rigetto ' }, { varName: 'osservazioniDG ', label: 'Osservazioni DG ' }, { varName: 'da calcolare ', label: 'Rigetto per Decorso termini di Presentazione delle Osservazioni(Flag)' }, { varName: 'da calcolare ', label: 'Tempo totale Istruttoria ' }, { varName: 'da calcolare ', label: 'Domanda Oltre Tempi di Scadenza(Flag)' } ] diff --git a/src/main/resources/config/liquibase/showcase/changelog/20190125124942_added_entity_Avviso.xml b/src/main/resources/config/liquibase/showcase/changelog/20190125124942_added_entity_Avviso.xml index 08d984ba0..68e13f014 100644 --- a/src/main/resources/config/liquibase/showcase/changelog/20190125124942_added_entity_Avviso.xml +++ b/src/main/resources/config/liquibase/showcase/changelog/20190125124942_added_entity_Avviso.xml @@ -1,8 +1,8 @@ + xmlns="http://www.liquibase.org/xml/ns/dbchangelog" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.4.xsd"> @@ -24,11 +24,11 @@ - + - + diff --git a/src/main/resources/logback-spring.xml b/src/main/resources/logback-spring.xml index c7816559d..051af602f 100644 --- a/src/main/resources/logback-spring.xml +++ b/src/main/resources/logback-spring.xml @@ -62,4 +62,45 @@ + + + + + + + + udp:${graylog.host} + ${graylog.port} + + 1.1 + ace-prova + true + true + true + yyyy-MM-dd HH:mm:ss,SSSS + 8192 + + + + environment=dev, + tag=sprint-flows + + + environment=String,tag=String + + + mdcField1,mdcField2 + mdc.*,(mdc|MDC)fields + true + + ${graylog.loglevel} + + + + + + + + + diff --git a/src/main/resources/mails/altreNotifiche.html b/src/main/resources/mails/altreNotifiche.html index c31035092..abb81b6c9 100644 --- a/src/main/resources/mails/altreNotifiche.html +++ b/src/main/resources/mails/altreNotifiche.html @@ -1,12 +1,12 @@ - - Notifica relativa ad un flusso - - - -

Notifica relativa al flusso NOME FLUSSO

- + + Notifica relativa ad un flusso + + + +

Notifica relativa al flusso NOME FLUSSO

+
dal titolo: ""
@@ -25,8 +25,8 @@

Notifica relativa al flusso NOME FLUSSO Link per accedere direttamente al dettali del flusso - - + +

Si prega di non rispondere alla presente mail generata automaticamente dal sistema. @@ -34,12 +34,12 @@

Notifica relativa al flusso NOME FLUSSOCordiali saluti,
DIPARTIMENTO FUNZIONE PUBBLICA - Scrivania Digitale

- +

Si prega di non rispondere alla presente mail generata automaticamente dal sistema.

Accedere alla scrivania digitale utlizzando il seguente il link:
https://nuovascrivaniadigitale.cnr.it

Cordiali saluti,
CNR - Scrivania Digitale

- + \ No newline at end of file diff --git a/src/main/resources/mails/notificaFlow.html b/src/main/resources/mails/notificaFlow.html index 33c9181f9..25f04c8a1 100644 --- a/src/main/resources/mails/notificaFlow.html +++ b/src/main/resources/mails/notificaFlow.html @@ -1,43 +1,43 @@ - - Notifica relativa ad un flusso - - - -

Notifica relativa al flusso NOME FLUSSO

- + + Notifica relativa ad un flusso + + + +

Notifica relativa al flusso NOME FLUSSO

+
dal titolo: "OGGETTO FLUSSO"
-
-
-

- Gentile nome.cognome
- +


+
+

+ Gentile nome.cognome
+ Riceve questa notifica in quanto parte del gruppo NOME GRUPPO -

- Si notifica che il flusso in oggetto ha raggiunto la fase "FASE" -

- Il compito presenta la seguente nota di commento: -

Commento
-
+

+ Si notifica che il flusso in oggetto ha raggiunto la fase "FASE" +

+ Il compito presenta la seguente nota di commento: +

Commento
+
- - Link per accedere direttamente al dettali del flusso - + + Link per accedere direttamente al dettali del flusso + -
-
-

Si prega di non rispondere alla presente mail generata automaticamente dal sistema. -

Accedere alla scrivania digitale utlizzando il seguente il link:
- https://scrivaniadigitale.palazzochigi.it -

Cordiali saluti,
DIPARTIMENTO FUNZIONE PUBBLICA - Scrivania Digitale -

- -
-

Si prega di non rispondere alla presente mail generata automaticamente dal sistema. -

Accedere alla scrivania digitale utlizzando il seguente il link:
- https://nuovascrivaniadigitale.cnr.it -

Cordiali saluti,
CNR - Scrivania Digitale -

- +
+
+

Si prega di non rispondere alla presente mail generata automaticamente dal sistema. +

Accedere alla scrivania digitale utlizzando il seguente il link:
+ https://scrivaniadigitale.palazzochigi.it +

Cordiali saluti,
DIPARTIMENTO FUNZIONE PUBBLICA - Scrivania Digitale +

+ +
+

Si prega di non rispondere alla presente mail generata automaticamente dal sistema. +

Accedere alla scrivania digitale utlizzando il seguente il link:
+ https://nuovascrivaniadigitale.cnr.it +

Cordiali saluti,
CNR - Scrivania Digitale +

+ \ No newline at end of file diff --git a/src/main/resources/mails/notificaProcesso.html b/src/main/resources/mails/notificaProcesso.html index 93c067c7b..1e8ecdee4 100644 --- a/src/main/resources/mails/notificaProcesso.html +++ b/src/main/resources/mails/notificaProcesso.html @@ -1,44 +1,44 @@ - - Notifica relativa ad un flusso - - - -

Notifica relativa al flusso NOME FLUSSO

-
- + + Notifica relativa ad un flusso + + + +

Notifica relativa al flusso NOME FLUSSO

+
+
dal titolo: "OGGETTO FLUSSO"
-
-

- Gentile nome.cognome
- +


+

+ Gentile nome.cognome
+ Riceve questa notifica in quanto parte del gruppo NOME GRUPPO -

- Si notifica che il flusso in oggetto ha raggiunto la fase "FASE" -

- Il compito presenta la seguente nota di commento: -

Commento
-
+

+ Si notifica che il flusso in oggetto ha raggiunto la fase "FASE" +

+ Il compito presenta la seguente nota di commento: +

Commento
+
- - Link per accedere direttamente al dettali del flusso - - - -
-
-

Si prega di non rispondere alla presente mail generata automaticamente dal sistema. -

Accedere alla scrivania digitale utlizzando il seguente il link:
- https://scrivaniadigitale.palazzochigi.it -

Cordiali saluti,
DIPARTIMENTO FUNZIONE PUBBLICA - Scrivania Digitale -

- -
-

Si prega di non rispondere alla presente mail generata automaticamente dal sistema. -

Accedere alla scrivania digitale utlizzando il seguente il link:
- https://nuovascrivaniadigitale.cnr.it -

Cordiali saluti,
CNR - Scrivania Digitale -

- + + Link per accedere direttamente al dettali del flusso + + + +
+
+

Si prega di non rispondere alla presente mail generata automaticamente dal sistema. +

Accedere alla scrivania digitale utlizzando il seguente il link:
+ https://scrivaniadigitale.palazzochigi.it +

Cordiali saluti,
DIPARTIMENTO FUNZIONE PUBBLICA - Scrivania Digitale +

+ +
+

Si prega di non rispondere alla presente mail generata automaticamente dal sistema. +

Accedere alla scrivania digitale utlizzando il seguente il link:
+ https://nuovascrivaniadigitale.cnr.it +

Cordiali saluti,
CNR - Scrivania Digitale +

+ \ No newline at end of file diff --git a/src/main/resources/mails/notificaTask.html b/src/main/resources/mails/notificaTask.html index 49ea50815..4332d12f5 100644 --- a/src/main/resources/mails/notificaTask.html +++ b/src/main/resources/mails/notificaTask.html @@ -1,42 +1,42 @@ - - Notifica relativa ad un flusso - - - -

Notifica relativa al flusso NOME FLUSSO

- + + Notifica relativa ad un flusso + + + +

Notifica relativa al flusso NOME FLUSSO

+
dal titolo: "OGGETTO FLUSSO"
-
-

- Gentile nome.cognome
- +


+

+ Gentile nome.cognome
+ Riceve questa notifica in quanto parte del gruppo NOME GRUPPO -

- Si notifica che il flusso in oggetto ha raggiunto la fase "FASE" -

- Il compito presenta la seguente nota di commento: -

Commento
-
+

+ Si notifica che il flusso in oggetto ha raggiunto la fase "FASE" +

+ Il compito presenta la seguente nota di commento: +

Commento
+
- - Link per accedere direttamente al dettali del flusso - - -
-
-

Si prega di non rispondere alla presente mail generata automaticamente dal sistema. -

Accedere alla scrivania digitale utlizzando il seguente il link:
- https://scrivaniadigitale.palazzochigi.it -

Cordiali saluti,
DIPARTIMENTO FUNZIONE PUBBLICA - Scrivania Digitale -

- -
-

Si prega di non rispondere alla presente mail generata automaticamente dal sistema. -

Accedere alla scrivania digitale utlizzando il seguente il link:
- https://nuovascrivaniadigitale.cnr.it -

Cordiali saluti,
CNR - Scrivania Digitale -

- + + Link per accedere direttamente al dettali del flusso + + +
+
+

Si prega di non rispondere alla presente mail generata automaticamente dal sistema. +

Accedere alla scrivania digitale utlizzando il seguente il link:
+ https://scrivaniadigitale.palazzochigi.it +

Cordiali saluti,
DIPARTIMENTO FUNZIONE PUBBLICA - Scrivania Digitale +

+ +
+

Si prega di non rispondere alla presente mail generata automaticamente dal sistema. +

Accedere alla scrivania digitale utlizzando il seguente il link:
+ https://nuovascrivaniadigitale.cnr.it +

Cordiali saluti,
CNR - Scrivania Digitale +

+ \ No newline at end of file diff --git a/src/main/resources/mails/taskAssegnatoAlGruppo.html b/src/main/resources/mails/taskAssegnatoAlGruppo.html index 3de29d749..a18390304 100644 --- a/src/main/resources/mails/taskAssegnatoAlGruppo.html +++ b/src/main/resources/mails/taskAssegnatoAlGruppo.html @@ -1,46 +1,46 @@ - - Un nuovo compito è stato assegnato al gruppo - - - -

Un nuovo compito è stato assegnato al gruppo NOME GRUPPO

-
-

- Gentile nome.cognome -

-

- Il compito - - per il flusso TITOLO FLUSSO - + + Un nuovo compito è stato assegnato al gruppo + + + +

Un nuovo compito è stato assegnato al gruppo NOME GRUPPO

+
+

+ Gentile nome.cognome +

+

+ Il compito + + per il flusso TITOLO FLUSSO +
dal titolo: "OGGETTO FLUSSO"
-


- è stato assegnato al gruppo NOME GRUPPO -

- Il compito presenta la seguente nota di commento: -

Commento
-
+
+è stato assegnato al gruppo NOME GRUPPO +

+ Il compito presenta la seguente nota di commento: +

Commento
+
- - Link per accedere direttamente al compito - + + Link per accedere direttamente al compito + -
+
-
-

Si prega di non rispondere alla presente mail generata automaticamente dal sistema. -

Accedere alla scrivania digitale utlizzando il seguente il link:
- https://scrivaniadigitale.palazzochigi.it -

Cordiali saluti,
DIPARTIMENTO FUNZIONE PUBBLICA - Scrivania Digitale -

- -
-

Si prega di non rispondere alla presente mail generata automaticamente dal sistema. -

Accedere alla scrivania digitale utlizzando il seguente il link:
- ${serverUrl} -

Cordiali saluti,
CNR - Scrivania Digitale -

- +
+

Si prega di non rispondere alla presente mail generata automaticamente dal sistema. +

Accedere alla scrivania digitale utlizzando il seguente il link:
+ https://scrivaniadigitale.palazzochigi.it +

Cordiali saluti,
DIPARTIMENTO FUNZIONE PUBBLICA - Scrivania Digitale +

+ +
+

Si prega di non rispondere alla presente mail generata automaticamente dal sistema. +

Accedere alla scrivania digitale utlizzando il seguente il link:
+ ${serverUrl} +

Cordiali saluti,
CNR - Scrivania Digitale +

+ \ No newline at end of file diff --git a/src/main/resources/print/cnr-print/valutazioneShortTermMobility.jasper b/src/main/resources/print/cnr-print/valutazioneShortTermMobility.jasper new file mode 100644 index 000000000..4fd966fda Binary files /dev/null and b/src/main/resources/print/cnr-print/valutazioneShortTermMobility.jasper differ diff --git a/src/main/resources/print/cnr-print/valutazioneShortTermMobility.jrxml b/src/main/resources/print/cnr-print/valutazioneShortTermMobility.jrxml new file mode 100644 index 000000000..54b77c45d --- /dev/null +++ b/src/main/resources/print/cnr-print/valutazioneShortTermMobility.jrxml @@ -0,0 +1,562 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <band height="63" splitType="Stretch"> + <textField> + <reportElement x="0" y="4" width="556" height="40" uuid="1c38430f-18c4-4353-b5a3-4c46137ce2cb"/> + <textElement textAlignment="Center"> + <font size="26" isBold="true"/> + </textElement> + <textFieldExpression><![CDATA["SCHEDA VALUTAZIONE DEL PROGETTO "]]></textFieldExpression> + </textField> + <textField isStretchWithOverflow="true"> + <reportElement x="0" y="42" width="555" height="21" uuid="10119319-030e-4176-a69a-e86a174f58cc"/> + <textElement textAlignment="Center" verticalAlignment="Middle"> + <font isItalic="true"/> + </textElement> + <textFieldExpression><![CDATA["Identificativo Flusso: " + $F{key}]]></textFieldExpression> + </textField> + </band> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/processes/cnr/short-term-mobility-bandi.bpmn b/src/main/resources/processes/cnr/short-term-mobility-bandi.bpmn new file mode 100644 index 000000000..84c396d6f --- /dev/null +++ b/src/main/resources/processes/cnr/short-term-mobility-bandi.bpmn @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/processes/cnr/short-term-mobility-domande.bpmn b/src/main/resources/processes/cnr/short-term-mobility-domande.bpmn new file mode 100644 index 000000000..7b0184572 --- /dev/null +++ b/src/main/resources/processes/cnr/short-term-mobility-domande.bpmn @@ -0,0 +1,406 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ${scadenzaPresentazioneDomande} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/processes/tests/.gitignore b/src/main/resources/processes/tests/.gitignore new file mode 100644 index 000000000..da3de9ccf --- /dev/null +++ b/src/main/resources/processes/tests/.gitignore @@ -0,0 +1,4 @@ +/flussoAPPROVVIGIONAMENTI-IT.bpmn +/short-term-mobility-bandi-test.bpmn +/short-term-mobility-bandi2.bpmn +/short-term-mobility.bpmn diff --git a/src/main/webapp/app/app.constants.js b/src/main/webapp/app/app.constants.js index 9db4dc7b9..d989f24f0 100644 --- a/src/main/webapp/app/app.constants.js +++ b/src/main/webapp/app/app.constants.js @@ -3,7 +3,7 @@ // DO NOT EDIT THIS FILE, EDIT THE GULP TASK NGCONSTANT SETTINGS INSTEAD WHICH GENERATES THIS FILE angular .module('sprintApp') - .constant('VERSION', "1.0.9-SNAPSHOT") + .constant('VERSION', "1.0.26-SNAPSHOT") .constant('DEBUG_INFO_ENABLED', false) ; })(); diff --git a/src/main/webapp/app/home/home.html b/src/main/webapp/app/home/home.html index 006adc2a2..19d5f4792 100644 --- a/src/main/webapp/app/home/home.html +++ b/src/main/webapp/app/home/home.html @@ -19,12 +19,12 @@

Benvenuti


Questa versione "Showcase" della Scrivania Digitale contiene un semplice flusso di Richiesta Permessi/Ferie per illustrare le funzionalità del sistema

Sono presenti i seguenti utenti: -

    -
  • utente1:utente1 che, come dipendente può fare una richiesta di ferie attraverso una form apposita
  • -
  • utente2:utente2 e utente3:utente3 che, come segreteria, rivedono e inoltrano la richiesta al direttore
  • -
  • direttore:utente4 che approva la richiesta
  • -
  • admin:admin che non ha funzioni nel flusso, ma può eseguire azioni speciali nel sistema
  • -
+
    +
  • utente1:utente1 che, come dipendente può fare una richiesta di ferie attraverso una form apposita
  • +
  • utente2:utente2 e utente3:utente3 che, come segreteria, rivedono e inoltrano la richiesta al direttore
  • +
  • direttore:utente4 che approva la richiesta
  • +
  • admin:admin che non ha funzioni nel flusso, ma può eseguire azioni speciali nel sistema
  • +

In particolare gli utenti del gruppo Segreteria possono entrambi eseguire il compito di inoltrare la richiesta. Se uno di loro decide di prenderlo in carico, l'altro non potrà eseguirlo, ma lo potrà visionare nella scheda "Compiti di gruppo in carico ad altri".

Quando la richiesta passa al direttore (o all'utente1 che ha avviato il flusso), il compito è assegnato direttamente a quell'utente diff --git a/src/main/webapp/app/inputs/selectlookup/selectlookup.directive.js b/src/main/webapp/app/inputs/selectlookup/selectlookup.directive.js new file mode 100644 index 000000000..46ca0e0e0 --- /dev/null +++ b/src/main/webapp/app/inputs/selectlookup/selectlookup.directive.js @@ -0,0 +1,28 @@ +(function() { + 'use strict'; + + angular.module('sprintApp') + .directive('selectlookup', selectlookup); + + selectlookup.$inject = ['dataService', '$log', 'utils']; + + function selectlookup(dataService, $log, utils) { + + return { + restrict: 'E', + templateUrl: 'app/inputs/selectlookup/selectlookup.html', + scope: { + ngModel: '=', + type: '@', + id: '@' + }, + link: function ($scope, element, attrs) { + + dataService.lookup[$scope.type]().then(function(response) { + $scope.records = response.data; + }) + + } + } + } +})(); \ No newline at end of file diff --git a/src/main/webapp/app/inputs/selectlookup/selectlookup.html b/src/main/webapp/app/inputs/selectlookup/selectlookup.html new file mode 100644 index 000000000..b751045f3 --- /dev/null +++ b/src/main/webapp/app/inputs/selectlookup/selectlookup.html @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/src/main/webapp/app/pages/task/task.controller.js b/src/main/webapp/app/pages/task/task.controller.js index ad6ab5c0d..bc484c174 100644 --- a/src/main/webapp/app/pages/task/task.controller.js +++ b/src/main/webapp/app/pages/task/task.controller.js @@ -3,7 +3,7 @@ angular .module('sprintApp') - .controller('TaskController', HomeController); + .controller('TaskController', TaskController); /** * Questo e' un po' il cuore di tutta l'applicazione, per questo e' un pochino piu' complicato di altri @@ -25,9 +25,9 @@ * * @author mtrycz */ - HomeController.$inject = ['$scope', 'Principal', 'LoginService', '$state', 'dataService', 'AlertService', '$log', '$http', '$q', 'Upload', 'utils', '$localStorage']; + TaskController.$inject = ['$scope', 'Principal', 'LoginService', '$state', 'dataService', 'AlertService', '$log', '$http', '$q', 'Upload', 'utils', '$localStorage']; - function HomeController($scope, Principal, LoginService, $state, dataService, AlertService, $log, $http, $q, Upload, utils, $localStorage) { + function TaskController($scope, Principal, LoginService, $state, dataService, AlertService, $log, $http, $q, Upload, utils, $localStorage) { var vm = this; $scope.data = {}; vm.taskId = $state.params.taskId; @@ -45,6 +45,7 @@ formPromise.resolve(2); }; // usato nell'html + $q.all([formPromise.promise, dataPromise.promise]) .then(function (value) { angular.forEach(taskForm, function (el) { @@ -60,6 +61,16 @@ $scope.data["tipologiaAffidamentoDiretto"] = vm.taskVariables["tipologiaAffidamentoDiretto"]; if ([21, 23].includes(Number(vm.taskVariables["strumentoAcquisizioneId"]))) $scope.data["tipologiaProceduraSelettiva"] = vm.taskVariables["tipologiaProceduraSelettiva"]; + + dataService.draft.getDraftByTaskId($state.params.taskId, null).then( + function(response){ + //popolo i campi col contenuto del json + var json = JSON.parse(response.data.json); + for (var key in Object.keys(json)) { + $scope.data["" + key] = json[key] + } + } + ); }); if ($state.params.taskId) { @@ -97,11 +108,9 @@ AlertService.warning("Inserire tutti i valori obbligatori."); } else { - // Serializzo gli oggetti complessi in stringhe // E' necessario copiarli in un nuovo campo, senno' angular si incasina // Non posso usare angular.copy() perche' ho degli oggetti File non gestiti bene - utils.prepareForSubmit($scope.data, $scope.attachments); Upload.upload({ @@ -131,6 +140,19 @@ utils.downloadFile(url, filename, mimetype); } + $scope.createDraft = function (taskId) { + //copio scope.data e tolgo i campi che non voglio salvare nel Draft + var json = Object.assign({}, $scope.data); + delete json.entity; + delete json.processDefinitionId; + delete json.sceltaUtente; + delete json.taskId; + delete json.dipartimentoId; + delete json.dipartimento; + //salvo il draft con username null perchè deve essere visibile a tutti + dataService.draft.updateDraft($state.params.taskId, json, null); + } + function removeFromCart(taskId) { if (taskId && $localStorage.cart) { delete $localStorage.cart[taskId]; @@ -140,4 +162,4 @@ } } } -})(); \ No newline at end of file +})(); diff --git a/src/main/webapp/app/pages/task/task.html b/src/main/webapp/app/pages/task/task.html index 5b55a954a..cc472d965 100644 --- a/src/main/webapp/app/pages/task/task.html +++ b/src/main/webapp/app/pages/task/task.html @@ -30,6 +30,9 @@

{{vm.definition.name}}


+
+ +
@@ -37,17 +40,12 @@

{{vm.definition.name}}

-
-
- - -
diff --git a/src/main/webapp/app/services/cnr/data.js b/src/main/webapp/app/services/cnr/data.js index e48194322..714c0cfc1 100644 --- a/src/main/webapp/app/services/cnr/data.js +++ b/src/main/webapp/app/services/cnr/data.js @@ -188,6 +188,9 @@ }, users: function (username) { return $http.get('api/lookup/ldap/user/' + username); + }, + mycdsuos: function () { + return $http.get('api/lookup/ace/user/cdsuoabilitate'); } }, mail: { @@ -278,6 +281,29 @@ return $http.get("api/faqs/readable"); } }, + draft: { + getDraftByTaskId: function (taskId, username) { + return $http({ + url: 'api/draft/getDraftByTaskId', + method: 'GET', + params: { + taskId: taskId, + username: (username ? username : '') + }, + }); + }, + updateDraft: function (taskId, json, username) { + return $http({ + url: 'api/drafts/updateDraft?', + method: 'PUT', + params: { + taskId: taskId, + json: json, + username: (username ? username : '') + } + }); + } + }, signMany: function (username, password, otp, ids) { return $http({ url: "api/tasks/signMany", diff --git a/src/main/webapp/content/css/main.css b/src/main/webapp/content/css/main.css index 707e42bf1..9b1b3bce9 100644 --- a/src/main/webapp/content/css/main.css +++ b/src/main/webapp/content/css/main.css @@ -645,4 +645,4 @@ select.ng-touched.ng-invalid { /* fix per JsTree: i risultati della ricerca appaiono in verde */ .jstree-default .jstree-search { color: #0d6500; -} \ No newline at end of file +} diff --git a/src/main/webapp/index.html b/src/main/webapp/index.html index 034a2b3aa..57293e45b 100644 --- a/src/main/webapp/index.html +++ b/src/main/webapp/index.html @@ -152,6 +152,7 @@ + diff --git a/src/test/java/it/cnr/si/flows/ng/TestServices.java b/src/test/java/it/cnr/si/flows/ng/TestServices.java index a1fbb647a..274eb982a 100644 --- a/src/test/java/it/cnr/si/flows/ng/TestServices.java +++ b/src/test/java/it/cnr/si/flows/ng/TestServices.java @@ -31,8 +31,7 @@ import java.util.List; import static it.cnr.si.flows.ng.utils.Enum.SiglaList.TIPOLOGIA_ACQUISIZIONE; -import static it.cnr.si.flows.ng.utils.Enum.VariableEnum.descrizione; -import static it.cnr.si.flows.ng.utils.Enum.VariableEnum.titolo; +import static it.cnr.si.flows.ng.utils.Enum.VariableEnum.*; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.springframework.http.HttpStatus.NO_CONTENT; @@ -153,10 +152,11 @@ private void login(String user, String psw) { public int myTearDown() { - int processDeleted = 0; + //cancello le Process Instance creata all'inizio del test' List list = runtimeService.createProcessInstanceQuery().list(); HttpServletResponse res = new MockHttpServletResponse(); + int processDeleted = 0; for (ProcessInstance pi : list) { processInstanceResource.deleteProcessInstance(pi.getProcessInstanceId(), "TEST", res); assertEquals(NO_CONTENT.value(), res.getStatus()); @@ -179,7 +179,7 @@ public ProcessInstanceResponse mySetUp(Enum.ProcessDefinitionEnum processDefinit MockMultipartHttpServletRequest req = new MockMultipartHttpServletRequest(); processDefinition = repositoryService.createProcessDefinitionQuery() - .processDefinitionKey(processDefinitionKey.getValue()) + .processDefinitionKey(processDefinitionKey.getProcessDefinition()) .latestVersion() .singleResult() .getId(); @@ -200,6 +200,19 @@ public ProcessInstanceResponse mySetUp(Enum.ProcessDefinitionEnum processDefinit req.setParameter("impegni_json", "[{\"descrizione\":\"Impegno numero 1\",\"percentualeIva\":20,\"importoNetto\":100,\"vocedispesa\":\"11001 - Arretrati per anni precedenti corrisposti al personale a tempo indeterminato\",\"vocedispesaid\":\"11001\",\"uo\":\"2216\",\"gae\":\"spaclient\",\"progetto\":\"Progetto impegno 1\"}]"); req.setParameter("richiestaDiAcquisto_label", "Richiesta di Acquisto"); req.setParameter("tipologiaAffidamentoDiretto", "semplificata"); + req.setParameter("idStruttura", "2216"); + + break; + case testAcquistiAvvisi: + loginResponsabileAcquisti(); + req.setParameter("sceltaUtente", "GestionePreDetermina"); + req.setParameter("commento", "commento prova Pre-Determina(Junit)"); + req.setParameter(titolo.name(), TITOLO_DELL_ISTANZA_DEL_FLUSSO); + req.setParameter(descrizione.name(), "descrizione prova Pre-Determina(Junit)"); + req.setParameter(dataScadenzaAvvisoPreDetermina.name(), "2019-09-04T00:00:00.000Z"); + req.setParameter(dataScadenzaBando.name(), "2019-09-04T00:00:00.000Z"); + req.setParameter("idStruttura", "2216"); + req.setParameter("strumentoAcquisizione", "PROCEDURA SELETTIVA"); break; case iscrizioneElencoOiv: diff --git a/src/test/java/it/cnr/si/flows/ng/batch/PopolazioneProfiliPerCDSUOAcquistiBatch.java b/src/test/java/it/cnr/si/flows/ng/batch/PopolazioneProfiliPerCDSUOAcquistiBatch.java index b52237ccb..88577469f 100644 --- a/src/test/java/it/cnr/si/flows/ng/batch/PopolazioneProfiliPerCDSUOAcquistiBatch.java +++ b/src/test/java/it/cnr/si/flows/ng/batch/PopolazioneProfiliPerCDSUOAcquistiBatch.java @@ -156,7 +156,7 @@ private void inserisciRuolo(String username, String siglaRuolo, String idCDSUO) log.info("OK: L'utente {} ha come responsabile {} della struttura {} ({}) [ID: {}] [CDSUO: {}] [IDNSIP: {}]", username, usernameResponsabileUO, denominazioneEntitaorganizzativaResponsabileUtente, siglaEntitaorganizzativaResponsabileUtente, idEntitaorganizzativaResponsabileUtente, cdsuoEntitaorganizzativaResponsabileUtente, idnsipEntitaorganizzativaResponsabileUtente); String gruppoDirigenteRichiedente = "responsabileFirmaAcquisti@" + idEntitaorganizzativaResponsabileUtente; - Set members = relationshipService.getAllUsersInGroup(gruppoDirigenteRichiedente); + Set members = membershipService.getAllUsersInGroup(gruppoDirigenteRichiedente); //List members = membershipService.findMembersInGroup(gruppoDirigenteRichiedente); if (members.size() == 0) { log.info(" ERROR: Il gruppo RESPONSABILE STRUTTURA: {} NON HA NESSUNO", gruppoDirigenteRichiedente); diff --git a/src/test/java/it/cnr/si/flows/ng/batch/VerificaDomandeAccordiBilaterali.java b/src/test/java/it/cnr/si/flows/ng/batch/VerificaDomandeAccordiBilaterali.java index 3bdfb9193..3e6f323e5 100644 --- a/src/test/java/it/cnr/si/flows/ng/batch/VerificaDomandeAccordiBilaterali.java +++ b/src/test/java/it/cnr/si/flows/ng/batch/VerificaDomandeAccordiBilaterali.java @@ -143,7 +143,7 @@ private void verificaDirettore(String username, String siglaRuolo) { log.info("OK: L'utente {} ha come direttore {} della struttura {} ({}) [ID: {}] [CDSUO: {}] [IDNSIP: {}]", username, usernameDirettore, denominazioneEntitaorganizzativaResponsabileUtente, siglaEntitaorganizzativaResponsabileUtente, idEntitaorganizzativaResponsabileUtente, cdsuoEntitaorganizzativaResponsabileUtente, idnsipEntitaorganizzativaResponsabileUtente); String gruppoDirigenteRichiedente = "responsabile-struttura@" + idEntitaorganizzativaResponsabileUtente; - Set members = relationshipService.getAllUsersInGroup(gruppoDirigenteRichiedente); + Set members = membershipService.getAllUsersInGroup(gruppoDirigenteRichiedente); //List members = membershipService.findMembersInGroup(gruppoDirigenteRichiedente); if (members.size() == 0) { log.info(" ERROR: Il gruppo RESPONSABILE STRUTTURA: {} NON HA NESSUNO", gruppoDirigenteRichiedente); diff --git a/src/test/java/it/cnr/si/flows/ng/integration/FormAndViewVersionTest.java b/src/test/java/it/cnr/si/flows/ng/integration/FormAndViewVersionTest.java index deddb53ac..e66ca8a72 100644 --- a/src/test/java/it/cnr/si/flows/ng/integration/FormAndViewVersionTest.java +++ b/src/test/java/it/cnr/si/flows/ng/integration/FormAndViewVersionTest.java @@ -17,10 +17,9 @@ import org.slf4j.LoggerFactory; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.mock.web.MockHttpServletRequest; -import org.springframework.mock.web.MockMultipartFile; -import org.springframework.mock.web.MockMultipartHttpServletRequest; import org.springframework.test.context.ActiveProfiles; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.transaction.annotation.EnableTransactionManagement; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; @@ -30,13 +29,14 @@ import java.net.URISyntaxException; import java.util.HashMap; import java.util.Map; -import static org.junit.Assert.*; import static it.cnr.si.flows.ng.utils.Enum.ProcessDefinitionEnum.acquisti; +import static org.junit.Assert.assertEquals; @SpringBootTest(classes = FlowsApp.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) -@ActiveProfiles(profiles = "test,cnr") -@RunWith(SpringJUnit4ClassRunner.class) +@ActiveProfiles(profiles = "native,unittests,cnr") +@EnableTransactionManagement +@RunWith(SpringRunner.class) public class FormAndViewVersionTest { private static final Logger LOGGER = LoggerFactory.getLogger(FormAndViewVersionTest.class); diff --git a/src/test/java/it/cnr/si/flows/ng/resource/CnrSummaryPdfResouceTest.java b/src/test/java/it/cnr/si/flows/ng/resource/CnrSummaryPdfResouceTest.java index 7b032906a..107f1982d 100644 --- a/src/test/java/it/cnr/si/flows/ng/resource/CnrSummaryPdfResouceTest.java +++ b/src/test/java/it/cnr/si/flows/ng/resource/CnrSummaryPdfResouceTest.java @@ -13,34 +13,31 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.mock.web.MockHttpServletRequest; import org.springframework.mock.web.MockMultipartHttpServletRequest; import org.springframework.test.context.ActiveProfiles; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.transaction.annotation.EnableTransactionManagement; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; import javax.inject.Inject; import javax.servlet.http.HttpServletRequest; import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.text.ParseException; import java.util.Map; import static it.cnr.si.flows.ng.TestServices.JUNIT_TEST; -import static it.cnr.si.flows.ng.utils.Enum.Actions.revoca; -import static it.cnr.si.flows.ng.utils.Enum.Actions.revocaSemplice; +import static it.cnr.si.flows.ng.utils.Enum.Actions.*; import static it.cnr.si.flows.ng.utils.Enum.ProcessDefinitionEnum.acquisti; import static org.junit.Assert.*; import static org.springframework.http.HttpStatus.OK; -//todo: verificare quando sarà stabile ace -@RunWith(SpringJUnit4ClassRunner.class) -@SpringBootTest(classes = FlowsApp.class, webEnvironment = WebEnvironment.RANDOM_PORT) -@ActiveProfiles(profiles = "test,cnr") +@SpringBootTest(classes = FlowsApp.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) +@ActiveProfiles(profiles = "native,unittests,cnr") +@EnableTransactionManagement +@RunWith(SpringRunner.class) public class CnrSummaryPdfResouceTest { @Inject @@ -87,7 +84,7 @@ public void testSummaryPdfProcessCompleted() throws Exception { MockMultipartHttpServletRequest req = new MockMultipartHttpServletRequest(); req.setParameter("taskId", taskService.createTaskQuery().singleResult().getId()); req.setParameter("processDefinitionId", processInstance.getProcessDefinitionId()); - req.setParameter("sceltaUtente", revoca.getValue()); + req.setParameter("sceltaUtente", annulla.getValue()); req.setParameter("commentoRevoca", "commento di revoca" + JUNIT_TEST); assertEquals(OK, flowsTaskResource.completeTask(req).getStatusCode()); //acceddo come ra e confermo la revoca semplice @@ -121,8 +118,7 @@ public void testSummaryPdfService() throws Exception { completeTask(); ResponseEntity resp = flowsPdfResource.makeSummaryPdf(processInstance.getId(), new MockHttpServletRequest()); - - assertEquals(resp.getStatusCode(), HttpStatus.OK); + assertEquals(HttpStatus.OK, resp.getStatusCode()); ByteArrayOutputStream outputStream = new ByteArrayOutputStream(resp.getBody().length); outputStream.write(resp.getBody(), 0, resp.getBody().length); @@ -135,7 +131,8 @@ private void completeTask() throws Exception { //completo il primo task MockMultipartHttpServletRequest req = new MockMultipartHttpServletRequest(); // req.setParameter("taskId", util.getFirstTaskId()); - req.setParameter("taskId", taskService.createTaskQuery().singleResult().getId()); +// req.setParameter("taskId", taskService.createTaskQuery().singleResult().getId()); + req.setParameter("taskId", taskService.createTaskQuery().orderByTaskCreateTime().desc().list().get(0).getId()); req.setParameter("processDefinitionId", processInstance.getProcessDefinitionId()); req.setParameter("sceltaUtente", "Approva"); req.setParameter("commento", "commento approvazione" + JUNIT_TEST); diff --git a/src/test/java/it/cnr/si/flows/ng/resource/DraftResourceTest.java b/src/test/java/it/cnr/si/flows/ng/resource/DraftResourceTest.java new file mode 100644 index 000000000..034a71305 --- /dev/null +++ b/src/test/java/it/cnr/si/flows/ng/resource/DraftResourceTest.java @@ -0,0 +1,128 @@ +package it.cnr.si.flows.ng.resource; + +import it.cnr.si.FlowsApp; +import it.cnr.si.domain.Draft; +import it.cnr.si.flows.ng.TestServices; +import it.cnr.si.web.rest.DraftResource; +import org.activiti.rest.service.api.runtime.process.ProcessInstanceResponse; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.http.ResponseEntity; +import org.springframework.mock.web.MockHttpServletRequest; +import org.springframework.mock.web.MockMultipartHttpServletRequest; +import org.springframework.test.context.ActiveProfiles; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.transaction.annotation.EnableTransactionManagement; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import javax.inject.Inject; +import javax.servlet.http.HttpServletRequest; +import java.util.List; + +import static it.cnr.si.flows.ng.TestServices.JUNIT_TEST; +import static it.cnr.si.flows.ng.utils.Enum.ProcessDefinitionEnum.acquisti; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.springframework.http.HttpStatus.OK; + + +@SpringBootTest(classes = FlowsApp.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) +@ActiveProfiles(profiles = "unittests,cnr") +@EnableTransactionManagement +@RunWith(SpringRunner.class) +public class DraftResourceTest { + + @Inject + private FlowsTaskResource flowsTaskResource; + @Inject + private DraftResource draftResource; + @Inject + private TestServices util; + private ProcessInstanceResponse processInstance; + + + + + @Before + public void setUp() { + HttpServletRequest mockRequest = new MockHttpServletRequest(); + ServletRequestAttributes servletRequestAttributes = new ServletRequestAttributes(mockRequest); + RequestContextHolder.setRequestAttributes(servletRequestAttributes); + } + + @After + public void tearDown() { + util.myTearDown(); + } + + + + + @Test + public void testDeleteDraft() throws Exception { + + // vado avanti col flusso (Pre-determina -> Verifica)) + MockMultipartHttpServletRequest req = new MockMultipartHttpServletRequest(); + req.setParameter("taskId", util.getFirstTaskId()); + req.setParameter("processDefinitionId", processInstance.getProcessDefinitionId()); + req.setParameter("sceltaUtente", "Approva"); + req.setParameter("commento", "commento approvazione" + JUNIT_TEST); util.loginSfd(); + ResponseEntity response = flowsTaskResource.completeTask(req); + assertEquals(OK, response.getStatusCode()); + + //testo che il completamento del task comporti la rimozione del draft + ResponseEntity> allDraftsRE = draftResource.getAllDrafts(); + assertEquals(OK, allDraftsRE.getStatusCode()); + assertEquals(0, allDraftsRE.getBody().size()); + } + + + + + @Test + public void testDraft() throws Exception { + processInstance = util.mySetUp(acquisti); + String json = "{\"commento_qualitaProgetto\":\"commento 1\",\"commento_qualitaGruppoDiRicerca\":\"commento 2\",\"commento_pianoDiLavoro\":\"commento 3\",\"commento_valoreAggiunto\":\"commento 4\",\"commento\":\"commento 5\",\"punteggio_qualitaProgetto\":1,\"punteggio_qualitaGruppoDiRicerca\":1.95,\"punteggio_pianoDiLavoro\":3,\"punteggio_valoreAggiunto\":4}"; + + ResponseEntity responseUserEmpty = draftResource.updateDraft(Long.valueOf(util.getFirstTaskId()), json, ""); + assertEquals(OK, responseUserEmpty.getStatusCode()); + assertNotNull(responseUserEmpty.getBody().getId()); + + String user = "paoloenricocirone"; + ResponseEntity responsePaoloenricocirone = draftResource.updateDraft(Long.valueOf(util.getFirstTaskId()), json, user); + assertEquals(OK, responsePaoloenricocirone.getStatusCode()); + assertNotNull(responsePaoloenricocirone.getBody().getId()); + + + ResponseEntity> allDraftsRE = draftResource.getAllDrafts(); + assertEquals(2, allDraftsRE.getBody().size()); + Draft expectedDraft = allDraftsRE.getBody().get(0); + assertEquals(json, expectedDraft.getJson()); + //nel primo Draft lo username è null + assertEquals(null, expectedDraft.getUsername()); + assertEquals(Long.valueOf(util.getFirstTaskId()), expectedDraft.getTaskId()); + assertEquals(json, expectedDraft.getJson()); + assertEquals(json, allDraftsRE.getBody().get(1).getJson()); + assertEquals(user, allDraftsRE.getBody().get(1).getUsername()); + assertEquals(Long.valueOf(util.getFirstTaskId()), allDraftsRE.getBody().get(1).getTaskId()); + + //Testo getDraftById + ResponseEntity draftRE = draftResource.getDraftById(expectedDraft.getId()); + assertEquals(OK, draftRE.getStatusCode()); + assertEquals(expectedDraft.getUsername(), draftRE.getBody().getUsername()); + + //Testo getdraftByTaskId (con username paoloenricocirone) + ResponseEntity draftsUserRE = draftResource.getDraftByTaskId(Long.valueOf(util.getFirstTaskId()), user); + assertEquals(OK, draftsUserRE.getStatusCode()); + assertEquals(user, draftsUserRE.getBody().getUsername()); + + //Testo getdraftByTaskId (senza username) + ResponseEntity draftsRE = draftResource.getDraftByTaskId(Long.valueOf(util.getFirstTaskId()), ""); + assertEquals(OK, draftsRE.getStatusCode()); + assertEquals(null, draftsRE.getBody().getUsername()); + } +} \ No newline at end of file diff --git a/src/test/java/it/cnr/si/flows/ng/resource/FlowsProcessInstanceResourceTest.java b/src/test/java/it/cnr/si/flows/ng/resource/FlowsProcessInstanceResourceTest.java index df9ba7bc0..14d2a4372 100644 --- a/src/test/java/it/cnr/si/flows/ng/resource/FlowsProcessInstanceResourceTest.java +++ b/src/test/java/it/cnr/si/flows/ng/resource/FlowsProcessInstanceResourceTest.java @@ -2,10 +2,12 @@ import it.cnr.si.FlowsApp; import it.cnr.si.flows.ng.TestServices; +import it.cnr.si.flows.ng.utils.Enum; import it.cnr.si.flows.ng.utils.Utils; import org.activiti.engine.HistoryService; import org.activiti.engine.RepositoryService; import org.activiti.engine.RuntimeService; +import org.activiti.engine.TaskService; import org.activiti.engine.task.IdentityLink; import org.activiti.rest.common.api.DataResponse; import org.activiti.rest.service.api.history.HistoricProcessInstanceResponse; @@ -17,36 +19,39 @@ import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; -import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.mock.web.MockHttpServletRequest; import org.springframework.mock.web.MockMultipartHttpServletRequest; import org.springframework.security.access.AccessDeniedException; import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.transaction.annotation.EnableTransactionManagement; import org.springframework.util.StopWatch; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; import javax.inject.Inject; import javax.servlet.http.HttpServletRequest; -import java.time.Year; +import java.text.ParseException; +import java.time.LocalDate; +import java.time.Month; +import java.time.temporal.ChronoUnit; import java.util.*; +import java.util.concurrent.Callable; -import static it.cnr.si.flows.ng.TestServices.TITOLO_DELL_ISTANZA_DEL_FLUSSO; import static it.cnr.si.flows.ng.utils.Enum.ProcessDefinitionEnum.acquisti; -import static it.cnr.si.flows.ng.utils.Enum.VariableEnum.*; +import static it.cnr.si.flows.ng.utils.Enum.ProcessDefinitionEnum.testAcquistiAvvisi; import static it.cnr.si.flows.ng.utils.Utils.ALL_PROCESS_INSTANCES; import static it.cnr.si.flows.ng.utils.Utils.ASC; import static org.junit.Assert.*; import static org.springframework.http.HttpStatus.OK; -@SpringBootTest(classes = FlowsApp.class, webEnvironment = WebEnvironment.RANDOM_PORT) +@SpringBootTest(classes = FlowsApp.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) +@ActiveProfiles(profiles = "native,unittests,cnr") +@EnableTransactionManagement @RunWith(SpringRunner.class) -@ActiveProfiles(profiles = "test,cnr") -//@ActiveProfiles(profiles = "test,oiv") +//@ActiveProfiles(profiles = "native,unittests,oiv") public class FlowsProcessInstanceResourceTest { private static final int LOAD_TEST_PROCESS_INSTANCES = 700; @@ -65,6 +70,8 @@ public class FlowsProcessInstanceResourceTest { private FlowsProcessDefinitionResource flowsProcessDefinitionResource; @Inject private RepositoryService repositoryService; + @Inject + private TaskService taskService; private StopWatch stopWatch = new StopWatch(); private ProcessInstanceResponse processInstance; @@ -238,78 +245,106 @@ public void testAddAndDeleteUserIdentityLink() throws Exception { } - @Test - public void getProcessInstancesForTrasparenzaTest() throws Exception { - processInstance = util.mySetUp(acquisti); + @Test() + public void getProcessInstancesForURPTest() throws Exception { + + processInstance = util.mySetUp(testAcquistiAvvisi); + LocalDate dataScadenzaAvvisoPreDetermina = LocalDate.of(2019, Month.SEPTEMBER, 4); + + //AVVISI SCADUTI util.loginPortaleCnr(); + // terminiRicorso > (oggi - startFlusso) ==> resultSet = 1 ResponseEntity>> res = flowsProcessInstanceResource - .getProcessInstancesForTrasparenza(acquisti.getValue(), 2018, Year.now().getValue(), 0, 10, ASC); - + .getProcessInstancesForURP((int) (dataScadenzaAvvisoPreDetermina.until(LocalDate.now(), ChronoUnit.DAYS) + 1), true, null, 0, 10, ASC); assertEquals(OK, res.getStatusCode()); assertEquals(1, res.getBody().size()); - //prova recupero 5 elementi dopo il sevondo (result = 0 perchè ho 1 Process Instance in totale) + // terminiRicorso < (oggi - startFlusso) ==> resultSet = 0 res = flowsProcessInstanceResource - .getProcessInstancesForTrasparenza(acquisti.getValue(), 2018, Year.now().getValue(), 2, 10, ASC); + .getProcessInstancesForURP((int) (dataScadenzaAvvisoPreDetermina.until(LocalDate.now(), ChronoUnit.DAYS) - 1), true, null, 0, 10, ASC); assertEquals(OK, res.getStatusCode()); assertEquals(0, res.getBody().size()); + // vado avanti col flusso (Pre-determina -> Verifica)) + MockMultipartHttpServletRequest req = new MockMultipartHttpServletRequest(); + String processDefinition = repositoryService.createProcessDefinitionQuery() + .processDefinitionKey(acquisti.getProcessDefinition()) + .latestVersion() + .singleResult() + .getId(); + req.setParameter("processDefinitionId", processDefinition); + req.setParameter("taskId", util.getFirstTaskId()); + req.setParameter("commento", "commento determina JUNIT "); + req.setParameter("dataScadenzaAvvisoPreDetermina", "2019-09-04T00:00:00.000Z"); + req.setParameter("sceltaUtente", "PredisponiDetermina"); + req.setParameter("tipologiaAcquisizione", "Procedura ristretta"); + req.setParameter("tipologiaAcquisizioneId", "12"); + req.setParameter("strumentoAcquisizione", "PROCEDURA SELETTIVA - MEPA"); + req.setParameter("strumentoAcquisizioneId", "21"); + req.setParameter("tipologiaProceduraSelettiva", "economicamenteVantaggiosa"); + req.setParameter("rup", "marco.spasiano"); + req.setParameter("rup_label", "MARCO SPASIANO"); + req.setParameter("impegni_json", "[{\"descrizione\":\"Impegno numero 1\",\"percentualeIva\":20,\"importoNetto\":100,\"vocedispesa\":\"11001 - Arretrati per anni precedenti corrisposti al personale a tempo indeterminato\",\"vocedispesaid\":\"11001\",\"uo\":\"2216\",\"gae\":\"spaclient\",\"progetto\":\"Progetto impegno 1\"}]"); - //prova senza ordinamento - res = flowsProcessInstanceResource - .getProcessInstancesForTrasparenza(acquisti.getValue(), 2018, Year.now().getValue(), 0, 10, null); - - assertEquals(OK, res.getStatusCode()); - //prendo anche le Pi create negli altri test - assertEquals(1, res.getBody().size()); + util.loginResponsabileAcquisti(); + ResponseEntity response = flowsTaskResource.completeTask(req); + assertEquals(OK, response.getStatusCode()); - //prova anni sbagliati (Result set vuoto) + // GARE SCADUTE + util.loginPortaleCnr(); + // terminiRicorso > (oggi - startFlusso) ==> resultSet = 0 (LA LOGICA TEMPORALE DELLE GARE È "OPPOSTA" RISPETTO A QUELLA DEGLI AVVISI) res = flowsProcessInstanceResource - .getProcessInstancesForTrasparenza(acquisti.getValue(), 2016, Year.now().getValue() - 1, 0, 10, ASC); - + .getProcessInstancesForURP((int)(dataScadenzaAvvisoPreDetermina.until(LocalDate.now(), ChronoUnit.DAYS) + 1), null, false, 0, 10, ASC); assertEquals(OK, res.getStatusCode()); assertEquals(0, res.getBody().size()); + // terminiRicorso < (oggi - startFlusso) ==> resultSet = 1 (LA LOGICA TEMPORALE DELLE GARE È "OPPOSTA" RISPETTO A QUELLA DEGLI AVVISI) + res = flowsProcessInstanceResource + .getProcessInstancesForURP((int)(dataScadenzaAvvisoPreDetermina.until(LocalDate.now(), ChronoUnit.DAYS) - 1), null, true, 0, 10, ASC); + assertEquals(OK, res.getStatusCode()); + assertEquals(1, res.getBody().size()); } - @Test - public void getProcessInstancesForURPTest() throws Exception { + public void getProcessInstancesForTrasparenzaTest() throws Exception { + MockMultipartHttpServletRequest req = new MockMultipartHttpServletRequest(); processInstance = util.mySetUp(acquisti); - + // Finchè non esco dalla macro-fase "DECISIONE A CONTRATTARE" il flagIsTrasparenza è false quindi la Pi nn appare nella ricerca util.loginPortaleCnr(); ResponseEntity>> res = flowsProcessInstanceResource - .getProcessInstancesForURP(acquisti.getValue(), 2018, Year.now().getValue(), 0, 10, ASC); - - assertEquals(OK, res.getStatusCode()); - assertEquals(1, res.getBody().size()); - - //prova recupero 5 elementi dopo il sevondo (result = 0 perchè ho 1 Process Instance in totale) - res = flowsProcessInstanceResource - .getProcessInstancesForURP(acquisti.getValue(), 2018, Year.now().getValue(), 2, 10, ASC); - + .getProcessInstancesForTrasparenza(0, 10, ASC); assertEquals(OK, res.getStatusCode()); assertEquals(0, res.getBody().size()); - //prova senza ordinamento - res = flowsProcessInstanceResource - .getProcessInstancesForURP(acquisti.getValue(), 2018, Year.now().getValue(), 0, 10, null); + //visto che devo firmare la Decisione non posso superare questa fase nei test + //(a meno che nn setti direttamente la variabile settata alla fine della macro-fase "DECISIONE A CONTRATTARE") + util.loginAdmin(); + flowsProcessInstanceResource.setVariable(processInstance.getId(), Enum.VariableEnum.flagIsTrasparenza.name(), "true"); + util.loginPortaleCnr(); + res = flowsProcessInstanceResource + .getProcessInstancesForTrasparenza(0, 10, ASC); assertEquals(OK, res.getStatusCode()); - //prendo anche le Pi create negli altri test assertEquals(1, res.getBody().size()); + } - //prova anni sbagliati (Result set vuoto) - res = flowsProcessInstanceResource - .getProcessInstancesForURP(acquisti.getValue(), 2016, Year.now().getValue() - 1, 0, 10, ASC); + private Callable getPIForTrasparenzaSize() throws ParseException { + util.loginPortaleCnr(); + ResponseEntity>> res1 = flowsProcessInstanceResource + .getProcessInstancesForTrasparenza(0, 10, ASC); - assertEquals(OK, res.getStatusCode()); - assertEquals(0, res.getBody().size()); + assertEquals(OK, res1.getStatusCode()); + return () -> res1.getBody().size(); + } + + + private String getTaskId() { + return taskService.createTaskQuery().singleResult().getId(); } diff --git a/src/test/java/it/cnr/si/flows/ng/resource/FlowsSearchResourceTest.java b/src/test/java/it/cnr/si/flows/ng/resource/FlowsSearchResourceTest.java index f38395940..bf829d90a 100644 --- a/src/test/java/it/cnr/si/flows/ng/resource/FlowsSearchResourceTest.java +++ b/src/test/java/it/cnr/si/flows/ng/resource/FlowsSearchResourceTest.java @@ -2,22 +2,21 @@ import it.cnr.si.FlowsApp; import it.cnr.si.flows.ng.TestServices; -import it.cnr.si.flows.ng.utils.Utils; +import org.activiti.engine.HistoryService; import org.activiti.rest.common.api.DataResponse; import org.activiti.rest.service.api.history.HistoricProcessInstanceResponse; import org.activiti.rest.service.api.runtime.process.ProcessInstanceResponse; -import org.joda.time.DateTime; import org.json.JSONException; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; import org.springframework.http.ResponseEntity; import org.springframework.mock.web.MockHttpServletRequest; import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.transaction.annotation.EnableTransactionManagement; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; @@ -27,28 +26,30 @@ import static it.cnr.si.flows.ng.TestServices.TITOLO_DELL_ISTANZA_DEL_FLUSSO; import static it.cnr.si.flows.ng.utils.Enum.ProcessDefinitionEnum.acquisti; -import static it.cnr.si.flows.ng.utils.Enum.VariableEnum.*; +import static it.cnr.si.flows.ng.utils.Enum.VariableEnum.initiator; +import static it.cnr.si.flows.ng.utils.Enum.VariableEnum.titolo; import static it.cnr.si.flows.ng.utils.Utils.*; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import static org.springframework.http.HttpStatus.OK; -@SpringBootTest(classes = FlowsApp.class, webEnvironment = WebEnvironment.RANDOM_PORT) -@ActiveProfiles(profiles = "test,cnr") +@SpringBootTest(classes = FlowsApp.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) +@ActiveProfiles(profiles = "native,unittests,cnr") +@EnableTransactionManagement @RunWith(SpringRunner.class) public class FlowsSearchResourceTest { @Inject - private TestServices util; - @Inject - private Utils utils; + private TestServices testServices; @Inject private FlowsProcessInstanceResource flowsProcessInstanceResource; @Inject private FlowsTaskResource flowsTaskResource; @Inject private FlowsSearchResource flowsSearchResource; + @Inject + private HistoryService historyService; private ProcessInstanceResponse processInstance; @@ -63,14 +64,14 @@ public void setUp() { @After public void tearDown() { - util.myTearDown(); + testServices.myTearDown(); } @Test public void testProcessInstanceSearch() throws Exception { - processInstance = util.mySetUp(acquisti); - util.loginAdmin(); + processInstance = testServices.mySetUp(acquisti); + testServices.loginAdmin(); final Calendar cal = Calendar.getInstance(); cal.add(Calendar.DATE, +1); @@ -81,7 +82,7 @@ public void testProcessInstanceSearch() throws Exception { Map requestParams = new HashMap<>(); requestParams.put(titolo.name(), "text=" + TITOLO_DELL_ISTANZA_DEL_FLUSSO); requestParams.put(initiator.name(), "text="+ TestServices.getRA()); - requestParams.put("processDefinitionKey", util.getProcessDefinition().split(":")[0]); + requestParams.put("processDefinitionKey", testServices.getProcessDefinition().split(":")[0]); requestParams.put("order", ASC); requestParams.put("active", "true"); requestParams.put("isTaskQuery", "false"); @@ -96,11 +97,18 @@ public void testProcessInstanceSearch() throws Exception { response = flowsSearchResource.search(requestParams); verifySearchResponse(response, 1, 1); - //verifico che le Process Instance completate (active = false) siano quelle cancellate nel tearDown di questa classe (processDeleted) + //verifico che le Process Instance completate (active = false) siano quelle cancellate nei vari tearDown eseguiti finora + requestParams.put("maxResult", "50"); requestParams.put("active", "false"); requestParams.put("order", DESC); response = flowsSearchResource.search(requestParams); - verifySearchResponse(response, 1, 1); + int allProcessDeleted = (int) historyService.createHistoricProcessInstanceQuery().finished().count(); + verifySearchResponse(response, allProcessDeleted, allProcessDeleted); + + // verifico che il parametro maxResult funzioni correttamente + requestParams.put("maxResult", "5"); + response = flowsSearchResource.search(requestParams); + verifySearchResponse(response, allProcessDeleted, 5); /* * VERIFICA GESTIONE DELLE AUTHORITIES TODO @@ -109,12 +117,10 @@ public void testProcessInstanceSearch() throws Exception { //parametri sbagliati (strumentoAcquisizioneId 12 invece di 11, initiator = admin invece dell'RA) ==> 0 risultati - requestParams.put("titolo", "textEqual=12"); + requestParams.put("strumentoAcquisizioneId", "textEqual=12"); requestParams.put("initiator", "text=admin"); requestParams.put("order", ASC); requestParams.put("active", "true"); - requestParams.put("firstResult", "0"); - requestParams.put("maxResults", "20"); response = flowsSearchResource.search(requestParams); verifySearchResponse(response, 0, 0); @@ -258,10 +264,12 @@ private void verifySearchResponse(ResponseEntity response, int exp if (responseList.size() > 0) { for (int i = 0; i < (expectedTotalItems > expectedResponseItems ? expectedResponseItems : expectedTotalItems); i++) { - HistoricProcessInstanceResponse taskresponse = ((HistoricProcessInstanceResponse) responseList.get(i)); - assertTrue(taskresponse.getProcessDefinitionId().contains(util.getProcessDefinition())); + HistoricProcessInstanceResponse taskResponse = ((HistoricProcessInstanceResponse) responseList.get(i)); + //non so perchè ma eseguendo tutti i test si creano processDefinition diverse(ad es.: acquisti:2:152 e acquisti:3:284) + assertTrue("taskResponse.getProcessDefinitionId() = " + taskResponse.getProcessDefinitionId() + " - testServices.getProcessDefinition() = " + testServices.getProcessDefinition(), + taskResponse.getProcessDefinitionId().contains(testServices.getProcessDefinition().split(":")[0])); //verifico che le Process Instance restituite dalla search rispettino i parametri della ricerca - org.json.JSONObject json = new org.json.JSONObject(taskresponse.getName()); + org.json.JSONObject json = new org.json.JSONObject(taskResponse.getName()); assertEquals(TITOLO_DELL_ISTANZA_DEL_FLUSSO, json.getString(titolo.name())); assertEquals(TestServices.getRA(), json.getString(initiator.name())); } @@ -272,17 +280,11 @@ private void verifySearchResponse(ResponseEntity response, int exp /* ----- TASKS ----- */ @Test public void testTaskSearch() throws Exception { - processInstance = util.mySetUp(acquisti); + processInstance = testServices.mySetUp(acquisti); - util.logout(); - util.loginSfd(); + testServices.logout(); + testServices.loginSfd(); //verifico che la ricerca recuperi il primo task della process instance appena avviata - String content = "{\"processParams\":" + - "[{\"key\":\"" + titolo + "\",\"value\":\"" + TITOLO_DELL_ISTANZA_DEL_FLUSSO + "\",\"type\":\"text\"}," + - "{\"key\":\"" + initiator + "\",\"value\":\"" + TestServices.getRA() + "\",\"type\":\"textEqual\"}]," + - "\"taskParams\":" + - "[{\"key\":\"Fase\",\"value\":\"Verifica Decisione\",\"type\":null}]}"; - Map requestParams = new HashMap<>(); requestParams.put("titolo", "textEqual=" + TITOLO_DELL_ISTANZA_DEL_FLUSSO); @@ -293,13 +295,11 @@ public void testTaskSearch() throws Exception { requestParams.put("firstResult", "0"); requestParams.put("maxResults", "100"); - - // TODO fixare e decommentare -// ResponseEntity response = flowsSearchResource.search(request, ALL_PROCESS_INSTANCES, true, ASC, 0, 100); -// ArrayList tasks = (ArrayList) ((HashMap) response.getBody()).get("tasks"); -// assertEquals(Long.valueOf("1"), ((HashMap) response.getBody()).get("totalItems")); -// assertEquals(1, tasks.size()); -// assertEquals(util.getFirstTaskId(), ((HistoricTaskInstanceResponse) tasks.get(0)).getId()); + ResponseEntity response = flowsSearchResource.search(requestParams); + DataResponse dataResponse = ((DataResponse)response.getBody()); + assertEquals(Optional.of(Long.valueOf("1")), Optional.of(dataResponse.getTotal())); + ArrayList pi = ((ArrayList)(dataResponse.getData())); + assertEquals(1, pi.size()); //verifico che con parametri di ricerca sbagliati non abbia task nel searchResult verifyBadTaskSearchParams(); @@ -309,29 +309,23 @@ private void verifyBadTaskSearchParams() { String content; ResponseEntity response;//verifico che non prenda nessun elemento (SEARCH PARAMS SBAGLIATI) //titolo flusso sbagliato - content = "{\"processParams\":" + - "[{\"key\":\"" + titolo + "\",\"value\":\"" + TITOLO_DELL_ISTANZA_DEL_FLUSSO + "AAA\",\"type\":\"text\"}," + - "{\"key\":\"" + initiator + "\",\"value\":\"" + TestServices.getRA() + "\",\"type\":\"textEqual\"}]," + - "\"taskParams\":" + - "[{\"key\":\"Fase\",\"value\":\"Verifica Decisione\",\"type\":null}]}"; + content = "[{\"type\":\"text=\",\"key\":\"" + titolo + "\",\"value\":\"" + TITOLO_DELL_ISTANZA_DEL_FLUSSO + "AAA\"}," + + "{\"type\":\"text=\",\"key\":\"Fase\",\"value\":\"Verifica Decisione\"},"+ + "{\"type\":\"text=\",\"key\":\"" + initiator + "\",\"value\":\"" + TestServices.getRA() + "\"}]"; response = flowsTaskResource.getMyTasks(ALL_PROCESS_INSTANCES, 0, 100, ASC, content); assertEquals(0, response.getBody().getSize()); assertEquals(0, ((ArrayList) response.getBody().getData()).size()); //initiator sbaliato - content = "{\"processParams\":" + - "[{\"key\":\"" + titolo + "\",\"value\":\"" + TITOLO_DELL_ISTANZA_DEL_FLUSSO + "\",\"type\":\"text\"}," + - "{\"key\":\"" + initiator + "\",\"value\":\"admi\",\"type\":\"textEqual\"}]," + - "\"taskParams\":" + - "[{\"key\":\"Fase\",\"value\":\"Verifica Decisione\",\"type\":null}]}"; + content = "[{\"type\":\"text=\",\"key\":\"" + titolo + "\",\"value\":\"" + TITOLO_DELL_ISTANZA_DEL_FLUSSO + "\"}," + + "{\"type\":\"text=\",\"key\":\"Fase\",\"value\":\"Verifica Decisione\"},"+ + "{\"type\":\"text=\",\"key\":\"" + initiator + "\",\"value\":\"admi\"}]"; response = flowsTaskResource.getMyTasks(ALL_PROCESS_INSTANCES, 0, 100, ASC, content); assertEquals(0, response.getBody().getSize()); assertEquals(0, ((ArrayList) response.getBody().getData()).size()); //Fase sbaliata - content = "{\"processParams\":" + - "[{\"key\":\"" + titolo + "\",\"value\":\"" + TITOLO_DELL_ISTANZA_DEL_FLUSSO + "\",\"type\":\"text\"}," + - "{\"key\":\"" + initiator + "\",\"value\":\"" + TestServices.getRA() + "\",\"type\":\"textEqual\"}]," + - "\"taskParams\":" + - "[{\"key\":\"Fase\",\"value\":\"Verifica DecisioneEEEEE\",\"type\":null}]}"; + content = "[{\"type\":\"text=\",\"key\":\"" + titolo + "\",\"value\":\"" + TITOLO_DELL_ISTANZA_DEL_FLUSSO + "\"}," + + "{\"type\":\"text=\",\"key\":\"Fase\",\"value\":\"Verifica DecisioneEEEEE\"},"+ + "{\"type\":\"text=\",\"key\":\"" + initiator + "\",\"value\":\"" + TestServices.getRA() + "\"}]"; response = flowsTaskResource.getMyTasks(ALL_PROCESS_INSTANCES, 0, 100, ASC, content); assertEquals(0, response.getBody().getSize()); assertEquals(0, ((ArrayList) response.getBody().getData()).size()); diff --git a/src/test/java/it/cnr/si/flows/ng/resource/FlowsTaskResourceTest.java b/src/test/java/it/cnr/si/flows/ng/resource/FlowsTaskResourceTest.java index 4127c64bb..3b52c3d56 100644 --- a/src/test/java/it/cnr/si/flows/ng/resource/FlowsTaskResourceTest.java +++ b/src/test/java/it/cnr/si/flows/ng/resource/FlowsTaskResourceTest.java @@ -13,18 +13,17 @@ import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; import org.springframework.http.ResponseEntity; import org.springframework.mock.web.MockHttpServletRequest; import org.springframework.mock.web.MockMultipartHttpServletRequest; import org.springframework.security.access.AccessDeniedException; import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.transaction.annotation.EnableTransactionManagement; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; import javax.servlet.http.HttpServletRequest; -import java.io.IOException; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; @@ -36,14 +35,14 @@ import static it.cnr.si.flows.ng.utils.Enum.VariableEnum.titolo; import static it.cnr.si.flows.ng.utils.Utils.ALL_PROCESS_INSTANCES; import static it.cnr.si.flows.ng.utils.Utils.ASC; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; +import static org.junit.Assert.*; import static org.springframework.http.HttpStatus.OK; +@SpringBootTest(classes = FlowsApp.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) +@ActiveProfiles(profiles = "native,unittests,cnr") +@EnableTransactionManagement @RunWith(SpringRunner.class) -@SpringBootTest(classes = FlowsApp.class, webEnvironment = WebEnvironment.RANDOM_PORT) -@ActiveProfiles(profiles = "test,cnr") public class FlowsTaskResourceTest { private static final String FIRST_TASK_NAME = "Verifica Decisione"; @@ -90,13 +89,9 @@ public void testGetMyTasks() throws Exception { flowsTaskResource.claimTask(util.getFirstTaskId()); - MockHttpServletRequest request = new MockHttpServletRequest(); - String content = "{\"processParams\":" + - "[{\"key\":\"" + titolo + "\",\"value\":\"" + TITOLO_DELL_ISTANZA_DEL_FLUSSO + "\",\"type\":\"text\"}," + - "{\"key\":\"" + initiator + "\",\"value\":\"" + TestServices.getRA() + "\",\"type\":\"textEqual\"}]," + - "\"taskParams\":" + - "[{\"key\":\"Fase\",\"value\":\"Verifica Decisione\",\"type\":null}]}"; -// request.setContent(content.getBytes()); + String content = "[{\"type\":\"text=\",\"key\":\"" + titolo + "\",\"value\":\"" + TITOLO_DELL_ISTANZA_DEL_FLUSSO + "\"}," + + "{\"type\":\"text=\",\"key\":\"Fase\",\"value\":\"Verifica Decisione\"},"+ + "{\"type\":\"text=\",\"key\":\"" + initiator + "\",\"value\":\"" + TestServices.getRA() + "\"}]"; response = flowsTaskResource.getMyTasks(ALL_PROCESS_INSTANCES, 0, 100, ASC, content); myTasks = (ArrayList) response.getBody().getData(); assertEquals(1, response.getBody().getSize()); @@ -205,53 +200,70 @@ public void testCompleteTask() throws Exception { public void testTaskAssignedInMyGroups() throws Exception { processInstance = util.mySetUp(acquisti); - //sfd NON deve vedere NESSUN Task prima dell'assegnazione del task a responsabileAcquisti2 + //sfd NON deve vedere NESSUN Task prima dell'assegnazione del task util.loginSfd(); ResponseEntity response = flowsTaskResource.taskAssignedInMyGroups(ALL_PROCESS_INSTANCES, 0, 100, ASC, null); assertEquals(OK, response.getStatusCode()); assertEquals(0, (new ArrayList((Collection) response.getBody().getData())).size()); - //assegno il task a responsabileAcquisti2 - util.loginResponsabileAcquisti2(); + //assegno il task a sfd ResponseEntity> resp = flowsTaskResource.claimTask(util.getFirstTaskId()); assertEquals(OK, resp.getStatusCode()); + //verifico che sfd veda il task assegnatogli in precedenza tra i suoi task e non nei task di gruppo + response = flowsTaskResource.getMyTasks(ALL_PROCESS_INSTANCES, 0, 100, ASC, null); + assertEquals(OK, response.getStatusCode()); + assertEquals(1, (new ArrayList((Collection) response.getBody().getData())).size()); response = flowsTaskResource.taskAssignedInMyGroups(ALL_PROCESS_INSTANCES, 0, 100, ASC, null); assertEquals(OK, response.getStatusCode()); assertEquals(0, (new ArrayList((Collection) response.getBody().getData())).size()); - //verifico che responsabileAcquisti veda il task assegnato ad responsabileaquisti2 PERCHÈ FANNO PARTE DELLO STESSO GRUPPO (RA) + //verifico che ResponsabileAcquisti1 NON veda il task assegnato all`SFD util.loginResponsabileAcquisti(); - response = flowsTaskResource.taskAssignedInMyGroups(ALL_PROCESS_INSTANCES, 0, 100, ASC, null); + response = flowsTaskResource.getMyTasks(ALL_PROCESS_INSTANCES, 0, 100, ASC, null); assertEquals(OK, response.getStatusCode()); - assertEquals(1, (new ArrayList((Collection) response.getBody().getData())).size()); + assertEquals(0, (new ArrayList((Collection) response.getBody().getData())).size()); + + //ResponsabileAcquisti2 NON deve vedere il Task assegnato all`sfd + util.loginResponsabileAcquisti2(); + response = flowsTaskResource.getMyTasks(ALL_PROCESS_INSTANCES, 0, 100, ASC, null); + assertEquals(OK, response.getStatusCode()); + assertEquals(0, (new ArrayList((Collection) response.getBody().getData())).size()); - //sfd NON deve vedere il Task assegnato a responsabileAcquisti2 perchè NON hanno NESSUN gruppo in comune + // tolgo il task all`sfd e verifico che non lo veda più tra i suoi task util.loginSfd(); - response = flowsTaskResource.taskAssignedInMyGroups(ALL_PROCESS_INSTANCES, 0, 100, ASC, null); + resp = flowsTaskResource.unclaimTask(util.getFirstTaskId()); + assertEquals(OK, resp.getStatusCode()); + response = flowsTaskResource.getMyTasks(ALL_PROCESS_INSTANCES, 0, 100, ASC, null); assertEquals(OK, response.getStatusCode()); assertEquals(0, (new ArrayList((Collection) response.getBody().getData())).size()); } - // non uso expected perche' voglio controllare *esttamente* dove viene lanciata l'eccezione + // non uso expected perche' voglio controllare *esattamente* dove viene lanciata l'eccezione @Test public void testClaimTask() throws Exception { processInstance = util.mySetUp(acquisti); // sfd è sfd@sisinfo quindi può prendere in carico il flusso util.loginSfd(); - ResponseEntity> response = flowsTaskResource.claimTask(util.getFirstTaskId()); - assertEquals(OK, response.getStatusCode()); - response = flowsTaskResource.unclaimTask(util.getFirstTaskId()); - assertEquals(OK, response.getStatusCode()); + ResponseEntity> respClaim = flowsTaskResource.claimTask(util.getFirstTaskId()); + assertEquals(OK, respClaim.getStatusCode()); + ResponseEntity respMyTasks = flowsTaskResource.getMyTasks(ALL_PROCESS_INSTANCES, 0, 100, ASC, null); + assertEquals(OK, respMyTasks.getStatusCode()); + assertEquals(1, (new ArrayList((Collection) respMyTasks.getBody().getData())).size()); + + respClaim = flowsTaskResource.unclaimTask(util.getFirstTaskId()); + assertEquals(OK, respClaim.getStatusCode()); + respMyTasks = flowsTaskResource.getMyTasks(ALL_PROCESS_INSTANCES, 0, 100, ASC, null); + assertEquals(OK, respMyTasks.getStatusCode()); + assertEquals(0, (new ArrayList((Collection) respMyTasks.getBody().getData())).size()); util.logout(); -// todo: testare il caso in cui un utente non opuò richiamare il metodo(non spaclient) -//// spaclient NON è sfd@sisinfo quindi NON può richiamare il metodo -// util.loginSpaclient(); -// try { -// response = flowsTaskResource.claimTask(util.getFirstTaskId()); -// fail("Expected AccessDeniedException"); -// } catch (AccessDeniedException e) { /* expected */} + //responsabileAcquisti NON è sfd@sisinfo quindi NON può richiamare il metodo + util.loginResponsabileAcquisti(); + try { + flowsTaskResource.claimTask(util.getFirstTaskId()); + fail("Expected AccessDeniedException"); + } catch (AccessDeniedException e) { /* expected */} } @@ -266,17 +278,19 @@ public void testGetTasksCompletedForMe() throws Exception { assertEquals(OK, response.getStatusCode()); //assegno il task a user - flowsTaskResource.reassignTask("", util.getFirstTaskId(), "user"); + String taskId = taskService.createTaskQuery().singleResult().getId(); + util.loginResponsabileFlussoAcquistiForStruttura(); + flowsTaskResource.reassignTask("", taskId, "user"); //Setto user come owner dello stesso task - taskService.setOwner(taskService.createTaskQuery().singleResult().getId(), "user"); + taskService.setOwner(taskId, "user"); //Recupero solo il flusso completato da user e non quello assegnatogli né quello di cui è owner + util.loginSfd(); ResponseEntity response2 = flowsTaskResource.getTasksCompletedByMe(ALL_PROCESS_INSTANCES, 0, 1000, ASC, null); assertEquals(OK, response.getStatusCode()); ArrayList tasks = (ArrayList) ((DataResponse) response2.getBody()).getData(); assertTrue(tasks.stream().anyMatch(t -> t.getId().equals(util.getFirstTaskId()))); - //Verifico che il metodo funzioni anche con ADMIN util.logout(); util.loginAdmin(); diff --git a/src/test/java/it/cnr/si/flows/ng/resource/OivPdfResourceTest.java b/src/test/java/it/cnr/si/flows/ng/resource/OivPdfResourceTest.java new file mode 100644 index 000000000..96951a25b --- /dev/null +++ b/src/test/java/it/cnr/si/flows/ng/resource/OivPdfResourceTest.java @@ -0,0 +1,105 @@ +package it.cnr.si.flows.ng.resource; + +import it.cnr.si.FlowsApp; +import it.cnr.si.flows.ng.TestServices; +import org.activiti.rest.service.api.runtime.process.ProcessInstanceResponse; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.http.HttpHeaders; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.mock.web.MockHttpServletRequest; +import org.springframework.test.context.ActiveProfiles; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.transaction.annotation.EnableTransactionManagement; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import javax.inject.Inject; +import javax.servlet.http.HttpServletRequest; +import java.io.ByteArrayOutputStream; +import java.io.IOException; + +import static it.cnr.si.flows.ng.utils.Enum.PdfType.preavvisoRigetto; +import static it.cnr.si.flows.ng.utils.Enum.PdfType.rigetto; +import static it.cnr.si.flows.ng.utils.Enum.ProcessDefinitionEnum.iscrizioneElencoOiv; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +@SpringBootTest(classes = FlowsApp.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) +@ActiveProfiles(profiles = "native,unittests,oiv") +@EnableTransactionManagement +@RunWith(SpringRunner.class) +public class OivPdfResourceTest { + + @Inject + private FlowsPdfResource flowsPdfResource; + @Inject + private TestServices util; + private ProcessInstanceResponse processInstance; + private HttpServletRequest mockRequest; + @Inject + private FlowsProcessInstanceResource flowsProcessInstanceResource; + + @Before + public void setUp() throws Exception { + // setto correttamente il request contexHolder + mockRequest = new MockHttpServletRequest(); + ServletRequestAttributes servletRequestAttributes = new ServletRequestAttributes(mockRequest); + RequestContextHolder.setRequestAttributes(servletRequestAttributes); + + //avvio un'istanza del flusso iscrizione-elenco-oiv + processInstance = util.mySetUp(iscrizioneElencoOiv); + } + + @After + public void tearDown() { + util.myTearDown(); + } + + + @Test + public void testMakePdfRigetto() throws IOException { + + //creo il pdf "rigetto" + util.loginAbilitatiIscrizioneElencoOiv(); + ResponseEntity response = flowsPdfResource.makePdf(processInstance.getId(), rigetto.name()); + + //sviluppare il flusso fino alla fase "" + + //verifico che il file creato sia un pdf non vuoto e che abbia il nome giusto + HttpHeaders headers = response.getHeaders(); + String titoloPdf = headers.get("Content-Disposition").get(0).split("\"")[1]; + assertEquals("rigetto-utenteRichiedente.pdf", titoloPdf); + assertEquals(MediaType.APPLICATION_PDF, headers.getContentType()); + assertTrue(response.getBody().length > 0); + + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(response.getBody().length); + outputStream.write(response.getBody()); + util.makeFile(outputStream, titoloPdf); + } + + + @Test + public void testMakePdfPreavvisoRigetto() throws IOException { + //creo il pdf "preavviso di rigetto" + util.loginAbilitatiIscrizioneElencoOiv(); + ResponseEntity response = flowsPdfResource.makePdf(processInstance.getId(), preavvisoRigetto.name()); + + //sviluppare il flusso fino alla fase "" + + //verifico che il file creato sia un pdf non vuoto e che abbia il nome giusto + HttpHeaders headers = response.getHeaders(); + String titoloPdf = headers.get("Content-Disposition").get(0).split("\"")[1]; + assertEquals("preavvisoRigetto-utenteRichiedente.pdf", titoloPdf); + assertEquals(MediaType.APPLICATION_PDF, headers.getContentType()); + assertTrue(response.getBody().length > 0); + + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(response.getBody().length); + outputStream.write(response.getBody()); + util.makeFile(outputStream, titoloPdf); + } +} \ No newline at end of file diff --git a/src/test/java/it/cnr/si/flows/ng/resource/OivSummaryPdfResouceTest.java b/src/test/java/it/cnr/si/flows/ng/resource/OivSummaryPdfResouceTest.java index bf963e6ac..8a6950816 100644 --- a/src/test/java/it/cnr/si/flows/ng/resource/OivSummaryPdfResouceTest.java +++ b/src/test/java/it/cnr/si/flows/ng/resource/OivSummaryPdfResouceTest.java @@ -11,19 +11,17 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; import org.springframework.mock.web.MockHttpServletRequest; import org.springframework.mock.web.MockMultipartHttpServletRequest; import org.springframework.test.context.ActiveProfiles; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.transaction.annotation.EnableTransactionManagement; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; import javax.inject.Inject; import javax.servlet.http.HttpServletRequest; import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.text.ParseException; import static it.cnr.si.flows.ng.TestServices.JUNIT_TEST; import static it.cnr.si.flows.ng.utils.Enum.ProcessDefinitionEnum.iscrizioneElencoOiv; @@ -32,10 +30,10 @@ import static org.springframework.http.HttpStatus.OK; -//todo: va in errore con l'interazione con http://cool-jconon-funzione-pubblica.test.si.cnr.it (forse non trova la priocess instance avviata sul bd in memoria durante il test) -@RunWith(SpringJUnit4ClassRunner.class) -@SpringBootTest(classes = FlowsApp.class, webEnvironment = WebEnvironment.RANDOM_PORT) -@ActiveProfiles(profiles = "test,oiv") +@SpringBootTest(classes = FlowsApp.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) +@ActiveProfiles(profiles = "native,unittests,oiv") +@EnableTransactionManagement +@RunWith(SpringRunner.class) public class OivSummaryPdfResouceTest { @Inject @@ -64,6 +62,8 @@ public void tearDown() { util.myTearDown(); } + + @Test public void testSummaryPdfProcessCompleted() throws Exception { processInstance = util.mySetUp(iscrizioneElencoOiv); diff --git a/src/test/java/it/cnr/si/flows/ng/security/SwitchUserTest.java b/src/test/java/it/cnr/si/flows/ng/security/SwitchUserTest.java index 21d2045ff..bff282137 100644 --- a/src/test/java/it/cnr/si/flows/ng/security/SwitchUserTest.java +++ b/src/test/java/it/cnr/si/flows/ng/security/SwitchUserTest.java @@ -8,11 +8,11 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.context.embedded.LocalServerPort; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; import org.springframework.boot.test.web.client.TestRestTemplate; import org.springframework.http.*; import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.transaction.annotation.EnableTransactionManagement; import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.MultiValueMap; @@ -23,9 +23,10 @@ import static org.assertj.core.api.Assertions.assertThat; +@SpringBootTest(classes = FlowsApp.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) +@ActiveProfiles(profiles = "native,unittests,cnr") +@EnableTransactionManagement @RunWith(SpringRunner.class) -@SpringBootTest(classes = FlowsApp.class, webEnvironment = WebEnvironment.RANDOM_PORT) -@ActiveProfiles(profiles = "cnr") public class SwitchUserTest { private String SERVER; @@ -43,9 +44,6 @@ public class SwitchUserTest { @Before public void setUp() {} - // TODO brutto hack - @Test - public void aaaFailAndEmptyContext() {} @Test public void testAdminAbleToSwitchToDatabaseUser() throws URISyntaxException { @@ -94,8 +92,7 @@ public void testAdminAbleToSwitchToLdapUser() throws URISyntaxException { assertThat(impersonatedAccount).containsEntry("login", "marcinireneusz.trycz"); assertThat(impersonatedAccount.get("authorities")).asList() .contains("ROLE_PREVIOUS_ADMINISTRATOR") - .contains("DEPARTMENT_603240") - .contains("ROLE_responsabile#acquisti@2216"); + .contains("DEPARTMENT_641100"); Map exitAccount = getAccount(token); assertThat(exitAccount).containsEntry("login", "admin"); diff --git a/src/test/java/it/cnr/si/flows/ng/service/AceBridgeServiceTest.java b/src/test/java/it/cnr/si/flows/ng/service/AceBridgeServiceTest.java index 2f33f58c6..fa265754c 100644 --- a/src/test/java/it/cnr/si/flows/ng/service/AceBridgeServiceTest.java +++ b/src/test/java/it/cnr/si/flows/ng/service/AceBridgeServiceTest.java @@ -1,22 +1,26 @@ package it.cnr.si.flows.ng.service; +import feign.FeignException; import it.cnr.si.FlowsApp; +import it.cnr.si.service.dto.anagrafica.letture.GerarchiaWebDto; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.transaction.annotation.EnableTransactionManagement; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; + import javax.inject.Inject; import java.util.List; +import java.util.stream.Collectors; -@RunWith(SpringRunner.class) @SpringBootTest(classes = FlowsApp.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) +@ActiveProfiles(profiles = "native,unittests,cnr") @EnableTransactionManagement -@ActiveProfiles("test,cnr") +@RunWith(SpringRunner.class) public class AceBridgeServiceTest { private final Logger log = LoggerFactory.getLogger(AceBridgeServiceTest.class); @@ -42,7 +46,7 @@ public void testEntitaOrganizzativaUtente() { } - @Test + @Test(expected = FeignException.class) public void testGetRuoliUtente() { List aceGroupsForUser = aceBridgeService.getAceGroupsForUser("marcinireneusz.trycz"); @@ -56,4 +60,14 @@ public void testGetRuoliUtente() { aceGroupsForUser = aceBridgeService.getAceGroupsForUser(""); log.info("{}", aceGroupsForUser); } + + @Test + public void testGetParent() { + + List parents = aceBridgeService.getParents(34421); + parents = parents.stream().filter(p -> p.getTipo().getId() == 2).collect(Collectors.toList()); + + Assert.assertEquals(Integer.valueOf(2216), parents.get(0).getPadre().getId()); + + } } diff --git a/src/test/java/it/cnr/si/flows/ng/service/CoolFlowsBridgeTest.java b/src/test/java/it/cnr/si/flows/ng/service/CoolFlowsBridgeTest.java index c9e3420d7..47e58268e 100644 --- a/src/test/java/it/cnr/si/flows/ng/service/CoolFlowsBridgeTest.java +++ b/src/test/java/it/cnr/si/flows/ng/service/CoolFlowsBridgeTest.java @@ -1,32 +1,23 @@ package it.cnr.si.flows.ng.service; import it.cnr.si.FlowsApp; -import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.web.client.TestRestTemplate; -import org.springframework.http.HttpMethod; -import org.springframework.http.MediaType; -import org.springframework.http.RequestEntity; -import org.springframework.http.ResponseEntity; import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.transaction.annotation.EnableTransactionManagement; import org.springframework.util.Assert; -import org.springframework.web.client.RestTemplate; import javax.inject.Inject; import javax.security.auth.login.LoginException; -import java.net.URI; import java.net.URISyntaxException; -import java.util.HashMap; -import java.util.Map; -@RunWith(SpringRunner.class) @SpringBootTest(classes = FlowsApp.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) +@ActiveProfiles(profiles = "native,unittests,cnr") @EnableTransactionManagement -@ActiveProfiles("test,cnr") +@RunWith(SpringRunner.class) public class CoolFlowsBridgeTest { @Inject diff --git a/src/test/java/it/cnr/si/flows/ng/service/CounterServiceTest.java b/src/test/java/it/cnr/si/flows/ng/service/CounterServiceTest.java index 1b87d4fd3..042d62b04 100644 --- a/src/test/java/it/cnr/si/flows/ng/service/CounterServiceTest.java +++ b/src/test/java/it/cnr/si/flows/ng/service/CounterServiceTest.java @@ -1,25 +1,24 @@ package it.cnr.si.flows.ng.service; -import static org.junit.Assert.assertEquals; - -import java.util.stream.IntStream; - +import it.cnr.si.FlowsApp; import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; +import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.transaction.annotation.EnableTransactionManagement; -import it.cnr.si.FlowsApp; -import it.cnr.si.SprintApp; +import java.util.stream.IntStream; + +import static org.junit.Assert.assertEquals; @Ignore // Questo test non ha senso eseguirlo con H2, ma solo in locale con un postgres -@RunWith(SpringRunner.class) -@SpringBootTest(classes = FlowsApp.class, webEnvironment = WebEnvironment.RANDOM_PORT) +@SpringBootTest(classes = FlowsApp.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) +@ActiveProfiles(profiles = "native,unittests,cnr") @EnableTransactionManagement +@RunWith(SpringRunner.class) public class CounterServiceTest { @Autowired @@ -32,7 +31,6 @@ public class CounterServiceTest { url: jdbc:postgresql://localhost:5432/formazione name: username: formazione - password: formazionepw jpa: database-platform: it.cnr.si.domain.util.FixedPostgreSQL82Dialect database: POSTGRESQL diff --git a/src/test/java/it/cnr/si/flows/ng/service/FirmaServiceTest.java b/src/test/java/it/cnr/si/flows/ng/service/FirmaServiceTest.java index fbaddc555..ac30d5108 100644 --- a/src/test/java/it/cnr/si/flows/ng/service/FirmaServiceTest.java +++ b/src/test/java/it/cnr/si/flows/ng/service/FirmaServiceTest.java @@ -13,6 +13,7 @@ import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.transaction.annotation.EnableTransactionManagement; import java.io.IOException; import java.nio.file.Files; @@ -23,9 +24,10 @@ import static org.junit.Assert.fail; -@RunWith(SpringRunner.class) @SpringBootTest(classes = FlowsApp.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) -@ActiveProfiles(profiles = "test,cnr") +@ActiveProfiles(profiles = "native,unittests,cnr") +@EnableTransactionManagement +@RunWith(SpringRunner.class) public class FirmaServiceTest { private static final Logger LOGGER = LoggerFactory.getLogger(FirmaServiceTest.class); diff --git a/src/test/java/it/cnr/si/flows/ng/service/FlowsAttachmentServiceTest.java b/src/test/java/it/cnr/si/flows/ng/service/FlowsAttachmentServiceTest.java index a3523f405..7005d9174 100644 --- a/src/test/java/it/cnr/si/flows/ng/service/FlowsAttachmentServiceTest.java +++ b/src/test/java/it/cnr/si/flows/ng/service/FlowsAttachmentServiceTest.java @@ -1,23 +1,20 @@ package it.cnr.si.flows.ng.service; import it.cnr.si.FlowsApp; -import it.cnr.si.flows.ng.dto.FlowsAttachment; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.transaction.annotation.EnableTransactionManagement; import javax.inject.Inject; -import java.util.Arrays; -import java.util.List; - -import static org.junit.Assert.*; - -@RunWith(SpringRunner.class) @SpringBootTest(classes = FlowsApp.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) +@ActiveProfiles(profiles = "native,unittests,cnr") +@EnableTransactionManagement +@RunWith(SpringRunner.class) public class FlowsAttachmentServiceTest { @Inject diff --git a/src/test/java/it/cnr/si/flows/ng/service/MembershipServiceTest.java b/src/test/java/it/cnr/si/flows/ng/service/MembershipServiceTest.java new file mode 100644 index 000000000..c21681c87 --- /dev/null +++ b/src/test/java/it/cnr/si/flows/ng/service/MembershipServiceTest.java @@ -0,0 +1,80 @@ +package it.cnr.si.flows.ng.service; + +import it.cnr.si.FlowsApp; +import it.cnr.si.domain.Relationship; +import it.cnr.si.flows.ng.TestServices; +import it.cnr.si.service.MembershipService; +import it.cnr.si.service.RelationshipService; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.ActiveProfiles; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.transaction.annotation.EnableTransactionManagement; + +import javax.inject.Inject; +import java.util.Set; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +@SpringBootTest(classes = FlowsApp.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) +@ActiveProfiles(profiles = "native,unittests,cnr") +@EnableTransactionManagement +@RunWith(SpringRunner.class) +public class MembershipServiceTest { + + private final Logger log = LoggerFactory.getLogger(MembershipServiceTest.class); + + private static final String GROUP_RELATIONSHIP = "aaaaaa"; + @Inject + private MembershipService membershipService; + @Inject + private RelationshipService relationshipService; + + + @Test + public void testGetAllGroupsForUser() throws Exception { + + Set groupsForRa = membershipService.getAllGroupsForUser(TestServices.getRA()); + + //aggiungo una nuova relationship + Relationship relationship = new Relationship(); + relationship.setGroupName(groupsForRa.stream().findAny().get()); + relationship.setGroupRelationship(GROUP_RELATIONSHIP); + relationship.setGroupRole("member"); + log.info("Inserisco la Relationship "+ relationship); + relationship = relationshipService.save(relationship); + + //verifico che getAllGroupsForUser prenda la modifica per entrambi gli utenti + Set groupsForRa2 = membershipService.getAllGroupsForUser(TestServices.getRA()); + + assertEquals("Aggiungendo una relationship NON viene rilevata da getAllGroupsForUser "+ groupsForRa + groupsForRa2, groupsForRa.size() + 1, groupsForRa2.size()); + assertTrue("Aggiungendo una relationship NON viene rilevata da getAllGroupsForUser", groupsForRa2.contains(GROUP_RELATIONSHIP)); + + //elimino la relazione e verifico che tutto funzioni come prima + relationshipService.delete(relationship.getId()); + Set groupsForRa3 = membershipService.getAllGroupsForUser(TestServices.getRA()); + + assertEquals("Due utenti che appartengono allo stesso gruppo hanno RELAZIONI DIVERSE dopo la cancellazione della relationship", groupsForRa, groupsForRa3); + } + + @Test + public void testGetLanciaByResponsabileStrutture() { + + Set allUsersInGroup = membershipService.getAllUsersInGroup("responsabile-struttura@34408"); + assertTrue("Il gruppo responsabile-struttura@34408 non contiene maurizio.lancia", allUsersInGroup.contains("maurizio.lancia")); + log.info(""+allUsersInGroup); + } + + @Test + public void testGetUsersInMyGroups() { + + Set usersInMyGroups = membershipService.getUsersInMyGroups("anna.penna"); + log.info("All groups for user "+membershipService.getAllGroupsForUser(TestServices.getRA())); + assertTrue(usersInMyGroups.contains("silvia.rossi")); + + } +} diff --git a/src/test/java/it/cnr/si/flows/ng/service/RelationshipServiceTest.java b/src/test/java/it/cnr/si/flows/ng/service/RelationshipServiceTest.java index 5d85f2427..4e22afa2f 100644 --- a/src/test/java/it/cnr/si/flows/ng/service/RelationshipServiceTest.java +++ b/src/test/java/it/cnr/si/flows/ng/service/RelationshipServiceTest.java @@ -1,89 +1,31 @@ package it.cnr.si.flows.ng.service; import it.cnr.si.FlowsApp; -import it.cnr.si.domain.Relationship; -import it.cnr.si.flows.ng.TestServices; -import it.cnr.si.flows.ng.utils.Utils; -import it.cnr.si.service.RelationshipService; -import org.junit.Assert; -import org.junit.Test; +import it.cnr.si.service.MembershipService; +import org.junit.Ignore; import org.junit.runner.RunWith; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.security.core.GrantedAuthority; import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.transaction.annotation.EnableTransactionManagement; import javax.inject.Inject; -import java.util.List; -import java.util.Set; -import java.util.stream.Collectors; -import static org.junit.Assert.assertEquals; - -@RunWith(SpringRunner.class) @SpringBootTest(classes = FlowsApp.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) -@ActiveProfiles("test,cnr") +@ActiveProfiles(profiles = "native,unittests,cnr") +@EnableTransactionManagement +@RunWith(SpringRunner.class) +@Ignore public class RelationshipServiceTest { private final Logger log = LoggerFactory.getLogger(RelationshipServiceTest.class); - private static final String GROUP_RELATIONSHIP = "aaaaaa"; - @Inject - private RelationshipService relationshipService; - - @Test - public void testGetAllGroupsForUser() throws Exception { - //in questo modo testo anche il metodo getAllRelationship che viene richiamato in getAllGroupsForUserOLD - Set groupsForRa = relationshipService.getAllGroupsForUser(TestServices.getRA()); - Set groupsForRa2 = relationshipService.getAllGroupsForUser(TestServices.getRA2()); - - assertEquals("Due utenti che appartengono allo stesso gruppo hanno RELAZIONI DIVERSE", groupsForRa, groupsForRa2); - - //aggiungo una nuova relationship - Relationship relationship = new Relationship(); - relationship.setGroupName(groupsForRa.stream().findAny().get()); - relationship.setGroupRelationship(GROUP_RELATIONSHIP); - relationship.setGroupRole("member"); - log.info("Inserisco la Relationship "+ relationship); - relationship = relationshipService.save(relationship); - - //verifico che getAllGroupsForUserOLD prenda la modifica per entrambi gli utenti - Set newGroupsForRa = relationshipService.getAllGroupsForUser(TestServices.getRA()); - Set newGroupsForRa2 = relationshipService.getAllGroupsForUser(TestServices.getRA2()); - assertEquals("Due utenti che appartengono allo stesso gruppo hanno RELAZIONI DIVERSE", newGroupsForRa, newGroupsForRa2); + @Inject + private MembershipService membershipService; - assertEquals("Aggiungendo una relationship NON viene rilevata da getAllGroupsForUser "+ groupsForRa + newGroupsForRa, groupsForRa.size() + 1, newGroupsForRa.size()); - assertEquals("Aggiungendo una relationship NON viene rilevata da getAllGroupsForUser"+ groupsForRa2 + newGroupsForRa2, groupsForRa2.size() + 1, newGroupsForRa2.size()); - - //elimino la relazione e verifico che tutto funzioni come prima - relationshipService.delete(relationship.getId()); - groupsForRa = relationshipService.getAllGroupsForUser(TestServices.getRA()); - groupsForRa2 = relationshipService.getAllGroupsForUser(TestServices.getRA2()); - - assertEquals("Due utenti che appartengono allo stesso gruppo hanno RELAZIONI DIVERSE dopo la cancellazione della relationship", groupsForRa, groupsForRa2); - } - - @Test - public void testGetAllGroups() { - Set allGroups = relationshipService.getAllGroupsForUser("maurizio.lancia"); - System.out.println(allGroups); - List allGroupsOLD = relationshipService.getAllGroupsForUserOLD("maurizio.lancia").stream().map(GrantedAuthority::getAuthority).map(Utils::removeLeadingRole).collect(Collectors.toList()); - System.out.println(allGroupsOLD); - - Assert.assertTrue(allGroups.containsAll(allGroupsOLD)); - Assert.assertFalse(allGroupsOLD.containsAll(allGroups)); - - - } - - @Test - public void testGetLanciaByResponsabileStrutture() { - Set allUsersInGroup = relationshipService.getAllUsersInGroup("responsabile-struttura@34408"); - System.out.println(allUsersInGroup); - } } \ No newline at end of file diff --git a/src/test/java/it/cnr/si/flows/ng/service/SiperServiceTest.java b/src/test/java/it/cnr/si/flows/ng/service/SiperServiceTest.java index 22995e166..91d648217 100644 --- a/src/test/java/it/cnr/si/flows/ng/service/SiperServiceTest.java +++ b/src/test/java/it/cnr/si/flows/ng/service/SiperServiceTest.java @@ -10,10 +10,12 @@ import javax.inject.Inject; -@RunWith(SpringRunner.class) +import static org.junit.Assert.assertEquals; + @SpringBootTest(classes = FlowsApp.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) +@ActiveProfiles(profiles = "native,unittests,cnr") @EnableTransactionManagement -@ActiveProfiles("test,cnr") +@RunWith(SpringRunner.class) public class SiperServiceTest { @Inject @@ -22,8 +24,9 @@ public class SiperServiceTest { @Test public void testGetResponsabileUo() { - System.out.println(siperService.getResponsabileCDSUO("000400").get(0).get("codice_sede")); + String responsabile = (String) siperService.getResponsabileCDSUO("ASR108").get(0).get("uid"); + assertEquals("maurizio.lancia", responsabile); } } diff --git a/src/test/java/it/cnr/si/web/rest/AvvisoResourceIntTest.java b/src/test/java/it/cnr/si/web/rest/AvvisoResourceIntTest.java index 811235b62..69d75bf1e 100644 --- a/src/test/java/it/cnr/si/web/rest/AvvisoResourceIntTest.java +++ b/src/test/java/it/cnr/si/web/rest/AvvisoResourceIntTest.java @@ -1,24 +1,24 @@ package it.cnr.si.web.rest; -import it.cnr.si.SprintApp; +import it.cnr.si.FlowsApp; import it.cnr.si.domain.Avviso; import it.cnr.si.flows.ng.TestUtil; import it.cnr.si.repository.AvvisoRepository; import it.cnr.si.service.AvvisoService; - import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; -import static org.hamcrest.Matchers.hasItem; import org.mockito.MockitoAnnotations; import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.data.web.PageableHandlerMethodArgumentResolver; import org.springframework.http.MediaType; import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; -import org.springframework.data.web.PageableHandlerMethodArgumentResolver; +import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.util.ReflectionTestUtils; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.setup.MockMvcBuilders; +import org.springframework.transaction.annotation.EnableTransactionManagement; import org.springframework.transaction.annotation.Transactional; import javax.annotation.PostConstruct; @@ -27,6 +27,7 @@ import java.util.List; import static org.assertj.core.api.Assertions.assertThat; +import static org.hamcrest.Matchers.hasItem; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; @@ -35,8 +36,10 @@ * * @see AvvisoResource */ +@SpringBootTest(classes = FlowsApp.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) +@ActiveProfiles(profiles = "native,unittests,cnr") +@EnableTransactionManagement @RunWith(SpringRunner.class) -@SpringBootTest(classes = SprintApp.class) public class AvvisoResourceIntTest { private static final String DEFAULT_CONTENUTO = "AAAAA"; private static final String UPDATED_CONTENUTO = "BBBBB"; @@ -69,8 +72,8 @@ public void setup() { AvvisoResource avvisoResource = new AvvisoResource(); ReflectionTestUtils.setField(avvisoResource, "avvisoService", avvisoService); this.restAvvisoMockMvc = MockMvcBuilders.standaloneSetup(avvisoResource) - .setCustomArgumentResolvers(pageableArgumentResolver) - .setMessageConverters(jacksonMessageConverter).build(); + .setCustomArgumentResolvers(pageableArgumentResolver) + .setMessageConverters(jacksonMessageConverter).build(); } /** @@ -153,11 +156,11 @@ public void getAvviso() throws Exception { // Get the avviso restAvvisoMockMvc.perform(get("/api/avvisos/{id}", avviso.getId())) - .andExpect(status().isOk()) - .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE)) - .andExpect(jsonPath("$.id").value(avviso.getId().intValue())) - .andExpect(jsonPath("$.contenuto").value(DEFAULT_CONTENUTO.toString())) - .andExpect(jsonPath("$.attivo").value(DEFAULT_ATTIVO.booleanValue())); + .andExpect(status().isOk()) + .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE)) + .andExpect(jsonPath("$.id").value(avviso.getId().intValue())) + .andExpect(jsonPath("$.contenuto").value(DEFAULT_CONTENUTO.toString())) + .andExpect(jsonPath("$.attivo").value(DEFAULT_ATTIVO.booleanValue())); } @Test diff --git a/src/test/java/it/cnr/si/web/rest/CnrgroupResourceIntTest.java b/src/test/java/it/cnr/si/web/rest/CnrgroupResourceIntTest.java index b02e8bb72..24ef51b92 100644 --- a/src/test/java/it/cnr/si/web/rest/CnrgroupResourceIntTest.java +++ b/src/test/java/it/cnr/si/web/rest/CnrgroupResourceIntTest.java @@ -1,6 +1,6 @@ package it.cnr.si.web.rest; -import it.cnr.si.SprintApp; +import it.cnr.si.FlowsApp; import it.cnr.si.domain.Cnrgroup; import it.cnr.si.flows.ng.TestUtil; import it.cnr.si.repository.CnrgroupRepository; @@ -19,6 +19,7 @@ import org.springframework.test.util.ReflectionTestUtils; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.setup.MockMvcBuilders; +import org.springframework.transaction.annotation.EnableTransactionManagement; import org.springframework.transaction.annotation.Transactional; import javax.annotation.PostConstruct; @@ -36,9 +37,10 @@ * * @see CnrgroupResource */ +@SpringBootTest(classes = FlowsApp.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) +@ActiveProfiles(profiles = "native,unittests,cnr") +@EnableTransactionManagement @RunWith(SpringRunner.class) -@SpringBootTest(classes = SprintApp.class) -@ActiveProfiles(profiles = "cnr") @Ignore public class CnrgroupResourceIntTest { private static final String DEFAULT_NAME = "AAAAA"; @@ -71,8 +73,8 @@ public void setup() { CnrgroupResource cnrgroupResource = new CnrgroupResource(); ReflectionTestUtils.setField(cnrgroupResource, "cnrgroupService", cnrgroupService); this.restCnrgroupMockMvc = MockMvcBuilders.standaloneSetup(cnrgroupResource) - .setCustomArgumentResolvers(pageableArgumentResolver) - .setMessageConverters(jacksonMessageConverter).build(); + .setCustomArgumentResolvers(pageableArgumentResolver) + .setMessageConverters(jacksonMessageConverter).build(); } /** @@ -173,11 +175,11 @@ public void getCnrgroup() throws Exception { // Get the cnrgroup restCnrgroupMockMvc.perform(get("/api/cnrgroups/{id}", cnrgroup.getId())) - .andExpect(status().isOk()) - .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE)) - .andExpect(jsonPath("$.id").value(cnrgroup.getId().intValue())) - .andExpect(jsonPath("$.name").value(DEFAULT_NAME.toString())) - .andExpect(jsonPath("$.displayName").value(DEFAULT_DISPLAY_NAME.toString())); + .andExpect(status().isOk()) + .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE)) + .andExpect(jsonPath("$.id").value(cnrgroup.getId().intValue())) + .andExpect(jsonPath("$.name").value(DEFAULT_NAME.toString())) + .andExpect(jsonPath("$.displayName").value(DEFAULT_DISPLAY_NAME.toString())); } @Test diff --git a/src/test/java/it/cnr/si/web/rest/CounterResourceIntTest.java b/src/test/java/it/cnr/si/web/rest/CounterResourceIntTest.java index ad530f711..c4d6ec53c 100644 --- a/src/test/java/it/cnr/si/web/rest/CounterResourceIntTest.java +++ b/src/test/java/it/cnr/si/web/rest/CounterResourceIntTest.java @@ -19,6 +19,7 @@ import org.springframework.test.util.ReflectionTestUtils; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.setup.MockMvcBuilders; +import org.springframework.transaction.annotation.EnableTransactionManagement; import org.springframework.transaction.annotation.Transactional; import javax.annotation.PostConstruct; @@ -36,9 +37,10 @@ * * @see CounterResource */ +@SpringBootTest(classes = FlowsApp.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) +@ActiveProfiles(profiles = "native,unittests,cnr") +@EnableTransactionManagement @RunWith(SpringRunner.class) -@SpringBootTest(classes = FlowsApp.class) -@ActiveProfiles(profiles = "cnr") @Ignore public class CounterResourceIntTest { private static final String DEFAULT_NAME = "AAAAA"; @@ -131,7 +133,7 @@ public void getCounter() throws Exception { // Get the counter restCounterMockMvc.perform(get("/api/counters/{id}", counter.getId())) - .andExpect(status().isNotFound()); + .andExpect(status().isNotFound()); } @Test diff --git a/src/test/java/it/cnr/si/web/rest/DynamiclistResourceIntTest.java b/src/test/java/it/cnr/si/web/rest/DynamiclistResourceIntTest.java index d78999419..918ad15af 100644 --- a/src/test/java/it/cnr/si/web/rest/DynamiclistResourceIntTest.java +++ b/src/test/java/it/cnr/si/web/rest/DynamiclistResourceIntTest.java @@ -1,6 +1,6 @@ package it.cnr.si.web.rest; -import it.cnr.si.SprintApp; +import it.cnr.si.FlowsApp; import it.cnr.si.domain.Dynamiclist; import it.cnr.si.flows.ng.TestUtil; import it.cnr.si.repository.DynamiclistRepository; @@ -18,6 +18,7 @@ import org.springframework.test.util.ReflectionTestUtils; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.setup.MockMvcBuilders; +import org.springframework.transaction.annotation.EnableTransactionManagement; import org.springframework.transaction.annotation.Transactional; import javax.annotation.PostConstruct; @@ -35,9 +36,10 @@ * * @see DynamiclistResource */ +@SpringBootTest(classes = FlowsApp.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) +@ActiveProfiles(profiles = "native,unittests,cnr") +@EnableTransactionManagement @RunWith(SpringRunner.class) -@SpringBootTest(classes = SprintApp.class) -@ActiveProfiles(profiles = "cnr") @Ignore public class DynamiclistResourceIntTest { private static final String DEFAULT_NAME = "AAAAA"; diff --git a/src/test/java/it/cnr/si/web/rest/ExternalMessageResourceIntTest.java b/src/test/java/it/cnr/si/web/rest/ExternalMessageResourceIntTest.java index 374d4baf8..3c6bc6323 100644 --- a/src/test/java/it/cnr/si/web/rest/ExternalMessageResourceIntTest.java +++ b/src/test/java/it/cnr/si/web/rest/ExternalMessageResourceIntTest.java @@ -1,24 +1,27 @@ package it.cnr.si.web.rest; -import it.cnr.si.SprintApp; +import it.cnr.si.FlowsApp; import it.cnr.si.domain.ExternalMessage; +import it.cnr.si.domain.enumeration.ExternalApplication; +import it.cnr.si.domain.enumeration.ExternalMessageStatus; +import it.cnr.si.domain.enumeration.ExternalMessageVerb; import it.cnr.si.flows.ng.TestUtil; import it.cnr.si.repository.ExternalMessageRepository; import it.cnr.si.service.ExternalMessageService; - import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; -import static org.hamcrest.Matchers.hasItem; import org.mockito.MockitoAnnotations; import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.data.web.PageableHandlerMethodArgumentResolver; import org.springframework.http.MediaType; import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; -import org.springframework.data.web.PageableHandlerMethodArgumentResolver; +import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.util.ReflectionTestUtils; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.setup.MockMvcBuilders; +import org.springframework.transaction.annotation.EnableTransactionManagement; import org.springframework.transaction.annotation.Transactional; import javax.annotation.PostConstruct; @@ -27,19 +30,18 @@ import java.util.List; import static org.assertj.core.api.Assertions.assertThat; +import static org.hamcrest.Matchers.hasItem; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; - -import it.cnr.si.domain.enumeration.ExternalMessageVerb; -import it.cnr.si.domain.enumeration.ExternalMessageStatus; -import it.cnr.si.domain.enumeration.ExternalApplication; /** * Test class for the ExternalMessageResource REST controller. * * @see ExternalMessageResource */ +@SpringBootTest(classes = FlowsApp.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) +@ActiveProfiles(profiles = "native,unittests,cnr") +@EnableTransactionManagement @RunWith(SpringRunner.class) -@SpringBootTest(classes = SprintApp.class) public class ExternalMessageResourceIntTest { private static final String DEFAULT_URL = "AAAAA"; private static final String UPDATED_URL = "BBBBB"; diff --git a/src/test/java/it/cnr/si/web/rest/FaqResourceIntTest.java b/src/test/java/it/cnr/si/web/rest/FaqResourceIntTest.java index 29695dcb8..d3724d417 100644 --- a/src/test/java/it/cnr/si/web/rest/FaqResourceIntTest.java +++ b/src/test/java/it/cnr/si/web/rest/FaqResourceIntTest.java @@ -1,23 +1,23 @@ package it.cnr.si.web.rest; -import it.cnr.si.SprintApp; +import it.cnr.si.FlowsApp; import it.cnr.si.domain.Faq; import it.cnr.si.flows.ng.TestUtil; import it.cnr.si.repository.FaqRepository; - import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; -import static org.hamcrest.Matchers.hasItem; import org.mockito.MockitoAnnotations; import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.data.web.PageableHandlerMethodArgumentResolver; import org.springframework.http.MediaType; import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; -import org.springframework.data.web.PageableHandlerMethodArgumentResolver; +import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.util.ReflectionTestUtils; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.setup.MockMvcBuilders; +import org.springframework.transaction.annotation.EnableTransactionManagement; import org.springframework.transaction.annotation.Transactional; import javax.annotation.PostConstruct; @@ -26,6 +26,7 @@ import java.util.List; import static org.assertj.core.api.Assertions.assertThat; +import static org.hamcrest.Matchers.hasItem; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; @@ -34,8 +35,10 @@ * * @see FaqResource */ +@SpringBootTest(classes = FlowsApp.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) +@ActiveProfiles(profiles = "native,unittests,cnr") +@EnableTransactionManagement @RunWith(SpringRunner.class) -@SpringBootTest(classes = SprintApp.class) public class FaqResourceIntTest { private static final String DEFAULT_DOMANDA = "AAAAA"; private static final String UPDATED_DOMANDA = "BBBBB"; diff --git a/src/test/java/it/cnr/si/web/rest/FormResourceIntTest.java b/src/test/java/it/cnr/si/web/rest/FormResourceIntTest.java index c9439440b..9970ce7ae 100644 --- a/src/test/java/it/cnr/si/web/rest/FormResourceIntTest.java +++ b/src/test/java/it/cnr/si/web/rest/FormResourceIntTest.java @@ -5,7 +5,6 @@ import it.cnr.si.flows.ng.TestUtil; import it.cnr.si.repository.FormRepository; import org.junit.Before; -import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.MockitoAnnotations; @@ -18,6 +17,7 @@ import org.springframework.test.util.ReflectionTestUtils; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.setup.MockMvcBuilders; +import org.springframework.transaction.annotation.EnableTransactionManagement; import org.springframework.transaction.annotation.Transactional; import javax.annotation.PostConstruct; @@ -35,10 +35,11 @@ * * @see FormResource */ +@SpringBootTest(classes = FlowsApp.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) +@ActiveProfiles(profiles = "native,unittests,cnr") +@EnableTransactionManagement @RunWith(SpringRunner.class) -@SpringBootTest(classes = FlowsApp.class) -@ActiveProfiles(profiles = "cnr") -@Ignore +//@Ignore public class FormResourceIntTest { private static final String DEFAULT_PROCESS_DEFINITION_KEY = "AAAAA"; private static final String UPDATED_PROCESS_DEFINITION_KEY = "BBBBB"; diff --git a/src/test/java/it/cnr/si/web/rest/MembershipResourceIntTest.java b/src/test/java/it/cnr/si/web/rest/MembershipResourceIntTest.java index c0d9f0fb8..a3687d1cd 100644 --- a/src/test/java/it/cnr/si/web/rest/MembershipResourceIntTest.java +++ b/src/test/java/it/cnr/si/web/rest/MembershipResourceIntTest.java @@ -1,6 +1,6 @@ package it.cnr.si.web.rest; -import it.cnr.si.SprintApp; +import it.cnr.si.FlowsApp; import it.cnr.si.domain.Membership; import it.cnr.si.flows.ng.TestUtil; import it.cnr.si.repository.MembershipRepository; @@ -13,10 +13,12 @@ import org.springframework.data.web.PageableHandlerMethodArgumentResolver; import org.springframework.http.MediaType; import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; +import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.util.ReflectionTestUtils; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.setup.MockMvcBuilders; +import org.springframework.transaction.annotation.EnableTransactionManagement; import org.springframework.transaction.annotation.Transactional; import javax.annotation.PostConstruct; @@ -34,8 +36,10 @@ * * @see MembershipResource */ +@SpringBootTest(classes = FlowsApp.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) +@ActiveProfiles(profiles = "native,unittests,cnr") +@EnableTransactionManagement @RunWith(SpringRunner.class) -@SpringBootTest(classes = SprintApp.class) public class MembershipResourceIntTest { private static final String DEFAULT_GROUPROLE = "AAAAA"; @@ -119,7 +123,7 @@ public void getAllMemberships() throws Exception { // Get all the memberships restMembershipMockMvc.perform(get("/api/memberships?sort=id,desc")) .andExpect(status().isOk()) - .andExpect(content().contentType(MediaType.APPLICATION_JSON)) + .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8)) .andExpect(jsonPath("$.[*].id").value(hasItem(membership.getId().intValue()))) .andExpect(jsonPath("$.[*].grouprole").value(hasItem(DEFAULT_GROUPROLE.toString()))); } @@ -133,7 +137,7 @@ public void getMembership() throws Exception { // Get the membership restMembershipMockMvc.perform(get("/api/memberships/{id}", membership.getId())) .andExpect(status().isOk()) - .andExpect(content().contentType(MediaType.APPLICATION_JSON)) + .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8)) .andExpect(jsonPath("$.id").value(membership.getId().intValue())) .andExpect(jsonPath("$.grouprole").value(DEFAULT_GROUPROLE.toString())); } diff --git a/src/test/java/it/cnr/si/web/rest/NotificationRuleResourceIntTest.java b/src/test/java/it/cnr/si/web/rest/NotificationRuleResourceIntTest.java index 86b25de1f..4a82db1f0 100644 --- a/src/test/java/it/cnr/si/web/rest/NotificationRuleResourceIntTest.java +++ b/src/test/java/it/cnr/si/web/rest/NotificationRuleResourceIntTest.java @@ -1,6 +1,6 @@ package it.cnr.si.web.rest; -import it.cnr.si.SprintApp; +import it.cnr.si.FlowsApp; import it.cnr.si.domain.NotificationRule; import it.cnr.si.flows.ng.TestUtil; import it.cnr.si.repository.NotificationRuleRepository; @@ -18,6 +18,7 @@ import org.springframework.test.util.ReflectionTestUtils; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.setup.MockMvcBuilders; +import org.springframework.transaction.annotation.EnableTransactionManagement; import org.springframework.transaction.annotation.Transactional; import javax.annotation.PostConstruct; @@ -36,9 +37,10 @@ * @see NotificationRuleResource */ @Ignore +@SpringBootTest(classes = FlowsApp.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) +@ActiveProfiles(profiles = "native,unittests,cnr") +@EnableTransactionManagement @RunWith(SpringRunner.class) -@SpringBootTest(classes = SprintApp.class) -@ActiveProfiles(profiles = "cnr") public class NotificationRuleResourceIntTest { private static final String DEFAULT_PROCESS_ID = "AAAAA"; private static final String UPDATED_PROCESS_ID = "BBBBB"; diff --git a/src/test/java/it/cnr/si/web/rest/RelationshipResourceIntTest.java b/src/test/java/it/cnr/si/web/rest/RelationshipResourceIntTest.java index 10c40776c..19f1e85c4 100644 --- a/src/test/java/it/cnr/si/web/rest/RelationshipResourceIntTest.java +++ b/src/test/java/it/cnr/si/web/rest/RelationshipResourceIntTest.java @@ -1,6 +1,6 @@ package it.cnr.si.web.rest; -import it.cnr.si.SprintApp; +import it.cnr.si.FlowsApp; import it.cnr.si.domain.Relationship; import it.cnr.si.flows.ng.TestUtil; import it.cnr.si.repository.RelationshipRepository; @@ -18,6 +18,7 @@ import org.springframework.test.util.ReflectionTestUtils; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.setup.MockMvcBuilders; +import org.springframework.transaction.annotation.EnableTransactionManagement; import org.springframework.transaction.annotation.Transactional; import javax.annotation.PostConstruct; @@ -35,9 +36,10 @@ * * @see RelationshipResource */ +@SpringBootTest(classes = FlowsApp.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) +@ActiveProfiles(profiles = "native,unittests,cnr") +@EnableTransactionManagement @RunWith(SpringRunner.class) -@SpringBootTest(classes = SprintApp.class) -@ActiveProfiles(profiles = "cnr") @Ignore public class RelationshipResourceIntTest { private static final String DEFAULT_GROUP_NAME = "AAAAA"; diff --git a/src/test/java/it/cnr/si/web/rest/ViewResourceIntTest.java b/src/test/java/it/cnr/si/web/rest/ViewResourceIntTest.java index c4ccd8c47..b6331b4bd 100644 --- a/src/test/java/it/cnr/si/web/rest/ViewResourceIntTest.java +++ b/src/test/java/it/cnr/si/web/rest/ViewResourceIntTest.java @@ -1,15 +1,13 @@ package it.cnr.si.web.rest; -import it.cnr.si.SprintApp; +import it.cnr.si.FlowsApp; import it.cnr.si.domain.View; import it.cnr.si.flows.ng.TestUtil; import it.cnr.si.repository.ViewRepository; - import org.junit.Before; import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; -import static org.hamcrest.Matchers.hasItem; import org.mockito.MockitoAnnotations; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.data.web.PageableHandlerMethodArgumentResolver; @@ -20,6 +18,7 @@ import org.springframework.test.util.ReflectionTestUtils; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.setup.MockMvcBuilders; +import org.springframework.transaction.annotation.EnableTransactionManagement; import org.springframework.transaction.annotation.Transactional; import javax.annotation.PostConstruct; @@ -37,9 +36,10 @@ * * @see ViewResource */ +@SpringBootTest(classes = FlowsApp.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) +@ActiveProfiles(profiles = "native,unittests,cnr") +@EnableTransactionManagement @RunWith(SpringRunner.class) -@SpringBootTest(classes = SprintApp.class) -@ActiveProfiles(profiles = "cnr") @Ignore public class ViewResourceIntTest { private static final String DEFAULT_PROCESS_ID = "AAAAA"; diff --git a/src/test/resources/config/application-oiv.yml b/src/test/resources/config/application-oiv.yml new file mode 100644 index 000000000..ae77ef8af --- /dev/null +++ b/src/test/resources/config/application-oiv.yml @@ -0,0 +1,10 @@ +ajp: + port: 8098 + +server: + port: 8081 + +cache: + hazelcast: + name: sprint-oiv + port: 5707 diff --git a/src/test/resources/config/application-unittests.yml b/src/test/resources/config/application-unittests.yml new file mode 100644 index 000000000..6b5d45085 --- /dev/null +++ b/src/test/resources/config/application-unittests.yml @@ -0,0 +1,100 @@ +spring: + ldap: + userSearchBase: o=cnr,c=it + userSearchFilter: uid={0} + url: ldap://virtest1.si.cnr.it:389 + managerDn: cn=mastercnrapp2,ou=account,o=cnr,c=it + managerPassword: pippa + datasource: + type: com.zaxxer.hikari.HikariDataSource + # l'url del db viene modificata all'avvio dell'applicazione a seconda del profilo (cnr => flows-cnr, + # oiv => flows-oiv) in modo che l'applicazione punti un db diverso a seconda del profilo + url: jdbc:h2:mem:flows-test;DB_CLOSE_DELAY=-1 + # url: jdbc:h2:file:./DB-H2/flows-test;DB_CLOSE_DELAY=-1 + username: flows + password: + jpa: + database-platform: it.cnr.si.domain.util.FixedH2Dialect + database: H2 + show-sql: false + properties: + hibernate.cache.use_second_level_cache: false + hibernate.cache.use_query_cache: false + hibernate.generate_statistics: false + hibernate.cache.region.factory_class: it.cnr.si.config.hazelcast.HazelcastCacheRegionFactory + hibernate.cache.use_minimal_puts: true + hibernate.cache.hazelcast.use_lite_member: true + proxy: + OIL: + username: admin + password: ubiquitous + url: http://helpwildfly.si.cnr.it:8080/rest/ + newProblem: pest + instance: /HDSiper + mail: + url: localhost:8080 + + +cnr: + activiti: + diagram-font: DejaVu Sans + sigla: + usr: app.scrivaniadigitale + psw: bubbazza + mail: + mail.host: smtp.cnr.it + mail.protocol: smtp + mail.port: 25 + mail.send.error.to: marcinireneusz.trycz@cnr.it + mail.from: no-reply@nuovascrivaniadigitale + abil: + url: http://dockerwebtest01.si.cnr.it:8088/ + + +oiv: + baseurl: http://cool-jconon-funzione-pubblica.test.si.cnr.it + esperienza-noncoerente: ${oiv.baseurl}/rest/application-fp/esperienza-noncoerente + ricalcola-fascia: ${oiv.baseurl}/rest/application-fp/applications-ricalcola-fascia + iscrivi-inelenco: ${oiv.baseurl}/rest/application-fp/iscrivi-inelenco + soccorso-istruttorio: ${oiv.baseurl}/rest/application-fp/soccorso-istruttorio + preavviso-rigetto: ${oiv.baseurl}/rest/application-fp/preavviso-rigetto + comunicazioni: ${oiv.baseurl}/rest/application-fp/comunicazioni + usr: admin + psw: admin + mail: + mail.host: servizi.palazzochigi.it + mail.protocol: smtp + mail.port: 587 + mail.user: elenco.oiv + mail.password: elencooiv2016 + mail.send.error.to: massimo.fraticelli@cnr.it + mail.from: no-reply@scrivaniadigitale + + +jhipster: + swagger: + title: sprint API + description: sprint API documentation + version: 0.0.1 + termsOfServiceUrl: + contactName: + contactUrl: + contactEmail: + license: + licenseUrl: +jasper-report: + dir-oiv: /src/main/resources/print/oiv-print/ + dir-cnr: /src/main/resources/print/cnr-print/ + +ace: + url: "http://acebuntudock.si.cnr.it:5555/api" + # url: "https://api.ace.cnr.it/api/" + username: app.scrivaniadigitale + password: bubbazza +user: + admin: + username: admin + password: admin + +cache.hazelcast.port: 5709 +cache.hazelcast.packages: it.cnr.si diff --git a/src/test/resources/config/liquibase/cnr/changelog/20170504083856_added_entity_View.xml b/src/test/resources/config/liquibase/cnr/changelog/20170504083856_added_entity_View.xml deleted file mode 100644 index 01a8b5a93..000000000 --- a/src/test/resources/config/liquibase/cnr/changelog/20170504083856_added_entity_View.xml +++ /dev/null @@ -1,54 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/test/resources/config/liquibase/cnr/dynamiclist.csv b/src/test/resources/config/liquibase/cnr/dynamiclist.csv deleted file mode 100644 index a186ed04e..000000000 --- a/src/test/resources/config/liquibase/cnr/dynamiclist.csv +++ /dev/null @@ -1,5 +0,0 @@ -ID;NAME;LISTJSON -1;capitolo;{ "000111" : [{ "id" : 21001, "icon": "glyphicon glyphicon-file", "text" : "Tipi applicabili a tutte le acquisizioni" } ], "default" : [{ "id" : 10000, "icon": "glyphicon glyphicon-file", "text" : "10000 - Titolo 01 - Spese correnti", "children" : [{ "id" : 11000, "text" : "11000 - Tipologia 01.01 - Redditi da lavoro dipendente", "children" : [{ "id" : 11001, "text" : "11001 - Arretrati per anni precedenti corrisposti al personale a tempo indeterminato" }, { "id" : 11002, "text" : "11002 - Stipendi ed assegni fissi per il personale a tempo indeterminato" }, { "id" : 11003, "text" : "11003 - Straordinario per il personale a tempo indeterminato" }, { "id" : 11004, "text" : "11004 - Indennita' ed altri compensi, esclusi i rimborsi spesa per missione, corrisposti al personale a tempo indeterminato" }, { "id" : 11005, "text" : "11005 - Compensi incentivanti di cui all'art. 28, comma 4, D.P.R. 568/'87 corrisposti al personale a tempo indeterminato" }, { "id" : 11006, "text" : "11006 - Compensi per prestazioni professionali rientranti in specifiche disposizioni di legge corrisposti al personale a tempo indeterminto" }, { "id" : 11007, "text" : "11007 - Equo premio per attivita' inventiva" }, { "id" : 11008, "text" : "11008 - Arretrati per anni precedenti corrisposti al personale a tempo determinato/Fonti interne" }, { "id" : 11009, "text" : "11009 - Arretrati per anni precedenti corrisposti al personale a tempo determinato/Fonti esterne" }, { "id" : 11010, "text" : "11010 - Arretrati per anni precedenti corrisposti al personale a tempo determinato/Tipo Privatistico" }, { "id" : 11011, "text" : "11011 - Stipendi ed assegni fissi per il personale a tempo determinato da fonti interne" }, { "id" : 11012, "text" : "11012 - Stipendi ed assegni fissi per il personale a tempo determinato/Fonti esterne" }, { "id" : 11013, "text" : "11013 - Stipendi ed assegni fissi per il personale assunto con contratto di tipo privatistico" }, { "id" : 11014, "text" : "11014 - Retribuzioni degli operai agricoli a tempo determinato" }, { "id" : 11015, "text" : "11015 - Straordinario per il personale a tempo determinato/Fonti interne" }, { "id" : 11016, "text" : "11016 - Straordinario per il personale a tempo determinato/Fonti esterne" }, { "id" : 11017, "text" : "11017 - Indennita' ed altri compensi, esclusi i rimborsi spesa documentati per missione, corrisposti al personale a tempo determinato/Fonti interne" }, { "id" : 11018, "text" : "11018 - Indennita' ed altri compensi, esclusi i rimborsi spesa documentati per missione, corrisposti al personale a tempo determinato/Fonti esterne" }, { "id" : 11019, "text" : "11019 - Compensi incentivanti di cui all'art. 28, comma 4, D.P.R. 568/'87 corrisposti al personale a tempo determinato/fonti esterne" }, { "id" : 11020, "text" : "11020 - Compensi incentivanti di cui all'art. 28, comma 4, D.P.R. 568/'87 corrisposti al personale a tempo determinato/fonti interne" }, { "id" : 11021, "text" : "11021 - Compensi per prestazioni professionali rientranti in specifiche disposizioni di legge corrisposti al personale a tempo determinto/fonti interne" }, { "id" : 11022, "text" : "11022 - Compensi per prestazioni professionali rientranti in specifiche disposizioni di legge corrisposti al personale a tempo determinto/fonti esterne" }, { "id" : 11023, "text" : "11023 - Assegni di ricerca" }, { "id" : 11024, "text" : "11024 - Benefici di natura assistenziale e sociale" }, { "id" : 11025, "text" : "11025 - Buoni pasto" }, { "id" : 11026, "text" : "11026 - Accantonamento per nuove assunzione di personale a tempo determinato" }, { "id" : 11027, "text" : "11027 - Altre spese per il personale" }, { "id" : 11028, "text" : "11028 - Contributi obbligatori per il personale a tempo indeterminato" }, { "id" : 11029, "text" : "11029 - Contributi obbligatori per il personale a tempo determinato/ Fonti interne" }, { "id" : 11030, "text" : "11030 - Contributi obbligatori per il personale a tempo determinato/ Fonti esterne" }, { "id" : 11031, "text" : "11031 - Contributi obbligatori per il personale a tempo determinato/ Tipo Privatistico" }, { "id" : 11032, "text" : "11032 - Imposte, contributi previdenziali a carico ente" }, { "id" : 11033, "text" : "11033 - Assegni familiari corrisposti a personale a tempo indeterminato" }, { "id" : 11034, "text" : "11034 - Assegni familiari corrisposti a personale a tempo determinato/fonti interne" }, { "id" : 11035, "text" : "11035 - Assegni familiari corrisposti a personale a tempo determinato/fonti esterne" }, { "id" : 11036, "text" : "11036 - Equo indennizzo" }, { "id" : 11037, "text" : "11037 - Trattamento di fine servizio per il personale a tempo indeterminato" }, { "id" : 11038, "text" : "11038 - Trattamento di fine rapporto per il personale a tempo indeterminato" }, { "id" : 11039, "text" : "11039 - Liquidazione buoni fruttiferi postali per il TFR del personale iscritto INPS" }, { "id" : 11040, "text" : "11040 - Trattamento di fine rapporto per il personale a tempo determinato" }, { "id" : 11041, "text" : "11041 - Trasferimento TFR del personale comandato a tempo indeterminato" } ] }, { "id" : 12000, "text" : "12000 - Tipologia 01.02 - Imposte e tasse a carico dell'ente", "children" : [{ "id" : 12000, "text" : "11000 - Tipologia 01.01 - Redditi da lavoro dipendente", "children" : [{ "id" : 12001, "text" : "12001 - Imposta regionale sulle attivita' produttive (IRAP)" }, { "id" : 12002, "text" : "12002 - Imposta regionale sulle attivita' produttive a carico dell'ente sugli emolumenti al personale a tempo indeterminato" }, { "id" : 12003, "text" : "12003 - Imposta regionale sulle attivita' produttive a carico dell'ente sugli emolumenti al personale a tempo determinato / fonti interne" }, { "id" : 12004, "text" : "12004 - Imposta regionale sulle attivita' produttive a carico dell'ente sugli emolumenti al personale a tempo determinato / fonti esterne" }, { "id" : 12005, "text" : "12005 - Imposta regionale sulle attivita' produttive a carico dell'ente sugli emolumenti al personale a tempo determinato con contratto di tipo privatistico" }, { "id" : 12006, "text" : "12006 - Imposta di registro e di bollo" }, { "id" : 12007, "text" : "12007 - Imposta comunale sulla pubblicita' e diritto sulle pubbliche affissioni" }, { "id" : 12008, "text" : "12008 - Tributo speciale per il deposito in discarica dei rifiuti solidi" }, { "id" : 12009, "text" : "12009 - Tributo funzione tutela e protezione ambiente" }, { "id" : 12010, "text" : "12010 - Tassa e/o tariffa smaltimento rifiuti solidi urbani (Tari)" }, { "id" : 12011, "text" : "12011 - Tassa e/o canone occupazione spazi e aree pubbliche" }, { "id" : 12012, "text" : "12012 - Tassa sulle emissioni di anidride solforosa" }, { "id" : 12013, "text" : "12013 - Tassa di proprieta' delle autovetture (tassa automobilistica)" }, { "id" : 12014, "text" : "12014 - Imposte sul reddito delle persone giuridiche (IRPEG)" }, { "id" : 12015, "text" : "12015 - Imposta comunale sugli immobili (ICI)" }, { "id" : 12016, "text" : "12016 - IMU/TASI" }, { "id" : 12017, "text" : "12017 - Tributi sulle successioni e donazioni" }, { "id" : 12018, "text" : "12018 - Altre imposte e tasse a carico dell'ente" } ] } ] }, { "id" : 13000, "text" : "13000 - Tipologia 01.03 - Acquisto di beni e servizi", "children" : [{ "id" : 13001, "text" : "13001 - Giornali e riviste" }, { "id" : 13002, "text" : "13002 - Pubblicazioni" }, { "id" : 13003, "text" : "13003 - Carta, cancelleria e stampati" }, { "id" : 13004, "text" : "13004 - Carburanti, combustibili e lubrificanti per impianti di riscaldamento" }, { "id" : 13005, "text" : "13005 - Carburanti, combustibili e lubrificanti per autovetture" }, { "id" : 13006, "text" : "13006 - Carburanti, combustibili e lubrificanti per altri mezzi di trasporto stradali" }, { "id" : 13007, "text" : "13007 - Carburanti, combustibili e lubrificanti per natanti, imbarcazioni e velivoli" }, { "id" : 13008, "text" : "13008 - Equipaggiamento" }, { "id" : 13009, "text" : "13009 - Vestiario" }, { "id" : 13010, "text" : "13010 - Accessori per uffici e alloggi" }, { "id" : 13011, "text" : "13011 - Materiale informatico" }, { "id" : 13012, "text" : "13012 - Altri materiali tecnico-specialistici non sanitari" }, { "id" : 13013, "text" : "13013 - Strumenti tecnico-specialistici non sanitari" }, { "id" : 13014, "text" : "13014 - Beni per attivita' di rappresentanza" }, { "id" : 13015, "text" : "13015 - Generi alimentari" }, { "id" : 13016, "text" : "13016 - Stampati specialistici" }, { "id" : 13017, "text" : "13017 - Altri beni e materiali di consumo" }, { "id" : 13018, "text" : "13018 - Fauna" }, { "id" : 13019, "text" : "13019 - Flora" }, { "id" : 13020, "text" : "13020 - Prodotti farmaceutici ed emoderivati" }, { "id" : 13021, "text" : "13021 - Sangue ed emocomponenti" }, { "id" : 13022, "text" : "13022 - Dispositivi medici" }, { "id" : 13023, "text" : "13023 - Prodotti dietetici" }, { "id" : 13024, "text" : "13024 - Prodotti chimici" }, { "id" : 13025, "text" : "13025 - Materali e prodotti per uso veterinario" }, { "id" : 13026, "text" : "13026 - Altri beni e prodotti sanitari" }, { "id" : 13027, "text" : "13027 - Organi istituzionali dell'amministrazione - Indennita'" }, { "id" : 13028, "text" : "13028 - Organi istituzionali dell'amministrazione - Rimborsi" }, { "id" : 13029, "text" : "13029 - Compensi agli organi istituzionali di revisione, di controllo ed altri incarichi istituzionali dell'amministrazione" }, { "id" : 13030, "text" : "13030 - Missioni del personale dipendente" }, { "id" : 13031, "text" : "13031 - Missioni del personale non soggette ai limiti di spesa" }, { "id" : 13032, "text" : "13032 - Rimborso di oneri per trasferimento di personale (trasloco)" }, { "id" : 13033, "text" : "13033 - Spese di trasferta del personale associato" }, { "id" : 13034, "text" : "13034 - Professori visitatori" }, { "id" : 13035, "text" : "13035 - Mobilita' internazionale di ricercatori" }, { "id" : 13036, "text" : "13036 - Rimborso spese agli organi istituzionali di revisione, di controllo e altri incarichi istituzionali dell'ente" }, { "id" : 13037, "text" : "13037 - Pubblicita'" }, { "id" : 13038, "text" : "13038 - Spese per l'organizzazione di convegni" }, { "id" : 13039, "text" : "13039 - Spese per la partecipazione a convegni" }, { "id" : 13040, "text" : "13040 - Mostre ed altre spese per relazioni pubbliche" }, { "id" : 13041, "text" : "13041 - Acquisto di servizi per formazione obbligatoria" }, { "id" : 13042, "text" : "13042 - Acquisto di servizi per la formazione generica e discrezionale" }, { "id" : 13043, "text" : "13043 - Telefonia fissa" }, { "id" : 13044, "text" : "13044 - Telefonia mobile" }, { "id" : 13045, "text" : "13045 - Accesso a banche dati e a pubblicazioni on line" }, { "id" : 13046, "text" : "13046 - Energia elettrica" }, { "id" : 13047, "text" : "13047 - Acqua" }, { "id" : 13048, "text" : "13048 - Gas" }, { "id" : 13049, "text" : "13049 - Spese di condominio" }, { "id" : 13050, "text" : "13050 - Utenze e canoni per altri servizi" }, { "id" : 13051, "text" : "13051 - Locazione di beni immobili" }, { "id" : 13052, "text" : "13052 - Noleggi di autovetture" }, { "id" : 13053, "text" : "13053 - Noleggio della Nave " }, { "id" : 13054, "text" : "13054 - Noleggio di natanti ed imbarcazioni" }, { "id" : 13055, "text" : "13055 - Noleggio di velivoli" }, { "id" : 13056, "text" : "13056 - Noleggi di altri mezzi di trasporto stradali" }, { "id" : 13057, "text" : "13057 - Noleggi di attrezzature scientifiche e sanitarie" }, { "id" : 13058, "text" : "13058 - Noleggi di hardware" }, { "id" : 13059, "text" : "13059 - Fitti di terreni" }, { "id" : 13060, "text" : "13060 - Licenze d'uso per software" }, { "id" : 13061, "text" : "13061 - Altre licenze d'uso" }, { "id" : 13062, "text" : "13062 - Noleggi di impianti e macchinari" }, { "id" : 13063, "text" : "13063 - Leasing operativo di autovetture" }, { "id" : 13064, "text" : "13064 - Leasing operativo di altri mezzi di trasporto stradale" }, { "id" : 13065, "text" : "13065 - Leasing operativo relativo a natanti, imbarcazioni e velivoli" }, { "id" : 13066, "text" : "13066 - Leasing operativo di attrezzature e macchinari" }, { "id" : 13067, "text" : "13067 - Leasing operativo di altri beni" }, { "id" : 13068, "text" : "13068 - Manutenzione ordinaria e riparazioni di autovetture" }, { "id" : 13069, "text" : "13069 - Manutenzione ordinaria e riparazioni di altri mezzi di trasporto stradale" }, { "id" : 13070, "text" : "13070 - Manutenzione ordinaria e riparazioni della Nave " }, { "id" : 13071, "text" : "13071 - Manutenzione ordinaria e riparazioni di natanti, imbarcazioni e velivoli" }, { "id" : 13072, "text" : "13072 - Manutenzione ordinaria e riparazioni di mobili e arredi" }, { "id" : 13073, "text" : "13073 - Manutenzione ordinaria e riparazioni di impianti e macchinari" }, { "id" : 13074, "text" : "13074 - Manutenzione ordinaria e riparazioni di attrezzature" }, { "id" : 13075, "text" : "13075 - Manutenzione ordinaria e riparazioni di macchine per ufficio" }, { "id" : 13076, "text" : "13076 - Manutenzione ordinaria e riparazioni di beni immobili di proprieta'" }, { "id" : 13077, "text" : "13077 - Manutenzione ordinaria e riparazioni di beni immobili in locazione, in comodato o in uso" }, { "id" : 13078, "text" : "13078 - Incarichi libero professionali di studi, ricerca e consulenza" }, { "id" : 13079, "text" : "13079 - Esperti per commissioni, comitati e consigli" }, { "id" : 13080, "text" : "13080 - Interpretariato e traduzioni" }, { "id" : 13081, "text" : "13081 - Perizie" }, { "id" : 13082, "text" : "13082 - Prestazioni di natura contabile, tributaria e del lavoro" }, { "id" : 13083, "text" : "13083 - Prestazioni tecnico-scientifiche a fini di ricerca" }, { "id" : 13084, "text" : "13084 - Deposito, mantenimento e tutela dei brevetti" }, { "id" : 13085, "text" : "13085 - Altre prestazioni professionali e specialistiche" }, { "id" : 13086, "text" : "13086 - Servizi da agenzie di lavoro interinale" }, { "id" : 13087, "text" : "13087 - Collaborazioni coordinate e a progetto" }, { "id" : 13088, "text" : "13088 - Vigilanza" }, { "id" : 13089, "text" : "13089 - Pulizia" }, { "id" : 13090, "text" : "13090 - Servizi di lavanderia" }, { "id" : 13091, "text" : "13091 - Trasporti, traslochi e facchinaggio" }, { "id" : 13092, "text" : "13092 - Acquisto di buoni taxi" }, { "id" : 13093, "text" : "13093 - Stampa e rilegatura di pubblicazioni" }, { "id" : 13094, "text" : "13094 - Rimozione e smaltimento di rifiuti tossico-nocivi e di altri materiali" }, { "id" : 13095, "text" : "13095 - Mensa" }, { "id" : 13096, "text" : "13096 - Pubblicazione bandi di gara" }, { "id" : 13097, "text" : "13097 - Spese postali e telegrafiche" }, { "id" : 13098, "text" : "13098 - Spese notarili" }, { "id" : 13099, "text" : "13099 - Oneri per fideiussione" }, { "id" : 13100, "text" : "13100 - Spese per commissioni bancarie" }, { "id" : 13101, "text" : "13101 - Spese per accertamenti sanitari, ivi comprese le spese per visite fiscali" }, { "id" : 13102, "text" : "13102 - Gestione e manutenzione applicazioni" }, { "id" : 13103, "text" : "13103 - Spese per la progettazione, lo sviluppo, la gestone e la manutenzione di servizi applicativi integrati e siti web" }, { "id" : 13104, "text" : "13104 - Servizi di rete per trasmissione dati e VoIP e relativa manutenzione" }, { "id" : 13105, "text" : "13105 - Servizi per la gestione documentale" }, { "id" : 13106, "text" : "13106 - Servizi di consulenza e prestazioni professionali ICT" }, { "id" : 13107, "text" : "13107 - Spese legali" }, { "id" : 13108, "text" : "13108 - Quote di iscrizione ad associazioni" }, { "id" : 13109, "text" : "13109 - Spese per componenti commissioni concorso e selezione del personale" }, { "id" : 13110, "text" : "13110 - Spese per funzionamento dei Panel di Valutazione" }, { "id" : 13111, "text" : "13111 - Spese per funzionamento delle commissioni di gara" }, { "id" : 13112, "text" : "13112 - Giardinaggio" }, { "id" : 13113, "text" : "13113 - Spese per l'organizzazione di corsi di formazione" }, { "id" : 13114, "text" : "13114 - Servizi per attivita' di rappresentanza" }, { "id" : 13115, "text" : "13115 - Altri servizi non altrimenti classificabili" } ] }, { "id" : 14000, "text" : "14000 - Tipologia 01.04 - Trasferimenti correnti", "children" : [{ "id" : 14001, "text" : "14001 - Trasferimenti correnti a enti e istituzioni centrali di ricerca e Istituti e stazioni sperimentali per la ricerca" }, { "id" : 14002, "text" : "14002 - Trasferimenti correnti al Ministero dell'economia in attuazione di norme in materia di contenimento di spesa (DL 112/2008 e DL 78/2010)" }, { "id" : 14003, "text" : "14003 - Trasferimenti correnti a Regioni e province autonome" }, { "id" : 14004, "text" : "14004 - Trasferimenti correnti a Universita'" }, { "id" : 14005, "text" : "14005 - Finanziamento dei dottorati di ricerca" }, { "id" : 14006, "text" : "14006 - Trasferimenti correnti a Aziende sanitarie regionali e locali" }, { "id" : 14007, "text" : "14007 - Trasferimenti correnti a Aziende ospedaliere e a Aziende ospedaliere universitarie integrate con il S.S.N." }, { "id" : 14008, "text" : "14008 - Trasferimenti correnti a Policlinici" }, { "id" : 14009, "text" : "14009 - Trasferimenti correnti a Istituti di ricovero e cura a carattere scientifico pubblici" }, { "id" : 14010, "text" : "14010 - Trasferimenti correnti a altri Enti e Agenzie regionali e sub-regionali" }, { "id" : 14011, "text" : "14011 - Borse di studio" }, { "id" : 14012, "text" : "14012 - Borse di formazione, stages e tirocini formativi" }, { "id" : 14013, "text" : "14013 - Trasferimenti correnti a famiglie" }, { "id" : 14014, "text" : "14014 - Trasferimenti correnti a imprese controllate" }, { "id" : 14015, "text" : "14015 - Trasferimenti correnti a imprese partecipate" }, { "id" : 14016, "text" : "14016 - Trasferimenti correnti a altre imprese" }, { "id" : 14017, "text" : "14017 - Trasferimenti correnti a Istituzioni Sociali Private" }, { "id" : 14018, "text" : "14018 - Trasferimenti correnti a Paesi Intra-UE" }, { "id" : 14019, "text" : "14019 - Trasferimenti correnti a Paesi Extra-UE" } ] }, { "id" : 17000, "text" : "17000 - Tipologia 01.07 - Interessi passivi", "children" : [{ "id" : 17001, "text" : "17001 - Interessi passivi su mutui, prestiti, anticipazioni di cassa ed oneri accessori" }, { "id" : 17002, "text" : "17002 - Interessi di mora a Amministrazioni Centrali" }, { "id" : 17003, "text" : "17003 - Interessi di mora a Amministrazioni Locali" }, { "id" : 17004, "text" : "17004 - Interessi di mora a Enti previdenziali" }, { "id" : 17005, "text" : "17005 - Interessi di mora ad altri soggetti" } ] }, { "id" : 19000, "text" : "19000 - Tipologia 01.09 - Rimborsi e poste correttive delle entrate", "children" : [{ "id" : 19000, "text" : "19000 - Tipologia 01.09 - Rimborsi e poste correttive delle entrate" }, { "id" : 19001, "text" : "19001 - Rimborsi per spese di personale in comando/distacco" }, { "id" : 19002, "text" : "19002 - Rimborsi di trasferimenti all'Unione Europea" }, { "id" : 19003, "text" : "19003 - Rimborsi di parte corrente ad Amministrazioni Centrali di somme non dovute o incassate in eccesso" }, { "id" : 19004, "text" : "19004 - Rimborsi di parte corrente ad Amministrazioni Locali di somme non dovute o incassate in eccesso" }, { "id" : 19005, "text" : "19005 - Rimborsi di parte corrente a famiglie di somme non dovute o incassate in eccesso" }, { "id" : 19006, "text" : "19006 - Rimborsi di parte corrente a Imprese di somme non dovute o incassate in eccesso" }, { "id" : 19007, "text" : "19007 - Rimborsi di parte corrente a Istituzioni Sociali Private di somme non dovute o incassate in eccesso" } ] }, { "id" : 110000, "text" : "110000 - Tipologia 01.10 - Altre spese correnti", "children" : [{ "id" : 10001, "text" : "10001 - Fondo di riserva" }, { "id" : 10002, "text" : "10002 - Fondo per il finanziamento di programmi di ricerca di interesse nazionale" }, { "id" : 10003, "text" : "10003 - Fondo rischi ed oneri" }, { "id" : 10004, "text" : "10004 - Fondo per rinnovi contrattuali" }, { "id" : 10005, "text" : "10005 - Versamenti IVA a debito per le gestioni commerciali" }, { "id" : 10006, "text" : "10006 - Premi di assicurazione su beni mobili" }, { "id" : 10007, "text" : "10007 - Premi di assicurazione su beni immobili" }, { "id" : 10008, "text" : "10008 - Premi di assicurazione per responsabilita' civile verso terzi" }, { "id" : 10009, "text" : "10009 - Premi di assicurazione contro i danni" }, { "id" : 10010, "text" : "10010 - Spese dovute a sanzioni" }, { "id" : 10011, "text" : "10011 - Spese per risarcimento danni" }, { "id" : 10012, "text" : "10012 - Spese per indennizzi" }, { "id" : 10013, "text" : "10013 - Oneri da contenzioso" } ] } ] }, { "id" : 20000, "text" : "20000 - Titolo 02 - Spese in c/capitale", "children" : [{ "id" : 22000, "text" : "22000 - Tipologia 02.02 - Investimenti fissi lordi e acquisto di terreni", "children" : [{ "id" : 22001, "text" : "22001 - Autovetture" }, { "id" : 22002, "text" : "22002 - Altri mezzi di trasporto stradali" }, { "id" : 22003, "text" : "22003 - Velivoli" }, { "id" : 22004, "text" : "22004 - Imbarcazioni" }, { "id" : 22005, "text" : "22005 - Mobili e arredi per ufficio" }, { "id" : 22006, "text" : "22006 - Mobili e arredi per alloggi e pertinenze" }, { "id" : 22007, "text" : "22007 - Spese per l'acquisto di mobili e arredi ad uso esclusivo dei laboratori" }, { "id" : 22008, "text" : "22008 - Macchinari" }, { "id" : 22009, "text" : "22009 - Impianti" }, { "id" : 22010, "text" : "22010 - Attrezzature scientifiche" }, { "id" : 22011, "text" : "22011 - Attrezzature sanitarie" }, { "id" : 22012, "text" : "22012 - Macchine per ufficio" }, { "id" : 22013, "text" : "22013 - Server" }, { "id" : 22014, "text" : "22014 - Postazioni di lavoro" }, { "id" : 22015, "text" : "22015 - Periferiche (Stampanti Fax Scanner ect)" }, { "id" : 22016, "text" : "22016 - Apparati di telecomunicazione" }, { "id" : 22017, "text" : "22017 - Altro hardware non altrimenti classificabile" }, { "id" : 22018, "text" : "22018 - Fabbricati istituzionale" }, { "id" : 22019, "text" : "22019 - Manutenzione straordinaria fabbricati istituzionali" }, { "id" : 22020, "text" : "22020 - Fabbricati industriali e costruzioni leggere" }, { "id" : 22021, "text" : "22021 - Manutenzione straordinaria fabbricati industriali e costruzioni leggere" }, { "id" : 22022, "text" : "22022 - Fabbricati rurali" }, { "id" : 22023, "text" : "22023 - Manutenzione straordinaria fabbricati rurali" }, { "id" : 22024, "text" : "22024 - Materiale bibliografico" }, { "id" : 22025, "text" : "22025 - Terreni agricoli" }, { "id" : 22026, "text" : "22026 - Terreni edificabili" }, { "id" : 22027, "text" : "22027 - Manutenzione straordinaria immobili in locazione, in comodato o in uso" }, { "id" : 22028, "text" : "22028 - Ripristino ed adattamento immobili in locazione, in comodato o in uso" } ] } ] }, { "id" : 30000, "text" : "30000 - Titolo 03 - Spese per incremento attivita' finanziarie", "children" : [{ "id" : 31000, "text" : "31000 - Tipologia 03.01 - Acquisizioni di attivita' finanziarie", "children" : [{ "id" : 31001, "text" : "31001 - Acquisizioni di partecipazioni e conferimenti di capitale in altre imprese partecipate" }, { "id" : 31002, "text" : "31002 - Liquidazione Polizza INA ASSITALIA n. 9.003.583 (personale ex INSEAN)" } ] } ] }, { "id" : 40000, "text" : "40000 - Titolo 04 - Rimborso prestiti", "children" : [{ "id" : 43000, "text" : "43000 - Tipologia 04.03 - Rimborso mutui e altri finanziamenti a medio lungo termine", "children" : [{ "id" : 43001, "text" : "43001 - Rimborso di mutui" } ] } ] } ] } -2;flussoAcquisti_tipologiaAcquisizione;{ "000111" : [{ "id" : 21001, "text" : "Tipi applicabili a tutte le acquisizioni" } ], "default" : [{ "id" : 1, "text" : "Tipi applicabili a tutte le acquisizioni", "children" : [{ "id" : 11, "text" : "procedura aperta" }, { "id" : 12, "text" : "procedura ristretta" }, { "id" : 13, "text" : "procedura competitiva con negoziazione" }, { "id" : 14, "text" : "procedura negoziata senza previa pubblicazione del bando" }, { "id" : 15, "text" : "dialogo competitivo" }, { "id" : 16, "text" : "partenariato per l'innovazione" } ] }, { "id" : 2, "text" : "Tipi applicabili solo agli appalti sottosoglia comunitaria (200.000 euro)", "children" : [{ "id" : 21, "text" : "Amministrazione diretta" }, { "id" : 22, "text" : "Procedura negoziata" }, { "id" : 23, "text" : "Affidamento diretto" } ] } ] } -3;flussoAcquisti_strumentoAcquisizione;{ "000111" : [{ "id" : 21001, "text" : "Tipi applicabili a tutte le acquisizioni" } ], "default" : [{ "id" : 1, "text" : "AFFIDAMENTO DIRETTO", "children" : [{ "id" : 11, "text" : "AFFIDAMENTO DIRETTO - MEPA o CONSIP" }, { "id" : 12, "text" : "AFFIDAMENTO DIRETTO - CONVENZIONE CONSIP" }, { "id" : 13, "text" : "AFFIDAMENTO DIRETTO - FUORI MEPA" } ] }, { "id" : 2, "text" : "PROCEDURA SELETTIVA", "children" : [{ "id" : 21, "text" : "PROCEDURA SELETTIVA - MEPA" }, { "id" : 23, "text" : "PROCEDURA SELETTIVA - ALTRO" } ] } ] } -4;flussoAcquisti_verificheRequisiti;{ "000111": [{ "id": 21001, "text": "Verifiche Requisiti di Legge" }], "default": [{ "id": 1, "text": "Soddisfatte" }, { "id": 2, "text": "Insoddisfatte" }, { "id": 3, "text": "Avviate" }, { "id": 4, "text": "Non Effettuate" }] } \ No newline at end of file diff --git a/src/test/resources/print/cnr-print/valutazioneShortTermMobility.jasper b/src/test/resources/print/cnr-print/valutazioneShortTermMobility.jasper new file mode 100644 index 000000000..c5b529d2a Binary files /dev/null and b/src/test/resources/print/cnr-print/valutazioneShortTermMobility.jasper differ diff --git a/src/test/resources/print/cnr-print/valutazioneShortTermMobility.jrxml b/src/test/resources/print/cnr-print/valutazioneShortTermMobility.jrxml new file mode 100644 index 000000000..4bd4b7c24 --- /dev/null +++ b/src/test/resources/print/cnr-print/valutazioneShortTermMobility.jrxml @@ -0,0 +1,544 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <band height="63" splitType="Stretch"> + <textField> + <reportElement x="0" y="4" width="556" height="40" uuid="1c38430f-18c4-4353-b5a3-4c46137ce2cb"/> + <textElement textAlignment="Center"> + <font size="26" isBold="true"/> + </textElement> + <textFieldExpression><![CDATA["SCHEDA VALUTAZIONE DEL PROGETTO "]]></textFieldExpression> + </textField> + <textField isStretchWithOverflow="true"> + <reportElement x="0" y="42" width="555" height="21" uuid="10119319-030e-4176-a69a-e86a174f58cc"/> + <textElement textAlignment="Center" verticalAlignment="Middle"> + <font isItalic="true"/> + </textElement> + <textFieldExpression><![CDATA["Identificativo Flusso: " + $F{key}]]></textFieldExpression> + </textField> + </band> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/test/resources/processes/.gitignore b/src/test/resources/processes/.gitignore new file mode 100644 index 000000000..b58b39ebc --- /dev/null +++ b/src/test/resources/processes/.gitignore @@ -0,0 +1 @@ +/acquisti4.bpmn diff --git a/src/test/resources/processes/acquisti2.bpmn b/src/test/resources/processes/acquisti2.bpmn index bfce2593c..fc92a86d2 100644 --- a/src/test/resources/processes/acquisti2.bpmn +++ b/src/test/resources/processes/acquisti2.bpmn @@ -2,12 +2,12 @@ - + - + @@ -15,14 +15,26 @@ + + + + + + + + + + + + - + - + @@ -31,26 +43,26 @@ - + - + - + - + - + @@ -60,14 +72,14 @@ - + - + - + @@ -89,14 +101,14 @@ - + - + - + @@ -105,64 +117,60 @@ - + - + - + - + - + - - + + - - + + - + - + - + - + - + - + - - - - - + - + - + - + @@ -170,14 +178,26 @@ - + + + + + + + + + + + + + - + - + @@ -185,82 +205,31 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - + - + - + - + - + - + @@ -269,53 +238,53 @@ - + - + - + - + - + - + - + - + - + - - + + - + - + @@ -323,29 +292,28 @@ - - + - + - + - + - + - + @@ -355,82 +323,92 @@ - - - - + + + + + + + + + + - + - + - + - + - + - - - - - - - + + - + + + + + + + + - - - + + + + + + + + - - - - - - - - - - - - - - - - + - + + + + + + + + + + + + + - + - + - + - + - + @@ -439,14 +417,14 @@ - + - + - + @@ -458,14 +436,14 @@ - + - + - + @@ -479,27 +457,15 @@ - - - - - - - - - - - - - + - + - + @@ -508,253 +474,161 @@ - + - + - + + - - - - + + + - - - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - + - + - + - + - - - - - - + - + - + - + - + - - + - + - + - + - + - + - + - + - + - + - - - - + + + - - - - - + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - + - + - - - - - - - - - - - + + + - + - - - - - + + - - - - - - - + + - + + + - + + + + + + + + + + - - - + - + - + - + - + - + @@ -764,48 +638,29 @@ - + + - - - - - - - - - - - - - - - - - - - - - + - + - + - + - + - + - + @@ -815,17 +670,17 @@ - - + + - + - + - + @@ -834,12 +689,12 @@ - + - + @@ -847,19 +702,19 @@ - + - + - + @@ -867,65 +722,66 @@ - - + + + + + + + + + + + + + + + + + + + + + + + + - - + + - - - - - - - - - - - - - - - - - - - - - + + + - + - + - + - - - - + - + - + - + @@ -937,7 +793,7 @@ - + @@ -948,617 +804,720 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + - + - + - + - + - + - + - - + + - + - - + + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - - + + - - - - + - - + + - - + + - - + + - - + + - + - + - + - + - + - + - + - + - + - - + + - - - - - - - + - - + + - - + + - - + + - - + + - - + + - - - - - + + - + - + - + - + - - + + - + - + - + - + - - + + - + - + - + - + - + + + + + + + - + - + - + + + + + + + + + + + + + + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - + + - - + + - - + + - - + + - - - - + + + + - - + + - - + + - - - - + + + + - - + + - - + + - - + + - - + + - - - - + + + + - - + + - - + + - - - + + + - - - - - - - + + - - + + - - - - - - + + - - - - - - - - - - - - - - - - - - - - - + + - - + + - - + + - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + - - + + - - - + + + - - + + - - + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - - + + + - - - + + + - - - - - + + + + - - - + + + - - - + + + - - - - - - - - - - - - - - - - - - - - + + + + + - - + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + + - - - - + + + + - - - - + + + + - - - + + + - - + + - - + + - - - + + - - + + - - + + - - + + - - - - + + + + - - + + - - + + - - - + + - - + + - - + + + + + + + + + + + + + + + + + - - + + - - + + - - - + + - - - + + - - - + + - - - - + + + + - - + + - - + + - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/test/resources/processes/acquisti3.bpmn b/src/test/resources/processes/acquisti3.bpmn deleted file mode 100644 index 0762995d3..000000000 --- a/src/test/resources/processes/acquisti3.bpmn +++ /dev/null @@ -1,1565 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file