diff --git a/.gitignore b/.gitignore index 85158b7..541c424 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,7 @@ /dist /tmp /out-tsc +/projects/hot-table/package.json # dependencies /node_modules diff --git a/.release.json b/.release.json deleted file mode 100644 index 435a9a6..0000000 --- a/.release.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "package_file_location": "./package.json", - "no_confirm": false, - "skip_git_pull": false, - "skip_git_push": false, - "release_message": true, - "remote": "origin", - "pre_commit_commands": [ - "npm run test", - "npm run pre-release" - ], - "post_commit_commands": [], - "post_complete_commands": [ - "npm publish dist/ce --access public", - "npm publish dist/pro --access public" - ], - "files_to_commit": [] -} diff --git a/package-lock.json b/package-lock.json index e7045f6..93dfb37 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,16 +1,16 @@ { "name": "@handsontable/angular", - "version": "3.0.0", + "version": "5.0.0", "lockfileVersion": 1, "requires": true, "dependencies": { "@angular-devkit/architect": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.13.4.tgz", - "integrity": "sha512-wJF8oz8MurtpFi0ik42bkI2F5gEnuOe79KHPO1i3SYfdhEp5NY8igVKZ6chB/eq4Ml50aHxas8Hh9ke12K+Pxw==", + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.13.9.tgz", + "integrity": "sha512-EAFtCs9dsGhpMRC45PoYsrkiExpWz9Ax15qXfzwdDRacz5DmdOVt+QpkLW1beUOwiyj/bhFyj23eaONK2RTn/w==", "dev": true, "requires": { - "@angular-devkit/core": "7.3.4", + "@angular-devkit/core": "7.3.9", "rxjs": "6.3.3" }, "dependencies": { @@ -26,16 +26,16 @@ } }, "@angular-devkit/build-angular": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-0.13.4.tgz", - "integrity": "sha512-7yJzgNk3ToiAHd8vnYonqiswvVNYzOUKg2xZfpx+SD5m7mVE+CSUp+P4YzUrI0Vm9WitZOYaCv1I6G1NguJHqA==", + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-0.13.9.tgz", + "integrity": "sha512-onh07LhdxotDFjja0KKsDWNCwgpM/ymuRr5h0e+vT4AgklP2Uioz1CpzVOgxPIKkdVdGR9QgDinVsWAmY90J8g==", "dev": true, "requires": { - "@angular-devkit/architect": "0.13.4", - "@angular-devkit/build-optimizer": "0.13.4", - "@angular-devkit/build-webpack": "0.13.4", - "@angular-devkit/core": "7.3.4", - "@ngtools/webpack": "7.3.4", + "@angular-devkit/architect": "0.13.9", + "@angular-devkit/build-optimizer": "0.13.9", + "@angular-devkit/build-webpack": "0.13.9", + "@angular-devkit/core": "7.3.9", + "@ngtools/webpack": "7.3.9", "ajv": "6.9.1", "autoprefixer": "9.4.6", "circular-dependency-plugin": "5.0.2", @@ -51,8 +51,8 @@ "loader-utils": "1.2.3", "mini-css-extract-plugin": "0.5.0", "minimatch": "3.0.4", - "node-sass": "4.11.0", - "opn": "5.4.0", + "node-sass": "4.12.0", + "open": "6.0.0", "parse5": "4.0.0", "postcss": "7.0.14", "postcss-import": "12.0.1", @@ -63,7 +63,7 @@ "semver": "5.6.0", "source-map-loader": "0.2.4", "source-map-support": "0.5.10", - "speed-measure-webpack-plugin": "1.3.0", + "speed-measure-webpack-plugin": "1.3.1", "stats-webpack-plugin": "0.7.0", "style-loader": "0.23.1", "stylus": "0.54.5", @@ -90,13 +90,13 @@ } }, "@angular-devkit/build-ng-packagr": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-ng-packagr/-/build-ng-packagr-0.13.4.tgz", - "integrity": "sha512-jeGCyD0twyD2/lhb5OmhwKzGQXPAmCVIHBr6/BpUA6LvVOvzDwTBwUqWLZKgiNkfqm98HD40VmIwn1/FrFrL2Q==", + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-ng-packagr/-/build-ng-packagr-0.13.9.tgz", + "integrity": "sha512-hWneqiiKJred4r3wKHsHBMIKh/tjbHKy2zNTyvEKl5jcgGGDUlp51YjnUtkFeRWM8E6WUOyIHcoCNdFvwFSRDQ==", "dev": true, "requires": { - "@angular-devkit/architect": "0.13.4", - "@angular-devkit/core": "7.3.4", + "@angular-devkit/architect": "0.13.9", + "@angular-devkit/core": "7.3.9", "rxjs": "6.3.3", "semver": "5.6.0" }, @@ -113,9 +113,9 @@ } }, "@angular-devkit/build-optimizer": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-optimizer/-/build-optimizer-0.13.4.tgz", - "integrity": "sha512-YTpiE4F2GnFc4jbXZkmFUMHOvo3kWcMPAInVbjXNSIWMqW8Ibs7d6MAcualQX4NCvcn45+mVXLfY/8hWZ/b7lw==", + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-optimizer/-/build-optimizer-0.13.9.tgz", + "integrity": "sha512-GQtCntthQHSBv5l1ZY5p00JOECb/WcE1qUBo5kFjp84z0fszDkhOy52M1kcWCX4PFzJaY4DKk58hbUE/2UN0jw==", "dev": true, "requires": { "loader-utils": "1.2.3", @@ -133,13 +133,13 @@ } }, "@angular-devkit/build-webpack": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.13.4.tgz", - "integrity": "sha512-W5baPrsNUUyeD5K9ZjiTfiDsytBoqDvGDMKRUO9XWV8xF8LYF2ttsBQxlJK7SKkMyJXcjmiHhdkMq5wgRE7n0A==", + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.13.9.tgz", + "integrity": "sha512-6ypu6pzNmQxzATF4rTWEhGSl5hyGQ8a/3aCZF/ux+XGc3d4hi2HW+NWlDm1UEna6ZjNtgEPlgfP4q8BKrjRmfA==", "dev": true, "requires": { - "@angular-devkit/architect": "0.13.4", - "@angular-devkit/core": "7.3.4", + "@angular-devkit/architect": "0.13.9", + "@angular-devkit/core": "7.3.9", "rxjs": "6.3.3" }, "dependencies": { @@ -155,9 +155,9 @@ } }, "@angular-devkit/core": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-7.3.4.tgz", - "integrity": "sha512-MBfen51iOBKfK4tlg5KwmPxePsF1QoFNUMGLuvUUwPkteonrGcupX1Q7NWTpf+HA+i08mOnZGuepeuQkD12IQw==", + "version": "7.3.9", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-7.3.9.tgz", + "integrity": "sha512-SaxD+nKFW3iCBKsxNR7+66J30EexW/y7tm8m5AvUH+GwSAgIj0ZYmRUzFEPggcaLVA4WnE/YWqIXZMJW5dT7gw==", "dev": true, "requires": { "ajv": "6.9.1", @@ -179,12 +179,12 @@ } }, "@angular-devkit/schematics": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-7.3.4.tgz", - "integrity": "sha512-BLI4MDHmpzw+snu/2Dw1nMmfJ0VAARTbU6DrmzXyl2Se45+iE/tdRy4yNx3IfHhyoCrVZ15R0y9CXeEsLftlIg==", + "version": "7.3.9", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-7.3.9.tgz", + "integrity": "sha512-xzROGCYp7aQbeJ3V6YC0MND7wKEAdWqmm/GaCufEk0dDS8ZGe0sQhcM2oBRa2nQqGQNeThFIH51kx+FayrJP0w==", "dev": true, "requires": { - "@angular-devkit/core": "7.3.4", + "@angular-devkit/core": "7.3.9", "rxjs": "6.3.3" }, "dependencies": { @@ -200,54 +200,54 @@ } }, "@angular/animations": { - "version": "7.2.7", - "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-7.2.7.tgz", - "integrity": "sha512-eU/wSkBmukZXCCe/epUl02xsKPauF+deMbncxBE+w/NmmWjJ77Q09iZAcgzM92RVXj2LsVYQXsNEBGT3X0hRZw==", + "version": "7.2.15", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-7.2.15.tgz", + "integrity": "sha512-8oBt3HLgd2+kyJHUgsd7OzKCCss67t2sch15XNoIWlOLfxclqU+EfFE6t/vCzpT8/+lpZS6LU9ZrTnb+UBj5jg==", "requires": { "tslib": "^1.9.0" } }, "@angular/cli": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-7.3.4.tgz", - "integrity": "sha512-uGL8xiQf+GvuJvqvMUu/XHcijbq9ocbX487LO2PgJ29etHfI7dC0toJbQ8ob+HnF9e1qwMe+uu45OU4C2p+a1A==", + "version": "7.3.9", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-7.3.9.tgz", + "integrity": "sha512-7oJj7CKDlFUbQav1x1CV4xKKcbt0pnxY4unKcm7Q1tVXhu8bU2bc3cDA0aJnbofcYb6TJcd/C2qHgCt78q7edA==", "dev": true, "requires": { - "@angular-devkit/architect": "0.13.4", - "@angular-devkit/core": "7.3.4", - "@angular-devkit/schematics": "7.3.4", - "@schematics/angular": "7.3.4", - "@schematics/update": "0.13.4", + "@angular-devkit/architect": "0.13.9", + "@angular-devkit/core": "7.3.9", + "@angular-devkit/schematics": "7.3.9", + "@schematics/angular": "7.3.9", + "@schematics/update": "0.13.9", "@yarnpkg/lockfile": "1.1.0", "ini": "1.3.5", "inquirer": "6.2.1", "npm-package-arg": "6.1.0", - "opn": "5.4.0", + "open": "6.0.0", "pacote": "9.4.0", "semver": "5.6.0", "symbol-observable": "1.2.0" } }, "@angular/common": { - "version": "7.2.7", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-7.2.7.tgz", - "integrity": "sha512-U1l2CIcmpTAJMWcyTXI9qt1E8CxwKNW1vr6XWZo4X5ziCIzf7RvClzK7Ci5KZKkoPJrJqBJu661Q75Yt22dJsg==", + "version": "7.2.15", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-7.2.15.tgz", + "integrity": "sha512-2b5JY2HWVHCf3D1GZjmde7jdAXSTXkYtmjLtA9tQkjOOTr80eHpNSujQqnzb97dk9VT9OjfjqTQd7K3pxZz8jw==", "requires": { "tslib": "^1.9.0" } }, "@angular/compiler": { - "version": "7.2.7", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-7.2.7.tgz", - "integrity": "sha512-e61YVxW5x4w+X4yjGaptYoJIja7HwH0+8FFEaH6VuPl/DrK8wP4HDMhLo4NzdgeZKLR2jBIQSqLmoM8W7UXcqw==", + "version": "7.2.15", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-7.2.15.tgz", + "integrity": "sha512-5yb4NcLk8GuXkYf7Dcor4XkGueYp4dgihzDmMjYDUrV0NPhubKlr+SwGtLOtzgRBWJ1I2bO0S3zwa0q0OgIPOw==", "requires": { "tslib": "^1.9.0" } }, "@angular/compiler-cli": { - "version": "7.2.7", - "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-7.2.7.tgz", - "integrity": "sha512-UPWROJzBLejgNf+aqgEUXYts8UiFOl2IavDhS/olA9irszv2lNFj9Yqr8OKdy0jK/lKaipZog3VZEx8g5dNeBA==", + "version": "7.2.15", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-7.2.15.tgz", + "integrity": "sha512-+AsfyKawmj/sa+m4Pz8VSRFbCfx/3IOjAuuEjhopbyr154YpPDSu8NTbcwzq3yfbVcPwK4/4exmbQzpsndaCTg==", "dev": true, "requires": { "canonical-path": "1.0.0", @@ -276,9 +276,9 @@ "dev": true }, "chokidar": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.2.tgz", - "integrity": "sha512-IwXUx0FXc5ibYmPC2XeEj5mpXoV66sR+t3jqu2NS2GYwCktt3KF1/Qqjws/NkegajBA4RbZ5+DDwlOiJsxDHEg==", + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.6.tgz", + "integrity": "sha512-V2jUo67OKkc6ySiRpJrjlpJKl9kDuG+Xb8VgsGzb+aEouhgS1D0weyPU4lEzdAcsCAvrih2J2BqyXqHWvVLw5g==", "dev": true, "requires": { "anymatch": "^2.0.0", @@ -292,7 +292,7 @@ "normalize-path": "^3.0.0", "path-is-absolute": "^1.0.0", "readdirp": "^2.2.1", - "upath": "^1.1.0" + "upath": "^1.1.1" } }, "cross-spawn": { @@ -348,6 +348,12 @@ "mimic-fn": "^1.0.0" } }, + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "dev": true + }, "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -477,47 +483,47 @@ } }, "@angular/core": { - "version": "7.2.7", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-7.2.7.tgz", - "integrity": "sha512-E7qjMQdS77SbRROKu13VsfL+MJN52eTlrU0SzEAFGUOgdvbmDYJOaEwjqrouKpYZ0pul8KOoalvlPB7oVflC7A==", + "version": "7.2.15", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-7.2.15.tgz", + "integrity": "sha512-XsuYm0jEU/mOqwDOk2utThv8J9kESkAerfuCHClE9rB2TtHUOGCfekF7lJWqjjypu6/J9ygoPFo7hdAE058ZGg==", "requires": { "tslib": "^1.9.0" } }, "@angular/forms": { - "version": "7.2.7", - "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-7.2.7.tgz", - "integrity": "sha512-2gBs+BG2cMPsHq9JVEzmu2Ev539zjfHmr6cna2W38KLXeGbNf42rbbMUXpYD8cndY0QTYcnwfMpRNIl9zKRZnw==", + "version": "7.2.15", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-7.2.15.tgz", + "integrity": "sha512-p0kcIQLtBBC1qeTA6M3nOuXf/k91E80FKquVM9zEsO2kDjI0oZJVfFYL2UMov5samlJOPN+t6lRHEIUa7ApPsw==", "requires": { "tslib": "^1.9.0" } }, "@angular/language-service": { - "version": "7.2.7", - "resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-7.2.7.tgz", - "integrity": "sha512-d3iCBpOfgLNSGMrtqZvN6NHZIEnKD2MV8Hz4WsRLU4WY0RbshZj5dqx2nO3YRT2tACpAvhWBQoYvtLpTCPzsMA==", + "version": "7.2.15", + "resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-7.2.15.tgz", + "integrity": "sha512-Ig5Jr7mnDelaZvSbUd9YhI5am3q1ku9xelAuwvtyDKvQJeKQj3BtTagcOgWrnQBfrJ/FsA/M5Zo48ncSsV0tqQ==", "dev": true }, "@angular/platform-browser": { - "version": "7.2.7", - "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-7.2.7.tgz", - "integrity": "sha512-9C3ffZs0ZUw+dYg1oJKiONf64UKTdAzIOaTQXTrVrCa3oN7Jb2tUfmpenmB+ATRxwhL2n7Yi725YWwxY2FwqvQ==", + "version": "7.2.15", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-7.2.15.tgz", + "integrity": "sha512-aYgmPsbC9Tvp9vmKWD8voeAp4crwCay7/D6lM3ClEe2EeK934LuEXq3/uczMrFVbnIX7BBIo8fh03Tl7wbiGPw==", "requires": { "tslib": "^1.9.0" } }, "@angular/platform-browser-dynamic": { - "version": "7.2.7", - "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-7.2.7.tgz", - "integrity": "sha512-3nlcwCZOzlKw/4CMJ4zy1JEVy8Ky4KyLRRePLledOMdsGbuDIoq/kyAnBzg295Xe9ovBxv8cmuSkShci+s/x8g==", + "version": "7.2.15", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-7.2.15.tgz", + "integrity": "sha512-UL2PqhzXMD769NQ6Lh6pxlBDKvN9Qol3XLRFil80lwJ1GRW16ITeYbCamcafIH2GOyd88IhmYcbMfUQ/6q4MMQ==", "requires": { "tslib": "^1.9.0" } }, "@angular/router": { - "version": "7.2.7", - "resolved": "https://registry.npmjs.org/@angular/router/-/router-7.2.7.tgz", - "integrity": "sha512-59+M8+IH7V2NPPqWw2mwdg+kh/jfwQcXE0tB8iZ5V2ldACPucY/Td6qiT5H6t7EkELtvkKJwS6vKFV22qdRp3w==", + "version": "7.2.15", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-7.2.15.tgz", + "integrity": "sha512-qAubRJRQanguUqJQ76J9GSZ4JFtoyhJKRmX5P23ANZJXpB6YLzF2fJmOGi+E6cV8F0tKBMEq1pjxFTisx0MXwQ==", "requires": { "tslib": "^1.9.0" } @@ -532,12 +538,12 @@ } }, "@babel/generator": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.3.4.tgz", - "integrity": "sha512-8EXhHRFqlVVWXPezBW5keTiQi/rJMQTg/Y9uVCEZ0CAF3PKtCCaVRnp64Ii1ujhkoDhhF1fVsImoN4yJ2uz4Wg==", + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.4.4.tgz", + "integrity": "sha512-53UOLK6TVNqKxf7RUh8NE851EHRxOOeVXKbK2bivdb+iziMyk03Sr4eaE9OELCbyZAAafAKPDwF2TPUES5QbxQ==", "dev": true, "requires": { - "@babel/types": "^7.3.4", + "@babel/types": "^7.4.4", "jsesc": "^2.5.1", "lodash": "^4.17.11", "source-map": "^0.5.0", @@ -579,12 +585,12 @@ } }, "@babel/helper-split-export-declaration": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0.tgz", - "integrity": "sha512-MXkOJqva62dfC0w85mEf/LucPPS/1+04nmmRMPEBUB++hiiThQ2zPtX/mEWQ3mtzCEjIJvPY8nuwxXtQeQwUag==", + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz", + "integrity": "sha512-Ro/XkzLf3JFITkW6b+hNxzZ1n5OQ80NvIUdmHspih1XAhtN3vPTuUFT4eQnela+2MaZ5ulH+iyP513KJrxbN7Q==", "dev": true, "requires": { - "@babel/types": "^7.0.0" + "@babel/types": "^7.4.4" } }, "@babel/highlight": { @@ -607,34 +613,34 @@ } }, "@babel/parser": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.3.4.tgz", - "integrity": "sha512-tXZCqWtlOOP4wgCp6RjRvLmfuhnqTLy9VHwRochJBCP2nDm27JnnuFEnXFASVyQNHk36jD1tAammsCEEqgscIQ==", + "version": "7.4.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.4.5.tgz", + "integrity": "sha512-9mUqkL1FF5T7f0WDFfAoDdiMVPWsdD1gZYzSnaXsxUCUqzuch/8of9G3VUSNiZmMBoRxT3neyVsqeiL/ZPcjew==", "dev": true }, "@babel/template": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.2.2.tgz", - "integrity": "sha512-zRL0IMM02AUDwghf5LMSSDEz7sBCO2YnNmpg3uWTZj/v1rcG2BmQUvaGU8GhU8BvfMh1k2KIAYZ7Ji9KXPUg7g==", + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.4.4.tgz", + "integrity": "sha512-CiGzLN9KgAvgZsnivND7rkA+AeJ9JB0ciPOD4U59GKbQP2iQl+olF1l76kJOupqidozfZ32ghwBEJDhnk9MEcw==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.2.2", - "@babel/types": "^7.2.2" + "@babel/parser": "^7.4.4", + "@babel/types": "^7.4.4" } }, "@babel/traverse": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.3.4.tgz", - "integrity": "sha512-TvTHKp6471OYEcE/91uWmhR6PrrYywQntCHSaZ8CM8Vmp+pjAusal4nGB2WCCQd0rvI7nOMKn9GnbcvTUz3/ZQ==", + "version": "7.4.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.4.5.tgz", + "integrity": "sha512-Vc+qjynwkjRmIFGxy0KYoPj4FdVDxLej89kMHFsWScq999uX+pwcX4v9mWRjW0KcAYTPAuVQl2LKP1wEVLsp+A==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", - "@babel/generator": "^7.3.4", + "@babel/generator": "^7.4.4", "@babel/helper-function-name": "^7.1.0", - "@babel/helper-split-export-declaration": "^7.0.0", - "@babel/parser": "^7.3.4", - "@babel/types": "^7.3.4", + "@babel/helper-split-export-declaration": "^7.4.4", + "@babel/parser": "^7.4.5", + "@babel/types": "^7.4.4", "debug": "^4.1.0", "globals": "^11.1.0", "lodash": "^4.17.11" @@ -650,9 +656,9 @@ } }, "globals": { - "version": "11.11.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.11.0.tgz", - "integrity": "sha512-WHq43gS+6ufNOEqlrDBxVEbb8ntfXrfAUU2ZOpCxrBdGKW3gyv8mCxAfIBD0DroPKGrJ2eSsXsLtY9MPntsyTw==", + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true }, "ms": { @@ -664,9 +670,9 @@ } }, "@babel/types": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.3.4.tgz", - "integrity": "sha512-WEkp8MsLftM7O/ty580wAmZzN1nDmCACc5+jFzUt+GUFNNIi3LdRlueYz0YIlmJhlZx1QYDMZL5vdWCL0fNjFQ==", + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.4.4.tgz", + "integrity": "sha512-dOllgYdnEFOebhkKCjzSVFqw/PmmB8pH6RGOWkY4GsboQNd47b1fBThBSwlHAq9alF9vc1M3+6oqR47R50L0tQ==", "dev": true, "requires": { "esutils": "^2.0.2", @@ -683,14 +689,19 @@ } }, "@handsontable/formulajs": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@handsontable/formulajs/-/formulajs-2.0.0.tgz", - "integrity": "sha1-PkH+27UaGV3VuMJpSv4XHsCPOgI=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@handsontable/formulajs/-/formulajs-2.0.1.tgz", + "integrity": "sha512-jTdJO/6ZmuaHoiTdnraGbPkdnA7m0VMrZ54vWXi22WpwnsIKAWbqjWTwvDoSuEpcc7/YHVIVlSDtfXHKmaYhdQ==", "requires": { - "bessel": "^0.2.0", - "jStat": "^1.7.0" + "@handsontable/jstat": "^1.0.0", + "bessel": "^0.2.0" } }, + "@handsontable/jstat": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@handsontable/jstat/-/jstat-1.0.0.tgz", + "integrity": "sha512-5XxZ9xIk6iSjrc1p5N/yI2dofBXp0IzZVgrkETDC196SxoJCRNOeKgM9fTHMhoxa02wuaZPLp6stojlppNxP/A==" + }, "@ngtools/json-schema": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@ngtools/json-schema/-/json-schema-1.1.0.tgz", @@ -698,12 +709,12 @@ "dev": true }, "@ngtools/webpack": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-7.3.4.tgz", - "integrity": "sha512-qTfw/LGZ3kDZAgqb6gMVr36E0W3M+bnS/xAxNTxshxmJOCQr9AcKtX4sP65QweKS60KoBBR1a7nR6SOi1NJkxA==", + "version": "7.3.9", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-7.3.9.tgz", + "integrity": "sha512-+ROpqfCXLdQwfP+UNDLk4p959ZrocpStkdd2Iy9CeOJ8yDkityqpstTwQC3oHzzu/95BiyZ0hrHbM6AsPPIvJg==", "dev": true, "requires": { - "@angular-devkit/core": "7.3.4", + "@angular-devkit/core": "7.3.9", "enhanced-resolve": "4.1.0", "rxjs": "6.3.3", "tree-kill": "1.2.1", @@ -722,24 +733,24 @@ } }, "@schematics/angular": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-7.3.4.tgz", - "integrity": "sha512-Bb5DZQ8MeP8yhxPe6nVqyQ7sGVNwUx6nXPlrQV45ZycD3nJlqsuxr2DE75HFpn5oU+vlkq9J/Sys4WLJ4E/OMw==", + "version": "7.3.9", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-7.3.9.tgz", + "integrity": "sha512-B3lytFtFeYNLfWdlrIzvy3ulFRccD2/zkoL0734J+DAGfUz7vbysJ50RwYL46sQUcKdZdvb48ktfu1S8yooP6Q==", "dev": true, "requires": { - "@angular-devkit/core": "7.3.4", - "@angular-devkit/schematics": "7.3.4", + "@angular-devkit/core": "7.3.9", + "@angular-devkit/schematics": "7.3.9", "typescript": "3.2.4" } }, "@schematics/update": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/@schematics/update/-/update-0.13.4.tgz", - "integrity": "sha512-YarSCCBSVPVG/MyN5H/FliRwaIDoeercy5Nip+NWZJsDyvtsAekO9s6QwizSvAr3541MmSQFeQICsjyM2dl3Bg==", + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/@schematics/update/-/update-0.13.9.tgz", + "integrity": "sha512-4MQcaKFxhMzZyE//+DknDh3h3duy3avg2oxSHxdwXlCZ8Q92+4lpegjJcSRiqlEwO4qeJ5XnrjrvzfIiaIZOmA==", "dev": true, "requires": { - "@angular-devkit/core": "7.3.4", - "@angular-devkit/schematics": "7.3.4", + "@angular-devkit/core": "7.3.9", + "@angular-devkit/schematics": "7.3.9", "@yarnpkg/lockfile": "1.1.0", "ini": "1.3.5", "pacote": "9.4.0", @@ -766,9 +777,9 @@ "dev": true }, "@types/jasmine": { - "version": "3.3.9", - "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-3.3.9.tgz", - "integrity": "sha512-vw3VyFPa9mlba6NZPBZC3q2Zrnkgy5xuCVI43/tTLX6umdYrYvcFtQUKi2zH3PjFZQ9XCxNM/NMrM9uk8TPOzg==", + "version": "3.3.12", + "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-3.3.12.tgz", + "integrity": "sha512-lXvr2xFQEVQLkIhuGaR3GC1L9lMU1IxeWnAF/wNY5ZWpC4p9dgxkKkzMp7pntpAdv9pZSnYqgsBkCg32MXSZMg==", "dev": true }, "@types/jasminewd2": { @@ -781,9 +792,9 @@ } }, "@types/node": { - "version": "11.9.6", - "resolved": "https://registry.npmjs.org/@types/node/-/node-11.9.6.tgz", - "integrity": "sha512-4hS2K4gwo9/aXIcoYxCtHpdgd8XUeDmo1siRCAH3RziXB65JlPqUFMtfy9VPj+og7dp3w1TFjGwYga4e0m9GwA==", + "version": "11.13.11", + "resolved": "https://registry.npmjs.org/@types/node/-/node-11.13.11.tgz", + "integrity": "sha512-blLeR+KIy26km1OU8yTLUlSyVCOvT6+wPq/77tIA+uSHHa4yYQosn+bbaJqPtWId0wjVClUtD7aXzDbZeKWqig==", "dev": true }, "@types/pikaday": { @@ -800,10 +811,19 @@ "integrity": "sha1-vShOV8hPEyXacCur/IKlMoGQwMU=", "dev": true }, + "@types/resolve": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-0.0.8.tgz", + "integrity": "sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, "@types/selenium-webdriver": { - "version": "3.0.15", - "resolved": "https://registry.npmjs.org/@types/selenium-webdriver/-/selenium-webdriver-3.0.15.tgz", - "integrity": "sha512-5nh8/K2u9p4bk95GGCJB7KBvewaB0TUziZ9DTr+mR2I6RoO4OJVqx7rxK83hs2J1tomwtCGkhiW+Dy8EUnfB+Q==", + "version": "3.0.16", + "resolved": "https://registry.npmjs.org/@types/selenium-webdriver/-/selenium-webdriver-3.0.16.tgz", + "integrity": "sha512-lMC2G0ItF2xv4UCiwbJGbnJlIuUixHrioOhNGHSCsYCJ8l4t9hMCUimCytvFv7qy6AfSzRxhRHoGa+UqaqwyeA==", "dev": true }, "@types/source-list-map": { @@ -1038,13 +1058,13 @@ "dev": true }, "accepts": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", - "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", "dev": true, "requires": { - "mime-types": "~2.1.18", - "negotiator": "0.6.1" + "mime-types": "~2.1.24", + "negotiator": "0.6.2" } }, "acorn": { @@ -1205,9 +1225,9 @@ } }, "app-root-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/app-root-path/-/app-root-path-2.1.0.tgz", - "integrity": "sha1-mL9lmTJ+zqGZMJhm6BQDaP0uZGo=", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/app-root-path/-/app-root-path-2.2.1.tgz", + "integrity": "sha512-91IFKeKk7FjfmezPKkwtaRvSpnUc4gDwPAjA1YZ9Gn0q0PPeW+vbeUsZuyDwjI7+QTHhcLen2v25fi/AmhvbJA==", "dev": true }, "append-transform": { @@ -1340,11 +1360,12 @@ } }, "assert": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", - "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", + "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", "dev": true, "requires": { + "object-assign": "^4.1.1", "util": "0.10.3" }, "dependencies": { @@ -1387,9 +1408,9 @@ } }, "async-each": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", - "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", "dev": true }, "async-foreach": { @@ -1695,14 +1716,14 @@ "dev": true }, "bignumber.js": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-8.1.1.tgz", - "integrity": "sha512-QD46ppGintwPGuL1KqmwhR0O+N2cZUg8JG/VzwI2e28sM9TqHjQB10lI4QAaMHVbLzwVLLAwEglpKPViWX+5NQ==" + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-4.1.0.tgz", + "integrity": "sha512-eJzYkFYy9L4JzXsbymsFn3p54D+llV27oTQ+ziJG7WFRheJcNZilgVXMG0LoZtlQSKBsJdWtLFqOD0u+U0jZKA==" }, "binary-extensions": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.0.tgz", - "integrity": "sha512-EgmjVLMn22z7eGGv3kcnHwSnJXmFHjISTY9E/S5lIcTD3Oxw05QTcBLNkJFzcb3cNueUdF/IN4U+d78V0zO8Hw==", + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", "dev": true }, "blob": { @@ -1730,9 +1751,9 @@ } }, "bluebird": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.3.tgz", - "integrity": "sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw==", + "version": "3.5.4", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.4.tgz", + "integrity": "sha512-FG+nFEZChJrbQ9tIccIfZJBz3J7mLrAhxakAbnrJWn8d7aKOC+LWifa0G+p4ZqKp4y13T7juYvdhq9NzKdsrjw==", "dev": true }, "bn.js": { @@ -1742,21 +1763,35 @@ "dev": true }, "body-parser": { - "version": "1.18.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", - "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=", + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", "dev": true, "requires": { - "bytes": "3.0.0", + "bytes": "3.1.0", "content-type": "~1.0.4", "debug": "2.6.9", "depd": "~1.1.2", - "http-errors": "~1.6.3", - "iconv-lite": "0.4.23", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", "on-finished": "~2.3.0", - "qs": "6.5.2", - "raw-body": "2.3.3", - "type-is": "~1.6.16" + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" + }, + "dependencies": { + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "dev": true + }, + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "dev": true + } } }, "bonjour": { @@ -1944,14 +1979,14 @@ } }, "browserslist": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.4.2.tgz", - "integrity": "sha512-ISS/AIAiHERJ3d45Fz0AVYKkgcy+F/eJHzKEvv1j0wwKGKD9T3BrwKr/5g45L+Y4XIK5PlTqefHciRFcfE1Jxg==", + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.6.0.tgz", + "integrity": "sha512-Jk0YFwXBuMOOol8n6FhgkDzn3mY9PYLYGk29zybF05SbRTsMgPqmTNeQQhOghCxq5oFqAXE3u4sYddr4C0uRhg==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30000939", - "electron-to-chromium": "^1.3.113", - "node-releases": "^1.1.8" + "caniuse-lite": "^1.0.30000967", + "electron-to-chromium": "^1.3.133", + "node-releases": "^1.1.19" } }, "browserstack": { @@ -2015,9 +2050,9 @@ "dev": true }, "builtin-modules": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.0.0.tgz", - "integrity": "sha512-hMIeU4K2ilbXV6Uv93ZZ0Avg/M91RaKXucQ+4me2Do1txxBDyDZWCBa5bJSLqoNTRpXTLwEzIk1KmloenDDjhg==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.1.0.tgz", + "integrity": "sha512-k0KL0aWZuBt2lrxrcASWDfwOLMnodeQjodT/1SxEQAXsHANgo6ZC/VEaSEHCXt7aSTZ4/4H5LKa+tBXmW7Vtvw==", "dev": true }, "builtin-status-codes": { @@ -2099,9 +2134,9 @@ } }, "caniuse-lite": { - "version": "1.0.30000941", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000941.tgz", - "integrity": "sha512-4vzGb2MfZcO20VMPj1j6nRAixhmtlhkypM4fL4zhgzEucQIYiRzSqPcWIu1OF8i0FETD93FMIPWfUJCAcFvrqA==", + "version": "1.0.30000971", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000971.tgz", + "integrity": "sha512-TQFYFhRS0O5rdsmSbF1Wn+16latXYsQJat66f7S7lizXW1PVpWJeZw9wqqVLIjuxDRz7s7xRUj13QCfd8hKn6g==", "dev": true }, "canonical-path": { @@ -2370,18 +2405,18 @@ "dev": true }, "combined-stream": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", - "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "dev": true, "requires": { "delayed-stream": "~1.0.0" } }, "commander": { - "version": "2.17.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", - "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", + "version": "2.20.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz", + "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==", "dev": true }, "commondir": { @@ -2403,9 +2438,9 @@ "dev": true }, "component-emitter": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", "dev": true }, "component-inherit": { @@ -2415,25 +2450,25 @@ "dev": true }, "compressible": { - "version": "2.0.16", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.16.tgz", - "integrity": "sha512-JQfEOdnI7dASwCuSPWIeVYwc/zMsu/+tRhoUvEfXz2gxOA2DNjmG5vhtFdBlhWPPGo+RdT9S3tgc/uH5qgDiiA==", + "version": "2.0.17", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.17.tgz", + "integrity": "sha512-BGHeLCK1GV7j1bSmQQAi26X+GgWcTjLr/0tzSvMCl3LH1w1IJ4PFSPoV5316b30cneTziC+B1a+3OjoSUcQYmw==", "dev": true, "requires": { - "mime-db": ">= 1.38.0 < 2" + "mime-db": ">= 1.40.0 < 2" } }, "compression": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.3.tgz", - "integrity": "sha512-HSjyBG5N1Nnz7tF2+O7A9XUhyjru71/fwgNb7oIsEVHR0WShfs2tIS/EySLgiTe98aOK18YDlMXpzjCXY/n9mg==", + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", "dev": true, "requires": { "accepts": "~1.3.5", "bytes": "3.0.0", - "compressible": "~2.0.14", + "compressible": "~2.0.16", "debug": "2.6.9", - "on-headers": "~1.0.1", + "on-headers": "~1.0.2", "safe-buffer": "5.1.2", "vary": "~1.1.2" } @@ -2471,38 +2506,15 @@ } }, "connect": { - "version": "3.6.6", - "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.6.tgz", - "integrity": "sha1-Ce/2xVr3I24TcTWnJXSFi2eG9SQ=", + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", + "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", "dev": true, "requires": { "debug": "2.6.9", - "finalhandler": "1.1.0", - "parseurl": "~1.3.2", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", "utils-merge": "1.0.1" - }, - "dependencies": { - "finalhandler": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz", - "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=", - "dev": true, - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.1", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.2", - "statuses": "~1.3.1", - "unpipe": "~1.0.0" - } - }, - "statuses": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", - "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=", - "dev": true - } } }, "connect-history-api-fallback": { @@ -2533,10 +2545,13 @@ "dev": true }, "content-disposition": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", - "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=", - "dev": true + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "dev": true, + "requires": { + "safe-buffer": "5.1.2" + } }, "content-type": { "version": "1.0.4", @@ -2554,9 +2569,9 @@ } }, "cookie": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", - "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=", + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", "dev": true }, "cookie-signature": { @@ -2602,9 +2617,9 @@ } }, "core-js": { - "version": "2.6.5", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.5.tgz", - "integrity": "sha512-klh/kDpwX8hryYL14M9w/xei6vrv6sE8gTHDG7/T/+SEovB/G4ejwcfE/CBzO6Edsu+OETZMZ3wcX/EjUkrl5A==" + "version": "2.6.8", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.8.tgz", + "integrity": "sha512-RWlREFU74TEkdXzyl1bka66O3kYp8jeTXrvJZDzVVMH8AiHUSOFpL1yfhQJ+wHocAm1m+4971W1PPzfLuCv1vg==" }, "core-util-is": { "version": "1.0.2", @@ -3109,9 +3124,9 @@ "dev": true }, "electron-to-chromium": { - "version": "1.3.113", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.113.tgz", - "integrity": "sha512-De+lPAxEcpxvqPTyZAXELNpRZXABRxf+uL/rSykstQhzj/B0l1150G/ExIIxKc16lI89Hgz81J0BHAcbTqK49g==", + "version": "1.3.136", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.136.tgz", + "integrity": "sha512-xHkYkbEi4kI+2w5v6yBGCQTRXL7N0PWscygTFZu/1bArnPSo2WR9xjdw4m06RR4J5PncrWJcuOVv+MAG2mK5JQ==", "dev": true }, "elliptic": { @@ -3173,6 +3188,12 @@ "ws": "~3.3.1" }, "dependencies": { + "cookie": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", + "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=", + "dev": true + }, "debug": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", @@ -3203,6 +3224,12 @@ "yeast": "0.1.2" }, "dependencies": { + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "dev": true + }, "debug": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", @@ -3296,9 +3323,9 @@ "dev": true }, "eslint-scope": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.2.tgz", - "integrity": "sha512-5q1+B/ogmHl8+paxtOKx38Z8LtWkVGuNt3+GQNErqwLl6ViNp/gdJGMCjZNxZ8j/VYjDNZ2Fo+eQc1TAVPIzbg==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", + "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", "dev": true, "requires": { "esrecurse": "^4.1.0", @@ -3327,9 +3354,9 @@ "dev": true }, "estree-walker": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.5.2.tgz", - "integrity": "sha512-XpCnW/AE10ws/kDAs37cngSkvgIR8aN3G0MS85m7dUpuK2EREo9VJ00uvw6Dg/hXEpfsE1I1TvJOJr+Z+TL+ig==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.0.tgz", + "integrity": "sha512-peq1RfVAVzr3PU/jL31RaOjUKLoZJpObQWJJ+LgfcxDUifyLZ1RjPQZTl0pzj2uJ45b7A7XpyppXvxdEqzo4rw==", "dev": true }, "esutils": { @@ -3345,9 +3372,9 @@ "dev": true }, "eventemitter3": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.0.tgz", - "integrity": "sha512-ivIvhpq/Y0uSjcHDcOIccjmYjGLcP09MFGE7ysAwkAvkXfpZlC985pH2/ui64DKazbTW/4kN3yqozUxlXzI6cA==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.2.tgz", + "integrity": "sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==", "dev": true }, "events": { @@ -3447,39 +3474,39 @@ } }, "express": { - "version": "4.16.4", - "resolved": "https://registry.npmjs.org/express/-/express-4.16.4.tgz", - "integrity": "sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==", + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.0.tgz", + "integrity": "sha512-1Z7/t3Z5ZnBG252gKUPyItc4xdeaA0X934ca2ewckAsVsw9EG71i++ZHZPYnus8g/s5Bty8IMpSVEuRkmwwPRQ==", "dev": true, "requires": { - "accepts": "~1.3.5", + "accepts": "~1.3.7", "array-flatten": "1.1.1", - "body-parser": "1.18.3", - "content-disposition": "0.5.2", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", "content-type": "~1.0.4", - "cookie": "0.3.1", + "cookie": "0.4.0", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "~1.1.2", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "etag": "~1.8.1", - "finalhandler": "1.1.1", + "finalhandler": "~1.1.2", "fresh": "0.5.2", "merge-descriptors": "1.0.1", "methods": "~1.1.2", "on-finished": "~2.3.0", - "parseurl": "~1.3.2", + "parseurl": "~1.3.3", "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.4", - "qs": "6.5.2", - "range-parser": "~1.2.0", + "proxy-addr": "~2.0.5", + "qs": "6.7.0", + "range-parser": "~1.2.1", "safe-buffer": "5.1.2", - "send": "0.16.2", - "serve-static": "1.13.2", - "setprototypeof": "1.1.0", - "statuses": "~1.4.0", - "type-is": "~1.6.16", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "~1.5.0", + "type-is": "~1.6.18", "utils-merge": "1.0.1", "vary": "~1.1.2" }, @@ -3489,6 +3516,12 @@ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", "dev": true + }, + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "dev": true } } }, @@ -3528,17 +3561,6 @@ "chardet": "^0.7.0", "iconv-lite": "^0.4.24", "tmp": "^0.0.33" - }, - "dependencies": { - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - } } }, "extglob": { @@ -3698,17 +3720,17 @@ } }, "finalhandler": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", - "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", "dev": true, "requires": { "debug": "2.6.9", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "on-finished": "~2.3.0", - "parseurl": "~1.3.2", - "statuses": "~1.4.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", "unpipe": "~1.0.0" } }, @@ -3864,9 +3886,9 @@ } }, "fs-minipass": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.5.tgz", - "integrity": "sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.6.tgz", + "integrity": "sha512-crhvyXcMejjv3Z5d2Fa9sf5xLYVCF5O1c71QxbVnbLsmYMBEvDAftewesN/HhY03YRoA7zOMxjNGrF5svGaaeQ==", "dev": true, "requires": { "minipass": "^2.2.1" @@ -3891,14 +3913,14 @@ "dev": true }, "fsevents": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.7.tgz", - "integrity": "sha512-Pxm6sI2MeBD7RdD12RYsqaP0nMiwx8eZBXCa6z2L+mRHm2DYrOYwihmhjpkdjUHwQhslWQjRpEgNq4XvBmaAuw==", + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz", + "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==", "dev": true, "optional": true, "requires": { - "nan": "^2.9.2", - "node-pre-gyp": "^0.10.0" + "nan": "^2.12.1", + "node-pre-gyp": "^0.12.0" }, "dependencies": { "abbrev": { @@ -3976,12 +3998,12 @@ "optional": true }, "debug": { - "version": "2.6.9", + "version": "4.1.1", "bundled": true, "dev": true, "optional": true, "requires": { - "ms": "2.0.0" + "ms": "^2.1.1" } }, "deep-extend": { @@ -4152,24 +4174,24 @@ } }, "ms": { - "version": "2.0.0", + "version": "2.1.1", "bundled": true, "dev": true, "optional": true }, "needle": { - "version": "2.2.4", + "version": "2.3.0", "bundled": true, "dev": true, "optional": true, "requires": { - "debug": "^2.1.2", + "debug": "^4.1.0", "iconv-lite": "^0.4.4", "sax": "^1.2.4" } }, "node-pre-gyp": { - "version": "0.10.3", + "version": "0.12.0", "bundled": true, "dev": true, "optional": true, @@ -4197,13 +4219,13 @@ } }, "npm-bundled": { - "version": "1.0.5", + "version": "1.0.6", "bundled": true, "dev": true, "optional": true }, "npm-packlist": { - "version": "1.2.0", + "version": "1.4.1", "bundled": true, "dev": true, "optional": true, @@ -4342,7 +4364,7 @@ "optional": true }, "semver": { - "version": "5.6.0", + "version": "5.7.0", "bundled": true, "dev": true, "optional": true @@ -4439,9 +4461,9 @@ } }, "fstream": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", - "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", + "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", "dev": true, "requires": { "graceful-fs": "^4.1.2", @@ -4621,12 +4643,12 @@ "dev": true }, "handlebars": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.1.0.tgz", - "integrity": "sha512-l2jRuU1NAWK6AW5qqcTATWQJvNPEwkM7NEKSiv/gqOsoSQbVoWyqVEY5GS+XPQ88zLNmqASRpzfdm8d79hJS+w==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.1.2.tgz", + "integrity": "sha512-nvfrjqvt9xQ8Z/w0ijewdD/vvWDTOweBUm96NTr66Wfvo1mJenBLwcYmPs3TIBP5ruzYGD7Hx/DaM9RmhroGPw==", "dev": true, "requires": { - "async": "^2.5.0", + "neo-async": "^2.6.0", "optimist": "^0.6.1", "source-map": "^0.6.1", "uglify-js": "^3.1.4" @@ -4641,15 +4663,23 @@ } }, "handsontable": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/handsontable/-/handsontable-7.0.0.tgz", - "integrity": "sha512-j6AozjIwpTHV+tgyejlAZnSQiRFRyxptEAIyon9pBNKqpIjj2CFeqh+IZjPUvOCcOdKhkXFJIXoObcMIuAu1bA==", + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/handsontable/-/handsontable-7.0.3.tgz", + "integrity": "sha512-CRwrI6VFcNhTSiTtIrLhdofuOBb9itNmbUsl4ntlu61qnEpyRBqT7Vv5wT+icRtBlq4czlYIWKMz8GGZe3e2ow==", "requires": { "@types/pikaday": "1.6.0", - "hot-formula-parser": "^3.0.0", + "core-js": "^3.0.0", + "hot-formula-parser": "^3.0.1", "moment": "2.20.1", - "numbro": "^2.0.6", + "numbro": "2.1.1", "pikaday": "1.5.1" + }, + "dependencies": { + "core-js": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.1.2.tgz", + "integrity": "sha512-3poRGjbu56leCtZCZCzCgQ7GcKOflDFnjWIepaPFUsM0IXUBrne10sl3aa2Bkcz3+FjRdIxBe9dAMhIJmEnQNA==" + } } }, "har-schema": { @@ -4782,11 +4812,11 @@ "dev": true }, "hot-formula-parser": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/hot-formula-parser/-/hot-formula-parser-3.0.0.tgz", - "integrity": "sha512-CHLTrsrv29it5XPcHalNO8ClcJGHefwf599MePlG5dYzxxtbPqx/qt8CkrqvxQeNA5XtkAUcxU62OFv0z2L49A==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/hot-formula-parser/-/hot-formula-parser-3.0.1.tgz", + "integrity": "sha512-QhYPVlVh/GF/hHtBp+MwgDp5kpgrrjeJi3d3/GxTWtqwLBOOM4KlZT/YWcsfZj5JE68MNvFgj3ZzYpkGyvGtwA==", "requires": { - "@handsontable/formulajs": "^2.0.0", + "@handsontable/formulajs": "^2.0.1", "tiny-emitter": "^2.0.1" } }, @@ -4821,15 +4851,16 @@ "dev": true }, "http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", "dev": true, "requires": { "depd": "~1.1.2", "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" } }, "http-parser-js": { @@ -4936,18 +4967,18 @@ } }, "iconv-lite": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", - "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, "requires": { "safer-buffer": ">= 2.1.2 < 3" } }, "ieee754": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.12.tgz", - "integrity": "sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA==", + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", "dev": true }, "iferr": { @@ -5056,9 +5087,9 @@ } }, "p-try": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", - "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true }, "pkg-dir": { @@ -5182,18 +5213,18 @@ } }, "strip-ansi": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.0.0.tgz", - "integrity": "sha512-Uu7gQyZI7J7gn5qLn1Np3G9vcYGTVqB+lFTytnDJv83dd8T22aGH451P3jueT2/QemInJDfxHB5Tde5OzgG1Ow==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dev": true, "requires": { - "ansi-regex": "^4.0.0" + "ansi-regex": "^4.1.0" }, "dependencies": { "ansi-regex": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.0.0.tgz", - "integrity": "sha512-iB5Dda8t/UqpPI/IjsejXu5jOGDrzn41wJyljwPH65VCIbk6+1BzFIMJGFwTNrYXT1CrD+B4l19U7awiQ8rk7w==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", "dev": true } } @@ -5244,9 +5275,9 @@ "dev": true }, "ipaddr.js": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.8.0.tgz", - "integrity": "sha1-6qM9bd16zo9/b+DJygRA5wZzix4=", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.0.tgz", + "integrity": "sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA==", "dev": true }, "is-accessor-descriptor": { @@ -5375,9 +5406,9 @@ } }, "is-glob": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", - "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", "dev": true, "requires": { "is-extglob": "^2.1.1" @@ -5546,46 +5577,76 @@ "dev": true }, "istanbul-api": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/istanbul-api/-/istanbul-api-2.1.1.tgz", - "integrity": "sha512-kVmYrehiwyeBAk/wE71tW6emzLiHGjYIiDrc8sfyty4F8M02/lrgXSm+R1kXysmF20zArvmZXjlE/mg24TVPJw==", + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/istanbul-api/-/istanbul-api-2.1.6.tgz", + "integrity": "sha512-x0Eicp6KsShG1k1rMgBAi/1GgY7kFGEBwQpw3PXGEmu+rBcBNhqU8g2DgY9mlepAsLPzrzrbqSgCGANnki4POA==", "dev": true, "requires": { - "async": "^2.6.1", - "compare-versions": "^3.2.1", + "async": "^2.6.2", + "compare-versions": "^3.4.0", "fileset": "^2.0.3", - "istanbul-lib-coverage": "^2.0.3", - "istanbul-lib-hook": "^2.0.3", - "istanbul-lib-instrument": "^3.1.0", - "istanbul-lib-report": "^2.0.4", - "istanbul-lib-source-maps": "^3.0.2", - "istanbul-reports": "^2.1.1", - "js-yaml": "^3.12.0", - "make-dir": "^1.3.0", + "istanbul-lib-coverage": "^2.0.5", + "istanbul-lib-hook": "^2.0.7", + "istanbul-lib-instrument": "^3.3.0", + "istanbul-lib-report": "^2.0.8", + "istanbul-lib-source-maps": "^3.0.6", + "istanbul-reports": "^2.2.4", + "js-yaml": "^3.13.1", + "make-dir": "^2.1.0", "minimatch": "^3.0.4", "once": "^1.4.0" }, "dependencies": { "istanbul-lib-coverage": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", - "integrity": "sha512-dKWuzRGCs4G+67VfW9pBFFz2Jpi4vSp/k7zBcJ888ofV5Mi1g5CUML5GvMvV6u9Cjybftu+E8Cgp+k0dI1E5lw==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", + "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==", "dev": true }, "istanbul-lib-instrument": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.1.0.tgz", - "integrity": "sha512-ooVllVGT38HIk8MxDj/OIHXSYvH+1tq/Vb38s8ixt9GoJadXska4WkGY+0wkmtYCZNYtaARniH/DixUGGLZ0uA==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz", + "integrity": "sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA==", + "dev": true, + "requires": { + "@babel/generator": "^7.4.0", + "@babel/parser": "^7.4.3", + "@babel/template": "^7.4.0", + "@babel/traverse": "^7.4.3", + "@babel/types": "^7.4.0", + "istanbul-lib-coverage": "^2.0.5", + "semver": "^6.0.0" + } + }, + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", "dev": true, "requires": { - "@babel/generator": "^7.0.0", - "@babel/parser": "^7.0.0", - "@babel/template": "^7.0.0", - "@babel/traverse": "^7.0.0", - "@babel/types": "^7.0.0", - "istanbul-lib-coverage": "^2.0.3", - "semver": "^5.5.0" + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "dependencies": { + "semver": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", + "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", + "dev": true + } } + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true + }, + "semver": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.0.0.tgz", + "integrity": "sha512-0UewU+9rFapKFnlbirLi3byoOuhrSsli/z/ihNnvM24vgF+8sNBiI1LZPBSH9wJKUwaUbw+s3hToDLCXkrghrQ==", + "dev": true } } }, @@ -5643,9 +5704,9 @@ "dev": true }, "istanbul-lib-hook": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-2.0.3.tgz", - "integrity": "sha512-CLmEqwEhuCYtGcpNVJjLV1DQyVnIqavMLFHV/DP+np/g3qvdxu3gsPqYoJMXm15sN84xOlckFB3VNvRbf5yEgA==", + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-2.0.7.tgz", + "integrity": "sha512-vrRztU9VRRFDyC+aklfLoeXyNdTfga2EI3udDGn4cZ6fpSXpHLV9X6CHvfoMCPtggg8zvDDmC4b9xfu0z6/llA==", "dev": true, "requires": { "append-transform": "^1.0.0" @@ -5667,34 +5728,50 @@ } }, "istanbul-lib-report": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-2.0.4.tgz", - "integrity": "sha512-sOiLZLAWpA0+3b5w5/dq0cjm2rrNdAfHWaGhmn7XEFW6X++IV9Ohn+pnELAl9K3rfpaeBfbmH9JU5sejacdLeA==", + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz", + "integrity": "sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ==", "dev": true, "requires": { - "istanbul-lib-coverage": "^2.0.3", - "make-dir": "^1.3.0", - "supports-color": "^6.0.0" + "istanbul-lib-coverage": "^2.0.5", + "make-dir": "^2.1.0", + "supports-color": "^6.1.0" }, "dependencies": { "istanbul-lib-coverage": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", - "integrity": "sha512-dKWuzRGCs4G+67VfW9pBFFz2Jpi4vSp/k7zBcJ888ofV5Mi1g5CUML5GvMvV6u9Cjybftu+E8Cgp+k0dI1E5lw==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", + "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==", + "dev": true + }, + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + } + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", "dev": true } } }, "istanbul-lib-source-maps": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.2.tgz", - "integrity": "sha512-JX4v0CiKTGp9fZPmoxpu9YEkPbEqCqBbO3403VabKjH+NRXo72HafD5UgnjTEqHL2SAjaZK1XDuDOkn6I5QVfQ==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz", + "integrity": "sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw==", "dev": true, "requires": { "debug": "^4.1.1", - "istanbul-lib-coverage": "^2.0.3", - "make-dir": "^1.3.0", - "rimraf": "^2.6.2", + "istanbul-lib-coverage": "^2.0.5", + "make-dir": "^2.1.0", + "rimraf": "^2.6.3", "source-map": "^0.6.1" }, "dependencies": { @@ -5708,17 +5785,33 @@ } }, "istanbul-lib-coverage": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", - "integrity": "sha512-dKWuzRGCs4G+67VfW9pBFFz2Jpi4vSp/k7zBcJ888ofV5Mi1g5CUML5GvMvV6u9Cjybftu+E8Cgp+k0dI1E5lw==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", + "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==", "dev": true }, + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + } + }, "ms": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", "dev": true }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true + }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -5728,19 +5821,14 @@ } }, "istanbul-reports": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-2.1.1.tgz", - "integrity": "sha512-FzNahnidyEPBCI0HcufJoSEoKykesRlFcSzQqjH9x0+LC8tnnE/p/90PBLu8iZTxr8yYZNyTtiAujUqyN+CIxw==", + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-2.2.6.tgz", + "integrity": "sha512-SKi4rnMyLBKe0Jy2uUdx28h8oG7ph2PPuQPvIAh31d+Ci+lSiEu4C+h3oBPuJ9+mPKhOyW0M8gY4U5NM1WLeXA==", "dev": true, "requires": { - "handlebars": "^4.1.0" + "handlebars": "^4.1.2" } }, - "jStat": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/jStat/-/jStat-1.7.1.tgz", - "integrity": "sha512-toueem/U5hyHM6pqe6OZOL/5P8MrY7Ss1K8Brg+TcfX+RAjDU/sbwy72fwzmLPQ5ykdBe1UEoWQHc7OSNWMUDQ==" - }, "jasmine": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-2.8.0.tgz", @@ -5794,9 +5882,9 @@ "dev": true }, "js-yaml": { - "version": "3.12.2", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.2.tgz", - "integrity": "sha512-QHn/Lh/7HhZ/Twc7vJYQTkjuCa0kaCcDcjK5Zlk2rvnUpy7DxMJ23+Jc2dcyvltwQVg1nygAVlB2oRDFHoRS5Q==", + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", "dev": true, "requires": { "argparse": "^1.0.7", @@ -5882,9 +5970,9 @@ } }, "jszip": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.2.0.tgz", - "integrity": "sha512-4WjbsaEtBK/DHeDZOPiPw5nzSGLDEDDreFRDEgnoMwmknPjTqa+23XuYFk6NiGbeiAeZCctiQ/X/z0lQBmDVOQ==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.2.1.tgz", + "integrity": "sha512-iCMBbo4eE5rb1VCpm5qXOAaUiRKRUKiItn8ah2YQQx9qymmSAY98eyQfioChEYcVQLh0zxJ3wS4A0mh90AVPvw==", "dev": true, "requires": { "lie": "~3.3.0", @@ -5929,9 +6017,9 @@ }, "dependencies": { "mime": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.0.tgz", - "integrity": "sha512-ikBcWwyqXQSHKtciCcctu9YfPbFYZ4+gbHEmE0Q8jzcTYQg5dHCr3g2wwAZjPoJfQVXZq6KXAjpXOTf5/cjT7w==", + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.3.tgz", + "integrity": "sha512-QgrPRJfE+riq5TPZMcHZOtm8c6K/yYrMbKIoRfapfiGLxS8OTeIfRhUGW5LU7MlRa52KOAGCfUNruqLrIBvWZw==", "dev": true }, "source-map": { @@ -5972,9 +6060,9 @@ } }, "karma-jasmine-html-reporter": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/karma-jasmine-html-reporter/-/karma-jasmine-html-reporter-1.4.0.tgz", - "integrity": "sha512-0wxhwA8PLPpICZ4o2GRnPi67hf3JhfQm5WCB8nElh4qsE6wRNOTtrqooyBPNqI087Xr2SBhxLg5fU+BJ/qxRrw==", + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/karma-jasmine-html-reporter/-/karma-jasmine-html-reporter-1.4.2.tgz", + "integrity": "sha512-7g0gPj8+9JepCNJR9WjDyQ2RkZ375jpdurYQyAYv8PorUCadepl8vrD6LmMqOGcM17cnrynBawQYZHaumgDjBw==", "dev": true }, "karma-source-map-support": { @@ -6153,12 +6241,6 @@ "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", "dev": true }, - "lodash.assign": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", - "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=", - "dev": true - }, "lodash.clonedeep": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", @@ -6171,12 +6253,6 @@ "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", "dev": true }, - "lodash.mergewith": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.1.tgz", - "integrity": "sha512-eWw5r+PYICtEBgrBE5hhlT6aAa75f411bgDz/ZL2KZqYV03USvucsxcHUIlGTDTECs1eunpI7HOV7U+WLDvNdQ==", - "dev": true - }, "lodash.tail": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.tail/-/lodash.tail-4.1.1.tgz", @@ -6184,22 +6260,22 @@ "dev": true }, "log4js": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/log4js/-/log4js-4.0.2.tgz", - "integrity": "sha512-KE7HjiieVDPPdveA3bJZSuu0n8chMkFl8mIoisBFxwEJ9FmXe4YzNuiqSwYUiR1K8q8/5/8Yd6AClENY1RA9ww==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/log4js/-/log4js-4.2.0.tgz", + "integrity": "sha512-1dJ2ORJcdqbzxvzKM2ceqPBh4O6bbICJpB4dvSEUoMcb14s8MqQ/54zNPqekuN5yjGtxO3GUDTvZfQOQhwdqnA==", "dev": true, "requires": { "date-format": "^2.0.0", - "debug": "^3.1.0", + "debug": "^4.1.1", "flatted": "^2.0.0", "rfdc": "^1.1.2", - "streamroller": "^1.0.1" + "streamroller": "^1.0.5" }, "dependencies": { "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", "dev": true, "requires": { "ms": "^2.1.1" @@ -6423,13 +6499,13 @@ "dev": true }, "mem": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-4.1.0.tgz", - "integrity": "sha512-I5u6Q1x7wxO0kdOpYBB28xueHADYps5uty/zg936CiG8NTe5sJL8EjrCuLneuDW3PlMdZBGDIn8BirEVdovZvg==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", + "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", "dev": true, "requires": { "map-age-cleaner": "^0.1.1", - "mimic-fn": "^1.0.0", + "mimic-fn": "^2.0.0", "p-is-promise": "^2.0.0" } }, @@ -6508,28 +6584,27 @@ "version": "1.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true, - "optional": true + "dev": true }, "mime-db": { - "version": "1.38.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.38.0.tgz", - "integrity": "sha512-bqVioMFFzc2awcdJZIzR3HjZFX20QhilVS7hytkKrv7xFAn8bM1gzc/FOX2awLISvWe0PV8ptFKcon+wZ5qYkg==", + "version": "1.40.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz", + "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==", "dev": true }, "mime-types": { - "version": "2.1.22", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.22.tgz", - "integrity": "sha512-aGl6TZGnhm/li6F7yx82bJiBZwgiEa4Hf6CNr8YO+r5UHr53tSTYZb102zyU50DOWWKeOv0uQLRL0/9EiKWCog==", + "version": "2.1.24", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz", + "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==", "dev": true, "requires": { - "mime-db": "~1.38.0" + "mime-db": "1.40.0" } }, "mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true }, "mini-css-extract-plugin": { @@ -6719,9 +6794,9 @@ "dev": true }, "nan": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.12.1.tgz", - "integrity": "sha512-JY7V6lRkStKcKTvHO5NVSQRv+RV+FIL5pvDoLiAtSL9pKlC5x9PKQcZDsq7m4FO4d57mkhC6Z+QhAh3Jdk5JFw==", + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", + "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==", "dev": true }, "nanomatch": { @@ -6744,15 +6819,15 @@ } }, "negotiator": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", - "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=", + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", "dev": true }, "neo-async": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.0.tgz", - "integrity": "sha512-MFh0d/Wa7vkKO3Y3LlacqAEeHK0mckVqzDieUKTT+KGxi+zIpeVsFxymkIiRpbpDziHc290Xr9A1O4Om7otoRA==", + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz", + "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==", "dev": true }, "ng-packagr": { @@ -6841,9 +6916,9 @@ } }, "p-try": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", - "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true }, "parse-json": { @@ -6976,18 +7051,18 @@ } }, "node-releases": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.9.tgz", - "integrity": "sha512-oic3GT4OtbWWKfRolz5Syw0Xus0KRFxeorLNj0s93ofX6PWyuzKjsiGxsCtWktBwwmTF6DdRRf2KreGqeOk5KA==", + "version": "1.1.20", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.20.tgz", + "integrity": "sha512-YnC3NemTLgzOkQTmR4+0yl/7pIsXZcfWXoquNp0Dql03GQ+CYURhnjUDFsSJxpX/Q9nw8lAjLFdnACQoKs6h5w==", "dev": true, "requires": { "semver": "^5.3.0" } }, "node-sass": { - "version": "4.11.0", - "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.11.0.tgz", - "integrity": "sha512-bHUdHTphgQJZaF1LASx0kAviPH7sGlcyNhWade4eVIpFp6tsn7SV8xNMTbsQFpEV9VXpnwTTnNYlfsZXgGgmkA==", + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.12.0.tgz", + "integrity": "sha512-A1Iv4oN+Iel6EPv77/HddXErL2a+gZ4uBeZUy+a8O35CFYTXhgA8MgLCWBtwpGZdCvTvQ9d+bQxX/QC36GDPpQ==", "dev": true, "requires": { "async-foreach": "^0.1.3", @@ -6997,12 +7072,10 @@ "get-stdin": "^4.0.1", "glob": "^7.0.3", "in-publish": "^2.0.0", - "lodash.assign": "^4.2.0", - "lodash.clonedeep": "^4.3.2", - "lodash.mergewith": "^4.6.0", + "lodash": "^4.17.11", "meow": "^3.7.0", "mkdirp": "^0.5.1", - "nan": "^2.10.0", + "nan": "^2.13.2", "node-gyp": "^3.8.0", "npmlog": "^4.0.0", "request": "^2.88.0", @@ -7176,11 +7249,11 @@ "dev": true }, "numbro": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/numbro/-/numbro-2.1.2.tgz", - "integrity": "sha512-7w833BxZmKGLE9HI0aREtNVRVH6WTYUUlWf4qgA5gKNhPQ4F/MRZ14sc0v8eoLORprk9ZTVwYaLwj8N3Zgxwiw==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/numbro/-/numbro-2.1.1.tgz", + "integrity": "sha512-H3VamlHyqYYomNngAbrl/CT92DnOSC2rJxx6hfZrgj0NVnqxAtOvGbwgpOYjv4ASgxodDWBSYHJ1ZxaEq2lfTg==", "requires": { - "bignumber.js": "^8.0.1" + "bignumber.js": "^4.0.4" } }, "oauth-sign": { @@ -7287,6 +7360,23 @@ "dev": true, "requires": { "mimic-fn": "^1.0.0" + }, + "dependencies": { + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "dev": true + } + } + }, + "open": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/open/-/open-6.0.0.tgz", + "integrity": "sha512-/yb5mVZBz7mHLySMiSj2DcLtMBbFPJk5JBKEkHVZFxZAPzeg3L026O0T+lbdz1B2nyDnkClRSwRQJdeVUIF7zw==", + "dev": true, + "requires": { + "is-wsl": "^1.1.0" } }, "opencollective-postinstall": { @@ -7296,9 +7386,9 @@ "dev": true }, "opn": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/opn/-/opn-5.4.0.tgz", - "integrity": "sha512-YF9MNdVy/0qvJvDtunAOzFw9iasOQHpVthTCvGzxt61Il64AYSGdK+rYwld7NAfk9qJ7dt+hymBNSc9LNYS+Sw==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", + "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", "dev": true, "requires": { "is-wsl": "^1.1.0" @@ -7381,9 +7471,9 @@ "dev": true }, "p-is-promise": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.0.0.tgz", - "integrity": "sha512-pzQPhYMCAgLAKPWD2jC3Se9fEfrD9npNos0y150EeqZll7akhEgGhTW/slB6lHku8AvYGiJ+YJ5hfHKePPgFWg==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", + "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==", "dev": true }, "p-limit": { @@ -7628,9 +7718,9 @@ } }, "parseurl": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", - "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", "dev": true }, "pascalcase": { @@ -7845,9 +7935,9 @@ }, "dependencies": { "mime": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.0.tgz", - "integrity": "sha512-ikBcWwyqXQSHKtciCcctu9YfPbFYZ4+gbHEmE0Q8jzcTYQg5dHCr3g2wwAZjPoJfQVXZq6KXAjpXOTf5/cjT7w==", + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.3.tgz", + "integrity": "sha512-QgrPRJfE+riq5TPZMcHZOtm8c6K/yYrMbKIoRfapfiGLxS8OTeIfRhUGW5LU7MlRa52KOAGCfUNruqLrIBvWZw==", "dev": true } } @@ -8010,9 +8100,9 @@ "dev": true }, "webdriver-manager": { - "version": "12.1.1", - "resolved": "https://registry.npmjs.org/webdriver-manager/-/webdriver-manager-12.1.1.tgz", - "integrity": "sha512-L9TEQmZs6JbMMRQI1w60mfps265/NCr0toYJl7p/R2OAk6oXAfwI6jqYP7EWae+d7Ad2S2Aj4+rzxoSjqk3ZuA==", + "version": "12.1.4", + "resolved": "https://registry.npmjs.org/webdriver-manager/-/webdriver-manager-12.1.4.tgz", + "integrity": "sha512-aNUzdimlHSl3EotUTdE2QwP9sBUjZgWPCy8C+m1wMmF9jBDKuO/24nnpr2O25Db8dYtsjvj9drPTpSIGqRrNnQ==", "dev": true, "requires": { "adm-zip": "^0.4.9", @@ -8031,13 +8121,13 @@ } }, "proxy-addr": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.4.tgz", - "integrity": "sha512-5erio2h9jp5CHGwcybmxmVqHmnCBZeewlfJ0pex+UW7Qny7OOZXTtH56TGNyBizkgiOwhJtMKrVzDTeKcySZwA==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.5.tgz", + "integrity": "sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ==", "dev": true, "requires": { "forwarded": "~0.1.2", - "ipaddr.js": "1.8.0" + "ipaddr.js": "1.9.0" } }, "prr": { @@ -8130,9 +8220,9 @@ "dev": true }, "querystringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.0.tgz", - "integrity": "sha512-sluvZZ1YiTLD5jsqZcDmFyV2EwToyXZBfpoVOmktMmW+VEnhgakFHnasVph65fOjGPTWN0Nw3+XQaSeMayr0kg==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.1.tgz", + "integrity": "sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA==", "dev": true }, "randombytes": { @@ -8155,21 +8245,29 @@ } }, "range-parser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", - "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", "dev": true }, "raw-body": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz", - "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", "dev": true, "requires": { - "bytes": "3.0.0", - "http-errors": "1.6.3", - "iconv-lite": "0.4.23", + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", "unpipe": "1.0.0" + }, + "dependencies": { + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "dev": true + } } }, "raw-loader": { @@ -8357,9 +8455,9 @@ } }, "registry-auth-token": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.2.tgz", - "integrity": "sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.4.0.tgz", + "integrity": "sha512-4LM6Fw8eBQdwMYcES4yTnn2TqIasbXuwDx3um+QRs7S55aMKCBKBxvPXl2RiUjHwuJLTyYfxSpmfSAjQpcuP+A==", "dev": true, "requires": { "rc": "^1.1.6", @@ -8478,9 +8576,9 @@ "dev": true }, "resolve": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.0.tgz", - "integrity": "sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.11.0.tgz", + "integrity": "sha512-WL2pBDjqT6pGUNSUzMw00o4T7If+z4H2x3Gz893WoUQ5KW8Vr9txp00ykiP16VBaZF5+j/OcXJHZ9+PCvdiDKw==", "dev": true, "requires": { "path-parse": "^1.0.6" @@ -8530,9 +8628,9 @@ "dev": true }, "rfdc": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.1.2.tgz", - "integrity": "sha512-92ktAgvZhBzYTIK0Mja9uen5q5J3NRVMoDkJL2VMwq6SXjVCgqvQeVP2XAaUY6HT+XpQYeLSjb3UoitBryKmdA==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.1.4.tgz", + "integrity": "sha512-5C9HXdzK8EAqN7JDif30jqsBzavB7wLpaubisuQIGHWf2gUXSpzy6ArX/+Da8RjFpagWsCn+pIgxTMAmKw9Zug==", "dev": true }, "rimraf": { @@ -8565,15 +8663,15 @@ } }, "rollup-plugin-commonjs": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/rollup-plugin-commonjs/-/rollup-plugin-commonjs-9.2.1.tgz", - "integrity": "sha512-X0A/Cp/t+zbONFinBhiTZrfuUaVwRIp4xsbKq/2ohA2CDULa/7ONSJTelqxon+Vds2R2t2qJTqJQucKUC8GKkw==", + "version": "9.3.4", + "resolved": "https://registry.npmjs.org/rollup-plugin-commonjs/-/rollup-plugin-commonjs-9.3.4.tgz", + "integrity": "sha512-DTZOvRoiVIHHLFBCL4pFxOaJt8pagxsVldEXBOn6wl3/V21wVaj17HFfyzTsQUuou3sZL3lEJZVWKPFblJfI6w==", "dev": true, "requires": { - "estree-walker": "^0.5.2", - "magic-string": "^0.25.1", + "estree-walker": "^0.6.0", + "magic-string": "^0.25.2", "resolve": "^1.10.0", - "rollup-pluginutils": "^2.3.3" + "rollup-pluginutils": "^2.6.0" } }, "rollup-plugin-json": { @@ -8586,12 +8684,13 @@ } }, "rollup-plugin-node-resolve": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-4.0.1.tgz", - "integrity": "sha512-fSS7YDuCe0gYqKsr5OvxMloeZYUSgN43Ypi1WeRZzQcWtHgFayV5tUSPYpxuaioIIWaBXl6NrVk0T2/sKwueLg==", + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-4.2.4.tgz", + "integrity": "sha512-t/64I6l7fZ9BxqD3XlX4ZeO6+5RLKyfpwE2CiPNUKa+GocPlQhf/C208ou8y3AwtNsc6bjSk/8/6y/YAyxCIvw==", "dev": true, "requires": { - "builtin-modules": "^3.0.0", + "@types/resolve": "0.0.8", + "builtin-modules": "^3.1.0", "is-module": "^1.0.0", "resolve": "^1.10.0" } @@ -8607,21 +8706,13 @@ } }, "rollup-pluginutils": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.4.1.tgz", - "integrity": "sha512-wesMQ9/172IJDIW/lYWm0vW0LiKe5Ekjws481R7z9WTRtmO59cqyM/2uUlxvf6yzm/fElFmHUobeQOYz46dZJw==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.7.1.tgz", + "integrity": "sha512-3nRf3buQGR9qz/IsSzhZAJyoK663kzseps8itkYHr+Z7ESuaffEPfgRinxbCRA0pf0gzLqkNKkSb8aNVTq75NA==", "dev": true, "requires": { "estree-walker": "^0.6.0", "micromatch": "^3.1.10" - }, - "dependencies": { - "estree-walker": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.0.tgz", - "integrity": "sha512-peq1RfVAVzr3PU/jL31RaOjUKLoZJpObQWJJ+LgfcxDUifyLZ1RjPQZTl0pzj2uJ45b7A7XpyppXvxdEqzo4rw==", - "dev": true - } } }, "run-async": { @@ -8816,9 +8907,9 @@ } }, "send": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", - "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", "dev": true, "requires": { "debug": "2.6.9", @@ -8828,26 +8919,26 @@ "escape-html": "~1.0.3", "etag": "~1.8.1", "fresh": "0.5.2", - "http-errors": "~1.6.2", - "mime": "1.4.1", - "ms": "2.0.0", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", "on-finished": "~2.3.0", - "range-parser": "~1.2.0", - "statuses": "~1.4.0" + "range-parser": "~1.2.1", + "statuses": "~1.5.0" }, "dependencies": { - "mime": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", - "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==", + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", "dev": true } } }, "serialize-javascript": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.6.1.tgz", - "integrity": "sha512-A5MOagrPFga4YaKQSWHryl7AXvbQkEqpw4NNYMTNYUNV51bA8ABHgYFpqKx+YFFrw59xMV1qGH1R4AgoNIVgCw==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.7.0.tgz", + "integrity": "sha512-ke8UG8ulpFOxO8f8gRYabHQe/ZntKlcig2Mp+8+URDP1D8vJZ0KUt7LYo07q25Z/+JVSgpr/cui9PIp5H6/+nA==", "dev": true }, "serve-index": { @@ -8863,18 +8954,38 @@ "http-errors": "~1.6.2", "mime-types": "~2.1.17", "parseurl": "~1.3.2" + }, + "dependencies": { + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + } + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + } } }, "serve-static": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", - "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", + "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", "dev": true, "requires": { "encodeurl": "~1.0.2", "escape-html": "~1.0.3", - "parseurl": "~1.3.2", - "send": "0.16.2" + "parseurl": "~1.3.3", + "send": "0.17.1" } }, "set-blocking": { @@ -8919,9 +9030,9 @@ "dev": true }, "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", "dev": true }, "sha.js": { @@ -9163,6 +9274,12 @@ "to-array": "0.1.4" }, "dependencies": { + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "dev": true + }, "debug": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", @@ -9185,6 +9302,12 @@ "isarray": "2.0.1" }, "dependencies": { + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "dev": true + }, "debug": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", @@ -9253,9 +9376,9 @@ } }, "socks": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.2.3.tgz", - "integrity": "sha512-+2r83WaRT3PXYoO/1z+RDEBE7Z2f9YcdQnJ0K/ncXXbV5gJ6wYfNAebYFYiiUjM6E4JyXnPY8cimwyvFYHVUUA==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.3.2.tgz", + "integrity": "sha512-pCpjxQgOByDHLlNqlnh/mNSAxIUkyBBuwwhTcV+enZGbDaClPvHdvm6uvOwZfFJkam7cGhBNbb4JxiP8UZkRvQ==", "dev": true, "requires": { "ip": "^1.1.5", @@ -9263,13 +9386,13 @@ } }, "socks-proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-4.0.1.tgz", - "integrity": "sha512-Kezx6/VBguXOsEe5oU3lXYyKMi4+gva72TwJ7pQY5JfqUx2nMk7NXA6z/mpNqIlfQjWYVfeuNvQjexiTaTn6Nw==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-4.0.2.tgz", + "integrity": "sha512-NT6syHhI9LmuEMSK6Kd2V7gNv5KFZoLE7V5udWmn0de+3Mkj3UMA/AJPLyeNUVmElCurSHtUdM3ETpR3z770Wg==", "dev": true, "requires": { - "agent-base": "~4.2.0", - "socks": "~2.2.0" + "agent-base": "~4.2.1", + "socks": "~2.3.2" } }, "source-list-map": { @@ -9364,9 +9487,9 @@ } }, "spdx-license-ids": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.3.tgz", - "integrity": "sha512-uBIcIl3Ih6Phe3XHK1NqboJLdGfwr1UN3k6wSD1dZpmPsIkb8AGNbZYJ1fOBk834+Gxy8rpfDxrS6XLEMZMY2g==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.4.tgz", + "integrity": "sha512-7j8LYJLeY/Yb6ACbQ7F76qy5jHkp0U6jgBfJsk97bwWlVUnUWsAgpyaCvo17h0/RQGnQ036tVDomiwoI4pDkQA==", "dev": true }, "spdy": { @@ -9429,9 +9552,9 @@ "dev": true }, "readable-stream": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.2.0.tgz", - "integrity": "sha512-RV20kLjdmpZuTF1INEb9IA3L68Nmi+Ri7ppZqo78wj//Pn62fCoJyV9zalccNzDD/OuJpMG4f+pfMl8+L6QdGw==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.3.0.tgz", + "integrity": "sha512-EsI+s3k3XsW+fU8fQACLN59ky34AZ14LoeVZpYwmZvldCFo0r0gnelwF2TcMjLor/BTL5aDJVBMkss0dthToPw==", "dev": true, "requires": { "inherits": "^2.0.3", @@ -9442,9 +9565,9 @@ } }, "speed-measure-webpack-plugin": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/speed-measure-webpack-plugin/-/speed-measure-webpack-plugin-1.3.0.tgz", - "integrity": "sha512-b9Yd0TrzceMVYSbuamM1sFsGM1oVfyFTM22gOoyLhymNvBVApuYpkdFOgYkKJpN/KhTpcCYcTGHg7X+FJ33Vvw==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/speed-measure-webpack-plugin/-/speed-measure-webpack-plugin-1.3.1.tgz", + "integrity": "sha512-qVIkJvbtS9j/UeZumbdfz0vg+QfG/zxonAjzefZrqzkr7xOncLVXkeGbTpzd1gjCBM4PmVNkWlkeTVhgskAGSQ==", "dev": true, "requires": { "chalk": "^2.0.1" @@ -9522,9 +9645,9 @@ } }, "statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", "dev": true }, "stdout-stream": { @@ -9576,16 +9699,16 @@ "dev": true }, "streamroller": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-1.0.3.tgz", - "integrity": "sha512-P7z9NwP51EltdZ81otaGAN3ob+/F88USJE546joNq7bqRNTe6jc74fTBDyynxP4qpIfKlt/CesEYicuMzI0yJg==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-1.0.5.tgz", + "integrity": "sha512-iGVaMcyF5PcUY0cPbW3xFQUXnr9O4RZXNBBjhuLZgrjLO4XCLLGfx4T2sGqygSeylUjwgWRsnNbT9aV0Zb8AYw==", "dev": true, "requires": { - "async": "^2.6.1", + "async": "^2.6.2", "date-format": "^2.0.0", - "debug": "^3.1.0", - "fs-extra": "^7.0.0", - "lodash": "^4.17.10" + "debug": "^3.2.6", + "fs-extra": "^7.0.1", + "lodash": "^4.17.11" }, "dependencies": { "debug": { @@ -9740,19 +9863,19 @@ "dev": true }, "tapable": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.1.tgz", - "integrity": "sha512-9I2ydhj8Z9veORCw5PRm4u9uebCn0mcCa6scWoNcbZ6dAtoo2618u9UUzxgmsCOreJpqDDuv61LvwofW7hLcBA==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", "dev": true }, "tar": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", - "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.2.tgz", + "integrity": "sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA==", "dev": true, "requires": { "block-stream": "*", - "fstream": "^1.0.2", + "fstream": "^1.0.12", "inherits": "2" } }, @@ -9794,14 +9917,14 @@ } }, "terser": { - "version": "3.16.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-3.16.1.tgz", - "integrity": "sha512-JDJjgleBROeek2iBcSNzOHLKsB/MdDf+E/BOAJ0Tk9r7p9/fVobfv7LMJ/g/k3v9SXdmjZnIlFd5nfn/Rt0Xow==", + "version": "3.17.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-3.17.0.tgz", + "integrity": "sha512-/FQzzPJmCpjAH9Xvk2paiWrFq+5M6aVOf+2KRbwhByISDX/EujxsK+BAvrhb6H+2rtrLCHK9N01wO014vrIwVQ==", "dev": true, "requires": { - "commander": "~2.17.1", + "commander": "^2.19.0", "source-map": "~0.6.1", - "source-map-support": "~0.5.9" + "source-map-support": "~0.5.10" }, "dependencies": { "source-map": { @@ -9851,13 +9974,13 @@ } }, "find-cache-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.0.0.tgz", - "integrity": "sha512-LDUY6V1Xs5eFskUVYtIwatojt6+9xC9Chnlk/jYOOvn3FAFfSaWddxahDGyNHh0b2dMXa6YW2m0tk8TdVaXHlA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", "dev": true, "requires": { "commondir": "^1.0.1", - "make-dir": "^1.0.0", + "make-dir": "^2.0.0", "pkg-dir": "^3.0.0" } }, @@ -9889,6 +10012,16 @@ "yallist": "^3.0.2" } }, + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + } + }, "mississippi": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", @@ -9926,9 +10059,15 @@ } }, "p-try": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", - "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", "dev": true }, "pkg-dir": { @@ -10084,6 +10223,12 @@ "repeat-string": "^1.6.1" } }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "dev": true + }, "tough-cookie": { "version": "2.4.3", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", @@ -10130,9 +10275,9 @@ } }, "ts-node": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.0.2.tgz", - "integrity": "sha512-MosTrinKmaAcWgO8tqMjMJB22h+sp3Rd1i4fdoWY4mhBDekOwIAKI/bzmRi7IcbCmjquccYg2gcF6NBkLgr0Tw==", + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.0.3.tgz", + "integrity": "sha512-2qayBA4vdtVRuDo11DEFSsD/SFsBXQBRZZhbRGSIkmYmVkWjULn/GGMdG10KVqkaGndljfaTD8dKjWgcejO8YA==", "dev": true, "requires": { "arg": "^4.1.0", @@ -10143,9 +10288,9 @@ } }, "tsickle": { - "version": "0.34.3", - "resolved": "https://registry.npmjs.org/tsickle/-/tsickle-0.34.3.tgz", - "integrity": "sha512-mb1v3nsr6rYaZky22xj0d6qv4ogAR40Bc6r37jwWOg3bEIO/ZppEFZiEADs/NNVLcWTPgmNmPZgaX5CfAH6oXA==", + "version": "0.35.0", + "resolved": "https://registry.npmjs.org/tsickle/-/tsickle-0.35.0.tgz", + "integrity": "sha512-irsZLX4293YUl9TuwNC5Fy020eLSc4bC3LfKnxnx1oq5wmZD9zSP8qvNNTiwRmf2/rxH+58JINcTARDjuvn+oQ==", "dev": true, "requires": { "minimist": "^1.2.0", @@ -10218,13 +10363,13 @@ "dev": true }, "type-is": { - "version": "1.6.16", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", - "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", "dev": true, "requires": { "media-typer": "0.3.0", - "mime-types": "~2.1.18" + "mime-types": "~2.1.24" } }, "typedarray": { @@ -10240,12 +10385,12 @@ "dev": true }, "uglify-js": { - "version": "3.4.9", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.9.tgz", - "integrity": "sha512-8CJsbKOtEbnJsTyv6LE6m6ZKniqMiFWmm9sRbopbkGs3gMPPfd3Fh8iIA4Ykv5MgaTbqHr4BaoGLJLZNhsrW1Q==", + "version": "3.5.15", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.5.15.tgz", + "integrity": "sha512-fe7aYFotptIddkwcm6YuA0HmknBZ52ZzOsUxZEdhhkSsz7RfjHDX2QDxwKTiv4JQ5t5NhfmpgAK+J7LiDhKSqg==", "dev": true, "requires": { - "commander": "~2.17.1", + "commander": "~2.20.0", "source-map": "~0.6.1" }, "dependencies": { @@ -10384,9 +10529,9 @@ "dev": true }, "upath": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.0.tgz", - "integrity": "sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.2.tgz", + "integrity": "sha512-kXpym8nmDmlCBr7nKdIx8P2jNBa+pBpIUFRnKJ4dr8htyYGJFokkr2ZvERRtUN+9SY+JqXouNgUPtv6JQva/2Q==", "dev": true }, "update-notifier": { @@ -10441,12 +10586,12 @@ } }, "url-parse": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.4.tgz", - "integrity": "sha512-/92DTTorg4JjktLNLe6GPS2/RvAd/RGr6LuktmWSMLEOa6rjnlrFXNgSbSmkNvCoL2T028A0a1JaJLzRMlFoHg==", + "version": "1.4.7", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz", + "integrity": "sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==", "dev": true, "requires": { - "querystringify": "^2.0.0", + "querystringify": "^2.1.1", "requires-port": "^1.0.0" } }, @@ -10672,9 +10817,9 @@ }, "dependencies": { "mime": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.0.tgz", - "integrity": "sha512-ikBcWwyqXQSHKtciCcctu9YfPbFYZ4+gbHEmE0Q8jzcTYQg5dHCr3g2wwAZjPoJfQVXZq6KXAjpXOTf5/cjT7w==", + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.3.tgz", + "integrity": "sha512-QgrPRJfE+riq5TPZMcHZOtm8c6K/yYrMbKIoRfapfiGLxS8OTeIfRhUGW5LU7MlRa52KOAGCfUNruqLrIBvWZw==", "dev": true } } @@ -10847,9 +10992,9 @@ } }, "mime": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.0.tgz", - "integrity": "sha512-ikBcWwyqXQSHKtciCcctu9YfPbFYZ4+gbHEmE0Q8jzcTYQg5dHCr3g2wwAZjPoJfQVXZq6KXAjpXOTf5/cjT7w==", + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.3.tgz", + "integrity": "sha512-QgrPRJfE+riq5TPZMcHZOtm8c6K/yYrMbKIoRfapfiGLxS8OTeIfRhUGW5LU7MlRa52KOAGCfUNruqLrIBvWZw==", "dev": true }, "ms": { @@ -10888,9 +11033,9 @@ } }, "p-try": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", - "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true }, "pump": { @@ -11123,9 +11268,9 @@ "dev": true }, "worker-farm": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.6.0.tgz", - "integrity": "sha512-6w+3tHbM87WnSWnENBUvA2pxJPLhQUg5LKwUQHq3r+XPhIM+Gh2R5ycbwPCyuGbNg+lPgdcnQUhuC02kJCvffQ==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", + "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", "dev": true, "requires": { "errno": "~0.1.7" @@ -11297,9 +11442,9 @@ "dev": true }, "yn": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.0.0.tgz", - "integrity": "sha512-+Wo/p5VRfxUgBUGy2j/6KX2mj9AYJWOHuhMjMcbBFc3y54o9/4buK1ksBvuiK01C3kby8DH9lSmJdSxw+4G/2Q==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.0.tgz", + "integrity": "sha512-kKfnnYkbTfrAdd0xICNFw7Atm8nKpLcLv9AZGEt+kczL/WQVai4e2V6ZN8U/O+iI6WrNuJjNNOyu4zfhl9D3Hg==", "dev": true }, "zone.js": { diff --git a/package.json b/package.json index df04453..969671d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@handsontable/angular", - "version": "4.0.0", + "version": "5.0.0", "description": "Best Data Grid for Angular with Spreadsheet Look and Feel.", "author": "Handsoncode (https://handsoncode.net)", "license": "MIT", @@ -40,12 +40,14 @@ "ng": "ng", "start": "ng serve", "clean": "rimraf dist", + "prebuild": "npm run clean && node scripts/pre-build.js", "build": "ng build hot-table", - "test": "npm run clean && npm run lint && npm run build && ng test hot-table", + "postbuild": "node scripts/post-build.js", + "pretest": "npm run lint && npm run build", + "test": "ng test hot-table", "lint": "ng lint hot-table", "e2e": "ng e2e", - "pre-release": "node scripts/copy-utils.js && node scripts/pre-release.js", - "release": "npm run test && npm run pre-release && npm publish dist/hot-table --access public" + "release": "npm run test && npm publish dist/hot-table --access public" }, "peerDependencies": { "handsontable": "^7.0.0", @@ -73,7 +75,7 @@ "@angular/language-service": "~7.2.6", "@types/jasmine": "~3.3.9", "@types/jasminewd2": "~2.0.3", - "@types/node": "~11.9.5", + "@types/node": "^11.9.6", "codelyzer": "~4.5.0", "jasmine-core": "~3.3.0", "jasmine-spec-reporter": "~4.2.1", diff --git a/projects/hot-table/ng-package.json b/projects/hot-table/ng-package.json index ecf64f8..4f9aa3c 100644 --- a/projects/hot-table/ng-package.json +++ b/projects/hot-table/ng-package.json @@ -1,6 +1,7 @@ { "$schema": "../../node_modules/ng-packagr/ng-package.schema.json", "dest": "../../dist/hot-table", + "deleteDestPath": false, "lib": { "entryFile": "src/public_api.ts", "umdModuleIds": { diff --git a/projects/hot-table/package.json b/projects/hot-table/package.json deleted file mode 100644 index 2da6005..0000000 --- a/projects/hot-table/package.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "name": "@handsontable/angular" -} \ No newline at end of file diff --git a/projects/hot-table/src/lib/hot-column.component.spec.ts b/projects/hot-table/src/lib/hot-column.component.spec.ts index 4c3e2a1..51ab72d 100644 --- a/projects/hot-table/src/lib/hot-column.component.spec.ts +++ b/projects/hot-table/src/lib/hot-column.component.spec.ts @@ -1,8 +1,6 @@ import { Component } from '@angular/core'; -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; - +import { ComponentFixture, TestBed } from '@angular/core/testing'; import { HotTableModule, HotTableRegisterer } from '@handsontable/angular'; -import Handsontable from 'handsontable'; @Component({ selector: 'hot-test-component', diff --git a/projects/hot-table/src/lib/hot-settings-resolver.service.ts b/projects/hot-table/src/lib/hot-settings-resolver.service.ts index 7634600..d9f8415 100644 --- a/projects/hot-table/src/lib/hot-settings-resolver.service.ts +++ b/projects/hot-table/src/lib/hot-settings-resolver.service.ts @@ -29,7 +29,7 @@ export class HotSettingsResolver { } else if (typeof option === 'function' && isHook) { mergedSettings[key] = function(...args) { return component._ngZone.run(() => { - return option(this, ...args); + return option.apply(this, args); }); }; diff --git a/projects/hot-table/src/lib/hot-table-registerer.service.spec.ts b/projects/hot-table/src/lib/hot-table-registerer.service.spec.ts new file mode 100644 index 0000000..97267fd --- /dev/null +++ b/projects/hot-table/src/lib/hot-table-registerer.service.spec.ts @@ -0,0 +1,75 @@ + +import { Component } from '@angular/core'; +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import Handsontable from 'handsontable'; +import { HotTableModule, HotTableRegisterer } from '@handsontable/angular'; + +@Component({ + selector: 'hot-test-component', + template: '' +}) +class TestComponent { + public prop: object = {}; + id = 'hot'; + + constructor (private _registerer: HotTableRegisterer) { } + + getHotInstance(instance: string): Handsontable { + return this._registerer.getInstance(instance); + } +} + +describe('HotTableComponent', () => { + let fixture: ComponentFixture; + + beforeEach((() => { + TestBed.configureTestingModule({ + declarations: [ TestComponent ], + imports: [ HotTableModule.forRoot() ], + }); + })); + + afterEach(() => { + TestBed.resetTestingModule(); + }); + + it(`should register instance if component has hotId attribute`, async() => { + TestBed.overrideComponent(TestComponent, { + set: { + template: `` + } + }); + await TestBed.compileComponents().then(() => { + fixture = TestBed.createComponent(TestComponent); + const app = fixture.componentInstance; + + fixture.detectChanges(); + + expect(app.getHotInstance(app.id)).toBeTruthy(); + }); + }); + + it(`should register every hot-table component with added hotID attribute`, async() => { + TestBed.overrideComponent(TestComponent, { + set: { + template: ` + + + + ` + } + }); + await TestBed.compileComponents().then(() => { + fixture = TestBed.createComponent(TestComponent); + const app = fixture.componentInstance; + + app.prop['hotTableId'] = 'hot'; + + fixture.detectChanges(); + + expect(app.getHotInstance(app.prop['hotTableId'])).toBeDefined(); + expect(app.getHotInstance('hot1')).toBeDefined(); + expect(app.getHotInstance('hot2')).toBeDefined(); + }); + }); +}); diff --git a/projects/hot-table/src/lib/hot-table.component.spec.ts b/projects/hot-table/src/lib/hot-table.component.spec.ts index a17588b..99fa5ea 100644 --- a/projects/hot-table/src/lib/hot-table.component.spec.ts +++ b/projects/hot-table/src/lib/hot-table.component.spec.ts @@ -1,14 +1,13 @@ import { Component } from '@angular/core'; -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; - -import { HotTableModule, HotTableRegisterer } from '@handsontable/angular'; +import { ComponentFixture, TestBed } from '@angular/core/testing'; import Handsontable from 'handsontable'; +import { HotTableModule, HotTableRegisterer } from '@handsontable/angular'; @Component({ selector: 'hot-test-component', template: '' }) -export class TestComponent { +class TestComponent { public prop: object = {}; id = 'hot'; @@ -49,4718 +48,278 @@ describe('HotTableComponent', () => { }); }); - describe('inputs', () => { - it(`should add reference to 'hotRegisterer' by attribute`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - fixture.detectChanges(); - - expect(app.getHotInstance(app.id)).toBeTruthy(); - }); - }); - - it(`should register every hot-table component with added ID attribute`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: ` - - - - ` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['hotTableId'] = 'hot'; - - fixture.detectChanges(); - - expect(app.getHotInstance(app.prop['hotTableId'])).toBeDefined(); - expect(app.getHotInstance('hot1')).toBeDefined(); - expect(app.getHotInstance('hot2')).toBeDefined(); - }); - }); - - it(`should set 'settings' defined as bindings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - data: Handsontable.helper.createSpreadsheetData(5, 5) - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getDataAtCell(0, 0)).toBe('A1'); - }); - }); - - it(`should be possible to get custom option over to 'settings' defined as bindings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - customOption: 'test', - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['customOption']).toBe('test'); - }); + it(`should set 'settings' as a settings object`, async() => { + TestBed.overrideComponent(TestComponent, { + set: { + template: `` + } }); + await TestBed.compileComponents().then(() => { + fixture = TestBed.createComponent(TestComponent); + const app = fixture.componentInstance; - it(`should set activeHeaderClassName defined as bindings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['activeHeaderClassName'] = 'active'; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['activeHeaderClassName']).toBe('active'); + app.prop['settings'] = { + data: Handsontable.helper.createSpreadsheetData(5, 5) + }; - app.prop['activeHeaderClassName'] = 'active_header'; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['activeHeaderClassName']).toBe('active_header'); - }); + fixture.detectChanges(); + expect(app.getHotInstance(app.id).getDataAtCell(0, 0)).toBe('A1'); }); + }); - it(`should set allowEmpty defined as bindings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['allowEmpty'] = false; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['allowEmpty']).toBe(false); - - app.prop['allowEmpty'] = true; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['allowEmpty']).toBe(true); - }); + it(`should be possible to set custom option in settings object`, async() => { + TestBed.overrideComponent(TestComponent, { + set: { + template: `` + } }); + await TestBed.compileComponents().then(() => { + fixture = TestBed.createComponent(TestComponent); + const app = fixture.componentInstance; - it(`should set allowHtml defined as bindings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['allowHtml'] = false; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['allowHtml']).toBe(false); + app.prop['settings'] = { + customOption: 'test', + }; - app.prop['allowHtml'] = true; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['allowHtml']).toBe(true); - }); + fixture.detectChanges(); + expect(app.getHotInstance(app.id).getSettings()['customOption']).toBe('test'); }); + }); - it(`should set allowInsertColumn defined as bindings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['allowInsertColumn'] = false; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['allowInsertColumn']).toBe(false); - - app.prop['allowInsertColumn'] = true; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['allowInsertColumn']).toBe(true); - }); - }); + describe('options', () => { + it('should support all of the available options in Handsontable', async() => { + const options = Object.keys(Handsontable.DefaultSettings.prototype); + const unsupportedSettings = ['isEmptyRow', 'isEmptyCol']; + const template = ` unsupportedSettings.includes(option) ? + '' : + `[${option}]="prop.${option}"`).join(' ')}>`; - it(`should set allowInsertRow defined as bindings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; + TestBed.overrideComponent(TestComponent, { + set: { + template: template + } + }); + await TestBed.compileComponents().then(() => { + fixture = TestBed.createComponent(TestComponent); + const elem = fixture.nativeElement; - app.prop['allowInsertRow'] = false; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['allowInsertRow']).toBe(false); + fixture.detectChanges(); - app.prop['allowInsertRow'] = true; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['allowInsertRow']).toBe(true); - }); + expect(elem.querySelectorAll('.handsontable').length).toBeGreaterThan(0); + }); }); - it(`should set allowInvalid defined as bindings`, async() => { + it(`should overwrite settings' option by the attribute`, async() => { TestBed.overrideComponent(TestComponent, { set: { - template: `` + template: `` } }); await TestBed.compileComponents().then(() => { fixture = TestBed.createComponent(TestComponent); const app = fixture.componentInstance; - app.prop['allowInvalid'] = false; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['allowInvalid']).toBe(false); + app.prop['settings'] = { + activeHeaderClassName: 'classFromSettings', + }; + app.prop['activeHeaderClassName'] = 'classFromAttribute'; - app.prop['allowInvalid'] = true; fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['allowInvalid']).toBe(true); + expect(app.getHotInstance(app.id).getSettings()['activeHeaderClassName']).toBe('classFromAttribute'); }); }); + }); - it(`should set allowRemoveColumn defined as bindings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['allowRemoveColumn'] = false; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['allowRemoveColumn']).toBe(false); - - app.prop['allowRemoveColumn'] = true; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['allowRemoveColumn']).toBe(true); - }); - }); + describe('hooks', () => { + it('should support all of the available hooks in Handsontable', async() => { + const hooks = Handsontable.hooks.getRegistered(); + const unsupportedHooks = [ + 'afterContextMenuExecute', + 'afterDropdownMenuExecute', + 'afterIsMultipleSelection' + ]; + const template = ` unsupportedHooks.includes(hook) ? + '' : + `[${hook}]="prop.${hook}"`).join(' ')}>`; - it(`should set allowRemoveRow defined as bindings`, async() => { TestBed.overrideComponent(TestComponent, { set: { - template: `` + template: template } }); await TestBed.compileComponents().then(() => { fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; + const elem = fixture.nativeElement; - app.prop['allowRemoveRow'] = false; fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['allowRemoveRow']).toBe(false); - app.prop['allowRemoveRow'] = true; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['allowRemoveRow']).toBe(true); + expect(elem.querySelectorAll('.handsontable').length).toBeGreaterThan(0); }); }); - it(`should set autoColumnSize defined as bindings`, async() => { + it(`should use Handsontable as a hook's context, if is defined as a component's method`, async() => { TestBed.overrideComponent(TestComponent, { set: { - template: `` + template: `` } }); await TestBed.compileComponents().then(() => { fixture = TestBed.createComponent(TestComponent); const app = fixture.componentInstance; - app.prop['autoColumnSize'] = false; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['autoColumnSize']).toBe(false); + app.prop['afterInit'] = function() { + return this; + }; - app.prop['autoColumnSize'] = true; fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['autoColumnSize']).toBe(true); + const instance: Handsontable = app.getHotInstance(app.id).runHooks('afterInit'); - app.prop['autoColumnSize'] = { syncLimit: '40%' }; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['autoColumnSize']['syncLimit']).toBe('40%'); + expect(instance.getPlugin).toBeDefined(); + expect(instance.getPlugin('copyPaste')).toBeTruthy(); }); }); - it(`should set autoRowSize defined as bindings`, async() => { + it(`should allow overwrite Handsontable in a hook's context by bind`, async() => { TestBed.overrideComponent(TestComponent, { set: { - template: `` + template: `` } }); await TestBed.compileComponents().then(() => { fixture = TestBed.createComponent(TestComponent); const app = fixture.componentInstance; - app.prop['autoRowSize'] = false; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['autoRowSize']).toBe(false); + app.prop['specKey'] = 'testKey'; + app.prop['afterInit'] = function() { + return this; + }; - app.prop['autoRowSize'] = true; fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['autoRowSize']).toBe(true); + const instance: TestComponent = app.getHotInstance(app.id).runHooks('afterInit'); - app.prop['autoRowSize'] = { syncLimit: '40%' }; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['autoRowSize']['syncLimit']).toBe('40%'); + expect(instance.prop['specKey']).toBe('testKey'); }); }); - it(`should set autoWrapCol defined as bindings`, async() => { + it(`should be possible to get a reference to Handsontable instance`, async() => { TestBed.overrideComponent(TestComponent, { set: { - template: `` + template: `` } }); await TestBed.compileComponents().then(() => { fixture = TestBed.createComponent(TestComponent); const app = fixture.componentInstance; - app.prop['autoWrapCol'] = false; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['autoWrapCol']).toBe(false); - - app.prop['autoWrapCol'] = true; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['autoWrapCol']).toBe(true); - }); - }); - - it(`should set autoWrapRow defined as bindings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; + app.prop['specKey'] = 'testKey'; + app.prop['init'] = function() { + return [this, this.getHotInstance(app.id)]; + }; - app.prop['autoWrapRow'] = false; fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['autoWrapRow']).toBe(false); + const [instance, hot]: [TestComponent, Handsontable] = app.getHotInstance(app.id).runHooks('init'); - app.prop['autoWrapRow'] = true; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['autoWrapRow']).toBe(true); + expect(instance.prop['specKey']).toBe('testKey'); + expect(hot.getPlugin).toBeDefined(); + expect(hot.getPlugin('copyPaste')).toBeTruthy(); }); }); - it(`should set bindRowsWithHeaders defined as bindings`, async() => { + it(`should use Handsontable as a hook's context, if is defined as a function in settings object`, async() => { TestBed.overrideComponent(TestComponent, { set: { - template: `` + template: `` } }); await TestBed.compileComponents().then(() => { fixture = TestBed.createComponent(TestComponent); const app = fixture.componentInstance; - app.prop['bindRowsWithHeaders'] = false; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['bindRowsWithHeaders']).toBe(false); + app.prop['settings'] = { + afterInit() { + return this; + } + }; - app.prop['bindRowsWithHeaders'] = 'loose'; fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['bindRowsWithHeaders']).toBe('loose'); - }); - }); - - it(`should set cell defined as bindings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; + const instance: Handsontable = app.getHotInstance(app.id).runHooks('afterInit'); - app.prop['cell'] = [ - {row: 0, col: 0, readOnly: true} - ]; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getCellMeta(0, 0)['readOnly']).toBe(true); + expect(instance.getPlugin).toBeDefined(); + expect(instance.getPlugin('copyPaste')).toBeTruthy(); }); }); - it(`should set cells defined as bindings`, async() => { + it(`should use TestComponent as a hook's context, if is defined as a arrow-function in settings object`, async() => { TestBed.overrideComponent(TestComponent, { set: { - template: `` + template: `` } }); await TestBed.compileComponents().then(() => { fixture = TestBed.createComponent(TestComponent); const app = fixture.componentInstance; - app.prop['cells'] = function(row, column, prop) { - return { - className: `cell_${row}_${column}` - }; + app.prop['specKey'] = 'testKey'; + app.prop['settings'] = { + afterInit: (function() { + return () => { + return this; + }; + }).call(app), }; fixture.detectChanges(); - expect(app.getHotInstance(app.id).getCellMeta(2, 2)['className']).toBe('cell_2_2'); - }); - }); - - it(`should set checkedTemplate defined as bindings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; + const instance: TestComponent = app.getHotInstance(app.id).runHooks('afterInit'); - app.prop['checkedTemplate'] = false; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getCellMeta(2, 2)['checkedTemplate']).toBe(false); + expect(instance.prop['specKey']).toBe('testKey'); }); }); - it(`should set className defined as bindings`, async() => { + it(`should overwrite settings' hook by the attribute`, async() => { TestBed.overrideComponent(TestComponent, { set: { - template: `` + template: `` } }); await TestBed.compileComponents().then(() => { fixture = TestBed.createComponent(TestComponent); const app = fixture.componentInstance; - app.prop['className'] = 'test'; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getCellMeta(2, 2)['className']).toBe('test'); - }); - }); - - it(`should set colHeaders defined as bindings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; + app.prop['settings'] = { + afterAddChild: () => 'hookFromSettings' + }; - app.prop['headers'] = false; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['colHeaders']).toBe(false); + app.prop['afterAddChild'] = () => 'hookFromAttribute'; - app.prop['headers'] = ['Header']; fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['colHeaders'][0]).toBe('Header'); + expect(app.getHotInstance(app.id).runHooks('afterAddChild')).toBe('hookFromAttribute'); }); }); - it(`should set collapsibleColumns defined as bindings`, async() => { + it(`should allow to block 'before*' hooks`, async() => { TestBed.overrideComponent(TestComponent, { set: { - template: `` + template: `` } }); await TestBed.compileComponents().then(() => { fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['nestedHeaders'] = ['H', {label: 'I', colspan: 2}, {label: 'J', colspan: 2}, {label: 'K', colspan: 2}, 'M']; - - app.prop['collapsibleColumns'] = [ - {row: -2, col: 1, collapsible: true}, - {row: -2, col: 3, collapsible: true} - ]; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['collapsibleColumns']).toBeDefined(); - - app.prop['collapsibleColumns'] = false; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['collapsibleColumns']).toBe(false); - }); - }); - it(`should set columnHeaderHeight defined as bindings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); const app = fixture.componentInstance; + let afterChangeResult = false; - app.prop['columnHeaderHeight'] = 40; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['columnHeaderHeight']).toBe(40); - - app.prop['columnHeaderHeight'] = 10; + app.prop['beforeChange'] = function() { return false; }; + app.prop['afterChange'] = function(changes, source) { + // `afterChange` is called once during the initialisation + if (source === 'edit') { + afterChangeResult = true; + } + }; fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['columnHeaderHeight']).toBe(10); - }); - }); - - it(`should set columns defined as bindings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - app.prop['columns'] = [{}, {}, {}]; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['columns'].length).toBe(3); + app.getHotInstance(app.id).setDataAtCell(0, 0, 'test'); - app.prop['columns'] = [{}]; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['columns'].length).toBe(1); - }); - }); - it(`should set columnSorting defined as bindings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['columnSorting'] = true; - fixture.detectChanges(); - - expect(app.getHotInstance(app.id).getSettings()['columnSorting']).toBe(true); - - app.prop['columnSorting'] = false; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['columnSorting']).toBe(false); - }); - }); - - it(`should set columnSummary defined as bindings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['columnSummary'] = {attr: 1}; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['columnSummary']['attr']).toBe(1); - }); - }); - - it(`should set colWidths defined as bindings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['colWidths'] = 10; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['colWidths']).toBe(10); - - app.prop['colWidths'] = 40; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['colWidths']).toBe(40); - }); - }); - - it(`should set commentedCellClassName defined as bindings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['commentedCellClassName'] = 'test'; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['commentedCellClassName']).toBe('test'); - }); - }); - - it(`should set comments defined as bindings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['comments'] = true; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['comments']).toBe(true); - }); - }); - - it(`should set contextMenu defined as bindings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['contextMenu'] = true; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['contextMenu']).toBe(true); - }); - }); - - it(`should set copyable defined as bindings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['copyable'] = true; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['copyable']).toBe(true); - }); - }); - - it(`should set copyPaste defined as bindings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['copyPaste'] = false; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['copyPaste']).toBe(false); - }); - }); - - it(`should set correctFormat defined as bindings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['correctFormat'] = true; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['correctFormat']).toBe(true); - }); - }); - - it(`should set currentColClassName defined as bindings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['currentColClassName'] = 'test'; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['currentColClassName']).toBe('test'); - }); - }); - - it(`should set currentHeaderClassName defined as bindings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['currentHeaderClassName'] = 'test'; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['currentHeaderClassName']).toBe('test'); - }); - }); - - it(`should set currentRowClassName defined as bindings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['currentRowClassName'] = 'test'; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['currentRowClassName']).toBe('test'); - }); - }); - - it(`should set customBorders defined as bindings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['customBorders'] = true; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['customBorders']).toBe(true); - }); - }); - - it(`should set data defined as bindings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['data'] = [[1, 2, 3]]; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['data'][0][0]).toBe(1); - }); - }); - - it(`should set dataSchema defined as bindings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['dataSchema'] = {attr: null}; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['dataSchema']['attr']).toBe(null); - }); - }); - - it(`should set dateFormat defined as bindings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['dateFormat'] = 'hh:mm:ss'; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['dateFormat']).toBe('hh:mm:ss'); - }); - }); - - it(`should set debug defined as bindings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['debug'] = true; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['debug']).toBe(true); - }); - }); - - it(`should set defaultDate defined as bindings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['defaultDate'] = '1970-01-01'; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['defaultDate']).toBe('1970-01-01'); - }); - }); - - it(`should set disableVisualSelection defined as bindings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['disableVisualSelection'] = true; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['disableVisualSelection']).toBe(true); - }); - }); - - it(`should set dropdownMenu defined as bindings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['dropdownMenu'] = true; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['dropdownMenu']).toBe(true); - }); - }); - - it(`should set editor defined as bindings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['editor'] = false; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['editor']).toBe(false); - }); - }); - - it(`should set enterBeginsEditing defined as bindings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['enterBeginsEditing'] = false; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['enterBeginsEditing']).toBe(false); - }); - }); - - it(`should set enterMoves defined as bindings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['enterMoves'] = {attr: 1}; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['enterMoves']['attr']).toBe(1); - }); - }); - - it(`should set fillHandle defined as bindings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['fillHandle'] = false; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['fillHandle']).toBe(false); - }); - }); - - it(`should set filter defined as bindings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['filter'] = true; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['filter']).toBe(true); - }); - }); - - it(`should set filteringCaseSensitive defined as bindings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['filteringCaseSensitive'] = true; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['filteringCaseSensitive']).toBe(true); - }); - }); - - it(`should set filters defined as bindings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['filters'] = true; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['filters']).toBe(true); - }); - }); - - it(`should set fixedColumnsLeft defined as bindings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['fixedColumnsLeft'] = 10; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['fixedColumnsLeft']).toBe(10); - }); - }); - - it(`should set fixedRowsBottom defined as bindings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['fixedRowsBottom'] = 10; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['fixedRowsBottom']).toBe(10); - }); - }); - - it(`should set fixedRowsTop defined as bindings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['fixedRowsTop'] = 10; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['fixedRowsTop']).toBe(10); - }); - }); - - it(`should set formulas defined as bindings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['formulas'] = true; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['formulas']).toBe(true); - }); - }); - - it(`should set fragmentSelection defined as bindings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['fragmentSelection'] = true; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['fragmentSelection']).toBe(true); - }); - }); - - it(`should set ganttChart defined as bindings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['ganttChart'] = { attr: 1 }; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['ganttChart']['attr']).toBe(1); - }); - }); - - it(`should set headerTooltips defined as bindings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['headerTooltips'] = true; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['headerTooltips']).toBe(true); - }); - }); - - it(`should set height defined as bindings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['height'] = 100; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['height']).toBe(100); - }); - }); - - it(`should set hiddenColumns defined as bindings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['hiddenColumns'] = true; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['hiddenColumns']).toBe(true); - }); - }); - - it(`should set hiddenRows defined as bindings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['hiddenRows'] = true; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['hiddenRows']).toBe(true); - }); - }); - - it(`should set invalidCellClassName defined as bindings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['invalidCellClassName'] = 'invalid'; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['invalidCellClassName']).toBe('invalid'); - }); - }); - - it(`should set label defined as bindings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['label'] = { attr: 1 }; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['label']['attr']).toBe(1); - }); - }); - - it(`should set language defined as bindings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['language'] = 'en-US'; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['language']).toBe('en-US'); - }); - }); - - it(`should set manualColumnFreeze defined as bindings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['manualColumnFreeze'] = true; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['manualColumnFreeze']).toBe(true); - }); - }); - - it(`should set manualColumnMove defined as bindings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['manualColumnMove'] = true; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['manualColumnMove']).toBe(true); - }); - }); - - it(`should set manualColumnResize defined as bindings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['manualColumnResize'] = true; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['manualColumnResize']).toBe(true); - }); - }); - - it(`should set manualRowMove defined as bindings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['manualRowMove'] = true; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['manualRowMove']).toBe(true); - }); - }); - - it(`should set manualRowResize defined as bindings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['manualRowResize'] = true; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['manualRowResize']).toBe(true); - }); - }); - - it(`should set maxCols defined as bindings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['maxCols'] = 10; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['maxCols']).toBe(10); - }); - }); - - it(`should set maxRows defined as bindings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['maxRows'] = 10; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['maxRows']).toBe(10); - }); - }); - - it(`should set mergeCells defined as bindings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['mergeCells'] = true; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['mergeCells']).toBe(true); - }); - }); - - it(`should set minCols defined as bindings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['minCols'] = 10; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['minCols']).toBe(10); - }); - }); - - it(`should set minRows defined as bindings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['minRows'] = 10; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['minRows']).toBe(10); - }); - }); - - it(`should set minSpareCols defined as bindings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['minSpareCols'] = 10; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['minSpareCols']).toBe(10); - }); - }); - - it(`should set minSpareRows defined as bindings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['minSpareRows'] = 10; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['minSpareRows']).toBe(10); - }); - }); - - it(`should set nestedHeaders defined as bindings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['nestedHeaders'] = [['1', '2', '3']]; - fixture.detectChanges(); - - expect(app.getHotInstance(app.id).getSettings()['nestedHeaders'][0][1]).toBe('2'); - }); - }); - - it(`should set noWordWrapClassName defined as bindings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['noWordWrapClassName'] = 'test'; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['noWordWrapClassName']).toBe('test'); - }); - }); - - xit(`should set observeChanges defined as bindings`, async() => { - // `observeChanges` plugin is unstable - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['observeChanges'] = true; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['observeChanges']).toBe(true); - }); - }); - - it(`should set observeDOMVisibility defined as bindings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['observeDOMVisibility'] = false; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['observeDOMVisibility']).toBe(false); - }); - }); - - it(`should set outsideClickDeselects defined as bindings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['outsideClickDeselects'] = false; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['outsideClickDeselects']).toBe(false); - }); - }); - - it(`should set persistentState defined as bindings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['persistentState'] = true; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['persistentState']).toBe(true); - }); - }); - - it(`should set placeholder defined as bindings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['placeholder'] = 'cell placeholder'; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['placeholder']).toBe('cell placeholder'); - }); - }); - - it(`should set placeholderCellClassName defined as bindings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['placeholderCellClassName'] = 'test'; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['placeholderCellClassName']).toBe('test'); - }); - }); - - it(`should set preventOverflow defined as bindings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['preventOverflow'] = 'horizontal'; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['preventOverflow']).toBe('horizontal'); - - app.prop['preventOverflow'] = false; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['preventOverflow']).toBe(false); - }); - }); - - it(`should set readOnly defined as bindings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['readOnly'] = true; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['readOnly']).toBe(true); - }); - }); - - it(`should set readOnlyCellClassName defined as bindings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['readOnlyCellClassName'] = 'test'; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['readOnlyCellClassName']).toBe('test'); - }); - }); - - it(`should set renderAllRows defined as bindings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['renderAllRows'] = true; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['renderAllRows']).toBe(true); - }); - }); - - it(`should set renderer defined as bindings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['renderer'] = 'text'; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['renderer']).toBe('text'); - }); - }); - - it(`should set rowHeaders defined as bindings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['rowHeaders'] = true; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['rowHeaders']).toBe(true); - }); - }); - - it(`should set rowHeaderWidth defined as bindings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['rowHeaderWidth'] = 10; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['rowHeaderWidth']).toBe(10); - }); - }); - - it(`should set rowHeights defined as bindings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['rowHeights'] = 10; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['rowHeights']).toBe(10); - }); - }); - - it(`should set search defined as bindings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['search'] = true; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['search']).toBe(true); - }); - }); - - it(`should set selectionMode defined as bindings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['selectionMode']).toBe('multiple'); - - app.prop['selectionMode'] = 'single'; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['selectionMode']).toBe('single'); - - app.prop['selectionMode'] = 'range'; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['selectionMode']).toBe('range'); - }); - }); - - it(`should set selectOptions defined as bindings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['selectOptions'] = ['test']; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['selectOptions'][0]).toBe('test'); - }); - }); - - it(`should set skipColumnOnPaste defined as bindings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['skipColumnOnPaste'] = true; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['skipColumnOnPaste']).toBe(true); - }); - }); - - it(`should set sortByRelevance defined as bindings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['sortByRelevance'] = true; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['sortByRelevance']).toBe(true); - }); - }); - - it(`should set source defined as bindings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['source'] = [0, 1, 2]; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['source'][1]).toBe(1); - }); - }); - - it(`should set startCols defined as bindings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['startCols'] = 1; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['startCols']).toBe(1); - }); - }); - - it(`should set startRows defined as bindings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['startRows'] = 1; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['startRows']).toBe(1); - }); - }); - - it(`should set stretchH defined as bindings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['stretchH'] = 'all'; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['stretchH']).toBe('all'); - }); - }); - - it(`should set strict defined as bindings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['strict'] = true; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['strict']).toBe(true); - }); - }); - - it(`should set tableClassName defined as bindings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['tableClassName'] = 'test'; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['tableClassName']).toBe('test'); - }); - }); - - it(`should set tabMoves defined as bindings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['tabMoves'] = {attr: 1}; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['tabMoves']['attr']).toBe(1); - }); - }); - - it(`should set title defined as bindings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['title'] = 'test'; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['title']).toBe('test'); - }); - }); - - it(`should set trimDropdown defined as bindings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['trimDropdown'] = true; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['trimDropdown']).toBe(true); - }); - }); - - it(`should set trimRows defined as bindings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['trimRows'] = true; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['trimRows']).toBe(true); - }); - }); - - it(`should set trimWhitespace defined as bindings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['trimWhitespace'] = true; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['trimWhitespace']).toBe(true); - }); - }); - - it(`should set type defined as bindings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['type'] = 'date'; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['type']).toBe('date'); - }); - }); - - it(`should set uncheckedTemplate defined as bindings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['uncheckedTemplate'] = true; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['uncheckedTemplate']).toBe(true); - }); - }); - - it(`should set undo defined as bindings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['undo'] = true; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['undo']).toBe(true); - }); - }); - - it(`should set validator defined as bindings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['validator'] = 'test'; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['validator']).toBe('test'); - }); - }); - - it(`should set viewportColumnRenderingOffset defined as bindings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['viewportColumnRenderingOffset'] = 10; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['viewportColumnRenderingOffset']).toBe(10); - }); - }); - - it(`should set viewportRowRenderingOffset defined as bindings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['viewportRowRenderingOffset'] = 10; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['viewportRowRenderingOffset']).toBe(10); - }); - }); - - it(`should set visibleRows defined as bindings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['visibleRows'] = 10; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['visibleRows']).toBe(10); - }); - }); - - it(`should set width defined as bindings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['width'] = 10; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['width']).toBe(10); - }); - }); - - it(`should set wordWrap defined as bindings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['wordWrap'] = false; - fixture.detectChanges(); - expect(app.getHotInstance(app.id).getSettings()['wordWrap']).toBe(false); - }); - }); - }); - - describe('hooks', () => { - it(`should use Handsontable instance as a first argument, if is defined as a property in settings object`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - afterInit: (hot) => { - return hot; - } - }; - - fixture.detectChanges(); - - const constructorName = app.getHotInstance(app.id).constructor.name; - expect(app.getHotInstance(app.id).runHooks('afterInit').constructor.name).toBe(constructorName); - }); - }); - - it(`should run afterAddChild hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - afterAddChild: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('afterAddChild')).toBe('test'); - }); - }); - - it(`should run afterBeginEditing hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - afterBeginEditing: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('afterBeginEditing')).toBe('test'); - }); - }); - - it(`should run afterCellMetaReset hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - afterCellMetaReset: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('afterCellMetaReset')).toBe('test'); - }); - }); - - it(`should run afterChange hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - afterChange: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('afterChange')).toBe('test'); - }); - }); - - it(`should run afterChangesObserved hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - afterChangesObserved: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('afterChangesObserved')).toBe('test'); - }); - }); - - it(`should run afterColumnMove hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - afterColumnMove: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('afterColumnMove')).toBe('test'); - }); - }); - - it(`should run afterColumnResize hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - afterColumnResize: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('afterColumnResize')).toBe('test'); - }); - }); - - it(`should run afterColumnSort hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - afterColumnSort: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('afterColumnSort')).toBe('test'); - }); - }); - - it(`should run afterContextMenuDefaultOptions hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - contextMenu: true, - afterContextMenuDefaultOptions: function(items) { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('afterContextMenuDefaultOptions', {items: []})).toBe('test'); - }); - }); - - it(`should run afterContextMenuHide hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - afterContextMenuHide: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('afterContextMenuHide')).toBe('test'); - }); - }); - - it(`should run afterContextMenuShow hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - afterContextMenuShow: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('afterContextMenuShow')).toBe('test'); - }); - }); - - it(`should run afterCopy hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - afterCopy: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('afterCopy')).toBe('test'); - }); - }); - - it(`should run afterCopyLimit hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - afterCopyLimit: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('afterCopyLimit')).toBe('test'); - }); - }); - - it(`should run afterCreateCol hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - afterCreateCol: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('afterCreateCol')).toBe('test'); - }); - }); - - it(`should run afterCreateRow hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - afterCreateRow: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('afterCreateRow')).toBe('test'); - }); - }); - - it(`should run afterCut hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - afterCut: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('afterCut')).toBe('test'); - }); - }); - - it(`should run afterDeselect hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - afterDeselect: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('afterDeselect')).toBe('test'); - }); - }); - - it(`should run afterDestroy hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - afterDestroy: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('afterDestroy')).toBe('test'); - }); - }); - - it(`should run afterDetachChild hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - afterDetachChild: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('afterDetachChild')).toBe('test'); - }); - }); - - it(`should run afterDocumentKeyDown hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - afterDocumentKeyDown: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('afterDocumentKeyDown')).toBe('test'); - }); - }); - - it(`should run afterDropdownMenuDefaultOptions hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - afterDropdownMenuDefaultOptions: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('afterDropdownMenuDefaultOptions')).toBe('test'); - }); - }); - - it(`should run afterDropdownMenuHide hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - afterDropdownMenuHide: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('afterDropdownMenuHide')).toBe('test'); - }); - }); - - it(`should run afterDropdownMenuShow hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - afterDropdownMenuShow: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('afterDropdownMenuShow')).toBe('test'); - }); - }); - - it(`should run afterFilter hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - afterFilter: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('afterFilter')).toBe('test'); - }); - }); - - it(`should run afterGetCellMeta hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - afterGetCellMeta: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('afterGetCellMeta')).toBe('test'); - }); - }); - - it(`should run afterGetColHeader hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - colHeaders: true, - afterGetColHeader: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - - const elem = fixture.nativeElement; - const TH = elem.querySelector('th'); - - expect(app.getHotInstance(app.id).runHooks('afterGetColHeader', 0, TH)).toBe('test'); - }); - }); - - it(`should run afterGetColumnHeaderRenderers hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - let afterGetColumnHeaderRenderersCount = 0; - - app.prop['settings'] = { - afterGetColumnHeaderRenderers: () => { - afterGetColumnHeaderRenderersCount++; - } - }; - - fixture.detectChanges(); - expect(afterGetColumnHeaderRenderersCount).toBeGreaterThan(0); - }); - }); - - it(`should run afterGetRowHeader hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - afterGetRowHeader: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('afterGetRowHeader')).toBe('test'); - }); - }); - - it(`should run afterGetRowHeaderRenderers hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - afterGetRowHeaderRenderers: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('afterGetRowHeaderRenderers')).toBe('test'); - }); - }); - - it(`should run afterInit hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - afterInit: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('afterInit')).toBe('test'); - }); - }); - - it(`should run afterLoadData hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - afterLoadData: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('afterLoadData', {})).toBe('test'); - }); - }); - - it(`should run afterModifyTransformEnd hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - afterModifyTransformEnd: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('afterModifyTransformEnd')).toBe('test'); - }); - }); - - it(`should run afterModifyTransformStart hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - afterModifyTransformStart: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('afterModifyTransformStart')).toBe('test'); - }); - }); - - it(`should run afterMomentumScroll hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - afterMomentumScroll: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('afterMomentumScroll')).toBe('test'); - }); - }); - - it(`should run afterOnCellCornerDblClick hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - afterOnCellCornerDblClick: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - app.getHotInstance(app.id).selectCell(0, 0); - expect(app.getHotInstance(app.id).runHooks('afterOnCellCornerDblClick')).toBe('test'); - }); - }); - - it(`should run afterOnCellCornerMouseDown hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - afterOnCellCornerMouseDown: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('afterOnCellCornerMouseDown')).toBe('test'); - }); - }); - - it(`should run afterOnCellMouseDown hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - afterOnCellMouseDown: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('afterOnCellMouseDown')).toBe('test'); - }); - }); - - it(`should run afterOnCellMouseOver hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - afterOnCellMouseOver: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('afterOnCellMouseOver')).toBe('test'); - }); - }); - - it(`should run afterOnCellMouseOut hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - afterOnCellMouseOut: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('afterOnCellMouseOut')).toBe('test'); - }); - }); - - it(`should run afterPluginsInitialized hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - afterPluginsInitialized: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('afterPluginsInitialized')).toBe('test'); - }); - }); - - it(`should run afterRedo hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - afterRedo: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('afterRedo')).toBe('test'); - }); - }); - - it(`should run afterRemoveCol hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - afterRemoveCol: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('afterRemoveCol')).toBe('test'); - }); - }); - - it(`should run afterRemoveRow hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - afterRemoveRow: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('afterRemoveRow')).toBe('test'); - }); - }); - - it(`should run afterRender hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - afterRender: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('afterRender')).toBe('test'); - }); - }); - - it(`should run afterRenderer hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - afterRenderer: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('afterRenderer')).toBe('test'); - }); - }); - - it(`should run afterRowMove hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - afterRowMove: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('afterRowMove')).toBe('test'); - }); - }); - - it(`should run afterRowResize hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - afterRowResize: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('afterRowResize')).toBe('test'); - }); - }); - - it(`should run afterScrollHorizontally hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - afterScrollHorizontally: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('afterScrollHorizontally')).toBe('test'); - }); - }); - - it(`should run afterScrollVertically hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - afterScrollVertically: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('afterScrollVertically')).toBe('test'); - }); - }); - - it(`should run afterSelection hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - afterSelection: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('afterSelection')).toBe('test'); - }); - }); - - it(`should run afterSelectionByProp hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - afterSelectionByProp: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('afterSelectionByProp')).toBe('test'); - }); - }); - - it(`should run afterSelectionEnd hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - afterSelectionEnd: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('afterSelectionEnd')).toBe('test'); - }); - }); - - it(`should run afterSelectionEndByProp hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - afterSelectionEndByProp: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('afterSelectionEndByProp')).toBe('test'); - }); - }); - - it(`should run afterSetCellMeta hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - afterSetCellMeta: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('afterSetCellMeta')).toBe('test'); - }); - }); - - it(`should run afterSetDataAtCell hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - afterSetDataAtCell: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('afterSetDataAtCell')).toBe('test'); - }); - }); - - it(`should run afterSetDataAtRowProp hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - afterSetDataAtRowProp: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('afterSetDataAtRowProp')).toBe('test'); - }); - }); - - it(`should run afterTrimRow hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - afterTrimRow: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('afterTrimRow')).toBe('test'); - }); - }); - - it(`should run afterUndo hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - afterUndo: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('afterUndo')).toBe('test'); - }); - }); - - it(`should run afterUntrimRow hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - afterUntrimRow: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('afterUntrimRow')).toBe('test'); - }); - }); - - it(`should run afterUpdateSettings hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - afterUpdateSettings: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('afterUpdateSettings', {})).toBe('test'); - }); - }); - - it(`should run afterValidate hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - afterValidate: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('afterValidate')).toBe('test'); - }); - }); - - it(`should run afterViewportColumnCalculatorOverride hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - afterViewportColumnCalculatorOverride: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('afterViewportColumnCalculatorOverride')).toBe('test'); - }); - }); - - it(`should run afterViewportRowCalculatorOverride hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - afterViewportRowCalculatorOverride: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('afterViewportRowCalculatorOverride')).toBe('test'); - }); - }); - - it(`should run beforeAddChild hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - beforeAddChild: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('beforeAddChild')).toBe('test'); - }); - }); - - it(`should run beforeAutofill hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - beforeAutofill: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('beforeAutofill')).toBe('test'); - }); - }); - - it(`should run beforeAutofillInsidePopulate hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - beforeAutofillInsidePopulate: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('beforeAutofillInsidePopulate')).toBe('test'); - }); - }); - - it(`should run beforeCellAlignment hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - beforeCellAlignment: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('beforeCellAlignment')).toBe('test'); - }); - }); - - it(`should run beforeChange hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - beforeChange: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('beforeChange', [[0, 0, '', '']])).toBe('test'); - }); - }); - - it(`should run beforeChangeRender hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - beforeChangeRender: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('beforeChangeRender')).toBe('test'); - }); - }); - - it(`should run beforeColumnMove hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - beforeColumnMove: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('beforeColumnMove')).toBe('test'); - }); - }); - - it(`should run beforeColumnResize hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - beforeColumnResize: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('beforeColumnResize')).toBe('test'); - }); - }); - - it(`should run beforeColumnSort hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - beforeColumnSort: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('beforeColumnSort')).toBe('test'); - }); - }); - - it(`should run beforeContextMenuSetItems hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - beforeContextMenuSetItems: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('beforeContextMenuSetItems')).toBe('test'); - }); - }); - - it(`should run beforeCopy hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - beforeCopy: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('beforeCopy')).toBe('test'); - }); - }); - - it(`should run beforeCreateCol hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - beforeCreateCol: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('beforeCreateCol')).toBe('test'); - }); - }); - - it(`should run beforeCreateRow hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - beforeCreateRow: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('beforeCreateRow')).toBe('test'); - }); - }); - - it(`should run beforeCut hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - beforeCut: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('beforeCut')).toBe('test'); - }); - }); - - it(`should run beforeDetachChild hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - beforeDetachChild: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('beforeDetachChild')).toBe('test'); - }); - }); - - it(`should run beforeDrawBorders hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - beforeDrawBorders: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('beforeDrawBorders')).toBe('test'); - }); - }); - - it(`should run beforeDropdownMenuSetItems hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - beforeDropdownMenuSetItems: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('beforeDropdownMenuSetItems')).toBe('test'); - }); - }); - - it(`should run beforeFilter hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - beforeFilter: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('beforeFilter')).toBe('test'); - }); - }); - - it(`should run beforeGetCellMeta hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - beforeGetCellMeta: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('beforeGetCellMeta')).toBe('test'); - }); - }); - - it(`should run beforeInit hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - beforeInit: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('beforeInit')).toBe('test'); - }); - }); - - it(`should run beforeInitWalkontable hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - beforeInitWalkontable: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('beforeInitWalkontable')).toBe('test'); - }); - }); - - it(`should run beforeKeyDown hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - beforeKeyDown: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('beforeKeyDown')).toBe('test'); - }); - }); - - it(`should run beforeOnCellMouseDown hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - beforeOnCellMouseDown: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('beforeOnCellMouseDown')).toBe('test'); - }); - }); - - it(`should run beforeOnCellMouseOut hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - beforeOnCellMouseOut: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('beforeOnCellMouseOut')).toBe('test'); - }); - }); - - it(`should run beforeOnCellMouseOver hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - beforeOnCellMouseOver: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('beforeOnCellMouseOver')).toBe('test'); - }); - }); - - it(`should run beforePaste hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - beforePaste: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('beforePaste')).toBe('test'); - }); - }); - - it(`should run beforeRedo hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - beforeRedo: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('beforeRedo')).toBe('test'); - }); - }); - - it(`should run beforeRemoveCol hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - beforeRemoveCol: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('beforeRemoveCol')).toBe('test'); - }); - }); - - it(`should run beforeRemoveRow hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - beforeRemoveRow: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('beforeRemoveRow')).toBe('test'); - }); - }); - - it(`should run beforeRender hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - beforeRender: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('beforeRender')).toBe('test'); - }); - }); - - it(`should run beforeRenderer hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - beforeRenderer: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('beforeRenderer')).toBe('test'); - }); - }); - - it(`should run beforeRowMove hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - beforeRowMove: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('beforeRowMove')).toBe('test'); - }); - }); - - it(`should run beforeRowResize hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - beforeRowResize: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('beforeRowResize')).toBe('test'); - }); - }); - - it(`should run beforeSetRangeEnd hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - beforeSetRangeEnd: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('beforeSetRangeEnd')).toBe('test'); - }); - }); - - it(`should run beforeSetRangeStart hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - beforeSetRangeStart: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('beforeSetRangeStart')).toBe('test'); - }); - }); - - it(`should run beforeStretchingColumnWidth hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - beforeStretchingColumnWidth: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('beforeStretchingColumnWidth')).toBe('test'); - }); - }); - - it(`should run beforeTouchScroll hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - beforeTouchScroll: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('beforeTouchScroll')).toBe('test'); - }); - }); - - it(`should run beforeUndo hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - beforeUndo: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('beforeUndo')).toBe('test'); - }); - }); - - it(`should run beforeValidate hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - beforeValidate: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('beforeValidate')).toBe('test'); - }); - }); - - it(`should run beforeValueRender hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - beforeValueRender: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('beforeValueRender')).toBe('test'); - }); - }); - - it(`should run construct hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - construct: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('construct')).toBe('test'); - }); - }); - - it(`should run hiddenColumn hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - hiddenColumn: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('hiddenColumn')).toBe('test'); - }); - }); - - it(`should run hiddenRow hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - hiddenRow: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('hiddenRow')).toBe('test'); - }); - }); - - it(`should run init hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - init: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('init')).toBe('test'); - }); - }); - - it(`should run modifyAutofillRange hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - modifyAutofillRange: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('modifyAutofillRange')).toBe('test'); - }); - }); - - it(`should run modifyCol hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - modifyCol: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('modifyCol')).toBe('test'); - }); - }); - - it(`should run modifyColHeader hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - modifyColHeader: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('modifyColHeader')).toBe('test'); - }); - }); - - it(`should run modifyColumnHeaderHeight hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - modifyColumnHeaderHeight: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('modifyColumnHeaderHeight')).toBe('test'); - }); - }); - - it(`should run modifyColWidth hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - modifyColWidth: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('modifyColWidth')).toBe('test'); - }); - }); - - it(`should run modifyCopyableRange hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - modifyCopyableRange: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('modifyCopyableRange')).toBe('test'); - }); - }); - - it(`should run modifyData hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - modifyData: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('modifyData')).toBe('test'); - }); - }); - - it(`should run modifyRow hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - modifyRow: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('modifyRow')).toBe('test'); - }); - }); - - it(`should run modifyRowHeader hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - modifyRowHeader: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('modifyRowHeader')).toBe('test'); - }); - }); - - it(`should run modifyRowHeaderWidth hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - modifyRowHeaderWidth: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('modifyRowHeaderWidth')).toBe('test'); - }); - }); - - it(`should run modifyRowHeight hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - modifyRowHeight: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('modifyRowHeight')).toBe('test'); - }); - }); - - it(`should run modifyRowData hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - modifyRowData: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('modifyRowData')).toBe('test'); - }); - }); - - it(`should run modifyTransformEnd hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - modifyTransformEnd: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('modifyTransformEnd')).toBe('test'); - }); - }); - - it(`should run modifyTransformStart hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - modifyTransformStart: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('modifyTransformStart')).toBe('test'); - }); - }); - - it(`should run persistentStateLoad hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - persistentStateLoad: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('persistentStateLoad')).toBe('test'); - }); - }); - - it(`should run persistentStateReset hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - persistentStateReset: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('persistentStateReset')).toBe('test'); - }); - }); - - it(`should run persistentStateSave hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - persistentStateSave: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('persistentStateSave')).toBe('test'); - }); - }); - - it(`should run skipLengthCache hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - skipLengthCache: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('skipLengthCache')).toBe('test'); - }); - }); - - it(`should run unmodifyCol hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - unmodifyCol: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('unmodifyCol')).toBe('test'); - }); - }); - - it(`should run unmodifyRow hook defined in settings`, async() => { - TestBed.overrideComponent(TestComponent, { - set: { - template: `` - } - }); - await TestBed.compileComponents().then(() => { - fixture = TestBed.createComponent(TestComponent); - const app = fixture.componentInstance; - - app.prop['settings'] = { - unmodifyRow: () => { - return 'test'; - } - }; - - fixture.detectChanges(); - expect(app.getHotInstance(app.id).runHooks('unmodifyRow')).toBe('test'); + expect(afterChangeResult).toBe(false); }); }); }); diff --git a/projects/hot-table/src/lib/hot-table.component.ts b/projects/hot-table/src/lib/hot-table.component.ts index abf9c28..d5e1b37 100644 --- a/projects/hot-table/src/lib/hot-table.component.ts +++ b/projects/hot-table/src/lib/hot-table.component.ts @@ -41,14 +41,17 @@ export class HotTableComponent implements AfterContentInit, OnChanges, OnDestroy @Input() autoRowSize: Handsontable.GridSettings['autoRowSize']; @Input() autoWrapCol: Handsontable.GridSettings['autoWrapCol']; @Input() autoWrapRow: Handsontable.GridSettings['autoWrapRow']; + @Input() bindRowsWithHeaders: Handsontable.GridSettings['bindRowsWithHeaders']; @Input() cell: Handsontable.GridSettings['cell']; @Input() cells: Handsontable.GridSettings['cells']; @Input() checkedTemplate: Handsontable.GridSettings['checkedTemplate']; @Input() className: Handsontable.GridSettings['className']; @Input() colHeaders: Handsontable.GridSettings['colHeaders']; + @Input() collapsibleColumns: Handsontable.GridSettings['collapsibleColumns']; @Input() columnHeaderHeight: Handsontable.GridSettings['columnHeaderHeight']; @Input() columns: Handsontable.GridSettings['columns']; @Input() columnSorting: Handsontable.GridSettings['columnSorting']; + @Input() columnSummary: Handsontable.GridSettings['columnSummary']; @Input() colWidths: Handsontable.GridSettings['colWidths']; @Input() commentedCellClassName: Handsontable.GridSettings['commentedCellClassName']; @Input() comments: Handsontable.GridSettings['comments']; @@ -67,20 +70,28 @@ export class HotTableComponent implements AfterContentInit, OnChanges, OnDestroy @Input() defaultDate: Handsontable.GridSettings['defaultDate']; @Input() disableVisualSelection: Handsontable.GridSettings['disableVisualSelection']; @Input() dragToScroll: Handsontable.GridSettings['dragToScroll']; + @Input() dropdownMenu: Handsontable.GridSettings['dropdownMenu']; @Input() editor: Handsontable.GridSettings['editor']; @Input() enterBeginsEditing: Handsontable.GridSettings['enterBeginsEditing']; @Input() enterMoves: Handsontable.GridSettings['enterMoves']; @Input() fillHandle: Handsontable.GridSettings['fillHandle']; @Input() filter: Handsontable.GridSettings['filter']; @Input() filteringCaseSensitive: Handsontable.GridSettings['filteringCaseSensitive']; + @Input() filters: Handsontable.GridSettings['filters']; @Input() fixedColumnsLeft: Handsontable.GridSettings['fixedColumnsLeft']; @Input() fixedRowsBottom: Handsontable.GridSettings['fixedRowsBottom']; @Input() fixedRowsTop: Handsontable.GridSettings['fixedRowsTop']; + @Input() formulas: Handsontable.GridSettings['formulas']; @Input() fragmentSelection: Handsontable.GridSettings['fragmentSelection']; + @Input() ganttChart: Handsontable.GridSettings['ganttChart']; + @Input() headerTooltips: Handsontable.GridSettings['headerTooltips']; @Input() height: Handsontable.GridSettings['height']; + @Input() hiddenColumns: Handsontable.GridSettings['hiddenColumns']; + @Input() hiddenRows: Handsontable.GridSettings['hiddenRows']; @Input() invalidCellClassName: Handsontable.GridSettings['invalidCellClassName']; @Input() label: Handsontable.GridSettings['label']; @Input() language: Handsontable.GridSettings['language']; + @Input() licenseKey: Handsontable.GridSettings['licenseKey']; @Input() manualColumnFreeze: Handsontable.GridSettings['manualColumnFreeze']; @Input() manualColumnMove: Handsontable.GridSettings['manualColumnMove']; @Input() manualColumnResize: Handsontable.GridSettings['manualColumnResize']; @@ -93,6 +104,9 @@ export class HotTableComponent implements AfterContentInit, OnChanges, OnDestroy @Input() minRows: Handsontable.GridSettings['minRows']; @Input() minSpareCols: Handsontable.GridSettings['minSpareCols']; @Input() minSpareRows: Handsontable.GridSettings['minSpareRows']; + @Input() multiColumnSorting: Handsontable.GridSettings['multiColumnSorting']; + @Input() nestedHeaders: Handsontable.GridSettings['nestedHeaders']; + @Input() nestedRows: Handsontable.GridSettings['nestedRows']; @Input() noWordWrapClassName: Handsontable.GridSettings['noWordWrapClassName']; @Input() numericFormat: Handsontable.GridSettings['numericFormat']; @Input() observeChanges: Handsontable.GridSettings['observeChanges']; @@ -113,6 +127,7 @@ export class HotTableComponent implements AfterContentInit, OnChanges, OnDestroy @Input() selectionMode: Handsontable.GridSettings['selectionMode']; @Input() selectOptions: Handsontable.GridSettings['selectOptions']; @Input() skipColumnOnPaste: Handsontable.GridSettings['skipColumnOnPaste']; + @Input() skipRowOnPaste: any; @Input() sortByRelevance: Handsontable.GridSettings['sortByRelevance']; @Input() source: Handsontable.GridSettings['source']; @Input() startCols: Handsontable.GridSettings['startCols']; @@ -123,6 +138,7 @@ export class HotTableComponent implements AfterContentInit, OnChanges, OnDestroy @Input() tabMoves: Handsontable.GridSettings['tabMoves']; @Input() title: Handsontable.GridSettings['title']; @Input() trimDropdown: Handsontable.GridSettings['trimDropdown']; + @Input() trimRows: Handsontable.GridSettings['nestedRows']; @Input() trimWhitespace: Handsontable.GridSettings['trimWhitespace']; @Input() type: Handsontable.GridSettings['type']; @Input() uncheckedTemplate: Handsontable.GridSettings['uncheckedTemplate']; @@ -133,7 +149,9 @@ export class HotTableComponent implements AfterContentInit, OnChanges, OnDestroy @Input() visibleRows: Handsontable.GridSettings['visibleRows']; @Input() width: Handsontable.GridSettings['width']; @Input() wordWrap: Handsontable.GridSettings['wordWrap']; + // handsontable hooks + @Input() afterAddChild: Handsontable.GridSettings['afterAddChild']; @Input() afterBeginEditing: Handsontable.GridSettings['afterBeginEditing']; @Input() afterCellMetaReset: Handsontable.GridSettings['afterCellMetaReset']; @Input() afterChange: Handsontable.GridSettings['afterChange']; @@ -151,13 +169,20 @@ export class HotTableComponent implements AfterContentInit, OnChanges, OnDestroy @Input() afterCut: Handsontable.GridSettings['afterCut']; @Input() afterDeselect: Handsontable.GridSettings['afterDeselect']; @Input() afterDestroy: Handsontable.GridSettings['afterDestroy']; + @Input() afterDetachChild: Handsontable.GridSettings['afterDetachChild']; @Input() afterDocumentKeyDown: Handsontable.GridSettings['afterDocumentKeyDown']; @Input() afterDrawSelection: Handsontable.GridSettings['afterDrawSelection']; + @Input() afterDropdownMenuDefaultOptions: Handsontable.GridSettings['afterDropdownMenuDefaultOptions']; + @Input() afterDropdownMenuHide: Handsontable.GridSettings['afterDropdownMenuHide']; + @Input() afterDropdownMenuShow: Handsontable.GridSettings['afterDropdownMenuShow']; + @Input() afterFilter: Handsontable.GridSettings['afterFilter']; @Input() afterGetCellMeta: Handsontable.GridSettings['afterGetCellMeta']; @Input() afterGetColHeader: Handsontable.GridSettings['afterGetColHeader']; @Input() afterGetColumnHeaderRenderers: Handsontable.GridSettings['afterGetColumnHeaderRenderers']; @Input() afterGetRowHeader: Handsontable.GridSettings['afterGetRowHeader']; @Input() afterGetRowHeaderRenderers: Handsontable.GridSettings['afterGetRowHeaderRenderers']; + @Input() afterHideColumns: Handsontable.GridSettings['afterHideColumns']; + @Input() afterHideRows: Handsontable.GridSettings['afterHideRows']; @Input() afterInit: Handsontable.GridSettings['afterInit']; @Input() afterLanguageChange: Handsontable.GridSettings['afterLanguageChange']; @Input() afterListen: Handsontable.GridSettings['afterListen']; @@ -176,6 +201,7 @@ export class HotTableComponent implements AfterContentInit, OnChanges, OnDestroy @Input() afterPaste: Handsontable.GridSettings['afterPaste']; @Input() afterPluginsInitialized: Handsontable.GridSettings['afterPluginsInitialized']; @Input() afterRedo: Handsontable.GridSettings['afterRedo']; + @Input() afterRefreshDimensions: Handsontable.GridSettings['afterRefreshDimensions']; @Input() afterRemoveCellMeta: Handsontable.GridSettings['afterRemoveCellMeta']; @Input() afterRemoveCol: Handsontable.GridSettings['afterRemoveCol']; @Input() afterRemoveRow: Handsontable.GridSettings['afterRemoveRow']; @@ -192,13 +218,18 @@ export class HotTableComponent implements AfterContentInit, OnChanges, OnDestroy @Input() afterSetCellMeta: Handsontable.GridSettings['afterSetCellMeta']; @Input() afterSetDataAtCell: Handsontable.GridSettings['afterSetDataAtCell']; @Input() afterSetDataAtRowProp: Handsontable.GridSettings['afterSetDataAtRowProp']; + @Input() afterTrimRow: Handsontable.GridSettings['afterTrimRow']; @Input() afterUndo: Handsontable.GridSettings['afterUndo']; + @Input() afterUnhideColumns: Handsontable.GridSettings['afterUnhideColumns']; + @Input() afterUnhideRows: Handsontable.GridSettings['afterUnhideRows']; @Input() afterUnlisten: Handsontable.GridSettings['afterUnlisten']; @Input() afterUnmergeCells: Handsontable.GridSettings['afterUnmergeCells']; + @Input() afterUntrimRow: Handsontable.GridSettings['afterUntrimRow']; @Input() afterUpdateSettings: Handsontable.GridSettings['afterUpdateSettings']; @Input() afterValidate: Handsontable.GridSettings['afterValidate']; @Input() afterViewportColumnCalculatorOverride: Handsontable.GridSettings['afterViewportColumnCalculatorOverride']; @Input() afterViewportRowCalculatorOverride: Handsontable.GridSettings['afterViewportRowCalculatorOverride']; + @Input() beforeAddChild: Handsontable.GridSettings['beforeAddChild']; @Input() beforeAutofill: Handsontable.GridSettings['beforeAutofill']; @Input() beforeAutofillInsidePopulate: Handsontable.GridSettings['beforeAutofillInsidePopulate']; @Input() beforeCellAlignment: Handsontable.GridSettings['beforeCellAlignment']; @@ -213,8 +244,14 @@ export class HotTableComponent implements AfterContentInit, OnChanges, OnDestroy @Input() beforeCreateCol: Handsontable.GridSettings['beforeCreateCol']; @Input() beforeCreateRow: Handsontable.GridSettings['beforeCreateRow']; @Input() beforeCut: Handsontable.GridSettings['beforeCut']; + @Input() beforeDetachChild: Handsontable.GridSettings['beforeDetachChild']; @Input() beforeDrawBorders: Handsontable.GridSettings['beforeDrawBorders']; + @Input() beforeDropdownMenuSetItems: Handsontable.GridSettings['beforeDropdownMenuSetItems']; + @Input() beforeDropdownMenuShow: Handsontable.GridSettings['beforeDropdownMenuShow']; + @Input() beforeFilter: Handsontable.GridSettings['beforeFilter']; @Input() beforeGetCellMeta: Handsontable.GridSettings['beforeGetCellMeta']; + @Input() beforeHideColumns: Handsontable.GridSettings['beforeHideColumns']; + @Input() beforeHideRows: Handsontable.GridSettings['beforeHideRows']; @Input() beforeInit: Handsontable.GridSettings['beforeInit']; @Input() beforeInitWalkontable: Handsontable.GridSettings['beforeInitWalkontable']; @Input() beforeKeyDown: Handsontable.GridSettings['beforeKeyDown']; @@ -227,6 +264,7 @@ export class HotTableComponent implements AfterContentInit, OnChanges, OnDestroy @Input() beforeOnCellMouseUp: Handsontable.GridSettings['beforeOnCellMouseUp']; @Input() beforePaste: Handsontable.GridSettings['beforePaste']; @Input() beforeRedo: Handsontable.GridSettings['beforeRedo']; + @Input() beforeRefreshDimensions: Handsontable.GridSettings['beforeRefreshDimensions']; @Input() beforeRemoveCellClassNames: Handsontable.GridSettings['beforeRemoveCellClassNames']; @Input() beforeRemoveCellMeta: Handsontable.GridSettings['beforeRemoveCellMeta']; @Input() beforeRemoveCol: Handsontable.GridSettings['beforeRemoveCol']; @@ -240,11 +278,17 @@ export class HotTableComponent implements AfterContentInit, OnChanges, OnDestroy @Input() beforeSetRangeStartOnly: Handsontable.GridSettings['beforeSetRangeStartOnly']; @Input() beforeStretchingColumnWidth: Handsontable.GridSettings['beforeStretchingColumnWidth']; @Input() beforeTouchScroll: Handsontable.GridSettings['beforeTouchScroll']; + @Input() beforeTrimRow: Handsontable.GridSettings['beforeTrimRow']; @Input() beforeUndo: Handsontable.GridSettings['beforeUndo']; + @Input() beforeUnhideColumns: Handsontable.GridSettings['beforeUnhideColumns']; + @Input() beforeUnhideRows: Handsontable.GridSettings['beforeUnhideRows']; @Input() beforeUnmergeCells: Handsontable.GridSettings['beforeUnmergeCells']; + @Input() beforeUntrimRow: Handsontable.GridSettings['beforeUntrimRow']; @Input() beforeValidate: Handsontable.GridSettings['beforeValidate']; @Input() beforeValueRender: Handsontable.GridSettings['beforeValueRender']; @Input() construct: Handsontable.GridSettings['construct']; + @Input() hiddenColumn: Handsontable.GridSettings['hiddenColumn']; + @Input() hiddenRow: Handsontable.GridSettings['hiddenRow']; @Input() init: Handsontable.GridSettings['init']; @Input() modifyAutofillRange: Handsontable.GridSettings['modifyAutofillRange']; @Input() modifyCol: Handsontable.GridSettings['modifyCol']; @@ -259,7 +303,6 @@ export class HotTableComponent implements AfterContentInit, OnChanges, OnDestroy @Input() modifyRowHeader: Handsontable.GridSettings['modifyRowHeader']; @Input() modifyRowHeaderWidth: Handsontable.GridSettings['modifyRowHeaderWidth']; @Input() modifyRowHeight: Handsontable.GridSettings['modifyRowHeight']; - @Input() modifyRowSourceData: Handsontable.GridSettings['modifyRowSourceData']; @Input() modifyTransformEnd: Handsontable.GridSettings['modifyTransformEnd']; @Input() modifyTransformStart: Handsontable.GridSettings['modifyTransformStart']; @Input() persistentStateLoad: Handsontable.GridSettings['persistentStateLoad']; @@ -268,38 +311,6 @@ export class HotTableComponent implements AfterContentInit, OnChanges, OnDestroy @Input() skipLengthCache: Handsontable.GridSettings['skipLengthCache']; @Input() unmodifyCol: Handsontable.GridSettings['unmodifyCol']; @Input() unmodifyRow: Handsontable.GridSettings['unmodifyRow']; - // handsontable-pro options - @Input() bindRowsWithHeaders: Handsontable.GridSettings['bindRowsWithHeaders']; - @Input() collapsibleColumns: Handsontable.GridSettings['collapsibleColumns']; - @Input() columnSummary: Handsontable.GridSettings['columnSummary']; - @Input() dropdownMenu: Handsontable.GridSettings['dropdownMenu']; - @Input() filters: Handsontable.GridSettings['filters']; - @Input() formulas: Handsontable.GridSettings['formulas']; - @Input() ganttChart: Handsontable.GridSettings['ganttChart']; - @Input() headerTooltips: Handsontable.GridSettings['headerTooltips']; - @Input() hiddenColumns: Handsontable.GridSettings['hiddenColumns']; - @Input() hiddenRows: Handsontable.GridSettings['hiddenRows']; - @Input() licenseKey: Handsontable.GridSettings['licenseKey']; - @Input() multiColumnSorting: Handsontable.GridSettings['multiColumnSorting']; - @Input() nestedHeaders: Handsontable.GridSettings['nestedHeaders']; - @Input() nestedRows: Handsontable.GridSettings['nestedRows']; - @Input() trimRows: Handsontable.GridSettings['nestedRows']; - // handsontable-pro hooks - @Input() afterAddChild: Handsontable.GridSettings['afterAddChild']; - @Input() afterDetachChild: Handsontable.GridSettings['afterDetachChild']; - @Input() afterDropdownMenuDefaultOptions: Handsontable.GridSettings['afterDropdownMenuDefaultOptions']; - @Input() afterDropdownMenuHide: Handsontable.GridSettings['afterDropdownMenuHide']; - @Input() afterDropdownMenuShow: Handsontable.GridSettings['afterDropdownMenuShow']; - @Input() afterFilter: Handsontable.GridSettings['afterFilter']; - @Input() afterTrimRow: Handsontable.GridSettings['afterTrimRow']; - @Input() afterUntrimRow: Handsontable.GridSettings['afterUntrimRow']; - @Input() beforeAddChild: Handsontable.GridSettings['beforeAddChild']; - @Input() beforeDetachChild: Handsontable.GridSettings['beforeDetachChild']; - @Input() beforeDropdownMenuSetItems: Handsontable.GridSettings['beforeDropdownMenuSetItems']; - @Input() beforeDropdownMenuShow: Handsontable.GridSettings['beforeDropdownMenuShow']; - @Input() beforeFilter: Handsontable.GridSettings['beforeFilter']; - @Input() hiddenColumn: Handsontable.GridSettings['hiddenColumn']; - @Input() hiddenRow: Handsontable.GridSettings['hiddenRow']; constructor( private _ngZone: NgZone, @@ -321,12 +332,14 @@ export class HotTableComponent implements AfterContentInit, OnChanges, OnDestroy } this._ngZone.runOutsideAngular(() => { - this.hotInstance = new Handsontable(this.container.nativeElement, options); - }); + this.hotInstance = new Handsontable.Core(this.container.nativeElement, options); - if (this.hotId) { - this._hotTableRegisterer.registerInstance(this.hotId, this.hotInstance); - } + if (this.hotId) { + this._hotTableRegisterer.registerInstance(this.hotId, this.hotInstance); + } + // @ts-ignore + this.hotInstance.init(); + }); } ngOnChanges(changes: SimpleChanges): void { diff --git a/projects/hot-table/src/lib/hot-table.module.spec.ts b/projects/hot-table/src/lib/hot-table.module.spec.ts new file mode 100644 index 0000000..9835bb2 --- /dev/null +++ b/projects/hot-table/src/lib/hot-table.module.spec.ts @@ -0,0 +1,10 @@ +import { HotTableModule } from '@handsontable/angular'; +import { version } from '../../package.json'; + + +describe('HotTableModule', () => { + it(`should expose information about its version`, () => { + expect(HotTableModule.version).toBeDefined(); + expect(HotTableModule.version).toBe(version); + }); +}); diff --git a/projects/hot-table/src/lib/hot-table.module.ts b/projects/hot-table/src/lib/hot-table.module.ts index c0893ec..b63163e 100644 --- a/projects/hot-table/src/lib/hot-table.module.ts +++ b/projects/hot-table/src/lib/hot-table.module.ts @@ -3,6 +3,16 @@ import { HotTableComponent } from './hot-table.component'; import { HotColumnComponent } from './hot-column.component'; import { HotTableRegisterer } from './hot-table-registerer.service'; +/** + * Angular prevents use static public getters under NgModule decorator. + * Moreover, ngc doesn't allow importing `Version` from external file. + */ +class Version { + public static get version(): string { + return '0.0.0-VERSION'; + } +} + @NgModule({ declarations: [ HotTableComponent, @@ -13,7 +23,7 @@ import { HotTableRegisterer } from './hot-table-registerer.service'; HotColumnComponent, ] }) -export class HotTableModule { +export class HotTableModule extends Version { public static forRoot(): ModuleWithProviders { return { ngModule: HotTableModule, diff --git a/projects/hot-table/tsconfig.spec.json b/projects/hot-table/tsconfig.spec.json index 16da33d..fc3e466 100644 --- a/projects/hot-table/tsconfig.spec.json +++ b/projects/hot-table/tsconfig.spec.json @@ -1,6 +1,7 @@ { "extends": "../../tsconfig.json", "compilerOptions": { + "resolveJsonModule": true, "outDir": "../../out-tsc/spec", "types": [ "jasmine", diff --git a/scripts/copy-utils.js b/scripts/copy-utils.js deleted file mode 100644 index bad81b8..0000000 --- a/scripts/copy-utils.js +++ /dev/null @@ -1,11 +0,0 @@ -const fse = require('fs-extra') -const path = require('path'); - -const LICENSE = 'LICENSE'; -const CONTRIBUTING = 'CONTRIBUTING.md'; -const README = 'README.md'; -const TARGET_PATH = './dist/hot-table'; - -fse.copySync(path.resolve(`./${LICENSE}`), path.resolve(`${TARGET_PATH}/${LICENSE}`), { overwrite: true }); -fse.copySync(path.resolve(`./${CONTRIBUTING}`), path.resolve(`${TARGET_PATH}/${CONTRIBUTING}`), { overwrite: true }); -fse.copySync(path.resolve(`./${README}`), path.resolve(`${TARGET_PATH}/${README}`), { overwrite: true }); diff --git a/scripts/post-build.js b/scripts/post-build.js new file mode 100644 index 0000000..b4d2752 --- /dev/null +++ b/scripts/post-build.js @@ -0,0 +1,29 @@ +const fse = require('fs-extra') +const path = require('path'); + +const DIST_PATH = './dist/hot-table'; + +const PACKAGE_PATH = path.resolve(`${DIST_PATH}/package.json`); +const PACKAGE = fse.readJsonSync(PACKAGE_PATH, { encoding: 'utf-8' }); + +// workaround for https://github.com/ng-packagr/ng-packagr/issues/1159 +PACKAGE.optionalDependencies = PACKAGE.dependencies; +delete PACKAGE.dependencies; + +fse.writeJsonSync(PACKAGE_PATH, PACKAGE); + +const UMD_MIN_JS_PATH = path.resolve(`${DIST_PATH}/bundles/handsontable-angular.umd.min.js`); +const UMD_JS_PATH = path.resolve(`${DIST_PATH}/bundles/handsontable-angular.umd.js`); +let licenseBody = fse.readFileSync(path.resolve('./LICENSE'), { encoding: 'utf-8' }); +licenseBody += `\nVersion: ${PACKAGE.version} (built at ${new Date().toString()})`; +const licenseBanner = `/*!\n${licenseBody.replace(/^/gm, ' * ')}\n */\n`; +const minUMDWithLicense = `${licenseBanner}${fse.readFileSync(UMD_MIN_JS_PATH, { encoding: 'utf-8' })}`; +const UMDWithLicense = `${licenseBanner}${fse.readFileSync(UMD_JS_PATH, { encoding: 'utf-8' })}`; + +fse.writeFileSync(UMD_MIN_JS_PATH, minUMDWithLicense, { encoding: 'utf-8' }); +fse.writeFileSync(UMD_JS_PATH, UMDWithLicense, { encoding: 'utf-8' }); + +const SRC_MODULE = path.resolve(`./projects/hot-table/src/lib/hot-table.module.ts`); +const MODULE_BODY = fse.readFileSync(SRC_MODULE, { encoding: 'utf-8' }); + +fse.writeFileSync(SRC_MODULE, `${MODULE_BODY.replace(`${PACKAGE.version}';`, "0.0.0-VERSION';")}`, { encoding: 'utf-8' }); diff --git a/scripts/pre-build.js b/scripts/pre-build.js new file mode 100644 index 0000000..9768193 --- /dev/null +++ b/scripts/pre-build.js @@ -0,0 +1,25 @@ +const fse = require('fs-extra') +const path = require('path'); + +const LICENSE = 'LICENSE'; +const CONTRIBUTING = 'CONTRIBUTING.md'; +const README = 'README.md'; +const PACKAGE = 'package.json'; + +const TARGET_PATH = './dist/hot-table'; + +fse.copySync(path.resolve(`./${LICENSE}`), path.resolve(`${TARGET_PATH}/${LICENSE}`), { overwrite: true }); +fse.copySync(path.resolve(`./${CONTRIBUTING}`), path.resolve(`${TARGET_PATH}/${CONTRIBUTING}`), { overwrite: true }); +fse.copySync(path.resolve(`./${README}`), path.resolve(`${TARGET_PATH}/${README}`), { overwrite: true }); + +const PACKAGE_BODY = fse.readJsonSync(path.resolve(`./${PACKAGE}`), { encoding: 'utf-8' }); + +delete PACKAGE_BODY.dependencies; +delete PACKAGE_BODY.devDependencies; + +fse.writeJsonSync(path.resolve(`./projects/hot-table/${PACKAGE}`), PACKAGE_BODY); + +const SRC_MODULE = path.resolve(`./projects/hot-table/src/lib/hot-table.module.ts`); +const MODULE_BODY = fse.readFileSync(SRC_MODULE, { encoding: 'utf-8' }); + +fse.writeFileSync(SRC_MODULE, `${MODULE_BODY.replace("0.0.0-VERSION';", `${PACKAGE_BODY.version}';`)}`, { encoding: 'utf-8' }); diff --git a/scripts/pre-release.js b/scripts/pre-release.js deleted file mode 100644 index c43c5d1..0000000 --- a/scripts/pre-release.js +++ /dev/null @@ -1,34 +0,0 @@ -const fse = require('fs-extra') -const path = require('path'); - -const TARGET_PACKAGE_PATH = path.resolve('./dist/hot-table/package.json'); -const TARGET_UMD_MIN_JS_PATH = path.resolve('./dist/hot-table/bundles/handsontable-angular.umd.min.js'); -const TARGET_UMD_JS_PATH = path.resolve('./dist/hot-table/bundles/handsontable-angular.umd.js'); - -const SOURCE_PACKAGE = require(path.resolve('./package.json')); -const TARGET_PACKAGE = fse.readJsonSync(TARGET_PACKAGE_PATH, { encoding: 'utf-8' }); - -TARGET_PACKAGE.version = SOURCE_PACKAGE.version; -TARGET_PACKAGE.description = SOURCE_PACKAGE.description; -TARGET_PACKAGE.repository = SOURCE_PACKAGE.repository; -TARGET_PACKAGE.author = SOURCE_PACKAGE.author; -TARGET_PACKAGE.keywords = SOURCE_PACKAGE.keywords; -TARGET_PACKAGE.license = SOURCE_PACKAGE.license; -TARGET_PACKAGE.bugs = SOURCE_PACKAGE.bugs; -TARGET_PACKAGE.peerDependencies = SOURCE_PACKAGE.peerDependencies; - -// workaround for https://github.com/ng-packagr/ng-packagr/issues/1159 -TARGET_PACKAGE.optionalDependencies = TARGET_PACKAGE.dependencies; -TARGET_PACKAGE.dependencies = {}; - -fse.writeJsonSync(TARGET_PACKAGE_PATH, TARGET_PACKAGE); - -let licenseBody = fse.readFileSync(path.resolve('./LICENSE'), { encoding: 'utf-8' }); -licenseBody += `\nVersion: ${TARGET_PACKAGE.version} (built at ${new Date().toString()})`; -const licenseBanner = `/*!\n${licenseBody.replace(/^/gm, ' * ')}\n */\n`; -const minUMDWithLicense = `${licenseBanner}${fse.readFileSync(TARGET_UMD_MIN_JS_PATH, { encoding: 'utf-8' })}`; - -fse.writeFileSync(TARGET_UMD_MIN_JS_PATH, minUMDWithLicense, { encoding: 'utf-8' }); - -const UMDWithLicense = `${licenseBanner}${fse.readFileSync(TARGET_UMD_JS_PATH, { encoding: 'utf-8' })}`; -fse.writeFileSync(TARGET_UMD_JS_PATH, UMDWithLicense, { encoding: 'utf-8' });