Skip to content

Commit f24246e

Browse files
arturovtmmalerba
authored andcommitted
refactor(core): inline isFactory within getNodeInjectable (#59824)
This commit inlines the `isFactory` function body directly within `getNodeInjectable` because it is only used once. ESBuild does not inline its body within the function, which can be observed when running the build with `NG_BUILD_MANGLE=0`. The results after inlining are as follows: ``` getNodeInjectable x 70,397,377 ops/sec ±3.88% (52 runs sampled) getNodeInjectable_inlined x 77,834,432 ops/sec ±3.13% (60 runs sampled) ``` PR Close #59824
1 parent 65d2ca9 commit f24246e

File tree

3 files changed

+3
-8
lines changed

3 files changed

+3
-8
lines changed

packages/core/src/render3/di.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ import {registerPreOrderHooks} from './hooks';
3131
import {AttributeMarker} from './interfaces/attribute_marker';
3232
import {ComponentDef, DirectiveDef} from './interfaces/definition';
3333
import {
34-
isFactory,
3534
NO_PARENT_INJECTOR,
3635
NodeInjectorFactory,
3736
NodeInjectorOffset,
@@ -729,7 +728,7 @@ export function getNodeInjectable(
729728
): any {
730729
let value = lView[index];
731730
const tData = tView.data;
732-
if (isFactory(value)) {
731+
if (value instanceof NodeInjectorFactory) {
733732
const factory: NodeInjectorFactory = value;
734733
if (factory.resolving) {
735734
throwCyclicDependencyError(stringifyForError(tData[index]));

packages/core/src/render3/instructions/write_to_directive_input.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import {InputSignalNode} from '../../authoring/input/input_signal_node';
1313
import {applyValueToInputField} from '../apply_value_input_field';
1414
import {DirectiveDef} from '../interfaces/definition';
1515
import {InputFlags} from '../interfaces/input_flags';
16-
import {isFactory} from '../interfaces/injector';
16+
import {NodeInjectorFactory} from '../interfaces/injector';
1717

1818
export function writeToDirectiveInput<T>(
1919
def: DirectiveDef<T>,
@@ -33,7 +33,7 @@ export function writeToDirectiveInput<T>(
3333
// Usually we resolve the directive instance using `LView[someIndex]` before writing to an
3434
// input, however if the read happens to early, the `LView[someIndex]` might actually be a
3535
// `NodeInjectorFactory`. Check for this specific case here since it can break in subtle ways.
36-
if (isFactory(instance)) {
36+
if (instance instanceof NodeInjectorFactory) {
3737
throw new Error(
3838
`ASSERTION ERROR: Cannot write input to factory for type ${def.type.name}. Directive has not been created yet.`,
3939
);

packages/core/src/render3/interfaces/injector.ts

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -287,7 +287,3 @@ export class NodeInjectorFactory {
287287
this.injectImpl = injectImplementation;
288288
}
289289
}
290-
291-
export function isFactory(obj: any): obj is NodeInjectorFactory {
292-
return obj instanceof NodeInjectorFactory;
293-
}

0 commit comments

Comments
 (0)