diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 00000000..156d3bfc --- /dev/null +++ b/.travis.yml @@ -0,0 +1,31 @@ +language: node_js + +dist: bionic + +node_js: + - 'node' + +cache: + directories: + - ~/.npm + - ~/.cache + +addons: + chrome: stable + apt: + packages: + - libgconf-2-4 + +services: + - xvfb + +before_install: + - export NG_CLI_ANALYTICS=ci + +install: + - npm ci + - npm run build + - npm run build:lib:prod + +script: + - npm run ci diff --git a/package-lock.json b/package-lock.json index 1b675078..f0ce9836 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1460,6 +1460,52 @@ "resolved": "https://registry.npmjs.org/@braintree/sanitize-url/-/sanitize-url-3.1.0.tgz", "integrity": "sha512-GcIY79elgB+azP74j8vqkiXz8xLFfIzbQJdlwOPisgbKT00tviJQuEghOXSMVxJ00HoYJbGswr4kcllUc4xCcg==" }, + "@hapi/address": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@hapi/address/-/address-2.1.4.tgz", + "integrity": "sha512-QD1PhQk+s31P1ixsX0H0Suoupp3VMXzIVMSwobR3F3MSUO2YCV0B7xqLcUw/Bh8yuvd3LhpyqLQWTNcRmp6IdQ==", + "dev": true + }, + "@hapi/formula": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@hapi/formula/-/formula-1.2.0.tgz", + "integrity": "sha512-UFbtbGPjstz0eWHb+ga/GM3Z9EzqKXFWIbSOFURU0A/Gku0Bky4bCk9/h//K2Xr3IrCfjFNhMm4jyZ5dbCewGA==", + "dev": true + }, + "@hapi/hoek": { + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-8.5.1.tgz", + "integrity": "sha512-yN7kbciD87WzLGc5539Tn0sApjyiGHAJgKvG9W8C7O+6c7qmoQMfVs0W4bX17eqz6C78QJqqFrtgdK5EWf6Qow==", + "dev": true + }, + "@hapi/joi": { + "version": "16.1.8", + "resolved": "https://registry.npmjs.org/@hapi/joi/-/joi-16.1.8.tgz", + "integrity": "sha512-wAsVvTPe+FwSrsAurNt5vkg3zo+TblvC5Bb1zMVK6SJzZqw9UrJnexxR+76cpePmtUZKHAPxcQ2Bf7oVHyahhg==", + "dev": true, + "requires": { + "@hapi/address": "^2.1.2", + "@hapi/formula": "^1.2.0", + "@hapi/hoek": "^8.2.4", + "@hapi/pinpoint": "^1.0.2", + "@hapi/topo": "^3.1.3" + } + }, + "@hapi/pinpoint": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@hapi/pinpoint/-/pinpoint-1.0.2.tgz", + "integrity": "sha512-dtXC/WkZBfC5vxscazuiJ6iq4j9oNx1SHknmIr8hofarpKUZKmlUVYVIhNVzIEgK5Wrc4GMHL5lZtt1uS2flmQ==", + "dev": true + }, + "@hapi/topo": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-3.1.6.tgz", + "integrity": "sha512-tAag0jEcjwH+P2quUfipd7liWCNX2F8NvYjQp2wtInsZxnMlypdw0FtAOLxtvvkO+GSRRbmNi8m/5y42PQJYCQ==", + "dev": true, + "requires": { + "@hapi/hoek": "^8.3.0" + } + }, "@istanbuljs/schema": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.2.tgz", @@ -1787,9 +1833,9 @@ } }, "@swimlane/prettier-config-swimlane": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@swimlane/prettier-config-swimlane/-/prettier-config-swimlane-2.0.0.tgz", - "integrity": "sha512-x/2OwU2ZQlWC/rvMYpLmQqXOSRbkEtY410SvE9cBxX7GSgEeTOdLSfXB6xdW2hi3xfBNqiS8R57nvc9Aq1Yc7g==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@swimlane/prettier-config-swimlane/-/prettier-config-swimlane-3.0.2.tgz", + "integrity": "sha512-oAdJm+ylbpoT7FnptiS+UMeMo0cFHko38Q7+qBAAsrbTkr1+tkebvHH05FOXVqkWJJXarJWcJdeWVTn6/YqaSw==", "dev": true }, "@szmarczak/http-timer": { @@ -1868,9 +1914,9 @@ } }, "@types/jasmine": { - "version": "2.8.16", - "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-2.8.16.tgz", - "integrity": "sha512-056oRlBBp7MDzr+HoU5su099s/s7wjZ3KcHxLfv+Byqb9MwdLUvsfLgw1VS97hsh3ddxSPyQu+olHMnoVTUY6g==", + "version": "3.5.10", + "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-3.5.10.tgz", + "integrity": "sha512-3F8qpwBAiVc5+HPJeXJpbrl+XjawGmciN5LgiO7Gv1pl1RHtjoMNqZpqEksaPJW05ViKe8snYInRs6xB25Xdew==", "dev": true }, "@types/jasminewd2": { @@ -2427,6 +2473,12 @@ "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", "dev": true }, + "arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, "argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", @@ -2654,65 +2706,6 @@ "ast-types-flow": "0.0.7" } }, - "babel-code-frame": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", - "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", - "dev": true, - "requires": { - "chalk": "^1.1.3", - "esutils": "^2.0.2", - "js-tokens": "^3.0.2" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", - "dev": true - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, "babel-loader": { "version": "8.0.6", "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.0.6.tgz", @@ -3218,9 +3211,9 @@ } }, "browserstack": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/browserstack/-/browserstack-1.5.3.tgz", - "integrity": "sha512-AO+mECXsW4QcqC9bxwM29O7qWa7bJT94uBFzeb5brylIQwawuEziwq20dPYbins95GlWzOawgyDNdjYAo32EKg==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/browserstack/-/browserstack-1.6.0.tgz", + "integrity": "sha512-HJDJ0TSlmkwnt9RZ+v5gFpa1XZTBYTj0ywvLwJ3241J7vMw2jAsGNVhKHtmCOyg+VxeLZyaibO9UL71AsUeDIw==", "dev": true, "requires": { "https-proxy-agent": "^2.2.1" @@ -3267,28 +3260,6 @@ "isarray": "^1.0.0" } }, - "buffer-alloc": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", - "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", - "dev": true, - "requires": { - "buffer-alloc-unsafe": "^1.1.0", - "buffer-fill": "^1.0.0" - } - }, - "buffer-alloc-unsafe": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", - "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", - "dev": true - }, - "buffer-fill": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", - "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=", - "dev": true - }, "buffer-from": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", @@ -3543,6 +3514,12 @@ "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", "dev": true }, + "check-more-types": { + "version": "2.24.0", + "resolved": "https://registry.npmjs.org/check-more-types/-/check-more-types-2.24.0.tgz", + "integrity": "sha1-FCD/sQ/URNz8ebQ4kbv//TKoRgA=", + "dev": true + }, "chokidar": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.1.tgz", @@ -3827,9 +3804,9 @@ } }, "colors": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", - "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", "dev": true }, "combined-stream": { @@ -4284,18 +4261,18 @@ } }, "cross-env": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-6.0.3.tgz", - "integrity": "sha512-+KqxF6LCvfhWvADcDPqo64yVIB31gv/jQulX2NGzKS/g3GEVz6/pt4wjHFtFWsHMddebWD/sDthJemzM4MaAag==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.2.tgz", + "integrity": "sha512-KZP/bMEOJEDCkDQAyRhu3RL2ZO/SUVrxQVI0G3YEQ+OLbRA3c6zgixe8Mq8a/z7+HKlNEjo8oiLUs8iRijY2Rw==", "dev": true, "requires": { - "cross-spawn": "^7.0.0" + "cross-spawn": "^7.0.1" }, "dependencies": { "cross-spawn": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.1.tgz", - "integrity": "sha512-u7v4o84SwFpD32Z8IIcPZ6z1/ie24O6RU3RbtL5Y316l3KuHVPx9ItBgWQ6VlfAFnRnTtMUrsQ9MUUTuEZjogg==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.2.tgz", + "integrity": "sha512-PD6G8QG3S4FK/XCGFbEQrDqO2AnMMsy0meR7lerlIOHAAbkuavGU/pOqprrlvfTNjvowivTeBsjebAL0NSoMxw==", "dev": true, "requires": { "path-key": "^3.1.0", @@ -5206,9 +5183,9 @@ "dev": true }, "diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", "dev": true }, "diffie-hellman": { @@ -5317,6 +5294,12 @@ "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=", + "dev": true + }, "duplexer3": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", @@ -5684,6 +5667,21 @@ "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", "dev": true }, + "event-stream": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", + "integrity": "sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE=", + "dev": true, + "requires": { + "duplexer": "~0.1.1", + "from": "~0", + "map-stream": "~0.1.0", + "pause-stream": "0.0.11", + "split": "0.3", + "stream-combiner": "~0.0.4", + "through": "~2.3.1" + } + }, "eventemitter3": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.0.tgz", @@ -6274,6 +6272,12 @@ "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=", + "dev": true + }, "from2": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", @@ -6284,15 +6288,6 @@ "readable-stream": "^2.0.0" } }, - "fs-access": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/fs-access/-/fs-access-1.0.1.tgz", - "integrity": "sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o=", - "dev": true, - "requires": { - "null-check": "^1.0.0" - } - }, "fs-extra": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.2.tgz", @@ -7045,6 +7040,12 @@ "debug": "4" } }, + "human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "dev": true + }, "humanize-ms": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", @@ -7055,9 +7056,9 @@ } }, "husky": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/husky/-/husky-4.2.3.tgz", - "integrity": "sha512-VxTsSTRwYveKXN4SaH1/FefRJYCtx+wx04sSVcOpD7N2zjoHxa+cEJ07Qg5NmV3HAK+IRKOyNVpi2YBIVccIfQ==", + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/husky/-/husky-4.2.4.tgz", + "integrity": "sha512-aLUw3YxdljMuu57SQvSGW33/Dbsztis7UZRAx1WHC13O4Lv0wa9oHaeobSMOBI/nGiVRbCJBGj263WUxaw2p2Q==", "dev": true, "requires": { "chalk": "^3.0.0", @@ -7156,9 +7157,9 @@ } }, "p-limit": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.2.tgz", - "integrity": "sha512-WGR+xHecKTr7EbUEhyLSh5Dube9JtdiG78ufaeLxTgpudf/20KqyMioIUZJAezlTIi6evxuoUs9YXc11cU+yzQ==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "requires": { "p-try": "^2.0.0" @@ -7928,13 +7929,10 @@ "dev": true }, "isbinaryfile": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.3.tgz", - "integrity": "sha512-8cJBL5tTd2OS0dM4jz07wQd5g0dCCqIhUxPIGtZfa5L6hWlvV5MHTITy/DBAsF+Oe2LS1X3krBUhNwaGUWpWxw==", - "dev": true, - "requires": { - "buffer-alloc": "^1.2.0" - } + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.6.tgz", + "integrity": "sha512-ORrEy+SNVqUhrCaal4hA4fBzhggQQ+BaLntyPOdoEiwlKZW9BZiJXjg3RMiruE4tPEI3pyVPpySHQF/dKWperg==", + "dev": true }, "isexe": { "version": "2.0.0", @@ -8129,18 +8127,18 @@ } }, "jasmine-core": { - "version": "2.99.1", - "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-2.99.1.tgz", - "integrity": "sha1-5kAN8ea1bhMLYcS80JPap/boyhU=", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-3.5.0.tgz", + "integrity": "sha512-nCeAiw37MIMA9w9IXso7bRaLl+c/ef3wnxsoSAlYrzS+Ot0zTG6nU8G/cIfGkqpkjX2wNaIW9RFG0TwIFnG6bA==", "dev": true }, "jasmine-spec-reporter": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/jasmine-spec-reporter/-/jasmine-spec-reporter-4.2.1.tgz", - "integrity": "sha512-FZBoZu7VE5nR7Nilzy+Np8KuVIOxF4oXDPDknehCYBDE080EnlPu0afdZNmpGDBRCUBv3mj5qgqCRmk6W/K8vg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/jasmine-spec-reporter/-/jasmine-spec-reporter-5.0.1.tgz", + "integrity": "sha512-RrOZ+bSPnbk1/9KKs5lm0Nl0cqDCh/XXVlCmu3nkhEJH6HTDh4hoJZu3q8e9aq37C0eXEf/JEJnYy+t4m3arZQ==", "dev": true, "requires": { - "colors": "1.1.2" + "colors": "1.4.0" } }, "jasminewd2": { @@ -8294,12 +8292,11 @@ } }, "karma": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/karma/-/karma-4.4.1.tgz", - "integrity": "sha512-L5SIaXEYqzrh6b1wqYC42tNsFMx2PWuxky84pK9coK09MvmL7mxii3G3bZBh/0rvD27lqDd0le9jyhzvwif73A==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/karma/-/karma-5.0.0.tgz", + "integrity": "sha512-iM0nREt/RLcF0yDvjdSLdTZ0twL/qBCJEJLbzd+BVokxPkEjtDq4HxKqRuxqlNCh8Y1jz+q54sERBEIjQBHxxA==", "dev": true, "requires": { - "bluebird": "^3.3.0", "body-parser": "^1.16.1", "braces": "^3.0.2", "chokidar": "^3.0.0", @@ -8311,46 +8308,225 @@ "glob": "^7.1.1", "graceful-fs": "^4.1.2", "http-proxy": "^1.13.0", - "isbinaryfile": "^3.0.0", + "isbinaryfile": "^4.0.2", "lodash": "^4.17.14", "log4js": "^4.0.0", "mime": "^2.3.1", "minimatch": "^3.0.2", - "optimist": "^0.6.1", "qjobs": "^1.1.4", "range-parser": "^1.2.0", "rimraf": "^2.6.0", - "safe-buffer": "^5.0.1", "socket.io": "2.1.1", "source-map": "^0.6.1", "tmp": "0.0.33", - "useragent": "2.3.0" + "ua-parser-js": "0.7.21", + "yargs": "^15.3.1" }, "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "dev": true, + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, "mime": { "version": "2.4.4", "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.4.tgz", "integrity": "sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==", "dev": true }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + }, + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "yargs": { + "version": "15.3.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.3.1.tgz", + "integrity": "sha512-92O1HWEjw27sBfgmXiixJWT5hRBp2eobqXicLtPBIDBhYB+1HpwZlXmbW2luivBJHBzki+7VyCLRtAkScbTBQA==", + "dev": true, + "requires": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.1" + } + }, + "yargs-parser": { + "version": "18.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.2.tgz", + "integrity": "sha512-hlIPNR3IzC1YuL1c2UwwDKpXlNFBqD1Fswwh1khz5+d8Cq/8yc/Mn0i+rQXduu8hcrFKvO7Eryk+09NecTQAAQ==", "dev": true, "requires": { - "glob": "^7.1.3" + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" } } } }, "karma-chrome-launcher": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-2.2.0.tgz", - "integrity": "sha512-uf/ZVpAabDBPvdPdveyk1EPgbnloPvFFGgmRhYLTDH7gEB4nZdSBk8yTU47w1g/drLSx5uMOkjKk7IWKfWg/+w==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-3.1.0.tgz", + "integrity": "sha512-3dPs/n7vgz1rxxtynpzZTvb9y/GIaW8xjAwcIGttLbycqoFtI7yo1NGnQi6oFTherRE+GIhCAHZC4vEqWGhNvg==", "dev": true, "requires": { - "fs-access": "^1.0.0", "which": "^1.2.1" } }, @@ -8365,20 +8541,20 @@ } }, "karma-jasmine": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/karma-jasmine/-/karma-jasmine-1.1.2.tgz", - "integrity": "sha1-OU8rJf+0pkS5rabyLUQ+L9CIhsM=", - "dev": true - }, - "karma-jasmine-html-reporter": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/karma-jasmine-html-reporter/-/karma-jasmine-html-reporter-0.2.2.tgz", - "integrity": "sha1-SKjl7xiAdhfuK14zwRlMNbQ5Ukw=", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/karma-jasmine/-/karma-jasmine-3.1.1.tgz", + "integrity": "sha512-pxBmv5K7IkBRLsFSTOpgiK/HzicQT3mfFF+oHAC7nxMfYKhaYFgxOa5qjnHW4sL5rUnmdkSajoudOnnOdPyW4Q==", "dev": true, "requires": { - "karma-jasmine": "^1.0.2" + "jasmine-core": "^3.5.0" } }, + "karma-jasmine-html-reporter": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/karma-jasmine-html-reporter/-/karma-jasmine-html-reporter-1.5.3.tgz", + "integrity": "sha512-ci0VrjuCaFj+9d1tYlTE3KIPUCp0rz874zWWU3JgCMqGIyw5ke+BXWFPOAGAqUdCJcrMwneyvp1zFXA74MiPUA==", + "dev": true + }, "karma-source-map-support": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/karma-source-map-support/-/karma-source-map-support-1.4.0.tgz", @@ -8426,6 +8602,12 @@ "package-json": "^6.3.0" } }, + "lazy-ass": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/lazy-ass/-/lazy-ass-1.6.0.tgz", + "integrity": "sha1-eZllXoZGwX8In90YfRUNMyTVRRM=", + "dev": true + }, "lcid": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", @@ -8526,6 +8708,26 @@ "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", "dev": true }, + "load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } + } + }, "loader-runner": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", @@ -8723,6 +8925,12 @@ "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", "dev": true }, + "map-stream": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", + "integrity": "sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ=", + "dev": true + }, "map-visit": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", @@ -8858,6 +9066,12 @@ "readable-stream": "^2.0.1" } }, + "memorystream": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", + "integrity": "sha1-htcJCzDORV1j+64S3aUaR93K+bI=", + "dev": true + }, "merge-descriptors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", @@ -9748,6 +9962,36 @@ "npm-package-arg": "^8.0.0" } }, + "npm-run-all": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz", + "integrity": "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "chalk": "^2.4.1", + "cross-spawn": "^6.0.5", + "memorystream": "^0.3.1", + "minimatch": "^3.0.4", + "pidtree": "^0.3.0", + "read-pkg": "^3.0.0", + "shell-quote": "^1.6.1", + "string.prototype.padend": "^3.0.0" + }, + "dependencies": { + "read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", + "dev": true, + "requires": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + } + } + } + }, "npm-run-path": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", @@ -9766,12 +10010,6 @@ "boolbase": "~1.0.0" } }, - "null-check": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/null-check/-/null-check-1.0.0.tgz", - "integrity": "sha1-l33/1xdgErnsMNKjnbXPcqBDnt0=", - "dev": true - }, "num2fraction": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", @@ -10443,6 +10681,15 @@ } } }, + "pause-stream": { + "version": "0.0.11", + "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", + "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=", + "dev": true, + "requires": { + "through": "~2.3" + } + }, "pbkdf2": { "version": "3.0.17", "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz", @@ -10468,6 +10715,12 @@ "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", "dev": true }, + "pidtree": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.3.1.tgz", + "integrity": "sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==", + "dev": true + }, "pify": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", @@ -11194,9 +11447,9 @@ "dev": true }, "prettier": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.19.1.tgz", - "integrity": "sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.0.4.tgz", + "integrity": "sha512-SVJIQ51spzFDvh4fIbCLvciiDMCrRhlN3mbZvv/+ycjvmF5E73bKdGfU8QDLNmjYJf+lsGnDBC4UUnvTe5OO0w==", "dev": true }, "pretty-quick": { @@ -11632,11 +11885,14 @@ "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", "dev": true }, - "pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", - "dev": true + "ps-tree": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ps-tree/-/ps-tree-1.2.0.tgz", + "integrity": "sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA==", + "dev": true, + "requires": { + "event-stream": "=3.3.4" + } }, "psl": { "version": "1.8.0", @@ -12439,6 +12695,26 @@ "uuid": "^3.3.2" } }, + "request-promise-core": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.3.tgz", + "integrity": "sha512-QIs2+ArIGQVp5ZYbWD5ZLCY29D5CfWizP8eWnm8FoGD1TX61veauETVQbrV60662V0oFBkrDOuaBI8XgtuyYAQ==", + "dev": true, + "requires": { + "lodash": "^4.17.15" + } + }, + "request-promise-native": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.8.tgz", + "integrity": "sha512-dapwLGqkHtwL5AEbfenuzjTYg35Jd6KPytsC2/TLkVMz8rm+tNt72MGUWT1RP/aYawMpN6HqbNGBQaRcBtjQMQ==", + "dev": true, + "requires": { + "request-promise-core": "1.1.3", + "stealthy-require": "^1.1.1", + "tough-cookie": "^2.3.3" + } + }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -13063,6 +13339,12 @@ "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", "dev": true }, + "shell-quote": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz", + "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==", + "dev": true + }, "signal-exit": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", @@ -13595,6 +13877,15 @@ "chalk": "^2.0.1" } }, + "split": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", + "integrity": "sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8=", + "dev": true, + "requires": { + "through": "2" + } + }, "split-string": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", @@ -13641,6 +13932,112 @@ "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", "dev": true }, + "start-server-and-test": { + "version": "1.10.11", + "resolved": "https://registry.npmjs.org/start-server-and-test/-/start-server-and-test-1.10.11.tgz", + "integrity": "sha512-CZilaj293uQWdD4vgOxTOuzlCWxOyBm6bzmH1r6OGLG/q5zcBmGYevLfOimkg0kSn9jLHwYSXLuoKG/DDQJhww==", + "dev": true, + "requires": { + "bluebird": "3.7.2", + "check-more-types": "2.24.0", + "debug": "4.1.1", + "execa": "3.4.0", + "lazy-ass": "1.6.0", + "ps-tree": "1.2.0", + "wait-on": "4.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.2.tgz", + "integrity": "sha512-PD6G8QG3S4FK/XCGFbEQrDqO2AnMMsy0meR7lerlIOHAAbkuavGU/pOqprrlvfTNjvowivTeBsjebAL0NSoMxw==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "execa": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-3.4.0.tgz", + "integrity": "sha512-r9vdGQk4bmCuK1yKQu1KTwcT2zwfWdbdaXfCtAh+5nU/4fSX+JAb7vZGvI5naJrQlvONrEB20jeruESI69530g==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "p-finally": "^2.0.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + } + }, + "get-stream": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.1.0.tgz", + "integrity": "sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "is-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", + "dev": true + }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "requires": { + "path-key": "^3.0.0" + } + }, + "p-finally": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-2.0.1.tgz", + "integrity": "sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw==", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, "state-toggle": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.3.tgz", @@ -13673,6 +14070,12 @@ "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", "dev": true }, + "stealthy-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", + "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", + "dev": true + }, "stream-browserify": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", @@ -13683,6 +14086,15 @@ "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=", + "dev": true, + "requires": { + "duplexer": "~0.1.1" + } + }, "stream-each": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", @@ -13762,6 +14174,16 @@ "strip-ansi": "^4.0.0" } }, + "string.prototype.padend": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.0.tgz", + "integrity": "sha512-3aIv8Ffdp8EZj8iLwREGpQaUZiPyrWrpzMBHvkiSW/bK/EGve9np07Vwy7IJ5waydpGXzQZu/F8Oze2/IWkBaA==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1" + } + }, "string.prototype.trimend": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.0.tgz", @@ -14343,27 +14765,16 @@ "integrity": "sha512-ikUlS+/BcImLhNYyIgZcEmq4byc31QpC+46/6Jm5ECWkVFhf8SM2Fp/0pMVXPX6vk45SMCwrP4Taxucne8I0VA==" }, "ts-node": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-5.0.1.tgz", - "integrity": "sha512-XK7QmDcNHVmZkVtkiwNDWiERRHPyU8nBqZB1+iv2UhOG0q3RQ9HsZ2CMqISlFbxjrYFGfG2mX7bW4dAyxBVzUw==", + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.8.2.tgz", + "integrity": "sha512-duVj6BpSpUpD/oM4MfhO98ozgkp3Gt9qIp3jGxwU2DFvl/3IRaEAvbLa8G60uS7C77457e/m5TMowjedeRxI1Q==", "dev": true, "requires": { - "arrify": "^1.0.0", - "chalk": "^2.3.0", - "diff": "^3.1.0", + "arg": "^4.1.0", + "diff": "^4.0.1", "make-error": "^1.1.1", - "minimist": "^1.2.0", - "mkdirp": "^0.5.1", - "source-map-support": "^0.5.3", - "yn": "^2.0.0" - }, - "dependencies": { - "arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", - "dev": true - } + "source-map-support": "^0.5.6", + "yn": "3.1.1" } }, "tslib": { @@ -14372,23 +14783,24 @@ "integrity": "sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA==" }, "tslint": { - "version": "5.11.0", - "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.11.0.tgz", - "integrity": "sha1-mPMMAurjzecAYgHkwzywi0hYHu0=", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/tslint/-/tslint-6.1.1.tgz", + "integrity": "sha512-kd6AQ/IgPRpLn6g5TozqzPdGNZ0q0jtXW4//hRcj10qLYBaa3mTUU2y2MCG+RXZm8Zx+KZi0eA+YCrMyNlF4UA==", "dev": true, "requires": { - "babel-code-frame": "^6.22.0", + "@babel/code-frame": "^7.0.0", "builtin-modules": "^1.1.1", "chalk": "^2.3.0", "commander": "^2.12.1", - "diff": "^3.2.0", + "diff": "^4.0.1", "glob": "^7.1.1", - "js-yaml": "^3.7.0", + "js-yaml": "^3.13.1", "minimatch": "^3.0.4", + "mkdirp": "^0.5.3", "resolve": "^1.3.2", "semver": "^5.3.0", - "tslib": "^1.8.0", - "tsutils": "^2.27.2" + "tslib": "^1.10.0", + "tsutils": "^2.29.0" }, "dependencies": { "builtin-modules": { @@ -14411,10 +14823,19 @@ "integrity": "sha512-xPw9PgNPLG3iKRxmK7DWr+Ea/SzrvfHtjFt5LBl61gk2UBG/DB9kCXRjv+xyIU1rUtnayLeMUVJBcMX8Z17nDg==", "dev": true }, + "tslint-config-security": { + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/tslint-config-security/-/tslint-config-security-1.16.0.tgz", + "integrity": "sha512-wwM+COg4FX1Gl6VnvaTV9zqcUY6cs4XkiP6T3qhc6s20Xy4J9irui6+fkP07yVkrwfcNFneji3YcIwiMvKSQPQ==", + "dev": true, + "requires": { + "safe-regex": "^1.1.0" + } + }, "tslint-config-swimlane": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/tslint-config-swimlane/-/tslint-config-swimlane-4.0.0.tgz", - "integrity": "sha512-es2nQac0kakA3jP+CXAHhC6oGeR8dsJyOsAz7N03R0enWAaegh5GK5uc7a1zAv9mAL75WthXQx2/F0FPUBKIFw==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/tslint-config-swimlane/-/tslint-config-swimlane-5.0.0.tgz", + "integrity": "sha512-P3XITkDl5mbsewnPKBziYRkX2kfm3otqj2mIJZS+L8pXA6UNCyHgJd3+7DfyUe8NjvBuh5ubKpygjrtBcwfn5g==", "dev": true }, "tsutils": { @@ -14483,6 +14904,12 @@ "integrity": "sha512-MYlEfn5VrLNsgudQTVJeNaQFUAI7DkhnOjdpAp4T+ku1TfQClewlbSuTVHiA+8skNBgaf02TL/kLOvig4y3G8w==", "dev": true }, + "ua-parser-js": { + "version": "0.7.21", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.21.tgz", + "integrity": "sha512-+O8/qh/Qj8CgC6eYBVBykMrNtp5Gebn4dlGD/kKXVkJNDwyrAwSIqwz8CDf+tsAIWVycKcku6gIXJ0qwx/ZXaQ==", + "dev": true + }, "uglify-js": { "version": "3.8.1", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.8.1.tgz", @@ -14951,34 +15378,6 @@ "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", "dev": true }, - "useragent": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/useragent/-/useragent-2.3.0.tgz", - "integrity": "sha512-4AoH4pxuSvHCjqLO04sU6U/uE65BYza8l/KKBS0b0hnUPWi+cQ2BpeTEwejCSx9SPV5/U03nniDTrWx5NrmKdw==", - "dev": true, - "requires": { - "lru-cache": "4.1.x", - "tmp": "0.0.x" - }, - "dependencies": { - "lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "dev": true, - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true - } - } - }, "util": { "version": "0.10.4", "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", @@ -15174,6 +15573,20 @@ "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=", "dev": true }, + "wait-on": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-4.0.0.tgz", + "integrity": "sha512-QrW3J8LzS5ADPfD9Rx5S6KJck66xkqyiFKQs9jmUTkIhiEOmkzU7WRZc+MjsnmkrgjitS2xQ4bb13hnlQnKBUQ==", + "dev": true, + "requires": { + "@hapi/joi": "^16.1.8", + "lodash": "^4.17.15", + "minimist": "^1.2.0", + "request": "^2.88.0", + "request-promise-native": "^1.0.8", + "rxjs": "^6.5.4" + } + }, "watchpack": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.1.tgz", @@ -17286,9 +17699,9 @@ "dev": true }, "yn": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yn/-/yn-2.0.0.tgz", - "integrity": "sha1-5a2ryKz0CPY4X8dklWhMiOavaJo=", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", "dev": true }, "zone.js": { diff --git a/package.json b/package.json index 9a5ddb49..b2128a66 100644 --- a/package.json +++ b/package.json @@ -5,19 +5,22 @@ "scripts": { "ng": "ng", "start": "ng serve", - "build": "npm run build-pkg && ng build", - "package": "npm run build-pkg", - "unit-test": "npm run build-pkg && ng test", - "test": "npm run cypress", + "build": "ng build", + "build:lib": "ng build @swimlane/ngx-graph", + "build:lib:prod": "ng build @swimlane/ngx-graph --prod", + "test": "npm run lint", "lint": "ng lint", "e2e": "ng e2e", - "build-pkg": "ng build @swimlane/ngx-graph && npm run copy-files", + "prettier": "prettier --write \"{src,projects}/**/*.{js,ts,scss,css,md,json}\"", + "prettier:ci": "prettier --check \"{src,projects}/**/*.{js,ts,scss,css,md,json}\"", "copy-files": "cp README.md projects/dist/ngx-graph/README.md && cp LICENSE projects/dist/ngx-graph/LICENSE", "build-docs": "cross-env NODE_ENV=production ng build --prod --no-aot --no-build-optimizer --base-href=\"/ngx-graph/\"", - "predeploy-docs": "npm run build-docs ", + "predeploy-docs": "npm run build-docs", "deploy-docs": "angular-cli-ghpages --dir ./dist/ngxGraph", - "ci": "npm run build && start-server-and-test start http-get://localhost:4200 cypress", - "publish": "npm publish projects/dist/ngx-graph" + "ci": "run-s lint prettier:ci", + "package": "run-s build:lib:prod copy-files", + "prepublish:lib": "npm run package", + "publish:lib": "npm publish projects/dist/ngx-graph" }, "license": "MIT", "dependencies": { @@ -77,32 +80,35 @@ "@angular/compiler-cli": "^9.1.0", "@angular/language-service": "^9.1.0", "@babel/core": "^7.7.7", - "@swimlane/prettier-config-swimlane": "^2.0.0", - "@types/jasmine": "~2.8.6", + "@swimlane/prettier-config-swimlane": "^3.0.2", + "@types/jasmine": "^3.5.10", "@types/jasminewd2": "~2.0.3", "@types/mdast": "^3.0.3", "@types/node": "^12.12.34", "@types/unist": "^2.0.2", "@types/vfile": "^4.0.0", "angular-cli-ghpages": "^0.5.3", - "codelyzer": "^5.1.2", - "cross-env": "^6.0.3", - "husky": "^4.2.3", - "jasmine-core": "~2.99.1", - "jasmine-spec-reporter": "~4.2.1", - "karma": "^4.1.0", - "karma-chrome-launcher": "~2.2.0", + "codelyzer": "^5.2.2", + "cross-env": "^7.0.2", + "husky": "^4.2.4", + "jasmine-core": "^3.5.0", + "jasmine-spec-reporter": "^5.0.1", + "karma": "^5.0.0", + "karma-chrome-launcher": "^3.1.0", "karma-coverage-istanbul-reporter": "~2.0.0", - "karma-jasmine": "~1.1.1", - "karma-jasmine-html-reporter": "^0.2.2", + "karma-jasmine": "^3.1.1", + "karma-jasmine-html-reporter": "^1.5.3", "ng-packagr": "^9.0.3", - "prettier": "^1.19.1", + "npm-run-all": "^4.1.5", + "prettier": "^2.0.4", "pretty-quick": "^2.0.1", - "protractor": "^5.4.0", - "ts-node": "~5.0.1", - "tslint": "~5.11.0", + "protractor": "^5.4.3", + "start-server-and-test": "^1.10.11", + "ts-node": "^8.8.2", + "tslint": "^6.1.1", "tslint-config-prettier": "^1.17.0", - "tslint-config-swimlane": "^4.0.0", + "tslint-config-security": "^1.16.0", + "tslint-config-swimlane": "^5.0.0", "typescript": "~3.8.0" }, "browser": { diff --git a/projects/swimlane/ngx-graph/src/lib/enums/panning.enum.ts b/projects/swimlane/ngx-graph/src/lib/enums/panning.enum.ts index a40fbd06..a2718727 100644 --- a/projects/swimlane/ngx-graph/src/lib/enums/panning.enum.ts +++ b/projects/swimlane/ngx-graph/src/lib/enums/panning.enum.ts @@ -1,5 +1,5 @@ export enum PanningAxis { Both = 'both', Horizontal = 'horizontal', - Vertical = 'vertical', -} \ No newline at end of file + Vertical = 'vertical' +} diff --git a/projects/swimlane/ngx-graph/src/lib/graph/graph.component.ts b/projects/swimlane/ngx-graph/src/lib/graph/graph.component.ts index b57718ce..9a1f7747 100644 --- a/projects/swimlane/ngx-graph/src/lib/graph/graph.component.ts +++ b/projects/swimlane/ngx-graph/src/lib/graph/graph.component.ts @@ -395,8 +395,9 @@ export class GraphComponent extends BaseChartComponent implements OnInit, OnChan const oldNodes: Set = new Set(); this.graph.nodes.map(n => { - n.transform = `translate(${n.position.x - n.dimension.width / 2 || 0}, ${n.position.y - n.dimension.height / 2 || - 0})`; + n.transform = `translate(${n.position.x - n.dimension.width / 2 || 0}, ${ + n.position.y - n.dimension.height / 2 || 0 + })`; if (!n.data) { n.data = {}; } @@ -407,8 +408,9 @@ export class GraphComponent extends BaseChartComponent implements OnInit, OnChan const oldClusters: Set = new Set(); (this.graph.clusters || []).map(n => { - n.transform = `translate(${n.position.x - n.dimension.width / 2 || 0}, ${n.position.y - n.dimension.height / 2 || - 0})`; + n.transform = `translate(${n.position.x - n.dimension.width / 2 || 0}, ${ + n.position.y - n.dimension.height / 2 || 0 + })`; if (!n.data) { n.data = {}; } @@ -1079,11 +1081,11 @@ export class GraphComponent extends BaseChartComponent implements OnInit, OnChan if (points.length % 2 === 1) { edge.midPoint = points[Math.floor(points.length / 2)]; } else { - const first = points[points.length / 2]; - const second = points[points.length / 2 - 1]; + const _first = points[points.length / 2]; + const _second = points[points.length / 2 - 1]; edge.midPoint = { - x: (first.x + second.x) / 2, - y: (first.y + second.y) / 2 + x: (_first.x + _second.x) / 2, + y: (_first.y + _second.y) / 2 }; } } diff --git a/projects/swimlane/ngx-graph/src/lib/graph/layouts/colaForceDirected.ts b/projects/swimlane/ngx-graph/src/lib/graph/layouts/colaForceDirected.ts index d187f249..1aa8fb7b 100644 --- a/projects/swimlane/ngx-graph/src/lib/graph/layouts/colaForceDirected.ts +++ b/projects/swimlane/ngx-graph/src/lib/graph/layouts/colaForceDirected.ts @@ -163,8 +163,9 @@ export class ColaForceDirectedLayout implements Layout { width: (node.dimension && node.dimension.width) || 20, height: (node.dimension && node.dimension.height) || 20 }, - transform: `translate(${node.x - ((node.dimension && node.dimension.width) || 20) / 2 || 0}, ${node.y - - ((node.dimension && node.dimension.height) || 20) / 2 || 0})` + transform: `translate(${node.x - ((node.dimension && node.dimension.width) || 20) / 2 || 0}, ${ + node.y - ((node.dimension && node.dimension.height) || 20) / 2 || 0 + })` })); this.outputGraph.edges = internalGraph.links diff --git a/projects/swimlane/ngx-graph/src/lib/graph/layouts/d3ForceDirected.ts b/projects/swimlane/ngx-graph/src/lib/graph/layouts/d3ForceDirected.ts index 9970e30a..22647d14 100644 --- a/projects/swimlane/ngx-graph/src/lib/graph/layouts/d3ForceDirected.ts +++ b/projects/swimlane/ngx-graph/src/lib/graph/layouts/d3ForceDirected.ts @@ -46,9 +46,7 @@ export function toD3Node(maybeNode: string | D3Node): D3Node { export class D3ForceDirectedLayout implements Layout { defaultSettings: D3ForceDirectedSettings = { - force: forceSimulation() - .force('charge', forceManyBody().strength(-150)) - .force('collide', forceCollide(5)), + force: forceSimulation().force('charge', forceManyBody().strength(-150)).force('collide', forceCollide(5)), forceLink: forceLink() .id(node => node.id) .distance(() => 100) @@ -117,8 +115,9 @@ export class D3ForceDirectedLayout implements Layout { width: (node.dimension && node.dimension.width) || 20, height: (node.dimension && node.dimension.height) || 20 }, - transform: `translate(${node.x - ((node.dimension && node.dimension.width) || 20) / 2 || 0}, ${node.y - - ((node.dimension && node.dimension.height) || 20) / 2 || 0})` + transform: `translate(${node.x - ((node.dimension && node.dimension.width) || 20) / 2 || 0}, ${ + node.y - ((node.dimension && node.dimension.height) || 20) / 2 || 0 + })` })); this.outputGraph.edges = this.d3Graph.edges.map(edge => ({ diff --git a/projects/swimlane/ngx-graph/src/lib/graph/layouts/dagre.ts b/projects/swimlane/ngx-graph/src/lib/graph/layouts/dagre.ts index 572c298b..e68088ca 100644 --- a/projects/swimlane/ngx-graph/src/lib/graph/layouts/dagre.ts +++ b/projects/swimlane/ngx-graph/src/lib/graph/layouts/dagre.ts @@ -93,8 +93,8 @@ export class DagreLayout implements Layout { createDagreGraph(graph: Graph): any { const settings = Object.assign({}, this.defaultSettings, this.settings); - this.dagreGraph = new dagre.graphlib.Graph({compound: settings.compound, multigraph: settings.multigraph}); - + this.dagreGraph = new dagre.graphlib.Graph({ compound: settings.compound, multigraph: settings.multigraph }); + this.dagreGraph.setGraph({ rankdir: settings.orientation, marginx: settings.marginX, diff --git a/projects/swimlane/ngx-graph/src/lib/graph/mouse-wheel.directive.ts b/projects/swimlane/ngx-graph/src/lib/graph/mouse-wheel.directive.ts index 21606e24..f4a7e9b3 100644 --- a/projects/swimlane/ngx-graph/src/lib/graph/mouse-wheel.directive.ts +++ b/projects/swimlane/ngx-graph/src/lib/graph/mouse-wheel.directive.ts @@ -6,6 +6,7 @@ import { Directive, Output, HostListener, EventEmitter } from '@angular/core'; * * @export */ +// tslint:disable-next-line: directive-selector @Directive({ selector: '[mouseWheel]' }) export class MouseWheelDirective { @Output() diff --git a/projects/swimlane/ngx-graph/src/lib/models/edge.model.ts b/projects/swimlane/ngx-graph/src/lib/models/edge.model.ts index 70b056b4..0b4abca6 100644 --- a/projects/swimlane/ngx-graph/src/lib/models/edge.model.ts +++ b/projects/swimlane/ngx-graph/src/lib/models/edge.model.ts @@ -1,4 +1,4 @@ -import { NodePosition } from "./node.model"; +import { NodePosition } from './node.model'; export interface Edge { id?: string; @@ -13,5 +13,5 @@ export interface Edge { oldLine?: any; oldTextPath?: string; textPath?: string; - midPoint?: NodePosition + midPoint?: NodePosition; } diff --git a/projects/swimlane/ngx-graph/src/lib/utils/color-sets.ts b/projects/swimlane/ngx-graph/src/lib/utils/color-sets.ts index edf1d6d7..9ceb7523 100644 --- a/projects/swimlane/ngx-graph/src/lib/utils/color-sets.ts +++ b/projects/swimlane/ngx-graph/src/lib/utils/color-sets.ts @@ -4,7 +4,16 @@ export let colorSets = [ selectable: true, group: 'Ordinal', domain: [ - '#647c8a', '#3f51b5', '#2196f3', '#00b862', '#afdf0a', '#a7b61a', '#f3e562', '#ff9800', '#ff5722', '#ff4514' + '#647c8a', + '#3f51b5', + '#2196f3', + '#00b862', + '#afdf0a', + '#a7b61a', + '#f3e562', + '#ff9800', + '#ff5722', + '#ff4514' ] }, { @@ -12,7 +21,16 @@ export let colorSets = [ selectable: true, group: 'Ordinal', domain: [ - '#bf9d76', '#e99450', '#d89f59', '#f2dfa7', '#a5d7c6', '#7794b1', '#afafaf', '#707160', '#ba9383', '#d9d5c3' + '#bf9d76', + '#e99450', + '#d89f59', + '#f2dfa7', + '#a5d7c6', + '#7794b1', + '#afafaf', + '#707160', + '#ba9383', + '#d9d5c3' ] }, { @@ -20,23 +38,39 @@ export let colorSets = [ selectable: true, group: 'Ordinal', domain: [ - '#a8385d', '#7aa3e5', '#a27ea8', '#aae3f5', '#adcded', '#a95963', '#8796c0', '#7ed3ed', '#50abcc', '#ad6886' + '#a8385d', + '#7aa3e5', + '#a27ea8', + '#aae3f5', + '#adcded', + '#a95963', + '#8796c0', + '#7ed3ed', + '#50abcc', + '#ad6886' ] }, { name: 'fire', selectable: true, group: 'Ordinal', - domain: [ - '#ff3d00', '#bf360c', '#ff8f00', '#ff6f00', '#ff5722', '#e65100', '#ffca28', '#ffab00' - ] + domain: ['#ff3d00', '#bf360c', '#ff8f00', '#ff6f00', '#ff5722', '#e65100', '#ffca28', '#ffab00'] }, { name: 'solar', selectable: true, group: 'Continuous', domain: [ - '#fff8e1', '#ffecb3', '#ffe082', '#ffd54f', '#ffca28', '#ffc107', '#ffb300', '#ffa000', '#ff8f00', '#ff6f00' + '#fff8e1', + '#ffecb3', + '#ffe082', + '#ffd54f', + '#ffca28', + '#ffc107', + '#ffb300', + '#ffa000', + '#ff8f00', + '#ff6f00' ] }, { @@ -44,7 +78,16 @@ export let colorSets = [ selectable: true, group: 'Continuous', domain: [ - '#e1f5fe', '#b3e5fc', '#81d4fa', '#4fc3f7', '#29b6f6', '#03a9f4', '#039be5', '#0288d1', '#0277bd', '#01579b' + '#e1f5fe', + '#b3e5fc', + '#81d4fa', + '#4fc3f7', + '#29b6f6', + '#03a9f4', + '#039be5', + '#0288d1', + '#0277bd', + '#01579b' ] }, { @@ -52,7 +95,16 @@ export let colorSets = [ selectable: true, group: 'Continuous', domain: [ - '#e0f7fa', '#b2ebf2', '#80deea', '#4dd0e1', '#26c6da', '#00bcd4', '#00acc1', '#0097a7', '#00838f', '#006064' + '#e0f7fa', + '#b2ebf2', + '#80deea', + '#4dd0e1', + '#26c6da', + '#00bcd4', + '#00acc1', + '#0097a7', + '#00838f', + '#006064' ] }, { @@ -60,7 +112,16 @@ export let colorSets = [ selectable: false, group: 'Ordinal', domain: [ - '#A10A28', '#D3342D', '#EF6D49', '#FAAD67', '#FDDE90', '#DBED91', '#A9D770', '#6CBA67', '#2C9653', '#146738' + '#A10A28', + '#D3342D', + '#EF6D49', + '#FAAD67', + '#FDDE90', + '#DBED91', + '#A9D770', + '#6CBA67', + '#2C9653', + '#146738' ] }, { @@ -68,7 +129,16 @@ export let colorSets = [ selectable: false, group: 'Ordinal', domain: [ - '#1D68FB', '#33C0FC', '#4AFFFE', '#AFFFFF', '#FFFC63', '#FDBD2D', '#FC8A25', '#FA4F1E', '#FA141B', '#BA38D1' + '#1D68FB', + '#33C0FC', + '#4AFFFE', + '#AFFFFF', + '#FFFC63', + '#FDBD2D', + '#FC8A25', + '#FA4F1E', + '#FA141B', + '#BA38D1' ] }, { @@ -76,7 +146,16 @@ export let colorSets = [ selectable: false, group: 'Ordinal', domain: [ - '#55C22D', '#C1F33D', '#3CC099', '#AFFFFF', '#8CFC9D', '#76CFFA', '#BA60FB', '#EE6490', '#C42A1C', '#FC9F32' + '#55C22D', + '#C1F33D', + '#3CC099', + '#AFFFFF', + '#8CFC9D', + '#76CFFA', + '#BA60FB', + '#EE6490', + '#C42A1C', + '#FC9F32' ] }, { @@ -84,7 +163,16 @@ export let colorSets = [ selectable: false, group: 'Ordinal', domain: [ - '#2597FB', '#65EBFD', '#99FDD0', '#FCEE4B', '#FEFCFA', '#FDD6E3', '#FCB1A8', '#EF6F7B', '#CB96E8', '#EFDEE0' + '#2597FB', + '#65EBFD', + '#99FDD0', + '#FCEE4B', + '#FEFCFA', + '#FDD6E3', + '#FCB1A8', + '#EF6F7B', + '#CB96E8', + '#EFDEE0' ] }, { @@ -92,7 +180,16 @@ export let colorSets = [ selectable: false, group: 'Ordinal', domain: [ - '#FF3333', '#FF33FF', '#CC33FF', '#0000FF', '#33CCFF', '#33FFFF', '#33FF66', '#CCFF33', '#FFCC00', '#FF6600' + '#FF3333', + '#FF33FF', + '#CC33FF', + '#0000FF', + '#33CCFF', + '#33FFFF', + '#33FF66', + '#CCFF33', + '#FFCC00', + '#FF6600' ] }, { @@ -100,7 +197,16 @@ export let colorSets = [ selectable: false, group: 'Ordinal', domain: [ - '#FAC51D', '#66BD6D', '#FAA026', '#29BB9C', '#E96B56', '#55ACD2', '#B7332F', '#2C83C9', '#9166B8', '#92E7E8' + '#FAC51D', + '#66BD6D', + '#FAA026', + '#29BB9C', + '#E96B56', + '#55ACD2', + '#B7332F', + '#2C83C9', + '#9166B8', + '#92E7E8' ] }, { @@ -108,8 +214,21 @@ export let colorSets = [ selectable: false, group: 'Ordinal', domain: [ - '#2B1B5A', '#501356', '#183356', '#28203F', '#391B3C', '#1E2B3C', '#120634', - '#2D0432', '#051932', '#453080', '#75267D', '#2C507D', '#4B3880', '#752F7D', '#35547D' + '#2B1B5A', + '#501356', + '#183356', + '#28203F', + '#391B3C', + '#1E2B3C', + '#120634', + '#2D0432', + '#051932', + '#453080', + '#75267D', + '#2C507D', + '#4B3880', + '#752F7D', + '#35547D' ] }, { @@ -117,8 +236,21 @@ export let colorSets = [ selectable: false, group: 'Ordinal', domain: [ - '#4e31a5', '#9c25a7', '#3065ab', '#57468b', '#904497', '#46648b', - '#32118d', '#a00fb3', '#1052a2', '#6e51bd', '#b63cc3', '#6c97cb', '#8671c1', '#b455be', '#7496c3' + '#4e31a5', + '#9c25a7', + '#3065ab', + '#57468b', + '#904497', + '#46648b', + '#32118d', + '#a00fb3', + '#1052a2', + '#6e51bd', + '#b63cc3', + '#6c97cb', + '#8671c1', + '#b455be', + '#7496c3' ] } ]; diff --git a/projects/swimlane/ngx-graph/src/lib/utils/throttle.ts b/projects/swimlane/ngx-graph/src/lib/utils/throttle.ts index d529809a..5676ea69 100644 --- a/projects/swimlane/ngx-graph/src/lib/utils/throttle.ts +++ b/projects/swimlane/ngx-graph/src/lib/utils/throttle.ts @@ -1,4 +1,3 @@ - /** * Throttle a function * @@ -22,7 +21,7 @@ export function throttle(func: any, wait: number, options?: any) { result = func.apply(context, args); } - return function() { + return function () { const now = +new Date(); if (!previous && options.leading === false) { diff --git a/projects/swimlane/ngx-graph/src/test.ts b/projects/swimlane/ngx-graph/src/test.ts index e11ff1c9..be4725e7 100644 --- a/projects/swimlane/ngx-graph/src/test.ts +++ b/projects/swimlane/ngx-graph/src/test.ts @@ -4,18 +4,12 @@ import 'core-js/es7/reflect'; import 'zone.js/dist/zone'; import 'zone.js/dist/zone-testing'; import { getTestBed } from '@angular/core/testing'; -import { - BrowserDynamicTestingModule, - platformBrowserDynamicTesting -} from '@angular/platform-browser-dynamic/testing'; +import { BrowserDynamicTestingModule, platformBrowserDynamicTesting } from '@angular/platform-browser-dynamic/testing'; declare const require: any; // First, initialize the Angular testing environment. -getTestBed().initTestEnvironment( - BrowserDynamicTestingModule, - platformBrowserDynamicTesting() -); +getTestBed().initTestEnvironment(BrowserDynamicTestingModule, platformBrowserDynamicTesting()); // Then we find all the tests. const context = require.context('./', true, /\.spec\.ts$/); // And load the modules. diff --git a/projects/swimlane/ngx-graph/tsconfig.lib.prod.json b/projects/swimlane/ngx-graph/tsconfig.lib.prod.json index b1d501ab..cbae7942 100644 --- a/projects/swimlane/ngx-graph/tsconfig.lib.prod.json +++ b/projects/swimlane/ngx-graph/tsconfig.lib.prod.json @@ -3,4 +3,4 @@ "angularCompilerOptions": { "enableIvy": false } -} \ No newline at end of file +} diff --git a/projects/swimlane/ngx-graph/tslint.json b/projects/swimlane/ngx-graph/tslint.json index 73f120b7..bac0ac34 100644 --- a/projects/swimlane/ngx-graph/tslint.json +++ b/projects/swimlane/ngx-graph/tslint.json @@ -1,17 +1,7 @@ { - "extends": "../../tslint.json", - "rules": { - "directive-selector": [ - true, - "attribute", - "lib", - "camelCase" - ], - "component-selector": [ - true, - "element", - "lib", - "kebab-case" - ] - } + "extends": "../../../tslint.json", + "rules": { + "directive-selector": [true, "attribute", "ngx", "camelCase"], + "component-selector": [true, "element", "ngx", "kebab-case"] + } } diff --git a/src/app/app-routing.module.ts b/src/app/app-routing.module.ts index 3847edbd..59fdbee7 100644 --- a/src/app/app-routing.module.ts +++ b/src/app/app-routing.module.ts @@ -1,15 +1,9 @@ import { NgModule } from '@angular/core'; import { RouterModule, Routes } from '@angular/router'; -import { - Location, - LocationStrategy, - PathLocationStrategy -} from '@angular/common'; +import { Location, LocationStrategy, PathLocationStrategy } from '@angular/common'; import { DocSPACoreComponent, LocationWithSlashes } from '@swimlane/docspa-core'; -const routes: Routes = [ - { path: '**', component: DocSPACoreComponent } -]; +const routes: Routes = [{ path: '**', component: DocSPACoreComponent }]; @NgModule({ imports: [RouterModule.forRoot(routes)], @@ -19,4 +13,4 @@ const routes: Routes = [ { provide: LocationStrategy, useClass: PathLocationStrategy } ] }) -export class AppRoutingModule { } \ No newline at end of file +export class AppRoutingModule {} diff --git a/src/app/app.module.ts b/src/app/app.module.ts index dc9bd47c..bf5c4113 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -1,7 +1,13 @@ import { BrowserModule } from '@angular/platform-browser'; import { NgModule } from '@angular/core'; import { AppComponent } from './app.component'; -import { DocspaCoreModule, MarkdownModule, MarkdownElementsModule, RuntimeContentModule, DocsifyPluginsModule } from '@swimlane/docspa-core'; +import { + DocspaCoreModule, + MarkdownModule, + MarkdownElementsModule, + RuntimeContentModule, + DocsifyPluginsModule +} from '@swimlane/docspa-core'; import { DocspaStackblitzModule } from '@swimlane/docspa-stackblitz'; import { config } from '../docspa.config'; import { DemoModule } from 'src/docs/demos/demo.module'; @@ -15,18 +21,14 @@ import { AppRoutingModule } from './app-routing.module'; @NgModule({ declarations: [AppComponent], imports: [ - BrowserModule, - DocspaCoreModule.forRoot(config, environment), - DemoModule, + BrowserModule, + DocspaCoreModule.forRoot(config, environment), + DemoModule, MarkdownModule.forRoot(preset), MarkdownElementsModule.forRoot(), LoggerModule.forRoot({ level: NgxLoggerLevel.WARN }), RuntimeContentModule.forRoot({ - imports: [ - NgxGraphModule, - NgxChartsModule, - DemoModule - ] + imports: [NgxGraphModule, NgxChartsModule, DemoModule] }), DocsifyPluginsModule, DocspaStackblitzModule, diff --git a/src/docs/_sidebar2.md b/src/docs/_sidebar2.md index 863c7f3a..20c36793 100644 --- a/src/docs/_sidebar2.md +++ b/src/docs/_sidebar2.md @@ -1 +1 @@ - \ No newline at end of file + diff --git a/src/docs/demos/components/ngx-graph-custom-curve/customDagreNodesOnly.ts b/src/docs/demos/components/ngx-graph-custom-curve/customDagreNodesOnly.ts index ad8cd86f..c87ba28d 100644 --- a/src/docs/demos/components/ngx-graph-custom-curve/customDagreNodesOnly.ts +++ b/src/docs/demos/components/ngx-graph-custom-curve/customDagreNodesOnly.ts @@ -99,10 +99,7 @@ export class DagreNodesOnlyLayout implements Layout { const curveDistance = this.settings.curveDistance || this.defaultSettings.curveDistance; // generate new points - edge.points = [ - startingPoint, - endingPoint - ]; + edge.points = [startingPoint, endingPoint]; const edgeLabelId = `${edge.source}${EDGE_KEY_DELIM}${edge.target}${EDGE_KEY_DELIM}${DEFAULT_EDGE_NAME}`; const matchingEdgeLabel = graph.edgeLabels[edgeLabelId]; if (matchingEdgeLabel) { @@ -145,11 +142,11 @@ export class DagreNodesOnlyLayout implements Layout { }); this.dagreEdges = graph.edges.map(l => { - let linkId: number = 1; + let linkId: number = 1; const newLink: any = Object.assign({}, l); if (!newLink.id) { - newLink.id = 'a'+linkId.toString(); - linkId++; + newLink.id = 'a' + linkId.toString(); + linkId++; } return newLink; }); diff --git a/src/docs/demos/components/ngx-graph-custom-curve/customStepCurved.ts b/src/docs/demos/components/ngx-graph-custom-curve/customStepCurved.ts index 2668b89c..35d0c6db 100644 --- a/src/docs/demos/components/ngx-graph-custom-curve/customStepCurved.ts +++ b/src/docs/demos/components/ngx-graph-custom-curve/customStepCurved.ts @@ -4,73 +4,76 @@ export function Step(context, t) { } Step.prototype = { - areaStart: function() { + areaStart() { this._line = 0; }, - areaEnd: function() { + areaEnd() { this._line = NaN; }, - lineStart: function() { + lineStart() { this._x = this._y = NaN; this._point = 0; }, - lineEnd: function() { + lineEnd() { if (0 < this._t && this._t < 1 && this._point === 2) this._context.lineTo(this._x, this._y); if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath(); - if (this._line >= 0) this._t = 1 - this._t, this._line = 1 - this._line; + // tslint:disable-next-line: ban-comma-operator + if (this._line >= 0) (this._t = 1 - this._t), (this._line = 1 - this._line); }, - point: function(x, y) { - x = +x, y = +y; + point(x, y) { + x = +x; + y = +y; switch (this._point) { - case 0: case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break; case 1: this._point = 2; // proceed - default: - { - var xN, yN, mYb, mYa; - if (this._t <= 0) { - xN = Math.abs(x - this._x) * 0.25; - yN = Math.abs(y - this._y) * 0.25; - mYb = (this._y < y) ? this._y + yN : this._y - yN; - mYa = (this._y > y) ? y + yN : y - yN; - - this._context.quadraticCurveTo(this._x, this._y, this._x, mYb); - this._context.lineTo(this._x, mYa); - this._context.quadraticCurveTo(this._x, y, this._x + xN, y); - this._context.lineTo(x - xN, y); + default: { + let xN; + let yN; + let mYb; + let mYa; + if (this._t <= 0) { + xN = Math.abs(x - this._x) * 0.25; + yN = Math.abs(y - this._y) * 0.25; + mYb = this._y < y ? this._y + yN : this._y - yN; + mYa = this._y > y ? y + yN : y - yN; - } else { - var x1 = this._x * (1 - this._t) + x * this._t; + this._context.quadraticCurveTo(this._x, this._y, this._x, mYb); + this._context.lineTo(this._x, mYa); + this._context.quadraticCurveTo(this._x, y, this._x + xN, y); + this._context.lineTo(x - xN, y); + } else { + const x1 = this._x * (1 - this._t) + x * this._t; - xN = Math.abs(x - x1) * 0.25; - yN = Math.abs(y - this._y) * 0.25; - mYb = (this._y < y) ? this._y + yN : this._y - yN; - mYa = (this._y > y) ? y + yN : y - yN; + xN = Math.abs(x - x1) * 0.25; + yN = Math.abs(y - this._y) * 0.25; + mYb = this._y < y ? this._y + yN : this._y - yN; + mYa = this._y > y ? y + yN : y - yN; - this._context.quadraticCurveTo(x1, this._y, x1, mYb); - this._context.lineTo(x1, mYa); - this._context.quadraticCurveTo(x1, y, x1 + xN, y); - this._context.lineTo(x - xN, y); - } - break; + this._context.quadraticCurveTo(x1, this._y, x1, mYb); + this._context.lineTo(x1, mYa); + this._context.quadraticCurveTo(x1, y, x1 + xN, y); + this._context.lineTo(x - xN, y); } + break; + } } - this._x = x, this._y = y; + // tslint:disable-next-line: ban-comma-operator + (this._x = x), (this._y = y); } }; -export const stepRound = function(context) { +export const stepRound = function (context) { return new Step(context, 0.5); }; -export const stepRoundBefore = function(context) { +export const stepRoundBefore = function (context) { return new Step(context, 0); }; -export const stepRoundAfter = function(context) { +export const stepRoundAfter = function (context) { return new Step(context, 1); -}; \ No newline at end of file +}; diff --git a/src/docs/demos/components/ngx-graph-custom-curve/ngx-graph-custom-curve.component.ts b/src/docs/demos/components/ngx-graph-custom-curve/ngx-graph-custom-curve.component.ts index f7135403..d06b38f7 100644 --- a/src/docs/demos/components/ngx-graph-custom-curve/ngx-graph-custom-curve.component.ts +++ b/src/docs/demos/components/ngx-graph-custom-curve/ngx-graph-custom-curve.component.ts @@ -1,14 +1,13 @@ import { Component } from '@angular/core'; import { Layout, Edge, Node } from '@swimlane/ngx-graph'; -import { DagreNodesOnlyLayout } from './customDagreNodesOnly' +import { DagreNodesOnlyLayout } from './customDagreNodesOnly'; import { stepRound } from './customStepCurved'; @Component({ selector: 'ngx-graph-custom-curve', - templateUrl: './ngx-graph-custom-curve.component.html', + templateUrl: './ngx-graph-custom-curve.component.html' }) export class NgxGraphCustomCurve { - public curve: any = stepRound; public layout: Layout = new DagreNodesOnlyLayout(); public links: Edge[] = [ @@ -17,29 +16,34 @@ export class NgxGraphCustomCurve { source: 'first', target: 'second', label: 'is parent of' - }, { + }, + { id: 'b', source: 'first', target: 'third', label: 'custom label' - }, { + }, + { id: 'c', source: 'first', target: 'fourth', label: 'custom label' } ]; - public nodes: Node[] =[ + public nodes: Node[] = [ { id: 'first', label: 'A' - }, { + }, + { id: 'second', label: 'B' - }, { + }, + { id: 'third', label: 'C' - }, { + }, + { id: 'fourth', label: 'D' } diff --git a/src/docs/demos/components/ngx-graph-org-tree/customDagreNodesOnly.ts b/src/docs/demos/components/ngx-graph-org-tree/customDagreNodesOnly.ts index 36103645..8034890a 100644 --- a/src/docs/demos/components/ngx-graph-org-tree/customDagreNodesOnly.ts +++ b/src/docs/demos/components/ngx-graph-org-tree/customDagreNodesOnly.ts @@ -107,7 +107,7 @@ export class DagreNodesOnlyLayout implements Layout { }, { [orderAxis]: endingPoint[orderAxis], - [rankAxis]: (startingPoint[rankAxis] + endingPoint[rankAxis]) / 2, + [rankAxis]: (startingPoint[rankAxis] + endingPoint[rankAxis]) / 2 }, endingPoint ]; @@ -153,11 +153,11 @@ export class DagreNodesOnlyLayout implements Layout { }); this.dagreEdges = graph.edges.map(l => { - let linkId: number = 1; + let linkId: number = 1; const newLink: any = Object.assign({}, l); if (!newLink.id) { newLink.id = linkId; - linkId++; + linkId++; } return newLink; }); diff --git a/src/docs/demos/components/ngx-graph-org-tree/ngx-graph-org-tree.component.scss b/src/docs/demos/components/ngx-graph-org-tree/ngx-graph-org-tree.component.scss index 87ecae98..c1593c7b 100644 --- a/src/docs/demos/components/ngx-graph-org-tree/ngx-graph-org-tree.component.scss +++ b/src/docs/demos/components/ngx-graph-org-tree/ngx-graph-org-tree.component.scss @@ -1,38 +1,38 @@ :host ::ng-deep { + display: block; + height: inherit; + width: inherit; + + .cardContainer { + height: 100; + width: 150; display: block; - height: inherit; - width: inherit; - .cardContainer { - height: 100; - width: 150; - display: block; + .name { + font-size: 24px; + } - .name { - font-size: 24px; - } + label { + display: block; + text-align: center; + font-size: 20px; + margin-top: 4px; + margin-bottom: 8px; + } + } - label { - display: block; - text-align: center; - font-size: 20px; - margin-top: 4px; - margin-bottom: 8px; - } + .linkMidpoint { + ellipse { + fill: white; + stroke: black; + stroke-width: 1; } - .linkMidpoint { - ellipse { - fill:white; - stroke: black; - stroke-width: 1; - } - - text { - stroke: transparent; - fill:black; - text-anchor: middle; - font-size: 10px; - } - } -} \ No newline at end of file + text { + stroke: transparent; + fill: black; + text-anchor: middle; + font-size: 10px; + } + } +} diff --git a/src/docs/demos/components/ngx-graph-org-tree/ngx-graph-org-tree.component.spec.ts b/src/docs/demos/components/ngx-graph-org-tree/ngx-graph-org-tree.component.spec.ts index a3a3a504..46d70e80 100644 --- a/src/docs/demos/components/ngx-graph-org-tree/ngx-graph-org-tree.component.spec.ts +++ b/src/docs/demos/components/ngx-graph-org-tree/ngx-graph-org-tree.component.spec.ts @@ -8,9 +8,8 @@ describe('NgxGraphOrgTreeComponent', () => { beforeEach(async(() => { TestBed.configureTestingModule({ - declarations: [ NgxGraphOrgTreeComponent ] - }) - .compileComponents(); + declarations: [NgxGraphOrgTreeComponent] + }).compileComponents(); })); beforeEach(() => { diff --git a/src/docs/demos/components/ngx-graph-org-tree/ngx-graph-org-tree.component.ts b/src/docs/demos/components/ngx-graph-org-tree/ngx-graph-org-tree.component.ts index 03852fa5..4f1b331d 100644 --- a/src/docs/demos/components/ngx-graph-org-tree/ngx-graph-org-tree.component.ts +++ b/src/docs/demos/components/ngx-graph-org-tree/ngx-graph-org-tree.component.ts @@ -1,6 +1,6 @@ import { Component, OnInit, Input } from '@angular/core'; import { Edge, Node, Layout } from '@swimlane/ngx-graph'; -import { DagreNodesOnlyLayout } from './customDagreNodesOnly' +import { DagreNodesOnlyLayout } from './customDagreNodesOnly'; import * as shape from 'd3-shape'; export class Employee { @@ -18,58 +18,63 @@ export class Employee { styleUrls: ['./ngx-graph-org-tree.component.scss'] }) export class NgxGraphOrgTreeComponent implements OnInit { - @Input() employees: Employee[] = []; public nodes: Node[] = []; public links: Edge[] = []; public layoutSettings = { - orientation: "TB" - } + orientation: 'TB' + }; public curve: any = shape.curveLinear; public layout: Layout = new DagreNodesOnlyLayout(); constructor() { - this.employees = [{ - id: "1", - name: "Employee 1", - office: "Office 1", - role: "Manager", - backgroundColor: "#DC143C", - }, { - id: "2", - name: "Employee 2", - office: "Office 2", - role: "Engineer", - backgroundColor: "#00FFFF", - upperManagerId: "1", - }, { - id: "3", - name: "Employee 3", - office: "Office 3", - role: "Engineer", - backgroundColor: "#00FFFF", - upperManagerId: "1", - }, { - id: "4", - name: "Employee 4", - office: "Office 4", - role: "Engineer", - backgroundColor: "#00FFFF", - upperManagerId: "1", - }, { - id: "5", - name: "Employee 5", - office: "Office 5", - role: "Student", - backgroundColor: "#8A2BE2", - upperManagerId: "4", - }]; + this.employees = [ + { + id: '1', + name: 'Employee 1', + office: 'Office 1', + role: 'Manager', + backgroundColor: '#DC143C' + }, + { + id: '2', + name: 'Employee 2', + office: 'Office 2', + role: 'Engineer', + backgroundColor: '#00FFFF', + upperManagerId: '1' + }, + { + id: '3', + name: 'Employee 3', + office: 'Office 3', + role: 'Engineer', + backgroundColor: '#00FFFF', + upperManagerId: '1' + }, + { + id: '4', + name: 'Employee 4', + office: 'Office 4', + role: 'Engineer', + backgroundColor: '#00FFFF', + upperManagerId: '1' + }, + { + id: '5', + name: 'Employee 5', + office: 'Office 5', + role: 'Student', + backgroundColor: '#8A2BE2', + upperManagerId: '4' + } + ]; } public ngOnInit(): void { for (const employee of this.employees) { - const node: Node = { + const node: Node = { id: employee.id, label: employee.name, data: { @@ -87,14 +92,14 @@ export class NgxGraphOrgTreeComponent implements OnInit { continue; } - const edge: Edge = { + const edge: Edge = { source: employee.upperManagerId, target: employee.id, label: '', data: { linkText: 'Manager of' } - } + }; this.links.push(edge); } @@ -102,7 +107,7 @@ export class NgxGraphOrgTreeComponent implements OnInit { public getStyles(node: Node): any { return { - "background-color": node.data.backgroundColor, - } + 'background-color': node.data.backgroundColor + }; } } diff --git a/src/docs/demos/data-format.ts b/src/docs/demos/data-format.ts index 8939f9a0..74598434 100644 --- a/src/docs/demos/data-format.ts +++ b/src/docs/demos/data-format.ts @@ -1,2 +1 @@ import { Node, Edge, ClusterNode } from '@swimlane/ngx-graph'; - diff --git a/src/docs/main.md b/src/docs/main.md index 5d8e901f..adfe9f57 100644 --- a/src/docs/main.md +++ b/src/docs/main.md @@ -48,41 +48,41 @@ ngx-graph is a graph visualization library for Angular ## Inputs -| Property | Type | Default Value | Description | -| --------------------------------------------------------- | ------------------- | ------------- | --------------------------------------------------------------------------------------------------------------------------------------------------- | -| [view](/demos/interactive-demo#dimensions) | number[] | | the size of the graph element - accepts an array of two numbers `[width, height]`. If not specified, the graph is resized to fit its parent element | -| [nodes](/data-format) | Node[] | [] | the list of graph nodes | -| [links](/data-format) | Edge[] | [] | the list of graph edges | -| [clusters](/data-format) | ClusterNode[] | [] | the list of cluster nodes | -| [layout](/layouts) | string or Layout | 'dagre' | the graph layout - can be either one of the built-in layouts or a custom layout | -| [layoutSettings](/layouts) | any | | the setting for the layout | -| [curve](/demos/interactive-demo#line-curve-interpolation) | any | | the interpolation function used to generate the curve. It accepts any d3.curve function | -| legend | boolean | false | show/hide the legend. **deprecated**{ .badge .warn } | -| draggingEnabled | boolean | true | enable dragging nodes | -| panningEnabled | boolean | true | enable panning | -| panOffsetX | number | | set the current `x` position of the graph | -| panOffsetY | number | | set the current `y` position of the graph | -| panningAxis | string | 'both', 'horizontal', 'vertical' | set panning direction | -| enableZoom | boolean | true | enable zoom | -| animate | boolean | false | enable animations | -| zoomSpeed | number | 0.1 | the zoom speed | -| zoomLevel | number | | the zoom level | -| minZoomLevel | number | 0.1 | the minimum zoom level | -| maxZoomLevel | number | 4.0 | the maximum zoom level | -| zoomLevel | number | | sets the zoom level, set autoZoom to false to use | -| autoZoom | boolean | false | automatically zoom the graph to fit in the avialable viewport when the graph is updated | -| panOnZoom | boolean | true | pan to the mouse cursor while zooming | -| autoCenter | boolean | false | center the graph in the viewport when the graph is updated | -| [update\$](/demos/interactive-demo#triggering-update) | Observable | | update the graph | -| [center\$](/demos/interactive-demo#centering-the-graph) | Observable | | center the graph | -| [zoomToFit\$](/demos/interactive-demo#fit-to-view) | Observable | | zoom the graph to fit in the viewport | -| panToNode\$ | Observable | | pans the graph to center on the node ID passed emited from the observable | -| nodeHeight | number | | the height of the nodes **deprecated**{ .badge .warn } | -| nodeMaxHeight | number | | the max height of the nodes **deprecated**{ .badge .warn } | -| nodeMinHeight | number | | the min height of the nodes **deprecated**{ .badge .warn } | -| nodeWidth | number | | the width of the nodes **deprecated**{ .badge .warn } | -| nodeMinWidth | number | | the min width of the nodes **deprecated**{ .badge .warn } | -| nodeMaxWidth | number | | the max width of the nodes **deprecated**{ .badge .warn } | +| Property | Type | Default Value | Description | +| --------------------------------------------------------- | ------------------- | -------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------- | +| [view](/demos/interactive-demo#dimensions) | number[] | | the size of the graph element - accepts an array of two numbers `[width, height]`. If not specified, the graph is resized to fit its parent element | +| [nodes](/data-format) | Node[] | [] | the list of graph nodes | +| [links](/data-format) | Edge[] | [] | the list of graph edges | +| [clusters](/data-format) | ClusterNode[] | [] | the list of cluster nodes | +| [layout](/layouts) | string or Layout | 'dagre' | the graph layout - can be either one of the built-in layouts or a custom layout | +| [layoutSettings](/layouts) | any | | the setting for the layout | +| [curve](/demos/interactive-demo#line-curve-interpolation) | any | | the interpolation function used to generate the curve. It accepts any d3.curve function | +| legend | boolean | false | show/hide the legend. **deprecated**{ .badge .warn } | +| draggingEnabled | boolean | true | enable dragging nodes | +| panningEnabled | boolean | true | enable panning | +| panOffsetX | number | | set the current `x` position of the graph | +| panOffsetY | number | | set the current `y` position of the graph | +| panningAxis | string | 'both', 'horizontal', 'vertical' | set panning direction | +| enableZoom | boolean | true | enable zoom | +| animate | boolean | false | enable animations | +| zoomSpeed | number | 0.1 | the zoom speed | +| zoomLevel | number | | the zoom level | +| minZoomLevel | number | 0.1 | the minimum zoom level | +| maxZoomLevel | number | 4.0 | the maximum zoom level | +| zoomLevel | number | | sets the zoom level, set autoZoom to false to use | +| autoZoom | boolean | false | automatically zoom the graph to fit in the avialable viewport when the graph is updated | +| panOnZoom | boolean | true | pan to the mouse cursor while zooming | +| autoCenter | boolean | false | center the graph in the viewport when the graph is updated | +| [update\$](/demos/interactive-demo#triggering-update) | Observable | | update the graph | +| [center\$](/demos/interactive-demo#centering-the-graph) | Observable | | center the graph | +| [zoomToFit\$](/demos/interactive-demo#fit-to-view) | Observable | | zoom the graph to fit in the viewport | +| panToNode\$ | Observable | | pans the graph to center on the node ID passed emited from the observable | +| nodeHeight | number | | the height of the nodes **deprecated**{ .badge .warn } | +| nodeMaxHeight | number | | the max height of the nodes **deprecated**{ .badge .warn } | +| nodeMinHeight | number | | the min height of the nodes **deprecated**{ .badge .warn } | +| nodeWidth | number | | the width of the nodes **deprecated**{ .badge .warn } | +| nodeMinWidth | number | | the min width of the nodes **deprecated**{ .badge .warn } | +| nodeMaxWidth | number | | the max width of the nodes **deprecated**{ .badge .warn } | _Deprecated inputs will be removed in the next major version of the package._ diff --git a/src/docspa.config.ts b/src/docspa.config.ts index c36aede7..d8e87ae8 100644 --- a/src/docspa.config.ts +++ b/src/docspa.config.ts @@ -6,7 +6,7 @@ export const config = { sideLoad: { sidebar: '/_sidebar.md', navbar: '/_navbar.md', - rightSidebar: '/_sidebar2.md', + rightSidebar: '/_sidebar2.md' }, coverpage: false }; diff --git a/src/karma.conf.js b/src/karma.conf.js index b6e00421..4a9730b9 100644 --- a/src/karma.conf.js +++ b/src/karma.conf.js @@ -28,4 +28,4 @@ module.exports = function (config) { browsers: ['Chrome'], singleRun: false }); -}; \ No newline at end of file +}; diff --git a/src/main.ts b/src/main.ts index 91ec6da5..5aa3bf02 100644 --- a/src/main.ts +++ b/src/main.ts @@ -8,5 +8,6 @@ if (environment.production) { enableProdMode(); } -platformBrowserDynamic().bootstrapModule(AppModule) +platformBrowserDynamic() + .bootstrapModule(AppModule) .catch(err => console.log(err)); diff --git a/src/polyfills.ts b/src/polyfills.ts index 9b659d3d..c404fdf3 100644 --- a/src/polyfills.ts +++ b/src/polyfills.ts @@ -18,7 +18,7 @@ * BROWSER POLYFILLS */ -/** IE9, IE10 and IE11 requires all of the following polyfills. **/ +/* IE9, IE10 and IE11 requires all of the following polyfills. */ // import 'core-js/es6/symbol'; // import 'core-js/es6/object'; // import 'core-js/es6/function'; @@ -40,15 +40,15 @@ /** IE10 and IE11 requires the following for the Reflect API. */ // import 'core-js/es6/reflect'; -/** Evergreen browsers require these. **/ +/* Evergreen browsers require these. */ // Used for reflect-metadata in JIT. If you use AOT (and only Angular decorators), you can remove. import 'core-js/es7/reflect'; -/** +/* * Web Animations `@angular/platform-browser/animations` * Only required if AnimationBuilder is used within the application and using IE/Edge or Safari. * Standard animation support in Angular DOES NOT require any polyfills (as of Angular 6.0). - **/ + */ // import 'web-animations-js'; // Run `npm install --save web-animations-js`. /** diff --git a/src/test.ts b/src/test.ts index 16317897..da9049dc 100644 --- a/src/test.ts +++ b/src/test.ts @@ -2,18 +2,12 @@ import 'zone.js/dist/zone-testing'; import { getTestBed } from '@angular/core/testing'; -import { - BrowserDynamicTestingModule, - platformBrowserDynamicTesting -} from '@angular/platform-browser-dynamic/testing'; +import { BrowserDynamicTestingModule, platformBrowserDynamicTesting } from '@angular/platform-browser-dynamic/testing'; declare const require: any; // First, initialize the Angular testing environment. -getTestBed().initTestEnvironment( - BrowserDynamicTestingModule, - platformBrowserDynamicTesting() -); +getTestBed().initTestEnvironment(BrowserDynamicTestingModule, platformBrowserDynamicTesting()); // Then we find all the tests. const context = require.context('./', true, /\.spec\.ts$/); // And load the modules. diff --git a/src/tsconfig.app.json b/src/tsconfig.app.json index 6af6e87a..d80f0526 100644 --- a/src/tsconfig.app.json +++ b/src/tsconfig.app.json @@ -4,8 +4,5 @@ "outDir": "../out-tsc/app", "types": [] }, - "files": [ - "main.ts", - "polyfills.ts" - ] + "files": ["main.ts", "polyfills.ts"] } diff --git a/src/tsconfig.spec.json b/src/tsconfig.spec.json index de773363..70add2d5 100644 --- a/src/tsconfig.spec.json +++ b/src/tsconfig.spec.json @@ -2,17 +2,8 @@ "extends": "../tsconfig.json", "compilerOptions": { "outDir": "../out-tsc/spec", - "types": [ - "jasmine", - "node" - ] + "types": ["jasmine", "node"] }, - "files": [ - "test.ts", - "polyfills.ts" - ], - "include": [ - "**/*.spec.ts", - "**/*.d.ts" - ] + "files": ["test.ts", "polyfills.ts"], + "include": ["**/*.spec.ts", "**/*.d.ts"] } diff --git a/src/tslint.json b/src/tslint.json index 52e2c1a5..3065583a 100644 --- a/src/tslint.json +++ b/src/tslint.json @@ -1,17 +1,7 @@ { - "extends": "../tslint.json", - "rules": { - "directive-selector": [ - true, - "attribute", - "app", - "camelCase" - ], - "component-selector": [ - true, - "element", - "app", - "kebab-case" - ] - } + "extends": "../tslint.json", + "rules": { + "directive-selector": [true, "attribute", ["app", "ngx"], "camelCase"], + "component-selector": [true, "element", ["app", "ngx"], "kebab-case"] + } } diff --git a/tslint.json b/tslint.json index ad687d8a..cf6ca917 100644 --- a/tslint.json +++ b/tslint.json @@ -1,4 +1,11 @@ { "rulesDirectory": ["node_modules/codelyzer"], - "extends": ["codelyzer", "tslint-config-swimlane/base", "tslint-config-prettier"] + "extends": ["codelyzer", "tslint-config-swimlane/base", "tslint-config-prettier"], + "rules": { + "no-implicit-dependencies": [false, "dev"], + "no-any": false, + "typedef": true, + "no-floating-promises": false, + "array-type": [true, "array-simple"] + } }