11import type {
2+ BlockStatement ,
23 ExportDefaultDeclaration ,
34 ExpressionStatement ,
45 Node ,
@@ -8,7 +9,11 @@ import type {
89} from '@babel/types' ;
910import type { Parsed as RawGlimmerTemplate } from 'content-tag' ;
1011
11- type GlimmerTemplate = ( ObjectExpression | StaticBlock ) & {
12+ type GlimmerTemplateProperties = (
13+ | BlockStatement
14+ | ObjectExpression
15+ | StaticBlock
16+ ) & {
1217 /**
1318 * Range of the contents, inclusive of inclusive of the
1419 * `<template></template>` tags.
@@ -28,14 +33,16 @@ type GlimmerTemplate = (ObjectExpression | StaticBlock) & {
2833 } ;
2934} ;
3035
36+ type GlimmerTemplate = ( BlockStatement | ObjectExpression | StaticBlock ) &
37+ GlimmerTemplateProperties ;
38+
3139/** Returns true if the node is a GlimmerTemplate. */
3240export function isGlimmerTemplate ( node : Node ) : node is Node & GlimmerTemplate {
3341 return node . extra ?. [ 'isGlimmerTemplate' ] === true ;
3442}
3543
3644export type GlimmerTemplateParent =
37- | GlimmerExpressionStatement
38- | GlimmerExpressionStatementTS
45+ | GlimmerStatementTS
3946 | GlimmerExportDefaultDeclaration
4047 | GlimmerExportDefaultDeclarationTS ;
4148
@@ -49,36 +56,15 @@ export function isGlimmerTemplateParent(
4956 if ( ! node ) return false ;
5057
5158 return (
52- isGlimmerTemplate ( node ) ||
53- isGlimmerExpressionStatement ( node ) ||
54- isGlimmerExpressionStatementTS ( node ) ||
59+ isGlimmerStatementTS ( node ) ||
5560 isGlimmerExportDefaultDeclaration ( node ) ||
5661 isGlimmerExportDefaultDeclarationTS ( node )
5762 ) ;
5863}
5964
60- type GlimmerExpressionStatement = ExpressionStatement & {
61- expression : GlimmerTemplate ;
62- } ;
63-
64- /**
65- * Type predicate for:
66- *
67- * ```gts
68- * <template></template>;
69- * ```
70- */
71- function isGlimmerExpressionStatement (
72- node : Node ,
73- ) : node is GlimmerExpressionStatement {
74- return (
75- node . type === 'ExpressionStatement' && isGlimmerTemplate ( node . expression )
76- ) ;
77- }
78-
79- type GlimmerExpressionStatementTS = ExpressionStatement & {
65+ type GlimmerStatementTS = ExpressionStatement & {
8066 expression : TSAsExpression & {
81- expression : GlimmerTemplate ;
67+ expression : ObjectExpression & GlimmerTemplateProperties ;
8268 } ;
8369} ;
8470
@@ -89,18 +75,17 @@ type GlimmerExpressionStatementTS = ExpressionStatement & {
8975 * <template></template> as TemplateOnlyComponent<Signature>
9076 * ```
9177 */
92- function isGlimmerExpressionStatementTS (
93- node : Node ,
94- ) : node is GlimmerExpressionStatementTS {
78+ function isGlimmerStatementTS ( node : Node ) : node is GlimmerStatementTS {
9579 return (
9680 node . type === 'ExpressionStatement' &&
9781 node . expression . type === 'TSAsExpression' &&
82+ node . expression . expression . type === 'ObjectExpression' &&
9883 isGlimmerTemplate ( node . expression . expression )
9984 ) ;
10085}
10186
10287type GlimmerExportDefaultDeclaration = ExportDefaultDeclaration & {
103- declaration : GlimmerTemplate ;
88+ declaration : ObjectExpression & GlimmerTemplateProperties ;
10489} ;
10590
10691/**
@@ -115,13 +100,14 @@ function isGlimmerExportDefaultDeclaration(
115100) : node is GlimmerExportDefaultDeclaration {
116101 return (
117102 node . type === 'ExportDefaultDeclaration' &&
103+ node . declaration . type === 'ObjectExpression' &&
118104 isGlimmerTemplate ( node . declaration )
119105 ) ;
120106}
121107
122108type GlimmerExportDefaultDeclarationTS = ExportDefaultDeclaration & {
123109 declaration : TSAsExpression & {
124- expression : GlimmerTemplate ;
110+ expression : ObjectExpression & GlimmerTemplateProperties ;
125111 } ;
126112} ;
127113
@@ -138,6 +124,7 @@ function isGlimmerExportDefaultDeclarationTS(
138124 return (
139125 node . type === 'ExportDefaultDeclaration' &&
140126 node . declaration . type === 'TSAsExpression' &&
127+ node . declaration . expression . type === 'ObjectExpression' &&
141128 isGlimmerTemplate ( node . declaration . expression )
142129 ) ;
143130}
0 commit comments