mirror of
https://github.com/angular/angular.git
synced 2026-09-14 13:54:52 +08:00
907da3977a
Fixes an issue where destroy hooks are not set up for `useClass` providers that rely on `forwardRef` for passing the actual class reference. Currently the destroy hooks are not captured because forward refs are not resolved for class providers. In ES2015+ this issue becomes even more critical if arrow-functions are used for e.g. `useClass: () => forwardRef(..)`. This is because arrow functions do not have a prototype, unlike in ES5 where the function assigned to `useClass` would always have a prototype. In ES2015+ a runtime exception as followed is returned (and doesn't give any useful indication of the forwardRef issue): ``` TypeError: Cannot read properties of undefined (reading 'ngOnDestroy') at registerDestroyHooksIfSupported (dist/packages/core/src/render3/di_setup.ts:196:35 <- dist/legacy-test-bundle.spec.js:41508:37) at resolveProvider (dist/packages/core/src/render3/di_setup.ts:153:9 <- dist/legacy-test-bundle.spec.js:41485:11) at resolveProvider (dist/packages/core/src/render3/di_setup.ts:70:7 <- dist/legacy-test-bundle.spec.js:41445:9) at providersResolver (dist/packages/core/src/render3/di_setup.ts:54:5 <- dist/legacy-test-bundle.spec.js:41438:7) at Object.definition.providersResolver (dist/packages/core/src/render3/features/providers_feature.ts:48:18 <- dist/legacy-test-bundle.spec.js:41600:16) at resolveDirectives (dist/packages/core/src/render3/instructions/shared.ts:1179:40 <- dist/legacy-test-bundle.spec.js:35611:17) at elementStartFirstCreatePass (dist/packages/core/src/render3/instructions/element.ts:40:7 <- dist/legacy-test-bundle.spec.js:38432:27) at ɵɵelementStart (dist/packages/core/src/render3/instructions/element.ts:87:7 <- dist/legacy-test-bundle.spec.js:38453:43) at ɵɵelement (dist/packages/core/src/render3/instructions/element.ts:180:3 <- dist/legacy-test-bundle.spec.js:38510:5) at MultipleFormControls_Template (ng:///MultipleFormControls.js:9:9) ``` PR Close #44281
114 lines
2.3 KiB
Python
114 lines
2.3 KiB
Python
load("//tools:defaults.bzl", "jasmine_node_test", "karma_web_test_suite", "ts_library")
|
|
|
|
package(default_visibility = ["//visibility:public"])
|
|
|
|
ES2015_SPECS = [
|
|
"providers_es2015_spec.ts",
|
|
]
|
|
|
|
ts_library(
|
|
name = "render3_lib",
|
|
testonly = True,
|
|
srcs = glob(
|
|
["**/*.ts"],
|
|
exclude = [
|
|
"**/*_perf.ts",
|
|
"domino.d.ts",
|
|
"load_domino.ts",
|
|
"is_shape_of.ts",
|
|
"jit_spec.ts",
|
|
"matchers.ts",
|
|
] + ES2015_SPECS,
|
|
),
|
|
deps = [
|
|
":matchers",
|
|
"//packages:types",
|
|
"//packages/animations",
|
|
"//packages/animations/browser",
|
|
"//packages/animations/browser/testing",
|
|
"//packages/common",
|
|
"//packages/compiler",
|
|
"//packages/core",
|
|
"//packages/core/src/di/interface",
|
|
"//packages/core/src/interface",
|
|
"//packages/core/src/util",
|
|
"//packages/core/testing",
|
|
"//packages/platform-browser",
|
|
"//packages/platform-browser/animations",
|
|
"//packages/platform-browser/testing",
|
|
"//packages/private/testing",
|
|
"@npm//rxjs",
|
|
],
|
|
)
|
|
|
|
ts_library(
|
|
name = "render3_es2015_test_lib",
|
|
testonly = True,
|
|
srcs = ES2015_SPECS,
|
|
devmode_target = "es2015",
|
|
tsconfig = "es2015-tsconfig.json",
|
|
deps = [
|
|
":matchers",
|
|
":render3_lib",
|
|
"//packages:types",
|
|
"//packages/core",
|
|
],
|
|
)
|
|
|
|
ts_library(
|
|
name = "matchers",
|
|
testonly = True,
|
|
srcs = [
|
|
"is_shape_of.ts",
|
|
"matchers.ts",
|
|
],
|
|
deps = [
|
|
"//packages/core",
|
|
],
|
|
)
|
|
|
|
ts_library(
|
|
name = "domino",
|
|
testonly = True,
|
|
srcs = [
|
|
"load_domino.ts",
|
|
],
|
|
deps = [
|
|
"//packages/common",
|
|
"//packages/compiler",
|
|
"//packages/platform-server",
|
|
"//packages/zone.js/lib:zone_d_ts",
|
|
],
|
|
)
|
|
|
|
ts_library(
|
|
name = "render3_node_lib",
|
|
testonly = True,
|
|
srcs = [],
|
|
deps = [
|
|
":domino",
|
|
":render3_lib",
|
|
],
|
|
)
|
|
|
|
jasmine_node_test(
|
|
name = "render3",
|
|
bootstrap = [
|
|
":domino_es5",
|
|
"//tools/testing:node_es5",
|
|
],
|
|
deps = [
|
|
":render3_es2015_test_lib",
|
|
":render3_node_lib",
|
|
"//packages/zone.js/lib",
|
|
],
|
|
)
|
|
|
|
karma_web_test_suite(
|
|
name = "render3_web",
|
|
deps = [
|
|
":render3_es2015_test_lib",
|
|
":render3_lib",
|
|
],
|
|
)
|