Skip to content

Commit

Permalink
refactor(core): reuse input signal node for models (#54387)
Browse files Browse the repository at this point in the history
Reworks the model so that it reuses `INPUT_SIGNAL_NODE` instead of implementing its own.

PR Close #54387
  • Loading branch information
crisbeto authored and AndrewKushnir committed Feb 12, 2024
1 parent 453e00c commit 0ecc2d1
Show file tree
Hide file tree
Showing 7 changed files with 8 additions and 45 deletions.
2 changes: 1 addition & 1 deletion goldens/public-api/core/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -1098,7 +1098,7 @@ export interface ModelSignal<T> extends WritableSignal<T> {
// (undocumented)
INPUT_SIGNAL_BRAND_WRITE_TYPE]: T;
// (undocumented)
[SIGNAL]: ModelSignalNode<T>;
[SIGNAL]: InputSignalNode<T, T>;
// @deprecated (undocumented)
subscribe(callback: (value: T) => void): () => void;
}
Expand Down
2 changes: 1 addition & 1 deletion packages/compiler-cli/src/ngtsc/testing/fake_core/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -200,7 +200,7 @@ export interface ModelOptions {
export interface ModelSignal<T> extends WritableSignal<T> {
[ɵINPUT_SIGNAL_BRAND_READ_TYPE]: T;
[ɵINPUT_SIGNAL_BRAND_WRITE_TYPE]: T;
subscribe(callback: (value: T) => void): {unsubscribe: () => void};
subscribe(callback: (value: T) => void): () => void;
}

export interface ModelFunction {
Expand Down
3 changes: 1 addition & 2 deletions packages/core/src/authoring/input/input_signal_node.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,7 @@ export const REQUIRED_UNSET_VALUE = /* @__PURE__ */ Symbol('InputSignalNode#UNSE
* Reactive node type for an input signal. An input signal extends a signal.
* There are special properties to enable transforms and required inputs.
*/
export interface InputSignalNode<ReadT, WriteT> extends
SignalNode<ReadT|typeof REQUIRED_UNSET_VALUE> {
export interface InputSignalNode<ReadT, WriteT> extends SignalNode<ReadT> {
/**
* User-configured transform that will run whenever a new value is applied
* to the input signal node.
Expand Down
3 changes: 2 additions & 1 deletion packages/core/src/authoring/model/model.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,9 @@
* found in the LICENSE file at https://angular.io/license
*/

import {REQUIRED_UNSET_VALUE} from '../input/input_signal_node';

import {createModelSignal, ModelOptions, ModelSignal} from './model_signal';
import {REQUIRED_UNSET_VALUE} from './model_signal_node';

export function modelFunction<T>(initialValue?: T): ModelSignal<T|undefined> {
return createModelSignal(initialValue);
Expand Down
7 changes: 3 additions & 4 deletions packages/core/src/authoring/model/model_signal.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,7 @@ import {RuntimeError, RuntimeErrorCode} from '../../errors';
import {Signal} from '../../render3/reactivity/api';
import {WritableSignal} from '../../render3/reactivity/signal';
import {ɵINPUT_SIGNAL_BRAND_READ_TYPE, ɵINPUT_SIGNAL_BRAND_WRITE_TYPE} from '../input/input_signal';

import {MODEL_SIGNAL_NODE, ModelSignalNode, REQUIRED_UNSET_VALUE} from './model_signal_node';
import {INPUT_SIGNAL_NODE, InputSignalNode, REQUIRED_UNSET_VALUE} from '../input/input_signal_node';

/**
* @developerPreview
Expand All @@ -37,7 +36,7 @@ export interface ModelOptions {
* @developerPreview
*/
export interface ModelSignal<T> extends WritableSignal<T> {
[SIGNAL]: ModelSignalNode<T>;
[SIGNAL]: InputSignalNode<T, T>;
[ɵINPUT_SIGNAL_BRAND_READ_TYPE]: T;
[ɵINPUT_SIGNAL_BRAND_WRITE_TYPE]: T;

Expand All @@ -55,7 +54,7 @@ export interface ModelSignal<T> extends WritableSignal<T> {
*/
export function createModelSignal<T>(initialValue: T): ModelSignal<T> {
const subscriptions: ((value: T) => void)[] = [];
const node: ModelSignalNode<T> = Object.create(MODEL_SIGNAL_NODE);
const node: InputSignalNode<T, T> = Object.create(INPUT_SIGNAL_NODE);

node.value = initialValue;

Expand Down
33 changes: 0 additions & 33 deletions packages/core/src/authoring/model/model_signal_node.ts

This file was deleted.

3 changes: 0 additions & 3 deletions packages/core/test/bundling/defer/bundle.golden_symbols.json
Original file line number Diff line number Diff line change
Expand Up @@ -1562,9 +1562,6 @@
{
"name": "init_model_signal"
},
{
"name": "init_model_signal_node"
},
{
"name": "init_module"
},
Expand Down

0 comments on commit 0ecc2d1

Please sign in to comment.