Skip to content

Commit 58afb11

Browse files
committed
feat: resolve corresponding .d.ts for .js
1 parent c172197 commit 58afb11

File tree

2 files changed

+27
-9
lines changed

2 files changed

+27
-9
lines changed

src/generate.ts

Lines changed: 26 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { getTsconfig } from 'get-tsconfig'
33
import { isolatedDeclaration as oxcIsolatedDeclaration } from 'oxc-transform'
44
import {
55
filename_dts_to,
6+
filename_js_to_dts,
67
filename_ts_to_dts,
78
isRelative,
89
RE_DTS,
@@ -165,7 +166,7 @@ export function createGeneratePlugin({
165166
},
166167
},
167168

168-
async resolveId(id, importer) {
169+
async resolveId(id, importer, options) {
169170
if (dtsMap.has(id)) {
170171
// must be dts entry
171172
return { id, meta }
@@ -174,9 +175,14 @@ export function createGeneratePlugin({
174175
if (!importer || !this.getModuleInfo(importer)?.meta.dtsFile) {
175176
return
176177
}
177-
178178
// in dts file
179179

180+
if (RE_DTS.test(id)) {
181+
const resolution = await this.resolve(id, importer, options)
182+
if (!resolution) return
183+
return { ...resolution, meta }
184+
}
185+
180186
// resolve dependency
181187
if (!isRelative(id)) {
182188
let shouldResolve: boolean
@@ -196,17 +202,29 @@ export function createGeneratePlugin({
196202
}
197203

198204
// link to the original module
199-
const resolution = await this.resolve(id, filename_dts_to(importer, 'ts'))
205+
let resolution = await this.resolve(id, filename_dts_to(importer, 'ts'))
200206
if (!resolution || resolution.external) return
201207

202-
const dtsId = filename_ts_to_dts(resolution.id)
203-
if (dtsMap.has(dtsId)) {
204-
return { id: dtsId, meta }
208+
let dtsId: string
209+
if (RE_JS.test(resolution.id)) {
210+
// resolve dts for js
211+
resolution = await this.resolve(
212+
filename_js_to_dts(resolution.id),
213+
importer,
214+
{ skipSelf: false },
215+
)
216+
if (!resolution) return
217+
dtsId = resolution.id
218+
} else {
219+
dtsId = filename_ts_to_dts(resolution.id)
220+
if (dtsMap.has(dtsId)) {
221+
return { id: dtsId, meta }
222+
}
205223
}
206224

207-
// pre-load original module if not already loaded
208225
await this.load(resolution)
209-
if (dtsMap.has(dtsId)) {
226+
227+
if (RE_DTS.test(resolution.id) || dtsMap.has(dtsId)) {
210228
return { id: dtsId, meta }
211229
}
212230
},

src/utils/filename.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import path from 'node:path'
22

3-
export const RE_JS: RegExp = /\.([cm]?)js$/
3+
export const RE_JS: RegExp = /\.([cm]?)jsx?$/
44
export const RE_TS: RegExp = /\.([cm]?)tsx?$/
55
export const RE_DTS: RegExp = /\.d\.([cm]?)ts$/
66
export const RE_NODE_MODULES: RegExp = /node_modules/

0 commit comments

Comments
 (0)