angular/packages/core/test/render3
Alex Rickabaugh 7d954dffd0 feat(ivy): detect cycles and use remote scoping of components if needed (#28169)
By its nature, Ivy alters the import graph of a TS program, adding imports
where template dependencies exist. For example, if ComponentA uses PipeB
in its template, Ivy will insert an import of PipeB into the file in which
ComponentA is declared.

Any insertion of an import into a program has the potential to introduce a
cycle into the import graph. If for some reason the file in which PipeB is
declared imports the file in which ComponentA is declared (maybe it makes
use of a service or utility function that happens to be in the same file as
ComponentA) then this could create an import cycle. This turns out to
happen quite regularly in larger Angular codebases.

TypeScript and the Ivy runtime have no issues with such cycles. However,
other tools are not so accepting. In particular the Closure Compiler is
very anti-cycle.

To mitigate this problem, it's necessary to detect when the insertion of
an import would create a cycle. ngtsc can then use a different strategy,
known as "remote scoping", instead of directly writing a reference from
one component to another. Under remote scoping, a function
'setComponentScope' is called after the declaration of the component's
module, which does not require the addition of new imports.

FW-647 #resolve

PR Close #28169
2019-01-28 12:10:25 -08:00
..
ivy feat(ivy): detect cycles and use remote scoping of components if needed (#28169) 2019-01-28 12:10:25 -08:00
jit fix(core): Remove static dependency from @angular/core to @angular/compiler (#26734) 2018-10-31 14:15:06 -04:00
styling fix(ivy): save queries at the correct indices (#28327) 2019-01-24 10:16:22 -08:00
basic_perf.ts refactor(ivy): generate vars in component defs (#25562) 2018-08-20 11:08:10 -07:00
BUILD.bazel build: extract interface and util sub compilation from core (#28028) 2019-01-10 16:31:44 -08:00
change_detection_spec.ts fix(ivy): init hooks should be called once and only once (#28239) 2019-01-25 14:31:23 -08:00
common_integration_spec.ts fix(ivy): provide an ability to match <ng-template> tags (#27636) 2018-12-17 09:33:37 -08:00
common_with_def.ts fix(ivy): NgOnChangesFeature no longer included in hello_world (#28187) 2019-01-23 10:59:34 -08:00
component_ref_spec.ts fix(ivy): pass ngContentSelectors through to defineComponent() calls (#27867) 2019-01-10 13:36:37 -08:00
component_spec.ts fix(ivy): process creation mode deeply before running update mode (#27744) 2018-12-19 15:10:16 -05:00
content_spec.ts fix(ivy): View Queries inheritance fix (#28309) 2019-01-23 14:57:17 -08:00
control_flow_spec.ts fix(ivy): process creation mode deeply before running update mode (#27744) 2018-12-19 15:10:16 -05:00
di_spec.ts test(ivy): NodeInjector should know how to get itself (INJECTOR) (#28009) 2019-01-14 17:09:26 -08:00
directive_spec.ts fix(ivy): provide an ability to match <ng-template> tags (#27636) 2018-12-17 09:33:37 -08:00
discovery_utils_spec.ts fix(ivy): support multiple exportAs (#27996) 2019-01-10 16:53:26 -08:00
domino.d.ts feat(core): Moving Renderer3 into @angular/core (#20855) 2017-12-21 21:40:58 -08:00
exports_spec.ts fix(ivy): support multiple exportAs (#27996) 2019-01-10 16:53:26 -08:00
global_utils_spec.ts build: extract interface and util sub compilation from core (#28028) 2019-01-10 16:31:44 -08:00
host_binding_spec.ts fix(ivy): View Queries inheritance fix (#28309) 2019-01-23 14:57:17 -08:00
i18n_spec.ts fix(ivy): proper i18n postprocessing in case of nested templates (#28209) 2019-01-25 12:54:29 -08:00
imported_renderer2.ts refactor(ivy): misc cleanup (#25369) 2018-08-14 11:58:47 -07:00
inherit_definition_feature_spec.ts fix(ivy): save queries at the correct indices (#28327) 2019-01-24 10:16:22 -08:00
instructions_spec.ts fix(ivy): merge static style rendering across elements, directives and components (#27661) 2018-12-21 18:14:44 -05:00
integration_spec.ts fix(ivy): ensure interpolated style/classes do not cause tracking issues for bindings (#28190) 2019-01-17 09:58:14 -08:00
jit_environment_spec.ts fix(ivy): remove metadata from *Def and introduce *DefWithMeta types (#26203) 2018-10-04 10:11:17 -07:00
lifecycle_spec.ts fix(ivy): NgOnChangesFeature no longer included in hello_world (#28187) 2019-01-23 10:59:34 -08:00
listeners_spec.ts fix(ivy): adding event listeners for global objects (window, document, body) (#27772) 2019-01-08 10:33:17 -08:00
load_domino.ts fix(core): Remove static dependency from @angular/core to @angular/compiler (#26734) 2018-10-31 14:15:06 -04:00
metadata_spec.ts build: extract interface and util sub compilation from core (#28028) 2019-01-10 16:31:44 -08:00
node_selector_matcher_spec.ts refactor(ivy): clean up TNode not depending on LView (#28354) 2019-01-25 13:07:26 -08:00
outputs_spec.ts refactor(ivy): generate vars in component defs (#25562) 2018-08-20 11:08:10 -07:00
perfCounter_spec.ts build: extract interface and util sub compilation from core (#28028) 2019-01-10 16:31:44 -08:00
pipe_spec.ts fix(ivy): pipes should overwrite pipes with later entry in the pipes array (#27910) 2019-01-04 13:21:46 -08:00
properties_spec.ts fix(ivy): support multiple exportAs (#27996) 2019-01-10 16:53:26 -08:00
providers_spec.ts fix(ivy): ngOnDestroy hooks should be called on providers (#27955) 2019-01-07 14:43:33 -08:00
pure_function_spec.ts fix(ivy): provide an ability to match <ng-template> tags (#27636) 2018-12-17 09:33:37 -08:00
query_spec.ts fix(ivy): queries should register matches from top to bottom (#28319) 2019-01-25 12:51:09 -08:00
render_util.ts fix(ivy): handle namespaces in attributes (#28242) 2019-01-23 11:58:41 -08:00
renderer_factory_spec.ts fix(ivy): don't create TNodes for native projectable nodes (#28275) 2019-01-23 10:56:09 -08:00
template_ref_spec.ts fix(ivy): provide an ability to match <ng-template> tags (#27636) 2018-12-17 09:33:37 -08:00
testing_spec.ts refactor(core): remove withBody from public testing API (#25171) 2018-07-31 15:09:32 -07:00
util_spec.ts refactor(ivy): treate LView as the primary global state (#27282) 2018-11-29 21:26:15 -08:00
view_container_ref_spec.ts fix(ivy): save queries at the correct indices (#28327) 2019-01-24 10:16:22 -08:00