From ed74f92e2ca42f37530c8bb2ac3790877e83000b Mon Sep 17 00:00:00 2001 From: Filipe Silva Date: Tue, 12 Mar 2019 17:03:50 +0000 Subject: [PATCH 1/2] test: add integration test for side effects This new tests keeps track of the known side effects for Angular ES modules. --- integration/side-effects/.gitignore | 3 + integration/side-effects/README.md | 9 + integration/side-effects/package.json | 19 + integration/side-effects/side-effects.json | 132 ++++++ .../snapshots/animations-browser/esm2015.js | 14 + .../snapshots/animations-browser/esm5.js | 16 + .../snapshots/animations/esm2015.js | 1 + .../side-effects/snapshots/animations/esm5.js | 1 + .../side-effects/snapshots/common/esm2015.js | 1 + .../side-effects/snapshots/common/esm5.js | 3 + .../side-effects/snapshots/core/esm2015.js | 151 +++++++ .../side-effects/snapshots/core/esm5.js | 17 + .../snapshots/elements/esm2015.js | 9 + .../side-effects/snapshots/elements/esm5.js | 11 + .../side-effects/snapshots/forms/esm2015.js | 7 + .../side-effects/snapshots/forms/esm5.js | 9 + .../snapshots/platform-browser/esm2015.js | 17 + .../snapshots/platform-browser/esm5.js | 19 + .../side-effects/snapshots/router/esm2015.js | 9 + .../side-effects/snapshots/router/esm5.js | 11 + integration/side-effects/yarn.lock | 375 ++++++++++++++++++ package.json | 1 + yarn.lock | 151 ++++++- 23 files changed, 984 insertions(+), 2 deletions(-) create mode 100644 integration/side-effects/.gitignore create mode 100644 integration/side-effects/README.md create mode 100644 integration/side-effects/package.json create mode 100644 integration/side-effects/side-effects.json create mode 100644 integration/side-effects/snapshots/animations-browser/esm2015.js create mode 100644 integration/side-effects/snapshots/animations-browser/esm5.js create mode 100644 integration/side-effects/snapshots/animations/esm2015.js create mode 100644 integration/side-effects/snapshots/animations/esm5.js create mode 100644 integration/side-effects/snapshots/common/esm2015.js create mode 100644 integration/side-effects/snapshots/common/esm5.js create mode 100644 integration/side-effects/snapshots/core/esm2015.js create mode 100644 integration/side-effects/snapshots/core/esm5.js create mode 100644 integration/side-effects/snapshots/elements/esm2015.js create mode 100644 integration/side-effects/snapshots/elements/esm5.js create mode 100644 integration/side-effects/snapshots/forms/esm2015.js create mode 100644 integration/side-effects/snapshots/forms/esm5.js create mode 100644 integration/side-effects/snapshots/platform-browser/esm2015.js create mode 100644 integration/side-effects/snapshots/platform-browser/esm5.js create mode 100644 integration/side-effects/snapshots/router/esm2015.js create mode 100644 integration/side-effects/snapshots/router/esm5.js create mode 100644 integration/side-effects/yarn.lock diff --git a/integration/side-effects/.gitignore b/integration/side-effects/.gitignore new file mode 100644 index 0000000000000..0ec6ec881c4f7 --- /dev/null +++ b/integration/side-effects/.gitignore @@ -0,0 +1,3 @@ +# The check-side-effects package generates and deletes this file. +# If the process is killed, it will be left behind. +check-side-effects.tmp-input.js diff --git a/integration/side-effects/README.md b/integration/side-effects/README.md new file mode 100644 index 0000000000000..b9a8146eaaf54 --- /dev/null +++ b/integration/side-effects/README.md @@ -0,0 +1,9 @@ +This test checks if the side effects for loading Angular packages have changed using . + +Running `yarn test` will check all ES modules listed in `side-effects.json`. + +Running `yarn update` will update any changed side effects. + +To add a new ES module to this test, add a new entry in `side-effects.json`. + +Usually the ESM and FESM should have the same output, but retained objects that were renamed during the flattening step will leave behind a different name. diff --git a/integration/side-effects/package.json b/integration/side-effects/package.json new file mode 100644 index 0000000000000..d4d211ee37b63 --- /dev/null +++ b/integration/side-effects/package.json @@ -0,0 +1,19 @@ +{ + "name": "angular-side-effects", + "version": "0.0.0", + "license": "MIT", + "scripts": { + "test": "check-side-effects --test side-effects.json --pure-getters", + "update": "yarn test --update" + }, + "dependencies": { + "@angular/animations": "file:../../dist/packages-dist/animations", + "@angular/common": "file:../../dist/packages-dist/common", + "@angular/core": "file:../../dist/packages-dist/core", + "@angular/elements": "file:../../dist/packages-dist/elements", + "@angular/forms": "file:../../dist/packages-dist/forms", + "@angular/platform-browser": "file:../../dist/packages-dist/platform-browser", + "@angular/router": "file:../../dist/packages-dist/router", + "check-side-effects": "file:../../node_modules/check-side-effects" + } +} diff --git a/integration/side-effects/side-effects.json b/integration/side-effects/side-effects.json new file mode 100644 index 0000000000000..8ea44701f2b27 --- /dev/null +++ b/integration/side-effects/side-effects.json @@ -0,0 +1,132 @@ +{ + "tests": [ + { + "esModules": "./node_modules/@angular/animations/esm5/animations.js", + "expectedOutput": "./snapshots/animations/esm5.js" + }, + { + "esModules": "./node_modules/@angular/animations/fesm5/animations.js", + "expectedOutput": "./snapshots/animations/esm5.js" + }, + { + "esModules": "./node_modules/@angular/animations/esm2015/animations.js", + "expectedOutput": "./snapshots/animations/esm2015.js" + }, + { + "esModules": "./node_modules/@angular/animations/fesm2015/animations.js", + "expectedOutput": "./snapshots/animations/esm2015.js" + }, + { + "esModules": "./node_modules/@angular/animations/esm5/browser/browser.js", + "expectedOutput": "./snapshots/animations-browser/esm5.js" + }, + { + "esModules": "./node_modules/@angular/animations/fesm5/browser.js", + "expectedOutput": "./snapshots/animations-browser/esm5.js" + }, + { + "esModules": "./node_modules/@angular/animations/esm2015/browser/browser.js", + "expectedOutput": "./snapshots/animations-browser/esm2015.js" + }, + { + "esModules": "./node_modules/@angular/animations/fesm2015/browser.js", + "expectedOutput": "./snapshots/animations-browser/esm2015.js" + }, + { + "esModules": "./node_modules/@angular/common/esm5/common.js", + "expectedOutput": "./snapshots/common/esm5.js" + }, + { + "esModules": "./node_modules/@angular/common/fesm5/common.js", + "expectedOutput": "./snapshots/common/esm5.js" + }, + { + "esModules": "./node_modules/@angular/common/esm2015/common.js", + "expectedOutput": "./snapshots/common/esm2015.js" + }, + { + "esModules": "./node_modules/@angular/common/fesm2015/common.js", + "expectedOutput": "./snapshots/common/esm2015.js" + }, + { + "esModules": "./node_modules/@angular/core/esm5/core.js", + "expectedOutput": "./snapshots/core/esm5.js" + }, + { + "esModules": "./node_modules/@angular/core/fesm5/core.js", + "expectedOutput": "./snapshots/core/esm5.js" + }, + { + "esModules": "./node_modules/@angular/core/esm2015/core.js", + "expectedOutput": "./snapshots/core/esm2015.js" + }, + { + "esModules": "./node_modules/@angular/core/fesm2015/core.js", + "expectedOutput": "./snapshots/core/esm2015.js" + }, + { + "esModules": "./node_modules/@angular/elements/esm5/elements.js", + "expectedOutput": "./snapshots/elements/esm5.js" + }, + { + "esModules": "./node_modules/@angular/elements/fesm5/elements.js", + "expectedOutput": "./snapshots/elements/esm5.js" + }, + { + "esModules": "./node_modules/@angular/elements/esm2015/elements.js", + "expectedOutput": "./snapshots/elements/esm2015.js" + }, + { + "esModules": "./node_modules/@angular/elements/fesm2015/elements.js", + "expectedOutput": "./snapshots/elements/esm2015.js" + }, + { + "esModules": "./node_modules/@angular/forms/esm5/forms.js", + "expectedOutput": "./snapshots/forms/esm5.js" + }, + { + "esModules": "./node_modules/@angular/forms/fesm5/forms.js", + "expectedOutput": "./snapshots/forms/esm5.js" + }, + { + "esModules": "./node_modules/@angular/forms/esm2015/forms.js", + "expectedOutput": "./snapshots/forms/esm2015.js" + }, + { + "esModules": "./node_modules/@angular/forms/fesm2015/forms.js", + "expectedOutput": "./snapshots/forms/esm2015.js" + }, + { + "esModules": "./node_modules/@angular/platform-browser/esm5/platform-browser.js", + "expectedOutput": "./snapshots/platform-browser/esm5.js" + }, + { + "esModules": "./node_modules/@angular/platform-browser/fesm5/platform-browser.js", + "expectedOutput": "./snapshots/platform-browser/esm5.js" + }, + { + "esModules": "./node_modules/@angular/platform-browser/esm2015/platform-browser.js", + "expectedOutput": "./snapshots/platform-browser/esm2015.js" + }, + { + "esModules": "./node_modules/@angular/platform-browser/fesm2015/platform-browser.js", + "expectedOutput": "./snapshots/platform-browser/esm2015.js" + }, + { + "esModules": "./node_modules/@angular/router/esm5/router.js", + "expectedOutput": "./snapshots/router/esm5.js" + }, + { + "esModules": "./node_modules/@angular/router/fesm5/router.js", + "expectedOutput": "./snapshots/router/esm5.js" + }, + { + "esModules": "./node_modules/@angular/router/esm2015/router.js", + "expectedOutput": "./snapshots/router/esm2015.js" + }, + { + "esModules": "./node_modules/@angular/router/fesm2015/router.js", + "expectedOutput": "./snapshots/router/esm2015.js" + } + ] +} diff --git a/integration/side-effects/snapshots/animations-browser/esm2015.js b/integration/side-effects/snapshots/animations-browser/esm2015.js new file mode 100644 index 0000000000000..780ec46ce9af9 --- /dev/null +++ b/integration/side-effects/snapshots/animations-browser/esm2015.js @@ -0,0 +1,14 @@ +import "@angular/animations"; + +import "@angular/core"; + +function isNode() { + return "undefined" !== typeof process; +} + +const _isNode = isNode(); + +if (_isNode || "undefined" !== typeof Element) if (_isNode || Element.prototype.matches) ; else { + const proto = Element.prototype; + const fn = proto.matchesSelector || proto.mozMatchesSelector || proto.msMatchesSelector || proto.oMatchesSelector || proto.webkitMatchesSelector; +} diff --git a/integration/side-effects/snapshots/animations-browser/esm5.js b/integration/side-effects/snapshots/animations-browser/esm5.js new file mode 100644 index 0000000000000..729322a2d502a --- /dev/null +++ b/integration/side-effects/snapshots/animations-browser/esm5.js @@ -0,0 +1,16 @@ +import "tslib"; + +import "@angular/animations"; + +import "@angular/core"; + +function isNode() { + return "undefined" !== typeof process; +} + +var _isNode = isNode(); + +if (_isNode || "undefined" !== typeof Element) if (_isNode || Element.prototype.matches) ; else { + var proto = Element.prototype; + var fn_1 = proto.matchesSelector || proto.mozMatchesSelector || proto.msMatchesSelector || proto.oMatchesSelector || proto.webkitMatchesSelector; +} diff --git a/integration/side-effects/snapshots/animations/esm2015.js b/integration/side-effects/snapshots/animations/esm2015.js new file mode 100644 index 0000000000000..8b137891791fe --- /dev/null +++ b/integration/side-effects/snapshots/animations/esm2015.js @@ -0,0 +1 @@ + diff --git a/integration/side-effects/snapshots/animations/esm5.js b/integration/side-effects/snapshots/animations/esm5.js new file mode 100644 index 0000000000000..8b137891791fe --- /dev/null +++ b/integration/side-effects/snapshots/animations/esm5.js @@ -0,0 +1 @@ + diff --git a/integration/side-effects/snapshots/common/esm2015.js b/integration/side-effects/snapshots/common/esm2015.js new file mode 100644 index 0000000000000..595d8ae0af2ae --- /dev/null +++ b/integration/side-effects/snapshots/common/esm2015.js @@ -0,0 +1 @@ +import "@angular/core"; diff --git a/integration/side-effects/snapshots/common/esm5.js b/integration/side-effects/snapshots/common/esm5.js new file mode 100644 index 0000000000000..783048bfcf7b2 --- /dev/null +++ b/integration/side-effects/snapshots/common/esm5.js @@ -0,0 +1,3 @@ +import "@angular/core"; + +import "tslib"; diff --git a/integration/side-effects/snapshots/core/esm2015.js b/integration/side-effects/snapshots/core/esm2015.js new file mode 100644 index 0000000000000..458c86764200e --- /dev/null +++ b/integration/side-effects/snapshots/core/esm2015.js @@ -0,0 +1,151 @@ +import { Subject, Subscription } from "rxjs"; + +import "rxjs/operators"; + +function getGlobal() { + const __globalThis = "undefined" !== typeof globalThis && globalThis; + const __window = "undefined" !== typeof window && window; + const __self = "undefined" !== typeof self && "undefined" !== typeof WorkerGlobalScope && self instanceof WorkerGlobalScope && self; + const __global = "undefined" !== typeof global && global; + return __globalThis || __global || __window || __self; +} + +const _global = getGlobal(); + +let _symbolIterator = null; + +function getSymbolIterator() { + if (!_symbolIterator) { + const Symbol = _global["Symbol"]; + if (Symbol && Symbol.iterator) _symbolIterator = Symbol.iterator; else { + const keys = Object.getOwnPropertyNames(Map.prototype); + for (let i = 0; i < keys.length; ++i) { + const key = keys[i]; + if ("entries" !== key && "size" !== key && Map.prototype[key] === Map.prototype["entries"]) _symbolIterator = key; + } + } + } + return _symbolIterator; +} + +if ("undefined" === typeof ngI18nClosureMode) _global["ngI18nClosureMode"] = "undefined" !== typeof goog && "function" === typeof goog.getMsg; + +function flatten(list, mapFn) { + const result = []; + let i = 0; + while (i < list.length) { + const item = list[i]; + if (Array.isArray(item)) if (item.length > 0) { + list = item.concat(list.slice(i + 1)); + i = 0; + } else i++; else { + result.push(mapFn ? mapFn(item) : item); + i++; + } + } + return result; +} + +class EventEmitter extends Subject { + constructor(isAsync = false) { + super(); + this.__isAsync = isAsync; + } + emit(value) { + super.next(value); + } + subscribe(generatorOrNext, error, complete) { + let schedulerFn; + let errorFn = err => null; + let completeFn = () => null; + if (generatorOrNext && "object" === typeof generatorOrNext) { + schedulerFn = this.__isAsync ? value => { + setTimeout(() => generatorOrNext.next(value)); + } : value => { + generatorOrNext.next(value); + }; + if (generatorOrNext.error) errorFn = this.__isAsync ? err => { + setTimeout(() => generatorOrNext.error(err)); + } : err => { + generatorOrNext.error(err); + }; + if (generatorOrNext.complete) completeFn = this.__isAsync ? () => { + setTimeout(() => generatorOrNext.complete()); + } : () => { + generatorOrNext.complete(); + }; + } else { + schedulerFn = this.__isAsync ? value => { + setTimeout(() => generatorOrNext(value)); + } : value => { + generatorOrNext(value); + }; + if (error) errorFn = this.__isAsync ? err => { + setTimeout(() => error(err)); + } : err => { + error(err); + }; + if (complete) completeFn = this.__isAsync ? () => { + setTimeout(() => complete()); + } : () => { + complete(); + }; + } + const sink = super.subscribe(schedulerFn, errorFn, completeFn); + if (generatorOrNext instanceof Subscription) generatorOrNext.add(sink); + return sink; + } +} + +class QueryList { + constructor() { + this.dirty = true; + this._results = []; + this.changes = new EventEmitter(); + this.length = 0; + } + map(fn) { + return this._results.map(fn); + } + filter(fn) { + return this._results.filter(fn); + } + find(fn) { + return this._results.find(fn); + } + reduce(fn, init) { + return this._results.reduce(fn, init); + } + forEach(fn) { + this._results.forEach(fn); + } + some(fn) { + return this._results.some(fn); + } + toArray() { + return this._results.slice(); + } + [getSymbolIterator()]() { + return this._results[getSymbolIterator()](); + } + toString() { + return this._results.toString(); + } + reset(resultsTree) { + this._results = flatten(resultsTree); + this.dirty = false; + this.length = this._results.length; + this.last = this._results[this.length - 1]; + this.first = this._results[0]; + } + notifyOnChanges() { + this.changes.emit(this); + } + setDirty() { + this.dirty = true; + } + destroy() { + this.changes.complete(); + this.changes.unsubscribe(); + } +} diff --git a/integration/side-effects/snapshots/core/esm5.js b/integration/side-effects/snapshots/core/esm5.js new file mode 100644 index 0000000000000..9f82d57120943 --- /dev/null +++ b/integration/side-effects/snapshots/core/esm5.js @@ -0,0 +1,17 @@ +import "tslib"; + +import "rxjs"; + +import "rxjs/operators"; + +function getGlobal() { + var __globalThis = "undefined" !== typeof globalThis && globalThis; + var __window = "undefined" !== typeof window && window; + var __self = "undefined" !== typeof self && "undefined" !== typeof WorkerGlobalScope && self instanceof WorkerGlobalScope && self; + var __global = "undefined" !== typeof global && global; + return __globalThis || __global || __window || __self; +} + +var _global = getGlobal(); + +if ("undefined" === typeof ngI18nClosureMode) _global["ngI18nClosureMode"] = "undefined" !== typeof goog && "function" === typeof goog.getMsg; diff --git a/integration/side-effects/snapshots/elements/esm2015.js b/integration/side-effects/snapshots/elements/esm2015.js new file mode 100644 index 0000000000000..0e8151832e5a8 --- /dev/null +++ b/integration/side-effects/snapshots/elements/esm2015.js @@ -0,0 +1,9 @@ +import "@angular/core"; + +import "rxjs"; + +import "rxjs/operators"; + +const elProto = Element.prototype; + +const matches = elProto.matches || elProto.matchesSelector || elProto.mozMatchesSelector || elProto.msMatchesSelector || elProto.oMatchesSelector || elProto.webkitMatchesSelector; diff --git a/integration/side-effects/snapshots/elements/esm5.js b/integration/side-effects/snapshots/elements/esm5.js new file mode 100644 index 0000000000000..07189e8bada0e --- /dev/null +++ b/integration/side-effects/snapshots/elements/esm5.js @@ -0,0 +1,11 @@ +import "tslib"; + +import "@angular/core"; + +import "rxjs"; + +import "rxjs/operators"; + +var elProto = Element.prototype; + +var matches = elProto.matches || elProto.matchesSelector || elProto.mozMatchesSelector || elProto.msMatchesSelector || elProto.oMatchesSelector || elProto.webkitMatchesSelector; diff --git a/integration/side-effects/snapshots/forms/esm2015.js b/integration/side-effects/snapshots/forms/esm2015.js new file mode 100644 index 0000000000000..7b26ecaa69ea6 --- /dev/null +++ b/integration/side-effects/snapshots/forms/esm2015.js @@ -0,0 +1,7 @@ +import "@angular/core"; + +import "@angular/platform-browser"; + +import "rxjs"; + +import "rxjs/operators"; diff --git a/integration/side-effects/snapshots/forms/esm5.js b/integration/side-effects/snapshots/forms/esm5.js new file mode 100644 index 0000000000000..70eeb745ff8b6 --- /dev/null +++ b/integration/side-effects/snapshots/forms/esm5.js @@ -0,0 +1,9 @@ +import "tslib"; + +import "@angular/core"; + +import "@angular/platform-browser"; + +import "rxjs"; + +import "rxjs/operators"; diff --git a/integration/side-effects/snapshots/platform-browser/esm2015.js b/integration/side-effects/snapshots/platform-browser/esm2015.js new file mode 100644 index 0000000000000..62cb36ba1424a --- /dev/null +++ b/integration/side-effects/snapshots/platform-browser/esm2015.js @@ -0,0 +1,17 @@ +import "@angular/common"; + +import { ɵglobal } from "@angular/core"; + +let nodeContains; + +if (ɵglobal["Node"]) nodeContains = ɵglobal["Node"].prototype.contains || function(node) { + return !!(16 & this.compareDocumentPosition(node)); +}; + +const ɵ0 = function(v) { + return "__zone_symbol__" + v; +}; + +const __symbol__ = "undefined" !== typeof Zone && Zone["__symbol__"] || ɵ0; + +const blackListedEvents = "undefined" !== typeof Zone && Zone[__symbol__("BLACK_LISTED_EVENTS")]; diff --git a/integration/side-effects/snapshots/platform-browser/esm5.js b/integration/side-effects/snapshots/platform-browser/esm5.js new file mode 100644 index 0000000000000..3608753e37220 --- /dev/null +++ b/integration/side-effects/snapshots/platform-browser/esm5.js @@ -0,0 +1,19 @@ +import "tslib"; + +import "@angular/common"; + +import { ɵglobal } from "@angular/core"; + +var nodeContains; + +if (ɵglobal["Node"]) nodeContains = ɵglobal["Node"].prototype.contains || function(node) { + return !!(16 & this.compareDocumentPosition(node)); +}; + +var ɵ0 = function(v) { + return "__zone_symbol__" + v; +}; + +var __symbol__ = "undefined" !== typeof Zone && Zone["__symbol__"] || ɵ0; + +var blackListedEvents = "undefined" !== typeof Zone && Zone[__symbol__("BLACK_LISTED_EVENTS")]; diff --git a/integration/side-effects/snapshots/router/esm2015.js b/integration/side-effects/snapshots/router/esm2015.js new file mode 100644 index 0000000000000..0f9f04eb6f6ea --- /dev/null +++ b/integration/side-effects/snapshots/router/esm2015.js @@ -0,0 +1,9 @@ +import "@angular/common"; + +import "@angular/core"; + +import "rxjs"; + +import "rxjs/operators"; + +import "@angular/platform-browser"; diff --git a/integration/side-effects/snapshots/router/esm5.js b/integration/side-effects/snapshots/router/esm5.js new file mode 100644 index 0000000000000..22e1dbe38a6e8 --- /dev/null +++ b/integration/side-effects/snapshots/router/esm5.js @@ -0,0 +1,11 @@ +import "tslib"; + +import "@angular/common"; + +import "@angular/core"; + +import "rxjs"; + +import "rxjs/operators"; + +import "@angular/platform-browser"; diff --git a/integration/side-effects/yarn.lock b/integration/side-effects/yarn.lock new file mode 100644 index 0000000000000..a5c82011f4c0c --- /dev/null +++ b/integration/side-effects/yarn.lock @@ -0,0 +1,375 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@angular-devkit/build-optimizer@0.14.0-beta.5": + version "0.14.0-beta.5" + resolved "https://registry.yarnpkg.com/@angular-devkit/build-optimizer/-/build-optimizer-0.14.0-beta.5.tgz#f842a0b2717517cdc8e40704076d6182feccb81a" + integrity sha512-sQ86BGrd65QD9fV+wgDWNFKS2kxsZFj/lSn3pjgguV43XjGvnNlXnsVAgZOruygyXjB/afEOkNpO/4sKFNxiMw== + dependencies: + loader-utils "1.2.3" + source-map "0.5.6" + typescript "3.2.4" + webpack-sources "1.3.0" + +"@angular/animations@file:../../dist/packages-dist/animations": + version "8.0.0-rc.0" + dependencies: + tslib "^1.9.0" + +"@angular/common@file:../../dist/packages-dist/common": + version "8.0.0-rc.0" + dependencies: + tslib "^1.9.0" + +"@angular/core@file:../../dist/packages-dist/core": + version "8.0.0-rc.0" + dependencies: + tslib "^1.9.0" + +"@angular/elements@file:../../dist/packages-dist/elements": + version "8.0.0-rc.0" + dependencies: + tslib "^1.9.0" + +"@angular/forms@file:../../dist/packages-dist/forms": + version "8.0.0-rc.0" + dependencies: + tslib "^1.9.0" + +"@angular/platform-browser@file:../../dist/packages-dist/platform-browser": + version "8.0.0-rc.0" + dependencies: + tslib "^1.9.0" + +"@angular/router@file:../../dist/packages-dist/router": + version "8.0.0-rc.0" + dependencies: + tslib "^1.9.0" + +"@babel/code-frame@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0.tgz#06e2ab19bdb535385559aabb5ba59729482800f8" + integrity sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA== + dependencies: + "@babel/highlight" "^7.0.0" + +"@babel/highlight@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0.tgz#f710c38c8d458e6dd9a201afb637fcb781ce99e4" + integrity sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw== + dependencies: + chalk "^2.0.0" + esutils "^2.0.2" + js-tokens "^4.0.0" + +"@types/estree@0.0.39": + version "0.0.39" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" + integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== + +"@types/node@*": + version "11.11.1" + resolved "https://registry.yarnpkg.com/@types/node/-/node-11.11.1.tgz#9ee55ffce20f72e141863b0036a6e51c6fc09a1f" + integrity sha512-2azXFP9n4aA2QNLkKm/F9pzKxgYj1SMawZ5Eh9iC21RH3XNcFsivLVU2NhpMgQm7YobSByvIol4c42ZFusXFHQ== + +"@types/node@^11.13.9": + version "11.13.10" + resolved "https://registry.yarnpkg.com/@types/node/-/node-11.13.10.tgz#4df59e5966b56f512bac98898bcbee5067411f0f" + integrity sha512-leUNzbFTMX94TWaIKz8N15Chu55F9QSH+INKayQr5xpkasBQBRF3qQXfo3/dOnMU/dEIit+Y/SU8HyOjq++GwA== + +"@types/resolve@0.0.8": + version "0.0.8" + resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-0.0.8.tgz#f26074d238e02659e323ce1a13d041eee280e194" + integrity sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ== + dependencies: + "@types/node" "*" + +acorn@^6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.1.1.tgz#7d25ae05bb8ad1f9b699108e1094ecd7884adc1f" + integrity sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA== + +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +big.js@^5.2.2: + version "5.2.2" + resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" + integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== + +buffer-from@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" + integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== + +builtin-modules@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.1.0.tgz#aad97c15131eb76b65b50ef208e7584cd76a7484" + integrity sha512-k0KL0aWZuBt2lrxrcASWDfwOLMnodeQjodT/1SxEQAXsHANgo6ZC/VEaSEHCXt7aSTZ4/4H5LKa+tBXmW7Vtvw== + +chalk@^2.0.0: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +"check-side-effects@file:../../node_modules/check-side-effects": + version "0.0.20" + dependencies: + "@angular-devkit/build-optimizer" "0.14.0-beta.5" + minimist "~1.2.0" + rollup "~1.11.3" + rollup-plugin-node-resolve "~4.2.3" + rollup-plugin-terser "~4.0.4" + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + +commander@^2.19.0: + version "2.19.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a" + integrity sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg== + +core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + +emojis-list@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" + integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k= + +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + +esutils@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" + integrity sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs= + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + +inherits@~2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= + +is-module@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" + integrity sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE= + +isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + +jest-worker@^24.0.0: + version "24.4.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-24.4.0.tgz#fbc452b0120bb5c2a70cdc88fa132b48eeb11dd0" + integrity sha512-BH9X/klG9vxwoO99ZBUbZFfV8qO0XNZ5SIiCyYK2zOuJBl6YJVAeNIQjcoOVNu4HGEHeYEKsUWws8kSlSbZ9YQ== + dependencies: + "@types/node" "*" + merge-stream "^1.0.1" + supports-color "^6.1.0" + +js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +json5@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" + integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== + dependencies: + minimist "^1.2.0" + +loader-utils@1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.2.3.tgz#1ff5dc6911c9f0a062531a4c04b609406108c2c7" + integrity sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA== + dependencies: + big.js "^5.2.2" + emojis-list "^2.0.0" + json5 "^1.0.1" + +merge-stream@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-1.0.1.tgz#4041202d508a342ba00174008df0c251b8c135e1" + integrity sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE= + dependencies: + readable-stream "^2.0.1" + +minimist@^1.2.0, minimist@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" + integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= + +path-parse@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" + integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== + +process-nextick-args@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa" + integrity sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw== + +readable-stream@^2.0.1: + version "2.3.6" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" + integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +resolve@^1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.10.0.tgz#3bdaaeaf45cc07f375656dfd2e54ed0810b101ba" + integrity sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg== + dependencies: + path-parse "^1.0.6" + +rollup-plugin-node-resolve@~4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-4.2.3.tgz#638a373a54287d19fcc088fdd1c6fd8a58e4d90a" + integrity sha512-r+WaesPzdGEynpLZLALFEDugA4ACa5zn7bc/+LVX4vAXQQ8IgDHv0xfsSvJ8tDXUtprfBtrDtRFg27ifKjcJTg== + dependencies: + "@types/resolve" "0.0.8" + builtin-modules "^3.1.0" + is-module "^1.0.0" + resolve "^1.10.0" + +rollup-plugin-terser@~4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/rollup-plugin-terser/-/rollup-plugin-terser-4.0.4.tgz#6f661ef284fa7c27963d242601691dc3d23f994e" + integrity sha512-wPANT5XKVJJ8RDUN0+wIr7UPd0lIXBo4UdJ59VmlPCtlFsE20AM+14pe+tk7YunCsWEiuzkDBY3QIkSCjtrPXg== + dependencies: + "@babel/code-frame" "^7.0.0" + jest-worker "^24.0.0" + serialize-javascript "^1.6.1" + terser "^3.14.1" + +rollup@~1.11.3: + version "1.11.3" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-1.11.3.tgz#6f436db2a2d6b63f808bf60ad01a177643dedb81" + integrity sha512-81MR7alHcFKxgWzGfG7jSdv+JQxSOIOD/Fa3iNUmpzbd7p+V19e1l9uffqT8/7YAHgGOzmoPGN3Fx3L2ptOf5g== + dependencies: + "@types/estree" "0.0.39" + "@types/node" "^11.13.9" + acorn "^6.1.1" + +safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +serialize-javascript@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.6.1.tgz#4d1f697ec49429a847ca6f442a2a755126c4d879" + integrity sha512-A5MOagrPFga4YaKQSWHryl7AXvbQkEqpw4NNYMTNYUNV51bA8ABHgYFpqKx+YFFrw59xMV1qGH1R4AgoNIVgCw== + +source-list-map@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" + integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== + +source-map-support@~0.5.10: + version "0.5.11" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.11.tgz#efac2ce0800355d026326a0ca23e162aeac9a4e2" + integrity sha512-//sajEx/fGL3iw6fltKMdPvy8kL3kJ2O3iuYlRoT3k9Kb4BjOoZ+BZzaNHeuaruSt+Kf3Zk9tnfAQg9/AJqUVQ== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map@0.5.6: + version "0.5.6" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" + integrity sha1-dc449SvwczxafwwRjYEzSiu19BI= + +source-map@^0.6.0, source-map@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" + integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== + dependencies: + has-flag "^3.0.0" + +terser@^3.14.1: + version "3.17.0" + resolved "https://registry.yarnpkg.com/terser/-/terser-3.17.0.tgz#f88ffbeda0deb5637f9d24b0da66f4e15ab10cb2" + integrity sha512-/FQzzPJmCpjAH9Xvk2paiWrFq+5M6aVOf+2KRbwhByISDX/EujxsK+BAvrhb6H+2rtrLCHK9N01wO014vrIwVQ== + dependencies: + commander "^2.19.0" + source-map "~0.6.1" + source-map-support "~0.5.10" + +tslib@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286" + integrity sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ== + +typescript@3.2.4: + version "3.2.4" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.2.4.tgz#c585cb952912263d915b462726ce244ba510ef3d" + integrity sha512-0RNDbSdEokBeEAkgNbxJ+BLwSManFy9TeXz8uW+48j/xhEXv1ePME60olyzw2XzUqUBNAYFeJadIqAgNqIACwg== + +util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + +webpack-sources@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.3.0.tgz#2a28dcb9f1f45fe960d8f1493252b5ee6530fa85" + integrity sha512-OiVgSrbGu7NEnEvQJJgdSFPl2qWKkWq5lHMhgiToIiN9w34EBnjYzSYs+VbL5KoYiLNtFFa7BZIKxRED3I32pA== + dependencies: + source-list-map "^2.0.0" + source-map "~0.6.1" diff --git a/package.json b/package.json index 907b9a7bfbea3..8f99a0ad9e300 100644 --- a/package.json +++ b/package.json @@ -124,6 +124,7 @@ "@types/minimist": "^1.2.0", "@types/systemjs": "0.19.32", "browserstacktunnel-wrapper": "2.0.1", + "check-side-effects": "0.0.20", "clang-format": "1.0.41", "cldr": "4.10.0", "cldr-data-downloader": "0.3.2", diff --git a/yarn.lock b/yarn.lock index 1907ddbbfd214..d7e6cc0af062a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10,6 +10,16 @@ "@angular-devkit/core" "8.0.0-beta.15" rxjs "6.4.0" +"@angular-devkit/build-optimizer@0.14.0-beta.5": + version "0.14.0-beta.5" + resolved "https://registry.yarnpkg.com/@angular-devkit/build-optimizer/-/build-optimizer-0.14.0-beta.5.tgz#f842a0b2717517cdc8e40704076d6182feccb81a" + integrity sha512-sQ86BGrd65QD9fV+wgDWNFKS2kxsZFj/lSn3pjgguV43XjGvnNlXnsVAgZOruygyXjB/afEOkNpO/4sKFNxiMw== + dependencies: + loader-utils "1.2.3" + source-map "0.5.6" + typescript "3.2.4" + webpack-sources "1.3.0" + "@angular-devkit/build-optimizer@^0.800.0-beta.15": version "0.800.0-beta.15" resolved "https://registry.yarnpkg.com/@angular-devkit/build-optimizer/-/build-optimizer-0.800.0-beta.15.tgz#1474df7321ec90e7a2ce95a8fdb65fe44c1bb201" @@ -64,6 +74,22 @@ universal-analytics "^0.4.20" uuid "^3.3.2" +"@babel/code-frame@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0.tgz#06e2ab19bdb535385559aabb5ba59729482800f8" + integrity sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA== + dependencies: + "@babel/highlight" "^7.0.0" + +"@babel/highlight@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0.tgz#f710c38c8d458e6dd9a201afb637fcb781ce99e4" + integrity sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw== + dependencies: + chalk "^2.0.0" + esutils "^2.0.2" + js-tokens "^4.0.0" + "@bazel/bazel-darwin_x64@0.26.0-rc5": version "0.26.0-rc5" resolved "https://registry.yarnpkg.com/@bazel/bazel-darwin_x64/-/bazel-darwin_x64-0.26.0-rc5.tgz#237a564ee03abe16ced3622624e40fb5564a9d54" @@ -528,11 +554,23 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-10.9.4.tgz#0f4cb2dc7c1de6096055357f70179043c33e9897" integrity sha512-fCHV45gS+m3hH17zgkgADUSi2RR1Vht6wOZ0jyHP8rjiQra9f+mIcgwPQHllmDocYOstIEbKlxbFDYlgrTPYqw== +"@types/node@^11.13.9": + version "11.13.10" + resolved "https://registry.yarnpkg.com/@types/node/-/node-11.13.10.tgz#4df59e5966b56f512bac98898bcbee5067411f0f" + integrity sha512-leUNzbFTMX94TWaIKz8N15Chu55F9QSH+INKayQr5xpkasBQBRF3qQXfo3/dOnMU/dEIit+Y/SU8HyOjq++GwA== + "@types/q@^0.0.32": version "0.0.32" resolved "https://registry.yarnpkg.com/@types/q/-/q-0.0.32.tgz#bd284e57c84f1325da702babfc82a5328190c0c5" integrity sha1-vShOV8hPEyXacCur/IKlMoGQwMU= +"@types/resolve@0.0.8": + version "0.0.8" + resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-0.0.8.tgz#f26074d238e02659e323ce1a13d041eee280e194" + integrity sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ== + dependencies: + "@types/node" "*" + "@types/rx-core-binding@*": version "4.0.4" resolved "https://registry.yarnpkg.com/@types/rx-core-binding/-/rx-core-binding-4.0.4.tgz#d969d32f15a62b89e2862c17b3ee78fe329818d3" @@ -765,6 +803,11 @@ acorn@^6.0.5: resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.0.5.tgz#81730c0815f3f3b34d8efa95cb7430965f4d887a" integrity sha512-i33Zgp3XWtmZBMNvCr4azvOFeWVw1Rk6p3hfi3LUDvIFraOMywb1kAtrbi+med14m4Xfpqm3zRZMT+c0FNE7kg== +acorn@^6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.1.1.tgz#7d25ae05bb8ad1f9b699108e1094ecd7884adc1f" + integrity sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA== + add-stream@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/add-stream/-/add-stream-1.0.0.tgz#6a7990437ca736d5e1288db92bd3266d5f5cb2aa" @@ -1747,6 +1790,11 @@ builtin-modules@^3.0.0: resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.0.0.tgz#1e587d44b006620d90286cc7a9238bbc6129cab1" integrity sha512-hMIeU4K2ilbXV6Uv93ZZ0Avg/M91RaKXucQ+4me2Do1txxBDyDZWCBa5bJSLqoNTRpXTLwEzIk1KmloenDDjhg== +builtin-modules@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.1.0.tgz#aad97c15131eb76b65b50ef208e7584cd76a7484" + integrity sha512-k0KL0aWZuBt2lrxrcASWDfwOLMnodeQjodT/1SxEQAXsHANgo6ZC/VEaSEHCXt7aSTZ4/4H5LKa+tBXmW7Vtvw== + builtins@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/builtins/-/builtins-1.0.3.tgz#cb94faeb61c8696451db36534e1422f94f0aee88" @@ -1927,7 +1975,7 @@ chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" -chalk@^2.0.1, chalk@^2.3.1, chalk@^2.4.2: +chalk@^2.0.0, chalk@^2.0.1, chalk@^2.3.1, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -1951,6 +1999,17 @@ check-error@^1.0.2: resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" integrity sha1-V00xLt2Iu13YkS6Sht1sCu1KrII= +check-side-effects@0.0.20: + version "0.0.20" + resolved "https://registry.yarnpkg.com/check-side-effects/-/check-side-effects-0.0.20.tgz#b35cbb1f2eb210c1a051c7d78aa9fbd939ee31ea" + integrity sha512-tx7dvqAK0z8PM/gTTnfi6oW1Scn9f8EbMSZ1mu//4oIpNWF6ZNW2SFX7Cnsgq9xZjYeoD+YaUVx9CC0fEFizkQ== + dependencies: + "@angular-devkit/build-optimizer" "0.14.0-beta.5" + minimist "~1.2.0" + rollup "~1.11.3" + rollup-plugin-node-resolve "~4.2.3" + rollup-plugin-terser "~4.0.4" + chokidar@^1.0.0: version "1.7.0" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.7.0.tgz#798e689778151c8076b4b360e5edd28cda2bb468" @@ -2327,6 +2386,11 @@ commander@^2.13.0, commander@^2.7.1, commander@^2.8.1, commander@~2.19.0: resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a" integrity sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg== +commander@^2.19.0: + version "2.20.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422" + integrity sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ== + commander@^2.5.0, commander@^2.9.0: version "2.16.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.16.0.tgz#f16390593996ceb4f3eeb020b31d78528f7f8a50" @@ -6067,6 +6131,14 @@ jasminewd2@^2.1.0: resolved "https://registry.yarnpkg.com/jasminewd2/-/jasminewd2-2.2.0.tgz#e37cf0b17f199cce23bea71b2039395246b4ec4e" integrity sha1-43zwsX8ZnM4jvqcbIDk5Uka07E4= +jest-worker@^24.0.0: + version "24.6.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-24.6.0.tgz#7f81ceae34b7cde0c9827a6980c35b7cdc0161b3" + integrity sha512-jDwgW5W9qGNvpI1tNnvajh0a5IE/PuGLFmHk6aR/BZFz8tSgGw17GsDPXAJ6p91IvYDjOw8GpFbvvZGAK+DPQQ== + dependencies: + merge-stream "^1.0.1" + supports-color "^6.1.0" + jetpack-id@0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/jetpack-id/-/jetpack-id-0.0.4.tgz#6fc35a394a4aea190820a2ce7f23d2bb53512a9b" @@ -6157,6 +6229,11 @@ js-tokens@^3.0.2: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= +js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + jsbn@~0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" @@ -7212,6 +7289,13 @@ merge-descriptors@1.0.1: resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= +merge-stream@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-1.0.1.tgz#4041202d508a342ba00174008df0c251b8c135e1" + integrity sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE= + dependencies: + readable-stream "^2.0.1" + methmeth@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/methmeth/-/methmeth-1.1.0.tgz#e80a26618e52f5c4222861bb748510bd10e29089" @@ -7381,7 +7465,7 @@ minimist@0.0.8: resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= -minimist@1.2.0, minimist@^1.1.0, minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0: +minimist@1.2.0, minimist@^1.1.0, minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0, minimist@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= @@ -9421,6 +9505,16 @@ rollup-plugin-node-resolve@^4.0.0: is-module "^1.0.0" resolve "^1.10.0" +rollup-plugin-node-resolve@~4.2.3: + version "4.2.4" + resolved "https://registry.yarnpkg.com/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-4.2.4.tgz#7d370f8d6fd3031006a0032c38262dd9be3c6250" + integrity sha512-t/64I6l7fZ9BxqD3XlX4ZeO6+5RLKyfpwE2CiPNUKa+GocPlQhf/C208ou8y3AwtNsc6bjSk/8/6y/YAyxCIvw== + dependencies: + "@types/resolve" "0.0.8" + builtin-modules "^3.1.0" + is-module "^1.0.0" + resolve "^1.10.0" + rollup-plugin-sourcemaps@^0.4.2: version "0.4.2" resolved "https://registry.yarnpkg.com/rollup-plugin-sourcemaps/-/rollup-plugin-sourcemaps-0.4.2.tgz#62125aa94087aadf7b83ef4dfaf629b473135e87" @@ -9429,6 +9523,16 @@ rollup-plugin-sourcemaps@^0.4.2: rollup-pluginutils "^2.0.1" source-map-resolve "^0.5.0" +rollup-plugin-terser@~4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/rollup-plugin-terser/-/rollup-plugin-terser-4.0.4.tgz#6f661ef284fa7c27963d242601691dc3d23f994e" + integrity sha512-wPANT5XKVJJ8RDUN0+wIr7UPd0lIXBo4UdJ59VmlPCtlFsE20AM+14pe+tk7YunCsWEiuzkDBY3QIkSCjtrPXg== + dependencies: + "@babel/code-frame" "^7.0.0" + jest-worker "^24.0.0" + serialize-javascript "^1.6.1" + terser "^3.14.1" + rollup-pluginutils@^2.0.1: version "2.3.0" resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.3.0.tgz#478ace04bd7f6da2e724356ca798214884738fc4" @@ -9462,6 +9566,15 @@ rollup@^1.1.0: "@types/node" "*" acorn "^6.0.5" +rollup@~1.11.3: + version "1.11.3" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-1.11.3.tgz#6f436db2a2d6b63f808bf60ad01a177643dedb81" + integrity sha512-81MR7alHcFKxgWzGfG7jSdv+JQxSOIOD/Fa3iNUmpzbd7p+V19e1l9uffqT8/7YAHgGOzmoPGN3Fx3L2ptOf5g== + dependencies: + "@types/estree" "0.0.39" + "@types/node" "^11.13.9" + acorn "^6.1.1" + router@^1.3.1: version "1.3.3" resolved "https://registry.yarnpkg.com/router/-/router-1.3.3.tgz#c142f6b5ea4d6b3359022ca95b6580bd217f89cf" @@ -9686,6 +9799,11 @@ sequencify@~0.0.7: resolved "https://registry.yarnpkg.com/sequencify/-/sequencify-0.0.7.tgz#90cff19d02e07027fd767f5ead3e7b95d1e7380c" integrity sha1-kM/xnQLgcCf9dn9erT57ldHnOAw= +serialize-javascript@^1.6.1: + version "1.7.0" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.7.0.tgz#d6e0dfb2a3832a8c94468e6eb1db97e55a192a65" + integrity sha512-ke8UG8ulpFOxO8f8gRYabHQe/ZntKlcig2Mp+8+URDP1D8vJZ0KUt7LYo07q25Z/+JVSgpr/cui9PIp5H6/+nA== + serializerr@1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/serializerr/-/serializerr-1.0.3.tgz#12d4c5aa1c3ffb8f6d1dc5f395aa9455569c3f91" @@ -10003,6 +10121,14 @@ source-map-support@~0.4.0: dependencies: source-map "^0.5.6" +source-map-support@~0.5.10: + version "0.5.12" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.12.tgz#b4f3b10d51857a5af0138d3ce8003b201613d599" + integrity sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + source-map-url@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" @@ -10503,6 +10629,13 @@ supports-color@^5.3.0: dependencies: has-flag "^3.0.0" +supports-color@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" + integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== + dependencies: + has-flag "^3.0.0" + symbol-observable@1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" @@ -10559,6 +10692,15 @@ term-size@^1.2.0: dependencies: execa "^0.7.0" +terser@^3.14.1: + version "3.17.0" + resolved "https://registry.yarnpkg.com/terser/-/terser-3.17.0.tgz#f88ffbeda0deb5637f9d24b0da66f4e15ab10cb2" + integrity sha512-/FQzzPJmCpjAH9Xvk2paiWrFq+5M6aVOf+2KRbwhByISDX/EujxsK+BAvrhb6H+2rtrLCHK9N01wO014vrIwVQ== + dependencies: + commander "^2.19.0" + source-map "~0.6.1" + source-map-support "~0.5.10" + test-exclude@^5.2.2: version "5.2.3" resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-5.2.3.tgz#c3d3e1e311eb7ee405e092dac10aefd09091eac0" @@ -10930,6 +11072,11 @@ typedarray@^0.0.6: resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= +typescript@3.2.4: + version "3.2.4" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.2.4.tgz#c585cb952912263d915b462726ce244ba510ef3d" + integrity sha512-0RNDbSdEokBeEAkgNbxJ+BLwSManFy9TeXz8uW+48j/xhEXv1ePME60olyzw2XzUqUBNAYFeJadIqAgNqIACwg== + typescript@3.4.3: version "3.4.3" resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.4.3.tgz#0eb320e4ace9b10eadf5bc6103286b0f8b7c224f" From e55db3c5dd444f5351c4a057c8fb9e8a6ae17c24 Mon Sep 17 00:00:00 2001 From: Filipe Silva Date: Thu, 2 May 2019 16:44:24 +0100 Subject: [PATCH 2/2] refactor: remove toplevel property accesses --- integration/_payload-limits.json | 2 +- .../snapshots/animations-browser/esm2015.js | 11 - .../snapshots/animations-browser/esm5.js | 11 - .../snapshots/elements/esm2015.js | 4 - .../side-effects/snapshots/elements/esm5.js | 4 - .../snapshots/platform-browser/esm2015.js | 16 +- .../snapshots/platform-browser/esm5.js | 16 +- package.json | 1 + .../web_animations_style_normalizer.ts | 7 +- .../animations/browser/src/render/shared.ts | 22 +- packages/core/src/di/injector.ts | 5 +- packages/core/src/render3/empty.ts | 4 + .../core/src/render3/instructions/shared.ts | 2 +- .../core/src/render3/interfaces/injector.ts | 4 +- packages/core/src/render3/jit/environment.ts | 243 +++++++++--------- packages/core/src/render3/util/misc_utils.ts | 7 +- packages/core/src/util/empty.ts | 4 + packages/core/src/util/microtask.ts | 3 +- .../core/src/util/ng_i18n_closure_mode.ts | 4 + .../cyclic_import/bundle.golden_symbols.json | 3 - .../hello_world/bundle.golden_symbols.json | 3 - .../bundling/todo/bundle.golden_symbols.json | 3 - packages/elements/src/utils.ts | 8 +- packages/forms/src/directives/ng_form.ts | 2 +- packages/forms/src/directives/ng_model.ts | 2 +- packages/http/src/static_request.ts | 6 +- .../src/browser/browser_adapter.ts | 14 +- .../src/dom/debug/ng_probe.ts | 25 +- .../platform-browser/src/dom/dom_renderer.ts | 2 +- .../src/dom/events/dom_events.ts | 24 +- tslint.json | 17 +- yarn.lock | 5 + 32 files changed, 231 insertions(+), 253 deletions(-) diff --git a/integration/_payload-limits.json b/integration/_payload-limits.json index edcb9b1800981..1b13ca56bd3a5 100644 --- a/integration/_payload-limits.json +++ b/integration/_payload-limits.json @@ -3,7 +3,7 @@ "master": { "uncompressed": { "runtime": 1497, - "main": 164945, + "main": 166739, "polyfills": 43626 } } diff --git a/integration/side-effects/snapshots/animations-browser/esm2015.js b/integration/side-effects/snapshots/animations-browser/esm2015.js index 780ec46ce9af9..a23be397a1edf 100644 --- a/integration/side-effects/snapshots/animations-browser/esm2015.js +++ b/integration/side-effects/snapshots/animations-browser/esm2015.js @@ -1,14 +1,3 @@ import "@angular/animations"; import "@angular/core"; - -function isNode() { - return "undefined" !== typeof process; -} - -const _isNode = isNode(); - -if (_isNode || "undefined" !== typeof Element) if (_isNode || Element.prototype.matches) ; else { - const proto = Element.prototype; - const fn = proto.matchesSelector || proto.mozMatchesSelector || proto.msMatchesSelector || proto.oMatchesSelector || proto.webkitMatchesSelector; -} diff --git a/integration/side-effects/snapshots/animations-browser/esm5.js b/integration/side-effects/snapshots/animations-browser/esm5.js index 729322a2d502a..58aec1ffc5c05 100644 --- a/integration/side-effects/snapshots/animations-browser/esm5.js +++ b/integration/side-effects/snapshots/animations-browser/esm5.js @@ -3,14 +3,3 @@ import "tslib"; import "@angular/animations"; import "@angular/core"; - -function isNode() { - return "undefined" !== typeof process; -} - -var _isNode = isNode(); - -if (_isNode || "undefined" !== typeof Element) if (_isNode || Element.prototype.matches) ; else { - var proto = Element.prototype; - var fn_1 = proto.matchesSelector || proto.mozMatchesSelector || proto.msMatchesSelector || proto.oMatchesSelector || proto.webkitMatchesSelector; -} diff --git a/integration/side-effects/snapshots/elements/esm2015.js b/integration/side-effects/snapshots/elements/esm2015.js index 0e8151832e5a8..38f33e40ed9f2 100644 --- a/integration/side-effects/snapshots/elements/esm2015.js +++ b/integration/side-effects/snapshots/elements/esm2015.js @@ -3,7 +3,3 @@ import "@angular/core"; import "rxjs"; import "rxjs/operators"; - -const elProto = Element.prototype; - -const matches = elProto.matches || elProto.matchesSelector || elProto.mozMatchesSelector || elProto.msMatchesSelector || elProto.oMatchesSelector || elProto.webkitMatchesSelector; diff --git a/integration/side-effects/snapshots/elements/esm5.js b/integration/side-effects/snapshots/elements/esm5.js index 07189e8bada0e..4500888aa361c 100644 --- a/integration/side-effects/snapshots/elements/esm5.js +++ b/integration/side-effects/snapshots/elements/esm5.js @@ -5,7 +5,3 @@ import "@angular/core"; import "rxjs"; import "rxjs/operators"; - -var elProto = Element.prototype; - -var matches = elProto.matches || elProto.matchesSelector || elProto.mozMatchesSelector || elProto.msMatchesSelector || elProto.oMatchesSelector || elProto.webkitMatchesSelector; diff --git a/integration/side-effects/snapshots/platform-browser/esm2015.js b/integration/side-effects/snapshots/platform-browser/esm2015.js index 62cb36ba1424a..aa3513a1903ce 100644 --- a/integration/side-effects/snapshots/platform-browser/esm2015.js +++ b/integration/side-effects/snapshots/platform-browser/esm2015.js @@ -1,17 +1,3 @@ import "@angular/common"; -import { ɵglobal } from "@angular/core"; - -let nodeContains; - -if (ɵglobal["Node"]) nodeContains = ɵglobal["Node"].prototype.contains || function(node) { - return !!(16 & this.compareDocumentPosition(node)); -}; - -const ɵ0 = function(v) { - return "__zone_symbol__" + v; -}; - -const __symbol__ = "undefined" !== typeof Zone && Zone["__symbol__"] || ɵ0; - -const blackListedEvents = "undefined" !== typeof Zone && Zone[__symbol__("BLACK_LISTED_EVENTS")]; +import "@angular/core"; diff --git a/integration/side-effects/snapshots/platform-browser/esm5.js b/integration/side-effects/snapshots/platform-browser/esm5.js index 3608753e37220..013438f34070c 100644 --- a/integration/side-effects/snapshots/platform-browser/esm5.js +++ b/integration/side-effects/snapshots/platform-browser/esm5.js @@ -2,18 +2,4 @@ import "tslib"; import "@angular/common"; -import { ɵglobal } from "@angular/core"; - -var nodeContains; - -if (ɵglobal["Node"]) nodeContains = ɵglobal["Node"].prototype.contains || function(node) { - return !!(16 & this.compareDocumentPosition(node)); -}; - -var ɵ0 = function(v) { - return "__zone_symbol__" + v; -}; - -var __symbol__ = "undefined" !== typeof Zone && Zone["__symbol__"] || ɵ0; - -var blackListedEvents = "undefined" !== typeof Zone && Zone[__symbol__("BLACK_LISTED_EVENTS")]; +import "@angular/core"; diff --git a/package.json b/package.json index 8f99a0ad9e300..c3cfaa216cb72 100644 --- a/package.json +++ b/package.json @@ -155,6 +155,7 @@ "sauce-connect": "https://saucelabs.com/downloads/sc-4.5.1-linux.tar.gz", "semver": "5.4.1", "tslint-eslint-rules": "4.1.1", + "tslint-no-toplevel-property-access": "0.0.2", "tsutils": "2.27.2", "universal-analytics": "0.4.15", "vlq": "0.2.2", diff --git a/packages/animations/browser/src/dsl/style_normalization/web_animations_style_normalizer.ts b/packages/animations/browser/src/dsl/style_normalization/web_animations_style_normalizer.ts index 2a79684e9081c..9cefed0d08284 100644 --- a/packages/animations/browser/src/dsl/style_normalization/web_animations_style_normalizer.ts +++ b/packages/animations/browser/src/dsl/style_normalization/web_animations_style_normalizer.ts @@ -34,9 +34,10 @@ export class WebAnimationsStyleNormalizer extends AnimationStyleNormalizer { } } -const DIMENSIONAL_PROP_MAP = makeBooleanMap( - 'width,height,minWidth,minHeight,maxWidth,maxHeight,left,top,bottom,right,fontSize,outlineWidth,outlineOffset,paddingTop,paddingLeft,paddingBottom,paddingRight,marginTop,marginLeft,marginBottom,marginRight,borderRadius,borderWidth,borderTopWidth,borderLeftWidth,borderRightWidth,borderBottomWidth,textIndent,perspective' - .split(',')); +const DIMENSIONAL_PROP_MAP = + (() => makeBooleanMap( + 'width,height,minWidth,minHeight,maxWidth,maxHeight,left,top,bottom,right,fontSize,outlineWidth,outlineOffset,paddingTop,paddingLeft,paddingBottom,paddingRight,marginTop,marginLeft,marginBottom,marginRight,borderRadius,borderWidth,borderTopWidth,borderLeftWidth,borderRightWidth,borderBottomWidth,textIndent,perspective' + .split(',')))(); function makeBooleanMap(keys: string[]): {[key: string]: boolean} { const map: {[key: string]: boolean} = {}; diff --git a/packages/animations/browser/src/render/shared.ts b/packages/animations/browser/src/render/shared.ts index 9d769e0b2f82a..81f769d71371f 100644 --- a/packages/animations/browser/src/render/shared.ts +++ b/packages/animations/browser/src/render/shared.ts @@ -158,16 +158,20 @@ if (_isNode || typeof Element !== 'undefined') { // this is well supported in all browsers _contains = (elm1: any, elm2: any) => { return elm1.contains(elm2) as boolean; }; - if (_isNode || Element.prototype.matches) { - _matches = (element: any, selector: string) => element.matches(selector); - } else { - const proto = Element.prototype as any; - const fn = proto.matchesSelector || proto.mozMatchesSelector || proto.msMatchesSelector || - proto.oMatchesSelector || proto.webkitMatchesSelector; - if (fn) { - _matches = (element: any, selector: string) => fn.apply(element, [selector]); + _matches = (() => { + if (_isNode || Element.prototype.matches) { + return (element: any, selector: string) => element.matches(selector); + } else { + const proto = Element.prototype as any; + const fn = proto.matchesSelector || proto.mozMatchesSelector || proto.msMatchesSelector || + proto.oMatchesSelector || proto.webkitMatchesSelector; + if (fn) { + return (element: any, selector: string) => fn.apply(element, [selector]); + } else { + return _matches; + } } - } + })(); _query = (element: any, selector: string, multi: boolean): any[] => { let results: any[] = []; diff --git a/packages/core/src/di/injector.ts b/packages/core/src/di/injector.ts index cff4e614e71a3..3216018e5a694 100644 --- a/packages/core/src/di/injector.ts +++ b/packages/core/src/di/injector.ts @@ -117,7 +117,6 @@ const enum OptionFlags { CheckParent = 1 << 2, Default = CheckSelf | CheckParent } -const NULL_INJECTOR = Injector.NULL; const NO_NEW_LINE = 'ɵ'; export class StaticInjector implements Injector { @@ -127,7 +126,7 @@ export class StaticInjector implements Injector { private _records: Map; constructor( - providers: StaticProvider[], parent: Injector = NULL_INJECTOR, source: string|null = null) { + providers: StaticProvider[], parent: Injector = Injector.NULL, source: string|null = null) { this.parent = parent; this.source = source; const records = this._records = new Map(); @@ -304,7 +303,7 @@ function resolveToken( records, // If we don't know how to resolve dependency and we should not check parent for it, // than pass in Null injector. - !childRecord && !(options & OptionFlags.CheckParent) ? NULL_INJECTOR : parent, + !childRecord && !(options & OptionFlags.CheckParent) ? Injector.NULL : parent, options & OptionFlags.Optional ? null : Injector.THROW_IF_NOT_FOUND, InjectFlags.Default)); } diff --git a/packages/core/src/render3/empty.ts b/packages/core/src/render3/empty.ts index a3870a64cda26..d0494193fd7c8 100644 --- a/packages/core/src/render3/empty.ts +++ b/packages/core/src/render3/empty.ts @@ -19,6 +19,10 @@ export const EMPTY_ARRAY: any[] = []; // freezing the values prevents any code from accidentally inserting new values in if (typeof ngDevMode !== 'undefined' && ngDevMode) { + // These property accesses can be ignored because ngDevMode will be set to false + // when optimizing code and the whole if statement will be dropped. + // tslint:disable-next-line:no-toplevel-property-access Object.freeze(EMPTY_OBJ); + // tslint:disable-next-line:no-toplevel-property-access Object.freeze(EMPTY_ARRAY); } diff --git a/packages/core/src/render3/instructions/shared.ts b/packages/core/src/render3/instructions/shared.ts index 096af666226cd..d7f049f99b895 100644 --- a/packages/core/src/render3/instructions/shared.ts +++ b/packages/core/src/render3/instructions/shared.ts @@ -45,7 +45,7 @@ import {getComponentViewByIndex, getNativeByIndex, getNativeByTNode, getTNode, i * A permanent marker promise which signifies that the current CD tree is * clean. */ -const _CLEAN_PROMISE = Promise.resolve(null); +const _CLEAN_PROMISE = (() => Promise.resolve(null))(); export const enum BindingDirection { Input, diff --git a/packages/core/src/render3/interfaces/injector.ts b/packages/core/src/render3/interfaces/injector.ts index e3c0e5541e7a7..5fc27c72fe023 100644 --- a/packages/core/src/render3/interfaces/injector.ts +++ b/packages/core/src/render3/interfaces/injector.ts @@ -241,10 +241,10 @@ export class NodeInjectorFactory { } } -const FactoryPrototype = NodeInjectorFactory.prototype; export function isFactory(obj: any): obj is NodeInjectorFactory { // See: https://jsperf.com/instanceof-vs-getprototypeof - return obj !== null && typeof obj == 'object' && Object.getPrototypeOf(obj) == FactoryPrototype; + return obj !== null && typeof obj == 'object' && + Object.getPrototypeOf(obj) == NodeInjectorFactory.prototype; } // Note: This hack is necessary so we don't erroneously get a circular dependency diff --git a/packages/core/src/render3/jit/environment.ts b/packages/core/src/render3/jit/environment.ts index e4a070f611182..1518a0e7f62e8 100644 --- a/packages/core/src/render3/jit/environment.ts +++ b/packages/core/src/render3/jit/environment.ts @@ -17,125 +17,126 @@ import * as sanitization from '../../sanitization/sanitization'; * * This should be kept up to date with the public exports of @angular/core. */ -export const angularCoreEnv: {[name: string]: Function} = { - 'ΔdefineBase': r3.ΔdefineBase, - 'ΔdefineComponent': r3.ΔdefineComponent, - 'ΔdefineDirective': r3.ΔdefineDirective, - 'ΔdefineInjectable': ΔdefineInjectable, - 'ΔdefineInjector': ΔdefineInjector, - 'ΔdefineNgModule': r3.ΔdefineNgModule, - 'ΔdefinePipe': r3.ΔdefinePipe, - 'ΔdirectiveInject': r3.ΔdirectiveInject, - 'ΔgetFactoryOf': r3.ΔgetFactoryOf, - 'ΔgetInheritedFactory': r3.ΔgetInheritedFactory, - 'Δinject': Δinject, - 'ΔinjectAttribute': r3.ΔinjectAttribute, - 'ΔtemplateRefExtractor': r3.ΔtemplateRefExtractor, - 'ΔNgOnChangesFeature': r3.ΔNgOnChangesFeature, - 'ΔProvidersFeature': r3.ΔProvidersFeature, - 'ΔInheritDefinitionFeature': r3.ΔInheritDefinitionFeature, - 'ΔelementAttribute': r3.ΔelementAttribute, - 'Δbind': r3.Δbind, - 'Δcontainer': r3.Δcontainer, - 'ΔnextContext': r3.ΔnextContext, - 'ΔcontainerRefreshStart': r3.ΔcontainerRefreshStart, - 'ΔcontainerRefreshEnd': r3.ΔcontainerRefreshEnd, - 'ΔnamespaceHTML': r3.ΔnamespaceHTML, - 'ΔnamespaceMathML': r3.ΔnamespaceMathML, - 'ΔnamespaceSVG': r3.ΔnamespaceSVG, - 'ΔenableBindings': r3.ΔenableBindings, - 'ΔdisableBindings': r3.ΔdisableBindings, - 'ΔallocHostVars': r3.ΔallocHostVars, - 'ΔelementStart': r3.ΔelementStart, - 'ΔelementEnd': r3.ΔelementEnd, - 'Δelement': r3.Δelement, - 'ΔelementContainerStart': r3.ΔelementContainerStart, - 'ΔelementContainerEnd': r3.ΔelementContainerEnd, - 'ΔpureFunction0': r3.ΔpureFunction0, - 'ΔpureFunction1': r3.ΔpureFunction1, - 'ΔpureFunction2': r3.ΔpureFunction2, - 'ΔpureFunction3': r3.ΔpureFunction3, - 'ΔpureFunction4': r3.ΔpureFunction4, - 'ΔpureFunction5': r3.ΔpureFunction5, - 'ΔpureFunction6': r3.ΔpureFunction6, - 'ΔpureFunction7': r3.ΔpureFunction7, - 'ΔpureFunction8': r3.ΔpureFunction8, - 'ΔpureFunctionV': r3.ΔpureFunctionV, - 'ΔgetCurrentView': r3.ΔgetCurrentView, - 'ΔrestoreView': r3.ΔrestoreView, - 'Δinterpolation1': r3.Δinterpolation1, - 'Δinterpolation2': r3.Δinterpolation2, - 'Δinterpolation3': r3.Δinterpolation3, - 'Δinterpolation4': r3.Δinterpolation4, - 'Δinterpolation5': r3.Δinterpolation5, - 'Δinterpolation6': r3.Δinterpolation6, - 'Δinterpolation7': r3.Δinterpolation7, - 'Δinterpolation8': r3.Δinterpolation8, - 'ΔinterpolationV': r3.ΔinterpolationV, - 'Δlistener': r3.Δlistener, - 'Δload': r3.Δload, - 'Δprojection': r3.Δprojection, - 'ΔelementProperty': r3.ΔelementProperty, - 'ΔcomponentHostSyntheticProperty': r3.ΔcomponentHostSyntheticProperty, - 'ΔcomponentHostSyntheticListener': r3.ΔcomponentHostSyntheticListener, - 'ΔpipeBind1': r3.ΔpipeBind1, - 'ΔpipeBind2': r3.ΔpipeBind2, - 'ΔpipeBind3': r3.ΔpipeBind3, - 'ΔpipeBind4': r3.ΔpipeBind4, - 'ΔpipeBindV': r3.ΔpipeBindV, - 'ΔprojectionDef': r3.ΔprojectionDef, - 'Δproperty': r3.Δproperty, - 'ΔpropertyInterpolate': r3.ΔpropertyInterpolate, - 'ΔpropertyInterpolate1': r3.ΔpropertyInterpolate1, - 'ΔpropertyInterpolate2': r3.ΔpropertyInterpolate2, - 'ΔpropertyInterpolate3': r3.ΔpropertyInterpolate3, - 'ΔpropertyInterpolate4': r3.ΔpropertyInterpolate4, - 'ΔpropertyInterpolate5': r3.ΔpropertyInterpolate5, - 'ΔpropertyInterpolate6': r3.ΔpropertyInterpolate6, - 'ΔpropertyInterpolate7': r3.ΔpropertyInterpolate7, - 'ΔpropertyInterpolate8': r3.ΔpropertyInterpolate8, - 'ΔpropertyInterpolateV': r3.ΔpropertyInterpolateV, - 'Δpipe': r3.Δpipe, - 'ΔqueryRefresh': r3.ΔqueryRefresh, - 'ΔviewQuery': r3.ΔviewQuery, - 'ΔstaticViewQuery': r3.ΔstaticViewQuery, - 'ΔstaticContentQuery': r3.ΔstaticContentQuery, - 'ΔloadViewQuery': r3.ΔloadViewQuery, - 'ΔcontentQuery': r3.ΔcontentQuery, - 'ΔloadContentQuery': r3.ΔloadContentQuery, - 'Δreference': r3.Δreference, - 'ΔelementHostAttrs': r3.ΔelementHostAttrs, - 'ΔclassMap': r3.ΔclassMap, - 'Δstyling': r3.Δstyling, - 'ΔstyleMap': r3.ΔstyleMap, - 'ΔstyleProp': r3.ΔstyleProp, - 'ΔstylingApply': r3.ΔstylingApply, - 'ΔclassProp': r3.ΔclassProp, - 'Δselect': r3.Δselect, - 'Δtemplate': r3.Δtemplate, - 'Δtext': r3.Δtext, - 'ΔtextBinding': r3.ΔtextBinding, - 'ΔembeddedViewStart': r3.ΔembeddedViewStart, - 'ΔembeddedViewEnd': r3.ΔembeddedViewEnd, - 'Δi18n': r3.Δi18n, - 'Δi18nAttributes': r3.Δi18nAttributes, - 'Δi18nExp': r3.Δi18nExp, - 'Δi18nStart': r3.Δi18nStart, - 'Δi18nEnd': r3.Δi18nEnd, - 'Δi18nApply': r3.Δi18nApply, - 'Δi18nPostprocess': r3.Δi18nPostprocess, - 'Δi18nLocalize': r3.Δi18nLocalize, - 'ΔresolveWindow': r3.ΔresolveWindow, - 'ΔresolveDocument': r3.ΔresolveDocument, - 'ΔresolveBody': r3.ΔresolveBody, - 'ΔsetComponentScope': r3.ΔsetComponentScope, - 'ΔsetNgModuleScope': r3.ΔsetNgModuleScope, +export const angularCoreEnv: {[name: string]: Function} = + (() => ({ + 'ΔdefineBase': r3.ΔdefineBase, + 'ΔdefineComponent': r3.ΔdefineComponent, + 'ΔdefineDirective': r3.ΔdefineDirective, + 'ΔdefineInjectable': ΔdefineInjectable, + 'ΔdefineInjector': ΔdefineInjector, + 'ΔdefineNgModule': r3.ΔdefineNgModule, + 'ΔdefinePipe': r3.ΔdefinePipe, + 'ΔdirectiveInject': r3.ΔdirectiveInject, + 'ΔgetFactoryOf': r3.ΔgetFactoryOf, + 'ΔgetInheritedFactory': r3.ΔgetInheritedFactory, + 'Δinject': Δinject, + 'ΔinjectAttribute': r3.ΔinjectAttribute, + 'ΔtemplateRefExtractor': r3.ΔtemplateRefExtractor, + 'ΔNgOnChangesFeature': r3.ΔNgOnChangesFeature, + 'ΔProvidersFeature': r3.ΔProvidersFeature, + 'ΔInheritDefinitionFeature': r3.ΔInheritDefinitionFeature, + 'ΔelementAttribute': r3.ΔelementAttribute, + 'Δbind': r3.Δbind, + 'Δcontainer': r3.Δcontainer, + 'ΔnextContext': r3.ΔnextContext, + 'ΔcontainerRefreshStart': r3.ΔcontainerRefreshStart, + 'ΔcontainerRefreshEnd': r3.ΔcontainerRefreshEnd, + 'ΔnamespaceHTML': r3.ΔnamespaceHTML, + 'ΔnamespaceMathML': r3.ΔnamespaceMathML, + 'ΔnamespaceSVG': r3.ΔnamespaceSVG, + 'ΔenableBindings': r3.ΔenableBindings, + 'ΔdisableBindings': r3.ΔdisableBindings, + 'ΔallocHostVars': r3.ΔallocHostVars, + 'ΔelementStart': r3.ΔelementStart, + 'ΔelementEnd': r3.ΔelementEnd, + 'Δelement': r3.Δelement, + 'ΔelementContainerStart': r3.ΔelementContainerStart, + 'ΔelementContainerEnd': r3.ΔelementContainerEnd, + 'ΔpureFunction0': r3.ΔpureFunction0, + 'ΔpureFunction1': r3.ΔpureFunction1, + 'ΔpureFunction2': r3.ΔpureFunction2, + 'ΔpureFunction3': r3.ΔpureFunction3, + 'ΔpureFunction4': r3.ΔpureFunction4, + 'ΔpureFunction5': r3.ΔpureFunction5, + 'ΔpureFunction6': r3.ΔpureFunction6, + 'ΔpureFunction7': r3.ΔpureFunction7, + 'ΔpureFunction8': r3.ΔpureFunction8, + 'ΔpureFunctionV': r3.ΔpureFunctionV, + 'ΔgetCurrentView': r3.ΔgetCurrentView, + 'ΔrestoreView': r3.ΔrestoreView, + 'Δinterpolation1': r3.Δinterpolation1, + 'Δinterpolation2': r3.Δinterpolation2, + 'Δinterpolation3': r3.Δinterpolation3, + 'Δinterpolation4': r3.Δinterpolation4, + 'Δinterpolation5': r3.Δinterpolation5, + 'Δinterpolation6': r3.Δinterpolation6, + 'Δinterpolation7': r3.Δinterpolation7, + 'Δinterpolation8': r3.Δinterpolation8, + 'ΔinterpolationV': r3.ΔinterpolationV, + 'Δlistener': r3.Δlistener, + 'Δload': r3.Δload, + 'Δprojection': r3.Δprojection, + 'ΔelementProperty': r3.ΔelementProperty, + 'ΔcomponentHostSyntheticProperty': r3.ΔcomponentHostSyntheticProperty, + 'ΔcomponentHostSyntheticListener': r3.ΔcomponentHostSyntheticListener, + 'ΔpipeBind1': r3.ΔpipeBind1, + 'ΔpipeBind2': r3.ΔpipeBind2, + 'ΔpipeBind3': r3.ΔpipeBind3, + 'ΔpipeBind4': r3.ΔpipeBind4, + 'ΔpipeBindV': r3.ΔpipeBindV, + 'ΔprojectionDef': r3.ΔprojectionDef, + 'Δproperty': r3.Δproperty, + 'ΔpropertyInterpolate': r3.ΔpropertyInterpolate, + 'ΔpropertyInterpolate1': r3.ΔpropertyInterpolate1, + 'ΔpropertyInterpolate2': r3.ΔpropertyInterpolate2, + 'ΔpropertyInterpolate3': r3.ΔpropertyInterpolate3, + 'ΔpropertyInterpolate4': r3.ΔpropertyInterpolate4, + 'ΔpropertyInterpolate5': r3.ΔpropertyInterpolate5, + 'ΔpropertyInterpolate6': r3.ΔpropertyInterpolate6, + 'ΔpropertyInterpolate7': r3.ΔpropertyInterpolate7, + 'ΔpropertyInterpolate8': r3.ΔpropertyInterpolate8, + 'ΔpropertyInterpolateV': r3.ΔpropertyInterpolateV, + 'Δpipe': r3.Δpipe, + 'ΔqueryRefresh': r3.ΔqueryRefresh, + 'ΔviewQuery': r3.ΔviewQuery, + 'ΔstaticViewQuery': r3.ΔstaticViewQuery, + 'ΔstaticContentQuery': r3.ΔstaticContentQuery, + 'ΔloadViewQuery': r3.ΔloadViewQuery, + 'ΔcontentQuery': r3.ΔcontentQuery, + 'ΔloadContentQuery': r3.ΔloadContentQuery, + 'Δreference': r3.Δreference, + 'ΔelementHostAttrs': r3.ΔelementHostAttrs, + 'ΔclassMap': r3.ΔclassMap, + 'Δstyling': r3.Δstyling, + 'ΔstyleMap': r3.ΔstyleMap, + 'ΔstyleProp': r3.ΔstyleProp, + 'ΔstylingApply': r3.ΔstylingApply, + 'ΔclassProp': r3.ΔclassProp, + 'Δselect': r3.Δselect, + 'Δtemplate': r3.Δtemplate, + 'Δtext': r3.Δtext, + 'ΔtextBinding': r3.ΔtextBinding, + 'ΔembeddedViewStart': r3.ΔembeddedViewStart, + 'ΔembeddedViewEnd': r3.ΔembeddedViewEnd, + 'Δi18n': r3.Δi18n, + 'Δi18nAttributes': r3.Δi18nAttributes, + 'Δi18nExp': r3.Δi18nExp, + 'Δi18nStart': r3.Δi18nStart, + 'Δi18nEnd': r3.Δi18nEnd, + 'Δi18nApply': r3.Δi18nApply, + 'Δi18nPostprocess': r3.Δi18nPostprocess, + 'Δi18nLocalize': r3.Δi18nLocalize, + 'ΔresolveWindow': r3.ΔresolveWindow, + 'ΔresolveDocument': r3.ΔresolveDocument, + 'ΔresolveBody': r3.ΔresolveBody, + 'ΔsetComponentScope': r3.ΔsetComponentScope, + 'ΔsetNgModuleScope': r3.ΔsetNgModuleScope, - 'ΔsanitizeHtml': sanitization.ΔsanitizeHtml, - 'ΔsanitizeStyle': sanitization.ΔsanitizeStyle, - 'ΔdefaultStyleSanitizer': sanitization.ΔdefaultStyleSanitizer, - 'ΔsanitizeResourceUrl': sanitization.ΔsanitizeResourceUrl, - 'ΔsanitizeScript': sanitization.ΔsanitizeScript, - 'ΔsanitizeUrl': sanitization.ΔsanitizeUrl, - 'ΔsanitizeUrlOrResourceUrl': sanitization.ΔsanitizeUrlOrResourceUrl, -}; + 'ΔsanitizeHtml': sanitization.ΔsanitizeHtml, + 'ΔsanitizeStyle': sanitization.ΔsanitizeStyle, + 'ΔdefaultStyleSanitizer': sanitization.ΔdefaultStyleSanitizer, + 'ΔsanitizeResourceUrl': sanitization.ΔsanitizeResourceUrl, + 'ΔsanitizeScript': sanitization.ΔsanitizeScript, + 'ΔsanitizeUrl': sanitization.ΔsanitizeUrl, + 'ΔsanitizeUrlOrResourceUrl': sanitization.ΔsanitizeUrlOrResourceUrl, + }))(); diff --git a/packages/core/src/render3/util/misc_utils.ts b/packages/core/src/render3/util/misc_utils.ts index 0514f1896ced1..2deedccd1836f 100644 --- a/packages/core/src/render3/util/misc_utils.ts +++ b/packages/core/src/render3/util/misc_utils.ts @@ -48,9 +48,10 @@ export function stringifyForError(value: any) { export const defaultScheduler = - (typeof requestAnimationFrame !== 'undefined' && requestAnimationFrame || // browser only - setTimeout // everything else - ).bind(global); + (() => + (typeof requestAnimationFrame !== 'undefined' && requestAnimationFrame || // browser only + setTimeout // everything else + ).bind(global))(); /** * diff --git a/packages/core/src/util/empty.ts b/packages/core/src/util/empty.ts index 46dc61bdf634e..d1d8ce9a1bebd 100644 --- a/packages/core/src/util/empty.ts +++ b/packages/core/src/util/empty.ts @@ -19,6 +19,10 @@ export const EMPTY_ARRAY: any[] = []; // freezing the values prevents any code from accidentally inserting new values in if (typeof ngDevMode !== 'undefined' && ngDevMode) { + // These property accesses can be ignored because ngDevMode will be set to false + // when optimizing code and the whole if statement will be dropped. + // tslint:disable-next-line:no-toplevel-property-access Object.freeze(EMPTY_OBJ); + // tslint:disable-next-line:no-toplevel-property-access Object.freeze(EMPTY_ARRAY); } diff --git a/packages/core/src/util/microtask.ts b/packages/core/src/util/microtask.ts index 40edbac49dcaa..fdc8a2b4f6443 100644 --- a/packages/core/src/util/microtask.ts +++ b/packages/core/src/util/microtask.ts @@ -6,8 +6,7 @@ * found in the LICENSE file at https://angular.io/license */ - -const promise: Promise = Promise.resolve(0); +const promise: Promise = (() => Promise.resolve(0))(); declare const Zone: any; diff --git a/packages/core/src/util/ng_i18n_closure_mode.ts b/packages/core/src/util/ng_i18n_closure_mode.ts index be1231060d4ee..1945dae272ecf 100644 --- a/packages/core/src/util/ng_i18n_closure_mode.ts +++ b/packages/core/src/util/ng_i18n_closure_mode.ts @@ -16,8 +16,12 @@ declare global { * NOTE: changes to the `ngI18nClosureMode` name must be synced with `compiler-cli/src/tooling.ts`. */ if (typeof ngI18nClosureMode === 'undefined') { + // These property accesses can be ignored because ngI18nClosureMode will be set to false + // when optimizing code and the whole if statement will be dropped. // Make sure to refer to ngI18nClosureMode as ['ngI18nClosureMode'] for closure. + // tslint:disable-next-line:no-toplevel-property-access global['ngI18nClosureMode'] = // TODO(FW-1250): validate that this actually, you know, works. + // tslint:disable-next-line:no-toplevel-property-access typeof goog !== 'undefined' && typeof goog.getMsg === 'function'; } diff --git a/packages/core/test/bundling/cyclic_import/bundle.golden_symbols.json b/packages/core/test/bundling/cyclic_import/bundle.golden_symbols.json index adb95aa96cff2..a57178edd47dd 100644 --- a/packages/core/test/bundling/cyclic_import/bundle.golden_symbols.json +++ b/packages/core/test/bundling/cyclic_import/bundle.golden_symbols.json @@ -50,9 +50,6 @@ { "name": "FLAGS" }, - { - "name": "FactoryPrototype" - }, { "name": "HEADER_OFFSET" }, diff --git a/packages/core/test/bundling/hello_world/bundle.golden_symbols.json b/packages/core/test/bundling/hello_world/bundle.golden_symbols.json index 7abadbcaf8615..414f37283cb63 100644 --- a/packages/core/test/bundling/hello_world/bundle.golden_symbols.json +++ b/packages/core/test/bundling/hello_world/bundle.golden_symbols.json @@ -41,9 +41,6 @@ { "name": "FLAGS" }, - { - "name": "FactoryPrototype" - }, { "name": "HEADER_OFFSET" }, diff --git a/packages/core/test/bundling/todo/bundle.golden_symbols.json b/packages/core/test/bundling/todo/bundle.golden_symbols.json index 761b3d1220096..1fbcba97b2520 100644 --- a/packages/core/test/bundling/todo/bundle.golden_symbols.json +++ b/packages/core/test/bundling/todo/bundle.golden_symbols.json @@ -83,9 +83,6 @@ { "name": "FLAGS" }, - { - "name": "FactoryPrototype" - }, { "name": "HEADER_OFFSET" }, diff --git a/packages/elements/src/utils.ts b/packages/elements/src/utils.ts index 0491485777443..2333eb40b34a4 100644 --- a/packages/elements/src/utils.ts +++ b/packages/elements/src/utils.ts @@ -7,9 +7,11 @@ */ import {ComponentFactoryResolver, Injector, Type} from '@angular/core'; -const elProto = Element.prototype as any; -const matches = elProto.matches || elProto.matchesSelector || elProto.mozMatchesSelector || - elProto.msMatchesSelector || elProto.oMatchesSelector || elProto.webkitMatchesSelector; +const matches = (() => { + const elProto = Element.prototype as any; + return elProto.matches || elProto.matchesSelector || elProto.mozMatchesSelector || + elProto.msMatchesSelector || elProto.oMatchesSelector || elProto.webkitMatchesSelector; +})(); /** * Provide methods for scheduling the execution of a callback. diff --git a/packages/forms/src/directives/ng_form.ts b/packages/forms/src/directives/ng_form.ts index e7a067bcd5c61..ba0d59b62ef41 100644 --- a/packages/forms/src/directives/ng_form.ts +++ b/packages/forms/src/directives/ng_form.ts @@ -23,7 +23,7 @@ export const formDirectiveProvider: any = { useExisting: forwardRef(() => NgForm) }; -const resolvedPromise = Promise.resolve(null); +const resolvedPromise = (() => Promise.resolve(null))(); /** * @description diff --git a/packages/forms/src/directives/ng_model.ts b/packages/forms/src/directives/ng_model.ts index 15ab847972820..b4e252a9cb9c6 100644 --- a/packages/forms/src/directives/ng_model.ts +++ b/packages/forms/src/directives/ng_model.ts @@ -43,7 +43,7 @@ export const formControlBinding: any = { * - this is just one extra run no matter how many `ngModel` have been changed. * - this is a general problem when using `exportAs` for directives! */ -const resolvedPromise = Promise.resolve(null); +const resolvedPromise = (() => Promise.resolve(null))(); /** * @description diff --git a/packages/http/src/static_request.ts b/packages/http/src/static_request.ts index f55fa8acd0fe6..c48cd252cb585 100644 --- a/packages/http/src/static_request.ts +++ b/packages/http/src/static_request.ts @@ -185,7 +185,7 @@ function urlEncodeParams(params: {[key: string]: any}): URLSearchParams { const noop = function() {}; const w = typeof window == 'object' ? window : noop; -const FormData = (w as any /** TODO #9100 */)['FormData'] || noop; -const Blob = (w as any /** TODO #9100 */)['Blob'] || noop; +const FormData = (() => (w as any /** TODO #9100 */)['FormData'] || noop)(); +const Blob = (() => (w as any /** TODO #9100 */)['Blob'] || noop)(); export const ArrayBuffer: ArrayBufferConstructor = - (w as any /** TODO #9100 */)['ArrayBuffer'] || noop; + (() => (w as any /** TODO #9100 */)['ArrayBuffer'] || noop)(); diff --git a/packages/platform-browser/src/browser/browser_adapter.ts b/packages/platform-browser/src/browser/browser_adapter.ts index dbe7baf085cce..d40cf891eb93f 100644 --- a/packages/platform-browser/src/browser/browser_adapter.ts +++ b/packages/platform-browser/src/browser/browser_adapter.ts @@ -63,13 +63,15 @@ const _chromeNumKeyPadMap = { '\x90': 'NumLock' }; -let nodeContains: (a: any, b: any) => boolean; +const nodeContains: (a: any, b: any) => boolean = (() => { + if (global['Node']) { + return global['Node'].prototype.contains || function(node: any) { + return !!(this.compareDocumentPosition(node) & 16); + }; + } -if (global['Node']) { - nodeContains = global['Node'].prototype.contains || function(node) { - return !!(this.compareDocumentPosition(node) & 16); - }; -} + return undefined as any; +})(); /** * A `DomAdapter` powered by full browser DOM APIs. diff --git a/packages/platform-browser/src/dom/debug/ng_probe.ts b/packages/platform-browser/src/dom/debug/ng_probe.ts index d033a681453c8..2ed9656c3b009 100644 --- a/packages/platform-browser/src/dom/debug/ng_probe.ts +++ b/packages/platform-browser/src/dom/debug/ng_probe.ts @@ -6,13 +6,14 @@ * found in the LICENSE file at https://angular.io/license */ -import * as core from '@angular/core'; +import {APP_INITIALIZER, ApplicationRef, DebugNode, NgProbeToken, NgZone, Optional, Provider, getDebugNode} from '@angular/core'; + import {exportNgVar} from '../util'; -const CORE_TOKENS = { - 'ApplicationRef': core.ApplicationRef, - 'NgZone': core.NgZone, -}; +const CORE_TOKENS = (() => ({ + 'ApplicationRef': ApplicationRef, + 'NgZone': NgZone, + }))(); const INSPECT_GLOBAL_NAME = 'probe'; const CORE_TOKENS_GLOBAL_NAME = 'coreTokens'; @@ -22,17 +23,17 @@ const CORE_TOKENS_GLOBAL_NAME = 'coreTokens'; * null if the given native element does not have an Angular view associated * with it. */ -export function inspectNativeElement(element: any): core.DebugNode|null { - return core.getDebugNode(element); +export function inspectNativeElement(element: any): DebugNode|null { + return getDebugNode(element); } -export function _createNgProbe(coreTokens: core.NgProbeToken[]): any { +export function _createNgProbe(coreTokens: NgProbeToken[]): any { exportNgVar(INSPECT_GLOBAL_NAME, inspectNativeElement); exportNgVar(CORE_TOKENS_GLOBAL_NAME, {...CORE_TOKENS, ..._ngProbeTokensToMap(coreTokens || [])}); return () => inspectNativeElement; } -function _ngProbeTokensToMap(tokens: core.NgProbeToken[]): {[name: string]: any} { +function _ngProbeTokensToMap(tokens: NgProbeToken[]): {[name: string]: any} { return tokens.reduce((prev: any, t: any) => (prev[t.name] = t.token, prev), {}); } @@ -48,12 +49,12 @@ export const ELEMENT_PROBE_PROVIDERS__POST_R3__ = []; /** * Providers which support debugging Angular applications (e.g. via `ng.probe`). */ -export const ELEMENT_PROBE_PROVIDERS__PRE_R3__: core.Provider[] = [ +export const ELEMENT_PROBE_PROVIDERS__PRE_R3__: Provider[] = [ { - provide: core.APP_INITIALIZER, + provide: APP_INITIALIZER, useFactory: _createNgProbe, deps: [ - [core.NgProbeToken, new core.Optional()], + [NgProbeToken, new Optional()], ], multi: true, }, diff --git a/packages/platform-browser/src/dom/dom_renderer.ts b/packages/platform-browser/src/dom/dom_renderer.ts index 16be147431773..ae04ba7aeec78 100644 --- a/packages/platform-browser/src/dom/dom_renderer.ts +++ b/packages/platform-browser/src/dom/dom_renderer.ts @@ -231,7 +231,7 @@ class DefaultDomRenderer2 implements Renderer2 { } } -const AT_CHARCODE = '@'.charCodeAt(0); +const AT_CHARCODE = (() => '@'.charCodeAt(0))(); function checkNoSyntheticProp(name: string, nameKind: string) { if (name.charCodeAt(0) === AT_CHARCODE) { throw new Error( diff --git a/packages/platform-browser/src/dom/events/dom_events.ts b/packages/platform-browser/src/dom/events/dom_events.ts index 9684bcd252455..2d3045eb15b68 100644 --- a/packages/platform-browser/src/dom/events/dom_events.ts +++ b/packages/platform-browser/src/dom/events/dom_events.ts @@ -18,9 +18,8 @@ import {EventManagerPlugin} from './event_manager'; * addEventListener by 3x. */ const __symbol__ = - (typeof Zone !== 'undefined') && (Zone as any)['__symbol__'] || function(v: string): string { - return '__zone_symbol__' + v; - }; + (() => (typeof Zone !== 'undefined') && (Zone as any)['__symbol__'] || + function(v: string): string { return '__zone_symbol__' + v; })(); const ADD_EVENT_LISTENER: 'addEventListener' = __symbol__('addEventListener'); const REMOVE_EVENT_LISTENER: 'removeEventListener' = __symbol__('removeEventListener'); @@ -35,13 +34,18 @@ const NATIVE_REMOVE_LISTENER = 'removeEventListener'; const stopSymbol = '__zone_symbol__propagationStopped'; const stopMethodSymbol = '__zone_symbol__stopImmediatePropagation'; -const blackListedEvents: string[] = - (typeof Zone !== 'undefined') && (Zone as any)[__symbol__('BLACK_LISTED_EVENTS')]; -let blackListedMap: {[eventName: string]: string}; -if (blackListedEvents) { - blackListedMap = {}; - blackListedEvents.forEach(eventName => { blackListedMap[eventName] = eventName; }); -} + +const blackListedMap = (() => { + const blackListedEvents: string[] = + (typeof Zone !== 'undefined') && (Zone as any)[__symbol__('BLACK_LISTED_EVENTS')]; + if (blackListedEvents) { + const res: {[eventName: string]: string} = {}; + blackListedEvents.forEach(eventName => { res[eventName] = eventName; }); + return res; + } + return undefined; +})(); + const isBlackListedEvent = function(eventName: string) { if (!blackListedMap) { diff --git a/tslint.json b/tslint.json index d12df37dde114..91b52d2fe3ffa 100644 --- a/tslint.json +++ b/tslint.json @@ -2,7 +2,8 @@ "rulesDirectory": [ "dist/tools/tslint", "node_modules/vrsource-tslint-rules/rules", - "node_modules/tslint-eslint-rules/dist/rules" + "node_modules/tslint-eslint-rules/dist/rules", + "node_modules/tslint-no-toplevel-property-access/rules" ], "rules": { "file-header": [ @@ -18,6 +19,18 @@ "no-jasmine-focus": true, "no-var-keyword": true, "require-internal-with-underscore": true, + "no-toplevel-property-access": [ + true, + "packages/animations/src/", + "packages/animations/browser/", + "packages/common/src/", + "packages/core/src/", + "packages/elements/src/", + "packages/forms/src/", + "packages/http/src/", + "packages/platform-browser/src/", + "packages/router/src/" + ], "semicolon": [ true ], @@ -56,4 +69,4 @@ "function" ] } -} \ No newline at end of file +} diff --git a/yarn.lock b/yarn.lock index d7e6cc0af062a..7ef946bf05f6f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10977,6 +10977,11 @@ tslint-eslint-rules@4.1.1: tslib "^1.0.0" tsutils "^1.4.0" +tslint-no-toplevel-property-access@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/tslint-no-toplevel-property-access/-/tslint-no-toplevel-property-access-0.0.2.tgz#c9b19bbd525ea7b8577e5ada601cc8625b4ed004" + integrity sha512-Oc+UUurlGLBkgeUSGxMoTpRUpaXsjqzQCEAYrYQyuU8330fi5FKlye5n53y87EJ24AlfdoxMPV7DJfFOADapfg== + tslint@5.7.0: version "5.7.0" resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.7.0.tgz#c25e0d0c92fa1201c2bc30e844e08e682b4f3552"