From a10f7cfbc268ff13edcccd3aefdd3a502b5ec3ee Mon Sep 17 00:00:00 2001 From: Matthieu Riegler Date: Wed, 16 Oct 2024 22:55:20 -0600 Subject: [PATCH] refactor(core): Don't generate `standalone: true` for definitions (#58238) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The runtime default is now `standalone: true`. `ɵɵdefineComponent`, `ɵɵdefineDirective` and `ɵɵdefinePipe` now set `standalone` as `true` by default in the definitions. PR Close #58238 --- goldens/size-tracking/integration-payloads.json | 4 ++-- packages/compiler/src/render3/r3_pipe_compiler.ts | 5 ++--- packages/compiler/src/render3/view/compiler.ts | 4 ++-- packages/core/src/render3/definition.ts | 7 +++---- .../core/test/acceptance/copy_definition_feature_spec.ts | 1 + packages/core/test/acceptance/standalone_spec.ts | 7 +++++++ 6 files changed, 17 insertions(+), 11 deletions(-) diff --git a/goldens/size-tracking/integration-payloads.json b/goldens/size-tracking/integration-payloads.json index b636af21b93..7698b857db4 100644 --- a/goldens/size-tracking/integration-payloads.json +++ b/goldens/size-tracking/integration-payloads.json @@ -15,7 +15,7 @@ "uncompressed": { "main": 108611, "polyfills": 34169, - "lazy.routes": 388 + "lazy.routes": 368 } }, "forms": { @@ -49,7 +49,7 @@ "uncompressed": { "main": 11497, "polyfills": 33807, - "defer.component": 371 + "defer.component": 351 } }, "platform-server-hydration/browser": { diff --git a/packages/compiler/src/render3/r3_pipe_compiler.ts b/packages/compiler/src/render3/r3_pipe_compiler.ts index 28e3264c390..ab3a211b011 100644 --- a/packages/compiler/src/render3/r3_pipe_compiler.ts +++ b/packages/compiler/src/render3/r3_pipe_compiler.ts @@ -60,9 +60,8 @@ export function compilePipeFromMetadata(metadata: R3PipeMetadata): R3CompiledExp // e.g. `pure: true` definitionMapValues.push({key: 'pure', value: o.literal(metadata.pure), quoted: false}); - // TODO: standalone as default value (invert the condition) - if (metadata.isStandalone) { - definitionMapValues.push({key: 'standalone', value: o.literal(true), quoted: false}); + if (metadata.isStandalone === false) { + definitionMapValues.push({key: 'standalone', value: o.literal(false), quoted: false}); } const expression = o diff --git a/packages/compiler/src/render3/view/compiler.ts b/packages/compiler/src/render3/view/compiler.ts index e2236966699..68bebe2197a 100644 --- a/packages/compiler/src/render3/view/compiler.ts +++ b/packages/compiler/src/render3/view/compiler.ts @@ -93,8 +93,8 @@ function baseDirectiveFields( definitionMap.set('exportAs', o.literalArr(meta.exportAs.map((e) => o.literal(e)))); } - if (meta.isStandalone) { - definitionMap.set('standalone', o.literal(true)); + if (meta.isStandalone === false) { + definitionMap.set('standalone', o.literal(false)); } if (meta.isSignal) { definitionMap.set('signals', o.literal(true)); diff --git a/packages/core/src/render3/definition.ts b/packages/core/src/render3/definition.ts index 50962c8efe7..cf744495957 100644 --- a/packages/core/src/render3/definition.ts +++ b/packages/core/src/render3/definition.ts @@ -38,6 +38,7 @@ import {InputFlags} from './interfaces/input_flags'; import type {TAttributes, TConstantsOrFactory} from './interfaces/node'; import {CssSelectorList} from './interfaces/projection'; import {stringifyCSSSelectorList} from './node_selector_matcher'; +import {NG_STANDALONE_DEFAULT_VALUE} from './standalone-default-value'; /** * Map of inputs for a given directive/component. @@ -603,7 +604,7 @@ export function ɵɵdefinePipe(pipeDef: { name: pipeDef.name, factory: null, pure: pipeDef.pure !== false, - standalone: pipeDef.standalone === true, + standalone: pipeDef.standalone ?? NG_STANDALONE_DEFAULT_VALUE, onDestroy: pipeDef.type.prototype.ngOnDestroy || null, }; } @@ -636,7 +637,6 @@ export function getPipeDef(type: any): PipeDef | null { */ export function isStandalone(type: Type): boolean { const def = getComponentDef(type) || getDirectiveDef(type) || getPipeDef(type); - // TODO: standalone as default value (invert the condition) return def !== null ? def.standalone : false; } @@ -665,8 +665,7 @@ function getNgDirectiveDef(directiveDefinition: DirectiveDefinition): Dire inputTransforms: null, inputConfig: directiveDefinition.inputs || EMPTY_OBJ, exportAs: directiveDefinition.exportAs || null, - // TODO: standalone as default value (invert the condition) - standalone: directiveDefinition.standalone === true, + standalone: directiveDefinition.standalone ?? NG_STANDALONE_DEFAULT_VALUE, signals: directiveDefinition.signals === true, selectors: directiveDefinition.selectors || EMPTY_ARRAY, viewQuery: directiveDefinition.viewQuery || null, diff --git a/packages/core/test/acceptance/copy_definition_feature_spec.ts b/packages/core/test/acceptance/copy_definition_feature_spec.ts index 4380614a80f..99264d529e2 100644 --- a/packages/core/test/acceptance/copy_definition_feature_spec.ts +++ b/packages/core/test/acceptance/copy_definition_feature_spec.ts @@ -45,6 +45,7 @@ describe('CopyDefinitionFeature', () => { static override ɵcmp = defineComponent({ type: ChildComponent, selectors: [['some-cmp']], + standalone: false, features: [InheritDefinitionFeature, CopyDefinitionFeature], decls: 0, vars: 0, diff --git a/packages/core/test/acceptance/standalone_spec.ts b/packages/core/test/acceptance/standalone_spec.ts index e482d2b4c28..917d869988f 100644 --- a/packages/core/test/acceptance/standalone_spec.ts +++ b/packages/core/test/acceptance/standalone_spec.ts @@ -922,6 +922,13 @@ describe('standalone components, directives, and pipes', () => { describe('isStandalone()', () => { it('should return `true` if component is standalone', () => { + @Component({selector: 'standalone-cmp'}) + class StandaloneCmp {} + + expect(isStandalone(StandaloneCmp)).toBeTrue(); + }); + + it('should return `true` if component is standalone (with `standalone:true`)', () => { @Component({selector: 'standalone-cmp', standalone: true}) class StandaloneCmp {}