Finds bootstrap roots and walks what they execute.
Answers "what runs while the app starts, and does any of it read X?":
collects the code roots Angular executes at bootstrap (initializers,
bootstrap component/module), on the first HTTP request (interceptors) and
on first injection (provider factories), and walks everything reachable
from them through calls and dependency injection.
call: call expressions, new X(), super(), getter/setter access
(resolved by CallableResolver, the same resolution
CallGraphBuilder uses)
inject: inject(X) runs the constructor of X, or the factory/class
registered for the token X
ctor-param: a constructor parameter of type X (or @Inject(TOKEN))
does the same
provider-deps: deps: [A, B] of a factory provider
Roots are found by scanning source files, not by evaluating which
providers are actually registered: a provideAppInitializer inside a
provideX() function that is never called is still reported. Spec files
are skipped. Reads are matched by expression text (AppConfig.settings
also matches AppConfig?.settings).
Discovers the roots (or uses the custom root options.method), keeps
those matching timings and file, and walks each breadth-first up to
depth and maxNodes, collecting watch hits on the way.
Finds bootstrap roots and walks what they execute.
Answers "what runs while the app starts, and does any of it read X?": collects the code roots Angular executes at bootstrap (initializers, bootstrap component/module), on the first HTTP request (interceptors) and on first injection (provider factories), and walks everything reachable from them through calls and dependency injection.
Remarks
Edges (BootstrapEdge):
call: call expressions,new X(),super(), getter/setter access (resolved by CallableResolver, the same resolution CallGraphBuilder uses)inject:inject(X)runs the constructor of X, or the factory/class registered for the token Xctor-param: a constructor parameter of type X (or@Inject(TOKEN)) does the sameprovider-deps:deps: [A, B]of a factory providerRoots are found by scanning source files, not by evaluating which providers are actually registered: a
provideAppInitializerinside aprovideX()function that is never called is still reported. Spec files are skipped. Reads are matched by expression text (AppConfig.settingsalso matchesAppConfig?.settings).Example