Skip to content

Commit 9a09986

Browse files
authored
Merge pull request #1725 from Azlond/1714-rewriteRelativeImportExtensions-support
feat: #1714 added support for ts 5.7 rewriteRelativeImportExtensions
2 parents ca2068d + 5ff892f commit 9a09986

File tree

3 files changed

+64
-2
lines changed

3 files changed

+64
-2
lines changed

packages/cli/src/routeGeneration/routeGenerator.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -151,9 +151,9 @@ export abstract class AbstractRouteGenerator<Config extends ExtendedRoutesConfig
151151

152152
protected getRelativeImportPath(fileLocation: string) {
153153
const currentExt = path.extname(fileLocation);
154-
let newExtension = '';
154+
let newExtension = this.options.rewriteRelativeImportExtensions ? currentExt : '';
155155

156-
if (this.options.esm) {
156+
if (this.options.esm && !this.options.rewriteRelativeImportExtensions) {
157157
switch (currentExt) {
158158
case '.ts':
159159
default:

packages/runtime/src/config.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -276,4 +276,10 @@ export interface RoutesConfig {
276276
* @default true
277277
*/
278278
bodyCoercion?: boolean;
279+
280+
/**
281+
* When enabled, the imports in the routes files will keep having a `.ts` extention to support the TypeScript 5.7 feature rewriteRelativeImportExtensions.
282+
* @default false
283+
*/
284+
rewriteRelativeImportExtensions?: boolean;
279285
}

tests/unit/templating/routeGenerator.spec.ts

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -179,5 +179,61 @@ describe('RouteGenerator', () => {
179179

180180
expect(models).to.equal('./controller.cjs');
181181
});
182+
183+
it('uses ts for routes if esm is true and rewriteRelativeImportExtensions is true', () => {
184+
const generator = new DefaultRouteGenerator(
185+
{
186+
controllers: [
187+
{
188+
location: 'controller.ts',
189+
methods: [],
190+
name: '',
191+
path: '',
192+
},
193+
],
194+
referenceTypeMap: {},
195+
},
196+
{
197+
bodyCoercion: true,
198+
entryFile: 'mockEntryFile',
199+
routesDir: '.',
200+
noImplicitAdditionalProperties: 'silently-remove-extras',
201+
esm: true,
202+
rewriteRelativeImportExtensions: true,
203+
},
204+
);
205+
206+
const models = generator.buildContent('{{#each controllers}}{{modulePath}}{{/each}}');
207+
208+
expect(models).to.equal('./controller.ts');
209+
});
210+
211+
it('uses mts for routes if rewriteRelativeImportExtensions and esm is true and source is mts', () => {
212+
const generator = new DefaultRouteGenerator(
213+
{
214+
controllers: [
215+
{
216+
location: 'controller.mts',
217+
methods: [],
218+
name: '',
219+
path: '',
220+
},
221+
],
222+
referenceTypeMap: {},
223+
},
224+
{
225+
bodyCoercion: true,
226+
entryFile: 'mockEntryFile',
227+
routesDir: '.',
228+
noImplicitAdditionalProperties: 'silently-remove-extras',
229+
esm: true,
230+
rewriteRelativeImportExtensions: true,
231+
},
232+
);
233+
234+
const models = generator.buildContent('{{#each controllers}}{{modulePath}}{{/each}}');
235+
236+
expect(models).to.equal('./controller.mts');
237+
});
182238
});
183239
});

0 commit comments

Comments
 (0)