diff --git a/packages/compiler/src/render3/r3_deferred_blocks.ts b/packages/compiler/src/render3/r3_deferred_blocks.ts index 7fc622262abf..811e7923cd83 100644 --- a/packages/compiler/src/render3/r3_deferred_blocks.ts +++ b/packages/compiler/src/render3/r3_deferred_blocks.ts @@ -32,7 +32,7 @@ const HYDRATE_WHEN_PATTERN = /^hydrate\s+when\s/; const HYDRATE_ON_PATTERN = /^hydrate\s+on\s/; /** Pattern to identify a `hydrate never` trigger. */ -const HYDRATE_NEVER_PATTERN = /^hydrate\s+never\s*/; +const HYDRATE_NEVER_PATTERN = /^hydrate\s+never(\s*)$/; /** Pattern to identify a `minimum` parameter in a block. */ const MINIMUM_PARAMETER_PATTERN = /^minimum\s/; diff --git a/packages/compiler/test/render3/r3_template_transform_spec.ts b/packages/compiler/test/render3/r3_template_transform_spec.ts index 575659cc01d1..967be432636a 100644 --- a/packages/compiler/test/render3/r3_template_transform_spec.ts +++ b/packages/compiler/test/render3/r3_template_transform_spec.ts @@ -1419,6 +1419,32 @@ describe('R3 template transform', () => { ); }); + it('should report `hydrate never` used with additonal characters', () => { + expect(() => parse('@defer (hydrate never, and thank you) {hello}')).toThrowError( + /Unrecognized trigger/, + ); + }); + + it('should not report an error when `hydrate never` is used with additonal blocks', () => { + expect(() => parse('@defer (hydrate never; on idle;) {hello}')).not.toThrowError( + /Unrecognized trigger/, + ); + }); + + it('should not report an error when `hydrate never` is used with spaces', () => { + expect(() => parse('@defer(hydrate never ; on idle ;) {hello}')).not.toThrowError( + /Unrecognized trigger/, + ); + }); + + it('should not report an error when `hydrate never` is used after another block', () => { + expect(() => + parse(`@defer( + on idle; + hydrate never) {hello}`), + ).not.toThrowError(/Unrecognized trigger/); + }); + it('should report when `hydrate never` is used together with another `hydrate` trigger', () => { // Extra trigger after `hydrate never`. expect(() =>