-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.ts
45 lines (39 loc) · 1 KB
/
index.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
import { PluginBuilder } from "bun"
import { UnimportOptions } from "unimport"
const getLoader = (path: string) =>
path.endsWith("ts")
? "ts"
: path.endsWith("js")
? "js"
: path.endsWith("tsx")
? "tsx"
: "jsx"
export const autoImport = (
options: Partial<
UnimportOptions & {
dts: string
}
>
) => {
return {
name: "auto-import",
async setup(builder: PluginBuilder) {
const { createUnimport } = await import("unimport")
const { injectImports, generateTypeDeclarations } = createUnimport({
...options,
dts: undefined,
} as UnimportOptions)
const dtsContent = await generateTypeDeclarations()
Bun.write(options.dts ?? "./auto-import.d.ts", dtsContent)
builder.onLoad({ filter: /.*/i }, async (args) => {
const fileContent = await Bun.file(args.path).text()
const transformedFileContent = await injectImports(fileContent)
return {
contents: transformedFileContent.code,
loader: getLoader(args.path),
}
})
},
}
}
export default autoImport