UNPKG

vite-plugin-use-modules

Version:
92 lines (82 loc) 2.17 kB
import { posix } from 'path'; import { getPackageInfo } from 'local-pkg'; function normalizePath(path) { path = path.startsWith("/") ? path : "/" + path; return posix.normalize(path); } async function isVite2() { const info = await getPackageInfo("vite"); if (info) { return /^.?2/.test(info.version); } return false; } function defaultNormalize(target) { return `'${target}/*.[tj]s'`; } async function createVirtualGlob(glob) { return await isVite2() ? `import.meta.globEager(${glob})` : `import.meta.glob(${glob}, { eager: true })`; } async function createVirtualModule(glob) { return ` export const modules = ${await createVirtualGlob(glob)} export const useModules = app => { Object.values(modules).forEach(module => { if (!module.default) { return } if (typeof module.default === 'function') { module.default(app) return } if (Array.isArray(module.default)) { app.use(...module.default) return } app.use(module.default) }) return app }`; } function insertAutoCode(code) { return code.replace( /^/, `import { useModules } from 'virtual:modules' ` ).replace(/(createApp\(.*?\))/, "useModules($1)"); } function defaultTransform(code, id) { if (/src\/main\.(js|ts)$/.test(id)) { return insertAutoCode(code); } return code; } function index(options) { let { auto = false, target = "src/modules", normalize = defaultNormalize } = options || {}; const virtualModuleId = "virtual:modules"; const resolvedVirtualModuleId = "\0" + virtualModuleId; target = normalizePath(target); if (auto === true) { auto = defaultTransform; } return { name: "vite-plugin-use-modules", resolveId(id) { if (id === virtualModuleId) { return resolvedVirtualModuleId; } }, load(id) { if (id === resolvedVirtualModuleId) { const glob = normalize(target); return createVirtualModule(glob); } }, transform: auto === false ? void 0 : auto }; } export { index as default, defaultTransform, insertAutoCode };