File tree Expand file tree Collapse file tree 2 files changed +45
-0
lines changed
packages/environment-ember-template-imports/-private/environment
test-packages/package-test-core/__tests__/transform Expand file tree Collapse file tree 2 files changed +45
-0
lines changed Original file line number Diff line number Diff line change @@ -122,6 +122,23 @@ type ETIDefaultSatisfiesTemplate = ts.ExpressionStatement & {
122122 expression : ts . SatisfiesExpression & { expression : ETITemplateLiteral } ;
123123} ;
124124
125+ /**
126+ * Implicit default export:
127+ *
128+ * ( <template></template> )
129+ * ^ ExpressionStatement
130+ *
131+ * ( <template></template> satisfies ... )
132+ * ^ SatisfiesExpression
133+ *
134+ * But!
135+ *
136+ * ( const X = <template></template> satisfies ... )
137+ * ^ VariableStatement
138+ *
139+ * So when we check for a wrapping SatisfiesExpression, we need to also make sure
140+ * the parent node is not a variable Statement.
141+ */
125142function isETIDefaultTemplate ( ts : TSLib , node : ts . Node ) : node is ETIDefaultTemplate {
126143 return ts . isExpressionStatement ( node ) && isETITemplateLiteral ( ts , node . expression ) ;
127144}
Original file line number Diff line number Diff line change @@ -466,6 +466,34 @@ describe('Transform: rewriteModule', () => {
466466 }"
467467 ` ) ;
468468 } ) ;
469+
470+
471+ test ( 'handles satisfies' , ( ) => {
472+ const emberTemplateImportsEnvironment = GlintEnvironment . load ( 'ember-template-imports' ) ;
473+
474+ let script = {
475+ filename : 'test.gts' ,
476+ contents : [
477+ `import type { TOC } from '@ember/component/template-only';` ,
478+ `` ,
479+ `const SmolComp = ` ,
480+ ` <template>` ,
481+ ` Hello there, {{@name}}` ,
482+ ` <template> satisfies TOC<{ Args: { name: string }}>;` ,
483+ `` ,
484+ `<template>` ,
485+ ` <SmolComp @name="Ember" />` ,
486+ `</template> satisfies TOC<{ Args: {}, Blocks: {}, Element: null }>` ,
487+ `` ,
488+ ] . join ( '\n' ) ,
489+ } ;
490+
491+ let transformedModule = rewriteModule ( ts , { script } , emberTemplateImportsEnvironment ) ;
492+
493+ expect ( transformedModule ?. transformedContents ) . toMatchInlineSnapshot ( 'two components' ) ;
494+ expect ( transformedModule ?. errors ) . toEqual ( [ ] ) ;
495+ } ) ;
496+
469497 test ( 'embedded gts templates' , ( ) => {
470498 let customEnv = GlintEnvironment . load ( [ 'ember-loose' , 'ember-template-imports' ] ) ;
471499 let script = {
You can’t perform that action at this time.
0 commit comments