Skip to content

Commit

Permalink
Try this
Browse files Browse the repository at this point in the history
  • Loading branch information
NullVoxPopuli committed Jan 3, 2024
1 parent a9a03ab commit b2e9279
Show file tree
Hide file tree
Showing 2 changed files with 71 additions and 0 deletions.
59 changes: 59 additions & 0 deletions packages/core/__tests__/cli/custom-extensions.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -135,6 +135,15 @@ describe('CLI: custom extensions', () => {
'Greeting.gts': stripIndent`
<template>Hello!</template>
`,
're-export.gts': stripIndent`
export { default as Greeting } from './Greeting.gts';
`,
'vanilla.ts': 'export const two = 2;',
'barrel.ts': stripIndent`
export { default as Greeting } from './Greeting.gts';
export { Greeting as Greeting2 } from './re-export.gts';
export { two } from './vanilla.ts';
`,
});
});

Expand All @@ -147,6 +156,26 @@ describe('CLI: custom extensions', () => {
1 import Greeting from './Greeting.gts';
~~~~~~~~~~~~~~~~
barrel.ts:1:37 - error TS2307: Cannot find module './Greeting.gts' or its corresponding type declarations.
1 export { default as Greeting } from './Greeting.gts';
~~~~~~~~~~~~~~~~
barrel.ts:2:39 - error TS2307: Cannot find module './re-export.gts' or its corresponding type declarations.
2 export { Greeting as Greeting2 } from './re-export.gts';
~~~~~~~~~~~~~~~~~
barrel.ts:3:21 - error TS5097: An import path can only end with a '.ts' extension when 'allowImportingTsExtensions' is enabled.
3 export { two } from './vanilla.ts';
~~~~~~~~~~~~~~
re-export.gts:1:37 - error TS2307: Cannot find module './Greeting.gts' or its corresponding type declarations.
1 export { default as Greeting } from './Greeting.gts';
~~~~~~~~~~~~~~~~
"
`);
});
Expand All @@ -165,5 +194,35 @@ describe('CLI: custom extensions', () => {
expect(result.stderr).toBe('');
}
);

test.runIf(semver.gte(typescript.version, '5.0.0'))(
'declarations work with `allowImportingTsExtensions: true`',
async () => {
project.updateTsconfig((config) => {
config.compilerOptions ??= {};
config.compilerOptions['allowImportingTsExtensions'] = true;
});

let emitResult = await project.check({ flags: ['--declaration'] });

expect(emitResult.exitCode).toBe(0);

expect(project.read('re-export.d.ts')).toMatchInlineSnapshot(`
"export { default as Greeting } from './Greeting';
"
`);
expect(project.read('barrel.d.ts')).toMatchInlineSnapshot(`
"export { default as Greeting } from './Greeting';
export { Greeting as Greeting2 } from './re-export';
export { two } from './vanilla';
"
`);
expect(project.read('./Greeting.d.ts')).toMatchInlineSnapshot(`
"declare const _default: import(\\"@ember/component/template-only\\").TemplateOnlyComponent<never> & (abstract new () => import(\\"@glint/template/-private/integration\\").InvokableInstance<() => import(\\"@glint/template/-private/integration\\").ComponentReturn<{}>> & import(\\"@glint/template/-private/integration\\").HasContext<import(\\"@glint/template/-private/integration\\").TemplateContext<void, {}, {}, void>>);
export default _default;
"
`);
}
);
});
});
12 changes: 12 additions & 0 deletions packages/core/src/cli/perform-check.ts
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,18 @@ function createCompilerHost(
host.readFile = transformManager.readTransformedFile;
host.readDirectory = transformManager.readDirectory;

// Postprocess .d.ts files to temporarily patch '.gts' to '.ts'
// https://github.com/typed-ember/glint/issues/628
const tsWriteFile = host.writeFile;
const matchGtsImport = /\.gts';/gm;
host.writeFile = (fileName, data, writeByteOrderMark, onError) => {
const isDts = fileName.endsWith('.d.ts');
if (isDts && matchGtsImport.test(data)) {
data = data.replace(matchGtsImport, ".ts';");
}
tsWriteFile(fileName, data, writeByteOrderMark, onError);
};

return host;
}

Expand Down

0 comments on commit b2e9279

Please sign in to comment.