diff --git a/package-lock.json b/package-lock.json index c1fd8b5..8cedc38 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "siema", - "version": "1.4.13", + "version": "1.5.1", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -16,7 +16,7 @@ "integrity": "sha1-x1K9IQvvZ5UBtsbLf8hPj0cVjMQ=", "dev": true, "requires": { - "acorn": "4.0.13" + "acorn": "^4.0.3" }, "dependencies": { "acorn": { @@ -33,7 +33,7 @@ "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", "dev": true, "requires": { - "acorn": "3.3.0" + "acorn": "^3.0.4" }, "dependencies": { "acorn": { @@ -50,10 +50,10 @@ "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", "dev": true, "requires": { - "co": "4.6.0", - "fast-deep-equal": "1.0.0", - "fast-json-stable-stringify": "2.0.0", - "json-schema-traverse": "0.3.1" + "co": "^4.6.0", + "fast-deep-equal": "^1.0.0", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.3.0" } }, "ajv-keywords": { @@ -68,9 +68,9 @@ "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", "dev": true, "requires": { - "kind-of": "3.2.2", - "longest": "1.0.1", - "repeat-string": "1.6.1" + "kind-of": "^3.0.2", + "longest": "^1.0.1", + "repeat-string": "^1.5.2" } }, "ansi-escapes": { @@ -97,8 +97,8 @@ "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", "dev": true, "requires": { - "micromatch": "2.3.11", - "normalize-path": "2.1.1" + "micromatch": "^2.1.5", + "normalize-path": "^2.0.0" } }, "argparse": { @@ -107,7 +107,7 @@ "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=", "dev": true, "requires": { - "sprintf-js": "1.0.3" + "sprintf-js": "~1.0.2" } }, "arr-diff": { @@ -116,7 +116,7 @@ "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", "dev": true, "requires": { - "arr-flatten": "1.1.0" + "arr-flatten": "^1.0.1" } }, "arr-flatten": { @@ -131,7 +131,7 @@ "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", "dev": true, "requires": { - "array-uniq": "1.0.3" + "array-uniq": "^1.0.1" } }, "array-uniq": { @@ -158,9 +158,9 @@ "integrity": "sha512-b/OsSjvWEo8Pi8H0zsDd2P6Uqo2TK2pH8gNLSJtNLM2Db0v2QaAZ0pBQJXVjAn4gBuugeVDr7s63ZogpUIwWDg==", "dev": true, "requires": { - "bn.js": "4.11.8", - "inherits": "2.0.3", - "minimalistic-assert": "1.0.0" + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" } }, "assert": { @@ -178,7 +178,7 @@ "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==", "dev": true, "requires": { - "lodash": "4.17.4" + "lodash": "^4.14.0" } }, "async-each": { @@ -199,9 +199,9 @@ "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", "dev": true, "requires": { - "chalk": "1.1.3", - "esutils": "2.0.2", - "js-tokens": "3.0.2" + "chalk": "^1.1.3", + "esutils": "^2.0.2", + "js-tokens": "^3.0.2" } }, "babel-core": { @@ -210,25 +210,25 @@ "integrity": "sha1-rzL3izGm/O8RnIew/Y2XU/A6C7g=", "dev": true, "requires": { - "babel-code-frame": "6.26.0", - "babel-generator": "6.26.0", - "babel-helpers": "6.24.1", - "babel-messages": "6.23.0", - "babel-register": "6.26.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "convert-source-map": "1.5.0", - "debug": "2.6.9", - "json5": "0.5.1", - "lodash": "4.17.4", - "minimatch": "3.0.4", - "path-is-absolute": "1.0.1", - "private": "0.1.8", - "slash": "1.0.0", - "source-map": "0.5.7" + "babel-code-frame": "^6.26.0", + "babel-generator": "^6.26.0", + "babel-helpers": "^6.24.1", + "babel-messages": "^6.23.0", + "babel-register": "^6.26.0", + "babel-runtime": "^6.26.0", + "babel-template": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "convert-source-map": "^1.5.0", + "debug": "^2.6.8", + "json5": "^0.5.1", + "lodash": "^4.17.4", + "minimatch": "^3.0.4", + "path-is-absolute": "^1.0.1", + "private": "^0.1.7", + "slash": "^1.0.0", + "source-map": "^0.5.6" } }, "babel-generator": { @@ -237,14 +237,14 @@ "integrity": "sha1-rBriAHC3n248odMmlhMFN3TyDcU=", "dev": true, "requires": { - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "detect-indent": "4.0.0", - "jsesc": "1.3.0", - "lodash": "4.17.4", - "source-map": "0.5.7", - "trim-right": "1.0.1" + "babel-messages": "^6.23.0", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "detect-indent": "^4.0.0", + "jsesc": "^1.3.0", + "lodash": "^4.17.4", + "source-map": "^0.5.6", + "trim-right": "^1.0.1" } }, "babel-helper-call-delegate": { @@ -253,10 +253,10 @@ "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=", "dev": true, "requires": { - "babel-helper-hoist-variables": "6.24.1", - "babel-runtime": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-hoist-variables": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" } }, "babel-helper-define-map": { @@ -265,10 +265,10 @@ "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=", "dev": true, "requires": { - "babel-helper-function-name": "6.24.1", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "lodash": "4.17.4" + "babel-helper-function-name": "^6.24.1", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "lodash": "^4.17.4" } }, "babel-helper-function-name": { @@ -277,11 +277,11 @@ "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", "dev": true, "requires": { - "babel-helper-get-function-arity": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-get-function-arity": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" } }, "babel-helper-get-function-arity": { @@ -290,8 +290,8 @@ "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } }, "babel-helper-hoist-variables": { @@ -300,8 +300,8 @@ "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } }, "babel-helper-optimise-call-expression": { @@ -310,8 +310,8 @@ "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } }, "babel-helper-regex": { @@ -320,9 +320,9 @@ "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "lodash": "4.17.4" + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "lodash": "^4.17.4" } }, "babel-helper-replace-supers": { @@ -331,12 +331,12 @@ "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=", "dev": true, "requires": { - "babel-helper-optimise-call-expression": "6.24.1", - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-optimise-call-expression": "^6.24.1", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" } }, "babel-helpers": { @@ -345,8 +345,8 @@ "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" } }, "babel-loader": { @@ -355,9 +355,9 @@ "integrity": "sha512-jRwlFbINAeyDStqK6Dd5YuY0k5YuzQUvlz2ZamuXrXmxav3pNqe9vfJ402+2G+OmlJSXxCOpB6Uz0INM7RQe2A==", "dev": true, "requires": { - "find-cache-dir": "1.0.0", - "loader-utils": "1.1.0", - "mkdirp": "0.5.1" + "find-cache-dir": "^1.0.0", + "loader-utils": "^1.0.2", + "mkdirp": "^0.5.1" } }, "babel-messages": { @@ -366,7 +366,7 @@ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-add-module-exports": { @@ -381,7 +381,7 @@ "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-arrow-functions": { @@ -390,7 +390,7 @@ "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-block-scoped-functions": { @@ -399,7 +399,7 @@ "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-block-scoping": { @@ -408,11 +408,11 @@ "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0", - "lodash": "4.17.4" + "babel-runtime": "^6.26.0", + "babel-template": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "lodash": "^4.17.4" } }, "babel-plugin-transform-es2015-classes": { @@ -421,15 +421,15 @@ "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=", "dev": true, "requires": { - "babel-helper-define-map": "6.26.0", - "babel-helper-function-name": "6.24.1", - "babel-helper-optimise-call-expression": "6.24.1", - "babel-helper-replace-supers": "6.24.1", - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-define-map": "^6.24.1", + "babel-helper-function-name": "^6.24.1", + "babel-helper-optimise-call-expression": "^6.24.1", + "babel-helper-replace-supers": "^6.24.1", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" } }, "babel-plugin-transform-es2015-computed-properties": { @@ -438,8 +438,8 @@ "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" } }, "babel-plugin-transform-es2015-destructuring": { @@ -448,7 +448,7 @@ "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-duplicate-keys": { @@ -457,8 +457,8 @@ "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } }, "babel-plugin-transform-es2015-for-of": { @@ -467,7 +467,7 @@ "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-function-name": { @@ -476,9 +476,9 @@ "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=", "dev": true, "requires": { - "babel-helper-function-name": "6.24.1", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-function-name": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } }, "babel-plugin-transform-es2015-literals": { @@ -487,7 +487,7 @@ "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-modules-amd": { @@ -496,9 +496,9 @@ "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=", "dev": true, "requires": { - "babel-plugin-transform-es2015-modules-commonjs": "6.26.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" + "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" } }, "babel-plugin-transform-es2015-modules-commonjs": { @@ -507,10 +507,10 @@ "integrity": "sha1-DYOUApt9xqvhqX7xgeAHWN0uXYo=", "dev": true, "requires": { - "babel-plugin-transform-strict-mode": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-types": "6.26.0" + "babel-plugin-transform-strict-mode": "^6.24.1", + "babel-runtime": "^6.26.0", + "babel-template": "^6.26.0", + "babel-types": "^6.26.0" } }, "babel-plugin-transform-es2015-modules-systemjs": { @@ -519,9 +519,9 @@ "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=", "dev": true, "requires": { - "babel-helper-hoist-variables": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" + "babel-helper-hoist-variables": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" } }, "babel-plugin-transform-es2015-modules-umd": { @@ -530,9 +530,9 @@ "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=", "dev": true, "requires": { - "babel-plugin-transform-es2015-modules-amd": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" + "babel-plugin-transform-es2015-modules-amd": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" } }, "babel-plugin-transform-es2015-object-super": { @@ -541,8 +541,8 @@ "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=", "dev": true, "requires": { - "babel-helper-replace-supers": "6.24.1", - "babel-runtime": "6.26.0" + "babel-helper-replace-supers": "^6.24.1", + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-parameters": { @@ -551,12 +551,12 @@ "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=", "dev": true, "requires": { - "babel-helper-call-delegate": "6.24.1", - "babel-helper-get-function-arity": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-call-delegate": "^6.24.1", + "babel-helper-get-function-arity": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" } }, "babel-plugin-transform-es2015-shorthand-properties": { @@ -565,8 +565,8 @@ "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } }, "babel-plugin-transform-es2015-spread": { @@ -575,7 +575,7 @@ "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-sticky-regex": { @@ -584,9 +584,9 @@ "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=", "dev": true, "requires": { - "babel-helper-regex": "6.26.0", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-regex": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } }, "babel-plugin-transform-es2015-template-literals": { @@ -595,7 +595,7 @@ "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-typeof-symbol": { @@ -604,7 +604,7 @@ "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-unicode-regex": { @@ -613,9 +613,9 @@ "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=", "dev": true, "requires": { - "babel-helper-regex": "6.26.0", - "babel-runtime": "6.26.0", - "regexpu-core": "2.0.0" + "babel-helper-regex": "^6.24.1", + "babel-runtime": "^6.22.0", + "regexpu-core": "^2.0.0" } }, "babel-plugin-transform-regenerator": { @@ -624,7 +624,7 @@ "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=", "dev": true, "requires": { - "regenerator-transform": "0.10.1" + "regenerator-transform": "^0.10.0" } }, "babel-plugin-transform-strict-mode": { @@ -633,8 +633,8 @@ "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } }, "babel-preset-es2015": { @@ -643,30 +643,30 @@ "integrity": "sha1-1EBQ1rwsn+6nAqrzjXJ6AhBTiTk=", "dev": true, "requires": { - "babel-plugin-check-es2015-constants": "6.22.0", - "babel-plugin-transform-es2015-arrow-functions": "6.22.0", - "babel-plugin-transform-es2015-block-scoped-functions": "6.22.0", - "babel-plugin-transform-es2015-block-scoping": "6.26.0", - "babel-plugin-transform-es2015-classes": "6.24.1", - "babel-plugin-transform-es2015-computed-properties": "6.24.1", - "babel-plugin-transform-es2015-destructuring": "6.23.0", - "babel-plugin-transform-es2015-duplicate-keys": "6.24.1", - "babel-plugin-transform-es2015-for-of": "6.23.0", - "babel-plugin-transform-es2015-function-name": "6.24.1", - "babel-plugin-transform-es2015-literals": "6.22.0", - "babel-plugin-transform-es2015-modules-amd": "6.24.1", - "babel-plugin-transform-es2015-modules-commonjs": "6.26.0", - "babel-plugin-transform-es2015-modules-systemjs": "6.24.1", - "babel-plugin-transform-es2015-modules-umd": "6.24.1", - "babel-plugin-transform-es2015-object-super": "6.24.1", - "babel-plugin-transform-es2015-parameters": "6.24.1", - "babel-plugin-transform-es2015-shorthand-properties": "6.24.1", - "babel-plugin-transform-es2015-spread": "6.22.0", - "babel-plugin-transform-es2015-sticky-regex": "6.24.1", - "babel-plugin-transform-es2015-template-literals": "6.22.0", - "babel-plugin-transform-es2015-typeof-symbol": "6.23.0", - "babel-plugin-transform-es2015-unicode-regex": "6.24.1", - "babel-plugin-transform-regenerator": "6.26.0" + "babel-plugin-check-es2015-constants": "^6.22.0", + "babel-plugin-transform-es2015-arrow-functions": "^6.22.0", + "babel-plugin-transform-es2015-block-scoped-functions": "^6.22.0", + "babel-plugin-transform-es2015-block-scoping": "^6.24.1", + "babel-plugin-transform-es2015-classes": "^6.24.1", + "babel-plugin-transform-es2015-computed-properties": "^6.24.1", + "babel-plugin-transform-es2015-destructuring": "^6.22.0", + "babel-plugin-transform-es2015-duplicate-keys": "^6.24.1", + "babel-plugin-transform-es2015-for-of": "^6.22.0", + "babel-plugin-transform-es2015-function-name": "^6.24.1", + "babel-plugin-transform-es2015-literals": "^6.22.0", + "babel-plugin-transform-es2015-modules-amd": "^6.24.1", + "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1", + "babel-plugin-transform-es2015-modules-systemjs": "^6.24.1", + "babel-plugin-transform-es2015-modules-umd": "^6.24.1", + "babel-plugin-transform-es2015-object-super": "^6.24.1", + "babel-plugin-transform-es2015-parameters": "^6.24.1", + "babel-plugin-transform-es2015-shorthand-properties": "^6.24.1", + "babel-plugin-transform-es2015-spread": "^6.22.0", + "babel-plugin-transform-es2015-sticky-regex": "^6.24.1", + "babel-plugin-transform-es2015-template-literals": "^6.22.0", + "babel-plugin-transform-es2015-typeof-symbol": "^6.22.0", + "babel-plugin-transform-es2015-unicode-regex": "^6.24.1", + "babel-plugin-transform-regenerator": "^6.24.1" } }, "babel-register": { @@ -675,13 +675,13 @@ "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=", "dev": true, "requires": { - "babel-core": "6.26.0", - "babel-runtime": "6.26.0", - "core-js": "2.5.1", - "home-or-tmp": "2.0.0", - "lodash": "4.17.4", - "mkdirp": "0.5.1", - "source-map-support": "0.4.18" + "babel-core": "^6.26.0", + "babel-runtime": "^6.26.0", + "core-js": "^2.5.0", + "home-or-tmp": "^2.0.0", + "lodash": "^4.17.4", + "mkdirp": "^0.5.1", + "source-map-support": "^0.4.15" } }, "babel-runtime": { @@ -690,8 +690,8 @@ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "dev": true, "requires": { - "core-js": "2.5.1", - "regenerator-runtime": "0.11.0" + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" } }, "babel-template": { @@ -700,11 +700,11 @@ "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "lodash": "4.17.4" + "babel-runtime": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "lodash": "^4.17.4" } }, "babel-traverse": { @@ -713,15 +713,15 @@ "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", "dev": true, "requires": { - "babel-code-frame": "6.26.0", - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "debug": "2.6.9", - "globals": "9.18.0", - "invariant": "2.2.2", - "lodash": "4.17.4" + "babel-code-frame": "^6.26.0", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "debug": "^2.6.8", + "globals": "^9.18.0", + "invariant": "^2.2.2", + "lodash": "^4.17.4" } }, "babel-types": { @@ -730,10 +730,10 @@ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "esutils": "2.0.2", - "lodash": "4.17.4", - "to-fast-properties": "1.0.3" + "babel-runtime": "^6.26.0", + "esutils": "^2.0.2", + "lodash": "^4.17.4", + "to-fast-properties": "^1.0.3" } }, "babylon": { @@ -778,7 +778,7 @@ "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", "dev": true, "requires": { - "balanced-match": "1.0.0", + "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, @@ -788,9 +788,9 @@ "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", "dev": true, "requires": { - "expand-range": "1.8.2", - "preserve": "0.2.0", - "repeat-element": "1.1.2" + "expand-range": "^1.8.1", + "preserve": "^0.2.0", + "repeat-element": "^1.1.2" } }, "brorand": { @@ -805,12 +805,12 @@ "integrity": "sha512-UGnTYAnB2a3YuYKIRy1/4FB2HdM866E0qC46JXvVTYKlBlZlnvfpSfY6OKfXZAkv70eJ2a1SqzpAo5CRhZGDFg==", "dev": true, "requires": { - "buffer-xor": "1.0.3", - "cipher-base": "1.0.4", - "create-hash": "1.1.3", - "evp_bytestokey": "1.0.3", - "inherits": "2.0.3", - "safe-buffer": "5.1.1" + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, "browserify-cipher": { @@ -819,9 +819,9 @@ "integrity": "sha1-mYgkSHS/XtTijalWZtzWasj8Njo=", "dev": true, "requires": { - "browserify-aes": "1.1.1", - "browserify-des": "1.0.0", - "evp_bytestokey": "1.0.3" + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" } }, "browserify-des": { @@ -830,9 +830,9 @@ "integrity": "sha1-2qJ3cXRwki7S/hhZQRihdUOXId0=", "dev": true, "requires": { - "cipher-base": "1.0.4", - "des.js": "1.0.0", - "inherits": "2.0.3" + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1" } }, "browserify-rsa": { @@ -841,8 +841,8 @@ "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", "dev": true, "requires": { - "bn.js": "4.11.8", - "randombytes": "2.0.6" + "bn.js": "^4.1.0", + "randombytes": "^2.0.1" } }, "browserify-sign": { @@ -851,13 +851,13 @@ "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", "dev": true, "requires": { - "bn.js": "4.11.8", - "browserify-rsa": "4.0.1", - "create-hash": "1.1.3", - "create-hmac": "1.1.6", - "elliptic": "6.4.0", - "inherits": "2.0.3", - "parse-asn1": "5.1.0" + "bn.js": "^4.1.1", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.2", + "elliptic": "^6.0.0", + "inherits": "^2.0.1", + "parse-asn1": "^5.0.0" } }, "browserify-zlib": { @@ -866,7 +866,7 @@ "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", "dev": true, "requires": { - "pako": "1.0.6" + "pako": "~1.0.5" } }, "buffer": { @@ -875,9 +875,9 @@ "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", "dev": true, "requires": { - "base64-js": "1.2.1", - "ieee754": "1.1.8", - "isarray": "1.0.0" + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" } }, "buffer-xor": { @@ -904,7 +904,7 @@ "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", "dev": true, "requires": { - "callsites": "0.2.0" + "callsites": "^0.2.0" } }, "callsites": { @@ -925,8 +925,8 @@ "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", "dev": true, "requires": { - "align-text": "0.1.4", - "lazy-cache": "1.0.4" + "align-text": "^0.1.3", + "lazy-cache": "^1.0.3" } }, "chalk": { @@ -935,11 +935,11 @@ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" + "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" } }, "chardet": { @@ -954,15 +954,15 @@ "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", "dev": true, "requires": { - "anymatch": "1.3.2", - "async-each": "1.0.1", - "fsevents": "1.1.3", - "glob-parent": "2.0.0", - "inherits": "2.0.3", - "is-binary-path": "1.0.1", - "is-glob": "2.0.1", - "path-is-absolute": "1.0.1", - "readdirp": "2.1.0" + "anymatch": "^1.3.0", + "async-each": "^1.0.0", + "fsevents": "^1.0.0", + "glob-parent": "^2.0.0", + "inherits": "^2.0.1", + "is-binary-path": "^1.0.0", + "is-glob": "^2.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.0.0" } }, "cipher-base": { @@ -971,8 +971,8 @@ "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", "dev": true, "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.1" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, "circular-json": { @@ -987,7 +987,7 @@ "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", "dev": true, "requires": { - "restore-cursor": "2.0.0" + "restore-cursor": "^2.0.0" } }, "cli-width": { @@ -1002,8 +1002,8 @@ "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", "dev": true, "requires": { - "center-align": "0.1.3", - "right-align": "0.1.3", + "center-align": "^0.1.1", + "right-align": "^0.1.1", "wordwrap": "0.0.2" }, "dependencies": { @@ -1033,7 +1033,7 @@ "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==", "dev": true, "requires": { - "color-name": "1.1.3" + "color-name": "^1.1.1" } }, "color-name": { @@ -1060,9 +1060,9 @@ "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=", "dev": true, "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.3", - "typedarray": "0.0.6" + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" } }, "console-browserify": { @@ -1071,7 +1071,7 @@ "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", "dev": true, "requires": { - "date-now": "0.1.4" + "date-now": "^0.1.4" } }, "constants-browserify": { @@ -1104,8 +1104,8 @@ "integrity": "sha1-iIxyNZbN92EvZJgjPuvXo1MBc30=", "dev": true, "requires": { - "bn.js": "4.11.8", - "elliptic": "6.4.0" + "bn.js": "^4.1.0", + "elliptic": "^6.0.0" } }, "create-hash": { @@ -1114,10 +1114,10 @@ "integrity": "sha1-YGBCrIuSYnUPSDyt2rD1gZFy2P0=", "dev": true, "requires": { - "cipher-base": "1.0.4", - "inherits": "2.0.3", - "ripemd160": "2.0.1", - "sha.js": "2.4.10" + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "sha.js": "^2.4.0" } }, "create-hmac": { @@ -1126,12 +1126,12 @@ "integrity": "sha1-rLniIaThe9sHbpBlfEK5PjcmzwY=", "dev": true, "requires": { - "cipher-base": "1.0.4", - "create-hash": "1.1.3", - "inherits": "2.0.3", - "ripemd160": "2.0.1", - "safe-buffer": "5.1.1", - "sha.js": "2.4.10" + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" } }, "cross-spawn": { @@ -1140,9 +1140,9 @@ "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", "dev": true, "requires": { - "lru-cache": "4.1.1", - "shebang-command": "1.2.0", - "which": "1.3.0" + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" } }, "crypto-browserify": { @@ -1151,17 +1151,17 @@ "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", "dev": true, "requires": { - "browserify-cipher": "1.0.0", - "browserify-sign": "4.0.4", - "create-ecdh": "4.0.0", - "create-hash": "1.1.3", - "create-hmac": "1.1.6", - "diffie-hellman": "5.0.2", - "inherits": "2.0.3", - "pbkdf2": "3.0.14", - "public-encrypt": "4.0.0", - "randombytes": "2.0.6", - "randomfill": "1.0.3" + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" } }, "d": { @@ -1170,7 +1170,7 @@ "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", "dev": true, "requires": { - "es5-ext": "0.10.38" + "es5-ext": "^0.10.9" } }, "date-now": { @@ -1206,13 +1206,13 @@ "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", "dev": true, "requires": { - "globby": "5.0.0", - "is-path-cwd": "1.0.0", - "is-path-in-cwd": "1.0.0", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1", - "rimraf": "2.6.2" + "globby": "^5.0.0", + "is-path-cwd": "^1.0.0", + "is-path-in-cwd": "^1.0.0", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "rimraf": "^2.2.8" } }, "des.js": { @@ -1221,8 +1221,8 @@ "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", "dev": true, "requires": { - "inherits": "2.0.3", - "minimalistic-assert": "1.0.0" + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" } }, "detect-indent": { @@ -1231,7 +1231,7 @@ "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", "dev": true, "requires": { - "repeating": "2.0.1" + "repeating": "^2.0.0" } }, "diffie-hellman": { @@ -1240,9 +1240,9 @@ "integrity": "sha1-tYNXOScM/ias9jIJn97SoH8gnl4=", "dev": true, "requires": { - "bn.js": "4.11.8", - "miller-rabin": "4.0.1", - "randombytes": "2.0.6" + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" } }, "doctrine": { @@ -1251,7 +1251,7 @@ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, "requires": { - "esutils": "2.0.2" + "esutils": "^2.0.2" } }, "domain-browser": { @@ -1266,13 +1266,13 @@ "integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=", "dev": true, "requires": { - "bn.js": "4.11.8", - "brorand": "1.1.0", - "hash.js": "1.1.3", - "hmac-drbg": "1.0.1", - "inherits": "2.0.3", - "minimalistic-assert": "1.0.0", - "minimalistic-crypto-utils": "1.0.1" + "bn.js": "^4.4.0", + "brorand": "^1.0.1", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.0" } }, "emojis-list": { @@ -1287,10 +1287,10 @@ "integrity": "sha1-BCHjOf1xQZs9oT0Smzl5BAIwR24=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "memory-fs": "0.4.1", - "object-assign": "4.1.1", - "tapable": "0.2.8" + "graceful-fs": "^4.1.2", + "memory-fs": "^0.4.0", + "object-assign": "^4.0.1", + "tapable": "^0.2.7" } }, "errno": { @@ -1299,7 +1299,7 @@ "integrity": "sha512-IsORQDpaaSwcDP4ZZnHxgE85werpo34VYn1Ud3mq+eUsF593faR8oCZNXrROVkpFu2TsbrNhHin0aUrTsQ9vNw==", "dev": true, "requires": { - "prr": "1.0.1" + "prr": "~1.0.1" } }, "error-ex": { @@ -1308,7 +1308,7 @@ "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", "dev": true, "requires": { - "is-arrayish": "0.2.1" + "is-arrayish": "^0.2.1" } }, "es5-ext": { @@ -1317,8 +1317,8 @@ "integrity": "sha512-jCMyePo7AXbUESwbl8Qi01VSH2piY9s/a3rSU/5w/MlTIx8HPL1xn2InGN8ejt/xulcJgnTO7vqNtOAxzYd2Kg==", "dev": true, "requires": { - "es6-iterator": "2.0.3", - "es6-symbol": "3.1.1" + "es6-iterator": "~2.0.3", + "es6-symbol": "~3.1.1" } }, "es6-iterator": { @@ -1327,9 +1327,9 @@ "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", "dev": true, "requires": { - "d": "1.0.0", - "es5-ext": "0.10.38", - "es6-symbol": "3.1.1" + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" } }, "es6-map": { @@ -1338,12 +1338,12 @@ "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=", "dev": true, "requires": { - "d": "1.0.0", - "es5-ext": "0.10.38", - "es6-iterator": "2.0.3", - "es6-set": "0.1.5", - "es6-symbol": "3.1.1", - "event-emitter": "0.3.5" + "d": "1", + "es5-ext": "~0.10.14", + "es6-iterator": "~2.0.1", + "es6-set": "~0.1.5", + "es6-symbol": "~3.1.1", + "event-emitter": "~0.3.5" } }, "es6-set": { @@ -1352,11 +1352,11 @@ "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=", "dev": true, "requires": { - "d": "1.0.0", - "es5-ext": "0.10.38", - "es6-iterator": "2.0.3", + "d": "1", + "es5-ext": "~0.10.14", + "es6-iterator": "~2.0.1", "es6-symbol": "3.1.1", - "event-emitter": "0.3.5" + "event-emitter": "~0.3.5" } }, "es6-symbol": { @@ -1365,8 +1365,8 @@ "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", "dev": true, "requires": { - "d": "1.0.0", - "es5-ext": "0.10.38" + "d": "1", + "es5-ext": "~0.10.14" } }, "es6-weak-map": { @@ -1375,10 +1375,10 @@ "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=", "dev": true, "requires": { - "d": "1.0.0", - "es5-ext": "0.10.38", - "es6-iterator": "2.0.3", - "es6-symbol": "3.1.1" + "d": "1", + "es5-ext": "^0.10.14", + "es6-iterator": "^2.0.1", + "es6-symbol": "^3.1.1" } }, "escape-string-regexp": { @@ -1393,10 +1393,10 @@ "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=", "dev": true, "requires": { - "es6-map": "0.1.5", - "es6-weak-map": "2.0.2", - "esrecurse": "4.2.0", - "estraverse": "4.2.0" + "es6-map": "^0.1.3", + "es6-weak-map": "^2.0.1", + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" } }, "eslint": { @@ -1405,43 +1405,43 @@ "integrity": "sha512-YVXV4bDhNoHHcv0qzU4Meof7/P26B4EuaktMi5L1Tnt52Aov85KmYA8c5D+xyZr/BkhvwUqr011jDSD/QTULxg==", "dev": true, "requires": { - "ajv": "5.5.2", - "babel-code-frame": "6.26.0", - "chalk": "2.3.0", - "concat-stream": "1.6.0", - "cross-spawn": "5.1.0", - "debug": "3.1.0", - "doctrine": "2.1.0", - "eslint-scope": "3.7.1", - "eslint-visitor-keys": "1.0.0", - "espree": "3.5.2", - "esquery": "1.0.0", - "esutils": "2.0.2", - "file-entry-cache": "2.0.0", - "functional-red-black-tree": "1.0.1", - "glob": "7.1.2", - "globals": "11.3.0", - "ignore": "3.3.7", - "imurmurhash": "0.1.4", - "inquirer": "3.3.0", - "is-resolvable": "1.1.0", - "js-yaml": "3.10.0", - "json-stable-stringify-without-jsonify": "1.0.1", - "levn": "0.3.0", - "lodash": "4.17.4", - "minimatch": "3.0.4", - "mkdirp": "0.5.1", - "natural-compare": "1.4.0", - "optionator": "0.8.2", - "path-is-inside": "1.0.2", - "pluralize": "7.0.0", - "progress": "2.0.0", - "require-uncached": "1.0.3", - "semver": "5.5.0", - "strip-ansi": "4.0.0", - "strip-json-comments": "2.0.1", - "table": "4.0.2", - "text-table": "0.2.0" + "ajv": "^5.3.0", + "babel-code-frame": "^6.22.0", + "chalk": "^2.1.0", + "concat-stream": "^1.6.0", + "cross-spawn": "^5.1.0", + "debug": "^3.1.0", + "doctrine": "^2.1.0", + "eslint-scope": "^3.7.1", + "eslint-visitor-keys": "^1.0.0", + "espree": "^3.5.2", + "esquery": "^1.0.0", + "esutils": "^2.0.2", + "file-entry-cache": "^2.0.0", + "functional-red-black-tree": "^1.0.1", + "glob": "^7.1.2", + "globals": "^11.0.1", + "ignore": "^3.3.3", + "imurmurhash": "^0.1.4", + "inquirer": "^3.0.6", + "is-resolvable": "^1.0.0", + "js-yaml": "^3.9.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.3.0", + "lodash": "^4.17.4", + "minimatch": "^3.0.2", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "optionator": "^0.8.2", + "path-is-inside": "^1.0.2", + "pluralize": "^7.0.0", + "progress": "^2.0.0", + "require-uncached": "^1.0.3", + "semver": "^5.3.0", + "strip-ansi": "^4.0.0", + "strip-json-comments": "~2.0.1", + "table": "^4.0.1", + "text-table": "~0.2.0" }, "dependencies": { "ansi-regex": { @@ -1456,7 +1456,7 @@ "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", "dev": true, "requires": { - "color-convert": "1.9.1" + "color-convert": "^1.9.0" } }, "chalk": { @@ -1465,9 +1465,9 @@ "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", "dev": true, "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "4.5.0" + "ansi-styles": "^3.1.0", + "escape-string-regexp": "^1.0.5", + "supports-color": "^4.0.0" } }, "debug": { @@ -1491,7 +1491,7 @@ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "requires": { - "ansi-regex": "3.0.0" + "ansi-regex": "^3.0.0" } }, "supports-color": { @@ -1500,7 +1500,7 @@ "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", "dev": true, "requires": { - "has-flag": "2.0.0" + "has-flag": "^2.0.0" } } } @@ -1511,11 +1511,11 @@ "integrity": "sha512-40aN976qSNPyb9ejTqjEthZITpls1SVKtwguahmH1dzGCwQU/vySE+xX33VZmD8csU0ahVNCtFlsPgKqRBiqgg==", "dev": true, "requires": { - "loader-fs-cache": "1.0.1", - "loader-utils": "1.1.0", - "object-assign": "4.1.1", - "object-hash": "1.2.0", - "rimraf": "2.6.2" + "loader-fs-cache": "^1.0.0", + "loader-utils": "^1.0.2", + "object-assign": "^4.0.1", + "object-hash": "^1.1.4", + "rimraf": "^2.6.1" } }, "eslint-scope": { @@ -1524,8 +1524,8 @@ "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=", "dev": true, "requires": { - "esrecurse": "4.2.0", - "estraverse": "4.2.0" + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" } }, "eslint-visitor-keys": { @@ -1540,8 +1540,8 @@ "integrity": "sha512-sadKeYwaR/aJ3stC2CdvgXu1T16TdYN+qwCpcWbMnGJ8s0zNWemzrvb2GbD4OhmJ/fwpJjudThAlLobGbWZbCQ==", "dev": true, "requires": { - "acorn": "5.4.1", - "acorn-jsx": "3.0.1" + "acorn": "^5.2.1", + "acorn-jsx": "^3.0.0" } }, "esprima": { @@ -1556,7 +1556,7 @@ "integrity": "sha1-z7qLV9f7qT8XKYqKAGoEzaE9gPo=", "dev": true, "requires": { - "estraverse": "4.2.0" + "estraverse": "^4.0.0" } }, "esrecurse": { @@ -1565,8 +1565,8 @@ "integrity": "sha1-+pVo2Y04I/mkHZHpAtyrnqblsWM=", "dev": true, "requires": { - "estraverse": "4.2.0", - "object-assign": "4.1.1" + "estraverse": "^4.1.0", + "object-assign": "^4.0.1" } }, "estraverse": { @@ -1587,8 +1587,8 @@ "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", "dev": true, "requires": { - "d": "1.0.0", - "es5-ext": "0.10.38" + "d": "1", + "es5-ext": "~0.10.14" } }, "events": { @@ -1603,8 +1603,8 @@ "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", "dev": true, "requires": { - "md5.js": "1.3.4", - "safe-buffer": "5.1.1" + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" } }, "execa": { @@ -1613,13 +1613,13 @@ "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", "dev": true, "requires": { - "cross-spawn": "5.1.0", - "get-stream": "3.0.0", - "is-stream": "1.1.0", - "npm-run-path": "2.0.2", - "p-finally": "1.0.0", - "signal-exit": "3.0.2", - "strip-eof": "1.0.0" + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" } }, "expand-brackets": { @@ -1628,7 +1628,7 @@ "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", "dev": true, "requires": { - "is-posix-bracket": "0.1.1" + "is-posix-bracket": "^0.1.0" } }, "expand-range": { @@ -1637,7 +1637,7 @@ "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", "dev": true, "requires": { - "fill-range": "2.2.3" + "fill-range": "^2.1.0" } }, "external-editor": { @@ -1646,9 +1646,9 @@ "integrity": "sha512-E44iT5QVOUJBKij4IIV3uvxuNlbKS38Tw1HiupxEIHPv9qtC2PrDYohbXV5U+1jnfIXttny8gUhj+oZvflFlzA==", "dev": true, "requires": { - "chardet": "0.4.2", - "iconv-lite": "0.4.19", - "tmp": "0.0.33" + "chardet": "^0.4.0", + "iconv-lite": "^0.4.17", + "tmp": "^0.0.33" } }, "extglob": { @@ -1657,7 +1657,7 @@ "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", "dev": true, "requires": { - "is-extglob": "1.0.0" + "is-extglob": "^1.0.0" } }, "fast-deep-equal": { @@ -1684,7 +1684,7 @@ "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", "dev": true, "requires": { - "escape-string-regexp": "1.0.5" + "escape-string-regexp": "^1.0.5" } }, "file-entry-cache": { @@ -1693,8 +1693,8 @@ "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", "dev": true, "requires": { - "flat-cache": "1.3.0", - "object-assign": "4.1.1" + "flat-cache": "^1.2.1", + "object-assign": "^4.0.1" } }, "filename-regex": { @@ -1709,11 +1709,11 @@ "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", "dev": true, "requires": { - "is-number": "2.1.0", - "isobject": "2.1.0", - "randomatic": "1.1.7", - "repeat-element": "1.1.2", - "repeat-string": "1.6.1" + "is-number": "^2.1.0", + "isobject": "^2.0.0", + "randomatic": "^1.1.3", + "repeat-element": "^1.1.2", + "repeat-string": "^1.5.2" } }, "find-cache-dir": { @@ -1722,9 +1722,9 @@ "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=", "dev": true, "requires": { - "commondir": "1.0.1", - "make-dir": "1.0.0", - "pkg-dir": "2.0.0" + "commondir": "^1.0.1", + "make-dir": "^1.0.0", + "pkg-dir": "^2.0.0" } }, "find-up": { @@ -1733,7 +1733,7 @@ "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", "dev": true, "requires": { - "locate-path": "2.0.0" + "locate-path": "^2.0.0" } }, "flat-cache": { @@ -1742,10 +1742,10 @@ "integrity": "sha1-0wMLMrOBVPTjt+nHCfSQ9++XxIE=", "dev": true, "requires": { - "circular-json": "0.3.3", - "del": "2.2.2", - "graceful-fs": "4.1.11", - "write": "0.2.1" + "circular-json": "^0.3.1", + "del": "^2.0.2", + "graceful-fs": "^4.1.2", + "write": "^0.2.1" } }, "for-in": { @@ -1760,7 +1760,7 @@ "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", "dev": true, "requires": { - "for-in": "1.0.2" + "for-in": "^1.0.1" } }, "fs.realpath": { @@ -1776,8 +1776,8 @@ "dev": true, "optional": true, "requires": { - "nan": "2.8.0", - "node-pre-gyp": "0.6.39" + "nan": "^2.3.0", + "node-pre-gyp": "^0.6.39" }, "dependencies": { "abbrev": { @@ -1792,14 +1792,15 @@ "dev": true, "optional": true, "requires": { - "co": "4.6.0", - "json-stable-stringify": "1.0.1" + "co": "^4.6.0", + "json-stable-stringify": "^1.0.1" } }, "ansi-regex": { "version": "2.1.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "aproba": { "version": "1.1.1", @@ -1813,8 +1814,8 @@ "dev": true, "optional": true, "requires": { - "delegates": "1.0.0", - "readable-stream": "2.2.9" + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" } }, "asn1": { @@ -1850,7 +1851,8 @@ "balanced-match": { "version": "0.4.2", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "bcrypt-pbkdf": { "version": "1.0.1", @@ -1858,38 +1860,42 @@ "dev": true, "optional": true, "requires": { - "tweetnacl": "0.14.5" + "tweetnacl": "^0.14.3" } }, "block-stream": { "version": "0.0.9", "bundled": true, "dev": true, + "optional": true, "requires": { - "inherits": "2.0.3" + "inherits": "~2.0.0" } }, "boom": { "version": "2.10.1", "bundled": true, "dev": true, + "optional": true, "requires": { - "hoek": "2.16.3" + "hoek": "2.x.x" } }, "brace-expansion": { "version": "1.1.7", "bundled": true, "dev": true, + "optional": true, "requires": { - "balanced-match": "0.4.2", + "balanced-match": "^0.4.1", "concat-map": "0.0.1" } }, "buffer-shims": { "version": "1.0.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "caseless": { "version": "0.12.0", @@ -1906,37 +1912,43 @@ "code-point-at": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "combined-stream": { "version": "1.0.5", "bundled": true, "dev": true, + "optional": true, "requires": { - "delayed-stream": "1.0.0" + "delayed-stream": "~1.0.0" } }, "concat-map": { "version": "0.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "console-control-strings": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "core-util-is": { "version": "1.0.2", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "cryptiles": { "version": "2.0.5", "bundled": true, "dev": true, + "optional": true, "requires": { - "boom": "2.10.1" + "boom": "2.x.x" } }, "dashdash": { @@ -1945,7 +1957,7 @@ "dev": true, "optional": true, "requires": { - "assert-plus": "1.0.0" + "assert-plus": "^1.0.0" }, "dependencies": { "assert-plus": { @@ -1974,7 +1986,8 @@ "delayed-stream": { "version": "1.0.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "delegates": { "version": "1.0.0", @@ -1994,7 +2007,7 @@ "dev": true, "optional": true, "requires": { - "jsbn": "0.1.1" + "jsbn": "~0.1.0" } }, "extend": { @@ -2006,7 +2019,8 @@ "extsprintf": { "version": "1.0.2", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "forever-agent": { "version": "0.6.1", @@ -2020,25 +2034,27 @@ "dev": true, "optional": true, "requires": { - "asynckit": "0.4.0", - "combined-stream": "1.0.5", - "mime-types": "2.1.15" + "asynckit": "^0.4.0", + "combined-stream": "^1.0.5", + "mime-types": "^2.1.12" } }, "fs.realpath": { "version": "1.0.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "fstream": { "version": "1.0.11", "bundled": true, "dev": true, + "optional": true, "requires": { - "graceful-fs": "4.1.11", - "inherits": "2.0.3", - "mkdirp": "0.5.1", - "rimraf": "2.6.1" + "graceful-fs": "^4.1.2", + "inherits": "~2.0.0", + "mkdirp": ">=0.5 0", + "rimraf": "2" } }, "fstream-ignore": { @@ -2047,9 +2063,9 @@ "dev": true, "optional": true, "requires": { - "fstream": "1.0.11", - "inherits": "2.0.3", - "minimatch": "3.0.4" + "fstream": "^1.0.0", + "inherits": "2", + "minimatch": "^3.0.0" } }, "gauge": { @@ -2058,14 +2074,14 @@ "dev": true, "optional": true, "requires": { - "aproba": "1.1.1", - "console-control-strings": "1.1.0", - "has-unicode": "2.0.1", - "object-assign": "4.1.1", - "signal-exit": "3.0.2", - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wide-align": "1.1.2" + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" } }, "getpass": { @@ -2074,7 +2090,7 @@ "dev": true, "optional": true, "requires": { - "assert-plus": "1.0.0" + "assert-plus": "^1.0.0" }, "dependencies": { "assert-plus": { @@ -2089,19 +2105,21 @@ "version": "7.1.2", "bundled": true, "dev": true, + "optional": true, "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, "graceful-fs": { "version": "4.1.11", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "har-schema": { "version": "1.0.5", @@ -2115,8 +2133,8 @@ "dev": true, "optional": true, "requires": { - "ajv": "4.11.8", - "har-schema": "1.0.5" + "ajv": "^4.9.1", + "har-schema": "^1.0.5" } }, "has-unicode": { @@ -2129,17 +2147,19 @@ "version": "3.1.3", "bundled": true, "dev": true, + "optional": true, "requires": { - "boom": "2.10.1", - "cryptiles": "2.0.5", - "hoek": "2.16.3", - "sntp": "1.0.9" + "boom": "2.x.x", + "cryptiles": "2.x.x", + "hoek": "2.x.x", + "sntp": "1.x.x" } }, "hoek": { "version": "2.16.3", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "http-signature": { "version": "1.1.1", @@ -2147,24 +2167,26 @@ "dev": true, "optional": true, "requires": { - "assert-plus": "0.2.0", - "jsprim": "1.4.0", - "sshpk": "1.13.0" + "assert-plus": "^0.2.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" } }, "inflight": { "version": "1.0.6", "bundled": true, "dev": true, + "optional": true, "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" + "once": "^1.3.0", + "wrappy": "1" } }, "inherits": { "version": "2.0.3", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "ini": { "version": "1.3.4", @@ -2176,8 +2198,9 @@ "version": "1.0.0", "bundled": true, "dev": true, + "optional": true, "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "^1.0.0" } }, "is-typedarray": { @@ -2189,7 +2212,8 @@ "isarray": { "version": "1.0.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "isstream": { "version": "0.1.2", @@ -2203,7 +2227,7 @@ "dev": true, "optional": true, "requires": { - "jsbn": "0.1.1" + "jsbn": "~0.1.0" } }, "jsbn": { @@ -2224,7 +2248,7 @@ "dev": true, "optional": true, "requires": { - "jsonify": "0.0.0" + "jsonify": "~0.0.0" } }, "json-stringify-safe": { @@ -2262,33 +2286,38 @@ "mime-db": { "version": "1.27.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "mime-types": { "version": "2.1.15", "bundled": true, "dev": true, + "optional": true, "requires": { - "mime-db": "1.27.0" + "mime-db": "~1.27.0" } }, "minimatch": { "version": "3.0.4", "bundled": true, "dev": true, + "optional": true, "requires": { - "brace-expansion": "1.1.7" + "brace-expansion": "^1.1.7" } }, "minimist": { "version": "0.0.8", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "mkdirp": { "version": "0.5.1", "bundled": true, "dev": true, + "optional": true, "requires": { "minimist": "0.0.8" } @@ -2305,17 +2334,17 @@ "dev": true, "optional": true, "requires": { - "detect-libc": "1.0.2", + "detect-libc": "^1.0.2", "hawk": "3.1.3", - "mkdirp": "0.5.1", - "nopt": "4.0.1", - "npmlog": "4.1.0", - "rc": "1.2.1", + "mkdirp": "^0.5.1", + "nopt": "^4.0.1", + "npmlog": "^4.0.2", + "rc": "^1.1.7", "request": "2.81.0", - "rimraf": "2.6.1", - "semver": "5.3.0", - "tar": "2.2.1", - "tar-pack": "3.4.0" + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^2.2.1", + "tar-pack": "^3.4.0" } }, "nopt": { @@ -2324,8 +2353,8 @@ "dev": true, "optional": true, "requires": { - "abbrev": "1.1.0", - "osenv": "0.1.4" + "abbrev": "1", + "osenv": "^0.1.4" } }, "npmlog": { @@ -2334,16 +2363,17 @@ "dev": true, "optional": true, "requires": { - "are-we-there-yet": "1.1.4", - "console-control-strings": "1.1.0", - "gauge": "2.7.4", - "set-blocking": "2.0.0" + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" } }, "number-is-nan": { "version": "1.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "oauth-sign": { "version": "0.8.2", @@ -2361,8 +2391,9 @@ "version": "1.4.0", "bundled": true, "dev": true, + "optional": true, "requires": { - "wrappy": "1.0.2" + "wrappy": "1" } }, "os-homedir": { @@ -2383,14 +2414,15 @@ "dev": true, "optional": true, "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" } }, "path-is-absolute": { "version": "1.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "performance-now": { "version": "0.2.0", @@ -2401,7 +2433,8 @@ "process-nextick-args": { "version": "1.0.7", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "punycode": { "version": "1.4.1", @@ -2421,10 +2454,10 @@ "dev": true, "optional": true, "requires": { - "deep-extend": "0.4.2", - "ini": "1.3.4", - "minimist": "1.2.0", - "strip-json-comments": "2.0.1" + "deep-extend": "~0.4.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" }, "dependencies": { "minimist": { @@ -2439,14 +2472,15 @@ "version": "2.2.9", "bundled": true, "dev": true, + "optional": true, "requires": { - "buffer-shims": "1.0.0", - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "string_decoder": "1.0.1", - "util-deprecate": "1.0.2" + "buffer-shims": "~1.0.0", + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "~1.0.0", + "process-nextick-args": "~1.0.6", + "string_decoder": "~1.0.0", + "util-deprecate": "~1.0.1" } }, "request": { @@ -2455,42 +2489,44 @@ "dev": true, "optional": true, "requires": { - "aws-sign2": "0.6.0", - "aws4": "1.6.0", - "caseless": "0.12.0", - "combined-stream": "1.0.5", - "extend": "3.0.1", - "forever-agent": "0.6.1", - "form-data": "2.1.4", - "har-validator": "4.2.1", - "hawk": "3.1.3", - "http-signature": "1.1.1", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.15", - "oauth-sign": "0.8.2", - "performance-now": "0.2.0", - "qs": "6.4.0", - "safe-buffer": "5.0.1", - "stringstream": "0.0.5", - "tough-cookie": "2.3.2", - "tunnel-agent": "0.6.0", - "uuid": "3.0.1" + "aws-sign2": "~0.6.0", + "aws4": "^1.2.1", + "caseless": "~0.12.0", + "combined-stream": "~1.0.5", + "extend": "~3.0.0", + "forever-agent": "~0.6.1", + "form-data": "~2.1.1", + "har-validator": "~4.2.1", + "hawk": "~3.1.3", + "http-signature": "~1.1.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.7", + "oauth-sign": "~0.8.1", + "performance-now": "^0.2.0", + "qs": "~6.4.0", + "safe-buffer": "^5.0.1", + "stringstream": "~0.0.4", + "tough-cookie": "~2.3.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.0.0" } }, "rimraf": { "version": "2.6.1", "bundled": true, "dev": true, + "optional": true, "requires": { - "glob": "7.1.2" + "glob": "^7.0.5" } }, "safe-buffer": { "version": "5.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "semver": { "version": "5.3.0", @@ -2514,8 +2550,9 @@ "version": "1.0.9", "bundled": true, "dev": true, + "optional": true, "requires": { - "hoek": "2.16.3" + "hoek": "2.x.x" } }, "sshpk": { @@ -2524,15 +2561,15 @@ "dev": true, "optional": true, "requires": { - "asn1": "0.2.3", - "assert-plus": "1.0.0", - "bcrypt-pbkdf": "1.0.1", - "dashdash": "1.14.1", - "ecc-jsbn": "0.1.1", - "getpass": "0.1.7", - "jodid25519": "1.0.2", - "jsbn": "0.1.1", - "tweetnacl": "0.14.5" + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jodid25519": "^1.0.0", + "jsbn": "~0.1.0", + "tweetnacl": "~0.14.0" }, "dependencies": { "assert-plus": { @@ -2547,18 +2584,20 @@ "version": "1.0.2", "bundled": true, "dev": true, + "optional": true, "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" } }, "string_decoder": { "version": "1.0.1", "bundled": true, "dev": true, + "optional": true, "requires": { - "safe-buffer": "5.0.1" + "safe-buffer": "^5.0.1" } }, "stringstream": { @@ -2571,8 +2610,9 @@ "version": "3.0.1", "bundled": true, "dev": true, + "optional": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "strip-json-comments": { @@ -2585,10 +2625,11 @@ "version": "2.2.1", "bundled": true, "dev": true, + "optional": true, "requires": { - "block-stream": "0.0.9", - "fstream": "1.0.11", - "inherits": "2.0.3" + "block-stream": "*", + "fstream": "^1.0.2", + "inherits": "2" } }, "tar-pack": { @@ -2597,14 +2638,14 @@ "dev": true, "optional": true, "requires": { - "debug": "2.6.8", - "fstream": "1.0.11", - "fstream-ignore": "1.0.5", - "once": "1.4.0", - "readable-stream": "2.2.9", - "rimraf": "2.6.1", - "tar": "2.2.1", - "uid-number": "0.0.6" + "debug": "^2.2.0", + "fstream": "^1.0.10", + "fstream-ignore": "^1.0.5", + "once": "^1.3.3", + "readable-stream": "^2.1.4", + "rimraf": "^2.5.1", + "tar": "^2.2.1", + "uid-number": "^0.0.6" } }, "tough-cookie": { @@ -2613,7 +2654,7 @@ "dev": true, "optional": true, "requires": { - "punycode": "1.4.1" + "punycode": "^1.4.1" } }, "tunnel-agent": { @@ -2622,7 +2663,7 @@ "dev": true, "optional": true, "requires": { - "safe-buffer": "5.0.1" + "safe-buffer": "^5.0.1" } }, "tweetnacl": { @@ -2640,7 +2681,8 @@ "util-deprecate": { "version": "1.0.2", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "uuid": { "version": "3.0.1", @@ -2663,13 +2705,14 @@ "dev": true, "optional": true, "requires": { - "string-width": "1.0.2" + "string-width": "^1.0.2" } }, "wrappy": { "version": "1.0.2", "bundled": true, - "dev": true + "dev": true, + "optional": true } } }, @@ -2697,12 +2740,12 @@ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", "dev": true, "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, "glob-base": { @@ -2711,8 +2754,8 @@ "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", "dev": true, "requires": { - "glob-parent": "2.0.0", - "is-glob": "2.0.1" + "glob-parent": "^2.0.0", + "is-glob": "^2.0.0" } }, "glob-parent": { @@ -2721,7 +2764,7 @@ "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", "dev": true, "requires": { - "is-glob": "2.0.1" + "is-glob": "^2.0.0" } }, "globals": { @@ -2736,12 +2779,12 @@ "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", "dev": true, "requires": { - "array-union": "1.0.2", - "arrify": "1.0.1", - "glob": "7.1.2", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" + "array-union": "^1.0.1", + "arrify": "^1.0.0", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" } }, "graceful-fs": { @@ -2756,7 +2799,7 @@ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "has-flag": { @@ -2771,7 +2814,7 @@ "integrity": "sha1-ZuodhW206KVHDK32/OI65SRO8uE=", "dev": true, "requires": { - "inherits": "2.0.3" + "inherits": "^2.0.1" } }, "hash.js": { @@ -2780,8 +2823,8 @@ "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", "dev": true, "requires": { - "inherits": "2.0.3", - "minimalistic-assert": "1.0.0" + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.0" } }, "hmac-drbg": { @@ -2790,9 +2833,9 @@ "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", "dev": true, "requires": { - "hash.js": "1.1.3", - "minimalistic-assert": "1.0.0", - "minimalistic-crypto-utils": "1.0.1" + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" } }, "home-or-tmp": { @@ -2801,8 +2844,8 @@ "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", "dev": true, "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.1" } }, "hosted-git-info": { @@ -2853,8 +2896,8 @@ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" + "once": "^1.3.0", + "wrappy": "1" } }, "inherits": { @@ -2869,20 +2912,20 @@ "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==", "dev": true, "requires": { - "ansi-escapes": "3.0.0", - "chalk": "2.3.0", - "cli-cursor": "2.1.0", - "cli-width": "2.2.0", - "external-editor": "2.1.0", - "figures": "2.0.0", - "lodash": "4.17.4", + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.0", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^2.0.4", + "figures": "^2.0.0", + "lodash": "^4.3.0", "mute-stream": "0.0.7", - "run-async": "2.3.0", - "rx-lite": "4.0.8", - "rx-lite-aggregates": "4.0.8", - "string-width": "2.1.1", - "strip-ansi": "4.0.0", - "through": "2.3.8" + "run-async": "^2.2.0", + "rx-lite": "^4.0.8", + "rx-lite-aggregates": "^4.0.8", + "string-width": "^2.1.0", + "strip-ansi": "^4.0.0", + "through": "^2.3.6" }, "dependencies": { "ansi-regex": { @@ -2897,7 +2940,7 @@ "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", "dev": true, "requires": { - "color-convert": "1.9.1" + "color-convert": "^1.9.0" } }, "chalk": { @@ -2906,9 +2949,9 @@ "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", "dev": true, "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "4.5.0" + "ansi-styles": "^3.1.0", + "escape-string-regexp": "^1.0.5", + "supports-color": "^4.0.0" } }, "strip-ansi": { @@ -2917,7 +2960,7 @@ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "requires": { - "ansi-regex": "3.0.0" + "ansi-regex": "^3.0.0" } }, "supports-color": { @@ -2926,7 +2969,7 @@ "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", "dev": true, "requires": { - "has-flag": "2.0.0" + "has-flag": "^2.0.0" } } } @@ -2943,7 +2986,7 @@ "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=", "dev": true, "requires": { - "loose-envify": "1.3.1" + "loose-envify": "^1.0.0" } }, "invert-kv": { @@ -2964,7 +3007,7 @@ "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", "dev": true, "requires": { - "binary-extensions": "1.11.0" + "binary-extensions": "^1.0.0" } }, "is-buffer": { @@ -2979,7 +3022,7 @@ "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", "dev": true, "requires": { - "builtin-modules": "1.1.1" + "builtin-modules": "^1.0.0" } }, "is-dotfile": { @@ -2994,7 +3037,7 @@ "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", "dev": true, "requires": { - "is-primitive": "2.0.0" + "is-primitive": "^2.0.0" } }, "is-extendable": { @@ -3015,7 +3058,7 @@ "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", "dev": true, "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "^1.0.0" } }, "is-fullwidth-code-point": { @@ -3030,7 +3073,7 @@ "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", "dev": true, "requires": { - "is-extglob": "1.0.0" + "is-extglob": "^1.0.0" } }, "is-number": { @@ -3039,7 +3082,7 @@ "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" } }, "is-path-cwd": { @@ -3054,7 +3097,7 @@ "integrity": "sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=", "dev": true, "requires": { - "is-path-inside": "1.0.1" + "is-path-inside": "^1.0.0" } }, "is-path-inside": { @@ -3063,7 +3106,7 @@ "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", "dev": true, "requires": { - "path-is-inside": "1.0.2" + "path-is-inside": "^1.0.1" } }, "is-posix-bracket": { @@ -3129,8 +3172,8 @@ "integrity": "sha512-O2v52ffjLa9VeM43J4XocZE//WT9N0IiwDa3KSHH7Tu8CtH+1qM8SIZvnsTh6v+4yFy5KUY3BHUVwjpfAWsjIA==", "dev": true, "requires": { - "argparse": "1.0.9", - "esprima": "4.0.0" + "argparse": "^1.0.7", + "esprima": "^4.0.0" } }, "jsesc": { @@ -3169,7 +3212,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } }, "lazy-cache": { @@ -3184,7 +3227,7 @@ "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", "dev": true, "requires": { - "invert-kv": "1.0.0" + "invert-kv": "^1.0.0" } }, "levn": { @@ -3193,8 +3236,8 @@ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", "dev": true, "requires": { - "prelude-ls": "1.1.2", - "type-check": "0.3.2" + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" } }, "load-json-file": { @@ -3203,10 +3246,10 @@ "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "parse-json": "2.2.0", - "pify": "2.3.0", - "strip-bom": "3.0.0" + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "strip-bom": "^3.0.0" } }, "loader-fs-cache": { @@ -3215,7 +3258,7 @@ "integrity": "sha1-VuC/CL2XCLJqdltoUJhAyN7J/bw=", "dev": true, "requires": { - "find-cache-dir": "0.1.1", + "find-cache-dir": "^0.1.1", "mkdirp": "0.5.1" }, "dependencies": { @@ -3225,9 +3268,9 @@ "integrity": "sha1-yN765XyKUqinhPnjHFfHQumToLk=", "dev": true, "requires": { - "commondir": "1.0.1", - "mkdirp": "0.5.1", - "pkg-dir": "1.0.0" + "commondir": "^1.0.1", + "mkdirp": "^0.5.1", + "pkg-dir": "^1.0.0" } }, "find-up": { @@ -3236,8 +3279,8 @@ "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", "dev": true, "requires": { - "path-exists": "2.1.0", - "pinkie-promise": "2.0.1" + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" } }, "path-exists": { @@ -3246,7 +3289,7 @@ "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", "dev": true, "requires": { - "pinkie-promise": "2.0.1" + "pinkie-promise": "^2.0.0" } }, "pkg-dir": { @@ -3255,7 +3298,7 @@ "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", "dev": true, "requires": { - "find-up": "1.1.2" + "find-up": "^1.0.0" } } } @@ -3272,9 +3315,9 @@ "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", "dev": true, "requires": { - "big.js": "3.2.0", - "emojis-list": "2.1.0", - "json5": "0.5.1" + "big.js": "^3.1.3", + "emojis-list": "^2.0.0", + "json5": "^0.5.0" } }, "locate-path": { @@ -3283,8 +3326,8 @@ "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", "dev": true, "requires": { - "p-locate": "2.0.0", - "path-exists": "3.0.0" + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" } }, "lodash": { @@ -3305,7 +3348,7 @@ "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", "dev": true, "requires": { - "js-tokens": "3.0.2" + "js-tokens": "^3.0.0" } }, "lru-cache": { @@ -3314,8 +3357,8 @@ "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==", "dev": true, "requires": { - "pseudomap": "1.0.2", - "yallist": "2.1.2" + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" } }, "make-dir": { @@ -3324,7 +3367,7 @@ "integrity": "sha1-l6ARdR6R3YfPre9Ygy67BJNt6Xg=", "dev": true, "requires": { - "pify": "2.3.0" + "pify": "^2.3.0" } }, "md5.js": { @@ -3333,8 +3376,8 @@ "integrity": "sha1-6b296UogpawYsENA/Fdk1bCdkB0=", "dev": true, "requires": { - "hash-base": "3.0.4", - "inherits": "2.0.3" + "hash-base": "^3.0.0", + "inherits": "^2.0.1" }, "dependencies": { "hash-base": { @@ -3343,8 +3386,8 @@ "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", "dev": true, "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.1" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } } } @@ -3355,7 +3398,7 @@ "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", "dev": true, "requires": { - "mimic-fn": "1.2.0" + "mimic-fn": "^1.0.0" } }, "memory-fs": { @@ -3364,8 +3407,8 @@ "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", "dev": true, "requires": { - "errno": "0.1.6", - "readable-stream": "2.3.3" + "errno": "^0.1.3", + "readable-stream": "^2.0.1" } }, "micromatch": { @@ -3374,19 +3417,19 @@ "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", "dev": true, "requires": { - "arr-diff": "2.0.0", - "array-unique": "0.2.1", - "braces": "1.8.5", - "expand-brackets": "0.1.5", - "extglob": "0.3.2", - "filename-regex": "2.0.1", - "is-extglob": "1.0.0", - "is-glob": "2.0.1", - "kind-of": "3.2.2", - "normalize-path": "2.1.1", - "object.omit": "2.0.1", - "parse-glob": "3.0.4", - "regex-cache": "0.4.4" + "arr-diff": "^2.0.0", + "array-unique": "^0.2.1", + "braces": "^1.8.2", + "expand-brackets": "^0.1.4", + "extglob": "^0.3.1", + "filename-regex": "^2.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.1", + "kind-of": "^3.0.2", + "normalize-path": "^2.0.1", + "object.omit": "^2.0.0", + "parse-glob": "^3.0.4", + "regex-cache": "^0.4.2" } }, "miller-rabin": { @@ -3395,8 +3438,8 @@ "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", "dev": true, "requires": { - "bn.js": "4.11.8", - "brorand": "1.1.0" + "bn.js": "^4.0.0", + "brorand": "^1.0.1" } }, "mimic-fn": { @@ -3423,7 +3466,7 @@ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, "requires": { - "brace-expansion": "1.1.8" + "brace-expansion": "^1.1.7" } }, "minimist": { @@ -3472,28 +3515,28 @@ "integrity": "sha512-5AzFzdoIMb89hBGMZglEegffzgRg+ZFoUmisQ8HI4j1KDdpx13J0taNp2y9xPbur6W61gepGDDotGBVQ7mfUCg==", "dev": true, "requires": { - "assert": "1.4.1", - "browserify-zlib": "0.2.0", - "buffer": "4.9.1", - "console-browserify": "1.1.0", - "constants-browserify": "1.0.0", - "crypto-browserify": "3.12.0", - "domain-browser": "1.2.0", - "events": "1.1.1", - "https-browserify": "1.0.0", - "os-browserify": "0.3.0", + "assert": "^1.1.1", + "browserify-zlib": "^0.2.0", + "buffer": "^4.3.0", + "console-browserify": "^1.1.0", + "constants-browserify": "^1.0.0", + "crypto-browserify": "^3.11.0", + "domain-browser": "^1.1.1", + "events": "^1.0.0", + "https-browserify": "^1.0.0", + "os-browserify": "^0.3.0", "path-browserify": "0.0.0", - "process": "0.11.10", - "punycode": "1.4.1", - "querystring-es3": "0.2.1", - "readable-stream": "2.3.3", - "stream-browserify": "2.0.1", - "stream-http": "2.8.0", - "string_decoder": "1.0.3", - "timers-browserify": "2.0.6", + "process": "^0.11.10", + "punycode": "^1.2.4", + "querystring-es3": "^0.2.0", + "readable-stream": "^2.3.3", + "stream-browserify": "^2.0.1", + "stream-http": "^2.7.2", + "string_decoder": "^1.0.0", + "timers-browserify": "^2.0.4", "tty-browserify": "0.0.0", - "url": "0.11.0", - "util": "0.10.3", + "url": "^0.11.0", + "util": "^0.10.3", "vm-browserify": "0.0.4" } }, @@ -3503,10 +3546,10 @@ "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", "dev": true, "requires": { - "hosted-git-info": "2.5.0", - "is-builtin-module": "1.0.0", - "semver": "5.5.0", - "validate-npm-package-license": "3.0.1" + "hosted-git-info": "^2.1.4", + "is-builtin-module": "^1.0.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" } }, "normalize-path": { @@ -3515,7 +3558,7 @@ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", "dev": true, "requires": { - "remove-trailing-separator": "1.1.0" + "remove-trailing-separator": "^1.0.1" } }, "npm-run-path": { @@ -3524,7 +3567,7 @@ "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", "dev": true, "requires": { - "path-key": "2.0.1" + "path-key": "^2.0.0" } }, "number-is-nan": { @@ -3551,8 +3594,8 @@ "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", "dev": true, "requires": { - "for-own": "0.1.5", - "is-extendable": "0.1.1" + "for-own": "^0.1.4", + "is-extendable": "^0.1.1" } }, "once": { @@ -3561,7 +3604,7 @@ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, "requires": { - "wrappy": "1.0.2" + "wrappy": "1" } }, "onetime": { @@ -3570,7 +3613,7 @@ "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", "dev": true, "requires": { - "mimic-fn": "1.2.0" + "mimic-fn": "^1.0.0" } }, "optionator": { @@ -3579,12 +3622,12 @@ "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", "dev": true, "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", - "wordwrap": "1.0.0" + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.4", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "wordwrap": "~1.0.0" } }, "os-browserify": { @@ -3605,9 +3648,9 @@ "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", "dev": true, "requires": { - "execa": "0.7.0", - "lcid": "1.0.0", - "mem": "1.1.0" + "execa": "^0.7.0", + "lcid": "^1.0.0", + "mem": "^1.1.0" } }, "os-tmpdir": { @@ -3634,7 +3677,7 @@ "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", "dev": true, "requires": { - "p-limit": "1.1.0" + "p-limit": "^1.1.0" } }, "pako": { @@ -3649,11 +3692,11 @@ "integrity": "sha1-N8T5t+06tlx0gXtfJICTf7+XxxI=", "dev": true, "requires": { - "asn1.js": "4.9.2", - "browserify-aes": "1.1.1", - "create-hash": "1.1.3", - "evp_bytestokey": "1.0.3", - "pbkdf2": "3.0.14" + "asn1.js": "^4.0.0", + "browserify-aes": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3" } }, "parse-glob": { @@ -3662,10 +3705,10 @@ "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", "dev": true, "requires": { - "glob-base": "0.3.0", - "is-dotfile": "1.0.3", - "is-extglob": "1.0.0", - "is-glob": "2.0.1" + "glob-base": "^0.3.0", + "is-dotfile": "^1.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.0" } }, "parse-json": { @@ -3674,7 +3717,7 @@ "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", "dev": true, "requires": { - "error-ex": "1.3.1" + "error-ex": "^1.2.0" } }, "path-browserify": { @@ -3713,7 +3756,7 @@ "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", "dev": true, "requires": { - "pify": "2.3.0" + "pify": "^2.0.0" } }, "pbkdf2": { @@ -3722,11 +3765,11 @@ "integrity": "sha512-gjsZW9O34fm0R7PaLHRJmLLVfSoesxztjPjE9o6R+qtVJij90ltg1joIovN9GKrRW3t1PzhDDG3UMEMFfZ+1wA==", "dev": true, "requires": { - "create-hash": "1.1.3", - "create-hmac": "1.1.6", - "ripemd160": "2.0.1", - "safe-buffer": "5.1.1", - "sha.js": "2.4.10" + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" } }, "pify": { @@ -3747,7 +3790,7 @@ "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", "dev": true, "requires": { - "pinkie": "2.0.4" + "pinkie": "^2.0.0" } }, "pkg-dir": { @@ -3756,7 +3799,7 @@ "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", "dev": true, "requires": { - "find-up": "2.1.0" + "find-up": "^2.1.0" } }, "pluralize": { @@ -3819,11 +3862,11 @@ "integrity": "sha1-OfaZ86RlYN1eusvKaTyvfGXBjMY=", "dev": true, "requires": { - "bn.js": "4.11.8", - "browserify-rsa": "4.0.1", - "create-hash": "1.1.3", - "parse-asn1": "5.1.0", - "randombytes": "2.0.6" + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1" } }, "punycode": { @@ -3850,8 +3893,8 @@ "integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==", "dev": true, "requires": { - "is-number": "3.0.0", - "kind-of": "4.0.0" + "is-number": "^3.0.0", + "kind-of": "^4.0.0" }, "dependencies": { "is-number": { @@ -3860,7 +3903,7 @@ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -3869,7 +3912,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -3880,7 +3923,7 @@ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -3891,7 +3934,7 @@ "integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==", "dev": true, "requires": { - "safe-buffer": "5.1.1" + "safe-buffer": "^5.1.0" } }, "randomfill": { @@ -3900,8 +3943,8 @@ "integrity": "sha512-YL6GrhrWoic0Eq8rXVbMptH7dAxCs0J+mh5Y0euNekPPYaxEmdVGim6GdoxoRzKW2yJoU8tueifS7mYxvcFDEQ==", "dev": true, "requires": { - "randombytes": "2.0.6", - "safe-buffer": "5.1.1" + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" } }, "read-pkg": { @@ -3910,9 +3953,9 @@ "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", "dev": true, "requires": { - "load-json-file": "2.0.0", - "normalize-package-data": "2.4.0", - "path-type": "2.0.0" + "load-json-file": "^2.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^2.0.0" } }, "read-pkg-up": { @@ -3921,8 +3964,8 @@ "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", "dev": true, "requires": { - "find-up": "2.1.0", - "read-pkg": "2.0.0" + "find-up": "^2.0.0", + "read-pkg": "^2.0.0" } }, "readable-stream": { @@ -3931,13 +3974,13 @@ "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "safe-buffer": "5.1.1", - "string_decoder": "1.0.3", - "util-deprecate": "1.0.2" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~1.0.6", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.0.3", + "util-deprecate": "~1.0.1" } }, "readdirp": { @@ -3946,10 +3989,10 @@ "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "minimatch": "3.0.4", - "readable-stream": "2.3.3", - "set-immediate-shim": "1.0.1" + "graceful-fs": "^4.1.2", + "minimatch": "^3.0.2", + "readable-stream": "^2.0.2", + "set-immediate-shim": "^1.0.1" } }, "regenerate": { @@ -3970,9 +4013,9 @@ "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "private": "0.1.8" + "babel-runtime": "^6.18.0", + "babel-types": "^6.19.0", + "private": "^0.1.6" } }, "regex-cache": { @@ -3981,7 +4024,7 @@ "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", "dev": true, "requires": { - "is-equal-shallow": "0.1.3" + "is-equal-shallow": "^0.1.3" } }, "regexpu-core": { @@ -3990,9 +4033,9 @@ "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=", "dev": true, "requires": { - "regenerate": "1.3.3", - "regjsgen": "0.2.0", - "regjsparser": "0.1.5" + "regenerate": "^1.2.1", + "regjsgen": "^0.2.0", + "regjsparser": "^0.1.4" } }, "regjsgen": { @@ -4007,7 +4050,7 @@ "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", "dev": true, "requires": { - "jsesc": "0.5.0" + "jsesc": "~0.5.0" }, "dependencies": { "jsesc": { @@ -4042,7 +4085,7 @@ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", "dev": true, "requires": { - "is-finite": "1.0.2" + "is-finite": "^1.0.0" } }, "require-directory": { @@ -4063,8 +4106,8 @@ "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", "dev": true, "requires": { - "caller-path": "0.1.0", - "resolve-from": "1.0.1" + "caller-path": "^0.1.0", + "resolve-from": "^1.0.0" } }, "resolve-from": { @@ -4079,8 +4122,8 @@ "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", "dev": true, "requires": { - "onetime": "2.0.1", - "signal-exit": "3.0.2" + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" } }, "right-align": { @@ -4089,7 +4132,7 @@ "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", "dev": true, "requires": { - "align-text": "0.1.4" + "align-text": "^0.1.1" } }, "rimraf": { @@ -4098,7 +4141,7 @@ "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", "dev": true, "requires": { - "glob": "7.1.2" + "glob": "^7.0.5" } }, "ripemd160": { @@ -4107,8 +4150,8 @@ "integrity": "sha1-D0WEKVxTo2KK9+bXmsohzlfRxuc=", "dev": true, "requires": { - "hash-base": "2.0.2", - "inherits": "2.0.3" + "hash-base": "^2.0.0", + "inherits": "^2.0.1" } }, "run-async": { @@ -4117,7 +4160,7 @@ "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", "dev": true, "requires": { - "is-promise": "2.1.0" + "is-promise": "^2.1.0" } }, "rx-lite": { @@ -4132,7 +4175,7 @@ "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=", "dev": true, "requires": { - "rx-lite": "4.0.8" + "rx-lite": "*" } }, "safe-buffer": { @@ -4171,8 +4214,8 @@ "integrity": "sha512-vnwmrFDlOExK4Nm16J2KMWHLrp14lBrjxMxBJpu++EnsuBmpiYaM/MEs46Vxxm/4FvdP5yTwuCTO9it5FSjrqA==", "dev": true, "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.1" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, "shebang-command": { @@ -4181,7 +4224,7 @@ "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", "dev": true, "requires": { - "shebang-regex": "1.0.0" + "shebang-regex": "^1.0.0" } }, "shebang-regex": { @@ -4208,7 +4251,7 @@ "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", "dev": true, "requires": { - "is-fullwidth-code-point": "2.0.0" + "is-fullwidth-code-point": "^2.0.0" } }, "source-list-map": { @@ -4229,7 +4272,7 @@ "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", "dev": true, "requires": { - "source-map": "0.5.7" + "source-map": "^0.5.6" } }, "spdx-correct": { @@ -4238,7 +4281,7 @@ "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=", "dev": true, "requires": { - "spdx-license-ids": "1.2.2" + "spdx-license-ids": "^1.0.2" } }, "spdx-expression-parse": { @@ -4265,8 +4308,8 @@ "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=", "dev": true, "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.3" + "inherits": "~2.0.1", + "readable-stream": "^2.0.2" } }, "stream-http": { @@ -4275,11 +4318,11 @@ "integrity": "sha512-sZOFxI/5xw058XIRHl4dU3dZ+TTOIGJR78Dvo0oEAejIt4ou27k+3ne1zYmCV+v7UucbxIFQuOgnkTVHh8YPnw==", "dev": true, "requires": { - "builtin-status-codes": "3.0.0", - "inherits": "2.0.3", - "readable-stream": "2.3.3", - "to-arraybuffer": "1.0.1", - "xtend": "4.0.1" + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.3.3", + "to-arraybuffer": "^1.0.0", + "xtend": "^4.0.0" } }, "string-width": { @@ -4288,8 +4331,8 @@ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true, "requires": { - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "4.0.0" + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" }, "dependencies": { "ansi-regex": { @@ -4304,7 +4347,7 @@ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "requires": { - "ansi-regex": "3.0.0" + "ansi-regex": "^3.0.0" } } } @@ -4315,7 +4358,7 @@ "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", "dev": true, "requires": { - "safe-buffer": "5.1.1" + "safe-buffer": "~5.1.0" } }, "strip-ansi": { @@ -4324,7 +4367,7 @@ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "strip-bom": { @@ -4357,12 +4400,12 @@ "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==", "dev": true, "requires": { - "ajv": "5.5.2", - "ajv-keywords": "2.1.1", - "chalk": "2.3.0", - "lodash": "4.17.4", + "ajv": "^5.2.3", + "ajv-keywords": "^2.1.0", + "chalk": "^2.1.0", + "lodash": "^4.17.4", "slice-ansi": "1.0.0", - "string-width": "2.1.1" + "string-width": "^2.1.1" }, "dependencies": { "ansi-styles": { @@ -4371,7 +4414,7 @@ "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", "dev": true, "requires": { - "color-convert": "1.9.1" + "color-convert": "^1.9.0" } }, "chalk": { @@ -4380,9 +4423,9 @@ "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", "dev": true, "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "4.5.0" + "ansi-styles": "^3.1.0", + "escape-string-regexp": "^1.0.5", + "supports-color": "^4.0.0" } }, "supports-color": { @@ -4391,7 +4434,7 @@ "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", "dev": true, "requires": { - "has-flag": "2.0.0" + "has-flag": "^2.0.0" } } } @@ -4420,7 +4463,7 @@ "integrity": "sha512-HQ3nbYRAowdVd0ckGFvmJPPCOH/CHleFN/Y0YQCX1DVaB7t+KFvisuyN09fuP8Jtp1CpfSh8O8bMkHbdbPe6Pw==", "dev": true, "requires": { - "setimmediate": "1.0.5" + "setimmediate": "^1.0.4" } }, "tmp": { @@ -4429,7 +4472,7 @@ "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", "dev": true, "requires": { - "os-tmpdir": "1.0.2" + "os-tmpdir": "~1.0.2" } }, "to-arraybuffer": { @@ -4462,7 +4505,7 @@ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", "dev": true, "requires": { - "prelude-ls": "1.1.2" + "prelude-ls": "~1.1.2" } }, "typedarray": { @@ -4471,15 +4514,21 @@ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", "dev": true }, + "typescript": { + "version": "3.7.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.7.4.tgz", + "integrity": "sha512-A25xv5XCtarLwXpcDNZzCGvW2D1S3/bACratYBx2sax8PefsFhlYmkQicKHvpYflFS8if4zne5zT5kpJ7pzuvw==", + "dev": true + }, "uglify-js": { "version": "2.8.29", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", "dev": true, "requires": { - "source-map": "0.5.7", - "uglify-to-browserify": "1.0.2", - "yargs": "3.10.0" + "source-map": "~0.5.1", + "uglify-to-browserify": "~1.0.0", + "yargs": "~3.10.0" }, "dependencies": { "yargs": { @@ -4488,9 +4537,9 @@ "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", "dev": true, "requires": { - "camelcase": "1.2.1", - "cliui": "2.1.0", - "decamelize": "1.2.0", + "camelcase": "^1.0.2", + "cliui": "^2.1.0", + "decamelize": "^1.0.0", "window-size": "0.1.0" } } @@ -4509,9 +4558,9 @@ "integrity": "sha1-uVH0q7a9YX5m9j64kUmOORdj4wk=", "dev": true, "requires": { - "source-map": "0.5.7", - "uglify-js": "2.8.29", - "webpack-sources": "1.1.0" + "source-map": "^0.5.6", + "uglify-js": "^2.8.29", + "webpack-sources": "^1.0.1" } }, "url": { @@ -4561,8 +4610,8 @@ "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=", "dev": true, "requires": { - "spdx-correct": "1.0.2", - "spdx-expression-parse": "1.0.4" + "spdx-correct": "~1.0.0", + "spdx-expression-parse": "~1.0.0" } }, "vm-browserify": { @@ -4580,9 +4629,9 @@ "integrity": "sha1-ShRyvLuVK9Cpu0A2gB+VTfs5+qw=", "dev": true, "requires": { - "async": "2.6.0", - "chokidar": "1.7.0", - "graceful-fs": "4.1.11" + "async": "^2.1.2", + "chokidar": "^1.7.0", + "graceful-fs": "^4.1.2" } }, "webpack": { @@ -4591,28 +4640,28 @@ "integrity": "sha512-fxxKXoicjdXNUMY7LIdY89tkJJJ0m1Oo8PQutZ5rLgWbV5QVKI15Cn7+/IHnRTd3vfKfiwBx6SBqlorAuNA8LA==", "dev": true, "requires": { - "acorn": "5.4.1", - "acorn-dynamic-import": "2.0.2", - "ajv": "5.5.2", - "ajv-keywords": "2.1.1", - "async": "2.6.0", - "enhanced-resolve": "3.4.1", - "escope": "3.6.0", - "interpret": "1.1.0", - "json-loader": "0.5.7", - "json5": "0.5.1", - "loader-runner": "2.3.0", - "loader-utils": "1.1.0", - "memory-fs": "0.4.1", - "mkdirp": "0.5.1", - "node-libs-browser": "2.1.0", - "source-map": "0.5.7", - "supports-color": "4.5.0", - "tapable": "0.2.8", - "uglifyjs-webpack-plugin": "0.4.6", - "watchpack": "1.4.0", - "webpack-sources": "1.1.0", - "yargs": "8.0.2" + "acorn": "^5.0.0", + "acorn-dynamic-import": "^2.0.0", + "ajv": "^5.1.5", + "ajv-keywords": "^2.0.0", + "async": "^2.1.2", + "enhanced-resolve": "^3.4.0", + "escope": "^3.6.0", + "interpret": "^1.0.0", + "json-loader": "^0.5.4", + "json5": "^0.5.1", + "loader-runner": "^2.3.0", + "loader-utils": "^1.1.0", + "memory-fs": "~0.4.1", + "mkdirp": "~0.5.0", + "node-libs-browser": "^2.0.0", + "source-map": "^0.5.3", + "supports-color": "^4.2.1", + "tapable": "^0.2.7", + "uglifyjs-webpack-plugin": "^0.4.6", + "watchpack": "^1.4.0", + "webpack-sources": "^1.0.1", + "yargs": "^8.0.2" }, "dependencies": { "supports-color": { @@ -4621,7 +4670,7 @@ "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", "dev": true, "requires": { - "has-flag": "2.0.0" + "has-flag": "^2.0.0" } } } @@ -4632,8 +4681,8 @@ "integrity": "sha512-aqYp18kPphgoO5c/+NaUvEeACtZjMESmDChuD3NBciVpah3XpMEU9VAAtIaB1BsfJWWTSdv8Vv1m3T0aRk2dUw==", "dev": true, "requires": { - "source-list-map": "2.0.0", - "source-map": "0.6.1" + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" }, "dependencies": { "source-map": { @@ -4650,7 +4699,7 @@ "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", "dev": true, "requires": { - "isexe": "2.0.0" + "isexe": "^2.0.0" } }, "which-module": { @@ -4677,8 +4726,8 @@ "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", "dev": true, "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1" + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" }, "dependencies": { "is-fullwidth-code-point": { @@ -4687,7 +4736,7 @@ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "dev": true, "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "^1.0.0" } }, "string-width": { @@ -4696,9 +4745,9 @@ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" } } } @@ -4715,7 +4764,7 @@ "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", "dev": true, "requires": { - "mkdirp": "0.5.1" + "mkdirp": "^0.5.1" } }, "xtend": { @@ -4742,19 +4791,19 @@ "integrity": "sha1-YpmpBVsc78lp/355wdkY3Osiw2A=", "dev": true, "requires": { - "camelcase": "4.1.0", - "cliui": "3.2.0", - "decamelize": "1.2.0", - "get-caller-file": "1.0.2", - "os-locale": "2.1.0", - "read-pkg-up": "2.0.0", - "require-directory": "2.1.1", - "require-main-filename": "1.0.1", - "set-blocking": "2.0.0", - "string-width": "2.1.1", - "which-module": "2.0.0", - "y18n": "3.2.1", - "yargs-parser": "7.0.0" + "camelcase": "^4.1.0", + "cliui": "^3.2.0", + "decamelize": "^1.1.1", + "get-caller-file": "^1.0.1", + "os-locale": "^2.0.0", + "read-pkg-up": "^2.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^7.0.0" }, "dependencies": { "camelcase": { @@ -4769,9 +4818,9 @@ "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", "dev": true, "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wrap-ansi": "2.1.0" + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wrap-ansi": "^2.0.0" }, "dependencies": { "string-width": { @@ -4780,9 +4829,9 @@ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" } } } @@ -4793,7 +4842,7 @@ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "dev": true, "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "^1.0.0" } } } @@ -4804,7 +4853,7 @@ "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=", "dev": true, "requires": { - "camelcase": "4.1.0" + "camelcase": "^4.1.0" }, "dependencies": { "camelcase": { diff --git a/package.json b/package.json index d8bff28..6ecece1 100644 --- a/package.json +++ b/package.json @@ -11,6 +11,7 @@ "babel-preset-es2015": "^6.24.1", "eslint": "4.16.0", "eslint-loader": "^1.9.0", + "typescript": "^3.7.4", "webpack": "3.10.0" }, "scripts": { @@ -31,5 +32,6 @@ "slider", "carousel", "lightweight" - ] + ], + "dependencies": {} } diff --git a/src/siema.js b/src/siema.js index 83b4c93..2af389d 100644 --- a/src/siema.js +++ b/src/siema.js @@ -1,693 +1,657 @@ +"use strict"; +var __assign = (this && this.__assign) || function () { + __assign = Object.assign || function(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) + t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); +}; +exports.__esModule = true; /** * Hi :-) This is a class representing a Siema. */ -export default class Siema { - /** - * Create a Siema. - * @param {Object} options - Optional settings object. - */ - constructor(options) { - // Merge defaults with user's settings - this.config = Siema.mergeSettings(options); - - // Resolve selector's type - this.selector = typeof this.config.selector === 'string' ? document.querySelector(this.config.selector) : this.config.selector; - - // Early throw if selector doesn't exists - if (this.selector === null) { - throw new Error('Something wrong with your selector 😭'); - } - - // update perPage number dependable of user value - this.resolveSlidesNumber(); - - // Create global references - this.selectorWidth = this.selector.offsetWidth; - this.innerElements = [].slice.call(this.selector.children); - this.currentSlide = this.config.loop ? - this.config.startIndex % this.innerElements.length : - Math.max(0, Math.min(this.config.startIndex, this.innerElements.length - this.perPage)); - this.transformProperty = Siema.webkitOrNot(); - - // Bind all event handlers for referencability - ['resizeHandler', 'touchstartHandler', 'touchendHandler', 'touchmoveHandler', 'mousedownHandler', 'mouseupHandler', 'mouseleaveHandler', 'mousemoveHandler', 'clickHandler'].forEach(method => { - this[method] = this[method].bind(this); - }); - - // Build markup and apply required styling to elements - this.init(); - } - - - /** - * Overrides default settings with custom ones. - * @param {Object} options - Optional settings object. - * @returns {Object} - Custom Siema settings. - */ - static mergeSettings(options) { - const settings = { - selector: '.siema', - duration: 200, - easing: 'ease-out', - perPage: 1, - startIndex: 0, - draggable: true, - multipleDrag: true, - threshold: 20, - loop: false, - rtl: false, - onInit: () => {}, - onChange: () => {}, - }; - - const userSttings = options; - for (const attrname in userSttings) { - settings[attrname] = userSttings[attrname]; - } - - return settings; - } - - - /** - * Determine if browser supports unprefixed transform property. - * Google Chrome since version 26 supports prefix-less transform - * @returns {string} - Transform property supported by client. - */ - static webkitOrNot() { - const style = document.documentElement.style; - if (typeof style.transform === 'string') { - return 'transform'; - } - return 'WebkitTransform'; - } - - /** - * Attaches listeners to required events. - */ - attachEvents() { - // Resize element on window resize - window.addEventListener('resize', this.resizeHandler); - - // If element is draggable / swipable, add event handlers - if (this.config.draggable) { - // Keep track pointer hold and dragging distance - this.pointerDown = false; - this.drag = { - startX: 0, - endX: 0, - startY: 0, - letItGo: null, - preventClick: false, - }; - - // Touch events - this.selector.addEventListener('touchstart', this.touchstartHandler); - this.selector.addEventListener('touchend', this.touchendHandler); - this.selector.addEventListener('touchmove', this.touchmoveHandler); - - // Mouse events - this.selector.addEventListener('mousedown', this.mousedownHandler); - this.selector.addEventListener('mouseup', this.mouseupHandler); - this.selector.addEventListener('mouseleave', this.mouseleaveHandler); - this.selector.addEventListener('mousemove', this.mousemoveHandler); - - // Click - this.selector.addEventListener('click', this.clickHandler); - } - } - - - /** - * Detaches listeners from required events. - */ - detachEvents() { - window.removeEventListener('resize', this.resizeHandler); - this.selector.removeEventListener('touchstart', this.touchstartHandler); - this.selector.removeEventListener('touchend', this.touchendHandler); - this.selector.removeEventListener('touchmove', this.touchmoveHandler); - this.selector.removeEventListener('mousedown', this.mousedownHandler); - this.selector.removeEventListener('mouseup', this.mouseupHandler); - this.selector.removeEventListener('mouseleave', this.mouseleaveHandler); - this.selector.removeEventListener('mousemove', this.mousemoveHandler); - this.selector.removeEventListener('click', this.clickHandler); - } - - - /** - * Builds the markup and attaches listeners to required events. - */ - init() { - this.attachEvents(); - - // hide everything out of selector's boundaries - this.selector.style.overflow = 'hidden'; - - // rtl or ltr - this.selector.style.direction = this.config.rtl ? 'rtl' : 'ltr'; - - // build a frame and slide to a currentSlide - this.buildSliderFrame(); - - this.config.onInit.call(this); - } - - - /** - * Build a sliderFrame and slide to a current item. - */ - buildSliderFrame() { - const widthItem = this.selectorWidth / this.perPage; - const itemsToBuild = this.config.loop ? this.innerElements.length + (2 * this.perPage) : this.innerElements.length; - - // Create frame and apply styling - this.sliderFrame = document.createElement('div'); - this.sliderFrame.style.width = `${widthItem * itemsToBuild}px`; - this.enableTransition(); - - if (this.config.draggable) { - this.selector.style.cursor = '-webkit-grab'; - } - - // Create a document fragment to put slides into it - const docFragment = document.createDocumentFragment(); - - // Loop through the slides, add styling and add them to document fragment - if (this.config.loop) { - for (let i = this.innerElements.length - this.perPage; i < this.innerElements.length; i++) { - const element = this.buildSliderFrameItem(this.innerElements[i].cloneNode(true)); - docFragment.appendChild(element); - } - } - for (let i = 0; i < this.innerElements.length; i++) { - const element = this.buildSliderFrameItem(this.innerElements[i]); - docFragment.appendChild(element); - } - if (this.config.loop) { - for (let i = 0; i < this.perPage; i++) { - const element = this.buildSliderFrameItem(this.innerElements[i].cloneNode(true)); - docFragment.appendChild(element); - } - } - - // Add fragment to the frame - this.sliderFrame.appendChild(docFragment); - - // Clear selector (just in case something is there) and insert a frame - this.selector.innerHTML = ''; - this.selector.appendChild(this.sliderFrame); - - // Go to currently active slide after initial build - this.slideToCurrent(); - } - - buildSliderFrameItem(elm) { - const elementContainer = document.createElement('div'); - elementContainer.style.cssFloat = this.config.rtl ? 'right' : 'left'; - elementContainer.style.float = this.config.rtl ? 'right' : 'left'; - elementContainer.style.width = `${this.config.loop ? 100 / (this.innerElements.length + (this.perPage * 2)) : 100 / (this.innerElements.length)}%`; - elementContainer.appendChild(elm); - return elementContainer; - } - - - /** - * Determinates slides number accordingly to clients viewport. - */ - resolveSlidesNumber() { - if (typeof this.config.perPage === 'number') { - this.perPage = this.config.perPage; - } - else if (typeof this.config.perPage === 'object') { - this.perPage = 1; - for (const viewport in this.config.perPage) { - if (window.innerWidth >= viewport) { - this.perPage = this.config.perPage[viewport]; +var Siema = /** @class */ (function () { + /** + * Create a Siema. + * @param {Object} options - Optional settings object. + */ + function Siema(options) { + var _this = this; + // Merge defaults with user's settings + this.config = Siema.mergeSettings(options); + // Resolve selector's type + this.selector = + typeof this.config.selector === "string" + ? document.querySelector(this.config.selector) + : this.config.selector; + // Early throw if selector doesn't exists + if (this.selector === null) { + throw new Error("Something wrong with your selector 😭"); } - } - } - } - - - /** - * Go to previous slide. - * @param {number} [howManySlides=1] - How many items to slide backward. - * @param {function} callback - Optional callback function. - */ - prev(howManySlides = 1, callback) { - // early return when there is nothing to slide - if (this.innerElements.length <= this.perPage) { - return; - } - - const beforeChange = this.currentSlide; - - if (this.config.loop) { - const isNewIndexClone = this.currentSlide - howManySlides < 0; - if (isNewIndexClone) { - this.disableTransition(); - - const mirrorSlideIndex = this.currentSlide + this.innerElements.length; - const mirrorSlideIndexOffset = this.perPage; - const moveTo = mirrorSlideIndex + mirrorSlideIndexOffset; - const offset = (this.config.rtl ? 1 : -1) * moveTo * (this.selectorWidth / this.perPage); - const dragDistance = this.config.draggable ? this.drag.endX - this.drag.startX : 0; - - this.sliderFrame.style[this.transformProperty] = `translate3d(${offset + dragDistance}px, 0, 0)`; - this.currentSlide = mirrorSlideIndex - howManySlides; - } - else { - this.currentSlide = this.currentSlide - howManySlides; - } - } - else { - this.currentSlide = Math.max(this.currentSlide - howManySlides, 0); - } - - if (beforeChange !== this.currentSlide) { - this.slideToCurrent(this.config.loop); - this.config.onChange.call(this); - if (callback) { - callback.call(this); - } - } - } - - - /** - * Go to next slide. - * @param {number} [howManySlides=1] - How many items to slide forward. - * @param {function} callback - Optional callback function. - */ - next(howManySlides = 1, callback) { - // early return when there is nothing to slide - if (this.innerElements.length <= this.perPage) { - return; - } - - const beforeChange = this.currentSlide; - - if (this.config.loop) { - const isNewIndexClone = this.currentSlide + howManySlides > this.innerElements.length - this.perPage; - if (isNewIndexClone) { - this.disableTransition(); - - const mirrorSlideIndex = this.currentSlide - this.innerElements.length; - const mirrorSlideIndexOffset = this.perPage; - const moveTo = mirrorSlideIndex + mirrorSlideIndexOffset; - const offset = (this.config.rtl ? 1 : -1) * moveTo * (this.selectorWidth / this.perPage); - const dragDistance = this.config.draggable ? this.drag.endX - this.drag.startX : 0; - - this.sliderFrame.style[this.transformProperty] = `translate3d(${offset + dragDistance}px, 0, 0)`; - this.currentSlide = mirrorSlideIndex + howManySlides; - } - else { - this.currentSlide = this.currentSlide + howManySlides; - } - } - else { - this.currentSlide = Math.min(this.currentSlide + howManySlides, this.innerElements.length - this.perPage); - } - if (beforeChange !== this.currentSlide) { - this.slideToCurrent(this.config.loop); - this.config.onChange.call(this); - if (callback) { - callback.call(this); - } - } - } - - - /** - * Disable transition on sliderFrame. - */ - disableTransition() { - this.sliderFrame.style.webkitTransition = `all 0ms ${this.config.easing}`; - this.sliderFrame.style.transition = `all 0ms ${this.config.easing}`; - } - - - /** - * Enable transition on sliderFrame. - */ - enableTransition() { - this.sliderFrame.style.webkitTransition = `all ${this.config.duration}ms ${this.config.easing}`; - this.sliderFrame.style.transition = `all ${this.config.duration}ms ${this.config.easing}`; - } - - - /** - * Go to slide with particular index - * @param {number} index - Item index to slide to. - * @param {function} callback - Optional callback function. - */ - goTo(index, callback) { - if (this.innerElements.length <= this.perPage) { - return; - } - const beforeChange = this.currentSlide; - this.currentSlide = this.config.loop ? - index % this.innerElements.length : - Math.min(Math.max(index, 0), this.innerElements.length - this.perPage); - if (beforeChange !== this.currentSlide) { - this.slideToCurrent(); - this.config.onChange.call(this); - if (callback) { - callback.call(this); - } - } - } - - - /** - * Moves sliders frame to position of currently active slide - */ - slideToCurrent(enableTransition) { - const currentSlide = this.config.loop ? this.currentSlide + this.perPage : this.currentSlide; - const offset = (this.config.rtl ? 1 : -1) * currentSlide * (this.selectorWidth / this.perPage); - - if (enableTransition) { - // This one is tricky, I know but this is a perfect explanation: - // https://youtu.be/cCOL7MC4Pl0 - requestAnimationFrame(() => { - requestAnimationFrame(() => { - this.enableTransition(); - this.sliderFrame.style[this.transformProperty] = `translate3d(${offset}px, 0, 0)`; + // update perPage number dependable of user value + this.resolveSlidesNumber(); + // Create global references + this.selectorWidth = this.selector.offsetWidth; + this.innerElements = [].slice.call(this.selector.children); + this.currentSlide = this.config.loop + ? this.config.startIndex % this.innerElements.length + : Math.max(0, Math.min(this.config.startIndex, this.innerElements.length - this.perPage)); + this.transformProperty = Siema.webkitOrNot(); + // Bind all event handlers for referencability + [ + "resizeHandler", + "touchstartHandler", + "touchendHandler", + "touchmoveHandler", + "mousedownHandler", + "mouseupHandler", + "mouseleaveHandler", + "mousemoveHandler", + "clickHandler" + ].forEach(function (method) { + _this[method] = _this[method].bind(_this); }); - }); - } - else { - this.sliderFrame.style[this.transformProperty] = `translate3d(${offset}px, 0, 0)`; - } - } - - - /** - * Recalculate drag /swipe event and reposition the frame of a slider - */ - updateAfterDrag() { - const movement = (this.config.rtl ? -1 : 1) * (this.drag.endX - this.drag.startX); - const movementDistance = Math.abs(movement); - const howManySliderToSlide = this.config.multipleDrag ? Math.ceil(movementDistance / (this.selectorWidth / this.perPage)) : 1; - - const slideToNegativeClone = movement > 0 && this.currentSlide - howManySliderToSlide < 0; - const slideToPositiveClone = movement < 0 && this.currentSlide + howManySliderToSlide > this.innerElements.length - this.perPage; - - if (movement > 0 && movementDistance > this.config.threshold && this.innerElements.length > this.perPage) { - this.prev(howManySliderToSlide); - } - else if (movement < 0 && movementDistance > this.config.threshold && this.innerElements.length > this.perPage) { - this.next(howManySliderToSlide); - } - this.slideToCurrent(slideToNegativeClone || slideToPositiveClone); - } - - - /** - * When window resizes, resize slider components as well - */ - resizeHandler() { - // update perPage number dependable of user value - this.resolveSlidesNumber(); - - // relcalculate currentSlide - // prevent hiding items when browser width increases - if (this.currentSlide + this.perPage > this.innerElements.length) { - this.currentSlide = this.innerElements.length <= this.perPage ? 0 : this.innerElements.length - this.perPage; - } - - this.selectorWidth = this.selector.offsetWidth; - - this.buildSliderFrame(); - } - - - /** - * Clear drag after touchend and mouseup event - */ - clearDrag() { - this.drag = { - startX: 0, - endX: 0, - startY: 0, - letItGo: null, - preventClick: this.drag.preventClick + // Build markup and apply required styling to elements + this.init(); + } + /** + * Overrides default settings with custom ones. + * @param {Object} options - Optional settings object. + * @returns {Object} - Custom Siema settings. + */ + Siema.mergeSettings = function (options) { + var settings = { + selector: ".siema", + duration: 200, + easing: "ease-out", + perPage: 1, + startIndex: 0, + draggable: true, + multipleDrag: true, + threshold: 20, + loop: false, + rtl: false, + onInit: function () { }, + onChange: function () { } + }; + return __assign(__assign({}, settings), options); }; - } - - - /** - * touchstart event handler - */ - touchstartHandler(e) { - // Prevent dragging / swiping on inputs, selects and textareas - const ignoreSiema = ['TEXTAREA', 'OPTION', 'INPUT', 'SELECT'].indexOf(e.target.nodeName) !== -1; - if (ignoreSiema) { - return; - } - - e.stopPropagation(); - this.pointerDown = true; - this.drag.startX = e.touches[0].pageX; - this.drag.startY = e.touches[0].pageY; - } - - - /** - * touchend event handler - */ - touchendHandler(e) { - e.stopPropagation(); - this.pointerDown = false; - this.enableTransition(); - if (this.drag.endX) { - this.updateAfterDrag(); - } - this.clearDrag(); - } - - - /** - * touchmove event handler - */ - touchmoveHandler(e) { - e.stopPropagation(); - - if (this.drag.letItGo === null) { - this.drag.letItGo = Math.abs(this.drag.startY - e.touches[0].pageY) < Math.abs(this.drag.startX - e.touches[0].pageX); - } - - if (this.pointerDown && this.drag.letItGo) { - e.preventDefault(); - this.drag.endX = e.touches[0].pageX; - this.sliderFrame.style.webkitTransition = `all 0ms ${this.config.easing}`; - this.sliderFrame.style.transition = `all 0ms ${this.config.easing}`; - - const currentSlide = this.config.loop ? this.currentSlide + this.perPage : this.currentSlide; - const currentOffset = currentSlide * (this.selectorWidth / this.perPage); - const dragOffset = (this.drag.endX - this.drag.startX); - const offset = this.config.rtl ? currentOffset + dragOffset : currentOffset - dragOffset; - this.sliderFrame.style[this.transformProperty] = `translate3d(${(this.config.rtl ? 1 : -1) * offset}px, 0, 0)`; - } - } - - - /** - * mousedown event handler - */ - mousedownHandler(e) { - // Prevent dragging / swiping on inputs, selects and textareas - const ignoreSiema = ['TEXTAREA', 'OPTION', 'INPUT', 'SELECT'].indexOf(e.target.nodeName) !== -1; - if (ignoreSiema) { - return; - } - - e.preventDefault(); - e.stopPropagation(); - this.pointerDown = true; - this.drag.startX = e.pageX; - } - - - /** - * mouseup event handler - */ - mouseupHandler(e) { - e.stopPropagation(); - this.pointerDown = false; - this.selector.style.cursor = '-webkit-grab'; - this.enableTransition(); - if (this.drag.endX) { - this.updateAfterDrag(); - } - this.clearDrag(); - } - - - /** - * mousemove event handler - */ - mousemoveHandler(e) { - e.preventDefault(); - if (this.pointerDown) { - // if dragged element is a link - // mark preventClick prop as a true - // to detemine about browser redirection later on - if (e.target.nodeName === 'A') { - this.drag.preventClick = true; - } - - this.drag.endX = e.pageX; - this.selector.style.cursor = '-webkit-grabbing'; - this.sliderFrame.style.webkitTransition = `all 0ms ${this.config.easing}`; - this.sliderFrame.style.transition = `all 0ms ${this.config.easing}`; - - const currentSlide = this.config.loop ? this.currentSlide + this.perPage : this.currentSlide; - const currentOffset = currentSlide * (this.selectorWidth / this.perPage); - const dragOffset = (this.drag.endX - this.drag.startX); - const offset = this.config.rtl ? currentOffset + dragOffset : currentOffset - dragOffset; - this.sliderFrame.style[this.transformProperty] = `translate3d(${(this.config.rtl ? 1 : -1) * offset}px, 0, 0)`; - } - } - - - /** - * mouseleave event handler - */ - mouseleaveHandler(e) { - if (this.pointerDown) { - this.pointerDown = false; - this.selector.style.cursor = '-webkit-grab'; - this.drag.endX = e.pageX; - this.drag.preventClick = false; - this.enableTransition(); - this.updateAfterDrag(); - this.clearDrag(); - } - } - - - /** - * click event handler - */ - clickHandler(e) { - // if the dragged element is a link - // prevent browsers from folowing the link - if (this.drag.preventClick) { - e.preventDefault(); - } - this.drag.preventClick = false; - } - - - /** - * Remove item from carousel. - * @param {number} index - Item index to remove. - * @param {function} callback - Optional callback to call after remove. - */ - remove(index, callback) { - if (index < 0 || index >= this.innerElements.length) { - throw new Error('Item to remove doesn\'t exist 😭'); - } - - // Shift sliderFrame back by one item when: - // 1. Item with lower index than currenSlide is removed. - // 2. Last item is removed. - const lowerIndex = index < this.currentSlide; - const lastItem = this.currentSlide + this.perPage - 1 === index; - - if (lowerIndex || lastItem) { - this.currentSlide--; - } - - this.innerElements.splice(index, 1); - - // build a frame and slide to a currentSlide - this.buildSliderFrame(); - - if (callback) { - callback.call(this); - } - } - - - /** - * Insert item to carousel at particular index. - * @param {HTMLElement} item - Item to insert. - * @param {number} index - Index of new new item insertion. - * @param {function} callback - Optional callback to call after insert. - */ - insert(item, index, callback) { - if (index < 0 || index > this.innerElements.length + 1) { - throw new Error('Unable to inset it at this index 😭'); - } - if (this.innerElements.indexOf(item) !== -1) { - throw new Error('The same item in a carousel? Really? Nope 😭'); - } - - // Avoid shifting content - const shouldItShift = index <= this.currentSlide > 0 && this.innerElements.length; - this.currentSlide = shouldItShift ? this.currentSlide + 1 : this.currentSlide; - - this.innerElements.splice(index, 0, item); - - // build a frame and slide to a currentSlide - this.buildSliderFrame(); - - if (callback) { - callback.call(this); - } - } - - - /** - * Prepernd item to carousel. - * @param {HTMLElement} item - Item to prepend. - * @param {function} callback - Optional callback to call after prepend. - */ - prepend(item, callback) { - this.insert(item, 0); - if (callback) { - callback.call(this); - } - } - - - /** - * Append item to carousel. - * @param {HTMLElement} item - Item to append. - * @param {function} callback - Optional callback to call after append. - */ - append(item, callback) { - this.insert(item, this.innerElements.length + 1); - if (callback) { - callback.call(this); - } - } - - - /** - * Removes listeners and optionally restores to initial markup - * @param {boolean} restoreMarkup - Determinants about restoring an initial markup. - * @param {function} callback - Optional callback function. - */ - destroy(restoreMarkup = false, callback) { - this.detachEvents(); - - this.selector.style.cursor = 'auto'; - - if (restoreMarkup) { - const slides = document.createDocumentFragment(); - for (let i = 0; i < this.innerElements.length; i++) { - slides.appendChild(this.innerElements[i]); - } - this.selector.innerHTML = ''; - this.selector.appendChild(slides); - this.selector.removeAttribute('style'); - } - - if (callback) { - callback.call(this); - } - } -} + /** + * Determine if browser supports unprefixed transform property. + * Google Chrome since version 26 supports prefix-less transform + * @returns {string} - Transform property supported by client. + */ + Siema.webkitOrNot = function () { + var style = document.documentElement.style; + if (typeof style.transform === "string") { + return "transform"; + } + return "WebkitTransform"; + }; + /** + * Attaches listeners to required events. + */ + Siema.prototype.attachEvents = function () { + // Resize element on window resize + window.addEventListener("resize", this.resizeHandler); + // If element is draggable / swipable, add event handlers + if (this.config.draggable) { + // Keep track pointer hold and dragging distance + this.pointerDown = false; + this.drag = { + startX: 0, + endX: 0, + startY: 0, + letItGo: null, + preventClick: false + }; + // Touch events + this.selector.addEventListener("touchstart", this.touchstartHandler); + this.selector.addEventListener("touchend", this.touchendHandler); + this.selector.addEventListener("touchmove", this.touchmoveHandler); + // Mouse events + this.selector.addEventListener("mousedown", this.mousedownHandler); + this.selector.addEventListener("mouseup", this.mouseupHandler); + this.selector.addEventListener("mouseleave", this.mouseleaveHandler); + this.selector.addEventListener("mousemove", this.mousemoveHandler); + // Click + this.selector.addEventListener("click", this.clickHandler); + } + }; + /** + * Detaches listeners from required events. + */ + Siema.prototype.detachEvents = function () { + window.removeEventListener("resize", this.resizeHandler); + this.selector.removeEventListener("touchstart", this.touchstartHandler); + this.selector.removeEventListener("touchend", this.touchendHandler); + this.selector.removeEventListener("touchmove", this.touchmoveHandler); + this.selector.removeEventListener("mousedown", this.mousedownHandler); + this.selector.removeEventListener("mouseup", this.mouseupHandler); + this.selector.removeEventListener("mouseleave", this.mouseleaveHandler); + this.selector.removeEventListener("mousemove", this.mousemoveHandler); + this.selector.removeEventListener("click", this.clickHandler); + }; + /** + * Builds the markup and attaches listeners to required events. + */ + Siema.prototype.init = function () { + this.attachEvents(); + // hide everything out of selector's boundaries + this.selector.style.overflow = "hidden"; + // rtl or ltr + this.selector.style.direction = this.config.rtl ? "rtl" : "ltr"; + // build a frame and slide to a currentSlide + this.buildSliderFrame(); + this.config.onInit.call(this); + }; + /** + * Build a sliderFrame and slide to a current item. + */ + Siema.prototype.buildSliderFrame = function () { + var widthItem = this.selectorWidth / this.perPage; + var itemsToBuild = this.config.loop + ? this.innerElements.length + 2 * this.perPage + : this.innerElements.length; + // Create frame and apply styling + this.sliderFrame = document.createElement("div"); + this.sliderFrame.style.width = widthItem * itemsToBuild + "px"; + this.enableTransition(); + if (this.config.draggable) { + this.selector.style.cursor = "-webkit-grab"; + } + // Create a document fragment to put slides into it + var docFragment = document.createDocumentFragment(); + // Loop through the slides, add styling and add them to document fragment + if (this.config.loop) { + for (var i = this.innerElements.length - this.perPage; i < this.innerElements.length; i++) { + var element = this.buildSliderFrameItem(this.innerElements[i].cloneNode(true)); + docFragment.appendChild(element); + } + } + for (var i = 0; i < this.innerElements.length; i++) { + var element = this.buildSliderFrameItem(this.innerElements[i]); + docFragment.appendChild(element); + } + if (this.config.loop) { + for (var i = 0; i < this.perPage; i++) { + var element = this.buildSliderFrameItem(this.innerElements[i].cloneNode(true)); + docFragment.appendChild(element); + } + } + // Add fragment to the frame + this.sliderFrame.appendChild(docFragment); + // Clear selector (just in case something is there) and insert a frame + this.selector.innerHTML = ""; + this.selector.appendChild(this.sliderFrame); + // Go to currently active slide after initial build + this.slideToCurrent(); + }; + Siema.prototype.buildSliderFrameItem = function (elm) { + var elementContainer = document.createElement("div"); + elementContainer.style.cssFloat = this.config.rtl ? "right" : "left"; + elementContainer.style.float = this.config.rtl ? "right" : "left"; + elementContainer.style.width = (this.config.loop + ? 100 / (this.innerElements.length + this.perPage * 2) + : 100 / this.innerElements.length) + "%"; + elementContainer.appendChild(elm); + return elementContainer; + }; + /** + * Determinates slides number accordingly to clients viewport. + */ + Siema.prototype.resolveSlidesNumber = function () { + if (typeof this.config.perPage === "number") { + this.perPage = this.config.perPage; + } + else if (typeof this.config.perPage === "object") { + this.perPage = 1; + for (var viewport in this.config.perPage) { + if (window.innerWidth >= viewport) { + this.perPage = this.config.perPage[viewport]; + } + } + } + }; + /** + * Go to previous slide. + * @param {number} [howManySlides=1] - How many items to slide backward. + * @param {function} callback - Optional callback function. + */ + Siema.prototype.prev = function (howManySlides, callback) { + if (howManySlides === void 0) { howManySlides = 1; } + // early return when there is nothing to slide + if (this.innerElements.length <= this.perPage) { + return; + } + var beforeChange = this.currentSlide; + if (this.config.loop) { + var isNewIndexClone = this.currentSlide - howManySlides < 0; + if (isNewIndexClone) { + this.disableTransition(); + var mirrorSlideIndex = this.currentSlide + this.innerElements.length; + var mirrorSlideIndexOffset = this.perPage; + var moveTo_1 = mirrorSlideIndex + mirrorSlideIndexOffset; + var offset = (this.config.rtl ? 1 : -1) * + moveTo_1 * + (this.selectorWidth / this.perPage); + var dragDistance = this.config.draggable + ? this.drag.endX - this.drag.startX + : 0; + this.sliderFrame.style[this.transformProperty] = "translate3d(" + (offset + + dragDistance) + "px, 0, 0)"; + this.currentSlide = mirrorSlideIndex - howManySlides; + } + else { + this.currentSlide = this.currentSlide - howManySlides; + } + } + else { + this.currentSlide = Math.max(this.currentSlide - howManySlides, 0); + } + if (beforeChange !== this.currentSlide) { + this.slideToCurrent(this.config.loop); + this.config.onChange.call(this); + if (callback) { + callback.call(this); + } + } + }; + /** + * Go to next slide. + * @param {number} [howManySlides=1] - How many items to slide forward. + * @param {function} callback - Optional callback function. + */ + Siema.prototype.next = function (howManySlides, callback) { + if (howManySlides === void 0) { howManySlides = 1; } + // early return when there is nothing to slide + if (this.innerElements.length <= this.perPage) { + return; + } + var beforeChange = this.currentSlide; + if (this.config.loop) { + var isNewIndexClone = this.currentSlide + howManySlides > + this.innerElements.length - this.perPage; + if (isNewIndexClone) { + this.disableTransition(); + var mirrorSlideIndex = this.currentSlide - this.innerElements.length; + var mirrorSlideIndexOffset = this.perPage; + var moveTo_2 = mirrorSlideIndex + mirrorSlideIndexOffset; + var offset = (this.config.rtl ? 1 : -1) * + moveTo_2 * + (this.selectorWidth / this.perPage); + var dragDistance = this.config.draggable + ? this.drag.endX - this.drag.startX + : 0; + this.sliderFrame.style[this.transformProperty] = "translate3d(" + (offset + + dragDistance) + "px, 0, 0)"; + this.currentSlide = mirrorSlideIndex + howManySlides; + } + else { + this.currentSlide = this.currentSlide + howManySlides; + } + } + else { + this.currentSlide = Math.min(this.currentSlide + howManySlides, this.innerElements.length - this.perPage); + } + if (beforeChange !== this.currentSlide) { + this.slideToCurrent(this.config.loop); + this.config.onChange.call(this); + if (callback) { + callback.call(this); + } + } + }; + /** + * Disable transition on sliderFrame. + */ + Siema.prototype.disableTransition = function () { + this.sliderFrame.style.webkitTransition = "all 0ms " + this.config.easing; + this.sliderFrame.style.transition = "all 0ms " + this.config.easing; + }; + /** + * Enable transition on sliderFrame. + */ + Siema.prototype.enableTransition = function () { + this.sliderFrame.style.webkitTransition = "all " + this.config.duration + "ms " + this.config.easing; + this.sliderFrame.style.transition = "all " + this.config.duration + "ms " + this.config.easing; + }; + /** + * Go to slide with particular index + * @param {number} index - Item index to slide to. + * @param {function} callback - Optional callback function. + */ + Siema.prototype.goTo = function (index, callback) { + if (this.innerElements.length <= this.perPage) { + return; + } + var beforeChange = this.currentSlide; + this.currentSlide = this.config.loop + ? index % this.innerElements.length + : Math.min(Math.max(index, 0), this.innerElements.length - this.perPage); + if (beforeChange !== this.currentSlide) { + this.slideToCurrent(); + this.config.onChange.call(this); + if (callback) { + callback.call(this); + } + } + }; + /** + * Moves sliders frame to position of currently active slide + */ + Siema.prototype.slideToCurrent = function (enableTransition) { + var _this = this; + var currentSlide = this.config.loop + ? this.currentSlide + this.perPage + : this.currentSlide; + var offset = (this.config.rtl ? 1 : -1) * + currentSlide * + (this.selectorWidth / this.perPage); + if (enableTransition) { + // This one is tricky, I know but this is a perfect explanation: + // https://youtu.be/cCOL7MC4Pl0 + requestAnimationFrame(function () { + requestAnimationFrame(function () { + _this.enableTransition(); + _this.sliderFrame.style[_this.transformProperty] = "translate3d(" + offset + "px, 0, 0)"; + }); + }); + } + else { + this.sliderFrame.style[this.transformProperty] = "translate3d(" + offset + "px, 0, 0)"; + } + }; + /** + * Recalculate drag /swipe event and reposition the frame of a slider + */ + Siema.prototype.updateAfterDrag = function () { + var movement = (this.config.rtl ? -1 : 1) * (this.drag.endX - this.drag.startX); + var movementDistance = Math.abs(movement); + var howManySliderToSlide = this.config.multipleDrag + ? Math.ceil(movementDistance / (this.selectorWidth / this.perPage)) + : 1; + var slideToNegativeClone = movement > 0 && this.currentSlide - howManySliderToSlide < 0; + var slideToPositiveClone = movement < 0 && + this.currentSlide + howManySliderToSlide > + this.innerElements.length - this.perPage; + if (movement > 0 && + movementDistance > this.config.threshold && + this.innerElements.length > this.perPage) { + this.prev(howManySliderToSlide); + } + else if (movement < 0 && + movementDistance > this.config.threshold && + this.innerElements.length > this.perPage) { + this.next(howManySliderToSlide); + } + this.slideToCurrent(slideToNegativeClone || slideToPositiveClone); + }; + /** + * When window resizes, resize slider components as well + */ + Siema.prototype.resizeHandler = function () { + // update perPage number dependable of user value + this.resolveSlidesNumber(); + // relcalculate currentSlide + // prevent hiding items when browser width increases + if (this.currentSlide + this.perPage > this.innerElements.length) { + this.currentSlide = + this.innerElements.length <= this.perPage + ? 0 + : this.innerElements.length - this.perPage; + } + this.selectorWidth = this.selector.offsetWidth; + this.buildSliderFrame(); + }; + /** + * Clear drag after touchend and mouseup event + */ + Siema.prototype.clearDrag = function () { + this.drag = { + startX: 0, + endX: 0, + startY: 0, + letItGo: null, + preventClick: this.drag.preventClick + }; + }; + /** + * touchstart event handler + */ + Siema.prototype.touchstartHandler = function (e) { + // Prevent dragging / swiping on inputs, selects and textareas + var ignoreSiema = ["TEXTAREA", "OPTION", "INPUT", "SELECT"].indexOf(e.target.nodeName) !== + -1; + if (ignoreSiema) { + return; + } + e.stopPropagation(); + this.pointerDown = true; + this.drag.startX = e.touches[0].pageX; + this.drag.startY = e.touches[0].pageY; + }; + /** + * touchend event handler + */ + Siema.prototype.touchendHandler = function (e) { + e.stopPropagation(); + this.pointerDown = false; + this.enableTransition(); + if (this.drag.endX) { + this.updateAfterDrag(); + } + this.clearDrag(); + }; + /** + * touchmove event handler + */ + Siema.prototype.touchmoveHandler = function (e) { + e.stopPropagation(); + if (this.drag.letItGo === null) { + this.drag.letItGo = + Math.abs(this.drag.startY - e.touches[0].pageY) < + Math.abs(this.drag.startX - e.touches[0].pageX); + } + if (this.pointerDown && this.drag.letItGo) { + e.preventDefault(); + this.drag.endX = e.touches[0].pageX; + this.sliderFrame.style.webkitTransition = "all 0ms " + this.config.easing; + this.sliderFrame.style.transition = "all 0ms " + this.config.easing; + var currentSlide = this.config.loop + ? this.currentSlide + this.perPage + : this.currentSlide; + var currentOffset = currentSlide * (this.selectorWidth / this.perPage); + var dragOffset = this.drag.endX - this.drag.startX; + var offset = this.config.rtl + ? currentOffset + dragOffset + : currentOffset - dragOffset; + this.sliderFrame.style[this.transformProperty] = "translate3d(" + (this + .config.rtl + ? 1 + : -1) * offset + "px, 0, 0)"; + } + }; + /** + * mousedown event handler + */ + Siema.prototype.mousedownHandler = function (e) { + // Prevent dragging / swiping on inputs, selects and textareas + var ignoreSiema = ["TEXTAREA", "OPTION", "INPUT", "SELECT"].indexOf(e.target.nodeName) !== + -1; + if (ignoreSiema) { + return; + } + e.preventDefault(); + e.stopPropagation(); + this.pointerDown = true; + this.drag.startX = e.pageX; + }; + /** + * mouseup event handler + */ + Siema.prototype.mouseupHandler = function (e) { + e.stopPropagation(); + this.pointerDown = false; + this.selector.style.cursor = "-webkit-grab"; + this.enableTransition(); + if (this.drag.endX) { + this.updateAfterDrag(); + } + this.clearDrag(); + }; + /** + * mousemove event handler + */ + Siema.prototype.mousemoveHandler = function (e) { + e.preventDefault(); + if (this.pointerDown) { + // if dragged element is a link + // mark preventClick prop as a true + // to detemine about browser redirection later on + if (e.target.nodeName === "A") { + this.drag.preventClick = true; + } + this.drag.endX = e.pageX; + this.selector.style.cursor = "-webkit-grabbing"; + this.sliderFrame.style.webkitTransition = "all 0ms " + this.config.easing; + this.sliderFrame.style.transition = "all 0ms " + this.config.easing; + var currentSlide = this.config.loop + ? this.currentSlide + this.perPage + : this.currentSlide; + var currentOffset = currentSlide * (this.selectorWidth / this.perPage); + var dragOffset = this.drag.endX - this.drag.startX; + var offset = this.config.rtl + ? currentOffset + dragOffset + : currentOffset - dragOffset; + this.sliderFrame.style[this.transformProperty] = "translate3d(" + (this + .config.rtl + ? 1 + : -1) * offset + "px, 0, 0)"; + } + }; + /** + * mouseleave event handler + */ + Siema.prototype.mouseleaveHandler = function (e) { + if (this.pointerDown) { + this.pointerDown = false; + this.selector.style.cursor = "-webkit-grab"; + this.drag.endX = e.pageX; + this.drag.preventClick = false; + this.enableTransition(); + this.updateAfterDrag(); + this.clearDrag(); + } + }; + /** + * click event handler + */ + Siema.prototype.clickHandler = function (e) { + // if the dragged element is a link + // prevent browsers from folowing the link + if (this.drag.preventClick) { + e.preventDefault(); + } + this.drag.preventClick = false; + }; + /** + * Remove item from carousel. + * @param {number} index - Item index to remove. + * @param {function} callback - Optional callback to call after remove. + */ + Siema.prototype.remove = function (index, callback) { + if (index < 0 || index >= this.innerElements.length) { + throw new Error("Item to remove doesn't exist 😭"); + } + // Shift sliderFrame back by one item when: + // 1. Item with lower index than currenSlide is removed. + // 2. Last item is removed. + var lowerIndex = index < this.currentSlide; + var lastItem = this.currentSlide + this.perPage - 1 === index; + if (lowerIndex || lastItem) { + this.currentSlide--; + } + this.innerElements.splice(index, 1); + // build a frame and slide to a currentSlide + this.buildSliderFrame(); + if (callback) { + callback.call(this); + } + }; + /** + * Insert item to carousel at particular index. + * @param {HTMLElement} item - Item to insert. + * @param {number} index - Index of new new item insertion. + * @param {function} callback - Optional callback to call after insert. + */ + Siema.prototype.insert = function (item, index, callback) { + if (index < 0 || index > this.innerElements.length + 1) { + throw new Error("Unable to inset it at this index 😭"); + } + if (this.innerElements.indexOf(item) !== -1) { + throw new Error("The same item in a carousel? Really? Nope 😭"); + } + // Avoid shifting content + var shouldItShift = index <= this.currentSlide > 0 && this.innerElements.length; + this.currentSlide = shouldItShift + ? this.currentSlide + 1 + : this.currentSlide; + this.innerElements.splice(index, 0, item); + // build a frame and slide to a currentSlide + this.buildSliderFrame(); + if (callback) { + callback.call(this); + } + }; + /** + * Prepernd item to carousel. + * @param {HTMLElement} item - Item to prepend. + * @param {function} callback - Optional callback to call after prepend. + */ + Siema.prototype.prepend = function (item, callback) { + this.insert(item, 0); + if (callback) { + callback.call(this); + } + }; + /** + * Append item to carousel. + * @param {HTMLElement} item - Item to append. + * @param {function} callback - Optional callback to call after append. + */ + Siema.prototype.append = function (item, callback) { + this.insert(item, this.innerElements.length + 1); + if (callback) { + callback.call(this); + } + }; + /** + * Removes listeners and optionally restores to initial markup + * @param {boolean} restoreMarkup - Determinants about restoring an initial markup. + * @param {function} callback - Optional callback function. + */ + Siema.prototype.destroy = function (restoreMarkup, callback) { + if (restoreMarkup === void 0) { restoreMarkup = false; } + this.detachEvents(); + this.selector.style.cursor = "auto"; + if (restoreMarkup) { + var slides = document.createDocumentFragment(); + for (var i = 0; i < this.innerElements.length; i++) { + slides.appendChild(this.innerElements[i]); + } + this.selector.innerHTML = ""; + this.selector.appendChild(slides); + this.selector.removeAttribute("style"); + } + if (callback) { + callback.call(this); + } + }; + return Siema; +}()); +exports["default"] = Siema; diff --git a/src/siema.ts b/src/siema.ts new file mode 100644 index 0000000..4140aec --- /dev/null +++ b/src/siema.ts @@ -0,0 +1,830 @@ +interface SiemaConfig { + selector: string | HTMLElement; + duration: number; + // TODO: Add mising easings + easing: string; + perPage: number | { [key: number]: number }; + startIndex: number; + draggable: boolean; + multipleDrag: boolean; + threshold: number; + loop: boolean; + rtl: boolean; + onInit: () => void; + onChange: () => void; +} + +const defaultSettings = { + selector: ".siema", + duration: 200, + easing: "ease-out", + perPage: 1, + startIndex: 0, + draggable: true, + multipleDrag: true, + threshold: 20, + loop: false, + rtl: false, + onInit: () => {}, + onChange: () => {} +}; + +/** + * Hi :-) This is a class representing a Siema. + */ +export default class Siema { + config: SiemaConfig; + selector: HTMLElement | null; + transformProperty: string; + + selectorWidth: number; + innerElements: Node[]; + currentSlide: number; + perPage: number; + + webkitOrNot!: () => string; + pointerDown: boolean; + drag?: { + startX: number; + endX: number; + startY: number; + letItGo?: boolean; + preventClick: boolean; + }; + sliderFrame?: HTMLElement; + + // drag!: boolean; + + // [key: string]: any; + + /** + * Create a Siema. + * @param {Object} options - Optional settings object. + */ + constructor(options: SiemaConfig) { + // Merge defaults with user's settings + this.config = { ...defaultSettings, ...options }; + + // Resolve selector's type + this.selector = + typeof this.config.selector === "string" + ? document.querySelector(this.config.selector) + : this.config.selector; + + // Early throw if selector doesn't exists + if (!this.selector) { + throw new Error("Something is wrong with your selector 😭"); + return; + } + + // update perPage number dependable of user value + this.perPage = this.resolveSlidesNumber(); + + // Create global references + this.selectorWidth = this.selector.offsetWidth; + this.innerElements = [].slice.call(this.selector.children); + this.currentSlide = this.config.loop + ? this.config.startIndex % this.innerElements.length + : Math.max( + 0, + Math.min( + this.config.startIndex, + this.innerElements.length - this.perPage + ) + ); + this.transformProperty = this.webkitOrNot(); + + // Bind all event handlers for referencability + [ + "resizeHandler", + "touchstartHandler", + "touchendHandler", + "touchmoveHandler", + "mousedownHandler", + "mouseupHandler", + "mouseleaveHandler", + "mousemoveHandler", + "clickHandler" + ].forEach(method => { + this[method] = this[method].bind(this); + }); + + // Build markup and apply required styling to elements + this.attachEvents(); + + // hide everything out of selector's boundaries + this.selector.style.overflow = "hidden"; + + // rtl or ltr + this.selector.style.direction = this.config.rtl ? "rtl" : "ltr"; + + // build a frame and slide to a currentSlide + this.buildSliderFrame(); + + this.pointerDown = false; + + this.config.onInit.call(this); + } + + /** + * Determine if browser supports unprefixed transform property. + * Google Chrome since version 26 supports prefix-less transform + * @returns {string} - Transform property supported by client. + */ + static webkitOrNot(): string { + const style = document.documentElement.style; + + if (typeof style.transform === "string") { + return "transform"; + } + + return "WebkitTransform"; + } + + /** + * Attaches listeners to required events. + */ + attachEvents() { + // Resize element on window resize + window.addEventListener("resize", this.resizeHandler); + + // If element is draggable / swipable, add event handlers + if (this.config.draggable) { + // Keep track pointer hold and dragging distance + this.pointerDown = false; + this.drag = { + startX: 0, + endX: 0, + startY: 0, + letItGo: null, + preventClick: false + }; + + if (this.selector) { + // Touch events + this.selector.addEventListener("touchstart", this.touchstartHandler); + this.selector.addEventListener("touchend", this.touchendHandler); + this.selector.addEventListener("touchmove", this.touchmoveHandler); + + // Mouse events + this.selector.addEventListener("mousedown", this.mousedownHandler); + this.selector.addEventListener("mouseup", this.mouseupHandler); + this.selector.addEventListener("mouseleave", this.mouseleaveHandler); + this.selector.addEventListener("mousemove", this.mousemoveHandler); + + // Click + this.selector.addEventListener("click", this.clickHandler); + } else { + throw new Error( + "Can't add Event Listeners. Something is wrong with your selector 😭" + ); + } + } + } + + /** + * Detaches listeners from required events. + */ + detachEvents() { + window.removeEventListener("resize", this.resizeHandler); + + if (this.selector) { + this.selector.removeEventListener("touchstart", this.touchstartHandler); + this.selector.removeEventListener("touchend", this.touchendHandler); + this.selector.removeEventListener("touchmove", this.touchmoveHandler); + this.selector.removeEventListener("mousedown", this.mousedownHandler); + this.selector.removeEventListener("mouseup", this.mouseupHandler); + this.selector.removeEventListener("mouseleave", this.mouseleaveHandler); + this.selector.removeEventListener("mousemove", this.mousemoveHandler); + this.selector.removeEventListener("click", this.clickHandler); + } else { + throw new Error( + "Can't detach EventListeners. Something is wrong with your selector 😭" + ); + } + } + + /** + * Build a sliderFrame and slide to a current item. + */ + buildSliderFrame() { + const widthItem = this.selectorWidth / this.perPage; + const itemsToBuild = this.config.loop + ? this.innerElements.length + 2 * this.perPage + : this.innerElements.length; + + // Create frame and apply styling + this.sliderFrame = document.createElement("div"); + this.sliderFrame.style.width = `${widthItem * itemsToBuild}px`; + this.enableTransition(); + + if (this.config.draggable) { + this.selector!.style.cursor = "-webkit-grab"; + } + + // Create a document fragment to put slides into it + const docFragment = document.createDocumentFragment(); + + // Loop through the slides, add styling and add them to document fragment + if (this.config.loop) { + for ( + let i = this.innerElements.length - this.perPage; + i < this.innerElements.length; + i++ + ) { + const element = this.buildSliderFrameItem( + this.innerElements[i].cloneNode(true) + ); + docFragment.appendChild(element); + } + } + for (let i = 0; i < this.innerElements.length; i++) { + const element = this.buildSliderFrameItem(this.innerElements[i]); + docFragment.appendChild(element); + } + if (this.config.loop) { + for (let i = 0; i < this.perPage; i++) { + const element = this.buildSliderFrameItem( + this.innerElements[i].cloneNode(true) + ); + docFragment.appendChild(element); + } + } + + // Add fragment to the frame + this.sliderFrame.appendChild(docFragment); + + // Clear selector (just in case something is there) and insert a frame + this.selector!.innerHTML = ""; + this.selector!.appendChild(this.sliderFrame); + + // Go to currently active slide after initial build + this.slideToCurrent(); + } + + buildSliderFrameItem(elm: Node) { + const elementContainer = document.createElement("div"); + elementContainer.style.cssFloat = this.config.rtl ? "right" : "left"; + elementContainer.style.float = this.config.rtl ? "right" : "left"; + + elementContainer.style.width = `${ + this.config.loop + ? 100 / (this.innerElements.length + this.perPage * 2) + : 100 / this.innerElements.length + }%`; + + elementContainer.appendChild(elm); + + return elementContainer; + } + + /** + * Determinates slides number accordingly to clients viewport. + */ + resolveSlidesNumber(): number { + if (typeof this.config.perPage === "number") { + return this.config.perPage; + } else if (typeof this.config.perPage === "object") { + for (const viewport in this.config.perPage) { + if (window.innerWidth >= viewport) { + return this.config.perPage[viewport]; + } + } + } + + return 1; + } + + /** + * Go to previous slide. + * @param {number} [howManySlides=1] - How many items to slide backward. + * @param {function} callback - Optional callback function. + */ + prev(howManySlides: number = 1, callback?: Function) { + // early return when there is nothing to slide + if (this.innerElements.length <= this.perPage) { + return; + } + + const beforeChange = this.currentSlide; + + if (this.config.loop) { + const isNewIndexClone = this.currentSlide - howManySlides < 0; + if (isNewIndexClone) { + this.disableTransition(); + + const mirrorSlideIndex = this.currentSlide + this.innerElements.length; + const mirrorSlideIndexOffset = this.perPage; + const moveTo = mirrorSlideIndex + mirrorSlideIndexOffset; + const offset = + (this.config.rtl ? 1 : -1) * + moveTo * + (this.selectorWidth / this.perPage); + const dragDistance = this.config.draggable + ? this.drag!.endX - this.drag!.startX + : 0; + + this.sliderFrame!.style[ + this.transformProperty + ] = `translate3d(${offset + dragDistance}px, 0, 0)`; + this.currentSlide = mirrorSlideIndex - howManySlides; + } else { + this.currentSlide = this.currentSlide - howManySlides; + } + } else { + this.currentSlide = Math.max(this.currentSlide - howManySlides, 0); + } + + if (beforeChange !== this.currentSlide) { + this.slideToCurrent(this.config.loop); + this.config.onChange.call(this); + if (callback) { + callback.call(this); + } + } + } + + /** + * Go to next slide. + * @param {number} [howManySlides=1] - How many items to slide forward. + * @param {function} callback - Optional callback function. + */ + next(howManySlides: number = 1, callback?: Function) { + // early return when there is nothing to slide + if (this.innerElements.length <= this.perPage) { + return; + } + + const beforeChange = this.currentSlide; + + if (this.config.loop) { + const isNewIndexClone = + this.currentSlide + howManySlides > + this.innerElements.length - this.perPage; + if (isNewIndexClone) { + this.disableTransition(); + + const mirrorSlideIndex = this.currentSlide - this.innerElements.length; + const mirrorSlideIndexOffset = this.perPage; + const moveTo = mirrorSlideIndex + mirrorSlideIndexOffset; + const offset = + (this.config.rtl ? 1 : -1) * + moveTo * + (this.selectorWidth / this.perPage); + const dragDistance = this.config.draggable + ? this.drag!.endX - this.drag!.startX + : 0; + + this.sliderFrame!.style[ + this.transformProperty + ] = `translate3d(${offset + dragDistance}px, 0, 0)`; + this.currentSlide = mirrorSlideIndex + howManySlides; + } else { + this.currentSlide = this.currentSlide + howManySlides; + } + } else { + this.currentSlide = Math.min( + this.currentSlide + howManySlides, + this.innerElements.length - this.perPage + ); + } + if (beforeChange !== this.currentSlide) { + this.slideToCurrent(this.config.loop); + this.config.onChange.call(this); + if (callback) { + callback.call(this); + } + } + } + + /** + * Disable transition on sliderFrame. + */ + disableTransition() { + this.sliderFrame!.style.webkitTransition = `all 0ms ${this.config.easing}`; + this.sliderFrame!.style.transition = `all 0ms ${this.config.easing}`; + } + + /** + * Enable transition on sliderFrame. + */ + enableTransition() { + this.sliderFrame!.style.webkitTransition = `all ${this.config.duration}ms ${this.config.easing}`; + this.sliderFrame!.style.transition = `all ${this.config.duration}ms ${this.config.easing}`; + } + + /** + * Go to slide with particular index + * @param {number} index - Item index to slide to. + * @param {function} callback - Optional callback function. + */ + goTo(index: number, callback?: Function) { + if (this.innerElements.length <= this.perPage) { + return; + } + const beforeChange = this.currentSlide; + this.currentSlide = this.config.loop + ? index % this.innerElements.length + : Math.min(Math.max(index, 0), this.innerElements.length - this.perPage); + if (beforeChange !== this.currentSlide) { + this.slideToCurrent(); + this.config.onChange.call(this); + if (callback) { + callback.call(this); + } + } + } + + /** + * Moves sliders frame to position of currently active slide + */ + slideToCurrent(enableTransition?: boolean) { + const currentSlide = this.config.loop + ? this.currentSlide + this.perPage + : this.currentSlide; + const offset = + (this.config.rtl ? 1 : -1) * + currentSlide * + (this.selectorWidth / this.perPage); + + if (enableTransition) { + // This one is tricky, I know but this is a perfect explanation: + // https://youtu.be/cCOL7MC4Pl0 + requestAnimationFrame(() => { + requestAnimationFrame(() => { + this.enableTransition(); + this.sliderFrame!.style[ + this.transformProperty + ] = `translate3d(${offset}px, 0, 0)`; + }); + }); + } else { + this.sliderFrame!.style[ + this.transformProperty + ] = `translate3d(${offset}px, 0, 0)`; + } + } + + /** + * Recalculate drag /swipe event and reposition the frame of a slider + */ + updateAfterDrag() { + if (!this.drag) return; + + const movement = + (this.config.rtl ? -1 : 1) * (this.drag.endX - this.drag.startX); + const movementDistance = Math.abs(movement); + const howManySliderToSlide = this.config.multipleDrag + ? Math.ceil(movementDistance / (this.selectorWidth / this.perPage)) + : 1; + + const slideToNegativeClone = + movement > 0 && this.currentSlide - howManySliderToSlide < 0; + const slideToPositiveClone = + movement < 0 && + this.currentSlide + howManySliderToSlide > + this.innerElements.length - this.perPage; + + if ( + movement > 0 && + movementDistance > this.config.threshold && + this.innerElements.length > this.perPage + ) { + this.prev(howManySliderToSlide); + } else if ( + movement < 0 && + movementDistance > this.config.threshold && + this.innerElements.length > this.perPage + ) { + this.next(howManySliderToSlide); + } + this.slideToCurrent(slideToNegativeClone || slideToPositiveClone); + } + + /** + * When window resizes, resize slider components as well + */ + resizeHandler(): void { + // update perPage number dependable of user value + this.resolveSlidesNumber(); + + // relcalculate currentSlide + // prevent hiding items when browser width increases + if (this.currentSlide + this.perPage > this.innerElements.length) { + this.currentSlide = + this.innerElements.length <= this.perPage + ? 0 + : this.innerElements.length - this.perPage; + } + + this.selectorWidth = this.selector!.offsetWidth; + + this.buildSliderFrame(); + } + + /** + * Clear drag after touchend and mouseup event + */ + clearDrag() { + if (!this.drag) return; + + this.drag = { + startX: 0, + endX: 0, + startY: 0, + letItGo: undefined, + preventClick: this.drag.preventClick + }; + } + + /** + * touchstart event handler + */ + + touchstartHandler(e: TouchEvent) { + // Prevent dragging / swiping on inputs, selects and textareas + const ignoreSiema = + ["TEXTAREA", "OPTION", "INPUT", "SELECT"].indexOf(e.target!.nodeName) !== + -1; + + if (ignoreSiema) { + return; + } + + e.stopPropagation(); + + this.pointerDown = true; + + if (!this.drag) return; + + this.drag.startX = e.touches[0].pageX; + this.drag.startY = e.touches[0].pageY; + } + + /** + * touchend event handler + */ + touchendHandler(e: TouchEvent) { + e.stopPropagation(); + this.pointerDown = false; + this.enableTransition(); + if (this.drag?.endX) { + this.updateAfterDrag(); + } + this.clearDrag(); + } + + /** + * touchmove event handler + */ + touchmoveHandler(e: TouchEvent) { + e.stopPropagation(); + if (!this.drag) return; + + if (this.drag.letItGo === null) { + this.drag.letItGo = + Math.abs(this.drag.startY - e.touches[0].pageY) < + Math.abs(this.drag.startX - e.touches[0].pageX); + } + + if (this.pointerDown && this.drag.letItGo) { + e.preventDefault(); + if (!this.sliderFrame) return; + + this.drag.endX = e.touches[0].pageX; + this.sliderFrame.style.webkitTransition = `all 0ms ${this.config.easing}`; + this.sliderFrame.style.transition = `all 0ms ${this.config.easing}`; + + const currentSlide = this.config.loop + ? this.currentSlide + this.perPage + : this.currentSlide; + const currentOffset = currentSlide * (this.selectorWidth / this.perPage); + const dragOffset = this.drag.endX - this.drag.startX; + const offset = this.config.rtl + ? currentOffset + dragOffset + : currentOffset - dragOffset; + this.sliderFrame.style[this.transformProperty] = `translate3d(${(this + .config.rtl + ? 1 + : -1) * offset}px, 0, 0)`; + } + } + + /** + * mousedown event handler + */ + mousedownHandler(e: MouseEvent) { + // Prevent dragging / swiping on inputs, selects and textareas + const ignoreSiema = + ["TEXTAREA", "OPTION", "INPUT", "SELECT"].indexOf(e.target!.nodeName) !== + -1; + if (ignoreSiema) { + return; + } + + e.preventDefault(); + e.stopPropagation(); + this.pointerDown = true; + + if (this.drag) { + this.drag.startX = e.pageX; + } + } + + /** + * mouseup event handler + */ + mouseupHandler(e: MouseEvent) { + e.stopPropagation(); + this.pointerDown = false; + this.selector!.style.cursor = "-webkit-grab"; + this.enableTransition(); + + if (this.drag?.endX) { + this.updateAfterDrag(); + } + + this.clearDrag(); + } + + /** + * mousemove event handler + */ + mousemoveHandler(e: MouseEvent) { + e.preventDefault(); + if (this.pointerDown && this.drag && this.sliderFrame) { + // if dragged element is a link + // mark preventClick prop as a true + // to detemine about browser redirection later on + if (e.target!.nodeName === "A") { + this.drag.preventClick = true; + } + + this.drag.endX = e.pageX; + this.selector!.style.cursor = "-webkit-grabbing"; + this.sliderFrame.style.webkitTransition = `all 0ms ${this.config.easing}`; + this.sliderFrame.style.transition = `all 0ms ${this.config.easing}`; + + const currentSlide = this.config.loop + ? this.currentSlide + this.perPage + : this.currentSlide; + const currentOffset = currentSlide * (this.selectorWidth / this.perPage); + const dragOffset = this.drag.endX - this.drag.startX; + const offset = this.config.rtl + ? currentOffset + dragOffset + : currentOffset - dragOffset; + this.sliderFrame.style[this.transformProperty] = `translate3d(${(this + .config.rtl + ? 1 + : -1) * offset}px, 0, 0)`; + } + } + + /** + * mouseleave event handler + */ + mouseleaveHandler(e: MouseEvent) { + if (this.pointerDown) { + this.pointerDown = false; + this.selector!.style.cursor = "-webkit-grab"; + this.enableTransition(); + this.updateAfterDrag(); + this.clearDrag(); + } + + if (this.pointerDown && this.drag) { + this.drag.endX = e.pageX; + this.drag.preventClick = false; + } + } + + /** + * click event handler + */ + clickHandler(e: MouseEvent) { + if (!this.drag) return; + + // if the dragged element is a link + // prevent browsers from folowing the link + if (this.drag.preventClick) { + e.preventDefault(); + } + + this.drag.preventClick = false; + } + + /** + * Remove item from carousel. + * @param {number} index - Item index to remove. + * @param {function} callback - Optional callback to call after remove. + */ + remove(index: number, callback?: Function) { + if (index < 0 || index >= this.innerElements.length) { + throw new Error("Item to remove doesn't exist 😭"); + } + + // Shift sliderFrame back by one item when: + // 1. Item with lower index than currenSlide is removed. + // 2. Last item is removed. + const lowerIndex = index < this.currentSlide; + const lastItem = this.currentSlide + this.perPage - 1 === index; + + if (lowerIndex || lastItem) { + this.currentSlide--; + } + + this.innerElements.splice(index, 1); + + // build a frame and slide to a currentSlide + this.buildSliderFrame(); + + if (callback) { + callback.call(this); + } + } + + /** + * Insert item to carousel at particular index. + * @param {Node} item - Item to insert. + * @param {number} index - Index of new new item insertion. + * @param {function} callback - Optional callback to call after insert. + */ + insert(item: Node, index: number, callback?: Function) { + if (index < 0 || index > this.innerElements.length + 1) { + throw new Error("Unable to inset it at this index 😭"); + } + if (this.innerElements.indexOf(item) !== -1) { + throw new Error("The same item in a carousel? Really? Nope 😭"); + } + + // Avoid shifting content + const shouldItShift = + index <= this.currentSlide && + this.currentSlide > 0 && + this.innerElements.length; + + this.currentSlide = shouldItShift + ? this.currentSlide + 1 + : this.currentSlide; + + this.innerElements.splice(index, 0, item); + + // build a frame and slide to a currentSlide + this.buildSliderFrame(); + + if (callback) { + callback.call(this); + } + } + + /** + * Prepernd item to carousel. + * @param {HTMLElement} item - Item to prepend. + * @param {function} callback - Optional callback to call after prepend. + */ + prepend(item: HTMLElement, callback?: Function) { + this.insert(item, 0); + + if (callback) { + callback.call(this); + } + } + + /** + * Append item to carousel. + * @param {HTMLElement} item - Item to append. + * @param {function} callback - Optional callback to call after append. + */ + append(item: HTMLElement, callback?: Function) { + this.insert(item, this.innerElements.length + 1); + + if (callback) { + callback.call(this); + } + } + + /** + * Removes listeners and optionally restores to initial markup + * @param {boolean} restoreMarkup - Determinants about restoring an initial markup. + * @param {function} callback - Optional callback function. + */ + destroy(restoreMarkup: boolean = false, callback?: Function) { + this.detachEvents(); + + this.selector!.style.cursor = "auto"; + + if (restoreMarkup) { + const slides = document.createDocumentFragment(); + for (let i = 0; i < this.innerElements.length; i++) { + slides.appendChild(this.innerElements[i]); + } + this.selector!.innerHTML = ""; + this.selector!.appendChild(slides); + this.selector!.removeAttribute("style"); + } + + if (callback) { + callback.call(this); + } + } +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..30ffe5b --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,43 @@ +{ + "compilerOptions": { + "target": "es5", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019' or 'ESNEXT'. */ + "module": "system", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */ + "declaration": true, /* Generates corresponding '.d.ts' file. */ + "outFile": "./dist/siema.min.js", /* Concatenate and emit output to single file. */ + "outDir": "./dist", /* Redirect output structure to the directory. */ + "rootDir": "./", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */ + "removeComments": true, /* Do not emit comments to output. */ + "strict": true, /* Enable all strict type-checking options. */ + "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */ + "strictNullChecks": true, /* Enable strict null checks. */ + "strictFunctionTypes": true, /* Enable strict checking of function types. */ + // "strictPropertyInitialization": true, /* Enable strict checking of property initialization in classes. */ + "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */ + "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */ + + /* Additional Checks */ + "noUnusedLocals": true, /* Report errors on unused locals. */ + "noUnusedParameters": true, /* Report errors on unused parameters. */ + /* Module Resolution Options */ + // "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */ + // "baseUrl": "./", /* Base directory to resolve non-absolute module names. */ + // "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */ + // "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */ + // "typeRoots": [], /* List of folders to include type definitions from. */ + // "types": [], /* Type declaration files to be included in compilation. */ + // "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */ + "esModuleInterop": true /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */ + // "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */ + // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ + + /* Source Map Options */ + // "sourceRoot": "", /* Specify the location where debugger should locate TypeScript files instead of source locations. */ + // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ + // "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */ + // "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */ + + /* Experimental Options */ + // "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */ + // "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */ + } +} diff --git a/yarn.lock b/yarn.lock index 781cac0..8e8d18c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2900,6 +2900,11 @@ typedarray@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" +typescript@^3.7.4: + version "3.7.4" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.7.4.tgz#1743a5ec5fef6a1fa9f3e4708e33c81c73876c19" + integrity sha512-A25xv5XCtarLwXpcDNZzCGvW2D1S3/bACratYBx2sax8PefsFhlYmkQicKHvpYflFS8if4zne5zT5kpJ7pzuvw== + uglify-js@^2.8.29: version "2.8.29" resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd"