angular v9.1.0 Release Notes

Release Date: 2020-03-25 // about 4 years ago
  • 🏗 Blog post "Version 9.1 of Angular Now Available — TypeScript 3.8, faster builds, and more".

    🚀 Release Highlights

    🚀 To learn about the release highlights and our CLI-powered automated update workflow for your projects please check out the v9.1 release announcement.

    • ⚡️ TypeScript 3.8 update
    • ngcc improvements
      • performance optimizations
      • concurrency & reliability improvements for monorepo use-cases (npm postinstall script no longer recommended)
    • 👍 i18n now supports RTL locale info
    • 🛠 Ivy compatibility fixes

    🔋 Features

    • bazel: enable ivy template type-checking in g3 (#35672) (8f5b7f3)
    • bazel: transform generated shims (in Ivy) with tsickle (#35975) (e3ecdc6), closes #35848
    • compiler-cli: implement NgTscPlugin on top of the NgCompiler API (#34792) (3c69442dbd)
    • compiler: Add sourceSpan and keySpan to TemplateBinding (#35897) (06779cf)
    • compiler: Propagate source span and value span to Variable AST (#36047) (31bec8c)
    • compiler: add dependency info and ng-content selectors to metadata (#35695) (fb70083)
    • language-service: improve non-callable error message (#35271) (acc483e)
    • language-service: modularize error messages (#35678) (47a1811), closes #32663
    • ngcc: implement source-map flattening (#35132) (df816c9)
    • ngcc: pause async ngcc processing if another process has the lockfile (#35131) (eef0753)
    • ngcc: support invalidating the entry-point manifest (#35931) (8ea61a1)
    • zone.js add a temp solution to support passive event listeners. (#34503) (f9d483e)
    • zone.js add an tickOptions parameter with property processNewMacroTasksSynchronously. (#33838) (17b862c), closes #33799
    • zone.js add interface definitions which zone extends EventTarget (#35304) (4acb676), closes #35173
    • zone.js support passive event options by defining global variables in zone.js config file (#34503) (d7d359e)
    • 🔧 define all zone.js configurations to typescript interfaces (#35329) (03d88c7)
    • 👍 typescript 3.8 support (#35864) (95c729f)

    🐎 Performance Improvements

    • core: add micro benchmark for destroy hook invocation (#35784) (0653db1)
    • core: adding micro benchmark for host bindings (#35705) (8fed1fe), closes #35568
    • core: avoid recursive scope recalculation when TestBed.overrideModule is used (#35454) (0a1a989)
    • core: use multiple directives in host bindings micro benchmark (#35736) (5bc39f8)
    • ivy: remove unused event argument in listener instructions (#35097) (9228d7f)
    • ngcc: link segment markers for faster traversal (#36027) (47025e0)
    • ngcc: only create tasks for non-processed formats (#35719) (d7efc45)
    • ngcc: reduce directory traversing (#35756) (e0a35e1), closes #35717
    • ngcc: spawn workers lazily (#35719) (dc40a93), closes #35717
    • ngcc: store the position of SegmentMarkers to avoid unnecessary computation (#36027) (772bb5e)
    • ngcc: use binary search when flattening mappings (#36027) (348ff0c)
    • ngcc: use line start positions for computing offsets in source-map flattening (#36027) (e890082)
    • ngcc: use the EntryPointManifest in DirectoryWalkerEntryPointFinder (#35931) (ec9f4d5)

    🐛 Bug Fixes

    • animations: Remove ɵAnimationDriver from private exports (#35690) (ec789b0)
    • animations: allow computeStyle to work on elements created in Node (#35810) (17cf04e)
    • animations: false positive when detecting Node in Webpack builds (#35134) (dc4ae4b), closes #35117
    • animations: process shorthand margin and padding styles correctly (#35701) (35c9f0d), closes #35463
    • bazel: do not use manifest paths for generated imports within compilation unit (#35841) (9581658)
    • bazel: ng_package rule creates incorrect UMD module exports (#35792) (5c2a908), closes angular/components#18652
    • bazel: prod server doesn't serve files in windows (#35991) (96e3449)
    • bazel: update several packages for better windows support (#35991) (32f099a)
    • bazel: update typescript peer dependency range (#36013) (5e3a898)
    • common: let KeyValuePipe accept type unions with null (#36093) (407fa42), closes #35743
    • compiler-cli: TypeScript peer dependency range (#36008) (5f7d066)
    • compiler-cli: suppress extraRequire errors in Closure Compiler (#35737) (c296bfc)
    • compiler: Propagate value span of ExpressionBinding to ParsedProperty (#36133) (2ce5fa3)
    • compiler: do not recurse to find static symbols of same module (#35262) (e179c58)
    • compiler: record correct end of expression (#34690) (df890d7), closes #33477
    • compiler: support directive inputs with interpolations on <ng-template>s (#35984) (79659ee), closes #35752
    • compiler: support i18n attributes on <ng-template> tags (#35681) (40da51f)
    • compiler: type-checking error for duplicate variables in templates (#35674) (2c41bb8), closes #35186
    • compiler: use FatalDiagnosticError to generate better error messages (#35244) (646655d)
    • core: Add style="{{exp}}" based interpolation (#34202) (2562a3b), closes #33575
    • core: Remove debugger statement (#35763) (8f38eb7), closes #35470
    • core: Remove debugger statement when assert is thrown (#35763) (4003538), closes #35470
    • core: add noSideEffects() to make*Decorator() functions (#35769) (dc6a791)
    • core: add noSideEffects() to ɵɵdefineComponent() (#35769) (ba36127)
    • core: add strictLiteralTypes to align core + VE checking of literals (#35462) (4253662)
    • core: adhere to bootstrap options for JIT compiled components (#35534) (e342ffd), closes #35230
    • core: allow null / undefined values in query results (#35796) (5652fb1), closes #35673
    • core: better handing of ICUs outside of i18n blocks (#35347) (c013dd4)
    • core: better inference for circularly referenced directive types (#35622) (173a1ac), closes #35372 #35603 #35522
    • core: correctly concatenate static and dynamic binding to class when shadowed (#35350) (8c75f21), closes #35335
    • core: don't re-invoke pure pipes that throw and arguments are the same (#35827) (19cfaf7)
    • core: emulate a View Engine type-checking bug with safe navigation (#35462) (a61fe41)
    • core: error in AOT when pipe inherits constructor from injectable that uses DI (#35468) (e17bde9), closes #35277
    • core: error when accessing NgModuleRef.componentFactoryResolver in constructor (#35637) (835618c), closes #35580
    • core: handle <ng-template> with local refs in i18n blocks (#35758) (ef75875)
    • core: incorrectly generating shared pure function between null and object literal (#35481) (22786c8), closes #33705 #35298
    • core: injecting incorrect provider when re-providing injectable with useClass (#34574) (0bc35a7), closes #34110
    • core: log error instead of warning for unknown properties and elements (#35798) (00f3c58), closes #35699
    • core: make subclass inherit developer-defined data (#35105) (a756161)
    • core: provide a more detailed error message for NG6002/NG6003 (#35620) (2d89b5d)
    • core: remove side effects from ɵɵNgOnChangesFeature() (#35769) (9cf85d2)
    • core: remove side effects from ɵɵgetInheritedFactory() (#35769) (c195d22)
    • core: remove support for Map/Set in [class]/[style] bindings (#35392) (2ca7984)
    • core: support sanitizer value in the [style] bindings (#35564) (3af103a), closes #35476
    • core: treat [class] and [className] as unrelated bindings (#35668) (a153b61), closes #35577
    • core: unable to NgModuleRef.injector in module constructor (#35731) (1f8a243), closes #35677 #35639
    • core: undecorated-classes-with-di migration should handle libraries generated with CLI versions past v6.2.0 (#35824) (59607dc), closes #34985
    • core: use proper configuration to compile Injectable in JIT (#35706) (7b13977)
    • core: verify parsed ICU expression at runtime before executing it (#35923) (8c2d842), closes #35689
    • core: workaround Terser inlining bug (#36200) (f71d132)
    • elements: correctly handle setting inputs to undefined (#36140) (e066bdd)
    • elements: correctly set SimpleChange#firstChange for pre-existing inputs (#36140) (447a600), closes #36130
    • ivy: LFrame needs to release memory on leaveView() (#35156) (b9b512f), closes #35148
    • ivy: add attributes and classes to host elements based on selector (#34481) (f95b8ce)
    • ivy: error if directive with synthetic property binding is on same node as directive that injects ViewContainerRef (#35343) (d6bc63f), closes #35342
    • ivy: narrow NgIf context variables in template type checker (#35125) (40039d8), closes #34572
    • ivy: queries should match elements inside ng-container with the descendants: false option (#35384) (3f4e02b), closes #34768
    • ivy: support dynamic query tokens in AOT mode (#35307) (3e3a1ef), closes #34267
    • ivy: wrong context passed to ngOnDestroy when resolved multiple times (#35249) (5fbfe69), closes #35167
    • language-service: fix calculation of pipe spans (#35986) (406419b)
    • language-service: get the right 'ElementAst' in the nested HTML tag (#35317) (8e354da)
    • language-service: infer $implicit value for ngIf template contexts (#35941) (18b1bd4)
    • language-service: infer context type of structural directives (#35537) (#35561) (54fd33f)
    • language-service: provide completions for the structural directive that only injects the 'ViewContainerRef' (#35466) (66c06eb)
    • language-service: provide hover for interpolation in attribute value (#35494) (049f118), closes PR#34847
    • language-service: resolve the real path for symlink (#35895) (4e1d780)
    • language-service: resolve the variable from the template context first (#35982) (3d46a45)
    • localize: allow ICU expansion case to start with any character except } (#36123) (0767d37), closes #31586
    • localize: improve matching and parsing of XLIFF 1.2 translation files (#35793) (350ac11)
    • localize: improve matching and parsing of XLIFF 2.0 translation files (#35793) (08071e5)
    • localize: improve matching and parsing of XTB translation files (#35793) (0e2a577)
    • localize: improve placeholder mismatch error message (#35593) (53f059e)
    • localize: merge translation from all XLIFF <file> elements (#35936) (fc4c3c3), closes #35839
    • localize: show helpful error when providing an invalid cli option (#36010) (aad02e8)
    • localize: support minified ES5 $localize calls (#35562) (df75451), closes #35376
    • ngcc: add default config for angular2-highcharts (#35527) (3cc8127), closes #35399
    • ngcc: allow deep-import warnings to be ignored (#35683) (20b0c80), closes #35615
    • ngcc: capture path-mapped entry-points that start with same string (#35592) (71b5970), closes #35536
    • ngcc: consistently delegate to TypeScript host for typing files (#36089) (9e70bcb), closes #35078
    • ngcc: correctly detect emitted TS helpers in ES5 (#35191) (bd6a39c)
    • ngcc: correctly detect outer aliased class identifiers in ES5 (#35527) (fde8915), closes #35399
    • ngcc: do not crash on entry-point that fails to compile (#36083) (ff665b9)
    • ngcc: do not crash on overlapping entry-points (#36083) (c9f554c)
    • ngcc: handle imports in dts files when processing CommonJS (#35191) (b6e8847), closes #34356
    • ngcc: handle mappings outside the content when flattening source-maps (#35718) (73cf7d5), closes #35709
    • ngcc: handle missing sources when flattening source-maps (#35718) (72c4fda), closes #35709
    • ngcc: handle multiple original sources when flattening source-maps (#36027) (a40be00)
    • ngcc: introduce a new LockFile implementation that uses a child-process (#35861) (c55f900), closes #35761
    • ngcc: show helpful error when providing an invalid option (#36010) (1f89c61)
    • ngcc: use path-mappings from tsconfig in dependency resolution (#36180) (6defe96), closes #36119
    • ngcc: use preserve whitespaces from tsconfig if provided (#36189) (aef4323), closes #35871
    • 💻 platform-browser: add missing peerDependency on [@angular](https://github.com/angular)/animations (#35949) (64d6f13), closes #35888
    • router: removed unused ApplicationRef dependency (#35642) (c839c05), closes /github.com/angular/angular/commit/5a849829c42330d7e88e83e916e6e36380c97a97#diff-c0baae5e1df628e1a217e8dc38557
    • router: state data missing in routerLink (#33203) (de67978)
    • 👷 service-worker: treat 503 as offline (#35595) (96cdf03), closes #35571
    • 🛠 fix flaky test cases of passive events (#35679) (8ef29b6)

    <!-- CHANGELOG SPLIT MARKER -->