diff --git a/packages/common/src/pipes/async_pipe.ts b/packages/common/src/pipes/async_pipe.ts index ed48670792d..63ee5b06679 100644 --- a/packages/common/src/pipes/async_pipe.ts +++ b/packages/common/src/pipes/async_pipe.ts @@ -20,7 +20,7 @@ import { } from '@angular/core'; import type {Observable, Subscribable, Unsubscribable} from 'rxjs'; -import {invalidPipeArgumentError} from './invalid_pipe_argument_error'; +import {invalidPipeArgumentError} from './utils'; interface SubscriptionStrategy { createSubscription( diff --git a/packages/common/src/pipes/case_conversion_pipes.ts b/packages/common/src/pipes/case_conversion_pipes.ts index aa38f7add75..b911636f4b5 100644 --- a/packages/common/src/pipes/case_conversion_pipes.ts +++ b/packages/common/src/pipes/case_conversion_pipes.ts @@ -8,7 +8,7 @@ import {Pipe, PipeTransform, Type} from '@angular/core'; -import {invalidPipeArgumentError} from './invalid_pipe_argument_error'; +import {invalidPipeArgumentError} from './utils'; /** * Transforms text to all lower case. diff --git a/packages/common/src/pipes/date_pipe.ts b/packages/common/src/pipes/date_pipe.ts index eafb04e1a2d..e47140738e2 100644 --- a/packages/common/src/pipes/date_pipe.ts +++ b/packages/common/src/pipes/date_pipe.ts @@ -11,7 +11,7 @@ import {Inject, InjectionToken, LOCALE_ID, Optional, Pipe, PipeTransform} from ' import {formatDate} from '../i18n/format_date'; import {DatePipeConfig, DEFAULT_DATE_FORMAT} from './date_pipe_config'; -import {invalidPipeArgumentError} from './invalid_pipe_argument_error'; +import {invalidPipeArgumentError} from './utils'; /** * Optionally-provided default timezone to use for all instances of `DatePipe` (such as `'+0430'`). diff --git a/packages/common/src/pipes/i18n_plural_pipe.ts b/packages/common/src/pipes/i18n_plural_pipe.ts index f4d3da45da5..92600da11f4 100644 --- a/packages/common/src/pipes/i18n_plural_pipe.ts +++ b/packages/common/src/pipes/i18n_plural_pipe.ts @@ -10,7 +10,7 @@ import {Pipe, PipeTransform} from '@angular/core'; import {getPluralCategory, NgLocalization} from '../i18n/localization'; -import {invalidPipeArgumentError} from './invalid_pipe_argument_error'; +import {invalidPipeArgumentError} from './utils'; const _INTERPOLATION_REGEXP: RegExp = /#/g; diff --git a/packages/common/src/pipes/i18n_select_pipe.ts b/packages/common/src/pipes/i18n_select_pipe.ts index 142b762892c..3ff8f9888ce 100644 --- a/packages/common/src/pipes/i18n_select_pipe.ts +++ b/packages/common/src/pipes/i18n_select_pipe.ts @@ -8,7 +8,7 @@ import {Pipe, PipeTransform} from '@angular/core'; -import {invalidPipeArgumentError} from './invalid_pipe_argument_error'; +import {invalidPipeArgumentError} from './utils'; /** * @ngModule CommonModule diff --git a/packages/common/src/pipes/json_pipe.ts b/packages/common/src/pipes/json_pipe.ts index eba55b6cb20..25e75bbfe1f 100644 --- a/packages/common/src/pipes/json_pipe.ts +++ b/packages/common/src/pipes/json_pipe.ts @@ -6,7 +6,8 @@ * found in the LICENSE file at https://angular.dev/license */ -import {isSignal, Pipe, PipeTransform} from '@angular/core'; +import {Pipe, PipeTransform} from '@angular/core'; +import {warnIfSignal} from './utils'; /** * @ngModule CommonModule @@ -34,9 +35,7 @@ export class JsonPipe implements PipeTransform { * @param value A value of any type to convert into a JSON-format string. */ transform(value: any): string { - if (ngDevMode && isSignal(value)) { - console.warn(`The JsonPipe does not unwrap signals. Received a signal with value:`, value()); - } + ngDevMode && warnIfSignal('JsonPipe', value); return JSON.stringify(value, null, 2); } diff --git a/packages/common/src/pipes/keyvalue_pipe.ts b/packages/common/src/pipes/keyvalue_pipe.ts index 71dc0877102..17e61214d40 100644 --- a/packages/common/src/pipes/keyvalue_pipe.ts +++ b/packages/common/src/pipes/keyvalue_pipe.ts @@ -14,6 +14,7 @@ import { Pipe, PipeTransform, } from '@angular/core'; +import {warnIfSignal} from './utils'; function makeKeyValuePair(key: K, value: V): KeyValue { return {key: key, value: value}; @@ -109,6 +110,8 @@ export class KeyValuePipe implements PipeTransform { input: undefined | null | {[key: string]: V; [key: number]: V} | ReadonlyMap, compareFn: ((a: KeyValue, b: KeyValue) => number) | null = defaultComparator, ): Array> | null { + ngDevMode && warnIfSignal('KeyValuePipe', input); + if (!input || (!(input instanceof Map) && typeof input !== 'object')) { return null; } diff --git a/packages/common/src/pipes/number_pipe.ts b/packages/common/src/pipes/number_pipe.ts index df293cd037a..30b9ee519c2 100644 --- a/packages/common/src/pipes/number_pipe.ts +++ b/packages/common/src/pipes/number_pipe.ts @@ -18,7 +18,7 @@ import { import {formatCurrency, formatNumber, formatPercent} from '../i18n/format_number'; import {getCurrencySymbol} from '../i18n/locale_data_api'; -import {invalidPipeArgumentError} from './invalid_pipe_argument_error'; +import {invalidPipeArgumentError} from './utils'; import {RuntimeErrorCode} from '../errors'; /** diff --git a/packages/common/src/pipes/slice_pipe.ts b/packages/common/src/pipes/slice_pipe.ts index 0b254c9de0c..78cddf2417d 100644 --- a/packages/common/src/pipes/slice_pipe.ts +++ b/packages/common/src/pipes/slice_pipe.ts @@ -8,7 +8,7 @@ import {Pipe, PipeTransform} from '@angular/core'; -import {invalidPipeArgumentError} from './invalid_pipe_argument_error'; +import {invalidPipeArgumentError} from './utils'; /** * @ngModule CommonModule diff --git a/packages/common/src/pipes/invalid_pipe_argument_error.ts b/packages/common/src/pipes/utils.ts similarity index 60% rename from packages/common/src/pipes/invalid_pipe_argument_error.ts rename to packages/common/src/pipes/utils.ts index 1dc8f4e386f..65bf2ee2926 100644 --- a/packages/common/src/pipes/invalid_pipe_argument_error.ts +++ b/packages/common/src/pipes/utils.ts @@ -6,7 +6,12 @@ * found in the LICENSE file at https://angular.dev/license */ -import {Type, ɵRuntimeError as RuntimeError, ɵstringify as stringify} from '@angular/core'; +import { + Type, + ɵRuntimeError as RuntimeError, + ɵstringify as stringify, + isSignal, +} from '@angular/core'; import {RuntimeErrorCode} from '../errors'; @@ -16,3 +21,9 @@ export function invalidPipeArgumentError(type: Type, value: Object) { ngDevMode && `InvalidPipeArgument: '${value}' for pipe '${stringify(type)}'`, ); } + +export function warnIfSignal(pipeName: string, value: unknown): void { + if (isSignal(value)) { + console.warn(`The ${pipeName} does not unwrap signals. Received a signal with value:`, value()); + } +}