diff --git a/bower.json b/bower.json
deleted file mode 100755
index e246def5..00000000
--- a/bower.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "name": "HelloIonic",
- "private": "true",
- "devDependencies": {
- "ionic": "^2.2.0"
- }
-}
diff --git a/ionic.config.json b/ionic.config.json
index 2e165bca..bb11cb3c 100755
--- a/ionic.config.json
+++ b/ionic.config.json
@@ -1,14 +1,5 @@
{
"name": "Practera SDK - Ionic",
"app_id": "",
- "gulpStartupTasks": [
- "sass",
- "watch"
- ],
- "watchPatterns": [
- "www/**/*",
- "!www/lib/**/*",
- "!www/**/*.map"
- ],
"type": "ionic-angular"
}
diff --git a/package-lock.json b/package-lock.json
new file mode 100644
index 00000000..0b84cf26
--- /dev/null
+++ b/package-lock.json
@@ -0,0 +1,5575 @@
+{
+ "name": "practera-sdk-ionic",
+ "version": "0.0.1",
+ "lockfileVersion": 1,
+ "dependencies": {
+ "@angular/common": {
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/@angular/common/-/common-4.1.3.tgz",
+ "integrity": "sha1-58R5HjITHPdMI5QowqZ9qrLu8Bc="
+ },
+ "@angular/compiler": {
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-4.1.3.tgz",
+ "integrity": "sha1-0t0whTsM9KVHWLSjFGMsIx+clMM="
+ },
+ "@angular/compiler-cli": {
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-4.1.3.tgz",
+ "integrity": "sha1-wjYv/fZXVkcUgfg5+rZ1vKwhP5Y="
+ },
+ "@angular/core": {
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/@angular/core/-/core-4.1.3.tgz",
+ "integrity": "sha1-KFSY64arfQtvmC+Pn0h+9hABOzU="
+ },
+ "@angular/forms": {
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-4.1.3.tgz",
+ "integrity": "sha1-OAq0w6+ExdHXSMKn0EFRx9yOSYI="
+ },
+ "@angular/http": {
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/@angular/http/-/http-4.1.3.tgz",
+ "integrity": "sha1-650cMCoBcoFfmlczENm+C964Ra4="
+ },
+ "@angular/platform-browser": {
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-4.1.3.tgz",
+ "integrity": "sha1-T6HbURndF4sxXdrlsym+4akypb0="
+ },
+ "@angular/platform-browser-dynamic": {
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-4.1.3.tgz",
+ "integrity": "sha1-PBP9z1kdSH9u/cHUaRPygMbYwuw="
+ },
+ "@angular/tsc-wrapped": {
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/@angular/tsc-wrapped/-/tsc-wrapped-4.1.3.tgz",
+ "integrity": "sha1-LWNyyRh78WIerNlguUs5xPlSk80="
+ },
+ "@ionic/app-scripts": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@ionic/app-scripts/-/app-scripts-2.0.0.tgz",
+ "integrity": "sha512-/SiW8B64diuiO1BMylM4IxYb60KNeFHTc6DYfdbPxNskCge/iVWpOMWIEjdMeI2vuqVvUiQ3rvr/g9BZ/L97iQ==",
+ "dev": true
+ },
+ "@ionic/cli-plugin-ionic-angular": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/@ionic/cli-plugin-ionic-angular/-/cli-plugin-ionic-angular-1.4.0.tgz",
+ "integrity": "sha512-SsuQ42SFX0adzJoCwOcjQxGwjYNkl25LLpJ9R9cejmJ8ot+skH1FmYoOvCZhA4ah+RO5KH+9jBMbCdo7CdCZ8A==",
+ "dev": true,
+ "dependencies": {
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg="
+ },
+ "chalk": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.0.1.tgz",
+ "integrity": "sha512-Mp+FXEI+FrwY/XYV45b2YD3E8i3HwnEAoFcM0qlZzq/RZ9RwWitt2Y/c7cqRAz70U7hfekqx6qNYthuKFO6K0g==",
+ "dev": true
+ },
+ "cross-spawn": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-4.0.2.tgz",
+ "integrity": "sha1-e5JHYhwjrf3ThWAEqCPL45dCTUE="
+ },
+ "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="
+ },
+ "string-width": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw=="
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8="
+ }
+ }
+ },
+ "@ionic/cli-utils": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/@ionic/cli-utils/-/cli-utils-1.6.0.tgz",
+ "integrity": "sha512-SKN5ylyzXvL272cB9hkcsn4qNSjXzmnJ9OFSOxbEWszdNEYM6yFdn6wPjvQ9UCG+MrWFjhIayZGFrjrObZjGsw==",
+ "dev": true,
+ "dependencies": {
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.0.1.tgz",
+ "integrity": "sha512-Mp+FXEI+FrwY/XYV45b2YD3E8i3HwnEAoFcM0qlZzq/RZ9RwWitt2Y/c7cqRAz70U7hfekqx6qNYthuKFO6K0g==",
+ "dev": true
+ },
+ "cross-spawn": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-4.0.2.tgz",
+ "integrity": "sha1-e5JHYhwjrf3ThWAEqCPL45dCTUE=",
+ "dev": true
+ },
+ "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
+ },
+ "string-width": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "dev": true
+ }
+ }
+ },
+ "@ionic/storage": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@ionic/storage/-/storage-2.0.1.tgz",
+ "integrity": "sha1-uxqMJ2AH0AjXrN2kJrVgZbD9PAs="
+ },
+ "@ngx-translate/core": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@ngx-translate/core/-/core-7.0.0.tgz",
+ "integrity": "sha1-W29jvUBCFk1EzYX2hwOvluk5Ln0="
+ },
+ "@ngx-translate/http-loader": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/@ngx-translate/http-loader/-/http-loader-0.1.0.tgz",
+ "integrity": "sha1-YCkyVWHXho/jJaQZ3idw6Y/xUC4="
+ },
+ "@types/jasmine": {
+ "version": "2.5.53",
+ "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-2.5.53.tgz",
+ "integrity": "sha512-2YNL0jXYuN7w07mb1sMZQ6T6zOvGi83v8UbjhBZ8mhvI1VkQ2STU9XOrTFyvWswMyh5rW1evS+e7qltYJvTqPA==",
+ "dev": true
+ },
+ "@types/localforage": {
+ "version": "0.0.30",
+ "resolved": "https://registry.npmjs.org/@types/localforage/-/localforage-0.0.30.tgz",
+ "integrity": "sha1-PWCmv23aOOP4pGlhFZg3nx9klQk="
+ },
+ "@types/node": {
+ "version": "7.0.39",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-7.0.39.tgz",
+ "integrity": "sha512-KQHAZeVsk4UIT9XaR6cn4WpHZzimK6UBD1UomQKfQQFmTlUHaNBzeuov+TM4+kigLO0IJt4I5OOsshcCyA9gSA==",
+ "dev": true
+ },
+ "@types/q": {
+ "version": "0.0.32",
+ "resolved": "https://registry.npmjs.org/@types/q/-/q-0.0.32.tgz",
+ "integrity": "sha1-vShOV8hPEyXacCur/IKlMoGQwMU=",
+ "dev": true
+ },
+ "@types/selenium-webdriver": {
+ "version": "2.53.42",
+ "resolved": "https://registry.npmjs.org/@types/selenium-webdriver/-/selenium-webdriver-2.53.42.tgz",
+ "integrity": "sha1-dMt3+2BS7a/yqJhN2v2I1BnyXKw=",
+ "dev": true
+ },
+ "abbrev": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.0.tgz",
+ "integrity": "sha1-0FVMIlZjbi9W58LlrRg/hZQo2B8="
+ },
+ "abstract-leveldown": {
+ "version": "0.12.4",
+ "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-0.12.4.tgz",
+ "integrity": "sha1-KeGOYy5g5OIh1YECR4UqY9ey5BA=",
+ "dev": true,
+ "dependencies": {
+ "xtend": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-3.0.0.tgz",
+ "integrity": "sha1-XM50B7r2Qsunvs2laBEcST9ZZlo=",
+ "dev": true
+ }
+ }
+ },
+ "accepts": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.3.tgz",
+ "integrity": "sha1-w8p0NJOGSMPg2cHjKN1otiLChMo=",
+ "dev": true
+ },
+ "acorn": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-1.2.2.tgz",
+ "integrity": "sha1-yM4n3grMdtiW0rH6099YjZ6C8BQ="
+ },
+ "acorn-dynamic-import": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz",
+ "integrity": "sha1-x1K9IQvvZ5UBtsbLf8hPj0cVjMQ=",
+ "dev": true,
+ "dependencies": {
+ "acorn": {
+ "version": "4.0.13",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz",
+ "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=",
+ "dev": true
+ }
+ }
+ },
+ "adm-zip": {
+ "version": "0.4.7",
+ "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.7.tgz",
+ "integrity": "sha1-hgbCy/HEJs6MjsABdER/1Jtur8E=",
+ "dev": true
+ },
+ "after": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz",
+ "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=",
+ "dev": true
+ },
+ "agent-base": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-2.1.1.tgz",
+ "integrity": "sha1-1t4Q1a9hMtW9aSQn1G/FOFOQlMc=",
+ "dev": true,
+ "dependencies": {
+ "semver": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.0.3.tgz",
+ "integrity": "sha1-d0Zt5YnNXTyV8TiqeLxWmjy10no=",
+ "dev": true
+ }
+ }
+ },
+ "ajv": {
+ "version": "4.11.8",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz",
+ "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=",
+ "dev": true
+ },
+ "ajv-keywords": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.0.tgz",
+ "integrity": "sha1-opbhf3v658HOT34N5T0pyzIWLfA=",
+ "dev": true
+ },
+ "align-text": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz",
+ "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=",
+ "dev": true
+ },
+ "amdefine": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz",
+ "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU="
+ },
+ "angular2-local-storage": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/angular2-local-storage/-/angular2-local-storage-0.2.0.tgz",
+ "integrity": "sha1-u+QL6G0mNRhITzjGbbgvGJzhNDs="
+ },
+ "angular2-moment": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/angular2-moment/-/angular2-moment-1.4.0.tgz",
+ "integrity": "sha1-PVnB68KJNPz+m4iKtGHiYXJJh+g="
+ },
+ "angular2-template-loader": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/angular2-template-loader/-/angular2-template-loader-0.6.2.tgz",
+ "integrity": "sha1-wNROkP/w+sleiyPwQ6zaf9HFHXw=",
+ "dev": true,
+ "dependencies": {
+ "loader-utils": {
+ "version": "0.2.17",
+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz",
+ "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=",
+ "dev": true
+ }
+ }
+ },
+ "ansi-escapes": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-2.0.0.tgz",
+ "integrity": "sha1-W65SvkJIeN2Xg+iRDj/Cki6DyBs=",
+ "dev": true
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
+ },
+ "ansi-styles": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz",
+ "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==",
+ "dev": true
+ },
+ "anymatch": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.0.tgz",
+ "integrity": "sha1-o+Uvo5FoyCX/V7AkgSbOWo/5VQc=",
+ "dev": true
+ },
+ "aproba": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.1.2.tgz",
+ "integrity": "sha512-ZpYajIfO0j2cOFTO955KUMIKNmj6zhX8kVztMAxFsDaMwz+9Z9SV0uou2pC9HJqcfpffOsjnbrDMvkNy+9RXPw=="
+ },
+ "archiver": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/archiver/-/archiver-1.3.0.tgz",
+ "integrity": "sha1-TyGU1tj5nfP1MeaIHxTxXVX6ryI=",
+ "dev": true,
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
+ "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==",
+ "dev": true
+ },
+ "string_decoder": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
+ "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
+ "dev": true
+ }
+ }
+ },
+ "archiver-utils": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-1.3.0.tgz",
+ "integrity": "sha1-5QtMCccL89aA4y/xt5lOn52JUXQ=",
+ "dev": true,
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
+ "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==",
+ "dev": true
+ },
+ "string_decoder": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
+ "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
+ "dev": true
+ }
+ }
+ },
+ "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=",
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
+ },
+ "readable-stream": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
+ "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ=="
+ },
+ "string_decoder": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
+ "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ=="
+ }
+ }
+ },
+ "arr-diff": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz",
+ "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=",
+ "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-find-index": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz",
+ "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=",
+ "dev": true
+ },
+ "array-flatten": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
+ "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=",
+ "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
+ },
+ "array-union": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
+ "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
+ "dev": true
+ },
+ "array-uniq": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz",
+ "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=",
+ "dev": true
+ },
+ "array-unique": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz",
+ "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=",
+ "dev": true
+ },
+ "arraybuffer.slice": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.6.tgz",
+ "integrity": "sha1-8zshWfBTKj8xB6JywMz70a0peco=",
+ "dev": true
+ },
+ "arrify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
+ "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=",
+ "dev": true
+ },
+ "asn1": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz",
+ "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y="
+ },
+ "asn1.js": {
+ "version": "4.9.1",
+ "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.9.1.tgz",
+ "integrity": "sha1-SLokC0WpKA6UdImQull9IWYX/UA=",
+ "dev": true
+ },
+ "assert": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz",
+ "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=",
+ "dev": true
+ },
+ "assert-plus": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz",
+ "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=",
+ "dev": true
+ },
+ "ast-types": {
+ "version": "0.8.15",
+ "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.8.15.tgz",
+ "integrity": "sha1-ju8IJ/BN/w7IhXupJavj/qYZTlI="
+ },
+ "async": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/async/-/async-2.5.0.tgz",
+ "integrity": "sha512-e+lJAJeNWuPCNyxZKOBdaJGyLGHugXVQtrAwtuAe2vhxTYxFTKE73p8JuTmdH0qdQZtDvI4dhJwjZc5zsfIsYw==",
+ "dev": true
+ },
+ "async-each": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz",
+ "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=",
+ "dev": true
+ },
+ "async-foreach": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz",
+ "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=",
+ "dev": true
+ },
+ "asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
+ "dev": true
+ },
+ "autoprefixer": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-7.1.1.tgz",
+ "integrity": "sha1-l7yFTH0Ll5+NZIneVHoNF/swf20=",
+ "dev": true,
+ "dependencies": {
+ "chalk": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.0.1.tgz",
+ "integrity": "sha512-Mp+FXEI+FrwY/XYV45b2YD3E8i3HwnEAoFcM0qlZzq/RZ9RwWitt2Y/c7cqRAz70U7hfekqx6qNYthuKFO6K0g==",
+ "dev": true
+ },
+ "postcss": {
+ "version": "6.0.8",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.8.tgz",
+ "integrity": "sha512-G6WnRmdTt2jvJvY+aY+M0AO4YlbxE+slKPZb+jG2P2U9Tyxi3h1fYZ/DgiFU6DC6bv3XIEJoZt+f/kNh8BrWFw==",
+ "dev": true
+ }
+ }
+ },
+ "aws-sign2": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz",
+ "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=",
+ "dev": true
+ },
+ "aws4": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz",
+ "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=",
+ "dev": true
+ },
+ "babel-cli": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-cli/-/babel-cli-6.24.1.tgz",
+ "integrity": "sha1-IHzXBbumFImy6kG1MSNBz2rKIoM=",
+ "dev": true
+ },
+ "babel-code-frame": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.22.0.tgz",
+ "integrity": "sha1-AnYgvuVnqIwyVhV05/0IAdMxGOQ=",
+ "dev": true
+ },
+ "babel-core": {
+ "version": "6.25.0",
+ "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.25.0.tgz",
+ "integrity": "sha1-fdQrBGPHQunVKW3rPsZ6kyLa1yk=",
+ "dev": true
+ },
+ "babel-generator": {
+ "version": "6.25.0",
+ "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.25.0.tgz",
+ "integrity": "sha1-M6GvcNXyiQrrRlpKd5PB32qeqfw=",
+ "dev": true
+ },
+ "babel-helper-evaluate-path": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/babel-helper-evaluate-path/-/babel-helper-evaluate-path-0.1.0.tgz",
+ "integrity": "sha1-ldmMTqNhUEg9sufT7J4ZVKcmKcs=",
+ "dev": true
+ },
+ "babel-helper-flip-expressions": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/babel-helper-flip-expressions/-/babel-helper-flip-expressions-0.1.2.tgz",
+ "integrity": "sha1-d/ZlL53pxCQB2Ce9RuvSEJ4+8Yo=",
+ "dev": true
+ },
+ "babel-helper-is-nodes-equiv": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-is-nodes-equiv/-/babel-helper-is-nodes-equiv-0.0.1.tgz",
+ "integrity": "sha1-NOmzALFHnd2Y7HfqC76TQt/jloQ=",
+ "dev": true
+ },
+ "babel-helper-is-void-0": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-is-void-0/-/babel-helper-is-void-0-0.1.1.tgz",
+ "integrity": "sha1-cvIaOrugvvODf5F0/KcxrtmgKIg=",
+ "dev": true
+ },
+ "babel-helper-mark-eval-scopes": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-mark-eval-scopes/-/babel-helper-mark-eval-scopes-0.1.1.tgz",
+ "integrity": "sha1-RVQ0Xt+fJUlCe9IJjlMCU/ivKZI=",
+ "dev": true
+ },
+ "babel-helper-remove-or-void": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-remove-or-void/-/babel-helper-remove-or-void-0.1.1.tgz",
+ "integrity": "sha1-nX4YVtxvr8tBsoOkFnMNwYRPZtc=",
+ "dev": true
+ },
+ "babel-helper-to-multiple-sequence-expressions": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-to-multiple-sequence-expressions/-/babel-helper-to-multiple-sequence-expressions-0.1.1.tgz",
+ "integrity": "sha1-XxuDKznkrPlU6RN/AlE5XHEZazU=",
+ "dev": true
+ },
+ "babel-helpers": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz",
+ "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=",
+ "dev": true
+ },
+ "babel-messages": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
+ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
+ "dev": true
+ },
+ "babel-plugin-minify-builtins": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/babel-plugin-minify-builtins/-/babel-plugin-minify-builtins-0.1.3.tgz",
+ "integrity": "sha1-TyGn3LUfkaBOpx1H/w6OOwX+wCE=",
+ "dev": true
+ },
+ "babel-plugin-minify-constant-folding": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/babel-plugin-minify-constant-folding/-/babel-plugin-minify-constant-folding-0.1.3.tgz",
+ "integrity": "sha1-V70XKt+LjXStfJlhLrlQQU6+o8o=",
+ "dev": true
+ },
+ "babel-plugin-minify-dead-code-elimination": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/babel-plugin-minify-dead-code-elimination/-/babel-plugin-minify-dead-code-elimination-0.1.7.tgz",
+ "integrity": "sha1-d09TbzR7mDk6J7qnF4cpaIE8NCw=",
+ "dev": true
+ },
+ "babel-plugin-minify-flip-comparisons": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/babel-plugin-minify-flip-comparisons/-/babel-plugin-minify-flip-comparisons-0.1.2.tgz",
+ "integrity": "sha1-4oa0C3WZsY3+oZUHHkJ5Rlz8GIQ=",
+ "dev": true
+ },
+ "babel-plugin-minify-guarded-expressions": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/babel-plugin-minify-guarded-expressions/-/babel-plugin-minify-guarded-expressions-0.1.2.tgz",
+ "integrity": "sha1-38PUc7A2LZYF084KweIjKMYNEAc=",
+ "dev": true
+ },
+ "babel-plugin-minify-infinity": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/babel-plugin-minify-infinity/-/babel-plugin-minify-infinity-0.1.2.tgz",
+ "integrity": "sha1-Xxz2fd7cuhPIoA2oMlQt8AkaHNQ=",
+ "dev": true
+ },
+ "babel-plugin-minify-mangle-names": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/babel-plugin-minify-mangle-names/-/babel-plugin-minify-mangle-names-0.1.3.tgz",
+ "integrity": "sha1-v6JGYaZ5T7A4M1h+VYKLZUSeBv4=",
+ "dev": true
+ },
+ "babel-plugin-minify-numeric-literals": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-minify-numeric-literals/-/babel-plugin-minify-numeric-literals-0.1.1.tgz",
+ "integrity": "sha1-1LiwySX4dHFO4z7ksmZ4WD185/s=",
+ "dev": true
+ },
+ "babel-plugin-minify-replace": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/babel-plugin-minify-replace/-/babel-plugin-minify-replace-0.1.2.tgz",
+ "integrity": "sha1-uQuecatNOzYyVimpG+q+E7CxasE=",
+ "dev": true
+ },
+ "babel-plugin-minify-simplify": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/babel-plugin-minify-simplify/-/babel-plugin-minify-simplify-0.1.2.tgz",
+ "integrity": "sha1-qWjxZY/esvx1noH+Mx2Jgp3w9rk=",
+ "dev": true
+ },
+ "babel-plugin-minify-type-constructors": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/babel-plugin-minify-type-constructors/-/babel-plugin-minify-type-constructors-0.1.2.tgz",
+ "integrity": "sha1-21PFt2y44vzUXYYvFxBMeHYTN+4=",
+ "dev": true
+ },
+ "babel-plugin-transform-inline-consecutive-adds": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-inline-consecutive-adds/-/babel-plugin-transform-inline-consecutive-adds-0.1.2.tgz",
+ "integrity": "sha1-VELp8cGceKeJn4pN7m/UgfYQAfU=",
+ "dev": true
+ },
+ "babel-plugin-transform-member-expression-literals": {
+ "version": "6.8.4",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-member-expression-literals/-/babel-plugin-transform-member-expression-literals-6.8.4.tgz",
+ "integrity": "sha1-BWebxAWWuRKTQBlZqhYgqxsr5Dc=",
+ "dev": true
+ },
+ "babel-plugin-transform-merge-sibling-variables": {
+ "version": "6.8.5",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-merge-sibling-variables/-/babel-plugin-transform-merge-sibling-variables-6.8.5.tgz",
+ "integrity": "sha1-A6vfEHxhJBkT6yaN3t5tW8VBhiw=",
+ "dev": true
+ },
+ "babel-plugin-transform-minify-booleans": {
+ "version": "6.8.2",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-minify-booleans/-/babel-plugin-transform-minify-booleans-6.8.2.tgz",
+ "integrity": "sha1-hFFXn3BucCweGrJ1beXI6jac8Hw=",
+ "dev": true
+ },
+ "babel-plugin-transform-property-literals": {
+ "version": "6.8.4",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-property-literals/-/babel-plugin-transform-property-literals-6.8.4.tgz",
+ "integrity": "sha1-atMREQuAoZKlbvtd30/jym96Ydo=",
+ "dev": true
+ },
+ "babel-plugin-transform-regexp-constructors": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-regexp-constructors/-/babel-plugin-transform-regexp-constructors-0.1.1.tgz",
+ "integrity": "sha1-MSq3SHzIihxi7iXqG2CH6JuHeZw=",
+ "dev": true
+ },
+ "babel-plugin-transform-remove-console": {
+ "version": "6.8.4",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-remove-console/-/babel-plugin-transform-remove-console-6.8.4.tgz",
+ "integrity": "sha1-Qf3awZpymkw91+8pZOrAewlvmo8=",
+ "dev": true
+ },
+ "babel-plugin-transform-remove-debugger": {
+ "version": "6.8.4",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-remove-debugger/-/babel-plugin-transform-remove-debugger-6.8.4.tgz",
+ "integrity": "sha1-+FcEoIrapxtV13AFtblOm53yH24=",
+ "dev": true
+ },
+ "babel-plugin-transform-remove-undefined": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-remove-undefined/-/babel-plugin-transform-remove-undefined-0.1.2.tgz",
+ "integrity": "sha1-4ev1ERD2seBmXyg4Lvc/leUCNlI=",
+ "dev": true
+ },
+ "babel-plugin-transform-simplify-comparison-operators": {
+ "version": "6.8.4",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-simplify-comparison-operators/-/babel-plugin-transform-simplify-comparison-operators-6.8.4.tgz",
+ "integrity": "sha1-KqJKJi1mTIyz4SWjBseY16LeCNU=",
+ "dev": true
+ },
+ "babel-plugin-transform-undefined-to-void": {
+ "version": "6.8.2",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-undefined-to-void/-/babel-plugin-transform-undefined-to-void-6.8.2.tgz",
+ "integrity": "sha1-/isdKU6wXodSTrk3JN6m4sPWb6E=",
+ "dev": true
+ },
+ "babel-polyfill": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.23.0.tgz",
+ "integrity": "sha1-g2TKYt+Or7gwSZ9pkXdGbDsDSZ0=",
+ "dev": true
+ },
+ "babel-preset-babili": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/babel-preset-babili/-/babel-preset-babili-0.1.4.tgz",
+ "integrity": "sha1-rZ1mUQAvW8PwfKswB4EWf1RyS/I=",
+ "dev": true
+ },
+ "babel-register": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.24.1.tgz",
+ "integrity": "sha1-fhDhOi9xBlvfrVoXh7pFvKbe118=",
+ "dev": true
+ },
+ "babel-runtime": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.23.0.tgz",
+ "integrity": "sha1-CpSJ8UTecO+zzkMArM2zKeL8VDs=",
+ "dev": true
+ },
+ "babel-template": {
+ "version": "6.25.0",
+ "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.25.0.tgz",
+ "integrity": "sha1-ZlJBFmt8KqTGGdceGSlpVSsQwHE=",
+ "dev": true
+ },
+ "babel-traverse": {
+ "version": "6.25.0",
+ "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.25.0.tgz",
+ "integrity": "sha1-IldJfi/NGbie3BPEyROB+VEklvE=",
+ "dev": true
+ },
+ "babel-types": {
+ "version": "6.25.0",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.25.0.tgz",
+ "integrity": "sha1-cK+ySNVmDl0Y+BHZHIMDtUE0oY4=",
+ "dev": true
+ },
+ "babili": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/babili/-/babili-0.1.2.tgz",
+ "integrity": "sha1-dyMbOXcnI5SGOTbLiL97rydvl/U=",
+ "dev": true
+ },
+ "babylon": {
+ "version": "6.17.4",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.17.4.tgz",
+ "integrity": "sha512-kChlV+0SXkjE0vUn9OZ7pBMWRFd8uq3mZe8x1K6jhuNcAFAtEnjchFAqB+dYEXKyd+JpT6eppRR78QAr5gTsUw==",
+ "dev": true
+ },
+ "backo2": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz",
+ "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=",
+ "dev": true
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+ "dev": true
+ },
+ "base62": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/base62/-/base62-0.1.1.tgz",
+ "integrity": "sha1-e0F0wvlESXU7EcJlHAg9qEGnsIQ="
+ },
+ "base64-arraybuffer": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz",
+ "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=",
+ "dev": true
+ },
+ "base64-js": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.1.tgz",
+ "integrity": "sha512-dwVUVIXsBZXwTuwnXI9RK8sBmgq09NDHzyR9SAph9eqk76gKK2JSQmZARC2zRC81JC2QTtxD0ARU5qTS25gIGw==",
+ "dev": true
+ },
+ "base64id": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz",
+ "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=",
+ "dev": true
+ },
+ "bcrypt-pbkdf": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz",
+ "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=",
+ "optional": true
+ },
+ "better-assert": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz",
+ "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=",
+ "dev": true
+ },
+ "big.js": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.1.3.tgz",
+ "integrity": "sha1-TK2iGTZS6zyp7I5VyQFWacmAaXg=",
+ "dev": true
+ },
+ "binary-extensions": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.9.0.tgz",
+ "integrity": "sha1-ZlBsFs5vTWkopbPNajPKQelB43s=",
+ "dev": true
+ },
+ "bl": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/bl/-/bl-0.8.2.tgz",
+ "integrity": "sha1-yba8oI0bwuoA/Ir7Txpf0eHGbk4=",
+ "dev": true
+ },
+ "blob": {
+ "version": "0.0.4",
+ "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.4.tgz",
+ "integrity": "sha1-vPEwUspURj8w+fx+lbmkdjCpSSE=",
+ "dev": true
+ },
+ "block-stream": {
+ "version": "0.0.9",
+ "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz",
+ "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=",
+ "dev": true
+ },
+ "blocking-proxy": {
+ "version": "0.0.5",
+ "resolved": "https://registry.npmjs.org/blocking-proxy/-/blocking-proxy-0.0.5.tgz",
+ "integrity": "sha1-RikF4Nz76pcPQao3Ij3anAexkSs=",
+ "dev": true
+ },
+ "bluebird": {
+ "version": "3.5.0",
+ "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.0.tgz",
+ "integrity": "sha1-eRQg1/VR7qKJdFOop3ZT+WYG1nw=",
+ "dev": true
+ },
+ "bn.js": {
+ "version": "4.11.7",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.7.tgz",
+ "integrity": "sha512-LxFiV5mefv0ley0SzqkOPR1bC4EbpPx8LkOz5vMe/Yi15t5hzwgO/G+tc7wOtL4PZTYjwHu8JnEiSLumuSjSfA==",
+ "dev": true
+ },
+ "body": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/body/-/body-5.1.0.tgz",
+ "integrity": "sha1-5LoM5BCkaTYyM2dgnstOZVMSUGk=",
+ "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,
+ "dependencies": {
+ "bytes": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-2.4.0.tgz",
+ "integrity": "sha1-fZcZb51br39pNeJZhVSe3SpsIzk=",
+ "dev": true
+ },
+ "debug": {
+ "version": "2.6.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.7.tgz",
+ "integrity": "sha1-krrR9tBbu2u6Isyoi80OyJTChh4=",
+ "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
+ }
+ }
+ },
+ "boom": {
+ "version": "2.10.1",
+ "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz",
+ "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=",
+ "dev": true
+ },
+ "brace-expansion": {
+ "version": "1.1.8",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz",
+ "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=",
+ "dev": true
+ },
+ "braces": {
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz",
+ "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=",
+ "dev": true
+ },
+ "brorand": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz",
+ "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=",
+ "dev": true
+ },
+ "browser-resolve": {
+ "version": "1.11.2",
+ "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.2.tgz",
+ "integrity": "sha1-j/CbCixCFxihBRwmCzLkj0QpOM4=",
+ "dev": true,
+ "dependencies": {
+ "resolve": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz",
+ "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=",
+ "dev": true
+ }
+ }
+ },
+ "browserify-aes": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.0.6.tgz",
+ "integrity": "sha1-Xncl297x/Vkw1OurSFZ85FHEigo=",
+ "dev": true
+ },
+ "browserify-cipher": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.0.tgz",
+ "integrity": "sha1-mYgkSHS/XtTijalWZtzWasj8Njo=",
+ "dev": true
+ },
+ "browserify-des": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.0.tgz",
+ "integrity": "sha1-2qJ3cXRwki7S/hhZQRihdUOXId0=",
+ "dev": true
+ },
+ "browserify-fs": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/browserify-fs/-/browserify-fs-1.0.0.tgz",
+ "integrity": "sha1-8HWqinKdTRcW0GZiDjhvzBMRqW8=",
+ "dev": true
+ },
+ "browserify-rsa": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz",
+ "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=",
+ "dev": true
+ },
+ "browserify-sign": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz",
+ "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=",
+ "dev": true
+ },
+ "browserify-zlib": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz",
+ "integrity": "sha1-uzX4pRn2AOD6a4SFJByXnQFB+y0=",
+ "dev": true
+ },
+ "browserslist": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-2.2.2.tgz",
+ "integrity": "sha512-MejxGMNIeIqzgaMKVYfFTWHinrwZOnWMXteN9VlHinTd13/0aDmXY9uyRqNsCTnVxqRmrjQFcXI7cy0q9K1IYg==",
+ "dev": true
+ },
+ "buffer": {
+ "version": "4.9.1",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz",
+ "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=",
+ "dev": true,
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "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-es6": {
+ "version": "4.9.3",
+ "resolved": "https://registry.npmjs.org/buffer-es6/-/buffer-es6-4.9.3.tgz",
+ "integrity": "sha1-8mNHuC33b9N+GLy1KIxJcM/VxAQ=",
+ "dev": true
+ },
+ "buffer-xor": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz",
+ "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=",
+ "dev": true
+ },
+ "builtin-modules": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz",
+ "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=",
+ "dev": true
+ },
+ "builtin-status-codes": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz",
+ "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=",
+ "dev": true
+ },
+ "bytes": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-1.0.0.tgz",
+ "integrity": "sha1-NWnt6Lo0MV+rmcPpLLBMciDeH6g=",
+ "dev": true
+ },
+ "callsite": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz",
+ "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=",
+ "dev": true
+ },
+ "camel-case": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz",
+ "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=",
+ "dev": true
+ },
+ "camelcase": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
+ "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=",
+ "dev": true
+ },
+ "camelcase-keys": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz",
+ "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=",
+ "dev": true
+ },
+ "caniuse-lite": {
+ "version": "1.0.30000704",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000704.tgz",
+ "integrity": "sha1-rbbqARNFFWY2gtuTq6spHUwClGs=",
+ "dev": true
+ },
+ "caseless": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
+ "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
+ "dev": true
+ },
+ "center-align": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz",
+ "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
+ }
+ },
+ "chokidar": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz",
+ "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=",
+ "dev": true
+ },
+ "ci-info": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.0.0.tgz",
+ "integrity": "sha1-3FKF8rTiUYIWg2gcOBwziPRuxTQ=",
+ "dev": true
+ },
+ "cipher-base": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz",
+ "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==",
+ "dev": true
+ },
+ "clean-css": {
+ "version": "3.4.27",
+ "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-3.4.27.tgz",
+ "integrity": "sha1-re91sxwWD/pdcvTeZ5ZuJmDBolU=",
+ "dev": true,
+ "dependencies": {
+ "commander": {
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz",
+ "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=",
+ "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
+ }
+ }
+ },
+ "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
+ },
+ "cli-width": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.1.0.tgz",
+ "integrity": "sha1-sjTKIJsp72b8UY2bmNWEewDt8Ao=",
+ "dev": true
+ },
+ "cliui": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz",
+ "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=",
+ "dev": true
+ },
+ "clone": {
+ "version": "0.1.19",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-0.1.19.tgz",
+ "integrity": "sha1-YT+2hjmyaklKxTJT4Vsaa9iK2oU=",
+ "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
+ },
+ "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="
+ },
+ "color-convert": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.0.tgz",
+ "integrity": "sha1-Gsz5fdc5uYO/mU1W/sj5WFNkG3o=",
+ "dev": true
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
+ "dev": true
+ },
+ "colors": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz",
+ "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=",
+ "dev": true
+ },
+ "combine-lists": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/combine-lists/-/combine-lists-1.0.1.tgz",
+ "integrity": "sha1-RYwH4J4NkA/Ci3Cj/sLazR0st/Y=",
+ "dev": true
+ },
+ "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
+ },
+ "commander": {
+ "version": "2.11.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz",
+ "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==",
+ "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
+ },
+ "compress-commons": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-1.2.0.tgz",
+ "integrity": "sha1-WFhwku8g03y1i68AARLJJ4/3O58=",
+ "dev": true,
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
+ "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==",
+ "dev": true
+ },
+ "string_decoder": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
+ "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
+ "dev": true
+ }
+ }
+ },
+ "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,
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
+ "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==",
+ "dev": true
+ },
+ "string_decoder": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
+ "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
+ "dev": true
+ }
+ }
+ },
+ "connect": {
+ "version": "3.6.2",
+ "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.2.tgz",
+ "integrity": "sha1-aU6NIGgb/kkCgsiriGvpjwn0L+c=",
+ "dev": true,
+ "dependencies": {
+ "debug": {
+ "version": "2.6.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.7.tgz",
+ "integrity": "sha1-krrR9tBbu2u6Isyoi80OyJTChh4=",
+ "dev": true
+ }
+ }
+ },
+ "console-browserify": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz",
+ "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=",
+ "dev": true
+ },
+ "console-control-strings": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
+ "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4="
+ },
+ "constants-browserify": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz",
+ "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=",
+ "dev": true
+ },
+ "content-disposition": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz",
+ "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=",
+ "dev": true
+ },
+ "content-type": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.2.tgz",
+ "integrity": "sha1-t9ETrueo3Se9IRM8TcJSnfFyHu0=",
+ "dev": true
+ },
+ "continuable-cache": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/continuable-cache/-/continuable-cache-0.3.1.tgz",
+ "integrity": "sha1-vXJ6f67XfnH/OYWskzUakSczrQ8=",
+ "dev": true
+ },
+ "convert-source-map": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.0.tgz",
+ "integrity": "sha1-ms1whRxtXf3ZPZKC5e35SgP/RrU=",
+ "dev": true
+ },
+ "cookie": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz",
+ "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=",
+ "dev": true
+ },
+ "cookie-signature": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
+ "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=",
+ "dev": true
+ },
+ "cookiejar": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.1.tgz",
+ "integrity": "sha1-Qa1XsbVVlR7BcUEqgZQrHoIA00o=",
+ "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
+ },
+ "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="
+ },
+ "crc": {
+ "version": "3.4.4",
+ "resolved": "https://registry.npmjs.org/crc/-/crc-3.4.4.tgz",
+ "integrity": "sha1-naHpgOO9RPxck79as9ozeNheRms=",
+ "dev": true
+ },
+ "crc32-stream": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-2.0.0.tgz",
+ "integrity": "sha1-483TtN8xaN10494/u8t7KX/pCPQ=",
+ "dev": true,
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
+ "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==",
+ "dev": true
+ },
+ "string_decoder": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
+ "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
+ "dev": true
+ }
+ }
+ },
+ "create-ecdh": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.0.tgz",
+ "integrity": "sha1-iIxyNZbN92EvZJgjPuvXo1MBc30=",
+ "dev": true
+ },
+ "create-hash": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.1.3.tgz",
+ "integrity": "sha1-YGBCrIuSYnUPSDyt2rD1gZFy2P0=",
+ "dev": true
+ },
+ "create-hmac": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.6.tgz",
+ "integrity": "sha1-rLniIaThe9sHbpBlfEK5PjcmzwY=",
+ "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
+ },
+ "cryptiles": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz",
+ "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=",
+ "dev": true
+ },
+ "crypto-browserify": {
+ "version": "3.11.1",
+ "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.11.1.tgz",
+ "integrity": "sha512-Na7ZlwCOqoaW5RwUK1WpXws2kv8mNhWdTlzob0UXulk6G9BDbyiJaGTYBIX61Ozn9l1EPPJpICZb4DaOpT9NlQ==",
+ "dev": true
+ },
+ "currently-unhandled": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz",
+ "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=",
+ "dev": true
+ },
+ "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
+ },
+ "d3": {
+ "version": "3.5.17",
+ "resolved": "https://registry.npmjs.org/d3/-/d3-3.5.17.tgz",
+ "integrity": "sha1-vEZ0gAQ3iyGjYMn8fPUjF5B2L7g="
+ },
+ "dargs": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/dargs/-/dargs-5.1.0.tgz",
+ "integrity": "sha1-7H6lDHhWTNNsnV7Bj2Yyn63ieCk=",
+ "dev": true
+ },
+ "dashdash": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
+ "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
+ "dependencies": {
+ "assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
+ }
+ }
+ },
+ "date-now": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz",
+ "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=",
+ "dev": true
+ },
+ "debug": {
+ "version": "2.6.8",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz",
+ "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=",
+ "dev": true
+ },
+ "decamelize": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
+ "dev": true
+ },
+ "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,
+ "optional": true
+ },
+ "deferred-leveldown": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-0.2.0.tgz",
+ "integrity": "sha1-LO8fER4cV4cNi7uK8mUOWHzS9bQ=",
+ "dev": true
+ },
+ "del": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/del/-/del-2.2.0.tgz",
+ "integrity": "sha1-mlDwS/NzJeKDtPROmFM2wlJFa9U=",
+ "dev": true
+ },
+ "delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
+ "dev": true
+ },
+ "delegates": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
+ "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o="
+ },
+ "depd": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.0.tgz",
+ "integrity": "sha1-4b2Cxqq2ztlluXuIsX7T5SjKGMM=",
+ "dev": true
+ },
+ "des.js": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz",
+ "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=",
+ "dev": true
+ },
+ "destroy": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
+ "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=",
+ "dev": true
+ },
+ "detect-indent": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz",
+ "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=",
+ "dev": true
+ },
+ "dev-null": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/dev-null/-/dev-null-0.1.1.tgz",
+ "integrity": "sha1-WiBc48Ky73e2I41roXnrdMag6Bg=",
+ "dev": true
+ },
+ "di": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz",
+ "integrity": "sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw=",
+ "dev": true
+ },
+ "diff": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/diff/-/diff-3.3.0.tgz",
+ "integrity": "sha512-w0XZubFWn0Adlsapj9EAWX0FqWdO4tz8kc3RiYdWLh4k/V8PTb6i0SMgXt0vRM3zyKnT8tKO7mUlieRQHIjMNg==",
+ "dev": true
+ },
+ "diffie-hellman": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.2.tgz",
+ "integrity": "sha1-tYNXOScM/ias9jIJn97SoH8gnl4=",
+ "dev": true
+ },
+ "doctrine": {
+ "version": "0.7.2",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-0.7.2.tgz",
+ "integrity": "sha1-fLhgNZujvpDgQLJrcpzkv6ZUxSM=",
+ "dev": true,
+ "dependencies": {
+ "esutils": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-1.1.6.tgz",
+ "integrity": "sha1-wBzKqa5LiXxtDD4hCuUvPHqEQ3U=",
+ "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
+ },
+ "domain-browser": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.1.7.tgz",
+ "integrity": "sha1-hnqksJP6oF8d4IwG9NeyH9+GmLw=",
+ "dev": true
+ },
+ "ecc-jsbn": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz",
+ "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=",
+ "optional": 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
+ },
+ "electron-to-chromium": {
+ "version": "1.3.16",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.16.tgz",
+ "integrity": "sha1-0OAmc1dUdwkBrjAaIWZMukXZL30=",
+ "dev": true
+ },
+ "elliptic": {
+ "version": "6.4.0",
+ "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz",
+ "integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=",
+ "dev": true
+ },
+ "emojis-list": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz",
+ "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=",
+ "dev": true
+ },
+ "encodeurl": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.1.tgz",
+ "integrity": "sha1-eePVhlU0aQn+bw9Fpd5oEDspTSA=",
+ "dev": true
+ },
+ "end-of-stream": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.0.tgz",
+ "integrity": "sha1-epDYM+/abPpurA9JSduw+tOmMgY=",
+ "dev": true
+ },
+ "engine.io": {
+ "version": "1.8.3",
+ "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-1.8.3.tgz",
+ "integrity": "sha1-jef5eJXSDTm4X4ju7nd7K9QrE9Q=",
+ "dev": true,
+ "dependencies": {
+ "debug": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz",
+ "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=",
+ "dev": true
+ },
+ "ms": {
+ "version": "0.7.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz",
+ "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=",
+ "dev": true
+ },
+ "ws": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.2.tgz",
+ "integrity": "sha1-iiRPoFJAHgjJiGz0SoUYnh/UBn8=",
+ "dev": true
+ }
+ }
+ },
+ "engine.io-client": {
+ "version": "1.8.3",
+ "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-1.8.3.tgz",
+ "integrity": "sha1-F5jtk0USRkU9TG9jXXogH+lA1as=",
+ "dev": true,
+ "dependencies": {
+ "component-emitter": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
+ "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=",
+ "dev": true
+ },
+ "debug": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz",
+ "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=",
+ "dev": true
+ },
+ "ms": {
+ "version": "0.7.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz",
+ "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=",
+ "dev": true
+ },
+ "ws": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.2.tgz",
+ "integrity": "sha1-iiRPoFJAHgjJiGz0SoUYnh/UBn8=",
+ "dev": true
+ }
+ }
+ },
+ "engine.io-parser": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-1.3.2.tgz",
+ "integrity": "sha1-k3sHnwAH0Ik+xW1GyyILjLQ1Igo=",
+ "dev": true
+ },
+ "enhanced-resolve": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-3.3.0.tgz",
+ "integrity": "sha512-2qbxE7ek3YxPJ1ML6V+satHkzHpJQKWkRHmRx6mfAoW59yP8YH8BFplbegSP+u2hBd6B6KCOpvJQ3dZAP+hkpg==",
+ "dev": true
+ },
+ "ent": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz",
+ "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=",
+ "dev": true
+ },
+ "errno": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.4.tgz",
+ "integrity": "sha1-uJbiOp5ei6M4cfyZar02NfyaHH0=",
+ "dev": true
+ },
+ "error": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/error/-/error-7.0.2.tgz",
+ "integrity": "sha1-pfdf/02ZJhJt2sDqXcOOaJFTywI=",
+ "dev": true
+ },
+ "error-ex": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz",
+ "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=",
+ "dev": true
+ },
+ "es3ify": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/es3ify/-/es3ify-0.1.4.tgz",
+ "integrity": "sha1-rZ+l3xrjTz8x4SEbWBiy1RB439E="
+ },
+ "es5-ext": {
+ "version": "0.10.24",
+ "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.24.tgz",
+ "integrity": "sha1-pVh3yZJLwMjZvTwsvhdJWsFwmxQ=",
+ "dev": true
+ },
+ "es6-iterator": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.1.tgz",
+ "integrity": "sha1-jjGcnwRTv1ddN0lAplWSDlnKVRI=",
+ "dev": true
+ },
+ "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
+ },
+ "es6-set": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz",
+ "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=",
+ "dev": true
+ },
+ "es6-symbol": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz",
+ "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=",
+ "dev": true
+ },
+ "es6-templates": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/es6-templates/-/es6-templates-0.2.3.tgz",
+ "integrity": "sha1-XLmsn7He1usSOTQrgdeSu7QHjuQ=",
+ "dev": true,
+ "dependencies": {
+ "ast-types": {
+ "version": "0.9.6",
+ "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.9.6.tgz",
+ "integrity": "sha1-ECyenpAF0+fjgpvwxPok7oYu6bk=",
+ "dev": true
+ },
+ "esprima": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz",
+ "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=",
+ "dev": true
+ },
+ "recast": {
+ "version": "0.11.23",
+ "resolved": "https://registry.npmjs.org/recast/-/recast-0.11.23.tgz",
+ "integrity": "sha1-RR/TAEqx5N+bTktmN2sqIZEkYtM=",
+ "dev": true
+ }
+ }
+ },
+ "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
+ },
+ "escape-html": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
+ "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=",
+ "dev": true
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "dev": true
+ },
+ "escope": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz",
+ "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=",
+ "dev": true
+ },
+ "esmangle-evaluator": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/esmangle-evaluator/-/esmangle-evaluator-1.0.1.tgz",
+ "integrity": "sha1-Yg2GbvSGGzMR91dm1SqFcrs8YzY="
+ },
+ "esprima-fb": {
+ "version": "3001.1.0-dev-harmony-fb",
+ "resolved": "https://registry.npmjs.org/esprima-fb/-/esprima-fb-3001.0001.0000-dev-harmony-fb.tgz",
+ "integrity": "sha1-t303q8046gt3Qmu4vCkizmtCZBE="
+ },
+ "esrecurse": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.0.tgz",
+ "integrity": "sha1-+pVo2Y04I/mkHZHpAtyrnqblsWM=",
+ "dev": true
+ },
+ "estraverse": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
+ "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
+ "dev": true
+ },
+ "estree-walker": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.3.1.tgz",
+ "integrity": "sha1-5rGlHPcpJSTnI3wxLl/mZgwc4ao=",
+ "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.0",
+ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.0.tgz",
+ "integrity": "sha1-b2Ma7zNtbEY2K1F2QETOIWvjwFE=",
+ "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
+ },
+ "eventemitter3": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-1.2.0.tgz",
+ "integrity": "sha1-HIaZHYFq0eUEdQ5zh0Ik7PO+xQg=",
+ "dev": true
+ },
+ "events": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz",
+ "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=",
+ "dev": true
+ },
+ "evp_bytestokey": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.0.tgz",
+ "integrity": "sha1-SXtmrZ/vZc18CKYYCCS6FHa2blM=",
+ "dev": true
+ },
+ "exit": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz",
+ "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=",
+ "dev": true
+ },
+ "expand-braces": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/expand-braces/-/expand-braces-0.1.2.tgz",
+ "integrity": "sha1-SIsdHSRRyz06axks/AMPRMWFX+o=",
+ "dev": true,
+ "dependencies": {
+ "braces": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-0.1.5.tgz",
+ "integrity": "sha1-wIVxEIUpHYt1/ddOqw+FlygHEeY=",
+ "dev": 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=",
+ "dev": true
+ },
+ "is-number": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-0.1.1.tgz",
+ "integrity": "sha1-aaevEWlj1HIG7JvZtIoUIW8eOAY=",
+ "dev": true
+ },
+ "repeat-string": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-0.2.2.tgz",
+ "integrity": "sha1-x6jTI2BoNiBZp+RlH8aITosftK4=",
+ "dev": true
+ }
+ }
+ },
+ "expand-brackets": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz",
+ "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=",
+ "dev": true
+ },
+ "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
+ },
+ "express": {
+ "version": "4.15.3",
+ "resolved": "https://registry.npmjs.org/express/-/express-4.15.3.tgz",
+ "integrity": "sha1-urZdDwOqgMNYQIly/HAPkWlEtmI=",
+ "dev": true,
+ "dependencies": {
+ "debug": {
+ "version": "2.6.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.7.tgz",
+ "integrity": "sha1-krrR9tBbu2u6Isyoi80OyJTChh4=",
+ "dev": true
+ },
+ "path-to-regexp": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
+ "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=",
+ "dev": true
+ }
+ }
+ },
+ "extend": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz",
+ "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=",
+ "dev": true
+ },
+ "external-editor": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.0.4.tgz",
+ "integrity": "sha1-HtkZnanL/i7y96MbL96LDRI2iXI=",
+ "dev": true,
+ "dependencies": {
+ "iconv-lite": {
+ "version": "0.4.18",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.18.tgz",
+ "integrity": "sha512-sr1ZQph3UwHTR0XftSbK85OvBbxe/abLGzEnPENCQwmHf7sck8Oyu4ob3LgBxWWxRoM+QszeUyl7jbqapu2TqA==",
+ "dev": true
+ }
+ }
+ },
+ "extglob": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz",
+ "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=",
+ "dev": true
+ },
+ "extsprintf": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.0.2.tgz",
+ "integrity": "sha1-4QgOBljjALBilJkMxw4VAiNf1VA=",
+ "dev": true
+ },
+ "falafel": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/falafel/-/falafel-1.2.0.tgz",
+ "integrity": "sha1-wY0k71CRF0pJfzGM0ksCaiXN2rQ="
+ },
+ "fast-deep-equal": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz",
+ "integrity": "sha1-liVqO8l1WV6zbYLpkp0GDYk0Of8=",
+ "dev": true
+ },
+ "fastparse": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.1.tgz",
+ "integrity": "sha1-0eJkOzipTXWDtHkGDmxK/8lAcfg=",
+ "dev": true
+ },
+ "faye-websocket": {
+ "version": "0.10.0",
+ "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz",
+ "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=",
+ "dev": true
+ },
+ "figures": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz",
+ "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=",
+ "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=",
+ "dev": true
+ },
+ "fill-range": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz",
+ "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=",
+ "dev": true
+ },
+ "finalhandler": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.0.3.tgz",
+ "integrity": "sha1-70fneVDpmXgOhgIqVg4yF+DQzIk=",
+ "dev": true,
+ "dependencies": {
+ "debug": {
+ "version": "2.6.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.7.tgz",
+ "integrity": "sha1-krrR9tBbu2u6Isyoi80OyJTChh4=",
+ "dev": true
+ }
+ }
+ },
+ "find-up": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
+ "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
+ "dev": true
+ },
+ "font-awesome": {
+ "version": "4.7.0",
+ "resolved": "https://registry.npmjs.org/font-awesome/-/font-awesome-4.7.0.tgz",
+ "integrity": "sha1-j6jPBBGhoxr9B7BtKQK7n8gVoTM="
+ },
+ "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
+ },
+ "foreach": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz",
+ "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k="
+ },
+ "forever-agent": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
+ "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
+ "dev": true
+ },
+ "form-data": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz",
+ "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=",
+ "dev": true
+ },
+ "formidable": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.1.1.tgz",
+ "integrity": "sha1-lriIb3w8NQi5Mta9cMTTqI818ak=",
+ "dev": true
+ },
+ "forwarded": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.0.tgz",
+ "integrity": "sha1-Ge+YdMSuHCl7zweP3mOgm2aoQ2M=",
+ "dev": true
+ },
+ "fresh": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.0.tgz",
+ "integrity": "sha1-9HTKXmqSRtb9jglTz6m5yAWvp44=",
+ "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=",
+ "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
+ },
+ "fs-readdir-recursive": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.0.0.tgz",
+ "integrity": "sha1-jNF0XItPiinIyuw5JHaSG6GV9WA=",
+ "dev": true
+ },
+ "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.1.2",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.1.2.tgz",
+ "integrity": "sha512-Sn44E5wQW4bTHXvQmvSHwqbuiXtduD6Rrjm2ZtUEGbyrig+nUH3t/QD4M4/ZXViY556TBpRgZkHLDx3JxPwxiw==",
+ "dev": true,
+ "optional": true,
+ "dependencies": {
+ "balanced-match": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz",
+ "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg="
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
+ },
+ "minimist": {
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
+ "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0="
+ },
+ "nopt": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz",
+ "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00="
+ },
+ "npmlog": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.0.tgz",
+ "integrity": "sha512-ocolIkZYZt8UveuiDS0yAkkIjid1o7lPG8cYm05yNYzBn8ykQtaiPMEGp8fY9tKdDgm8okpdKzkvu1y9hUYugA=="
+ },
+ "readable-stream": {
+ "version": "2.2.9",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.9.tgz",
+ "integrity": "sha1-z3jsb0ptHrQ9JkiMrJfwQudLf8g="
+ },
+ "sshpk": {
+ "version": "1.13.0",
+ "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.0.tgz",
+ "integrity": "sha1-/yo+T9BEl1Vf7Zezmg/YL6+zozw=",
+ "dependencies": {
+ "assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
+ }
+ }
+ },
+ "string_decoder": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.1.tgz",
+ "integrity": "sha1-YuIA8DmVWmgQ2N8KM//A8BNmLZg="
+ },
+ "uuid": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.0.1.tgz",
+ "integrity": "sha1-ZUS7ot/ajBzxfmKaOjBeK7H+5sE="
+ }
+ }
+ },
+ "fstream": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz",
+ "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=",
+ "dev": true
+ },
+ "fstream-ignore": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/fstream-ignore/-/fstream-ignore-1.0.5.tgz",
+ "integrity": "sha1-nDHa40dnAY/h0kmyTa2mfQktoQU=",
+ "dev": true,
+ "optional": true
+ },
+ "fwd-stream": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/fwd-stream/-/fwd-stream-1.0.4.tgz",
+ "integrity": "sha1-7Sgcq+1G/uz5Ie4y3ExQs3KsfPo=",
+ "dev": true
+ },
+ "gauge": {
+ "version": "2.7.4",
+ "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
+ "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c="
+ },
+ "gaze": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.2.tgz",
+ "integrity": "sha1-hHIkZ3rbiHDWeSV+0ziP22HkAQU=",
+ "dev": true
+ },
+ "get-caller-file": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz",
+ "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=",
+ "dev": true
+ },
+ "get-stdin": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz",
+ "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=",
+ "dev": true
+ },
+ "getpass": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
+ "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
+ "dependencies": {
+ "assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
+ }
+ }
+ },
+ "glob": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz",
+ "integrity": "sha1-gFIR3wT6rxxjo2ADBs31reULLsg=",
+ "dev": true
+ },
+ "glob-base": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz",
+ "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=",
+ "dev": true
+ },
+ "glob-parent": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz",
+ "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=",
+ "dev": true
+ },
+ "globals": {
+ "version": "9.18.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz",
+ "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==",
+ "dev": true
+ },
+ "globby": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-4.1.0.tgz",
+ "integrity": "sha1-CA9UVJ7BuCpsYOYx/ILhIR2+lfg=",
+ "dev": true,
+ "dependencies": {
+ "glob": {
+ "version": "6.0.4",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz",
+ "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=",
+ "dev": true
+ }
+ }
+ },
+ "globule": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/globule/-/globule-1.2.0.tgz",
+ "integrity": "sha1-HcScaCLdnoovoAuiopUAboZkvQk=",
+ "dev": true
+ },
+ "graceful-fs": {
+ "version": "4.1.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
+ "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
+ "dev": true
+ },
+ "graceful-readlink": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz",
+ "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=",
+ "dev": true
+ },
+ "har-schema": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz",
+ "integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=",
+ "dev": true
+ },
+ "har-validator": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz",
+ "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=",
+ "dev": true
+ },
+ "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
+ },
+ "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
+ },
+ "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": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz",
+ "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=",
+ "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="
+ },
+ "hash-base": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-2.0.2.tgz",
+ "integrity": "sha1-ZuodhW206KVHDK32/OI65SRO8uE=",
+ "dev": true
+ },
+ "hash.js": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz",
+ "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==",
+ "dev": true
+ },
+ "hawk": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz",
+ "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=",
+ "dev": true
+ },
+ "he": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz",
+ "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=",
+ "dev": true
+ },
+ "hmac-drbg": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
+ "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=",
+ "dev": true
+ },
+ "hoek": {
+ "version": "2.16.3",
+ "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz",
+ "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=",
+ "dev": true
+ },
+ "home-or-tmp": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz",
+ "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=",
+ "dev": true
+ },
+ "hosted-git-info": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.5.0.tgz",
+ "integrity": "sha512-pNgbURSuab90KbTqvRPsseaTxOJCZBD0a7t+haSN33piP9cCM4l0CqdzAif2hUqm716UovKB2ROmiabGAKVXyg==",
+ "dev": true
+ },
+ "html-loader": {
+ "version": "0.4.5",
+ "resolved": "https://registry.npmjs.org/html-loader/-/html-loader-0.4.5.tgz",
+ "integrity": "sha1-X7zYfNY6XEmn/OL+VvQl4Fcpxow=",
+ "dev": true
+ },
+ "html-minifier": {
+ "version": "3.5.3",
+ "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.3.tgz",
+ "integrity": "sha512-iKRzQQDuTCsq0Ultbi/mfJJnR0D3AdZKTq966Gsp92xkmAPCV4Xi08qhJ0Dl3ZAWemSgJ7qZK+UsZc0gFqK6wg==",
+ "dev": true,
+ "dependencies": {
+ "clean-css": {
+ "version": "4.1.7",
+ "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.1.7.tgz",
+ "integrity": "sha1-ua6k+FZ5iJzz6ui0A0nsTr390DI=",
+ "dev": true
+ }
+ }
+ },
+ "http-errors": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.1.tgz",
+ "integrity": "sha1-X4uO2YrKVFZWv1cplzh/kEpyIlc=",
+ "dev": true
+ },
+ "http-proxy": {
+ "version": "1.16.2",
+ "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.16.2.tgz",
+ "integrity": "sha1-Bt/ykpUr9k2+hHH6nfcwZtTzd0I=",
+ "dev": true
+ },
+ "http-signature": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz",
+ "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=",
+ "dev": true
+ },
+ "https-browserify": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-0.0.1.tgz",
+ "integrity": "sha1-P5E2XKvmC3ftDruiS0VOPgnZWoI=",
+ "dev": true
+ },
+ "https-proxy-agent": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-1.0.0.tgz",
+ "integrity": "sha1-NffabEjOTdv6JkiRrFk+5f+GceY=",
+ "dev": true
+ },
+ "iconv-lite": {
+ "version": "0.4.15",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.15.tgz",
+ "integrity": "sha1-/iZaIYrGpXz+hUkn6dBMGYJe3es=",
+ "dev": true
+ },
+ "idb-wrapper": {
+ "version": "1.7.1",
+ "resolved": "https://registry.npmjs.org/idb-wrapper/-/idb-wrapper-1.7.1.tgz",
+ "integrity": "sha1-ajJnASLhc6hOzFz6lmj6LOsiGwQ=",
+ "dev": true
+ },
+ "ieee754": {
+ "version": "1.1.8",
+ "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.8.tgz",
+ "integrity": "sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q=",
+ "dev": true
+ },
+ "immediate": {
+ "version": "3.0.6",
+ "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz",
+ "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps="
+ },
+ "in-publish": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.0.tgz",
+ "integrity": "sha1-4g/146KvwmkDILbcVSaCqcf631E=",
+ "dev": true
+ },
+ "indent-string": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz",
+ "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=",
+ "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
+ },
+ "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
+ },
+ "inline-process-browser": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/inline-process-browser/-/inline-process-browser-1.0.0.tgz",
+ "integrity": "sha1-RqYbFT3TybFiSxoAYm7bT39BTyI="
+ },
+ "inquirer": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.2.1.tgz",
+ "integrity": "sha512-QgW3eiPN8gpj/K5vVpHADJJgrrF0ho/dZGylikGX7iqAdRgC9FVKYKWFLx6hZDBFcOLEoSqINYrVPeFAeG/PdA==",
+ "dev": true,
+ "dependencies": {
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.0.1.tgz",
+ "integrity": "sha512-Mp+FXEI+FrwY/XYV45b2YD3E8i3HwnEAoFcM0qlZzq/RZ9RwWitt2Y/c7cqRAz70U7hfekqx6qNYthuKFO6K0g==",
+ "dev": true
+ },
+ "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
+ },
+ "string-width": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "dev": true
+ }
+ }
+ },
+ "interpret": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.0.3.tgz",
+ "integrity": "sha1-y8NcYu7uc/Gat7EKgBURQBr8D5A=",
+ "dev": true
+ },
+ "invariant": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz",
+ "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=",
+ "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=",
+ "dev": true
+ },
+ "ionic": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/ionic/-/ionic-3.6.0.tgz",
+ "integrity": "sha512-SOVwp23IiSiAbEAHqxs636sEaurPxsDbgJZE86cNcqct1iBT9nHnuoBqnJMZJyTT9Pjqnc1Opzbr3/BNF2u3/w==",
+ "dev": true,
+ "dependencies": {
+ "chalk": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.0.1.tgz",
+ "integrity": "sha512-Mp+FXEI+FrwY/XYV45b2YD3E8i3HwnEAoFcM0qlZzq/RZ9RwWitt2Y/c7cqRAz70U7hfekqx6qNYthuKFO6K0g==",
+ "dev": true
+ }
+ }
+ },
+ "ionic-angular": {
+ "version": "3.5.3",
+ "resolved": "https://registry.npmjs.org/ionic-angular/-/ionic-angular-3.5.3.tgz",
+ "integrity": "sha512-bURfGz0GKsmSxGGDw8LXMkz/Yt572yBTF2VMh/JLJANfiicZzMoxdDkPt0H6erHM7QpHYajsG6AP0sTV4PvjYQ=="
+ },
+ "ionicons": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ionicons/-/ionicons-3.0.0.tgz",
+ "integrity": "sha1-QLja9P16MRUL0AIWD2ZJbiKpjDw="
+ },
+ "ipaddr.js": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.3.0.tgz",
+ "integrity": "sha1-HgOlL9rYOou7KyXL9JmLTP/NPew=",
+ "dev": true
+ },
+ "is": {
+ "version": "0.2.7",
+ "resolved": "https://registry.npmjs.org/is/-/is-0.2.7.tgz",
+ "integrity": "sha1-OzSixI81mXLzUEKEkZOucmS2NWI=",
+ "dev": true
+ },
+ "is-arrayish": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+ "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
+ "dev": true
+ },
+ "is-binary-path": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz",
+ "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=",
+ "dev": true
+ },
+ "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
+ },
+ "is-dotfile": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz",
+ "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=",
+ "dev": true
+ },
+ "is-equal-shallow": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz",
+ "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=",
+ "dev": true
+ },
+ "is-extendable": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
+ "dev": true
+ },
+ "is-extglob": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
+ "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
+ "dev": true
+ },
+ "is-finite": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
+ "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
+ "dev": true
+ },
+ "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="
+ },
+ "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
+ },
+ "is-module": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz",
+ "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=",
+ "dev": true
+ },
+ "is-number": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz",
+ "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=",
+ "dev": true
+ },
+ "is-object": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/is-object/-/is-object-0.1.2.tgz",
+ "integrity": "sha1-AO+8CIFsM8/ErIJR0TLhDcZQmNc=",
+ "dev": true
+ },
+ "is-path-cwd": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz",
+ "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=",
+ "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
+ },
+ "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
+ },
+ "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-typedarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
+ "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
+ "dev": true
+ },
+ "is-utf8": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
+ "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=",
+ "dev": true
+ },
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
+ },
+ "isbinaryfile": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.2.tgz",
+ "integrity": "sha1-Sj6XTsDLqQBNP8bN5yCeppNopiE=",
+ "dev": true
+ },
+ "isbuffer": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/isbuffer/-/isbuffer-0.0.0.tgz",
+ "integrity": "sha1-OMFG2d9Si4v5sHAcPUPPEt8/w5s=",
+ "dev": true
+ },
+ "isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA="
+ },
+ "isobject": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+ "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+ "dev": true,
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ }
+ }
+ },
+ "isstream": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
+ "dev": true
+ },
+ "jasmine": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-2.6.0.tgz",
+ "integrity": "sha1-ayLnCIPo5YnUVjRhU7TSBt2+IX8=",
+ "dev": true
+ },
+ "jasmine-core": {
+ "version": "2.6.4",
+ "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-2.6.4.tgz",
+ "integrity": "sha1-3skmzQqfoof7bbXHVfpIfnTOysU=",
+ "dev": true
+ },
+ "jasmine-spec-reporter": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/jasmine-spec-reporter/-/jasmine-spec-reporter-4.1.1.tgz",
+ "integrity": "sha1-Wm1Yq11hvqcwn7wnkjlRF1axtYg=",
+ "dev": true
+ },
+ "jasminewd2": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/jasminewd2/-/jasminewd2-2.1.0.tgz",
+ "integrity": "sha1-2llSddGuYx3nNqwKfH2Fyfc+9lI=",
+ "dev": true
+ },
+ "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
+ },
+ "js-tokens": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
+ "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
+ "dev": true
+ },
+ "jsbn": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
+ "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
+ "optional": true
+ },
+ "jschardet": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/jschardet/-/jschardet-1.5.0.tgz",
+ "integrity": "sha512-+Q8JsoEQbrdE+a/gg1F9XO92gcKXgpE5UACqr0sIubjDmBEkd+OOWPGzQeMrWSLxd73r4dHxBeRW7edHu5LmJQ==",
+ "dev": true
+ },
+ "jsesc": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz",
+ "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=",
+ "dev": true
+ },
+ "json-loader": {
+ "version": "0.5.4",
+ "resolved": "https://registry.npmjs.org/json-loader/-/json-loader-0.5.4.tgz",
+ "integrity": "sha1-i6oTZaYy9Yo8RtIBdfxgAsluN94=",
+ "dev": true
+ },
+ "json-schema": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
+ "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=",
+ "dev": true
+ },
+ "json-schema-traverse": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz",
+ "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=",
+ "dev": true
+ },
+ "json-stable-stringify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz",
+ "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=",
+ "dev": true
+ },
+ "json-stringify-safe": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
+ "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
+ "dev": true
+ },
+ "json3": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz",
+ "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=",
+ "dev": true
+ },
+ "json5": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz",
+ "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=",
+ "dev": true
+ },
+ "jsonfile": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz",
+ "integrity": "sha1-pezG9l9T9mLEQVx2daAzHQmS7GY=",
+ "dev": true
+ },
+ "jsonify": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz",
+ "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=",
+ "dev": true
+ },
+ "jsprim": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.0.tgz",
+ "integrity": "sha1-o7h+QCmNjDgFUtjMdiigu5WiKRg=",
+ "dev": true,
+ "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
+ }
+ }
+ },
+ "jstransform": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/jstransform/-/jstransform-3.0.0.tgz",
+ "integrity": "sha1-olkats7o2XvzvoMNv6IxO4fNZAs=",
+ "dependencies": {
+ "source-map": {
+ "version": "0.1.31",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.31.tgz",
+ "integrity": "sha1-n3BNDWnZ4TioG63267T94z0VHGE="
+ }
+ }
+ },
+ "karma": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/karma/-/karma-1.7.0.tgz",
+ "integrity": "sha1-b3oaQGRG+i4YfslTmGmPTO5HYmk=",
+ "dev": true,
+ "dependencies": {
+ "lodash": {
+ "version": "3.10.1",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz",
+ "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=",
+ "dev": true
+ }
+ }
+ },
+ "karma-chrome-launcher": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-2.2.0.tgz",
+ "integrity": "sha512-uf/ZVpAabDBPvdPdveyk1EPgbnloPvFFGgmRhYLTDH7gEB4nZdSBk8yTU47w1g/drLSx5uMOkjKk7IWKfWg/+w==",
+ "dev": true
+ },
+ "karma-jasmine": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/karma-jasmine/-/karma-jasmine-1.1.0.tgz",
+ "integrity": "sha1-IuTAa/mhguUpTR9wXjczgRuBCs8=",
+ "dev": true
+ },
+ "karma-jasmine-html-reporter": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/karma-jasmine-html-reporter/-/karma-jasmine-html-reporter-0.2.2.tgz",
+ "integrity": "sha1-SKjl7xiAdhfuK14zwRlMNbQ5Ukw=",
+ "dev": true
+ },
+ "karma-sourcemap-loader": {
+ "version": "0.3.7",
+ "resolved": "https://registry.npmjs.org/karma-sourcemap-loader/-/karma-sourcemap-loader-0.3.7.tgz",
+ "integrity": "sha1-kTIsd/jxPUb+0GKwQuEAnUxFBdg=",
+ "dev": true
+ },
+ "karma-webpack": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/karma-webpack/-/karma-webpack-2.0.4.tgz",
+ "integrity": "sha1-Pi1PSLqUqHjhxmu44a5hKJh6F1s=",
+ "dev": true,
+ "dependencies": {
+ "async": {
+ "version": "0.9.2",
+ "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz",
+ "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=",
+ "dev": true
+ },
+ "loader-utils": {
+ "version": "0.2.17",
+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz",
+ "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=",
+ "dev": true
+ },
+ "lodash": {
+ "version": "3.10.1",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz",
+ "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=",
+ "dev": true
+ },
+ "source-map": {
+ "version": "0.1.43",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz",
+ "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=",
+ "dev": true
+ }
+ }
+ },
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true
+ },
+ "lazy-cache": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz",
+ "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=",
+ "dev": true
+ },
+ "lazystream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz",
+ "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=",
+ "dev": true,
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
+ "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==",
+ "dev": true
+ },
+ "string_decoder": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
+ "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
+ "dev": true
+ }
+ }
+ },
+ "lcid": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz",
+ "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=",
+ "dev": true
+ },
+ "leek": {
+ "version": "0.0.24",
+ "resolved": "https://registry.npmjs.org/leek/-/leek-0.0.24.tgz",
+ "integrity": "sha1-5ADlfw5g2O8r1NBo3EKKVDRdvNo=",
+ "dev": true,
+ "dependencies": {
+ "lodash.assign": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-3.2.0.tgz",
+ "integrity": "sha1-POnwI0tLIiPilrj6CsH+6OvKZPo=",
+ "dev": true
+ }
+ }
+ },
+ "level-blobs": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/level-blobs/-/level-blobs-0.1.7.tgz",
+ "integrity": "sha1-mrm5e7mfHtv594o0M+Ie1WOGva8=",
+ "dev": true
+ },
+ "level-filesystem": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/level-filesystem/-/level-filesystem-1.2.0.tgz",
+ "integrity": "sha1-oArKmRnEpN+v3KaoEI0iWq3/Y7M=",
+ "dev": true,
+ "dependencies": {
+ "xtend": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.2.0.tgz",
+ "integrity": "sha1-7vax8ZjByN6vrYsXZaBNrUoBxak=",
+ "dev": true
+ }
+ }
+ },
+ "level-fix-range": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/level-fix-range/-/level-fix-range-1.0.2.tgz",
+ "integrity": "sha1-vxW5Fa422EcMgh6IPd95zRZCCCg=",
+ "dev": true
+ },
+ "level-hooks": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/level-hooks/-/level-hooks-4.5.0.tgz",
+ "integrity": "sha1-G5rmGSKTDzMF0aYfxNg8gQLA3ZM=",
+ "dev": true
+ },
+ "level-js": {
+ "version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/level-js/-/level-js-2.2.4.tgz",
+ "integrity": "sha1-vAVfQYBjXUSJtWHJSG+jcOjBFpc=",
+ "dev": true,
+ "dependencies": {
+ "object-keys": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz",
+ "integrity": "sha1-KKaq50KN0sOpLz2V8hM13SBOAzY=",
+ "dev": true
+ },
+ "xtend": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz",
+ "integrity": "sha1-bv7MKk2tjmlixJAbM3znuoe10os=",
+ "dev": true
+ }
+ }
+ },
+ "level-peek": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/level-peek/-/level-peek-1.0.6.tgz",
+ "integrity": "sha1-vsUccqgu5GTTNkNMfIdsP8vM538=",
+ "dev": true
+ },
+ "level-sublevel": {
+ "version": "5.2.3",
+ "resolved": "https://registry.npmjs.org/level-sublevel/-/level-sublevel-5.2.3.tgz",
+ "integrity": "sha1-dEwSxy0ucr543eO5tc2E1iGRQTo=",
+ "dev": true,
+ "dependencies": {
+ "level-fix-range": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/level-fix-range/-/level-fix-range-2.0.0.tgz",
+ "integrity": "sha1-xBfWIVlEIVGhnZojZ4aPFyTC1Ug=",
+ "dev": true
+ },
+ "object-keys": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.2.0.tgz",
+ "integrity": "sha1-zd7AKZiwkb5CvxA1rjLknxy26mc=",
+ "dev": true
+ },
+ "xtend": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.0.6.tgz",
+ "integrity": "sha1-XqZXptukRwacLlnFihE4ywxebO4=",
+ "dev": true
+ }
+ }
+ },
+ "levelup": {
+ "version": "0.18.6",
+ "resolved": "https://registry.npmjs.org/levelup/-/levelup-0.18.6.tgz",
+ "integrity": "sha1-5qAcsIlhbI7MApHCqb0/DETj5es=",
+ "dev": true,
+ "dependencies": {
+ "semver": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-2.3.2.tgz",
+ "integrity": "sha1-uYSPJdbPNjMwc+ye+IVtQvEjPlI=",
+ "dev": true
+ },
+ "xtend": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-3.0.0.tgz",
+ "integrity": "sha1-XM50B7r2Qsunvs2laBEcST9ZZlo=",
+ "dev": true
+ }
+ }
+ },
+ "lie": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/lie/-/lie-3.0.2.tgz",
+ "integrity": "sha1-/9oh17uibzd8rYZdNkmy/Izjn+o="
+ },
+ "livereload-js": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/livereload-js/-/livereload-js-2.2.2.tgz",
+ "integrity": "sha1-bIclfmSKtHW8JOoldFftzB+NC8I=",
+ "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=",
+ "dev": true
+ },
+ "loader-runner": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.3.0.tgz",
+ "integrity": "sha1-9IKuqC1UPgeSFwDVpG7yb9rGuKI=",
+ "dev": true
+ },
+ "loader-utils": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz",
+ "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=",
+ "dev": true
+ },
+ "localforage": {
+ "version": "1.4.3",
+ "resolved": "https://registry.npmjs.org/localforage/-/localforage-1.4.3.tgz",
+ "integrity": "sha1-ohJUPDnHx2Qk7dEr9HTEiarKSUw="
+ },
+ "localforage-cordovasqlitedriver": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/localforage-cordovasqlitedriver/-/localforage-cordovasqlitedriver-1.5.0.tgz",
+ "integrity": "sha1-+TR4nmrZo5usBf3RFogS9DhTV2I="
+ },
+ "lodash": {
+ "version": "4.17.4",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz",
+ "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4="
+ },
+ "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
+ },
+ "lodash._basecopy": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz",
+ "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=",
+ "dev": true
+ },
+ "lodash._bindcallback": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz",
+ "integrity": "sha1-5THCdkTPi1epnhftlbNcdIeJOS4=",
+ "dev": true
+ },
+ "lodash._createassigner": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/lodash._createassigner/-/lodash._createassigner-3.1.1.tgz",
+ "integrity": "sha1-g4pbri/aymOsIt7o4Z+k5taXCxE=",
+ "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=",
+ "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=",
+ "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": "4.5.0",
+ "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz",
+ "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=",
+ "dev": true
+ },
+ "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
+ },
+ "lodash.isarray": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz",
+ "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=",
+ "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
+ },
+ "lodash.keys": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz",
+ "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=",
+ "dev": true
+ },
+ "lodash.mergewith": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.0.tgz",
+ "integrity": "sha1-FQzwoWeR9ZA7iJHqsVRgknS96lU=",
+ "dev": true
+ },
+ "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.some": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/lodash.some/-/lodash.some-4.6.0.tgz",
+ "integrity": "sha1-G7nzFO9ri63tE7VJFpsqlF62jk0=",
+ "dev": true
+ },
+ "log4js": {
+ "version": "0.6.38",
+ "resolved": "https://registry.npmjs.org/log4js/-/log4js-0.6.38.tgz",
+ "integrity": "sha1-LElBFmldb7JUgJQ9P8hy5mKlIv0=",
+ "dev": true,
+ "dependencies": {
+ "semver": {
+ "version": "4.3.6",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz",
+ "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=",
+ "dev": true
+ }
+ }
+ },
+ "longest": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz",
+ "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=",
+ "dev": true
+ },
+ "loose-envify": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz",
+ "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=",
+ "dev": true
+ },
+ "loud-rejection": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz",
+ "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=",
+ "dev": true
+ },
+ "lower-case": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz",
+ "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=",
+ "dev": true
+ },
+ "lru-cache": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz",
+ "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew=="
+ },
+ "ltgt": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.2.0.tgz",
+ "integrity": "sha1-tlul/LNJopkkyOMz98alVi8uSEI=",
+ "dev": true
+ },
+ "macos-release": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/macos-release/-/macos-release-1.1.0.tgz",
+ "integrity": "sha512-mmLbumEYMi5nXReB9js3WGsB8UE6cDBWyIO62Z4DNx6GbRhDxHNjA1MlzSpJ2S2KM1wyiPRA0d19uHWYYvMHjA==",
+ "dev": true
+ },
+ "magic-string": {
+ "version": "0.19.1",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.19.1.tgz",
+ "integrity": "sha1-FNdoATyvLsj96hakmvgvw3fnUgE=",
+ "dev": true
+ },
+ "make-error": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.0.tgz",
+ "integrity": "sha1-Uq06M5zPEM5itAQLcI/nByRLi5Y=",
+ "dev": true
+ },
+ "map-obj": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
+ "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=",
+ "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
+ },
+ "memory-fs": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz",
+ "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=",
+ "dev": true,
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
+ "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==",
+ "dev": true
+ },
+ "string_decoder": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
+ "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
+ "dev": true
+ }
+ }
+ },
+ "meow": {
+ "version": "3.7.0",
+ "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz",
+ "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=",
+ "dev": true
+ },
+ "merge-descriptors": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
+ "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=",
+ "dev": true
+ },
+ "methods": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
+ "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=",
+ "dev": true
+ },
+ "micromatch": {
+ "version": "2.3.11",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz",
+ "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=",
+ "dev": true
+ },
+ "miller-rabin": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.0.tgz",
+ "integrity": "sha1-SmL7HUKTPAVYOYL0xxb2+55sbT0=",
+ "dev": true
+ },
+ "mime": {
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.3.4.tgz",
+ "integrity": "sha1-EV+eO2s9rylZmDyzjxSaLUDrXVM=",
+ "dev": true
+ },
+ "mime-db": {
+ "version": "1.27.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.27.0.tgz",
+ "integrity": "sha1-gg9XIpa70g7CXtVeW13oaeVDbrE=",
+ "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
+ },
+ "mimic-fn": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.1.0.tgz",
+ "integrity": "sha1-5md4PZLonb00KBi1IwudYqZyrRg=",
+ "dev": true
+ },
+ "minimalistic-assert": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz",
+ "integrity": "sha1-cCvi3aazf0g2vLP121ZkG2Sh09M=",
+ "dev": true
+ },
+ "minimalistic-crypto-utils": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz",
+ "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=",
+ "dev": true
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dev": true
+ },
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
+ },
+ "mkdirp": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
+ "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
+ "dependencies": {
+ "minimist": {
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
+ "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0="
+ }
+ }
+ },
+ "moment": {
+ "version": "2.18.1",
+ "resolved": "https://registry.npmjs.org/moment/-/moment-2.18.1.tgz",
+ "integrity": "sha1-w2GT3Tzhwu7SrbfIAtu8d6gbHA8="
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "mute-stream": {
+ "version": "0.0.7",
+ "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz",
+ "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=",
+ "dev": true
+ },
+ "nan": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/nan/-/nan-2.6.2.tgz",
+ "integrity": "sha1-5P805slf37WuzAjeZZb0NgWn20U=",
+ "dev": true
+ },
+ "ncname": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/ncname/-/ncname-1.0.0.tgz",
+ "integrity": "sha1-W1etGLHKCShk72Kwse2BlPODtxw=",
+ "dev": true
+ },
+ "ncp": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz",
+ "integrity": "sha1-GVoh1sRuNh0vsSgbo4uR6d9727M=",
+ "dev": true
+ },
+ "negotiator": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz",
+ "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=",
+ "dev": true
+ },
+ "no-case": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.1.tgz",
+ "integrity": "sha1-euuhxzpSGEJlVUt9wDuvcg34AIE=",
+ "dev": true
+ },
+ "node-gyp": {
+ "version": "3.6.2",
+ "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.6.2.tgz",
+ "integrity": "sha1-m/vlRWIoYoSDjnUOrAUpWFP6HGA=",
+ "dev": true
+ },
+ "node-libs-browser": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.0.0.tgz",
+ "integrity": "sha1-o6WeyXAkmFtG6Vg3lkb5bEthZkY=",
+ "dev": true,
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
+ "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==",
+ "dev": true,
+ "dependencies": {
+ "string_decoder": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
+ "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
+ "dev": true
+ }
+ }
+ }
+ }
+ },
+ "node-pre-gyp": {
+ "version": "0.6.36",
+ "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.6.36.tgz",
+ "integrity": "sha1-22BBEst04NR3VU6bUFsXq936t4Y=",
+ "dev": true,
+ "optional": true
+ },
+ "node-sass": {
+ "version": "4.5.3",
+ "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.5.3.tgz",
+ "integrity": "sha1-0JydEXlkEjnRuX/8YjH9zsU+FWg=",
+ "dev": true,
+ "dependencies": {
+ "cross-spawn": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz",
+ "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=",
+ "dev": true
+ }
+ }
+ },
+ "nopt": {
+ "version": "3.0.6",
+ "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz",
+ "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=",
+ "dev": true
+ },
+ "normalize-package-data": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz",
+ "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==",
+ "dev": true
+ },
+ "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
+ },
+ "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
+ },
+ "npmlog": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz",
+ "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==",
+ "dev": true
+ },
+ "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
+ },
+ "null-loader": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/null-loader/-/null-loader-0.1.1.tgz",
+ "integrity": "sha1-F76av80/8OFRL2/Er8sfUDk3j64=",
+ "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="
+ },
+ "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="
+ },
+ "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.11",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.11.tgz",
+ "integrity": "sha1-xUYBd4rVYPEULODgG8yotW0TQm0="
+ },
+ "object.omit": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz",
+ "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=",
+ "dev": true
+ },
+ "octal": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/octal/-/octal-1.0.0.tgz",
+ "integrity": "sha1-Y+cWKmjvvrniE1iNWOmJ0eXEUws=",
+ "dev": true
+ },
+ "on-finished": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
+ "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
+ "dev": true
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dev": true
+ },
+ "onetime": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
+ "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
+ "dev": true
+ },
+ "opn": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/opn/-/opn-4.0.2.tgz",
+ "integrity": "sha1-erwi5kTf9jsKltWrfyeQwPAavJU=",
+ "dev": true
+ },
+ "optimist": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz",
+ "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=",
+ "dev": true,
+ "dependencies": {
+ "minimist": {
+ "version": "0.0.10",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz",
+ "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=",
+ "dev": true
+ }
+ }
+ },
+ "options": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/options/-/options-0.0.6.tgz",
+ "integrity": "sha1-7CLTEoBrtT5zF3Pnza788cZDEo8=",
+ "dev": true
+ },
+ "os-browserify": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.2.1.tgz",
+ "integrity": "sha1-Y/xMzuXS13Y9Jrv4YBB45sLgBE8=",
+ "dev": true
+ },
+ "os-homedir": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
+ "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M="
+ },
+ "os-locale": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz",
+ "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=",
+ "dev": true
+ },
+ "os-name": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/os-name/-/os-name-2.0.1.tgz",
+ "integrity": "sha1-uaOGNhwXrjohc27wWZQFyajF3F4=",
+ "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="
+ },
+ "osenv": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.4.tgz",
+ "integrity": "sha1-Qv5tWVPfBsgGS+bxdsPQWqqjRkQ="
+ },
+ "output-file-sync": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/output-file-sync/-/output-file-sync-1.1.2.tgz",
+ "integrity": "sha1-0KM+7+YaIF+suQCS6CZZjVJFznY=",
+ "dev": true
+ },
+ "pako": {
+ "version": "0.2.9",
+ "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz",
+ "integrity": "sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=",
+ "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
+ },
+ "parse-asn1": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.0.tgz",
+ "integrity": "sha1-N8T5t+06tlx0gXtfJICTf7+XxxI=",
+ "dev": true
+ },
+ "parse-glob": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz",
+ "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=",
+ "dev": true
+ },
+ "parse-json": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
+ "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
+ "dev": true
+ },
+ "parsejson": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/parsejson/-/parsejson-0.0.3.tgz",
+ "integrity": "sha1-q343WfIJ7OmUN5c/fQ8fZK4OZKs=",
+ "dev": true
+ },
+ "parseqs": {
+ "version": "0.0.5",
+ "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz",
+ "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=",
+ "dev": true
+ },
+ "parseuri": {
+ "version": "0.0.5",
+ "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz",
+ "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=",
+ "dev": true
+ },
+ "parseurl": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.1.tgz",
+ "integrity": "sha1-yKuMkiO6NIiKpkopeyiFO+wY2lY=",
+ "dev": true
+ },
+ "path-browserify": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz",
+ "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=",
+ "dev": true
+ },
+ "path-exists": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
+ "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
+ "dev": true
+ },
+ "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-parse": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz",
+ "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=",
+ "dev": true
+ },
+ "path-to-regexp": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.7.0.tgz",
+ "integrity": "sha1-Wf3g9DW62suhA6hOnTvGTpa5k30="
+ },
+ "path-type": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
+ "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
+ "dev": true
+ },
+ "pbkdf2": {
+ "version": "3.0.12",
+ "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.12.tgz",
+ "integrity": "sha1-vjZ4XFBn6kjYBv+SMojF91C2uKI=",
+ "dev": true
+ },
+ "performance-now": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz",
+ "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=",
+ "dev": true
+ },
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "dev": true
+ },
+ "pinkie": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
+ "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
+ "dev": true
+ },
+ "pinkie-promise": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
+ "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "5.2.17",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.17.tgz",
+ "integrity": "sha1-z09Ze4ZNZcikkrLqvp1wbIecOIs=",
+ "dev": true,
+ "dependencies": {
+ "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
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "dev": true
+ }
+ }
+ },
+ "postcss-value-parser": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz",
+ "integrity": "sha1-h/OPnxj3dKSrTIojL1xc6IcqnRU=",
+ "dev": true
+ },
+ "preserve": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz",
+ "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=",
+ "dev": true
+ },
+ "private": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/private/-/private-0.1.7.tgz",
+ "integrity": "sha1-aM5eih7woju1cMwoU3tTMqumPvE="
+ },
+ "process": {
+ "version": "0.11.10",
+ "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
+ "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=",
+ "dev": true
+ },
+ "process-es6": {
+ "version": "0.11.6",
+ "resolved": "https://registry.npmjs.org/process-es6/-/process-es6-0.11.6.tgz",
+ "integrity": "sha1-xrs4n5qVH4K9TrFpYAEFvS/5x3g=",
+ "dev": true
+ },
+ "process-nextick-args": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz",
+ "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M="
+ },
+ "protractor": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/protractor/-/protractor-5.1.2.tgz",
+ "integrity": "sha1-myIXQXCaTGLVzVPGqt1UpxE36V8=",
+ "dev": true,
+ "dependencies": {
+ "@types/node": {
+ "version": "6.0.85",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.85.tgz",
+ "integrity": "sha512-6qLZpfQFO/g5Ns2e7RsW6brk0Q6Xzwiw7kVVU/XiQNOiJXSojhX76GP457PBYIsNMH2WfcGgcnZB4awFDHrwpA==",
+ "dev": true
+ },
+ "webdriver-manager": {
+ "version": "12.0.6",
+ "resolved": "https://registry.npmjs.org/webdriver-manager/-/webdriver-manager-12.0.6.tgz",
+ "integrity": "sha1-PfGkgZdwELTL+MnYXHpXeCjA5ws=",
+ "dev": true
+ }
+ }
+ },
+ "proxy-addr": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-1.1.4.tgz",
+ "integrity": "sha1-J+VF9pYKRKYn2bREZ+NcG2tM4vM=",
+ "dev": true
+ },
+ "proxy-middleware": {
+ "version": "0.15.0",
+ "resolved": "https://registry.npmjs.org/proxy-middleware/-/proxy-middleware-0.15.0.tgz",
+ "integrity": "sha1-o/3xvvtzD5UZZYcqwvYHTGFHelY=",
+ "dev": true
+ },
+ "prr": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/prr/-/prr-0.0.0.tgz",
+ "integrity": "sha1-GoS4WQgyVQFBGFPQCB7j+obikmo=",
+ "dev": true
+ },
+ "pseudomap": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
+ "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM="
+ },
+ "public-encrypt": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.0.tgz",
+ "integrity": "sha1-OfaZ86RlYN1eusvKaTyvfGXBjMY=",
+ "dev": true
+ },
+ "punycode": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
+ "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
+ "dev": true
+ },
+ "q": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/q/-/q-1.4.1.tgz",
+ "integrity": "sha1-VXBbzZPF82c1MMLCy8DCs63cKG4=",
+ "dev": true
+ },
+ "qjobs": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.1.5.tgz",
+ "integrity": "sha1-ZZ3p8s+NzCehSBJ28gU3cnI4LnM=",
+ "dev": true
+ },
+ "qs": {
+ "version": "6.4.0",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz",
+ "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=",
+ "dev": true
+ },
+ "querystring": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz",
+ "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=",
+ "dev": true
+ },
+ "querystring-es3": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz",
+ "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=",
+ "dev": true
+ },
+ "randomatic": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz",
+ "integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==",
+ "dev": true,
+ "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,
+ "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
+ }
+ }
+ },
+ "kind-of": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
+ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
+ "dev": true
+ }
+ }
+ },
+ "randombytes": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.5.tgz",
+ "integrity": "sha512-8T7Zn1AhMsQ/HI1SjcCfT/t4ii3eAqco3yOcSzS4mozsOz69lHLsoMXmF9nZgnFanYscnSlUSgs8uZyKzpE6kg==",
+ "dev": true
+ },
+ "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": "1.1.7",
+ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-1.1.7.tgz",
+ "integrity": "sha1-HQJ8K/oRasxmI7yo8AAWVyqH1CU=",
+ "dev": true
+ },
+ "rc": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.1.tgz",
+ "integrity": "sha1-LgPo5C7kULjLPc5lvhv4l04d/ZU=",
+ "dev": true,
+ "optional": 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
+ },
+ "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
+ },
+ "readable-stream": {
+ "version": "1.0.34",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
+ "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw="
+ },
+ "readdirp": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz",
+ "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=",
+ "dev": true,
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
+ "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==",
+ "dev": true
+ },
+ "string_decoder": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
+ "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
+ "dev": true
+ }
+ }
+ },
+ "recast": {
+ "version": "0.10.43",
+ "resolved": "https://registry.npmjs.org/recast/-/recast-0.10.43.tgz",
+ "integrity": "sha1-uV1Q9tYHYaX2JS4V2AZ4FoSRzn8=",
+ "dependencies": {
+ "esprima-fb": {
+ "version": "15001.1001.0-dev-harmony-fb",
+ "resolved": "https://registry.npmjs.org/esprima-fb/-/esprima-fb-15001.1001.0-dev-harmony-fb.tgz",
+ "integrity": "sha1-Q761fsJujPI3092LM+QlM1d/Jlk="
+ }
+ }
+ },
+ "redent": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz",
+ "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=",
+ "dev": true
+ },
+ "reflect-metadata": {
+ "version": "0.1.10",
+ "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.10.tgz",
+ "integrity": "sha1-tPg3BEFqytiZiMmxVjXUfgO5NEo="
+ },
+ "regenerator-runtime": {
+ "version": "0.10.5",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz",
+ "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=",
+ "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
+ },
+ "relateurl": {
+ "version": "0.2.7",
+ "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz",
+ "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=",
+ "dev": true
+ },
+ "remove-trailing-separator": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.0.2.tgz",
+ "integrity": "sha1-abBi2XhyetFNxrVrpKt3L9jXBRE=",
+ "dev": true
+ },
+ "repeat-element": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz",
+ "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=",
+ "dev": true
+ },
+ "repeat-string": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
+ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
+ "dev": true
+ },
+ "repeating": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
+ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
+ "dev": true
+ },
+ "request": {
+ "version": "2.81.0",
+ "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz",
+ "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=",
+ "dev": true
+ },
+ "require-directory": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
+ "dev": true
+ },
+ "require-main-filename": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz",
+ "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=",
+ "dev": true
+ },
+ "requires-port": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
+ "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=",
+ "dev": true
+ },
+ "resolve": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.3.3.tgz",
+ "integrity": "sha1-ZVkHw0aahoDcLeOidaj91paR8OU=",
+ "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
+ },
+ "right-align": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz",
+ "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=",
+ "dev": true
+ },
+ "rimraf": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.1.tgz",
+ "integrity": "sha1-wjOOxkPfeht/5cVPqG9XQopV8z0=",
+ "dev": true
+ },
+ "ripemd160": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.1.tgz",
+ "integrity": "sha1-D0WEKVxTo2KK9+bXmsohzlfRxuc=",
+ "dev": true
+ },
+ "rollup": {
+ "version": "0.42.0",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-0.42.0.tgz",
+ "integrity": "sha1-VueRs6Lz3XGQu7gKN1Z18v4PmyM=",
+ "dev": true
+ },
+ "rollup-plugin-commonjs": {
+ "version": "8.0.2",
+ "resolved": "https://registry.npmjs.org/rollup-plugin-commonjs/-/rollup-plugin-commonjs-8.0.2.tgz",
+ "integrity": "sha1-mLFYm/4ypsD2d5C2DAtJmXKv7Yk=",
+ "dev": true,
+ "dependencies": {
+ "acorn": {
+ "version": "4.0.13",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz",
+ "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=",
+ "dev": true
+ }
+ }
+ },
+ "rollup-plugin-json": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/rollup-plugin-json/-/rollup-plugin-json-2.3.0.tgz",
+ "integrity": "sha512-W45nZH7lmXgkSR/DkeyF4ks0YWFrMysdjUT049gTuAg+lwUEDBKI2+PztqW8UDSMlXCAeEONsLzpDDyBy9m+9A==",
+ "dev": true
+ },
+ "rollup-plugin-node-builtins": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/rollup-plugin-node-builtins/-/rollup-plugin-node-builtins-2.1.2.tgz",
+ "integrity": "sha1-JKH+1KQyV7a2Q3HYq8bOGrFFl+k=",
+ "dev": true
+ },
+ "rollup-plugin-node-globals": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/rollup-plugin-node-globals/-/rollup-plugin-node-globals-1.1.0.tgz",
+ "integrity": "sha1-fv2NYR0TJzeCnoBOn1H1CWKvRR8=",
+ "dev": true,
+ "dependencies": {
+ "acorn": {
+ "version": "4.0.13",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz",
+ "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=",
+ "dev": true
+ },
+ "estree-walker": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.2.1.tgz",
+ "integrity": "sha1-va/oCVOD2EFNXcLs9MkXO225QS4=",
+ "dev": true
+ },
+ "magic-string": {
+ "version": "0.16.0",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.16.0.tgz",
+ "integrity": "sha1-lw67DacZMwEoX7GqZQ85vdgetFo=",
+ "dev": true
+ },
+ "rollup-pluginutils": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-1.5.2.tgz",
+ "integrity": "sha1-HhVud4+UtyVb+hs9AXi+j1xVJAg=",
+ "dev": true
+ }
+ }
+ },
+ "rollup-plugin-node-resolve": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-3.0.0.tgz",
+ "integrity": "sha1-i4l8TDAw1QASd7BRSyXSygloPuA=",
+ "dev": true
+ },
+ "rollup-pluginutils": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.0.1.tgz",
+ "integrity": "sha1-fslbNXP2VDpGpkYb2afFRFJdD8A=",
+ "dev": true
+ },
+ "rsvp": {
+ "version": "3.6.2",
+ "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-3.6.2.tgz",
+ "integrity": "sha512-OfWGQTb9vnwRjwtA2QwpG2ICclHC3pgXZO5xt8H2EfgDquO0qVdSb5T88L4qJVAEugbS56pAuV4XZM58UX8ulw==",
+ "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
+ },
+ "rx-lite": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz",
+ "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=",
+ "dev": true
+ },
+ "rx-lite-aggregates": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz",
+ "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=",
+ "dev": true
+ },
+ "rxjs": {
+ "version": "5.4.0",
+ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.4.0.tgz",
+ "integrity": "sha1-p9sUqxV/nXqsalbmVeejhg05vyY="
+ },
+ "safe-buffer": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
+ "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg=="
+ },
+ "safe-json-parse": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/safe-json-parse/-/safe-json-parse-1.0.1.tgz",
+ "integrity": "sha1-PnZyPjjf3aE8mx0poeB//uSzC1c=",
+ "dev": true
+ },
+ "sass-graph": {
+ "version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.4.tgz",
+ "integrity": "sha1-E/vWPNHK8JCLn9k0dq1DpR0eC0k=",
+ "dev": true
+ },
+ "saucelabs": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/saucelabs/-/saucelabs-1.3.0.tgz",
+ "integrity": "sha1-0kDoAJ33+ocwbsRXimm6O1xCT+4=",
+ "dev": true
+ },
+ "sax": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
+ "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==",
+ "dev": true
+ },
+ "scss-tokenizer": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz",
+ "integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=",
+ "dev": true,
+ "dependencies": {
+ "source-map": {
+ "version": "0.4.4",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz",
+ "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=",
+ "dev": true
+ }
+ }
+ },
+ "selenium-webdriver": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-3.0.1.tgz",
+ "integrity": "sha1-ot6l2kqX9mcuiefKcnbO+jZRR6c=",
+ "dev": true,
+ "dependencies": {
+ "tmp": {
+ "version": "0.0.30",
+ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.30.tgz",
+ "integrity": "sha1-ckGdSovn1s51FI/YsyTlk6cRwu0=",
+ "dev": true
+ }
+ }
+ },
+ "semver": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz",
+ "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=",
+ "dev": true
+ },
+ "send": {
+ "version": "0.15.3",
+ "resolved": "https://registry.npmjs.org/send/-/send-0.15.3.tgz",
+ "integrity": "sha1-UBP5+ZAj31DRvZiSwZ4979HVMwk=",
+ "dev": true,
+ "dependencies": {
+ "debug": {
+ "version": "2.6.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.7.tgz",
+ "integrity": "sha1-krrR9tBbu2u6Isyoi80OyJTChh4=",
+ "dev": true
+ }
+ }
+ },
+ "serve-static": {
+ "version": "1.12.3",
+ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.12.3.tgz",
+ "integrity": "sha1-n0uhni8wMMVH+K+ZEHg47DjVseI=",
+ "dev": true
+ },
+ "serviceworker-cache-polyfill": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/serviceworker-cache-polyfill/-/serviceworker-cache-polyfill-4.0.0.tgz",
+ "integrity": "sha1-3hnuc77yGrPAdAo3sz22JGS6ves="
+ },
+ "set-blocking": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
+ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc="
+ },
+ "set-immediate-shim": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz",
+ "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=",
+ "dev": true
+ },
+ "setimmediate": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
+ "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=",
+ "dev": true
+ },
+ "setprototypeof": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz",
+ "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=",
+ "dev": true
+ },
+ "sha.js": {
+ "version": "2.4.8",
+ "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.8.tgz",
+ "integrity": "sha1-NwaMLEdra69ALRSknGf1l5IfY08=",
+ "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
+ },
+ "shebang-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
+ "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
+ "dev": true
+ },
+ "signal-exit": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
+ "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0="
+ },
+ "slash": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz",
+ "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=",
+ "dev": true
+ },
+ "slice-ansi": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz",
+ "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==",
+ "dev": true,
+ "dependencies": {
+ "is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+ "dev": true
+ }
+ }
+ },
+ "sntp": {
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz",
+ "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=",
+ "dev": true
+ },
+ "socket.io": {
+ "version": "1.7.3",
+ "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-1.7.3.tgz",
+ "integrity": "sha1-uK+cq6AJSeVo42nxMn6pvp6iRhs=",
+ "dev": true,
+ "dependencies": {
+ "debug": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz",
+ "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=",
+ "dev": true
+ },
+ "ms": {
+ "version": "0.7.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz",
+ "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=",
+ "dev": true
+ },
+ "object-assign": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz",
+ "integrity": "sha1-ejs9DpgGPUP0wD8uiubNUahog6A=",
+ "dev": true
+ }
+ }
+ },
+ "socket.io-adapter": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-0.5.0.tgz",
+ "integrity": "sha1-y21LuL7IHhB4uZZ3+c7QBGBmu4s=",
+ "dev": true,
+ "dependencies": {
+ "debug": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz",
+ "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=",
+ "dev": true
+ },
+ "ms": {
+ "version": "0.7.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz",
+ "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=",
+ "dev": true
+ }
+ }
+ },
+ "socket.io-client": {
+ "version": "1.7.3",
+ "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-1.7.3.tgz",
+ "integrity": "sha1-sw6GqhDV7zVGYBwJzeR2Xjgdo3c=",
+ "dev": true,
+ "dependencies": {
+ "component-emitter": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
+ "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=",
+ "dev": true
+ },
+ "debug": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz",
+ "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=",
+ "dev": true
+ },
+ "ms": {
+ "version": "0.7.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz",
+ "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=",
+ "dev": true
+ }
+ }
+ },
+ "socket.io-parser": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-2.3.1.tgz",
+ "integrity": "sha1-3VMgJRA85Clpcya+/WQAX8/ltKA=",
+ "dev": true,
+ "dependencies": {
+ "debug": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz",
+ "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=",
+ "dev": true
+ },
+ "ms": {
+ "version": "0.7.1",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz",
+ "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=",
+ "dev": true
+ }
+ }
+ },
+ "source-list-map": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.0.tgz",
+ "integrity": "sha512-I2UmuJSRr/T8jisiROLU3A3ltr+swpniSmNPI4Ml3ZCX6tVnDsuZzK7F2hl5jTqbZBWCEKlj5HRQiPExXLgE8A==",
+ "dev": true
+ },
+ "source-map": {
+ "version": "0.5.6",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz",
+ "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI="
+ },
+ "source-map-support": {
+ "version": "0.4.15",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.15.tgz",
+ "integrity": "sha1-AyAt9lwG0r2MfsI2KhkwVv7407E="
+ },
+ "spdx-correct": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz",
+ "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=",
+ "dev": true
+ },
+ "spdx-expression-parse": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz",
+ "integrity": "sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=",
+ "dev": true
+ },
+ "spdx-license-ids": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz",
+ "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=",
+ "dev": true
+ },
+ "ssh-config": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/ssh-config/-/ssh-config-1.0.1.tgz",
+ "integrity": "sha1-OHQhFtztfUX1NiyoavdxMMy+vIs=",
+ "dev": true
+ },
+ "sshpk": {
+ "version": "1.13.1",
+ "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz",
+ "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=",
+ "dev": true,
+ "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
+ }
+ }
+ },
+ "statuses": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz",
+ "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=",
+ "dev": true
+ },
+ "stdout-stream": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.0.tgz",
+ "integrity": "sha1-osfIWH5U2UJ+qe2zrD8s1SLfN4s=",
+ "dev": true,
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
+ "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==",
+ "dev": true
+ },
+ "string_decoder": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
+ "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
+ "dev": true
+ }
+ }
+ },
+ "stream-browserify": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz",
+ "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=",
+ "dev": true,
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
+ "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==",
+ "dev": true
+ },
+ "string_decoder": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
+ "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
+ "dev": true
+ }
+ }
+ },
+ "stream-http": {
+ "version": "2.7.2",
+ "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.7.2.tgz",
+ "integrity": "sha512-c0yTD2rbQzXtSsFSVhtpvY/vS6u066PcXOX9kBB3mSO76RiUQzL340uJkGBWnlBg4/HZzqiUXtaVA7wcRcJgEw==",
+ "dev": true,
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
+ "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==",
+ "dev": true
+ },
+ "string_decoder": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
+ "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
+ "dev": true
+ }
+ }
+ },
+ "string_decoder": {
+ "version": "0.10.31",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ="
+ },
+ "string-range": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/string-range/-/string-range-1.2.2.tgz",
+ "integrity": "sha1-qJPtNH5yKZvIO++78qaSqNI51d0=",
+ "dev": true
+ },
+ "string-template": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/string-template/-/string-template-0.2.1.tgz",
+ "integrity": "sha1-QpMuWYo1LQH8IuwzZ9nYTuxsmt0=",
+ "dev": true
+ },
+ "string-width": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M="
+ },
+ "stringstream": {
+ "version": "0.0.5",
+ "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz",
+ "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8="
+ },
+ "strip-bom": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
+ "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
+ "dev": true
+ },
+ "strip-indent": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz",
+ "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=",
+ "dev": true
+ },
+ "strip-json-comments": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
+ "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
+ "dev": true
+ },
+ "superagent": {
+ "version": "3.5.2",
+ "resolved": "https://registry.npmjs.org/superagent/-/superagent-3.5.2.tgz",
+ "integrity": "sha1-M2GjlxVnUEw1EGOr6q4PqiPb8/g=",
+ "dev": true,
+ "dependencies": {
+ "component-emitter": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
+ "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=",
+ "dev": true
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
+ "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==",
+ "dev": true
+ },
+ "string_decoder": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
+ "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
+ "dev": true
+ }
+ }
+ },
+ "supports-color": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.2.1.tgz",
+ "integrity": "sha512-qxzYsob3yv6U+xMzPrv170y8AwGP7i74g+pbixCfD6rgso8BscLT2qXIuz6TpOaiJZ3mFgT5O9lyT9nMU4LfaA==",
+ "dev": true
+ },
+ "sw-toolbox": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/sw-toolbox/-/sw-toolbox-3.6.0.tgz",
+ "integrity": "sha1-Jt8dHHA0hljk3qKIQxkUm3sxg7U="
+ },
+ "symbol-observable": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.4.tgz",
+ "integrity": "sha1-Kb9hXUqnEhvdiYsi1LP5vE4qoD0="
+ },
+ "tapable": {
+ "version": "0.2.7",
+ "resolved": "https://registry.npmjs.org/tapable/-/tapable-0.2.7.tgz",
+ "integrity": "sha1-5GwNqsuyuKmLmwzqD0BSEFgX7Vw=",
+ "dev": true
+ },
+ "tar": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz",
+ "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=",
+ "dev": true
+ },
+ "tar-pack": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/tar-pack/-/tar-pack-3.4.0.tgz",
+ "integrity": "sha1-I74tf2cagzk3bL2wuP4/3r8xeYQ=",
+ "dev": true,
+ "optional": true
+ },
+ "tar-stream": {
+ "version": "1.5.4",
+ "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.5.4.tgz",
+ "integrity": "sha1-NlSc8E7RrumyowwBQyUiONr5QBY=",
+ "dev": true,
+ "dependencies": {
+ "bl": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.1.tgz",
+ "integrity": "sha1-ysMo977kVzDUBLaSID/LWQ4XLV4=",
+ "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.3",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
+ "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==",
+ "dev": true
+ },
+ "string_decoder": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
+ "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
+ "dev": true
+ }
+ }
+ },
+ "through": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
+ "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU="
+ },
+ "through2": {
+ "version": "0.6.5",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz",
+ "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg="
+ },
+ "timers-browserify": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.2.tgz",
+ "integrity": "sha1-q0iDz1l9zVCvIRNJoA+8pWrIa4Y=",
+ "dev": true
+ },
+ "tiny-lr": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/tiny-lr/-/tiny-lr-1.0.4.tgz",
+ "integrity": "sha1-0Tvs83+LfpYzIPV0Mpjj6TTHMpo=",
+ "dev": true,
+ "dependencies": {
+ "debug": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz",
+ "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=",
+ "dev": true
+ },
+ "ms": {
+ "version": "0.7.1",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz",
+ "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=",
+ "dev": true
+ }
+ }
+ },
+ "tmp": {
+ "version": "0.0.31",
+ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.31.tgz",
+ "integrity": "sha1-jzirlDjhcxXl29izZX6L+yd65Kc=",
+ "dev": true
+ },
+ "to-array": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz",
+ "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=",
+ "dev": true
+ },
+ "to-arraybuffer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz",
+ "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=",
+ "dev": true
+ },
+ "to-fast-properties": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz",
+ "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=",
+ "dev": true
+ },
+ "tough-cookie": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz",
+ "integrity": "sha1-8IH3bkyFcg5sN6X6ztc3FQ2EByo=",
+ "dev": true
+ },
+ "trim-newlines": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz",
+ "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=",
+ "dev": true
+ },
+ "trim-right": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",
+ "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=",
+ "dev": true
+ },
+ "ts-loader": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-2.3.1.tgz",
+ "integrity": "sha512-qpHhht5OaOTlZe0scI5zjFrMIEmqt2qEyhpBiDJBA4nIV/iSF+jj1dGoDwFndL1D71dAr3P+gCmCShqolaQ+HQ==",
+ "dev": true,
+ "dependencies": {
+ "chalk": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.0.1.tgz",
+ "integrity": "sha512-Mp+FXEI+FrwY/XYV45b2YD3E8i3HwnEAoFcM0qlZzq/RZ9RwWitt2Y/c7cqRAz70U7hfekqx6qNYthuKFO6K0g==",
+ "dev": true
+ }
+ }
+ },
+ "ts-node": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-3.2.1.tgz",
+ "integrity": "sha1-lZXdhA0D5ivHkhTOWntR5V48T/w=",
+ "dev": true,
+ "dependencies": {
+ "chalk": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.0.1.tgz",
+ "integrity": "sha512-Mp+FXEI+FrwY/XYV45b2YD3E8i3HwnEAoFcM0qlZzq/RZ9RwWitt2Y/c7cqRAz70U7hfekqx6qNYthuKFO6K0g==",
+ "dev": true
+ },
+ "v8flags": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.0.0.tgz",
+ "integrity": "sha512-AGl+C+4qpeSu2g3JxCD/mGFFOs/vVZ3XREkD3ibQXEqr4Y4zgIrPWW124/IKJFHOIVFIoH8miWrLf0o84HYjwA==",
+ "dev": true
+ }
+ }
+ },
+ "tsconfig": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/tsconfig/-/tsconfig-6.0.0.tgz",
+ "integrity": "sha1-aw6DdgA9evGGT434+J3QBZ/80DI=",
+ "dev": true,
+ "dependencies": {
+ "strip-bom": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
+ "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
+ "dev": true
+ }
+ }
+ },
+ "tsickle": {
+ "version": "0.21.6",
+ "resolved": "https://registry.npmjs.org/tsickle/-/tsickle-0.21.6.tgz",
+ "integrity": "sha1-U7Abl5xcE/2xOvs/uVgXflmRWI0="
+ },
+ "tslib": {
+ "version": "1.7.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.7.1.tgz",
+ "integrity": "sha1-vIAEFkaRkjp5/oN4u+s9ogF1OOw=",
+ "dev": true
+ },
+ "tslint": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.5.0.tgz",
+ "integrity": "sha1-EOjas+MGH6YelELozuOYKs8gpqo=",
+ "dev": true
+ },
+ "tslint-eslint-rules": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/tslint-eslint-rules/-/tslint-eslint-rules-4.1.1.tgz",
+ "integrity": "sha1-fDDniC8mvCdr/5HSOEl1xp2viLo=",
+ "dev": true,
+ "dependencies": {
+ "tsutils": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-1.9.1.tgz",
+ "integrity": "sha1-ufmrROVa+WgYMdXyjQrur1x1DLA=",
+ "dev": true
+ }
+ }
+ },
+ "tsutils": {
+ "version": "2.8.0",
+ "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.8.0.tgz",
+ "integrity": "sha1-AWAXNymzvxOGKN0UoVN+AIUdgUo=",
+ "dev": true
+ },
+ "tty-browserify": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz",
+ "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=",
+ "dev": true
+ },
+ "tunnel-agent": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
+ "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
+ "dev": true
+ },
+ "tweetnacl": {
+ "version": "0.14.5",
+ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
+ "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
+ "optional": true
+ },
+ "type-is": {
+ "version": "1.6.15",
+ "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.15.tgz",
+ "integrity": "sha1-yrEPtJCeRByChC6v4a1kbIGARBA=",
+ "dev": true
+ },
+ "typedarray": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
+ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
+ "dev": true
+ },
+ "typedarray-to-buffer": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-1.0.4.tgz",
+ "integrity": "sha1-m7i6DoQfs/TPH+fCRenz+opf6Zw=",
+ "dev": true
+ },
+ "typescript": {
+ "version": "2.3.4",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.3.4.tgz",
+ "integrity": "sha1-PTgyGCgjHkNPKHUUlZw3qCtin0I=",
+ "dev": true
+ },
+ "uglify-js": {
+ "version": "3.0.26",
+ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.0.26.tgz",
+ "integrity": "sha512-+D/BjzuvT1oRMSkH0fuF3M/BCvDxDywmZasd1UTPPHsdsHZqJEAZSvrojgFlS7lrM3ZZWq5h7Bb5i96X1TbOJw==",
+ "dev": true
+ },
+ "uglify-to-browserify": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz",
+ "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=",
+ "dev": true,
+ "optional": true
+ },
+ "uglifyjs-webpack-plugin": {
+ "version": "0.4.6",
+ "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-0.4.6.tgz",
+ "integrity": "sha1-uVH0q7a9YX5m9j64kUmOORdj4wk=",
+ "dev": true,
+ "dependencies": {
+ "camelcase": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz",
+ "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=",
+ "dev": true
+ },
+ "cliui": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz",
+ "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=",
+ "dev": true
+ },
+ "uglify-js": {
+ "version": "2.8.29",
+ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz",
+ "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=",
+ "dev": true
+ },
+ "yargs": {
+ "version": "3.10.0",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz",
+ "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=",
+ "dev": true
+ }
+ }
+ },
+ "uid-number": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/uid-number/-/uid-number-0.0.6.tgz",
+ "integrity": "sha1-DqEOgDXo61uOREnwbaHHMGY7qoE=",
+ "dev": true,
+ "optional": true
+ },
+ "ultron": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz",
+ "integrity": "sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po=",
+ "dev": true
+ },
+ "universalify": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.1.tgz",
+ "integrity": "sha1-+nG63UQ3r0wUiEHjs7Fl+enlkLc=",
+ "dev": true
+ },
+ "unpipe": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
+ "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=",
+ "dev": true
+ },
+ "unreachable-branch-transform": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/unreachable-branch-transform/-/unreachable-branch-transform-0.3.0.tgz",
+ "integrity": "sha1-2ZzExudG0mSSiEW2EdtUsPNHTKo="
+ },
+ "upper-case": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz",
+ "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=",
+ "dev": true
+ },
+ "url": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz",
+ "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=",
+ "dev": true,
+ "dependencies": {
+ "punycode": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz",
+ "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=",
+ "dev": true
+ }
+ }
+ },
+ "user-home": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/user-home/-/user-home-1.1.1.tgz",
+ "integrity": "sha1-K1viOjK2Onyd640PKNSFcko98ZA=",
+ "dev": true
+ },
+ "useragent": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/useragent/-/useragent-2.2.1.tgz",
+ "integrity": "sha1-z1k+9PLRdYdei7ZY6pLhik/QbY4=",
+ "dev": true,
+ "dependencies": {
+ "lru-cache": {
+ "version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.2.4.tgz",
+ "integrity": "sha1-bGWGGb7PFAMdDQtZSxYELOTcBj0=",
+ "dev": true
+ }
+ }
+ },
+ "util": {
+ "version": "0.10.3",
+ "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz",
+ "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=",
+ "dev": true,
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
+ "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=",
+ "dev": true
+ }
+ }
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
+ },
+ "utils-merge": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.0.tgz",
+ "integrity": "sha1-ApT7kiu5N1FTVBxPcJYjHyh8ivg=",
+ "dev": true
+ },
+ "uuid": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz",
+ "integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g==",
+ "dev": true
+ },
+ "v8flags": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-2.1.1.tgz",
+ "integrity": "sha1-qrGh+jDUX4jdMhFIh1rALAtV5bQ=",
+ "dev": true
+ },
+ "validate-npm-package-license": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz",
+ "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=",
+ "dev": true
+ },
+ "vary": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.1.tgz",
+ "integrity": "sha1-Z1Neu2lMHVIldFeYRmUyP1h+jTc=",
+ "dev": true
+ },
+ "verror": {
+ "version": "1.3.6",
+ "resolved": "https://registry.npmjs.org/verror/-/verror-1.3.6.tgz",
+ "integrity": "sha1-z/XfEpRtKX0rqu+qJoniW+AcAFw=",
+ "dev": true
+ },
+ "vlq": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/vlq/-/vlq-0.2.2.tgz",
+ "integrity": "sha1-4xbVJXtAuGu0PLjV/qXX9U1rDKE=",
+ "dev": true
+ },
+ "vm-browserify": {
+ "version": "0.0.4",
+ "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz",
+ "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=",
+ "dev": true
+ },
+ "void-elements": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz",
+ "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=",
+ "dev": true
+ },
+ "walkdir": {
+ "version": "0.0.11",
+ "resolved": "https://registry.npmjs.org/walkdir/-/walkdir-0.0.11.tgz",
+ "integrity": "sha1-oW0CXrkxvQO1LzCMrtD0D86+lTI=",
+ "dev": true
+ },
+ "watchpack": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.4.0.tgz",
+ "integrity": "sha1-ShRyvLuVK9Cpu0A2gB+VTfs5+qw=",
+ "dev": true
+ },
+ "webdriver-js-extender": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/webdriver-js-extender/-/webdriver-js-extender-1.0.0.tgz",
+ "integrity": "sha1-gcUzqeM9W/tZe05j4s2yW1R3dRU=",
+ "dev": true,
+ "dependencies": {
+ "adm-zip": {
+ "version": "0.4.4",
+ "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.4.tgz",
+ "integrity": "sha1-ph7VrmkFw66lizplfSUDMJEFJzY=",
+ "dev": true
+ },
+ "sax": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/sax/-/sax-0.6.1.tgz",
+ "integrity": "sha1-VjsZx8HeiS4Jv8Ty/DDjwn8JUrk=",
+ "dev": true
+ },
+ "selenium-webdriver": {
+ "version": "2.53.3",
+ "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-2.53.3.tgz",
+ "integrity": "sha1-0p/1qVff8aG0ncRXdW5OS/vc4IU=",
+ "dev": true
+ },
+ "tmp": {
+ "version": "0.0.24",
+ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.24.tgz",
+ "integrity": "sha1-1qXhmNFKmDXMby18PZ4wJCjIzxI=",
+ "dev": true
+ },
+ "xml2js": {
+ "version": "0.4.4",
+ "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.4.tgz",
+ "integrity": "sha1-MREBAAMAiuGSQOuhdJe1fHKcVV0=",
+ "dev": true
+ }
+ }
+ },
+ "webpack": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/webpack/-/webpack-3.3.0.tgz",
+ "integrity": "sha1-zi+eB2Vmq6kfdIhxM6iD/X2hh7w=",
+ "dev": true,
+ "dependencies": {
+ "acorn": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.1.1.tgz",
+ "integrity": "sha512-vOk6uEMctu0vQrvuSqFdJyqj1Q0S5VTDL79qtjo+DhRr+1mmaD+tluFSCZqhvi/JUhXSzoZN2BhtstaPEeE8cw==",
+ "dev": true
+ },
+ "ajv": {
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.2.2.tgz",
+ "integrity": "sha1-R8aNaehvXZUxA7AHSpQw3GPaXjk=",
+ "dev": true
+ },
+ "camelcase": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz",
+ "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=",
+ "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
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "dev": true
+ },
+ "yargs": {
+ "version": "6.6.0",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-6.6.0.tgz",
+ "integrity": "sha1-eC7CHvQDNF+DCoCMo9UTr1YGUgg=",
+ "dev": true
+ },
+ "yargs-parser": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-4.2.1.tgz",
+ "integrity": "sha1-KczqwNxPA8bIe0qfIX3RjJ90hxw=",
+ "dev": true
+ }
+ }
+ },
+ "webpack-dev-middleware": {
+ "version": "1.11.0",
+ "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-1.11.0.tgz",
+ "integrity": "sha1-CWkdCXOjCtH4Ksc6EuIIfwpHVPk=",
+ "dev": true
+ },
+ "webpack-sources": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.0.1.tgz",
+ "integrity": "sha512-05tMxipUCwHqYaVS8xc7sYPTly8PzXayRCB4dTxLhWTqlKUiwH6ezmEe0OSreL1c30LAuA3Zqmc+uEBUGFJDjw==",
+ "dev": true
+ },
+ "websocket-driver": {
+ "version": "0.6.5",
+ "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.6.5.tgz",
+ "integrity": "sha1-XLJVbOuF9Dc8bYI4qmkchFThOjY=",
+ "dev": true
+ },
+ "websocket-extensions": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.1.tgz",
+ "integrity": "sha1-domUmcGEtu91Q3fC27DNbLVdKec=",
+ "dev": true
+ },
+ "which": {
+ "version": "1.2.14",
+ "resolved": "https://registry.npmjs.org/which/-/which-1.2.14.tgz",
+ "integrity": "sha1-mofEN48D6CfOyvGs31bHNsAcFOU="
+ },
+ "which-module": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz",
+ "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=",
+ "dev": true
+ },
+ "wide-align": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz",
+ "integrity": "sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w=="
+ },
+ "win-release": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/win-release/-/win-release-1.1.1.tgz",
+ "integrity": "sha1-X6VeAr58qTTt/BJmVjLoSbcuUgk=",
+ "dev": true
+ },
+ "window-size": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz",
+ "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=",
+ "dev": true
+ },
+ "wordwrap": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz",
+ "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=",
+ "dev": true
+ },
+ "wrap-ansi": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
+ "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=",
+ "dev": true
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true
+ },
+ "ws": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.1.tgz",
+ "integrity": "sha1-CC3bbGQehdS7RR8D1S8G6r2x8Bg=",
+ "dev": true
+ },
+ "wtf-8": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/wtf-8/-/wtf-8-1.0.0.tgz",
+ "integrity": "sha1-OS2LotDxw00e4tYw8V0O+2jhBIo=",
+ "dev": true
+ },
+ "xml-char-classes": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/xml-char-classes/-/xml-char-classes-1.0.0.tgz",
+ "integrity": "sha1-ZGV4SKIP/F31g6Qq2KJ3tFErvE0=",
+ "dev": true
+ },
+ "xml2js": {
+ "version": "0.4.17",
+ "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.17.tgz",
+ "integrity": "sha1-F76T6q4/O3eTWceVtBlwWogX6Gg=",
+ "dev": true
+ },
+ "xmlbuilder": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-4.2.1.tgz",
+ "integrity": "sha1-qlijBBoGb5DqoWwvU4n/GfP0YaU=",
+ "dev": true
+ },
+ "xmlhttprequest-ssl": {
+ "version": "1.5.3",
+ "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.3.tgz",
+ "integrity": "sha1-GFqIjATspGw+QHDZn3tJ3jUomS0=",
+ "dev": true
+ },
+ "xtend": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
+ "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68="
+ },
+ "y18n": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz",
+ "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=",
+ "dev": true
+ },
+ "yallist": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
+ "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI="
+ },
+ "yargs": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz",
+ "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=",
+ "dev": true,
+ "dependencies": {
+ "camelcase": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz",
+ "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=",
+ "dev": true
+ }
+ }
+ },
+ "yargs-parser": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz",
+ "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=",
+ "dev": true,
+ "dependencies": {
+ "camelcase": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz",
+ "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=",
+ "dev": true
+ }
+ }
+ },
+ "yeast": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz",
+ "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=",
+ "dev": true
+ },
+ "yn": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/yn/-/yn-2.0.0.tgz",
+ "integrity": "sha1-5a2ryKz0CPY4X8dklWhMiOavaJo=",
+ "dev": true
+ },
+ "zip-stream": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-1.2.0.tgz",
+ "integrity": "sha1-qLxF9MG0lpnGuQGYuqyqzbzUugQ=",
+ "dev": true,
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
+ "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==",
+ "dev": true
+ },
+ "string_decoder": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
+ "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
+ "dev": true
+ }
+ }
+ },
+ "zone.js": {
+ "version": "0.8.12",
+ "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.8.12.tgz",
+ "integrity": "sha1-hv9QU8mK7CkaC/S7rFAdaUoFz7s="
+ }
+ }
+}
diff --git a/package.json b/package.json
index e6c3a54b..1efd072b 100755
--- a/package.json
+++ b/package.json
@@ -18,47 +18,39 @@
"url": "https://github.com/intersective/practera-sdk-ionic"
},
"dependencies": {
- "@angular/common": "2.2.1",
- "@angular/compiler": "2.2.1",
- "@angular/compiler-cli": "2.2.1",
- "@angular/core": "2.2.1",
- "@angular/forms": "2.2.1",
- "@angular/http": "2.2.1",
- "@angular/platform-browser": "2.2.1",
- "@angular/platform-browser-dynamic": "2.2.1",
- "@angular/platform-server": "2.2.1",
- "@ionic/storage": "2.0.0",
+ "@angular/common": "4.1.3",
+ "@angular/compiler": "4.1.3",
+ "@angular/compiler-cli": "4.1.3",
+ "@angular/core": "4.1.3",
+ "@angular/forms": "4.1.3",
+ "@angular/http": "4.1.3",
+ "@angular/platform-browser": "4.1.3",
+ "@angular/platform-browser-dynamic": "4.1.3",
+ "@ionic/storage": "2.0.1",
"@ngx-translate/core": "^7.0.0",
"@ngx-translate/http-loader": "^0.1.0",
"angular2-local-storage": "^0.2.0",
- "angular2-moment": "^0.8.2",
+ "angular2-moment": "1.4.0",
"d3": "^3.5.17",
"font-awesome": "^4.7.0",
- "ionic-angular": "2.1.0",
+ "ionic-angular": "~3.5.*",
"ionicons": "3.0.0",
"lodash": "^4.13.1",
"moment": "^2.17.1",
- "rxjs": "5.0.0-beta.12",
- "sw-toolbox": "3.4.0",
- "zone.js": "0.6.26"
+ "rxjs": "5.4.0",
+ "sw-toolbox": "3.6.0",
+ "zone.js": "0.8.12"
},
"devDependencies": {
- "@ionic/app-scripts": "^1.3.7",
- "@ionic/cli-plugin-ionic-angular": "1.3.1",
+ "@ionic/app-scripts": "2.0.0",
+ "@ionic/cli-plugin-ionic-angular": "1.4.1",
"@types/jasmine": "^2.5.47",
"@types/node": "^7.0.13",
"angular2-template-loader": "^0.6.2",
"connect": "^3.6.0",
"del": "2.2.0",
- "gulp": "3.9.1",
- "gulp-sass": "^2.3.1",
- "gulp-watch": "^4.3.6",
"html-loader": "^0.4.5",
- "ionic-gulp-browserify-typescript": "^1.1.0",
- "ionic-gulp-fonts-copy": "^1.0.0",
- "ionic-gulp-html-copy": "^1.0.0",
- "ionic-gulp-sass-build": "^1.0.0",
- "ionic-gulp-scripts-copy": "^2.0.0",
+ "ionic": "3.7.0",
"jasmine": "^2.5.3",
"jasmine-spec-reporter": "^4.0.0",
"karma": "^1.6.0",
@@ -69,12 +61,8 @@
"karma-webpack": "^2.0.3",
"null-loader": "^0.1.1",
"protractor": "^5.1.1",
- "run-sequence": "^1.2.1",
"ts-loader": "^2.0.3",
"ts-node": "^3.0.2",
- "typescript": "^2.2.2"
- },
- "peerDependencies": {
- "@ionic/app-scripts": "^1.3.7"
+ "typescript": "2.3.4"
}
}
diff --git a/src/app/app.component.ts b/src/app/app.component.ts
index 1404e73e..9edca0d6 100644
--- a/src/app/app.component.ts
+++ b/src/app/app.component.ts
@@ -24,6 +24,7 @@ export class MyApp implements OnInit {
'resetpassword': ResetPasswordPage,
'secure': MagicLinkPage,
};
+
@ViewChild('appNav') nav: NavController;
constructor(
platform: Platform,
@@ -36,10 +37,12 @@ export class MyApp implements OnInit {
// ionic-native is removed, as we dont need to use cordova
});
}
+
ngOnInit() {
let category = [];
let page;
let navParams = {};
+
if (document.URL.indexOf("?") !== -1) {
let splitURL = document.URL.split("?");
let splitParams = splitURL[1].split("&");
@@ -56,6 +59,7 @@ export class MyApp implements OnInit {
navParams[singleURLParam[0]] = singleURLParam[1];
});
}
+
if (page) {
this.nav.setRoot(page, navParams);
} else {
@@ -66,4 +70,5 @@ export class MyApp implements OnInit {
}
}
}
+
}
diff --git a/src/app/app.module.ts b/src/app/app.module.ts
index b03f1a75..0d50fd6d 100644
--- a/src/app/app.module.ts
+++ b/src/app/app.module.ts
@@ -1,4 +1,5 @@
// libs
+import { BrowserModule } from '@angular/platform-browser';
import { NgModule, ErrorHandler, OnInit } from '@angular/core';
import { HashLocationStrategy, LocationStrategy } from '@angular/common';
import { FormsModule } from '@angular/forms';
@@ -7,33 +8,37 @@ import { CacheModule } from '../shared/cache/cache.module';
import { NotificationModule } from '../shared/notification/notification.module';
import { MyApp } from './app.component';
import { FilestackModule } from '../shared/filestack/filestack.module';
+import { UtilsModule } from '../shared/utils/utils.module';
import { TestModule } from '../shared/testModules/test.module';
import { HttpModule, Http } from '@angular/http';
import { TranslateModule, TranslateLoader } from '@ngx-translate/core';
import { TranslateHttpLoader } from "@ngx-translate/http-loader";
-import { i18nData } from '../../../app/i18n-en';
+import { i18nData } from './assets/i18n-en';
+import { TranslationModule } from '../shared/translation/translation.module';
+import { MomentModule } from 'angular2-moment';
+
// services
import { AchievementService } from '../services/achievement.service';
import { ActivityService } from '../services/activity.service';
import { AssessmentService } from '../services/assessment.service';
import { AuthService } from '../services/auth.service';
-import { SessionService } from '../services/session.service';
-import { RequestModule } from '../shared/request/request.module';
-import { ResponsiveService } from '../services/responsive.service';
+import { CharacterService } from '../services/character.service';
import { EventService } from '../services/event.service';
import { FilestackService } from '../shared/filestack/filestack.service';
+import { GameService } from '../services/game.service';
+import { GroupEmitterService } from '../components/questions/group-emitter.service';
import { LevelService } from '../services/level.service';
import { MilestoneService } from '../services/milestone.service';
import { NotificationService } from '../shared/notification/notification.service';
+import { RequestModule } from '../shared/request/request.module';
+import { ResponsiveService } from '../services/responsive.service';
+import { SessionService } from '../services/session.service';
import { SubmissionService } from '../services/submission.service';
import { TeamService } from '../services/team.service';
import { WindowRef } from '../shared/window';
-
// components
import { ModalComponent } from '../shared/notification/modal.component';
import { QuestionGroupComponent } from '../components/questionGroup/questionGroup.component';
-import { CurrentActivitiesComponent } from '../components/currentActivities/currentActivities';
-import { CurrentLevelsComponent } from '../components/currentLevels/currentLevels';
import { EventComponent } from '../components/event/event.component';
import { LevelComponent } from '../components/level/level';
import { LoadingMarkerComponent } from '../components/loadingMarker/loadingMarker';
@@ -41,14 +46,20 @@ import { LockerComponent } from '../components/locker/locker';
import { MemberComponent } from '../components/member/member';
import { PhotoComponent } from '../components/photo/photo';
import { TermContentComponent } from '../pages/term-condition/term-content.component';
-
+import { FileQuestionComponent } from '../components/questions/file';
+import { OneofQuestionComponent } from '../components/questions/oneof';
+import { TextQuestionComponent } from '../components/questions/text';
+import { MultipleQuestionComponent } from '../components/questions/multiple';
+import { FeedbackComponent } from '../components/questions/feedback';
// pages
import { AchievementsViewPage } from '../pages/achievements/view/achievements-view.page';
import { ActivitiesListPage } from '../pages/activities/list/list.page';
import { ActivityListPopupPage } from '../pages/activities/list/popup';
import { ActivitiesViewModalPage } from '../pages/activities/view/activities-view-modal.page';
import { ActivitiesViewPage } from '../pages/activities/view/activities-view.page';
+import { ActivitiesClassicListPage } from '../pages/activities-classic/list/activities-classic-list.page';
import { AssessmentsPage } from '../pages/assessments/assessments.page';
+import { AssessmentsGroupPage } from '../pages/assessments/group/assessments-group.page';
import { EventCheckinPage } from '../pages/events/checkin/event-checkin.page';
import { EventsComponent } from '../components/events/events.component';
import { EventsDownloadPage } from '../pages/events/download/events-download.page';
@@ -57,11 +68,14 @@ import { EventsPreviewPage } from '../pages/events/download/events-preview.page'
import { EventsViewPage } from '../pages/events/view/events-view.page';
import { ForgetPasswordPage } from '../pages/forget-password/forget-password';
import { GalleryPage } from '../pages/gallery/gallery';
-import { HomePage } from '../pages/home/home';
+import { LeaderboardSettingsPage } from '../pages/settings/leaderboard/leaderboard-settings.page';
import { LevelsListPage } from '../pages/levels/list/list';
import { LoginModalPage } from '../pages/login-modal/login-modal';
import { LoginPage } from '../pages/login/login';
import { MagicLinkPage } from '../pages/magic-link/magic-link';
+import { RankingBadgesPage } from '../pages/rankings/view/ranking-badges';
+import { RankingDetailsPage } from '../pages/rankings/view/ranking-details.page';
+import { RankingsPage } from '../pages/rankings/list/rankings.page';
import { RegisterPage } from '../pages/registration/register.page';
import { RegistrationModalPage } from '../pages/registration/modal';
import { RegistrationPage } from '../pages/registration/registration.page';
@@ -73,30 +87,30 @@ import { TabsPage } from '../pages/tabs/tabs.page';
import { TeamPage } from '../pages/team/team';
import { TermConditionPage } from '../pages/term-condition/term-condition.page';
import { TestPage } from '../pages/tabs/test.page';
-
+import { TutorialPage } from '../pages/settings/tutorial/tutorial.page';
// custom pipes
import { TimeAgoPipe } from '../pipes/timeago';
+import { UcfirstPipe } from '../pipes/ucfirst.pipe';
import { TruncatePipe } from '../pipes/truncate.pipe';
+import { EscapeHtmlPipe } from '../pipes/keep-html.pipe';
// configs
import { default as Configure } from '../configs/config';
-
// AoT requires an exported function for factories
export function HttpLoaderFactory(http: Http) {
- return new TranslateHttpLoader(http, "./assets/i18n-", ".json");
+ return new TranslateHttpLoader(http, "./assets/i18n-", ".json");
}
@NgModule({
declarations: [
AchievementsViewPage,
+ ActivitiesClassicListPage,
ActivitiesListPage,
- ActivityListPopupPage,
ActivitiesViewModalPage,
ActivitiesViewPage,
+ ActivityListPopupPage,
+ AssessmentsGroupPage,
AssessmentsPage,
- QuestionGroupComponent,
- CurrentActivitiesComponent,
- CurrentLevelsComponent,
EventCheckinPage,
EventComponent,
EventsComponent,
@@ -104,9 +118,11 @@ export function HttpLoaderFactory(http: Http) {
EventsListPage,
EventsPreviewPage,
EventsViewPage,
+ FeedbackComponent,
+ FileQuestionComponent,
ForgetPasswordPage,
GalleryPage,
- HomePage,
+ LeaderboardSettingsPage,
LevelComponent,
LevelsListPage,
LoadingMarkerComponent,
@@ -116,8 +132,14 @@ export function HttpLoaderFactory(http: Http) {
MagicLinkPage,
MemberComponent,
ModalComponent,
+ MultipleQuestionComponent,
MyApp,
+ OneofQuestionComponent,
PhotoComponent,
+ QuestionGroupComponent,
+ RankingBadgesPage,
+ RankingDetailsPage,
+ RankingsPage,
RegisterPage,
RegistrationModalPage,
RegistrationPage,
@@ -128,17 +150,23 @@ export function HttpLoaderFactory(http: Http) {
TabsPage,
TeamPage,
TestPage,
+ TutorialPage,
TermConditionPage,
TermContentComponent,
- TruncatePipe,
+ TextQuestionComponent,
TimeAgoPipe,
TruncatePipe,
+ UcfirstPipe,
+ EscapeHtmlPipe,
],
imports: [
- TestModule,
+ BrowserModule,
CacheModule,
- NotificationModule,
FormsModule,
+ MomentModule,
+ NotificationModule,
+ TestModule,
+ UtilsModule,
RequestModule.forRoot({
appKey: Configure.appKey,
prefixUrl: Configure.prefixUrl
@@ -153,6 +181,7 @@ export function HttpLoaderFactory(http: Http) {
deps: [Http]
}
}),
+ TranslationModule,
IonicModule.forRoot(MyApp, {}, {
links: [
{
@@ -187,14 +216,13 @@ export function HttpLoaderFactory(http: Http) {
],
entryComponents: [
AchievementsViewPage,
+ ActivitiesClassicListPage,
ActivitiesListPage,
- ActivityListPopupPage,
ActivitiesViewModalPage,
ActivitiesViewPage,
+ ActivityListPopupPage,
+ AssessmentsGroupPage,
AssessmentsPage,
- QuestionGroupComponent,
- CurrentActivitiesComponent,
- CurrentLevelsComponent,
EventCheckinPage,
EventComponent,
EventsComponent,
@@ -204,7 +232,7 @@ export function HttpLoaderFactory(http: Http) {
EventsViewPage,
ForgetPasswordPage,
GalleryPage,
- HomePage,
+ LeaderboardSettingsPage,
LevelComponent,
LevelsListPage,
LoadingMarkerComponent,
@@ -212,10 +240,11 @@ export function HttpLoaderFactory(http: Http) {
LoginModalPage,
LoginPage,
MagicLinkPage,
- MemberComponent,
ModalComponent,
MyApp,
- PhotoComponent,
+ RankingBadgesPage,
+ RankingDetailsPage,
+ RankingsPage,
RegisterPage,
RegistrationModalPage,
RegistrationPage,
@@ -226,6 +255,7 @@ export function HttpLoaderFactory(http: Http) {
TabsPage,
TestPage,
TermConditionPage,
+ TutorialPage,
TermContentComponent,
],
providers: [
@@ -233,8 +263,10 @@ export function HttpLoaderFactory(http: Http) {
{ provide: ActivityService, useClass: ActivityService },
{ provide: AssessmentService, useClass: AssessmentService },
{ provide: AuthService, useClass: AuthService },
+ { provide: CharacterService, useClass: CharacterService },
{ provide: ErrorHandler, useClass: IonicErrorHandler },
{ provide: EventService, useClass: EventService },
+ { provide: FilestackService, useClass: FilestackService },
{ provide: LevelService, useClass: LevelService },
{ provide: LocationStrategy , useClass: HashLocationStrategy },
{ provide: MilestoneService, useClass: MilestoneService },
@@ -243,8 +275,9 @@ export function HttpLoaderFactory(http: Http) {
{ provide: SessionService, useClass: SessionService },
{ provide: SubmissionService, useClass: SubmissionService },
{ provide: TeamService, useClass: TeamService },
- { provide: FilestackService, useClass: FilestackService },
WindowRef,
+ GroupEmitterService,
+ GameService,
// { provide: RequestOptions, useClass: CustomRequestOptions }
]
})
diff --git a/src/app/messages.ts b/src/app/messages.ts
index deea31c5..c21a0958 100644
--- a/src/app/messages.ts
+++ b/src/app/messages.ts
@@ -1,12 +1,11 @@
-export const loadingMessages = {
- Login: {
- "login": "Logging in ..."
- },
- LoadingSpinner: {
- "loading": "Loading ..."
- },
- Logout: {
- "logout": "See you next time"
+export const confirmMessages = {
+ Assessments: {
+ DiscardChanges: {
+ "discard": "Are you sure you want to discard all changes?"
+ },
+ SubmitConfirmation: {
+ "confirm": "Are you sure you want to submit this evidence?"
+ }
}
}
export const errMessages = {
@@ -18,15 +17,26 @@ export const errMessages = {
"empty": "Whoops... no achievement has been setup ..."
},
assessments: {
- "error": "Whoops... no assessment has been setup ..."
+ "empty": "Whoops... no assessment has been setup ..."
}
},
DirectLink: {
-
+ "mismatch": "Oops... The link to log you in appears to be broken. Please login by typing your email and password."
},
Events: {
+ bookEvents: {
+ "book": "Whoops, booking of an event has failed, please try again later."
+ },
+ cancelBooking: {
+ "cancel": "Whoops, we could not cancel your booking for this event, please try again later."
+ },
events: {
"empty": "Whoops... no event has been setup ..."
+ },
+ filter: {
+ "empty": "There are no scheduled events available. Please check back later.",
+ "noBookings": "You have no bookings. Tap on 'Browse' and book an event now to enhance your skills.",
+ "noAttended": "You have not attended any events yet."
}
},
General: {
@@ -38,12 +48,82 @@ export const errMessages = {
}
},
Login: {
-
+ "login": "Oops... Invalid email or password, please type it again."
+ },
+ PasswordValidation: {
+ mismatch: {
+ "mismatch": "You must enter matching passwords. Please Try again."
+ },
+ minlength: {
+ "minlength": "The minimum length allowed for a password is 8 characters."
+ }
},
Registration: {
-
+ mismatch: {
+ "mismatch": "The passwords you have entered do not match each other. Please enter the same password."
+ },
+ error: {
+ "error": "Sorry, something has gone wrong in processing your registration. Please try again or contact " // after the "contact", the content will be a variable, please check with Registration/model.ts file to view detail
+ },
+ invalidUser: {
+ "account": "Whoops... You do not have a account. To have one set up please contact " // after the "contact", the content will be a variable, please check with Registration/model.ts file to view detail
+ },
+ noPassword: {
+ "password": "Whoops... Sorry, we have been unable to register you. You must enter a valid password."
+ },
+ alreadyRegistered: {
+ "registered": "You have already registered. Please type the email address and password you registered with to login."
+ },
+ verifyFailed: {
+ "verifyfailed": "Sorry, verification failed, please resend your email and password."
+ }
},
ResetPassword: {
-
+ resetLoginFailed: {
+ "failed": "Whoops, we were unable to reset your password. Please try again."
+ },
+ invalidLink: {
+ "invalid": "Oops... The log in link is broken. You will be redirected to the login page. Try again with your username and password."
+ }
+ },
+ TermConditions: {
+ disagreement: {
+ "noAccepted": "You must agree to the Terms and Conditions."
+ },
+ verifyFailed: {
+ "verifyfailed": "Oops... Registration verification has failed. Please try again later."
+ }
+ }
+}
+export const generalVariableMessages = {
+ helpMail: {
+ "email": "help@support.com"
+ }
+}
+export const loadingMessages = {
+ Login: {
+ "login": "Logging in ..."
+ },
+ LoadingSpinner: {
+ "loading": "Loading ..."
+ },
+ Logout: {
+ "logout": "See you next time"
+ },
+ SendingEmail: {
+ "send": "Sending email to us ..."
+ },
+ SentMessage: { // the reason why this message has been divided into two parts, because of we have a variable (${this.email}) in the middle of message
+ "partOne": "We have sent an email to",
+ "partTwo": "with a link to log into the system - please check your inbox. If you haven't received an email in a few minutes please check the address you entered and your spam folder."
+ },
+ SuccessRegistration: {
+ "successRegistration": "Your password has been successfully set. You will now be logged in."
+ },
+ SuccessResetPassword: {
+ "successResetPassword": "Password has been changed successfully. Logging in now."
+ },
+ VerifyUser: {
+ "verify": "Verifying user identity ..."
}
}
\ No newline at end of file
diff --git a/src/assets/i18n-cn.json b/src/assets/i18n-cn.json
new file mode 100644
index 00000000..92874e15
--- /dev/null
+++ b/src/assets/i18n-cn.json
@@ -0,0 +1,11 @@
+{
+ "ACTIVITY": {
+ "PAGETITLE": "面板",
+ "POINTS": "分数",
+ "PROGRESS": "进程",
+ "SUBMISSION": "提交"
+ },
+ "ASSESSMENT": {
+ "PAGETITLE": "任务"
+ }
+}
diff --git a/src/assets/i18n-en.json b/src/assets/i18n-en.json
new file mode 100644
index 00000000..0fa353ca
--- /dev/null
+++ b/src/assets/i18n-en.json
@@ -0,0 +1,76 @@
+{
+ "ACTIVITY": {
+ "PAGETITLE": "Dashboard",
+ "POINTS": "Points",
+ "PROGRESS": "Progress",
+ "SUBMISSION": "Submission"
+ },
+ "ASSESSMENT": {
+ "PAGETITLE": "Assessment"
+ },
+ "EVENTS": {
+ "ATTENDED": "Attended",
+ "BOOK": "Book",
+ "BROWSE": "Browse",
+ "CANCELBOOKING": "Cancel Booking",
+ "CHECKIN": "Check-in",
+ "VIEWCHECKIN": "View Check-in",
+ "DOWNLOAD": "Download",
+ "MYBOOKINGS": "My Bookings",
+ "PAGETITLE": "Events"
+ },
+ "FORGOTPASSWORD": {
+ "INPUTTITLE": "Please enter your email address to reset password",
+ "PAGETITLE": "Forgot Password",
+ "SENDBUTTON": "Send to Mailbox"
+ },
+ "GENERAL": {
+ "DONE": "Done",
+ "DOWNLOAD": "Download",
+ "NEXT": "Next",
+ "PREV": "Prev",
+ "SKIP": "Skip",
+ "SUBMIT": "Submit"
+ },
+ "LOGIN": {
+ "HEADER": "Welcome to Practera",
+ "PAGETITLE": "Login",
+ "PASSWORDFORGOT": "Forget Your Password?"
+ },
+ "REGISTRATION": {
+ "HEADER": "Great - you are almost there! Just one more thing...",
+ "PAGETITLE": "Set Password"
+ },
+ "RANKING": {
+ "DETAIL": "Ranking Details",
+ "ME": "Me",
+ "MONTHLYPOINTS": "Points(Monthly)",
+ "PAGETITLE": "Ranking",
+ "TOTALPOINTS": "Points(Total)"
+ },
+ "RESETPASSWORD": {
+ "PAGETITLE": "Reset Password"
+ },
+ "SETTINGS": {
+ "HELP": "Email Help",
+ "LEADERBOARD": "Settings",
+ "LOGOUT": "Logout",
+ "PAGETITLE": "Account",
+ "PROFILE": "My Profile ",
+ "SUPPORT": "Support",
+ "SWITCHER": "Program Switcher",
+ "TUTORIAL": "Tutorial",
+ "TERMS": "Terms of Use"
+ },
+ "TABS": {
+ "ACCOUNT": "Account",
+ "DASHBOARD": "Dashboard",
+ "EVENTS": "Events",
+ "RANKING": "Ranking"
+ },
+ "TERMCONDITIONS": {
+ "PAGETITLE": "Terms and Conditions",
+ "AGREE": "I agree",
+ "NEXT": "Next"
+ }
+}
diff --git a/src/assets/i18n/i18n-en.json b/src/assets/i18n/i18n-en.json
deleted file mode 100644
index 6b695b18..00000000
--- a/src/assets/i18n/i18n-en.json
+++ /dev/null
@@ -1,6 +0,0 @@
-{
- "ACTIVITY": {
- "PROGRESS": "Progress",
- "POINTS": "Points"
- }
-}
\ No newline at end of file
diff --git a/src/assets/img/default/default-badge.png b/src/assets/img/default/default-badge.png
new file mode 100644
index 00000000..e2600934
Binary files /dev/null and b/src/assets/img/default/default-badge.png differ
diff --git a/src/assets/img/static/event-cover-1.jpg b/src/assets/img/static/event-cover-1.jpg
new file mode 100644
index 00000000..b29ee373
Binary files /dev/null and b/src/assets/img/static/event-cover-1.jpg differ
diff --git a/src/assets/img/static/event-cover-2.jpg b/src/assets/img/static/event-cover-2.jpg
new file mode 100644
index 00000000..b29ee373
Binary files /dev/null and b/src/assets/img/static/event-cover-2.jpg differ
diff --git a/src/assets/img/static/event-cover-3.jpg b/src/assets/img/static/event-cover-3.jpg
new file mode 100644
index 00000000..b29ee373
Binary files /dev/null and b/src/assets/img/static/event-cover-3.jpg differ
diff --git a/src/assets/img/static/event-cover-4.jpg b/src/assets/img/static/event-cover-4.jpg
new file mode 100644
index 00000000..b29ee373
Binary files /dev/null and b/src/assets/img/static/event-cover-4.jpg differ
diff --git a/src/assets/img/static/event-cover-5.jpg b/src/assets/img/static/event-cover-5.jpg
new file mode 100644
index 00000000..b29ee373
Binary files /dev/null and b/src/assets/img/static/event-cover-5.jpg differ
diff --git a/src/assets/img/tutorial/tutorial_tour01.png b/src/assets/img/tutorial/tutorial_tour01.png
new file mode 100644
index 00000000..b38c1ba0
Binary files /dev/null and b/src/assets/img/tutorial/tutorial_tour01.png differ
diff --git a/src/assets/img/tutorial/tutorial_tour02.png b/src/assets/img/tutorial/tutorial_tour02.png
new file mode 100644
index 00000000..c942c5dd
Binary files /dev/null and b/src/assets/img/tutorial/tutorial_tour02.png differ
diff --git a/src/assets/img/tutorial/tutorial_tour03.png b/src/assets/img/tutorial/tutorial_tour03.png
new file mode 100644
index 00000000..228dc765
Binary files /dev/null and b/src/assets/img/tutorial/tutorial_tour03.png differ
diff --git a/src/components/currentActivities/currentActivities.html b/src/components/currentActivities/currentActivities.html
deleted file mode 100644
index 45d82436..00000000
--- a/src/components/currentActivities/currentActivities.html
+++ /dev/null
@@ -1,8 +0,0 @@
-
Current Activity
-
-
- Name:{{activity.name}}
- Dead: {{activity.deadline}}
- Desc: {{activity.description}}
- End: {{activity.end}}
-
diff --git a/src/components/currentActivities/currentActivities.ts b/src/components/currentActivities/currentActivities.ts
deleted file mode 100644
index 984974dd..00000000
--- a/src/components/currentActivities/currentActivities.ts
+++ /dev/null
@@ -1,37 +0,0 @@
-import { Component } from '@angular/core';
-import { NavController } from 'ionic-angular';
-
-import * as _ from 'lodash';
-
-import { ActivityService } from '../../services/activity.service';
-
-@Component({
- selector: 'current-activities',
- templateUrl: 'currentActivities.html'
-})
-export class CurrentActivitiesComponent {
-
- public activities = [
- {
- id: 1,
- name: 'Activity 1 (Fake)',
- }
- ];
-
- constructor(
- public navCtrl: NavController,
- public activityService: ActivityService
- ) {}
-
- ionViewDidEnter() {
- this.activityService.getList()
- .toPromise()
- .then((result: any) => {
- this.activities = _.map(result.data, this.activityService.normalise);
- }, (err: any) => console.log(err))
- .catch((err) => {
- console.log('err', err)
- });
- }
-
-}
diff --git a/src/components/currentLevels/currentLevels.html b/src/components/currentLevels/currentLevels.html
deleted file mode 100644
index f38b0481..00000000
--- a/src/components/currentLevels/currentLevels.html
+++ /dev/null
@@ -1,5 +0,0 @@
-Current Level
-
-
-
-
diff --git a/src/components/currentLevels/currentLevels.ts b/src/components/currentLevels/currentLevels.ts
deleted file mode 100644
index 75cc8cfc..00000000
--- a/src/components/currentLevels/currentLevels.ts
+++ /dev/null
@@ -1,41 +0,0 @@
-import { Component } from '@angular/core';
-import { NavController } from 'ionic-angular';
-
-import * as _ from 'lodash';
-
-import { LevelService } from '../../services/level.service';
-
-@Component({
- selector: 'current-levels',
- templateUrl: 'currentLevels.html'
-})
-export class CurrentLevelsComponent {
-
- public levels = [
- {
- id: 1,
- name: 'Level 1 (Fake)',
- }
- ];
-
- constructor(
- public navCtrl: NavController,
- public levelService: LevelService,
- ) {}
-
- ionViewDidEnter() {
- this.levelService.getLevels()
- .then((result: any) => {
- const level: any = _.find(result.data, { is_locked: false });
-
- if (level) {
- this.levels.push(level);
- }
- })
- .catch((err) => {
- // @TODO handle error UI...
- console.log('err', err)
- });
- }
-
-}
diff --git a/src/components/loadingMarker/loadingMarker.html b/src/components/loadingMarker/loadingMarker.html
index 18c0d789..7a57a614 100644
--- a/src/components/loadingMarker/loadingMarker.html
+++ b/src/components/loadingMarker/loadingMarker.html
@@ -1,5 +1,5 @@
-
+
diff --git a/src/components/questionGroup/questionGroup.component.ts b/src/components/questionGroup/questionGroup.component.ts
index b4228306..54489343 100644
--- a/src/components/questionGroup/questionGroup.component.ts
+++ b/src/components/questionGroup/questionGroup.component.ts
@@ -1,12 +1,14 @@
import { Component, Input } from '@angular/core';
import { NavController } from 'ionic-angular';
+import { TruncatePipe } from '../../pipes/truncate.pipe';
+
@Component({
selector: 'questionGroup',
templateUrl: 'questionGroup.html',
})
export class QuestionGroupComponent {
- @Input() questionGroup: any = {};
+ @Input() group: any = {};
constructor(
public navCtrl: NavController
diff --git a/src/components/questionGroup/questionGroup.html b/src/components/questionGroup/questionGroup.html
index 37c33d1c..15a834a6 100644
--- a/src/components/questionGroup/questionGroup.html
+++ b/src/components/questionGroup/questionGroup.html
@@ -1,31 +1,34 @@
-
-
+
+ {{ group.name }}
+
-
- This is answer hardcoded and display in row.
-
-
-
- {{ questionGroup.answer.files.length + ' file uploaded.' }}
-
-
- {{ questionGroup.answer.files.length + ' files uploaded.' }}
-
-
-
-
- {{ questionGroup.answer.answers[0].context | truncate: 150 }}
-
+
-
+
+ Incomplete
+
+
+
+
diff --git a/src/components/questionGroup/questionGroup.scss b/src/components/questionGroup/questionGroup.scss
index 0f371f34..e5475b88 100644
--- a/src/components/questionGroup/questionGroup.scss
+++ b/src/components/questionGroup/questionGroup.scss
@@ -14,11 +14,39 @@ questionGroup {
font-size: 1.3em;
}
+ .description {
+ display: block;
+ text-overflow: ellipsis;
+ word-wrap: break-word;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ max-height: 3.6em;
+ line-height: 1.8em;
+ text-align: left;
+ padding-left: 10px;
+ }
+
button {
position: absolute;
top: -7px;
right: 0px;
}
+
+ .status {
+ text-align: right;
+ }
+
+ .completed {
+ color: $toolbar-active-color
+ }
+
+ .incomplete {
+ color: $toolbar-inactive-color
+ }
+
+ .feedback-available {
+ color: $soft-green
+ }
}
.answer {
diff --git a/src/components/questions/feedback.html b/src/components/questions/feedback.html
new file mode 100644
index 00000000..8d059a17
--- /dev/null
+++ b/src/components/questions/feedback.html
@@ -0,0 +1,52 @@
+
+
+
+ Comment:
+ {{ question.review_answer.comment }}
+
+
+
+
+
+
+
+
+
+
+
+ click to download
+
+
+ Comment:
+ {{ question.review_answer.comment }}
+
+
+
+
+
+
+
+ Comment:
+ {{ question.review_answer.comment }}
+
+
+
+
+
+
+
+
+
+ Reviewer Comment:
+ {{ question.review_answer.comment }}
+
+
+
+
+
+ Reviewer Answer:
+ {{ question.review_answer.answer }}
+
+
+
diff --git a/src/components/questions/feedback.ts b/src/components/questions/feedback.ts
new file mode 100644
index 00000000..4219abc5
--- /dev/null
+++ b/src/components/questions/feedback.ts
@@ -0,0 +1,13 @@
+import { Component, Input, OnInit } from '@angular/core';
+
+@Component({
+ selector: 'feedback',
+ templateUrl: './feedback.html'
+})
+export class FeedbackComponent implements OnInit {
+ @Input() question;
+
+ constructor() {}
+
+ ngOnInit() {}
+}
diff --git a/src/components/questions/file.html b/src/components/questions/file.html
new file mode 100644
index 00000000..31e9ff70
--- /dev/null
+++ b/src/components/questions/file.html
@@ -0,0 +1,19 @@
+
+
+
+ {{ uploaded.filename }}
+ Download
+
+
+
+ No uploaded files available.
+
+
+ Upload
+
+
+
+ Images, testimonials, documents, etc. Any evidence you think can appropriately show that you have applied what you have learnt in the real world.
+
+
+
diff --git a/src/components/questions/file.ts b/src/components/questions/file.ts
new file mode 100644
index 00000000..3965c07f
--- /dev/null
+++ b/src/components/questions/file.ts
@@ -0,0 +1,73 @@
+import { Component, Input, OnInit, NgZone } from '@angular/core';
+import { FormGroup } from '@angular/forms';
+import { FilestackService, FilestackUpload } from '../../shared/filestack/filestack.service';
+import { UtilsService } from '../../shared/utils/utils.service';
+import * as _ from 'lodash';
+
+@Component({
+ selector: 'file-question',
+ templateUrl: './file.html'
+})
+export class FileQuestionComponent implements OnInit {
+ @Input() question;
+ @Input() disabled;
+ @Input() form: FormGroup;
+
+ uploaded: any; // uploaded file (support single only)
+ // uploaded: Array = []; // uploaded files
+
+ constructor(
+ private fs: FilestackService,
+ private util: UtilsService,
+ private zone: NgZone
+ ) {}
+
+ /**
+ * @description at file type question initiation,
+ * uploaded files is retrieved from cached form (if available)
+ */
+ ngOnInit() {
+ this.uploaded = _.isEmpty(this.form.controls.answer.value) ? false : this.form.controls.answer.value;
+ }
+
+ /**
+ * @description Upload file and trigger ngzone to update this.uploaded variable
+ */
+ upload(event) {
+ let self = this;
+
+ this.fs.pick({
+ maxFiles: 1,
+ storeTo: {
+ location: 's3'
+ }
+ }).then((uploaded: FilestackUpload) => {
+ self.zone.run(() => {
+ if (uploaded.filesUploaded.length > 0) {
+ let file = uploaded.filesUploaded.shift();
+ file.icon = self.util.getIcon(file.mimetype);
+
+ // post_assessment_submission API requirement "key"
+ file.key = file.handle;
+
+ self.uploaded = file;
+ this.form.controls.answer.setValue(self.uploaded);
+ }
+
+ if (uploaded.filesFailed.length > 0) {
+ console.log(uploaded.filesFailed.length, ' file(s) not uploaded.');
+ }
+ });
+ });
+ }
+
+ private injectIcon = (files: any[]) => {
+ let result = [];
+ files.forEach((file, index) => {
+ file.icon = this.util.getIcon(file.mimetype);
+ result.push(file);
+ });
+
+ return result;
+ };
+}
diff --git a/src/components/questions/group-emitter.service.ts b/src/components/questions/group-emitter.service.ts
new file mode 100644
index 00000000..9308895d
--- /dev/null
+++ b/src/components/questions/group-emitter.service.ts
@@ -0,0 +1,14 @@
+import { Injectable, EventEmitter } from '@angular/core';
+
+@Injectable()
+export class GroupEmitterService {
+ private static _emitter: { [ID: string]: EventEmitter };
+
+ static get(ID: string): EventEmitter {
+ if (!this._emitter[ID]) {
+ this._emitter[ID] = new EventEmitter();
+ }
+ return this._emitter[ID];
+ }
+}
+
diff --git a/src/components/questions/multiple.html b/src/components/questions/multiple.html
new file mode 100644
index 00000000..4655b7b0
--- /dev/null
+++ b/src/components/questions/multiple.html
@@ -0,0 +1,10 @@
+
+
+
+
+ {{choice.name}}
+
+
+
+
+
diff --git a/src/components/questions/multiple.scss b/src/components/questions/multiple.scss
new file mode 100644
index 00000000..ec3090f8
--- /dev/null
+++ b/src/components/questions/multiple.scss
@@ -0,0 +1,4 @@
+.checkbox-ios.checkbox-disabled, .item-ios.item-checkbox-disabled ion-label {
+ opacity: 1;
+ pointer-events: none;
+}
diff --git a/src/components/questions/multiple.ts b/src/components/questions/multiple.ts
new file mode 100644
index 00000000..2103aee7
--- /dev/null
+++ b/src/components/questions/multiple.ts
@@ -0,0 +1,22 @@
+import { Component, EventEmitter, Input, Output, OnInit } from '@angular/core';
+import { FormGroup } from '@angular/forms';
+
+@Component({
+ selector: 'multiple-question',
+ templateUrl: './multiple.html'
+})
+export class MultipleQuestionComponent implements OnInit {
+ @Input() question;
+ @Input() disabled;
+ @Input() form: FormGroup;
+
+ constructor() {}
+ change(e) {
+ console.log(e);
+ console.log(this.question);
+ }
+
+ ngOnInit() {
+ console.log(this.form);
+ }
+}
diff --git a/src/components/questions/oneof.html b/src/components/questions/oneof.html
new file mode 100644
index 00000000..052ec6ea
--- /dev/null
+++ b/src/components/questions/oneof.html
@@ -0,0 +1,10 @@
+
+
+
+
+ {{choice.name}}
+
+
+
+
+
diff --git a/src/components/questions/oneof.scss b/src/components/questions/oneof.scss
new file mode 100644
index 00000000..525c7c86
--- /dev/null
+++ b/src/components/questions/oneof.scss
@@ -0,0 +1,4 @@
+.radio-ios.radio-disabled, .item-ios.item-radio-disabled ion-label {
+ opacity: 1;
+ pointer-events: none;
+}
diff --git a/src/components/questions/oneof.ts b/src/components/questions/oneof.ts
new file mode 100644
index 00000000..7830f04e
--- /dev/null
+++ b/src/components/questions/oneof.ts
@@ -0,0 +1,22 @@
+import { Component, EventEmitter, Input, Output, OnInit } from '@angular/core';
+import { FormGroup } from '@angular/forms';
+
+@Component({
+ selector: 'oneof-question',
+ templateUrl: './oneof.html'
+})
+export class OneofQuestionComponent implements OnInit {
+ @Input() question;
+ @Input() form: FormGroup;
+ @Input() disabled;
+ @Output() oneofForm = new EventEmitter();
+
+ constructor() {}
+ change(e) {
+ this.oneofForm.emit(e);
+ }
+
+ ngOnInit() {
+ // console.log(this.question);
+ }
+}
diff --git a/src/components/questions/questions.ts b/src/components/questions/questions.ts
new file mode 100644
index 00000000..56bb029b
--- /dev/null
+++ b/src/components/questions/questions.ts
@@ -0,0 +1,25 @@
+import { Component } from '@angular/core';
+
+@Component({
+ selector: 'file-question',
+ templateUrl: './file.html'
+})
+export class FileQuestionComponent {
+
+}
+
+@Component({
+ selector: 'oneof-question',
+ templateUrl: './oneof.html'
+})
+export class OneofQuestionComponent {
+
+}
+
+@Component({
+ selector: 'text-question',
+ templateUrl: './text.html'
+})
+export class TextQuestionComponent {
+
+}
diff --git a/src/components/questions/text.html b/src/components/questions/text.html
new file mode 100644
index 00000000..198a8323
--- /dev/null
+++ b/src/components/questions/text.html
@@ -0,0 +1,12 @@
+
+
+
+
+
+
diff --git a/src/components/questions/text.scss b/src/components/questions/text.scss
new file mode 100644
index 00000000..596c38a3
--- /dev/null
+++ b/src/components/questions/text.scss
@@ -0,0 +1,5 @@
+text-question {
+ textarea:read-only {
+ // opacity: 0.3;
+ }
+}
diff --git a/src/components/questions/text.ts b/src/components/questions/text.ts
new file mode 100644
index 00000000..4cd711e6
--- /dev/null
+++ b/src/components/questions/text.ts
@@ -0,0 +1,17 @@
+import { Component, Input, OnInit } from '@angular/core';
+import { FormGroup } from '@angular/forms';
+
+
+@Component({
+ selector: 'text-question',
+ templateUrl: './text.html'
+})
+export class TextQuestionComponent implements OnInit {
+ @Input() question;
+ @Input() disabled;
+ @Input() form: FormGroup;
+
+ constructor() {}
+
+ ngOnInit() {}
+}
diff --git a/src/configs/config.ts.default b/src/configs/config.ts.default
new file mode 100644
index 00000000..ec398a10
--- /dev/null
+++ b/src/configs/config.ts.default
@@ -0,0 +1,9 @@
+// Need update read me
+// Copy file to config.ts
+export default {
+ prefixUrl: 'http://local.practera.com:8080/',
+ appKey: '',
+ filestack: {
+ apiKey: ''
+ },
+}
diff --git a/src/index.html b/src/index.html
index a53fae4a..4b84cbcb 100755
--- a/src/index.html
+++ b/src/index.html
@@ -40,6 +40,9 @@
+
+
diff --git a/src/pages/achievements/view/achievements-view.html b/src/pages/achievements/view/achievements-view.html
index 827a9f34..f206d5d4 100755
--- a/src/pages/achievements/view/achievements-view.html
+++ b/src/pages/achievements/view/achievements-view.html
@@ -13,7 +13,7 @@
/>
- Points
+ {{ 'ACTIVITY.POINTS' | translate }}
{{ this.achievement.points }}
diff --git a/src/pages/achievements/view/achievements-view.page.ts b/src/pages/achievements/view/achievements-view.page.ts
index 5c3455d6..451808e4 100755
--- a/src/pages/achievements/view/achievements-view.page.ts
+++ b/src/pages/achievements/view/achievements-view.page.ts
@@ -1,6 +1,6 @@
import { Component } from '@angular/core';
import { NavParams } from 'ionic-angular';
-
+import { TranslationService } from '../../../shared/translation/translation.service';
let _mock = {
"id": 59,
"name": "Test Achievement",
@@ -24,6 +24,7 @@ export class AchievementsViewPage {
constructor(
private params: NavParams,
+ public translationService: TranslationService
) {
this.achievement = {};
}
diff --git a/src/pages/activities/list/activities-list.page.ts b/src/pages/activities-classic/list/activities-classic-list.page.ts
similarity index 95%
rename from src/pages/activities/list/activities-list.page.ts
rename to src/pages/activities-classic/list/activities-classic-list.page.ts
index 873e82dd..9a5d9f0f 100644
--- a/src/pages/activities/list/activities-list.page.ts
+++ b/src/pages/activities-classic/list/activities-classic-list.page.ts
@@ -1,7 +1,7 @@
import { Component } from '@angular/core';
import { NavController, ToastController, LoadingController } from 'ionic-angular';
-import { ActivitiesViewPage } from '../view/activities-view.page';
+import { ActivitiesViewPage } from '../../activities/view/activities-view.page';
import { ActivityService } from '../../../services/activity.service';
declare var _: any;
@@ -9,7 +9,7 @@ declare var _: any;
@Component({
templateUrl: './list.html'
})
-export class ActivitiesListPage {
+export class ActivitiesClassicListPage {
private activities: Array = [];
constructor(
diff --git a/src/pages/activities-classic/list/list.html b/src/pages/activities-classic/list/list.html
new file mode 100644
index 00000000..37b14848
--- /dev/null
+++ b/src/pages/activities-classic/list/list.html
@@ -0,0 +1,18 @@
+
+
+ Activities
+
+
+
+
+
+
+
+
+
+
+ {{activity.name}}
+
+
diff --git a/src/pages/activities-classic/list/list.scss b/src/pages/activities-classic/list/list.scss
new file mode 100644
index 00000000..e69de29b
diff --git a/src/pages/activities/list/list.html b/src/pages/activities/list/list.html
index 4679cf1e..1900f585 100644
--- a/src/pages/activities/list/list.html
+++ b/src/pages/activities/list/list.html
@@ -1,9 +1,20 @@
- Dashboard
+
+
+
+ New Items
+ ×
+
+
+
+ {{ 'ACTIVITY.PAGETITLE' | translate }}
-
+
-
-
-
-
-
{{ 'ACTIVITY.PROGRESS' | translate }}
- {{ pointPercentage }}%
-
+
+
+
+
{{ 'ACTIVITY.PROGRESS' | translate }}
+ {{ currentPercentage }}%
-
-
-
-
-
{{ 'ACTIVITY.POINTS' | translate }}
- {{ currentPoints }}
-
+
+
+
+
+
+
{{ 'ACTIVITY.POINTS' | translate }}
+
+ {{ characterCurrentExperience }}
-
-
+
+
+
{{ activitiesLoadingErr }}
@@ -55,3 +66,25 @@
{{ currentPoints }}
+
diff --git a/src/pages/activities/list/list.page.ts b/src/pages/activities/list/list.page.ts
index f1a0fa55..e9ef670b 100755
--- a/src/pages/activities/list/list.page.ts
+++ b/src/pages/activities/list/list.page.ts
@@ -1,91 +1,93 @@
import { Component, Input, OnInit } from '@angular/core';
-import { NavController, ToastController, LoadingController, ModalController } from 'ionic-angular';
+import {
+ NavController,
+ ToastController,
+ LoadingController,
+ ModalController
+} from 'ionic-angular';
import { Http } from '@angular/http';
import { Observable } from 'rxjs/Observable';
-import { TranslateService } from '@ngx-translate/core';
-import { i18nData } from '../../../app/i18n-en';
-import { loadingMessages, errMessages } from '../../../app/messages';
-import 'rxjs/add/observable/forkJoin';
-import 'rxjs/add/operator/map';
+import { TranslationService } from '../../../shared/translation/translation.service';
+import { loadingMessages, errMessages } from '../../../app/messages';
+import * as _ from 'lodash';
// services
import { ActivityService } from '../../../services/activity.service';
import { AchievementService } from '../../../services/achievement.service';
+import { GameService } from '../../../services/game.service';
+import { SubmissionService } from '../../../services/submission.service';
+import { CacheService } from '../../../shared/cache/cache.service';
+import { CharacterService } from '../../../services/character.service';
// pages
import { ActivitiesViewPage } from '../view/activities-view.page';
import { ActivityListPopupPage } from './popup';
+import { ItemsPopupPage } from '../../assessments/popup/items-popup.page';
+import { TabsPage } from '../../../pages/tabs/tabs.page';
// pipes
import { TruncatePipe } from '../../../pipes/truncate.pipe';
+/**
+ * @TODO: remove after development is complete
+ * flag to tell whether should UI popup toast error message at the bottom
+ * @type {Boolean}
+ */
+
@Component({
selector: 'activities-list-page',
templateUrl: 'list.html'
})
export class ActivitiesListPage implements OnInit {
- public activities = [];
+ public anyNewItems: any = this.cacheService.getLocal('gotNewItems');
+ public newItemsData: any = [];
+ public activities: any = [];
+ public currentPercentage: any = 0;
+ public initialItems: any = [];
public totalAchievements: any = [];
public currentPoints: number = 0;
public maxPoints: number = 0;
- public pointPercentage: number = 0;
- public percentageValue: any = 0;
+ public filteredSubmissions: any = [];
+ public characterData: any = [];
+ public submissionData: any = [];
+ public characterCurrentExperience: number = 0;
+ public percentageValue: number = 0;
+ public submissionPoints: number = 0;
public returnError: boolean = false;
+ // loading & err message variables
public activitiesLoadingErr: any = errMessages.General.loading.load;
public activitiesEmptyDataErr: any = errMessages.Activities.activities.empty;
+ // Achievements
+ private achievements = {
+ maxPoint: {},
+ obtained: {},
+ available: []
+ };
constructor(
public navCtrl: NavController,
public http: Http,
public activityService: ActivityService,
public achievementService: AchievementService,
+ public gameService: GameService,
+ public submissionService: SubmissionService,
+ public cacheService: CacheService,
+ public characterService: CharacterService,
public toastCtrl: ToastController,
public loadingCtrl: LoadingController,
public modalCtrl: ModalController,
- public translate: TranslateService
+ public translationService: TranslationService
) {
- translate.addLangs(["en"]);
- translate.setDefaultLang('en');
- translate.use('en');
+ this.anyNewItems = this.cacheService.getLocal('gotNewItems');
+ this.newItemsData = this.cacheService.getLocalObject('allNewItems');
+ console.log("item data: ", this.newItemsData);
}
-
- ngOnInit(){
- this.loadingAchievements();
+ ngOnInit() {
+ this.loadingDashboard();
}
- // display user achievemnt statistics score points
- loadingAchievements(){
- let loadingFailed = this.toastCtrl.create({
- message: this.activitiesLoadingErr,
- duration: 4000,
- position: 'bottom'
- });
- let getUserAchievements = this.achievementService.getAchievements();
- let getAllAchievements = this.achievementService.getAllAchievements();
- let getMaxPoints = this.achievementService.getMaxPoints();
- Observable.forkJoin([getUserAchievements, getAllAchievements, getMaxPoints])
- .subscribe(results => {
- this.totalAchievements = results;
- console.log(this.totalAchievements);
- console.log("Max Points: ", results[2].max_achievable_points);
- this.maxPoints = results[2].max_achievable_points;
- this.currentPoints = results[0].total_points;
- if(this.currentPoints >= 0 && this.currentPoints <= this.maxPoints){
- this.percentageValue = (Math.round( ((this.currentPoints / this.maxPoints) * 100) * 10 ) / 10);
- (this.percentageValue % 1 === 0) ? this.pointPercentage = this.percentageValue : this.pointPercentage = this.percentageValue.toFixed(1);
- }else if(this.currentPoints > this.maxPoints){
- this.pointPercentage = 100;
- }else {
- this.currentPoints = 0;
- this.maxPoints = 0;
- this.pointPercentage = 0;
- }
- },
- err => {
- this.currentPoints = 0;
- this.maxPoints = 0;
- this.pointPercentage = 0;
- loadingFailed.present();
- }
- );
+ // refresher activities
+ doRefresh(e) {
+ this.loadingDashboard();
+ e.complete();
}
- // loading activity list data
- loadingActivities(){
- let loadingActivities = this.loadingCtrl.create({
+ // display user achievemnt statistics score points
+ loadingDashboard() {
+ let loadingData = this.loadingCtrl.create({
content: 'Loading ..'
});
let loadingFailed = this.toastCtrl.create({
@@ -93,37 +95,71 @@ export class ActivitiesListPage implements OnInit {
duration: 4000,
position: 'bottom'
});
- loadingActivities.present();
- this.activityService.getActivities()
- .subscribe(
- data => {
- this.activities = data;
+ let getActivities = this.activityService.getList();
+ loadingData.present().then(() => {
+ getActivities.subscribe(
+ results => {
+ this.activities = results;
if(this.activities.length == 0){
this.returnError = true;
}
- loadingActivities.dismiss().then(() => {
- console.log("Activities: ", this.activities);
- });
+ let getCharacter = this.characterService.getCharacter();
+ let getSubmission = this.submissionService.getSubmissionsData();
+ Observable.forkJoin([getSubmission, getCharacter])
+ .subscribe(results => {
+ loadingData.dismiss().then(() => {
+ this.submissionData = results[0];
+ _.forEach(this.submissionData, element => {
+ if(element.AssessmentSubmission.status == 'published' || element.AssessmentSubmission.status == 'done'){
+ if(element.AssessmentSubmission.moderated_score !== null){
+ this.filteredSubmissions.push(element.AssessmentSubmission);
+ this.submissionPoints += parseFloat(element.AssessmentSubmission.moderated_score);
+ }
+ }
+ });
+ let average_score = (this.submissionPoints/this.filteredSubmissions.length)*100;
+ (average_score > 0) ? this.percentageValue = average_score : this.percentageValue = 0;
+ this.currentPercentage = this.percentageValue.toFixed(2);
+ // console.log("Percent: ", this.currentPercentage); // display as string format
+ this.characterData = results[1].Characters[0];
+ this.cacheService.setLocal('character_id', this.characterData.id);
+ console.log("character id: ", this.characterData.id);
+ this.characterCurrentExperience = this.characterData.experience_points;
+ // console.log("Experience: ", this.characterCurrentExperience);
+ this.gameService.getGameItems(this.characterData.id)
+ .subscribe(
+ data => {
+ this.initialItems = data.Items;
+ this.cacheService.setLocalObject('initialItems', this.initialItems);
+ console.log("Items Data: ", this.initialItems);
+ },
+ err => {
+ console.log("Items Data error: ", err);
+ }
+ );
+ });
+ },
+ err => {
+ loadingData.dismiss().then(() => {
+ loadingFailed.present();
+ });
+ }
+ );
},
- err => {
- loadingActivities.dismiss().then(() => {
+ error => {
+ loadingData.dismiss().then(() => {
loadingFailed.present();
});
}
- )
- }
- // load activity data
- ionViewWillEnter() {
- this.loadingActivities();
- }
- // refresher activities
- doRefresh(e) {
- this.loadingActivities()
- e.complete();
+ );
+ });
}
// redirect to activity detail page
goToDetail(activity: any, id: any){
- this.navCtrl.push(ActivitiesViewPage, { activity: activity, id: id });
+ this.navCtrl.push(ActivitiesViewPage, {
+ achievements: this.achievements,
+ activity: activity
+ });
}
// view the disabled activity popup
goToPopup(unlock_id: any){
@@ -131,4 +167,11 @@ export class ActivitiesListPage implements OnInit {
console.log("Achievement ID: ", unlock_id);
disabledActivityPopup.present();
}
+ // close modal and display as main page
+ closeItemsShwon(){
+ this.anyNewItems = !this.cacheService.getLocal('gotNewItems');
+ this.cacheService.setLocalObject('allNewItems', []);
+ this.cacheService.setLocal('gotNewItems', !this.cacheService.getLocal('gotNewItems'));
+ this.navCtrl.setRoot(TabsPage);
+ }
}
diff --git a/src/pages/activities/list/popup.html b/src/pages/activities/list/popup.html
index 5b35dfd3..d1f46a25 100644
--- a/src/pages/activities/list/popup.html
+++ b/src/pages/activities/list/popup.html
@@ -2,15 +2,9 @@
-
+
{{ achievementName }}
-
-
-
-
- ×
-
-
+ ×
@@ -23,10 +17,10 @@
diff --git a/src/pages/activities/list/popup.ts b/src/pages/activities/list/popup.ts
index a478e43d..52ae0be4 100644
--- a/src/pages/activities/list/popup.ts
+++ b/src/pages/activities/list/popup.ts
@@ -1,14 +1,14 @@
-import { Component, Injectable } from '@angular/core';
+import { Component } from '@angular/core';
import { ViewController, ToastController, LoadingController, NavParams } from 'ionic-angular';
import { TranslateService } from '@ngx-translate/core';
-import { i18nData } from '../../../app/i18n-en';
-import { loadingMessages, errMessages } from '../../../app/messages';
+import { i18nData } from '../../../app/i18n-en';
+import { loadingMessages, errMessages } from '../../../app/messages';
// services
import { AchievementService } from '../../../services/achievement.service';
-@Injectable()
+
@Component({
selector: 'activity-list-popup',
- templateUrl: 'popup.html'
+ templateUrl: 'popup.html'
})
export class ActivityListPopupPage {
public unlock_id: any;
@@ -21,18 +21,19 @@ export class ActivityListPopupPage {
public loadingMessage: any = loadingMessages.LoadingSpinner.loading;
public achievementsLoadingErr: any = errMessages.General.loading.load;
public achievementsEmptyDataErr: any = errMessages.Activities.achievements.empty;
- constructor(private viewCtrl: ViewController,
- private navParams: NavParams,
- private toastCtrl: ToastController,
- private loadingCtrl: LoadingController,
- private achievementService: AchievementService,
- private translate: TranslateService){
- this.unlock_id = this.navParams.get('unlock_id');
- console.log('Unlock id value: ', this.unlock_id);
- translate.addLangs(["en"]);
- translate.setDefaultLang('en');
- translate.use('en');
- }
+
+ constructor(
+ private viewCtrl: ViewController,
+ private navParams: NavParams,
+ private toastCtrl: ToastController,
+ private loadingCtrl: LoadingController,
+ private achievementService: AchievementService,
+ public translationService: TranslateService
+ ) {
+ this.unlock_id = this.navParams.get('unlock_id');
+ // console.log('Unlock id value: ', this.unlock_id);
+ }
+
ionViewWillEnter(){
let loader = this.loadingCtrl.create({
content: this.loadingMessage
@@ -48,7 +49,7 @@ export class ActivityListPopupPage {
position: 'bottom'
});
loader.present().then(() => {
- this.achievementService.getAllAchievements()
+ this.achievementService.getAll()
.subscribe(
data => {
if(data.length > 0){
@@ -63,7 +64,7 @@ export class ActivityListPopupPage {
});
}else {
this.enableData = false;
- loader.dismiss().then(() => {
+ loader.dismiss().then(() => {
nothingLoaded.present();
});
}
@@ -81,4 +82,4 @@ export class ActivityListPopupPage {
closeModal() {
this.viewCtrl.dismiss();
}
-}
\ No newline at end of file
+}
diff --git a/src/pages/activities/view/activities-view.page.ts b/src/pages/activities/view/activities-view.page.ts
index 4ebc02fb..f5e769f1 100644
--- a/src/pages/activities/view/activities-view.page.ts
+++ b/src/pages/activities/view/activities-view.page.ts
@@ -1,23 +1,44 @@
import { Component } from '@angular/core';
-import { ModalController, NavParams, NavController } from 'ionic-angular';
+import { ModalController, NavParams, NavController, AlertController } from 'ionic-angular';
+import { Observable } from 'rxjs/Observable';
+// pages
import { ActivitiesViewModalPage } from './activities-view-modal.page';
import { AssessmentsPage } from '../../assessments/assessments.page';
+import { ActivityService } from '../../../services/activity.service';
+import { SubmissionService } from '../../../services/submission.service';
+import * as _ from 'lodash';
@Component({
templateUrl: './view.html'
})
-
export class ActivitiesViewPage {
activity: any = {};
+ assessment: any = {};
+ assessments: any = {};
submissions: Array = [];
- activityData = {};
+ achievements: any = {
+ available: [],
+ obtained: {},
+ maxPoints: {}
+ };
+ loadings = {
+ submissions: false
+ };
+
constructor(
private navParams: NavParams,
private navCtrl: NavController,
- private modalCtrl: ModalController
+ private modalCtrl: ModalController,
+ private activityService: ActivityService,
+ private submissionService: SubmissionService,
+ private alertCtrl: AlertController
) {
}
+ ionViewWillEnter(): void {
+ this.loadings.submissions = true;
+ }
+
// @TODO: use simple mock data for assessment first
/**
* on assessment implementation, to do list:
@@ -27,49 +48,63 @@ export class ActivitiesViewPage {
* - change template view based on responded data format
*/
ionViewDidEnter(): void {
- this.activity = this.navParams.get('activity');
- // console.log("Specific Activity Data, ", this.activity);
- this.activityData = this.activity.Activity;
- console.log("Specific Activity Data, ", this.activityData);
- this.activity.badges = [
- {
- url: 'http://leevibe.com/images/category_thumbs/video/19.jpg',
- disabled: true,
- },
- {
- url: 'http://mobileapp.redcross.org.uk/achievements/heart-icon.png',
- disabled: true,
- },
- {
- url: 'http://americanredcross.3sidedcube.com/media/45334/fire-large.png',
- disabled: false,
- },
- ];
+ // assessment
+ this.activity = this.activityService.normaliseActivity(this.navParams.get('activity') || {});
+ this.assessments = this.activity.sequences || [];
+ this.assessment = this.activity.assessment;
- let submission = [];
- if (this.activity.Activity.name === 'Workshop-2') {
- submission.push({
- title: 'Submission 1',
- submittedOn: 'Thu Jun 19 2017 17:37:08',
- status: 'Pending Review'
- });
- this.activity.badges.map((badge, index) => {
- if (index === 1 || index === 0) {
- badge.disabled = false;
- } else {
- badge.disabled = true;
+ // submission
+ this.submissions = [];
+ Observable.forkJoin(this.submissionService.getSubmissionsByReferences(this.activity.References)).subscribe(responses => {
+ // turn nested array into single dimension array
+ responses.forEach((submissions: Array) => {
+ if (submissions.length > 0) {
+ this.submissions = submissions.map(submission => {
+ return this.submissionService.normalise(submission);
+ });
+ this.submissions = _.orderBy(this.submissions, 'created', 'desc'); // latest at top
}
});
- } else {
- submission.push({
- title: 'Submission 1',
- submittedOn: '',
- status: 'Do Now'
+
+ this.loadings.submissions = false;
+ });
+
+ // badges
+ this.achievements = this.navParams.get('achievements');
+ this.activity.badges = this.extractBadges();
+ this.activity.badges.map((badge, index) => {
+ if ((this.activity.id % 3) != 0) {
+ badge.disabled = false;
+ } else {
+ badge.disabled = true;
+ }
+ });
+ }
+
+ // extract "in progress"
+ inProgressSubmission() {
+ let result = [];
+ (this.submissions || []).forEach(submission => {
+ if (submission.status === 'in progress') {
+ result.push(submission);
+ }
+ });
+ return result;
+ }
+
+ private extractBadges(): Array {
+ let result = [];
+ if (this.achievements.available && this.achievements.available.length > 0) {
+ this.achievements.available.forEach(achievement => {
+ if (achievement.Achievement.badge) {
+ result.push({
+ url: achievement.Achievement.badge,
+ disabled: false
+ });
+ }
});
}
-
- this.submissions = submission;
- console.log(this.activity);
+ return result;
}
/**
@@ -81,11 +116,33 @@ export class ActivitiesViewPage {
}
/**
+ * @name goAssessment
* @description direct to assessment page of a selected activity
* @param {Object} activity single activity object from the list of
- * activities respond from get_activities API
+ * activities respond from get_activities API
+ * @param {Object} opts optional object with
+ * - hasSubmission: to indicateif user is accessing a in
+ * progress assessment
*/
- goAssessment(activity) {
- this.navCtrl.push(AssessmentsPage, {activity});
+ goAssessment(submission?, opts = { hasSubmission: false }) {
+ if ((this.inProgressSubmission()).length > 0 && opts.hasSubmission === false) {
+ let alert = this.alertCtrl.create({
+ title: 'You have a submission in progress.',
+ buttons: ["Ok"]
+ });
+ alert.present();
+ } else if (opts.hasSubmission === true) {
+ this.navCtrl.push(AssessmentsPage, {
+ activity: this.activity,
+ assessment: this.assessment,
+ submissions: this.submissions,
+ currentSubmission: submission
+ });
+ } else {
+ this.navCtrl.push(AssessmentsPage, {
+ activity: this.activity,
+ assessment: this.assessment
+ });
+ }
}
}
diff --git a/src/pages/activities/view/view.html b/src/pages/activities/view/view.html
index 546b4fdf..18bb82ca 100644
--- a/src/pages/activities/view/view.html
+++ b/src/pages/activities/view/view.html
@@ -1,12 +1,13 @@
- {{ activityData.name }}
-
+ {{ activity.name }}
+
+
+
-
-
+
+
+
+
@@ -35,23 +39,32 @@
+
- Submission
+ {{ 'ACTIVITY.SUBMISSION' | translate }}
-
+
+
+ Loading submissions...
+
+
+
+
-
{{ submission.title }}
-
{{ submission.submittedOn | timeago }}
+
{{ (submission.submitted || submission.created).format() | amDateFormat:"MMM D YYYY, h:mm a" }}
+
{{ submission.status }}
+
+
diff --git a/src/pages/assessments/assessments.html b/src/pages/assessments/assessments.html
index be51783b..61a5dbc8 100644
--- a/src/pages/assessments/assessments.html
+++ b/src/pages/assessments/assessments.html
@@ -1,22 +1,32 @@
- {{ assessment.name }}
+
-
- Submit
+
+ {{ 'GENERAL.SUBMIT' | translate }}
-
-
-
-
-
+
+
-
-
+
+
+ {{ assessment.name }}
+
+
+
+
+
+
+
+
diff --git a/src/pages/assessments/assessments.page.ts b/src/pages/assessments/assessments.page.ts
index aae3c99e..afef3587 100644
--- a/src/pages/assessments/assessments.page.ts
+++ b/src/pages/assessments/assessments.page.ts
@@ -2,13 +2,31 @@ import { Component, ViewChild } from '@angular/core';
import {
NavParams,
NavController,
- AlertController,
Navbar,
- LoadingController
+ LoadingController,
+ AlertController,
+ ModalController,
+ Events
} from 'ionic-angular';
-import { CacheService } from '../../shared/cache/cache.service';
+import { Observable } from 'rxjs/Observable';
import { AssessmentService } from '../../services/assessment.service';
+import { CacheService } from '../../shared/cache/cache.service';
+import { CharacterService } from '../../services/character.service';
+import { GameService } from '../../services/game.service';
+import { SubmissionService } from '../../services/submission.service';
+// pages
+import { AssessmentsGroupPage } from './group/assessments-group.page'
+import { ItemsPopupPage } from './popup/items-popup.page';
+// import { TabsPage } from '../../pages/tabs/tabs.page';
+import { ActivitiesListPage } from '../activities/list/list.page';
+class ActivityBase {
+ id: number;
+ name: string;
+ description: string;
+}
+import { TranslationService } from '../../shared/translation/translation.service';
+import { confirmMessages, errMessages, loadingMessages } from '../../app/messages';
import * as _ from 'lodash';
@Component({
@@ -21,68 +39,58 @@ export class AssessmentsPage {
activity: any = {};
answers: any = {};
- assessment: any = {};
+ // assessment: any = {};
assessmentGroups: any = [];
assessmentQuestions: any = [];
- allowSubmit: any = true;
+ allowSubmit: boolean = false;
+ submissions: any = [];
+ submissionUpdated: boolean = false; // event listener flag
+ getInitialItems: any = this.cacheService.getLocalObject('initialItems');
+ getCharacterID: any = this.cacheService.getLocal('character_id');
+ gotNewItems: boolean = false;
+ isEventSubmission: boolean = false;
+ initialItemsCount: any = {};
+ newItemsCount: any = {};
+ newItemsData: any = [];
+ totalItems: any = [];
+ allItemsData: any = [];
+ combinedItems: any = [];
+ public loadingMessages: any = loadingMessages.LoadingSpinner.loading;
+ // confirm message variables
+ private discardConfirmMessage = confirmMessages.Assessments.DiscardChanges.discard;
+ private submitConfirmMessage = confirmMessages.Assessments.SubmitConfirmation.confirm;
constructor(
private navParams: NavParams,
private alertCtrl: AlertController,
- private cache: CacheService,
private navCtrl: NavController,
private loadingCtrl: LoadingController,
- private assessmentService: AssessmentService
+ private assessmentService: AssessmentService,
+ private characterService: CharacterService,
+ private cacheService: CacheService,
+ private gameService: GameService,
+ private submissionService: SubmissionService,
+ private translationService: TranslationService,
+ public modalCtrl: ModalController,
+ public events: Events
) {
this.activity = this.navParams.get('activity');
- console.log('this.activity', this.activity);
- }
-
- ionViewDidLoad() {
- // Custom back button on page
- this.navbar.backButtonClick = (e: UIEvent) => {
- this.clickDiscard();
+ if (!this.activity) {
+ throw "Fatal Error: Activity not available";
}
- }
- loadQuestions(): Promise {
- return new Promise((resolve, reject) => {
- this.assessmentService.getAll({
- search: {
- assessment_id: this.activity.sequences[0]['Assess.Assessment'].id
- }
- }).subscribe(assessmentData => {
- console.log('assessmentData', assessmentData);
- this.assessment = assessmentData[0].Assessment;
- this.assessmentGroups = assessmentData[0].AssessmentGroup;
- this.assessmentQuestions = assessmentData[0].AssessmentQuestion;
-
- _.forEach(this.assessmentQuestions, (question, key) => {
- // Inject answers
- if (this.answers[question.id]) {
- this.assessmentQuestions[key].answer = this.answers[question.id];
- } else {
- // Set allowSubmit to false when some assessment no answer
- this.allowSubmit = false;
- this.assessmentQuestions[key].answer = null;
- }
- });
-
- return resolve();
- }, reject);
- });
+ console.log('this.activity', this.activity);
}
ionViewWillEnter() {
- // Hardcoded answers for now
- this.answers = this.cache.getLocalObject('answers') || {};
let loader = this.loadingCtrl.create();
-
loader.present().then(() => {
this.loadQuestions()
.then(() => {
loader.dismiss();
+ }, err => {
+ console.log('log::', err);
})
.catch((err) => {
console.log(err);
@@ -91,49 +99,392 @@ export class AssessmentsPage {
});
}
- doDiscard() {
- this.cache.setLocalObject('answers', {});
+ /**
+ * track if this page need to download assessment manually (extra load)
+ */
+ traceAssessmentProgress() {
+ this.events.subscribe('assessment:changes', (submissionUpdated) => {
+ this.submissionUpdated = true;
+ });
}
- clickDiscard() {
- // Send alert to user before user click back page
- // If user click okay will remove all answers in local storage
- // No data will send to server
- const confirm = this.alertCtrl.create({
- title: 'Discard all change',
- message: 'Do you really want to discard all your change?',
- buttons: [
- {
- text: 'Okay',
- handler: () => {
- this.doDiscard();
- this.navCtrl.pop();
+ /**
+ * @description mapping assessments and submissions
+ * @param {Object} submissions submissions
+ * @param {Object} assessments assessments
+ */
+ mapSubmissionsToAssessment(submissions, assessments) {
+ _.forEach(assessments, (group, i) => {
+ _.forEach(group, (assessment, j) => {
+
+ // normalise
+ assessments[i][j] = assessment = this.assessmentService.normalise(assessment);
+ console.log('assessment', assessment);
+
+ _.forEach(assessment.AssessmentGroup, (assessmentGroup, k) => {
+ _.forEach(assessmentGroup.questions, (question, l) => {
+ // Inject empty answer fields
+ // We will know thare are no submission when it is null
+ assessments[i][j].AssessmentGroup[k].questions[l].answer = null;
+ assessments[i][j].AssessmentGroup[k].questions[l].reviewerAnswer = null;
+
+ // find submission
+ _.forEach(submissions, (submission) => {
+ // attach existing submission to assessment group it belongs to
+ let group = this.assessmentGroups[i][j].AssessmentGroup[k];
+ if (group.assessment_id === submission.assessment_id) {
+ this.assessmentGroups[i][j].AssessmentGroup[k].submission = submission;
+ }
+
+ // find user answer
+ _.forEach(submission.answer, (answer) => {
+ if (answer.assessment_question_id === question.id) {
+ assessments[i][j].AssessmentGroup[k].questions[l].answer = answer;
+ }
+ });
+
+ // find reviewer feedback
+ _.forEach(submission.review, (reviewerAnswer) => {
+ if (reviewerAnswer.assessment_question_id === question.id) {
+ assessments[i][j].AssessmentGroup[k].questions[l].reviewerAnswer = reviewerAnswer;
+ }
+ });
+ });
+
+ });
+
+ // Summarise basic answer information
+ // get total number of questions
+ assessments[i][j].AssessmentGroup[k].totalRequiredQuestions = 0;
+ _.forEach(assessmentGroup.questions, (q) => {
+ if (q.required) {
+ assessments[i][j].AssessmentGroup[k].totalRequiredQuestions += 1;
+ }
+ });
+
+ // get total number of answered questions
+ assessments[i][j].AssessmentGroup[k].answeredQuestions = 0;
+ _.forEach(assessmentGroup.questions, (q) => {
+ if (q.required && q.answer && q.answer !== null) {
+ assessments[i][j].AssessmentGroup[k].answeredQuestions += 1;
+ }
+ });
+
+ // get total number of feedback
+ assessments[i][j].AssessmentGroup[k].reviewerFeedback = 0;
+ _.forEach(assessmentGroup.questions, (q) => {
+ // If API response, the reviewer's answer and comment are empty,
+ // front-end don't consider it as a feedback
+ if (
+ q.reviewerAnswer &&
+ q.reviewerAnswer !== null &&
+ !_.isEmpty(q.reviewerAnswer.answer) &&
+ !_.isEmpty(q.reviewerAnswer.comment)
+ ) {
+ assessments[i][j].AssessmentGroup[k].reviewerFeedback += 1;
+ }
+ });
+
+ // Set status
+ // let status = assessments[i][j].AssessmentGroup[k].status = 'incomplete';
+ let questionsStatus = [];
+ _.forEach(assessmentGroup.questions, (q) => {
+ if (q.required && q.answer !== null) {
+ if (
+ q.reviewerAnswer !== null &&
+ assessmentGroup.submission.status !== 'pending approval' &&
+ (q.reviewerAnswer.answer || q.reviewerAnswer.comment)
+ ) {
+ questionsStatus.push('reviewed');
+ } else {
+ questionsStatus.push('completed');
+ }
+ }
+
+ if (!q.required && q.answer !== null) {
+ if (
+ q.reviewerAnswer !== null &&
+ assessmentGroup.submission.status !== 'pending approval' &&
+ (q.reviewerAnswer.answer || q.reviewerAnswer.comment)
+ ) {
+ questionsStatus.push('reviewed');
+ } else {
+ questionsStatus.push('completed');
+ }
+ }
+
+ if (q.answer === null) {
+ questionsStatus.push('incomplete');
+ }
+
+ // if (q.required && q.answer === null) {
+ // questionsStatus.push('incomplete');
+ // }
+ //
+ // if (!q.required && q.answer === null) {
+ // questionsStatus.push('completed');
+ // }
+ });
+
+ console.log('questionsStatus', questionsStatus);
+
+ assessments[i][j].AssessmentGroup[k].status = 'incomplete';
+ if (_.every(questionsStatus, (v) => {
+ return (v === 'completed');
+ })) {
+ assessments[i][j].AssessmentGroup[k].status = 'completed';
}
- },
- {
- text: 'Cancel',
- handler: () => {
- console.log('Discard cancelled');
+ if (_.includes(questionsStatus, 'reviewed')) {
+ assessments[i][j].AssessmentGroup[k].status = 'reviewed';
+ }
+ });
+
+ console.log('assessment 2', assessment);
+ });
+ });
+
+ return assessments;
+ }
+
+ /**
+ * pull submission when required, when:
+ * - no submission available in the redirection from activity-view/event-view pages
+ * - [save] clicked & saved from assessment-group.page.ts
+ *
+ * @return {Promise}
+ */
+ private pullSubmissions(): Promise {
+ return new Promise((resolve, reject) => {
+ // 2nd batch API requests (get_submissions)
+ Observable.forkJoin(
+ this.submissionService.getSubmissionsByReferences(
+ this.activity.References
+ ))
+ .subscribe(allSubmissions => {
+ // allSubmissions - response format: [ // context_ids
+ // [ // assessment group 1
+ // assessment1,
+ // assessment2,
+ // ...
+ // ],
+ // [ // assessment group 2
+ // assessment1,
+ // assessment2,
+ // ...
+ // ],
+ // ...
+ // ]
+ let submissions = [];
+ _.forEach(allSubmissions, group => {
+ _.forEach(group, (submission) => {
+ submissions.push(this.submissionService.normalise(submission));
+ });
+ });
+
+ // check if a submission is specified
+ let currentSubmission = this.navParams.get('currentSubmission');
+ let filteredSubmissions = [];
+
+ submissions.forEach(subm => {
+ if (currentSubmission && currentSubmission.id === subm.id) {
+ filteredSubmissions.push(subm);
+ }
+ });
+ let hasInProgress = _.find(submissions, {status: 'in progress'}); // "in progress" never > 1
+ let isNew = (!currentSubmission && (filteredSubmissions.length === 0 || !_.isEmpty(hasInProgress)));
+
+ if (isNew) { // new submission
+ this.submissions = !_.isEmpty(hasInProgress) ? [hasInProgress] : [];
+ } else if (!isNew && hasInProgress) { // resume "in progress"
+ filteredSubmissions.push(hasInProgress);
+ this.submissions = filteredSubmissions;
+ } else if (currentSubmission) { // display current submission
+ filteredSubmissions.push(currentSubmission);
+ this.submissions = filteredSubmissions;
}
+
+ console.log('this.submissions', this.submissions);
+ resolve(submissions);
+ }, err => {
+ console.log('err', err);
+ reject(err);
+ });
+ });
+ }
+
+ loadQuestions(): Promise {
+ return new Promise((resolve, reject) => {
+
+ // get_assessments request with "assessment_id" & "structured"
+ let getAssessment = (assessmentId) => {
+ return this.assessmentService.getAll({
+ search: {
+ assessment_id: assessmentId,
+ structured: true
+ }
+ });
+ };
+
+ // Congregation of assessment ids to fulfill get_assessments API's param requirement
+ let tasks = [];
+ _.forEach(this.activity.References, (reference) => {
+ if (
+ reference.Assessment &&
+ reference.Assessment.id
+ ) {
+ return tasks.push(getAssessment(reference.Assessment.id));
}
- ]
+ });
+
+ /**
+ * merging submission into question inside of assessment array objects
+ * - set question statuses (quantity of total answered)
+ * - set submission button status
+ */
+ let preprocessAssessmentSubmission = () => {
+ this.assessmentGroups = this.mapSubmissionsToAssessment(
+ this.submissions,
+ this.assessmentGroups
+ );
+
+ // Only allow submit when all required question have answered.
+ _.forEach(this.assessmentGroups, groups => {
+ _.forEach(groups, assessment => {
+ let groupWithAnswers = 0;
+ _.forEach(assessment.AssessmentGroup, group => {
+ // console.log('group.answeredQuestions', group.answeredQuestions);
+ // console.log('group.totalRequiredQuestions', group.totalRequiredQuestions);
+ if (group.answeredQuestions >= group.totalRequiredQuestions) {
+ groupWithAnswers += 1;
+ }
+ });
+ // console.log('groupWithAnswers', groupWithAnswers, _.size(assessment.AssessmentGroup));
+ if (groupWithAnswers >= _.size(assessment.AssessmentGroup)) {
+ this.allowSubmit = true;
+ }
+ });
+ });
+
+ _.forEach(this.submissions, submission => {
+ if (
+ submission.status === 'pending review' ||
+ submission.status === 'pending approval' ||
+ submission.status === 'published' || // moderated type (reviews & published)
+ submission.status === 'done' // survey type
+ ) {
+ this.allowSubmit = false;
+ }
+ });
+
+ resolve({
+ assessmentGroups: this.assessmentGroups,
+ submissions: this.submissions
+ });
+ };
+
+ // first batch API requests (get_assessments)
+ Observable.forkJoin(tasks)
+ .subscribe(
+ (assessments: any) => {
+ this.assessmentGroups = assessments;
+ this.submissions = this.navParams.get('submissions');
+
+ // check if this is from single submission view
+ let currentSubmission = this.navParams.get('currentSubmission');
+ if (currentSubmission) {
+ this.submissions = [currentSubmission];
+ console.log(this.navParams.get('currentSubmission'), this.submissions);
+ }
+
+ // pull new when submission is updated or currentSubmission is empty
+ if (this.submissionUpdated || !currentSubmission) {
+ this.pullSubmissions().then(res => {
+ preprocessAssessmentSubmission();
+ }, err => {
+ reject(err);
+ });
+ this.submissionUpdated = false;
+ } else {
+ preprocessAssessmentSubmission();
+ }
+ },
+ (err) => {
+ console.log('err', err);
+ reject(err);
+ }
+ );
});
- confirm.present();
}
+ /**
+ * submit answer and change submission status to done
+ */
doSubmit() {
- console.log('Okay');
+ let loading = this.loadingCtrl.create({
+ content: 'Loading...'
+ });
+
+ loading.present().then(() => {
+ let tasks = [];
+ _.forEach(this.submissions, (submission) => {
+ console.log('submission', submission);
+
+ if (
+ submission &&
+ submission.assessment_id &&
+ submission.context_id &&
+ submission.id
+ ) {
+ tasks.push(this.assessmentService.submit({
+ Assessment: {
+ id: submission.assessment_id,
+ context_id: submission.context_id,
+ in_progress: false
+ },
+ AssessmentSubmission: {
+ id: submission.id
+ },
+ AssessmentSubmissionAnswer: _.map(submission.answer, (answ) => {
+ if (answ && answ.assessment_question_id && answ.answer) {
+ return {
+ assessment_question_id: answ.assessment_question_id,
+ answer: answ.answer
+ }
+ }
+ })
+ }));
+ }
+ });
+
+ Observable
+ .forkJoin(tasks)
+ .subscribe(
+ (assessments: any) => {
+ loading.dismiss().then(_ => {
+ console.log('assessments', assessments);
+ this.allowSubmit = false;
+ this.popupAfterSubmit();
+ });
+ },
+ err => {
+ loading.dismiss().then(_ => {
+ console.log('err', err);
+ });
+ }
+ );
+ });
}
clickSubmit() {
const confirm = this.alertCtrl.create({
title: 'Submit evidence',
- message: 'Do you really want to submit this evidence?',
+ message: this.submitConfirmMessage,
buttons: [
{
text: 'Okay',
handler: () => {
- this.doSubmit();
+ // this.doSubmit();
+ this.popupAfterSubmit();
}
},
{
@@ -147,38 +498,119 @@ export class AssessmentsPage {
confirm.present();
}
- // @TODO: Remove it later...
- clickFillAllAnswers() {
- _.forEach(this.assessmentQuestions, (question, key) => {
- console.log('q', question);
- if (question.question_type === 'file') {
- this.answers[question.id] = {
- type: 'file',
- files: [
- {
- mime: 'image/jpeg',
- url: 'https://placeimg.com/100/100/nature/grayscale'
- },
- {
- mime: 'image/jpeg',
- url: 'https://placeimg.com/100/100/nature/grayscale'
- }
- ]
- };
- }
+ // items popup
+ popupAfterSubmit(){
+ const loading = this.loadingCtrl.create({
+ content: this.loadingMessages
+ });
+ const alert = this.alertCtrl.create({
+ title: 'Submission Successful',
+ buttons: [
+ {
+ text: 'OK',
+ handler: () => {
+ this.navCtrl.setRoot(ActivitiesListPage); // dashboard page
+ }
+ }
+ ]
+ });
- if (question.question_type === 'oneof') {
- this.answers[question.id] = {
- type: 'file',
- answers: [
- {
- context: 'This is answer for ' + question.assessment_id
- }
- ]
- };
+ // get initial items
+ console.log('Inital Items: ', this.getInitialItems);
+ _.forEach(this.getInitialItems, element => {
+ let id = element.id;
+ console.log("id value: ", id);
+ if(!this.initialItemsCount[id]){
+ this.initialItemsCount[id] = 0;
}
+ this.initialItemsCount[id]++;
+ });
+ console.log("Count for initial Items: ", this.initialItemsCount);
+ // get latest updated items data api call
+ loading.present();
- this.loadQuestions();
+ this.gameService.getGameItems(this.getCharacterID)
+ .subscribe(
+ data => {
+ console.log("Items: ", data.Items);
+ this.newItemsData = data.Items;
+ _.forEach(data.Items, (element, index) => {
+ let id = element.id;
+ console.log("id value: ", id);
+ if(!this.newItemsCount[id]){
+ this.newItemsCount[id] = 0;
+ }
+ this.newItemsCount[id]++;
+ });
+ console.log("Count for final Items: ", this.newItemsCount);
+ // compare with previous get_characters() results and generate final index value array result
+ _.forEach(this.newItemsCount, (element, id) => {
+ if(!this.initialItemsCount[id]){
+ this.totalItems.push({ "count": element, "id": id });
+ }else {
+ let diffCountVal = element - this.initialItemsCount[id];
+ if(diffCountVal > 0){
+ this.totalItems.push({ "count": diffCountVal, "id": id });
+ }
+ }
+ });
+ console.log("New compared items: ", this.newItemsData);
+ // if(!this.totalItems){
+ _.forEach(this.totalItems, (element, index) => {
+ element.id = parseInt(element.id);
+ });
+ console.log("Count for new total Items: ", this.totalItems);
+ this.allItemsData = _.intersectionBy(this.newItemsData, this.totalItems, 'id');
+ console.log("Final items object data: ", this.allItemsData);
+ // }
+ _.forEach(this.totalItems, (element, index) => {
+ element.id = parseInt(element.id);
+ });
+ console.log("Count for new total Items: ", this.totalItems);
+ this.allItemsData = _.intersectionBy(this.newItemsData, this.totalItems, 'id');
+ console.log("Final items object data: ", this.allItemsData);
+ // get the final object with item occurance count value
+ let groupData = _.groupBy(this.totalItems, 'id');
+ console.log("Group?? ", groupData);
+ if(this.allItemsData.length === 0){
+ this.gotNewItems = false;
+ this.cacheService.setLocal('gotNewItems', this.gotNewItems);
+ loading.onDidDismiss(() => {
+ alert.present(); // redirect to dashboard page
+ });
+ loading.dismiss();
+ }else {
+ _.map(this.allItemsData, (ele) => {
+ this.combinedItems.push(_.extend({count: groupData[ele.id] || []}, ele))
+ console.log("Final Combined results: ", this.combinedItems);
+ });
+ // display items on dashboard page
+ this.gotNewItems = true;
+ this.cacheService.setLocal('gotNewItems', this.gotNewItems);
+ this.cacheService.setLocalObject('allNewItems', this.combinedItems);
+ loading.onDidDismiss(() => {
+ this.navCtrl.setRoot(ActivitiesListPage);
+ });
+ loading.dismiss();
+ }
+ },
+ err => {
+ loading.dismiss().then(() => {
+ console.log("Err: ", err);
+ });
+ }
+ );
+ }
+ gotoAssessment(assessmentGroup, activity) {
+ console.log('activity', activity);
+ this.navCtrl.push(AssessmentsGroupPage, {
+ assessmentGroup,
+ activity,
+ submission: assessmentGroup.submission, // use back the one back from ActivityViewPage
+ submissions: this.submissions,
+ event: this.navParams.get('event')
+ }).then(() => {
+ this.traceAssessmentProgress();
});
}
}
diff --git a/src/pages/assessments/assessments.scss b/src/pages/assessments/assessments.scss
index 8214be31..16c581fd 100644
--- a/src/pages/assessments/assessments.scss
+++ b/src/pages/assessments/assessments.scss
@@ -1,3 +1,9 @@
assessments-page {
+ ion-card.no-box-shadow {
+ box-shadow: none;
+ }
+ .btn-submit[disabled] {
+ display: none;
+ }
}
diff --git a/src/pages/assessments/group/assessments-group.html b/src/pages/assessments/group/assessments-group.html
new file mode 100644
index 00000000..43f8bcd9
--- /dev/null
+++ b/src/pages/assessments/group/assessments-group.html
@@ -0,0 +1,72 @@
+
+
+ Assessment
+
+
+ Save
+
+
+
+
+
+
+
+
+ In Progress
+
+
+
+
+ {{assessmentGroup.name}}
+
+
+
+ 0 && i < questions.length)}">
+
+
+ {{question.name}}
+ *
+
+
+
+
+
+
+
+
{{ submission | json }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/assessments/group/assessments-group.page.ts b/src/pages/assessments/group/assessments-group.page.ts
new file mode 100644
index 00000000..831d3576
--- /dev/null
+++ b/src/pages/assessments/group/assessments-group.page.ts
@@ -0,0 +1,407 @@
+import { Component } from '@angular/core';
+import { NavParams, NavController, AlertController, LoadingController, Events } from 'ionic-angular';
+import { FormBuilder, Validators, FormGroup, FormControl, FormArray } from '@angular/forms';
+import { CacheService } from '../../../shared/cache/cache.service';
+import { ChoiceBase, QuestionBase, Submission, AssessmentService } from '../../../services/assessment.service';
+
+import * as _ from 'lodash';
+
+@Component({
+ selector: 'assessments-group-page',
+ templateUrl: './assessments-group.html',
+})
+export class AssessmentsGroupPage {
+ questions = [];
+ formGroup;
+
+ // used when navigate from event view page
+ event: any;
+
+ //@TODO: decide which one to use
+ activity: any;
+ submission: Submission;
+ assessment: any;
+ assessmentGroup: any;
+ cacheKey: any; // to render & display stored
+
+ canUpdateInput: boolean = false;
+ published: boolean = false;
+ answers: any; // to render & display submitted answers
+ inProgress: boolean | any;
+
+ constructor(
+ private navParams: NavParams,
+ private navCtrl: NavController,
+ private fb: FormBuilder,
+ private cache: CacheService,
+ private assessmentService: AssessmentService,
+ private alertCtrl: AlertController,
+ private loadingCtrl: LoadingController,
+ public events: Events
+ ) {}
+
+ ionViewDidEnter() {
+ // navigate from activity page
+ this.activity = this.navParams.get('activity') || {};
+
+ // navigate from event page
+ this.event = this.navParams.get('event') || {};
+ if (!_.isEmpty(this.event)) {
+ this.activity = this.event;
+ }
+
+ this.assessment = this.activity.assessment; // required for context_id
+ this.cacheKey = `assessment.group.${this.assessment.context_id}`;
+
+ this.assessmentGroup = this.navParams.get('assessmentGroup') || {};
+ this.submission = this.navParams.get('submission') || {};
+
+ console.log('this.assessmentGroup', this.assessmentGroup);
+
+ // preset key used for caching later (locally and remote data)
+ this.canUpdateInput = this.isInputEditable(this.submission);
+ // this.published = this.assessmentService.isPublished(this.submissions);
+ this.questions = this.assessmentGroup.questions;
+ this.questions = this.mapQuestionsFeedback(this.questions, this.submission);
+ this.formGroup = this.retrieveProgress(
+ this.buildFormGroup(this.questions),
+ this.formInProgressAnswer(this.submission)
+ );
+ }
+
+ updateSubmission() {
+ this.events.publish('assessment:changes', {
+ changed: true
+ });
+ }
+
+ /**
+ * @description check answers are editable
+ * Must define submissions first
+ * @type {boolen}
+ */
+ // @TODO modify needed
+ private isInputEditable = (submission):boolean => {
+ if (_.isEmpty(submission) || submission.status === 'in progress') {
+ return true;
+ }
+ return false;
+ // let editable = false;
+ // _.forEach(this.submissions, (submission) => {
+ // if (_.isEmpty(submission)) {
+ // editable = true;
+ // } else {
+ // _.forEach(submission, (subm) => {
+ // if (
+ // subm.AssessmentSubmission &&
+ // subm.AssessmentSubmission.status === 'in progress'
+ // ) {
+ // editable = true;
+ // }
+ // });
+ // }
+ // });
+ // return editable;
+ }
+
+ /**
+ * @description use proper context id based on situation
+ *
+ * @type {array}
+ */
+ // @TODO modify
+ private mapQuestionsFeedback = (questions, submission):any => {
+ if (_.isEmpty(submission) || _.isEmpty(submission.review) || submission.status !== 'published') {
+ return questions;
+ }
+
+ _.forEach(submission.review, (review) => {
+ _.forEach(questions, (question, idx) => {
+ if (review.assessment_question_id === question.id) {
+ // text type
+ if (question.type === 'text') {
+ questions[idx].review_answer = review;
+ }
+
+ // oneof type
+ if (question.type === 'oneof') {
+ questions[idx].review_answer = review;
+ _.forEach(question.choices, (choice, key) => {
+ if (choice.id == review.answer && choice.id == question.answer.answer) {
+ questions[idx].choices[key].name = choice.name + ' (you and reviewer)';
+ }
+ if (choice.id != review.answer && choice.id == question.answer.answer) {
+ questions[idx].choices[key].name = choice.name + ' (you)';
+ }
+ if (choice.id == review.answer && choice.id != question.answer.answer) {
+ questions[idx].choices[key].name = choice.name + ' (reviewer)';
+ }
+ });
+ }
+ }
+ });
+ });
+
+ // _.forEach(submissions, (submission) => {
+ // _.forEach(submission, (subm) => {
+ //
+ // _.forEach(subm.AssessmentReviewAnswer, (reviewAnswer) => {
+ // _.forEach(questions, (question, idx) => {
+ //
+ // if (reviewAnswer.assessment_question_id === question.id) {
+ // // text type
+ // if (question.type === 'text') {
+ // questions[idx].review_answer = reviewAnswer;
+ // }
+ //
+ // // oneof type
+ // if (question.type === 'oneof') {
+ // questions[idx].review_answer = reviewAnswer;
+ // _.forEach(question.choices, (choice, key) => {
+ // if (choice.id == reviewAnswer.answer && choice.id == question.answer.answer) {
+ // questions[idx].choices[key].name = choice.name + ' (you and reviewer)';
+ // }
+ // if (choice.id != reviewAnswer.answer && choice.id == question.answer.answer) {
+ // questions[idx].choices[key].name = choice.name + ' (you)';
+ // }
+ // if (choice.id == reviewAnswer.answer && choice.id != question.answer.answer) {
+ // questions[idx].choices[key].name = choice.name + ' (reviewer)';
+ // }
+ // });
+ // }
+ // }
+ //
+ // });
+ // });
+ // });
+ // });
+ return questions;
+ }
+
+ /**
+ * @description use proper context id based on situation
+ * event's checkin, use event context_id (reference array in get_event)
+ * assessment submission, use context_id from get_activity
+ *
+ * @type {number}
+ */
+ private getSubmissionContext = ():number => {
+ // if event object is available
+ if (this.event) {
+ return this.event.context_id;
+ }
+
+ // if "event" not available, use assessment instead
+ return this.assessment.context_id;
+ }
+
+ /**
+ * check the questions was answered
+ * @return {boolen} passed all check
+ */
+ isAllQuestionsAnswered = () => {
+ let passed = true;
+ _.forEach(this.formGroup, fg => {
+ // check formGroup.validation & each field (answer & comment) validity
+ if (!fg.valid && (!fg.controls.answer.valid && !fg.controls.comment.valid)) {
+ passed = false;
+ }
+ });
+ return passed;
+ };
+
+ /**
+ * turn a collection of questions into angular's FormGroup to share among components
+ * @param {array} questions list of questions from a question group (Assessment group)
+ */
+ buildFormGroup = (questions) => {
+ let result: any = {};
+
+ this.questions.forEach(question => {
+ let currentAnswer = question.answer || {};
+ let group = {
+ answer: question.required ?
+ new FormControl(currentAnswer.answer || '', Validators.required) : new FormControl(currentAnswer.answer || ''),
+ comment: question.required ?
+ new FormControl(currentAnswer.comment || '', Validators.required) : new FormControl(currentAnswer.comment || '')
+ };
+
+ // render choices' FormGroup
+ let choices = {};
+ if (question.choices && question.type === 'multiple') {
+ question.choices.forEach(choice => {
+ let answer = (question.choices) ? question.choices[choice.id] : false;
+ choices[choice.id] = new FormControl(answer);
+ });
+ group['choices'] = new FormGroup(choices);
+ }
+
+ result[question.id] = new FormGroup(group);
+ });
+
+ console.log('this.group', this.group)
+
+ /**
+ * turn answer into answer submission format (which is formatted for POST to post_assessment API)
+ * @param {object} submission single submission object retrieve from previous page/view
+ * @return {object} formatted submission answer
+ */
+ private formInProgressAnswer(submission): boolean | Submission {
+ if (_.isEmpty(submission)) {
+ return false;
+ }
+
+ let answers = {};
+ submission.answer.forEach(ans => {
+ answers[ans.assessment_question_id] = {
+ assessment_question_id: ans.assessment_question_id,
+ answer: ans.comment || ans.answer
+ }
+ });
+
+ return {
+ Assessment: {
+ id: submission.assessment_id,
+ context_id: this.getSubmissionContext()
+ },
+ AssessmentSubmissionAnswer: answers
+ };
+ }
+
+ /**
+ * @description store assessment answer/progress locally
+ */
+ storeProgress = () => {
+ let answers = {};
+ _.forEach(this.formGroup, (question, id) => {
+ let values = question.getRawValue(),
+ answer = {
+ assessment_question_id: id,
+ answer: values.answer || values.comment,
+
+ // store it if choice answer is available or skip
+ choices: (!_.isEmpty(values.choices)) ? values.choices : null
+ };
+
+ // set empty string to remove answer
+ answer.answer = (answer.answer) ? answer.answer : '';
+ answers[id] = answer;
+ });
+
+ // final step - store submission locally
+ let submission = {
+ Assessment: {
+ id: this.activity.assessment.id,
+ context_id: this.activity.assessment.context_id
+ },
+ AssessmentSubmissionAnswer: answers
+ };
+ this.submission = submission;
+
+ // local cache key
+ this.cache.setLocal(this.cacheKey, JSON.stringify(submission));
+ return submission;
+ };
+
+ /**
+ * @description retrieve saved progress from localStorage
+ */
+ retrieveProgress = (questions: Array, answers?) => {
+ let cachedProgress = answers || {}; //this.cache.getLocalObject(this.cacheKey);
+
+ let newQuestions = questions;
+ let savedProgress = cachedProgress.AssessmentSubmissionAnswer;
+
+ if (!_.isEmpty(savedProgress)) {
+
+ // index "id" is set as question.id in @Function buildFormGroup above
+ _.forEach(newQuestions, (question, id) => {
+ // check integrity of saved answer (question might get updated)
+ if (savedProgress[id] && savedProgress[id].assessment_question_id == id) {
+ newQuestions[id] = this.setValueWith(question, savedProgress[id]);
+ }
+ });
+ }
+ return newQuestions;
+ };
+
+ /**
+ * @description set value to each FormControl differently based on type:
+ * - "text", "oneof" & "file" using just "answer" field
+ * - "multiple" answer is stored into "choices" FormControl instead
+ * @param {FormGroup} question FormGroup for a question
+ * @param {Object} answers answer [choices object || string answer]
+ */
+ private setValueWith(question, answers) {
+ if (!_.isEmpty(answers.choices)) {
+ question.controls.choices.setValue(answers.choices);
+ } else {
+ question.controls.answer.setValue(answers.answer || '');
+ }
+ return question;
+ }
+
+ displayAlert(opts) {
+ return this.alertCtrl.create(opts);
+ }
+
+ /**
+ * @description initiate save progress and return to previous page/navigation stack
+ */
+ save() {
+ let self = this,
+ loading = this.loadingCtrl.create({
+ content: 'Loading...'
+ }),
+ // to provide a more descriptive error message (if available)
+ failAlert = this.alertCtrl.create({
+ title: 'Fail to submit.'
+ });
+
+ let saveProgress = () => {
+ this.updateSubmission();
+
+ loading.present().then(() => {
+ self.assessmentService.save(self.storeProgress()).subscribe(
+ response => {
+ loading.dismiss().then(() => {
+ self.navCtrl.pop();
+ });
+ },
+ reject => {
+ loading.dismiss().then(() => {
+ failAlert.data.title = reject.msg || failAlert.data.title;
+ failAlert.present().then(() => {
+ console.log('Unable to save', reject);
+ });
+ });
+ }
+ );
+ });
+ };
+
+ let confirmBox = this.alertCtrl.create({
+ message: 'You have not completed all required questions. Do you still wish to Save?',
+ buttons: [
+ {
+ text: 'Yes',
+ handler: () => {
+ saveProgress();
+ }
+ },
+ {
+ text: 'No',
+ handler: () => {
+ //return false;
+ }
+ }
+ ]
+ });
+
+ if (!this.isAllQuestionsAnswered()) {
+ confirmBox.present();
+ } else {
+ saveProgress();
+ }
+ }
+}
diff --git a/src/pages/assessments/group/assessments-group.scss b/src/pages/assessments/group/assessments-group.scss
new file mode 100644
index 00000000..b2f588da
--- /dev/null
+++ b/src/pages/assessments/group/assessments-group.scss
@@ -0,0 +1,5 @@
+assessments-group-page {
+ .btn-save[disabled] {
+ display: none;
+ }
+}
diff --git a/src/pages/assessments/popup/items-popup.html b/src/pages/assessments/popup/items-popup.html
new file mode 100644
index 00000000..9f1ef8c1
--- /dev/null
+++ b/src/pages/assessments/popup/items-popup.html
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+ Items Popup
+ ×
+
+
+
+
+
+
diff --git a/src/pages/assessments/popup/items-popup.page.ts b/src/pages/assessments/popup/items-popup.page.ts
new file mode 100644
index 00000000..a3a800d1
--- /dev/null
+++ b/src/pages/assessments/popup/items-popup.page.ts
@@ -0,0 +1,46 @@
+import { Component, Injectable } from '@angular/core';
+import { ViewController, LoadingController, NavParams, NavController } from 'ionic-angular';
+
+import { i18nData } from '../../../app/i18n-en';
+import { loadingMessages, errMessages } from '../../../app/messages';
+import * as _ from 'lodash';
+// services
+import { CacheService } from '../../../shared/cache/cache.service';
+import { TranslateService } from '@ngx-translate/core';
+// pages
+import { TabsPage } from '../../../pages/tabs/tabs.page';
+@Injectable()
+@Component({
+ selector: 'items-popup',
+ templateUrl: 'items-popup.html'
+})
+export class ItemsPopupPage {
+ public combinedData: any = [];
+ // public pageTitle: string = '';
+ // public noData: boolean = null;
+ public loadingMessage: any = loadingMessages.LoadingSpinner.loading;
+ constructor(
+ private viewCtrl: ViewController,
+ private navCtrl: NavController,
+ private navParams: NavParams,
+ private loadingCtrl: LoadingController,
+ public cacheService: CacheService,
+ public translationService: TranslateService
+ ) {}
+ ionViewWillEnter(){
+ // if (this.cacheService.getLocal('isEventSubmission') == 'true') {
+ // this.pageTitle = 'Checkin Successful!';
+ // }else {
+ // this.pageTitle = 'Submit Success!';
+ // }
+ // this.combinedData = this.navParams.get('combined');
+ this.combinedData = this.cacheService.getLocalObject('allNewItems');
+ console.log("Final final popup combined data: ", this.combinedData);
+ // return this.combinedData.length == 0 ? this.noData = true : this.noData = false
+ }
+ // close disbaled activity popup
+ closeModal() {
+ this.viewCtrl.dismiss();
+ this.navCtrl.setRoot(TabsPage);
+ }
+}
diff --git a/src/pages/events/checkin/event-checkin.html b/src/pages/events/checkin/event-checkin.html
index 8a85d4af..e1a41c80 100644
--- a/src/pages/events/checkin/event-checkin.html
+++ b/src/pages/events/checkin/event-checkin.html
@@ -1,27 +1,28 @@
-
+
+
+
+ {{ event.title }}
+
+
+
+ {{ event.location }}
+ {{ event.startDisplay }}
+
+
+
+
+
+
+
+ {{ user.name | ucfirst }}
+
+
+
+
diff --git a/src/pages/events/checkin/event-checkin.html_bak b/src/pages/events/checkin/event-checkin.html_bak
new file mode 100644
index 00000000..8a85d4af
--- /dev/null
+++ b/src/pages/events/checkin/event-checkin.html_bak
@@ -0,0 +1,27 @@
+
diff --git a/src/pages/events/checkin/event-checkin.page.ts b/src/pages/events/checkin/event-checkin.page.ts
index 71ae3bb8..beb35d3b 100644
--- a/src/pages/events/checkin/event-checkin.page.ts
+++ b/src/pages/events/checkin/event-checkin.page.ts
@@ -1,25 +1,59 @@
import { Component } from '@angular/core';
import { NavParams, NavController, LoadingController } from 'ionic-angular';
-import * as moment from 'moment';
// services
import { CacheService } from '../../../shared/cache/cache.service';
import { EventService } from '../../../services/event.service';
+import { AssessmentService } from '../../../services/assessment.service';
+
+import * as moment from 'moment';
+
@Component({
selector: 'page-event-checkin',
templateUrl: './event-checkin.html',
})
export class EventCheckinPage {
public event: any;
+ public submissions: any;
+ public assessment;
+ public assessmentGroup;
+ private user: any = {};
+ public checkin: any = {};
+
constructor(
- private params: NavParams,
- private nav: NavController,
+ private navParams: NavParams,
+ private navCtrl: NavController,
private cache: CacheService,
private eventService: EventService,
- private loadingCtrl: LoadingController,){
- // this.event = params.get('event');
+ private assessmentService: AssessmentService,
+ private loadingCtrl: LoadingController
+ ) {
+ this.event = navParams.get('event');
+ this.submissions = navParams.get('submissions');
+ this.assessment = navParams.get('assessment');
+ this.assessmentGroup = navParams.get('assessmentGroup');
+ }
+
+ ionViewDidEnter() {
+ this.checkin = this.getCheckinAnswer(this.submissions[0]); // event checkin has just single submission
+ this.assessment = this.assessmentService.normaliseGroup(this.assessmentGroup);
+ this.user = this.cache.getLocalObject('user');
+ }
+
+ // Only checkin/file upload answer is displayed in check-in view
+ private getCheckinAnswer(submission) {
+ let result = {};
+ submission.answer.forEach(ans => {
+ if (typeof ans.answer === 'object') {
+ result = ans;
+ }
+ });
+
+ return result;
}
- ionViewDidEnter(){
- // this.event = this.params.get('event');
- // console.log("Event Data:", this.event);
+
+ injectAssessmentToAnswer() {
+ this.assessmentGroup.forEach(group => {
+ console.log(group);
+ });
}
}
diff --git a/src/pages/events/download/events-download.page.ts b/src/pages/events/download/events-download.page.ts
index a9e48c5b..ff6cc0f5 100644
--- a/src/pages/events/download/events-download.page.ts
+++ b/src/pages/events/download/events-download.page.ts
@@ -2,7 +2,7 @@ import { Component } from '@angular/core';
import { NavController, NavParams } from 'ionic-angular';
import { FilestackService } from '../../../shared/filestack/filestack.service';
import { EventsPreviewPage } from './events-preview.page';
-
+import { UtilsService } from '../../../shared/utils/utils.service';
import { WindowRef } from '../../../shared/window';
@Component({
@@ -16,7 +16,8 @@ export class EventsDownloadPage {
private navCtrl: NavController,
private params: NavParams,
private fs: FilestackService,
- private win: WindowRef
+ private win: WindowRef,
+ private utils: UtilsService
) {
}
@@ -33,50 +34,7 @@ export class EventsDownloadPage {
this.files.map(file => {
// zip file type is not viewable in filestack preview
- if ([
- 'application/x-compressed',
- 'application/x-zip-compressed',
- 'application/zip',
- 'multipart/x-zip',
- ].indexOf(file.type) >= 0) {
- file.icon = 'fa-zip';
-
- // set icon to different document type (excel, word, powerpoint, audio, video)
- } else if (file.type.indexOf('audio/') >= 0) {
- file.icon = 'fa-sound';
- } else if (file.type.indexOf('image/') >= 0) {
- file.icon = 'fa-image';
- } else if (file.type.indexOf('text/') >= 0) {
- file.icon = 'fa-text';
- } else if (file.type.indexOf('video/') >= 0) {
- file.icon = 'fa-movie';
- } else {
- switch (file.type) {
- case 'application/pdf':
- file.icon = 'fa-pdf';
- break;
- case 'application/msword':
- case 'application/vnd.openxmlformats-officedocument.wordprocessingml.document':
- file.icon = 'fa-word';
- break;
- case 'application/excel':
- case 'application/vnd.ms-excel':
- case 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet':
- case 'application/x-excel':
- case 'application/x-msexcel':
- file.icon = 'fa-excel';
- break;
- case 'application/mspowerpoint':
- case 'application/vnd.ms-powerpoint':
- case 'application/vnd.openxmlformats-officedocument.presentationml.presentation':
- case 'application/x-mspowerpoint':
- file.icon = 'fa-powerpoint';
- break;
- default:
- file.icon = 'fa-file';
- break;
- }
- }
+ file.icon = this.utils.getIcon(file.type)
});
}
@@ -87,43 +45,11 @@ export class EventsDownloadPage {
* @param {object} file single file from files array return from get_events in event list page
*/
view(file) {
- if ([
- 'application/x-compressed',
- 'application/x-zip-compressed',
- 'application/zip',
- 'multipart/x-zip',
- ].indexOf(file.type) >= 0) {
+ if (this.utils.isCompressed(file.type)) {
let win = this.win.nativeWindow;
let openedWindow = win.open(file.url, '_blank');
} else {
this.navCtrl.push(EventsPreviewPage, {file: file});
}
}
-
- /**
- * @TODO: move to some where it's necessary
- * @description temporary/development purpose file picker for file upload
- */
- pick() {
- /*{
- "handle": "vM9Vi9FTVi7VsDRJclR3",
- "url": "https://cdn.filestackcontent.com/vM9Vi9FTVi7VsDRJclR3",
- "filename": "Image uploaded from iOS.jpg",
- "size": 1701895,
- "mimetype": "image/jpeg",
- "status": "Stored"
- }*/
-
- this.fs.pick({
- accept: 'image/*',
- maxFiles: 5,
- storeTo: {
- location: 's3'
- }
- }).then(res => {
- console.log(res);
- }, err => {
- console.log(err);
- });
- }
}
diff --git a/src/pages/events/list/list.html b/src/pages/events/list/list.html
index 71a071be..b16665e2 100644
--- a/src/pages/events/list/list.html
+++ b/src/pages/events/list/list.html
@@ -1,6 +1,6 @@
- Events
+ {{ 'EVENTS.PAGETITLE' | translate }}
@@ -16,13 +16,13 @@
- Browse
+ {{ 'EVENTS.BROWSE' | translate }}
- My Bookings
+ {{ 'EVENTS.MYBOOKINGS' | translate }}
- Attended
+ {{ 'EVENTS.ATTENDED' | translate }}
@@ -31,13 +31,13 @@
- There are no scheduled events available. Please check back later.
+ {{ emptyFilterErrMessage }}
- You have no bookings. Tap on "Browse" and book an event now to enhance your skills.
+ {{ noBookingsFilterErrMessage }}
- You have not attended any events yet.
+ {{ noAttendedFilterErrMessage }}
diff --git a/src/pages/events/list/list.page.ts b/src/pages/events/list/list.page.ts
index ceff9dfd..9f046ca9 100644
--- a/src/pages/events/list/list.page.ts
+++ b/src/pages/events/list/list.page.ts
@@ -1,32 +1,35 @@
import { Component } from '@angular/core';
import { NavController, LoadingController } from 'ionic-angular';
-
+import * as moment from 'moment';
+import * as _ from 'lodash';
+import { loadingMessages, errMessages } from '../../../app/messages';
+// services
import { ActivityService } from '../../../services/activity.service';
import { EventService } from '../../../services/event.service';
+// pages
import { EventsViewPage } from '../view/events-view.page';
-import * as moment from 'moment';
-import * as _ from 'lodash';
-
@Component({
selector: 'events-list-page',
templateUrl: 'list.html'
})
export class EventsListPage {
-
+ // loading & error message variables
+ private emptyFilterErrMessage = errMessages.Events.filter.empty;
+ private noBookingsFilterErrMessage = errMessages.Events.filter.noBookings;
+ private noAttendedFilterErrMessage = errMessages.Events.filter.noAttended;
constructor(
public navCtrl: NavController,
public eventService: EventService,
public activityService: ActivityService,
public loadingCtrl: LoadingController,
- ) {
- }
+ ) {}
- loadedEvents = [];
- events = [];
+ activities = {};
+ private loadedEvents = []; // Further processed events array, for private use
+ events = []; // ordered events array in filterEvents and to be access through template
noEvents = false;
filter = 'browses';
-
/**
* @name filterEvents
* @description filter and group events into 3 catergories (attended, my-bookings, browses)
@@ -52,15 +55,14 @@ export class EventsListPage {
case 'browses':
// List all not booked and not ended event in order of start time (asc)
this.events = _.orderBy(_.filter(this.loadedEvents, (event) => {
- return (moment(event.end).isAfter() && event.isBooked === false);
+ // return (moment(event.end).isAfter() && event.isBooked === false);
+ return (moment().isBefore(moment(event.end)) && event.isBooked === false);
}), 'start', 'asc');
break;
}
-
if (this.events.length === 0) {
this.noEvents = true;
}
-
return this.events;
}
@@ -75,38 +77,38 @@ export class EventsListPage {
return (this.noEvents);
}
-
+ /**
+ * @name loadEvents
+ * @description retrieve events (from get_events) with a list of activity_id (from get_activity)
+ * @return {Promise}
+ */
loadEvents(): Promise {
return new Promise((resolve, reject) => {
-
// Get activities IDs
- this.activityService.getList()
- .toPromise()
+ this.activityService.getList().toPromise()
.then((activities) => {
+ this.activities = {};
let activityIDs = [];
_.forEach(activities, (act) => {
+ this.activities[act.Activity.id] = act;
activityIDs.push(act.Activity.id);
});
// Get event by activityIDs
this.eventService.getEvents({
search: {
- activity_id: '[' + _.toString(activityIDs) + ']'
+ activity_id: '[' + _.toString(activityIDs) + ']',
+ type: 'session'
}
})
.then((events) => {
- // After map event with activities,
- // assign events to 'events' and 'loadedEvents'
-
- // loadedEvents will never change,
- // it use to filtering events.
- this.loadedEvents = this._injectCover(
- this._mapWithActivity(events, activities)
- );
+ console.log('events', events);
+ // loadedEvents will never change (private use),
+ // it will be used for filtering of events (prep for display/template variable).
+ this.loadedEvents = this._injectCover(this._mapWithActivity(events));
// events use to rendering on page
this.events = _.clone(this.loadedEvents);
-
this.filterEvents();
return resolve();
}, reject);
@@ -118,8 +120,7 @@ export class EventsListPage {
let loader = this.loadingCtrl.create();
loader.present().then(() => {
- this.loadEvents()
- .then(() => {
+ this.loadEvents().then(() => {
loader.dismiss();
})
.catch((err) => {
@@ -130,8 +131,7 @@ export class EventsListPage {
}
doRefresh(e) {
- this.loadEvents()
- .then(() => {
+ this.loadEvents().then(() => {
e.complete();
})
.catch((err) => {
@@ -139,7 +139,6 @@ export class EventsListPage {
e.complete();
});
}
-
/**
* @TODO: remove this once we decided to remove hardcoded images, big size picture is ruining UX because it induces long download time
*
@@ -158,23 +157,26 @@ export class EventsListPage {
return events;
}
- private _mapWithActivity(events, activities) {
+ /**
+ * @name _mapWithActivity
+ * @description
+ * - attach "activity" object into each of single "event" object
+ * - Extract and merge event-activity only
+ * - skip non-event activities
+ * @param {array} events get_events response
+ */
+ private _mapWithActivity(events) {
let result = [];
- events.forEach((event, key) => {
- let activity = _.find(activities, (actv) => {
- return actv.Activity.id === event.activity_id
- });
-
- if (activity) {
- events[key].activity = activity.Activity;
- }
+ events.forEach(event => {
+ let thisActivity = this.activities[event.activity_id];
+ thisActivity.References = event.References; // must use event's references
+ event.activity = this.activityService.normaliseActivity(thisActivity);
result.push(event);
});
return result;
}
-
// Check event allow to check-in
allowCheckIn(event) {
console.log('event', event);
@@ -182,12 +184,9 @@ export class EventsListPage {
}
view(event) {
- /*if (this.allowCheckIn(event)) {
- alert('Going to check-in page...');
- } else {
- alert('This event not allow to check-in...');
- }*/
console.log(event);
- this.navCtrl.push(EventsViewPage, {event: event});
+ this.navCtrl.push(EventsViewPage, {
+ event
+ });
}
}
diff --git a/src/pages/events/view/events-view.html b/src/pages/events/view/events-view.html
index 9f8919bb..3da06265 100644
--- a/src/pages/events/view/events-view.html
+++ b/src/pages/events/view/events-view.html
@@ -27,22 +27,33 @@
{{ event.description || 'No description available.' }}
-
- Download
+ 0">
+ {{ 'GENERAL.DOWNLOAD' | translate }}
{{ bookingStatus }}
-
+
+
+
+
+
- Book
+ {{ 'EVENTS.BOOK' | translate }}
-
- Check-in
+
+
+
+ {{ 'EVENTS.VIEWCHECKIN' | translate }}
+
+
+ {{ 'EVENTS.CHECKIN' | translate }}
+
-
- Cancel Booking
+
+
+ {{ 'EVENTS.CANCELBOOKING' | translate }}
diff --git a/src/pages/events/view/events-view.page.ts b/src/pages/events/view/events-view.page.ts
index 0a10140f..efdd438e 100755
--- a/src/pages/events/view/events-view.page.ts
+++ b/src/pages/events/view/events-view.page.ts
@@ -1,12 +1,23 @@
import { Component, Output, EventEmitter } from '@angular/core';
import { Tabs, NavParams, NavController, AlertController, LoadingController, ActionSheetController, ToastController } from 'ionic-angular';
+import { loadingMessages, errMessages } from '../../../app/messages';
+import { TranslationService } from '../../../shared/translation/translation.service';
// services
import { CacheService } from '../../../shared/cache/cache.service';
import { EventService } from '../../../services/event.service';
+import { AssessmentService } from '../../../services/assessment.service';
+import { SubmissionService } from '../../../services/submission.service';
+
// pages
import { EventsListPage } from '../list/list.page';
import { EventsDownloadPage } from '../download/events-download.page';
+import { AssessmentsPage } from '../../assessments/assessments.page';
+import { AssessmentsGroupPage } from '../../assessments/group/assessments-group.page';
import { EventCheckinPage } from '../checkin/event-checkin.page';
+
+// We no need custom page for checkin anymore
+// import { EventCheckinPage } from '../checkin/event-checkin.page';
+
import * as moment from 'moment';
const terms = {
@@ -16,46 +27,103 @@ const terms = {
templateUrl: './events-view.html'
})
export class EventsViewPage {
- public event: any;
+ public loadings = {
+ checkin: true
+ };
+ public event: any = {};
public bookingStatus: string = '';
public justBooked: boolean = false;
public booked_text: string = 'Booked';
+ public bookEventErrMessage: any = errMessages.Events.bookEvents.book;
+ public cancelBookingErrMessage: any = errMessages.Events.cancelBooking.cancel;
+ public completedSubmissions: boolean = false;
+ private submissions: Array = [];
+
constructor(
- private params: NavParams,
- private nav: NavController,
+ private navParams: NavParams,
+ private navCtrl: NavController,
private cache: CacheService,
private eventService: EventService,
+ public translationService: TranslationService,
private alertCtrl: AlertController,
private loadingCtrl: LoadingController,
private actionSheetCtrl: ActionSheetController,
private toastCtrl: ToastController,
- private tab: Tabs
+ private assessmentService: AssessmentService,
+ private submissionService: SubmissionService
) {
- this.event = params.get('event');
+ this.event = navParams.get('event');
}
+
private availability(event): string {
return (event.isBooked)? terms.booked : event.remaining_capacity + ' of ' + event.capacity + ' seats available';
}
- ionViewDidEnter() {
- this.event = this.params.get('event');
- console.log('ionViewDidEnter', this.event);
+
+ ionViewWillEnter() {
+ this.loadings.checkin = true;
+ this.submissions = []; // reset submissions
+
+ if (this.event.References) {
+ this.event = Object.assign(this.event, this.extractAssessment(this.event.References));
+ }
+
if (this.event) {
this.bookingStatus = this.availability(this.event);
}
}
+
+ ionViewDidEnter() {
+ this.completedSubmissions = false;
+ this.submissionService.getSubmissions({
+ search: {
+ context_id: this.event.context_id
+ }
+ }).subscribe(res => {
+ this.loadings.checkin = false;
+ res.forEach(submission => {
+ submission = this.submissionService.normalise(submission);
+ console.log(submission);
+ this.submissions.push(submission);
+ if (submission.status === 'done') {
+ this.completedSubmissions = true;
+ }
+ });
+ }, err => {
+ this.loadings.checkin = false;
+ console.log(err);
+ });
+ }
+
+ /**
+ * @name extractAssessment
+ * @description each event has only one assessment
+ * @param {Array} references References array response from get_activity API
+ */
+ private extractAssessment(references: Array) {
+ let ref = references[0];
+ ref.Assessment.context_id = ref.context_id;
+
+ return {
+ assessment: ref.Assessment,
+ context_id: ref.context_id
+ };
+ }
+
/**
* Push Download page to ionic nav stack (navigate to attachment download page)
*/
gotoDownload(event) {
- this.nav.push(EventsDownloadPage, {event});
+ this.navCtrl.push(EventsDownloadPage, {event});
}
+
/**
* Event booking function
* @param {object} event Single event object from get_events API response
*/
- checkBookStatus(){
+ checkBookStatus() {
return false ? (this.event.remaining_capacity == this.event.capacity && this.event.isBooked == false) : (this.event.remaining_capacity != this.event.capacity && this.event.isBooked == true)
}
+
book(event): void {
let earnPoints = this.alertCtrl.create({
message: `Congratulations! You have earned 20 points.
`,
@@ -69,12 +137,13 @@ export class EventsViewPage {
}
]
});
+
let bookLoading = this.loadingCtrl.create({
content: 'Booking ..'
});
let bookFailed = this.toastCtrl.create({
- message: 'Sorry, book event process is failed, please try it again later.',
- duration: 4000,
+ message: this.bookEventErrMessage,
+ duration: 5000,
position: 'bottom'
});
let bookPopup = this.actionSheetCtrl.create({
@@ -100,7 +169,7 @@ export class EventsViewPage {
this.booked_text;
}
bookLoading.dismiss().then(() => {
- this.nav.popToRoot(EventsListPage);
+ this.navCtrl.popToRoot(EventsListPage);
});
},
err => {
@@ -115,24 +184,53 @@ export class EventsViewPage {
});
bookPopup.present();
}
+
+ /**
+ * @note existence of References array determines if an event is
+ * a checkin type
+ * @description examine event to allow check in
+ * @param {Object} event
+ */
+ allowCheckIn(event) {
+ if (event.References && event.References.length > 0) {
+ return true;
+ }
+ return false;
+ }
+
/**
* Event checkin action
- * @param
+ * @param {Object} event single event object return from get_event API
*/
- checkin(){
- // this.nav.push(EventCheckinPage, {event: this.event});
+ checkin(event) {
+ let loading = this.loadingCtrl.create({
+ content: 'loading checkin...'
+ });
+ loading.present().then(() => {
+ // if submission exist
+ console.log(this.submissions);
+ loading.dismiss().then(() => {
+ // this.navCtrl.push(AssessmentsGroupPage, {
+ this.navCtrl.push(AssessmentsPage, {
+ event,
+ activity: event.activity,
+ submissions: this.submissions
+ });
+ });
+ })
}
+
/**
* Event cancel booking action
* @param
*/
- cancelBooking(){
+ cancelBooking() {
let cancelLoading = this.loadingCtrl.create({
content: 'Cancel Booking ..'
});
let cancelFailed = this.toastCtrl.create({
- message: 'Sorry, cancel event process is failed, please try it again later.',
- duration: 4000,
+ message: this.cancelBookingErrMessage,
+ duration: 5000,
position: 'bottom'
});
let cancelBooking = this.actionSheetCtrl.create({
@@ -144,25 +242,25 @@ export class EventsViewPage {
handler: () => {
cancelLoading.present();
this.eventService.cancelEventBooking(this.event.id)
- .subscribe(
- data => {
- cancelLoading.dismiss().then(() => {
- this.nav.popToRoot(EventsListPage);
- });
- },
- err => {
- cancelLoading.dismiss().then(() => {
- cancelFailed.present();
- });
- }
- )
+ .subscribe(
+ data => {
+ cancelLoading.dismiss().then(() => {
+ this.navCtrl.popToRoot(EventsListPage);
+ });
+ },
+ err => {
+ cancelLoading.dismiss().then(() => {
+ cancelFailed.present();
+ });
+ }
+ )
}
},
{
text: 'Close',
role: 'cancel',
handler: () => {
- console.log('Close this window ..');
+ // console.log('Close this window ..');
}
}
]
diff --git a/src/pages/forget-password/forget-password.html b/src/pages/forget-password/forget-password.html
index bbfd099b..23497c4c 100644
--- a/src/pages/forget-password/forget-password.html
+++ b/src/pages/forget-password/forget-password.html
@@ -1,12 +1,12 @@
- Forgot Password
+ {{ 'FORGOTPASSWORD.PAGETITLE' | translate }}
- Please enter your email address to reset password
+ {{ 'FORGOTPASSWORD.INPUTTITLE' | translate }}
diff --git a/src/pages/forget-password/forget-password.ts b/src/pages/forget-password/forget-password.ts
index 3c502cd1..91e5f21c 100644
--- a/src/pages/forget-password/forget-password.ts
+++ b/src/pages/forget-password/forget-password.ts
@@ -7,6 +7,8 @@ import { NavController,
import { FormBuilder, Validators } from '@angular/forms';
import { Observable } from 'rxjs/Observable';
import 'rxjs/Rx';
+import { TranslationService } from '../../shared/translation/translation.service';
+import { loadingMessages, errMessages } from '../../app/messages';
// services
import { AuthService } from '../../services/auth.service';
// directives
@@ -18,29 +20,34 @@ import {FormValidator} from '../../validators/formValidator';
export class ForgetPasswordPage {
email: string;
forgotPwdFormGroup: any;
+ // loading & error message variables
+ private sendingEmailLoadingMessage = loadingMessages.SendingEmail.send;
+ private sentEmailMessagePartOne = loadingMessages.SentMessage.partOne;
+ private sentEmailMessagePartTwo = loadingMessages.SentMessage.partTwo;
constructor(
private navCtrl: NavController,
private navParams: NavParams,
private loadingCtrl: LoadingController,
private alertCtrl: AlertController,
+ public translationService: TranslationService,
private authService: AuthService,
private toastCtrl: ToastController,
private formBuilder: FormBuilder) {
- this.forgotPwdFormGroup = formBuilder.group({
- email: ['', [FormValidator.isValidEmail,
- Validators.required]],
- });
- }
+ this.forgotPwdFormGroup = formBuilder.group({
+ email: ['', [FormValidator.isValidEmail,
+ Validators.required]],
+ });
+ }
ionViewDidLoad() {
console.log('ionViewDidLoad ForgetPasswordPage');
}
userForgotPassword(){
const loading = this.loadingCtrl.create({
dismissOnPageChange: true,
- content: 'Sending email to us ..'
+ content: this.sendingEmailLoadingMessage
});
- let defaultMsg = `We have sent an email to ${this.email} with a link to log into the system - please check your inbox. If you haven't received an email in a few minutes please check the address you entered and your spam folder.`;
+ let defaultMsg = this.sentEmailMessagePartOne + ` ${this.email} ` + this.sentEmailMessagePartTwo;
loading.present();
// This part is calling post_forget_password() API from backend
diff --git a/src/pages/gallery/gallery.html b/src/pages/gallery/gallery.html
index 69f164ee..b1b198fc 100644
--- a/src/pages/gallery/gallery.html
+++ b/src/pages/gallery/gallery.html
@@ -13,7 +13,7 @@
-
+
{{ avatarName }} `
diff --git a/src/pages/home/home.html b/src/pages/home/home.html
deleted file mode 100644
index 6bf0be27..00000000
--- a/src/pages/home/home.html
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
- My Score
-
-
-
-
-
-
-
- Request Test
-
diff --git a/src/pages/home/home.scss b/src/pages/home/home.scss
deleted file mode 100644
index d4cc8fc1..00000000
--- a/src/pages/home/home.scss
+++ /dev/null
@@ -1,3 +0,0 @@
-page-home {
-
-}
diff --git a/src/pages/home/home.ts b/src/pages/home/home.ts
deleted file mode 100644
index 74023e10..00000000
--- a/src/pages/home/home.ts
+++ /dev/null
@@ -1,17 +0,0 @@
-import { Component } from '@angular/core';
-import { URLSearchParams } from '@angular/http';
-import { NavController } from 'ionic-angular';
-import { RequestService } from '../../shared/request/request.service';
-
-@Component({
- selector: 'home-page',
- templateUrl: 'home.html',
-})
-export class HomePage {
-
- constructor(
- public navCtrl: NavController,
- private request: RequestService
- ) {
- }
-}
diff --git a/src/pages/login-modal/login-modal.html b/src/pages/login-modal/login-modal.html
index a3877b5a..1c917f9d 100644
--- a/src/pages/login-modal/login-modal.html
+++ b/src/pages/login-modal/login-modal.html
@@ -2,15 +2,9 @@
-
- Login
-
-
-
-
- ×
-
-
+
+ {{ 'LOGIN.PAGETITLE' | translate }}
+ ×
@@ -43,12 +37,12 @@
color="button"
(click)="userLogin()"
[disabled]="loginForm.invalid">
- LOGIN
+ {{ 'LOGIN.PAGETITLE' | translate }}
- Forget Your Password?
+ {{ 'LOGIN.PASSWORDFORGOT' | translate }}
diff --git a/src/pages/login-modal/login-modal.ts b/src/pages/login-modal/login-modal.ts
index 687deff9..4529f276 100644
--- a/src/pages/login-modal/login-modal.ts
+++ b/src/pages/login-modal/login-modal.ts
@@ -8,19 +8,22 @@ import { NavController,
import { FormBuilder, Validators } from '@angular/forms';
import { Injectable } from '@angular/core';
import { Observable } from 'rxjs/Observable';
+import * as _ from 'lodash';
+import { TranslationService } from '../../shared/translation/translation.service';
+import { loadingMessages, errMessages } from '../../app/messages';
// services
import { AuthService } from '../../services/auth.service';
import { MilestoneService } from '../../services/milestone.service';
+import { GameService } from '../../services/game.service';
import { CacheService } from '../../shared/cache/cache.service';
+import { GameService } from '../../services/game.service';
import { RequestServiceConfig } from '../../shared/request/request.service';
-
// directives
import {FormValidator} from '../../validators/formValidator';
// pages
import { TabsPage } from '../../pages/tabs/tabs.page';
import { LoginPage } from '../../pages/login/login';
import { ForgetPasswordPage } from '../../pages/forget-password/forget-password';
-import * as _ from 'lodash';
/* This page is for handling user login process */
@Component({
selector: 'page-login-modal',
@@ -35,6 +38,8 @@ export class LoginModalPage {
milestone_id: string;
loginFormGroup: any;
forgetpasswordPage = ForgetPasswordPage;
+ public loginLoadingMessages: any = loadingMessages.Login.login;
+ public invalidLoginMessage: any = errMessages.Login.login;
constructor(
private navCtrl: NavController,
private navParams: NavParams,
@@ -43,11 +48,13 @@ export class LoginModalPage {
private modalCtrl: ModalController,
private viewCtrl: ViewController,
private authService: AuthService,
+ private gameService: GameService,
+ public translationService: TranslationService,
private config: RequestServiceConfig,
private formBuilder: FormBuilder,
private milestoneService: MilestoneService,
private cacheService: CacheService,
- private ngZone: NgZone
+ private ngZone: NgZone,
) {
this.navCtrl = navCtrl;
this.loginFormGroup = formBuilder.group({
@@ -75,29 +82,57 @@ export class LoginModalPage {
// add loading effect during login process
const loading = this.loadingCtrl.create({
dismissOnPageChange: true,
- content: 'Logging in ..'
+ content: this.loginLoadingMessages
});
loading.present();
// This part is calling post_auth() API from backend
this.authService.loginAuth(this.email, this.password)
.subscribe(data => {
+ data = data.data;
// this.getLogInData(data);
self.cacheService.setLocalObject('apikey', data.apikey);
// saved for 3 types of timeline id in order for later use
self.cacheService.setLocalObject('timelineId', data.Timelines[0].Timeline.id);
self.cacheService.setLocalObject('timelineID', data.Timelines[0].Timeline.id);
self.cacheService.setLocalObject('teams', data.Teams);
+ self.cacheService.setLocal('gotNewItems', false);
+ // get game_id data after login
+ this.gameService.getGames()
+ .subscribe(
+ data => {
+ console.log("game data: ", data);
+ _.map(data, (element) => {
+ console.log("game id: ", element[0].id);
+ this.cacheService.setLocal('game_id', element[0].id);
+ });
+ },
+ err => {
+ console.log("game err: ", err);
+ }
+ );
// get milestone data after login
this.authService.getUser()
.subscribe(
data => {
+ self.cacheService.setLocalObject('name', data.User.name);
+ self.cacheService.setLocalObject('email', data.User.email);
self.cacheService.setLocalObject('program_id', data.User.program_id);
self.cacheService.setLocalObject('project_id', data.User.project_id);
+ self.cacheService.setLocalObject('user', data.User);
},
err => {
console.log(err);
}
);
+
+ this.gameService.getGames()
+ .subscribe((data) => {
+ if (data.Games) {
+ // For now only have one game per project
+ self.cacheService.setLocalObject('game_id', data.Games[0].id);
+ }
+ });
+
// get milestone data after login
this.milestoneService.getMilestones()
.subscribe(
@@ -106,7 +141,10 @@ export class LoginModalPage {
this.milestone_id = data.data[0].id;
self.cacheService.setLocalObject('milestone_id', data.data[0].id);
console.log("milestone id: " + data.data[0].id);
- this.navCtrl.push(TabsPage);
+ this.navCtrl.push(TabsPage).then(() => {
+ this.viewCtrl.dismiss(); // close the login modal and go to dashaboard page
+ window.history.replaceState({}, '', window.location.origin);
+ });
},
err => {
console.log(err);
@@ -166,7 +204,7 @@ export class LoginModalPage {
logError(error) {
const alert = this.alertCtrl.create({
title: 'Login Failed ..',
- message: 'Invalid email or password, please type it again',
+ message: this.invalidLoginMessage,
buttons: ['Close']
});
alert.present();
@@ -177,6 +215,7 @@ export class LoginModalPage {
*/
linkToForgetPassword() {
this.navCtrl.push(this.forgetpasswordPage);
+ this.viewCtrl.dismiss();
}
closeModal() {
this.viewCtrl.dismiss();
diff --git a/src/pages/login/login.html b/src/pages/login/login.html
index 278c1e5c..378a7119 100644
--- a/src/pages/login/login.html
+++ b/src/pages/login/login.html
@@ -4,22 +4,48 @@
- Welcome to Practera
+ {{ 'LOGIN.HEADER' | translate }}
-
-
-
- LOGIN
-
+
+
-
diff --git a/src/pages/login/login.page.ts b/src/pages/login/login.page.ts
deleted file mode 100644
index bb9ec663..00000000
--- a/src/pages/login/login.page.ts
+++ /dev/null
@@ -1,214 +0,0 @@
-import { Component, NgZone, OnInit } from '@angular/core';
-import { NavController,
- NavParams,
- LoadingController,
- AlertController,
- ModalController } from 'ionic-angular';
-import { FormBuilder, Validators } from '@angular/forms';
-import { Observable } from 'rxjs/Observable';
-// services
-import { AuthService } from '../../services/auth.service';
-import { MilestoneService } from '../../services/milestone.service';
-
-import { CacheService } from '../../shared/cache/cache.service';
-// directives
-import { FormValidator } from '../../validators/formValidator';
-// pages
-import { LoginModalPage } from '../../pages/login-modal/login-modal';
-import { TabsPage } from '../../pages/tabs/tabs.page';
-import { ForgetPasswordPage } from '../../pages/forget-password/forget-password';
-import * as _ from 'lodash';
-
-
-/* This page is for handling user login process */
-@Component({
- selector: 'page-login',
- templateUrl: 'login.html'
-})
-export class LoginPage {
- email: string;
- password: any;
- userName: string;
- userImage: string;
- loginFormGroup: any;
-
- private windowHeight: number = window.innerHeight / 3;
- private isLandscaped: boolean = false;
-
- constructor(
- private navCtrl: NavController,
- private navParams: NavParams,
- private loadingCtrl: LoadingController,
- private alertCtrl: AlertController,
- private authService: AuthService,
- private formBuilder: FormBuilder,
- private milestoneService: MilestoneService,
- private cacheService: CacheService,
- private ngZone:NgZone,
- private modalCtrl: ModalController
- ) {
- this.loginFormGroup = formBuilder.group({
- email: ['', [FormValidator.isValidEmail,
- Validators.required]],
- password: ['', [Validators.required, Validators.minLength(8)]],
- });
-
- window.onresize = (e) => {
- this.ngZone.run(() => {
- function gcd (v1, v2) {
- return (v2 == 0) ? v1 : gcd(v2, v1%v2);
- }
- let screnWidth = window.innerWidth;
- let screenHeight = window.innerHeight;
- let ratio = gcd(screnWidth, screenHeight);
- let ratioRate = (screnWidth/ratio)/(screenHeight/ratio);
- if(ratioRate > 1.2 && window.innerWidth < 1024){
- this.windowHeight = window.innerHeight / 6;
- return this.isLandscaped = true;
- } else {
- this.windowHeight = window.innerHeight / 3;
- return this.isLandscaped = false;
- }
- });
- };
- }
-
- ngOnInit() {
- function gcd (v1, v2) {
- return (v2 == 0) ? v1 : gcd(v2, v1%v2);
- }
- let screnWidth = window.innerWidth;
- let screenHeight = window.innerHeight;
- let ratio = gcd(screnWidth, screenHeight);
- let ratioRate = (screnWidth/ratio)/(screenHeight/ratio);
- return (ratioRate > 1.2 && window.innerWidth < 1024) ? this.isLandscaped = true : this.isLandscaped = false;
- }
-
- popLoginModal() {
- let loginModal = this.modalCtrl.create(LoginModalPage);
- loginModal.present();
- }
-
- ionViewDidEnter() {
- console.log(this.navParams);
- console.log(this.navParams.get('test'));
- }
-
- ionViewCanLeave(): boolean {
- // user is authorized
- console.log('authorized');
- let authorized = true;
- if (authorized){
- return true;
- } else {
- return false;
- }
- }
-
- // user login function to authenticate user with email and password
- userLogin() {
- let self = this;
-
- // add loading effect during login process
- const loading = this.loadingCtrl.create({
- dismissOnPageChange: true,
- content: 'Signing in ..'
- });
- loading.present();
-
- function rxjsErr(err) {
- console.log('Rxjs Error::', err)
- }
-
- function rxjsFinally() {
- console.log('finally!');
- loading.dismiss();
- }
-
- // This part is calling post_auth() API from backend
- this.authService.loginAuth(this.email, this.password)
- .subscribe(data => {
-
- self.cacheService.setLocalObject('apikey', data.apikey);
- self.cacheService.setLocalObject('timelines', data.Timelines);
- self.cacheService.setLocalObject('teams', data.Teams);
-
- this.setLoginData(data).subscribe(function(res) {
- Observable.forkJoin([
- self.authService.getUser(),
- self.milestoneService.getList()
- ]).subscribe(res => {
- let user = res[0],
- milestone = res[1];
- Observable.from([
- self.cacheService.write('user', user),
- self.cacheService.write('milestone', milestone),
- self.cacheService.setLocalObject('user', user),
- self.cacheService.setLocalObject('milestone', milestone),
- ]).subscribe(
- res => {console.log(res)},
- err => console.log(err),
- () => {
- loading.dismiss();
- console.log("here?");
- self.navCtrl.push(TabsPage);
- }
- );
- }, rxjsErr, rxjsFinally);
- }, rxjsErr, rxjsFinally);
-
- self.cacheService.setLocal('isAuthenticated', true);
- self.cacheService.write('isAuthenticated', true);
- }, err => {
- loading.dismiss();
- self.logError(err);
- self.cacheService.removeLocal('isAuthenticated');
- self.cacheService.write('isAuthenticated', false);
- });
- }
-
- setLoginData(data) {
- let cacheProcesses = [];
- _.forEach(data, (datum, key) => {
- cacheProcesses.push(this.cacheService.write(key, datum));
- });
-
- cacheProcesses.push(this.cacheService.write('timeline_id', data.Timelines[0].Timeline.id));
- cacheProcesses.push(this.cacheService.write('apikey', data.apikey));
- cacheProcesses.push(this.cacheService.write('timelines', data.Timelines));
- cacheProcesses.push(this.cacheService.write('teams', data.Teams));
-
- this.cacheService.setLocalObject('timelines', data.Timelines);
- this.cacheService.setLocalObject('teams', data.Teams);
- this.cacheService.setLocal('apikey', data.apikey);
- this.cacheService.setLocal('timeline_id', data.Timelines[0].Timeline.id);
-
- return Observable.from(cacheProcesses);
- }
-
- getUserKeyData(user) {
- let userData = {
- 'apikey': user.data.apikey,
- 'timelines': user.data.Timelines
- }
- this.cacheService.write('userData', userData);
- this.cacheService.setLocalObject('userData', userData);
- // to get API KEY and timeline_id and stored in localStorage
- // then other API calls can directly use (API KEY and timeline_id)
- }
-
- logError(error) {
- const alert = this.alertCtrl.create({
- title: 'Login Failed ..',
- message: 'Invalid email or password, please type it again',
- buttons: ['OK']
- });
- alert.present();
- // handle API calling errors display with alert controller
- }
-
- // forget password page link function
- linkToForgetPassword() {
- this.navCtrl.push(ForgetPasswordPage);
- }
-}
diff --git a/src/pages/login/login.ts b/src/pages/login/login.ts
index 86bdf60b..ef16f8db 100644
--- a/src/pages/login/login.ts
+++ b/src/pages/login/login.ts
@@ -1,28 +1,221 @@
-import { ModalController } from 'ionic-angular';
-import { Component, NgZone, OnInit } from '@angular/core';
+import { Component, ViewChild } from '@angular/core';
+import { NavController,
+ NavParams,
+ LoadingController,
+ AlertController,
+ ModalController,
+ ViewController } from 'ionic-angular';
+import { FormBuilder, Validators } from '@angular/forms';
+import { Injectable } from '@angular/core';
+import { Observable } from 'rxjs/Observable';
+import * as _ from 'lodash';
+import { TranslationService } from '../../shared/translation/translation.service';
+import { loadingMessages, errMessages } from '../../app/messages';
// services
-import { ResponsiveService } from '../../services/responsive.service';
+import { AuthService } from '../../services/auth.service';
+import { MilestoneService } from '../../services/milestone.service';
+import { CacheService } from '../../shared/cache/cache.service';
+import { GameService } from '../../services/game.service';
+import { RequestServiceConfig } from '../../shared/request/request.service';
+// directives
+import {FormValidator} from '../../validators/formValidator';
// pages
-import { LoginModalPage } from '../../pages/login-modal/login-modal';
+import { TabsPage } from '../../pages/tabs/tabs.page';
+import { ForgetPasswordPage } from '../../pages/forget-password/forget-password';
/* This page is for handling user login process */
@Component({
selector: 'page-login',
templateUrl: 'login.html'
})
export class LoginPage {
- private windowHeight: number = window.innerHeight / 3;
- private isLandscaped: boolean = false;
+ public email: string;
+ public password: any;
+ public userName: string;
+ public userImage: string;
+ public API_KEY: string;
+ public milestone_id: string;
+ public loginFormGroup: any;
+ public forgetpasswordPage = ForgetPasswordPage;
+ public loginLoadingMessages: any = loadingMessages.Login.login;
+ public invalidLoginMessage: any = errMessages.Login.login;
constructor(
+ private navCtrl: NavController,
+ private navParams: NavParams,
+ private loadingCtrl: LoadingController,
+ private alertCtrl: AlertController,
private modalCtrl: ModalController,
- private ngZone: NgZone,
- private responsiveService: ResponsiveService
- ){}
- ngOnInit() {
+ private viewCtrl: ViewController,
+ private authService: AuthService,
+ private gameService: GameService,
+ public translationService: TranslationService,
+ private config: RequestServiceConfig,
+ private formBuilder: FormBuilder,
+ private milestoneService: MilestoneService,
+ private cacheService: CacheService
+ ) {
+ this.navCtrl = navCtrl;
+ this.loginFormGroup = formBuilder.group({
+ email: ['', [FormValidator.isValidEmail,
+ Validators.required]],
+ password: ['', [Validators.required, Validators.minLength(8)]],
+ });
}
- ionViewDidLoad(){
+ ionViewCanLeave(): boolean {
+ // user is authorized
+ console.log('authorized');
+ let authorized = true;
+ if (authorized){
+ return true;
+ } else {
+ return false;
+ }
}
- popLoginModal() {
- let loginModal = this.modalCtrl.create(LoginModalPage);
- loginModal.present();
+ /**
+ * user login function to authenticate user with email and password
+ */
+ userLogin() {
+ let self = this;
+ this.cacheService.clear().then(() => {
+ // add loading effect during login process
+ const loading = this.loadingCtrl.create({
+ dismissOnPageChange: true,
+ content: this.loginLoadingMessages
+ });
+ loading.present().then(() => {
+ // This part is calling post_auth() API from backend
+ this.authService.loginAuth(this.email, this.password)
+ .subscribe(data => {
+ data = data.data;
+ // this.getLogInData(data);
+ self.cacheService.setLocalObject('apikey', data.apikey);
+ // saved for 3 types of timeline id in order for later use
+ self.cacheService.setLocalObject('timelineId', data.Timelines[0].Timeline.id);
+ self.cacheService.setLocalObject('timelineID', data.Timelines[0].Timeline.id);
+ self.cacheService.setLocalObject('teams', data.Teams);
+ self.cacheService.setLocal('gotNewItems', false);
+ // get game_id data after login
+ this.gameService.getGames()
+ .subscribe(
+ data => {
+ console.log("game data: ", data);
+ _.map(data, (element) => {
+ console.log("game id: ", element[0].id);
+ this.cacheService.setLocal('game_id', element[0].id);
+ });
+ },
+ err => {
+ console.log("game err: ", err);
+ }
+ );
+ // get milestone data after login
+ this.authService.getUser()
+ .subscribe(
+ data => {
+ self.cacheService.setLocalObject('name', data.User.name);
+ self.cacheService.setLocalObject('email', data.User.email);
+ self.cacheService.setLocalObject('program_id', data.User.program_id);
+ self.cacheService.setLocalObject('project_id', data.User.project_id);
+ self.cacheService.setLocalObject('user', data.User);
+ },
+ err => {
+ console.log(err);
+ }
+ );
+
+ this.gameService.getGames()
+ .subscribe((data) => {
+ if (data.Games) {
+ // For now only have one game per project
+ self.cacheService.setLocalObject('game_id', data.Games[0].id);
+ }
+ });
+
+ // get milestone data after login
+ this.milestoneService.getMilestones()
+ .subscribe(
+ data => {
+ loading.dismiss().then(() => {
+ console.log(data.data[0].id);
+ this.milestone_id = data.data[0].id;
+ self.cacheService.setLocalObject('milestone_id', data.data[0].id);
+ console.log("milestone id: " + data.data[0].id);
+ this.navCtrl.push(TabsPage).then(() => {
+ this.viewCtrl.dismiss(); // close the login modal and go to dashaboard page
+ window.history.replaceState({}, '', window.location.origin);
+ });
+ });
+ },
+ err => {
+ console.log(err);
+ }
+ )
+ this.cacheService.write('isAuthenticated', true);
+ this.cacheService.setLocal('isAuthenticated', true);
+ }, err => {
+ loading.dismiss().then(() => {
+ this.logError(err);
+ this.cacheService.removeLocal('isAuthenticated');
+ this.cacheService.write('isAuthenticated', false);
+ });
+ });
+ });
+ });
+ }
+ /**
+ * Insert post_auth() api result into localStorage
+ * @param {object} data result from API request
+ * @returns Observable/subject
+ */
+ getLogInData(data){
+ let cacheProcesses = [];
+ _.forEach(data, (datum, key) => {
+ cacheProcesses.push(this.cacheService.write(key, datum));
+ });
+ cacheProcesses.push(this.cacheService.write('timeline_id', data.Timelines[0].Timeline.id));
+ cacheProcesses.push(this.cacheService.write('apikey', data.apikey));
+ cacheProcesses.push(this.cacheService.write('timelines', data.Timelines));
+ cacheProcesses.push(this.cacheService.write('teams', data.Teams));
+ this.cacheService.setLocal('apikey', data.apikey);
+ this.cacheService.setLocal('timeline_id', data.Timelines[0].Timeline.id);
+ console.log("cache data: " + cacheProcesses);
+ return Observable.from(cacheProcesses);
+ }
+ /**
+ * Insert get_user() api result into localStorage
+ * @param {object} user result from API request
+ */
+ getUserKeyData(user){
+ let userData = {
+ 'apikey': user.data.apikey,
+ 'timelines': user.data.Timelines
+ }
+ this.cacheService.write('userData', userData);
+ this.cacheService.setLocalObject('userData', userData);
+ this.API_KEY = user.data.apikey;
+ // console.log("Timeline ID: " + user.data.Timelines[0].Timeline.id);
+ // to get API KEY and timeline_id and stored in localStorage
+ // then other API calls can directly use (API KEY and timeline_id)
+ }
+ /**
+ * @TODO we'll come back to this logging workflow later in this development
+ *
+ * This function is used to log unexpected error accountered in the client side
+ * @param {object} error result from API request
+ */
+ logError(error) {
+ const alert = this.alertCtrl.create({
+ title: 'Login Failed ..',
+ message: this.invalidLoginMessage,
+ buttons: ['Close']
+ });
+ alert.present();
+ // handle API calling errors display with alert controller
+ }
+ /**
+ * forget password page link function
+ */
+ linkToForgetPassword() {
+ this.navCtrl.push(this.forgetpasswordPage);
+ this.viewCtrl.dismiss();
}
}
diff --git a/src/pages/magic-link/magic-link.ts b/src/pages/magic-link/magic-link.ts
index a587082e..c20621fb 100644
--- a/src/pages/magic-link/magic-link.ts
+++ b/src/pages/magic-link/magic-link.ts
@@ -4,10 +4,13 @@ import { NavController,
LoadingController,
AlertController } from 'ionic-angular';
import 'rxjs/Rx';
+import * as _ from 'lodash';
+import { loadingMessages, errMessages } from '../../app/messages';
// services
import { AuthService } from '../../services/auth.service';
-import { MilestoneService } from '../../services/milestone.service';
import { CacheService } from '../../shared/cache/cache.service';
+import { GameService } from '../../services/game.service';
+import { MilestoneService } from '../../services/milestone.service';
// pages
import { TabsPage } from '../tabs/tabs.page';
import { LoginPage } from '../login/login';
@@ -19,6 +22,9 @@ export class MagicLinkPage {
private verifySuccess = null;
private auth_token: string;
public milestone_id: string;
+ // loading & error messages variables
+ private loginLoadingMessage: any = loadingMessages.Login.login;
+ private misMatchTokenErrMessage: any = errMessages.DirectLink.mismatch;
constructor(
private navCtrl: NavController,
private navParams: NavParams,
@@ -26,7 +32,8 @@ export class MagicLinkPage {
private loadingCtrl: LoadingController,
private alertCtrl: AlertController,
private milestoneService: MilestoneService,
- private cacheService: CacheService
+ private cacheService: CacheService,
+ private gameService: GameService
) {}
ionViewDidLoad() {
@@ -40,20 +47,37 @@ export class MagicLinkPage {
let observable = this.authService.magicLinkLogin(this.auth_token);
const loading = this.loadingCtrl.create({
dismissOnPageChange: true,
- content: 'Logging in ..'
+ content: this.loginLoadingMessage
});
loading.present();
observable.subscribe(data => {
// localStorage.setItem('isAuthenticated', 'true');
// this.navCtrl.push(TabsPage);
// console.log("Successfully logged in");
+ data = data.data;
this.cacheService.setLocalObject('apikey', data.apikey);
this.cacheService.setLocalObject('timelineID', data.Timelines[0].Timeline.id);
this.cacheService.setLocalObject('teams', data.Teams);
+ // get game_id data after login
+ this.gameService.getGames()
+ .subscribe(
+ data => {
+ console.log("game data: ", data);
+ _.map(data, (element) => {
+ console.log("game id: ", element[0].id);
+ this.cacheService.setLocal('game_id', element[0].id);
+ });
+ },
+ err => {
+ console.log("game err: ", err);
+ }
+ );
// get milestone data after login
this.authService.getUser()
.subscribe(
data => {
+ this.cacheService.setLocalObject('name', data.User.name);
+ this.cacheService.setLocalObject('email', data.User.email);
this.cacheService.setLocalObject('program_id', data.User.program_id);
this.cacheService.setLocalObject('project_id', data.User.project_id);
},
@@ -84,8 +108,8 @@ export class MagicLinkPage {
err => {
const failAlert = this.alertCtrl.create({
title: 'Magic did NOT happen',
- message: 'please login by typing email and password',
- buttons: ['OK']
+ message: this.misMatchTokenErrMessage,
+ buttons: ['Close']
});
failAlert.present();
this.navCtrl.push(LoginPage).then(() => {
diff --git a/src/pages/rankings/list/rankings.html b/src/pages/rankings/list/rankings.html
new file mode 100644
index 00000000..96c52d77
--- /dev/null
+++ b/src/pages/rankings/list/rankings.html
@@ -0,0 +1,38 @@
+
+
+ {{ 'RANKING.PAGETITLE' | translate }}
+
+
+
+
+
+
+ {{ listData.rank }}
+
+
+ {{ listData.name || 'Hidden Name' }}
+
+
+ {{ listData.experience_points }}
+
+
+
+
+
+
+ {{ rankingListEmpty }}
+
+
+
+
+
+
+ {{ myRankingData.rank }}
+
+ {{ 'RANKING.ME' | translate }}
+
+ {{ myRankingData.experience_points }}
+
+
+
+
diff --git a/src/pages/rankings/list/rankings.page.ts b/src/pages/rankings/list/rankings.page.ts
new file mode 100644
index 00000000..20b79bc4
--- /dev/null
+++ b/src/pages/rankings/list/rankings.page.ts
@@ -0,0 +1,97 @@
+import { Component } from '@angular/core';
+import { NavController, NavParams, LoadingController, AlertController } from 'ionic-angular';
+import { TranslationService } from '../../../shared/translation/translation.service';
+import { loadingMessages, errMessages } from '../../../app/messages';
+import * as _ from 'lodash';
+// services
+import { GameService } from '../../../services/game.service';
+import { CacheService } from '../../../shared/cache/cache.service';
+// pages
+import { RankingDetailsPage } from '../view/ranking-details.page';
+@Component({
+ selector: 'rankings-list-page',
+ templateUrl: 'rankings.html'
+})
+export class RankingsPage {
+ public totalData: any = [];
+ public rankingData: any = [];
+ public myRankingData: any = [];
+ public listRankingData: any = [];
+ public isEmptyList: boolean = false;
+ public rankingListEmpty: any = errMessages.General.empty.empty;
+ public loadingMessages: any = loadingMessages.LoadingSpinner.loading;
+ public emptyErrorMessage: any = errMessages.General.loading.load;
+ constructor(private navCtrl: NavController,
+ private loadingCtrl: LoadingController,
+ private alertCtrl: AlertController,
+ private gameService: GameService,
+ private cacheService: CacheService){}
+ ionViewWillEnter(){
+ this.RankingData();
+ }
+ RankingData(){
+ const loading = this.loadingCtrl.create({
+ content: this.loadingMessages
+ });
+ const emptyDataAlert = this.alertCtrl.create({
+ title: 'Sorry, No data has been found',
+ message: this.emptyErrorMessage,
+ buttons: ['Close']
+ });
+ loading.present();
+ // @TODO remove later
+ let gameId = this.cacheService.getLocalObject('game_id');
+ this.gameService.getCharacters(gameId)
+ .subscribe((characters) => {
+ // Now only have one character per project
+ let me = characters.Characters[0];
+ this.gameService.getRanking(gameId, me.id)
+ .subscribe(
+ results => {
+ loading.dismiss().then(() => {
+ console.log(results);
+ this.totalData = results;
+ this.rankingData = this.totalData;
+ // We only have 1 character
+ this.myRankingData = this.totalData.MyCharacters[0];
+ this.listRankingData = this.totalData.Characters;
+ console.log(this.myRankingData);
+ console.log(this.listRankingData);
+ if (results) {
+ this.isEmptyList = false;
+ }
+ // _.forEach(this.listRankingData, (element, idx) => {
+ // if (!element.name) {
+ // this.listRankingData[idx].name = 'Hidden Name';
+ // }
+ // this.isEmptyList = false;
+ // });
+ console.log('this.listRankingData', this.listRankingData);
+ });
+ },
+ err => {
+ loading.dismiss().then(() => {
+ this.isEmptyList = true;
+ // this.rankingListEmpty = err.msg;
+ console.log('Error: ', err.msg);
+ emptyDataAlert.present();
+ });
+ }
+ );
+ },
+ err => {
+ loading.dismiss().then(() => {
+ this.isEmptyList = true;
+ // this.rankingListEmpty = err.msg;
+ console.log('Error: ', err.msg);
+ emptyDataAlert.present();
+ });
+ });
+ }
+ goRankingDetail(myRanking){
+ console.log('goRankingDetail', myRanking)
+ this.navCtrl.push(RankingDetailsPage, {
+ myRanking: myRanking
+ });
+ }
+}
diff --git a/src/pages/rankings/list/rankings.scss b/src/pages/rankings/list/rankings.scss
new file mode 100644
index 00000000..e69de29b
diff --git a/src/pages/rankings/view/ranking-badges.html b/src/pages/rankings/view/ranking-badges.html
new file mode 100644
index 00000000..eaa788fb
--- /dev/null
+++ b/src/pages/rankings/view/ranking-badges.html
@@ -0,0 +1,18 @@
+
+
+ {{ currentAchievement.name || achievementName }}
+ ×
+
+
+
diff --git a/src/pages/rankings/view/ranking-badges.ts b/src/pages/rankings/view/ranking-badges.ts
new file mode 100644
index 00000000..226173b1
--- /dev/null
+++ b/src/pages/rankings/view/ranking-badges.ts
@@ -0,0 +1,36 @@
+import { Component } from '@angular/core';
+import { ViewController, ToastController, LoadingController, NavParams } from 'ionic-angular';
+import { TranslationService } from '../../../shared/translation/translation.service';
+import { loadingMessages, errMessages } from '../../../app/messages';
+import * as _ from 'lodash';
+// services
+import { AchievementService } from '../../../services/achievement.service';
+// pages
+import { RankingDetailsPage } from '../view/ranking-details.page';
+@Component({
+ selector: 'ranking-badges',
+ templateUrl: 'ranking-badges.html'
+})
+export class RankingBadgesPage {
+ public currentAchievement: any = null;
+ public badgeUrl: string = '../assets/img/default/default-badge.png';
+ public description: string = "No Description Yet ..";
+ public points: number = 0;
+ public achievementName: string = "Achievement";
+ public loadingMessage: any = loadingMessages.LoadingSpinner.loading;
+ public achievementsLoadingErr: any = errMessages.General.loading.load;
+ public achievementsEmptyDataErr: any = errMessages.Activities.achievements.empty;
+ constructor(private viewCtrl: ViewController,
+ private navParams: NavParams,
+ private toastCtrl: ToastController,
+ private loadingCtrl: LoadingController,
+ private achievementService: AchievementService,
+ public translationService: TranslationService){
+ this.currentAchievement = this.navParams.get('achievement');
+ console.log("currentAchievement: ", this.currentAchievement);
+ }
+ // close disbaled activity popup
+ closeModal() {
+ this.viewCtrl.dismiss();
+ }
+}
\ No newline at end of file
diff --git a/src/pages/rankings/view/ranking-details.html b/src/pages/rankings/view/ranking-details.html
new file mode 100644
index 00000000..d822f4b2
--- /dev/null
+++ b/src/pages/rankings/view/ranking-details.html
@@ -0,0 +1,29 @@
+
+
+ {{ 'RANKING.ME' | translate }}
+
+
+
+
+
+
+ {{ 'RANKING.TOTALPOINTS' | translate }}
+
+ {{ totalPoints || 0 }}
+
+
+
+
+
+
+
+
+
+ {{ eachAchievement.name || achievementName }}
+
+
+
diff --git a/src/pages/rankings/view/ranking-details.page.ts b/src/pages/rankings/view/ranking-details.page.ts
new file mode 100644
index 00000000..d6ee9f8b
--- /dev/null
+++ b/src/pages/rankings/view/ranking-details.page.ts
@@ -0,0 +1,74 @@
+import { Component } from '@angular/core';
+import { NavController, NavParams, LoadingController, AlertController, ModalController } from 'ionic-angular';
+import { TranslationService } from '../../../shared/translation/translation.service';
+import { loadingMessages, errMessages } from '../../../app/messages';
+import * as _ from 'lodash';
+import * as moment from 'moment';
+// services
+import { AchievementService } from '../../../services/achievement.service';
+// pages
+import { RankingBadgesPage } from './ranking-badges';
+@Component({
+ selector: 'rankings-details-page',
+ templateUrl: 'ranking-details.html'
+})
+export class RankingDetailsPage {
+ public userAchievementsData: any = [];
+ public achievementBadgeImage = '../assets/img/default/default-badge.png';
+ public achievementName = 'Achievement';
+ public totalPoints = 0;
+ public myRank: any= {};
+
+ public emptyAchievementMessage = errMessages.Activities.achievements.empty;
+ public loadingMessages: any = loadingMessages.LoadingSpinner.loading;
+ public emptyErrorMessage: any = errMessages.General.loading.load;
+ constructor(private navCtrl: NavController,
+ private loadingCtrl: LoadingController,
+ private alertCtrl: AlertController,
+ private modalCtrl: ModalController,
+ private params: NavParams,
+ private achievementService: AchievementService){}
+
+ ionViewWillEnter() {
+ this.myRank = this.params.get('myRanking');
+ this.totalPoints = this.myRank.experience_points;
+
+ let loader = this.loadingCtrl.create();
+ loader.present().then(() => {
+ this.userAchievements()
+ .then(() => {
+ loader.dismiss();
+ }, err => {
+ console.log('log::', err);
+ });
+ });
+
+ }
+ userAchievements(): Promise {
+ return new Promise((resolve, reject) => {
+ this.achievementService.getAchievements()
+ .subscribe(
+ (data) => {
+ console.log('achievemnts', data);
+ if (data) {
+ // Filter achievemnts
+ _.forEach(data.Achievement, element => {
+ if(element.visibility !== 2){
+ this.userAchievementsData.push(element);
+ }
+ });
+ }
+ resolve();
+ },
+ (err) => {
+ console.log("Error: ", err);
+ reject(err);
+ }
+ );
+ });
+ }
+ goToBadgeDetailsPage(achievementData){
+ let goRankingBadgesPopup = this.modalCtrl.create(RankingBadgesPage, { achievement: achievementData });
+ goRankingBadgesPopup.present();
+ }
+}
diff --git a/src/pages/rankings/view/ranking-details.scss b/src/pages/rankings/view/ranking-details.scss
new file mode 100644
index 00000000..e69de29b
diff --git a/src/pages/registration/modal.html b/src/pages/registration/modal.html
index a2f243e7..3baf0af4 100644
--- a/src/pages/registration/modal.html
+++ b/src/pages/registration/modal.html
@@ -2,15 +2,9 @@
-
- Set Password
-
-
-
-
- ×
-
-
+
+ {{ 'REGISTRATION.PAGETITLE' | translate }}
+ ×
@@ -31,17 +25,17 @@
color="button"
class="general-circle-btn"
[disabled]="password!=verify_password || regForm.invalid">
- DONE
+ {{ 'GENERAL.DONE' | translate }}
- Password Mismatch ..
+ {{ passwordMismatchMessage }}
- Password minimum length is 8 characters ..
+ {{ passwordMinlengthMessage }}
diff --git a/src/pages/registration/modal.ts b/src/pages/registration/modal.ts
index 34d69413..c5eb8887 100644
--- a/src/pages/registration/modal.ts
+++ b/src/pages/registration/modal.ts
@@ -2,11 +2,15 @@ import { Component, ViewChild, NgZone, OnInit, Inject } from '@angular/core';
import { NgForm, FormBuilder, FormGroup, Validators } from '@angular/forms';
import { NavController, ViewController, AlertController, LoadingController, NavParams } from 'ionic-angular';
import { Observable } from 'rxjs/Observable';
+import { loadingMessages, errMessages, generalVariableMessages } from '../../app/messages';
+import { TranslationService } from '../../shared/translation/translation.service';
// services
import { AuthService } from '../../services/auth.service';
+import { CacheService } from '../../shared/cache/cache.service';
+import { GameService } from '../../services/game.service';
import { MilestoneService } from '../../services/milestone.service';
import { NotificationService } from '../../shared/notification/notification.service';
-import { CacheService } from '../../shared/cache/cache.service';
+
// directives
import { FormValidator } from '../../validators/formValidator';
// pages
@@ -15,7 +19,7 @@ import { LoginPage } from '../login/login';
import * as _ from 'lodash';
import 'rxjs/add/operator/map';
-const supportEmail = 'help@support.com';
+const supportEmail = generalVariableMessages.helpMail.email;
@Component({
selector: 'page-registration-modal',
@@ -40,6 +44,15 @@ export class RegistrationModalPage {
private milestone_id: string;
private password: string;
private verify_password: string;
+ // loading & error messages variables
+ private successRegistrationLoading: any = loadingMessages.SuccessRegistration.successRegistration;
+ private passwordMismatchErrMessage: any = errMessages.Registration.mismatch.mismatch;
+ private registrationErrMessage: any = errMessages.Registration.error.error;
+ private invalidUserErrMessage: any = errMessages.Registration.invalidUser.account;
+ private noPasswordErrMessage: any = errMessages.Registration.noPassword.password;
+ private registeredErrMessage: any = errMessages.Registration.alreadyRegistered.registered;
+ private passwordMismatchMessage: any = errMessages.PasswordValidation.mismatch.mismatch;
+ private passwordMinlengthMessage: any = errMessages.PasswordValidation.minlength.minlength;
constructor(
@Inject(FormBuilder) fb: FormBuilder,
public navCtrl: NavController,
@@ -50,6 +63,8 @@ export class RegistrationModalPage {
private loading: LoadingController,
private authService: AuthService,
private cache: CacheService,
+ private gameService: GameService,
+ public translationService: TranslationService,
private milestone: MilestoneService,
private ngZone:NgZone,
) {
@@ -59,6 +74,7 @@ export class RegistrationModalPage {
verify_password: ['', [Validators.minLength(8), Validators.required]],
});
}
+
public displayAlert(message) {
return this.alertCtrl.create({
title: 'Test',
@@ -66,9 +82,7 @@ export class RegistrationModalPage {
buttons: ['OK']
});
}
- ionViewDidLoad() {
- console.log(this.regForm);
- }
+
onSubmit(form: NgForm):void {
let self = this;
self.submitted = true;
@@ -76,17 +90,17 @@ export class RegistrationModalPage {
if (err.frontendErrorCode === 'SERVER_ERROR') {
throw 'API endpoint error';
}
- let message = `Something went wrong, please contact ${supportEmail}`;
+ let message = this.registrationErrMessage + `${supportEmail}`;
if (err && err.data && err.data.msg) {
switch (err.data.msg) {
case 'Invalid user':
- message = `Account not found, please contact ${supportEmail}`;
+ message = this.invalidUserErrMessage + `${supportEmail}`;
break;
case 'No password':
- message = "Unable to register, invalid password";
+ message = this.noPasswordErrMessage;
break;
case 'User already registered':
- message = "Your account is already registered, please log in";
+ message = this.registeredErrMessage;
break;
}
}
@@ -101,13 +115,13 @@ export class RegistrationModalPage {
if (this.user.password !== this.user.verify_password) {
this.notificationService.alert({
title: 'Incorrect Password',
- subTitle: 'The passwords entered do not match.',
- buttons: ['OK']
+ subTitle: this.passwordMismatchErrMessage,
+ buttons: ['Close']
});
} else {
const loading = this.loading.create({
dismissOnPageChange: true,
- content: 'Your password has been successfully set. You will now be logged in.'
+ content: this.successRegistrationLoading
});
// registration api call: to let user set password and complete registration process
loading.present();
@@ -118,13 +132,29 @@ export class RegistrationModalPage {
password: this.regForm.get('password').value
}).subscribe(regRespond => {
//@TODO: set user data
+ regRespond = regRespond.data;
console.log(regRespond);
this.cache.setLocalObject('apikey', regRespond.apikey);
this.cache.setLocalObject('timelineID', regRespond.Timeline.id);
+ this.cache.setLocal('gotNewItems', false);
// after passed registration api call, we come to post_auth api call to let user directly login after registred successfully
this.authService.loginAuth(this.cache.getLocal('user.email'), this.regForm.get('password').value)
.subscribe(
data => {
+ // get game_id data after login
+ this.gameService.getGames()
+ .subscribe(
+ data => {
+ console.log("game data: ", data);
+ _.map(data, (element) => {
+ console.log("game id: ", element[0].id);
+ this.cache.setLocal('game_id', element[0].id);
+ });
+ },
+ err => {
+ console.log("game err: ", err);
+ }
+ );
// get user data after registration and login
self.authService.getUser()
.subscribe(
@@ -142,6 +172,7 @@ export class RegistrationModalPage {
this.milestone_id = data.data[0].id;
self.cache.setLocalObject('milestone_id', data.data[0].id);
self.navCtrl.push(TabsPage).then(() => {
+ this.viewCtrl.dismiss(); // close the login modal and go to dashaboard page
window.history.replaceState({}, '', window.location.origin);
});
},
@@ -156,6 +187,7 @@ export class RegistrationModalPage {
}, onRegError, onFinally);
}
}
+
setRegistrationData(data) {
let cacheProcesses = [];
_.forEach(data, (datum, key) => {
diff --git a/src/pages/registration/register.html b/src/pages/registration/register.html
index 8eb599c2..905ebfa0 100644
--- a/src/pages/registration/register.html
+++ b/src/pages/registration/register.html
@@ -1,25 +1,45 @@
-
+
- Great - you are almost there! Just one more thing...
+ {{ 'REGISTRATION.HEADER' | translate }}
-
-
-
+
+
+
+
+ {{ passwordMismatchMessage }}
+
+
+
+
+ {{ passwordMinlengthMessage }}
+
+
+
+
-
@@ -27,7 +47,7 @@
- Sorry, verification failed, please resend your email and password.
+ {{ verifyFailedErrMessage }}
diff --git a/src/pages/registration/register.page.ts b/src/pages/registration/register.page.ts
index d4760aca..1bb9842c 100644
--- a/src/pages/registration/register.page.ts
+++ b/src/pages/registration/register.page.ts
@@ -1,15 +1,26 @@
-import { Component, ViewChild, NgZone, OnInit } from '@angular/core';
-import { NgForm } from '@angular/forms';
-import { LoadingController, ModalController, NavParams } from 'ionic-angular';
+import { Component, ViewChild, OnInit, Inject } from '@angular/core';
+import { NgForm, FormBuilder, FormGroup, Validators } from '@angular/forms';
+import { NavController, ViewController, AlertController, LoadingController, NavParams } from 'ionic-angular';
import { Observable } from 'rxjs/Observable';
+import { loadingMessages, errMessages, generalVariableMessages } from '../../app/messages';
// services
-import { CacheService } from '../../shared/cache/cache.service';
import { AuthService } from '../../services/auth.service';
+import { CacheService } from '../../shared/cache/cache.service';
+import { GameService } from '../../services/game.service';
import { MilestoneService } from '../../services/milestone.service';
import { NotificationService } from '../../shared/notification/notification.service';
-import { ResponsiveService } from '../../services/responsive.service';
+import { TranslationService } from '../../shared/translation/translation.service';
+// directives
+import { FormValidator } from '../../validators/formValidator';
// pages
import { RegistrationModalPage } from './modal';
+import { TabsPage } from '../tabs/tabs.page';
+import { LoginPage } from '../login/login';
+import * as _ from 'lodash';
+import 'rxjs/add/operator/map';
+
+const supportEmail = generalVariableMessages.helpMail.email;
+
@Component({
selector: 'register',
templateUrl: 'register.html',
@@ -18,29 +29,193 @@ import { RegistrationModalPage } from './modal';
export class RegisterPage implements OnInit {
@ViewChild('registrationForm') registrationForm: NgForm;
user: any = {
- password: null,
- verify_password: null
+ password: '',
+ verify_password: ''
};
submitted: boolean = false;
- private windowHeight: number = window.innerHeight / 3;
- private isLandscaped: boolean = false;
+ private regForm: any;
+ private pwdMacthBool: boolean = false;
+ private verifyPwd: boolean = false;
+ private verifySuccess: boolean = null;
+ private isPwdMatch: boolean = false;
+ private changeContent: boolean = false;
+ private minLengthCheck: boolean = true;
+ private clickSuspended: boolean = false;
+ private milestone_id: string;
+ private password: string;
+ private verify_password: string;
+ // loading & error messages variables
+ private verifyFailedErrMessage = errMessages.Registration.verifyFailed.verifyfailed;
+ private successRegistrationLoading: any = loadingMessages.SuccessRegistration.successRegistration;
+ private passwordMismatchErrMessage: any = errMessages.Registration.mismatch.mismatch;
+ private registrationErrMessage: any = errMessages.Registration.error.error;
+ private invalidUserErrMessage: any = errMessages.Registration.invalidUser.account;
+ private noPasswordErrMessage: any = errMessages.Registration.noPassword.password;
+ private registeredErrMessage: any = errMessages.Registration.alreadyRegistered.registered;
+ private passwordMismatchMessage: any = errMessages.PasswordValidation.mismatch.mismatch;
+ private passwordMinlengthMessage: any = errMessages.PasswordValidation.minlength.minlength;
constructor(
- private navParams: NavParams,
+ @Inject(FormBuilder) fb: FormBuilder,
+ public navCtrl: NavController,
+ public alertCtrl: AlertController,
+ private viewCtrl: ViewController,
private notificationService: NotificationService,
+ private navParams: NavParams,
private loading: LoadingController,
private authService: AuthService,
private cache: CacheService,
+ private gameService: GameService,
+ public translationService: TranslationService,
private milestone: MilestoneService,
- private ngZone:NgZone,
- private modalCtrl: ModalController,
- private responsiveService: ResponsiveService){}
+ ) {
+ // validation for both password values: required & minlength is 8
+ this.regForm = fb.group({
+ password: ['', [Validators.minLength(8), Validators.required]],
+ verify_password: ['', [Validators.minLength(8), Validators.required]],
+ });
+ }
ngOnInit() {
}
- popRegistrationModal() {
- let registerModal = this.modalCtrl.create(RegistrationModalPage, {
- "email": this.navParams.get('email')
+ public displayAlert(message) {
+ return this.alertCtrl.create({
+ title: 'Test',
+ message: message,
+ buttons: ['OK']
});
- console.log("get email: " + this.navParams.get('email'));
- registerModal.present();
+ }
+ onSubmit(form: NgForm):void {
+ let self = this;
+ self.submitted = true;
+ function onRegError(err) {
+ if (err.frontendErrorCode === 'SERVER_ERROR') {
+ throw 'API endpoint error';
+ }
+ let message = this.registrationErrMessage + `${supportEmail}`;
+ if (err && err.data && err.data.msg) {
+ switch (err.data.msg) {
+ case 'Invalid user':
+ message = this.invalidUserErrMessage + `${supportEmail}`;
+ break;
+ case 'No password':
+ message = this.noPasswordErrMessage;
+ break;
+ case 'User already registered':
+ message = this.registeredErrMessage;
+ break;
+ }
+ }
+ self.displayAlert(message).present();
+ self.submitted = false;
+ }
+ function onFinally() {
+ //@TODO: log something maybe
+ // self.navCtrl.push(TabsPage);
+ console.log('Final step - log something here');
+ }
+ if (this.user.password !== this.user.verify_password) {
+ this.notificationService.alert({
+ title: 'Incorrect Password',
+ subTitle: this.passwordMismatchErrMessage,
+ buttons: ['Close']
+ });
+ } else {
+ const loading = this.loading.create({
+ dismissOnPageChange: true,
+ content: this.successRegistrationLoading
+ });
+ // registration api call: to let user set password and complete registration process
+ loading.present().then(() => {
+ this.authService.register({
+ email: this.cache.getLocal('user.email'),
+ key: this.cache.getLocal('user.registration_key'),
+ user_id: this.cache.getLocal('user.id'),
+ password: this.regForm.get('password').value
+ }).subscribe(regRespond => {
+ //@TODO: set user data
+ regRespond = regRespond.data;
+ console.log(regRespond);
+ this.cache.setLocalObject('apikey', regRespond.apikey);
+ this.cache.setLocalObject('timelineID', regRespond.Timeline.id);
+ this.cache.setLocal('gotNewItems', false);
+ // after passed registration api call, we come to post_auth api call to let user directly login after registred successfully
+ this.authService.loginAuth(this.cache.getLocal('user.email'), this.regForm.get('password').value)
+ .subscribe(
+ data => {
+ // get game_id data after login
+ this.gameService.getGames()
+ .subscribe(
+ data => {
+ console.log("game data: ", data);
+ _.map(data, (element) => {
+ console.log("game id: ", element[0].id);
+ this.cache.setLocal('game_id', element[0].id);
+ });
+ },
+ err => {
+ console.log("game err: ", err);
+ }
+ );
+ // get user data after registration and login
+ self.authService.getUser()
+ .subscribe(
+ data => {
+ console.log(data);
+ },
+ err => {
+ console.log(err);
+ }
+ );
+ // get milestone data after registration and login
+ self.milestone.getMilestones()
+ .subscribe( data => {
+ loading.dismiss().then(() => {
+ // console.log(data.data[0].id);
+ this.milestone_id = data.data[0].id;
+ self.cache.setLocalObject('milestone_id', data.data[0].id);
+ self.navCtrl.push(TabsPage).then(() => {
+ window.history.replaceState({}, '', window.location.origin);
+ });
+ });
+ },
+ err => {
+ loading.dismiss().then(() => {
+ console.log(err);
+ });
+ });
+ },
+ err => {
+ loading.dismiss().then(() => {
+ console.log(err);
+ });
+ }
+ );
+ }, onRegError, onFinally);
+ });
+ }
+ }
+ setRegistrationData(data) {
+ let cacheProcesses = [];
+ _.forEach(data, (datum, key) => {
+ cacheProcesses.push(this.cache.set(key, datum));
+ });
+ cacheProcesses.push(this.cache.set('timelineID', data.Timeline.id));
+ this.cache.setLocal('timelineID', data.Timeline.id);
+ return Observable.from(cacheProcesses);
+ }
+ goToLogin() {
+ this.cache.clear().then(() => {
+ this.navCtrl.push(LoginPage);
+ });
+ }
+ // check password minmimum length
+ checkMinLength(){
+ return (this.password.length < 8 || this.verify_password.length < 8) ? this.minLengthCheck = true : this.minLengthCheck = false;
+ }
+ // check password mismacth issue
+ verifyPwdKeyUp() {
+ return this.verifyPwd = true;
+ }
+ pwdMatchCheck() {
+ return this.password != this.verify_password ? this.isPwdMatch = true : this.isPwdMatch = false;
}
}
diff --git a/src/pages/registration/registration.page.ts b/src/pages/registration/registration.page.ts
index 2467533f..65f1f0c3 100644
--- a/src/pages/registration/registration.page.ts
+++ b/src/pages/registration/registration.page.ts
@@ -2,11 +2,15 @@ import { Component, OnInit } from '@angular/core';
import { CacheService } from '../../shared/cache/cache.service';
import { DomSanitizer, SafeResourceUrl } from '@angular/platform-browser';
import { NavController, NavParams, AlertController } from 'ionic-angular';
+import { Observable } from 'rxjs';
+import { TranslationService } from '../../shared/translation/translation.service';
+import { loadingMessages, errMessages } from '../../app/messages';
+// services
import { AuthService } from '../../services/auth.service';
import { RequestService } from '../../shared/request/request.service';
import { NotificationService } from '../../shared/notification/notification.service';
+// pages
import { LoginPage } from '../../pages/login/login';
-import { Observable } from 'rxjs';
@Component({
template: ` `,
})
@@ -18,12 +22,15 @@ export class RegistrationPage implements OnInit {
term: String;
content: SafeResourceUrl;
private prefixUrl: any = this.request.getPrefixUrl();
+ // loadinbg & error message variables
+ private verifyFailedErrMessage = errMessages.Registration.verifyFailed.verifyfailed;
constructor(
public nav: NavController,
private params: NavParams,
private authService: AuthService,
private sanitizer: DomSanitizer,
private notification: NotificationService,
+ public translationService: TranslationService,
private alertCtrl: AlertController,
private cache: CacheService,
private request: RequestService) {}
@@ -58,7 +65,7 @@ export class RegistrationPage implements OnInit {
}).subscribe(res => {
this.cache.setLocal('user.email', email);
this.cache.setLocal('user.registration_key', key);
- this.cache.setLocal('user.id', res.User.id);
+ this.cache.setLocal('user.id', res.data.User.id);
this.user = {
email: email,
key: key
@@ -66,7 +73,7 @@ export class RegistrationPage implements OnInit {
Observable.forkJoin([
this.cache.write('user.email', email),
this.cache.write('user.registration_key', key),
- this.cache.write('user.id', res.User.id)
+ this.cache.write('user.id', res.data.User.id)
]).subscribe(responds => {
console.log('RespondsVerify::', responds);
});
@@ -78,7 +85,7 @@ export class RegistrationPage implements OnInit {
}
ionViewDidEnter(): void {
this.authService.getTerms().subscribe(res => {
- console.log(res);
+ console.log("terms data: ", res);
this.term = res.terms_description;
this.content = this.sanitizer.bypassSecurityTrustResourceUrl(this.prefixUrl + res.terms_url);
});
diff --git a/src/pages/reset-password/reset-password.html b/src/pages/reset-password/reset-password.html
index 69c5831e..5724d08e 100644
--- a/src/pages/reset-password/reset-password.html
+++ b/src/pages/reset-password/reset-password.html
@@ -1,25 +1,57 @@
-
+
- Reset Password
+ {{ 'RESETPASSWORD.PAGETITLE' | translate }}
-
-
-
- RESET PASSWORD
-
+
+
-
@@ -27,7 +59,7 @@
- Oops! There was an error, please try again. In 5 seconds you will return to the login page ...
+ {{ invalidLinkErrMessage }}
diff --git a/src/pages/reset-password/reset-password.ts b/src/pages/reset-password/reset-password.ts
index 4a2b0c1d..bf5f7a0e 100644
--- a/src/pages/reset-password/reset-password.ts
+++ b/src/pages/reset-password/reset-password.ts
@@ -1,11 +1,19 @@
import { Component, NgZone, OnInit } from '@angular/core';
import { NavController,
+ ViewController,
NavParams,
LoadingController,
AlertController,
ModalController } from 'ionic-angular';
+import { TranslationService } from '../../shared/translation/translation.service';
+import { loadingMessages, errMessages } from '../../app/messages';
+import { FormBuilder, Validators } from '@angular/forms';
+import * as _ from 'lodash';
// services
import { AuthService } from '../../services/auth.service';
+import { CacheService } from '../../shared/cache/cache.service';
+import { GameService } from '../../services/game.service';
+import { MilestoneService } from '../../services/milestone.service';
import { ResponsiveService } from '../../services/responsive.service';
// directives
import {FormValidator} from '../../validators/formValidator';
@@ -28,15 +36,32 @@ export class ResetPasswordPage implements OnInit {
private resetPwdFormGroup: any;
private verifyPwd: boolean = false;
private minLengthCheck: boolean = true;
+ public milestone_id: string;
+ private isPwdMatch: boolean = false;
+ // loading & error message variables
+ private invalidLinkErrMessage = errMessages.ResetPassword.invalidLink.invalid;
+ private verifyUserMessage = loadingMessages.VerifyUser.verify;
+ private successResetPasswordMessage: any = loadingMessages.SuccessResetPassword.successResetPassword;
+ private resetPasswordLoginFailedMessage: any = errMessages.ResetPassword.resetLoginFailed.failed;
+ private passwordMismatchMessage: any = errMessages.PasswordValidation.mismatch.mismatch;
+ private passwordMinlengthMessage: any = errMessages.PasswordValidation.minlength.minlength;
constructor(private navCtrl: NavController,
- private navParams: NavParams,
- private ngZone: NgZone,
- private modalCtrl: ModalController,
- private alertCtrl: AlertController,
- private authService: AuthService,
- private loadingCtrl: LoadingController,
- private responsiveService: ResponsiveService) {
- }
+ private navParams: NavParams,
+ private alertCtrl: AlertController,
+ private authService: AuthService,
+ private viewCtrl: ViewController,
+ private loadingCtrl: LoadingController,
+ private formBuilder: FormBuilder,
+ private milestoneService: MilestoneService,
+ private cacheService: CacheService,
+ private gameService: GameService,
+ public translationService: TranslationService) {
+ // validation for both password values: required & minlength is 8
+ this.resetPwdFormGroup = formBuilder.group({
+ password: ['', [Validators.minLength(8), Validators.required]],
+ verify_password: ['', [Validators.minLength(8), Validators.required]],
+ })
+ }
/**
* Detect user device type (mobile or desktop) on initial page load
* Purpose: Initially page loaded, this peice code will detect user screen
@@ -70,7 +95,7 @@ export class ResetPasswordPage implements OnInit {
this.keyVal = key;
this.emailVal = email;
const loading = this.loadingCtrl.create({
- content: 'Verifying user identity ..'
+ content: this.verifyUserMessage
});
loading.present();
this.authService.verifyUserKeyEmail(key, email)
@@ -90,8 +115,116 @@ export class ResetPasswordPage implements OnInit {
}, 5000);
});
}
- popResetpasswordModel(){
- let resetpasswordModal = this.modalCtrl.create(ResetpasswordModelPage, {"key": this.keyVal, "email": this.emailVal});
- resetpasswordModal.present();
+ /**
+ * to update password in db
+ * Purpose: store new password for user
+ * @param { key, email, password, verify_password }
+ * @return if API request is passed (status code: 200), user password updated
+ successfully, otherwise, error hint popup to indicate user password
+ update failed
+ */
+ updatePassword(){
+ let key = this.navParams.get('key'),
+ email = decodeURIComponent(this.navParams.get('email'));
+ const loading = this.loadingCtrl.create({
+ content: this.successResetPasswordMessage
+ });
+ loading.present().then(() => {
+ this.authService.resetUserPassword(key, email, this.password, this.verify_password).subscribe(data => {
+ // loading.dismiss();
+ // this.navCtrl.push(LoginPage);
+ this.authService.loginAuth(email, this.password)
+ .subscribe(data => {
+ data = data.data;
+ this.cacheService.setLocalObject('apikey', data.apikey);
+ this.cacheService.setLocalObject('timelineID', data.Timelines[0].Timeline.id);
+ this.cacheService.setLocalObject('teams', data.Teams);
+ this.cacheService.setLocal('gotNewItems', false);
+ // get game_id data after login
+ this.gameService.getGames()
+ .subscribe(
+ data => {
+ console.log("game data: ", data);
+ _.map(data, (element) => {
+ console.log("game id: ", element[0].id);
+ this.cacheService.setLocal('game_id', element[0].id);
+ });
+ },
+ err => {
+ console.log("game err: ", err);
+ }
+ );
+ // get milestone data after login
+ this.authService.getUser()
+ .subscribe(
+ data => {
+ this.cacheService.setLocalObject('name', data.User.name);
+ this.cacheService.setLocalObject('email', data.User.email);
+ this.cacheService.setLocalObject('program_id', data.User.program_id);
+ this.cacheService.setLocalObject('project_id', data.User.project_id);
+ },
+ err => {
+ console.log(err);
+ }
+ );
+ // get milestone data after login
+ this.milestoneService.getMilestones()
+ .subscribe(
+ data => {
+ loading.dismiss().then(() => {
+ console.log(data.data[0].id);
+ this.milestone_id = data.data[0].id;
+ this.cacheService.setLocalObject('milestone_id', data.data[0].id);
+ console.log("milestone id: " + data.data[0].id);
+ loading.dismiss();
+ this.navCtrl.push(TabsPage).then(() => {
+ this.viewCtrl.dismiss(); // close the login modal and go to dashaboard page
+ window.history.replaceState({}, '', window.location.origin);
+ });
+ });
+ },
+ err => {
+ loading.dismiss().then(() => {
+ console.log(err);
+ });
+ }
+ )
+ this.cacheService.write('isAuthenticated', true);
+ this.cacheService.setLocal('isAuthenticated', true);
+ },
+ err => {
+ loading.dismiss().then(() => {
+ this.loginError(err);
+ this.cacheService.removeLocal('isAuthenticated');
+ this.cacheService.write('isAuthenticated', false);
+ });
+ });
+ },
+ err => {
+ loading.dismiss().then(() => {
+ console.log(err);
+ });
+ });
+ });
+ }
+ // after password set, auto login error alertbox
+ loginError(error) {
+ const alertLogin = this.alertCtrl.create({
+ title: 'Login Failed ..',
+ message: this.resetPasswordLoginFailedMessage,
+ buttons: ['Close']
+ });
+ alertLogin.present();
+ }
+ // check password minmimum length
+ checkMinLength(){
+ return (this.password.length < 8 || this.verify_password.length < 8) ? this.minLengthCheck = true : this.minLengthCheck = false;
+ }
+ // check password mismacth issue
+ verifyPwdKeyUp() {
+ return this.verifyPwd = true;
+ }
+ pwdMatchCheck() {
+ return this.password != this.verify_password ? this.isPwdMatch = true : this.isPwdMatch = false;
}
}
diff --git a/src/pages/resetpassword-model/resetpassword-model.html b/src/pages/resetpassword-model/resetpassword-model.html
index 618d86a1..c0371889 100644
--- a/src/pages/resetpassword-model/resetpassword-model.html
+++ b/src/pages/resetpassword-model/resetpassword-model.html
@@ -2,15 +2,9 @@
-
- Reset Password
-
-
-
-
- ×
-
-
+
+ {{ 'RESETPASSWORD.PAGETITLE' | translate }}
+ ×
@@ -43,17 +37,17 @@
class="general-circle-btn"
(click)="updatePassword()"
[disabled]="password!=verify_password || resetPasswordForm.invalid">
- DONE
+ {{ 'GENERAL.DONE' | translate }}
- Password Mismatch ..
+ {{ passwordMismatchMessage }}
- Password minimum length is 8 characters ..
+ {{ passwordMinlengthMessage }}
diff --git a/src/pages/resetpassword-model/resetpassword-model.ts b/src/pages/resetpassword-model/resetpassword-model.ts
index 4689c7d3..c13208d4 100644
--- a/src/pages/resetpassword-model/resetpassword-model.ts
+++ b/src/pages/resetpassword-model/resetpassword-model.ts
@@ -5,10 +5,14 @@ import { NavController,
LoadingController,
AlertController } from 'ionic-angular';
import { FormBuilder, Validators } from '@angular/forms';
+import * as _ from 'lodash';
+import { loadingMessages, errMessages } from '../../app/messages';
// services
import { AuthService } from '../../services/auth.service';
import { MilestoneService } from '../../services/milestone.service';
import { CacheService } from '../../shared/cache/cache.service';
+import { GameService } from '../../services/game.service';
+import { TranslationService } from '../../shared/translation/translation.service';
// pages
import { TabsPage } from '../tabs/tabs.page';
import { LoginPage } from '../login/login';
@@ -26,6 +30,11 @@ export class ResetpasswordModelPage {
private isPwdMatch: boolean = false;
private verifyPwd: boolean = false;
private minLengthCheck: boolean = true;
+ // loading & error message variables
+ private successResetPasswordMessage: any = loadingMessages.SuccessResetPassword.successResetPassword;
+ private resetPasswordLoginFailedMessage: any = errMessages.ResetPassword.resetLoginFailed.failed;
+ private passwordMismatchMessage: any = errMessages.PasswordValidation.mismatch.mismatch;
+ private passwordMinlengthMessage: any = errMessages.PasswordValidation.minlength.minlength;
constructor(
private navCtrl: NavController,
private navParams: NavParams,
@@ -35,7 +44,9 @@ export class ResetpasswordModelPage {
private loadingCtrl: LoadingController,
private formBuilder: FormBuilder,
private milestoneService: MilestoneService,
- private cacheService: CacheService
+ private cacheService: CacheService,
+ private gameService: GameService,
+ public translationService: TranslationService
) {
// validation for both password values: required & minlength is 8
this.resetPwdFormGroup = formBuilder.group({
@@ -61,7 +72,7 @@ export class ResetpasswordModelPage {
let key = this.navParams.get('key'),
email = decodeURIComponent(this.navParams.get('email'));
const loading = this.loadingCtrl.create({
- content: 'Password successfully changed. Logging in now.'
+ content: this.successResetPasswordMessage
});
loading.present();
this.authService.resetUserPassword(key, email, this.password, this.verify_password).subscribe(data => {
@@ -69,13 +80,31 @@ export class ResetpasswordModelPage {
// this.navCtrl.push(LoginPage);
this.authService.loginAuth(email, this.password)
.subscribe(data => {
+ data = data.data;
this.cacheService.setLocalObject('apikey', data.apikey);
this.cacheService.setLocalObject('timelineID', data.Timelines[0].Timeline.id);
this.cacheService.setLocalObject('teams', data.Teams);
+ this.cacheService.setLocal('gotNewItems', false);
+ // get game_id data after login
+ this.gameService.getGames()
+ .subscribe(
+ data => {
+ console.log("game data: ", data);
+ _.map(data, (element) => {
+ console.log("game id: ", element[0].id);
+ this.cacheService.setLocal('game_id', element[0].id);
+ });
+ },
+ err => {
+ console.log("game err: ", err);
+ }
+ );
// get milestone data after login
this.authService.getUser()
.subscribe(
data => {
+ this.cacheService.setLocalObject('name', data.User.name);
+ this.cacheService.setLocalObject('email', data.User.email);
this.cacheService.setLocalObject('program_id', data.User.program_id);
this.cacheService.setLocalObject('project_id', data.User.project_id);
},
@@ -93,6 +122,7 @@ export class ResetpasswordModelPage {
console.log("milestone id: " + data.data[0].id);
loading.dismiss();
this.navCtrl.push(TabsPage).then(() => {
+ this.viewCtrl.dismiss(); // close the login modal and go to dashaboard page
window.history.replaceState({}, '', window.location.origin);
});
},
@@ -109,18 +139,18 @@ export class ResetpasswordModelPage {
this.cacheService.removeLocal('isAuthenticated');
this.cacheService.write('isAuthenticated', false);
});
- console.log('Succefully updated');
+ // console.log('Succefully updated');
},
err => {
loading.dismiss();
- console.log('Update failure ..');
+ // console.log('Update failure ..');
});
}
// after password set, auto login error alertbox
loginError(error) {
const alertLogin = this.alertCtrl.create({
title: 'Login Failed ..',
- message: 'Sorry, login failed, please go to login page to sign in',
+ message: this.resetPasswordLoginFailedMessage,
buttons: ['Close']
});
alertLogin.present();
diff --git a/src/pages/settings/leaderboard/leaderboard-settings.html b/src/pages/settings/leaderboard/leaderboard-settings.html
new file mode 100644
index 00000000..6ce93c66
--- /dev/null
+++ b/src/pages/settings/leaderboard/leaderboard-settings.html
@@ -0,0 +1,16 @@
+
+
+ {{ 'SETTINGS.LEADERBOARD' | translate }}
+
+
+
+
+
+ Hi {{ username }} ({{ useremail }}),
+
+
+ Hide name in leaderboard?
+
+
+
+
\ No newline at end of file
diff --git a/src/pages/settings/leaderboard/leaderboard-settings.page.ts b/src/pages/settings/leaderboard/leaderboard-settings.page.ts
new file mode 100644
index 00000000..1cc215b2
--- /dev/null
+++ b/src/pages/settings/leaderboard/leaderboard-settings.page.ts
@@ -0,0 +1,15 @@
+import { Component } from '@angular/core';
+// services
+import { CacheService } from '../../../shared/cache/cache.service';
+@Component({
+ selector: 'leaderboard-settings-page',
+ templateUrl: 'leaderboard-settings.html'
+})
+export class LeaderboardSettingsPage {
+ public username: string = this.cacheService.getLocalObject('name') || '';
+ public useremail: string = this.cacheService.getLocalObject('email') || '';
+ public isHide: boolean = false;
+ constructor(private cacheService: CacheService){
+
+ }
+}
\ No newline at end of file
diff --git a/src/pages/settings/settings.html b/src/pages/settings/settings.html
index 7fa8c7c5..5b516ab6 100644
--- a/src/pages/settings/settings.html
+++ b/src/pages/settings/settings.html
@@ -1,34 +1,32 @@
-
- Settings
-
+ {{ 'SETTINGS.PAGETITLE' | translate }}
- My Profile ({{ getUserEmail() }})
+ {{ 'SETTINGS.PROFILE' | translate }} ({{ getUserEmail() }})
-
- Tutorial
+
+ {{ 'SETTINGS.TUTORIAL' | translate }}
-
- Terms of Use
-
-
- Program Switcher
+
+ {{ 'SETTINGS.TERMS' | translate }}
+
- Support
+ {{ 'SETTINGS.SUPPORT' | translate }}
-
- Email Help
-
+
+ {{ 'SETTINGS.HELP' | translate }}
+
- Logout
+ {{ 'SETTINGS.LOGOUT' | translate }}
diff --git a/src/pages/settings/settings.page.ts b/src/pages/settings/settings.page.ts
index d1d5c210..ec19792b 100644
--- a/src/pages/settings/settings.page.ts
+++ b/src/pages/settings/settings.page.ts
@@ -1,33 +1,48 @@
import { Component } from '@angular/core';
import { App, NavController, MenuController, LoadingController } from 'ionic-angular';
-import { TranslateService } from '@ngx-translate/core';
-import { i18nData } from '../../../app/i18n-en';
-import { loadingMessages, errMessages } from '../../app/messages';
+import { TranslationService } from '../../shared/translation/translation.service';
+import { loadingMessages, errMessages } from '../../app/messages';
// services
import { CacheService } from '../../shared/cache/cache.service';
// pages
+import { LeaderboardSettingsPage } from '../settings/leaderboard/leaderboard-settings.page';
import { LoginPage } from '../../pages/login/login';
+import { TutorialPage } from '../settings/tutorial/tutorial.page';
+import { TermConditionPage } from '../term-condition/term-condition.page';
@Component({
selector: 'settings-page',
templateUrl: 'settings.html'
})
export class SettingsPage {
+ public helpline = "help@practera.com";
+ public logoutMessage: any = loadingMessages.Logout.logout;
public loadingMessage: any = loadingMessages.Logout.logout;
+ public helpline = "help@practera.com";
constructor(
private cache: CacheService,
private navCtrl: NavController,
private menuCtrl: MenuController,
private loadingCtrl: LoadingController,
+ public translationService: TranslationService,
private appCtrl: App
) {}
public settings = [];
public getUserEmail() {
- return 'abcd.example.cc';
+ return this.cache.getLocalObject('email') || '';
+ }
+ public goLeaderBoardSettings(){
+ this.navCtrl.push(LeaderboardSettingsPage);
+ }
+ public goToTutorial() {
+ this.navCtrl.push(TutorialPage);
+ }
+ public goToTermConditions() {
+ this.navCtrl.push(TermConditionPage);
}
public logout() {
let loader = this.loadingCtrl.create({
spinner: 'hide',
- content: this.loadingMessage
+ content: this.logoutMessage
});
loader.present().then(() => {
this.cache.clear().then(() => {
diff --git a/src/pages/settings/tutorial/tutorial.html b/src/pages/settings/tutorial/tutorial.html
new file mode 100644
index 00000000..bd72a1ce
--- /dev/null
+++ b/src/pages/settings/tutorial/tutorial.html
@@ -0,0 +1,37 @@
+
+
+ {{ 'GENERAL.SKIP' | translate }}
+
+
+
+
+
+
+ Welcome
+ Great to see you. The Practera App will help you getting the most out of your learning experience! Let’s get started.
+
+
+
+ Real Feedback
+ The tasks you submit will be reviewed by real experts in their industry. This will help you to develop the right skills that you need to advance your career!
+
+
+
+
+
+ Leaderboard
+ By engaging and interacting with the app, you will earn points and badges, which will put you on top of the leaderboard and make you even more interesting for employers!
+
+
+
+
+
+
+
+ {{ 'GENERAL.PREV' | translate }}
+ {{ 'GENERAL.NEXT' | translate }}
+ {{ 'GENERAL.DONE' | translate }}
+
+
\ No newline at end of file
diff --git a/src/pages/settings/tutorial/tutorial.page.ts b/src/pages/settings/tutorial/tutorial.page.ts
new file mode 100644
index 00000000..861861e0
--- /dev/null
+++ b/src/pages/settings/tutorial/tutorial.page.ts
@@ -0,0 +1,26 @@
+import { Injectable, Component, ViewChild } from '@angular/core';
+import { NavController, LoadingController, Slides } from 'ionic-angular';
+import { ActivitiesListPage } from '../../activities/list/list.page';
+@Injectable()
+@Component({
+ selector: 'tutorial-page',
+ templateUrl: 'tutorial.html'
+})
+export class TutorialPage {
+ @ViewChild(Slides) slides: Slides;
+ public indexCounter: number = 0;
+ public hideNextButton: boolean = false;
+ constructor(public navCtrl: NavController){}
+ goDashbaord() {
+ this.navCtrl.setRoot(ActivitiesListPage);
+ }
+ goPrev() {
+ this.slides.slidePrev();
+ this.hideNextButton = false;
+ }
+ goNext() {
+ this.slides.slideNext();
+ this.slides.isEnd() == true ? this.hideNextButton = true : this.hideNextButton = false;
+ // console.log(this.hideNextButton);
+ }
+}
\ No newline at end of file
diff --git a/src/pages/sidenav/sidenav.ts b/src/pages/sidenav/sidenav.ts
index 4c17b146..e0a4d380 100644
--- a/src/pages/sidenav/sidenav.ts
+++ b/src/pages/sidenav/sidenav.ts
@@ -3,7 +3,6 @@ import { NavController, MenuController } from 'ionic-angular';
// pages
import { LoginPage } from '../login/login';
import { TabsPage } from '../tabs/tabs.page';
-import { HomePage } from '../home/home';
import { ActivitiesListPage } from '../activities/list/list.page';
import { LevelsListPage } from '../levels/list/list';
/* This is side navigation bar which shows after user logged in to the app */
@@ -15,7 +14,6 @@ export class SidenavPage {
@ViewChild('sideNav') sideNav: NavController;
loginPage = LoginPage;
tabsPage = TabsPage;
- homePage = HomePage;
activitiesListPage = ActivitiesListPage;
levelsListPage = LevelsListPage;
rootPage = null;
diff --git a/src/pages/tabs/tabs.html b/src/pages/tabs/tabs.html
index ca7db4da..c45f2d85 100755
--- a/src/pages/tabs/tabs.html
+++ b/src/pages/tabs/tabs.html
@@ -1,6 +1,9 @@
-
-
-
-
+
+
+
+
+
+
+
diff --git a/src/pages/tabs/tabs.page.ts b/src/pages/tabs/tabs.page.ts
index d8377aa4..888aeb1b 100644
--- a/src/pages/tabs/tabs.page.ts
+++ b/src/pages/tabs/tabs.page.ts
@@ -1,19 +1,10 @@
import { Component } from '@angular/core';
-
-import { HomePage } from '../home/home';
-import { GalleryPage } from '../gallery/gallery';
+import { TranslationService } from '../../shared/translation/translation.service';
import { ActivitiesListPage } from '../activities/list/list.page';
-import { LevelsListPage } from '../levels/list/list';
-import { TeamPage } from '../team/team';
-
+import { RankingsPage } from '../rankings/list/rankings.page';
import { SettingsPage } from '../settings/settings.page';
import { TestPage } from './test.page';
import { EventsListPage } from '../events/list/list.page';
-
-// @TODO: remove after fully developed
-// import { TestPage } from '../../shared/testModules/pages/test/test.page';
-// import { TestPage } from '../../shared/testModules/pages/test/test.page';
-
@Component({
templateUrl: 'tabs.html',
providers: []
@@ -21,14 +12,10 @@ import { EventsListPage } from '../events/list/list.page';
export class TabsPage {
// this tells the tabs component which Pages
// should be each tab's root Page
- tab0Root: any = TestPage;
- tab1Root: any = HomePage;
- tab2Root: any = ActivitiesListPage;
- tab3Root: any = GalleryPage;
- tab5Root: any = LevelsListPage;
- tab6Root: any = TeamPage;
- tab7Root: any = SettingsPage;
- tab8Root: any = EventsListPage;
-
- constructor() {}
+ ranking: any = RankingsPage;
+ // ranking: any = TestPage;
+ dashboard: any = ActivitiesListPage;
+ settings: any = SettingsPage;
+ events: any = EventsListPage;
+ constructor(public translationService: TranslationService) {}
}
diff --git a/src/pages/term-condition/term-condition.html b/src/pages/term-condition/term-condition.html
index 903e4f41..2b03340b 100644
--- a/src/pages/term-condition/term-condition.html
+++ b/src/pages/term-condition/term-condition.html
@@ -1,6 +1,6 @@
- Terms and Conditions
+ {{ 'TERMCONDITIONS.PAGETITLE' | translate }}
@@ -10,14 +10,23 @@
-
+
- I agree
+ {{ 'TERMCONDITIONS.AGREE' | translate }}
-
- Next
+
+ {{ 'TERMCONDITIONS.NEXT' | translate }}
+
+
+
+ Back
+
diff --git a/src/pages/term-condition/term-condition.page.ts b/src/pages/term-condition/term-condition.page.ts
index 4d9f7756..7487163d 100644
--- a/src/pages/term-condition/term-condition.page.ts
+++ b/src/pages/term-condition/term-condition.page.ts
@@ -1,53 +1,61 @@
import { Component, Input } from '@angular/core';
import { SafeResourceUrl } from '@angular/platform-browser';
import { NavController, AlertController } from 'ionic-angular';
-import { RegisterPage } from '../registration/register.page';
-import { TabsPage } from '../tabs/tabs.page';
+import { TranslationService } from '../../shared/translation/translation.service';
+import { loadingMessages, errMessages, generalVariableMessages } from '../../app/messages';
+// services
import { AuthService } from '../../services/auth.service';
import { NotificationService } from '../../shared/notification/notification.service';
-
+// pages
+import { RegisterPage } from '../registration/register.page';
+import { TabsPage } from '../tabs/tabs.page';
@Component({
selector: 'term-condition',
templateUrl: 'term-condition.html'
})
-
export class TermConditionPage {
@Input('content') content?: SafeResourceUrl;
@Input('user') user: any;
-
agreed:boolean = false;
-
+ private checkAccessMethod: boolean = false;
+ // loading & error message variables
+ private helpEmailMessage = generalVariableMessages.helpMail.email;
+ private disagreeErrMessage = errMessages.TermConditions.disagreement.noAccepted;
+ private verifyFailedErrMessage = errMessages.TermConditions.verifyFailed.verifyfailed;
+ private checkAccessMethod: boolean = false;
constructor(
public nav: NavController,
+ private alertCtrl: AlertController,
private authService: AuthService,
private notificationService: NotificationService,
- private alertCtrl: AlertController
+ public translationService: TranslationService,
) {}
-
+ private accessMethod(){
+ return (window.location.href.indexOf('?do=') > -1) ? this.checkAccessMethod = true : this.checkAccessMethod = false
+ }
private displayError(errorMessage?: any): void {
let alert = this.alertCtrl.create({
title: 'Invalid registration code',
subTitle: errorMessage,
buttons: [{
- text: 'OK'
+ text: 'Close'
}]
});
-
alert.present();
}
-
+ private backToSAccountPage() {
+ this.nav.popToRoot();
+ }
ionViewDidEnter() {
console.log(this.user);
}
-
agree(user): void {
if (this.agreed === true) {
this.nav.push(RegisterPage, user);
} else {
- this.notificationService.present('Agreement is required for further registration process.');
+ this.notificationService.present(this.disagreeErrMessage);
}
}
-
/**
* verify if params from url is allowed to proceed with registration
*/
@@ -60,30 +68,26 @@ export class TermConditionPage {
console.log(res);
},
err => {
- this.notificationService.present('Something is wrong with the registration verification.');
+ this.notificationService.present(this.verifyFailedErrMessage);
},
() => {
this.nav.push(TabsPage);
}
);
}
-
/**
* toggle Read & confirm to proceed next registration page
*/
toggleAgree(): void {
this.agreed = !this.agreed;
}
-
navToRegister(): void {
if (this.agreed === true) {
console.log(this.nav.getViews());
}
}
-
onTermError(err): void {
- const supportEmail = 'help@support.com';
-
+ const supportEmail = this.helpEmailMessage;
if ((err.data || {}).msg) {
//@TODO: implement error handling
console.log({title: "Unable to register", template: `Something went wrong, please contact ${supportEmail}.`});
@@ -99,7 +103,6 @@ export class TermConditionPage {
});
}
}
-
// temporary fix for direct signin
signIn(): void {
this.nav.push(TabsPage);
diff --git a/src/pipes/keep-html.pipe.ts b/src/pipes/keep-html.pipe.ts
new file mode 100644
index 00000000..2f218c8f
--- /dev/null
+++ b/src/pipes/keep-html.pipe.ts
@@ -0,0 +1,12 @@
+import { Pipe, PipeTransform } from '@angular/core';
+import { DomSanitizer } from '@angular/platform-browser';
+
+@Pipe({ name: 'keepHtml', pure: false })
+export class EscapeHtmlPipe implements PipeTransform {
+ constructor(private sanitizer: DomSanitizer) {
+ }
+
+ transform(content) {
+ return this.sanitizer.bypassSecurityTrustHtml(content);
+ }
+}
diff --git a/src/pipes/timeago.ts b/src/pipes/timeago.ts
index 36d01728..fdb3ff78 100644
--- a/src/pipes/timeago.ts
+++ b/src/pipes/timeago.ts
@@ -1,12 +1,16 @@
import {Pipe, PipeTransform} from '@angular/core';
+import * as moment from 'moment';
@Pipe({ name: 'timeago' })
export class TimeAgoPipe implements PipeTransform {
- transform(input: string, p_allowFuture?: any) : any {
- if (input.length === 0) {
+ transform(input, p_allowFuture?: any) : any {
+ if (!input || input.length === 0) {
return '';
}
+ // treat API date as UTC
+ input = moment.utc(input);
+
var substitute = function (timeStamp, num, strings) {
// var string = angular.isFunction(timeStamp) ? timeStamp(num, dateDifference) : timeStamp;
var string = timeStamp;
diff --git a/src/pipes/ucfirst.pipe.ts b/src/pipes/ucfirst.pipe.ts
new file mode 100644
index 00000000..dacbd74a
--- /dev/null
+++ b/src/pipes/ucfirst.pipe.ts
@@ -0,0 +1,23 @@
+import { Pipe, PipeTransform } from '@angular/core';
+
+@Pipe({
+ name: 'ucfirst'
+})
+// replication of PHP native ucfirst()
+export class UcfirstPipe implements PipeTransform {
+ transform(input: string): any {
+ let result = '';
+
+ // turn first letter of word into upper case
+ var capitalizeFirstLetter = function (string) {
+ return string.charAt(0).toUpperCase() + string.slice(1);
+ };
+
+ if (input) {
+ result = capitalizeFirstLetter(input);
+ }
+
+ return result;
+ }
+}
+
diff --git a/src/service-worker.js b/src/service-worker.js
index 6679781a..86d395e0 100755
--- a/src/service-worker.js
+++ b/src/service-worker.js
@@ -14,6 +14,8 @@ self.toolbox.options.cache = {
// pre-cache our key assets
self.toolbox.precache(
[
+ './assets/js/filestack.js',
+ './assets/js/filestack-0.6.2.js',
'./build/main.js',
'./build/main.css',
'./build/polyfills.js',
@@ -27,4 +29,4 @@ self.toolbox.router.any('/*', self.toolbox.cacheFirst);
// for any other requests go to the network, cache,
// and then only use that cached resource if your user goes offline
-self.toolbox.router.default = self.toolbox.networkFirst;
\ No newline at end of file
+self.toolbox.router.default = self.toolbox.networkFirst;
diff --git a/src/services/achievement.service.ts b/src/services/achievement.service.ts
index 367ac810..9557d079 100755
--- a/src/services/achievement.service.ts
+++ b/src/services/achievement.service.ts
@@ -6,21 +6,61 @@ import { CacheService } from '../shared/cache/cache.service';
export class AchievementService {
private target_id = this.cacheService.getLocalObject('program_id');
private target_model = 'program';
- private getMaximumPointsUrl = 'api/maximum_points.json?target_model=' + this.target_model + '&target_id=' + this.target_id;
- private userAchievementUrl = 'api/user_achievements.json';
- private totalAchievementUrl = 'api/achievements.json';
- constructor(private request: RequestService,
- private cacheService: CacheService) {}
- // List Maximum Point Of Total Achievements
+
+ constructor(
+ private request: RequestService,
+ private cacheService: CacheService
+ ) {}
+
+ // List Maximum Point Of Total Achievements
public getMaxPoints(){
- return this.request.get(this.getMaximumPointsUrl)
+ return this.request.get('api/maximum_points.json?target_model=' + this.target_model + '&target_id=' + this.target_id)
}
- // List User Achievements
+
+ // List User Achievements
public getAchievements(params = {}) {
- return this.request.get(this.userAchievementUrl)
+ return this.request.get('api/user_achievements.json')
}
- // List All Achievements
- public getAllAchievements() {
- return this.request.get(this.totalAchievementUrl)
+
+ // List All Achievements
+ public getAll() {
+ return this.request.get('api/achievements.json')
+ }
+
+ /*
+ turn:
+ {
+ "Achievement": {
+ "id": 1,
+ "name": "test",
+ "description": "",
+ "badge": "https://www.filepicker.io/api/file/test",
+ "visibility": 1,
+ "condition": "AND",
+ "model": "Program",
+ "model_id": 4,
+ "is_default": false,
+ "scope": "individual",
+ "points": 100
+ }
+ }
+
+ into:
+ {
+ "id": 1,
+ "name": "test",
+ "description": "",
+ "badge": "https://www.filepicker.io/api/file/test",
+ "visibility": 1,
+ "condition": "AND",
+ "model": "Program",
+ "model_id": 1,
+ "is_default": false,
+ "scope": "individual",
+ "points": 100
+ }
+ */
+ public normalise(achievement) {
+ return achievement.Achievement;
}
}
diff --git a/src/services/activity.service.ts b/src/services/activity.service.ts
index 398d3797..5768c592 100755
--- a/src/services/activity.service.ts
+++ b/src/services/activity.service.ts
@@ -1,27 +1,54 @@
import { Injectable } from '@angular/core';
-import { Http, Headers, RequestOptions, URLSearchParams } from '@angular/http';
+import { URLSearchParams } from '@angular/http';
import * as moment from 'moment';
import * as _ from 'lodash';
// services
import { CacheService } from '../shared/cache/cache.service';
import { RequestService } from '../shared/request/request.service';
+class ActivityBase {
+ id: number;
+ name: string;
+ description: string;
+}
+
+class ReferenceAssessmentBase {
+ id: number;
+ name: string;
+}
+
+class ReferenceBase {
+ context_id: number;
+ Assessment: ReferenceAssessmentBase
+}
+
@Injectable()
export class ActivityService {
+ private cachedActivites = {};
+
public milestoneID = this.cacheService.getLocalObject('milestone_id');
- public activityAPIEndPoint = 'api/activities.json';
constructor(
private request: RequestService,
private cacheService: CacheService,
- private http: Http
) {}
- public getList() {
- return this.request.get(this.activityAPIEndPoint, {
+
+ public getList(options?) {
+ let mid = this.cacheService.getLocal('milestone_id');
+
+ options = options || {
search: {
milestone_id: this.cacheService.getLocal('milestone_id')
}
- });
+ };
+
+ if (!this.cachedActivites[mid]) {
+ this.cachedActivites[mid] = this.request.get('api/activities.json', options);
+ return this.request.get('api/activities.json', options);
+ }
+
+ return this.cachedActivites[mid];
}
+
public getLevels = (options?: any) => {
let params: URLSearchParams = new URLSearchParams();
if (options.search) {
@@ -40,11 +67,16 @@ export class ActivityService {
params.set('project_id', data.user.project_id);
options.search = params;
}
- return this.request.get(this.activityAPIEndPoint, options)
- .toPromise();
+ return this.getList(options).toPromise();
});
}
- normalise(activity, index) {
+
+ /*
+ // commented out - seems not using in any part of the code
+ // it was built for currentActivities component in HomePage,
+ // no longer using it now
+
+ normalise(activity, index) {
// session
activity.enabledRSVP = true;
// survey
@@ -63,9 +95,283 @@ export class ActivityService {
// if sorting is not available, use index instead
activity.order = activity.Activity.order || index;
return activity;
+ }*/
+
+
+ /**
+ * normalise activities
+ */
+ public normaliseActivities(activities): Array {
+ let result = [];
+
+ activities.forEach((act, index) => {
+ result[index] = this.normaliseActivity(act);
+ });
+ return result;
}
- // another way of get activity data list
- public getActivities(){
- return this.request.get(this.activityAPIEndPoint);
+
+ /**
+ * normalise single activity object
+ */
+ public normaliseActivity(activity) {
+ let thisActivity = activity.Activity,
+ normalisedActivity: ActivityBase,
+ sequence = this.mergeReferenceToSequence(activity);
+
+ activity = _.merge(thisActivity, {
+ activity: activity.Activity,
+ sequence: sequence,
+ assessment: this.extractAssessment(sequence),
+ Activity: activity.Activity,
+ ActivitySequence: activity.ActivitySequence,
+ References: activity.References
+ });
+
+ if (activity.Activity) {
+ normalisedActivity = {
+ id: activity.Activity.id,
+ name: activity.Activity.name,
+ description: activity.Activity.description
+ }
+ }
+
+ // Not all the API return activity data in capital-case
+ if (activity.activity) {
+ normalisedActivity = {
+ id: activity.activity.id,
+ name: activity.activity.name,
+ description: activity.activity.description
+ }
+ }
+
+ activity.Activity = normalisedActivity;
+
+ // Normalise activity reference
+ activity.References.forEach((reference, idx) => {
+ let referenceAssessment: ReferenceAssessmentBase = {
+ id: reference.Assessment.id,
+ name: reference.Assessment.name,
+ }
+ let normalisedReference: ReferenceBase = {
+ context_id: reference.context_id,
+ Assessment: referenceAssessment
+ };
+ activity.References[idx] = normalisedReference;
+ });
+
+ return activity;
+ }
+
+ /*
+ turns:
+ [
+ {
+ "context_id": 25,
+ "Assessment": {
+ "id": 19,
+ "name": "Check-In Workshop 1"
+ }
+ },
+ {
+ "context_id": 26,
+ "Assessment": {
+ "id": 20,
+ "name": "Check-In Workshop 2"
+ }
+ },
+ ...
+ ]
+
+ into:
+ {
+ 19: 25,
+ 20: 26
+ }
+ */
+ public rebuildReferences(references) {
+ let result = {};
+ (references || []).forEach(ref => {
+ result[ref.Assessment.id] = ref.context_id;
+ });
+ return result;
+ }
+
+ /*
+ @name mergeReferenceToSequence
+
+ turns:
+ [
+ {
+ "id": 52,
+ "activity_id": 22,
+ "model": "Assess.Assessment",
+ "model_id": 19,
+ "order": 0,
+ "is_locked": false,
+ "Assess.Assessment": {
+ "id": 19,
+ "name": "Check-In Workshop 1",
+ "description": "Check in to your first workshop here ",
+ "assessment_type": "checkin",
+ "is_live": true,
+ "is_team": false,
+ "score_type": "numeric",
+ "experience_id": 2,
+ "program_id": 4,
+ "deleted": false,
+ "deleted_date": null,
+ "comparison_group_size": 3,
+ "comparison_group_points": 10,
+ "review_period": 72,
+ "review_scope": "assessment",
+ "review_scope_id": null,
+ "created": "2016-02-01 04:45:21.573033",
+ "modified": "2016-10-25 23:54:22",
+ "review_instructions": null,
+ "is_repeatable": false,
+ "num_reviews": null,
+ "review_type": null,
+ "review_role": null,
+ "auto_assign_reviewers": null,
+ "parent_id": null,
+ "auto_publish_reviews": false
+ }
+ }
+ ]
+
+ into:
+ {
+ "19": {
+ "id": 52,
+ "activity_id": 22,
+ "model": "Assess.Assessment",
+ "model_id": 19,
+ "order": 0,
+ "is_locked": false,
+ "Assess.Assessment": {
+ "id": 19,
+ "name": "Check-In Workshop 1",
+ "description": "Check in to your first workshop here ",
+ "assessment_type": "checkin",
+ "is_live": true,
+ "is_team": false,
+ "score_type": "numeric",
+ "experience_id": 2,
+ "program_id": 4,
+ "deleted": false,
+ "deleted_date": null,
+ "comparison_group_size": 3,
+ "comparison_group_points": 10,
+ "review_period": 72,
+ "review_scope": "assessment",
+ "review_scope_id": null,
+ "created": "2016-02-01 04:45:21.573033",
+ "modified": "2016-10-25 23:54:22",
+ "review_instructions": null,
+ "is_repeatable": false,
+ "num_reviews": null,
+ "review_type": null,
+ "review_role": null,
+ "auto_assign_reviewers": null,
+ "parent_id": null,
+ "auto_publish_reviews": false
+ },
+ "context_id": 25
+ }
+ }
+ */
+ private mergeReferenceToSequence(activity) {
+ let refs = this.rebuildReferences(activity.References);
+
+ // @NOTE: first "[0]" sequence is the assessment of an activity
+ let sequence = activity.ActivitySequence[0] || {};
+
+ if (!_.isEmpty(sequence)) {
+ // activity.ActivitySequence.forEach(seq => {
+ let modelId = sequence.model_id;
+ sequence.context_id = refs[modelId];
+ // });
+ }
+ return sequence;
+ }
+
+ /*
+ turns:
+ {
+ "id": 52,
+ "activity_id": 22,
+ "model": "Assess.Assessment",
+ "model_id": 19,
+ "order": 0,
+ "is_locked": false,
+ "Assess.Assessment": {
+ "id": 19,
+ "name": "Check-In Workshop 1",
+ "description": "Check in to your first workshop here ",
+ "assessment_type": "checkin",
+ "is_live": true,
+ "is_team": false,
+ "score_type": "numeric",
+ "experience_id": 2,
+ "program_id": 4,
+ "deleted": false,
+ "deleted_date": null,
+ "comparison_group_size": 3,
+ "comparison_group_points": 10,
+ "review_period": 72,
+ "review_scope": "assessment",
+ "review_scope_id": null,
+ "created": "2016-02-01 04:45:21.573033",
+ "modified": "2016-10-25 23:54:22",
+ "review_instructions": null,
+ "is_repeatable": false,
+ "num_reviews": null,
+ "review_type": null,
+ "review_role": null,
+ "auto_assign_reviewers": null,
+ "parent_id": null,
+ "auto_publish_reviews": false
+ },
+ "context_id": 25
+ }
+
+ into:
+ {
+ "id": 19,
+ "context_id": 25,
+ "name": "Check-In Workshop 1",
+ "description": "Check in to your first workshop here ",
+ "assessment_type": "checkin",
+ "is_live": true,
+ "is_team": false,
+ "score_type": "numeric",
+ "experience_id": 2,
+ "program_id": 4,
+ "deleted": false,
+ "deleted_date": null,
+ "comparison_group_size": 3,
+ "comparison_group_points": 10,
+ "review_period": 72,
+ "review_scope": "assessment",
+ "review_scope_id": null,
+ "created": "2016-02-01 04:45:21.573033",
+ "modified": "2016-10-25 23:54:22",
+ "review_instructions": null,
+ "is_repeatable": false,
+ "num_reviews": null,
+ "review_type": null,
+ "review_role": null,
+ "auto_assign_reviewers": null,
+ "parent_id": null,
+ "auto_publish_reviews": false
+ }
+ */
+ private extractAssessment(sequence) {
+ let assessment: any = {};
+ if (sequence['Assess.Assessment']) {
+ assessment = sequence['Assess.Assessment'];
+ assessment.context_id = sequence.context_id;
+ }
+ return assessment;
}
}
diff --git a/src/services/assessment.service.ts b/src/services/assessment.service.ts
index b0582e97..a8f7900c 100755
--- a/src/services/assessment.service.ts
+++ b/src/services/assessment.service.ts
@@ -1,13 +1,382 @@
import { Injectable } from '@angular/core';
import { RequestService } from '../shared/request/request.service';
+import * as _ from 'lodash';
+
+class Assessment {
+ id: number;
+ context_id: number;
+ in_progress?: Boolean;
+}
+
+class Answer {
+ assessment_question_id: number;
+ answer: String | Object | Array;
+ choices?: Array;
+}
+
+export class ChoiceBase {
+ id: number;
+ value?: number; // or choice id, usually same as "id" above
+ name: string;
+ description?: string;
+ explanation?: string;
+ order?: number;
+ weight?: number;
+}
+
+export class QuestionBase {
+ id: number;
+ question_id: number;
+ group_id: number;
+ assessment_id: number;
+ name: string;
+ type: string;
+ file_type?: string;
+ audience: Array;
+ choices?: ChoiceBase[];
+ answer?: any;
+ required?: boolean;
+ order?: string | number;
+
+ constructor(id, assessment_id, name, type) {
+ this.id = id;
+ this.assessment_id = assessment_id;
+ this.name = name;
+ this.type = type;
+ }
+}
+
+export class Submission {
+ Assessment: Assessment;
+ AssessmentSubmission?: any;
+ AssessmentSubmissionAnswer: Object;
+}
+
@Injectable()
export class AssessmentService {
constructor(private request: RequestService) {}
+ /**
+ * @description check feedback can show
+ * @type {boolen}
+ */
+ public isPublished(submissions: any):boolean {
+ let published = false;
+ _.forEach(submissions, (submission) => {
+ _.forEach(submission, (subm) => {
+ if (
+ subm.AssessmentSubmission &&
+ subm.AssessmentSubmission.status === 'published'
+ ) {
+ published = true;
+ }
+ });
+ });
+ return published;
+ }
+
// listAll()
- public getAll(options? : any) {
+ public getAll(options?: any) {
return this.request.get('api/assessments.json', options);
}
+ /**
+ * get question's details
+ * example:
+ * - for multiple-type question, checkbox data is not available in
+ * ActivitySequences (from get_activities API) and get_assessments API
+ * - checkbox values (selected checkbox ids are required for post_assessments API) which
+ * they are only available in this get_export_assessments api
+ *
+ * @param {any} options [description]
+ */
+ public getQuestion(options?: any) {
+ return this.request.get('api/export_assessments.json', options);
+ }
+
+ public post(assessmentAnswer: Submission) {
+ return this.request.post('api/assessment_submissions.json', assessmentAnswer, {
+ 'Content-Type': 'application/json'
+ });
+ }
+
+ /**
+ * save progress using "post" function AssessmentService.post()
+ * @param {Object} assessmentAnswer
+ */
+ public save(assessmentAnswer) {
+ assessmentAnswer.Assessment.in_progress = true; // force in_progress
+
+ return this.post(assessmentAnswer);
+ }
+
+ /**
+ * submit using "post" function AssessmentService.post()
+ * @param {Object} assessmentAnswer
+ */
+ public submit(assessmentAnswer) {
+ return this.post(assessmentAnswer);
+ }
+
+ /*
+ Turn API format from:
+ {
+ "Assessment": {
+ "id": 29,
+ "name": "Check-in 1",
+ "description": "Needs a description...",
+ "assessment_type": "checkin",
+ "is_team": false,
+ "is_repeatable": false
+ },
+ "AssessmentGroup": [
+ {
+ "id": 28,
+ "name": "Group 1",
+ "description": "",
+ "order": 1,
+ "assessment_id": 29,
+ "AssessmentGroupQuestion": [
+ {
+ "assessment_question_id": 100,
+ "order": null,
+ "id": 100,
+ "assessment_group_id": 28,
+ "AssessmentQuestion": {
+ "id": 100,
+ "name": "Selfie",
+ "description": "",
+ "question_type": "file",
+ "file_type": "image",
+ "is_required": false,
+ "audience": "[\"reviewer\",\"submitter\"]",
+ "AssessmentQuestionChoice": []
+ }
+ },
+ ...
+ ]
+ }
+ ]
+ }
+
+ Into:
+ {
+ "id": 29,
+ "name": "Check-in 1",
+ "description": "Needs a description...",
+ "assessment_type": "checkin",
+ "is_team": false,
+ "is_repeatable": false
+ "groups": {
+ "id": 28,
+ "name": "Group 1",
+ "description": "",
+ "order": 1,
+ "assessment_id": 29,
+ "questions": [
+ {
+ "id": 100,
+ "assessment_question_id": 100,
+ "assessment_group_id": 28,
+ "name": "Selfie",
+ "description": "",
+ "question_type": "file",
+ "file_type": "image",
+ "is_required": false,
+ "audience": "[\"reviewer\",\"submitter\"]",
+ "AssessmentQuestionChoice": []
+ "order": null,
+ },
+ ...
+ ]
+ }
+ }
+ */
+ public normalise(assessment) {
+ let result = assessment.Assessment;
+ let thisGroups = assessment.AssessmentGroup;
+
+ thisGroups = thisGroups.map(group => {
+ return this.normaliseGroup(group);
+ });
+
+ return {
+ id: result.id,
+ name: result.name,
+ description: result.description,
+ assessment_type: result.assessment_type,
+ is_team: result.is_team,
+ is_repeatable: result.is_repeatable,
+ AssessmentGroup: thisGroups
+ };
+ }
+
+ /*
+ turn "AssessmentGroup" object format from:
+ {
+ "id": 28,
+ "name": "Group 1",
+ "description": "",
+ "order": 1,
+ "assessment_id": 29,
+ "AssessmentGroupQuestion": [
+ {
+ "assessment_question_id": 100,
+ "order": null,
+ "id": 100,
+ "assessment_group_id": 28,
+ "AssessmentQuestion": {
+ "id": 100,
+ "name": "Selfie",
+ "description": "",
+ "question_type": "file",
+ "file_type": "image",
+ "is_required": false,
+ "audience": "[\"reviewer\",\"submitter\"]",
+ "questions": []
+ }
+ },
+ ...
+ ]
+ }
+
+ into format:
+ {
+ id: group.id,
+ name: group.name,
+ description: group.description,
+ assessment_id: group.assessment_id,
+ order: group.order
+ questions: [
+ {
+ "id": 100,
+ "assessment_group_id": 28,
+ "assessment_question_id": 100,
+ "name": "Selfie",
+ "description": "",
+ "question_type": "file",
+ "file_type": "image",
+ "is_required": false,
+ "audience": "[\"reviewer\",\"submitter\"]",
+ "choices": []
+ "order": null,
+ },
+ ...
+ ],
+ }
+ */
+ public normaliseGroup(group) {
+ // let result = group;
+ let thisQuestions = group.AssessmentGroupQuestion;
+ thisQuestions = thisQuestions.map(question => {
+ return this.normaliseQuestion(question);
+ });
+
+ return {
+ id: group.id,
+ assessment_id: group.assessment_id,
+ name: group.name,
+ description: group.description,
+ questions: thisQuestions,
+ order: group.order,
+ }
+ }
+
+ /*
+ turn "AssessmentGroupQuestion" array format from:
+ {
+ "assessment_question_id": 100,
+ "order": null,
+ "id": 100,
+ "assessment_group_id": 28,
+ "AssessmentQuestion": {
+ "id": 100,
+ "name": "Selfie",
+ "description": "",
+ "question_type": "file",
+ "file_type": "image",
+ "is_required": false,
+ "audience": "[\"reviewer\",\"submitter\"]",
+ "questions": []
+ }
+ }
+
+ into:
+ {
+ "id": 100,
+ "assessment_group_id": 28,
+ "assessment_question_id": 100,
+ "name": "Selfie",
+ "description": "",
+ "question_type": "file",
+ "file_type": "image",
+ "is_required": false,
+ "audience": "[\"reviewer\",\"submitter\"]",
+ "choices": []
+ "order": null,
+ }
+ */
+ public normaliseQuestion(question): QuestionBase {
+ let thisQuestion = question.AssessmentQuestion;
+ let choices = thisQuestion.AssessmentQuestionChoice;
+
+ choices = choices.map(choice => {
+ return this.normaliseChoice(choice);
+ });
+
+ return {
+ id: question.id,
+ assessment_id: question.assessment_question_id,
+ question_id: question.assessment_question_id,
+ group_id: question.assessment_group_id,
+ name: thisQuestion.name,
+ type: thisQuestion.question_type,
+ audience: thisQuestion.audience,
+ file_type: thisQuestion.file_type,
+ required: thisQuestion.is_required,
+ choices: choices,
+ order: question.order,
+ answer: thisQuestion.answer
+ };
+ }
+
+ /*
+ turn "AssessmentQuestionChoice" array format from:
+ {
+ "id": 275,
+ "assessment_question_id": 104,
+ "assessment_choice_id": 275,
+ "order": 1,
+ "weight": "1",
+ "explanation": null,
+ "AssessmentChoice": {
+ "id": 275,
+ "name": "New Choice 1",
+ "description": "bad"
+ }
+ }
+
+ into:
+ {
+ "id": 275,
+ "value": 275, // or choice id, usually same as "id" above
+ "name": "New Choice 1",
+ "description": "bad",
+ "explanation": null,
+ "order": 1,
+ "weight": "1",
+ }
+ */
+ public normaliseChoice(choice): ChoiceBase {
+ return {
+ id: choice.id, // same as assessment_choice_id & AssessmentChoice.id & id
+ value: choice.assessment_choice_id, // or choice.id (similar id used as "assessment_choice_id")
+ name: choice.AssessmentChoice.name,
+ description: choice.AssessmentChoice.description,
+ explanation: choice.explanation,
+ order: choice.order,
+ weight: choice.weight
+ };
+ }
}
diff --git a/src/services/auth.service.ts b/src/services/auth.service.ts
index a2017169..a199b420 100755
--- a/src/services/auth.service.ts
+++ b/src/services/auth.service.ts
@@ -1,92 +1,90 @@
import { Injectable } from '@angular/core';
import { RequestService } from '../shared/request/request.service';
-import { URLSearchParams } from '@angular/http';
+import { Http, Headers, URLSearchParams, RequestOptions } from '@angular/http';
@Injectable()
export class AuthService {
- httpHeaderStrObj = { 'Content-Type': 'application/x-www-form-urlencoded'};
-
- constructor(private request: RequestService) {}
-
+ private appkey: any = this.request.getAppkey();
+ private prefixUrl: any = this.request.getPrefixUrl();
+ private AUTH_ENDPOINT: any = this.prefixUrl + 'api/auths.json?action=';
+ public headerData() {
+ let headers = new Headers();
+ headers.append('Content-Type', 'application/x-www-form-urlencoded');
+ headers.append('appkey', this.appkey);
+ return headers;
+ }
+ constructor(private request: RequestService,
+ private http: Http) {}
getTerms() {
- return this.request.get('api/registration_details.json');
+ let options = new RequestOptions({headers: this.headerData()});
+ return this.http.get(this.prefixUrl+'api/registration_details.json', options)
+ .map(res => res.json());
}
-
- /**
- * verify url's parameters has the valid email and key (registration code)
- * @param {object} data object with key and email in it
- */
verifyRegistration(data) {
- return this.request.post('api/auths.json?action=verify_registration', {
- 'email': data.email,
- 'key': data.key
- });
+ let options = new RequestOptions({headers: this.headerData()});
+ let urlSearchParams = new URLSearchParams([
+ `email=${data.email}`,
+ `key=${data.key}`
+ ].join('&'));
+ return this.http.post(this.AUTH_ENDPOINT+'verify_registration', urlSearchParams.toString(), options)
+ .map(res => res.json());
}
-
register(data) {
+ let options = new RequestOptions({headers: this.headerData()});
let urlSearchParams = new URLSearchParams([
`password=${data.password}`,
`user_id=${data.user_id}`,
`key=${data.key || 'thisissamplekey'}`
].join('&'));
-
- return this.request.post('api/auth.json?action=registration', data);
+ return this.http.post(this.AUTH_ENDPOINT+'registration', urlSearchParams.toString(), options)
+ .map(res => res.json());
}
-
loginAuth(email, password) {
+ let options = new RequestOptions({headers: this.headerData()});
let urlSearchParams = new URLSearchParams([
`data[User][email]=${email}`,
`data[User][password]=${password}`
].join('&'));
-
- return this.request.post(
- 'api/auths.json?action=authentication',
- urlSearchParams.toString(),
- this.httpHeaderStrObj);
+ return this.http.post(this.AUTH_ENDPOINT+'authentication', urlSearchParams.toString(), options)
+ .map(res => res.json());
}
-
forgotPassword(email){
+ let options = new RequestOptions({headers: this.headerData()});
let urlSearchParams = new URLSearchParams();
urlSearchParams.append('email', email);
- return this.request.post(
- 'api/auths.json?action=forgot_password',
- urlSearchParams.toString(),
- this.httpHeaderStrObj);
+ return this.http.post(this.AUTH_ENDPOINT+'forgot_password', urlSearchParams.toString(), options)
+ .map(res => res.json());
}
-
verifyUserKeyEmail(key, email){
+ let options = new RequestOptions({headers: this.headerData()});
let urlSearchParams = new URLSearchParams([
`key=${key}`,
`email=${email}`
].join('&'));
- return this.request.post(
- 'api/auths.json?action=verify_reset_password',
- urlSearchParams.toString(),
- this.httpHeaderStrObj);
+ return this.http.post(this.AUTH_ENDPOINT+'verify_reset_password', urlSearchParams.toString(), options)
+ .map(res => res.json());
}
resetUserPassword(key, email, password, verify_password) {
+ let options = new RequestOptions({headers: this.headerData()});
let urlSearchParams = new URLSearchParams([
`key=${key}`,
`email=${email}`,
`password=${password}`,
`verify_password=${verify_password}`
].join('&'));
- return this.request.post(
- 'api/auths.json?action=reset_password',
- urlSearchParams.toString(),
- this.httpHeaderStrObj);
+ return this.http.post(this.AUTH_ENDPOINT+'reset_password', urlSearchParams.toString(), options)
+ .map(res => res.json());
}
magicLinkLogin(auth_token){
+ let options = new RequestOptions({headers: this.headerData()});
let urlSearchParams = new URLSearchParams();
urlSearchParams.append('auth_token', auth_token);
- return this.request.post(
- 'api/auths.json?',
- urlSearchParams.toString(),
- this.httpHeaderStrObj);
- }
- isAuthenticated() {
- return true;
+ return this.http.post(this.prefixUrl+'api/auths.json?', urlSearchParams.toString(), options)
+ .map(res => res.json());
}
getUser() {
return this.request.get('api/users.json');
}
-}
+ isAuthenticated() {
+ return true;
+ }
+}
\ No newline at end of file
diff --git a/src/services/character.service.ts b/src/services/character.service.ts
new file mode 100644
index 00000000..ec182efd
--- /dev/null
+++ b/src/services/character.service.ts
@@ -0,0 +1,28 @@
+import { Injectable } from '@angular/core';
+
+// services
+import { CacheService } from '../shared/cache/cache.service';
+import { RequestService } from '../shared/request/request.service';
+@Injectable()
+export class CharacterService {
+ public charactersAPIEndpoint: any = 'api/characters.json';
+
+ constructor(
+ public cache: CacheService,
+ public request: RequestService
+ ) {}
+
+ getCharacter() {
+ return this.request.get(this.charactersAPIEndpoint, {
+ search: {
+ game_id: this.cache.getLocalObject('game_id')
+ }
+ });
+ }
+
+ postCharacter(data) {
+ return this.request.post(this.charactersAPIEndpoint, data, {
+ 'Content-Type': 'application/json'
+ });
+ }
+}
diff --git a/src/services/game.service.ts b/src/services/game.service.ts
new file mode 100644
index 00000000..d94b00d3
--- /dev/null
+++ b/src/services/game.service.ts
@@ -0,0 +1,40 @@
+import { Injectable } from '@angular/core';
+import { RequestService } from '../shared/request/request.service';
+
+import * as _ from 'lodash';
+
+@Injectable()
+export class GameService {
+ private gamesTarget = 'api/games';
+ private charactersTarget = 'api/characters';
+
+ constructor(
+ private request: RequestService
+ ) {}
+ // get games
+ public getGames(options = {}) {
+ return this.request.get(this.gamesTarget, options);
+ }
+
+ public getCharacters(gameId, options = {}) {
+ options = _.merge({
+ search: {
+ game_id: gameId
+ }
+ }, options);
+ return this.request.get(this.charactersTarget, options);
+ }
+
+ public getRanking(gameId, characterId = null) {
+ return this.getCharacters(gameId, {
+ search: {
+ action: 'ranking',
+ character_id: characterId
+ }
+ });
+ }
+ // get game items
+ public getGameItems(character_id) {
+ return this.request.get(`api/items.json?character_id=${character_id}&filter=items_all`);
+ }
+}
diff --git a/src/services/ranking.service.ts b/src/services/ranking.service.ts
new file mode 100644
index 00000000..fd2f1250
--- /dev/null
+++ b/src/services/ranking.service.ts
@@ -0,0 +1,15 @@
+// DEPRECATED
+import { Injectable } from '@angular/core';
+import { RequestService } from '../shared/request/request.service';
+// services
+import { CacheService } from '../shared/cache/cache.service';
+@Injectable()
+export class RankingService {
+ private rankingListAPIEndpoint = `api/characters_statistics.json`;
+ constructor(private request: RequestService,
+ private cacheService: CacheService) {}
+ // List Total Users Rankings
+ public getRankings(){
+ return this.request.get(this.rankingListAPIEndpoint);
+ }
+}
diff --git a/src/services/submission.service.ts b/src/services/submission.service.ts
index 1aed3364..726f018a 100755
--- a/src/services/submission.service.ts
+++ b/src/services/submission.service.ts
@@ -2,6 +2,7 @@ import { Injectable } from '@angular/core';
import { RequestService } from '../shared/request/request.service';
import * as _ from 'lodash';
+import * as moment from 'moment';
@Injectable()
export class SubmissionService {
@@ -10,9 +11,8 @@ export class SubmissionService {
constructor(private request: RequestService) {}
// list()
- public getSubmissions(options? : any) {
- return this.request.get(this.targetUrl)
- .map(response => response.json())
+ public getSubmissions(options?: any) {
+ return this.request.get(this.targetUrl, options);
}
public extractPhotos(data) {
@@ -36,5 +36,206 @@ export class SubmissionService {
return photos;
}
+/*
+ Turns:
+ {
+ "AssessmentSubmission": {
+ "id": 4,
+ "submitter_id": 19,
+ "created": "2017-07-18 03:28:09",
+ "modified": "2017-07-18 03:28:09",
+ "status": "done",
+ "assessment_id": 28,
+ "order": null,
+ "submitted": "2017-07-18 03:28:12",
+ "team_id": null,
+ "program_id": 4,
+ "activity_id": 23,
+ "score": null,
+ "moderated_score": "0",
+ "publish_date": null,
+ "review_score": "0",
+ "timeline_id": 5,
+ "context_id": 26
+ },
+ "Assessment": {
+ "id": 28,
+ "name": "Job Smart Initial Survey",
+ "description": "This survey is a self-assessment of your employability skills. Be honest with yourself and leave room to improve. In the end of the program, you will be asked the same questions at the end of the program. Please take 5 minutes to reflect on your current state. ",
+ "assessment_type": "survey",
+ "is_live": true,
+ "is_team": false,
+ "score_type": "numeric",
+ "experience_id": 2,
+ "program_id": 4,
+ "deleted": false,
+ "deleted_date": null,
+ "comparison_group_size": 3,
+ "comparison_group_points": 10,
+ "review_period": 72,
+ "review_scope": "assessment",
+ "review_scope_id": null,
+ "created": "2016-02-01 04:45:21.573033",
+ "modified": "2016-10-25 23:59:47",
+ "review_instructions": null,
+ "is_repeatable": false,
+ "num_reviews": null,
+ "review_type": null,
+ "review_role": null,
+ "visibility": {
+ "guest": false,
+ "participant": true,
+ "mentor": true,
+ "coordinator": true,
+ "admin": false,
+ "team": false,
+ "sysadmin": false
+ },
+ "auto_assign_reviewers": null,
+ "parent_id": null,
+ "auto_publish_reviews": false
+ },
+ "AssessmentSubmissionAnswer": [
+ {
+ "id": 10,
+ "assessment_submission_id": 4,
+ "comment": null,
+ "assessment_question_id": 92,
+ "answer": 235,
+ "score": "0"
+ },
+ {
+ "id": 11,
+ "assessment_submission_id": 4,
+ "comment": null,
+ "assessment_question_id": 93,
+ "answer": 240,
+ "score": "0"
+ },
+ {
+ "id": 12,
+ "assessment_submission_id": 4,
+ "comment": null,
+ "assessment_question_id": 94,
+ "answer": 245,
+ "score": "0"
+ },
+ {
+ "id": 13,
+ "assessment_submission_id": 4,
+ "comment": null,
+ "assessment_question_id": 95,
+ "answer": 250,
+ "score": "0"
+ },
+ {
+ "id": 14,
+ "assessment_submission_id": 4,
+ "comment": null,
+ "assessment_question_id": 96,
+ "answer": 255,
+ "score": "0"
+ },
+ {
+ "id": 15,
+ "assessment_submission_id": 4,
+ "comment": null,
+ "assessment_question_id": 97,
+ "answer": 260,
+ "score": "0"
+ },
+ {
+ "id": 16,
+ "assessment_submission_id": 4,
+ "comment": null,
+ "assessment_question_id": 98,
+ "answer": 265,
+ "score": "0"
+ },
+ {
+ "id": 17,
+ "assessment_submission_id": 4,
+ "comment": null,
+ "assessment_question_id": 99,
+ "answer": 270,
+ "score": "0"
+ }
+ ],
+ "AssessmentReviewAnswer": []
+ }
+
+ into:
+ {
+
+ }
+ */
+ public normalise(respond) {
+ let submission = respond['AssessmentSubmission'];
+ let assessment = respond['Assessment'];
+ let answer = respond['AssessmentSubmissionAnswer'];
+ let review = respond['AssessmentReviewAnswer'];
+
+ // preprocess date
+ submission.created = moment.utc(submission.created);
+ submission.modified = moment.utc(submission.modified);
+
+ // submitted
+ if (submission.submitted) {
+ submission.submitted = moment.utc(submission.submitted);
+ }
+
+ return _.merge(submission, {
+ assessment,
+ answer,
+ review
+ });
+ }
+
+ /**
+ * get assessment answer (submission)
+ * @param {array} respond API respond from get_submissions
+ */
+ public getAnswer(respond, activityId?: number) {
+ let answer = this.normalise(respond).answer;
+ return answer;
+ }
+ /**
+ * get review (feedback from moderator)
+ */
+ public getReview(review) {
+ return review;
+ }
+
+ /**
+ * extract reference IDs and prepare Observables to retrieve submissions
+ * @param {array} references References array responded with get_activities() api
+ */
+ public getSubmissionsByReferences(references) {
+ let tasks = []; // multiple API requests
+
+ // get_submissions API to retrieve submitted answer
+ let getSubmissions = (contextId) => {
+ return this.getSubmissions({
+ search: {
+ context_id: contextId
+ }
+ });
+ };
+
+ // Congregation of get_submissions API Observable with different context_id
+ _.forEach(references, reference => {
+ if (reference.context_id) {
+ return tasks.push(getSubmissions(reference.context_id));
+ }
+ });
+
+ return tasks;
+ }
+
+ // get user submissions data
+ // @TODO Remove it later
+ public getSubmissionsData() {
+ return this.getSubmissions()
+ }
}
diff --git a/src/shared/cache/cache.service.ts b/src/shared/cache/cache.service.ts
index b3e14867..ea3557fc 100755
--- a/src/shared/cache/cache.service.ts
+++ b/src/shared/cache/cache.service.ts
@@ -5,11 +5,6 @@ import { Cache } from '../app/cache';
import * as _ from 'lodash';
-
-export class LocalStorage {
-}
-
-
@Injectable()
export class CacheService {
diff --git a/src/shared/filestack/file-preview.directive.ts b/src/shared/filestack/file-preview.directive.ts
index 3644d6a6..c9422198 100755
--- a/src/shared/filestack/file-preview.directive.ts
+++ b/src/shared/filestack/file-preview.directive.ts
@@ -7,8 +7,6 @@ import { WindowRef } from '../window';
export class FilestackPreviewDirective implements OnChanges {
@Input('filestack-preview') url: string;
- /*
*/
-
constructor(
private el: ElementRef,
private renderer: Renderer,
diff --git a/src/shared/filestack/filestack.service.ts b/src/shared/filestack/filestack.service.ts
index 138a4870..bc7c87b9 100755
--- a/src/shared/filestack/filestack.service.ts
+++ b/src/shared/filestack/filestack.service.ts
@@ -3,6 +3,11 @@ import { Injectable, Optional } from '@angular/core';
declare var filestack: any;
declare var filepicker: any;
+export class FilestackUpload {
+ filesFailed: Array;
+ filesUploaded: Array;
+}
+
@Injectable()
export class FilestackConfig {
apikey = null;
@@ -19,11 +24,26 @@ export class FilestackService {
this.filepicker = filepicker;
this.filepicker.setKey(config.apikey);
- console.log(this.filestack);
}
- pick(file): Promise {
- return this.filestack.pick(file);
+ /**
+ * display pick/upload popup for file upload,
+ * refer to filestack documentation for more config information
+ * @link https://www.filestack.com/docs/javascript-api/pick-v3
+ * @param {object} config filestack object
+ * @return {Promise} single resolved object
+ */
+ pick(config?): Promise {
+ if (!config) {
+ config = {
+ maxFiles: 5, // default by max 5 files
+ storeTo: {
+ location: 's3'
+ }
+ };
+ }
+
+ return this.filestack.pick(config);
}
pickV1(file, onSuccess, onError?, onProgress?) {
diff --git a/src/shared/request/request.service.ts b/src/shared/request/request.service.ts
index 32dc0ec3..f341f3dc 100755
--- a/src/shared/request/request.service.ts
+++ b/src/shared/request/request.service.ts
@@ -90,13 +90,6 @@ export class RequestService {
headers.set('timelineID', timelineId);
}
- // Inject milestoneID from cached
- let milestoneId = this.cacheService.getCached('milestone_id') ||
- this.cacheService.getLocalObject('milestone_id');
- if (milestoneId) {
- headers.set('milestoneID', milestoneId);
- }
-
// Inject appKey from config
if (!_.isUndefined(this.appkey)) {
headers.set('appkey', this.appkey);
diff --git a/src/shared/testModules/pages/test/test-start.page.ts b/src/shared/testModules/pages/test/test-start.page.ts
index a8cfdc38..d7b0fba7 100755
--- a/src/shared/testModules/pages/test/test-start.page.ts
+++ b/src/shared/testModules/pages/test/test-start.page.ts
@@ -3,19 +3,965 @@ import { NavController } from 'ionic-angular';
// pages
import { AchievementsViewPage } from '../../../../pages/achievements/view/achievements-view.page';
-import { ActivitiesListPage } from '../../../../pages/activities/list/list.page';
+import { AssessmentsGroupPage } from '../../../../pages/assessments/group/assessments-group.page';
+import { ActivitiesClassicListPage } from '../../../../pages/activities-classic/list/activities-classic-list.page';
import { EventsListPage } from '../../../../pages/events/list/list.page';
import { EventsDownloadPage } from '../../../../pages/events/download/events-download.page';
import { GalleryPage } from '../../../../pages/gallery/gallery';
-import { HomePage } from '../../../../pages/home/home';
import { LevelsListPage } from '../../../../pages/levels/list/list';
import { LoginPage } from '../../../../pages/login/login';
import { RegistrationPage } from '../../../../pages/registration/registration.page';
-import { SessionListPage } from '../sessions/list/list.page';
import { SettingsPage } from '../../../../pages/settings/settings.page';
+import { EventCheckinPage } from '../../../../pages/events/checkin/event-checkin.page';
import { TeamPage } from '../../../../pages/team/team';
const PAGES = [
+ {
+ name: 'Check-in',
+ page: EventCheckinPage,
+ params: {
+ event: {
+ "id": 132,
+ "activity_id": 35,
+ "start": "2017-04-01 08:15:00",
+ "end": "2018-03-16 09:15:00",
+ "location": "location",
+ "title": "Year long",
+ "description": "Test",
+ "capacity": 40,
+ "remaining_capacity_percentage": 95,
+ "remaining_capacity": 38,
+ "isBooked": true,
+ "files": [],
+ "References": [
+ {
+ "context_id": 44,
+ "Assessment": {
+ "id": 37,
+ "name": "Event Assessment 1",
+ "context_id": 44
+ }
+ }
+ ],
+ "isAttended": false,
+ "startDisplay": "Saturday, Apr 1 at 4:15 PM",
+ "activity": {
+ "id": 35,
+ "milestone_id": 9,
+ "name": "Test Event",
+ "description": "",
+ "lead_image": null,
+ "video_url": "",
+ "order": null,
+ "instructions": "",
+ "is_locked": false,
+ "start": "2016-10-22 13:00:01",
+ "end": "2019-07-18 13:59:59",
+ "deadline": "2019-07-18 13:59:59",
+ "activity": {
+ "id": 35,
+ "milestone_id": 9,
+ "name": "Test Event",
+ "description": "",
+ "lead_image": null,
+ "video_url": "",
+ "order": null,
+ "instructions": "",
+ "is_locked": false,
+ "start": "2016-10-22 13:00:01",
+ "end": "2019-07-18 13:59:59",
+ "deadline": "2019-07-18 13:59:59"
+ },
+ "sequence": {
+ "id": 77,
+ "activity_id": 35,
+ "model": "Assess.Assessment",
+ "model_id": 37,
+ "order": 0,
+ "is_locked": false,
+ "Assess.Assessment": {
+ "id": 37,
+ "name": "Event Assessment 1",
+ "description": "Needs a description...",
+ "assessment_type": "checkin",
+ "is_live": true,
+ "is_team": false,
+ "score_type": "numeric",
+ "experience_id": 2,
+ "program_id": 4,
+ "deleted": false,
+ "deleted_date": null,
+ "comparison_group_size": 3,
+ "comparison_group_points": 10,
+ "review_period": 72,
+ "review_scope": "team",
+ "review_scope_id": null,
+ "created": "2016-06-23 06:07:39.681326",
+ "modified": "2017-07-25 16:20:27",
+ "review_instructions": null,
+ "is_repeatable": false,
+ "num_reviews": 1,
+ "review_type": "single",
+ "review_role": "mentor",
+ "auto_assign_reviewers": null,
+ "parent_id": null,
+ "auto_publish_reviews": false,
+ "context_id": 43
+ },
+ "context_id": 43
+ },
+ "assessment": {
+ "id": 37,
+ "name": "Event Assessment 1",
+ "description": "Needs a description...",
+ "assessment_type": "checkin",
+ "is_live": true,
+ "is_team": false,
+ "score_type": "numeric",
+ "experience_id": 2,
+ "program_id": 4,
+ "deleted": false,
+ "deleted_date": null,
+ "comparison_group_size": 3,
+ "comparison_group_points": 10,
+ "review_period": 72,
+ "review_scope": "team",
+ "review_scope_id": null,
+ "created": "2016-06-23 06:07:39.681326",
+ "modified": "2017-07-25 16:20:27",
+ "review_instructions": null,
+ "is_repeatable": false,
+ "num_reviews": 1,
+ "review_type": "single",
+ "review_role": "mentor",
+ "auto_assign_reviewers": null,
+ "parent_id": null,
+ "auto_publish_reviews": false,
+ "context_id": 43
+ },
+ "Activity": {
+ "id": 35,
+ "milestone_id": 9,
+ "name": "Test Event",
+ "description": "",
+ "lead_image": null,
+ "video_url": "",
+ "order": null,
+ "instructions": "",
+ "is_locked": false,
+ "start": "2016-10-22 13:00:01",
+ "end": "2019-07-18 13:59:59",
+ "deadline": "2019-07-18 13:59:59",
+ "activity": {
+ "id": 35,
+ "milestone_id": 9,
+ "name": "Test Event",
+ "description": "",
+ "lead_image": null,
+ "video_url": "",
+ "order": null,
+ "instructions": "",
+ "is_locked": false,
+ "start": "2016-10-22 13:00:01",
+ "end": "2019-07-18 13:59:59",
+ "deadline": "2019-07-18 13:59:59"
+ },
+ "sequence": {
+ "id": 77,
+ "activity_id": 35,
+ "model": "Assess.Assessment",
+ "model_id": 37,
+ "order": 0,
+ "is_locked": false,
+ "Assess.Assessment": {
+ "id": 37,
+ "name": "Event Assessment 1",
+ "description": "Needs a description...",
+ "assessment_type": "checkin",
+ "is_live": true,
+ "is_team": false,
+ "score_type": "numeric",
+ "experience_id": 2,
+ "program_id": 4,
+ "deleted": false,
+ "deleted_date": null,
+ "comparison_group_size": 3,
+ "comparison_group_points": 10,
+ "review_period": 72,
+ "review_scope": "team",
+ "review_scope_id": null,
+ "created": "2016-06-23 06:07:39.681326",
+ "modified": "2017-07-25 16:20:27",
+ "review_instructions": null,
+ "is_repeatable": false,
+ "num_reviews": 1,
+ "review_type": "single",
+ "review_role": "mentor",
+ "auto_assign_reviewers": null,
+ "parent_id": null,
+ "auto_publish_reviews": false,
+ "context_id": 43
+ },
+ "context_id": 43
+ },
+ "assessment": {
+ "id": 37,
+ "name": "Event Assessment 1",
+ "description": "Needs a description...",
+ "assessment_type": "checkin",
+ "is_live": true,
+ "is_team": false,
+ "score_type": "numeric",
+ "experience_id": 2,
+ "program_id": 4,
+ "deleted": false,
+ "deleted_date": null,
+ "comparison_group_size": 3,
+ "comparison_group_points": 10,
+ "review_period": 72,
+ "review_scope": "team",
+ "review_scope_id": null,
+ "created": "2016-06-23 06:07:39.681326",
+ "modified": "2017-07-25 16:20:27",
+ "review_instructions": null,
+ "is_repeatable": false,
+ "num_reviews": 1,
+ "review_type": "single",
+ "review_role": "mentor",
+ "auto_assign_reviewers": null,
+ "parent_id": null,
+ "auto_publish_reviews": false,
+ "context_id": 43
+ }
+ },
+ "ActivitySequence": [
+ {
+ "id": 77,
+ "activity_id": 35,
+ "model": "Assess.Assessment",
+ "model_id": 37,
+ "order": 0,
+ "is_locked": false,
+ "Assess.Assessment": {
+ "id": 37,
+ "name": "Event Assessment 1",
+ "description": "Needs a description...",
+ "assessment_type": "checkin",
+ "is_live": true,
+ "is_team": false,
+ "score_type": "numeric",
+ "experience_id": 2,
+ "program_id": 4,
+ "deleted": false,
+ "deleted_date": null,
+ "comparison_group_size": 3,
+ "comparison_group_points": 10,
+ "review_period": 72,
+ "review_scope": "team",
+ "review_scope_id": null,
+ "created": "2016-06-23 06:07:39.681326",
+ "modified": "2017-07-25 16:20:27",
+ "review_instructions": null,
+ "is_repeatable": false,
+ "num_reviews": 1,
+ "review_type": "single",
+ "review_role": "mentor",
+ "auto_assign_reviewers": null,
+ "parent_id": null,
+ "auto_publish_reviews": false,
+ "context_id": 43
+ },
+ "context_id": 43
+ }
+ ],
+ "References": [
+ {
+ "context_id": 43,
+ "Assessment": {
+ "id": 37,
+ "name": "Event Assessment 1"
+ }
+ }
+ ]
+ },
+ "coverUrl": "/assets/img/static/event-cover-3.jpg",
+ "assessment": {
+ "id": 37,
+ "name": "Event Assessment 1",
+ "context_id": 44
+ },
+ "context_id": 44
+ },
+ submissions: [
+ {
+ "id": 20,
+ "submitter_id": 20,
+ "created": "2017-07-28 03:05:36",
+ "modified": "2017-07-28 03:05:38",
+ "status": "in progress",
+ "assessment_id": 37,
+ "order": null,
+ "submitted": null,
+ "team_id": null,
+ "program_id": 4,
+ "activity_id": 132,
+ "score": null,
+ "moderated_score": "0",
+ "publish_date": null,
+ "review_score": "0",
+ "timeline_id": 5,
+ "context_id": 44,
+ "assessment": {
+ "id": 37,
+ "name": "Event Assessment 1",
+ "description": "Needs a description...",
+ "assessment_type": "checkin",
+ "is_live": true,
+ "is_team": false,
+ "score_type": "numeric",
+ "experience_id": 2,
+ "program_id": 4,
+ "deleted": false,
+ "deleted_date": null,
+ "comparison_group_size": 3,
+ "comparison_group_points": 10,
+ "review_period": 72,
+ "review_scope": "team",
+ "review_scope_id": null,
+ "created": "2016-06-23 06:07:39.681326",
+ "modified": "2017-07-25 16:20:27",
+ "review_instructions": null,
+ "is_repeatable": false,
+ "num_reviews": 1,
+ "review_type": "single",
+ "review_role": "mentor",
+ "visibility": {
+ "guest": false,
+ "participant": true,
+ "mentor": true,
+ "coordinator": true,
+ "admin": false,
+ "team": false,
+ "sysadmin": false
+ },
+ "auto_assign_reviewers": null,
+ "parent_id": null,
+ "auto_publish_reviews": false
+ },
+ "answer": [
+ {
+ "id": 75,
+ "assessment_submission_id": 20,
+ "comment": null,
+ "assessment_question_id": 129,
+ "answer": 284,
+ "score": "0"
+ },
+ {
+ "id": 76,
+ "assessment_submission_id": 20,
+ "comment": null,
+ "assessment_question_id": 132,
+ "answer": {
+ "filename": "stuckhere.png",
+ "handle": "iALqct8jRSuKhVs3NB8C",
+ "mimetype": "image/png",
+ "originalPath": "stuckhere.png",
+ "size": 195280,
+ "source": "local_file_system",
+ "url": "https://cdn.filestackcontent.com/iALqct8jRSuKhVs3NB8C",
+ "status": "Stored",
+ "icon": "fa-image",
+ "key": "iALqct8jRSuKhVs3NB8C"
+ },
+ "score": "0"
+ }
+ ],
+ "review": []
+ }
+ ]
+ }
+ },
+ {
+ name: 'Multiple Choice Questions',
+ page: AssessmentsGroupPage,
+ params: {
+ assessmentGroup: {
+ AssessmentGroupQuestion: [
+ {
+ "id": 140,
+ "assessment_group_id": 42,
+ "assessment_question_id": 140,
+ "order": null,
+ "AssessmentQuestion": {
+ "id": 140,
+ "assessment_id": 37,
+ "name": "1st Multitple Question",
+ "description": "",
+ "hint": "",
+ "score": "1",
+ "question_type": "multiple",
+ "has_comment": false,
+ "is_required": true,
+ "audience": "[\"reviewer\",\"submitter\"]",
+ "answer": null,
+ "file_type": null,
+ "AssessmentQuestionChoice": [
+ {
+ "id": 283,
+ "assessment_question_id": 140,
+ "assessment_choice_id": 283,
+ "order": 1,
+ "weight": "1",
+ "explanation": null,
+ "AssessmentChoice": {
+ "id": 283,
+ "name": "New Choice 1",
+ "description": ""
+ }
+ },
+ {
+ "id": 284,
+ "assessment_question_id": 140,
+ "assessment_choice_id": 284,
+ "order": 2,
+ "weight": "1",
+ "explanation": null,
+ "AssessmentChoice": {
+ "id": 284,
+ "name": "New Choice 2",
+ "description": ""
+ }
+ },
+ {
+ "id": 285,
+ "assessment_question_id": 140,
+ "assessment_choice_id": 285,
+ "order": 3,
+ "weight": "1",
+ "explanation": null,
+ "AssessmentChoice": {
+ "id": 285,
+ "name": "New Choice 3",
+ "description": ""
+ }
+ }
+ ]
+ }
+ },
+ {
+ "id": 141,
+ "assessment_group_id": 42,
+ "assessment_question_id": 141,
+ "order": null,
+ "AssessmentQuestion": {
+ "id": 141,
+ "assessment_id": 37,
+ "name": "2nd Multi Question",
+ "description": "",
+ "hint": "",
+ "score": "1",
+ "question_type": "multiple",
+ "has_comment": false,
+ "is_required": true,
+ "audience": "[\"reviewer\",\"submitter\"]",
+ "answer": null,
+ "file_type": null,
+ "AssessmentQuestionChoice": [
+ {
+ "id": 286,
+ "assessment_question_id": 141,
+ "assessment_choice_id": 286,
+ "order": 1,
+ "weight": "1",
+ "explanation": null,
+ "AssessmentChoice": {
+ "id": 286,
+ "name": "One of the first",
+ "description": ""
+ }
+ },
+ {
+ "id": 287,
+ "assessment_question_id": 141,
+ "assessment_choice_id": 287,
+ "order": 2,
+ "weight": "1",
+ "explanation": null,
+ "AssessmentChoice": {
+ "id": 287,
+ "name": "2nd ",
+ "description": ""
+ }
+ },
+ {
+ "id": 288,
+ "assessment_question_id": 141,
+ "assessment_choice_id": 288,
+ "order": 3,
+ "weight": "1",
+ "explanation": null,
+ "AssessmentChoice": {
+ "id": 288,
+ "name": "3rd Choice",
+ "description": ""
+ }
+ },
+ {
+ "id": 289,
+ "assessment_question_id": 141,
+ "assessment_choice_id": 289,
+ "order": 4,
+ "weight": "0",
+ "explanation": null,
+ "AssessmentChoice": {
+ "id": 289,
+ "name": "Select me too!",
+ "description": ""
+ }
+ }
+ ]
+ }
+ }
+
+ ]
+ },
+ assessment: {
+ "Assessment": {
+ "id": 37,
+ "name": "Multiple Option Question",
+ "description": "Needs a description...",
+ "assessment_type": "quiz",
+ "is_live": false,
+ "is_team": false,
+ "score_type": "numeric",
+ "experience_id": 2,
+ "program_id": 5,
+ "deleted": false,
+ "deleted_date": null,
+ "comparison_group_size": 3,
+ "comparison_group_points": 10,
+ "review_period": 72,
+ "review_scope": "team",
+ "review_scope_id": null,
+ "created": "2016-06-23 06:07:39.681326",
+ "modified": "2016-06-23 06:07:39.681326",
+ "review_instructions": null,
+ "is_repeatable": false,
+ "num_reviews": 1,
+ "review_type": "single",
+ "review_role": "mentor",
+ "visibility": {
+ "guest": false,
+ "participant": true,
+ "mentor": true,
+ "coordinator": true,
+ "admin": false,
+ "team": false,
+ "sysadmin": false
+ },
+ "auto_assign_reviewers": null,
+ "parent_id": null,
+ "auto_publish_reviews": false
+ },
+ "AssessmentQuestion": [
+ {
+ "name": "1st Multitple Question",
+ "question_type": "multiple",
+ "file_type": null,
+ "audience": "[\"reviewer\",\"submitter\"]",
+ "id": 140,
+ "assessment_id": 37
+ },
+ {
+ "name": "2nd Multi Question",
+ "question_type": "multiple",
+ "file_type": null,
+ "audience": "[\"reviewer\",\"submitter\"]",
+ "id": 141,
+ "assessment_id": 37,
+ "AssessmentQuestionChoice": [
+ {
+ "id": 286,
+ "assessment_question_id": 141,
+ "assessment_choice_id": 286,
+ "order": 1,
+ "weight": "1",
+ "explanation": null,
+ "AssessmentChoice": {
+ "id": 286,
+ "name": "One of the first",
+ "description": ""
+ }
+ },
+ {
+ "id": 287,
+ "assessment_question_id": 141,
+ "assessment_choice_id": 287,
+ "order": 2,
+ "weight": "1",
+ "explanation": null,
+ "AssessmentChoice": {
+ "id": 287,
+ "name": "2nd ",
+ "description": ""
+ }
+ },
+ {
+ "id": 288,
+ "assessment_question_id": 141,
+ "assessment_choice_id": 288,
+ "order": 3,
+ "weight": "1",
+ "explanation": null,
+ "AssessmentChoice": {
+ "id": 288,
+ "name": "3rd Choice",
+ "description": ""
+ }
+ },
+ {
+ "id": 289,
+ "assessment_question_id": 141,
+ "assessment_choice_id": 289,
+ "order": 4,
+ "weight": "0",
+ "explanation": null,
+ "AssessmentChoice": {
+ "id": 289,
+ "name": "Select me too!",
+ "description": ""
+ }
+ }
+ ]
+ }
+ ],
+ "AssessmentGroup": [
+ {
+ "id": 42,
+ "assessment_id": 37,
+ "name": "1st Group",
+ "description": "",
+ "order": 1,
+ "review_instructions": "",
+ "restart_numbering": false,
+ "AssessmentGroupQuestion": [
+ {
+ "id": 140,
+ "assessment_group_id": 42,
+ "assessment_question_id": 140,
+ "order": null,
+ "AssessmentQuestion": {
+ "id": 140,
+ "assessment_id": 37,
+ "name": "1st Multitple Question",
+ "description": "",
+ "hint": "",
+ "score": "1",
+ "question_type": "multiple",
+ "has_comment": false,
+ "is_required": true,
+ "audience": "[\"reviewer\",\"submitter\"]",
+ "answer": null,
+ "file_type": null,
+ "AssessmentQuestionChoice": [
+ {
+ "id": 283,
+ "assessment_question_id": 140,
+ "assessment_choice_id": 283,
+ "order": 1,
+ "weight": "1",
+ "explanation": null,
+ "AssessmentChoice": {
+ "id": 283,
+ "name": "New Choice 1",
+ "description": ""
+ }
+ },
+ {
+ "id": 284,
+ "assessment_question_id": 140,
+ "assessment_choice_id": 284,
+ "order": 2,
+ "weight": "1",
+ "explanation": null,
+ "AssessmentChoice": {
+ "id": 284,
+ "name": "New Choice 2",
+ "description": ""
+ }
+ },
+ {
+ "id": 285,
+ "assessment_question_id": 140,
+ "assessment_choice_id": 285,
+ "order": 3,
+ "weight": "1",
+ "explanation": null,
+ "AssessmentChoice": {
+ "id": 285,
+ "name": "New Choice 3",
+ "description": ""
+ }
+ }
+ ]
+ }
+ },
+ {
+ "id": 141,
+ "assessment_group_id": 42,
+ "assessment_question_id": 141,
+ "order": null,
+ "AssessmentQuestion": {
+ "id": 141,
+ "assessment_id": 37,
+ "name": "2nd Multi Question",
+ "description": "",
+ "hint": "",
+ "score": "1",
+ "question_type": "multiple",
+ "has_comment": false,
+ "is_required": true,
+ "audience": "[\"reviewer\",\"submitter\"]",
+ "answer": null,
+ "file_type": null,
+ "AssessmentQuestionChoice": [
+ {
+ "id": 286,
+ "assessment_question_id": 141,
+ "assessment_choice_id": 286,
+ "order": 1,
+ "weight": "1",
+ "explanation": null,
+ "AssessmentChoice": {
+ "id": 286,
+ "name": "One of the first",
+ "description": ""
+ }
+ },
+ {
+ "id": 287,
+ "assessment_question_id": 141,
+ "assessment_choice_id": 287,
+ "order": 2,
+ "weight": "1",
+ "explanation": null,
+ "AssessmentChoice": {
+ "id": 287,
+ "name": "2nd ",
+ "description": ""
+ }
+ },
+ {
+ "id": 288,
+ "assessment_question_id": 141,
+ "assessment_choice_id": 288,
+ "order": 3,
+ "weight": "1",
+ "explanation": null,
+ "AssessmentChoice": {
+ "id": 288,
+ "name": "3rd Choice",
+ "description": ""
+ }
+ },
+ {
+ "id": 289,
+ "assessment_question_id": 141,
+ "assessment_choice_id": 289,
+ "order": 4,
+ "weight": "0",
+ "explanation": null,
+ "AssessmentChoice": {
+ "id": 289,
+ "name": "Select me too!",
+ "description": ""
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ ],
+
+ }
+ }
+ },
+ {
+ name: 'Assorted Assessments Questions',
+ page: AssessmentsGroupPage,
+ params: {
+ assessmentGroup: {
+ AssessmentGroupQuestion: [
+ {
+ AssessmentQuestion: {
+ id: 4,
+ question_type: 'file',
+ audience: "[\"reviewer\",\"submitter\"]",
+ file_type: 'image',
+ AssessmentQuestionChoice: [],
+ answers: {
+ submitter: [],
+ reviewer: [],
+ },
+ name: 'TASK: What was actually required of me in that situation?',
+ is_required: true
+ }
+ },
+ {
+ AssessmentQuestion: {
+ id: 5,
+ question_type: 'multiple',
+ audience: "[\"reviewer\",\"submitter\"]",
+ file_type: null,
+ AssessmentQuestionChoice: [
+ {
+ "id": 1,
+ "assessment_question_id": 5,
+ "assessment_choice_id": 1,
+ "order": 1,
+ "weight": "1",
+ "explanation": null,
+ "AssessmentChoice": {
+ "id": 1,
+ "name": "Test 1",
+ "description": ""
+ }
+ },
+ {
+ "id": 2,
+ "assessment_question_id": 5,
+ "assessment_choice_id": 2,
+ "order": 2,
+ "weight": "1",
+ "explanation": null,
+ "AssessmentChoice": {
+ "id": 2,
+ "name": "Test 2",
+ "description": ""
+ }
+ },
+ {
+ "id": 3,
+ "assessment_question_id": 5,
+ "assessment_choice_id": 3,
+ "order": 3,
+ "weight": "1",
+ "explanation": null,
+ "AssessmentChoice": {
+ "id": 3,
+ "name": "Test 3",
+ "description": ""
+ }
+ }
+ ],
+ answers: {
+ submitter: [],
+ reviewer: [],
+ },
+ name: 'Multiple: 3 choices Questions',
+ is_required: true
+ }
+ },
+
+ {
+ AssessmentQuestion: {
+
+ id: 1,
+ question_type: 'oneof',
+ audience: "[\"reviewer\",\"submitter\"]",
+ file_type: null,
+ AssessmentQuestionChoice: [
+ {
+ "id": 1,
+ "assessment_question_id": 5,
+ "assessment_choice_id": 1,
+ "order": 1,
+ "weight": "1",
+ "explanation": null,
+ "AssessmentChoice": {
+ "id": 1,
+ "name": "Test 1",
+ "description": ""
+ }
+ },
+ {
+ "id": 2,
+ "assessment_question_id": 5,
+ "assessment_choice_id": 2,
+ "order": 2,
+ "weight": "1",
+ "explanation": null,
+ "AssessmentChoice": {
+ "id": 2,
+ "name": "Test 2",
+ "description": ""
+ }
+ },
+ {
+ "id": 3,
+ "assessment_question_id": 5,
+ "assessment_choice_id": 3,
+ "order": 3,
+ "weight": "1",
+ "explanation": null,
+ "AssessmentChoice": {
+ "id": 3,
+ "name": "Test 3",
+ "description": ""
+ }
+ }
+ ],
+ answers: {
+ submitter: [],
+ reviewer: [],
+ },
+ name: 'SITUATION: The context in which this experience took place',
+ is_required: true
+ }
+ },
+ {
+ AssessmentQuestion: {
+ id: 2,
+ question_type: 'text',
+ audience: "[\"reviewer\",\"submitter\"]",
+ file_type: null,
+ AssessmentQuestionChoice: [],
+ answers: {
+ submitter: [],
+ reviewer: [],
+ },
+ name: 'TASK: What was actually required of me in that situation?',
+ is_required: true
+ }
+ },
+ {
+ AssessmentQuestion: {
+ id: 3,
+ question_type: 'text',
+ audience: "[\"reviewer\",\"submitter\"]",
+ file_type: null,
+ AssessmentQuestionChoice: [],
+ answers: {
+ submitter: [],
+ reviewer: [],
+ },
+ name: 'ACTION: What did I do given the situation and the task?',
+ is_required: true
+ }
+ }
+ ]
+ },
+ assessment: {
+ Assessment: {
+ id:'temporary_fake_id'
+ },
+ AssessmentGroupQuestion: []
+
+ }
+ }
+ },
{
name: 'Events',
page: EventsListPage
@@ -24,10 +970,6 @@ const PAGES = [
name: 'Events Download',
page: EventsDownloadPage
},
- {
- name: 'Home Page',
- page: HomePage
- },
{
name: 'Registration',
page: RegistrationPage
@@ -42,7 +984,7 @@ const PAGES = [
},
{
name: 'Activities',
- page: ActivitiesListPage
+ page: ActivitiesClassicListPage
},
{
name: 'Levels',
@@ -59,7 +1001,7 @@ const PAGES = [
{
name: 'Achievement View',
page: AchievementsViewPage
- },
+ }
];
@Component({
@@ -72,12 +1014,13 @@ export class TestStartPage {
testPage;
constructor(public nav: NavController) {
- console.log('??', AchievementsViewPage);
+ // console.log('ActivitiesClassicListPage', ActivitiesClassicListPage)
+ // console.log('??', ActivitiesClassicListPage);
}
goTo(nav) {
this.testPage = nav.page;
- this.nav.push(nav.page);
+ this.nav.push(nav.page, nav.params || null);
}
}
diff --git a/src/shared/translation/translation.module.ts b/src/shared/translation/translation.module.ts
new file mode 100644
index 00000000..add7eed1
--- /dev/null
+++ b/src/shared/translation/translation.module.ts
@@ -0,0 +1,6 @@
+import { NgModule } from '@angular/core';
+import { TranslationService } from './translation.service';
+@NgModule({
+ providers: [ TranslationService ]
+})
+export class TranslationModule {}
\ No newline at end of file
diff --git a/src/shared/translation/translation.service.ts b/src/shared/translation/translation.service.ts
new file mode 100644
index 00000000..634046a6
--- /dev/null
+++ b/src/shared/translation/translation.service.ts
@@ -0,0 +1,15 @@
+import { Injectable } from '@angular/core';
+import { TranslateService } from '@ngx-translate/core';
+import { i18nEN } from './assets/i18n-en';
+import { i18nCN } from './assets/i18n-cn';
+@Injectable()
+export class TranslationService {
+ constructor(public translate: TranslateService,){
+ translate.addLangs(["en", "cn"]);
+ translate.setDefaultLang("en");
+ translate.use("en");
+ }
+ isTranslated(checkStatus){
+ return checkStatus == true ? this.translate.use("cn") : this.translate.use("en")
+ }
+}
\ No newline at end of file
diff --git a/src/shared/utils/utils.module.ts b/src/shared/utils/utils.module.ts
new file mode 100644
index 00000000..779d588f
--- /dev/null
+++ b/src/shared/utils/utils.module.ts
@@ -0,0 +1,10 @@
+import { NgModule } from '@angular/core';
+import { UtilsService } from './utils.service';
+
+@NgModule({
+ providers: [UtilsService]
+})
+
+export class UtilsModule {
+
+}
diff --git a/src/shared/utils/utils.service.ts b/src/shared/utils/utils.service.ts
new file mode 100644
index 00000000..9d1fe2c8
--- /dev/null
+++ b/src/shared/utils/utils.service.ts
@@ -0,0 +1,65 @@
+import { Injectable } from '@angular/core';
+
+const zipMime = [
+ 'application/x-compressed',
+ 'application/x-zip-compressed',
+ 'application/zip',
+ 'multipart/x-zip',
+];
+
+@Injectable()
+export class UtilsService {
+
+ getIcon(mimetype: string) {
+ let result: string = '';
+
+ if (zipMime.indexOf(mimetype) >= 0) {
+ result = 'fa-zip';
+
+ // set icon to different document type (excel, word, powerpoint, audio, video)
+ } else if (mimetype.indexOf('audio/') >= 0) {
+ result = 'fa-sound';
+ } else if (mimetype.indexOf('image/') >= 0) {
+ result = 'fa-image';
+ } else if (mimetype.indexOf('text/') >= 0) {
+ result = 'fa-text';
+ } else if (mimetype.indexOf('video/') >= 0) {
+ result = 'fa-movie';
+ } else {
+ switch (mimetype) {
+ case 'application/pdf':
+ result = 'fa-pdf';
+ break;
+ case 'application/msword':
+ case 'application/vnd.openxmlformats-officedocument.wordprocessingml.document':
+ result = 'fa-word';
+ break;
+ case 'application/excel':
+ case 'application/vnd.ms-excel':
+ case 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet':
+ case 'application/x-excel':
+ case 'application/x-msexcel':
+ result = 'fa-excel';
+ break;
+ case 'application/mspowerpoint':
+ case 'application/vnd.ms-powerpoint':
+ case 'application/vnd.openxmlformats-officedocument.presentationml.presentation':
+ case 'application/x-mspowerpoint':
+ result = 'fa-powerpoint';
+ break;
+ default:
+ result = 'fa-file';
+ break;
+ }
+ }
+
+ return result;
+ }
+
+ isCompressed(type: string) {
+ if (zipMime.indexOf(type) >= 0) {
+ return true;
+ }
+ return false;
+ }
+}
diff --git a/src/theme/practera.theme.default.scss b/src/theme/practera.theme.default.scss
index 6e7d0ff3..ca69c57a 100755
--- a/src/theme/practera.theme.default.scss
+++ b/src/theme/practera.theme.default.scss
@@ -17,6 +17,9 @@ $font-secondary: 'Raleway';
background-color: color($colors, primary, base);
color: color($colors, secondary, base);
}
+.flex-display {
+ display: flex;
+}
// 4. General Text styling
.app-title {
font-family: $font-primary;
@@ -32,6 +35,9 @@ $font-secondary: 'Raleway';
font-family: $font-primary;
font-size: 1.3rem;
}
+.error-message {
+ padding: 6px;
+}
.line-break {
word-break: break-word;
}
@@ -39,6 +45,13 @@ $font-secondary: 'Raleway';
.general-button {
background-color: color($colors, button, base);
}
+.close {
+ font-size: 2.7rem;
+ float: right;
+ background-color: transparent;
+ color: color($colors, secondary, base);
+ display: inline-block;
+}
// 6. General Pages Styling
// 6.1 Default Theme Settings Start
.toolbar.toolbar-md,
@@ -87,10 +100,7 @@ $font-secondary: 'Raleway';
.toolbar-title-ios {
color: color($colors, secondary, base);
}
- .toolbar-title-md {
- font-size: 1.7rem;
- padding-top: 3px;
- }
+ .toolbar-title-md,
.toolbar-title-ios {
font-size: 1.7rem;
}
@@ -144,6 +154,24 @@ $font-secondary: 'Raleway';
.close-btn {
@include closeBtn;
}
+ // general logo
+ .general-logo {
+ max-width: 80%;
+ }
+ // general form
+ .general-form {
+ width: 100%;
+ ion-item {
+ padding: 0px;
+ .item-inner {
+ border-bottom: 1px solid color($colors, border, base) !important;
+ }
+ }
+ .general-circle-btn {
+ background: none;
+ padding-top: 20pt;
+ }
+ }
}
// 7.2 login form box styling (shared module: part 2)
.login-container {
@@ -395,7 +423,7 @@ event {
height: 40%;
font-size: 28pt;
font-weight: bold;
-
+
}
}
}
@@ -439,7 +467,7 @@ event {
}
}
}
-// achievement page styling
+// 10. Achievement page styling
.ahievements-popup {
.scroll-content {
overflow: hidden !important;
@@ -461,6 +489,234 @@ event {
}
}
}
+.assessments-items-popup {
+ display: flex;
+ align-items: center;
+ padding-left: 12pt;
+ .item-popup-img {
+ width: 20pt;
+ height: 20pt;
+ }
+ .item-popup-text {
+ padding-left: 4pt;
+ }
+}
+// 13. Rankings Page Styling
+.rankings {
+ .scroll-content {
+ bottom: 49px !important;
+ }
+ ion-list:first-child {
+ margin-bottom: 5px;
+ }
+}
+tutorial-page {
+ .header-md::after,
+ .tabs-md[tabsPlacement="top"] > .tabbar::after, .footer-md::before,
+ .tabs-md[tabsPlacement="bottom"] > .tabbar::before {
+ background-image: none;
+ }
+}
+.tutorial-slides {
+ h1 {
+ padding-bottom: 20pt;
+ }
+ p {
+ padding: 0 36pt;
+ margin-top: -12pt;
+ }
+ img {
+ width: 36%;
+ }
+ button.general-circle-btn {
+ width: 80%;
+ margin: 0 auto;
+ }
+ .ranking-item {
+ width: 100%;
+ display: flex;
+ .blur-hidden-text {
+ color: transparent;
+ text-shadow: rgba(0, 0, 0, 0.5) 0px 0px 6px;
+ }
+ ion-icon {
+ font-size: 10pt;
+ font-weight: 900;
+ }
+ ion-icon[name=arrow-forward] {
+ font-weight: normal;
+ font-size: 18pt;
+ padding-left: 8pt;
+ color: #bbb;
+ }
+ .badge-image {
+ width: 60px;
+ height: 60px;
+ }
+ p {
+ display: flex;
+ align-items: center;
+ word-break: break-all;
+ margin: 0px;
+ padding: 15px 0pt;
+ border-bottom: 1px solid color($colors, border, base);
+ }
+ p:first-child{
+ border: none;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ }
+ }
+}
+.skip-button {
+ border: none;
+ float: right;
+}
+.slides-button {
+ .toolbar-background {
+ background-color: color($colors, secondary, base);
+ border: none;
+ }
+ .next-button,
+ .skip-button {
+ float: right;
+ }
+ .prev-button,
+ .next-button,
+ .skip-button {
+ background-color: color($colors, secondary, base) !important;
+ color: color($colors, primary, base);
+ box-shadow: none;
+ }
+}
+// 14.leaderboard settings page styling
+.leaderboard-settings {
+ .hide-settings {
+ padding: 0;
+ margin: 0;
+ display: flex;
+ align-items: center;
+ }
+}
+// 15. items popup general styling
+.items-popup {
+ .scroll-content {
+ overflow-y: hidden;
+ }
+ .items-popup-data {
+ height: 100%;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ .tutorial-slides p {
+ margin-top: 12pt;
+ }
+ .tutorial-slides img {
+ width: 50%;
+ }
+ .tutorial-slides .swiper-pagination {
+ bottom: 0px;
+ }
+ .general-circle-btn {
+ width: 100%;
+ margin-top: 12pt;
+ padding: 12pt;
+ background-color: color($colors, primary, base);
+ color: color($colors, secondary, base);
+ }
+ }
+}
+// 11. Settings & Tutorial page stylings
+.settings {
+ .list-header-md {
+ border: none;
+ }
+}
+tutorial-page {
+ .header-md::after,
+ .tabs-md[tabsPlacement="top"] > .tabbar::after, .footer-md::before,
+ .tabs-md[tabsPlacement="bottom"] > .tabbar::before {
+ background-image: none;
+ }
+}
+.tutorial-slides {
+ h1 {
+ padding-bottom: 20pt;
+ }
+ p {
+ padding: 0 36pt;
+ margin-top: -12pt;
+ }
+ img {
+ width: 36%;
+ }
+ button.general-circle-btn {
+ width: 80%;
+ margin: 0 auto;
+ }
+ .swiper-pagination {
+ bottom: 16pt;
+ }
+}
+.skip-button {
+ border: none;
+ float: right;
+}
+.slides-button {
+ .toolbar-background {
+ background-color: color($colors, secondary, base);
+ border: none;
+ }
+ .next-button,
+ .skip-button {
+ float: right;
+ }
+ .prev-button,
+ .next-button,
+ .skip-button {
+ background-color: color($colors, secondary, base) !important;
+ color: color($colors, primary, base);
+ box-shadow: none;
+ }
+}
+// 14.leaderboard settings page styling
+.leaderboard-settings {
+ .hide-settings {
+ padding: 0;
+ margin: 0;
+ display: flex;
+ align-items: center;
+ }
+}
+// 15. items popup general styling
+.items-popup {
+ .scroll-content {
+ overflow-y: hidden;
+ }
+ .items-popup-data {
+ height: 100%;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ .tutorial-slides p {
+ margin-top: 12pt;
+ }
+ .tutorial-slides img {
+ width: 50%;
+ }
+ .tutorial-slides .swiper-pagination {
+ bottom: 0px;
+ }
+ .general-circle-btn {
+ width: 100%;
+ margin-top: 12pt;
+ padding: 12pt;
+ background-color: color($colors, primary, base);
+ color: color($colors, secondary, base);
+ }
+ }
+}
// landscape activity list view
@media screen and (min-width: 500px) {
.score-board {
@@ -479,4 +735,3 @@ event {
}
}
}
-
diff --git a/src/theme/utils.scss b/src/theme/utils.scss
index 755c2d67..64e1d2f9 100644
--- a/src/theme/utils.scss
+++ b/src/theme/utils.scss
@@ -8,12 +8,30 @@
}
/* Utilities */
+// colours
+.red { color: red; }
+.strong { font-weight: bolder; }
+.muted {
+ opacity: 0.5;
+}
+
+.hr {
+ padding-top: 16px;
+ margin-bottom: 13px;
+ min-height: 4.5rem;
+ border-top: 1px solid #dedede;
+}
+
.title-wrap {
overflow: inherit;
text-overflow: none;
white-space: pre-wrap;
}
+.uppercase {
+ text-transform: uppercase;
+}
+
.inset {
&-header {
font-weight: 500;
diff --git a/src/theme/variables.scss b/src/theme/variables.scss
index a5b6d624..968ea46e 100644
--- a/src/theme/variables.scss
+++ b/src/theme/variables.scss
@@ -16,7 +16,8 @@ $item-wp-detail-push-show: true;
// http://ionicframework.com/docs/v2/theming/overriding-ionic-variables/
// General Colors (Shared File)
-$primary: #22c7fa;
+// main colors
+$primary: #ebebeb; // #E60028
$secondary: #ffffff;
$danger: #f53d3d;
$light: #f4f4f4;
@@ -80,8 +81,15 @@ $colors: (
base: $soft-green,
contrast: darken($soft-green, 10%) // darken for contrast?
),
+ purple: (
+ base: #a94aa9,
+ contrast: $secondary
+ )
);
+$item-md-detail-push-color: color($colors, primary-light, base);
+$item-wp-detail-push-color: color($colors, primary-light, base);
+$item-ios-detail-push-color: color($colors, primary-light, base);
// App iOS Variables
// --------------------------------------------------
@@ -127,4 +135,3 @@ $colors: (
// @import "roboto";
// @import "noto-sans";
-
diff --git a/www/service-worker.js b/www/service-worker.js
index 6679781a..86d395e0 100755
--- a/www/service-worker.js
+++ b/www/service-worker.js
@@ -14,6 +14,8 @@ self.toolbox.options.cache = {
// pre-cache our key assets
self.toolbox.precache(
[
+ './assets/js/filestack.js',
+ './assets/js/filestack-0.6.2.js',
'./build/main.js',
'./build/main.css',
'./build/polyfills.js',
@@ -27,4 +29,4 @@ self.toolbox.router.any('/*', self.toolbox.cacheFirst);
// for any other requests go to the network, cache,
// and then only use that cached resource if your user goes offline
-self.toolbox.router.default = self.toolbox.networkFirst;
\ No newline at end of file
+self.toolbox.router.default = self.toolbox.networkFirst;
diff --git a/yarn.lock b/yarn.lock
new file mode 100644
index 00000000..47dc3624
--- /dev/null
+++ b/yarn.lock
@@ -0,0 +1,5286 @@
+# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
+# yarn lockfile v1
+
+
+"@angular/common@4.1.3":
+ version "4.1.3"
+ resolved "https://registry.yarnpkg.com/@angular/common/-/common-4.1.3.tgz#e7c4791e32131cf74c239428c2a67daab2eef017"
+
+"@angular/compiler-cli@4.1.3":
+ version "4.1.3"
+ resolved "https://registry.yarnpkg.com/@angular/compiler-cli/-/compiler-cli-4.1.3.tgz#c2362ffdf65756471481f839fab675bcac213f96"
+ dependencies:
+ "@angular/tsc-wrapped" "4.1.3"
+ minimist "^1.2.0"
+ reflect-metadata "^0.1.2"
+
+"@angular/compiler@4.1.3":
+ version "4.1.3"
+ resolved "https://registry.yarnpkg.com/@angular/compiler/-/compiler-4.1.3.tgz#d2dd30853b0cf4a54758b4a314632c231f9c94c3"
+
+"@angular/core@4.1.3":
+ version "4.1.3"
+ resolved "https://registry.yarnpkg.com/@angular/core/-/core-4.1.3.tgz#285498eb86ab7d0b6f982f8f9f487ef610013b35"
+
+"@angular/forms@4.1.3":
+ version "4.1.3"
+ resolved "https://registry.yarnpkg.com/@angular/forms/-/forms-4.1.3.tgz#380ab4c3af84c5d1d748c2a7d04151c7dc8e4982"
+
+"@angular/http@4.1.3":
+ version "4.1.3"
+ resolved "https://registry.yarnpkg.com/@angular/http/-/http-4.1.3.tgz#eb9d1c302a0172815f9a573310d9be0bdeb845ae"
+
+"@angular/platform-browser-dynamic@4.1.3":
+ version "4.1.3"
+ resolved "https://registry.yarnpkg.com/@angular/platform-browser-dynamic/-/platform-browser-dynamic-4.1.3.tgz#3c13fdcf591d487f6efdc1d46913f280c6d8c2ec"
+
+"@angular/platform-browser@4.1.3":
+ version "4.1.3"
+ resolved "https://registry.yarnpkg.com/@angular/platform-browser/-/platform-browser-4.1.3.tgz#4fa1db5119dd178b315ddae5b329bee1a932a5bd"
+
+"@angular/tsc-wrapped@4.1.3":
+ version "4.1.3"
+ resolved "https://registry.yarnpkg.com/@angular/tsc-wrapped/-/tsc-wrapped-4.1.3.tgz#2d6372c9187bf1621eacd960b94b39c4f95293cd"
+ dependencies:
+ tsickle "^0.21.0"
+
+"@ionic/app-scripts@2.0.0":
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/@ionic/app-scripts/-/app-scripts-2.0.0.tgz#cb1057c966849d6e6ea837209ebb4ff6fb065f27"
+ dependencies:
+ autoprefixer "7.1.1"
+ babili "0.1.2"
+ chalk "1.1.3"
+ chokidar "1.7.0"
+ clean-css "3.4.27"
+ cross-spawn "5.1.0"
+ express "4.15.3"
+ fs-extra "3.0.1"
+ glob "7.1.1"
+ json-loader "0.5.4"
+ magic-string "0.19.1"
+ node-sass "4.5.3"
+ os-name "2.0.1"
+ postcss "5.2.17"
+ proxy-middleware "0.15.0"
+ reflect-metadata "^0.1.10"
+ rollup "0.42.0"
+ rollup-plugin-commonjs "8.0.2"
+ rollup-plugin-json "2.3.0"
+ rollup-plugin-node-builtins "2.1.2"
+ rollup-plugin-node-globals "1.1.0"
+ rollup-plugin-node-resolve "3.0.0"
+ rollup-pluginutils "2.0.1"
+ tiny-lr "1.0.4"
+ tslint "^5.5.0"
+ tslint-eslint-rules "4.1.1"
+ uglify-js "^3.0.23"
+ webpack "^3.1.0"
+ ws "1.1.1"
+ xml2js "0.4.17"
+
+"@ionic/cli-plugin-ionic-angular@1.4.0":
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/@ionic/cli-plugin-ionic-angular/-/cli-plugin-ionic-angular-1.4.0.tgz#aa793121b2f0a271ea20e53c4f312aba299c0dfc"
+ dependencies:
+ "@ionic/cli-utils" "1.6.0"
+ chalk "^2.0.0"
+ tslib "^1.7.1"
+
+"@ionic/cli-utils@1.6.0":
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/@ionic/cli-utils/-/cli-utils-1.6.0.tgz#33909ec8bdbb086121aac6fcf5c2db951e204e7d"
+ dependencies:
+ archiver "^1.3.0"
+ chalk "^2.0.0"
+ ci-info "^1.0.0"
+ cross-spawn "^4.0.2"
+ dargs "^5.1.0"
+ dev-null "^0.1.1"
+ inquirer "^3.0.6"
+ leek "0.0.24"
+ lodash "^4.17.4"
+ minimist "^1.2.0"
+ ncp "^2.0.0"
+ semver "^5.3.0"
+ slice-ansi "^1.0.0"
+ string-width "^2.1.0"
+ strip-ansi "^4.0.0"
+ superagent "^3.5.2"
+ tslib "^1.7.1"
+ uuid "^3.0.1"
+ wrap-ansi "^2.1.0"
+
+"@ionic/cli-utils@1.7.0":
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/@ionic/cli-utils/-/cli-utils-1.7.0.tgz#05bdbf3e7533eeeee27d58f3adbfe26bf2bf0d1d"
+ dependencies:
+ archiver "^2.0.0"
+ chalk "^2.0.0"
+ ci-info "^1.0.0"
+ cross-spawn "^5.1.0"
+ dargs "^5.1.0"
+ dev-null "^0.1.1"
+ inquirer "^3.2.1"
+ leek "0.0.24"
+ lodash "^4.17.4"
+ minimist "^1.2.0"
+ ncp "^2.0.0"
+ semver "^5.4.1"
+ slice-ansi "^1.0.0"
+ string-width "^2.1.1"
+ strip-ansi "^4.0.0"
+ superagent "^3.5.2"
+ tslib "^1.7.1"
+ uuid "^3.0.1"
+ wrap-ansi "^3.0.1"
+
+"@ionic/storage@2.0.1":
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/@ionic/storage/-/storage-2.0.1.tgz#bb1a8c276007d008d7acdda426b56065b0fd3c0b"
+ dependencies:
+ "@types/localforage" "0.0.30"
+ localforage "~1.4.2"
+ localforage-cordovasqlitedriver "~1.5.0"
+
+"@ngx-translate/core@^7.0.0":
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/@ngx-translate/core/-/core-7.1.0.tgz#5087a65c8ff312e4244ca0646ed45cde83b170cd"
+
+"@ngx-translate/http-loader@^0.1.0":
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/@ngx-translate/http-loader/-/http-loader-0.1.0.tgz#6029325561d7868fe325a419de2770e98ff1502e"
+
+"@types/jasmine@^2.5.47":
+ version "2.5.53"
+ resolved "https://registry.yarnpkg.com/@types/jasmine/-/jasmine-2.5.53.tgz#4e0cefad09df5ec48c8dd40433512f84b1568d61"
+
+"@types/localforage@0.0.30":
+ version "0.0.30"
+ resolved "https://registry.yarnpkg.com/@types/localforage/-/localforage-0.0.30.tgz#3d60a6bf6dda38e3f8a469611598379f1f649509"
+
+"@types/node@^6.0.46":
+ version "6.0.85"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-6.0.85.tgz#ec02bfe54a61044f2be44f13b389c6a0e8ee05ae"
+
+"@types/node@^7.0.13":
+ version "7.0.39"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-7.0.39.tgz#8aced4196387038113f6f9aa4014ab4c51edab3c"
+
+"@types/q@^0.0.32":
+ version "0.0.32"
+ resolved "https://registry.yarnpkg.com/@types/q/-/q-0.0.32.tgz#bd284e57c84f1325da702babfc82a5328190c0c5"
+
+"@types/selenium-webdriver@^2.53.35", "@types/selenium-webdriver@~2.53.39":
+ version "2.53.42"
+ resolved "https://registry.yarnpkg.com/@types/selenium-webdriver/-/selenium-webdriver-2.53.42.tgz#74cb77fb6052edaff2a8984ddafd88d419f25cac"
+
+abbrev@1:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.0.tgz#d0554c2256636e2f56e7c2e5ad183f859428d81f"
+
+abstract-leveldown@~0.12.0, abstract-leveldown@~0.12.1:
+ version "0.12.4"
+ resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-0.12.4.tgz#29e18e632e60e4e221d5810247852a63d7b2e410"
+ dependencies:
+ xtend "~3.0.0"
+
+accepts@1.3.3, accepts@~1.3.3:
+ version "1.3.3"
+ resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.3.tgz#c3ca7434938648c3e0d9c1e328dd68b622c284ca"
+ dependencies:
+ mime-types "~2.1.11"
+ negotiator "0.6.1"
+
+acorn-dynamic-import@^2.0.0:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz#c752bd210bef679501b6c6cb7fc84f8f47158cc4"
+ dependencies:
+ acorn "^4.0.3"
+
+acorn@^1.0.3:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-1.2.2.tgz#c8ce27de0acc76d896d2b1fad3df588d9e82f014"
+
+acorn@^4.0.1, acorn@^4.0.3:
+ version "4.0.13"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787"
+
+acorn@^5.0.0:
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.1.1.tgz#53fe161111f912ab999ee887a90a0bc52822fd75"
+
+adm-zip@0.4.4:
+ version "0.4.4"
+ resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.4.4.tgz#a61ed5ae6905c3aea58b3a657d25033091052736"
+
+adm-zip@^0.4.7:
+ version "0.4.7"
+ resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.4.7.tgz#8606c2cbf1c426ce8c8ec00174447fd49b6eafc1"
+
+after@0.8.2:
+ version "0.8.2"
+ resolved "https://registry.yarnpkg.com/after/-/after-0.8.2.tgz#fedb394f9f0e02aa9768e702bda23b505fae7e1f"
+
+agent-base@2:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-2.1.1.tgz#d6de10d5af6132d5bd692427d46fc538539094c7"
+ dependencies:
+ extend "~3.0.0"
+ semver "~5.0.1"
+
+ajv-keywords@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-2.1.0.tgz#a296e17f7bfae7c1ce4f7e0de53d29cb32162df0"
+
+ajv@^4.9.1:
+ version "4.11.8"
+ resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536"
+ dependencies:
+ co "^4.6.0"
+ json-stable-stringify "^1.0.1"
+
+ajv@^5.1.5:
+ version "5.2.2"
+ resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.2.2.tgz#47c68d69e86f5d953103b0074a9430dc63da5e39"
+ dependencies:
+ co "^4.6.0"
+ fast-deep-equal "^1.0.0"
+ json-schema-traverse "^0.3.0"
+ json-stable-stringify "^1.0.1"
+
+align-text@^0.1.1, align-text@^0.1.3:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117"
+ dependencies:
+ kind-of "^3.0.2"
+ longest "^1.0.1"
+ repeat-string "^1.5.2"
+
+amdefine@>=0.0.4:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5"
+
+angular2-local-storage@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/angular2-local-storage/-/angular2-local-storage-0.2.0.tgz#bbe40be86d263518484f38c66db82f189ce1343b"
+
+angular2-moment@1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/angular2-moment/-/angular2-moment-1.4.0.tgz#3d59c1ebc28934fcfe9b888ab461e261724987e8"
+ dependencies:
+ moment "^2.16.0"
+
+angular2-template-loader@^0.6.2:
+ version "0.6.2"
+ resolved "https://registry.yarnpkg.com/angular2-template-loader/-/angular2-template-loader-0.6.2.tgz#c0d44e90fff0fac95e8b23f043acda7fd1c51d7c"
+ dependencies:
+ loader-utils "^0.2.15"
+
+ansi-escapes@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-2.0.0.tgz#5bae52be424878dd9783e8910e3fc2922e83c81b"
+
+ansi-regex@^2.0.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
+
+ansi-regex@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998"
+
+ansi-styles@^2.2.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
+
+ansi-styles@^3.1.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.0.tgz#c159b8d5be0f9e5a6f346dab94f16ce022161b88"
+ dependencies:
+ color-convert "^1.9.0"
+
+anymatch@^1.3.0:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.2.tgz#553dcb8f91e3c889845dfdba34c77721b90b9d7a"
+ dependencies:
+ micromatch "^2.1.5"
+ normalize-path "^2.0.0"
+
+aproba@^1.0.3:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.1.2.tgz#45c6629094de4e96f693ef7eab74ae079c240fc1"
+
+archiver-utils@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/archiver-utils/-/archiver-utils-1.3.0.tgz#e50b4c09c70bf3d680e32ff1b7994e9f9d895174"
+ dependencies:
+ glob "^7.0.0"
+ graceful-fs "^4.1.0"
+ lazystream "^1.0.0"
+ lodash "^4.8.0"
+ normalize-path "^2.0.0"
+ readable-stream "^2.0.0"
+
+archiver@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/archiver/-/archiver-1.3.0.tgz#4f2194d6d8f99df3f531e6881f14f15d55faaf22"
+ dependencies:
+ archiver-utils "^1.3.0"
+ async "^2.0.0"
+ buffer-crc32 "^0.2.1"
+ glob "^7.0.0"
+ lodash "^4.8.0"
+ readable-stream "^2.0.0"
+ tar-stream "^1.5.0"
+ walkdir "^0.0.11"
+ zip-stream "^1.1.0"
+
+archiver@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/archiver/-/archiver-2.0.0.tgz#ffb73ecccd8dd65b0019e1180f78092a053d43c4"
+ dependencies:
+ archiver-utils "^1.3.0"
+ async "^2.0.0"
+ buffer-crc32 "^0.2.1"
+ glob "^7.0.0"
+ lodash "^4.8.0"
+ readable-stream "^2.0.0"
+ tar-stream "^1.5.0"
+ walkdir "^0.0.11"
+ zip-stream "^1.2.0"
+
+are-we-there-yet@~1.1.2:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz#bb5dca382bb94f05e15194373d16fd3ba1ca110d"
+ dependencies:
+ delegates "^1.0.0"
+ readable-stream "^2.0.6"
+
+arr-diff@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf"
+ dependencies:
+ arr-flatten "^1.0.1"
+
+arr-flatten@^1.0.1:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1"
+
+array-find-index@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1"
+
+array-flatten@1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2"
+
+array-slice@^0.2.3:
+ version "0.2.3"
+ resolved "https://registry.yarnpkg.com/array-slice/-/array-slice-0.2.3.tgz#dd3cfb80ed7973a75117cdac69b0b99ec86186f5"
+
+array-union@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39"
+ dependencies:
+ array-uniq "^1.0.1"
+
+array-uniq@^1.0.1:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6"
+
+array-unique@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53"
+
+arraybuffer.slice@0.0.6:
+ version "0.0.6"
+ resolved "https://registry.yarnpkg.com/arraybuffer.slice/-/arraybuffer.slice-0.0.6.tgz#f33b2159f0532a3f3107a272c0ccfbd1ad2979ca"
+
+arrify@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
+
+asn1.js@^4.0.0:
+ version "4.9.1"
+ resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.9.1.tgz#48ba240b45a9280e94748990ba597d216617fd40"
+ dependencies:
+ bn.js "^4.0.0"
+ inherits "^2.0.1"
+ minimalistic-assert "^1.0.0"
+
+asn1@~0.2.3:
+ version "0.2.3"
+ resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86"
+
+assert-plus@1.0.0, assert-plus@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"
+
+assert-plus@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234"
+
+assert@^1.1.1:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/assert/-/assert-1.4.1.tgz#99912d591836b5a6f5b345c0f07eefc08fc65d91"
+ dependencies:
+ util "0.10.3"
+
+ast-types@0.8.15:
+ version "0.8.15"
+ resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.8.15.tgz#8eef0827f04dff0ec8857ba925abe3fea6194e52"
+
+ast-types@0.9.6:
+ version "0.9.6"
+ resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.9.6.tgz#102c9e9e9005d3e7e3829bf0c4fa24ee862ee9b9"
+
+async-each@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d"
+
+async-foreach@^0.1.3:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/async-foreach/-/async-foreach-0.1.3.tgz#36121f845c0578172de419a97dbeb1d16ec34542"
+
+async@^2.0.0, async@^2.1.2:
+ version "2.5.0"
+ resolved "https://registry.yarnpkg.com/async/-/async-2.5.0.tgz#843190fd6b7357a0b9e1c956edddd5ec8462b54d"
+ dependencies:
+ lodash "^4.14.0"
+
+async@~0.9.0:
+ version "0.9.2"
+ resolved "https://registry.yarnpkg.com/async/-/async-0.9.2.tgz#aea74d5e61c1f899613bf64bda66d4c78f2fd17d"
+
+asynckit@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
+
+autoprefixer@7.1.1:
+ version "7.1.1"
+ resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-7.1.1.tgz#97bc854c7d0b979f8d6489de547a0d17fb307f6d"
+ dependencies:
+ browserslist "^2.1.3"
+ caniuse-lite "^1.0.30000670"
+ normalize-range "^0.1.2"
+ num2fraction "^1.2.2"
+ postcss "^6.0.1"
+ postcss-value-parser "^3.2.3"
+
+aws-sign2@~0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f"
+
+aws4@^1.2.1:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e"
+
+babel-cli@^6.24.1:
+ version "6.24.1"
+ resolved "https://registry.yarnpkg.com/babel-cli/-/babel-cli-6.24.1.tgz#207cd705bba61489b2ea41b5312341cf6aca2283"
+ dependencies:
+ babel-core "^6.24.1"
+ babel-polyfill "^6.23.0"
+ babel-register "^6.24.1"
+ babel-runtime "^6.22.0"
+ commander "^2.8.1"
+ convert-source-map "^1.1.0"
+ fs-readdir-recursive "^1.0.0"
+ glob "^7.0.0"
+ lodash "^4.2.0"
+ output-file-sync "^1.1.0"
+ path-is-absolute "^1.0.0"
+ slash "^1.0.0"
+ source-map "^0.5.0"
+ v8flags "^2.0.10"
+ optionalDependencies:
+ chokidar "^1.6.1"
+
+babel-code-frame@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.22.0.tgz#027620bee567a88c32561574e7fd0801d33118e4"
+ dependencies:
+ chalk "^1.1.0"
+ esutils "^2.0.2"
+ js-tokens "^3.0.0"
+
+babel-core@^6.24.1:
+ version "6.25.0"
+ resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.25.0.tgz#7dd42b0463c742e9d5296deb3ec67a9322dad729"
+ dependencies:
+ babel-code-frame "^6.22.0"
+ babel-generator "^6.25.0"
+ babel-helpers "^6.24.1"
+ babel-messages "^6.23.0"
+ babel-register "^6.24.1"
+ babel-runtime "^6.22.0"
+ babel-template "^6.25.0"
+ babel-traverse "^6.25.0"
+ babel-types "^6.25.0"
+ babylon "^6.17.2"
+ convert-source-map "^1.1.0"
+ debug "^2.1.1"
+ json5 "^0.5.0"
+ lodash "^4.2.0"
+ minimatch "^3.0.2"
+ path-is-absolute "^1.0.0"
+ private "^0.1.6"
+ slash "^1.0.0"
+ source-map "^0.5.0"
+
+babel-generator@^6.25.0:
+ version "6.25.0"
+ resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.25.0.tgz#33a1af70d5f2890aeb465a4a7793c1df6a9ea9fc"
+ dependencies:
+ babel-messages "^6.23.0"
+ babel-runtime "^6.22.0"
+ babel-types "^6.25.0"
+ detect-indent "^4.0.0"
+ jsesc "^1.3.0"
+ lodash "^4.2.0"
+ source-map "^0.5.0"
+ trim-right "^1.0.1"
+
+babel-helper-evaluate-path@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/babel-helper-evaluate-path/-/babel-helper-evaluate-path-0.1.0.tgz#95d98c4ea36150483db2e7d3ec9e1954a72629cb"
+
+babel-helper-flip-expressions@^0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/babel-helper-flip-expressions/-/babel-helper-flip-expressions-0.1.2.tgz#77f6652f9de9c42401d827bd46ebd2109e3ef18a"
+
+babel-helper-is-nodes-equiv@^0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/babel-helper-is-nodes-equiv/-/babel-helper-is-nodes-equiv-0.0.1.tgz#34e9b300b1479ddd98ec77ea0bbe9342dfe39684"
+
+babel-helper-is-void-0@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/babel-helper-is-void-0/-/babel-helper-is-void-0-0.1.1.tgz#72f21a3abba0bef3837f9174fca731aed9a02888"
+
+babel-helper-mark-eval-scopes@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/babel-helper-mark-eval-scopes/-/babel-helper-mark-eval-scopes-0.1.1.tgz#4554345edf9f2549427bd2098e530253f8af2992"
+
+babel-helper-remove-or-void@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/babel-helper-remove-or-void/-/babel-helper-remove-or-void-0.1.1.tgz#9d7e1856dc6fafcb41b283a416730dc1844f66d7"
+
+babel-helper-to-multiple-sequence-expressions@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/babel-helper-to-multiple-sequence-expressions/-/babel-helper-to-multiple-sequence-expressions-0.1.1.tgz#5f1b832b39e4acf954e9137f0251395c71196b35"
+
+babel-helpers@^6.24.1:
+ version "6.24.1"
+ resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2"
+ dependencies:
+ babel-runtime "^6.22.0"
+ babel-template "^6.24.1"
+
+babel-messages@^6.23.0:
+ version "6.23.0"
+ resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e"
+ dependencies:
+ babel-runtime "^6.22.0"
+
+babel-plugin-minify-builtins@^0.1.3:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/babel-plugin-minify-builtins/-/babel-plugin-minify-builtins-0.1.3.tgz#4f21a7dcb51f91a04ea71d47ff0e8e3b05fec021"
+ dependencies:
+ babel-helper-evaluate-path "^0.1.0"
+
+babel-plugin-minify-constant-folding@^0.1.3:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/babel-plugin-minify-constant-folding/-/babel-plugin-minify-constant-folding-0.1.3.tgz#57bd172adf8b8d74ad7c99612eb950414ebea3ca"
+ dependencies:
+ babel-helper-evaluate-path "^0.1.0"
+
+babel-plugin-minify-dead-code-elimination@^0.1.7:
+ version "0.1.7"
+ resolved "https://registry.yarnpkg.com/babel-plugin-minify-dead-code-elimination/-/babel-plugin-minify-dead-code-elimination-0.1.7.tgz#774f536f347b98393a27baa717872968813c342c"
+ dependencies:
+ babel-helper-mark-eval-scopes "^0.1.1"
+ babel-helper-remove-or-void "^0.1.1"
+ lodash.some "^4.6.0"
+
+babel-plugin-minify-flip-comparisons@^0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/babel-plugin-minify-flip-comparisons/-/babel-plugin-minify-flip-comparisons-0.1.2.tgz#e286b40b7599b18dfea195071e4279465cfc1884"
+ dependencies:
+ babel-helper-is-void-0 "^0.1.1"
+
+babel-plugin-minify-guarded-expressions@^0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/babel-plugin-minify-guarded-expressions/-/babel-plugin-minify-guarded-expressions-0.1.2.tgz#dfc3d473b0362d9605d3ce0ac1e22328c60d1007"
+ dependencies:
+ babel-helper-flip-expressions "^0.1.2"
+
+babel-plugin-minify-infinity@^0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/babel-plugin-minify-infinity/-/babel-plugin-minify-infinity-0.1.2.tgz#5f1cf67ddedcba13c8a00da832542df0091a1cd4"
+
+babel-plugin-minify-mangle-names@^0.1.3:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/babel-plugin-minify-mangle-names/-/babel-plugin-minify-mangle-names-0.1.3.tgz#bfa24661a6794fb03833587e55828b65449e06fe"
+ dependencies:
+ babel-helper-mark-eval-scopes "^0.1.1"
+
+babel-plugin-minify-numeric-literals@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-minify-numeric-literals/-/babel-plugin-minify-numeric-literals-0.1.1.tgz#d4b8b0c925f874714ee33ee4b26678583d7ce7fb"
+
+babel-plugin-minify-replace@^0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/babel-plugin-minify-replace/-/babel-plugin-minify-replace-0.1.2.tgz#b90b9e71ab4d3b36325629a91beabe13b0b16ac1"
+
+babel-plugin-minify-simplify@^0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/babel-plugin-minify-simplify/-/babel-plugin-minify-simplify-0.1.2.tgz#a968f1658fdeb2fc759e81fe331d89829df0f6b9"
+ dependencies:
+ babel-helper-flip-expressions "^0.1.2"
+ babel-helper-is-nodes-equiv "^0.0.1"
+ babel-helper-to-multiple-sequence-expressions "^0.1.1"
+
+babel-plugin-minify-type-constructors@^0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/babel-plugin-minify-type-constructors/-/babel-plugin-minify-type-constructors-0.1.2.tgz#db53c5b76cb8e2fcd45d862f17104c78761337ee"
+ dependencies:
+ babel-helper-is-void-0 "^0.1.1"
+
+babel-plugin-transform-inline-consecutive-adds@^0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-inline-consecutive-adds/-/babel-plugin-transform-inline-consecutive-adds-0.1.2.tgz#5442e9f1c19c78a7899f8a4dee6fd481f61001f5"
+
+babel-plugin-transform-member-expression-literals@^6.8.4:
+ version "6.8.4"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-member-expression-literals/-/babel-plugin-transform-member-expression-literals-6.8.4.tgz#05679bc40596b91293401959aa1620ab1b2be437"
+
+babel-plugin-transform-merge-sibling-variables@^6.8.5:
+ version "6.8.5"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-merge-sibling-variables/-/babel-plugin-transform-merge-sibling-variables-6.8.5.tgz#03abdf107c61241913eb268ddede6d5bc541862c"
+
+babel-plugin-transform-minify-booleans@^6.8.2:
+ version "6.8.2"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-minify-booleans/-/babel-plugin-transform-minify-booleans-6.8.2.tgz#8451579f706e702c1e1ab2756de5c8ea369cf07c"
+
+babel-plugin-transform-property-literals@^6.8.4:
+ version "6.8.4"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-property-literals/-/babel-plugin-transform-property-literals-6.8.4.tgz#6ad311110b80a192a56efb5ddf4fe3ca6f7a61da"
+ dependencies:
+ esutils "^2.0.2"
+
+babel-plugin-transform-regexp-constructors@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-regexp-constructors/-/babel-plugin-transform-regexp-constructors-0.1.1.tgz#312ab7487cc88a1c62ee25ea1b6087e89b87799c"
+
+babel-plugin-transform-remove-console@^6.8.4:
+ version "6.8.4"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-remove-console/-/babel-plugin-transform-remove-console-6.8.4.tgz#41fddac19a729a4c3dd7ef2964eac07b096f9a8f"
+
+babel-plugin-transform-remove-debugger@^6.8.4:
+ version "6.8.4"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-remove-debugger/-/babel-plugin-transform-remove-debugger-6.8.4.tgz#f85704a08adaa71b55d77005b5b94e9b9df21f6e"
+
+babel-plugin-transform-remove-undefined@^0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-remove-undefined/-/babel-plugin-transform-remove-undefined-0.1.2.tgz#e1ebf51110f6b1e0665f28382ef73f95e5023652"
+
+babel-plugin-transform-simplify-comparison-operators@^6.8.4:
+ version "6.8.4"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-simplify-comparison-operators/-/babel-plugin-transform-simplify-comparison-operators-6.8.4.tgz#2aa24a262d664c8cb3e125a306c798d7a2de08d5"
+
+babel-plugin-transform-undefined-to-void@^6.8.2:
+ version "6.8.2"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-undefined-to-void/-/babel-plugin-transform-undefined-to-void-6.8.2.tgz#fe2b1d294eb05e87524eb93724dea6e2c3d66fa1"
+
+babel-polyfill@^6.23.0:
+ version "6.23.0"
+ resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.23.0.tgz#8364ca62df8eafb830499f699177466c3b03499d"
+ dependencies:
+ babel-runtime "^6.22.0"
+ core-js "^2.4.0"
+ regenerator-runtime "^0.10.0"
+
+babel-preset-babili@^0.1.2:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/babel-preset-babili/-/babel-preset-babili-0.1.4.tgz#ad9d6651002f5bc3f07cab300781167f54724bf2"
+ dependencies:
+ babel-plugin-minify-builtins "^0.1.3"
+ babel-plugin-minify-constant-folding "^0.1.3"
+ babel-plugin-minify-dead-code-elimination "^0.1.7"
+ babel-plugin-minify-flip-comparisons "^0.1.2"
+ babel-plugin-minify-guarded-expressions "^0.1.2"
+ babel-plugin-minify-infinity "^0.1.2"
+ babel-plugin-minify-mangle-names "^0.1.3"
+ babel-plugin-minify-numeric-literals "^0.1.1"
+ babel-plugin-minify-replace "^0.1.2"
+ babel-plugin-minify-simplify "^0.1.2"
+ babel-plugin-minify-type-constructors "^0.1.2"
+ babel-plugin-transform-inline-consecutive-adds "^0.1.2"
+ babel-plugin-transform-member-expression-literals "^6.8.4"
+ babel-plugin-transform-merge-sibling-variables "^6.8.5"
+ babel-plugin-transform-minify-booleans "^6.8.2"
+ babel-plugin-transform-property-literals "^6.8.4"
+ babel-plugin-transform-regexp-constructors "^0.1.1"
+ babel-plugin-transform-remove-console "^6.8.4"
+ babel-plugin-transform-remove-debugger "^6.8.4"
+ babel-plugin-transform-remove-undefined "^0.1.2"
+ babel-plugin-transform-simplify-comparison-operators "^6.8.4"
+ babel-plugin-transform-undefined-to-void "^6.8.2"
+ lodash.isplainobject "^4.0.6"
+
+babel-register@^6.24.1:
+ version "6.24.1"
+ resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.24.1.tgz#7e10e13a2f71065bdfad5a1787ba45bca6ded75f"
+ dependencies:
+ babel-core "^6.24.1"
+ babel-runtime "^6.22.0"
+ core-js "^2.4.0"
+ home-or-tmp "^2.0.0"
+ lodash "^4.2.0"
+ mkdirp "^0.5.1"
+ source-map-support "^0.4.2"
+
+babel-runtime@^6.22.0:
+ version "6.25.0"
+ resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.25.0.tgz#33b98eaa5d482bb01a8d1aa6b437ad2b01aec41c"
+ dependencies:
+ core-js "^2.4.0"
+ regenerator-runtime "^0.10.0"
+
+babel-template@^6.24.1, babel-template@^6.25.0:
+ version "6.25.0"
+ resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.25.0.tgz#665241166b7c2aa4c619d71e192969552b10c071"
+ dependencies:
+ babel-runtime "^6.22.0"
+ babel-traverse "^6.25.0"
+ babel-types "^6.25.0"
+ babylon "^6.17.2"
+ lodash "^4.2.0"
+
+babel-traverse@^6.25.0:
+ version "6.25.0"
+ resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.25.0.tgz#2257497e2fcd19b89edc13c4c91381f9512496f1"
+ dependencies:
+ babel-code-frame "^6.22.0"
+ babel-messages "^6.23.0"
+ babel-runtime "^6.22.0"
+ babel-types "^6.25.0"
+ babylon "^6.17.2"
+ debug "^2.2.0"
+ globals "^9.0.0"
+ invariant "^2.2.0"
+ lodash "^4.2.0"
+
+babel-types@^6.25.0:
+ version "6.25.0"
+ resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.25.0.tgz#70afb248d5660e5d18f811d91c8303b54134a18e"
+ dependencies:
+ babel-runtime "^6.22.0"
+ esutils "^2.0.2"
+ lodash "^4.2.0"
+ to-fast-properties "^1.0.1"
+
+babili@0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/babili/-/babili-0.1.2.tgz#77231b3977272394863936cb88bf7baf276f97f5"
+ dependencies:
+ babel-cli "^6.24.1"
+ babel-preset-babili "^0.1.2"
+
+babylon@^6.17.2:
+ version "6.17.4"
+ resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.17.4.tgz#3e8b7402b88d22c3423e137a1577883b15ff869a"
+
+backo2@1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947"
+
+balanced-match@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
+
+base62@0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/base62/-/base62-0.1.1.tgz#7b4174c2f94449753b11c2651c083da841a7b084"
+
+base64-arraybuffer@0.1.5:
+ version "0.1.5"
+ resolved "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz#73926771923b5a19747ad666aa5cd4bf9c6e9ce8"
+
+base64-js@^1.0.2:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.2.1.tgz#a91947da1f4a516ea38e5b4ec0ec3773675e0886"
+
+base64id@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/base64id/-/base64id-1.0.0.tgz#47688cb99bb6804f0e06d3e763b1c32e57d8e6b6"
+
+bcrypt-pbkdf@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d"
+ dependencies:
+ tweetnacl "^0.14.3"
+
+better-assert@~1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/better-assert/-/better-assert-1.0.2.tgz#40866b9e1b9e0b55b481894311e68faffaebc522"
+ dependencies:
+ callsite "1.0.0"
+
+big.js@^3.1.3:
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.1.3.tgz#4cada2193652eb3ca9ec8e55c9015669c9806978"
+
+binary-extensions@^1.0.0:
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.9.0.tgz#66506c16ce6f4d6928a5b3cd6a33ca41e941e37b"
+
+bl@^1.0.0:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/bl/-/bl-1.2.1.tgz#cac328f7bee45730d404b692203fcb590e172d5e"
+ dependencies:
+ readable-stream "^2.0.5"
+
+bl@~0.8.1:
+ version "0.8.2"
+ resolved "https://registry.yarnpkg.com/bl/-/bl-0.8.2.tgz#c9b6bca08d1bc2ea00fc8afb4f1a5fd1e1c66e4e"
+ dependencies:
+ readable-stream "~1.0.26"
+
+blob@0.0.4:
+ version "0.0.4"
+ resolved "https://registry.yarnpkg.com/blob/-/blob-0.0.4.tgz#bcf13052ca54463f30f9fc7e95b9a47630a94921"
+
+block-stream@*:
+ version "0.0.9"
+ resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a"
+ dependencies:
+ inherits "~2.0.0"
+
+blocking-proxy@0.0.5:
+ version "0.0.5"
+ resolved "https://registry.yarnpkg.com/blocking-proxy/-/blocking-proxy-0.0.5.tgz#462905e0dcfbea970f41aa37223dda9c07b1912b"
+ dependencies:
+ minimist "^1.2.0"
+
+bluebird@^3.3.0:
+ version "3.5.0"
+ resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.0.tgz#791420d7f551eea2897453a8a77653f96606d67c"
+
+bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0:
+ version "4.11.7"
+ resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.7.tgz#ddb048e50d9482790094c13eb3fcfc833ce7ab46"
+
+body-parser@^1.16.1:
+ version "1.17.2"
+ resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.17.2.tgz#f8892abc8f9e627d42aedafbca66bf5ab99104ee"
+ dependencies:
+ 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"
+
+body@^5.1.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/body/-/body-5.1.0.tgz#e4ba0ce410a46936323367609ecb4e6553125069"
+ dependencies:
+ continuable-cache "^0.3.1"
+ error "^7.0.0"
+ raw-body "~1.1.0"
+ safe-json-parse "~1.0.1"
+
+boom@2.x.x:
+ version "2.10.1"
+ resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f"
+ dependencies:
+ hoek "2.x.x"
+
+brace-expansion@^1.1.7:
+ version "1.1.8"
+ resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.8.tgz#c07b211c7c952ec1f8efd51a77ef0d1d3990a292"
+ dependencies:
+ balanced-match "^1.0.0"
+ concat-map "0.0.1"
+
+braces@^0.1.2:
+ version "0.1.5"
+ resolved "https://registry.yarnpkg.com/braces/-/braces-0.1.5.tgz#c085711085291d8b75fdd74eab0f8597280711e6"
+ dependencies:
+ expand-range "^0.1.0"
+
+braces@^1.8.2:
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7"
+ dependencies:
+ expand-range "^1.8.1"
+ preserve "^0.2.0"
+ repeat-element "^1.1.2"
+
+brorand@^1.0.1:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f"
+
+browser-resolve@^1.11.0:
+ version "1.11.2"
+ resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.2.tgz#8ff09b0a2c421718a1051c260b32e48f442938ce"
+ dependencies:
+ resolve "1.1.7"
+
+browserify-aes@^1.0.0, browserify-aes@^1.0.4:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.0.6.tgz#5e7725dbdef1fd5930d4ebab48567ce451c48a0a"
+ dependencies:
+ buffer-xor "^1.0.2"
+ cipher-base "^1.0.0"
+ create-hash "^1.1.0"
+ evp_bytestokey "^1.0.0"
+ inherits "^2.0.1"
+
+browserify-cipher@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.0.tgz#9988244874bf5ed4e28da95666dcd66ac8fc363a"
+ dependencies:
+ browserify-aes "^1.0.4"
+ browserify-des "^1.0.0"
+ evp_bytestokey "^1.0.0"
+
+browserify-des@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.0.tgz#daa277717470922ed2fe18594118a175439721dd"
+ dependencies:
+ cipher-base "^1.0.1"
+ des.js "^1.0.0"
+ inherits "^2.0.1"
+
+browserify-fs@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/browserify-fs/-/browserify-fs-1.0.0.tgz#f075aa8a729d4d1716d066620e386fcc1311a96f"
+ dependencies:
+ level-filesystem "^1.0.1"
+ level-js "^2.1.3"
+ levelup "^0.18.2"
+
+browserify-rsa@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524"
+ dependencies:
+ bn.js "^4.1.0"
+ randombytes "^2.0.1"
+
+browserify-sign@^4.0.0:
+ version "4.0.4"
+ resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.4.tgz#aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298"
+ dependencies:
+ bn.js "^4.1.1"
+ browserify-rsa "^4.0.0"
+ create-hash "^1.1.0"
+ create-hmac "^1.1.2"
+ elliptic "^6.0.0"
+ inherits "^2.0.1"
+ parse-asn1 "^5.0.0"
+
+browserify-zlib@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.1.4.tgz#bb35f8a519f600e0fa6b8485241c979d0141fb2d"
+ dependencies:
+ pako "~0.2.0"
+
+browserslist@^2.1.3:
+ version "2.2.2"
+ resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-2.2.2.tgz#e9b4618b8a01c193f9786beea09f6fd10dbe31c3"
+ dependencies:
+ caniuse-lite "^1.0.30000704"
+ electron-to-chromium "^1.3.16"
+
+buffer-crc32@^0.2.1:
+ version "0.2.13"
+ resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242"
+
+buffer-es6@^4.9.1, buffer-es6@^4.9.2:
+ version "4.9.3"
+ resolved "https://registry.yarnpkg.com/buffer-es6/-/buffer-es6-4.9.3.tgz#f26347b82df76fd37e18bcb5288c4970cfd5c404"
+
+buffer-xor@^1.0.2:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9"
+
+buffer@^4.3.0:
+ version "4.9.1"
+ resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298"
+ dependencies:
+ base64-js "^1.0.2"
+ ieee754 "^1.1.4"
+ isarray "^1.0.0"
+
+builtin-modules@^1.0.0, builtin-modules@^1.1.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f"
+
+builtin-status-codes@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8"
+
+bytes@1:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/bytes/-/bytes-1.0.0.tgz#3569ede8ba34315fab99c3e92cb04c7220de1fa8"
+
+bytes@2.4.0:
+ version "2.4.0"
+ resolved "https://registry.yarnpkg.com/bytes/-/bytes-2.4.0.tgz#7d97196f9d5baf7f6935e25985549edd2a6c2339"
+
+callsite@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/callsite/-/callsite-1.0.0.tgz#280398e5d664bd74038b6f0905153e6e8af1bc20"
+
+camel-case@3.0.x:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-3.0.0.tgz#ca3c3688a4e9cf3a4cda777dc4dcbc713249cf73"
+ dependencies:
+ no-case "^2.2.0"
+ upper-case "^1.1.1"
+
+camelcase-keys@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7"
+ dependencies:
+ camelcase "^2.0.0"
+ map-obj "^1.0.0"
+
+camelcase@^1.0.2:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39"
+
+camelcase@^2.0.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f"
+
+camelcase@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a"
+
+camelcase@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd"
+
+caniuse-lite@^1.0.30000670, caniuse-lite@^1.0.30000704:
+ version "1.0.30000708"
+ resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000708.tgz#71dbf388c57f379b1bb66c89a890edc04c2509b6"
+
+caseless@~0.12.0:
+ version "0.12.0"
+ resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
+
+center-align@^0.1.1:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad"
+ dependencies:
+ align-text "^0.1.3"
+ lazy-cache "^1.0.3"
+
+chalk@1.1.3, chalk@^1.1.0, chalk@^1.1.1, chalk@^1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
+ dependencies:
+ ansi-styles "^2.2.1"
+ escape-string-regexp "^1.0.2"
+ has-ansi "^2.0.0"
+ strip-ansi "^3.0.0"
+ supports-color "^2.0.0"
+
+chalk@^2.0.0, chalk@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.0.1.tgz#dbec49436d2ae15f536114e76d14656cdbc0f44d"
+ dependencies:
+ ansi-styles "^3.1.0"
+ escape-string-regexp "^1.0.5"
+ supports-color "^4.0.0"
+
+chokidar@1.7.0, chokidar@^1.4.1, chokidar@^1.6.1, chokidar@^1.7.0:
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.7.0.tgz#798e689778151c8076b4b360e5edd28cda2bb468"
+ dependencies:
+ anymatch "^1.3.0"
+ async-each "^1.0.0"
+ glob-parent "^2.0.0"
+ inherits "^2.0.1"
+ is-binary-path "^1.0.0"
+ is-glob "^2.0.0"
+ path-is-absolute "^1.0.0"
+ readdirp "^2.0.0"
+ optionalDependencies:
+ fsevents "^1.0.0"
+
+ci-info@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.0.0.tgz#dc5285f2b4e251821683681c381c3388f46ec534"
+
+cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de"
+ dependencies:
+ inherits "^2.0.1"
+ safe-buffer "^5.0.1"
+
+clean-css@3.4.27:
+ version "3.4.27"
+ resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-3.4.27.tgz#adef75b31c160ffa5d72f4de67966e2660c1a255"
+ dependencies:
+ commander "2.8.x"
+ source-map "0.4.x"
+
+clean-css@4.1.x:
+ version "4.1.7"
+ resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.1.7.tgz#b9aea4f85679889cf3eae8b40349ec4ebdfdd032"
+ dependencies:
+ source-map "0.5.x"
+
+cli-cursor@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5"
+ dependencies:
+ restore-cursor "^2.0.0"
+
+cli-width@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.1.0.tgz#b234ca209b29ef66fc518d9b98d5847b00edf00a"
+
+cliui@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1"
+ dependencies:
+ center-align "^0.1.1"
+ right-align "^0.1.1"
+ wordwrap "0.0.2"
+
+cliui@^3.2.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d"
+ dependencies:
+ string-width "^1.0.1"
+ strip-ansi "^3.0.1"
+ wrap-ansi "^2.0.0"
+
+clone@~0.1.9:
+ version "0.1.19"
+ resolved "https://registry.yarnpkg.com/clone/-/clone-0.1.19.tgz#613fb68639b26a494ac53253e15b1a6bd88ada85"
+
+co@^4.6.0:
+ version "4.6.0"
+ resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"
+
+code-point-at@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
+
+color-convert@^1.9.0:
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.0.tgz#1accf97dd739b983bf994d56fec8f95853641b7a"
+ dependencies:
+ color-name "^1.1.1"
+
+color-name@^1.1.1:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
+
+colors@1.1.2, colors@^1.1.0, colors@^1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63"
+
+combine-lists@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/combine-lists/-/combine-lists-1.0.1.tgz#458c07e09e0d900fc28b70a3fec2dacd1d2cb7f6"
+ dependencies:
+ lodash "^4.5.0"
+
+combined-stream@^1.0.5, combined-stream@~1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009"
+ dependencies:
+ delayed-stream "~1.0.0"
+
+commander@2.11.x, commander@^2.8.1, commander@^2.9.0, commander@~2.11.0:
+ version "2.11.0"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-2.11.0.tgz#157152fd1e7a6c8d98a5b715cf376df928004563"
+
+commander@2.8.x:
+ version "2.8.1"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-2.8.1.tgz#06be367febfda0c330aa1e2a072d3dc9762425d4"
+ dependencies:
+ graceful-readlink ">= 1.0.0"
+
+component-bind@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/component-bind/-/component-bind-1.0.0.tgz#00c608ab7dcd93897c0009651b1d3a8e1e73bbd1"
+
+component-emitter@1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.1.2.tgz#296594f2753daa63996d2af08d15a95116c9aec3"
+
+component-emitter@1.2.1, component-emitter@^1.2.0:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6"
+
+component-inherit@0.0.3:
+ version "0.0.3"
+ resolved "https://registry.yarnpkg.com/component-inherit/-/component-inherit-0.0.3.tgz#645fc4adf58b72b649d5cae65135619db26ff143"
+
+compress-commons@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/compress-commons/-/compress-commons-1.2.0.tgz#58587092ef20d37cb58baf000112c9278ff73b9f"
+ dependencies:
+ buffer-crc32 "^0.2.1"
+ crc32-stream "^2.0.0"
+ normalize-path "^2.0.0"
+ readable-stream "^2.0.0"
+
+concat-map@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
+
+concat-stream@^1.4.4:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.0.tgz#0aac662fd52be78964d5532f694784e70110acf7"
+ dependencies:
+ inherits "^2.0.3"
+ readable-stream "^2.2.2"
+ typedarray "^0.0.6"
+
+connect@^3.6.0:
+ version "3.6.2"
+ resolved "https://registry.yarnpkg.com/connect/-/connect-3.6.2.tgz#694e8d20681bfe490282c8ab886be98f09f42fe7"
+ dependencies:
+ debug "2.6.7"
+ finalhandler "1.0.3"
+ parseurl "~1.3.1"
+ utils-merge "1.0.0"
+
+console-browserify@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10"
+ dependencies:
+ date-now "^0.1.4"
+
+console-control-strings@^1.0.0, console-control-strings@~1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e"
+
+constants-browserify@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75"
+
+content-disposition@0.5.2:
+ version "0.5.2"
+ resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4"
+
+content-type@~1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.2.tgz#b7d113aee7a8dd27bd21133c4dc2529df1721eed"
+
+continuable-cache@^0.3.1:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/continuable-cache/-/continuable-cache-0.3.1.tgz#bd727a7faed77e71ff3985ac93351a912733ad0f"
+
+convert-source-map@^1.1.0:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.0.tgz#9acd70851c6d5dfdd93d9282e5edf94a03ff46b5"
+
+cookie-signature@1.0.6:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c"
+
+cookie@0.3.1:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb"
+
+cookiejar@^2.0.6:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.1.tgz#41ad57b1b555951ec171412a81942b1e8200d34a"
+
+core-js@^2.2.0, core-js@^2.4.0:
+ version "2.4.1"
+ resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.4.1.tgz#4de911e667b0eae9124e34254b53aea6fc618d3e"
+
+core-util-is@~1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
+
+crc32-stream@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/crc32-stream/-/crc32-stream-2.0.0.tgz#e3cdd3b4df3168dd74e3de3fbbcb7b297fe908f4"
+ dependencies:
+ crc "^3.4.4"
+ readable-stream "^2.0.0"
+
+crc@^3.4.4:
+ version "3.4.4"
+ resolved "https://registry.yarnpkg.com/crc/-/crc-3.4.4.tgz#9da1e980e3bd44fc5c93bf5ab3da3378d85e466b"
+
+create-ecdh@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.0.tgz#888c723596cdf7612f6498233eebd7a35301737d"
+ dependencies:
+ bn.js "^4.1.0"
+ elliptic "^6.0.0"
+
+create-hash@^1.1.0, create-hash@^1.1.1, create-hash@^1.1.2:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.1.3.tgz#606042ac8b9262750f483caddab0f5819172d8fd"
+ dependencies:
+ cipher-base "^1.0.1"
+ inherits "^2.0.1"
+ ripemd160 "^2.0.0"
+ sha.js "^2.4.0"
+
+create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.6.tgz#acb9e221a4e17bdb076e90657c42b93e3726cf06"
+ dependencies:
+ cipher-base "^1.0.3"
+ create-hash "^1.1.0"
+ inherits "^2.0.1"
+ ripemd160 "^2.0.0"
+ safe-buffer "^5.0.1"
+ sha.js "^2.4.8"
+
+cross-spawn@5.1.0, cross-spawn@^5.0.1, cross-spawn@^5.1.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449"
+ dependencies:
+ lru-cache "^4.0.1"
+ shebang-command "^1.2.0"
+ which "^1.2.9"
+
+cross-spawn@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-3.0.1.tgz#1256037ecb9f0c5f79e3d6ef135e30770184b982"
+ dependencies:
+ lru-cache "^4.0.1"
+ which "^1.2.9"
+
+cross-spawn@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-4.0.2.tgz#7b9247621c23adfdd3856004a823cbe397424d41"
+ dependencies:
+ lru-cache "^4.0.1"
+ which "^1.2.9"
+
+cryptiles@2.x.x:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8"
+ dependencies:
+ boom "2.x.x"
+
+crypto-browserify@^3.11.0:
+ version "3.11.1"
+ resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.11.1.tgz#948945efc6757a400d6e5e5af47194d10064279f"
+ dependencies:
+ browserify-cipher "^1.0.0"
+ browserify-sign "^4.0.0"
+ create-ecdh "^4.0.0"
+ create-hash "^1.1.0"
+ create-hmac "^1.1.0"
+ diffie-hellman "^5.0.0"
+ inherits "^2.0.1"
+ pbkdf2 "^3.0.3"
+ public-encrypt "^4.0.0"
+ randombytes "^2.0.0"
+
+currently-unhandled@^0.4.1:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea"
+ dependencies:
+ array-find-index "^1.0.1"
+
+custom-event@~1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/custom-event/-/custom-event-1.0.1.tgz#5d02a46850adf1b4a317946a3928fccb5bfd0425"
+
+d3@^3.5.17:
+ version "3.5.17"
+ resolved "https://registry.yarnpkg.com/d3/-/d3-3.5.17.tgz#bc46748004378b21a360c9fc7cf5231790762fb8"
+
+d@1:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/d/-/d-1.0.0.tgz#754bb5bfe55451da69a58b94d45f4c5b0462d58f"
+ dependencies:
+ es5-ext "^0.10.9"
+
+dargs@^5.1.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/dargs/-/dargs-5.1.0.tgz#ec7ea50c78564cd36c9d5ec18f66329fade27829"
+
+dashdash@^1.12.0:
+ version "1.14.1"
+ resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"
+ dependencies:
+ assert-plus "^1.0.0"
+
+date-now@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b"
+
+debug@2, debug@^2.1.0, debug@^2.1.1, debug@^2.2.0:
+ version "2.6.8"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.8.tgz#e731531ca2ede27d188222427da17821d68ff4fc"
+ dependencies:
+ ms "2.0.0"
+
+debug@2.2.0, debug@~2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da"
+ dependencies:
+ ms "0.7.1"
+
+debug@2.3.3:
+ version "2.3.3"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-2.3.3.tgz#40c453e67e6e13c901ddec317af8986cda9eff8c"
+ dependencies:
+ ms "0.7.2"
+
+debug@2.6.7:
+ version "2.6.7"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.7.tgz#92bad1f6d05bbb6bba22cca88bcd0ec894c2861e"
+ dependencies:
+ ms "2.0.0"
+
+decamelize@^1.0.0, decamelize@^1.1.1, decamelize@^1.1.2:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
+
+deep-extend@~0.4.0:
+ version "0.4.2"
+ resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.2.tgz#48b699c27e334bf89f10892be432f6e4c7d34a7f"
+
+deferred-leveldown@~0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/deferred-leveldown/-/deferred-leveldown-0.2.0.tgz#2cef1f111e1c57870d8bbb8af2650e587cd2f5b4"
+ dependencies:
+ abstract-leveldown "~0.12.1"
+
+del@2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/del/-/del-2.2.0.tgz#9a50f04bf37325e283b4f44e985336c252456bd5"
+ dependencies:
+ globby "^4.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"
+
+del@^2.2.0:
+ version "2.2.2"
+ resolved "https://registry.yarnpkg.com/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8"
+ dependencies:
+ 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@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
+
+delegates@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
+
+depd@1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.0.tgz#e1bd82c6aab6ced965b97b88b17ed3e528ca18c3"
+
+depd@~1.1.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.1.tgz#5783b4e1c459f06fa5ca27f991f3d06e7a310359"
+
+des.js@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.0.tgz#c074d2e2aa6a8a9a07dbd61f9a15c2cd83ec8ecc"
+ dependencies:
+ inherits "^2.0.1"
+ minimalistic-assert "^1.0.0"
+
+destroy@~1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80"
+
+detect-indent@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208"
+ dependencies:
+ repeating "^2.0.0"
+
+dev-null@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/dev-null/-/dev-null-0.1.1.tgz#5a205ce3c2b2ef77b6238d6ba179eb74c6a0e818"
+
+di@^0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/di/-/di-0.0.1.tgz#806649326ceaa7caa3306d75d985ea2748ba913c"
+
+diff@^3.1.0, diff@^3.2.0:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/diff/-/diff-3.3.0.tgz#056695150d7aa93237ca7e378ac3b1682b7963b9"
+
+diffie-hellman@^5.0.0:
+ version "5.0.2"
+ resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.2.tgz#b5835739270cfe26acf632099fded2a07f209e5e"
+ dependencies:
+ bn.js "^4.1.0"
+ miller-rabin "^4.0.0"
+ randombytes "^2.0.0"
+
+doctrine@^0.7.2:
+ version "0.7.2"
+ resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-0.7.2.tgz#7cb860359ba3be90e040b26b729ce4bfa654c523"
+ dependencies:
+ esutils "^1.1.6"
+ isarray "0.0.1"
+
+dom-serialize@^2.2.0:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/dom-serialize/-/dom-serialize-2.2.1.tgz#562ae8999f44be5ea3076f5419dcd59eb43ac95b"
+ dependencies:
+ custom-event "~1.0.0"
+ ent "~2.2.0"
+ extend "^3.0.0"
+ void-elements "^2.0.0"
+
+domain-browser@^1.1.1:
+ version "1.1.7"
+ resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.1.7.tgz#867aa4b093faa05f1de08c06f4d7b21fdf8698bc"
+
+ecc-jsbn@~0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505"
+ dependencies:
+ jsbn "~0.1.0"
+
+ee-first@1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
+
+electron-to-chromium@^1.3.16:
+ version "1.3.16"
+ resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.16.tgz#d0e026735754770901ae301a21664cba45d92f7d"
+
+elliptic@^6.0.0:
+ version "6.4.0"
+ resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.4.0.tgz#cac9af8762c85836187003c8dfe193e5e2eae5df"
+ dependencies:
+ bn.js "^4.4.0"
+ brorand "^1.0.1"
+ hash.js "^1.0.0"
+ hmac-drbg "^1.0.0"
+ inherits "^2.0.1"
+ minimalistic-assert "^1.0.0"
+ minimalistic-crypto-utils "^1.0.0"
+
+emojis-list@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389"
+
+encodeurl@~1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.1.tgz#79e3d58655346909fe6f0f45a5de68103b294d20"
+
+end-of-stream@^1.0.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.0.tgz#7a90d833efda6cfa6eac0f4949dbb0fad3a63206"
+ dependencies:
+ once "^1.4.0"
+
+engine.io-client@1.8.3:
+ version "1.8.3"
+ resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-1.8.3.tgz#1798ed93451246453d4c6f635d7a201fe940d5ab"
+ dependencies:
+ component-emitter "1.2.1"
+ component-inherit "0.0.3"
+ debug "2.3.3"
+ engine.io-parser "1.3.2"
+ has-cors "1.1.0"
+ indexof "0.0.1"
+ parsejson "0.0.3"
+ parseqs "0.0.5"
+ parseuri "0.0.5"
+ ws "1.1.2"
+ xmlhttprequest-ssl "1.5.3"
+ yeast "0.1.2"
+
+engine.io-parser@1.3.2:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-1.3.2.tgz#937b079f0007d0893ec56d46cb220b8cb435220a"
+ dependencies:
+ after "0.8.2"
+ arraybuffer.slice "0.0.6"
+ base64-arraybuffer "0.1.5"
+ blob "0.0.4"
+ has-binary "0.1.7"
+ wtf-8 "1.0.0"
+
+engine.io@1.8.3:
+ version "1.8.3"
+ resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-1.8.3.tgz#8de7f97895d20d39b85f88eeee777b2bd42b13d4"
+ dependencies:
+ accepts "1.3.3"
+ base64id "1.0.0"
+ cookie "0.3.1"
+ debug "2.3.3"
+ engine.io-parser "1.3.2"
+ ws "1.1.2"
+
+enhanced-resolve@^3.0.0, enhanced-resolve@^3.4.0:
+ version "3.4.1"
+ resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz#0421e339fd71419b3da13d129b3979040230476e"
+ dependencies:
+ graceful-fs "^4.1.2"
+ memory-fs "^0.4.0"
+ object-assign "^4.0.1"
+ tapable "^0.2.7"
+
+ent@~2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/ent/-/ent-2.2.0.tgz#e964219325a21d05f44466a2f686ed6ce5f5dd1d"
+
+errno@^0.1.1, errno@^0.1.3, errno@~0.1.1:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.4.tgz#b896e23a9e5e8ba33871fc996abd3635fc9a1c7d"
+ dependencies:
+ prr "~0.0.0"
+
+error-ex@^1.2.0:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc"
+ dependencies:
+ is-arrayish "^0.2.1"
+
+error@^7.0.0:
+ version "7.0.2"
+ resolved "https://registry.yarnpkg.com/error/-/error-7.0.2.tgz#a5f75fff4d9926126ddac0ea5dc38e689153cb02"
+ dependencies:
+ string-template "~0.2.1"
+ xtend "~4.0.0"
+
+es3ify@^0.1.3:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/es3ify/-/es3ify-0.1.4.tgz#ad9fa5df1ae34f3f31e1211b5818b2d51078dfd1"
+ dependencies:
+ esprima-fb "~3001.0001.0000-dev-harmony-fb"
+ jstransform "~3.0.0"
+ through "~2.3.4"
+
+es5-ext@^0.10.14, es5-ext@^0.10.9, es5-ext@~0.10.14:
+ version "0.10.24"
+ resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.24.tgz#a55877c9924bc0c8d9bd3c2cbe17495ac1709b14"
+ dependencies:
+ es6-iterator "2"
+ es6-symbol "~3.1"
+
+es6-iterator@2, es6-iterator@^2.0.1, es6-iterator@~2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.1.tgz#8e319c9f0453bf575d374940a655920e59ca5512"
+ dependencies:
+ d "1"
+ es5-ext "^0.10.14"
+ es6-symbol "^3.1"
+
+es6-map@^0.1.3:
+ version "0.1.5"
+ resolved "https://registry.yarnpkg.com/es6-map/-/es6-map-0.1.5.tgz#9136e0503dcc06a301690f0bb14ff4e364e949f0"
+ dependencies:
+ d "1"
+ es5-ext "~0.10.14"
+ es6-iterator "~2.0.1"
+ es6-set "~0.1.5"
+ es6-symbol "~3.1.1"
+ event-emitter "~0.3.5"
+
+es6-set@~0.1.5:
+ version "0.1.5"
+ resolved "https://registry.yarnpkg.com/es6-set/-/es6-set-0.1.5.tgz#d2b3ec5d4d800ced818db538d28974db0a73ccb1"
+ dependencies:
+ d "1"
+ es5-ext "~0.10.14"
+ es6-iterator "~2.0.1"
+ es6-symbol "3.1.1"
+ event-emitter "~0.3.5"
+
+es6-symbol@3.1.1, es6-symbol@^3.1, es6-symbol@^3.1.1, es6-symbol@~3.1, es6-symbol@~3.1.1:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.1.tgz#bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77"
+ dependencies:
+ d "1"
+ es5-ext "~0.10.14"
+
+es6-templates@^0.2.2:
+ version "0.2.3"
+ resolved "https://registry.yarnpkg.com/es6-templates/-/es6-templates-0.2.3.tgz#5cb9ac9fb1ded6eb1239342b81d792bbb4078ee4"
+ dependencies:
+ recast "~0.11.12"
+ through "~2.3.6"
+
+es6-weak-map@^2.0.1:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.2.tgz#5e3ab32251ffd1538a1f8e5ffa1357772f92d96f"
+ dependencies:
+ d "1"
+ es5-ext "^0.10.14"
+ es6-iterator "^2.0.1"
+ es6-symbol "^3.1.1"
+
+escape-html@~1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
+
+escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
+
+escope@^3.6.0:
+ version "3.6.0"
+ resolved "https://registry.yarnpkg.com/escope/-/escope-3.6.0.tgz#e01975e812781a163a6dadfdd80398dc64c889c3"
+ dependencies:
+ es6-map "^0.1.3"
+ es6-weak-map "^2.0.1"
+ esrecurse "^4.1.0"
+ estraverse "^4.1.1"
+
+esmangle-evaluator@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/esmangle-evaluator/-/esmangle-evaluator-1.0.1.tgz#620d866ef4861b3311f75766d52a8572bb3c6336"
+
+esprima-fb@~15001.1001.0-dev-harmony-fb:
+ version "15001.1001.0-dev-harmony-fb"
+ resolved "https://registry.yarnpkg.com/esprima-fb/-/esprima-fb-15001.1001.0-dev-harmony-fb.tgz#43beb57ec26e8cf237d3dd8b33e42533577f2659"
+
+esprima-fb@~3001.0001.0000-dev-harmony-fb, esprima-fb@~3001.1.0-dev-harmony-fb:
+ version "3001.1.0-dev-harmony-fb"
+ resolved "https://registry.yarnpkg.com/esprima-fb/-/esprima-fb-3001.0001.0000-dev-harmony-fb.tgz#b77d37abcd38ea0b77426bb8bc2922ce6b426411"
+
+esprima@~3.1.0:
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633"
+
+esrecurse@^4.1.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.0.tgz#fa9568d98d3823f9a41d91e902dcab9ea6e5b163"
+ dependencies:
+ estraverse "^4.1.0"
+ object-assign "^4.0.1"
+
+estraverse@^4.1.0, estraverse@^4.1.1:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13"
+
+estree-walker@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.2.1.tgz#bdafe8095383d8414d5dc2ecf4c9173b6db9412e"
+
+estree-walker@^0.3.0:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.3.1.tgz#e6b1a51cf7292524e7237c312e5fe6660c1ce1aa"
+
+esutils@^1.1.6:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/esutils/-/esutils-1.1.6.tgz#c01ccaa9ae4b897c6d0c3e210ae52f3c7a844375"
+
+esutils@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b"
+
+etag@~1.8.0:
+ version "1.8.0"
+ resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.0.tgz#6f631aef336d6c46362b51764044ce216be3c051"
+
+event-emitter@~0.3.5:
+ version "0.3.5"
+ resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39"
+ dependencies:
+ d "1"
+ es5-ext "~0.10.14"
+
+eventemitter3@1.x.x:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-1.2.0.tgz#1c86991d816ad1e504750e73874224ecf3bec508"
+
+events@^1.0.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924"
+
+evp_bytestokey@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.0.tgz#497b66ad9fef65cd7c08a6180824ba1476b66e53"
+ dependencies:
+ create-hash "^1.1.1"
+
+execa@^0.7.0:
+ version "0.7.0"
+ resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777"
+ dependencies:
+ cross-spawn "^5.0.1"
+ get-stream "^3.0.0"
+ is-stream "^1.1.0"
+ npm-run-path "^2.0.0"
+ p-finally "^1.0.0"
+ signal-exit "^3.0.0"
+ strip-eof "^1.0.0"
+
+exit@^0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c"
+
+expand-braces@^0.1.1:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/expand-braces/-/expand-braces-0.1.2.tgz#488b1d1d2451cb3d3a6b192cfc030f44c5855fea"
+ dependencies:
+ array-slice "^0.2.3"
+ array-unique "^0.2.1"
+ braces "^0.1.2"
+
+expand-brackets@^0.1.4:
+ version "0.1.5"
+ resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b"
+ dependencies:
+ is-posix-bracket "^0.1.0"
+
+expand-range@^0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-0.1.1.tgz#4cb8eda0993ca56fa4f41fc42f3cbb4ccadff044"
+ dependencies:
+ is-number "^0.1.1"
+ repeat-string "^0.2.2"
+
+expand-range@^1.8.1:
+ version "1.8.2"
+ resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337"
+ dependencies:
+ fill-range "^2.1.0"
+
+express@4.15.3:
+ version "4.15.3"
+ resolved "https://registry.yarnpkg.com/express/-/express-4.15.3.tgz#bab65d0f03aa80c358408972fc700f916944b662"
+ dependencies:
+ accepts "~1.3.3"
+ array-flatten "1.1.1"
+ content-disposition "0.5.2"
+ content-type "~1.0.2"
+ cookie "0.3.1"
+ cookie-signature "1.0.6"
+ debug "2.6.7"
+ depd "~1.1.0"
+ encodeurl "~1.0.1"
+ escape-html "~1.0.3"
+ etag "~1.8.0"
+ finalhandler "~1.0.3"
+ fresh "0.5.0"
+ merge-descriptors "1.0.1"
+ methods "~1.1.2"
+ on-finished "~2.3.0"
+ parseurl "~1.3.1"
+ path-to-regexp "0.1.7"
+ proxy-addr "~1.1.4"
+ qs "6.4.0"
+ range-parser "~1.2.0"
+ send "0.15.3"
+ serve-static "1.12.3"
+ setprototypeof "1.0.3"
+ statuses "~1.3.1"
+ type-is "~1.6.15"
+ utils-merge "1.0.0"
+ vary "~1.1.1"
+
+extend@3, extend@^3.0.0, extend@~3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444"
+
+external-editor@^2.0.4:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.0.4.tgz#1ed9199da9cbfe2ef2f7a31b2fde8b0d12368972"
+ dependencies:
+ iconv-lite "^0.4.17"
+ jschardet "^1.4.2"
+ tmp "^0.0.31"
+
+extglob@^0.3.1:
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1"
+ dependencies:
+ is-extglob "^1.0.0"
+
+extsprintf@1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.0.2.tgz#e1080e0658e300b06294990cc70e1502235fd550"
+
+falafel@^1.0.1:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/falafel/-/falafel-1.2.0.tgz#c18d24ef5091174a497f318cd24b026a25cddab4"
+ dependencies:
+ acorn "^1.0.3"
+ foreach "^2.0.5"
+ isarray "0.0.1"
+ object-keys "^1.0.6"
+
+fast-deep-equal@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz#96256a3bc975595eb36d82e9929d060d893439ff"
+
+fastparse@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.1.tgz#d1e2643b38a94d7583b479060e6c4affc94071f8"
+
+faye-websocket@~0.10.0:
+ version "0.10.0"
+ resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.10.0.tgz#4e492f8d04dfb6f89003507f6edbf2d501e7c6f4"
+ dependencies:
+ websocket-driver ">=0.5.1"
+
+figures@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962"
+ dependencies:
+ escape-string-regexp "^1.0.5"
+
+filename-regex@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26"
+
+fill-range@^2.1.0:
+ version "2.2.3"
+ resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723"
+ dependencies:
+ is-number "^2.1.0"
+ isobject "^2.0.0"
+ randomatic "^1.1.3"
+ repeat-element "^1.1.2"
+ repeat-string "^1.5.2"
+
+finalhandler@1.0.3, finalhandler@~1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.0.3.tgz#ef47e77950e999780e86022a560e3217e0d0cc89"
+ dependencies:
+ debug "2.6.7"
+ encodeurl "~1.0.1"
+ escape-html "~1.0.3"
+ on-finished "~2.3.0"
+ parseurl "~1.3.1"
+ statuses "~1.3.1"
+ unpipe "~1.0.0"
+
+find-up@^1.0.0:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f"
+ dependencies:
+ path-exists "^2.0.0"
+ pinkie-promise "^2.0.0"
+
+find-up@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7"
+ dependencies:
+ locate-path "^2.0.0"
+
+font-awesome@^4.7.0:
+ version "4.7.0"
+ resolved "https://registry.yarnpkg.com/font-awesome/-/font-awesome-4.7.0.tgz#8fa8cf0411a1a31afd07b06d2902bb9fc815a133"
+
+for-in@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
+
+for-own@^0.1.4:
+ version "0.1.5"
+ resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce"
+ dependencies:
+ for-in "^1.0.1"
+
+foreach@^2.0.5, foreach@~2.0.1:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99"
+
+forever-agent@~0.6.1:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
+
+form-data@^2.1.1:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.2.0.tgz#9a5e3b9295f980b2623cf64fa238b14cebca707b"
+ dependencies:
+ asynckit "^0.4.0"
+ combined-stream "^1.0.5"
+ mime-types "^2.1.12"
+
+form-data@~2.1.1:
+ version "2.1.4"
+ resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.4.tgz#33c183acf193276ecaa98143a69e94bfee1750d1"
+ dependencies:
+ asynckit "^0.4.0"
+ combined-stream "^1.0.5"
+ mime-types "^2.1.12"
+
+formidable@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/formidable/-/formidable-1.1.1.tgz#96b8886f7c3c3508b932d6bd70c4d3a88f35f1a9"
+
+forwarded@~0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.0.tgz#19ef9874c4ae1c297bcf078fde63a09b66a84363"
+
+fresh@0.5.0:
+ version "0.5.0"
+ resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.0.tgz#f474ca5e6a9246d6fd8e0953cfa9b9c805afa78e"
+
+fs-access@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/fs-access/-/fs-access-1.0.1.tgz#d6a87f262271cefebec30c553407fb995da8777a"
+ dependencies:
+ null-check "^1.0.0"
+
+fs-extra@3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-3.0.1.tgz#3794f378c58b342ea7dbbb23095109c4b3b62291"
+ dependencies:
+ graceful-fs "^4.1.2"
+ jsonfile "^3.0.0"
+ universalify "^0.1.0"
+
+fs-readdir-recursive@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.0.0.tgz#8cd1745c8b4f8a29c8caec392476921ba195f560"
+
+fs.realpath@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
+
+fsevents@^1.0.0:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.1.2.tgz#3282b713fb3ad80ede0e9fcf4611b5aa6fc033f4"
+ dependencies:
+ nan "^2.3.0"
+ node-pre-gyp "^0.6.36"
+
+fstream-ignore@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/fstream-ignore/-/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105"
+ dependencies:
+ fstream "^1.0.0"
+ inherits "2"
+ minimatch "^3.0.0"
+
+fstream@^1.0.0, fstream@^1.0.10, fstream@^1.0.2:
+ version "1.0.11"
+ resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171"
+ dependencies:
+ graceful-fs "^4.1.2"
+ inherits "~2.0.0"
+ mkdirp ">=0.5 0"
+ rimraf "2"
+
+fwd-stream@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/fwd-stream/-/fwd-stream-1.0.4.tgz#ed281cabed46feecf921ee32dc4c50b372ac7cfa"
+ dependencies:
+ readable-stream "~1.0.26-4"
+
+gauge@~2.7.3:
+ version "2.7.4"
+ resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7"
+ dependencies:
+ aproba "^1.0.3"
+ console-control-strings "^1.0.0"
+ has-unicode "^2.0.0"
+ object-assign "^4.1.0"
+ signal-exit "^3.0.0"
+ string-width "^1.0.1"
+ strip-ansi "^3.0.1"
+ wide-align "^1.1.0"
+
+gaze@^1.0.0:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/gaze/-/gaze-1.1.2.tgz#847224677adb8870d679257ed3388fdb61e40105"
+ dependencies:
+ globule "^1.0.0"
+
+get-caller-file@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5"
+
+get-stdin@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe"
+
+get-stream@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14"
+
+getpass@^0.1.1:
+ version "0.1.7"
+ resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa"
+ dependencies:
+ assert-plus "^1.0.0"
+
+glob-base@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4"
+ dependencies:
+ glob-parent "^2.0.0"
+ is-glob "^2.0.0"
+
+glob-parent@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28"
+ dependencies:
+ is-glob "^2.0.0"
+
+glob@7.1.1:
+ version "7.1.1"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8"
+ dependencies:
+ fs.realpath "^1.0.0"
+ inflight "^1.0.4"
+ inherits "2"
+ minimatch "^3.0.2"
+ once "^1.3.0"
+ path-is-absolute "^1.0.0"
+
+glob@^6.0.1:
+ version "6.0.4"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-6.0.4.tgz#0f08860f6a155127b2fadd4f9ce24b1aab6e4d22"
+ dependencies:
+ inflight "^1.0.4"
+ inherits "2"
+ minimatch "2 || 3"
+ once "^1.3.0"
+ path-is-absolute "^1.0.0"
+
+glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.0.6, glob@^7.1.1, glob@~7.1.1:
+ version "7.1.2"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15"
+ dependencies:
+ fs.realpath "^1.0.0"
+ inflight "^1.0.4"
+ inherits "2"
+ minimatch "^3.0.4"
+ once "^1.3.0"
+ path-is-absolute "^1.0.0"
+
+globals@^9.0.0:
+ version "9.18.0"
+ resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a"
+
+globby@^4.0.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/globby/-/globby-4.1.0.tgz#080f54549ec1b82a6c60e631fc82e1211dbe95f8"
+ dependencies:
+ 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"
+
+globby@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/globby/-/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d"
+ dependencies:
+ 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"
+
+globule@^1.0.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/globule/-/globule-1.2.0.tgz#1dc49c6822dd9e8a2fa00ba2a295006e8664bd09"
+ dependencies:
+ glob "~7.1.1"
+ lodash "~4.17.4"
+ minimatch "~3.0.2"
+
+graceful-fs@^4.1.0, graceful-fs@^4.1.2, graceful-fs@^4.1.4, graceful-fs@^4.1.6:
+ version "4.1.11"
+ resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658"
+
+"graceful-readlink@>= 1.0.0":
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725"
+
+har-schema@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e"
+
+har-validator@~4.2.1:
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-4.2.1.tgz#33481d0f1bbff600dd203d75812a6a5fba002e2a"
+ dependencies:
+ ajv "^4.9.1"
+ har-schema "^1.0.5"
+
+has-ansi@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91"
+ dependencies:
+ ansi-regex "^2.0.0"
+
+has-binary@0.1.7:
+ version "0.1.7"
+ resolved "https://registry.yarnpkg.com/has-binary/-/has-binary-0.1.7.tgz#68e61eb16210c9545a0a5cce06a873912fe1e68c"
+ dependencies:
+ isarray "0.0.1"
+
+has-cors@1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/has-cors/-/has-cors-1.1.0.tgz#5e474793f7ea9843d1bb99c23eef49ff126fff39"
+
+has-flag@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa"
+
+has-flag@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51"
+
+has-unicode@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9"
+
+hash-base@^2.0.0:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-2.0.2.tgz#66ea1d856db4e8a5470cadf6fce23ae5244ef2e1"
+ dependencies:
+ inherits "^2.0.1"
+
+hash.js@^1.0.0, hash.js@^1.0.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.3.tgz#340dedbe6290187151c1ea1d777a3448935df846"
+ dependencies:
+ inherits "^2.0.3"
+ minimalistic-assert "^1.0.0"
+
+hawk@~3.1.3:
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4"
+ dependencies:
+ boom "2.x.x"
+ cryptiles "2.x.x"
+ hoek "2.x.x"
+ sntp "1.x.x"
+
+he@1.1.x:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd"
+
+hmac-drbg@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1"
+ dependencies:
+ hash.js "^1.0.3"
+ minimalistic-assert "^1.0.0"
+ minimalistic-crypto-utils "^1.0.1"
+
+hoek@2.x.x:
+ version "2.16.3"
+ resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed"
+
+home-or-tmp@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8"
+ dependencies:
+ os-homedir "^1.0.0"
+ os-tmpdir "^1.0.1"
+
+hosted-git-info@^2.1.4:
+ version "2.5.0"
+ resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.5.0.tgz#6d60e34b3abbc8313062c3b798ef8d901a07af3c"
+
+html-loader@^0.4.5:
+ version "0.4.5"
+ resolved "https://registry.yarnpkg.com/html-loader/-/html-loader-0.4.5.tgz#5fbcd87cd63a5c49a7fce2fe56f425e05729c68c"
+ dependencies:
+ es6-templates "^0.2.2"
+ fastparse "^1.1.1"
+ html-minifier "^3.0.1"
+ loader-utils "^1.0.2"
+ object-assign "^4.1.0"
+
+html-minifier@^3.0.1:
+ version "3.5.3"
+ resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.5.3.tgz#4a275e3b1a16639abb79b4c11191ff0d0fcf1ab9"
+ dependencies:
+ camel-case "3.0.x"
+ clean-css "4.1.x"
+ commander "2.11.x"
+ he "1.1.x"
+ ncname "1.0.x"
+ param-case "2.1.x"
+ relateurl "0.2.x"
+ uglify-js "3.0.x"
+
+http-errors@~1.6.1:
+ version "1.6.1"
+ resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.1.tgz#5f8b8ed98aca545656bf572997387f904a722257"
+ dependencies:
+ depd "1.1.0"
+ inherits "2.0.3"
+ setprototypeof "1.0.3"
+ statuses ">= 1.3.1 < 2"
+
+http-proxy@^1.13.0:
+ version "1.16.2"
+ resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.16.2.tgz#06dff292952bf64dbe8471fa9df73066d4f37742"
+ dependencies:
+ eventemitter3 "1.x.x"
+ requires-port "1.x.x"
+
+http-signature@~1.1.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf"
+ dependencies:
+ assert-plus "^0.2.0"
+ jsprim "^1.2.2"
+ sshpk "^1.7.0"
+
+https-browserify@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-0.0.1.tgz#3f91365cabe60b77ed0ebba24b454e3e09d95a82"
+
+https-proxy-agent@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-1.0.0.tgz#35f7da6c48ce4ddbfa264891ac593ee5ff8671e6"
+ dependencies:
+ agent-base "2"
+ debug "2"
+ extend "3"
+
+iconv-lite@0.4.15:
+ version "0.4.15"
+ resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.15.tgz#fe265a218ac6a57cfe854927e9d04c19825eddeb"
+
+iconv-lite@^0.4.17:
+ version "0.4.18"
+ resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.18.tgz#23d8656b16aae6742ac29732ea8f0336a4789cf2"
+
+idb-wrapper@^1.5.0:
+ version "1.7.1"
+ resolved "https://registry.yarnpkg.com/idb-wrapper/-/idb-wrapper-1.7.1.tgz#6a32670122e173a84ecc5cfa9668fa2ceb221b04"
+
+ieee754@^1.1.4:
+ version "1.1.8"
+ resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.8.tgz#be33d40ac10ef1926701f6f08a2d86fbfd1ad3e4"
+
+immediate@~3.0.5:
+ version "3.0.6"
+ resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b"
+
+in-publish@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/in-publish/-/in-publish-2.0.0.tgz#e20ff5e3a2afc2690320b6dc552682a9c7fadf51"
+
+indent-string@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80"
+ dependencies:
+ repeating "^2.0.0"
+
+indexof@0.0.1, indexof@~0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d"
+
+inflight@^1.0.4:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
+ dependencies:
+ once "^1.3.0"
+ wrappy "1"
+
+inherits@2, inherits@2.0.3, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
+
+inherits@2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1"
+
+ini@^1.3.4, ini@~1.3.0:
+ version "1.3.4"
+ resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e"
+
+inline-process-browser@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/inline-process-browser/-/inline-process-browser-1.0.0.tgz#46a61b153dd3c9b1624b1a00626edb4f7f414f22"
+ dependencies:
+ falafel "^1.0.1"
+ through2 "^0.6.5"
+
+inquirer@^3.0.6, inquirer@^3.2.1:
+ version "3.2.1"
+ resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.2.1.tgz#06ceb0f540f45ca548c17d6840959878265fa175"
+ dependencies:
+ ansi-escapes "^2.0.0"
+ chalk "^2.0.0"
+ cli-cursor "^2.1.0"
+ cli-width "^2.0.0"
+ external-editor "^2.0.4"
+ figures "^2.0.0"
+ lodash "^4.3.0"
+ mute-stream "0.0.7"
+ run-async "^2.2.0"
+ rx-lite "^4.0.8"
+ rx-lite-aggregates "^4.0.8"
+ string-width "^2.1.0"
+ strip-ansi "^4.0.0"
+ through "^2.3.6"
+
+interpret@^1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.0.3.tgz#cbc35c62eeee73f19ab7b10a801511401afc0f90"
+
+invariant@^2.2.0:
+ version "2.2.2"
+ resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360"
+ dependencies:
+ loose-envify "^1.0.0"
+
+invert-kv@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6"
+
+ionic-angular@~3.5.*:
+ version "3.5.3"
+ resolved "https://registry.yarnpkg.com/ionic-angular/-/ionic-angular-3.5.3.tgz#31e2616fa91ca72ee59ce3c11da9ebdced59791a"
+
+ionic@3.7.0:
+ version "3.7.0"
+ resolved "https://registry.yarnpkg.com/ionic/-/ionic-3.7.0.tgz#a3c32174c6d5455c3bc74b6b9152e0f97dce23c8"
+ dependencies:
+ "@ionic/cli-utils" "1.7.0"
+ chalk "^2.0.0"
+ diff "^3.2.0"
+ minimist "^1.2.0"
+ opn "^5.1.0"
+ os-name "^2.0.1"
+ rimraf "^2.6.1"
+ semver "^5.3.0"
+ ssh-config "^1.0.1"
+ tar "^2.2.1"
+ tslib "^1.7.1"
+
+ionicons@3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/ionicons/-/ionicons-3.0.0.tgz#40b8daf4fd7a31150bd002160f66496e22a98c3c"
+
+ipaddr.js@1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.4.0.tgz#296aca878a821816e5b85d0a285a99bcff4582f0"
+
+is-arrayish@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
+
+is-binary-path@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898"
+ dependencies:
+ binary-extensions "^1.0.0"
+
+is-buffer@^1.1.5:
+ version "1.1.5"
+ resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.5.tgz#1f3b26ef613b214b88cbca23cc6c01d87961eecc"
+
+is-builtin-module@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe"
+ dependencies:
+ builtin-modules "^1.0.0"
+
+is-dotfile@^1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1"
+
+is-equal-shallow@^0.1.3:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534"
+ dependencies:
+ is-primitive "^2.0.0"
+
+is-extendable@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
+
+is-extglob@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0"
+
+is-finite@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa"
+ dependencies:
+ number-is-nan "^1.0.0"
+
+is-fullwidth-code-point@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb"
+ dependencies:
+ number-is-nan "^1.0.0"
+
+is-fullwidth-code-point@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f"
+
+is-glob@^2.0.0, is-glob@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863"
+ dependencies:
+ is-extglob "^1.0.0"
+
+is-module@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591"
+
+is-number@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/is-number/-/is-number-0.1.1.tgz#69a7af116963d47206ec9bd9b48a14216f1e3806"
+
+is-number@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f"
+ dependencies:
+ kind-of "^3.0.2"
+
+is-number@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195"
+ dependencies:
+ kind-of "^3.0.2"
+
+is-object@~0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/is-object/-/is-object-0.1.2.tgz#00efbc08816c33cfc4ac8251d132e10dc65098d7"
+
+is-path-cwd@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d"
+
+is-path-in-cwd@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz#6477582b8214d602346094567003be8a9eac04dc"
+ dependencies:
+ is-path-inside "^1.0.0"
+
+is-path-inside@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.0.tgz#fc06e5a1683fbda13de667aff717bbc10a48f37f"
+ dependencies:
+ path-is-inside "^1.0.1"
+
+is-posix-bracket@^0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4"
+
+is-primitive@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575"
+
+is-promise@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa"
+
+is-stream@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
+
+is-typedarray@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
+
+is-utf8@^0.2.0:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72"
+
+is-wsl@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d"
+
+is@~0.2.6:
+ version "0.2.7"
+ resolved "https://registry.yarnpkg.com/is/-/is-0.2.7.tgz#3b34a2c48f359972f35042849193ae7264b63562"
+
+isarray@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf"
+
+isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
+
+isbinaryfile@^3.0.0:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-3.0.2.tgz#4a3e974ec0cba9004d3fc6cde7209ea69368a621"
+
+isbuffer@~0.0.0:
+ version "0.0.0"
+ resolved "https://registry.yarnpkg.com/isbuffer/-/isbuffer-0.0.0.tgz#38c146d9df528b8bf9b0701c3d43cf12df3fc39b"
+
+isexe@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
+
+isobject@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89"
+ dependencies:
+ isarray "1.0.0"
+
+isstream@~0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
+
+jasmine-core@~2.7.0:
+ version "2.7.0"
+ resolved "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-2.7.0.tgz#50ff8c4f92d8ef5c0b2c1b846dd263ed85152091"
+
+jasmine-spec-reporter@^4.0.0:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/jasmine-spec-reporter/-/jasmine-spec-reporter-4.1.1.tgz#5a6d58ab5d61bea7309fbc279239511756b1b588"
+ dependencies:
+ colors "1.1.2"
+
+jasmine@^2.5.3:
+ version "2.7.0"
+ resolved "https://registry.yarnpkg.com/jasmine/-/jasmine-2.7.0.tgz#5cf0bb4e594b4600bb4235560366212ac5aea1b2"
+ dependencies:
+ exit "^0.1.2"
+ glob "^7.0.6"
+ jasmine-core "~2.7.0"
+
+jasminewd2@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/jasminewd2/-/jasminewd2-2.1.0.tgz#da595275d1ae631de736ac0a7c7d85c9f73ef652"
+
+js-base64@^2.1.8, js-base64@^2.1.9:
+ version "2.1.9"
+ resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.1.9.tgz#f0e80ae039a4bd654b5f281fc93f04a914a7fcce"
+
+js-tokens@^3.0.0:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b"
+
+jsbn@~0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
+
+jschardet@^1.4.2:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/jschardet/-/jschardet-1.5.0.tgz#a61f310306a5a71188e1b1acd08add3cfbb08b1e"
+
+jsesc@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b"
+
+json-loader@0.5.4:
+ version "0.5.4"
+ resolved "https://registry.yarnpkg.com/json-loader/-/json-loader-0.5.4.tgz#8baa1365a632f58a3c46d20175fc6002c96e37de"
+
+json-loader@^0.5.4:
+ version "0.5.7"
+ resolved "https://registry.yarnpkg.com/json-loader/-/json-loader-0.5.7.tgz#dca14a70235ff82f0ac9a3abeb60d337a365185d"
+
+json-schema-traverse@^0.3.0:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340"
+
+json-schema@0.2.3:
+ version "0.2.3"
+ resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13"
+
+json-stable-stringify@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af"
+ dependencies:
+ jsonify "~0.0.0"
+
+json-stringify-safe@~5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
+
+json3@3.3.2:
+ version "3.3.2"
+ resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1"
+
+json5@^0.5.0, json5@^0.5.1:
+ version "0.5.1"
+ resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821"
+
+jsonfile@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-3.0.1.tgz#a5ecc6f65f53f662c4415c7675a0331d0992ec66"
+ optionalDependencies:
+ graceful-fs "^4.1.6"
+
+jsonify@~0.0.0:
+ version "0.0.0"
+ resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73"
+
+jsprim@^1.2.2:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.0.tgz#a3b87e40298d8c380552d8cc7628a0bb95a22918"
+ dependencies:
+ assert-plus "1.0.0"
+ extsprintf "1.0.2"
+ json-schema "0.2.3"
+ verror "1.3.6"
+
+jstransform@~3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/jstransform/-/jstransform-3.0.0.tgz#a2591ab6cee8d97bf3be830dbfa2313b87cd640b"
+ dependencies:
+ base62 "0.1.1"
+ esprima-fb "~3001.1.0-dev-harmony-fb"
+ source-map "0.1.31"
+
+karma-chrome-launcher@^2.0.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/karma-chrome-launcher/-/karma-chrome-launcher-2.2.0.tgz#cf1b9d07136cc18fe239327d24654c3dbc368acf"
+ dependencies:
+ fs-access "^1.0.0"
+ which "^1.2.1"
+
+karma-jasmine-html-reporter@^0.2.2:
+ version "0.2.2"
+ resolved "https://registry.yarnpkg.com/karma-jasmine-html-reporter/-/karma-jasmine-html-reporter-0.2.2.tgz#48a8e5ef18807617ee2b5e33c1194c35b439524c"
+ dependencies:
+ karma-jasmine "^1.0.2"
+
+karma-jasmine@^1.0.2, karma-jasmine@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/karma-jasmine/-/karma-jasmine-1.1.0.tgz#22e4c06bf9a182e5294d1f705e3733811b810acf"
+
+karma-sourcemap-loader@^0.3.7:
+ version "0.3.7"
+ resolved "https://registry.yarnpkg.com/karma-sourcemap-loader/-/karma-sourcemap-loader-0.3.7.tgz#91322c77f8f13d46fed062b042e1009d4c4505d8"
+ dependencies:
+ graceful-fs "^4.1.2"
+
+karma-webpack@^2.0.3:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/karma-webpack/-/karma-webpack-2.0.4.tgz#3e2d4f48ba94a878e1c66bb8e1ae6128987a175b"
+ dependencies:
+ async "~0.9.0"
+ loader-utils "^0.2.5"
+ lodash "^3.8.0"
+ source-map "^0.1.41"
+ webpack-dev-middleware "^1.0.11"
+
+karma@^1.6.0:
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/karma/-/karma-1.7.0.tgz#6f7a1a406446fa2e187ec95398698f4cee476269"
+ dependencies:
+ bluebird "^3.3.0"
+ body-parser "^1.16.1"
+ chokidar "^1.4.1"
+ colors "^1.1.0"
+ combine-lists "^1.0.0"
+ connect "^3.6.0"
+ core-js "^2.2.0"
+ di "^0.0.1"
+ dom-serialize "^2.2.0"
+ expand-braces "^0.1.1"
+ glob "^7.1.1"
+ graceful-fs "^4.1.2"
+ http-proxy "^1.13.0"
+ isbinaryfile "^3.0.0"
+ lodash "^3.8.0"
+ log4js "^0.6.31"
+ mime "^1.3.4"
+ minimatch "^3.0.2"
+ optimist "^0.6.1"
+ qjobs "^1.1.4"
+ range-parser "^1.2.0"
+ rimraf "^2.6.0"
+ safe-buffer "^5.0.1"
+ socket.io "1.7.3"
+ source-map "^0.5.3"
+ tmp "0.0.31"
+ useragent "^2.1.12"
+
+kind-of@^3.0.2:
+ version "3.2.2"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64"
+ dependencies:
+ is-buffer "^1.1.5"
+
+kind-of@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57"
+ dependencies:
+ is-buffer "^1.1.5"
+
+lazy-cache@^1.0.3:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e"
+
+lazystream@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/lazystream/-/lazystream-1.0.0.tgz#f6995fe0f820392f61396be89462407bb77168e4"
+ dependencies:
+ readable-stream "^2.0.5"
+
+lcid@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835"
+ dependencies:
+ invert-kv "^1.0.0"
+
+leek@0.0.24:
+ version "0.0.24"
+ resolved "https://registry.yarnpkg.com/leek/-/leek-0.0.24.tgz#e400e57f0e60d8ef2bd4d068dc428a54345dbcda"
+ dependencies:
+ debug "^2.1.0"
+ lodash.assign "^3.2.0"
+ rsvp "^3.0.21"
+
+level-blobs@^0.1.7:
+ version "0.1.7"
+ resolved "https://registry.yarnpkg.com/level-blobs/-/level-blobs-0.1.7.tgz#9ab9b97bb99f1edbf9f78a3433e21ed56386bdaf"
+ dependencies:
+ level-peek "1.0.6"
+ once "^1.3.0"
+ readable-stream "^1.0.26-4"
+
+level-filesystem@^1.0.1:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/level-filesystem/-/level-filesystem-1.2.0.tgz#a00aca9919c4a4dfafdca6a8108d225aadff63b3"
+ dependencies:
+ concat-stream "^1.4.4"
+ errno "^0.1.1"
+ fwd-stream "^1.0.4"
+ level-blobs "^0.1.7"
+ level-peek "^1.0.6"
+ level-sublevel "^5.2.0"
+ octal "^1.0.0"
+ once "^1.3.0"
+ xtend "^2.2.0"
+
+level-fix-range@2.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/level-fix-range/-/level-fix-range-2.0.0.tgz#c417d62159442151a19d9a2367868f1724c2d548"
+ dependencies:
+ clone "~0.1.9"
+
+level-fix-range@~1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/level-fix-range/-/level-fix-range-1.0.2.tgz#bf15b915ae36d8470c821e883ddf79cd16420828"
+
+"level-hooks@>=4.4.0 <5":
+ version "4.5.0"
+ resolved "https://registry.yarnpkg.com/level-hooks/-/level-hooks-4.5.0.tgz#1b9ae61922930f3305d1a61fc4d83c8102c0dd93"
+ dependencies:
+ string-range "~1.2"
+
+level-js@^2.1.3:
+ version "2.2.4"
+ resolved "https://registry.yarnpkg.com/level-js/-/level-js-2.2.4.tgz#bc055f4180635d4489b561c9486fa370e8c11697"
+ dependencies:
+ abstract-leveldown "~0.12.0"
+ idb-wrapper "^1.5.0"
+ isbuffer "~0.0.0"
+ ltgt "^2.1.2"
+ typedarray-to-buffer "~1.0.0"
+ xtend "~2.1.2"
+
+level-peek@1.0.6, level-peek@^1.0.6:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/level-peek/-/level-peek-1.0.6.tgz#bec51c72a82ee464d336434c7c876c3fcbcce77f"
+ dependencies:
+ level-fix-range "~1.0.2"
+
+level-sublevel@^5.2.0:
+ version "5.2.3"
+ resolved "https://registry.yarnpkg.com/level-sublevel/-/level-sublevel-5.2.3.tgz#744c12c72d2e72be78dde3b9b5cd84d62191413a"
+ dependencies:
+ level-fix-range "2.0"
+ level-hooks ">=4.4.0 <5"
+ string-range "~1.2.1"
+ xtend "~2.0.4"
+
+levelup@^0.18.2:
+ version "0.18.6"
+ resolved "https://registry.yarnpkg.com/levelup/-/levelup-0.18.6.tgz#e6a01cb089616c8ecc0291c2a9bd3f0c44e3e5eb"
+ dependencies:
+ bl "~0.8.1"
+ deferred-leveldown "~0.2.0"
+ errno "~0.1.1"
+ prr "~0.0.0"
+ readable-stream "~1.0.26"
+ semver "~2.3.1"
+ xtend "~3.0.0"
+
+lie@3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/lie/-/lie-3.0.2.tgz#ffda21d7bba26f377cad865d3649b2fc8ce39fea"
+ dependencies:
+ es3ify "^0.1.3"
+ immediate "~3.0.5"
+ inline-process-browser "^1.0.0"
+ unreachable-branch-transform "^0.3.0"
+
+livereload-js@^2.2.2:
+ version "2.2.2"
+ resolved "https://registry.yarnpkg.com/livereload-js/-/livereload-js-2.2.2.tgz#6c87257e648ab475bc24ea257457edcc1f8d0bc2"
+
+load-json-file@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0"
+ dependencies:
+ graceful-fs "^4.1.2"
+ parse-json "^2.2.0"
+ pify "^2.0.0"
+ pinkie-promise "^2.0.0"
+ strip-bom "^2.0.0"
+
+load-json-file@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8"
+ dependencies:
+ graceful-fs "^4.1.2"
+ parse-json "^2.2.0"
+ pify "^2.0.0"
+ strip-bom "^3.0.0"
+
+loader-runner@^2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.3.0.tgz#f482aea82d543e07921700d5a46ef26fdac6b8a2"
+
+loader-utils@^0.2.15, loader-utils@^0.2.5:
+ version "0.2.17"
+ resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-0.2.17.tgz#f86e6374d43205a6e6c60e9196f17c0299bfb348"
+ dependencies:
+ big.js "^3.1.3"
+ emojis-list "^2.0.0"
+ json5 "^0.5.0"
+ object-assign "^4.0.1"
+
+loader-utils@^1.0.2, loader-utils@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.1.0.tgz#c98aef488bcceda2ffb5e2de646d6a754429f5cd"
+ dependencies:
+ big.js "^3.1.3"
+ emojis-list "^2.0.0"
+ json5 "^0.5.0"
+
+localforage-cordovasqlitedriver@~1.5.0:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/localforage-cordovasqlitedriver/-/localforage-cordovasqlitedriver-1.5.0.tgz#f934789e6ad9a39bac05fdd1168812f438535762"
+ dependencies:
+ "@types/localforage" "0.0.30"
+ localforage ">=1.4.0"
+
+localforage@>=1.4.0:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/localforage/-/localforage-1.5.0.tgz#6b994e19b56611fa85df3992df397ac4ab66e815"
+ dependencies:
+ lie "3.0.2"
+
+localforage@~1.4.2:
+ version "1.4.3"
+ resolved "https://registry.yarnpkg.com/localforage/-/localforage-1.4.3.tgz#a212543c39c7c76424edd12bf474c489aaca494c"
+ dependencies:
+ lie "3.0.2"
+
+locate-path@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e"
+ dependencies:
+ p-locate "^2.0.0"
+ path-exists "^3.0.0"
+
+lodash._baseassign@^3.0.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz#8c38a099500f215ad09e59f1722fd0c52bfe0a4e"
+ dependencies:
+ lodash._basecopy "^3.0.0"
+ lodash.keys "^3.0.0"
+
+lodash._basecopy@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36"
+
+lodash._bindcallback@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz#e531c27644cf8b57a99e17ed95b35c748789392e"
+
+lodash._createassigner@^3.0.0:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/lodash._createassigner/-/lodash._createassigner-3.1.1.tgz#838a5bae2fdaca63ac22dee8e19fa4e6d6970b11"
+ dependencies:
+ lodash._bindcallback "^3.0.0"
+ lodash._isiterateecall "^3.0.0"
+ lodash.restparam "^3.0.0"
+
+lodash._getnative@^3.0.0:
+ version "3.9.1"
+ resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5"
+
+lodash._isiterateecall@^3.0.0:
+ version "3.0.9"
+ resolved "https://registry.yarnpkg.com/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz#5203ad7ba425fae842460e696db9cf3e6aac057c"
+
+lodash.assign@^3.2.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-3.2.0.tgz#3ce9f0234b4b2223e296b8fa0ac1fee8ebca64fa"
+ dependencies:
+ lodash._baseassign "^3.0.0"
+ lodash._createassigner "^3.0.0"
+ lodash.keys "^3.0.0"
+
+lodash.assign@^4.2.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-4.2.0.tgz#0d99f3ccd7a6d261d19bdaeb9245005d285808e7"
+
+lodash.clonedeep@^4.3.2:
+ version "4.5.0"
+ resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef"
+
+lodash.isarguments@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a"
+
+lodash.isarray@^3.0.0:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55"
+
+lodash.isplainobject@^4.0.6:
+ version "4.0.6"
+ resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb"
+
+lodash.keys@^3.0.0:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a"
+ dependencies:
+ lodash._getnative "^3.0.0"
+ lodash.isarguments "^3.0.0"
+ lodash.isarray "^3.0.0"
+
+lodash.mergewith@^4.6.0:
+ version "4.6.0"
+ resolved "https://registry.yarnpkg.com/lodash.mergewith/-/lodash.mergewith-4.6.0.tgz#150cf0a16791f5903b8891eab154609274bdea55"
+
+lodash.restparam@^3.0.0:
+ version "3.6.1"
+ resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805"
+
+lodash.some@^4.6.0:
+ version "4.6.0"
+ resolved "https://registry.yarnpkg.com/lodash.some/-/lodash.some-4.6.0.tgz#1bb9f314ef6b8baded13b549169b2a945eb68e4d"
+
+lodash@^3.8.0:
+ version "3.10.1"
+ resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6"
+
+lodash@^4.0.0, lodash@^4.13.1, lodash@^4.14.0, lodash@^4.17.4, lodash@^4.2.0, lodash@^4.3.0, lodash@^4.5.0, lodash@^4.8.0, lodash@~4.17.4:
+ version "4.17.4"
+ resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae"
+
+log4js@^0.6.31:
+ version "0.6.38"
+ resolved "https://registry.yarnpkg.com/log4js/-/log4js-0.6.38.tgz#2c494116695d6fb25480943d3fc872e662a522fd"
+ dependencies:
+ readable-stream "~1.0.2"
+ semver "~4.3.3"
+
+longest@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097"
+
+loose-envify@^1.0.0:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848"
+ dependencies:
+ js-tokens "^3.0.0"
+
+loud-rejection@^1.0.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f"
+ dependencies:
+ currently-unhandled "^0.4.1"
+ signal-exit "^3.0.0"
+
+lower-case@^1.1.1:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.4.tgz#9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac"
+
+lru-cache@2.2.x:
+ version "2.2.4"
+ resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.2.4.tgz#6c658619becf14031d0d0b594b16042ce4dc063d"
+
+lru-cache@^4.0.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.1.tgz#622e32e82488b49279114a4f9ecf45e7cd6bba55"
+ dependencies:
+ pseudomap "^1.0.2"
+ yallist "^2.1.2"
+
+ltgt@^2.1.2:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/ltgt/-/ltgt-2.2.0.tgz#b65ba5fcb349a29924c8e333f7c6a5562f2e4842"
+
+macos-release@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/macos-release/-/macos-release-1.1.0.tgz#831945e29365b470aa8724b0ab36c8f8959d10fb"
+
+magic-string@0.19.1, magic-string@^0.19.0:
+ version "0.19.1"
+ resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.19.1.tgz#14d768013caf2ec8fdea16a49af82fc377e75201"
+ dependencies:
+ vlq "^0.2.1"
+
+magic-string@^0.16.0:
+ version "0.16.0"
+ resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.16.0.tgz#970ebb0da7193301285fb1aa650f39bdd81eb45a"
+ dependencies:
+ vlq "^0.2.1"
+
+make-error@^1.1.1:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.0.tgz#52ad3a339ccf10ce62b4040b708fe707244b8b96"
+
+map-obj@^1.0.0, map-obj@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d"
+
+media-typer@0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748"
+
+mem@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/mem/-/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76"
+ dependencies:
+ mimic-fn "^1.0.0"
+
+memory-fs@^0.4.0, memory-fs@~0.4.1:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552"
+ dependencies:
+ errno "^0.1.3"
+ readable-stream "^2.0.1"
+
+meow@^3.7.0:
+ version "3.7.0"
+ resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb"
+ dependencies:
+ camelcase-keys "^2.0.0"
+ decamelize "^1.1.2"
+ loud-rejection "^1.0.0"
+ map-obj "^1.0.1"
+ minimist "^1.1.3"
+ normalize-package-data "^2.3.4"
+ object-assign "^4.0.1"
+ read-pkg-up "^1.0.1"
+ redent "^1.0.0"
+ trim-newlines "^1.0.0"
+
+merge-descriptors@1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61"
+
+methods@^1.1.1, methods@~1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee"
+
+micromatch@^2.1.5, micromatch@^2.3.11:
+ version "2.3.11"
+ resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565"
+ dependencies:
+ arr-diff "^2.0.0"
+ array-unique "^0.2.1"
+ braces "^1.8.2"
+ expand-brackets "^0.1.4"
+ extglob "^0.3.1"
+ filename-regex "^2.0.0"
+ is-extglob "^1.0.0"
+ is-glob "^2.0.1"
+ kind-of "^3.0.2"
+ normalize-path "^2.0.1"
+ object.omit "^2.0.0"
+ parse-glob "^3.0.4"
+ regex-cache "^0.4.2"
+
+miller-rabin@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.0.tgz#4a62fb1d42933c05583982f4c716f6fb9e6c6d3d"
+ dependencies:
+ bn.js "^4.0.0"
+ brorand "^1.0.1"
+
+mime-db@~1.29.0:
+ version "1.29.0"
+ resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.29.0.tgz#48d26d235589651704ac5916ca06001914266878"
+
+mime-types@^2.1.12, mime-types@~2.1.11, mime-types@~2.1.15, mime-types@~2.1.7:
+ version "2.1.16"
+ resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.16.tgz#2b858a52e5ecd516db897ac2be87487830698e23"
+ dependencies:
+ mime-db "~1.29.0"
+
+mime@1.3.4:
+ version "1.3.4"
+ resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.4.tgz#115f9e3b6b3daf2959983cb38f149a2d40eb5d53"
+
+mime@^1.3.4:
+ version "1.3.6"
+ resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.6.tgz#591d84d3653a6b0b4a3b9df8de5aa8108e72e5e0"
+
+mimic-fn@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.1.0.tgz#e667783d92e89dbd342818b5230b9d62a672ad18"
+
+minimalistic-assert@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz#702be2dda6b37f4836bcb3f5db56641b64a1d3d3"
+
+minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a"
+
+"minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.4, minimatch@~3.0.2:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
+ dependencies:
+ brace-expansion "^1.1.7"
+
+minimist@0.0.8:
+ version "0.0.8"
+ resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
+
+minimist@^1.1.3, minimist@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
+
+minimist@~0.0.1:
+ version "0.0.10"
+ resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf"
+
+"mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0:
+ version "0.5.1"
+ resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
+ dependencies:
+ minimist "0.0.8"
+
+moment@^2.16.0, moment@^2.17.1:
+ version "2.18.1"
+ resolved "https://registry.yarnpkg.com/moment/-/moment-2.18.1.tgz#c36193dd3ce1c2eed2adb7c802dbbc77a81b1c0f"
+
+ms@0.7.1:
+ version "0.7.1"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098"
+
+ms@0.7.2:
+ version "0.7.2"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.2.tgz#ae25cf2512b3885a1d95d7f037868d8431124765"
+
+ms@2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
+
+mute-stream@0.0.7:
+ version "0.0.7"
+ resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab"
+
+nan@^2.3.0, nan@^2.3.2:
+ version "2.6.2"
+ resolved "https://registry.yarnpkg.com/nan/-/nan-2.6.2.tgz#e4ff34e6c95fdfb5aecc08de6596f43605a7db45"
+
+ncname@1.0.x:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/ncname/-/ncname-1.0.0.tgz#5b57ad18b1ca092864ef62b0b1ed8194f383b71c"
+ dependencies:
+ xml-char-classes "^1.0.0"
+
+ncp@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/ncp/-/ncp-2.0.0.tgz#195a21d6c46e361d2fb1281ba38b91e9df7bdbb3"
+
+negotiator@0.6.1:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9"
+
+no-case@^2.2.0:
+ version "2.3.1"
+ resolved "https://registry.yarnpkg.com/no-case/-/no-case-2.3.1.tgz#7aeba1c73a52184265554b7dc03baf720df80081"
+ dependencies:
+ lower-case "^1.1.1"
+
+node-gyp@^3.3.1:
+ version "3.6.2"
+ resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.6.2.tgz#9bfbe54562286284838e750eac05295853fa1c60"
+ dependencies:
+ fstream "^1.0.0"
+ glob "^7.0.3"
+ graceful-fs "^4.1.2"
+ minimatch "^3.0.2"
+ mkdirp "^0.5.0"
+ nopt "2 || 3"
+ npmlog "0 || 1 || 2 || 3 || 4"
+ osenv "0"
+ request "2"
+ rimraf "2"
+ semver "~5.3.0"
+ tar "^2.0.0"
+ which "1"
+
+node-libs-browser@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.0.0.tgz#a3a59ec97024985b46e958379646f96c4b616646"
+ dependencies:
+ assert "^1.1.1"
+ browserify-zlib "^0.1.4"
+ buffer "^4.3.0"
+ console-browserify "^1.1.0"
+ constants-browserify "^1.0.0"
+ crypto-browserify "^3.11.0"
+ domain-browser "^1.1.1"
+ events "^1.0.0"
+ https-browserify "0.0.1"
+ os-browserify "^0.2.0"
+ path-browserify "0.0.0"
+ process "^0.11.0"
+ punycode "^1.2.4"
+ querystring-es3 "^0.2.0"
+ readable-stream "^2.0.5"
+ stream-browserify "^2.0.1"
+ stream-http "^2.3.1"
+ string_decoder "^0.10.25"
+ timers-browserify "^2.0.2"
+ tty-browserify "0.0.0"
+ url "^0.11.0"
+ util "^0.10.3"
+ vm-browserify "0.0.4"
+
+node-pre-gyp@^0.6.36:
+ version "0.6.36"
+ resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.36.tgz#db604112cb74e0d477554e9b505b17abddfab786"
+ dependencies:
+ mkdirp "^0.5.1"
+ nopt "^4.0.1"
+ npmlog "^4.0.2"
+ rc "^1.1.7"
+ request "^2.81.0"
+ rimraf "^2.6.1"
+ semver "^5.3.0"
+ tar "^2.2.1"
+ tar-pack "^3.4.0"
+
+node-sass@4.5.3:
+ version "4.5.3"
+ resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-4.5.3.tgz#d09c9d1179641239d1b97ffc6231fdcec53e1568"
+ dependencies:
+ async-foreach "^0.1.3"
+ chalk "^1.1.1"
+ cross-spawn "^3.0.0"
+ gaze "^1.0.0"
+ get-stdin "^4.0.1"
+ glob "^7.0.3"
+ in-publish "^2.0.0"
+ lodash.assign "^4.2.0"
+ lodash.clonedeep "^4.3.2"
+ lodash.mergewith "^4.6.0"
+ meow "^3.7.0"
+ mkdirp "^0.5.1"
+ nan "^2.3.2"
+ node-gyp "^3.3.1"
+ npmlog "^4.0.0"
+ request "^2.79.0"
+ sass-graph "^2.1.1"
+ stdout-stream "^1.4.0"
+
+"nopt@2 || 3":
+ version "3.0.6"
+ resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9"
+ dependencies:
+ abbrev "1"
+
+nopt@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d"
+ dependencies:
+ abbrev "1"
+ osenv "^0.1.4"
+
+normalize-package-data@^2.3.2, normalize-package-data@^2.3.4:
+ version "2.4.0"
+ resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f"
+ dependencies:
+ hosted-git-info "^2.1.4"
+ is-builtin-module "^1.0.0"
+ semver "2 || 3 || 4 || 5"
+ validate-npm-package-license "^3.0.1"
+
+normalize-path@^2.0.0, normalize-path@^2.0.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9"
+ dependencies:
+ remove-trailing-separator "^1.0.1"
+
+normalize-range@^0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942"
+
+npm-run-path@^2.0.0:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f"
+ dependencies:
+ path-key "^2.0.0"
+
+"npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.0, npmlog@^4.0.2:
+ version "4.1.2"
+ resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b"
+ dependencies:
+ are-we-there-yet "~1.1.2"
+ console-control-strings "~1.1.0"
+ gauge "~2.7.3"
+ set-blocking "~2.0.0"
+
+null-check@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/null-check/-/null-check-1.0.0.tgz#977dffd7176012b9ec30d2a39db5cf72a0439edd"
+
+null-loader@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/null-loader/-/null-loader-0.1.1.tgz#17be9abfcd3ff0e1512f6fc4afcb1f5039378fae"
+
+num2fraction@^1.2.2:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede"
+
+number-is-nan@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
+
+oauth-sign@~0.8.1:
+ version "0.8.2"
+ resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43"
+
+object-assign@4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.0.tgz#7a3b3d0e98063d43f4c03f2e8ae6cd51a86883a0"
+
+object-assign@^4.0.1, object-assign@^4.1.0:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
+
+object-component@0.0.3:
+ version "0.0.3"
+ resolved "https://registry.yarnpkg.com/object-component/-/object-component-0.0.3.tgz#f0c69aa50efc95b866c186f400a33769cb2f1291"
+
+object-keys@^1.0.6:
+ version "1.0.11"
+ resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d"
+
+object-keys@~0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-0.2.0.tgz#cddec02998b091be42bf1035ae32e49f1cb6ea67"
+ dependencies:
+ foreach "~2.0.1"
+ indexof "~0.0.1"
+ is "~0.2.6"
+
+object-keys@~0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-0.4.0.tgz#28a6aae7428dd2c3a92f3d95f21335dd204e0336"
+
+object.omit@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa"
+ dependencies:
+ for-own "^0.1.4"
+ is-extendable "^0.1.1"
+
+octal@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/octal/-/octal-1.0.0.tgz#63e7162a68efbeb9e213588d58e989d1e5c4530b"
+
+on-finished@~2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947"
+ dependencies:
+ ee-first "1.1.1"
+
+once@^1.3.0, once@^1.3.3, once@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
+ dependencies:
+ wrappy "1"
+
+onetime@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4"
+ dependencies:
+ mimic-fn "^1.0.0"
+
+opn@^5.1.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/opn/-/opn-5.1.0.tgz#72ce2306a17dbea58ff1041853352b4a8fc77519"
+ dependencies:
+ is-wsl "^1.1.0"
+
+optimist@^0.6.1, optimist@~0.6.0:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686"
+ dependencies:
+ minimist "~0.0.1"
+ wordwrap "~0.0.2"
+
+options@>=0.0.5:
+ version "0.0.6"
+ resolved "https://registry.yarnpkg.com/options/-/options-0.0.6.tgz#ec22d312806bb53e731773e7cdaefcf1c643128f"
+
+os-browserify@^0.2.0:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.2.1.tgz#63fc4ccee5d2d7763d26bbf8601078e6c2e0044f"
+
+os-homedir@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3"
+
+os-locale@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9"
+ dependencies:
+ lcid "^1.0.0"
+
+os-locale@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2"
+ dependencies:
+ execa "^0.7.0"
+ lcid "^1.0.0"
+ mem "^1.1.0"
+
+os-name@2.0.1, os-name@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/os-name/-/os-name-2.0.1.tgz#b9a386361c17ae3a21736ef0599405c9a8c5dc5e"
+ dependencies:
+ macos-release "^1.0.0"
+ win-release "^1.0.0"
+
+os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
+
+osenv@0, osenv@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.4.tgz#42fe6d5953df06c8064be6f176c3d05aaaa34644"
+ dependencies:
+ os-homedir "^1.0.0"
+ os-tmpdir "^1.0.0"
+
+output-file-sync@^1.1.0:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/output-file-sync/-/output-file-sync-1.1.2.tgz#d0a33eefe61a205facb90092e826598d5245ce76"
+ dependencies:
+ graceful-fs "^4.1.4"
+ mkdirp "^0.5.1"
+ object-assign "^4.1.0"
+
+p-finally@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae"
+
+p-limit@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.1.0.tgz#b07ff2d9a5d88bec806035895a2bab66a27988bc"
+
+p-locate@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43"
+ dependencies:
+ p-limit "^1.1.0"
+
+pako@~0.2.0:
+ version "0.2.9"
+ resolved "https://registry.yarnpkg.com/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75"
+
+param-case@2.1.x:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/param-case/-/param-case-2.1.1.tgz#df94fd8cf6531ecf75e6bef9a0858fbc72be2247"
+ dependencies:
+ no-case "^2.2.0"
+
+parse-asn1@^5.0.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.0.tgz#37c4f9b7ed3ab65c74817b5f2480937fbf97c712"
+ dependencies:
+ asn1.js "^4.0.0"
+ browserify-aes "^1.0.0"
+ create-hash "^1.1.0"
+ evp_bytestokey "^1.0.0"
+ pbkdf2 "^3.0.3"
+
+parse-glob@^3.0.4:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c"
+ dependencies:
+ glob-base "^0.3.0"
+ is-dotfile "^1.0.0"
+ is-extglob "^1.0.0"
+ is-glob "^2.0.0"
+
+parse-json@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9"
+ dependencies:
+ error-ex "^1.2.0"
+
+parsejson@0.0.3:
+ version "0.0.3"
+ resolved "https://registry.yarnpkg.com/parsejson/-/parsejson-0.0.3.tgz#ab7e3759f209ece99437973f7d0f1f64ae0e64ab"
+ dependencies:
+ better-assert "~1.0.0"
+
+parseqs@0.0.5:
+ version "0.0.5"
+ resolved "https://registry.yarnpkg.com/parseqs/-/parseqs-0.0.5.tgz#d5208a3738e46766e291ba2ea173684921a8b89d"
+ dependencies:
+ better-assert "~1.0.0"
+
+parseuri@0.0.5:
+ version "0.0.5"
+ resolved "https://registry.yarnpkg.com/parseuri/-/parseuri-0.0.5.tgz#80204a50d4dbb779bfdc6ebe2778d90e4bce320a"
+ dependencies:
+ better-assert "~1.0.0"
+
+parseurl@~1.3.1:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.1.tgz#c8ab8c9223ba34888aa64a297b28853bec18da56"
+
+path-browserify@0.0.0:
+ version "0.0.0"
+ resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.0.tgz#a0b870729aae214005b7d5032ec2cbbb0fb4451a"
+
+path-exists@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b"
+ dependencies:
+ pinkie-promise "^2.0.0"
+
+path-exists@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"
+
+path-is-absolute@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
+
+path-is-inside@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53"
+
+path-key@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40"
+
+path-parse@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1"
+
+path-to-regexp@0.1.7:
+ version "0.1.7"
+ resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c"
+
+path-to-regexp@^1.0.1:
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.7.0.tgz#59fde0f435badacba103a84e9d3bc64e96b9937d"
+ dependencies:
+ isarray "0.0.1"
+
+path-type@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441"
+ dependencies:
+ graceful-fs "^4.1.2"
+ pify "^2.0.0"
+ pinkie-promise "^2.0.0"
+
+path-type@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73"
+ dependencies:
+ pify "^2.0.0"
+
+pbkdf2@^3.0.3:
+ version "3.0.12"
+ resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.12.tgz#be36785c5067ea48d806ff923288c5f750b6b8a2"
+ dependencies:
+ create-hash "^1.1.2"
+ create-hmac "^1.1.4"
+ ripemd160 "^2.0.1"
+ safe-buffer "^5.0.1"
+ sha.js "^2.4.8"
+
+performance-now@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5"
+
+pify@^2.0.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
+
+pinkie-promise@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa"
+ dependencies:
+ pinkie "^2.0.0"
+
+pinkie@^2.0.0:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"
+
+postcss-value-parser@^3.2.3:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz#87f38f9f18f774a4ab4c8a232f5c5ce8872a9d15"
+
+postcss@5.2.17:
+ version "5.2.17"
+ resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.17.tgz#cf4f597b864d65c8a492b2eabe9d706c879c388b"
+ dependencies:
+ chalk "^1.1.3"
+ js-base64 "^2.1.9"
+ source-map "^0.5.6"
+ supports-color "^3.2.3"
+
+postcss@^6.0.1:
+ version "6.0.8"
+ resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.8.tgz#89067a9ce8b11f8a84cbc5117efc30419a0857b3"
+ dependencies:
+ chalk "^2.0.1"
+ source-map "^0.5.6"
+ supports-color "^4.2.0"
+
+preserve@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b"
+
+private@^0.1.6, private@~0.1.5:
+ version "0.1.7"
+ resolved "https://registry.yarnpkg.com/private/-/private-0.1.7.tgz#68ce5e8a1ef0a23bb570cc28537b5332aba63ef1"
+
+process-es6@^0.11.2, process-es6@^0.11.3:
+ version "0.11.6"
+ resolved "https://registry.yarnpkg.com/process-es6/-/process-es6-0.11.6.tgz#c6bb389f9a951f82bd4eb169600105bd2ff9c778"
+
+process-nextick-args@~1.0.6:
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3"
+
+process@^0.11.0:
+ version "0.11.10"
+ resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182"
+
+protractor@^5.1.1:
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/protractor/-/protractor-5.1.2.tgz#9b221741709a4c62d5cd53c6aadd54a71137e95f"
+ dependencies:
+ "@types/node" "^6.0.46"
+ "@types/q" "^0.0.32"
+ "@types/selenium-webdriver" "~2.53.39"
+ blocking-proxy "0.0.5"
+ chalk "^1.1.3"
+ glob "^7.0.3"
+ jasmine "^2.5.3"
+ jasminewd2 "^2.1.0"
+ optimist "~0.6.0"
+ q "1.4.1"
+ saucelabs "~1.3.0"
+ selenium-webdriver "3.0.1"
+ source-map-support "~0.4.0"
+ webdriver-js-extender "^1.0.0"
+ webdriver-manager "^12.0.6"
+
+proxy-addr@~1.1.4:
+ version "1.1.5"
+ resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-1.1.5.tgz#71c0ee3b102de3f202f3b64f608d173fcba1a918"
+ dependencies:
+ forwarded "~0.1.0"
+ ipaddr.js "1.4.0"
+
+proxy-middleware@0.15.0:
+ version "0.15.0"
+ resolved "https://registry.yarnpkg.com/proxy-middleware/-/proxy-middleware-0.15.0.tgz#a3fdf1befb730f951965872ac2f6074c61477a56"
+
+prr@~0.0.0:
+ version "0.0.0"
+ resolved "https://registry.yarnpkg.com/prr/-/prr-0.0.0.tgz#1a84b85908325501411853d0081ee3fa86e2926a"
+
+pseudomap@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3"
+
+public-encrypt@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.0.tgz#39f699f3a46560dd5ebacbca693caf7c65c18cc6"
+ dependencies:
+ bn.js "^4.1.0"
+ browserify-rsa "^4.0.0"
+ create-hash "^1.1.0"
+ parse-asn1 "^5.0.0"
+ randombytes "^2.0.1"
+
+punycode@1.3.2:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d"
+
+punycode@^1.2.4, punycode@^1.4.1:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
+
+q@1.4.1:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/q/-/q-1.4.1.tgz#55705bcd93c5f3673530c2c2cbc0c2b3addc286e"
+
+q@^1.4.1:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/q/-/q-1.5.0.tgz#dd01bac9d06d30e6f219aecb8253ee9ebdc308f1"
+
+qjobs@^1.1.4:
+ version "1.1.5"
+ resolved "https://registry.yarnpkg.com/qjobs/-/qjobs-1.1.5.tgz#659de9f2cf8dcc27a1481276f205377272382e73"
+
+qs@6.4.0, qs@~6.4.0:
+ version "6.4.0"
+ resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233"
+
+qs@^6.1.0, qs@^6.4.0:
+ version "6.5.0"
+ resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.0.tgz#8d04954d364def3efc55b5a0793e1e2c8b1e6e49"
+
+querystring-es3@^0.2.0:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73"
+
+querystring@0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620"
+
+randomatic@^1.1.3:
+ version "1.1.7"
+ resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.7.tgz#c7abe9cc8b87c0baa876b19fde83fd464797e38c"
+ dependencies:
+ is-number "^3.0.0"
+ kind-of "^4.0.0"
+
+randombytes@^2.0.0, randombytes@^2.0.1:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.0.5.tgz#dc009a246b8d09a177b4b7a0ae77bc570f4b1b79"
+ dependencies:
+ safe-buffer "^5.1.0"
+
+range-parser@^1.0.3, range-parser@^1.2.0, range-parser@~1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e"
+
+raw-body@~1.1.0:
+ version "1.1.7"
+ resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-1.1.7.tgz#1d027c2bfa116acc6623bca8f00016572a87d425"
+ dependencies:
+ bytes "1"
+ string_decoder "0.10"
+
+raw-body@~2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.2.0.tgz#994976cf6a5096a41162840492f0bdc5d6e7fb96"
+ dependencies:
+ bytes "2.4.0"
+ iconv-lite "0.4.15"
+ unpipe "1.0.0"
+
+rc@^1.1.7:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.1.tgz#2e03e8e42ee450b8cb3dce65be1bf8974e1dfd95"
+ dependencies:
+ deep-extend "~0.4.0"
+ ini "~1.3.0"
+ minimist "^1.2.0"
+ strip-json-comments "~2.0.1"
+
+read-pkg-up@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02"
+ dependencies:
+ find-up "^1.0.0"
+ read-pkg "^1.0.0"
+
+read-pkg-up@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be"
+ dependencies:
+ find-up "^2.0.0"
+ read-pkg "^2.0.0"
+
+read-pkg@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28"
+ dependencies:
+ load-json-file "^1.0.0"
+ normalize-package-data "^2.3.2"
+ path-type "^1.0.0"
+
+read-pkg@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8"
+ dependencies:
+ load-json-file "^2.0.0"
+ normalize-package-data "^2.3.2"
+ path-type "^2.0.0"
+
+"readable-stream@>=1.0.33-1 <1.1.0-0", readable-stream@~1.0.2, readable-stream@~1.0.26, readable-stream@~1.0.26-4:
+ version "1.0.34"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c"
+ dependencies:
+ core-util-is "~1.0.0"
+ inherits "~2.0.1"
+ isarray "0.0.1"
+ string_decoder "~0.10.x"
+
+readable-stream@^1.0.26-4:
+ version "1.1.14"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9"
+ dependencies:
+ core-util-is "~1.0.0"
+ inherits "~2.0.1"
+ isarray "0.0.1"
+ string_decoder "~0.10.x"
+
+readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.1.4, readable-stream@^2.2.2, readable-stream@^2.2.6:
+ version "2.3.3"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.3.tgz#368f2512d79f9d46fdfc71349ae7878bbc1eb95c"
+ dependencies:
+ core-util-is "~1.0.0"
+ inherits "~2.0.3"
+ isarray "~1.0.0"
+ process-nextick-args "~1.0.6"
+ safe-buffer "~5.1.1"
+ string_decoder "~1.0.3"
+ util-deprecate "~1.0.1"
+
+readdirp@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78"
+ dependencies:
+ graceful-fs "^4.1.2"
+ minimatch "^3.0.2"
+ readable-stream "^2.0.2"
+ set-immediate-shim "^1.0.1"
+
+recast@^0.10.1:
+ version "0.10.43"
+ resolved "https://registry.yarnpkg.com/recast/-/recast-0.10.43.tgz#b95d50f6d60761a5f6252e15d80678168491ce7f"
+ dependencies:
+ ast-types "0.8.15"
+ esprima-fb "~15001.1001.0-dev-harmony-fb"
+ private "~0.1.5"
+ source-map "~0.5.0"
+
+recast@~0.11.12:
+ version "0.11.23"
+ resolved "https://registry.yarnpkg.com/recast/-/recast-0.11.23.tgz#451fd3004ab1e4df9b4e4b66376b2a21912462d3"
+ dependencies:
+ ast-types "0.9.6"
+ esprima "~3.1.0"
+ private "~0.1.5"
+ source-map "~0.5.0"
+
+redent@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde"
+ dependencies:
+ indent-string "^2.1.0"
+ strip-indent "^1.0.1"
+
+reflect-metadata@^0.1.10, reflect-metadata@^0.1.2:
+ version "0.1.10"
+ resolved "https://registry.yarnpkg.com/reflect-metadata/-/reflect-metadata-0.1.10.tgz#b4f83704416acad89988c9b15635d47e03b9344a"
+
+regenerator-runtime@^0.10.0:
+ version "0.10.5"
+ resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz#336c3efc1220adcedda2c9fab67b5a7955a33658"
+
+regex-cache@^0.4.2:
+ version "0.4.3"
+ resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.3.tgz#9b1a6c35d4d0dfcef5711ae651e8e9d3d7114145"
+ dependencies:
+ is-equal-shallow "^0.1.3"
+ is-primitive "^2.0.0"
+
+relateurl@0.2.x:
+ version "0.2.7"
+ resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9"
+
+remove-trailing-separator@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.0.2.tgz#69b062d978727ad14dc6b56ba4ab772fd8d70511"
+
+repeat-element@^1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a"
+
+repeat-string@^0.2.2:
+ version "0.2.2"
+ resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-0.2.2.tgz#c7a8d3236068362059a7e4651fc6884e8b1fb4ae"
+
+repeat-string@^1.5.2:
+ version "1.6.1"
+ resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
+
+repeating@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda"
+ dependencies:
+ is-finite "^1.0.0"
+
+request@2, request@^2.78.0, request@^2.79.0, request@^2.81.0:
+ version "2.81.0"
+ resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0"
+ dependencies:
+ aws-sign2 "~0.6.0"
+ aws4 "^1.2.1"
+ caseless "~0.12.0"
+ combined-stream "~1.0.5"
+ extend "~3.0.0"
+ forever-agent "~0.6.1"
+ form-data "~2.1.1"
+ har-validator "~4.2.1"
+ hawk "~3.1.3"
+ http-signature "~1.1.0"
+ is-typedarray "~1.0.0"
+ isstream "~0.1.2"
+ json-stringify-safe "~5.0.1"
+ mime-types "~2.1.7"
+ oauth-sign "~0.8.1"
+ performance-now "^0.2.0"
+ qs "~6.4.0"
+ safe-buffer "^5.0.1"
+ stringstream "~0.0.4"
+ tough-cookie "~2.3.0"
+ tunnel-agent "^0.6.0"
+ uuid "^3.0.0"
+
+require-directory@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
+
+require-main-filename@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1"
+
+requires-port@1.x.x:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff"
+
+resolve@1.1.7:
+ version "1.1.7"
+ resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b"
+
+resolve@^1.1.6, resolve@^1.1.7, resolve@^1.3.2:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.4.0.tgz#a75be01c53da25d934a98ebd0e4c4a7312f92a86"
+ dependencies:
+ path-parse "^1.0.5"
+
+restore-cursor@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf"
+ dependencies:
+ onetime "^2.0.0"
+ signal-exit "^3.0.2"
+
+right-align@^0.1.1:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef"
+ dependencies:
+ align-text "^0.1.1"
+
+rimraf@2, rimraf@^2.2.8, rimraf@^2.5.1, rimraf@^2.5.2, rimraf@^2.5.4, rimraf@^2.6.0, rimraf@^2.6.1:
+ version "2.6.1"
+ resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.1.tgz#c2338ec643df7a1b7fe5c54fa86f57428a55f33d"
+ dependencies:
+ glob "^7.0.5"
+
+ripemd160@^2.0.0, ripemd160@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.1.tgz#0f4584295c53a3628af7e6d79aca21ce57d1c6e7"
+ dependencies:
+ hash-base "^2.0.0"
+ inherits "^2.0.1"
+
+rollup-plugin-commonjs@8.0.2:
+ version "8.0.2"
+ resolved "https://registry.yarnpkg.com/rollup-plugin-commonjs/-/rollup-plugin-commonjs-8.0.2.tgz#98b1589bfe32a6c0f67790b60c0b499972afed89"
+ dependencies:
+ acorn "^4.0.1"
+ estree-walker "^0.3.0"
+ magic-string "^0.19.0"
+ resolve "^1.1.7"
+ rollup-pluginutils "^2.0.1"
+
+rollup-plugin-json@2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/rollup-plugin-json/-/rollup-plugin-json-2.3.0.tgz#3c07a452c1b5391be28006fbfff3644056ce0add"
+ dependencies:
+ rollup-pluginutils "^2.0.1"
+
+rollup-plugin-node-builtins@2.1.2:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/rollup-plugin-node-builtins/-/rollup-plugin-node-builtins-2.1.2.tgz#24a1fed4a43257b6b64371d8abc6ce1ab14597e9"
+ dependencies:
+ browserify-fs "^1.0.0"
+ buffer-es6 "^4.9.2"
+ crypto-browserify "^3.11.0"
+ process-es6 "^0.11.2"
+
+rollup-plugin-node-globals@1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/rollup-plugin-node-globals/-/rollup-plugin-node-globals-1.1.0.tgz#7efd8d611d132737829e804e9f51f50962af451f"
+ dependencies:
+ acorn "^4.0.1"
+ buffer-es6 "^4.9.1"
+ estree-walker "^0.2.1"
+ magic-string "^0.16.0"
+ process-es6 "^0.11.3"
+ rollup-pluginutils "^1.5.2"
+
+rollup-plugin-node-resolve@3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-3.0.0.tgz#8b897c4c3030d5001277b0514b25d2ca09683ee0"
+ dependencies:
+ browser-resolve "^1.11.0"
+ builtin-modules "^1.1.0"
+ is-module "^1.0.0"
+ resolve "^1.1.6"
+
+rollup-pluginutils@2.0.1, rollup-pluginutils@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.0.1.tgz#7ec95b3573f6543a46a6461bd9a7c544525d0fc0"
+ dependencies:
+ estree-walker "^0.3.0"
+ micromatch "^2.3.11"
+
+rollup-pluginutils@^1.5.2:
+ version "1.5.2"
+ resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-1.5.2.tgz#1e156e778f94b7255bfa1b3d0178be8f5c552408"
+ dependencies:
+ estree-walker "^0.2.1"
+ minimatch "^3.0.2"
+
+rollup@0.42.0:
+ version "0.42.0"
+ resolved "https://registry.yarnpkg.com/rollup/-/rollup-0.42.0.tgz#56e791b3a2f3dd7190bbb80a375675f2fe0f9b23"
+ dependencies:
+ source-map-support "^0.4.0"
+
+rsvp@^3.0.21:
+ version "3.6.2"
+ resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-3.6.2.tgz#2e96491599a96cde1b515d5674a8f7a91452926a"
+
+run-async@^2.2.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0"
+ dependencies:
+ is-promise "^2.1.0"
+
+rx-lite-aggregates@^4.0.8:
+ version "4.0.8"
+ resolved "https://registry.yarnpkg.com/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz#753b87a89a11c95467c4ac1626c4efc4e05c67be"
+ dependencies:
+ rx-lite "*"
+
+rx-lite@*, rx-lite@^4.0.8:
+ version "4.0.8"
+ resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444"
+
+rxjs@5.4.0:
+ version "5.4.0"
+ resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-5.4.0.tgz#a7db14ab157f9d7aac6a56e655e7a3860d39bf26"
+ dependencies:
+ symbol-observable "^1.0.1"
+
+safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853"
+
+safe-json-parse@~1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/safe-json-parse/-/safe-json-parse-1.0.1.tgz#3e76723e38dfdda13c9b1d29a1e07ffee4b30b57"
+
+sass-graph@^2.1.1:
+ version "2.2.4"
+ resolved "https://registry.yarnpkg.com/sass-graph/-/sass-graph-2.2.4.tgz#13fbd63cd1caf0908b9fd93476ad43a51d1e0b49"
+ dependencies:
+ glob "^7.0.0"
+ lodash "^4.0.0"
+ scss-tokenizer "^0.2.3"
+ yargs "^7.0.0"
+
+saucelabs@~1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/saucelabs/-/saucelabs-1.3.0.tgz#d240e8009df7fa87306ec4578a69ba3b5c424fee"
+ dependencies:
+ https-proxy-agent "^1.0.0"
+
+sax@0.6.x:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/sax/-/sax-0.6.1.tgz#563b19c7c1de892e09bfc4f2fc30e3c27f0952b9"
+
+sax@>=0.6.0:
+ version "1.2.4"
+ resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
+
+scss-tokenizer@^0.2.3:
+ version "0.2.3"
+ resolved "https://registry.yarnpkg.com/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz#8eb06db9a9723333824d3f5530641149847ce5d1"
+ dependencies:
+ js-base64 "^2.1.8"
+ source-map "^0.4.2"
+
+selenium-webdriver@3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/selenium-webdriver/-/selenium-webdriver-3.0.1.tgz#a2dea5da4a97f6672e89e7ca7276cefa365147a7"
+ dependencies:
+ adm-zip "^0.4.7"
+ rimraf "^2.5.4"
+ tmp "0.0.30"
+ xml2js "^0.4.17"
+
+selenium-webdriver@^2.53.2:
+ version "2.53.3"
+ resolved "https://registry.yarnpkg.com/selenium-webdriver/-/selenium-webdriver-2.53.3.tgz#d29ff5a957dff1a1b49dc457756e4e4bfbdce085"
+ dependencies:
+ adm-zip "0.4.4"
+ rimraf "^2.2.8"
+ tmp "0.0.24"
+ ws "^1.0.1"
+ xml2js "0.4.4"
+
+"semver@2 || 3 || 4 || 5", semver@^5.0.1, semver@^5.3.0, semver@^5.4.1:
+ version "5.4.1"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e"
+
+semver@~2.3.1:
+ version "2.3.2"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-2.3.2.tgz#b9848f25d6cf36333073ec9ef8856d42f1233e52"
+
+semver@~4.3.3:
+ version "4.3.6"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-4.3.6.tgz#300bc6e0e86374f7ba61068b5b1ecd57fc6532da"
+
+semver@~5.0.1:
+ version "5.0.3"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-5.0.3.tgz#77466de589cd5d3c95f138aa78bc569a3cb5d27a"
+
+semver@~5.3.0:
+ version "5.3.0"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f"
+
+send@0.15.3:
+ version "0.15.3"
+ resolved "https://registry.yarnpkg.com/send/-/send-0.15.3.tgz#5013f9f99023df50d1bd9892c19e3defd1d53309"
+ dependencies:
+ debug "2.6.7"
+ depd "~1.1.0"
+ destroy "~1.0.4"
+ encodeurl "~1.0.1"
+ escape-html "~1.0.3"
+ etag "~1.8.0"
+ fresh "0.5.0"
+ http-errors "~1.6.1"
+ mime "1.3.4"
+ ms "2.0.0"
+ on-finished "~2.3.0"
+ range-parser "~1.2.0"
+ statuses "~1.3.1"
+
+serve-static@1.12.3:
+ version "1.12.3"
+ resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.12.3.tgz#9f4ba19e2f3030c547f8af99107838ec38d5b1e2"
+ dependencies:
+ encodeurl "~1.0.1"
+ escape-html "~1.0.3"
+ parseurl "~1.3.1"
+ send "0.15.3"
+
+serviceworker-cache-polyfill@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/serviceworker-cache-polyfill/-/serviceworker-cache-polyfill-4.0.0.tgz#de19ee73bef21ab3c0740a37b33db62464babdeb"
+
+set-blocking@^2.0.0, set-blocking@~2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
+
+set-immediate-shim@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61"
+
+setimmediate@^1.0.4:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285"
+
+setprototypeof@1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.3.tgz#66567e37043eeb4f04d91bd658c0cbefb55b8e04"
+
+sha.js@^2.4.0, sha.js@^2.4.8:
+ version "2.4.8"
+ resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.8.tgz#37068c2c476b6baf402d14a49c67f597921f634f"
+ dependencies:
+ inherits "^2.0.1"
+
+shebang-command@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea"
+ dependencies:
+ shebang-regex "^1.0.0"
+
+shebang-regex@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3"
+
+signal-exit@^3.0.0, signal-exit@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
+
+slash@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55"
+
+slice-ansi@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-1.0.0.tgz#044f1a49d8842ff307aad6b505ed178bd950134d"
+ dependencies:
+ is-fullwidth-code-point "^2.0.0"
+
+sntp@1.x.x:
+ version "1.0.9"
+ resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198"
+ dependencies:
+ hoek "2.x.x"
+
+socket.io-adapter@0.5.0:
+ version "0.5.0"
+ resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-0.5.0.tgz#cb6d4bb8bec81e1078b99677f9ced0046066bb8b"
+ dependencies:
+ debug "2.3.3"
+ socket.io-parser "2.3.1"
+
+socket.io-client@1.7.3:
+ version "1.7.3"
+ resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-1.7.3.tgz#b30e86aa10d5ef3546601c09cde4765e381da377"
+ dependencies:
+ backo2 "1.0.2"
+ component-bind "1.0.0"
+ component-emitter "1.2.1"
+ debug "2.3.3"
+ engine.io-client "1.8.3"
+ has-binary "0.1.7"
+ indexof "0.0.1"
+ object-component "0.0.3"
+ parseuri "0.0.5"
+ socket.io-parser "2.3.1"
+ to-array "0.1.4"
+
+socket.io-parser@2.3.1:
+ version "2.3.1"
+ resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-2.3.1.tgz#dd532025103ce429697326befd64005fcfe5b4a0"
+ dependencies:
+ component-emitter "1.1.2"
+ debug "2.2.0"
+ isarray "0.0.1"
+ json3 "3.3.2"
+
+socket.io@1.7.3:
+ version "1.7.3"
+ resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-1.7.3.tgz#b8af9caba00949e568e369f1327ea9be9ea2461b"
+ dependencies:
+ debug "2.3.3"
+ engine.io "1.8.3"
+ has-binary "0.1.7"
+ object-assign "4.1.0"
+ socket.io-adapter "0.5.0"
+ socket.io-client "1.7.3"
+ socket.io-parser "2.3.1"
+
+source-list-map@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.0.tgz#aaa47403f7b245a92fbc97ea08f250d6087ed085"
+
+source-map-support@^0.4.0, source-map-support@^0.4.2, source-map-support@~0.4.0:
+ version "0.4.15"
+ resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.15.tgz#03202df65c06d2bd8c7ec2362a193056fef8d3b1"
+ dependencies:
+ source-map "^0.5.6"
+
+source-map@0.1.31:
+ version "0.1.31"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.1.31.tgz#9f704d0d69d9e138a81badf6ebb4fde33d151c61"
+ dependencies:
+ amdefine ">=0.0.4"
+
+source-map@0.4.x, source-map@^0.4.2:
+ version "0.4.4"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b"
+ dependencies:
+ amdefine ">=0.0.4"
+
+source-map@0.5.x, source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.0, source-map@~0.5.1, source-map@~0.5.3:
+ version "0.5.6"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412"
+
+source-map@^0.1.41:
+ version "0.1.43"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.1.43.tgz#c24bc146ca517c1471f5dacbe2571b2b7f9e3346"
+ dependencies:
+ amdefine ">=0.0.4"
+
+spdx-correct@~1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-1.0.2.tgz#4b3073d933ff51f3912f03ac5519498a4150db40"
+ dependencies:
+ spdx-license-ids "^1.0.2"
+
+spdx-expression-parse@~1.0.0:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz#9bdf2f20e1f40ed447fbe273266191fced51626c"
+
+spdx-license-ids@^1.0.2:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz#c9df7a3424594ade6bd11900d596696dc06bac57"
+
+ssh-config@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/ssh-config/-/ssh-config-1.0.1.tgz#38742116dced7d45f5362ca86af77130ccbebc8b"
+
+sshpk@^1.7.0:
+ version "1.13.1"
+ resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.13.1.tgz#512df6da6287144316dc4c18fe1cf1d940739be3"
+ dependencies:
+ asn1 "~0.2.3"
+ assert-plus "^1.0.0"
+ dashdash "^1.12.0"
+ getpass "^0.1.1"
+ optionalDependencies:
+ bcrypt-pbkdf "^1.0.0"
+ ecc-jsbn "~0.1.1"
+ jsbn "~0.1.0"
+ tweetnacl "~0.14.0"
+
+"statuses@>= 1.3.1 < 2", statuses@~1.3.1:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.3.1.tgz#faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e"
+
+stdout-stream@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/stdout-stream/-/stdout-stream-1.4.0.tgz#a2c7c8587e54d9427ea9edb3ac3f2cd522df378b"
+ dependencies:
+ readable-stream "^2.0.1"
+
+stream-browserify@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.1.tgz#66266ee5f9bdb9940a4e4514cafb43bb71e5c9db"
+ dependencies:
+ inherits "~2.0.1"
+ readable-stream "^2.0.2"
+
+stream-http@^2.3.1:
+ version "2.7.2"
+ resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.7.2.tgz#40a050ec8dc3b53b33d9909415c02c0bf1abfbad"
+ dependencies:
+ builtin-status-codes "^3.0.0"
+ inherits "^2.0.1"
+ readable-stream "^2.2.6"
+ to-arraybuffer "^1.0.0"
+ xtend "^4.0.0"
+
+string-range@~1.2, string-range@~1.2.1:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/string-range/-/string-range-1.2.2.tgz#a893ed347e72299bc83befbbf2a692a8d239d5dd"
+
+string-template@~0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/string-template/-/string-template-0.2.1.tgz#42932e598a352d01fc22ec3367d9d84eec6c9add"
+
+string-width@^1.0.1, string-width@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
+ dependencies:
+ code-point-at "^1.0.0"
+ is-fullwidth-code-point "^1.0.0"
+ strip-ansi "^3.0.0"
+
+string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e"
+ dependencies:
+ is-fullwidth-code-point "^2.0.0"
+ strip-ansi "^4.0.0"
+
+string_decoder@0.10, string_decoder@^0.10.25, string_decoder@~0.10.x:
+ version "0.10.31"
+ resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94"
+
+string_decoder@~1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.3.tgz#0fc67d7c141825de94282dd536bec6b9bce860ab"
+ dependencies:
+ safe-buffer "~5.1.0"
+
+stringstream@~0.0.4:
+ version "0.0.5"
+ resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878"
+
+strip-ansi@^3.0.0, strip-ansi@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
+ dependencies:
+ ansi-regex "^2.0.0"
+
+strip-ansi@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f"
+ dependencies:
+ ansi-regex "^3.0.0"
+
+strip-bom@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e"
+ dependencies:
+ is-utf8 "^0.2.0"
+
+strip-bom@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"
+
+strip-eof@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf"
+
+strip-indent@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2"
+ dependencies:
+ get-stdin "^4.0.1"
+
+strip-json-comments@^2.0.0, strip-json-comments@~2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
+
+superagent@^3.5.2:
+ version "3.5.2"
+ resolved "https://registry.yarnpkg.com/superagent/-/superagent-3.5.2.tgz#3361a3971567504c351063abeaae0faa23dbf3f8"
+ dependencies:
+ component-emitter "^1.2.0"
+ cookiejar "^2.0.6"
+ debug "^2.2.0"
+ extend "^3.0.0"
+ form-data "^2.1.1"
+ formidable "^1.1.1"
+ methods "^1.1.1"
+ mime "^1.3.4"
+ qs "^6.1.0"
+ readable-stream "^2.0.5"
+
+supports-color@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
+
+supports-color@^3.2.3:
+ version "3.2.3"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6"
+ dependencies:
+ has-flag "^1.0.0"
+
+supports-color@^4.0.0, supports-color@^4.2.0, supports-color@^4.2.1:
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.2.1.tgz#65a4bb2631e90e02420dba5554c375a4754bb836"
+ dependencies:
+ has-flag "^2.0.0"
+
+sw-toolbox@3.6.0:
+ version "3.6.0"
+ resolved "https://registry.yarnpkg.com/sw-toolbox/-/sw-toolbox-3.6.0.tgz#26df1d1c70348658e4dea2884319149b7b3183b5"
+ dependencies:
+ path-to-regexp "^1.0.1"
+ serviceworker-cache-polyfill "^4.0.0"
+
+symbol-observable@^1.0.1:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.4.tgz#29bf615d4aa7121bdd898b22d4b3f9bc4e2aa03d"
+
+tapable@^0.2.7:
+ version "0.2.7"
+ resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.2.7.tgz#e46c0daacbb2b8a98b9b0cea0f4052105817ed5c"
+
+tar-pack@^3.4.0:
+ version "3.4.0"
+ resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.4.0.tgz#23be2d7f671a8339376cbdb0b8fe3fdebf317984"
+ dependencies:
+ debug "^2.2.0"
+ fstream "^1.0.10"
+ fstream-ignore "^1.0.5"
+ once "^1.3.3"
+ readable-stream "^2.1.4"
+ rimraf "^2.5.1"
+ tar "^2.2.1"
+ uid-number "^0.0.6"
+
+tar-stream@^1.5.0:
+ version "1.5.4"
+ resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-1.5.4.tgz#36549cf04ed1aee9b2a30c0143252238daf94016"
+ dependencies:
+ bl "^1.0.0"
+ end-of-stream "^1.0.0"
+ readable-stream "^2.0.0"
+ xtend "^4.0.0"
+
+tar@^2.0.0, tar@^2.2.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1"
+ dependencies:
+ block-stream "*"
+ fstream "^1.0.2"
+ inherits "2"
+
+through2@^0.6.2, through2@^0.6.5:
+ version "0.6.5"
+ resolved "https://registry.yarnpkg.com/through2/-/through2-0.6.5.tgz#41ab9c67b29d57209071410e1d7a7a968cd3ad48"
+ dependencies:
+ readable-stream ">=1.0.33-1 <1.1.0-0"
+ xtend ">=4.0.0 <4.1.0-0"
+
+through@^2.3.6, through@~2.3.4, through@~2.3.6:
+ version "2.3.8"
+ resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
+
+timers-browserify@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.2.tgz#ab4883cf597dcd50af211349a00fbca56ac86b86"
+ dependencies:
+ setimmediate "^1.0.4"
+
+tiny-lr@1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/tiny-lr/-/tiny-lr-1.0.4.tgz#d13becf37f8b7e963320f5743298e3e934c7329a"
+ dependencies:
+ body "^5.1.0"
+ debug "~2.2.0"
+ faye-websocket "~0.10.0"
+ livereload-js "^2.2.2"
+ object-assign "^4.1.0"
+ qs "^6.4.0"
+
+tmp@0.0.24:
+ version "0.0.24"
+ resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.24.tgz#d6a5e198d14a9835cc6f2d7c3d9e302428c8cf12"
+
+tmp@0.0.30:
+ version "0.0.30"
+ resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.30.tgz#72419d4a8be7d6ce75148fd8b324e593a711c2ed"
+ dependencies:
+ os-tmpdir "~1.0.1"
+
+tmp@0.0.31, tmp@0.0.x, tmp@^0.0.31:
+ version "0.0.31"
+ resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.31.tgz#8f38ab9438e17315e5dbd8b3657e8bfb277ae4a7"
+ dependencies:
+ os-tmpdir "~1.0.1"
+
+to-array@0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/to-array/-/to-array-0.1.4.tgz#17e6c11f73dd4f3d74cda7a4ff3238e9ad9bf890"
+
+to-arraybuffer@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43"
+
+to-fast-properties@^1.0.1:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47"
+
+tough-cookie@~2.3.0:
+ version "2.3.2"
+ resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.2.tgz#f081f76e4c85720e6c37a5faced737150d84072a"
+ dependencies:
+ punycode "^1.4.1"
+
+trim-newlines@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613"
+
+trim-right@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003"
+
+ts-loader@^2.0.3:
+ version "2.3.2"
+ resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-2.3.2.tgz#b71b9f0d0062c791a654d462140718f9f7817665"
+ dependencies:
+ chalk "^2.0.1"
+ enhanced-resolve "^3.0.0"
+ loader-utils "^1.0.2"
+ semver "^5.0.1"
+
+ts-node@^3.0.2:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-3.3.0.tgz#c13c6a3024e30be1180dd53038fc209289d4bf69"
+ dependencies:
+ arrify "^1.0.0"
+ chalk "^2.0.0"
+ diff "^3.1.0"
+ make-error "^1.1.1"
+ minimist "^1.2.0"
+ mkdirp "^0.5.1"
+ source-map-support "^0.4.0"
+ tsconfig "^6.0.0"
+ v8flags "^3.0.0"
+ yn "^2.0.0"
+
+tsconfig@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/tsconfig/-/tsconfig-6.0.0.tgz#6b0e8376003d7af1864f8df8f89dd0059ffcd032"
+ dependencies:
+ strip-bom "^3.0.0"
+ strip-json-comments "^2.0.0"
+
+tsickle@^0.21.0:
+ version "0.21.6"
+ resolved "https://registry.yarnpkg.com/tsickle/-/tsickle-0.21.6.tgz#53b01b979c5c13fdb13afb3fb958177e5991588d"
+ dependencies:
+ minimist "^1.2.0"
+ mkdirp "^0.5.1"
+ source-map "^0.5.6"
+ source-map-support "^0.4.2"
+
+tslib@^1.0.0, tslib@^1.7.1:
+ version "1.7.1"
+ resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.7.1.tgz#bc8004164691923a79fe8378bbeb3da2017538ec"
+
+tslint-eslint-rules@4.1.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/tslint-eslint-rules/-/tslint-eslint-rules-4.1.1.tgz#7c30e7882f26bc276bff91d2384975c69daf88ba"
+ dependencies:
+ doctrine "^0.7.2"
+ tslib "^1.0.0"
+ tsutils "^1.4.0"
+
+tslint@^5.5.0:
+ version "5.5.0"
+ resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.5.0.tgz#10e8dab3e3061fa61e9442e8cee3982acf20a6aa"
+ dependencies:
+ babel-code-frame "^6.22.0"
+ colors "^1.1.2"
+ commander "^2.9.0"
+ diff "^3.2.0"
+ glob "^7.1.1"
+ minimatch "^3.0.4"
+ resolve "^1.3.2"
+ semver "^5.3.0"
+ tslib "^1.7.1"
+ tsutils "^2.5.1"
+
+tsutils@^1.4.0:
+ version "1.9.1"
+ resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-1.9.1.tgz#b9f9ab44e55af9681831d5f28d0aeeaf5c750cb0"
+
+tsutils@^2.5.1:
+ version "2.8.0"
+ resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-2.8.0.tgz#0160173729b3bf138628dd14a1537e00851d814a"
+ dependencies:
+ tslib "^1.7.1"
+
+tty-browserify@0.0.0:
+ version "0.0.0"
+ resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6"
+
+tunnel-agent@^0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd"
+ dependencies:
+ safe-buffer "^5.0.1"
+
+tweetnacl@^0.14.3, tweetnacl@~0.14.0:
+ version "0.14.5"
+ resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
+
+type-is@~1.6.15:
+ version "1.6.15"
+ resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.15.tgz#cab10fb4909e441c82842eafe1ad646c81804410"
+ dependencies:
+ media-typer "0.3.0"
+ mime-types "~2.1.15"
+
+typedarray-to-buffer@~1.0.0:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-1.0.4.tgz#9bb8ba0e841fb3f4cf1fe7c245e9f3fa8a5fe99c"
+
+typedarray@^0.0.6:
+ version "0.0.6"
+ resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
+
+typescript@2.3.4:
+ version "2.3.4"
+ resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.3.4.tgz#3d38321828231e434f287514959c37a82b629f42"
+
+uglify-js@3.0.x, uglify-js@^3.0.23:
+ version "3.0.27"
+ resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.0.27.tgz#a97db8c8ba6b9dba4e2f88d86aa9548fa6320034"
+ dependencies:
+ commander "~2.11.0"
+ source-map "~0.5.1"
+
+uglify-js@^2.8.29:
+ version "2.8.29"
+ resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd"
+ dependencies:
+ source-map "~0.5.1"
+ yargs "~3.10.0"
+ optionalDependencies:
+ uglify-to-browserify "~1.0.0"
+
+uglify-to-browserify@~1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7"
+
+uglifyjs-webpack-plugin@^0.4.6:
+ version "0.4.6"
+ resolved "https://registry.yarnpkg.com/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-0.4.6.tgz#b951f4abb6bd617e66f63eb891498e391763e309"
+ dependencies:
+ source-map "^0.5.6"
+ uglify-js "^2.8.29"
+ webpack-sources "^1.0.1"
+
+uid-number@^0.0.6:
+ version "0.0.6"
+ resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81"
+
+ultron@1.0.x:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.0.2.tgz#ace116ab557cd197386a4e88f4685378c8b2e4fa"
+
+universalify@^0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.1.tgz#fa71badd4437af4c148841e3b3b165f9e9e590b7"
+
+unpipe@1.0.0, unpipe@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
+
+unreachable-branch-transform@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/unreachable-branch-transform/-/unreachable-branch-transform-0.3.0.tgz#d99cc4c6e746d264928845b611db54b0f3474caa"
+ dependencies:
+ esmangle-evaluator "^1.0.0"
+ recast "^0.10.1"
+ through2 "^0.6.2"
+
+upper-case@^1.1.1:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598"
+
+url@^0.11.0:
+ version "0.11.0"
+ resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1"
+ dependencies:
+ punycode "1.3.2"
+ querystring "0.2.0"
+
+user-home@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/user-home/-/user-home-1.1.1.tgz#2b5be23a32b63a7c9deb8d0f28d485724a3df190"
+
+useragent@^2.1.12:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/useragent/-/useragent-2.2.1.tgz#cf593ef4f2d175875e8bb658ea92e18a4fd06d8e"
+ dependencies:
+ lru-cache "2.2.x"
+ tmp "0.0.x"
+
+util-deprecate@~1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
+
+util@0.10.3, util@^0.10.3:
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9"
+ dependencies:
+ inherits "2.0.1"
+
+utils-merge@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.0.tgz#0294fb922bb9375153541c4f7096231f287c8af8"
+
+uuid@^3.0.0, uuid@^3.0.1:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.1.0.tgz#3dd3d3e790abc24d7b0d3a034ffababe28ebbc04"
+
+v8flags@^2.0.10:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-2.1.1.tgz#aab1a1fa30d45f88dd321148875ac02c0b55e5b4"
+ dependencies:
+ user-home "^1.1.1"
+
+v8flags@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-3.0.0.tgz#4be9604488e0c4123645def705b1848d16b8e01f"
+ dependencies:
+ user-home "^1.1.1"
+
+validate-npm-package-license@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc"
+ dependencies:
+ spdx-correct "~1.0.0"
+ spdx-expression-parse "~1.0.0"
+
+vary@~1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.1.tgz#67535ebb694c1d52257457984665323f587e8d37"
+
+verror@1.3.6:
+ version "1.3.6"
+ resolved "https://registry.yarnpkg.com/verror/-/verror-1.3.6.tgz#cff5df12946d297d2baaefaa2689e25be01c005c"
+ dependencies:
+ extsprintf "1.0.2"
+
+vlq@^0.2.1:
+ version "0.2.2"
+ resolved "https://registry.yarnpkg.com/vlq/-/vlq-0.2.2.tgz#e316d5257b40b86bb43cb8d5fea5d7f54d6b0ca1"
+
+vm-browserify@0.0.4:
+ version "0.0.4"
+ resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-0.0.4.tgz#5d7ea45bbef9e4a6ff65f95438e0a87c357d5a73"
+ dependencies:
+ indexof "0.0.1"
+
+void-elements@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-2.0.1.tgz#c066afb582bb1cb4128d60ea92392e94d5e9dbec"
+
+walkdir@^0.0.11:
+ version "0.0.11"
+ resolved "https://registry.yarnpkg.com/walkdir/-/walkdir-0.0.11.tgz#a16d025eb931bd03b52f308caed0f40fcebe9532"
+
+watchpack@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.4.0.tgz#4a1472bcbb952bd0a9bb4036801f954dfb39faac"
+ dependencies:
+ async "^2.1.2"
+ chokidar "^1.7.0"
+ graceful-fs "^4.1.2"
+
+webdriver-js-extender@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/webdriver-js-extender/-/webdriver-js-extender-1.0.0.tgz#81c533a9e33d5bfb597b4e63e2cdb25b54777515"
+ dependencies:
+ "@types/selenium-webdriver" "^2.53.35"
+ selenium-webdriver "^2.53.2"
+
+webdriver-manager@^12.0.6:
+ version "12.0.6"
+ resolved "https://registry.yarnpkg.com/webdriver-manager/-/webdriver-manager-12.0.6.tgz#3df1a481977010b4cbf8c9d85c7a577828c0e70b"
+ dependencies:
+ adm-zip "^0.4.7"
+ chalk "^1.1.1"
+ del "^2.2.0"
+ glob "^7.0.3"
+ ini "^1.3.4"
+ minimist "^1.2.0"
+ q "^1.4.1"
+ request "^2.78.0"
+ rimraf "^2.5.2"
+ semver "^5.3.0"
+ xml2js "^0.4.17"
+
+webpack-dev-middleware@^1.0.11:
+ version "1.11.0"
+ resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-1.11.0.tgz#09691d0973a30ad1f82ac73a12e2087f0a4754f9"
+ dependencies:
+ memory-fs "~0.4.1"
+ mime "^1.3.4"
+ path-is-absolute "^1.0.0"
+ range-parser "^1.0.3"
+
+webpack-sources@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.0.1.tgz#c7356436a4d13123be2e2426a05d1dad9cbe65cf"
+ dependencies:
+ source-list-map "^2.0.0"
+ source-map "~0.5.3"
+
+webpack@^3.1.0:
+ version "3.4.1"
+ resolved "https://registry.yarnpkg.com/webpack/-/webpack-3.4.1.tgz#4c3f4f3fb318155a4db0cb6a36ff05c5697418f4"
+ dependencies:
+ acorn "^5.0.0"
+ acorn-dynamic-import "^2.0.0"
+ ajv "^5.1.5"
+ ajv-keywords "^2.0.0"
+ async "^2.1.2"
+ enhanced-resolve "^3.4.0"
+ escope "^3.6.0"
+ interpret "^1.0.0"
+ json-loader "^0.5.4"
+ json5 "^0.5.1"
+ loader-runner "^2.3.0"
+ loader-utils "^1.1.0"
+ memory-fs "~0.4.1"
+ mkdirp "~0.5.0"
+ node-libs-browser "^2.0.0"
+ source-map "^0.5.3"
+ supports-color "^4.2.1"
+ tapable "^0.2.7"
+ uglifyjs-webpack-plugin "^0.4.6"
+ watchpack "^1.4.0"
+ webpack-sources "^1.0.1"
+ yargs "^8.0.2"
+
+websocket-driver@>=0.5.1:
+ version "0.6.5"
+ resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.6.5.tgz#5cb2556ceb85f4373c6d8238aa691c8454e13a36"
+ dependencies:
+ websocket-extensions ">=0.1.1"
+
+websocket-extensions@>=0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.1.tgz#76899499c184b6ef754377c2dbb0cd6cb55d29e7"
+
+which-module@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f"
+
+which-module@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a"
+
+which@1, which@^1.2.1, which@^1.2.9:
+ version "1.2.14"
+ resolved "https://registry.yarnpkg.com/which/-/which-1.2.14.tgz#9a87c4378f03e827cecaf1acdf56c736c01c14e5"
+ dependencies:
+ isexe "^2.0.0"
+
+wide-align@^1.1.0:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.2.tgz#571e0f1b0604636ebc0dfc21b0339bbe31341710"
+ dependencies:
+ string-width "^1.0.2"
+
+win-release@^1.0.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/win-release/-/win-release-1.1.1.tgz#5fa55e02be7ca934edfc12665632e849b72e5209"
+ dependencies:
+ semver "^5.0.1"
+
+window-size@0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d"
+
+wordwrap@0.0.2:
+ version "0.0.2"
+ resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f"
+
+wordwrap@~0.0.2:
+ version "0.0.3"
+ resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107"
+
+wrap-ansi@^2.0.0, wrap-ansi@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85"
+ dependencies:
+ string-width "^1.0.1"
+ strip-ansi "^3.0.1"
+
+wrap-ansi@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-3.0.1.tgz#288a04d87eda5c286e060dfe8f135ce8d007f8ba"
+ dependencies:
+ string-width "^2.1.1"
+ strip-ansi "^4.0.0"
+
+wrappy@1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
+
+ws@1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/ws/-/ws-1.1.1.tgz#082ddb6c641e85d4bb451f03d52f06eabdb1f018"
+ dependencies:
+ options ">=0.0.5"
+ ultron "1.0.x"
+
+ws@1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/ws/-/ws-1.1.2.tgz#8a244fa052401e08c9886cf44a85189e1fd4067f"
+ dependencies:
+ options ">=0.0.5"
+ ultron "1.0.x"
+
+ws@^1.0.1:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/ws/-/ws-1.1.4.tgz#57f40d036832e5f5055662a397c4de76ed66bf61"
+ dependencies:
+ options ">=0.0.5"
+ ultron "1.0.x"
+
+wtf-8@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/wtf-8/-/wtf-8-1.0.0.tgz#392d8ba2d0f1c34d1ee2d630f15d0efb68e1048a"
+
+xml-char-classes@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/xml-char-classes/-/xml-char-classes-1.0.0.tgz#64657848a20ffc5df583a42ad8a277b4512bbc4d"
+
+xml2js@0.4.17, xml2js@^0.4.17:
+ version "0.4.17"
+ resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.17.tgz#17be93eaae3f3b779359c795b419705a8817e868"
+ dependencies:
+ sax ">=0.6.0"
+ xmlbuilder "^4.1.0"
+
+xml2js@0.4.4:
+ version "0.4.4"
+ resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.4.tgz#3111010003008ae19240eba17497b57c729c555d"
+ dependencies:
+ sax "0.6.x"
+ xmlbuilder ">=1.0.0"
+
+xmlbuilder@>=1.0.0:
+ version "9.0.1"
+ resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.1.tgz#91cd70897755363eba57c12ddeeab4a341a61f65"
+
+xmlbuilder@^4.1.0:
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-4.2.1.tgz#aa58a3041a066f90eaa16c2f5389ff19f3f461a5"
+ dependencies:
+ lodash "^4.0.0"
+
+xmlhttprequest-ssl@1.5.3:
+ version "1.5.3"
+ resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.3.tgz#185a888c04eca46c3e4070d99f7b49de3528992d"
+
+"xtend@>=4.0.0 <4.1.0-0", xtend@^4.0.0, xtend@~4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af"
+
+xtend@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/xtend/-/xtend-2.2.0.tgz#eef6b1f198c1c8deafad8b1765a04dad4a01c5a9"
+
+xtend@~2.0.4:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/xtend/-/xtend-2.0.6.tgz#5ea657a6dba447069c2e59c58a1138cb0c5e6cee"
+ dependencies:
+ is-object "~0.1.2"
+ object-keys "~0.2.0"
+
+xtend@~2.1.2:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/xtend/-/xtend-2.1.2.tgz#6efecc2a4dad8e6962c4901b337ce7ba87b5d28b"
+ dependencies:
+ object-keys "~0.4.0"
+
+xtend@~3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/xtend/-/xtend-3.0.0.tgz#5cce7407baf642cba7becda568111c493f59665a"
+
+y18n@^3.2.1:
+ version "3.2.1"
+ resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41"
+
+yallist@^2.1.2:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52"
+
+yargs-parser@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-5.0.0.tgz#275ecf0d7ffe05c77e64e7c86e4cd94bf0e1228a"
+ dependencies:
+ camelcase "^3.0.0"
+
+yargs-parser@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-7.0.0.tgz#8d0ac42f16ea55debd332caf4c4038b3e3f5dfd9"
+ dependencies:
+ camelcase "^4.1.0"
+
+yargs@^7.0.0:
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/yargs/-/yargs-7.1.0.tgz#6ba318eb16961727f5d284f8ea003e8d6154d0c8"
+ dependencies:
+ camelcase "^3.0.0"
+ cliui "^3.2.0"
+ decamelize "^1.1.1"
+ get-caller-file "^1.0.1"
+ os-locale "^1.4.0"
+ read-pkg-up "^1.0.1"
+ require-directory "^2.1.1"
+ require-main-filename "^1.0.1"
+ set-blocking "^2.0.0"
+ string-width "^1.0.2"
+ which-module "^1.0.0"
+ y18n "^3.2.1"
+ yargs-parser "^5.0.0"
+
+yargs@^8.0.2:
+ version "8.0.2"
+ resolved "https://registry.yarnpkg.com/yargs/-/yargs-8.0.2.tgz#6299a9055b1cefc969ff7e79c1d918dceb22c360"
+ dependencies:
+ camelcase "^4.1.0"
+ cliui "^3.2.0"
+ decamelize "^1.1.1"
+ get-caller-file "^1.0.1"
+ os-locale "^2.0.0"
+ read-pkg-up "^2.0.0"
+ require-directory "^2.1.1"
+ require-main-filename "^1.0.1"
+ set-blocking "^2.0.0"
+ string-width "^2.0.0"
+ which-module "^2.0.0"
+ y18n "^3.2.1"
+ yargs-parser "^7.0.0"
+
+yargs@~3.10.0:
+ version "3.10.0"
+ resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1"
+ dependencies:
+ camelcase "^1.0.2"
+ cliui "^2.1.0"
+ decamelize "^1.0.0"
+ window-size "0.1.0"
+
+yeast@0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/yeast/-/yeast-0.1.2.tgz#008e06d8094320c372dbc2f8ed76a0ca6c8ac419"
+
+yn@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/yn/-/yn-2.0.0.tgz#e5adabc8acf408f6385fc76495684c88e6af689a"
+
+zip-stream@^1.1.0, zip-stream@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/zip-stream/-/zip-stream-1.2.0.tgz#a8bc45f4c1b49699c6b90198baacaacdbcd4ba04"
+ dependencies:
+ archiver-utils "^1.3.0"
+ compress-commons "^1.2.0"
+ lodash "^4.8.0"
+ readable-stream "^2.0.0"
+
+zone.js@0.8.12:
+ version "0.8.12"
+ resolved "https://registry.yarnpkg.com/zone.js/-/zone.js-0.8.12.tgz#86ff5053c98aec291a0bf4bbac501d694a05cfbb"