Skip to content

Commit 1124b8f

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 aa8dff8 commit 1124b8f

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
@@ -32,7 +32,6 @@ import {registerPreOrderHooks} from './hooks';
3232
import {AttributeMarker} from './interfaces/attribute_marker';
3333
import {ComponentDef, DirectiveDef} from './interfaces/definition';
3434
import {
35-
isFactory,
3635
NO_PARENT_INJECTOR,
3736
NodeInjectorFactory,
3837
NodeInjectorOffset,
@@ -728,7 +727,7 @@ export function getNodeInjectable(
728727
): any {
729728
let value = lView[index];
730729
const tData = tView.data;
731-
if (isFactory(value)) {
730+
if (value instanceof NodeInjectorFactory) {
732731
const factory: NodeInjectorFactory = value;
733732
if (factory.resolving) {
734733
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)