Folo/plugins/vite/specific-import.ts

43 lines
1.1 KiB
TypeScript

import type { Plugin } from "vite"
export function createPlatformSpecificImportPlugin(isElectron = false): Plugin {
return {
name: "platform-specific-import",
enforce: "pre",
async resolveId(source, importer) {
if (!importer) {
return null
}
const allowExts = [".js", ".jsx", ".ts", ".tsx"]
if (!allowExts.some((ext) => importer.endsWith(ext))) return null
if (importer.includes("node_modules")) return null
const [path, query] = source.split("?")
if (path.startsWith(".") || path.startsWith("/")) {
const priorities = isElectron
? [".electron.ts", ".electron.tsx", ".electron.js", ".electron.jsx"]
: [".web.ts", ".web.tsx", ".web.js", ".web.jsx"]
for (const ext of priorities) {
const resolvedPath = await this.resolve(
`${path}${ext}${query ? `?${query}` : ""}`,
importer,
{
skipSelf: true,
},
)
if (resolvedPath) {
return resolvedPath.id
}
}
}
return null
},
}
}