UNPKG

one

Version:

One is a React framework for web, iOS, and Android apps.

52 lines (49 loc) • 2.05 kB
import { readFileSync } from "node:fs"; import path from "node:path"; import { resolvePath } from "@vxrn/resolve"; const DEVTOOLS_VIRTUAL_ID = "/@one/dev.js"; function createDevtoolsPlugin(options = {}) { const { includeUI = true } = options; return { name: "one-devtools", apply: "serve", configureServer(server) { const isBundledDev = !!server.config.experimental?.bundledDev; server.middlewares.use(async (req, res, next) => { if (req.url === "/@one/dev.js") { try { const devEntryPath = resolvePath("one/devtools/dev.mjs"); const devEntry = readFileSync(devEntryPath, "utf-8"); let code = devEntry.replace("import './devtools.mjs'", "").replace("import './source-inspector.mjs'", ""); if (isBundledDev) { code = code.replace("import { createHotContext } from '/@vite/client'", "const createHotContext = () => ({ on() {}, off() {}, accept() {}, dispose() {}, prune() {}, send() {}, invalidate() {} })").replace("import { injectIntoGlobalHook } from '/@react-refresh'", "const injectIntoGlobalHook = () => {}"); } if (includeUI) { const devtoolsPath = resolvePath("one/devtools/devtools.mjs"); const sourceInspectorPath = resolvePath("one/devtools/source-inspector.mjs"); const devtools = readFileSync(devtoolsPath, "utf-8"); const sourceInspector = readFileSync(sourceInspectorPath, "utf-8"); const projectName = path.basename(process.cwd()); code = `window.__oneProjectRoot="${projectName}"; ${code} ${devtools} ${sourceInspector}`; } res.setHeader("Content-Type", "application/javascript"); res.setHeader("Cache-Control", "no-store"); res.end(code); return; } catch (e) { console.error("[one] Failed to load devtools script:", e); } res.setHeader("Content-Type", "application/javascript"); res.end("// devtools failed to load"); return; } next(); }); } }; } export { DEVTOOLS_VIRTUAL_ID, createDevtoolsPlugin }; //# sourceMappingURL=devtoolsPlugin.mjs.map