diff --git a/.changeset/clean-sloths-try.md b/.changeset/clean-sloths-try.md new file mode 100644 index 000000000..89bcd8ae9 --- /dev/null +++ b/.changeset/clean-sloths-try.md @@ -0,0 +1,5 @@ +--- +'@astrojs/compiler': minor +--- + +Add propagation metadata to the TransformResult diff --git a/cmd/astro-wasm/astro-wasm.go b/cmd/astro-wasm/astro-wasm.go index a6d5ce249..b9d6288d8 100644 --- a/cmd/astro-wasm/astro-wasm.go +++ b/cmd/astro-wasm/astro-wasm.go @@ -179,6 +179,7 @@ type TransformResult struct { ClientOnlyComponents []HydratedComponent `js:"clientOnlyComponents"` ContainsHead bool `js:"containsHead"` StyleError []string `js:"styleError"` + Propagation bool `js:"propagation"` } // This is spawned as a goroutine to preprocess style nodes using an async function passed from JS @@ -412,6 +413,7 @@ func Transform() any { ClientOnlyComponents: clientOnlyComponents, ContainsHead: doc.ContainsHead, StyleError: styleError, + Propagation: doc.HeadPropagation, } switch transformOptions.SourceMap { case "external": diff --git a/internal/node.go b/internal/node.go index 11973b81b..94fc37ea2 100644 --- a/internal/node.go +++ b/internal/node.go @@ -96,6 +96,7 @@ type Node struct { ClientOnlyComponents []*HydratedComponentMetadata HydrationDirectives map[string]bool ContainsHead bool + HeadPropagation bool Type NodeType DataAtom atom.Atom diff --git a/internal/transform/transform.go b/internal/transform/transform.go index 1fb57b1dd..9cf788d5c 100644 --- a/internal/transform/transform.go +++ b/internal/transform/transform.go @@ -46,6 +46,7 @@ func Transform(doc *astro.Node, opts TransformOptions, h *handler.Handler) *astr } if HasAttr(n, TRANSITION_ANIMATE) || HasAttr(n, TRANSITION_NAME) || HasAttr(n, TRANSITION_PERSIST) { doc.Transition = true + doc.HeadPropagation = true getOrCreateTransitionScope(n, &opts, i) } if len(definedVars) > 0 { diff --git a/packages/compiler/src/shared/types.ts b/packages/compiler/src/shared/types.ts index 9f3efb6ea..360d10240 100644 --- a/packages/compiler/src/shared/types.ts +++ b/packages/compiler/src/shared/types.ts @@ -89,6 +89,7 @@ export interface TransformResult { hydratedComponents: HydratedComponent[]; clientOnlyComponents: HydratedComponent[]; containsHead: boolean; + propagation: boolean; } export interface SourceMap { diff --git a/packages/compiler/test/transition/meta.ts b/packages/compiler/test/transition/meta.ts new file mode 100644 index 000000000..b09f35d63 --- /dev/null +++ b/packages/compiler/test/transition/meta.ts @@ -0,0 +1,20 @@ +import { test } from 'uvu'; +import * as assert from 'uvu/assert'; +import { transform } from '@astrojs/compiler'; + +const FIXTURE = ` +
+`; + +let result; +test.before(async () => { + result = await transform(FIXTURE, { + resolvePath: async (s) => s, + }); +}); + +test('tagged with propagation metadata', () => { + assert.equal(result.propagation, true); +}); + +test.run();