This commit updates the logic that calculates `useFactory` function arguments to avoid relying on `instanceof` checks (thus always retaining symbols) and relies on flags that DI decorators contain (as a monkey-patched property). Another perf benefit is having less megamorphic reads while calculating args for the `useFactory` call: we used to check whether a token has `ngMetadataName` property 4 times (in worst case), now we have just 1 megamorphic read in all cases. Closes #40143. PR Close #40145
Bundle
js_expected_symbol_test
This folder contains tests which assert that most of the code is tree shaken away. This is asserted by keeping gold files of all symbols which are expected to be retained. When doing renaming it is often necessary to update the gold files, to do so use these commands:
yarn bazel run --config=ivy //packages/core/test/bundling/injection:symbol_test.accept
yarn bazel run --config=ivy //packages/core/test/bundling/cyclic_import:symbol_test.accept
yarn bazel run --config=ivy //packages/core/test/bundling/forms:symbol_test.accept
yarn bazel run --config=ivy //packages/core/test/bundling/hello_world:symbol_test.accept
yarn bazel run --config=ivy //packages/core/test/bundling/router:symbol_test.accept
yarn bazel run --config=ivy //packages/core/test/bundling/todo:symbol_test.accept
Running all symbol tests
To run all symbol tests with one command, you can use the following scripts:
yarn run symbol-extractor:check
yarn run symbol-extractor:update