@@ -20,8 +20,8 @@ describe("typescript/common/import-builder", () => {
2020 it ( "can import individual exports" , ( ) => {
2121 const builder = new ImportBuilder ( { includeFileExtensions : false } )
2222
23- builder . addSingle ( "Cat" , "./models" , false )
24- builder . addSingle ( "Dog" , "./models" , false )
23+ builder . addSingle ( "Cat" , "./models.ts " , false )
24+ builder . addSingle ( "Dog" , "./models.ts " , false )
2525
2626 expect ( builder . toString ( ) ) . toBe ( "import {Cat, Dog} from './models'" )
2727 } )
@@ -45,7 +45,7 @@ describe("typescript/common/import-builder", () => {
4545 includeFileExtensions : false ,
4646 } )
4747
48- builder . addSingle ( "Cat" , "./foo/models" , false )
48+ builder . addSingle ( "Cat" , "./foo/models.ts " , false )
4949
5050 expect ( builder . toString ( ) ) . toBe ( "import {Cat} from './models'" )
5151 } )
@@ -58,7 +58,7 @@ describe("typescript/common/import-builder", () => {
5858 includeFileExtensions : false ,
5959 } )
6060
61- builder . addSingle ( "Cat" , "./models" , false )
61+ builder . addSingle ( "Cat" , "./models.ts " , false )
6262
6363 expect ( builder . toString ( ) ) . toBe ( "import {Cat} from '../models'" )
6464 } )
@@ -71,7 +71,7 @@ describe("typescript/common/import-builder", () => {
7171 includeFileExtensions : false ,
7272 } )
7373
74- builder . addSingle ( "Cat" , "./foo/models" , false )
74+ builder . addSingle ( "Cat" , "./foo/models.ts " , false )
7575
7676 expect ( builder . toString ( ) ) . toBe ( "import {Cat} from './foo/models'" )
7777 } )
@@ -84,7 +84,7 @@ describe("typescript/common/import-builder", () => {
8484 includeFileExtensions : false ,
8585 } )
8686
87- builder . addSingle ( "Cat" , "./bar/models" , false )
87+ builder . addSingle ( "Cat" , "./bar/models.ts " , false )
8888
8989 expect ( builder . toString ( ) ) . toBe ( "import {Cat} from '../bar/models'" )
9090 } )
@@ -94,8 +94,8 @@ describe("typescript/common/import-builder", () => {
9494 it ( "can import types" , ( ) => {
9595 const builder = new ImportBuilder ( { includeFileExtensions : false } )
9696
97- builder . addSingle ( "Cat" , "./models" , false )
98- builder . addSingle ( "Dog" , "./models" , true )
97+ builder . addSingle ( "Cat" , "./models.ts " , false )
98+ builder . addSingle ( "Dog" , "./models.ts " , true )
9999
100100 expect ( builder . toString ( ) ) . toBe ( "import {Cat, type Dog} from './models'" )
101101 } )
@@ -152,9 +152,9 @@ describe("typescript/common/import-builder", () => {
152152
153153 builder . addModule ( "_, defaultExport" , "ignore-me" ) // ensure not used
154154 builder . addModule ( "Lodash" , "lodash" )
155- builder . addSingle ( "Cat" , "./models" , false )
156- builder . addSingle ( "Dog" , "./models" , true )
157- builder . addSingle ( "Unused" , "./models" , false )
155+ builder . addSingle ( "Cat" , "./models.ts " , false )
156+ builder . addSingle ( "Dog" , "./models.ts " , true )
157+ builder . addSingle ( "Unused" , "./models.ts " , false )
158158
159159 const code = [
160160 "function demo() {" ,
@@ -251,4 +251,104 @@ describe("typescript/common/import-builder", () => {
251251 )
252252 } )
253253 } )
254+
255+ describe ( "includeFileExtensions = true" , ( ) => {
256+ it ( "keeps .ts extensions in named imports" , ( ) => {
257+ const builder = new ImportBuilder ( { includeFileExtensions : true } )
258+ builder . addSingle ( "Cat" , "./models.ts" , false )
259+ builder . addSingle ( "Dog" , "./models.ts" , false )
260+ expect ( builder . toString ( ) ) . toBe ( "import {Cat, Dog} from './models.ts'" )
261+ } )
262+
263+ it ( "keeps .ts extension for default (module) imports from relative files" , ( ) => {
264+ const builder = new ImportBuilder ( { includeFileExtensions : true } )
265+ builder . addModule ( "Util" , "./util.ts" )
266+ expect ( builder . toString ( ) ) . toBe ( "import Util from './util.ts'" )
267+ } )
268+
269+ describe ( "relative path handling" , ( ) => {
270+ it ( "same directory keeps extension" , ( ) => {
271+ const builder = new ImportBuilder ( {
272+ unit : {
273+ filename : "./foo/example" ,
274+ } ,
275+ includeFileExtensions : true ,
276+ } )
277+
278+ builder . addSingle ( "Cat" , "./foo/models.ts" , false )
279+
280+ expect ( builder . toString ( ) ) . toBe ( "import {Cat} from './models.ts'" )
281+ } )
282+
283+ it ( "parent directory keeps extension" , ( ) => {
284+ const builder = new ImportBuilder ( {
285+ unit : {
286+ filename : "./foo/example" ,
287+ } ,
288+ includeFileExtensions : true ,
289+ } )
290+
291+ builder . addSingle ( "Cat" , "./models.ts" , false )
292+
293+ expect ( builder . toString ( ) ) . toBe ( "import {Cat} from '../models.ts'" )
294+ } )
295+
296+ it ( "child directory keeps extension" , ( ) => {
297+ const builder = new ImportBuilder ( {
298+ unit : {
299+ filename : "./example" ,
300+ } ,
301+ includeFileExtensions : true ,
302+ } )
303+
304+ builder . addSingle ( "Cat" , "./foo/models.ts" , false )
305+
306+ expect ( builder . toString ( ) ) . toBe ( "import {Cat} from './foo/models.ts'" )
307+ } )
308+
309+ it ( "sibling directory keeps extension" , ( ) => {
310+ const builder = new ImportBuilder ( {
311+ unit : {
312+ filename : "./foo/example" ,
313+ } ,
314+ includeFileExtensions : true ,
315+ } )
316+
317+ builder . addSingle ( "Cat" , "./bar/models.ts" , false )
318+
319+ expect ( builder . toString ( ) ) . toBe ( "import {Cat} from '../bar/models.ts'" )
320+ } )
321+ } )
322+
323+ it ( "supports types with extensions" , ( ) => {
324+ const builder = new ImportBuilder ( { includeFileExtensions : true } )
325+ builder . addSingle ( "Cat" , "./models.ts" , false )
326+ builder . addSingle ( "Dog" , "./models.ts" , true )
327+ expect ( builder . toString ( ) ) . toBe (
328+ "import {Cat, type Dog} from './models.ts'" ,
329+ )
330+ } )
331+
332+ it ( "usage-based pruning still works with extensions" , ( ) => {
333+ const builder = new ImportBuilder ( { includeFileExtensions : true } )
334+ builder . addModule ( "Lodash" , "lodash" )
335+ builder . addSingle ( "Cat" , "./models.ts" , false )
336+ builder . addSingle ( "Dog" , "./models.ts" , true )
337+ builder . addSingle ( "Unused" , "./models.ts" , false )
338+
339+ const code = [
340+ "function demo() {" ,
341+ " const x: Dog = {} as any;" ,
342+ " console.log(Lodash, Cat)" ,
343+ "}" ,
344+ ] . join ( "\n" )
345+
346+ expect ( builder . toString ( code ) ) . toBe (
347+ [
348+ "import Lodash from 'lodash'" ,
349+ "import {Cat, type Dog} from './models.ts'" ,
350+ ] . join ( "\n" ) ,
351+ )
352+ } )
353+ } )
254354} )
0 commit comments