diff --git a/package-lock.json b/package-lock.json index e1d2616..c802c41 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2115,6 +2115,11 @@ "through": ">=2.2.7 <3" } }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + }, "accepts": { "version": "1.3.7", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", @@ -2131,11 +2136,32 @@ "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==", "dev": true }, + "acorn-node": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", + "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", + "requires": { + "acorn": "^7.0.0", + "acorn-walk": "^7.0.0", + "xtend": "^4.0.2" + }, + "dependencies": { + "acorn": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.3.1.tgz", + "integrity": "sha512-tLc0wSnatxAQHVHUapaHdz72pi9KUyHjq5KyHjGg9Y8Ifdc79pTh2XvI6I1/chZbnM7QtNKzh66ooDogPZSleA==" + } + } + }, + "acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==" + }, "adm-zip": { "version": "0.4.14", "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.14.tgz", - "integrity": "sha512-/9aQCnQHF+0IiCl0qhXoK7qs//SwYE7zX8lsr/DNk1BRAHYxeLZPL4pguwK29gUEqasYQjqPtEpDRSWEkdHn9g==", - "dev": true + "integrity": "sha512-/9aQCnQHF+0IiCl0qhXoK7qs//SwYE7zX8lsr/DNk1BRAHYxeLZPL4pguwK29gUEqasYQjqPtEpDRSWEkdHn9g==" }, "after": { "version": "0.8.2", @@ -2195,12 +2221,45 @@ "integrity": "sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ==", "dev": true }, + "align-text": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", + "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", + "requires": { + "kind-of": "^3.0.2", + "longest": "^1.0.1", + "repeat-string": "^1.5.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, "alphanum-sort": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=", "dev": true }, + "alter": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/alter/-/alter-0.2.0.tgz", + "integrity": "sha1-x1iICGF1cgNKrmJICvJrHU0cs80=", + "requires": { + "stable": "~0.1.3" + } + }, + "amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=" + }, "ansi-colors": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", @@ -2267,6 +2326,11 @@ "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", "dev": true }, + "archy": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/archy/-/archy-0.0.2.tgz", + "integrity": "sha1-kQ9Dv2YUH8M1VkWXq8GJ30Sz014=" + }, "arg": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", @@ -2422,6 +2486,16 @@ "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", "dev": true }, + "ast-traverse": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ast-traverse/-/ast-traverse-0.1.1.tgz", + "integrity": "sha1-ac8rg4bxnc2hux4F1o/jWdiJfeY=" + }, + "ast-types": { + "version": "0.13.3", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.3.tgz", + "integrity": "sha512-XTZ7xGML849LkQP86sWdQzfhwbt3YwIO6MqbX9mUNYY98VKaaVZP7YNNm70IpwecbkkxmfC5IYAzOQ/2p29zRA==" + }, "ast-types-flow": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", @@ -2476,6 +2550,34 @@ "postcss-value-parser": "^4.0.2" } }, + "autoprefixer-core": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/autoprefixer-core/-/autoprefixer-core-3.1.2.tgz", + "integrity": "sha1-reXOni2dcbt//DHWlvpeh66+tjQ=", + "requires": { + "caniuse-db": "^1.0.30000006", + "postcss": "~2.2.5" + }, + "dependencies": { + "postcss": { + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-2.2.6.tgz", + "integrity": "sha1-wENE4kSeRYa5Vfvkp093CA2EVx8=", + "requires": { + "js-base64": "~2.1.5", + "source-map": "~0.1.40" + } + }, + "source-map": { + "version": "0.1.43", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", + "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=", + "requires": { + "amdefine": ">=0.0.4" + } + } + } + }, "aws-sign2": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", @@ -2617,6 +2719,11 @@ } } }, + "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", @@ -2687,6 +2794,14 @@ "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==", "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=", + "requires": { + "inherits": "~2.0.0" + } + }, "blocking-proxy": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/blocking-proxy/-/blocking-proxy-1.0.1.tgz", @@ -2798,6 +2913,11 @@ "fill-range": "^7.0.1" } }, + "breakable": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/breakable/-/breakable-1.0.0.tgz", + "integrity": "sha1-eEp5eRWjjq0nutRWtVcstLuqeME=" + }, "brorand": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", @@ -2954,6 +3074,23 @@ "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", "dev": true }, + "builder-autoprefixer": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/builder-autoprefixer/-/builder-autoprefixer-1.0.4.tgz", + "integrity": "sha1-nNjDdqbXoXIAvYyjMbUfIwDhrHA=", + "requires": { + "autoprefixer-core": "^3.1.1" + } + }, + "builder-es6-module-to-cjs": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/builder-es6-module-to-cjs/-/builder-es6-module-to-cjs-1.1.0.tgz", + "integrity": "sha1-efMpfRjEe7iLQ5R1OPoccnQnHuM=", + "requires": { + "es6-module-jstransform": "^0.1.2", + "is-module": "^1.0.0" + } + }, "builtin-modules": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", @@ -3084,6 +3221,11 @@ "lodash.uniq": "^4.5.0" } }, + "caniuse-db": { + "version": "1.0.30001091", + "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30001091.tgz", + "integrity": "sha512-KqQjRGDTIvfxh9k3iuvV5NW5OtxxvTUeC6AQLgR5esBFlyVRaVuWHaOk/XDVeau4zs8amPzgi2BcR4ef27fGZA==" + }, "caniuse-lite": { "version": "1.0.30001066", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001066.tgz", @@ -3102,6 +3244,15 @@ "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=", + "requires": { + "align-text": "^0.1.3", + "lazy-cache": "^1.0.3" + } + }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -3112,6 +3263,16 @@ "supports-color": "^5.3.0" } }, + "chanel": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/chanel/-/chanel-2.2.0.tgz", + "integrity": "sha1-JlKVsouSqoIAX4Zd0VpIlMQ42Tw=", + "requires": { + "co": "*", + "generator-supported": "*", + "to-descriptor": "*" + } + }, "chardet": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", @@ -3297,6 +3458,11 @@ "shallow-clone": "^3.0.0" } }, + "co": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/co/-/co-3.1.0.tgz", + "integrity": "sha1-TqVOpaCJOBUxheFSEMaNkJK8G3g=" + }, "coa": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", @@ -3339,6 +3505,40 @@ } } }, + "cogent": { + "version": "git://github.com/timaschew/cogent.git#2246bd071392f5053a3a110024fd608a40a593ba", + "from": "git://github.com/timaschew/cogent.git#fix-redirects", + "requires": { + "debug": "*", + "generator-supported": "~0.0.1", + "netrc": "~0.1.3", + "proxy-agent": "^1.1.0", + "raw-body": "^1.1.2", + "statuses": "^1.0.2", + "write-to": "^1.0.0" + }, + "dependencies": { + "bytes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-1.0.0.tgz", + "integrity": "sha1-NWnt6Lo0MV+rmcPpLLBMciDeH6g=" + }, + "iconv-lite": { + "version": "0.4.8", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.8.tgz", + "integrity": "sha1-xgGadZXyzvynAuq2lKAQvNkpjSA=" + }, + "raw-body": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-1.3.4.tgz", + "integrity": "sha1-zMfd/Ea3KGHN1btDPIQLcLbyf1Q=", + "requires": { + "bytes": "1.0.0", + "iconv-lite": "0.4.8" + } + } + } + }, "collection-visit": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", @@ -3400,8 +3600,7 @@ "commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" }, "commondir": { "version": "1.0.1", @@ -3409,30 +3608,477 @@ "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", "dev": true }, + "commoner": { + "version": "0.10.8", + "resolved": "https://registry.npmjs.org/commoner/-/commoner-0.10.8.tgz", + "integrity": "sha1-NPw2cs0kOT6LtH5wyqApOBH08sU=", + "requires": { + "commander": "^2.5.0", + "detective": "^4.3.1", + "glob": "^5.0.15", + "graceful-fs": "^4.1.2", + "iconv-lite": "^0.4.5", + "mkdirp": "^0.5.0", + "private": "^0.1.6", + "q": "^1.1.2", + "recast": "^0.11.17" + }, + "dependencies": { + "ast-types": { + "version": "0.9.6", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.9.6.tgz", + "integrity": "sha1-ECyenpAF0+fjgpvwxPok7oYu6bk=" + }, + "esprima": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", + "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=" + }, + "glob": { + "version": "5.0.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", + "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", + "requires": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "recast": { + "version": "0.11.23", + "resolved": "https://registry.npmjs.org/recast/-/recast-0.11.23.tgz", + "integrity": "sha1-RR/TAEqx5N+bTktmN2sqIZEkYtM=", + "requires": { + "ast-types": "0.9.6", + "esprima": "~3.1.0", + "private": "~0.1.5", + "source-map": "~0.5.0" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + } + } + }, "compare-versions": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.6.0.tgz", "integrity": "sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA==", "dev": true }, + "component": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/component/-/component-1.1.0.tgz", + "integrity": "sha1-NgSaold5i37lcUKWHhjgdnkYyao=", + "requires": { + "co": "^3.0.0", + "commander": "^2.2.0", + "component-build": "^1.2.2", + "component-consoler": "^2.0.0", + "component-flatten": "^1.0.1", + "component-ls": "^2.1.0", + "component-outdated2": "^1.0.4", + "component-pin": "^1.0.4", + "component-remotes": "^1.2.0", + "component-resolver": "^1.3.0", + "component-search2": "^1.1.1", + "component-updater": "^1.0.4", + "component-watcher": "^1.0.1", + "debug": "*", + "mkdirp": "~0.3.5", + "rimraf": "^2.2.6", + "semver": "^2.2.1", + "superagent": "~0.17.0", + "tiny-lr-fork": "0.0.5", + "win-fork": "~1.1.1" + }, + "dependencies": { + "mkdirp": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.5.tgz", + "integrity": "sha1-3j5fiWHIjHh+4TaN+EmsRBPsqNc=" + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "requires": { + "glob": "^7.1.3" + } + }, + "semver": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-2.3.2.tgz", + "integrity": "sha1-uYSPJdbPNjMwc+ye+IVtQvEjPlI=" + } + } + }, "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-build": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/component-build/-/component-build-1.2.2.tgz", + "integrity": "sha1-1bwl0lIE35On2aN6LeAE4RmkpXw=", + "requires": { + "builder-autoprefixer": "^1.0.3", + "builder-es6-module-to-cjs": "^1.1.0", + "component-builder": "^1.1.12", + "debug": "*" + } + }, + "component-builder": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-builder/-/component-builder-1.2.1.tgz", + "integrity": "sha1-o5fBg3na9RH4Woy5TKDZIcHdsaQ=", + "requires": { + "chanel": "^2.0.0", + "co": "^3.1.0", + "component-flatten": "^1.0.1", + "component-manifest": "^1.0.0", + "component-require2": "^1.0.1", + "cp": "^0.1.1", + "debug": "*", + "generator-supported": "~0.0.1", + "graceful-fs": "^2.0.3", + "mkdirp": "^0.3.5", + "requires": "^1.0.0", + "syntax-error": "^1.1.1" + }, + "dependencies": { + "graceful-fs": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-2.0.3.tgz", + "integrity": "sha1-fNLNsiiko/Nule+mzBQt59GhNtA=" + }, + "mkdirp": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.5.tgz", + "integrity": "sha1-3j5fiWHIjHh+4TaN+EmsRBPsqNc=" + } + } + }, + "component-consoler": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/component-consoler/-/component-consoler-2.0.0.tgz", + "integrity": "sha1-Peq/BGwjm2EGNi7JaJQGNruhTCM=", + "requires": { + "debug": "*" + } + }, + "component-downloader": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/component-downloader/-/component-downloader-1.2.0.tgz", + "integrity": "sha1-b/Z/9xyEaoWKrjGog1X5vxrUO20=", + "requires": { + "chanel": "^2.0.1", + "co": "^3", + "component-consoler": "^2.0.0", + "component-remotes": "^1.1.1", + "debug": "*", + "decompress": "~0.2.0", + "generator-supported": "~0.0.1", + "graceful-fs": "^2.0.2", + "mkdirp": "~0.3.5", + "rimraf": "^2.2.6", + "semver": "^2.2.0", + "unglob": "~0.1.2", + "write-to": "^1.0.0" + }, + "dependencies": { + "graceful-fs": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-2.0.3.tgz", + "integrity": "sha1-fNLNsiiko/Nule+mzBQt59GhNtA=" + }, + "mkdirp": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.5.tgz", + "integrity": "sha1-3j5fiWHIjHh+4TaN+EmsRBPsqNc=" + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "requires": { + "glob": "^7.1.3" + } + }, + "semver": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-2.3.2.tgz", + "integrity": "sha1-uYSPJdbPNjMwc+ye+IVtQvEjPlI=" + } + } + }, "component-emitter": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", "dev": true }, + "component-flatten": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/component-flatten/-/component-flatten-1.0.1.tgz", + "integrity": "sha1-W0n0msRcuIxDAyuXozb1P4fNbIw=", + "requires": { + "semver": "^2.2.1" + }, + "dependencies": { + "semver": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-2.3.2.tgz", + "integrity": "sha1-uYSPJdbPNjMwc+ye+IVtQvEjPlI=" + } + } + }, "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 }, + "component-ls": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/component-ls/-/component-ls-2.1.0.tgz", + "integrity": "sha1-wR7ez4mDbd6JBkrQT+JK3YClERI=", + "requires": { + "archy": "~0.0.2" + } + }, + "component-manifest": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/component-manifest/-/component-manifest-1.0.0.tgz", + "integrity": "sha1-SNy7HqPGiHYifmra/PNxJbC81XI=", + "requires": { + "debug": "*", + "generator-supported": "~0.0.1", + "graceful-fs": "^2.0.1", + "unglob": "~0.1.1" + }, + "dependencies": { + "graceful-fs": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-2.0.3.tgz", + "integrity": "sha1-fNLNsiiko/Nule+mzBQt59GhNtA=" + } + } + }, + "component-outdated2": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/component-outdated2/-/component-outdated2-1.0.5.tgz", + "integrity": "sha1-IGbA9Cx1w18tS/3iv5/s4M5GPRQ=", + "requires": { + "component-consoler": "^2.0.0", + "component-flatten": "^1.0.1", + "component-remotes": "^1.1.5", + "generator-supported": "~0.0.1", + "semver": "^2.2.1" + }, + "dependencies": { + "semver": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-2.3.2.tgz", + "integrity": "sha1-uYSPJdbPNjMwc+ye+IVtQvEjPlI=" + } + } + }, + "component-pin": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/component-pin/-/component-pin-1.0.5.tgz", + "integrity": "sha1-v6lOAepCB18ufU17X3i2Yt24NY0=", + "requires": { + "component-consoler": "^2.0.0", + "component-flatten": "^1.0.1", + "component-remotes": "^1.1.5", + "generator-supported": "~0.0.1", + "semver": "^2.2.1" + }, + "dependencies": { + "semver": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-2.3.2.tgz", + "integrity": "sha1-uYSPJdbPNjMwc+ye+IVtQvEjPlI=" + } + } + }, + "component-remotes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/component-remotes/-/component-remotes-1.2.0.tgz", + "integrity": "sha1-PQeYpR5ziZxs5VnZN2Olb8eh2IM=", + "requires": { + "co": "^3", + "cogent": "git://github.com/timaschew/cogent.git#fix-redirects", + "component-consoler": "^2.0.0", + "component-validator": "^1.0.0", + "debug": "*", + "generator-supported": "~0.0.1", + "graceful-fs": "^2.0.2", + "semver": "^2.2.1" + }, + "dependencies": { + "graceful-fs": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-2.0.3.tgz", + "integrity": "sha1-fNLNsiiko/Nule+mzBQt59GhNtA=" + }, + "semver": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-2.3.2.tgz", + "integrity": "sha1-uYSPJdbPNjMwc+ye+IVtQvEjPlI=" + } + } + }, + "component-require2": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/component-require2/-/component-require2-1.1.1.tgz", + "integrity": "sha1-POrqGYc8HG74X1O48572koWvXMU=" + }, + "component-resolver": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-resolver/-/component-resolver-1.3.0.tgz", + "integrity": "sha1-79grBa9krRJ4W5h8AfCsQfAKaNw=", + "requires": { + "chanel": "^2.0.2", + "co": "^3", + "component-consoler": "^2.0.0", + "component-downloader": "^1.2.0", + "component-flatten": "^1.0.1", + "component-remotes": "^1.2.0", + "component-validator": "^1.1.1", + "debug": "*", + "generator-supported": "~0.0.1", + "graceful-fs": "^2.0.1", + "semver": "^2.2.1", + "unglob": "~0.1.2" + }, + "dependencies": { + "graceful-fs": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-2.0.3.tgz", + "integrity": "sha1-fNLNsiiko/Nule+mzBQt59GhNtA=" + }, + "semver": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-2.3.2.tgz", + "integrity": "sha1-uYSPJdbPNjMwc+ye+IVtQvEjPlI=" + } + } + }, + "component-search2": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/component-search2/-/component-search2-1.1.1.tgz", + "integrity": "sha1-kmeDygb2Hvdd7YW7ZVuq3i/J65E=", + "requires": { + "JSONStream": "~0.8.0", + "bytes": "~0.3.0", + "cogent": "~0.4.0", + "component-consoler": "^2.0.0", + "debug": "*", + "event-stream": "^3.1.1", + "generator-supported": "~0.0.1", + "stream-to-array": "^1.0.0" + }, + "dependencies": { + "JSONStream": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-0.8.4.tgz", + "integrity": "sha1-kWV9/m/4V0gwZhMrRhi2Lo9Ih70=", + "requires": { + "jsonparse": "0.0.5", + "through": ">=2.2.7 <3" + } + }, + "bytes": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-0.3.0.tgz", + "integrity": "sha1-eOLg4ox/nHuYjqiu4NtNX6mUGTU=" + }, + "cogent": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/cogent/-/cogent-0.4.3.tgz", + "integrity": "sha1-UAdE8R2D6cD8Q+9vlem5zHFaCFQ=", + "requires": { + "debug": "*", + "generator-supported": "~0.0.1", + "netrc": "~0.1.3", + "proxy-agent": "^1.1.0", + "raw-body": "^1.1.2", + "statuses": "^1.0.2", + "write-to": "^1.0.0" + } + }, + "iconv-lite": { + "version": "0.4.8", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.8.tgz", + "integrity": "sha1-xgGadZXyzvynAuq2lKAQvNkpjSA=" + }, + "jsonparse": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-0.0.5.tgz", + "integrity": "sha1-MwVCrT8KZUZlt3jz6y2an6UHrGQ=" + }, + "raw-body": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-1.3.4.tgz", + "integrity": "sha1-zMfd/Ea3KGHN1btDPIQLcLbyf1Q=", + "requires": { + "bytes": "1.0.0", + "iconv-lite": "0.4.8" + }, + "dependencies": { + "bytes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-1.0.0.tgz", + "integrity": "sha1-NWnt6Lo0MV+rmcPpLLBMciDeH6g=" + } + } + } + } + }, + "component-updater": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/component-updater/-/component-updater-1.0.5.tgz", + "integrity": "sha1-CHd/ZxzodeE+MHwdghfC6l8aSsQ=", + "requires": { + "component-consoler": "^2.0.0", + "component-flatten": "^1.0.1", + "component-remotes": "^1.1.5", + "generator-supported": "~0.0.1", + "semver": "^2.2.1" + }, + "dependencies": { + "semver": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-2.3.2.tgz", + "integrity": "sha1-uYSPJdbPNjMwc+ye+IVtQvEjPlI=" + } + } + }, + "component-validator": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/component-validator/-/component-validator-1.1.1.tgz", + "integrity": "sha1-+lD+t/WL7IndaXktE6Mn4lJgjl4=", + "requires": { + "component-consoler": "^2.0.0" + } + }, + "component-watcher": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/component-watcher/-/component-watcher-1.0.3.tgz", + "integrity": "sha1-wl6AF0sLQFVJXX7xJnmGJm2QxTU=", + "requires": { + "debug": "*", + "sane": "0" + } + }, "compressible": { "version": "2.0.18", "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", @@ -3573,6 +4219,11 @@ "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", "dev": true }, + "cookiejar": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-1.3.0.tgz", + "integrity": "sha1-3QCzVnkCHpnL1OhVua0EGRNHR2U=" + }, "copy-concurrently": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", @@ -3751,8 +4402,7 @@ "core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" }, "cosmiconfig": { "version": "5.2.1", @@ -3766,6 +4416,11 @@ "parse-json": "^4.0.0" } }, + "cp": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/cp/-/cp-0.1.1.tgz", + "integrity": "sha1-OUanbBpT/+DmhZPzQcEkszbB8G0=" + }, "create-ecdh": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", @@ -4150,6 +4805,11 @@ "assert-plus": "^1.0.0" } }, + "data-uri-to-buffer": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-0.0.4.tgz", + "integrity": "sha1-RuE6udqOMJdFyNAc5UchPr2y/j8=" + }, "date-format": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/date-format/-/date-format-3.0.0.tgz", @@ -4181,6 +4841,47 @@ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", "dev": true }, + "decompress": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/decompress/-/decompress-0.2.5.tgz", + "integrity": "sha1-0hMjPv4GbM2A2RTXk/GzDNmEuEc=", + "requires": { + "adm-zip": "^0.4.3", + "ext-name": "^1.0.0", + "get-stdin": "^0.1.0", + "mkdirp": "^0.3.5", + "nopt": "^2.2.0", + "rimraf": "^2.2.2", + "stream-combiner": "^0.0.4", + "tar": "^0.1.18", + "tempfile": "^0.1.2" + }, + "dependencies": { + "mkdirp": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.5.tgz", + "integrity": "sha1-3j5fiWHIjHh+4TaN+EmsRBPsqNc=" + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "requires": { + "glob": "^7.1.3" + } + }, + "tar": { + "version": "0.1.20", + "resolved": "https://registry.npmjs.org/tar/-/tar-0.1.20.tgz", + "integrity": "sha1-QpQLrltfIsdEg2mRJvnz8nRJyxM=", + "requires": { + "block-stream": "*", + "fstream": "~0.1.28", + "inherits": "2" + } + } + } + }, "deep-equal": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", @@ -4195,6 +4896,11 @@ "regexp.prototype.flags": "^1.2.0" } }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" + }, "default-gateway": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz", @@ -4281,6 +4987,85 @@ } } }, + "defined": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", + "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=" + }, + "defs": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/defs/-/defs-1.1.1.tgz", + "integrity": "sha1-siYJ8sehG6ej2xFoBcE5scr/qdI=", + "requires": { + "alter": "~0.2.0", + "ast-traverse": "~0.1.1", + "breakable": "~1.0.0", + "esprima-fb": "~15001.1001.0-dev-harmony-fb", + "simple-fmt": "~0.1.0", + "simple-is": "~0.2.0", + "stringmap": "~0.2.2", + "stringset": "~0.2.1", + "tryor": "~0.1.2", + "yargs": "~3.27.0" + }, + "dependencies": { + "camelcase": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=" + }, + "cliui": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", + "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", + "requires": { + "center-align": "^0.1.1", + "right-align": "^0.1.1", + "wordwrap": "0.0.2" + } + }, + "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=" + }, + "y18n": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=" + }, + "yargs": { + "version": "3.27.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.27.0.tgz", + "integrity": "sha1-ISBUaTFuk5Ex1Z8toMbX+YIh6kA=", + "requires": { + "camelcase": "^1.2.1", + "cliui": "^2.1.0", + "decamelize": "^1.0.0", + "os-locale": "^1.4.0", + "window-size": "^0.1.2", + "y18n": "^3.2.0" + } + } + } + }, + "degenerator": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-1.0.4.tgz", + "integrity": "sha1-/PSQo37OJmRk2cxDGrmMWBnO0JU=", + "requires": { + "ast-types": "0.x.x", + "escodegen": "1.x.x", + "esprima": "3.x.x" + }, + "dependencies": { + "esprima": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", + "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=" + } + } + }, "del": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", @@ -4374,6 +5159,27 @@ "integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==", "dev": true }, + "detective": { + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/detective/-/detective-4.7.1.tgz", + "integrity": "sha512-H6PmeeUcZloWtdt4DAkFyzFL94arpHr3NOwwmVILFiy+9Qd4JTxxXrzfyGk/lmct2qVGBwTSwSXagqu2BxmWig==", + "requires": { + "acorn": "^5.2.1", + "defined": "^1.0.0" + }, + "dependencies": { + "acorn": { + "version": "5.7.4", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz", + "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==" + } + } + }, + "dethroy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/dethroy/-/dethroy-1.0.2.tgz", + "integrity": "sha1-yCADMXaT3LzaP3UrAYLjvxbdRCE=" + }, "dezalgo": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.3.tgz", @@ -4510,6 +5316,11 @@ "is-obj": "^2.0.0" } }, + "duplexer": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", + "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=" + }, "duplexify": { "version": "3.7.1", "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", @@ -4567,6 +5378,11 @@ } } }, + "emitter-component": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/emitter-component/-/emitter-component-1.0.0.tgz", + "integrity": "sha1-8E3Rj8PcPpp0y8DzELCIZm5MAW8=" + }, "emoji-regex": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", @@ -4751,6 +5567,22 @@ "is-symbol": "^1.0.2" } }, + "es6-module-jstransform": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/es6-module-jstransform/-/es6-module-jstransform-0.1.4.tgz", + "integrity": "sha1-OtHj6qt0UY9a8jwQFPGCjF6WfAI=", + "requires": { + "esprima-fb": "~3001.1.0-dev-harmony-fb", + "jstransform": "~3.0.0" + }, + "dependencies": { + "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=" + } + } + }, "es6-promise": { "version": "4.2.8", "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", @@ -4777,6 +5609,26 @@ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, + "escodegen": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", + "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", + "requires": { + "esprima": "^4.0.1", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "optional": true + } + } + }, "eslint-scope": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", @@ -4790,8 +5642,7 @@ "esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" }, "esrecurse": { "version": "4.2.1", @@ -4805,14 +5656,12 @@ "estraverse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" }, "esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" }, "etag": { "version": "1.8.1", @@ -4820,6 +5669,31 @@ "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", "dev": true }, + "event-stream": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.5.tgz", + "integrity": "sha512-vyibDcu5JL20Me1fP734QBH/kenBGLZap2n0+XXM7mvuUPzJ20Ydqj1aKcIeMdri1p+PU+4yAKugjN8KCVst+g==", + "requires": { + "duplexer": "^0.1.1", + "from": "^0.1.7", + "map-stream": "0.0.7", + "pause-stream": "^0.0.11", + "split": "^1.0.1", + "stream-combiner": "^0.2.2", + "through": "^2.3.8" + }, + "dependencies": { + "stream-combiner": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.2.2.tgz", + "integrity": "sha1-rsjLrBd7Vrb0+kec7YwZEs7lKFg=", + "requires": { + "duplexer": "~0.1.1", + "through": "~2.3.4" + } + } + } + }, "eventemitter3": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", @@ -4989,11 +5863,27 @@ } } }, + "ext-list": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/ext-list/-/ext-list-0.2.0.tgz", + "integrity": "sha1-NhTV8pn0pZKolinn3oJfF3TRmr0=", + "requires": { + "got": "^0.2.0" + } + }, + "ext-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ext-name/-/ext-name-1.0.1.tgz", + "integrity": "sha1-GCgzVtxAo5NFXFRGDwWZzpfTDgw=", + "requires": { + "ext-list": "^0.2.0", + "underscore.string": "~2.3.3" + } + }, "extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" }, "extend-shallow": { "version": "3.0.2", @@ -5110,6 +6000,11 @@ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", "dev": true }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" + }, "fastparse": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz", @@ -5151,11 +6046,9 @@ } }, "file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "dev": true, - "optional": true + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-0.0.2.tgz", + "integrity": "sha1-N83RtbkFQEs/BeGyNkW+aU/3D4I=" }, "fileset": { "version": "2.0.3", @@ -5362,6 +6255,11 @@ "mime-types": "^2.1.12" } }, + "formidable": { + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.0.14.tgz", + "integrity": "sha1-Kz9MQRy7X91pXESEPiojUUpDIxo=" + }, "forwarded": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", @@ -5383,6 +6281,11 @@ "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", "dev": true }, + "from": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", + "integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=" + }, "from2": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", @@ -5437,12 +6340,78 @@ "dev": true, "optional": true }, + "fstream": { + "version": "0.1.31", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-0.1.31.tgz", + "integrity": "sha1-czfwWPu7vvqMn1YaKMqwhJICyYg=", + "requires": { + "graceful-fs": "~3.0.2", + "inherits": "~2.0.0", + "mkdirp": "0.5", + "rimraf": "2" + }, + "dependencies": { + "graceful-fs": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.12.tgz", + "integrity": "sha512-J55gaCS4iTTJfTXIxSVw3EMQckcqkpdRv3IR7gu6sq0+tbC363Zx6KH/SEwXASK9JRbhyZmVjJEVJIOxYsB3Qg==", + "requires": { + "natives": "^1.1.3" + } + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "ftp": { + "version": "0.3.10", + "resolved": "https://registry.npmjs.org/ftp/-/ftp-0.3.10.tgz", + "integrity": "sha1-kZfYYa2BQvPmPVqDv+TFn3MwiF0=", + "requires": { + "readable-stream": "1.1.x", + "xregexp": "2.0.0" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + } + } + }, "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "dev": true }, + "generator-supported": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/generator-supported/-/generator-supported-0.0.1.tgz", + "integrity": "sha1-kivSIBpsONj6y4FdWT2KA8iYwpk=" + }, "genfun": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/genfun/-/genfun-5.0.0.tgz", @@ -5459,6 +6428,11 @@ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" }, + "get-stdin": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-0.1.0.tgz", + "integrity": "sha1-WZivJKr8gC0VyCxoVlfuuLENSpE=" + }, "get-stream": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", @@ -5468,6 +6442,34 @@ "pump": "^3.0.0" } }, + "get-uri": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-0.1.4.tgz", + "integrity": "sha1-NfinlUwSn7Ey/y3fXtgaV8uKnlQ=", + "requires": { + "data-uri-to-buffer": "0", + "debug": "2", + "extend": "3", + "file-uri-to-path": "0", + "ftp": "~0.3.5", + "readable-stream": "2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, "get-value": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", @@ -5487,7 +6489,6 @@ "version": "7.1.6", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -5545,11 +6546,25 @@ } } }, + "got": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/got/-/got-0.2.0.tgz", + "integrity": "sha1-0Awkiyn9zK6pQN+coJlev/MbUaU=", + "requires": { + "object-assign": "^0.3.0" + }, + "dependencies": { + "object-assign": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-0.3.1.tgz", + "integrity": "sha1-Bg4qKifXwNd+x3t48Rqkf9iACNI=" + } + } + }, "graceful-fs": { "version": "4.2.4", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==" }, "handle-thing": { "version": "2.0.1", @@ -5919,7 +6934,6 @@ "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, "requires": { "safer-buffer": ">= 2.1.2 < 3" } @@ -6191,11 +7205,15 @@ "loose-envify": "^1.0.0" } }, + "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=" + }, "ip": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", - "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", - "dev": true + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=" }, "ip-regex": { "version": "2.1.0", @@ -6259,8 +7277,7 @@ "is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" }, "is-callable": { "version": "1.1.5", @@ -6372,6 +7389,11 @@ "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", "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=" + }, "is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -6486,8 +7508,7 @@ "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" }, "isbinaryfile": { "version": "4.0.6", @@ -6738,6 +7759,11 @@ } } }, + "js-base64": { + "version": "2.1.9", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.1.9.tgz", + "integrity": "sha1-8OgK4DmkvWVLXygfyT8EqRSn/M4=" + }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -6829,6 +7855,31 @@ "verror": "1.10.0" } }, + "jstransform": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/jstransform/-/jstransform-3.0.0.tgz", + "integrity": "sha1-olkats7o2XvzvoMNv6IxO4fNZAs=", + "requires": { + "base62": "0.1.1", + "esprima-fb": "~3001.1.0-dev-harmony-fb", + "source-map": "0.1.31" + }, + "dependencies": { + "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=" + }, + "source-map": { + "version": "0.1.31", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.31.tgz", + "integrity": "sha1-n3BNDWnZ4TioG63267T94z0VHGE=", + "requires": { + "amdefine": ">=0.0.4" + } + } + } + }, "jszip": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.4.0.tgz", @@ -7120,6 +8171,19 @@ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true }, + "lazy-cache": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=" + }, + "lcid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "requires": { + "invert-kv": "^1.0.0" + } + }, "less": { "version": "3.11.1", "resolved": "https://registry.npmjs.org/less/-/less-3.11.1.tgz", @@ -7195,6 +8259,15 @@ "leven": "^3.1.0" } }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, "license-webpack-plugin": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-2.1.4.tgz", @@ -7292,6 +8365,11 @@ "integrity": "sha512-bsU7+gc9AJ2SqpzxwU3+1fedl8zAntbtC5XYlt3s2j1hJcn2PsXSmgN8TaLG/J1/2mod4+cE/3vNL70/c1RNCA==", "dev": true }, + "longest": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", + "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=" + }, "loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", @@ -7413,6 +8491,14 @@ } } }, + "makeerror": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", + "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=", + "requires": { + "tmpl": "1.0.x" + } + }, "mamacro": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/mamacro/-/mamacro-0.0.3.tgz", @@ -7425,6 +8511,11 @@ "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", "dev": true }, + "map-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.0.7.tgz", + "integrity": "sha1-ih8HiW2CsQkmvTdEokIACfiJdKg=" + }, "map-visit": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", @@ -7823,7 +8914,6 @@ "version": "0.5.5", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, "requires": { "minimist": "^1.2.5" } @@ -7911,6 +9001,11 @@ "to-regex": "^3.0.1" } }, + "natives": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/natives/-/natives-1.1.6.tgz", + "integrity": "sha512-6+TDFewD4yxY14ptjKaS63GVdtKiES1pTPyxn9Jb0rBqPMZ7VcCiooEhPNsr+mqHtMGxa/5c/HhcC4uPEUw/nA==" + }, "negotiator": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", @@ -7923,6 +9018,16 @@ "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==", "dev": true }, + "netmask": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/netmask/-/netmask-1.0.6.tgz", + "integrity": "sha1-ICl+idhvb2QA8lDZ9Pa0wZRfzTU=" + }, + "netrc": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/netrc/-/netrc-0.1.4.tgz", + "integrity": "sha1-a+lPysqNd63gqWcNxGCRTJRHJEQ=" + }, "nice-try": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", @@ -7991,6 +9096,32 @@ "integrity": "sha512-ZQmnWS7adi61A9JsllJ2gdj2PauElcjnOwTp2O011iGzoakTxUsDGSe+6vD7wXbKdqhSFymC0OSx35aAMhrSdw==", "dev": true }, + "nopt": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-2.2.1.tgz", + "integrity": "sha1-KqCbfRdoSHs7ianFqlIzW/8Lrqc=", + "requires": { + "abbrev": "1" + } + }, + "noptify": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/noptify/-/noptify-0.0.3.tgz", + "integrity": "sha1-WPZUpz2XU98MUdlobckhBKZ/S7s=", + "requires": { + "nopt": "~2.0.0" + }, + "dependencies": { + "nopt": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-2.0.0.tgz", + "integrity": "sha1-ynQW8gpeP5w7hhgPlilfo9C1Lg0=", + "requires": { + "abbrev": "1" + } + } + } + }, "normalize-package-data": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", @@ -8351,6 +9482,19 @@ } } }, + "optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + } + }, "ora": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/ora/-/ora-4.0.3.tgz", @@ -8455,6 +9599,14 @@ "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", "dev": true }, + "os-locale": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", + "requires": { + "lcid": "^1.0.0" + } + }, "os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", @@ -8519,6 +9671,64 @@ "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", "dev": true }, + "pac-proxy-agent": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-0.2.0.tgz", + "integrity": "sha1-rZApCdkvT+fMLl9Z9b9QYbz6cbI=", + "requires": { + "agent-base": "~1.0.1", + "debug": "2", + "extend": "~1.2.1", + "get-uri": "~0.1.0", + "pac-resolver": "~1.2.1", + "proxy-agent": "1", + "stream-to-array": "~1.0.0" + }, + "dependencies": { + "agent-base": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-1.0.2.tgz", + "integrity": "sha1-aJDT+yFwBLYrcPiSjg+uX4lSpwY=" + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "extend": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/extend/-/extend-1.2.1.tgz", + "integrity": "sha1-oPX9bPyDpf5J72mNYOyKYk3UV2w=" + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "pac-resolver": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-1.2.6.tgz", + "integrity": "sha1-7QOvDFtZM1Bb3T8H91F1Rm1efPs=", + "requires": { + "co": "~3.0.6", + "degenerator": "~1.0.0", + "netmask": "~1.0.4", + "regenerator": "~0.8.13", + "thunkify": "~2.1.1" + }, + "dependencies": { + "co": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/co/-/co-3.0.6.tgz", + "integrity": "sha1-FEXyJsXrlWE45oyawwFn6n0ua9o=" + } + } + }, "pacote": { "version": "9.5.12", "resolved": "https://registry.npmjs.org/pacote/-/pacote-9.5.12.tgz", @@ -8824,6 +10034,14 @@ } } }, + "pause-stream": { + "version": "0.0.11", + "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", + "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=", + "requires": { + "through": "~2.3" + } + }, "pbkdf2": { "version": "3.0.17", "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz", @@ -9585,6 +10803,11 @@ "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==", "dev": true }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" + }, "prepend-http": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", @@ -9594,8 +10817,7 @@ "private": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", - "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", - "dev": true + "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==" }, "process": { "version": "0.11.10", @@ -9606,8 +10828,7 @@ "process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" }, "promise": { "version": "7.3.1", @@ -10019,6 +11240,94 @@ "ipaddr.js": "1.9.1" } }, + "proxy-agent": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-1.1.1.tgz", + "integrity": "sha1-/LHu9eWJZcmV+TjwKdcp/IGFi5U=", + "requires": { + "http-proxy-agent": "0", + "https-proxy-agent": "0", + "lru-cache": "~2.5.0", + "pac-proxy-agent": "0", + "socks-proxy-agent": "1" + }, + "dependencies": { + "agent-base": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-1.0.2.tgz", + "integrity": "sha1-aJDT+yFwBLYrcPiSjg+uX4lSpwY=" + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "http-proxy-agent": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-0.2.7.tgz", + "integrity": "sha1-4X/aZfCQLZUs55IeYsf/iGJlWl4=", + "requires": { + "agent-base": "~1.0.1", + "debug": "2", + "extend": "3" + } + }, + "https-proxy-agent": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-0.3.6.tgz", + "integrity": "sha1-cT+jjl01P1DrFKNC/r4pAz7RYZs=", + "requires": { + "agent-base": "~1.0.1", + "debug": "2", + "extend": "3" + } + }, + "lru-cache": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.5.2.tgz", + "integrity": "sha1-H92tk4quEmPOE4aAvhs/WRwKtBw=" + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "smart-buffer": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-1.1.15.tgz", + "integrity": "sha1-fxFLW2X6s+KjWqd1uxLw0cZJvxY=" + }, + "socks": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/socks/-/socks-1.1.10.tgz", + "integrity": "sha1-W4t/x8jzQcU+0FbpKbe/Tei6e1o=", + "requires": { + "ip": "^1.1.4", + "smart-buffer": "^1.0.13" + } + }, + "socks-proxy-agent": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-1.0.2.tgz", + "integrity": "sha1-Z+BrRH/lY3QX/eVzPL/f7J/+EX8=", + "requires": { + "agent-base": "~1.0.1", + "extend": "~1.2.1", + "socks": "~1.1.5" + }, + "dependencies": { + "extend": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/extend/-/extend-1.2.1.tgz", + "integrity": "sha1-oPX9bPyDpf5J72mNYOyKYk3UV2w=" + } + } + } + } + }, "prr": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", @@ -10095,8 +11404,7 @@ "q": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", - "dev": true + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=" }, "qjobs": { "version": "1.2.0", @@ -10260,7 +11568,6 @@ "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -10292,6 +11599,39 @@ "picomatch": "^2.2.1" } }, + "recast": { + "version": "0.10.33", + "resolved": "https://registry.npmjs.org/recast/-/recast-0.10.33.tgz", + "integrity": "sha1-lCgI96oBbx+nFCxGHX5XBKqo1pc=", + "requires": { + "ast-types": "0.8.12", + "esprima-fb": "~15001.1001.0-dev-harmony-fb", + "private": "~0.1.5", + "source-map": "~0.5.0" + }, + "dependencies": { + "ast-types": { + "version": "0.8.12", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.8.12.tgz", + "integrity": "sha1-oNkOQ1G7iHcWyD/WN+v4GK9K38w=" + }, + "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=" + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + } + } + }, + "reduce-component": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/reduce-component/-/reduce-component-1.0.1.tgz", + "integrity": "sha1-4Mk1QsV0UhvqE98PlIjtgqt3xdo=" + }, "reflect-metadata": { "version": "0.1.13", "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", @@ -10313,6 +11653,32 @@ "regenerate": "^1.4.0" } }, + "regenerator": { + "version": "0.8.46", + "resolved": "https://registry.npmjs.org/regenerator/-/regenerator-0.8.46.tgz", + "integrity": "sha1-FUwydoY2HtUsrWmyVF78U6PQdpY=", + "requires": { + "commoner": "~0.10.3", + "defs": "~1.1.0", + "esprima-fb": "~15001.1001.0-dev-harmony-fb", + "private": "~0.1.5", + "recast": "0.10.33", + "regenerator-runtime": "~0.9.5", + "through": "~2.3.8" + }, + "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=" + }, + "regenerator-runtime": { + "version": "0.9.6", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.9.6.tgz", + "integrity": "sha1-0z65XQ0gAaS+OWWXB8UbDLcc4Ck=" + } + } + }, "regenerator-runtime": { "version": "0.13.5", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz", @@ -10401,8 +11767,7 @@ "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 + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" }, "request": { "version": "2.88.2", @@ -10442,6 +11807,11 @@ "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" }, + "requires": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/requires/-/requires-1.0.2.tgz", + "integrity": "sha1-djBOghNFYi/j+sCwcRoeTygo8Po=" + }, "requires-port": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", @@ -10517,6 +11887,14 @@ "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=", "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=", + "requires": { + "align-text": "^0.1.1" + } + }, "rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", @@ -10585,8 +11963,33 @@ "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "sane": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/sane/-/sane-0.8.1.tgz", + "integrity": "sha1-JDpLIECBvlWTwKIrC7sRVzUS/Mc=", + "requires": { + "minimatch": "~0.2.14", + "walker": "~1.0.5", + "watch": "~0.10.0" + }, + "dependencies": { + "lru-cache": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz", + "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=" + }, + "minimatch": { + "version": "0.2.14", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz", + "integrity": "sha1-x054BXT2PG+aCQ6Q775u9TpqdWo=", + "requires": { + "lru-cache": "2", + "sigmund": "~1.0.0" + } + } + } }, "sass": { "version": "1.26.3", @@ -10965,12 +12368,27 @@ "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", "dev": true }, + "sigmund": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", + "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=" + }, "signal-exit": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", "dev": true }, + "simple-fmt": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/simple-fmt/-/simple-fmt-0.1.0.tgz", + "integrity": "sha1-GRv1ZqWeZTBILLJatTtKjchcOms=" + }, + "simple-is": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/simple-is/-/simple-is-0.2.0.tgz", + "integrity": "sha1-Krt1qt453rXMgVzhDmGRFkhQuvA=" + }, "simple-swizzle": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", @@ -11490,6 +12908,14 @@ "chalk": "^2.0.1" } }, + "split": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", + "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", + "requires": { + "through": "2" + } + }, "split-string": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", @@ -11534,8 +12960,7 @@ "stable": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", - "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", - "dev": true + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==" }, "static-extend": { "version": "0.1.2", @@ -11561,8 +12986,7 @@ "statuses": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", - "dev": true + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" }, "stream-browserify": { "version": "2.0.2", @@ -11574,6 +12998,14 @@ "readable-stream": "^2.0.2" } }, + "stream-combiner": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", + "integrity": "sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ=", + "requires": { + "duplexer": "~0.1.1" + } + }, "stream-each": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", @@ -11603,6 +13035,11 @@ "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", "dev": true }, + "stream-to-array": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stream-to-array/-/stream-to-array-1.0.0.tgz", + "integrity": "sha1-lBZrsp8+ok8ILS+M0+uyzA1uyiw=" + }, "streamroller": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-2.2.4.tgz", @@ -11713,11 +13150,20 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, "requires": { "safe-buffer": "~5.1.0" } }, + "stringmap": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/stringmap/-/stringmap-0.2.2.tgz", + "integrity": "sha1-VWwTeyWPlCuHdvWy71gqoGnX0bE=" + }, + "stringset": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/stringset/-/stringset-0.2.1.tgz", + "integrity": "sha1-7yWcTjSTRDd/zRyRPdLoSMnAQrU=" + }, "strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", @@ -11867,6 +13313,49 @@ } } }, + "superagent": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/superagent/-/superagent-0.17.0.tgz", + "integrity": "sha1-qtzVD75ak+cZkRGNeb8HFNYlu6g=", + "requires": { + "cookiejar": "1.3.0", + "debug": "~0.7.2", + "emitter-component": "1.0.0", + "extend": "~1.2.1", + "formidable": "1.0.14", + "methods": "0.0.1", + "mime": "1.2.5", + "qs": "0.6.5", + "reduce-component": "1.0.1" + }, + "dependencies": { + "debug": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-0.7.4.tgz", + "integrity": "sha1-BuHqgILCyxTjmAbiLi9vdX+Srzk=" + }, + "extend": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/extend/-/extend-1.2.1.tgz", + "integrity": "sha1-oPX9bPyDpf5J72mNYOyKYk3UV2w=" + }, + "methods": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/methods/-/methods-0.0.1.tgz", + "integrity": "sha1-J3yQ+L7zlwlkWoNxxRw7bGSOBow=" + }, + "mime": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.2.5.tgz", + "integrity": "sha1-nu0HMCKov14WyFZsaGe4gyv7+hM=" + }, + "qs": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/qs/-/qs-0.6.5.tgz", + "integrity": "sha1-KUsmjksNQlD23eGbO4s0k13/FO8=" + } + } + }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -11902,6 +13391,14 @@ "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==", "dev": true }, + "syntax-error": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/syntax-error/-/syntax-error-1.4.0.tgz", + "integrity": "sha512-YPPlu67mdnHGTup2A8ff7BC2Pjq0e0Yp/IyTFN03zWO0RcK07uLcbi7C2KpGR2FvWbaB0+bfE27a+sBKebSo7w==", + "requires": { + "acorn-node": "^1.2.0" + } + }, "tapable": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", @@ -11936,6 +13433,21 @@ } } }, + "tempfile": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/tempfile/-/tempfile-0.1.3.tgz", + "integrity": "sha1-fWtxAEcznTn4RzJ6BW2t8YMQMBA=", + "requires": { + "uuid": "~1.4.0" + }, + "dependencies": { + "uuid": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-1.4.2.tgz", + "integrity": "sha1-RTAZ9oaWam34PNxSROfJkOzDMvw=" + } + } + }, "terser": { "version": "4.6.10", "resolved": "https://registry.npmjs.org/terser/-/terser-4.6.10.tgz", @@ -12043,8 +13555,7 @@ "through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" }, "through2": { "version": "2.0.5", @@ -12056,6 +13567,11 @@ "xtend": "~4.0.1" } }, + "thunkify": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/thunkify/-/thunkify-2.1.2.tgz", + "integrity": "sha1-+qDp0jDFGsyVyhOjYawFyn4EVT0=" + }, "thunky": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", @@ -12077,6 +13593,34 @@ "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=", "dev": true }, + "tiny-lr-fork": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/tiny-lr-fork/-/tiny-lr-fork-0.0.5.tgz", + "integrity": "sha1-Hpnh4qhGm3NquX2X7vqYxx927Qo=", + "requires": { + "debug": "~0.7.0", + "faye-websocket": "~0.4.3", + "noptify": "~0.0.3", + "qs": "~0.5.2" + }, + "dependencies": { + "debug": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-0.7.4.tgz", + "integrity": "sha1-BuHqgILCyxTjmAbiLi9vdX+Srzk=" + }, + "faye-websocket": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.4.4.tgz", + "integrity": "sha1-wUxbO/FNdBf/v9mQwKdJXNnzN7w=" + }, + "qs": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/qs/-/qs-0.5.6.tgz", + "integrity": "sha1-MbGtBYVnZRxSaSFQa5qHk5EaA4Q=" + } + } + }, "tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", @@ -12086,6 +13630,11 @@ "os-tmpdir": "~1.0.2" } }, + "tmpl": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz", + "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=" + }, "to-array": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", @@ -12098,6 +13647,11 @@ "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", "dev": true }, + "to-descriptor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/to-descriptor/-/to-descriptor-1.0.1.tgz", + "integrity": "sha1-oOZ4w068fS2uRk2DcrwhR52cK80=" + }, "to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", @@ -12166,6 +13720,11 @@ "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", "dev": true }, + "tryor": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/tryor/-/tryor-0.1.2.tgz", + "integrity": "sha1-gUXkynyv9ArN48z5Rui4u3W0Fys=" + }, "ts-node": { "version": "8.3.0", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.3.0.tgz", @@ -12243,6 +13802,14 @@ "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", "dev": true }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "requires": { + "prelude-ls": "~1.1.2" + } + }, "type-fest": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", @@ -12277,6 +13844,57 @@ "integrity": "sha512-+O8/qh/Qj8CgC6eYBVBykMrNtp5Gebn4dlGD/kKXVkJNDwyrAwSIqwz8CDf+tsAIWVycKcku6gIXJ0qwx/ZXaQ==", "dev": true }, + "underscore.string": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.3.3.tgz", + "integrity": "sha1-ccCL9rQosRM/N+ePo6Icgvcymw0=" + }, + "unglob": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/unglob/-/unglob-0.1.2.tgz", + "integrity": "sha1-8uwGKE5JGhx3YRp2CouOowAnLDg=", + "requires": { + "generator-supported": "~0.0.1", + "glob": "~3.2.8", + "minimatch": "~0.2.14" + }, + "dependencies": { + "glob": { + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/glob/-/glob-3.2.11.tgz", + "integrity": "sha1-Spc/Y1uRkPcV0QmH1cAP0oFevj0=", + "requires": { + "inherits": "2", + "minimatch": "0.3" + }, + "dependencies": { + "minimatch": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz", + "integrity": "sha1-J12O2qxPG7MyZHIInnlJyDlGmd0=", + "requires": { + "lru-cache": "2", + "sigmund": "~1.0.0" + } + } + } + }, + "lru-cache": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz", + "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=" + }, + "minimatch": { + "version": "0.2.14", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz", + "integrity": "sha1-x054BXT2PG+aCQ6Q775u9TpqdWo=", + "requires": { + "lru-cache": "2", + "sigmund": "~1.0.0" + } + } + } + }, "unicode-canonical-property-names-ecmascript": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", @@ -12502,8 +14120,7 @@ "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, "util-promisify": { "version": "2.1.0", @@ -12592,6 +14209,19 @@ "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=", "dev": true }, + "walker": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", + "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=", + "requires": { + "makeerror": "1.0.x" + } + }, + "watch": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/watch/-/watch-0.10.0.tgz", + "integrity": "sha1-d3mLLaD5kQ1ZXxrOWwwiWFIfIdw=" + }, "watchpack": { "version": "1.7.2", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.2.tgz", @@ -13288,6 +14918,26 @@ "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" }, + "win-fork": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/win-fork/-/win-fork-1.1.1.tgz", + "integrity": "sha1-j1jgZW/KAK3IyGoriePNLWotXl4=" + }, + "window-size": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.4.tgz", + "integrity": "sha1-+OGqHuWlPsW/FR/6CXQqatdpeHY=" + }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" + }, + "wordwrap": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", + "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=" + }, "worker-farm": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", @@ -13361,6 +15011,15 @@ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, + "write-to": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/write-to/-/write-to-1.1.1.tgz", + "integrity": "sha1-Xu+/aC0SjCqwwF9l3xA4c54GxqM=", + "requires": { + "dethroy": "1", + "mkdirp": "0" + } + }, "ws": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", @@ -13392,11 +15051,15 @@ "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=", "dev": true }, + "xregexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-2.0.0.tgz", + "integrity": "sha1-UqY+VsoLhKfzpfPWGHLxJq16WUM=" + }, "xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" }, "y18n": { "version": "4.0.0", diff --git a/package.json b/package.json index 598596f..c10a72f 100644 --- a/package.json +++ b/package.json @@ -23,6 +23,7 @@ "@ng-bootstrap/ng-bootstrap": "^6.0.0", "bootstrap": "^4.4.0", "chart.js": "^2.9.3", + "component": "^1.1.0", "rxjs": "~6.5.4", "tslib": "^1.10.0", "zone.js": "~0.10.2" diff --git a/src/app/app-routing.module.ts b/src/app/app-routing.module.ts index 909fbbc..4acfc7b 100644 --- a/src/app/app-routing.module.ts +++ b/src/app/app-routing.module.ts @@ -1,16 +1,17 @@ import { NgModule } from '@angular/core'; import { Routes, RouterModule } from '@angular/router'; - -import { UserstoryTableComponent } from './userstory-table/userstory-table.component'; -import { TaskTableComponent } from './task-table/task-table.component'; -import { SprintTableComponent } from './sprint-table/sprint-table.component'; -// import { DashboardComponent } from './dashboard/dashboard.component'; +import { DashboardComponent } from './components/dashboard/dashboard.component'; +import { UserstoryTableComponent } from './components/userstory-table/userstory-table.component'; +import { TaskTableComponent } from './components/task-table/task-table.component'; +import { SprintTableComponent } from './components/sprint-table/sprint-table.component'; +import {BacklogComponent} from './components/backlog-table/backlog.component'; const routes: Routes = [ { path: 'tasks', component: TaskTableComponent }, { path: 'userstories', component: UserstoryTableComponent }, + { path: 'dashboard', component: DashboardComponent }, { path: 'sprints', component: SprintTableComponent }, - // { path: 'dashboard', component: DashboardComponent }, + { path: 'backlog', component: BacklogComponent }, { path: '', redirectTo: '/tasks', pathMatch: 'full' }, ]; diff --git a/src/app/app.component.css b/src/app/app.component.css index e69de29..6812812 100644 --- a/src/app/app.component.css +++ b/src/app/app.component.css @@ -0,0 +1,22 @@ +.sidebar { + width: 150px; + position: relative; + float: left; + margin-top: 10px; + bottom: 0; + opacity: 95%; +} + +.nav a { + font-size: 1em; +} + +.nav a:hover:not(.active) { + font-size: 1.15em; + } + +.content { + position: relative; + float: right; + margin-top: 10px; +} diff --git a/src/app/app.component.html b/src/app/app.component.html index 2e44c1d..4345092 100644 --- a/src/app/app.component.html +++ b/src/app/app.component.html @@ -1,39 +1,80 @@ - -
-
- - +
+ + +
diff --git a/src/app/app.module.ts b/src/app/app.module.ts index df6ac7c..e11e331 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -7,14 +7,16 @@ import { AppRoutingModule } from './app-routing.module'; import { AppComponent } from './app.component'; import { BackendService } from './services/backend.service'; -import { TaskFormComponent } from './task-form/task-form.component'; -import { UserstoryFormComponent } from './userstory-form/userstory-form.component'; -import { SprintFormComponent } from './sprint-form/sprint-form.component'; +import { TaskFormComponent } from './components/task-form/task-form.component'; +import { UserstoryFormComponent } from './components/userstory-form/userstory-form.component'; +import { SprintFormComponent } from './components/sprint-form/sprint-form.component'; import { NgbModule } from '@ng-bootstrap/ng-bootstrap'; -import { UserstoryTableComponent } from './userstory-table/userstory-table.component'; -import { TaskTableComponent } from './task-table/task-table.component'; -import { SprintTableComponent } from './sprint-table/sprint-table.component'; -// import { DashboardComponent } from './dashboard/dashboard.component'; +import { UserstoryTableComponent } from './components/userstory-table/userstory-table.component'; +import { TaskTableComponent } from './components/task-table/task-table.component'; +import { SprintTableComponent } from './components/sprint-table/sprint-table.component'; +import { DashboardComponent } from './components/dashboard/dashboard.component'; +import { UserstoryInnerTableComponent } from './components/userstory-inner-table/userstory-inner-table.component'; +import { BacklogComponent } from './components/backlog-table/backlog.component'; @NgModule({ declarations: [ @@ -26,7 +28,9 @@ import { SprintTableComponent } from './sprint-table/sprint-table.component'; UserstoryTableComponent, SprintFormComponent, SprintTableComponent, - // DashboardComponent, + DashboardComponent, + UserstoryInnerTableComponent, + BacklogComponent ], imports: [ BrowserModule, diff --git a/src/app/task-table/task-table.component.css b/src/app/components/backlog-table/backlog.component.css similarity index 96% rename from src/app/task-table/task-table.component.css rename to src/app/components/backlog-table/backlog.component.css index 70f7a6e..a268ac9 100644 --- a/src/app/task-table/task-table.component.css +++ b/src/app/components/backlog-table/backlog.component.css @@ -1,3 +1,3 @@ th.sortable:hover { text-decoration: underline; -} +} \ No newline at end of file diff --git a/src/app/components/backlog-table/backlog.component.html b/src/app/components/backlog-table/backlog.component.html new file mode 100644 index 0000000..b0295e3 --- /dev/null +++ b/src/app/components/backlog-table/backlog.component.html @@ -0,0 +1,62 @@ +
+
+ +

Backlog

+
+
+
+
+ +
+
+
+
+

Backlog

+
+
+
+

{{story.title}}

+
Prio: {{story.priority}}
+

{{story.content}}

+
+ Category: {{story.categoryid || "N/A"}} + Status: {{story.statusid || "N/A"}} +
+
+ +
+
+
+
+
+
+ +
+ +

Sprint-Backlog - Aktueller Sprint: {{this.currentSprint.title}}

+
+
+
+

{{story.title}}

+
Prio: {{story.priority}}
+

{{story.content}}

+
+ Category: {{story.categoryid || "N/A"}} + Status: {{story.statusid || "N/A"}} +
+
+ +
+
+
+
+
+
+
+
diff --git a/src/app/components/backlog-table/backlog.component.ts b/src/app/components/backlog-table/backlog.component.ts new file mode 100644 index 0000000..f67c1fb --- /dev/null +++ b/src/app/components/backlog-table/backlog.component.ts @@ -0,0 +1,160 @@ +import { Component } from '@angular/core'; +import { + BackendService, + ScrumTask, + ScrumUserstory, + ScrumStatus, + ScrumCategory, + ScrumSprint, +} from '../../services/backend.service'; +import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; +import { TableComponentBase } from '../../services/table-component.base'; +import { getNumberForPriority } from '../../services/sorting.service'; +import { UserstoryFormComponent } from '../userstory-form/userstory-form.component'; +import { ActivatedRoute } from '@angular/router'; +import { SprintFormComponent } from '../sprint-form/sprint-form.component'; + + +@Component({ + selector: 'app-backlog', + templateUrl: './backlog.component.html', + styleUrls: ['./backlog.component.css'], +}) +export class BacklogComponent extends TableComponentBase< + ScrumUserstory +> { + public tasks: ScrumTask[] = []; + public filterPriority: string | null = null; + public status: ScrumStatus[] = []; + public categories: ScrumCategory[] = []; + public sprints: ScrumSprint[] = []; + + public backlog: ScrumUserstory[] = []; + public choosen: ScrumUserstory[] = []; + + constructor( + private backendService: BackendService, + private modalService: NgbModal, + private route: ActivatedRoute, + ) { + super(); + backendService.getSprints().subscribe((response) => { + if (response.status > 399) { + alert('Fehler'); + } else { + this.sprints.push(...response.body); + } + }); + backendService.getUserstories().subscribe((response) => { + if (response.status > 399) { + alert('Fehler'); + } else { + this.backlog = response.body.filter(u => u.sprintid == null); + this.choosen = response.body.filter(u => u.sprintid == this.currentSprint.id); + } + }); + backendService.getTasks().subscribe((response) => { + if (response.status > 399) { + alert('Fehler'); + } else { + this.tasks.push(...response.body); + } + }); + backendService.getAllStatus().subscribe((response) => { + if (response.status > 399) { + alert('Fehler'); + } else { + this.status.push(...response.body); + } + }); + backendService.getCategories().subscribe((response) => { + if (response.status > 399) { + alert('Fehler'); + } else { + this.categories.push(...response.body); + } + }); + } + + public deleteUserstory(userstory: ScrumUserstory) { + this.backendService.deleteUserstory(userstory).subscribe((response) => { + if (response.status > 399) { + alert('Fehler'); + } + }); + const index = this.items.indexOf(userstory); + if (index !== -1) { + this.items.splice(index, 1); + } + } + + public openUserstoryForm(editUserstory?: ScrumUserstory) { + const modalRef = this.modalService.open(UserstoryFormComponent, { + backdrop: 'static', + keyboard: true, + size: 'lg' + }); + if (editUserstory === null) { + modalRef.result.then((result) => { + this.items.push(result); + }); + } + modalRef.componentInstance.userstory = editUserstory; + } + + public getNumberOfTasks(userstory: ScrumUserstory) { + return this.tasks.filter((t) => t.userstoryid === userstory.id).length; + } + + getCategoryTitleById(id) { + var category = this.categories.find((x) => x.id === id); + if (!category) { + return 'N/A'; + } + return category.title; + } + + // Sprint-Backlog + + public addToSprintBacklog(userstory: ScrumUserstory) { + this.choosen.push(userstory); + const index = this.backlog.indexOf(userstory); + this.backlog.splice(index, 1); + userstory.sprintid = this.currentSprint.id; + this.backendService.putUserstory(userstory).subscribe((response) => { + if (response.status > 399) { + alert('Fehler'); + } + }); + } + + public deleteFromSprintBacklog(userstory: ScrumUserstory){ + const index = this.choosen.indexOf(userstory); + this.choosen.splice(index, 1); + this.backlog.push(userstory) + userstory.sprintid = null; + this.backendService.putUserstory(userstory).subscribe((response) => { + if (response.status > 399) { + alert('Fehler'); + } + }); + } + + public get currentSprint(): ScrumSprint { + const now = Date.now(); + return this.sprints.find(s => Date.parse(s.startDate) < now && Date.parse(s.endDate) > now); + } + + public openSprintForm(editSprint?: ScrumSprint) { + const modalRef = this.modalService.open(SprintFormComponent, { + backdrop: 'static', + keyboard: true, + }); + if (editSprint === null) { + modalRef.result.then(result => { + this.items.push(result); + }); + } + modalRef.componentInstance.sprint = editSprint; + } +} diff --git a/src/app/components/dashboard/dashboard.component.css b/src/app/components/dashboard/dashboard.component.css new file mode 100644 index 0000000..8b09ad4 --- /dev/null +++ b/src/app/components/dashboard/dashboard.component.css @@ -0,0 +1,7 @@ +.text-large { + font-size: 1.2rem; +} + +.text-very-large { + font-size: 2.4rem; +} diff --git a/src/app/components/dashboard/dashboard.component.html b/src/app/components/dashboard/dashboard.component.html new file mode 100644 index 0000000..66fd4e4 --- /dev/null +++ b/src/app/components/dashboard/dashboard.component.html @@ -0,0 +1,101 @@ +
+
+ +

Dashboard

+ +
+ +
+ + +

Alle Userstories

+ Lege einen Sprint an, um Userstories zu organisieren. +
+ + + +

Aktueller Sprint:

+

Sprint:

+

{{selectedSprint.title}}

+

{{toDateString(selectedSprint.startDate)}} - {{toDateString(selectedSprint.endDate)}}

+ + + + +

+ Verbleibende Tage: {{getRemainingDaysInSprint()}} +

+ +
+ +
+ +
+ +
+
+
+ + Userstories + +
+
+
+ Zum Sprint "{{selectedSprint.title}}" sind aktuell keine Userstories vorhanden. +
+ +
+
+
+
+
+ + {{status.title}} + +
+
+ + {{getNumberOfUserstoriesByStatus(status)}} + +
+
+
+
+ +
+
+
+ +
+
+
+ +
+ +
+
+
diff --git a/src/app/components/dashboard/dashboard.component.ts b/src/app/components/dashboard/dashboard.component.ts new file mode 100644 index 0000000..b47f895 --- /dev/null +++ b/src/app/components/dashboard/dashboard.component.ts @@ -0,0 +1,160 @@ +import {Component, OnChanges} from '@angular/core'; +import {forkJoin} from 'rxjs'; +import Chart from 'chart.js'; +import {BackendService, ScrumSprint, ScrumStatus, ScrumUserstory} from '../../services/backend.service'; + +@Component({ + selector: 'app-dashboard', + templateUrl: 'dashboard.component.html', + styleUrls: ['./dashboard.component.css'] +}) +export class DashboardComponent { + /** + * Returns the status that are used by at least one userstory. + */ + public get usedStatus(): ScrumStatus[] { + return this.status.filter(s => this.selectedSprintUserstories.find(us => us.statusid === s.id) !== undefined); + } + + public get selectedSprintUserstories(): ScrumUserstory[] { + if (this.selectedSprint === undefined) { + return this.userstories; + } + return this.userstories.filter(us => us.sprintid === this.selectedSprint.id); + } + + public get currentSprint(): ScrumSprint { + const now = Date.now(); + return this.sprints.find(s => Date.parse(s.startDate) < now && Date.parse(s.endDate) > now); + } + + private _selectedSprint: ScrumSprint; + public get selectedSprint(): ScrumSprint { + if (this._selectedSprint === undefined) { + if (this.currentSprint === undefined) { + return this.sprints[0]; + } + return this.currentSprint; + } + return this._selectedSprint; + } + + public set selectedSprint(value) { + this._selectedSprint = value; + this.createChart(); + } + + public status: ScrumStatus[] = []; + public userstories: ScrumUserstory[] = []; + public sprints: ScrumSprint[] = []; + + public chart: Chart; + + constructor(private backendService: BackendService) { + // download userstories, status and sprints and update + // the chart whenever a new response is there + forkJoin([backendService.getUserstories(), backendService.getAllStatus(), backendService.getSprints()]) + .subscribe(results => { + const [userstoryResponse, statusResponse, sprintResponse] = results; + if (userstoryResponse.status > 399 || statusResponse.status > 399 || sprintResponse.status > 399) { + alert('Fehler'); + } else { + this.userstories.push(...userstoryResponse.body); + this.status.push(...statusResponse.body); + this.sprints.push(...sprintResponse.body); + this.createChart(); + } + }); + } + + /** + * Returns the date in the following format: 1.7.2020 + */ + public toDateString(isoFormatString) { + const date = new Date(isoFormatString); + return `${date.getDate()}.${date.getMonth() + 1}.${date.getFullYear()}`; + } + + private createChart() { + // @ts-ignore + const context = document.getElementById('done-stories-chart').getContext('2d'); + + if (this.usedStatus.length === 0) { + this.chart.destroy(); + } + + else { + this.chart = new Chart(context, { + type: 'pie', + data: { + labels: this.usedStatus.map(s => s.title), + datasets: [{ + data: this.usedStatus.map(s => this.getNumberOfUserstoriesByStatus(s)), + backgroundColor: this.getBackgroundColors(), + options: { + legend: { + display: true, + position: 'right', + labels: { + fontColor: 'rgba(255, 255, 255, 0.8)' + } + } + } + }] + } + }); + this.chart.update(); + this.chart.render(); + } + } + + private getBackgroundColors(): string[] { + const baseColors = [ + 'rgb(255, 153, 102)', + 'rgb(255, 102, 102)', + 'rgb(153, 204, 255)', + 'rgb(102, 153, 102)', + 'rgb(204, 204, 153)', + 'rgb(153, 102, 204)', + 'rgb(204, 102, 102)', + 'rgb(255, 204, 153)', + 'rgb(153, 102, 255)', + 'rgb(204, 204, 204)', + 'rgb(102, 255, 204)', + 'rgb(102, 153, 255)', + 'rgb(153, 102, 153)', + 'rgb(204, 204, 255)', + ]; + const colors = []; + while (colors.length < this.usedStatus.length) { + colors.push(...baseColors); + } + return colors; + } + + public getNumberOfUserstoriesByStatus(status: ScrumStatus): number { + return this.selectedSprintUserstories.filter(us => us.statusid === status.id).length; + } + + public getRemainingDaysInSprint(): number { + if (this.selectedSprint === undefined) { + return undefined; + } + return Math.floor((Date.parse(this.selectedSprint.endDate) - Date.now()) / 86400000); + } + + /** + * Returns the "urgency" of the current sprint (ie what percentage of the sprint is remaining) + * as an integer from 0 (most urgent) to 2 (least urgent). + */ + public getSprintUrgency(): number { + const now = Date.now(); + const sprint = this.selectedSprint; + if (sprint === undefined) { + return undefined; + } + const deltaFromNow = Date.parse(sprint.endDate) - now; + const deltaFromStart = Date.parse(sprint.endDate) - Date.parse(sprint.startDate); + return Math.floor(3 * deltaFromNow / deltaFromStart); + } +} diff --git a/src/app/sprint-form/sprint-form.component.css b/src/app/components/sprint-form/sprint-form.component.css similarity index 100% rename from src/app/sprint-form/sprint-form.component.css rename to src/app/components/sprint-form/sprint-form.component.css diff --git a/src/app/components/sprint-form/sprint-form.component.html b/src/app/components/sprint-form/sprint-form.component.html new file mode 100644 index 0000000..fcb9fa8 --- /dev/null +++ b/src/app/components/sprint-form/sprint-form.component.html @@ -0,0 +1,35 @@ + + +
+
+
+
+ +
+

Neuen Sprint anlegen

+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+
+
+
\ No newline at end of file diff --git a/src/app/sprint-form/sprint-form.component.ts b/src/app/components/sprint-form/sprint-form.component.ts similarity index 51% rename from src/app/sprint-form/sprint-form.component.ts rename to src/app/components/sprint-form/sprint-form.component.ts index b6360a2..bac0d22 100644 --- a/src/app/sprint-form/sprint-form.component.ts +++ b/src/app/components/sprint-form/sprint-form.component.ts @@ -1,60 +1,60 @@ -import { Component, OnInit, Input } from '@angular/core'; -import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; -import { - BackendService, - ScrumTask, - Priority, - ScrumStatus, - ScrumCategory, - ScrumUser, - ScrumProject, - ScrumUserstory, - ScrumSprint -} from '../services/backend.service'; -import { Observable } from 'rxjs'; -import { HttpResponse } from '@angular/common/http'; - -@Component({ - selector: 'app-task-form', - templateUrl: './sprint-form.component.html', - styleUrls: [ './sprint-form.component.css' ] -}) -export class SprintFormComponent implements OnInit { - @Input() public sprint: ScrumSprint; - public editing: Boolean; - public sprintid: string; - - constructor(private backendService: BackendService, private activeModalService: NgbActiveModal) {} - - ngOnInit(): void { - if (this.sprint === null || this.sprint === undefined) { - this.sprint = { title: '', startDate: new Date(), endDate: new Date()}; //project id missing... - this.editing = false; - } else { - this.editing = true; - } - document.getElementById('titleField').focus(); - } - - onSubmit() { - if (this.editing) { - this.backendService.putSprint(this.sprint).subscribe((response) => { - if (response.status > 399) { - alert('Fehler'); - } - }); - } else { - this.backendService.postSprint(this.sprint).subscribe((response) => { - console.log('Sprint gespeichert!'); - if (response.status > 399) { - alert('Fehler'); - } - }); - } - this.activeModalService.close(this.sprint); - } - - onClose() { - this.activeModalService.dismiss(this.sprint); - } -} +// Importing necessary components and interfaces. +import { Component, OnInit, Input } from '@angular/core'; +import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; +import { + BackendService, + ScrumSprint +} from '../../services/backend.service'; + +@Component({ + selector: 'app-task-form', + templateUrl: './sprint-form.component.html', + styleUrls: ['./sprint-form.component.css'] +}) + +// Class implements the logic for a popup window form to create and modify sprints. +export class SprintFormComponent implements OnInit { + @Input() public sprint: ScrumSprint; + public editing: Boolean; + public sprintid: string; + + constructor(private backendService: BackendService, private activeModalService: NgbActiveModal) { } + + // If no sprint exists a new one will be created. + // In other cases the sprint exists and gets modifiable. + ngOnInit(): void { + if (this.sprint === null || this.sprint === undefined) { + this.sprint = { title: '', startDate: '', endDate: '' }; + this.editing = false; + } else { + this.editing = true; + } + document.getElementById('titleField').focus(); + } + + // A new created sprint will be saved in backend (POST). + // If a sprint already exists, modifying results an update (PUT) to the backend. + onSubmit() { + if (this.editing) { + this.backendService.putSprint(this.sprint).subscribe((response) => { + if (response.status > 399) { + alert('Fehler'); + } + }); + } else { + this.backendService.postSprint(this.sprint).subscribe((response) => { + console.log('Sprint gespeichert!'); + if (response.status > 399) { + alert('Fehler'); + } + }); + } + // Closes the popup window after submitting/canceling. + this.activeModalService.close(this.sprint); + } + + // Closes the popup form window (by clicking "close button"). + onClose() { + this.activeModalService.dismiss(this.sprint); + } +} diff --git a/src/app/components/sprint-table/sprint-table.component.css b/src/app/components/sprint-table/sprint-table.component.css new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/sprint-table/sprint-table.component.html b/src/app/components/sprint-table/sprint-table.component.html new file mode 100644 index 0000000..251698b --- /dev/null +++ b/src/app/components/sprint-table/sprint-table.component.html @@ -0,0 +1,66 @@ +
+
+

+ Sprints +

+ + + + + + + + + + + + + + + + + + + + + + + +
+ ID + + + + + + + Titel + + + + + + + Start + + + + + + + End + + + + + +
{{sprint.id}}{{sprint.title}}{{sprint.startDate | date:'dd.MM.yyyy'}}{{sprint.endDate | date:'dd.MM.yyyy'}} + + +
+
+
diff --git a/src/app/sprint-table/sprint-table.component.ts b/src/app/components/sprint-table/sprint-table.component.ts similarity index 86% rename from src/app/sprint-table/sprint-table.component.ts rename to src/app/components/sprint-table/sprint-table.component.ts index fc53bfc..3d18bc7 100644 --- a/src/app/sprint-table/sprint-table.component.ts +++ b/src/app/components/sprint-table/sprint-table.component.ts @@ -1,87 +1,87 @@ -import {Component} from '@angular/core'; -import {BackendService, ScrumSprint} from '../services/backend.service'; -import {TableComponentBase} from '../services/table-component.base'; -import {NgbModal} from '@ng-bootstrap/ng-bootstrap'; -import {ActivatedRoute, ParamMap, Router} from '@angular/router'; -import { SprintFormComponent } from '../sprint-form/sprint-form.component'; - -@Component({ - selector: 'app-sprint', - templateUrl: './sprint-table.component.html', - styleUrls: ['./sprint-table.component.css'] -}) -export class SprintTableComponent extends TableComponentBase { - public filterSprintId: number | null = null; - public highlightId: number; - - public get filteredItems() { - return this.items.filter(sprint => - (this.filterSprintId === null || sprint.id === this.filterSprintId) - ); - } - - constructor( - private backendService: BackendService, private modalService: NgbModal, - private route: ActivatedRoute, private router: Router - ) { - super(); - - this.applyFilterParameters(route.snapshot.paramMap); - route.paramMap.subscribe(map => this.applyFilterParameters(map)); - - backendService.getSprints().subscribe(response => { - if (response.status > 399) { - alert('Fehler'); - } else { - this.items.push(...response.body); - } - }); - } - - private applyFilterParameters(params: ParamMap) { - if (params.has('id')) { - this.highlightId = parseInt(params.get('id')); - } - } - - public deleteSprint(sprint: ScrumSprint) { - this.backendService.deleteSprint(sprint).subscribe(response => { - if (response.status > 399) { - alert('Fehler'); - } - }); - const index = this.items.indexOf(sprint); - if (index !== -1) { - this.items.splice(index, 1); - } - } - - public openSprintForm(editSprint?: ScrumSprint) { - const modalRef = this.modalService.open(SprintFormComponent, { - backdrop: 'static', - keyboard: true, - }); - if (editSprint === null) { - modalRef.result.then(result => { - this.items.push(result); - }); - } - modalRef.componentInstance.sprint = editSprint; - } - - sortById() { - this.doNumericSort('id', sprint => sprint.id); - } - - sortByTitle() { - this.doStringSort('title', sprint => sprint.title); - } - - sortByStartDate() { - this.doDateSort('startDate', sprint => sprint.startDate); - } - - sortByEndDate() { - this.doDateSort('endDate', sprint => sprint.endDate); - } -} +import {Component} from '@angular/core'; +import {BackendService, ScrumSprint} from '../../services/backend.service'; +import {TableComponentBase} from '../../services/table-component.base'; +import {NgbModal} from '@ng-bootstrap/ng-bootstrap'; +import {ActivatedRoute, ParamMap, Router} from '@angular/router'; +import { SprintFormComponent } from '../sprint-form/sprint-form.component'; + +@Component({ + selector: 'app-sprint', + templateUrl: './sprint-table.component.html', + styleUrls: ['./sprint-table.component.css'] +}) +export class SprintTableComponent extends TableComponentBase { + public filterSprintId: number | null = null; + public highlightId: number; + + public get filteredItems() { + return this.items.filter(sprint => + (this.filterSprintId === null || sprint.id === this.filterSprintId) + ); + } + + constructor( + private backendService: BackendService, private modalService: NgbModal, + private route: ActivatedRoute, private router: Router + ) { + super(); + + this.applyFilterParameters(route.snapshot.paramMap); + route.paramMap.subscribe(map => this.applyFilterParameters(map)); + + backendService.getSprints().subscribe(response => { + if (response.status > 399) { + alert('Fehler'); + } else { + this.items.push(...response.body); + } + }); + } + + private applyFilterParameters(params: ParamMap) { + if (params.has('id')) { + this.highlightId = parseInt(params.get('id')); + } + } + + public deleteSprint(sprint: ScrumSprint) { + this.backendService.deleteSprint(sprint).subscribe(response => { + if (response.status > 399) { + alert('Fehler'); + } + }); + const index = this.items.indexOf(sprint); + if (index !== -1) { + this.items.splice(index, 1); + } + } + + public openSprintForm(editSprint?: ScrumSprint) { + const modalRef = this.modalService.open(SprintFormComponent, { + backdrop: 'static', + keyboard: true, + }); + if (editSprint === null) { + modalRef.result.then(result => { + this.items.push(result); + }); + } + modalRef.componentInstance.sprint = editSprint; + } + + sortById() { + this.doNumericSort('id', sprint => sprint.id); + } + + sortByTitle() { + this.doStringSort('title', sprint => sprint.title); + } + + sortByStartDate() { + this.doStringSort('startDate', sprint => sprint.startDate); + } + + sortByEndDate() { + this.doStringSort('endDate', sprint => sprint.endDate); + } +} diff --git a/src/app/task-form/task-form.component.css b/src/app/components/task-form/task-form.component.css similarity index 100% rename from src/app/task-form/task-form.component.css rename to src/app/components/task-form/task-form.component.css diff --git a/src/app/components/task-form/task-form.component.html b/src/app/components/task-form/task-form.component.html new file mode 100644 index 0000000..680ec5a --- /dev/null +++ b/src/app/components/task-form/task-form.component.html @@ -0,0 +1,118 @@ + + +
+
+
+
+ +
+
+
+

Neuen Task anlegen

+ +
+
+
+
+
+
+
+ + +
+
+ + +
+
+
+ +
+ + +
+
+ + +
+
+
+
+
+ + +
+
+
+
+
+
\ No newline at end of file diff --git a/src/app/task-form/task-form.component.spec.ts b/src/app/components/task-form/task-form.component.spec.ts similarity index 100% rename from src/app/task-form/task-form.component.spec.ts rename to src/app/components/task-form/task-form.component.spec.ts diff --git a/src/app/task-form/task-form.component.ts b/src/app/components/task-form/task-form.component.ts similarity index 56% rename from src/app/task-form/task-form.component.ts rename to src/app/components/task-form/task-form.component.ts index 2b361ca..8da2775 100644 --- a/src/app/task-form/task-form.component.ts +++ b/src/app/components/task-form/task-form.component.ts @@ -1,158 +1,200 @@ -import { Component, OnInit, Input } from '@angular/core'; -import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; -import { - BackendService, - ScrumTask, - Priority, - ScrumStatus, - ScrumCategory, - ScrumUser, - ScrumProject, - ScrumUserstory -} from '../services/backend.service'; -import { Observable } from 'rxjs'; -import { HttpResponse } from '@angular/common/http'; - -@Component({ - selector: 'app-task-form', - templateUrl: './task-form.component.html', - styleUrls: [ './task-form.component.css' ] -}) -export class TaskFormComponent implements OnInit { - @Input() public task: ScrumTask; - public editing: boolean; - public creating: boolean; - public userstoryId: string; - public userstories: any[] = []; - public allStatus: any[] = []; - public status: ScrumStatus = {title: "", description: ""}; - - constructor(private backendService: BackendService, private activeModalService: NgbActiveModal) { - this.getUserStories(); - this.getTaskStatus(); - } - - ngOnInit(): void { - if (this.task === null || this.task === undefined) { - this.task = { title: '' }; - this.editing = false; - this.creating = false; - } else if (this.task.userstoryid) { - this.editing = true; - } else { - this.creating = true; - } - document.getElementById('titleField').focus(); - this.getRelatedStory(); - } - - onSubmit() { - if (this.editing) { - this.backendService.putTask(this.task).subscribe((response) => { - if (response.status > 399) { - alert('Fehler'); - } - }); - } else { - this.backendService.postTask(this.task).subscribe((response) => { - if (response.status > 399) { - alert('Fehler'); - } - }); - } - this.activeModalService.close(this.task); - } - - onClose() { - this.activeModalService.dismiss(this.task); - } - - getRelatedStory() { - if(!this.task.userstoryid) - { - return null; - } - this.backendService.getUserstory(this.task.userstoryid).subscribe((response) => { - if (response.status > 399) { - alert('Fehler'); - } else { - this.userstoryId = response.body.title; - } - }); - } - - getUserStories() { - this.backendService.getUserstories().subscribe((response) => { - if (response.status > 399) { - alert('Fehler'); - } else { - this.userstories.push(...response.body); - } - }); - } - - getTaskStatus() { - this.backendService.getAllStatus().subscribe((response) => { - if (response.status > 399) { - alert('Fehler'); - } else { - this.allStatus.push(...response.body); - } - }); - } - - createTaskStatus(status:ScrumStatus) { - this.backendService.postStatus(status).subscribe((response) => { - if (response.status > 399) { - alert('Fehler'); - } - else - { - this.allStatus.push(response.body); - } - }); - } - - deleteStatus(id: number) { - var status = this.allStatus.find((x) => x.id === id); - this.backendService.deleteStatus(status).subscribe((response) => { - if (response.status > 399) { - alert('Fehler'); - } - else - { - const index = this.allStatus.indexOf(status); - if (index !== -1) { - this.allStatus.splice(index, 1); - } - } - this.task.statusid=null; - }); - } - - getAllPriorities(): string[] { - return Object.values(Priority); - } - - getUserstoryTitleById(id: number): string{ - if (!id) { - return null; - } - var story = this.userstories.find((x) => x.id === id); - if (!story) { - return null; - } - return story.title; - } - - getStatusTitleById(id: number) :string{ - if (!id) { - return null; - } - var status = this.allStatus.find((x) => x.id === id); - if (!status) { - return null; - } - return status.title; - } -} +// Importing necessary components and interfaces. +import { Component, OnInit, Input } from '@angular/core'; +import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; +import { + BackendService, + ScrumTask, + Priority, + ScrumStatus, + ScrumCategory, + ScrumUser, + ScrumProject, + ScrumUserstory +} from '../../services/backend.service'; +import { Observable } from 'rxjs'; +import { HttpResponse } from '@angular/common/http'; + +@Component({ + selector: 'app-task-form', + templateUrl: './task-form.component.html', + styleUrls: ['./task-form.component.css'] +}) + +// Class implements the logic for a popup window form to create and modify tasks. +export class TaskFormComponent implements OnInit { + @Input() public task: ScrumTask; + public editing: boolean; + public creating: boolean; + public userstoryId: string; + public userstories: any[] = []; + public allStatus: any[] = []; + public status: ScrumStatus = { title: "", description: "" }; + public allUser: any[] = []; + public user: ScrumUser = { name: "" }; + + constructor(private backendService: BackendService, private activeModalService: NgbActiveModal) { + this.getUserStories(); + this.getTaskStatus(); + this.getAllUsers(); + } + + // If no task exists a new one will be created. + // In other cases the task exists and gets modifiable. + ngOnInit(): void { + if (this.task === null || this.task === undefined) { + this.task = { title: '' }; + this.editing = false; + this.creating = false; + } else if (this.task.userstoryid) { + this.editing = true; + } else { + this.creating = true; + } + document.getElementById('titleField').focus(); + this.getRelatedStory(); + } + // A new created task will be saved in backend (POST). + // If a task already exists, modifying results an update (PUT) to the backend. + onSubmit() { + if (this.editing) { + this.backendService.putTask(this.task).subscribe((response) => { + if (response.status > 399) { + alert('Fehler'); + } + }); + } else { + this.backendService.postTask(this.task).subscribe((response) => { + if (response.status > 399) { + alert('Fehler'); + } + }); + } + // Closes the popup window after submitting/canceling. + this.activeModalService.close(this.task); + } + + // Closes the popup form window (by clicking "close button"). + onClose() { + this.activeModalService.dismiss(this.task); + } + + // Getting the userstory which is related to a task. + // The related story will be shown in popup window of a task. + getRelatedStory() { + if (!this.task.userstoryid) { + return null; + } + this.backendService.getUserstory(this.task.userstoryid).subscribe((response) => { + if (response.status > 399) { + alert('Fehler'); + } else { + this.userstoryId = response.body.title; + } + }); + } + + // Getting all userstories from backend to show in a dropdown in popup window. + getUserStories() { + this.backendService.getUserstories().subscribe((response) => { + if (response.status > 399) { + alert('Fehler'); + } else { + this.userstories.push(...response.body); + } + }); + } + + // Getting all available status from backend to list it in status-dropdown in popup window. + getTaskStatus() { + this.backendService.getAllStatus().subscribe((response) => { + if (response.status > 399) { + alert('Fehler'); + } else { + this.allStatus.push(...response.body); + } + }); + } + + // If desired a new arbitrary status (such as "Waiting") can be created, which will be stored in an array. + // The new status is available to all tasks. + createTaskStatus(status: ScrumStatus) { + this.backendService.postStatus(status).subscribe((response) => { + if (response.status > 399) { + alert('Fehler'); + } + else { + this.allStatus.push(response.body); + } + }); + } + + // A custom status can even be deleted if not used anymore. + // This will remove the status from status-array. + deleteStatus(id: number) { + var status = this.allStatus.find((x) => x.id === id); + this.backendService.deleteStatus(status).subscribe((response) => { + if (response.status > 399) { + alert('Fehler'); + } + else { + const index = this.allStatus.indexOf(status); + if (index !== -1) { + this.allStatus.splice(index, 1); + } + } + this.task.statusid = null; + }); + } + + // Getting the values of the Priority enum to be shown in a dropdown in popup window. + getAllPriorities(): Priority[] { + return Object.values(Priority); + } + + // necessary????????????????????????????????????????????????????? + getUserstoryTitleById(id: number): string { + if (!id) { + return null; + } + var story = this.userstories.find((x) => x.id === id); + if (!story) { + return null; + } + return story.title; + } + + // Shows the before choosen status in the status-field in the popup window. + getStatusTitleById(id: number): string { + if (!id) { + return null; + } + var status = this.allStatus.find((x) => x.id === id); + if (!status) { + return null; + } + return status.title; + } + + // Getting all taskboard users from backend to show in a dropdown in popup window. + getAllUsers() { + this.backendService.getUsers().subscribe((response) => { + if (response.status > 399) { + alert('Fehler'); + } else { + this.allUser.push(...response.body); + } + }); + } + + // Shows the before assigned user in the author-field in the popup window. + getAuthorById(id: number): string { + if (!id) { + return null; + } + var user = this.allUser.find((x) => x.id === id); + if (!user) { + return null; + } + return user.name; + } +} diff --git a/src/app/components/task-table/task-table.component.css b/src/app/components/task-table/task-table.component.css new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/task-table/task-table.component.html b/src/app/components/task-table/task-table.component.html new file mode 100644 index 0000000..e3760f6 --- /dev/null +++ b/src/app/components/task-table/task-table.component.html @@ -0,0 +1,126 @@ +
+
+

+ + Userstory #{{filterUserstoryId}} + > + + Tasks +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ ID + + + + + + + Titel + + + + + + + Userstory + + + + + + + Status + + + + + + +
+ Priorität: +
+ {{filterPriority || "All"}} +
+ + +
+
+ + + + + +
+
+ Assigned To + + + + + + + Category + + + + + +
{{task.id}}{{task.title}} + + US #{{task.userstoryid}} + + + + {{getStatusTitleById(task.statusid)}} + + {{task.priority}} + + {{getUserNameById(task.assignedtoid)}} + + + + {{getCategoryTitleById(task.categoryid)}} + + + + +
+
+
diff --git a/src/app/task-table/task-table.component.ts b/src/app/components/task-table/task-table.component.ts similarity index 95% rename from src/app/task-table/task-table.component.ts rename to src/app/components/task-table/task-table.component.ts index 54163ef..a5559d2 100644 --- a/src/app/task-table/task-table.component.ts +++ b/src/app/components/task-table/task-table.component.ts @@ -5,16 +5,16 @@ import { ScrumStatus, ScrumUser, ScrumCategory, -} from '../services/backend.service'; +} from '../../services/backend.service'; import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; import { TaskFormComponent } from '../task-form/task-form.component'; -import { TableComponentBase } from '../services/table-component.base'; +import { TableComponentBase } from '../../services/table-component.base'; import { ActivatedRoute, ParamMap, Router } from '@angular/router'; -import { getNumberForPriority } from '../services/sorting.service'; +import { getNumberForPriority } from '../../services/sorting.service'; import { NONE_TYPE } from '@angular/compiler'; @Component({ - selector: 'app-userstory-table', + selector: 'app-task-table', templateUrl: './task-table.component.html', styleUrls: ['./task-table.component.css'], }) diff --git a/src/app/userstory-form/userstory-form.component.css b/src/app/components/userstory-form/userstory-form.component.css similarity index 100% rename from src/app/userstory-form/userstory-form.component.css rename to src/app/components/userstory-form/userstory-form.component.css diff --git a/src/app/userstory-form/userstory-form.component.html b/src/app/components/userstory-form/userstory-form.component.html similarity index 95% rename from src/app/userstory-form/userstory-form.component.html rename to src/app/components/userstory-form/userstory-form.component.html index e367b6f..0acc5bb 100644 --- a/src/app/userstory-form/userstory-form.component.html +++ b/src/app/components/userstory-form/userstory-form.component.html @@ -1,144 +1,140 @@ -
-
-
-
- -
-
-
-

Neue Userstory anlegen

-
-
-
-
-
-
-
- - -
-
- - -
-
-
- - - -
- - -
- - -
- - -
- - -
- - -
-
-
-
-
- - -
-
-
-
-
+ + +
+
+
+
+ +
+
+
+

Neue Userstory anlegen

+
+
+
+
+
+
+
+ + +
+
+ + +
+
+
+ +
+ + +
+
+ + +
+
+ + +
+
+
+
+
+ + +
+
+
+
+
\ No newline at end of file diff --git a/src/app/userstory-form/userstory-form.component.ts b/src/app/components/userstory-form/userstory-form.component.ts similarity index 68% rename from src/app/userstory-form/userstory-form.component.ts rename to src/app/components/userstory-form/userstory-form.component.ts index 024906f..9838fe7 100644 --- a/src/app/userstory-form/userstory-form.component.ts +++ b/src/app/components/userstory-form/userstory-form.component.ts @@ -1,191 +1,207 @@ -import { Component, OnInit, Input } from '@angular/core'; -import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; -import { BackendService, ScrumUserstory, Priority } from '../services/backend.service'; -import { - ScrumTask, - ScrumStatus, - ScrumCategory, - ScrumUser, - ScrumProject, -} from '../services/backend.service'; - -@Component({ - selector: 'app-userstory-form', - templateUrl: './userstory-form.component.html', - styleUrls: ['./userstory-form.component.css'] -}) -export class UserstoryFormComponent implements OnInit { - @Input() public userstory: ScrumUserstory; - public allStatus: any[] = []; - public status: ScrumStatus = { title: "", description: "" }; - public allUser: any[] = []; - public user: ScrumUser = { name: "" }; - public allCategories: any[] = []; - public category: ScrumCategory = { title: ""}; - private editing: boolean; - - - constructor(private backendService: BackendService, private activeModalService: NgbActiveModal) { - this.getUserstoryStatus(); - this.getAllUsers(); - this.getUserstoryCategory(); - } - - ngOnInit(): void { - if (this.userstory === null || this.userstory === undefined) { - this.userstory = { title: '' }; - this.editing = false; - } else { - this.editing = true; - } - document.getElementById('titleField').focus(); - } - - onSubmit() { - if (this.editing) { - this.backendService.putUserstory(this.userstory).subscribe((response) => { - if (response.status > 399) { - alert('Fehler'); - } - }); - } else { - this.backendService.postUserstory(this.userstory).subscribe((response) => { - if (response.status > 399) { - alert('Fehler'); - } - }); - } - this.activeModalService.close(this.userstory); - } - onClose() { - this.activeModalService.dismiss(this.userstory); - } - - // Methods for adding, choosing and deleting random status tags. - - getUserstoryStatus() { - this.backendService.getAllStatus().subscribe((response) => { - if (response.status > 399) { - alert('Fehler'); - } else { - this.allStatus.push(...response.body); - } - }); - } - - createUserstoryStatus(status: ScrumStatus) { - this.backendService.postStatus(status).subscribe((response) => { - if (response.status > 399) { - alert('Fehler'); - } - else { - this.allStatus.push(response.body); - } - }); - } - - deleteStatus(id: number) { - var status = this.allStatus.find((x) => x.id === id); - this.backendService.deleteStatus(status).subscribe((response) => { - if (response.status > 399) { - alert('Fehler'); - } - else { - const index = this.allStatus.indexOf(status); - if (index !== -1) { - this.allStatus.splice(index, 1); - } - } - this.userstory.statusid = null; - }); - } - - getAllPriorities(): string[] { - return Object.values(Priority); - } - - getStatusTitleById(id: number): string { - if (!id) { - return null; - } - var status = this.allStatus.find((x) => x.id === id); - if (!status) { - return null; - } - return status.title; - } - - // Methods for choosing creator of a userstory. - - getAllUsers() { - this.backendService.getUsers().subscribe((response) => { - if (response.status > 399) { - alert('Fehler'); - } else { - this.allUser.push(...response.body); - } - }); - } - - getAuthorById(id: number): string { - if (!id) { - return null; - } - var user = this.allUser.find((x) => x.id === id); - if (!user) { - return null; - } - return user.name; - } - - // Methods for creating, choosing and deleting categories for a userstory. - - getUserstoryCategory() { - this.backendService.getCategories().subscribe((response) => { - if (response.status > 399) { - alert('Fehler'); - } else { - this.allCategories.push(...response.body); - } - }); - } - - createUserstoryCategory(category: ScrumCategory) { - this.backendService.postCategory(category).subscribe((response) => { - if (response.status > 399) { - alert('Fehler'); - } - else { - this.allCategories.push(response.body); - } - }); - } - - deleteCategory(id: number) { - var category = this.allCategories.find((x) => x.id === id); - this.backendService.deleteCategory(category).subscribe((response) => { - if (response.status > 399) { - alert('Fehler'); - } - else { - const index = this.allCategories.indexOf(category); - if (index !== -1) { - this.allCategories.splice(index, 1); - } - } - this.userstory.categoryid = null; - }); - } - - getCategoryById(id: number): string { - if (!id) { - return null; - } - var category = this.allCategories.find((x) => x.id === id); - if (!category) { - return null; - } - return category.title; - } - -} +// Importing necessary components and interfaces. +import { Component, OnInit, Input } from '@angular/core'; +import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; +import { BackendService, ScrumUserstory, Priority } from '../../services/backend.service'; +import { + ScrumTask, + ScrumStatus, + ScrumCategory, + ScrumUser, + ScrumProject, +} from '../../services/backend.service'; + +@Component({ + selector: 'app-userstory-form', + templateUrl: './userstory-form.component.html', + styleUrls: ['./userstory-form.component.css'] +}) + +// Class implements the logic for a popup window form to create and modify userstories. +export class UserstoryFormComponent implements OnInit { + @Input() public userstory: ScrumUserstory; + public allStatus: any[] = []; + public status: ScrumStatus = { title: "", description: "" }; + public allUser: any[] = []; + public user: ScrumUser = { name: "" }; + public allCategories: any[] = []; + public category: ScrumCategory = { title: "" }; + private editing: boolean; + + constructor(private backendService: BackendService, private activeModalService: NgbActiveModal) { + this.getUserstoryStatus(); + this.getAllUsers(); + this.getUserstoryCategory(); + } + + // If no userstory exists a new one will be created. + // In other cases the userstory exists and gets modifiable. + ngOnInit(): void { + if (this.userstory === null || this.userstory === undefined) { + this.userstory = { title: '' }; + this.editing = false; + } else { + this.editing = true; + } + document.getElementById('titleField').focus(); + } + + // A new created userstory will be saved in backend (POST). + // If a userstory already exists, modifying results an update (PUT) to the backend. + onSubmit() { + if (this.editing) { + this.backendService.putUserstory(this.userstory).subscribe((response) => { + if (response.status > 399) { + alert('Fehler'); + } + }); + } else { + this.backendService.postUserstory(this.userstory).subscribe((response) => { + if (response.status > 399) { + alert('Fehler'); + } + }); + } + // Closes the popup window after submitting/canceling. + this.activeModalService.close(this.userstory); + } + + // Closes the popup form window (by clicking "close button"). + onClose() { + this.activeModalService.dismiss(this.userstory); + } + + // Getting all available status from backend to list it in status-dropdown in popup window. + getUserstoryStatus() { + this.backendService.getAllStatus().subscribe((response) => { + if (response.status > 399) { + alert('Fehler'); + } else { + this.allStatus.push(...response.body); + } + }); + } + + // If desired a new arbitrary status (such as "Waiting") can be created, which will be stored in an array. + // The new status is available to all userstories. + createUserstoryStatus(status: ScrumStatus) { + this.backendService.postStatus(status).subscribe((response) => { + if (response.status > 399) { + alert('Fehler'); + } + else { + this.allStatus.push(response.body); + } + }); + } + + // A custom status can even be deleted if not used anymore. + // This will remove the status from status-array. + deleteStatus(id: number) { + var status = this.allStatus.find((x) => x.id === id); + this.backendService.deleteStatus(status).subscribe((response) => { + if (response.status > 399) { + alert('Fehler'); + } + else { + const index = this.allStatus.indexOf(status); + if (index !== -1) { + this.allStatus.splice(index, 1); + } + } + this.userstory.statusid = null; + }); + } + + // Getting the values of the Priority enum to be shown in a dropdown in popup window. + getAllPriorities(): Priority[] { + return Object.values(Priority); + } + + // Shows the before choosen status in the status-field in the popup window. + getStatusTitleById(id: number): string { + if (!id) { + return null; + } + var status = this.allStatus.find((x) => x.id === id); + if (!status) { + return null; + } + return status.title; + } + + // Getting all taskboard users from backend to show in a dropdown in popup window. + getAllUsers() { + this.backendService.getUsers().subscribe((response) => { + if (response.status > 399) { + alert('Fehler'); + } else { + this.allUser.push(...response.body); + } + }); + } + + // Shows the before assigned user in the author-field in the popup window. + getAuthorById(id: number): string { + if (!id) { + return null; + } + var user = this.allUser.find((x) => x.id === id); + if (!user) { + return null; + } + return user.name; + } + + // Getting all available categories from backend to list it in status-dropdown in popup window. + getUserstoryCategory() { + this.backendService.getCategories().subscribe((response) => { + if (response.status > 399) { + alert('Fehler'); + } else { + this.allCategories.push(...response.body); + } + }); + } + + // If desired a new arbitrary category can be created, which will be stored in an array. + // The new category is available to all userstories. + createUserstoryCategory(category: ScrumCategory) { + this.backendService.postCategory(category).subscribe((response) => { + if (response.status > 399) { + alert('Fehler'); + } + else { + this.allCategories.push(response.body); + } + }); + } + + // A custom category can even be deleted if not used anymore. + // This will remove the category from category-array. + deleteCategory(id: number) { + var category = this.allCategories.find((x) => x.id === id); + this.backendService.deleteCategory(category).subscribe((response) => { + if (response.status > 399) { + alert('Fehler'); + } + else { + const index = this.allCategories.indexOf(category); + if (index !== -1) { + this.allCategories.splice(index, 1); + } + } + this.userstory.categoryid = null; + }); + } + // Shows the before choosen category in the category-field in the popup window. + getCategoryById(id: number): string { + if (!id) { + return null; + } + var category = this.allCategories.find((x) => x.id === id); + if (!category) { + return null; + } + return category.title; + } +} diff --git a/src/app/components/userstory-inner-table/userstory-inner-table.component.css b/src/app/components/userstory-inner-table/userstory-inner-table.component.css new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/userstory-inner-table/userstory-inner-table.component.html b/src/app/components/userstory-inner-table/userstory-inner-table.component.html new file mode 100644 index 0000000..2706790 --- /dev/null +++ b/src/app/components/userstory-inner-table/userstory-inner-table.component.html @@ -0,0 +1,90 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ ID + + + + + + Titel + + + + + + Tasks + + + + + + Status + + + + + + Priorität + + + + + + + Category + + + + +
{{userstory.id}}{{userstory.title}} + + {{getNumberOfTasks(userstory)}} Tasks + + + + {{getStatusTitleById(userstory.statusid)}} + + {{userstory.priority}} + + {{getCategoryTitleById(userstory.categoryid)}} + + + + +
\ No newline at end of file diff --git a/src/app/userstory-table/userstory-table.component.ts b/src/app/components/userstory-inner-table/userstory-inner-table.component.ts similarity index 83% rename from src/app/userstory-table/userstory-table.component.ts rename to src/app/components/userstory-inner-table/userstory-inner-table.component.ts index 2baa7bd..7a82081 100644 --- a/src/app/userstory-table/userstory-table.component.ts +++ b/src/app/components/userstory-inner-table/userstory-inner-table.component.ts @@ -1,31 +1,31 @@ -import { Component } from '@angular/core'; +import { Component, Input } from '@angular/core'; import { BackendService, ScrumTask, ScrumUserstory, ScrumStatus, ScrumCategory, -} from '../services/backend.service'; +} from '../../services/backend.service'; import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; -import { TableComponentBase } from '../services/table-component.base'; -import { getNumberForPriority } from '../services/sorting.service'; +import { TableComponentBase } from '../../services/table-component.base'; +import { getNumberForPriority } from '../../services/sorting.service'; import { UserstoryFormComponent } from '../userstory-form/userstory-form.component'; import { ActivatedRoute, ParamMap, Router } from '@angular/router'; @Component({ - selector: 'app-userstory-table', - templateUrl: './userstory-table.component.html', - styleUrls: ['./userstory-table.component.css'], + selector: 'app-userstory-inner-table', + templateUrl: './userstory-inner-table.component.html', + styleUrls: ['./userstory-inner-table.component.css'] }) -export class UserstoryTableComponent extends TableComponentBase< - ScrumUserstory -> { +export class UserstoryInnerTableComponent extends TableComponentBase { public tasks: ScrumTask[] = []; public filterPriority: string | null = null; public highlightId: number; public status: ScrumStatus[] = []; public categories: ScrumCategory[] = []; + @Input() public items: ScrumUserstory[] = []; + public get filteredItems() { return this.items.filter( (task) => @@ -44,13 +44,6 @@ export class UserstoryTableComponent extends TableComponentBase< this.applyFilterParameters(this.route.snapshot.paramMap); this.route.paramMap.subscribe((map) => this.applyFilterParameters(map)); - backendService.getUserstories().subscribe((response) => { - if (response.status > 399) { - alert('Fehler'); - } else { - this.items.push(...response.body); - } - }); backendService.getTasks().subscribe((response) => { if (response.status > 399) { alert('Fehler'); @@ -96,7 +89,6 @@ export class UserstoryTableComponent extends TableComponentBase< const modalRef = this.modalService.open(UserstoryFormComponent, { backdrop: 'static', keyboard: true, - size: 'lg' }); if (editUserstory === null) { modalRef.result.then((result) => { diff --git a/src/app/components/userstory-table/userstory-table.component.css b/src/app/components/userstory-table/userstory-table.component.css new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/userstory-table/userstory-table.component.html b/src/app/components/userstory-table/userstory-table.component.html new file mode 100644 index 0000000..0203afa --- /dev/null +++ b/src/app/components/userstory-table/userstory-table.component.html @@ -0,0 +1,6 @@ +
+
+

Userstories

+ +
+
\ No newline at end of file diff --git a/src/app/components/userstory-table/userstory-table.component.ts b/src/app/components/userstory-table/userstory-table.component.ts new file mode 100644 index 0000000..fba1dd1 --- /dev/null +++ b/src/app/components/userstory-table/userstory-table.component.ts @@ -0,0 +1,24 @@ +import { Component } from '@angular/core'; +import { + BackendService, + ScrumUserstory, +} from '../../services/backend.service'; + +@Component({ + selector: 'app-userstory-table', + templateUrl: './userstory-table.component.html', + styleUrls: ['./userstory-table.component.css'], +}) +export class UserstoryTableComponent { + public items: ScrumUserstory[] = []; + + constructor(private backendService: BackendService) { + backendService.getUserstories().subscribe((response) => { + if (response.status > 399) { + alert('Fehler'); + } else { + this.items.push(...response.body); + } + }); + } +} diff --git a/src/app/dashboard/dashboard.component.css b/src/app/dashboard/dashboard.component.css deleted file mode 100644 index 4a386a0..0000000 --- a/src/app/dashboard/dashboard.component.css +++ /dev/null @@ -1,3 +0,0 @@ -/* .text-2em { - font-size: 2rem; -} */ diff --git a/src/app/dashboard/dashboard.component.html b/src/app/dashboard/dashboard.component.html deleted file mode 100644 index b63d9f1..0000000 --- a/src/app/dashboard/dashboard.component.html +++ /dev/null @@ -1,60 +0,0 @@ -{% comment %}
- -
-

Dashboard

-
- -
-

Current sprint

-
- -
- -
-
-
- Userstories -
-
- -
-
-
- -
-
- -
-
- Days remaining -
-
- - {{getRemainingDaysInSprint()}} - -
-
- -
-
- Userstories: {{status.title}} -
-
- - {{getNumberOfUserstoriesByStatus(status)}} - -
-
- -
-
- -
- -
{% endcomment %} diff --git a/src/app/dashboard/dashboard.component.ts b/src/app/dashboard/dashboard.component.ts deleted file mode 100644 index edbe983..0000000 --- a/src/app/dashboard/dashboard.component.ts +++ /dev/null @@ -1,159 +0,0 @@ -// import { Component, OnInit } from '@angular/core'; -// // import Chart from 'chart.js'; -// import { -// BackendService, -// ScrumStatus, -// ScrumUser, -// ScrumUserstory, -// ScrumSprint, -// } from '../services/backend.service'; - -// @Component({ -// selector: 'app-dashboard', -// templateUrl: 'dashboard.component.html', -// styleUrls: ['./dashboard.component.css'], -// }) -// export class DashboardComponent implements OnInit { -// /** -// * Returns the status that are used by at least one userstory. -// */ -// public get usedStatus(): ScrumStatus[] { -// return this.status.filter( -// (s) => this.userstories.find((us) => us.statusid === s.id) !== undefined -// ); -// } - -// private status: ScrumStatus[]; -// private userstories: ScrumUserstory[]; -// private sprints: ScrumSprint[]; - -// constructor(private backendService: BackendService) { -// // backendService.getUserstories().subscribe(response => { -// // if (response.status > 399) { -// // alert('Fehler'); -// // } else { -// // this.userstories.push(...response.body); -// // } -// // }); -// // backendService.getAllStatus().subscribe(response => { -// // if (response.status > 399) { -// // alert('Fehler'); -// // } else { -// // this.status.push(...response.body); -// // } -// // }); -// // backendService.getSprints().subscribe(response => { -// // if (response.status > 399) { -// // alert('Fehler'); -// // } else { -// // this.sprints.push(...response.body); -// // } -// // }); - -// this.status = [ -// { id: 0, title: 'In progress', description: '' }, -// { id: 1, title: 'Done', description: '' }, -// ]; -// this.userstories = [ -// { statusid: 0, title: '' }, -// { statusid: 0, title: '' }, -// { statusid: 0, title: '' }, -// { statusid: 1, title: '' }, -// { statusid: 1, title: '' }, -// ]; -// this.sprints = [ -// { -// description: '', -// title: '', -// project: 0, -// startDate: new Date(2020, 5, 22), -// endDate: new Date(2020, 5, 28), -// }, -// { -// description: '', -// title: '', -// project: 0, -// startDate: new Date(2020, 5, 29), -// endDate: new Date(2020, 6, 5), -// }, -// ]; -// } - -// ngOnInit(): void { -// // @ts-ignore -// const context = document -// .getElementById('done-stories-chart') -// .getContext('2d'); -// const chart = new Chart(context, { -// type: 'pie', -// data: { -// labels: this.usedStatus.map((s) => s.title), -// datasets: [ -// { -// label: 'Done stories', -// data: this.usedStatus.map((s) => -// this.getNumberOfUserstoriesByStatus(s) -// ), -// backgroundColor: this.getBackgroundColors(), -// }, -// ], -// }, -// }); -// } - -// private getBackgroundColors(): string[] { -// const baseColors = [ -// 'rgb(255, 153, 102)', -// 'rgb(255, 102, 102)', -// 'rgb(153, 204, 255)', -// 'rgb(102, 153, 102)', -// 'rgb(204, 204, 153)', -// 'rgb(153, 102, 204)', -// 'rgb(204, 102, 102)', -// 'rgb(255, 204, 153)', -// 'rgb(153, 102, 255)', -// 'rgb(204, 204, 204)', -// 'rgb(102, 255, 204)', -// 'rgb(102, 153, 255)', -// 'rgb(153, 102, 153)', -// 'rgb(204, 204, 255)', -// ]; -// const colors = []; -// while (colors.length < this.usedStatus.length) { -// colors.push(...baseColors); -// } -// return colors; -// } - -// public getNumberOfUserstoriesByStatus(status: ScrumStatus): number { -// return this.userstories.filter((us) => us.statusid === status.id).length; -// } - -// public getRemainingDaysInSprint(): number { -// const now = new Date(); -// const currentSprint = this.sprints.find( -// (s) => s.endDate > now && s.startDate < now -// ); -// if (currentSprint === undefined) { -// return undefined; -// } -// const daysDelta = Math.floor( -// (currentSprint.endDate.getTime() - now.getTime()) / 86400000 -// ); -// return daysDelta; -// } - -// public getSprintUrgency(): number { -// const now = new Date(); -// const currentSprint = this.sprints.find( -// (s) => s.endDate > now && s.startDate < now -// ); -// if (currentSprint === undefined) { -// return undefined; -// } -// const deltaFromNow = currentSprint.endDate.getTime() - now.getTime(); -// const deltaFromStart = -// currentSprint.endDate.getTime() - currentSprint.startDate.getTime(); -// return Math.floor((3 * deltaFromNow) / deltaFromStart); -// } -// } diff --git a/src/app/services/backend.service.ts b/src/app/services/backend.service.ts index 6eb6ca7..3816388 100644 --- a/src/app/services/backend.service.ts +++ b/src/app/services/backend.service.ts @@ -242,17 +242,18 @@ export interface ScrumUserstory { priority?: Priority; statusid?: number; categoryid?: number; + sprintid?: number; createdbyid?: number; projectid?: number; } -export interface ScrumSprint { - id?: number; - title: string; - description?: string; - startDate: Date; - endDate: Date; - project?: number; +export interface ScrumSprint{ + id?: number; + title: string; + description?: string; + startDate: string; + endDate: string; + projectid?: number; } export interface ScrumCategory { diff --git a/src/app/sprint-form/sprint-form.component.html b/src/app/sprint-form/sprint-form.component.html deleted file mode 100644 index d3d4e16..0000000 --- a/src/app/sprint-form/sprint-form.component.html +++ /dev/null @@ -1,32 +0,0 @@ -
-
-
-
- -
-

Neuen Sprint anlegen

-
-
- - -
-
- - -
-
- - -
- -
- - -
-
-
-
\ No newline at end of file diff --git a/src/app/sprint-table/sprint-table.component.css b/src/app/sprint-table/sprint-table.component.css deleted file mode 100644 index 70c4c49..0000000 --- a/src/app/sprint-table/sprint-table.component.css +++ /dev/null @@ -1,3 +0,0 @@ -th.sortable:hover { - text-decoration: underline; -} \ No newline at end of file diff --git a/src/app/sprint-table/sprint-table.component.html b/src/app/sprint-table/sprint-table.component.html deleted file mode 100644 index 894bcb9..0000000 --- a/src/app/sprint-table/sprint-table.component.html +++ /dev/null @@ -1,66 +0,0 @@ -
- -

- Sprints -

- - - - - - - - - - - - - - - - - - - - - - - -
- ID - - - - - - - Titel - - - - - - - Start - - - - - - - End - - - - - -
{{sprint.id}}{{sprint.title}}{{sprint.startDate | date:'dd.MM.yyyy'}}{{sprint.endDate | date:'dd.MM.yyyy'}} - - -
-
- \ No newline at end of file diff --git a/src/app/task-form/task-form.component.html b/src/app/task-form/task-form.component.html deleted file mode 100644 index 2e688ac..0000000 --- a/src/app/task-form/task-form.component.html +++ /dev/null @@ -1,83 +0,0 @@ -
-
-
-
- -
-
-
-

Neuen Task anlegen

- -
-
-
-
-
-
-
- - -
-
- - -
-
-
- -
- - -
-
- - -
-
-
-
-
- - -
-
-
-
-
\ No newline at end of file diff --git a/src/app/task-table/task-table.component.html b/src/app/task-table/task-table.component.html deleted file mode 100644 index 1a8b2f2..0000000 --- a/src/app/task-table/task-table.component.html +++ /dev/null @@ -1,126 +0,0 @@ -
- -

- - Userstory #{{filterUserstoryId}} - > - - Tasks -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- ID - - - - - - - Titel - - - - - - - Userstory - - - - - - - Status - - - - - - -
- Priorität: -
- {{filterPriority || "All"}} -
- - -
-
- - - - - -
-
- Assigned To - - - - - - - Category - - - - - -
{{task.id}}{{task.title}} - - US #{{task.userstoryid}} - - - - {{getStatusTitleById(task.statusid)}} - - {{task.priority}} - - {{getUserNameById(task.assignedtoid)}} - - - - {{getCategoryTitleById(task.categoryid)}} - - - - -
-
- diff --git a/src/app/userstory-table/userstory-table.component.css b/src/app/userstory-table/userstory-table.component.css deleted file mode 100644 index 70f7a6e..0000000 --- a/src/app/userstory-table/userstory-table.component.css +++ /dev/null @@ -1,3 +0,0 @@ -th.sortable:hover { - text-decoration: underline; -} diff --git a/src/app/userstory-table/userstory-table.component.html b/src/app/userstory-table/userstory-table.component.html deleted file mode 100644 index 90e0ce0..0000000 --- a/src/app/userstory-table/userstory-table.component.html +++ /dev/null @@ -1,106 +0,0 @@ -
- -

Userstories

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- ID - - - - - - - Titel - - - - - - - Tasks - - - - - - - Status - - - - - - -
-
- Priorität: -
- {{filterPriority || "All"}} -
- - -
-
- - - - - -
-
-
- Category - - - - - -
{{userstory.id}}{{userstory.title}} - - {{getNumberOfTasks(userstory)}} Tasks - - - - {{getStatusTitleById(userstory.statusid)}} - - {{userstory.priority}} - - {{getCategoryTitleById(userstory.categoryid)}} - - - - -
-
diff --git a/src/styles.css b/src/styles.css new file mode 100644 index 0000000..0fe5df0 --- /dev/null +++ b/src/styles.css @@ -0,0 +1,9 @@ +/* You can add global styles to this file, and also import other style files */ +.custom-text-secondary { + color: white; + } + + .white-content .custom-text-secondary { + color: black !important; + } + \ No newline at end of file diff --git a/src/styles.scss b/src/styles.scss index 79fc2de..7fefb6f 100644 --- a/src/styles.scss +++ b/src/styles.scss @@ -2,4 +2,16 @@ .modal .modal-content { display: contents; -} \ No newline at end of file +} + +th.sortable:hover { + text-decoration: underline; +} + +.content { + position: relative; + float: left; + margin-top: 10px; + margin-left: 20px; + width: 80%; +}