Skip to content

Commit ece7194

Browse files
Merge branch 'nvp/test-for-satisfies' into push-yyuuounswlrq
2 parents 7a435e5 + e6db4d6 commit ece7194

File tree

2 files changed

+45
-0
lines changed
  • packages/environment-ember-template-imports/-private/environment
  • test-packages/package-test-core/__tests__/transform

2 files changed

+45
-0
lines changed

packages/environment-ember-template-imports/-private/environment/transform.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff 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+
*/
125142
function isETIDefaultTemplate(ts: TSLib, node: ts.Node): node is ETIDefaultTemplate {
126143
return ts.isExpressionStatement(node) && isETITemplateLiteral(ts, node.expression);
127144
}

test-packages/package-test-core/__tests__/transform/rewrite.test.ts

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff 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 = {

0 commit comments

Comments
 (0)