diff --git a/.circleci/config.yml b/.circleci/config.yml index 90c5cb3ae897..48084c1b2304 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -10,8 +10,8 @@ ## IMPORTANT # If you change the `docker_image` version, also change the `cache_key` suffix and the version of # `com_github_bazelbuild_buildtools` in the `/WORKSPACE` file. -var_1: &docker_image angular/ngcontainer:0.3.0 -var_2: &cache_key v2-ng-mat-{{ .Branch }}-{{ checksum "package-lock.json" }}-0.3.0 +var_1: &docker_image angular/ngcontainer:0.3.3 +var_2: &cache_key v2-ng-mat-{{ .Branch }}-{{ checksum "package-lock.json" }}-0.3.3 # Define common ENV vars var_3: &define_env_vars diff --git a/WORKSPACE b/WORKSPACE index 9b1d7c0ed846..df060a2a4427 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -3,16 +3,16 @@ workspace(name = "angular_material") # Add nodejs rules http_archive( name = "build_bazel_rules_nodejs", - url = "https://github.com/bazelbuild/rules_nodejs/archive/0.8.0.zip", - strip_prefix = "rules_nodejs-0.8.0", - sha256 = "4e40dd49ae7668d245c3107645f2a138660fcfd975b9310b91eda13f0c973953", + url = "https://github.com/bazelbuild/rules_nodejs/archive/0.10.1.zip", + strip_prefix = "rules_nodejs-0.10.1", + sha256 = "634206524d90dc03c52392fa3f19a16637d2bcf154910436fe1d669a0d9d7b9c", ) # NOTE: this rule installs nodejs, npm, and yarn, but does NOT install # your npm dependencies. You must still run the package manager. load("@build_bazel_rules_nodejs//:defs.bzl", "check_bazel_version", "node_repositories") -check_bazel_version("0.13.0") +check_bazel_version("0.15.0") node_repositories(package_json = ["//:package.json"]) # Add sass rules @@ -29,9 +29,16 @@ sass_repositories() # Add TypeScript rules http_archive( name = "build_bazel_rules_typescript", - url = "https://github.com/bazelbuild/rules_typescript/archive/0.12.3.zip", - strip_prefix = "rules_typescript-0.12.3", - sha256 = "967068c3540f59407716fbeb49949c1600dbf387faeeab3089085784dd21f60c", + url = "https://github.com/bazelbuild/rules_typescript/archive/0.15.1.zip", + strip_prefix = "rules_typescript-0.15.1", + sha256 = "3792cc20ef13bb1d1d8b1760894c3320f02a87843e3a04fed7e8e454a75328b6", +) + +http_archive( + name = "io_bazel_rules_webtesting", + url = "https://github.com/bazelbuild/rules_webtesting/archive/7ffe970bbf380891754487f66c3d680c087d67f2.zip", + strip_prefix = "rules_webtesting-7ffe970bbf380891754487f66c3d680c087d67f2", + sha256 = "4fb0dca8c9a90547891b7ef486592775a523330fc4555c88cd8f09270055c2ce", ) # Setup TypeScript Bazel workspace @@ -54,4 +61,4 @@ local_repository( # This commit matches the version of buildifier in angular/ngcontainer # If you change this, also check if it matches the version in the angular/ngcontainer # version in /.circleci/config.yml -BAZEL_BUILDTOOLS_VERSION = "fd9878fd5de921e0bbab3dcdcb932c2627812ee1" +BAZEL_BUILDTOOLS_VERSION = "82b21607e00913b16fe1c51bec80232d9d6de31c" diff --git a/e2e/tsconfig.json b/e2e/tsconfig.json index fe435386a045..17bd80a77063 100644 --- a/e2e/tsconfig.json +++ b/e2e/tsconfig.json @@ -6,6 +6,7 @@ "emitDecoratorMetadata": true, "experimentalDecorators": true, "strictNullChecks": true, + "strictFunctionTypes": true, "inlineSources": true, "lib": ["es2015"], "module": "commonjs", diff --git a/package-lock.json b/package-lock.json index a6699f6640c3..01ce424196d1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -35,24 +35,22 @@ } }, "@angular/animations": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-6.0.0.tgz", - "integrity": "sha512-jl3WZmM/csNeyzdb1cEEc5cUX7jLn3NvPYEiP/ZkKmib0XBGIGBBv7xiuoivTJFJsE4/N5sCFEHRFLnuBBE+OA==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-6.1.0.tgz", + "integrity": "sha512-9IJs1czyoOlgcaY3QUyQI0XeTFX45Qr/o5qlPrce240gi7TXbdJs3WIbLzxx7BhMf20GholCaOvSS3BZrNlFSA==", "requires": { "tslib": "^1.9.0" } }, "@angular/bazel": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@angular/bazel/-/bazel-6.0.0.tgz", - "integrity": "sha512-nf8FN92LxKw4br6YHOPYeaIjMV/d2Fz9YdtKpSem3reKtWviTv4gX9gcs443ANKwg5vRZQxTmVQXRVx24MUMpw==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@angular/bazel/-/bazel-6.1.0.tgz", + "integrity": "sha512-NmAqcj9RK98jauCgpNp3gE8jPjs2Oexszj1pyKyh8lg1VUYhFHFp3SVos0JEYtgu1I2MvX4H/veDCEepD5u8vg==", "dev": true, "requires": { - "@bazel/typescript": "^0.11.1", + "@bazel/typescript": "^0.15.0", "@types/node": "6.0.84", - "@types/shelljs": "0.7.7", - "protobufjs": "5.0.0", - "shelljs": "0.7.8" + "protobufjs": "5.0.0" }, "dependencies": { "@types/node": { @@ -64,31 +62,31 @@ } }, "@angular/common": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-6.0.0.tgz", - "integrity": "sha512-oo/KESihAZo0FsZPHthO9PYhanN4Q+Lo7Lb2HNbWnD+xRIPa1yFC12JOWiD+SPPfFGWMI6aW3wAlcoej1+QKSw==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-6.1.0.tgz", + "integrity": "sha512-uxdjxbuTYiCsOcrfO9EumGrfXo+7nB7HlS9F4wraKcnR22oJYNUh36meFKZwpoj5pDIBLnZQu75boI16o3W+SQ==", "requires": { "tslib": "^1.9.0" } }, "@angular/compiler": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-6.0.0.tgz", - "integrity": "sha512-UsYfsvHf4VVtkhzM7tyabh8co7gqWZTm3p79hbLDeyCEojl0AkrwbSgh0DQnKRxp4Tu3DEeeDkg1ahA7n19I8A==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-6.1.0.tgz", + "integrity": "sha512-5c8ZYCFv0xccy0F12zBRIJX0pJd9BgCThJuhVJAuaRFFOqPZl8FKEO3SFqKJNywT0UktZD9JpYFKxhUVxuSHDg==", "requires": { "tslib": "^1.9.0" } }, "@angular/compiler-cli": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-6.0.0.tgz", - "integrity": "sha512-RV0xTSTPT3yOnbS5Gx6lMAETQeTUr72Ifu0+JZh9AV07xGVislZ+SdQGSeNgXoqxise6e65lJp3Nrb5KE4Lv6g==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-6.1.0.tgz", + "integrity": "sha512-g4fXQwAYnxtr08BK3CiodJsUXz3fIBCVfZaWIcLMdOlyarFDEvB3TA9qfPkQtlndm87WpXjZ6Xd9OAkmG8t8dw==", "dev": true, "requires": { "chokidar": "^1.4.2", "minimist": "^1.2.0", "reflect-metadata": "^0.1.2", - "tsickle": "^0.27.2" + "tsickle": "^0.30.0" }, "dependencies": { "anymatch": { @@ -215,63 +213,76 @@ "parse-glob": "^3.0.4", "regex-cache": "^0.4.2" } + }, + "tsickle": { + "version": "0.30.0", + "resolved": "https://registry.npmjs.org/tsickle/-/tsickle-0.30.0.tgz", + "integrity": "sha512-A4ALnEDQNrECn5xhgHmoXKM5qERCM395pKIfqcV57ex3zEInVogu/A191Btv8OPEINkr3xQ3Q2XRywyqkge3Qg==", + "dev": true, + "requires": { + "jasmine-diff": "^0.1.3", + "minimist": "^1.2.0", + "mkdirp": "^0.5.1", + "source-map": "^0.6.0", + "source-map-support": "^0.5.0" + } } } }, "@angular/core": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-6.0.0.tgz", - "integrity": "sha512-52X2ZKXOoaMRYaC/ycHePTkXuwku8qJFxoEXAFBItAkk9rebLU4CD8Fx1Z9vUd8aWu1uFfLTxqkgE0mUyBANZw==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-6.1.0.tgz", + "integrity": "sha512-gWu9Q7q2+fhFC5dl/BvGW7Ha7NUJtK9wQLYQlfIMim4lKTOiM1/S0MYBVMrEq58ldMr9DnA35f5jGno3x6/v+g==", "requires": { "tslib": "^1.9.0" } }, "@angular/elements": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@angular/elements/-/elements-6.0.0.tgz", - "integrity": "sha512-Jp26Suu7XRrS25qS1CMDo0IFmIJQIl/ahvOE+vY7Xv9/OEGGaRvkF2aUaWyrhuFdXir+xMQGnhTCd6NeJM9VRg==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@angular/elements/-/elements-6.1.0.tgz", + "integrity": "sha512-9X6ZeiPduQSfesg5kDeDWeqEmsLLF5YbCxOT8tzzvo1Zdw3uAYupmDSpzxPaVxD3JduCYlGjhLRGngdCtiXcVw==", "requires": { "tslib": "^1.9.0" } }, "@angular/forms": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-6.0.0.tgz", - "integrity": "sha512-4eVfCcSyPRhml7Xa6ia/DgDl3JhOnEdBdHo+jads1YL5AF6D08Tthngjf3KjuctGqZDACPyxNt6ciX4g8IbGCA==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-6.1.0.tgz", + "integrity": "sha512-6InfsKWEL9w2RvTXjy5R3F8GRjENT9d444o95aSvf+ZK7KsYOeIwcYgN2pw+LjfNu2O3EbAqps8APQ6oD/Fn3A==", "requires": { "tslib": "^1.9.0" } }, "@angular/http": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@angular/http/-/http-6.0.0.tgz", - "integrity": "sha512-nBZ4KmXx0KR+cIPOMBsJpPhcec5wSCbVtTYRH0zTxmzTmqM3g6+i0PECpqbVgcQEGiOxBLcmXNWfXZl5czpiqw==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@angular/http/-/http-6.1.0.tgz", + "integrity": "sha512-Tky6T93xX22m7zeXSdxALXglKh00QerubV9+exKLUethDGE/xvdRKKdsiMo72w+4yj/1bXAd4fXw+SDneUco7Q==", "dev": true, "requires": { "tslib": "^1.9.0" } }, "@angular/platform-browser": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-6.0.0.tgz", - "integrity": "sha512-ExI1o40BJIbJKFz1p1ivGSgLA1+T0uUo8rjheOZhcGDwCNx54/RapCFLdcHCNiW8NzAIzx+kt4DdXnCSKitnDA==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-6.1.0.tgz", + "integrity": "sha512-LcpcHLpy+fjN+gKcnTkWuTTuF+uYT350mje1kNr4Advoco76tXYBjAda/EehG+vmQmDTd5E+uxJhKJr/1POVEw==", "requires": { "tslib": "^1.9.0" } }, "@angular/platform-browser-dynamic": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-6.0.0.tgz", - "integrity": "sha512-yk4wZYn2bosuvDaYaEq6UuEeI966/28uCljm5iBfo3l8Vuv2IChk5664M68O6C+KwWzCCWDHvIqm0q178YUYug==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-6.1.0.tgz", + "integrity": "sha512-gjOJ38ciuIgdAuG8bEs/sdJmkfm/oICLrCcQexz+EUCZAiqbKDb0HvFTDaKaLtR7iDbTXVMQhoYMOyTY40FwLQ==", "dev": true, "requires": { "tslib": "^1.9.0" } }, "@angular/platform-server": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@angular/platform-server/-/platform-server-6.0.0.tgz", - "integrity": "sha512-1dmaM3xpayBdZrkpmhPfpJ1CDNntxlizL1td2DMRUfFqMNyE7acbc7vRuV9BOgniPGsMKphYQXczERNfoVeuSw==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@angular/platform-server/-/platform-server-6.1.0.tgz", + "integrity": "sha512-hlE2/K+93ihMLXphlusdvRET4PR3Wo6vOUHb0SKVWYUo/pw7EpPIdeRs49xjsiW08TNwFI5UGYUQn+pd9ATIjA==", "dev": true, "requires": { "domino": "^2.0.1", @@ -280,18 +291,18 @@ } }, "@angular/router": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@angular/router/-/router-6.0.0.tgz", - "integrity": "sha512-ONrfgfYmFGz0Ht2MvymMvBMxPI9w5037ZfJWpTu1/Xo1XmVOawzj2SvYfEzTqexznWcTAALggq/A23k8r9ArKA==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-6.1.0.tgz", + "integrity": "sha512-tIcHLuat19cnoQBbOfe/8zAHVqf/9S17YgwSO6VUPTuXLRe9ZBgYT50BzqRhcm8ODOqVmLBQYlzP7zRcNRkHDA==", "dev": true, "requires": { "tslib": "^1.9.0" } }, "@angular/upgrade": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@angular/upgrade/-/upgrade-6.0.0.tgz", - "integrity": "sha512-YpRqxcYzJ14Z98jNaAFzLCIxid3yZdmQFQw6i/E+Jkd9nj77A1/5GqnCWkKCs2C5BbbIe8uqDvVsGWDII61XRQ==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@angular/upgrade/-/upgrade-6.1.0.tgz", + "integrity": "sha512-HWpXisVY1uyIhWXz41KciweCWAD7oHajkhnDXlNBvDaIbnYkUSSr2D5DOCR8jIooV1HqJMkXCqRR0nwm3WEjJg==", "dev": true, "requires": { "tslib": "^1.9.0" @@ -304,10 +315,53 @@ "dev": true }, "@bazel/typescript": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/@bazel/typescript/-/typescript-0.11.1.tgz", - "integrity": "sha512-mDz751sitozM1PHtFhonskqh4cQylzSWn7UQ28ee0tnrt1wlpUNjNEbPdxpr4uiTwgokz27kXcmQ93mJymAaaw==", - "dev": true + "version": "0.15.3", + "resolved": "https://registry.npmjs.org/@bazel/typescript/-/typescript-0.15.3.tgz", + "integrity": "sha512-YWKX1cLGjWx2OdYBU0WeV7DlemlEaXuMcPKkeB3p2D7jiso5YYHaaOevWOQVJXKS4E/fbjd8nw7RGtRWsX8Myg==", + "dev": true, + "requires": { + "protobufjs": "5.0.0", + "tsickle": "0.25.x", + "tsutils": "2.20.0" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "source-map-support": { + "version": "0.4.18", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", + "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", + "dev": true, + "requires": { + "source-map": "^0.5.6" + } + }, + "tsickle": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/tsickle/-/tsickle-0.25.6.tgz", + "integrity": "sha1-tZXbFrI2chgk7u2ouyYjZbR+8zQ=", + "dev": true, + "requires": { + "minimist": "^1.2.0", + "mkdirp": "^0.5.1", + "source-map": "^0.5.6", + "source-map-support": "^0.4.2" + } + }, + "tsutils": { + "version": "2.20.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.20.0.tgz", + "integrity": "sha512-qPOBy1/hwLdBxh/TNIpim5qL1WRMR0tgVGBB6shjnpw6/SuS5ZKYyXXxKDYsMsMtVdFOcL+XPGZVEuc+eCOo4A==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + } + } + } }, "@firebase/app": { "version": "0.2.0", @@ -698,8 +752,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true, - "optional": true + "dev": true }, "json-schema-traverse": { "version": "0.4.1", @@ -745,7 +798,6 @@ "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true, - "optional": true, "requires": { "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^4.0.0" @@ -985,6 +1037,14 @@ "@angular-devkit/core": "0.7.1", "@angular-devkit/schematics": "0.7.1", "typescript": ">=2.6.2 <2.8" + }, + "dependencies": { + "typescript": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.7.2.tgz", + "integrity": "sha512-p5TCYZDAO0m4G344hD+wx/LATebLWZNkkh2asWUFqSsD2OrDNhbAHuSjobrmsUmdzjJjEeZVU9g1h3O6vpstnw==", + "dev": true + } } }, "@sindresorhus/is": { @@ -1165,16 +1225,6 @@ "integrity": "sha512-ikB0JHv6vCR1KYUQAzTO4gi/lXLElT4Tx+6De2pc/OZwizE9LRNiTa+U8TBFKBD/nntPnr/MPSHSnOTybjhqNA==", "dev": true }, - "@types/shelljs": { - "version": "0.7.7", - "resolved": "https://registry.npmjs.org/@types/shelljs/-/shelljs-0.7.7.tgz", - "integrity": "sha512-37gn9J75TVAhhmzBqoX0vzQodsjzri1SxElMX+Wk092IobNZSGW/8X4ygLOQOrKjCQr5nxGN9Ik0UA3fSdL1Pw==", - "dev": true, - "requires": { - "@types/glob": "*", - "@types/node": "*" - } - }, "@types/tough-cookie": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-2.3.3.tgz", @@ -3305,7 +3355,7 @@ "split": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", - "integrity": "sha1-YFvZvjA6pZ+zX5Ip++oN3snqB9k=", + "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", "dev": true, "requires": { "through": "2" @@ -3944,6 +3994,12 @@ "requires": { "source-map": "^0.5.6" } + }, + "typescript": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.7.2.tgz", + "integrity": "sha512-p5TCYZDAO0m4G344hD+wx/LATebLWZNkkh2asWUFqSsD2OrDNhbAHuSjobrmsUmdzjJjEeZVU9g1h3O6vpstnw==", + "dev": true } } }, @@ -3962,8 +4018,7 @@ "diff": { "version": "3.5.0", "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", - "dev": true + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==" }, "diff-match-patch": { "version": "1.0.1", @@ -5711,14 +5766,12 @@ "balanced-match": { "version": "1.0.0", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "brace-expansion": { "version": "1.1.11", "bundled": true, "dev": true, - "optional": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -5738,8 +5791,7 @@ "concat-map": { "version": "0.0.1", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "console-control-strings": { "version": "1.1.0", @@ -5861,8 +5913,7 @@ "inherits": { "version": "2.0.3", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "ini": { "version": "1.3.5", @@ -5888,7 +5939,6 @@ "version": "3.0.4", "bundled": true, "dev": true, - "optional": true, "requires": { "brace-expansion": "^1.1.7" } @@ -7134,19 +7184,19 @@ }, "ansi-regex": { "version": "2.1.1", - "resolved": false, + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", "dev": true }, "aproba": { "version": "1.2.0", - "resolved": false, + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", "dev": true }, "are-we-there-yet": { "version": "1.1.4", - "resolved": false, + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz", "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=", "dev": true, "requires": { @@ -7156,7 +7206,7 @@ }, "asn1": { "version": "0.2.3", - "resolved": false, + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=", "dev": true }, @@ -7168,7 +7218,7 @@ }, "asynckit": { "version": "0.4.0", - "resolved": false, + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", "dev": true }, @@ -7180,19 +7230,19 @@ }, "aws4": { "version": "1.6.0", - "resolved": false, + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=", "dev": true }, "balanced-match": { "version": "1.0.0", - "resolved": false, + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", "dev": true }, "bcrypt-pbkdf": { "version": "1.0.1", - "resolved": false, + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", "dev": true, "optional": true, @@ -7202,7 +7252,7 @@ }, "block-stream": { "version": "0.0.9", - "resolved": false, + "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", "dev": true, "requires": { @@ -7220,7 +7270,7 @@ }, "brace-expansion": { "version": "1.1.8", - "resolved": false, + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", "dev": true, "requires": { @@ -7230,19 +7280,19 @@ }, "caseless": { "version": "0.12.0", - "resolved": false, + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", "dev": true }, "co": { "version": "4.6.0", - "resolved": false, + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", "dev": true }, "code-point-at": { "version": "1.1.0", - "resolved": false, + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", "dev": true }, @@ -7257,19 +7307,19 @@ }, "concat-map": { "version": "0.0.1", - "resolved": false, + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true }, "console-control-strings": { "version": "1.1.0", - "resolved": false, + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", "dev": true }, "core-util-is": { "version": "1.0.2", - "resolved": false, + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", "dev": true }, @@ -7295,7 +7345,7 @@ }, "dashdash": { "version": "1.14.1", - "resolved": false, + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", "dev": true, "requires": { @@ -7313,19 +7363,19 @@ }, "deep-extend": { "version": "0.4.2", - "resolved": false, + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.2.tgz", "integrity": "sha1-SLaZwn4zS/ifEIkr5DL25MfTSn8=", "dev": true }, "delayed-stream": { "version": "1.0.0", - "resolved": false, + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", "dev": true }, "delegates": { "version": "1.0.0", - "resolved": false, + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", "dev": true }, @@ -7337,7 +7387,7 @@ }, "ecc-jsbn": { "version": "0.1.1", - "resolved": false, + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", "dev": true, "optional": true, @@ -7347,13 +7397,13 @@ }, "extend": { "version": "3.0.1", - "resolved": false, + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=", "dev": true }, "extsprintf": { "version": "1.3.0", - "resolved": false, + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", "dev": true }, @@ -7371,7 +7421,7 @@ }, "forever-agent": { "version": "0.6.1", - "resolved": false, + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", "dev": true }, @@ -7388,13 +7438,13 @@ }, "fs.realpath": { "version": "1.0.0", - "resolved": false, + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "dev": true }, "fstream": { "version": "1.0.11", - "resolved": false, + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", "dev": true, "requires": { @@ -7406,7 +7456,7 @@ }, "fstream-ignore": { "version": "1.0.5", - "resolved": false, + "resolved": "https://registry.npmjs.org/fstream-ignore/-/fstream-ignore-1.0.5.tgz", "integrity": "sha1-nDHa40dnAY/h0kmyTa2mfQktoQU=", "dev": true, "requires": { @@ -7417,7 +7467,7 @@ }, "gauge": { "version": "2.7.4", - "resolved": false, + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", "dev": true, "requires": { @@ -7433,7 +7483,7 @@ }, "getpass": { "version": "0.1.7", - "resolved": false, + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", "dev": true, "requires": { @@ -7456,7 +7506,7 @@ }, "graceful-fs": { "version": "4.1.11", - "resolved": false, + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", "dev": true }, @@ -7478,7 +7528,7 @@ }, "has-unicode": { "version": "2.0.1", - "resolved": false, + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", "dev": true }, @@ -7513,7 +7563,7 @@ }, "inflight": { "version": "1.0.6", - "resolved": false, + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, "requires": { @@ -7523,7 +7573,7 @@ }, "inherits": { "version": "2.0.3", - "resolved": false, + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", "dev": true }, @@ -7535,7 +7585,7 @@ }, "is-fullwidth-code-point": { "version": "1.0.0", - "resolved": false, + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "dev": true, "requires": { @@ -7544,32 +7594,32 @@ }, "is-typedarray": { "version": "1.0.0", - "resolved": false, + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", "dev": true }, "isarray": { "version": "1.0.0", - "resolved": false, + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", "dev": true }, "isstream": { "version": "0.1.2", - "resolved": false, + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", "dev": true }, "jsbn": { "version": "0.1.1", - "resolved": false, + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", "dev": true, "optional": true }, "json-schema": { "version": "0.2.3", - "resolved": false, + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", "dev": true }, @@ -7581,13 +7631,13 @@ }, "json-stringify-safe": { "version": "5.0.1", - "resolved": false, + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", "dev": true }, "jsprim": { "version": "1.4.1", - "resolved": false, + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", "dev": true, "requires": { @@ -7614,7 +7664,7 @@ }, "minimatch": { "version": "3.0.4", - "resolved": false, + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, "requires": { @@ -7629,7 +7679,7 @@ }, "mkdirp": { "version": "0.5.1", - "resolved": false, + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", "dev": true, "requires": { @@ -7646,7 +7696,7 @@ }, "ms": { "version": "2.0.0", - "resolved": false, + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true }, @@ -7680,7 +7730,7 @@ }, "npmlog": { "version": "4.1.2", - "resolved": false, + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", "dev": true, "requires": { @@ -7692,25 +7742,25 @@ }, "number-is-nan": { "version": "1.0.1", - "resolved": false, + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", "dev": true }, "oauth-sign": { "version": "0.8.2", - "resolved": false, + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", "dev": true }, "object-assign": { "version": "4.1.1", - "resolved": false, + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", "dev": true }, "once": { "version": "1.4.0", - "resolved": false, + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, "requires": { @@ -7719,13 +7769,13 @@ }, "os-homedir": { "version": "1.0.2", - "resolved": false, + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", "dev": true }, "os-tmpdir": { "version": "1.0.2", - "resolved": false, + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", "dev": true }, @@ -7741,7 +7791,7 @@ }, "path-is-absolute": { "version": "1.0.1", - "resolved": false, + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", "dev": true }, @@ -7759,7 +7809,7 @@ }, "punycode": { "version": "1.4.1", - "resolved": false, + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", "dev": true }, @@ -7828,7 +7878,7 @@ }, "rimraf": { "version": "2.6.2", - "resolved": false, + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", "dev": true, "requires": { @@ -7837,7 +7887,7 @@ }, "safe-buffer": { "version": "5.1.1", - "resolved": false, + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", "dev": true }, @@ -7849,13 +7899,13 @@ }, "set-blocking": { "version": "2.0.0", - "resolved": false, + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", "dev": true }, "signal-exit": { "version": "3.0.2", - "resolved": false, + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", "dev": true }, @@ -7886,7 +7936,7 @@ }, "string-width": { "version": "1.0.2", - "resolved": false, + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, "requires": { @@ -7897,7 +7947,7 @@ }, "string_decoder": { "version": "1.0.3", - "resolved": false, + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", "dev": true, "requires": { @@ -7906,13 +7956,13 @@ }, "stringstream": { "version": "0.0.5", - "resolved": false, + "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=", "dev": true }, "strip-ansi": { "version": "3.0.1", - "resolved": false, + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { @@ -7921,13 +7971,13 @@ }, "strip-json-comments": { "version": "2.0.1", - "resolved": false, + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", "dev": true }, "tar": { "version": "2.2.1", - "resolved": false, + "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", "dev": true, "requires": { @@ -7938,7 +7988,7 @@ }, "tar-pack": { "version": "3.4.1", - "resolved": false, + "resolved": "https://registry.npmjs.org/tar-pack/-/tar-pack-3.4.1.tgz", "integrity": "sha512-PPRybI9+jM5tjtCbN2cxmmRU7YmqT3Zv/UDy48tAh2XRkLa9bAORtSWLkVc13+GJF+cdTh1yEnHEk3cpTaL5Kg==", "dev": true, "requires": { @@ -7963,7 +8013,7 @@ }, "tunnel-agent": { "version": "0.6.0", - "resolved": false, + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", "dev": true, "requires": { @@ -7972,20 +8022,20 @@ }, "tweetnacl": { "version": "0.14.5", - "resolved": false, + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", "dev": true, "optional": true }, "uid-number": { "version": "0.0.6", - "resolved": false, + "resolved": "https://registry.npmjs.org/uid-number/-/uid-number-0.0.6.tgz", "integrity": "sha1-DqEOgDXo61uOREnwbaHHMGY7qoE=", "dev": true }, "util-deprecate": { "version": "1.0.2", - "resolved": false, + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", "dev": true }, @@ -7997,7 +8047,7 @@ }, "verror": { "version": "1.10.0", - "resolved": false, + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", "dev": true, "requires": { @@ -8008,7 +8058,7 @@ }, "wide-align": { "version": "1.1.2", - "resolved": false, + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz", "integrity": "sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w==", "dev": true, "requires": { @@ -8017,7 +8067,7 @@ }, "wrappy": { "version": "1.0.2", - "resolved": false, + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true } @@ -10296,6 +10346,14 @@ "integrity": "sha512-35OOToo2lFczwZ/FdJkUOO/Gsp9FW7viWChYA7OgBfpjgTxbxmNKyNrGS3HHREHay5nJwJvu4RqAlvcBcCAWeA==", "dev": true }, + "jasmine-diff": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/jasmine-diff/-/jasmine-diff-0.1.3.tgz", + "integrity": "sha1-k8zC3MQQKMXd1GBlWAdIOfLe6qg=", + "requires": { + "diff": "^3.2.0" + } + }, "jasminewd2": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/jasminewd2/-/jasminewd2-2.2.0.tgz", @@ -16847,10 +16905,11 @@ } }, "tsickle": { - "version": "0.27.5", - "resolved": "https://registry.npmjs.org/tsickle/-/tsickle-0.27.5.tgz", - "integrity": "sha512-NP+CjM1EXza/M8mOXBLH3vkFEJiu1zfEAlC5WdJxHPn8l96QPz5eooP6uAgYtw1CcKfuSyIiheNUdKxtDWCNeg==", + "version": "0.32.0", + "resolved": "https://registry.npmjs.org/tsickle/-/tsickle-0.32.0.tgz", + "integrity": "sha512-n/XCe2J2oiWNf/JNG18K0isS7dC16znYUvCf11/CuCQbJQGvLAPWyD11543oMtLGUD7A/ygHW62kfQfy182Mfw==", "requires": { + "jasmine-diff": "^0.1.3", "minimist": "^1.2.0", "mkdirp": "^0.5.1", "source-map": "^0.6.0", @@ -16983,9 +17042,9 @@ "dev": true }, "typescript": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.7.2.tgz", - "integrity": "sha512-p5TCYZDAO0m4G344hD+wx/LATebLWZNkkh2asWUFqSsD2OrDNhbAHuSjobrmsUmdzjJjEeZVU9g1h3O6vpstnw==", + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.9.2.tgz", + "integrity": "sha512-Gr4p6nFNaoufRIY4NMdpQRNmgxVIGMs4Fcu/ujdYk3nAZqk7supzBE9idmvfZIlH/Cuj//dvi+019qEue9lV0w==", "dev": true }, "uglify-js": { diff --git a/package.json b/package.json index b0541eb71311..4e8888187a2e 100644 --- a/package.json +++ b/package.json @@ -27,31 +27,31 @@ "version": "6.4.6", "requiredAngularVersion": ">=6.0.0 <7.0.0", "dependencies": { - "@angular/animations": "6.0.0", - "@angular/common": "6.0.0", - "@angular/compiler": "6.0.0", - "@angular/core": "6.0.0", - "@angular/elements": "6.0.0", - "@angular/forms": "6.0.0", - "@angular/platform-browser": "6.0.0", + "@angular/animations": "^6.1.0", + "@angular/common": "^6.1.0", + "@angular/compiler": "^6.1.0", + "@angular/core": "^6.1.0", + "@angular/elements": "^6.1.0", + "@angular/forms": "^6.1.0", + "@angular/platform-browser": "^6.1.0", "@webcomponents/custom-elements": "^1.1.0", "core-js": "^2.4.1", "rxjs": "^6.2.0", "systemjs": "0.19.43", - "tsickle": "^0.27.2", + "tsickle": "^0.32.0", "tslib": "^1.9.0", "zone.js": "^0.8.26" }, "devDependencies": { "@angular-devkit/core": "^0.7.1", "@angular-devkit/schematics": "^0.7.1", - "@angular/bazel": "6.0.0", - "@angular/compiler-cli": "6.0.0", - "@angular/http": "6.0.0", - "@angular/platform-browser-dynamic": "6.0.0", - "@angular/platform-server": "6.0.0", - "@angular/router": "6.0.0", - "@angular/upgrade": "6.0.0", + "@angular/bazel": "^6.1.0", + "@angular/compiler-cli": "^6.1.0", + "@angular/http": "^6.1.0", + "@angular/platform-browser-dynamic": "^6.1.0", + "@angular/platform-server": "^6.1.0", + "@angular/router": "^6.1.0", + "@angular/upgrade": "^6.1.0", "@bazel/ibazel": "0.3.1", "@google-cloud/storage": "^1.1.1", "@octokit/rest": "^15.9.4", @@ -128,7 +128,7 @@ "ts-node": "^3.0.4", "tsconfig-paths": "^2.3.0", "tslint": "^5.11.0", - "typescript": "2.7.x", + "typescript": "2.9.x", "uglify-js": "^2.8.14" } } diff --git a/src/cdk-experimental/dialog/dialog.ts b/src/cdk-experimental/dialog/dialog.ts index 5f18c9a45244..1d03a026b3b1 100644 --- a/src/cdk-experimental/dialog/dialog.ts +++ b/src/cdk-experimental/dialog/dialog.ts @@ -50,7 +50,7 @@ export class Dialog { } _afterAllClosedBase = new Subject(); afterAllClosed: Observable = defer(() => this.openDialogs.length ? - this._afterAllClosed : this._afterAllClosed.pipe(startWith(undefined))); + this._afterAllClosed : this._afterAllClosed.pipe(startWith(undefined))); /** Stream that emits when a dialog is opened. */ get afterOpened(): Subject> { diff --git a/src/cdk-experimental/tsconfig-build.json b/src/cdk-experimental/tsconfig-build.json index 392dbe3c9290..e3cb4e371ee1 100644 --- a/src/cdk-experimental/tsconfig-build.json +++ b/src/cdk-experimental/tsconfig-build.json @@ -7,6 +7,7 @@ "experimentalDecorators": true, "noUnusedParameters": true, "strictNullChecks": true, + "strictFunctionTypes": true, "importHelpers": true, "newLine": "lf", "module": "es2015", diff --git a/src/cdk/a11y/interactivity-checker/interactivity-checker.spec.ts b/src/cdk/a11y/interactivity-checker/interactivity-checker.spec.ts index feee76e3471d..6ccc136d5248 100644 --- a/src/cdk/a11y/interactivity-checker/interactivity-checker.spec.ts +++ b/src/cdk/a11y/interactivity-checker/interactivity-checker.spec.ts @@ -326,7 +326,7 @@ describe('InteractivityChecker', () => { appendElements([iframe]); iframe.setAttribute('tabindex', '-1'); - iframe.contentDocument.body.appendChild(button); + iframe.contentDocument!.body.appendChild(button); expect(checker.isTabbable(iframe)).toBe(false); expect(checker.isTabbable(button)).toBe(false); @@ -344,7 +344,7 @@ describe('InteractivityChecker', () => { appendElements([iframe]); iframe.setAttribute('tabindex', '-1'); - iframe.contentDocument.body.appendChild(button); + iframe.contentDocument!.body.appendChild(button); // Some browsers explicitly prevent overwriting of properties on a `Window` object. if (!platform.SAFARI) { @@ -392,7 +392,7 @@ describe('InteractivityChecker', () => { // This is a hack to create an empty contentDocument for the frame element. objectEl.type = 'text/html'; - objectEl.contentDocument.body.appendChild(button); + objectEl.contentDocument!.body.appendChild(button); expect(checker.isTabbable(objectEl)).toBe(false); expect(checker.isTabbable(button)).toBe(false); @@ -405,7 +405,7 @@ describe('InteractivityChecker', () => { appendElements([iframe]); iframe.style.display = 'none'; - iframe.contentDocument.body.appendChild(button); + iframe.contentDocument!.body.appendChild(button); expect(checker.isTabbable(iframe)).toBe(false); expect(checker.isTabbable(button)).toBe(false); diff --git a/src/cdk/drag-drop/drag-drop-registry.ts b/src/cdk/drag-drop/drag-drop-registry.ts index 2e7604e23eb4..46b884a70013 100644 --- a/src/cdk/drag-drop/drag-drop-registry.ts +++ b/src/cdk/drag-drop/drag-drop-registry.ts @@ -39,7 +39,10 @@ export class DragDropRegistry implements OnDestroy { private _activeDragInstances = new Set(); /** Keeps track of the event listeners that we've bound to the `document`. */ - private _globalListeners = new Map(); + private _globalListeners = new Map<'touchmove' | 'mousemove' | 'touchend' | 'mouseup', { + handler: PointerEventHandler, + options?: any + }>(); /** * Emits the `touchmove` or `mousemove` events that are dispatched diff --git a/src/cdk/drag-drop/drag.ts b/src/cdk/drag-drop/drag.ts index 5ec0d7f7891b..2dc8800866ee 100644 --- a/src/cdk/drag-drop/drag.ts +++ b/src/cdk/drag-drop/drag.ts @@ -515,13 +515,13 @@ export class CdkDrag implements OnDestroy { return this._ngZone.runOutsideAngular(() => { return new Promise(resolve => { - const handler = (event: TransitionEvent) => { + const handler = ((event: TransitionEvent) => { if (!event || event.target === this._preview) { this._preview.removeEventListener('transitionend', handler); resolve(); clearTimeout(timeout); } - }; + }) as EventListenerOrEventListenerObject; // If a transition is short enough, the browser might not fire the `transitionend` event. // Since we know how long it's supposed to take, add a timeout with a 50% buffer that'll diff --git a/src/cdk/layout/breakpoints-observer.ts b/src/cdk/layout/breakpoints-observer.ts index 41ba8c98f7e2..90bdc96e3645 100644 --- a/src/cdk/layout/breakpoints-observer.ts +++ b/src/cdk/layout/breakpoints-observer.ts @@ -99,16 +99,16 @@ export class BreakpointObserver implements OnDestroy { const mql: MediaQueryList = this.mediaMatcher.matchMedia(query); // Create callback for match changes and add it is as a listener. - const queryObservable = fromEventPattern( + const queryObservable = fromEventPattern( // Listener callback methods are wrapped to be placed back in ngZone. Callbacks must be placed // back into the zone because matchMedia is only included in Zone.js by loading the // webapis-media-query.js file alongside the zone.js file. Additionally, some browsers do not // have MediaQueryList inherit from EventTarget, which causes inconsistencies in how Zone.js // patches it. - (listener: MediaQueryListListener) => { + (listener: Function) => { mql.addListener((e: MediaQueryList) => this.zone.run(() => listener(e))); }, - (listener: MediaQueryListListener) => { + (listener: Function) => { mql.removeListener((e: MediaQueryList) => this.zone.run(() => listener(e))); }) .pipe( diff --git a/src/cdk/overlay/overlay.spec.ts b/src/cdk/overlay/overlay.spec.ts index 05f944422ee1..21a400bc2c14 100644 --- a/src/cdk/overlay/overlay.spec.ts +++ b/src/cdk/overlay/overlay.spec.ts @@ -26,6 +26,7 @@ import { PositionStrategy, ScrollStrategy, } from './index'; +import {OverlayReference} from './overlay-reference'; describe('Overlay', () => { @@ -342,7 +343,7 @@ describe('Overlay', () => { }); it('should keep the direction in sync with the passed in Directionality', () => { - const customDirectionality = {value: 'rtl', change: new EventEmitter()}; + const customDirectionality = {value: 'rtl', change: new EventEmitter()}; const overlayRef = overlay.create({direction: customDirectionality as Directionality}); expect(overlayRef.getDirection()).toBe('rtl'); @@ -766,9 +767,9 @@ class FakePositionStrategy implements PositionStrategy { class FakeScrollStrategy implements ScrollStrategy { isEnabled = false; - overlayRef: OverlayRef; + overlayRef: OverlayReference; - attach(overlayRef: OverlayRef) { + attach(overlayRef: OverlayReference) { this.overlayRef = overlayRef; } diff --git a/src/cdk/scrolling/virtual-for-of.ts b/src/cdk/scrolling/virtual-for-of.ts index c4f15ae8eddc..635c19f5190e 100644 --- a/src/cdk/scrolling/virtual-for-of.ts +++ b/src/cdk/scrolling/virtual-for-of.ts @@ -124,7 +124,7 @@ export class CdkVirtualForOf implements CollectionViewer, DoCheck, OnDestroy dataStream: Observable> = this._dataSourceChanges .pipe( // Start off with null `DataSource`. - startWith(null!), + startWith>(null!), // Bundle up the previous and current data sources so we can work with both. pairwise(), // Use `_changeDataSource` to disconnect from the previous data source and connect to the @@ -281,22 +281,23 @@ export class CdkVirtualForOf implements CollectionViewer, DoCheck, OnDestroy /** Apply changes to the DOM. */ private _applyChanges(changes: IterableChanges) { // Rearrange the views to put them in the right location. - changes.forEachOperation( - (record: IterableChangeRecord, adjustedPreviousIndex: number, currentIndex: number) => { - if (record.previousIndex == null) { // Item added. - const view = this._getViewForNewItem(); - this._viewContainerRef.insert(view, currentIndex); - view.context.$implicit = record.item; - } else if (currentIndex == null) { // Item removed. - this._cacheView(this._viewContainerRef.detach(adjustedPreviousIndex) as - EmbeddedViewRef>); - } else { // Item moved. - const view = this._viewContainerRef.get(adjustedPreviousIndex) as - EmbeddedViewRef>; - this._viewContainerRef.move(view, currentIndex); - view.context.$implicit = record.item; - } - }); + changes.forEachOperation((record: IterableChangeRecord, + adjustedPreviousIndex: number | null, + currentIndex: number | null) => { + if (record.previousIndex == null) { // Item added. + const view = this._getViewForNewItem(); + this._viewContainerRef.insert(view, currentIndex!); + view.context.$implicit = record.item; + } else if (currentIndex == null) { // Item removed. + this._cacheView(this._viewContainerRef.detach(adjustedPreviousIndex!) as + EmbeddedViewRef>); + } else { // Item moved. + const view = this._viewContainerRef.get(adjustedPreviousIndex!) as + EmbeddedViewRef>; + this._viewContainerRef.move(view, currentIndex); + view.context.$implicit = record.item; + } + }); // Update $implicit for any items that had an identity change. changes.forEachIdentityChange((record: IterableChangeRecord) => { diff --git a/src/cdk/scrolling/virtual-scroll-viewport.ts b/src/cdk/scrolling/virtual-scroll-viewport.ts index 8f2eb432e6e7..01910cc95130 100644 --- a/src/cdk/scrolling/virtual-scroll-viewport.ts +++ b/src/cdk/scrolling/virtual-scroll-viewport.ts @@ -143,7 +143,7 @@ export class CdkVirtualScrollViewport extends CdkScrollable implements OnInit, O this.elementScrolled() .pipe( // Start off with a fake scroll event so we properly detect our initial position. - startWith(null!), + startWith(null!), // Sample the scroll stream at every animation frame. This way if there are multiple // scroll events in the same frame we only need to recheck our layout once. sampleTime(0, animationFrameScheduler)) diff --git a/src/cdk/stepper/stepper.ts b/src/cdk/stepper/stepper.ts index 5d9ab232b58c..826f899f816b 100644 --- a/src/cdk/stepper/stepper.ts +++ b/src/cdk/stepper/stepper.ts @@ -239,7 +239,7 @@ export class CdkStepper implements AfterViewInit, OnDestroy { .withWrap() .withVerticalOrientation(this._orientation === 'vertical'); - (this._dir ? this._dir.change as Observable : obaservableOf()) + (this._dir ? this._dir.change as Observable : obaservableOf()) .pipe(startWith(this._layoutDirection()), takeUntil(this._destroyed)) .subscribe(direction => this._keyManager.withHorizontalOrientation(direction)); diff --git a/src/cdk/table/table.ts b/src/cdk/table/table.ts index 3029fee84336..a98aab75a108 100644 --- a/src/cdk/table/table.ts +++ b/src/cdk/table/table.ts @@ -447,17 +447,19 @@ export class CdkTable implements AfterContentChecked, CollectionViewer, OnDes if (!changes) { return; } const viewContainer = this._rowOutlet.viewContainer; - changes.forEachOperation( - (record: IterableChangeRecord>, prevIndex: number, currentIndex: number) => { - if (record.previousIndex == null) { - this._insertRow(record.item, currentIndex); - } else if (currentIndex == null) { - viewContainer.remove(prevIndex); - } else { - const view = >viewContainer.get(prevIndex); - viewContainer.move(view!, currentIndex); - } - }); + + changes.forEachOperation((record: IterableChangeRecord>, + prevIndex: number | null, + currentIndex: number | null) => { + if (record.previousIndex == null) { + this._insertRow(record.item, currentIndex!); + } else if (currentIndex == null) { + viewContainer.remove(prevIndex!); + } else { + const view = >viewContainer.get(prevIndex!); + viewContainer.move(view!, currentIndex); + } + }); // Update the meta context of a row's context data (index, count, first, last, ...) this._updateRowIndexContext(); diff --git a/src/cdk/text-field/autofill.ts b/src/cdk/text-field/autofill.ts index 626204631c44..84316f0a721b 100644 --- a/src/cdk/text-field/autofill.ts +++ b/src/cdk/text-field/autofill.ts @@ -79,7 +79,7 @@ export class AutofillMonitor implements OnDestroy { const result = new Subject(); const cssClass = 'cdk-text-field-autofilled'; - const listener = (event: AnimationEvent) => { + const listener = ((event: AnimationEvent) => { // Animation events fire on initial element render, we check for the presence of the autofill // CSS class to make sure this is a real change in state, not just the initial render before // we fire off events. @@ -92,7 +92,7 @@ export class AutofillMonitor implements OnDestroy { element.classList.remove(cssClass); this._ngZone.run(() => result.next({target: event.target as Element, isAutofilled: false})); } - }; + }) as EventListenerOrEventListenerObject; this._ngZone.runOutsideAngular(() => { element.addEventListener('animationstart', listener, listenerOptions); diff --git a/src/cdk/tree/control/nested-tree-control.ts b/src/cdk/tree/control/nested-tree-control.ts index 750aacb34ecf..94692cdd6dfe 100644 --- a/src/cdk/tree/control/nested-tree-control.ts +++ b/src/cdk/tree/control/nested-tree-control.ts @@ -25,7 +25,7 @@ export class NestedTreeControl extends BaseTreeControl { */ expandAll(): void { this.expansionModel.clear(); - const allNodes = this.dataNodes.reduce((accumulator, dataNode) => + const allNodes = this.dataNodes.reduce((accumulator: T[], dataNode) => [...accumulator, ...this.getDescendants(dataNode), dataNode], []); this.expansionModel.select(...allNodes); } diff --git a/src/cdk/tree/tree.ts b/src/cdk/tree/tree.ts index fe7b08864103..69cf6cfed67c 100644 --- a/src/cdk/tree/tree.ts +++ b/src/cdk/tree/tree.ts @@ -210,15 +210,16 @@ export class CdkTree const changes = dataDiffer.diff(data); if (!changes) { return; } - changes.forEachOperation( - (item: IterableChangeRecord, adjustedPreviousIndex: number, currentIndex: number) => { + changes.forEachOperation((item: IterableChangeRecord, + adjustedPreviousIndex: number | null, + currentIndex: number | null) => { if (item.previousIndex == null) { - this.insertNode(data[currentIndex], currentIndex, viewContainer, parentData); + this.insertNode(data[currentIndex!], currentIndex!, viewContainer, parentData); } else if (currentIndex == null) { - viewContainer.remove(adjustedPreviousIndex); + viewContainer.remove(adjustedPreviousIndex!); this._levels.delete(item.item); } else { - const view = viewContainer.get(adjustedPreviousIndex); + const view = viewContainer.get(adjustedPreviousIndex!); viewContainer.move(view!, currentIndex); } }); @@ -295,7 +296,7 @@ export class CdkTreeNode implements FocusableOption, OnDestroy { * The most recently created `CdkTreeNode`. We save it in static variable so we can retrieve it * in `CdkTree` and set the data to it. */ - static mostRecentTreeNode: CdkTreeNode<{}> | null = null; + static mostRecentTreeNode: CdkTreeNode | null = null; /** Subject that emits when the component has been destroyed. */ protected _destroyed = new Subject(); diff --git a/src/cdk/tsconfig-build.json b/src/cdk/tsconfig-build.json index 2bcf7920b168..225a71beced1 100644 --- a/src/cdk/tsconfig-build.json +++ b/src/cdk/tsconfig-build.json @@ -7,6 +7,7 @@ "experimentalDecorators": true, "noUnusedParameters": true, "strictNullChecks": true, + "strictFunctionTypes": true, "importHelpers": true, "newLine": "lf", "module": "es2015", diff --git a/src/demo-app/tsconfig-aot.json b/src/demo-app/tsconfig-aot.json index 09882d5a919f..8ecd826b8a57 100644 --- a/src/demo-app/tsconfig-aot.json +++ b/src/demo-app/tsconfig-aot.json @@ -8,6 +8,7 @@ "experimentalDecorators": true, "noUnusedParameters": true, "strictNullChecks": true, + "strictFunctionTypes": true, "outDir": "../../dist/packages/demo-app", "rootDirs": [ ".", diff --git a/src/demo-app/tsconfig-build.json b/src/demo-app/tsconfig-build.json index b6f0964c061f..7c0cbee51bac 100644 --- a/src/demo-app/tsconfig-build.json +++ b/src/demo-app/tsconfig-build.json @@ -9,6 +9,7 @@ "experimentalDecorators": true, "noUnusedParameters": true, "strictNullChecks": true, + "strictFunctionTypes": true, "lib": ["es6", "es2015", "dom"], "skipLibCheck": true, "module": "commonjs", diff --git a/src/e2e-app/tsconfig-build.json b/src/e2e-app/tsconfig-build.json index 6bf1c2e84f7d..eee34da736d0 100644 --- a/src/e2e-app/tsconfig-build.json +++ b/src/e2e-app/tsconfig-build.json @@ -9,6 +9,7 @@ // Don't use strict nulls for the e2e-app because the material-examples are not // strict-null compliant. "strictNullChecks": false, + "strictFunctionTypes": true, "lib": ["es6", "es2015", "dom"], "module": "commonjs", "moduleResolution": "node", diff --git a/src/lib/autocomplete/autocomplete-trigger.ts b/src/lib/autocomplete/autocomplete-trigger.ts index e71c463994e0..9e39fb16b74c 100644 --- a/src/lib/autocomplete/autocomplete-trigger.ts +++ b/src/lib/autocomplete/autocomplete-trigger.ts @@ -319,10 +319,10 @@ export class MatAutocompleteTrigger implements ControlValueAccessor, OnDestroy { } return merge( - fromEvent(this._document, 'click'), - fromEvent(this._document, 'touchend') + fromEvent(this._document, 'click'), + fromEvent(this._document, 'touchend') ) - .pipe(filter((event: MouseEvent | TouchEvent) => { + .pipe(filter(event => { const clickTarget = event.target as HTMLElement; const formField = this._formField ? this._formField._elementRef.nativeElement : null; diff --git a/src/lib/chips/chip-list.spec.ts b/src/lib/chips/chip-list.spec.ts index da3239147f63..02eceb38e0fb 100644 --- a/src/lib/chips/chip-list.spec.ts +++ b/src/lib/chips/chip-list.spec.ts @@ -996,10 +996,11 @@ describe('MatChipList', () => { it('should keep focus on the input after adding the first chip', fakeAsync(() => { const nativeInput = fixture.nativeElement.querySelector('input'); - const chipEls = Array.from(fixture.nativeElement.querySelectorAll('.mat-chip')).reverse(); + const chipEls = Array.from( + fixture.nativeElement.querySelectorAll('.mat-chip')).reverse(); // Remove the chips via backspace to simulate the user removing them. - chipEls.forEach((chip: HTMLElement) => { + chipEls.forEach(chip => { chip.focus(); dispatchKeyboardEvent(chip, 'keydown', BACKSPACE); fixture.detectChanges(); diff --git a/src/lib/expansion/expansion-panel.ts b/src/lib/expansion/expansion-panel.ts index f435e73c08e1..6df6234ce013 100644 --- a/src/lib/expansion/expansion-panel.ts +++ b/src/lib/expansion/expansion-panel.ts @@ -147,7 +147,7 @@ export class MatExpansionPanel extends CdkAccordionItem implements AfterContentI if (this._lazyContent) { // Render the content as soon as the panel becomes open. this.opened.pipe( - startWith(null!), + startWith(null!), filter(() => this.expanded && !this._portal), take(1) ).subscribe(() => { diff --git a/src/lib/form-field/form-field.ts b/src/lib/form-field/form-field.ts index 16f3dd23d8c4..484f330325a3 100644 --- a/src/lib/form-field/form-field.ts +++ b/src/lib/form-field/form-field.ts @@ -278,7 +278,7 @@ export class MatFormField extends _MatFormFieldMixinBase } // Subscribe to changes in the child control state in order to update the form field UI. - this._control.stateChanges.pipe(startWith(null!)).subscribe(() => { + this._control.stateChanges.pipe(startWith(null!)).subscribe(() => { this._validatePlaceholders(); this._syncDescribedByIds(); this._changeDetectorRef.markForCheck(); diff --git a/src/lib/menu/menu.spec.ts b/src/lib/menu/menu.spec.ts index 4b10cf88d178..6a85ce48baf4 100644 --- a/src/lib/menu/menu.spec.ts +++ b/src/lib/menu/menu.spec.ts @@ -1775,7 +1775,7 @@ class CustomMenuPanel implements MatMenuPanel { parentMenu: MatMenuPanel; @ViewChild(TemplateRef) templateRef: TemplateRef; - @Output() close = new EventEmitter(); + @Output() close = new EventEmitter(); focusFirstItem = () => {}; resetActiveItem = () => {}; setPositionClasses = () => {}; diff --git a/src/lib/schematics/utils/ast.ts b/src/lib/schematics/utils/ast.ts index 2b57f3d5fd34..f95424846d12 100644 --- a/src/lib/schematics/utils/ast.ts +++ b/src/lib/schematics/utils/ast.ts @@ -48,7 +48,9 @@ export function addModuleImportToModule( throw new SchematicsException(`Module not found: ${modulePath}`); } - const changes = addImportToModule(moduleSource, modulePath, moduleName, src); + // TODO: cast to any, because the types for ts.SourceFile + // aren't compatible with `strictFunctionTypes`. + const changes = addImportToModule(moduleSource as any, modulePath, moduleName, src); const recorder = host.beginUpdate(modulePath); changes.forEach((change) => { diff --git a/src/lib/schematics/utils/build-component.ts b/src/lib/schematics/utils/build-component.ts index f9fa09f71dd6..5ada72e87e1b 100644 --- a/src/lib/schematics/utils/build-component.ts +++ b/src/lib/schematics/utils/build-component.ts @@ -66,7 +66,10 @@ function addDeclarationToNgModule(options: ComponentOptions): Rule { + '.component'; const relativePath = buildRelativePath(modulePath, componentPath); const classifiedName = strings.classify(`${options.name}Component`); - const declarationChanges = addDeclarationToModule(source, + + // TODO: cast to any, because the types for ts.SourceFile + // aren't compatible with `strictFunctionTypes`. + const declarationChanges = addDeclarationToModule(source as any, modulePath, classifiedName, relativePath); @@ -82,9 +85,11 @@ function addDeclarationToNgModule(options: ComponentOptions): Rule { if (options.export) { // Need to refresh the AST because we overwrote the file in the host. const source = readIntoSourceFile(host, modulePath); - const exportRecorder = host.beginUpdate(modulePath); - const exportChanges = addExportToModule(source, modulePath, + + // TODO: cast to any, because the types for ts.SourceFile + // aren't compatible with `strictFunctionTypes`. + const exportChanges = addExportToModule(source as any, modulePath, strings.classify(`${options.name}Component`), relativePath); @@ -99,10 +104,12 @@ function addDeclarationToNgModule(options: ComponentOptions): Rule { if (options.entryComponent) { // Need to refresh the AST because we overwrote the file in the host. const source = readIntoSourceFile(host, modulePath); - const entryComponentRecorder = host.beginUpdate(modulePath); + + // TODO: cast to any, because the types for ts.SourceFile + // aren't compatible with `strictFunctionTypes`. const entryComponentChanges = addEntryComponentToModule( - source, modulePath, + source as any, modulePath, strings.classify(`${options.name}Component`), relativePath); diff --git a/src/lib/select/select.ts b/src/lib/select/select.ts index 775569e47062..b786af237e53 100644 --- a/src/lib/select/select.ts +++ b/src/lib/select/select.ts @@ -998,7 +998,7 @@ export class MatSelect extends _MatSelectMixinBase implements AfterContentInit, /** Gets the index of the provided option in the option list. */ private _getOptionIndex(option: MatOption): number | undefined { - return this.options.reduce((result: number, current: MatOption, index: number) => { + return this.options.reduce((result: number | undefined, current: MatOption, index: number) => { return result === undefined ? (option === current ? index : undefined) : result; }, undefined); } diff --git a/src/lib/sidenav/drawer.ts b/src/lib/sidenav/drawer.ts index eaf996eef1d7..e83f3ffc9e50 100644 --- a/src/lib/sidenav/drawer.ts +++ b/src/lib/sidenav/drawer.ts @@ -248,9 +248,9 @@ export class MatDrawer implements AfterContentInit, AfterContentChecked, OnDestr * and we don't have close disabled. */ this._ngZone.runOutsideAngular(() => { - fromEvent(this._elementRef.nativeElement, 'keydown').pipe( - filter((event: KeyboardEvent) => event.keyCode === ESCAPE && !this.disableClose) - ).subscribe((event) => this._ngZone.run(() => { + fromEvent(this._elementRef.nativeElement, 'keydown').pipe( + filter(event => event.keyCode === ESCAPE && !this.disableClose) + ).subscribe(event => this._ngZone.run(() => { this.close(); event.stopPropagation(); })); diff --git a/src/lib/tsconfig-build.json b/src/lib/tsconfig-build.json index 29bf63cc4df1..4c8db831249b 100644 --- a/src/lib/tsconfig-build.json +++ b/src/lib/tsconfig-build.json @@ -6,6 +6,7 @@ "experimentalDecorators": true, "noUnusedParameters": true, "strictNullChecks": true, + "strictFunctionTypes": true, "importHelpers": true, "newLine": "lf", "module": "es2015", diff --git a/src/material-examples/tsconfig-build.json b/src/material-examples/tsconfig-build.json index 3cc1a476ca51..8c3ce3b2747d 100644 --- a/src/material-examples/tsconfig-build.json +++ b/src/material-examples/tsconfig-build.json @@ -9,6 +9,7 @@ "experimentalDecorators": true, "noUnusedParameters": true, "strictNullChecks": true, + "strictFunctionTypes": true, "importHelpers": true, "module": "es2015", "moduleResolution": "node", diff --git a/src/material-experimental/tsconfig-build.json b/src/material-experimental/tsconfig-build.json index 918b2c8efb39..c022e3f7e963 100644 --- a/src/material-experimental/tsconfig-build.json +++ b/src/material-experimental/tsconfig-build.json @@ -7,6 +7,7 @@ "experimentalDecorators": true, "noUnusedParameters": true, "strictNullChecks": true, + "strictFunctionTypes": true, "importHelpers": true, "newLine": "lf", "module": "es2015", diff --git a/src/material-moment-adapter/tsconfig-build.json b/src/material-moment-adapter/tsconfig-build.json index 7615af7048d0..7d1ddb66e681 100644 --- a/src/material-moment-adapter/tsconfig-build.json +++ b/src/material-moment-adapter/tsconfig-build.json @@ -9,6 +9,7 @@ "experimentalDecorators": true, "noUnusedParameters": true, "strictNullChecks": true, + "strictFunctionTypes": true, "importHelpers": true, "newLine": "lf", "module": "es2015", diff --git a/src/universal-app/tsconfig-build.json b/src/universal-app/tsconfig-build.json index f46f43952fed..02997d9f473d 100644 --- a/src/universal-app/tsconfig-build.json +++ b/src/universal-app/tsconfig-build.json @@ -7,6 +7,7 @@ "experimentalDecorators": true, "noUnusedParameters": true, "strictNullChecks": true, + "strictFunctionTypes": true, "module": "commonjs", "moduleResolution": "node", "outDir": ".", diff --git a/src/universal-app/tsconfig-prerender.json b/src/universal-app/tsconfig-prerender.json index 60998deea014..94b225fc3396 100644 --- a/src/universal-app/tsconfig-prerender.json +++ b/src/universal-app/tsconfig-prerender.json @@ -6,6 +6,7 @@ "experimentalDecorators": true, "noUnusedParameters": true, "strictNullChecks": true, + "strictFunctionTypes": true, "module": "commonjs", "moduleResolution": "node", "outDir": ".", diff --git a/tools/dashboard/functions/tsconfig.json b/tools/dashboard/functions/tsconfig.json index c7c8c3f36f9b..7869e33a5088 100644 --- a/tools/dashboard/functions/tsconfig.json +++ b/tools/dashboard/functions/tsconfig.json @@ -6,6 +6,7 @@ "noEmitOnError": true, "noImplicitAny": true, "strictNullChecks": true, + "strictFunctionTypes": true, "sourceMap": true, "target": "es5", "baseUrl": "", diff --git a/tools/dgeni/common/directive-metadata.ts b/tools/dgeni/common/directive-metadata.ts index 925e206334b7..5748b1beb569 100644 --- a/tools/dgeni/common/directive-metadata.ts +++ b/tools/dgeni/common/directive-metadata.ts @@ -4,7 +4,9 @@ import { CallExpression, ObjectLiteralExpression, PropertyAssignment, - StringLiteral, SyntaxKind + StringLiteral, + SyntaxKind, + NodeArray, } from 'typescript'; /** @@ -53,12 +55,11 @@ export function getDirectiveMetadata(classDoc: CategorizedClassDoc): Map(); - objectExpression.properties.forEach((prop: PropertyAssignment) => { - + (objectExpression.properties as NodeArray).forEach(prop => { // Support ArrayLiteralExpression assignments in the directive metadata. if (prop.initializer.kind === SyntaxKind.ArrayLiteralExpression) { const arrayData = (prop.initializer as ArrayLiteralExpression).elements - .map((literal: StringLiteral) => literal.text); + .map(literal => (literal as StringLiteral).text); resultMetadata.set(prop.name.getText(), arrayData); } diff --git a/tools/dgeni/common/sort-members.ts b/tools/dgeni/common/sort-members.ts index dffd27a754f0..805254125493 100644 --- a/tools/dgeni/common/sort-members.ts +++ b/tools/dgeni/common/sort-members.ts @@ -1,10 +1,32 @@ import {CategorizedMethodMemberDoc, CategorizedPropertyMemberDoc} from './dgeni-definitions'; -/** Combined type for a categorized method member document. */ -type CategorizedMemberDoc = CategorizedMethodMemberDoc & CategorizedPropertyMemberDoc; +/** Sorts method members by deprecated status, member decorator, and name. */ +export function sortCategorizedMethodMembers(docA: CategorizedMethodMemberDoc, + docB: CategorizedMethodMemberDoc) { + // Sort deprecated docs to the end + if (!docA.isDeprecated && docB.isDeprecated) { + return -1; + } + + if (docA.isDeprecated && !docB.isDeprecated) { + return 1; + } + + // Break ties by sorting alphabetically on the name + if (docA.name < docB.name) { + return -1; + } + + if (docA.name > docB.name) { + return 1; + } + + return 0; +} -/** Sorts members by deprecated status, member decorator, and name. */ -export function sortCategorizedMembers(docA: CategorizedMemberDoc, docB: CategorizedMemberDoc) { +/** Sorts property members by deprecated status, member decorator, and name. */ +export function sortCategorizedPropertyMembers(docA: CategorizedPropertyMemberDoc, + docB: CategorizedPropertyMemberDoc) { // Sort deprecated docs to the end if (!docA.isDeprecated && docB.isDeprecated) { return -1; diff --git a/tools/dgeni/processors/categorizer.ts b/tools/dgeni/processors/categorizer.ts index 1c1f7fe49200..fa091661f521 100644 --- a/tools/dgeni/processors/categorizer.ts +++ b/tools/dgeni/processors/categorizer.ts @@ -1,5 +1,5 @@ import {DocCollection, Processor} from 'dgeni'; -import {MethodMemberDoc} from 'dgeni-packages/typescript/api-doc-types/MethodMemberDoc'; +import {MemberDoc} from 'dgeni-packages/typescript/api-doc-types/MemberDoc'; import { decorateDeprecatedDoc, getDirectiveSelectors, @@ -19,7 +19,7 @@ import { import {getDirectiveMetadata} from '../common/directive-metadata'; import {normalizeFunctionParameters} from '../common/normalize-function-parameters'; import {getInputBindingData, getOutputBindingData} from '../common/property-bindings'; -import {sortCategorizedMembers} from '../common/sort-members'; +import {sortCategorizedMethodMembers, sortCategorizedPropertyMembers} from '../common/sort-members'; /** @@ -71,8 +71,8 @@ export class Categorizer implements Processor { decorateDeprecatedDoc(classLikeDoc); // Sort members - classLikeDoc.methods.sort(sortCategorizedMembers); - classLikeDoc.properties.sort(sortCategorizedMembers); + classLikeDoc.methods.sort(sortCategorizedMethodMembers); + classLikeDoc.properties.sort(sortCategorizedPropertyMembers); } /** @@ -162,6 +162,6 @@ export class Categorizer implements Processor { } /** Filters any duplicate classDoc members from an array */ -function filterDuplicateMembers(item: MethodMemberDoc, _index: number, array: MethodMemberDoc[]) { +function filterDuplicateMembers(item: MemberDoc, _index: number, array: MemberDoc[]) { return array.filter((memberDoc) => memberDoc.name === item.name)[0] === item; } diff --git a/tools/dgeni/tsconfig.json b/tools/dgeni/tsconfig.json index 011fbba8d86c..594fe954aaf7 100644 --- a/tools/dgeni/tsconfig.json +++ b/tools/dgeni/tsconfig.json @@ -7,6 +7,7 @@ "moduleResolution": "node", "outDir": "../../dist/tools/dgeni", "strictNullChecks": true, + "strictFunctionTypes": true, "noEmitOnError": true, "noImplicitAny": true, "target": "es5", diff --git a/tools/gulp/tasks/e2e.ts b/tools/gulp/tasks/e2e.ts index fe5c8de86985..061a49b30897 100644 --- a/tools/gulp/tasks/e2e.ts +++ b/tools/gulp/tasks/e2e.ts @@ -1,8 +1,9 @@ -import {task} from 'gulp'; +import {task, src, dest} from 'gulp'; import {join} from 'path'; import {ngcBuildTask, copyTask, execNodeTask, serverTask} from '../util/task_helpers'; import {copySync} from 'fs-extra'; import {buildConfig, sequenceTask, triggerLivereload, watchFiles} from 'material2-build-tools'; +import {sync as globSync} from 'glob'; // There are no type definitions available for these imports. const gulpConnect = require('gulp-connect'); @@ -68,7 +69,7 @@ task('e2e-app:build', sequenceTask( 'material-moment-adapter:build-release', 'material-examples:build-release' ], - ['e2e-app:copy-release', 'e2e-app:copy-assets'], + ['e2e-app:copy-release', 'e2e-app:copy-typings', 'e2e-app:copy-assets'], 'e2e-app:build-ts' )); @@ -115,3 +116,16 @@ task('e2e-app:copy-release', () => { copySync(join(releasesDir, 'material-moment-adapter'), join(outDir, 'material-moment-adapter')); }); +// Copy the core declaration files next to the declarations of each module. This is a workaround +// for an issue in TypeScript 2.9 where the generated declaration files have wrong import paths. +// We should be able to remove this task once we update to TypeScript 3.0. +// See: https://github.com/Microsoft/TypeScript/issues/25511. +task('e2e-app:copy-typings', () => { + const stream = src(join(outDir, 'material/core/typings/*/**')); + + globSync(join(outDir, 'material/!(core)/')).forEach(directory => { + stream.pipe(dest(join(directory, 'core'))); + }); + + return stream; +}); diff --git a/tools/gulp/tsconfig.json b/tools/gulp/tsconfig.json index 0387f0388d56..96ae0329ca1e 100644 --- a/tools/gulp/tsconfig.json +++ b/tools/gulp/tsconfig.json @@ -7,6 +7,7 @@ "moduleResolution": "node", "outDir": "../../dist/tools/gulp", "strictNullChecks": true, + "strictFunctionTypes": true, "noEmitOnError": true, "noImplicitAny": true, "target": "es5", diff --git a/tsconfig.json b/tsconfig.json index 7b16aefa0d3a..25340ec4ed32 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -8,6 +8,7 @@ "moduleResolution": "node", "noUnusedParameters": true, "strictNullChecks": true, + "strictFunctionTypes": true, "skipLibCheck": true, "target": "es2015", "lib": ["es5", "es2015", "dom"],