interactive-react-inspector 1.1.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,5 @@
1
- import{a as d,b as m}from"./chunk-VI6QGAEY.js";import{createUnplugin as x}from"unplugin";import c from"path";import{fileURLToPath as C}from"url";import w from"launch-editor";import S from"http";import T from"fs";var f="virtual:react-inspector",y="\0"+f,_=/\.(mjs|js|jsx|ts|tsx)$/,A=/\/(node_modules|dist|build|coverage|\.next|\.nuxt|\.svelte-kit|\.output|\.astro)\//;function u(t){return t?t.split("?")[0].split("#")[0].replace(/\\/g,"/"):""}var E=typeof __filename=="string"?__filename:C(import.meta.url),p=c.dirname(E),g=u(T.existsSync(c.resolve(p,"../runtime/install.ts"))?c.resolve(p,"../runtime/install.ts"):c.resolve(p,"./runtime.js"));function O(t,n){let e=t.split(/\r?\n/),r=!1;for(let o of e){let i=o.trim();if(!i)continue;if(r){i.includes("*/")&&(r=!1);continue}if(i.startsWith("/*")){i.includes("*/")||(r=!0);continue}if(i.startsWith("//"))continue;return i.match(/^(['"])(.+)\1;?$/)?.[2]===n}return!1}function k(t){return O(t,"use client")}function I(t){if(!t)return!1;let n=u(t);return A.test(n)||n.includes("\0")?!1:_.test(n)}function P(t){return/from\s+["']react-dom\/client["']/.test(t)||/require\(\s*["']react-dom\/client["']\s*\)/.test(t)}function W(t){let r=(u(t).split("/").pop()??"").replace(_,"");return["main","index","app","_app","root","client","entry-client","entry.client"].includes(r)}function $(t,n,e){if(!t)return!1;let r=u(t);return e==="webpack"||e==="rspack"?!1:r.endsWith("/pages/_app.tsx")||r.endsWith("/pages/_app.jsx")||r.endsWith("/pages/_app.js")?!0:r.endsWith("/app/layout.tsx")||r.endsWith("/app/layout.jsx")||r.endsWith("/app/page.tsx")||r.endsWith("/app/page.jsx")?k(n):k(n)||P(n)||W(r)}function b(t){return t.framework==="vite"?`/@fs/${g}`:g}function l(t,n){return typeof t=="string"?t===n?t:[n,t]:Array.isArray(t)?t.includes(n)?t:[n,...t]:t&&typeof t=="object"&&"import"in t?{...t,import:l(t.import,n)}:t}function v(t,n){let e=t.options.name?.toLowerCase()??"";if(e.includes("server")||e.includes("edge"))return;let r=t.options.entry;t.options.entry=async()=>{let o=typeof r=="function"?await r():r;return typeof o=="string"||Array.isArray(o)?l(o,n):o&&typeof o=="object"?Object.fromEntries(Object.entries(o).map(([i,s])=>[i,l(s,n)])):o}}function h(t){t.use("/__open",(n,e)=>{let r="";n.on("data",o=>r+=o),n.on("end",()=>{try{let{file:o,line:i,column:s}=JSON.parse(r);w(`${o}:${i}:${s}`),e.statusCode=204,e.end()}catch{e.statusCode=400,e.end()}})})}var a=null;function N(){return a||(a=new Promise(t=>{let n=S.createServer((e,r)=>{if(e.url==="/__open"&&e.method==="POST"){let o="";e.on("data",i=>o+=i),e.on("end",()=>{try{let{file:i,line:s,column:R}=JSON.parse(o);w(`${i}:${s}:${R}`),r.statusCode=204,r.end()}catch{r.statusCode=400,r.end()}})}else r.statusCode=404,r.end()});n.listen(0,"127.0.0.1",()=>{let e=n.address().port;t(e)})}),a)}function D(t){let n=t.options.devServer;if(!n||typeof n!="object")return;let e=n.setupMiddlewares;n.setupMiddlewares=(r,o)=>(o.app&&h(o.app),typeof e=="function"?e(r,o):r)}var L=["*.mjs","*.js","*.jsx","*.ts","*.tsx"],U="interactive-react-inspector/loader";function z(t,n){return Array.isArray(t)?[...t,n]:t?[t,n]:n}function B(t){return t!=="*.js"?{not:"foreign"}:{all:[{not:"foreign"},{path:/\.js$/},{not:{path:/\.(?:jsx|ts|tsx)\.js$/}}]}}function M(t={}){let n={...t};for(let e of L)n[e]=z(n[e],{condition:B(e),loaders:[{loader:U,options:{runtime:!0}}]});return n}var j=x((t,n)=>({name:"react-inspector",enforce:"pre",resolveId(e){if(e===f)return y},load(e){if(e===y)return`
1
+ import{a as d,b as m}from"./chunk-VI6QGAEY.js";import{createUnplugin as x}from"unplugin";import c from"path";import{fileURLToPath as E}from"url";import b from"launch-editor";import C from"http";import O from"fs";var f="virtual:react-inspector",y="\0"+f,w=/\.(mjs|js|jsx|ts|tsx)$/,S=/\/(node_modules|dist|build|coverage|\.next|\.nuxt|\.svelte-kit|\.output|\.astro)\//;function u(t){return t?t.split("?")[0].split("#")[0].replace(/\\/g,"/"):""}var T=typeof __filename=="string"?__filename:E(import.meta.url),p=c.dirname(T),g=u(O.existsSync(c.resolve(p,"../runtime/install.ts"))?c.resolve(p,"../runtime/install.ts"):c.resolve(p,"./runtime.js"));function A(t,n){let e=t.split(/\r?\n/),r=!1;for(let o of e){let i=o.trim();if(!i)continue;if(r){i.includes("*/")&&(r=!1);continue}if(i.startsWith("/*")){i.includes("*/")||(r=!0);continue}if(i.startsWith("//"))continue;return i.match(/^(['"])(.+)\1;?$/)?.[2]===n}return!1}function k(t){return A(t,"use client")}function I(t){if(!t)return!1;let n=u(t);return S.test(n)||n.includes("\0")?!1:w.test(n)}function N(t){return/from\s+["']react-dom\/client["']/.test(t)||/require\(\s*["']react-dom\/client["']\s*\)/.test(t)}function P(t){let r=(u(t).split("/").pop()??"").replace(w,"");return["main","index","app","_app","root","client","entry-client","entry.client"].includes(r)}function W(t,n,e){if(!t)return!1;let r=u(t);return e==="webpack"||e==="rspack"?!1:r.endsWith("/pages/_app.tsx")||r.endsWith("/pages/_app.jsx")||r.endsWith("/pages/_app.js")?!0:r.endsWith("/app/layout.tsx")||r.endsWith("/app/layout.jsx")||r.endsWith("/app/page.tsx")||r.endsWith("/app/page.jsx")?k(n):k(n)||N(n)||P(r)}function _(t){return t.framework==="vite"?`/@fs/${g}`:g}function l(t,n){return typeof t=="string"?t===n?t:[n,t]:Array.isArray(t)?t.includes(n)?t:[n,...t]:t&&typeof t=="object"&&"import"in t?{...t,import:l(t.import,n)}:t}function $(t,n){let e=t.options.name?.toLowerCase()??"";if(e.includes("server")||e.includes("edge"))return;let r=t.options.entry;t.options.entry=async()=>{let o=typeof r=="function"?await r():r;return typeof o=="string"||Array.isArray(o)?l(o,n):o&&typeof o=="object"?Object.fromEntries(Object.entries(o).map(([i,s])=>[i,l(s,n)])):o}}function h(t){t.use("/__open",(n,e)=>{let r="";n.on("data",o=>r+=o),n.on("end",()=>{try{let{file:o,line:i,column:s}=JSON.parse(r);b(`${o}:${i}:${s}`),e.statusCode=204,e.end()}catch{e.statusCode=400,e.end()}})})}var a=null;function v(){return a||(a=new Promise(t=>{let n=C.createServer((e,r)=>{if(e.url==="/__open"&&e.method==="POST"){let o="";e.on("data",i=>o+=i),e.on("end",()=>{try{let{file:i,line:s,column:R}=JSON.parse(o);b(`${i}:${s}:${R}`),r.statusCode=204,r.end()}catch{r.statusCode=400,r.end()}})}else r.statusCode=404,r.end()});n.listen(0,"127.0.0.1",()=>{let e=n.address().port;t(e)})}),a)}function D(t){let n=t.options.devServer;if(!n||typeof n!="object")return;let e=n.setupMiddlewares;n.setupMiddlewares=(r,o)=>(o.app&&h(o.app),typeof e=="function"?e(r,o):r)}var L=["*.mjs","*.js","*.jsx","*.ts","*.tsx"],U="interactive-react-inspector/loader";function z(t,n){return Array.isArray(t)?[...t,n]:t?[t,n]:n}function B(t){return t!=="*.js"?{not:"foreign"}:{all:[{not:"foreign"},{path:/\.js$/},{not:{path:/\.(?:jsx|ts|tsx)\.js$/}}]}}function M(t={}){let n={...t};for(let e of L)n[e]=z(n[e],{condition:B(e),loaders:[{loader:U,options:{runtime:!0}}]});return n}var j=x((t,n)=>process.env.NODE_ENV==="production"?{name:"react-inspector"}:{name:"react-inspector",enforce:"pre",resolveId(e){if(e===f)return y},load(e){if(e===y)return`
2
2
  "use client";
3
- import ${JSON.stringify(b(n))};
4
- `},transform(e,r){if(!I(r))return;let o=m(e,r);return $(r,e,n.framework)&&o&&(o.code=d(o.code,f)),o},vite:{configureServer(e){h(e.middlewares)}},webpack(e){v(e,b(n)),D(e)}}));function J(t={}){let n=t.webpack;return{...t,turbopack:{...t.turbopack,rules:M(t.turbopack?.rules)},async rewrites(){let e=await N(),r=typeof t.rewrites=="function"?await t.rewrites():t.rewrites,o={source:"/__open",destination:`http://127.0.0.1:${e}/__open`};return Array.isArray(r)?[...r,o]:r&&typeof r=="object"?{...r,fallback:[...r.fallback||[],o]}:[o]},webpack(e,r){let o=typeof n=="function"?n(e,r)??e:e;return o.plugins??=[],o.plugins.push(j.webpack()),o}}}var Z=Object.assign(j,{next:J});export{J as a,Z as b};
5
- //# sourceMappingURL=chunk-RY62FD45.js.map
3
+ import ${JSON.stringify(_(n))};
4
+ `},transform(e,r){if(!I(r))return;let o=m(e,r);return W(r,e,n.framework)&&o&&(o.code=d(o.code,f)),o},vite:{configureServer(e){h(e.middlewares)}},webpack(e){$(e,_(n)),D(e)}});function V(t={}){if(process.env.NODE_ENV==="production")return t;let n=t.webpack;return{...t,turbopack:{...t.turbopack,rules:M(t.turbopack?.rules)},async rewrites(){let e=await v(),r=typeof t.rewrites=="function"?await t.rewrites():t.rewrites,o={source:"/__open",destination:`http://127.0.0.1:${e}/__open`};return Array.isArray(r)?[...r,o]:r&&typeof r=="object"?{...r,fallback:[...r.fallback||[],o]}:[o]},webpack(e,r){let o=typeof n=="function"?n(e,r)??e:e;return o.plugins??=[],o.plugins.push(j.webpack()),o}}}var Z=Object.assign(j,{next:V});export{V as a,Z as b};
5
+ //# sourceMappingURL=chunk-PTKTPWXB.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/unplugin/index.ts"],"sourcesContent":["import { createUnplugin } from \"unplugin\";\r\nimport path from \"node:path\";\r\nimport { fileURLToPath } from \"node:url\";\r\nimport launch from \"launch-editor\";\r\nimport http from \"node:http\";\r\nimport type { AddressInfo } from \"node:net\";\r\n\r\nimport fs from \"node:fs\";\n\nimport { injectSideEffectImport } from \"../core/imports.ts\";\nimport { transform as sourceTransform } from \"../core/transform.ts\";\n\r\nconst VIRTUAL_ID = \"virtual:react-inspector\";\r\nconst RESOLVED_ID = \"\\0\" + VIRTUAL_ID;\r\nconst SOURCE_EXT_RE = /\\.(mjs|js|jsx|ts|tsx)$/;\r\nconst IGNORED_PATH_RE = /\\/(node_modules|dist|build|coverage|\\.next|\\.nuxt|\\.svelte-kit|\\.output|\\.astro)\\//;\r\n\r\nfunction normalizeId(id?: string) {\r\n if (!id) return \"\";\r\n\r\n // Strip query/hash and normalize Windows paths for consistent matching.\r\n const cleaned = id.split(\"?\")[0].split(\"#\")[0];\r\n return cleaned.replace(/\\\\/g, \"/\");\r\n}\r\n\r\nconst currentFile = typeof __filename === \"string\"\n ? __filename\n : fileURLToPath(import.meta.url);\nconst __dirname = path.dirname(currentFile);\nconst RUNTIME_PATH = normalizeId(\n fs.existsSync(path.resolve(__dirname, \"../runtime/install.ts\"))\r\n ? path.resolve(__dirname, \"../runtime/install.ts\")\r\n : path.resolve(__dirname, \"./runtime.js\"),\r\n);\r\n\r\nfunction hasDirective(code: string, directive: string) {\r\n const lines = code.split(/\\r?\\n/);\r\n let inBlockComment = false;\r\n\r\n for (const line of lines) {\r\n const trimmed = line.trim();\r\n\r\n if (!trimmed) continue;\r\n\r\n if (inBlockComment) {\r\n if (trimmed.includes(\"*/\")) inBlockComment = false;\r\n continue;\r\n }\r\n\r\n if (trimmed.startsWith(\"/*\")) {\r\n if (!trimmed.includes(\"*/\")) inBlockComment = true;\r\n continue;\r\n }\r\n\r\n if (trimmed.startsWith(\"//\")) continue;\r\n\r\n const match = trimmed.match(/^(['\"])(.+)\\1;?$/);\r\n\r\n if (match?.[2] === directive) return true;\r\n\r\n // First non-directive statement means no `use client`.\r\n return false;\r\n }\r\n\r\n return false;\r\n}\r\n\r\nfunction hasUseClientDirective(code: string) {\r\n return hasDirective(code, \"use client\");\r\n}\r\n\r\nfunction shouldTransform(id?: string) {\r\n if (!id) return false;\r\n\r\n const normalized = normalizeId(id);\r\n\r\n if (\r\n IGNORED_PATH_RE.test(normalized) ||\r\n normalized.includes(\"\\0\")\r\n ) return false;\r\n\r\n return SOURCE_EXT_RE.test(normalized);\r\n}\r\n\r\nfunction importsClientRenderer(code: string) {\r\n return /from\\s+[\"']react-dom\\/client[\"']/.test(code) ||\r\n /require\\(\\s*[\"']react-dom\\/client[\"']\\s*\\)/.test(code);\r\n}\r\n\r\nfunction isLikelyClientEntry(id: string) {\r\n const normalized = normalizeId(id);\r\n const file = normalized.split(\"/\").pop() ?? \"\";\r\n const stem = file.replace(SOURCE_EXT_RE, \"\");\r\n\r\n return [\r\n \"main\",\r\n \"index\",\r\n \"app\",\r\n \"_app\",\r\n \"root\",\r\n \"client\",\r\n \"entry-client\",\r\n \"entry.client\",\r\n ].includes(stem);\r\n}\r\n\r\nfunction shouldInjectRuntime(id: string | undefined, code: string, framework: string) {\r\n if (!id) return false;\r\n\r\n const normalized = normalizeId(id);\r\n\r\n if (framework === \"webpack\" || framework === \"rspack\") {\r\n return false;\r\n }\r\n\r\n if (\r\n normalized.endsWith(\"/pages/_app.tsx\") ||\r\n normalized.endsWith(\"/pages/_app.jsx\") ||\r\n normalized.endsWith(\"/pages/_app.js\")\r\n ) return true;\r\n\r\n if (\r\n normalized.endsWith(\"/app/layout.tsx\") ||\r\n normalized.endsWith(\"/app/layout.jsx\") ||\r\n normalized.endsWith(\"/app/page.tsx\") ||\r\n normalized.endsWith(\"/app/page.jsx\")\r\n ) {\r\n return hasUseClientDirective(code);\r\n }\r\n\r\n return hasUseClientDirective(code) ||\r\n importsClientRenderer(code) ||\r\n isLikelyClientEntry(normalized);\r\n}\r\n\r\nfunction getRuntimeImport(meta: { framework: string }) {\r\n if (meta.framework === \"vite\") {\r\n return `/@fs/${RUNTIME_PATH}`;\r\n }\r\n\r\n return RUNTIME_PATH;\r\n}\r\n\r\nfunction prependImport(value: unknown, id: string): unknown {\r\n if (typeof value === \"string\") {\r\n return value === id ? value : [id, value];\r\n }\r\n\r\n if (Array.isArray(value)) {\r\n return value.includes(id) ? value : [id, ...value];\r\n }\r\n\r\n if (value && typeof value === \"object\" && \"import\" in value) {\r\n return {\r\n ...value,\r\n import: prependImport((value as { import: unknown }).import, id),\r\n };\r\n }\r\n\r\n return value;\r\n}\r\n\r\nfunction injectWebpackEntry(\r\n compiler: { options: { name?: string; entry?: unknown } },\r\n id: string,\r\n) {\r\n const name = compiler.options.name?.toLowerCase() ?? \"\";\r\n\r\n if (name.includes(\"server\") || name.includes(\"edge\")) return;\r\n\r\n const originalEntry = compiler.options.entry;\r\n\r\n compiler.options.entry = async () => {\r\n const entry =\r\n typeof originalEntry === \"function\"\r\n ? await originalEntry()\r\n : originalEntry;\r\n\r\n if (typeof entry === \"string\" || Array.isArray(entry)) {\r\n return prependImport(entry, id);\r\n }\r\n\r\n if (entry && typeof entry === \"object\") {\r\n return Object.fromEntries(\r\n Object.entries(entry).map(([key, value]) => [\r\n key,\r\n prependImport(value, id),\r\n ]),\r\n );\r\n }\r\n\r\n return entry;\r\n };\r\n}\r\n\r\nfunction installOpenMiddleware(app: any) {\r\n app.use(\"/__open\", (req: any, res: any) => {\r\n let body = \"\";\r\n\r\n req.on(\"data\", (c: Buffer | string) => body += c);\r\n\r\n req.on(\"end\", () => {\r\n try {\r\n const { file, line, column } = JSON.parse(body);\r\n\r\n launch(`${file}:${line}:${column}`);\r\n\r\n res.statusCode = 204;\r\n res.end();\r\n } catch {\r\n res.statusCode = 400;\r\n res.end();\r\n }\r\n });\r\n },\r\n );\r\n}\r\n\r\nlet bridgePortPromise: Promise<number> | null = null;\r\n\r\nfunction getBridgeServerPort() {\r\n if (bridgePortPromise) return bridgePortPromise;\r\n\r\n bridgePortPromise = new Promise((resolve) => {\r\n const server = http.createServer((req, res) => {\r\n if (req.url === \"/__open\" && req.method === \"POST\") {\r\n let body = \"\";\r\n req.on(\"data\", (chunk) => (body += chunk));\r\n req.on(\"end\", () => {\r\n try {\r\n const { file, line, column } = JSON.parse(body);\r\n launch(`${file}:${line}:${column}`);\r\n res.statusCode = 204;\r\n res.end();\r\n } catch {\r\n res.statusCode = 400;\r\n res.end();\r\n }\r\n });\r\n } else {\r\n res.statusCode = 404;\r\n res.end();\r\n }\r\n });\r\n\r\n server.listen(0, \"127.0.0.1\", () => {\r\n const port = (server.address() as AddressInfo).port;\r\n resolve(port);\r\n });\r\n });\r\n\r\n return bridgePortPromise;\r\n}\r\n\r\nfunction injectWebpackDevServerOpenRoute(compiler: { options: { devServer?: any } }) {\r\n const devServer = compiler.options.devServer;\r\n\r\n if (!devServer || typeof devServer !== \"object\") return;\r\n\r\n const originalSetupMiddlewares = devServer.setupMiddlewares;\r\n\r\n devServer.setupMiddlewares = (middlewares: unknown[], server: { app?: any }) => {\r\n if (server.app) installOpenMiddleware(server.app);\r\n\r\n return typeof originalSetupMiddlewares === \"function\"\r\n ? originalSetupMiddlewares(middlewares, server)\r\n : middlewares;\r\n };\r\n}\r\n\r\ntype NextConfigLike = Record<string, any> & {\r\n turbopack?: Record<string, any> & {\r\n rules?: Record<string, any>;\r\n };\r\n webpack?: ((config: any, context: any) => any) | null;\r\n rewrites?: (() => Promise<any> | any) | any;\r\n};\n\nconst TURBOPACK_EXTENSIONS = [\"*.mjs\", \"*.js\", \"*.jsx\", \"*.ts\", \"*.tsx\"];\nconst TURBOPACK_LOADER = \"interactive-react-inspector/loader\";\n\nfunction appendTurbopackRule(existing: unknown, rule: unknown) {\n return Array.isArray(existing)\n ? [...existing, rule]\n : existing\n ? [existing, rule]\n : rule;\n}\n\nfunction getTurbopackCondition(extension: string) {\n if (extension !== \"*.js\") return { not: \"foreign\" };\n\n return {\n all: [\n { not: \"foreign\" },\n { path: /\\.js$/ },\n { not: { path: /\\.(?:jsx|ts|tsx)\\.js$/ } },\n ],\n };\n}\n\nfunction createTurbopackRules(existingRules: Record<string, any> = {}) {\n const rules = { ...existingRules };\n\n for (const extension of TURBOPACK_EXTENSIONS) {\n rules[extension] = appendTurbopackRule(rules[extension], {\n condition: getTurbopackCondition(extension),\n loaders: [\n {\n loader: TURBOPACK_LOADER,\n options: { runtime: true },\n },\n ],\n });\n }\n\n return rules;\n}\n\nconst Inspector = createUnplugin((_options, meta) => {\r\n if (process.env.NODE_ENV === \"production\") {\r\n return {\r\n name: \"react-inspector\",\r\n };\r\n }\r\n\r\n return {\r\n name: \"react-inspector\",\r\n enforce: \"pre\",\n\r\n resolveId(id) {\r\n if (id === VIRTUAL_ID) {\r\n return RESOLVED_ID;\r\n }\r\n },\r\n\r\n load(id) {\r\n if (id === RESOLVED_ID) {\r\n return `\r\n\"use client\";\r\nimport ${JSON.stringify(getRuntimeImport(meta))};\r\n`;\r\n }\r\n },\r\n\r\n transform(code, id) {\r\n if (!shouldTransform(id)) return;\r\n\r\n let result = sourceTransform(code, id);\r\n\r\n if (shouldInjectRuntime(id, code, meta.framework) && result) {\r\n result.code = injectSideEffectImport(result.code, VIRTUAL_ID);\n }\n\n return result;\n },\r\n\r\n vite: {\r\n configureServer(server) {\r\n installOpenMiddleware(server.middlewares);\r\n },\r\n },\r\n\r\n webpack(compiler) {\r\n injectWebpackEntry(compiler, getRuntimeImport(meta));\r\n injectWebpackDevServerOpenRoute(compiler);\r\n },\r\n };\r\n});\n\nfunction next<TConfig extends NextConfigLike>(config: TConfig = {} as TConfig) {\r\n if (process.env.NODE_ENV === \"production\") {\r\n return config;\r\n }\r\n\r\n const originalWebpack = config.webpack;\r\n\r\n return {\r\n ...config,\r\n turbopack: {\r\n ...config.turbopack,\r\n rules: createTurbopackRules(config.turbopack?.rules),\r\n },\r\n async rewrites() {\r\n const bridgePort = await getBridgeServerPort();\r\n const originalRewrites = typeof config.rewrites === \"function\"\r\n ? await config.rewrites()\r\n : config.rewrites;\r\n\r\n const inspectorRewrite = {\r\n source: \"/__open\",\r\n destination: `http://127.0.0.1:${bridgePort}/__open`,\r\n };\r\n\r\n if (Array.isArray(originalRewrites)) {\r\n return [...originalRewrites, inspectorRewrite];\r\n } else if (originalRewrites && typeof originalRewrites === \"object\") {\r\n return {\r\n ...originalRewrites,\r\n fallback: [...(originalRewrites.fallback || []), inspectorRewrite],\r\n };\r\n }\r\n\r\n return [inspectorRewrite];\r\n },\r\n webpack(webpackConfig: any, context: any) {\r\n const nextWebpackConfig = typeof originalWebpack === \"function\"\r\n ? originalWebpack(webpackConfig, context) ?? webpackConfig\r\n : webpackConfig;\r\n\r\n nextWebpackConfig.plugins ??= [];\r\n nextWebpackConfig.plugins.push(Inspector.webpack());\r\n\r\n return nextWebpackConfig;\r\n },\r\n };\r\n}\n\nexport { next };\n\nexport default Object.assign(Inspector, { next });\n"],"mappings":"+CAAA,OAAS,kBAAAA,MAAsB,WAC/B,OAAOC,MAAU,OACjB,OAAS,iBAAAC,MAAqB,MAC9B,OAAOC,MAAY,gBACnB,OAAOC,MAAU,OAGjB,OAAOC,MAAQ,KAKf,IAAMC,EAAa,0BACbC,EAAc,KAAOD,EACrBE,EAAgB,yBAChBC,EAAkB,qFAExB,SAASC,EAAYC,EAAa,CAC9B,OAAKA,EAGWA,EAAG,MAAM,GAAG,EAAE,CAAC,EAAE,MAAM,GAAG,EAAE,CAAC,EAC9B,QAAQ,MAAO,GAAG,EAJjB,EAKpB,CAEA,IAAMC,EAAc,OAAO,YAAe,SACpC,WACAC,EAAc,YAAY,GAAG,EAC7BC,EAAYC,EAAK,QAAQH,CAAW,EACpCI,EAAeN,EACjBO,EAAG,WAAWF,EAAK,QAAQD,EAAW,uBAAuB,CAAC,EACxDC,EAAK,QAAQD,EAAW,uBAAuB,EAC/CC,EAAK,QAAQD,EAAW,cAAc,CAChD,EAEA,SAASI,EAAaC,EAAcC,EAAmB,CACnD,IAAMC,EAAQF,EAAK,MAAM,OAAO,EAC5BG,EAAiB,GAErB,QAAWC,KAAQF,EAAO,CACtB,IAAMG,EAAUD,EAAK,KAAK,EAE1B,GAAI,CAACC,EAAS,SAEd,GAAIF,EAAgB,CACZE,EAAQ,SAAS,IAAI,IAAGF,EAAiB,IAC7C,QACJ,CAEA,GAAIE,EAAQ,WAAW,IAAI,EAAG,CACrBA,EAAQ,SAAS,IAAI,IAAGF,EAAiB,IAC9C,QACJ,CAEA,GAAIE,EAAQ,WAAW,IAAI,EAAG,SAI9B,OAFcA,EAAQ,MAAM,kBAAkB,IAElC,CAAC,IAAMJ,CAIvB,CAEA,MAAO,EACX,CAEA,SAASK,EAAsBN,EAAc,CACzC,OAAOD,EAAaC,EAAM,YAAY,CAC1C,CAEA,SAASO,EAAgBf,EAAa,CAClC,GAAI,CAACA,EAAI,MAAO,GAEhB,IAAMgB,EAAajB,EAAYC,CAAE,EAEjC,OACIF,EAAgB,KAAKkB,CAAU,GAC/BA,EAAW,SAAS,IAAI,EACnB,GAEFnB,EAAc,KAAKmB,CAAU,CACxC,CAEA,SAASC,EAAsBT,EAAc,CACzC,MAAO,mCAAmC,KAAKA,CAAI,GAC/C,6CAA6C,KAAKA,CAAI,CAC9D,CAEA,SAASU,EAAoBlB,EAAY,CAGrC,IAAMmB,GAFapB,EAAYC,CAAE,EACT,MAAM,GAAG,EAAE,IAAI,GAAK,IAC1B,QAAQH,EAAe,EAAE,EAE3C,MAAO,CACH,OACA,QACA,MACA,OACA,OACA,SACA,eACA,cACJ,EAAE,SAASsB,CAAI,CACnB,CAEA,SAASC,EAAoBpB,EAAwBQ,EAAca,EAAmB,CAClF,GAAI,CAACrB,EAAI,MAAO,GAEhB,IAAMgB,EAAajB,EAAYC,CAAE,EAEjC,OAAIqB,IAAc,WAAaA,IAAc,SAClC,GAIPL,EAAW,SAAS,iBAAiB,GACrCA,EAAW,SAAS,iBAAiB,GACrCA,EAAW,SAAS,gBAAgB,EAC/B,GAGLA,EAAW,SAAS,iBAAiB,GACrCA,EAAW,SAAS,iBAAiB,GACrCA,EAAW,SAAS,eAAe,GACnCA,EAAW,SAAS,eAAe,EAE5BF,EAAsBN,CAAI,EAG9BM,EAAsBN,CAAI,GAC7BS,EAAsBT,CAAI,GAC1BU,EAAoBF,CAAU,CACtC,CAEA,SAASM,EAAiBC,EAA6B,CACnD,OAAIA,EAAK,YAAc,OACZ,QAAQlB,CAAY,GAGxBA,CACX,CAEA,SAASmB,EAAcC,EAAgBzB,EAAqB,CACxD,OAAI,OAAOyB,GAAU,SACVA,IAAUzB,EAAKyB,EAAQ,CAACzB,EAAIyB,CAAK,EAGxC,MAAM,QAAQA,CAAK,EACZA,EAAM,SAASzB,CAAE,EAAIyB,EAAQ,CAACzB,EAAI,GAAGyB,CAAK,EAGjDA,GAAS,OAAOA,GAAU,UAAY,WAAYA,EAC3C,CACH,GAAGA,EACH,OAAQD,EAAeC,EAA8B,OAAQzB,CAAE,CACnE,EAGGyB,CACX,CAEA,SAASC,EACLC,EACA3B,EACF,CACE,IAAM4B,EAAOD,EAAS,QAAQ,MAAM,YAAY,GAAK,GAErD,GAAIC,EAAK,SAAS,QAAQ,GAAKA,EAAK,SAAS,MAAM,EAAG,OAEtD,IAAMC,EAAgBF,EAAS,QAAQ,MAEvCA,EAAS,QAAQ,MAAQ,SAAY,CACjC,IAAMG,EACF,OAAOD,GAAkB,WACnB,MAAMA,EAAc,EACpBA,EAEV,OAAI,OAAOC,GAAU,UAAY,MAAM,QAAQA,CAAK,EACzCN,EAAcM,EAAO9B,CAAE,EAG9B8B,GAAS,OAAOA,GAAU,SACnB,OAAO,YACV,OAAO,QAAQA,CAAK,EAAE,IAAI,CAAC,CAACC,EAAKN,CAAK,IAAM,CACxCM,EACAP,EAAcC,EAAOzB,CAAE,CAC3B,CAAC,CACL,EAGG8B,CACX,CACJ,CAEA,SAASE,EAAsBC,EAAU,CACrCA,EAAI,IAAI,UAAW,CAACC,EAAUC,IAAa,CACnC,IAAIC,EAAO,GAEXF,EAAI,GAAG,OAASG,GAAuBD,GAAQC,CAAC,EAEhDH,EAAI,GAAG,MAAO,IAAM,CAChB,GAAI,CACA,GAAM,CAAE,KAAAI,EAAM,KAAA1B,EAAM,OAAA2B,CAAO,EAAI,KAAK,MAAMH,CAAI,EAE9CI,EAAO,GAAGF,CAAI,IAAI1B,CAAI,IAAI2B,CAAM,EAAE,EAElCJ,EAAI,WAAa,IACjBA,EAAI,IAAI,CACZ,MAAQ,CACJA,EAAI,WAAa,IACjBA,EAAI,IAAI,CACZ,CACJ,CAAC,CACL,CACJ,CACJ,CAEA,IAAIM,EAA4C,KAEhD,SAASC,GAAsB,CAC3B,OAAID,IAEJA,EAAoB,IAAI,QAASE,GAAY,CACzC,IAAMC,EAASC,EAAK,aAAa,CAACX,EAAKC,IAAQ,CAC3C,GAAID,EAAI,MAAQ,WAAaA,EAAI,SAAW,OAAQ,CAChD,IAAIE,EAAO,GACXF,EAAI,GAAG,OAASY,GAAWV,GAAQU,CAAM,EACzCZ,EAAI,GAAG,MAAO,IAAM,CAChB,GAAI,CACA,GAAM,CAAE,KAAAI,EAAM,KAAA1B,EAAM,OAAA2B,CAAO,EAAI,KAAK,MAAMH,CAAI,EAC9CI,EAAO,GAAGF,CAAI,IAAI1B,CAAI,IAAI2B,CAAM,EAAE,EAClCJ,EAAI,WAAa,IACjBA,EAAI,IAAI,CACZ,MAAQ,CACJA,EAAI,WAAa,IACjBA,EAAI,IAAI,CACZ,CACJ,CAAC,CACL,MACIA,EAAI,WAAa,IACjBA,EAAI,IAAI,CAEhB,CAAC,EAEDS,EAAO,OAAO,EAAG,YAAa,IAAM,CAChC,IAAMG,EAAQH,EAAO,QAAQ,EAAkB,KAC/CD,EAAQI,CAAI,CAChB,CAAC,CACL,CAAC,EAEMN,EACX,CAEA,SAASO,EAAgCrB,EAA4C,CACjF,IAAMsB,EAAYtB,EAAS,QAAQ,UAEnC,GAAI,CAACsB,GAAa,OAAOA,GAAc,SAAU,OAEjD,IAAMC,EAA2BD,EAAU,iBAE3CA,EAAU,iBAAmB,CAACE,EAAwBP,KAC9CA,EAAO,KAAKZ,EAAsBY,EAAO,GAAG,EAEzC,OAAOM,GAA6B,WACrCA,EAAyBC,EAAaP,CAAM,EAC5CO,EAEd,CAUA,IAAMC,EAAuB,CAAC,QAAS,OAAQ,QAAS,OAAQ,OAAO,EACjEC,EAAmB,qCAEzB,SAASC,EAAoBC,EAAmBC,EAAe,CAC3D,OAAO,MAAM,QAAQD,CAAQ,EACvB,CAAC,GAAGA,EAAUC,CAAI,EAClBD,EACI,CAACA,EAAUC,CAAI,EACfA,CACd,CAEA,SAASC,EAAsBC,EAAmB,CAC9C,OAAIA,IAAc,OAAe,CAAE,IAAK,SAAU,EAE3C,CACH,IAAK,CACD,CAAE,IAAK,SAAU,EACjB,CAAE,KAAM,OAAQ,EAChB,CAAE,IAAK,CAAE,KAAM,uBAAwB,CAAE,CAC7C,CACJ,CACJ,CAEA,SAASC,EAAqBC,EAAqC,CAAC,EAAG,CACnE,IAAMC,EAAQ,CAAE,GAAGD,CAAc,EAEjC,QAAWF,KAAaN,EACpBS,EAAMH,CAAS,EAAIJ,EAAoBO,EAAMH,CAAS,EAAG,CACrD,UAAWD,EAAsBC,CAAS,EAC1C,QAAS,CACL,CACI,OAAQL,EACR,QAAS,CAAE,QAAS,EAAK,CAC7B,CACJ,CACJ,CAAC,EAGL,OAAOQ,CACX,CAEA,IAAMC,EAAYC,EAAe,CAACC,EAAUzC,IACpC,QAAQ,IAAI,WAAa,aAClB,CACH,KAAM,iBACV,EAGG,CACH,KAAM,kBACN,QAAS,MAEb,UAAUvB,EAAI,CACV,GAAIA,IAAOL,EACP,OAAOC,CAEf,EAEA,KAAKI,EAAI,CACL,GAAIA,IAAOJ,EACP,MAAO;AAAA;AAAA,SAEV,KAAK,UAAU0B,EAAiBC,CAAI,CAAC,CAAC;AAAA,CAG3C,EAEA,UAAUf,EAAMR,EAAI,CAChB,GAAI,CAACe,EAAgBf,CAAE,EAAG,OAE1B,IAAIiE,EAASC,EAAgB1D,EAAMR,CAAE,EAErC,OAAIoB,EAAoBpB,EAAIQ,EAAMe,EAAK,SAAS,GAAK0C,IACjDA,EAAO,KAAOE,EAAuBF,EAAO,KAAMtE,CAAU,GAGzDsE,CACX,EAEA,KAAM,CACF,gBAAgBrB,EAAQ,CACpBZ,EAAsBY,EAAO,WAAW,CAC5C,CACJ,EAEA,QAAQjB,EAAU,CACdD,EAAmBC,EAAUL,EAAiBC,CAAI,CAAC,EACnDyB,EAAgCrB,CAAQ,CAC5C,CACA,CACH,EAED,SAASyC,EAAqCC,EAAkB,CAAC,EAAc,CAC3E,GAAI,QAAQ,IAAI,WAAa,aACzB,OAAOA,EAGX,IAAMC,EAAkBD,EAAO,QAE/B,MAAO,CACH,GAAGA,EACH,UAAW,CACP,GAAGA,EAAO,UACV,MAAOV,EAAqBU,EAAO,WAAW,KAAK,CACvD,EACA,MAAM,UAAW,CACb,IAAME,EAAa,MAAM7B,EAAoB,EACvC8B,EAAmB,OAAOH,EAAO,UAAa,WAC9C,MAAMA,EAAO,SAAS,EACtBA,EAAO,SAEPI,EAAmB,CACrB,OAAQ,UACR,YAAa,oBAAoBF,CAAU,SAC/C,EAEA,OAAI,MAAM,QAAQC,CAAgB,EACvB,CAAC,GAAGA,EAAkBC,CAAgB,EACtCD,GAAoB,OAAOA,GAAqB,SAChD,CACH,GAAGA,EACH,SAAU,CAAC,GAAIA,EAAiB,UAAY,CAAC,EAAIC,CAAgB,CACrE,EAGG,CAACA,CAAgB,CAC5B,EACA,QAAQC,EAAoBC,EAAc,CACtC,IAAMC,EAAoB,OAAON,GAAoB,WAC/CA,EAAgBI,EAAeC,CAAO,GAAKD,EAC3CA,EAEN,OAAAE,EAAkB,UAAY,CAAC,EAC/BA,EAAkB,QAAQ,KAAKd,EAAU,QAAQ,CAAC,EAE3Cc,CACX,CACJ,CACJ,CAIA,IAAOC,EAAQ,OAAO,OAAOC,EAAW,CAAE,KAAAC,CAAK,CAAC","names":["createUnplugin","path","fileURLToPath","launch","http","fs","VIRTUAL_ID","RESOLVED_ID","SOURCE_EXT_RE","IGNORED_PATH_RE","normalizeId","id","currentFile","fileURLToPath","__dirname","path","RUNTIME_PATH","fs","hasDirective","code","directive","lines","inBlockComment","line","trimmed","hasUseClientDirective","shouldTransform","normalized","importsClientRenderer","isLikelyClientEntry","stem","shouldInjectRuntime","framework","getRuntimeImport","meta","prependImport","value","injectWebpackEntry","compiler","name","originalEntry","entry","key","installOpenMiddleware","app","req","res","body","c","file","column","launch","bridgePortPromise","getBridgeServerPort","resolve","server","http","chunk","port","injectWebpackDevServerOpenRoute","devServer","originalSetupMiddlewares","middlewares","TURBOPACK_EXTENSIONS","TURBOPACK_LOADER","appendTurbopackRule","existing","rule","getTurbopackCondition","extension","createTurbopackRules","existingRules","rules","Inspector","createUnplugin","_options","result","transform","injectSideEffectImport","next","config","originalWebpack","bridgePort","originalRewrites","inspectorRewrite","webpackConfig","context","nextWebpackConfig","unplugin_default","Inspector","next"]}
package/dist/index.cjs CHANGED
@@ -1,9 +1,9 @@
1
- "use strict";var J=Object.create;var f=Object.defineProperty;var B=Object.getOwnPropertyDescriptor;var X=Object.getOwnPropertyNames;var V=Object.getPrototypeOf,H=Object.prototype.hasOwnProperty;var K=(t,n)=>{for(var e in n)f(t,e,{get:n[e],enumerable:!0})},k=(t,n,e,r)=>{if(n&&typeof n=="object"||typeof n=="function")for(let s of X(n))!H.call(t,s)&&s!==e&&f(t,s,{get:()=>n[s],enumerable:!(r=B(n,s))||r.enumerable});return t};var c=(t,n,e)=>(e=t!=null?J(V(t)):{},k(n||!t||!t.__esModule?f(e,"default",{value:t,enumerable:!0}):e,t)),F=t=>k(f({},"__esModule",{value:!0}),t);var gt={};K(gt,{default:()=>dt,next:()=>L});module.exports=F(gt);var A=require("unplugin"),u=c(require("path"),1),C=require("url"),h=c(require("launch-editor"),1),v=c(require("http"),1),P=c(require("fs"),1);function G(t){let n=0,e=0;if(t.startsWith("#!")){let r=t.indexOf(`
1
+ "use strict";var J=Object.create;var p=Object.defineProperty;var B=Object.getOwnPropertyDescriptor;var V=Object.getOwnPropertyNames;var X=Object.getPrototypeOf,H=Object.prototype.hasOwnProperty;var K=(t,n)=>{for(var e in n)p(t,e,{get:n[e],enumerable:!0})},k=(t,n,e,r)=>{if(n&&typeof n=="object"||typeof n=="function")for(let s of V(n))!H.call(t,s)&&s!==e&&p(t,s,{get:()=>n[s],enumerable:!(r=B(n,s))||r.enumerable});return t};var c=(t,n,e)=>(e=t!=null?J(X(t)):{},k(n||!t||!t.__esModule?p(e,"default",{value:t,enumerable:!0}):e,t)),F=t=>k(p({},"__esModule",{value:!0}),t);var gt={};K(gt,{default:()=>dt,next:()=>L});module.exports=F(gt);var v=require("unplugin"),u=c(require("path"),1),A=require("url"),h=c(require("launch-editor"),1),C=c(require("http"),1),P=c(require("fs"),1);function G(t){let n=0,e=0;if(t.startsWith("#!")){let r=t.indexOf(`
2
2
  `);n=r===-1?t.length:r+1,e=n}for(;n<t.length;){let r=t.indexOf(`
3
3
  `,n),s=r===-1?t.length:r+1,o=t.slice(n,s).trim();if(!o||o.startsWith("//")){n=s;continue}if(o.startsWith("/*")){let a=t.indexOf("*/",n+2);n=a===-1?t.length:a+2,t[n]==="\r"&&(n+=1),t[n]===`
4
- `&&(n+=1);continue}if(/^(['"])(.*?)\1;?$/.test(o)){e=s,n=s;continue}break}return e}function w(t,n){let e=`import ${JSON.stringify(n)};`;if(t.includes(e))return t;let r=G(t);return`${t.slice(0,r)}${e}
5
- ${t.slice(r)}`}var j=c(require("path"),1),_=require("@babel/parser"),m=c(require("@babel/traverse"),1),S=c(require("magic-string"),1),Q=m.default.default||m.default,x="data-source";function E(t){return t.split("?")[0].split("#")[0].replace(/\\/g,"/")}function Y(t){return/\.(mjs|js|jsx|ts|tsx)$/.test(E(t))}function Z(t){if(t.type!=="JSXIdentifier")return!1;let n=t.name;return/^[a-z]/.test(n)||n==="Image"||n==="Link"}function O(t,n){if(process.env.NODE_ENV==="production")return;let e=E(n);if(!Y(e))return null;let r=new S.default(t),s;try{s=(0,_.parse)(t,{sourceType:"unambiguous",plugins:["jsx","typescript","decorators-legacy","classProperties","classPrivateProperties","classPrivateMethods","importAttributes"]})}catch{return null}let i=j.default.relative(process.cwd(),e).replaceAll("\\","/");return Q(s,{JSXOpeningElement(o){let a=o.node;if(!a.loc||!Z(a.name)||a.attributes.some(b=>b.type==="JSXAttribute"&&b.name.name===x))return;let z=a.end-(a.selfClosing?2:1),{line:M,column:U}=a.loc.start;r.prependLeft(z,` ${x}="${i}:${M}:${U}"`)}}),{code:r.toString(),map:r.generateMap()}}var yt={},g="virtual:react-inspector",R="\0"+g,W=/\.(mjs|js|jsx|ts|tsx)$/,q=/\/(node_modules|dist|build|coverage|\.next|\.nuxt|\.svelte-kit|\.output|\.astro)\//;function l(t){return t?t.split("?")[0].split("#")[0].replace(/\\/g,"/"):""}var tt=typeof __filename=="string"?__filename:(0,C.fileURLToPath)(yt.url),d=u.default.dirname(tt),$=l(P.default.existsSync(u.default.resolve(d,"../runtime/install.ts"))?u.default.resolve(d,"../runtime/install.ts"):u.default.resolve(d,"./runtime.js"));function nt(t,n){let e=t.split(/\r?\n/),r=!1;for(let s of e){let i=s.trim();if(!i)continue;if(r){i.includes("*/")&&(r=!1);continue}if(i.startsWith("/*")){i.includes("*/")||(r=!0);continue}if(i.startsWith("//"))continue;return i.match(/^(['"])(.+)\1;?$/)?.[2]===n}return!1}function I(t){return nt(t,"use client")}function et(t){if(!t)return!1;let n=l(t);return q.test(n)||n.includes("\0")?!1:W.test(n)}function rt(t){return/from\s+["']react-dom\/client["']/.test(t)||/require\(\s*["']react-dom\/client["']\s*\)/.test(t)}function st(t){let r=(l(t).split("/").pop()??"").replace(W,"");return["main","index","app","_app","root","client","entry-client","entry.client"].includes(r)}function it(t,n,e){if(!t)return!1;let r=l(t);return e==="webpack"||e==="rspack"?!1:r.endsWith("/pages/_app.tsx")||r.endsWith("/pages/_app.jsx")||r.endsWith("/pages/_app.js")?!0:r.endsWith("/app/layout.tsx")||r.endsWith("/app/layout.jsx")||r.endsWith("/app/page.tsx")||r.endsWith("/app/page.jsx")?I(n):I(n)||rt(n)||st(r)}function T(t){return t.framework==="vite"?`/@fs/${$}`:$}function y(t,n){return typeof t=="string"?t===n?t:[n,t]:Array.isArray(t)?t.includes(n)?t:[n,...t]:t&&typeof t=="object"&&"import"in t?{...t,import:y(t.import,n)}:t}function ot(t,n){let e=t.options.name?.toLowerCase()??"";if(e.includes("server")||e.includes("edge"))return;let r=t.options.entry;t.options.entry=async()=>{let s=typeof r=="function"?await r():r;return typeof s=="string"||Array.isArray(s)?y(s,n):s&&typeof s=="object"?Object.fromEntries(Object.entries(s).map(([i,o])=>[i,y(o,n)])):s}}function N(t){t.use("/__open",(n,e)=>{let r="";n.on("data",s=>r+=s),n.on("end",()=>{try{let{file:s,line:i,column:o}=JSON.parse(r);(0,h.default)(`${s}:${i}:${o}`),e.statusCode=204,e.end()}catch{e.statusCode=400,e.end()}})})}var p=null;function at(){return p||(p=new Promise(t=>{let n=v.default.createServer((e,r)=>{if(e.url==="/__open"&&e.method==="POST"){let s="";e.on("data",i=>s+=i),e.on("end",()=>{try{let{file:i,line:o,column:a}=JSON.parse(s);(0,h.default)(`${i}:${o}:${a}`),r.statusCode=204,r.end()}catch{r.statusCode=400,r.end()}})}else r.statusCode=404,r.end()});n.listen(0,"127.0.0.1",()=>{let e=n.address().port;t(e)})}),p)}function ct(t){let n=t.options.devServer;if(!n||typeof n!="object")return;let e=n.setupMiddlewares;n.setupMiddlewares=(r,s)=>(s.app&&N(s.app),typeof e=="function"?e(r,s):r)}var ut=["*.mjs","*.js","*.jsx","*.ts","*.tsx"],ft="interactive-react-inspector/loader";function pt(t,n){return Array.isArray(t)?[...t,n]:t?[t,n]:n}function lt(t){return t!=="*.js"?{not:"foreign"}:{all:[{not:"foreign"},{path:/\.js$/},{not:{path:/\.(?:jsx|ts|tsx)\.js$/}}]}}function mt(t={}){let n={...t};for(let e of ut)n[e]=pt(n[e],{condition:lt(e),loaders:[{loader:ft,options:{runtime:!0}}]});return n}var D=(0,A.createUnplugin)((t,n)=>({name:"react-inspector",enforce:"pre",resolveId(e){if(e===g)return R},load(e){if(e===R)return`
4
+ `&&(n+=1);continue}if(/^(['"])(.*?)\1;?$/.test(o)){e=s,n=s;continue}break}return e}function _(t,n){let e=`import ${JSON.stringify(n)};`;if(t.includes(e))return t;let r=G(t);return`${t.slice(0,r)}${e}
5
+ ${t.slice(r)}`}var x=c(require("path"),1),j=require("@babel/parser"),m=c(require("@babel/traverse"),1),E=c(require("magic-string"),1),Q=m.default.default||m.default,w="data-source";function O(t){return t.split("?")[0].split("#")[0].replace(/\\/g,"/")}function Y(t){return/\.(mjs|js|jsx|ts|tsx)$/.test(O(t))}function Z(t){if(t.type!=="JSXIdentifier")return!1;let n=t.name;return/^[a-z]/.test(n)||n==="Image"||n==="Link"}function S(t,n){if(process.env.NODE_ENV==="production")return;let e=O(n);if(!Y(e))return null;let r=new E.default(t),s;try{s=(0,j.parse)(t,{sourceType:"unambiguous",plugins:["jsx","typescript","decorators-legacy","classProperties","classPrivateProperties","classPrivateMethods","importAttributes"]})}catch{return null}let i=x.default.relative(process.cwd(),e).replaceAll("\\","/");return Q(s,{JSXOpeningElement(o){let a=o.node;if(!a.loc||!Z(a.name)||a.attributes.some(b=>b.type==="JSXAttribute"&&b.name.name===w))return;let z=a.end-(a.selfClosing?2:1),{line:M,column:U}=a.loc.start;r.prependLeft(z,` ${w}="${i}:${M}:${U}"`)}}),{code:r.toString(),map:r.generateMap()}}var yt={},g="virtual:react-inspector",R="\0"+g,N=/\.(mjs|js|jsx|ts|tsx)$/,q=/\/(node_modules|dist|build|coverage|\.next|\.nuxt|\.svelte-kit|\.output|\.astro)\//;function l(t){return t?t.split("?")[0].split("#")[0].replace(/\\/g,"/"):""}var tt=typeof __filename=="string"?__filename:(0,A.fileURLToPath)(yt.url),d=u.default.dirname(tt),$=l(P.default.existsSync(u.default.resolve(d,"../runtime/install.ts"))?u.default.resolve(d,"../runtime/install.ts"):u.default.resolve(d,"./runtime.js"));function nt(t,n){let e=t.split(/\r?\n/),r=!1;for(let s of e){let i=s.trim();if(!i)continue;if(r){i.includes("*/")&&(r=!1);continue}if(i.startsWith("/*")){i.includes("*/")||(r=!0);continue}if(i.startsWith("//"))continue;return i.match(/^(['"])(.+)\1;?$/)?.[2]===n}return!1}function I(t){return nt(t,"use client")}function et(t){if(!t)return!1;let n=l(t);return q.test(n)||n.includes("\0")?!1:N.test(n)}function rt(t){return/from\s+["']react-dom\/client["']/.test(t)||/require\(\s*["']react-dom\/client["']\s*\)/.test(t)}function st(t){let r=(l(t).split("/").pop()??"").replace(N,"");return["main","index","app","_app","root","client","entry-client","entry.client"].includes(r)}function it(t,n,e){if(!t)return!1;let r=l(t);return e==="webpack"||e==="rspack"?!1:r.endsWith("/pages/_app.tsx")||r.endsWith("/pages/_app.jsx")||r.endsWith("/pages/_app.js")?!0:r.endsWith("/app/layout.tsx")||r.endsWith("/app/layout.jsx")||r.endsWith("/app/page.tsx")||r.endsWith("/app/page.jsx")?I(n):I(n)||rt(n)||st(r)}function T(t){return t.framework==="vite"?`/@fs/${$}`:$}function y(t,n){return typeof t=="string"?t===n?t:[n,t]:Array.isArray(t)?t.includes(n)?t:[n,...t]:t&&typeof t=="object"&&"import"in t?{...t,import:y(t.import,n)}:t}function ot(t,n){let e=t.options.name?.toLowerCase()??"";if(e.includes("server")||e.includes("edge"))return;let r=t.options.entry;t.options.entry=async()=>{let s=typeof r=="function"?await r():r;return typeof s=="string"||Array.isArray(s)?y(s,n):s&&typeof s=="object"?Object.fromEntries(Object.entries(s).map(([i,o])=>[i,y(o,n)])):s}}function W(t){t.use("/__open",(n,e)=>{let r="";n.on("data",s=>r+=s),n.on("end",()=>{try{let{file:s,line:i,column:o}=JSON.parse(r);(0,h.default)(`${s}:${i}:${o}`),e.statusCode=204,e.end()}catch{e.statusCode=400,e.end()}})})}var f=null;function at(){return f||(f=new Promise(t=>{let n=C.default.createServer((e,r)=>{if(e.url==="/__open"&&e.method==="POST"){let s="";e.on("data",i=>s+=i),e.on("end",()=>{try{let{file:i,line:o,column:a}=JSON.parse(s);(0,h.default)(`${i}:${o}:${a}`),r.statusCode=204,r.end()}catch{r.statusCode=400,r.end()}})}else r.statusCode=404,r.end()});n.listen(0,"127.0.0.1",()=>{let e=n.address().port;t(e)})}),f)}function ct(t){let n=t.options.devServer;if(!n||typeof n!="object")return;let e=n.setupMiddlewares;n.setupMiddlewares=(r,s)=>(s.app&&W(s.app),typeof e=="function"?e(r,s):r)}var ut=["*.mjs","*.js","*.jsx","*.ts","*.tsx"],pt="interactive-react-inspector/loader";function ft(t,n){return Array.isArray(t)?[...t,n]:t?[t,n]:n}function lt(t){return t!=="*.js"?{not:"foreign"}:{all:[{not:"foreign"},{path:/\.js$/},{not:{path:/\.(?:jsx|ts|tsx)\.js$/}}]}}function mt(t={}){let n={...t};for(let e of ut)n[e]=ft(n[e],{condition:lt(e),loaders:[{loader:pt,options:{runtime:!0}}]});return n}var D=(0,v.createUnplugin)((t,n)=>process.env.NODE_ENV==="production"?{name:"react-inspector"}:{name:"react-inspector",enforce:"pre",resolveId(e){if(e===g)return R},load(e){if(e===R)return`
6
6
  "use client";
7
7
  import ${JSON.stringify(T(n))};
8
- `},transform(e,r){if(!et(r))return;let s=O(e,r);return it(r,e,n.framework)&&s&&(s.code=w(s.code,g)),s},vite:{configureServer(e){N(e.middlewares)}},webpack(e){ot(e,T(n)),ct(e)}}));function L(t={}){let n=t.webpack;return{...t,turbopack:{...t.turbopack,rules:mt(t.turbopack?.rules)},async rewrites(){let e=await at(),r=typeof t.rewrites=="function"?await t.rewrites():t.rewrites,s={source:"/__open",destination:`http://127.0.0.1:${e}/__open`};return Array.isArray(r)?[...r,s]:r&&typeof r=="object"?{...r,fallback:[...r.fallback||[],s]}:[s]},webpack(e,r){let s=typeof n=="function"?n(e,r)??e:e;return s.plugins??=[],s.plugins.push(D.webpack()),s}}}var dt=Object.assign(D,{next:L});0&&(module.exports={next});
8
+ `},transform(e,r){if(!et(r))return;let s=S(e,r);return it(r,e,n.framework)&&s&&(s.code=_(s.code,g)),s},vite:{configureServer(e){W(e.middlewares)}},webpack(e){ot(e,T(n)),ct(e)}});function L(t={}){if(process.env.NODE_ENV==="production")return t;let n=t.webpack;return{...t,turbopack:{...t.turbopack,rules:mt(t.turbopack?.rules)},async rewrites(){let e=await at(),r=typeof t.rewrites=="function"?await t.rewrites():t.rewrites,s={source:"/__open",destination:`http://127.0.0.1:${e}/__open`};return Array.isArray(r)?[...r,s]:r&&typeof r=="object"?{...r,fallback:[...r.fallback||[],s]}:[s]},webpack(e,r){let s=typeof n=="function"?n(e,r)??e:e;return s.plugins??=[],s.plugins.push(D.webpack()),s}}}var dt=Object.assign(D,{next:L});0&&(module.exports={next});
9
9
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/unplugin/index.ts","../src/core/imports.ts","../src/core/transform.ts"],"sourcesContent":["import { createUnplugin } from \"unplugin\";\r\nimport path from \"node:path\";\r\nimport { fileURLToPath } from \"node:url\";\r\nimport launch from \"launch-editor\";\r\nimport http from \"node:http\";\r\nimport type { AddressInfo } from \"node:net\";\r\n\r\nimport fs from \"node:fs\";\n\nimport { injectSideEffectImport } from \"../core/imports.ts\";\nimport { transform as sourceTransform } from \"../core/transform.ts\";\n\r\nconst VIRTUAL_ID = \"virtual:react-inspector\";\r\nconst RESOLVED_ID = \"\\0\" + VIRTUAL_ID;\r\nconst SOURCE_EXT_RE = /\\.(mjs|js|jsx|ts|tsx)$/;\r\nconst IGNORED_PATH_RE = /\\/(node_modules|dist|build|coverage|\\.next|\\.nuxt|\\.svelte-kit|\\.output|\\.astro)\\//;\r\n\r\nfunction normalizeId(id?: string) {\r\n if (!id) return \"\";\r\n\r\n // Strip query/hash and normalize Windows paths for consistent matching.\r\n const cleaned = id.split(\"?\")[0].split(\"#\")[0];\r\n return cleaned.replace(/\\\\/g, \"/\");\r\n}\r\n\r\nconst currentFile = typeof __filename === \"string\"\n ? __filename\n : fileURLToPath(import.meta.url);\nconst __dirname = path.dirname(currentFile);\nconst RUNTIME_PATH = normalizeId(\n fs.existsSync(path.resolve(__dirname, \"../runtime/install.ts\"))\r\n ? path.resolve(__dirname, \"../runtime/install.ts\")\r\n : path.resolve(__dirname, \"./runtime.js\"),\r\n);\r\n\r\nfunction hasDirective(code: string, directive: string) {\r\n const lines = code.split(/\\r?\\n/);\r\n let inBlockComment = false;\r\n\r\n for (const line of lines) {\r\n const trimmed = line.trim();\r\n\r\n if (!trimmed) continue;\r\n\r\n if (inBlockComment) {\r\n if (trimmed.includes(\"*/\")) inBlockComment = false;\r\n continue;\r\n }\r\n\r\n if (trimmed.startsWith(\"/*\")) {\r\n if (!trimmed.includes(\"*/\")) inBlockComment = true;\r\n continue;\r\n }\r\n\r\n if (trimmed.startsWith(\"//\")) continue;\r\n\r\n const match = trimmed.match(/^(['\"])(.+)\\1;?$/);\r\n\r\n if (match?.[2] === directive) return true;\r\n\r\n // First non-directive statement means no `use client`.\r\n return false;\r\n }\r\n\r\n return false;\r\n}\r\n\r\nfunction hasUseClientDirective(code: string) {\r\n return hasDirective(code, \"use client\");\r\n}\r\n\r\nfunction shouldTransform(id?: string) {\r\n if (!id) return false;\r\n\r\n const normalized = normalizeId(id);\r\n\r\n if (\r\n IGNORED_PATH_RE.test(normalized) ||\r\n normalized.includes(\"\\0\")\r\n ) return false;\r\n\r\n return SOURCE_EXT_RE.test(normalized);\r\n}\r\n\r\nfunction importsClientRenderer(code: string) {\r\n return /from\\s+[\"']react-dom\\/client[\"']/.test(code) ||\r\n /require\\(\\s*[\"']react-dom\\/client[\"']\\s*\\)/.test(code);\r\n}\r\n\r\nfunction isLikelyClientEntry(id: string) {\r\n const normalized = normalizeId(id);\r\n const file = normalized.split(\"/\").pop() ?? \"\";\r\n const stem = file.replace(SOURCE_EXT_RE, \"\");\r\n\r\n return [\r\n \"main\",\r\n \"index\",\r\n \"app\",\r\n \"_app\",\r\n \"root\",\r\n \"client\",\r\n \"entry-client\",\r\n \"entry.client\",\r\n ].includes(stem);\r\n}\r\n\r\nfunction shouldInjectRuntime(id: string | undefined, code: string, framework: string) {\r\n if (!id) return false;\r\n\r\n const normalized = normalizeId(id);\r\n\r\n if (framework === \"webpack\" || framework === \"rspack\") {\r\n return false;\r\n }\r\n\r\n if (\r\n normalized.endsWith(\"/pages/_app.tsx\") ||\r\n normalized.endsWith(\"/pages/_app.jsx\") ||\r\n normalized.endsWith(\"/pages/_app.js\")\r\n ) return true;\r\n\r\n if (\r\n normalized.endsWith(\"/app/layout.tsx\") ||\r\n normalized.endsWith(\"/app/layout.jsx\") ||\r\n normalized.endsWith(\"/app/page.tsx\") ||\r\n normalized.endsWith(\"/app/page.jsx\")\r\n ) {\r\n return hasUseClientDirective(code);\r\n }\r\n\r\n return hasUseClientDirective(code) ||\r\n importsClientRenderer(code) ||\r\n isLikelyClientEntry(normalized);\r\n}\r\n\r\nfunction getRuntimeImport(meta: { framework: string }) {\r\n if (meta.framework === \"vite\") {\r\n return `/@fs/${RUNTIME_PATH}`;\r\n }\r\n\r\n return RUNTIME_PATH;\r\n}\r\n\r\nfunction prependImport(value: unknown, id: string): unknown {\r\n if (typeof value === \"string\") {\r\n return value === id ? value : [id, value];\r\n }\r\n\r\n if (Array.isArray(value)) {\r\n return value.includes(id) ? value : [id, ...value];\r\n }\r\n\r\n if (value && typeof value === \"object\" && \"import\" in value) {\r\n return {\r\n ...value,\r\n import: prependImport((value as { import: unknown }).import, id),\r\n };\r\n }\r\n\r\n return value;\r\n}\r\n\r\nfunction injectWebpackEntry(\r\n compiler: { options: { name?: string; entry?: unknown } },\r\n id: string,\r\n) {\r\n const name = compiler.options.name?.toLowerCase() ?? \"\";\r\n\r\n if (name.includes(\"server\") || name.includes(\"edge\")) return;\r\n\r\n const originalEntry = compiler.options.entry;\r\n\r\n compiler.options.entry = async () => {\r\n const entry =\r\n typeof originalEntry === \"function\"\r\n ? await originalEntry()\r\n : originalEntry;\r\n\r\n if (typeof entry === \"string\" || Array.isArray(entry)) {\r\n return prependImport(entry, id);\r\n }\r\n\r\n if (entry && typeof entry === \"object\") {\r\n return Object.fromEntries(\r\n Object.entries(entry).map(([key, value]) => [\r\n key,\r\n prependImport(value, id),\r\n ]),\r\n );\r\n }\r\n\r\n return entry;\r\n };\r\n}\r\n\r\nfunction installOpenMiddleware(app: any) {\r\n app.use(\"/__open\", (req: any, res: any) => {\r\n let body = \"\";\r\n\r\n req.on(\"data\", (c: Buffer | string) => body += c);\r\n\r\n req.on(\"end\", () => {\r\n try {\r\n const { file, line, column } = JSON.parse(body);\r\n\r\n launch(`${file}:${line}:${column}`);\r\n\r\n res.statusCode = 204;\r\n res.end();\r\n } catch {\r\n res.statusCode = 400;\r\n res.end();\r\n }\r\n });\r\n },\r\n );\r\n}\r\n\r\nlet bridgePortPromise: Promise<number> | null = null;\r\n\r\nfunction getBridgeServerPort() {\r\n if (bridgePortPromise) return bridgePortPromise;\r\n\r\n bridgePortPromise = new Promise((resolve) => {\r\n const server = http.createServer((req, res) => {\r\n if (req.url === \"/__open\" && req.method === \"POST\") {\r\n let body = \"\";\r\n req.on(\"data\", (chunk) => (body += chunk));\r\n req.on(\"end\", () => {\r\n try {\r\n const { file, line, column } = JSON.parse(body);\r\n launch(`${file}:${line}:${column}`);\r\n res.statusCode = 204;\r\n res.end();\r\n } catch {\r\n res.statusCode = 400;\r\n res.end();\r\n }\r\n });\r\n } else {\r\n res.statusCode = 404;\r\n res.end();\r\n }\r\n });\r\n\r\n server.listen(0, \"127.0.0.1\", () => {\r\n const port = (server.address() as AddressInfo).port;\r\n resolve(port);\r\n });\r\n });\r\n\r\n return bridgePortPromise;\r\n}\r\n\r\nfunction injectWebpackDevServerOpenRoute(compiler: { options: { devServer?: any } }) {\r\n const devServer = compiler.options.devServer;\r\n\r\n if (!devServer || typeof devServer !== \"object\") return;\r\n\r\n const originalSetupMiddlewares = devServer.setupMiddlewares;\r\n\r\n devServer.setupMiddlewares = (middlewares: unknown[], server: { app?: any }) => {\r\n if (server.app) installOpenMiddleware(server.app);\r\n\r\n return typeof originalSetupMiddlewares === \"function\"\r\n ? originalSetupMiddlewares(middlewares, server)\r\n : middlewares;\r\n };\r\n}\r\n\r\ntype NextConfigLike = Record<string, any> & {\r\n turbopack?: Record<string, any> & {\r\n rules?: Record<string, any>;\r\n };\r\n webpack?: ((config: any, context: any) => any) | null;\r\n rewrites?: (() => Promise<any> | any) | any;\r\n};\n\nconst TURBOPACK_EXTENSIONS = [\"*.mjs\", \"*.js\", \"*.jsx\", \"*.ts\", \"*.tsx\"];\nconst TURBOPACK_LOADER = \"interactive-react-inspector/loader\";\n\nfunction appendTurbopackRule(existing: unknown, rule: unknown) {\n return Array.isArray(existing)\n ? [...existing, rule]\n : existing\n ? [existing, rule]\n : rule;\n}\n\nfunction getTurbopackCondition(extension: string) {\n if (extension !== \"*.js\") return { not: \"foreign\" };\n\n return {\n all: [\n { not: \"foreign\" },\n { path: /\\.js$/ },\n { not: { path: /\\.(?:jsx|ts|tsx)\\.js$/ } },\n ],\n };\n}\n\nfunction createTurbopackRules(existingRules: Record<string, any> = {}) {\n const rules = { ...existingRules };\n\n for (const extension of TURBOPACK_EXTENSIONS) {\n rules[extension] = appendTurbopackRule(rules[extension], {\n condition: getTurbopackCondition(extension),\n loaders: [\n {\n loader: TURBOPACK_LOADER,\n options: { runtime: true },\n },\n ],\n });\n }\n\n return rules;\n}\n\nconst Inspector = createUnplugin((_options, meta) => ({\n name: \"react-inspector\",\r\n enforce: \"pre\",\r\n\r\n resolveId(id) {\r\n if (id === VIRTUAL_ID) {\r\n return RESOLVED_ID;\r\n }\r\n },\r\n\r\n load(id) {\r\n if (id === RESOLVED_ID) {\r\n return `\r\n\"use client\";\r\nimport ${JSON.stringify(getRuntimeImport(meta))};\r\n`;\r\n }\r\n },\r\n\r\n transform(code, id) {\r\n if (!shouldTransform(id)) return;\r\n\r\n let result = sourceTransform(code, id);\r\n\r\n if (shouldInjectRuntime(id, code, meta.framework) && result) {\r\n result.code = injectSideEffectImport(result.code, VIRTUAL_ID);\n }\n\n return result;\n },\r\n\r\n vite: {\r\n configureServer(server) {\r\n installOpenMiddleware(server.middlewares);\r\n },\r\n },\r\n\r\n webpack(compiler) {\r\n injectWebpackEntry(compiler, getRuntimeImport(meta));\r\n injectWebpackDevServerOpenRoute(compiler);\r\n },\r\n}));\n\nfunction next<TConfig extends NextConfigLike>(config: TConfig = {} as TConfig) {\r\n const originalWebpack = config.webpack;\r\n\r\n return {\r\n ...config,\r\n turbopack: {\r\n ...config.turbopack,\r\n rules: createTurbopackRules(config.turbopack?.rules),\r\n },\r\n async rewrites() {\r\n const bridgePort = await getBridgeServerPort();\r\n const originalRewrites = typeof config.rewrites === \"function\"\r\n ? await config.rewrites()\r\n : config.rewrites;\r\n\r\n const inspectorRewrite = {\r\n source: \"/__open\",\r\n destination: `http://127.0.0.1:${bridgePort}/__open`,\r\n };\r\n\r\n if (Array.isArray(originalRewrites)) {\r\n return [...originalRewrites, inspectorRewrite];\r\n } else if (originalRewrites && typeof originalRewrites === \"object\") {\r\n return {\r\n ...originalRewrites,\r\n fallback: [...(originalRewrites.fallback || []), inspectorRewrite],\r\n };\r\n }\r\n\r\n return [inspectorRewrite];\r\n },\r\n webpack(webpackConfig: any, context: any) {\r\n const nextWebpackConfig = typeof originalWebpack === \"function\"\r\n ? originalWebpack(webpackConfig, context) ?? webpackConfig\r\n : webpackConfig;\r\n\r\n nextWebpackConfig.plugins ??= [];\r\n nextWebpackConfig.plugins.push(Inspector.webpack());\r\n\r\n return nextWebpackConfig;\r\n },\r\n };\r\n}\n\nexport { next };\n\nexport default Object.assign(Inspector, { next });\n","function getDirectiveInsertOffset(code: string) {\n let offset = 0;\n let insertOffset = 0;\n\n if (code.startsWith(\"#!\")) {\n const lineEnd = code.indexOf(\"\\n\");\n offset = lineEnd === -1 ? code.length : lineEnd + 1;\n insertOffset = offset;\n }\n\n while (offset < code.length) {\n const lineEnd = code.indexOf(\"\\n\", offset);\n const end = lineEnd === -1 ? code.length : lineEnd + 1;\n const line = code.slice(offset, end);\n const trimmed = line.trim();\n\n if (!trimmed || trimmed.startsWith(\"//\")) {\n offset = end;\n continue;\n }\n\n if (trimmed.startsWith(\"/*\")) {\n const blockEnd = code.indexOf(\"*/\", offset + 2);\n offset = blockEnd === -1 ? code.length : blockEnd + 2;\n if (code[offset] === \"\\r\") offset += 1;\n if (code[offset] === \"\\n\") offset += 1;\n continue;\n }\n\n if (/^(['\"])(.*?)\\1;?$/.test(trimmed)) {\n insertOffset = end;\n offset = end;\n continue;\n }\n\n break;\n }\n\n return insertOffset;\n}\n\nexport function injectSideEffectImport(code: string, id: string) {\n const statement = `import ${JSON.stringify(id)};`;\n\n if (code.includes(statement)) return code;\n\n const offset = getDirectiveInsertOffset(code);\n\n return `${code.slice(0, offset)}${statement}\\n${code.slice(offset)}`;\n}\n","import path from \"node:path\";\r\nimport { parse } from \"@babel/parser\";\r\nimport _traverse from \"@babel/traverse\";\r\nimport MagicString from \"magic-string\";\r\n\r\n// Unwrap the default export for ESM compatibility\r\nconst traverse = (_traverse as any).default || _traverse;\r\n\r\nconst ATTR = \"data-source\";\r\n\r\nfunction normalizeId(id: string) {\r\n return id.split(\"?\")[0].split(\"#\")[0].replace(/\\\\/g, \"/\");\r\n}\r\n\r\nfunction shouldTransform(id: string) {\r\n return /\\.(mjs|js|jsx|ts|tsx)$/.test(normalizeId(id));\r\n}\r\n\r\nfunction isInspectableElement(name: any) {\r\n if (name.type !== \"JSXIdentifier\") return false;\r\n const nameStr = name.name;\r\n return /^[a-z]/.test(nameStr) || nameStr === \"Image\" || nameStr === \"Link\";\r\n}\r\n\r\nexport function transform(code: string, id: string) {\r\n if (process.env.NODE_ENV === \"production\") return;\r\n\r\n const normalizedId = normalizeId(id);\r\n\r\n if (!shouldTransform(normalizedId)) return null;\r\n\r\n const s = new MagicString(code);\r\n\r\n let ast;\r\n\r\n try {\r\n ast = parse(code, {\r\n sourceType: \"unambiguous\",\r\n plugins: [\r\n \"jsx\",\r\n \"typescript\",\r\n \"decorators-legacy\",\r\n \"classProperties\",\r\n \"classPrivateProperties\",\r\n \"classPrivateMethods\",\r\n \"importAttributes\",\r\n ],\r\n });\r\n } catch {\r\n return null;\r\n }\r\n\r\n const relative = path.relative(\r\n process.cwd(),\r\n normalizedId,\r\n ).replaceAll(\"\\\\\", \"/\");\r\n\r\n traverse(ast, {\r\n JSXOpeningElement(p: { node: any; }) {\r\n const node = p.node;\r\n\r\n if (!node.loc) return;\r\n if (!isInspectableElement(node.name)) return;\r\n\r\n const exists = node.attributes.some(\r\n (a: { type: string; name: { name: string; }; }) =>\r\n a.type === \"JSXAttribute\"\r\n && a.name.name === ATTR,\r\n );\r\n\r\n if (exists) return;\r\n\r\n const insert = node.end! - (\r\n node.selfClosing\r\n ? 2\r\n : 1\r\n );\r\n\r\n const { line, column } = node.loc.start;\r\n\r\n s.prependLeft(\r\n insert,\r\n ` ${ATTR}=\"${relative}:${line}:${column}\"`,\r\n );\r\n },\r\n });\r\n\r\n return {\r\n code: s.toString(),\r\n map: s.generateMap(),\r\n }\r\n}\r\n"],"mappings":"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","names":["unplugin_exports","__export","unplugin_default","next","__toCommonJS","import_unplugin","import_node_path","import_node_url","import_launch_editor","import_node_http","import_node_fs","getDirectiveInsertOffset","code","offset","insertOffset","lineEnd","end","trimmed","blockEnd","injectSideEffectImport","id","statement","import_node_path","import_parser","import_traverse","import_magic_string","traverse","_traverse","ATTR","normalizeId","id","shouldTransform","isInspectableElement","name","nameStr","transform","code","normalizedId","s","MagicString","ast","relative","path","p","node","a","insert","line","column","import_meta","VIRTUAL_ID","RESOLVED_ID","SOURCE_EXT_RE","IGNORED_PATH_RE","normalizeId","id","currentFile","__dirname","path","RUNTIME_PATH","fs","hasDirective","code","directive","lines","inBlockComment","line","trimmed","hasUseClientDirective","shouldTransform","normalized","importsClientRenderer","isLikelyClientEntry","stem","shouldInjectRuntime","framework","getRuntimeImport","meta","prependImport","value","injectWebpackEntry","compiler","name","originalEntry","entry","key","installOpenMiddleware","app","req","res","body","c","file","column","launch","bridgePortPromise","getBridgeServerPort","resolve","server","http","chunk","port","injectWebpackDevServerOpenRoute","devServer","originalSetupMiddlewares","middlewares","TURBOPACK_EXTENSIONS","TURBOPACK_LOADER","appendTurbopackRule","existing","rule","getTurbopackCondition","extension","createTurbopackRules","existingRules","rules","Inspector","_options","result","transform","injectSideEffectImport","next","config","originalWebpack","bridgePort","originalRewrites","inspectorRewrite","webpackConfig","context","nextWebpackConfig","unplugin_default","Inspector","next"]}
1
+ {"version":3,"sources":["../src/unplugin/index.ts","../src/core/imports.ts","../src/core/transform.ts"],"sourcesContent":["import { createUnplugin } from \"unplugin\";\r\nimport path from \"node:path\";\r\nimport { fileURLToPath } from \"node:url\";\r\nimport launch from \"launch-editor\";\r\nimport http from \"node:http\";\r\nimport type { AddressInfo } from \"node:net\";\r\n\r\nimport fs from \"node:fs\";\n\nimport { injectSideEffectImport } from \"../core/imports.ts\";\nimport { transform as sourceTransform } from \"../core/transform.ts\";\n\r\nconst VIRTUAL_ID = \"virtual:react-inspector\";\r\nconst RESOLVED_ID = \"\\0\" + VIRTUAL_ID;\r\nconst SOURCE_EXT_RE = /\\.(mjs|js|jsx|ts|tsx)$/;\r\nconst IGNORED_PATH_RE = /\\/(node_modules|dist|build|coverage|\\.next|\\.nuxt|\\.svelte-kit|\\.output|\\.astro)\\//;\r\n\r\nfunction normalizeId(id?: string) {\r\n if (!id) return \"\";\r\n\r\n // Strip query/hash and normalize Windows paths for consistent matching.\r\n const cleaned = id.split(\"?\")[0].split(\"#\")[0];\r\n return cleaned.replace(/\\\\/g, \"/\");\r\n}\r\n\r\nconst currentFile = typeof __filename === \"string\"\n ? __filename\n : fileURLToPath(import.meta.url);\nconst __dirname = path.dirname(currentFile);\nconst RUNTIME_PATH = normalizeId(\n fs.existsSync(path.resolve(__dirname, \"../runtime/install.ts\"))\r\n ? path.resolve(__dirname, \"../runtime/install.ts\")\r\n : path.resolve(__dirname, \"./runtime.js\"),\r\n);\r\n\r\nfunction hasDirective(code: string, directive: string) {\r\n const lines = code.split(/\\r?\\n/);\r\n let inBlockComment = false;\r\n\r\n for (const line of lines) {\r\n const trimmed = line.trim();\r\n\r\n if (!trimmed) continue;\r\n\r\n if (inBlockComment) {\r\n if (trimmed.includes(\"*/\")) inBlockComment = false;\r\n continue;\r\n }\r\n\r\n if (trimmed.startsWith(\"/*\")) {\r\n if (!trimmed.includes(\"*/\")) inBlockComment = true;\r\n continue;\r\n }\r\n\r\n if (trimmed.startsWith(\"//\")) continue;\r\n\r\n const match = trimmed.match(/^(['\"])(.+)\\1;?$/);\r\n\r\n if (match?.[2] === directive) return true;\r\n\r\n // First non-directive statement means no `use client`.\r\n return false;\r\n }\r\n\r\n return false;\r\n}\r\n\r\nfunction hasUseClientDirective(code: string) {\r\n return hasDirective(code, \"use client\");\r\n}\r\n\r\nfunction shouldTransform(id?: string) {\r\n if (!id) return false;\r\n\r\n const normalized = normalizeId(id);\r\n\r\n if (\r\n IGNORED_PATH_RE.test(normalized) ||\r\n normalized.includes(\"\\0\")\r\n ) return false;\r\n\r\n return SOURCE_EXT_RE.test(normalized);\r\n}\r\n\r\nfunction importsClientRenderer(code: string) {\r\n return /from\\s+[\"']react-dom\\/client[\"']/.test(code) ||\r\n /require\\(\\s*[\"']react-dom\\/client[\"']\\s*\\)/.test(code);\r\n}\r\n\r\nfunction isLikelyClientEntry(id: string) {\r\n const normalized = normalizeId(id);\r\n const file = normalized.split(\"/\").pop() ?? \"\";\r\n const stem = file.replace(SOURCE_EXT_RE, \"\");\r\n\r\n return [\r\n \"main\",\r\n \"index\",\r\n \"app\",\r\n \"_app\",\r\n \"root\",\r\n \"client\",\r\n \"entry-client\",\r\n \"entry.client\",\r\n ].includes(stem);\r\n}\r\n\r\nfunction shouldInjectRuntime(id: string | undefined, code: string, framework: string) {\r\n if (!id) return false;\r\n\r\n const normalized = normalizeId(id);\r\n\r\n if (framework === \"webpack\" || framework === \"rspack\") {\r\n return false;\r\n }\r\n\r\n if (\r\n normalized.endsWith(\"/pages/_app.tsx\") ||\r\n normalized.endsWith(\"/pages/_app.jsx\") ||\r\n normalized.endsWith(\"/pages/_app.js\")\r\n ) return true;\r\n\r\n if (\r\n normalized.endsWith(\"/app/layout.tsx\") ||\r\n normalized.endsWith(\"/app/layout.jsx\") ||\r\n normalized.endsWith(\"/app/page.tsx\") ||\r\n normalized.endsWith(\"/app/page.jsx\")\r\n ) {\r\n return hasUseClientDirective(code);\r\n }\r\n\r\n return hasUseClientDirective(code) ||\r\n importsClientRenderer(code) ||\r\n isLikelyClientEntry(normalized);\r\n}\r\n\r\nfunction getRuntimeImport(meta: { framework: string }) {\r\n if (meta.framework === \"vite\") {\r\n return `/@fs/${RUNTIME_PATH}`;\r\n }\r\n\r\n return RUNTIME_PATH;\r\n}\r\n\r\nfunction prependImport(value: unknown, id: string): unknown {\r\n if (typeof value === \"string\") {\r\n return value === id ? value : [id, value];\r\n }\r\n\r\n if (Array.isArray(value)) {\r\n return value.includes(id) ? value : [id, ...value];\r\n }\r\n\r\n if (value && typeof value === \"object\" && \"import\" in value) {\r\n return {\r\n ...value,\r\n import: prependImport((value as { import: unknown }).import, id),\r\n };\r\n }\r\n\r\n return value;\r\n}\r\n\r\nfunction injectWebpackEntry(\r\n compiler: { options: { name?: string; entry?: unknown } },\r\n id: string,\r\n) {\r\n const name = compiler.options.name?.toLowerCase() ?? \"\";\r\n\r\n if (name.includes(\"server\") || name.includes(\"edge\")) return;\r\n\r\n const originalEntry = compiler.options.entry;\r\n\r\n compiler.options.entry = async () => {\r\n const entry =\r\n typeof originalEntry === \"function\"\r\n ? await originalEntry()\r\n : originalEntry;\r\n\r\n if (typeof entry === \"string\" || Array.isArray(entry)) {\r\n return prependImport(entry, id);\r\n }\r\n\r\n if (entry && typeof entry === \"object\") {\r\n return Object.fromEntries(\r\n Object.entries(entry).map(([key, value]) => [\r\n key,\r\n prependImport(value, id),\r\n ]),\r\n );\r\n }\r\n\r\n return entry;\r\n };\r\n}\r\n\r\nfunction installOpenMiddleware(app: any) {\r\n app.use(\"/__open\", (req: any, res: any) => {\r\n let body = \"\";\r\n\r\n req.on(\"data\", (c: Buffer | string) => body += c);\r\n\r\n req.on(\"end\", () => {\r\n try {\r\n const { file, line, column } = JSON.parse(body);\r\n\r\n launch(`${file}:${line}:${column}`);\r\n\r\n res.statusCode = 204;\r\n res.end();\r\n } catch {\r\n res.statusCode = 400;\r\n res.end();\r\n }\r\n });\r\n },\r\n );\r\n}\r\n\r\nlet bridgePortPromise: Promise<number> | null = null;\r\n\r\nfunction getBridgeServerPort() {\r\n if (bridgePortPromise) return bridgePortPromise;\r\n\r\n bridgePortPromise = new Promise((resolve) => {\r\n const server = http.createServer((req, res) => {\r\n if (req.url === \"/__open\" && req.method === \"POST\") {\r\n let body = \"\";\r\n req.on(\"data\", (chunk) => (body += chunk));\r\n req.on(\"end\", () => {\r\n try {\r\n const { file, line, column } = JSON.parse(body);\r\n launch(`${file}:${line}:${column}`);\r\n res.statusCode = 204;\r\n res.end();\r\n } catch {\r\n res.statusCode = 400;\r\n res.end();\r\n }\r\n });\r\n } else {\r\n res.statusCode = 404;\r\n res.end();\r\n }\r\n });\r\n\r\n server.listen(0, \"127.0.0.1\", () => {\r\n const port = (server.address() as AddressInfo).port;\r\n resolve(port);\r\n });\r\n });\r\n\r\n return bridgePortPromise;\r\n}\r\n\r\nfunction injectWebpackDevServerOpenRoute(compiler: { options: { devServer?: any } }) {\r\n const devServer = compiler.options.devServer;\r\n\r\n if (!devServer || typeof devServer !== \"object\") return;\r\n\r\n const originalSetupMiddlewares = devServer.setupMiddlewares;\r\n\r\n devServer.setupMiddlewares = (middlewares: unknown[], server: { app?: any }) => {\r\n if (server.app) installOpenMiddleware(server.app);\r\n\r\n return typeof originalSetupMiddlewares === \"function\"\r\n ? originalSetupMiddlewares(middlewares, server)\r\n : middlewares;\r\n };\r\n}\r\n\r\ntype NextConfigLike = Record<string, any> & {\r\n turbopack?: Record<string, any> & {\r\n rules?: Record<string, any>;\r\n };\r\n webpack?: ((config: any, context: any) => any) | null;\r\n rewrites?: (() => Promise<any> | any) | any;\r\n};\n\nconst TURBOPACK_EXTENSIONS = [\"*.mjs\", \"*.js\", \"*.jsx\", \"*.ts\", \"*.tsx\"];\nconst TURBOPACK_LOADER = \"interactive-react-inspector/loader\";\n\nfunction appendTurbopackRule(existing: unknown, rule: unknown) {\n return Array.isArray(existing)\n ? [...existing, rule]\n : existing\n ? [existing, rule]\n : rule;\n}\n\nfunction getTurbopackCondition(extension: string) {\n if (extension !== \"*.js\") return { not: \"foreign\" };\n\n return {\n all: [\n { not: \"foreign\" },\n { path: /\\.js$/ },\n { not: { path: /\\.(?:jsx|ts|tsx)\\.js$/ } },\n ],\n };\n}\n\nfunction createTurbopackRules(existingRules: Record<string, any> = {}) {\n const rules = { ...existingRules };\n\n for (const extension of TURBOPACK_EXTENSIONS) {\n rules[extension] = appendTurbopackRule(rules[extension], {\n condition: getTurbopackCondition(extension),\n loaders: [\n {\n loader: TURBOPACK_LOADER,\n options: { runtime: true },\n },\n ],\n });\n }\n\n return rules;\n}\n\nconst Inspector = createUnplugin((_options, meta) => {\r\n if (process.env.NODE_ENV === \"production\") {\r\n return {\r\n name: \"react-inspector\",\r\n };\r\n }\r\n\r\n return {\r\n name: \"react-inspector\",\r\n enforce: \"pre\",\n\r\n resolveId(id) {\r\n if (id === VIRTUAL_ID) {\r\n return RESOLVED_ID;\r\n }\r\n },\r\n\r\n load(id) {\r\n if (id === RESOLVED_ID) {\r\n return `\r\n\"use client\";\r\nimport ${JSON.stringify(getRuntimeImport(meta))};\r\n`;\r\n }\r\n },\r\n\r\n transform(code, id) {\r\n if (!shouldTransform(id)) return;\r\n\r\n let result = sourceTransform(code, id);\r\n\r\n if (shouldInjectRuntime(id, code, meta.framework) && result) {\r\n result.code = injectSideEffectImport(result.code, VIRTUAL_ID);\n }\n\n return result;\n },\r\n\r\n vite: {\r\n configureServer(server) {\r\n installOpenMiddleware(server.middlewares);\r\n },\r\n },\r\n\r\n webpack(compiler) {\r\n injectWebpackEntry(compiler, getRuntimeImport(meta));\r\n injectWebpackDevServerOpenRoute(compiler);\r\n },\r\n };\r\n});\n\nfunction next<TConfig extends NextConfigLike>(config: TConfig = {} as TConfig) {\r\n if (process.env.NODE_ENV === \"production\") {\r\n return config;\r\n }\r\n\r\n const originalWebpack = config.webpack;\r\n\r\n return {\r\n ...config,\r\n turbopack: {\r\n ...config.turbopack,\r\n rules: createTurbopackRules(config.turbopack?.rules),\r\n },\r\n async rewrites() {\r\n const bridgePort = await getBridgeServerPort();\r\n const originalRewrites = typeof config.rewrites === \"function\"\r\n ? await config.rewrites()\r\n : config.rewrites;\r\n\r\n const inspectorRewrite = {\r\n source: \"/__open\",\r\n destination: `http://127.0.0.1:${bridgePort}/__open`,\r\n };\r\n\r\n if (Array.isArray(originalRewrites)) {\r\n return [...originalRewrites, inspectorRewrite];\r\n } else if (originalRewrites && typeof originalRewrites === \"object\") {\r\n return {\r\n ...originalRewrites,\r\n fallback: [...(originalRewrites.fallback || []), inspectorRewrite],\r\n };\r\n }\r\n\r\n return [inspectorRewrite];\r\n },\r\n webpack(webpackConfig: any, context: any) {\r\n const nextWebpackConfig = typeof originalWebpack === \"function\"\r\n ? originalWebpack(webpackConfig, context) ?? webpackConfig\r\n : webpackConfig;\r\n\r\n nextWebpackConfig.plugins ??= [];\r\n nextWebpackConfig.plugins.push(Inspector.webpack());\r\n\r\n return nextWebpackConfig;\r\n },\r\n };\r\n}\n\nexport { next };\n\nexport default Object.assign(Inspector, { next });\n","function getDirectiveInsertOffset(code: string) {\n let offset = 0;\n let insertOffset = 0;\n\n if (code.startsWith(\"#!\")) {\n const lineEnd = code.indexOf(\"\\n\");\n offset = lineEnd === -1 ? code.length : lineEnd + 1;\n insertOffset = offset;\n }\n\n while (offset < code.length) {\n const lineEnd = code.indexOf(\"\\n\", offset);\n const end = lineEnd === -1 ? code.length : lineEnd + 1;\n const line = code.slice(offset, end);\n const trimmed = line.trim();\n\n if (!trimmed || trimmed.startsWith(\"//\")) {\n offset = end;\n continue;\n }\n\n if (trimmed.startsWith(\"/*\")) {\n const blockEnd = code.indexOf(\"*/\", offset + 2);\n offset = blockEnd === -1 ? code.length : blockEnd + 2;\n if (code[offset] === \"\\r\") offset += 1;\n if (code[offset] === \"\\n\") offset += 1;\n continue;\n }\n\n if (/^(['\"])(.*?)\\1;?$/.test(trimmed)) {\n insertOffset = end;\n offset = end;\n continue;\n }\n\n break;\n }\n\n return insertOffset;\n}\n\nexport function injectSideEffectImport(code: string, id: string) {\n const statement = `import ${JSON.stringify(id)};`;\n\n if (code.includes(statement)) return code;\n\n const offset = getDirectiveInsertOffset(code);\n\n return `${code.slice(0, offset)}${statement}\\n${code.slice(offset)}`;\n}\n","import path from \"node:path\";\r\nimport { parse } from \"@babel/parser\";\r\nimport _traverse from \"@babel/traverse\";\r\nimport MagicString from \"magic-string\";\r\n\r\n// Unwrap the default export for ESM compatibility\r\nconst traverse = (_traverse as any).default || _traverse;\r\n\r\nconst ATTR = \"data-source\";\r\n\r\nfunction normalizeId(id: string) {\r\n return id.split(\"?\")[0].split(\"#\")[0].replace(/\\\\/g, \"/\");\r\n}\r\n\r\nfunction shouldTransform(id: string) {\r\n return /\\.(mjs|js|jsx|ts|tsx)$/.test(normalizeId(id));\r\n}\r\n\r\nfunction isInspectableElement(name: any) {\r\n if (name.type !== \"JSXIdentifier\") return false;\r\n const nameStr = name.name;\r\n return /^[a-z]/.test(nameStr) || nameStr === \"Image\" || nameStr === \"Link\";\r\n}\r\n\r\nexport function transform(code: string, id: string) {\r\n if (process.env.NODE_ENV === \"production\") return;\r\n\r\n const normalizedId = normalizeId(id);\r\n\r\n if (!shouldTransform(normalizedId)) return null;\r\n\r\n const s = new MagicString(code);\r\n\r\n let ast;\r\n\r\n try {\r\n ast = parse(code, {\r\n sourceType: \"unambiguous\",\r\n plugins: [\r\n \"jsx\",\r\n \"typescript\",\r\n \"decorators-legacy\",\r\n \"classProperties\",\r\n \"classPrivateProperties\",\r\n \"classPrivateMethods\",\r\n \"importAttributes\",\r\n ],\r\n });\r\n } catch {\r\n return null;\r\n }\r\n\r\n const relative = path.relative(\r\n process.cwd(),\r\n normalizedId,\r\n ).replaceAll(\"\\\\\", \"/\");\r\n\r\n traverse(ast, {\r\n JSXOpeningElement(p: { node: any; }) {\r\n const node = p.node;\r\n\r\n if (!node.loc) return;\r\n if (!isInspectableElement(node.name)) return;\r\n\r\n const exists = node.attributes.some(\r\n (a: { type: string; name: { name: string; }; }) =>\r\n a.type === \"JSXAttribute\"\r\n && a.name.name === ATTR,\r\n );\r\n\r\n if (exists) return;\r\n\r\n const insert = node.end! - (\r\n node.selfClosing\r\n ? 2\r\n : 1\r\n );\r\n\r\n const { line, column } = node.loc.start;\r\n\r\n s.prependLeft(\r\n insert,\r\n ` ${ATTR}=\"${relative}:${line}:${column}\"`,\r\n );\r\n },\r\n });\r\n\r\n return {\r\n code: s.toString(),\r\n map: s.generateMap(),\r\n }\r\n}\r\n"],"mappings":"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","names":["unplugin_exports","__export","unplugin_default","next","__toCommonJS","import_unplugin","import_node_path","import_node_url","import_launch_editor","import_node_http","import_node_fs","getDirectiveInsertOffset","code","offset","insertOffset","lineEnd","end","trimmed","blockEnd","injectSideEffectImport","id","statement","import_node_path","import_parser","import_traverse","import_magic_string","traverse","_traverse","ATTR","normalizeId","id","shouldTransform","isInspectableElement","name","nameStr","transform","code","normalizedId","s","MagicString","ast","relative","path","p","node","a","insert","line","column","import_meta","VIRTUAL_ID","RESOLVED_ID","SOURCE_EXT_RE","IGNORED_PATH_RE","normalizeId","id","currentFile","__dirname","path","RUNTIME_PATH","fs","hasDirective","code","directive","lines","inBlockComment","line","trimmed","hasUseClientDirective","shouldTransform","normalized","importsClientRenderer","isLikelyClientEntry","stem","shouldInjectRuntime","framework","getRuntimeImport","meta","prependImport","value","injectWebpackEntry","compiler","name","originalEntry","entry","key","installOpenMiddleware","app","req","res","body","c","file","column","launch","bridgePortPromise","getBridgeServerPort","resolve","server","http","chunk","port","injectWebpackDevServerOpenRoute","devServer","originalSetupMiddlewares","middlewares","TURBOPACK_EXTENSIONS","TURBOPACK_LOADER","appendTurbopackRule","existing","rule","getTurbopackCondition","extension","createTurbopackRules","existingRules","rules","Inspector","_options","result","transform","injectSideEffectImport","next","config","originalWebpack","bridgePort","originalRewrites","inspectorRewrite","webpackConfig","context","nextWebpackConfig","unplugin_default","Inspector","next"]}
package/dist/index.d.cts CHANGED
@@ -7,15 +7,7 @@ type NextConfigLike = Record<string, any> & {
7
7
  webpack?: ((config: any, context: any) => any) | null;
8
8
  rewrites?: (() => Promise<any> | any) | any;
9
9
  };
10
- declare function next<TConfig extends NextConfigLike>(config?: TConfig): TConfig & {
11
- turbopack: {
12
- rules: {
13
- [x: string]: any;
14
- };
15
- };
16
- rewrites(): Promise<any>;
17
- webpack(webpackConfig: any, context: any): any;
18
- };
10
+ declare function next<TConfig extends NextConfigLike>(config?: TConfig): TConfig;
19
11
 
20
12
  declare const _default: unplugin.UnpluginInstance<unknown, boolean> & {
21
13
  next: typeof next;
package/dist/index.d.ts CHANGED
@@ -7,15 +7,7 @@ type NextConfigLike = Record<string, any> & {
7
7
  webpack?: ((config: any, context: any) => any) | null;
8
8
  rewrites?: (() => Promise<any> | any) | any;
9
9
  };
10
- declare function next<TConfig extends NextConfigLike>(config?: TConfig): TConfig & {
11
- turbopack: {
12
- rules: {
13
- [x: string]: any;
14
- };
15
- };
16
- rewrites(): Promise<any>;
17
- webpack(webpackConfig: any, context: any): any;
18
- };
10
+ declare function next<TConfig extends NextConfigLike>(config?: TConfig): TConfig;
19
11
 
20
12
  declare const _default: unplugin.UnpluginInstance<unknown, boolean> & {
21
13
  next: typeof next;
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- import{a,b}from"./chunk-RY62FD45.js";import"./chunk-VI6QGAEY.js";export{b as default,a as next};
1
+ import{a,b}from"./chunk-PTKTPWXB.js";import"./chunk-VI6QGAEY.js";export{b as default,a as next};
2
2
  //# sourceMappingURL=index.js.map
package/dist/runtime.cjs CHANGED
@@ -1,4 +1,4 @@
1
- "use strict";var d=Object.defineProperty;var h=Object.getOwnPropertyDescriptor;var S=Object.getOwnPropertyNames;var M=Object.prototype.hasOwnProperty;var v=(e,t)=>{for(var n in t)d(e,n,{get:t[n],enumerable:!0})},E=(e,t,n,y)=>{if(t&&typeof t=="object"||typeof t=="function")for(let c of S(t))!M.call(e,c)&&c!==n&&d(e,c,{get:()=>t[c],enumerable:!(y=h(t,c))||y.enumerable});return e};var j=e=>E(d({},"__esModule",{value:!0}),e);var k={};v(k,{installInspector:()=>f});module.exports=j(k);var p="data-source",x="__react_inspector_overlay__",P=/(.+):(\d+):(\d+)$/;function H(e){if(!e)return null;let t=e.match(P);return t?{file:t[1],line:Number(t[2]),column:Number(t[3])}:null}async function T(e){e&&await fetch("/__open",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)})}var m=!1,o=!1,r=null,l=null,a=null,s=null,i=null;function N(){l=document.createElement("div"),l.id=x,l.style.all="initial",l.style.position="fixed",l.style.top="16px",l.style.right="16px",l.style.zIndex="2147483647",l.style.fontFamily='ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif',l.style.pointerEvents="auto";let e=l.attachShadow({mode:"open"}),t=document.createElement("style");t.textContent=`
1
+ "use strict";var b=Object.defineProperty;var R=Object.getOwnPropertyDescriptor;var W=Object.getOwnPropertyNames;var _=Object.prototype.hasOwnProperty;var D=(e,i)=>{for(var n in i)b(e,n,{get:i[n],enumerable:!0})},G=(e,i,n,a)=>{if(i&&typeof i=="object"||typeof i=="function")for(let s of W(i))!_.call(e,s)&&s!==n&&b(e,s,{get:()=>i[s],enumerable:!(a=R(i,s))||a.enumerable});return e};var C=e=>G(b({},"__esModule",{value:!0}),e);var Y={};D(Y,{installInspector:()=>T});module.exports=C(Y);var v="data-source",H="__react_inspector_overlay__",Z=/(.+):(\d+):(\d+)$/;function J(e){if(!e)return null;let i=e.match(Z);return i?{file:i[1],line:Number(i[2]),column:Number(i[3])}:null}async function $(e){e&&await fetch("/__open",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)})}var N=!1,r=!1,u=null,t=null,d=null,l=null,o=null;function U(){t=document.createElement("div"),t.id=H,t.style.all="initial",t.style.position="fixed",t.style.top="16px",t.style.right="16px",t.style.zIndex="2147483647",t.style.fontFamily='ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif',t.style.pointerEvents="auto";let e=t.attachShadow({mode:"open"}),i=document.createElement("style");i.textContent=`
2
2
  :host {
3
3
  all: initial;
4
4
  }
@@ -17,6 +17,7 @@
17
17
  padding: 0 12px;
18
18
  outline: none;
19
19
  transition: background-color 100ms ease-in-out;
20
+ touch-action: none;
20
21
  }
21
22
 
22
23
  button:hover {
@@ -40,5 +41,5 @@
40
41
  button[data-active="true"]::before {
41
42
  background: #fef3c7;
42
43
  }
43
- `,a=document.createElement("button"),a.type="button",a.textContent="Select",a.setAttribute("aria-pressed","false"),a.addEventListener("click",()=>u(!o)),e.append(t,a),document.documentElement.appendChild(l),s=document.createElement("div"),s.style.position="fixed",s.style.zIndex="2147483646",s.style.border="2px solid hsl(193, 80%, 50%)",s.style.borderRadius="4px",s.style.boxShadow="0 0 0 999999px hsla(193, 80%, 50%, 0.12), 0 0 24px hsla(193, 80%, 50%, 0.55)",s.style.pointerEvents="none",s.style.display="none",s.style.transition="left 0.15s ease-out, top 0.15s ease-out, width 0.15s ease-out, height 0.15s ease-out",i=document.createElement("div"),i.style.position="fixed",i.style.zIndex="2147483646",i.style.maxWidth="min(520px, calc(100vw - 24px))",i.style.overflow="hidden",i.style.textOverflow="ellipsis",i.style.whiteSpace="nowrap",i.style.background="hsl(193, 90%, 50%)",i.style.color="black",i.style.borderRadius="6px",i.style.boxShadow="0 8px 20px rgba(0, 0, 0, 0.22)",i.style.font='600 12px/1 ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif',i.style.padding="6px 8px",i.style.pointerEvents="none",i.style.display="none",i.style.transition="left 0.15s ease-out, top 0.15s ease-out",document.documentElement.append(s,i)}function u(e){o=e,a&&(a.dataset.active=String(o),a.textContent=o?"Selecting":"Select",a.setAttribute("aria-pressed",String(o))),document.documentElement.style.cursor=o?"crosshair":"",o||(r=null,b())}function b(){s&&(s.style.display="none"),i&&(i.style.display="none")}function g(e){return e.composedPath().find(n=>n instanceof Element&&n.id!==x&&!l?.contains(n)&&n.hasAttribute(p))}function I(e){if(!s||!i)return;if(!(e instanceof Element)){b();return}let t=e.getAttribute(p)||"",n=e.getBoundingClientRect();s.style.display="block",s.style.left=`${n.left}px`,s.style.top=`${n.top}px`,s.style.width=`${n.width}px`,s.style.height=`${n.height}px`,i.textContent=t,i.style.display="block",i.style.left=`${Math.max(8,Math.min(n.left,window.innerWidth-532))}px`,i.style.top=`${Math.max(8,n.top-30)}px`}function f(){m||typeof document>"u"||(console.log("[react-inspector] installing"),m=!0,N(),document.addEventListener("pointermove",e=>{if(!o)return;let t=g(e);t!==r&&(r=t,I(r))},!0),document.addEventListener("scroll",()=>{!o||!(r instanceof Element)||I(r)},!0),window.addEventListener("resize",()=>{!o||!(r instanceof Element)||I(r)}),document.addEventListener("keydown",e=>{e.key==="Escape"&&o&&u(!1)},!0),document.addEventListener("click",async e=>{if(!o||e.button!==0)return;let t=g(e);if(!(t instanceof Element))return;let n=H(t.getAttribute(p));e.preventDefault(),e.stopPropagation(),u(!1),await T(n)},!0))}f();0&&(module.exports={installInspector});
44
+ `,d=document.createElement("button"),d.type="button",d.textContent="Select",d.setAttribute("aria-pressed","false");let n=localStorage.getItem("__react_inspector_pos__");if(n)try{let s=JSON.parse(n);t.style.top="auto",t.style.bottom="auto",t.style.left="auto",t.style.right="auto",s.verticalSide==="bottom"?t.style.bottom=s.verticalValue:t.style.top=s.verticalValue,s.horizontalSide==="right"?t.style.right=s.horizontalValue:t.style.left=s.horizontalValue}catch{}let a=!1;d.addEventListener("pointerdown",s=>{let g=s.clientX,z=s.clientY,h=t.getBoundingClientRect(),B=h.top,k=h.left;a=!1;let S=c=>{let f=c.clientX-g,x=c.clientY-z;if(!a&&(Math.abs(f)>5||Math.abs(x)>5)&&(a=!0),a){let y=B+x,I=k+f,p=8,m=window.innerHeight-h.height-p,L=window.innerWidth-h.width-p;t.style.top=`${Math.max(p,Math.min(y,m))}px`,t.style.left=`${Math.max(p,Math.min(I,L))}px`,t.style.bottom="auto",t.style.right="auto"}},E=()=>{if(a){let c=t.getBoundingClientRect(),f=c.left+c.width/2,x=c.top+c.height/2,y=f>window.innerWidth/2?"right":"left",I=x>window.innerHeight/2?"bottom":"top",p=y==="right"?`${window.innerWidth-c.right}px`:`${c.left}px`,m=I==="bottom"?`${window.innerHeight-c.bottom}px`:`${c.top}px`;localStorage.setItem("__react_inspector_pos__",JSON.stringify({horizontalSide:y,horizontalValue:p,verticalSide:I,verticalValue:m})),t.style.top=I==="top"?m:"auto",t.style.bottom=I==="bottom"?m:"auto",t.style.left=y==="left"?p:"auto",t.style.right=y==="right"?p:"auto"}window.removeEventListener("pointermove",S),window.removeEventListener("pointerup",E)};window.addEventListener("pointermove",S),window.addEventListener("pointerup",E)}),d.addEventListener("click",()=>{a||M(!r)}),e.append(i,d),document.documentElement.appendChild(t),l=document.createElement("div"),l.style.position="fixed",l.style.zIndex="2147483646",l.style.border="2px solid hsl(193, 80%, 50%)",l.style.borderRadius="4px",l.style.boxShadow="0 0 0 999999px hsla(193, 80%, 50%, 0.12), 0 0 24px hsla(193, 80%, 50%, 0.55)",l.style.pointerEvents="none",l.style.display="none",l.style.transition="left 0.15s ease-out, top 0.15s ease-out, width 0.15s ease-out, height 0.15s ease-out",o=document.createElement("div"),o.style.position="fixed",o.style.zIndex="2147483646",o.style.maxWidth="min(520px, calc(100vw - 24px))",o.style.overflow="hidden",o.style.textOverflow="ellipsis",o.style.whiteSpace="nowrap",o.style.background="hsl(193, 90%, 50%)",o.style.color="black",o.style.borderRadius="6px",o.style.boxShadow="0 8px 20px rgba(0, 0, 0, 0.22)",o.style.font='600 12px/1 ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif',o.style.padding="6px 8px",o.style.pointerEvents="none",o.style.display="none",o.style.transition="left 0.15s ease-out, top 0.15s ease-out",document.documentElement.append(l,o)}function M(e){r=e,d&&(d.dataset.active=String(r),d.textContent=r?"Selecting":"Select",d.setAttribute("aria-pressed",String(r))),document.documentElement.style.cursor=r?"crosshair !important":"",r||(u=null,P())}function P(){l&&(l.style.display="none"),o&&(o.style.display="none")}function j(e){return e.composedPath().find(n=>n instanceof Element&&n.id!==H&&!t?.contains(n)&&n.hasAttribute(v))}function w(e){if(!l||!o)return;if(!(e instanceof Element)){P();return}let i=e.getAttribute(v)||"",n=e.getBoundingClientRect();l.style.display="block",l.style.left=`${n.left}px`,l.style.top=`${n.top}px`,l.style.width=`${n.width}px`,l.style.height=`${n.height}px`,o.textContent=i,o.style.display="block",o.style.left=`${Math.max(8,Math.min(n.left,window.innerWidth-532))}px`,o.style.top=`${Math.max(8,n.top-30)}px`}function T(){N||typeof document>"u"||process.env.NODE_ENV==="production"||(console.log("[react-inspector] installing"),N=!0,U(),document.addEventListener("pointermove",e=>{if(!r)return;let i=j(e);i!==u&&(u=i,w(u))},!0),document.addEventListener("scroll",()=>{!r||!(u instanceof Element)||w(u)},!0),window.addEventListener("resize",()=>{if(t){let e=t.getBoundingClientRect(),i=8,n=parseFloat(t.style.top),a=parseFloat(t.style.bottom),s=parseFloat(t.style.left),g=parseFloat(t.style.right);isNaN(n)||(t.style.top=`${Math.max(i,Math.min(n,window.innerHeight-e.height-i))}px`),isNaN(a)||(t.style.bottom=`${Math.max(i,Math.min(a,window.innerHeight-e.height-i))}px`),isNaN(s)||(t.style.left=`${Math.max(i,Math.min(s,window.innerWidth-e.width-i))}px`),isNaN(g)||(t.style.right=`${Math.max(i,Math.min(g,window.innerWidth-e.width-i))}px`)}!r||!(u instanceof Element)||w(u)}),document.addEventListener("keydown",e=>{e.key==="Escape"&&r&&M(!1)},!0),document.addEventListener("click",async e=>{if(!r||e.button!==0)return;let i=j(e);if(!(i instanceof Element))return;let n=J(i.getAttribute(v));e.preventDefault(),e.stopPropagation(),M(!1),await $(n)},!0))}T();0&&(module.exports={installInspector});
44
45
  //# sourceMappingURL=runtime.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/runtime/install.ts"],"sourcesContent":["// @ts-nocheck\r\n\r\nconst ATTR = \"data-source\";\r\nconst INSPECTOR_ROOT_ID = \"__react_inspector_overlay__\";\r\n\r\nconst REGEX = /(.+):(\\d+):(\\d+)$/;\r\n\r\n/**\r\n * @param {string | null} value\r\n */\r\nfunction parseSource(value) {\r\n if (!value) return null;\r\n\r\n const match = value.match(REGEX);\r\n\r\n if (!match) return null;\r\n\r\n return {\r\n file: match[1],\r\n line: Number(match[2]),\r\n column: Number(match[3])\r\n }\r\n}\r\n\r\n/**\r\n * @param {{ file: string; line: number; column: number } | null} source\r\n */\r\nasync function openSource(source) {\r\n if (!source) return;\r\n\r\n await fetch(\"/__open\", {\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json\"\r\n },\r\n body: JSON.stringify(source),\r\n });\r\n}\r\n\r\nlet installed = false\r\nlet selectMode = false;\r\nlet activeTarget = null;\r\nlet root = null;\r\nlet toggleButton = null;\r\nlet highlight = null;\r\nlet label = null;\r\n\r\nfunction createOverlay() {\r\n root = document.createElement(\"div\");\r\n root.id = INSPECTOR_ROOT_ID;\r\n root.style.all = \"initial\";\r\n root.style.position = \"fixed\";\r\n root.style.top = \"16px\";\r\n root.style.right = \"16px\";\r\n root.style.zIndex = \"2147483647\";\r\n root.style.fontFamily = \"ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \\\"Segoe UI\\\", sans-serif\";\r\n root.style.pointerEvents = \"auto\";\r\n\r\n const shadow = root.attachShadow({ mode: \"open\" });\r\n\r\n const style = document.createElement(\"style\");\r\n style.textContent = `\r\n :host {\r\n all: initial;\r\n }\r\n\r\n button {\r\n align-items: center;\r\n background-color: black;\r\n border: 1px solid rgba(255, 255, 255, 0.28);\r\n border-radius: 8px;\r\n color: #f9fafb;\r\n cursor: pointer;\r\n display: inline-flex;\r\n font: 600 13px/1 ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif;\r\n gap: 8px;\r\n min-height: 34px;\r\n padding: 0 12px;\r\n outline: none;\r\n transition: background-color 100ms ease-in-out;\r\n }\r\n \r\n button:hover {\r\n background-color: hsl(0, 0%, 7%);\r\n }\r\n\r\n button::before {\r\n background: currentColor;\r\n content: \"\";\r\n display: block;\r\n height: 14px;\r\n mask: url(\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIGNsYXNzPSJsdWNpZGUgbHVjaWRlLWNyb3NzaGFpci1pY29uIGx1Y2lkZS1jcm9zc2hhaXIiPjxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjEwIi8+PGxpbmUgeDE9IjIyIiB4Mj0iMTgiIHkxPSIxMiIgeTI9IjEyIi8+PGxpbmUgeDE9IjYiIHgyPSIyIiB5MT0iMTIiIHkyPSIxMiIvPjxsaW5lIHgxPSIxMiIgeDI9IjEyIiB5MT0iNiIgeTI9IjIiLz48bGluZSB4MT0iMTIiIHgyPSIxMiIgeTE9IjIyIiB5Mj0iMTgiLz48L3N2Zz4=\") center / contain no-repeat;\r\n -webkit-mask: url(\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIGNsYXNzPSJsdWNpZGUgbHVjaWRlLWNyb3NzaGFpci1pY29uIGx1Y2lkZS1jcm9zc2hhaXIiPjxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjEwIi8+PGxpbmUgeDE9IjIyIiB4Mj0iMTgiIHkxPSIxMiIgeTI9IjEyIi8+PGxpbmUgeDE9IjYiIHgyPSIyIiB5MT0iMTIiIHkyPSIxMiIvPjxsaW5lIHgxPSIxMiIgeDI9IjEyIiB5MT0iNiIgeTI9IjIiLz48bGluZSB4MT0iMTIiIHgyPSIxMiIgeTE9IjIyIiB5Mj0iMTgiLz48L3N2Zz4=\") center / contain no-repeat;\r\n width: 14px;\r\n }\r\n\r\n button[data-active=\"true\"] {\r\n background-color: hsl(0, 0%, 10%);\r\n }\r\n\r\n button[data-active=\"true\"]::before {\r\n background: #fef3c7;\r\n }\r\n `;\r\n\r\n toggleButton = document.createElement(\"button\");\r\n toggleButton.type = \"button\";\r\n toggleButton.textContent = \"Select\";\r\n toggleButton.setAttribute(\"aria-pressed\", \"false\");\r\n toggleButton.addEventListener(\"click\", () => setSelectMode(!selectMode));\r\n\r\n shadow.append(style, toggleButton);\r\n document.documentElement.appendChild(root);\r\n\r\n highlight = document.createElement(\"div\");\r\n highlight.style.position = \"fixed\";\r\n highlight.style.zIndex = \"2147483646\";\r\n highlight.style.border = \"2px solid hsl(193, 80%, 50%)\";\r\n highlight.style.borderRadius = \"4px\";\r\n highlight.style.boxShadow = \"0 0 0 999999px hsla(193, 80%, 50%, 0.12), 0 0 24px hsla(193, 80%, 50%, 0.55)\";\r\n highlight.style.pointerEvents = \"none\";\r\n highlight.style.display = \"none\";\r\n highlight.style.transition = \"left 0.15s ease-out, top 0.15s ease-out, width 0.15s ease-out, height 0.15s ease-out\";\r\n\r\n label = document.createElement(\"div\");\r\n label.style.position = \"fixed\";\r\n label.style.zIndex = \"2147483646\";\r\n label.style.maxWidth = \"min(520px, calc(100vw - 24px))\";\r\n label.style.overflow = \"hidden\";\r\n label.style.textOverflow = \"ellipsis\";\r\n label.style.whiteSpace = \"nowrap\";\r\n label.style.background = \"hsl(193, 90%, 50%)\";\r\n label.style.color = \"black\";\r\n label.style.borderRadius = \"6px\";\r\n label.style.boxShadow = \"0 8px 20px rgba(0, 0, 0, 0.22)\";\r\n label.style.font = \"600 12px/1 ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \\\"Segoe UI\\\", sans-serif\";\r\n label.style.padding = \"6px 8px\";\r\n label.style.pointerEvents = \"none\";\r\n label.style.display = \"none\";\r\n label.style.transition = \"left 0.15s ease-out, top 0.15s ease-out\";\r\n\r\n document.documentElement.append(highlight, label);\r\n}\r\n\r\nfunction setSelectMode(next) {\r\n selectMode = next;\r\n\r\n if (toggleButton) {\r\n toggleButton.dataset.active = String(selectMode);\r\n toggleButton.textContent = selectMode ? \"Selecting\" : \"Select\";\r\n toggleButton.setAttribute(\"aria-pressed\", String(selectMode));\r\n }\r\n\r\n document.documentElement.style.cursor = selectMode ? \"crosshair\" : \"\";\r\n\r\n if (!selectMode) {\r\n activeTarget = null;\r\n hideHighlight();\r\n }\r\n}\r\n\r\nfunction hideHighlight() {\r\n if (highlight) highlight.style.display = \"none\";\r\n if (label) label.style.display = \"none\";\r\n}\r\n\r\nfunction getSourceTarget(e) {\r\n const path = e.composedPath();\r\n\r\n return path.find(\r\n (node) =>\r\n node instanceof Element\r\n && node.id !== INSPECTOR_ROOT_ID\r\n && !root?.contains(node)\r\n && node.hasAttribute(ATTR)\r\n );\r\n}\r\n\r\nfunction renderHighlight(target) {\r\n if (!highlight || !label) return;\r\n if (!(target instanceof Element)) {\r\n hideHighlight();\r\n return;\r\n }\r\n\r\n const source = target.getAttribute(ATTR) || \"\";\r\n const rect = target.getBoundingClientRect();\r\n\r\n highlight.style.display = \"block\";\r\n highlight.style.left = `${rect.left}px`;\r\n highlight.style.top = `${rect.top}px`;\r\n highlight.style.width = `${rect.width}px`;\r\n highlight.style.height = `${rect.height}px`;\r\n\r\n label.textContent = source;\r\n label.style.display = \"block\";\r\n label.style.left = `${Math.max(8, Math.min(rect.left, window.innerWidth - 532))}px`;\r\n label.style.top = `${Math.max(8, rect.top - 30)}px`;\r\n}\r\n\r\nexport function installInspector() {\r\n if (installed || typeof document === \"undefined\") return;\r\n console.log(\"[react-inspector] installing\");\r\n \r\n installed = true\r\n createOverlay();\r\n \r\n document.addEventListener(\"pointermove\", (e) => {\r\n if (!selectMode) return;\r\n\r\n const target = getSourceTarget(e);\r\n\r\n if (target === activeTarget) return;\r\n\r\n activeTarget = target;\r\n renderHighlight(activeTarget);\r\n }, true);\r\n\r\n document.addEventListener(\"scroll\", () => {\r\n if (!selectMode || !(activeTarget instanceof Element)) return;\r\n renderHighlight(activeTarget);\r\n }, true);\r\n\r\n window.addEventListener(\"resize\", () => {\r\n if (!selectMode || !(activeTarget instanceof Element)) return;\r\n renderHighlight(activeTarget);\r\n });\r\n\r\n document.addEventListener(\"keydown\", (e) => {\r\n if (e.key === \"Escape\" && selectMode) setSelectMode(false);\r\n }, true);\r\n\r\n document.addEventListener(\"click\", async (e) => {\r\n if (!selectMode) return;\r\n if (e.button !== 0) return;\r\n\r\n const target = getSourceTarget(e);\r\n\r\n if (!(target instanceof Element)) return;\r\n\r\n const parsed = parseSource(target.getAttribute(ATTR));\r\n\r\n e.preventDefault();\r\n e.stopPropagation();\r\n setSelectMode(false);\r\n\r\n await openSource(parsed);\r\n }, true);\r\n}\r\n\r\ninstallInspector();"],"mappings":"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","names":["install_exports","__export","installInspector","__toCommonJS","ATTR","INSPECTOR_ROOT_ID","REGEX","parseSource","value","match","openSource","source","installed","selectMode","activeTarget","root","toggleButton","highlight","label","createOverlay","shadow","style","setSelectMode","next","hideHighlight","getSourceTarget","node","renderHighlight","target","rect","parsed"]}
1
+ {"version":3,"sources":["../src/runtime/install.ts"],"sourcesContent":["// @ts-nocheck\r\n\r\nconst ATTR = \"data-source\";\r\nconst INSPECTOR_ROOT_ID = \"__react_inspector_overlay__\";\r\n\r\nconst REGEX = /(.+):(\\d+):(\\d+)$/;\r\n\r\n/**\r\n * @param {string | null} value\r\n */\r\nfunction parseSource(value) {\r\n if (!value) return null;\r\n\r\n const match = value.match(REGEX);\r\n\r\n if (!match) return null;\r\n\r\n return {\r\n file: match[1],\r\n line: Number(match[2]),\r\n column: Number(match[3])\r\n }\r\n}\r\n\r\n/**\r\n * @param {{ file: string; line: number; column: number } | null} source\r\n */\r\nasync function openSource(source) {\r\n if (!source) return;\r\n\r\n await fetch(\"/__open\", {\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json\"\r\n },\r\n body: JSON.stringify(source),\r\n });\r\n}\r\n\r\nlet installed = false\r\nlet selectMode = false;\r\nlet activeTarget = null;\r\nlet root = null;\r\nlet toggleButton = null;\r\nlet highlight = null;\r\nlet label = null;\r\n\r\nfunction createOverlay() {\r\n root = document.createElement(\"div\");\r\n root.id = INSPECTOR_ROOT_ID;\r\n root.style.all = \"initial\";\r\n root.style.position = \"fixed\";\r\n root.style.top = \"16px\";\r\n root.style.right = \"16px\";\r\n root.style.zIndex = \"2147483647\";\r\n root.style.fontFamily = \"ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \\\"Segoe UI\\\", sans-serif\";\r\n root.style.pointerEvents = \"auto\";\r\n\r\n const shadow = root.attachShadow({ mode: \"open\" });\r\n\r\n const style = document.createElement(\"style\");\r\n style.textContent = `\r\n :host {\r\n all: initial;\r\n }\r\n\r\n button {\r\n align-items: center;\r\n background-color: black;\r\n border: 1px solid rgba(255, 255, 255, 0.28);\r\n border-radius: 8px;\r\n color: #f9fafb;\r\n cursor: pointer;\r\n display: inline-flex;\r\n font: 600 13px/1 ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif;\r\n gap: 8px;\r\n min-height: 34px;\r\n padding: 0 12px;\r\n outline: none;\r\n transition: background-color 100ms ease-in-out;\r\n touch-action: none;\r\n }\r\n \r\n button:hover {\r\n background-color: hsl(0, 0%, 7%);\r\n }\r\n\r\n button::before {\r\n background: currentColor;\r\n content: \"\";\r\n display: block;\r\n height: 14px;\r\n mask: url(\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIGNsYXNzPSJsdWNpZGUgbHVjaWRlLWNyb3NzaGFpci1pY29uIGx1Y2lkZS1jcm9zc2hhaXIiPjxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjEwIi8+PGxpbmUgeDE9IjIyIiB4Mj0iMTgiIHkxPSIxMiIgeTI9IjEyIi8+PGxpbmUgeDE9IjYiIHgyPSIyIiB5MT0iMTIiIHkyPSIxMiIvPjxsaW5lIHgxPSIxMiIgeDI9IjEyIiB5MT0iNiIgeTI9IjIiLz48bGluZSB4MT0iMTIiIHgyPSIxMiIgeTE9IjIyIiB5Mj0iMTgiLz48L3N2Zz4=\") center / contain no-repeat;\r\n -webkit-mask: url(\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIGNsYXNzPSJsdWNpZGUgbHVjaWRlLWNyb3NzaGFpci1pY29uIGx1Y2lkZS1jcm9zc2hhaXIiPjxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjEwIi8+PGxpbmUgeDE9IjIyIiB4Mj0iMTgiIHkxPSIxMiIgeTI9IjEyIi8+PGxpbmUgeDE9IjYiIHgyPSIyIiB5MT0iMTIiIHkyPSIxMiIvPjxsaW5lIHgxPSIxMiIgeDI9IjEyIiB5MT0iNiIgeTI9IjIiLz48bGluZSB4MT0iMTIiIHgyPSIxMiIgeTE9IjIyIiB5Mj0iMTgiLz48L3N2Zz4=\") center / contain no-repeat;\r\n width: 14px;\r\n }\r\n\r\n button[data-active=\"true\"] {\r\n background-color: hsl(0, 0%, 10%);\r\n }\r\n\r\n button[data-active=\"true\"]::before {\r\n background: #fef3c7;\r\n }\r\n `;\r\n\r\n toggleButton = document.createElement(\"button\");\r\n toggleButton.type = \"button\";\r\n toggleButton.textContent = \"Select\";\r\n toggleButton.setAttribute(\"aria-pressed\", \"false\");\r\n\r\n const savedPos = localStorage.getItem(\"__react_inspector_pos__\");\r\n if (savedPos) {\r\n try {\r\n const pos = JSON.parse(savedPos);\r\n root.style.top = \"auto\";\r\n root.style.bottom = \"auto\";\r\n root.style.left = \"auto\";\r\n root.style.right = \"auto\";\r\n \r\n if (pos.verticalSide === \"bottom\") {\r\n root.style.bottom = pos.verticalValue;\r\n } else {\r\n root.style.top = pos.verticalValue;\r\n }\r\n\r\n if (pos.horizontalSide === \"right\") {\r\n root.style.right = pos.horizontalValue;\r\n } else {\r\n root.style.left = pos.horizontalValue;\r\n }\r\n } catch (e) { }\r\n }\r\n\r\n let isDragging = false;\r\n toggleButton.addEventListener(\"pointerdown\", (e) => {\r\n const startX = e.clientX;\r\n const startY = e.clientY;\r\n const rect = root.getBoundingClientRect();\r\n const initialTop = rect.top;\r\n const initialLeft = rect.left;\r\n isDragging = false;\r\n\r\n const onPointerMove = (moveEvent) => {\r\n const dx = moveEvent.clientX - startX;\r\n const dy = moveEvent.clientY - startY;\r\n if (!isDragging && (Math.abs(dx) > 5 || Math.abs(dy) > 5)) {\r\n isDragging = true;\r\n }\r\n if (isDragging) {\r\n const newTop = initialTop + dy;\r\n const newLeft = initialLeft + dx;\r\n \r\n const padding = 8;\r\n const maxTop = window.innerHeight - rect.height - padding;\r\n const maxLeft = window.innerWidth - rect.width - padding;\r\n\r\n root.style.top = `${Math.max(padding, Math.min(newTop, maxTop))}px`;\r\n root.style.left = `${Math.max(padding, Math.min(newLeft, maxLeft))}px`;\r\n root.style.bottom = \"auto\";\r\n root.style.right = \"auto\";\r\n }\r\n };\r\n\r\n const onPointerUp = () => {\r\n if (isDragging) {\r\n const rect = root.getBoundingClientRect();\r\n const centerX = rect.left + rect.width / 2;\r\n const centerY = rect.top + rect.height / 2;\r\n\r\n const horizontalSide = centerX > window.innerWidth / 2 ? \"right\" : \"left\";\r\n const verticalSide = centerY > window.innerHeight / 2 ? \"bottom\" : \"top\";\r\n\r\n const horizontalValue = horizontalSide === \"right\" \r\n ? `${window.innerWidth - rect.right}px` \r\n : `${rect.left}px`;\r\n \r\n const verticalValue = verticalSide === \"bottom\" \r\n ? `${window.innerHeight - rect.bottom}px` \r\n : `${rect.top}px`;\r\n\r\n localStorage.setItem(\"__react_inspector_pos__\", JSON.stringify({\r\n horizontalSide,\r\n horizontalValue,\r\n verticalSide,\r\n verticalValue\r\n }));\r\n\r\n // Apply the side-based styles immediately\r\n root.style.top = verticalSide === \"top\" ? verticalValue : \"auto\";\r\n root.style.bottom = verticalSide === \"bottom\" ? verticalValue : \"auto\";\r\n root.style.left = horizontalSide === \"left\" ? horizontalValue : \"auto\";\r\n root.style.right = horizontalSide === \"right\" ? horizontalValue : \"auto\";\r\n }\r\n window.removeEventListener(\"pointermove\", onPointerMove);\r\n window.removeEventListener(\"pointerup\", onPointerUp);\r\n };\r\n\r\n window.addEventListener(\"pointermove\", onPointerMove);\r\n window.addEventListener(\"pointerup\", onPointerUp);\r\n });\r\n\r\n toggleButton.addEventListener(\"click\", () => {\r\n if (!isDragging) {\r\n setSelectMode(!selectMode);\r\n }\r\n });\r\n\r\n shadow.append(style, toggleButton);\r\n document.documentElement.appendChild(root);\r\n\r\n highlight = document.createElement(\"div\");\r\n highlight.style.position = \"fixed\";\r\n highlight.style.zIndex = \"2147483646\";\r\n highlight.style.border = \"2px solid hsl(193, 80%, 50%)\";\r\n highlight.style.borderRadius = \"4px\";\r\n highlight.style.boxShadow = \"0 0 0 999999px hsla(193, 80%, 50%, 0.12), 0 0 24px hsla(193, 80%, 50%, 0.55)\";\r\n highlight.style.pointerEvents = \"none\";\r\n highlight.style.display = \"none\";\r\n highlight.style.transition = \"left 0.15s ease-out, top 0.15s ease-out, width 0.15s ease-out, height 0.15s ease-out\";\r\n\r\n label = document.createElement(\"div\");\r\n label.style.position = \"fixed\";\r\n label.style.zIndex = \"2147483646\";\r\n label.style.maxWidth = \"min(520px, calc(100vw - 24px))\";\r\n label.style.overflow = \"hidden\";\r\n label.style.textOverflow = \"ellipsis\";\r\n label.style.whiteSpace = \"nowrap\";\r\n label.style.background = \"hsl(193, 90%, 50%)\";\r\n label.style.color = \"black\";\r\n label.style.borderRadius = \"6px\";\r\n label.style.boxShadow = \"0 8px 20px rgba(0, 0, 0, 0.22)\";\r\n label.style.font = \"600 12px/1 ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \\\"Segoe UI\\\", sans-serif\";\r\n label.style.padding = \"6px 8px\";\r\n label.style.pointerEvents = \"none\";\r\n label.style.display = \"none\";\r\n label.style.transition = \"left 0.15s ease-out, top 0.15s ease-out\";\r\n\r\n document.documentElement.append(highlight, label);\r\n}\r\n\r\nfunction setSelectMode(next) {\r\n selectMode = next;\r\n\r\n if (toggleButton) {\r\n toggleButton.dataset.active = String(selectMode);\r\n toggleButton.textContent = selectMode ? \"Selecting\" : \"Select\";\r\n toggleButton.setAttribute(\"aria-pressed\", String(selectMode));\r\n }\r\n\r\n document.documentElement.style.cursor = selectMode ? \"crosshair !important\" : \"\";\r\n\r\n if (!selectMode) {\r\n activeTarget = null;\r\n hideHighlight();\r\n }\r\n}\r\n\r\nfunction hideHighlight() {\r\n if (highlight) highlight.style.display = \"none\";\r\n if (label) label.style.display = \"none\";\r\n}\r\n\r\nfunction getSourceTarget(e) {\r\n const path = e.composedPath();\r\n\r\n return path.find(\r\n (node) =>\r\n node instanceof Element\r\n && node.id !== INSPECTOR_ROOT_ID\r\n && !root?.contains(node)\r\n && node.hasAttribute(ATTR)\r\n );\r\n}\r\n\r\nfunction renderHighlight(target) {\r\n if (!highlight || !label) return;\r\n if (!(target instanceof Element)) {\r\n hideHighlight();\r\n return;\r\n }\r\n\r\n const source = target.getAttribute(ATTR) || \"\";\r\n const rect = target.getBoundingClientRect();\r\n\r\n highlight.style.display = \"block\";\r\n highlight.style.left = `${rect.left}px`;\r\n highlight.style.top = `${rect.top}px`;\r\n highlight.style.width = `${rect.width}px`;\r\n highlight.style.height = `${rect.height}px`;\r\n\r\n label.textContent = source;\r\n label.style.display = \"block\";\r\n label.style.left = `${Math.max(8, Math.min(rect.left, window.innerWidth - 532))}px`;\r\n label.style.top = `${Math.max(8, rect.top - 30)}px`;\r\n}\r\n\r\nexport function installInspector() {\r\n if (\r\n installed ||\r\n typeof document === \"undefined\" ||\r\n process.env.NODE_ENV === \"production\"\r\n ) return;\r\n console.log(\"[react-inspector] installing\");\r\n \r\n installed = true\r\n createOverlay();\r\n \r\n document.addEventListener(\"pointermove\", (e) => {\r\n if (!selectMode) return;\r\n\r\n const target = getSourceTarget(e);\r\n\r\n if (target === activeTarget) return;\r\n\r\n activeTarget = target;\r\n renderHighlight(activeTarget);\r\n }, true);\r\n\r\n document.addEventListener(\"scroll\", () => {\r\n if (!selectMode || !(activeTarget instanceof Element)) return;\r\n renderHighlight(activeTarget);\r\n }, true);\r\n\r\n window.addEventListener(\"resize\", () => {\r\n if (root) {\r\n const rect = root.getBoundingClientRect();\r\n const padding = 8;\r\n \r\n // Just ensure it stays on screen if the side it's pinned to is pushed\r\n const currentTop = parseFloat(root.style.top);\r\n const currentBottom = parseFloat(root.style.bottom);\r\n const currentLeft = parseFloat(root.style.left);\r\n const currentRight = parseFloat(root.style.right);\r\n\r\n if (!isNaN(currentTop)) root.style.top = `${Math.max(padding, Math.min(currentTop, window.innerHeight - rect.height - padding))}px`;\r\n if (!isNaN(currentBottom)) root.style.bottom = `${Math.max(padding, Math.min(currentBottom, window.innerHeight - rect.height - padding))}px`;\r\n if (!isNaN(currentLeft)) root.style.left = `${Math.max(padding, Math.min(currentLeft, window.innerWidth - rect.width - padding))}px`;\r\n if (!isNaN(currentRight)) root.style.right = `${Math.max(padding, Math.min(currentRight, window.innerWidth - rect.width - padding))}px`;\r\n }\r\n if (!selectMode || !(activeTarget instanceof Element)) return;\r\n renderHighlight(activeTarget);\r\n });\r\n\r\n document.addEventListener(\"keydown\", (e) => {\r\n if (e.key === \"Escape\" && selectMode) setSelectMode(false);\r\n }, true);\r\n\r\n document.addEventListener(\"click\", async (e) => {\r\n if (!selectMode) return;\r\n if (e.button !== 0) return;\r\n\r\n const target = getSourceTarget(e);\r\n\r\n if (!(target instanceof Element)) return;\r\n\r\n const parsed = parseSource(target.getAttribute(ATTR));\r\n\r\n e.preventDefault();\r\n e.stopPropagation();\r\n setSelectMode(false);\r\n\r\n await openSource(parsed);\r\n }, true);\r\n}\r\n\r\ninstallInspector();"],"mappings":"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","names":["install_exports","__export","installInspector","__toCommonJS","ATTR","INSPECTOR_ROOT_ID","REGEX","parseSource","value","match","openSource","source","installed","selectMode","activeTarget","root","toggleButton","highlight","label","createOverlay","shadow","style","savedPos","pos","isDragging","e","startX","startY","rect","initialTop","initialLeft","onPointerMove","moveEvent","dx","dy","newTop","newLeft","padding","maxTop","maxLeft","onPointerUp","centerX","centerY","horizontalSide","verticalSide","horizontalValue","verticalValue","setSelectMode","next","hideHighlight","getSourceTarget","node","renderHighlight","target","currentTop","currentBottom","currentLeft","currentRight","parsed"]}
package/dist/runtime.js CHANGED
@@ -1,4 +1,4 @@
1
- var I="data-source",y="__react_inspector_overlay__",g=/(.+):(\d+):(\d+)$/;function x(e){if(!e)return null;let n=e.match(g);return n?{file:n[1],line:Number(n[2]),column:Number(n[3])}:null}async function b(e){e&&await fetch("/__open",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)})}var u=!1,o=!1,r=null,l=null,a=null,i=null,t=null;function f(){l=document.createElement("div"),l.id=y,l.style.all="initial",l.style.position="fixed",l.style.top="16px",l.style.right="16px",l.style.zIndex="2147483647",l.style.fontFamily='ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif',l.style.pointerEvents="auto";let e=l.attachShadow({mode:"open"}),n=document.createElement("style");n.textContent=`
1
+ var M="data-source",j="__react_inspector_overlay__",k=/(.+):(\d+):(\d+)$/;function L(e){if(!e)return null;let i=e.match(k);return i?{file:i[1],line:Number(i[2]),column:Number(i[3])}:null}async function R(e){e&&await fetch("/__open",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)})}var E=!1,a=!1,u=null,t=null,c=null,s=null,n=null;function W(){t=document.createElement("div"),t.id=j,t.style.all="initial",t.style.position="fixed",t.style.top="16px",t.style.right="16px",t.style.zIndex="2147483647",t.style.fontFamily='ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif',t.style.pointerEvents="auto";let e=t.attachShadow({mode:"open"}),i=document.createElement("style");i.textContent=`
2
2
  :host {
3
3
  all: initial;
4
4
  }
@@ -17,6 +17,7 @@ var I="data-source",y="__react_inspector_overlay__",g=/(.+):(\d+):(\d+)$/;functi
17
17
  padding: 0 12px;
18
18
  outline: none;
19
19
  transition: background-color 100ms ease-in-out;
20
+ touch-action: none;
20
21
  }
21
22
 
22
23
  button:hover {
@@ -40,5 +41,5 @@ var I="data-source",y="__react_inspector_overlay__",g=/(.+):(\d+):(\d+)$/;functi
40
41
  button[data-active="true"]::before {
41
42
  background: #fef3c7;
42
43
  }
43
- `,a=document.createElement("button"),a.type="button",a.textContent="Select",a.setAttribute("aria-pressed","false"),a.addEventListener("click",()=>d(!o)),e.append(n,a),document.documentElement.appendChild(l),i=document.createElement("div"),i.style.position="fixed",i.style.zIndex="2147483646",i.style.border="2px solid hsl(193, 80%, 50%)",i.style.borderRadius="4px",i.style.boxShadow="0 0 0 999999px hsla(193, 80%, 50%, 0.12), 0 0 24px hsla(193, 80%, 50%, 0.55)",i.style.pointerEvents="none",i.style.display="none",i.style.transition="left 0.15s ease-out, top 0.15s ease-out, width 0.15s ease-out, height 0.15s ease-out",t=document.createElement("div"),t.style.position="fixed",t.style.zIndex="2147483646",t.style.maxWidth="min(520px, calc(100vw - 24px))",t.style.overflow="hidden",t.style.textOverflow="ellipsis",t.style.whiteSpace="nowrap",t.style.background="hsl(193, 90%, 50%)",t.style.color="black",t.style.borderRadius="6px",t.style.boxShadow="0 8px 20px rgba(0, 0, 0, 0.22)",t.style.font='600 12px/1 ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif',t.style.padding="6px 8px",t.style.pointerEvents="none",t.style.display="none",t.style.transition="left 0.15s ease-out, top 0.15s ease-out",document.documentElement.append(i,t)}function d(e){o=e,a&&(a.dataset.active=String(o),a.textContent=o?"Selecting":"Select",a.setAttribute("aria-pressed",String(o))),document.documentElement.style.cursor=o?"crosshair":"",o||(r=null,m())}function m(){i&&(i.style.display="none"),t&&(t.style.display="none")}function p(e){return e.composedPath().find(s=>s instanceof Element&&s.id!==y&&!l?.contains(s)&&s.hasAttribute(I))}function c(e){if(!i||!t)return;if(!(e instanceof Element)){m();return}let n=e.getAttribute(I)||"",s=e.getBoundingClientRect();i.style.display="block",i.style.left=`${s.left}px`,i.style.top=`${s.top}px`,i.style.width=`${s.width}px`,i.style.height=`${s.height}px`,t.textContent=n,t.style.display="block",t.style.left=`${Math.max(8,Math.min(s.left,window.innerWidth-532))}px`,t.style.top=`${Math.max(8,s.top-30)}px`}function h(){u||typeof document>"u"||(console.log("[react-inspector] installing"),u=!0,f(),document.addEventListener("pointermove",e=>{if(!o)return;let n=p(e);n!==r&&(r=n,c(r))},!0),document.addEventListener("scroll",()=>{!o||!(r instanceof Element)||c(r)},!0),window.addEventListener("resize",()=>{!o||!(r instanceof Element)||c(r)}),document.addEventListener("keydown",e=>{e.key==="Escape"&&o&&d(!1)},!0),document.addEventListener("click",async e=>{if(!o||e.button!==0)return;let n=p(e);if(!(n instanceof Element))return;let s=x(n.getAttribute(I));e.preventDefault(),e.stopPropagation(),d(!1),await b(s)},!0))}h();export{h as installInspector};
44
+ `,c=document.createElement("button"),c.type="button",c.textContent="Select",c.setAttribute("aria-pressed","false");let o=localStorage.getItem("__react_inspector_pos__");if(o)try{let l=JSON.parse(o);t.style.top="auto",t.style.bottom="auto",t.style.left="auto",t.style.right="auto",l.verticalSide==="bottom"?t.style.bottom=l.verticalValue:t.style.top=l.verticalValue,l.horizontalSide==="right"?t.style.right=l.horizontalValue:t.style.left=l.horizontalValue}catch{}let d=!1;c.addEventListener("pointerdown",l=>{let g=l.clientX,P=l.clientY,h=t.getBoundingClientRect(),T=h.top,z=h.left;d=!1;let v=r=>{let f=r.clientX-g,x=r.clientY-P;if(!d&&(Math.abs(f)>5||Math.abs(x)>5)&&(d=!0),d){let y=T+x,I=z+f,p=8,m=window.innerHeight-h.height-p,B=window.innerWidth-h.width-p;t.style.top=`${Math.max(p,Math.min(y,m))}px`,t.style.left=`${Math.max(p,Math.min(I,B))}px`,t.style.bottom="auto",t.style.right="auto"}},S=()=>{if(d){let r=t.getBoundingClientRect(),f=r.left+r.width/2,x=r.top+r.height/2,y=f>window.innerWidth/2?"right":"left",I=x>window.innerHeight/2?"bottom":"top",p=y==="right"?`${window.innerWidth-r.right}px`:`${r.left}px`,m=I==="bottom"?`${window.innerHeight-r.bottom}px`:`${r.top}px`;localStorage.setItem("__react_inspector_pos__",JSON.stringify({horizontalSide:y,horizontalValue:p,verticalSide:I,verticalValue:m})),t.style.top=I==="top"?m:"auto",t.style.bottom=I==="bottom"?m:"auto",t.style.left=y==="left"?p:"auto",t.style.right=y==="right"?p:"auto"}window.removeEventListener("pointermove",v),window.removeEventListener("pointerup",S)};window.addEventListener("pointermove",v),window.addEventListener("pointerup",S)}),c.addEventListener("click",()=>{d||w(!a)}),e.append(i,c),document.documentElement.appendChild(t),s=document.createElement("div"),s.style.position="fixed",s.style.zIndex="2147483646",s.style.border="2px solid hsl(193, 80%, 50%)",s.style.borderRadius="4px",s.style.boxShadow="0 0 0 999999px hsla(193, 80%, 50%, 0.12), 0 0 24px hsla(193, 80%, 50%, 0.55)",s.style.pointerEvents="none",s.style.display="none",s.style.transition="left 0.15s ease-out, top 0.15s ease-out, width 0.15s ease-out, height 0.15s ease-out",n=document.createElement("div"),n.style.position="fixed",n.style.zIndex="2147483646",n.style.maxWidth="min(520px, calc(100vw - 24px))",n.style.overflow="hidden",n.style.textOverflow="ellipsis",n.style.whiteSpace="nowrap",n.style.background="hsl(193, 90%, 50%)",n.style.color="black",n.style.borderRadius="6px",n.style.boxShadow="0 8px 20px rgba(0, 0, 0, 0.22)",n.style.font='600 12px/1 ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif',n.style.padding="6px 8px",n.style.pointerEvents="none",n.style.display="none",n.style.transition="left 0.15s ease-out, top 0.15s ease-out",document.documentElement.append(s,n)}function w(e){a=e,c&&(c.dataset.active=String(a),c.textContent=a?"Selecting":"Select",c.setAttribute("aria-pressed",String(a))),document.documentElement.style.cursor=a?"crosshair !important":"",a||(u=null,H())}function H(){s&&(s.style.display="none"),n&&(n.style.display="none")}function N(e){return e.composedPath().find(o=>o instanceof Element&&o.id!==j&&!t?.contains(o)&&o.hasAttribute(M))}function b(e){if(!s||!n)return;if(!(e instanceof Element)){H();return}let i=e.getAttribute(M)||"",o=e.getBoundingClientRect();s.style.display="block",s.style.left=`${o.left}px`,s.style.top=`${o.top}px`,s.style.width=`${o.width}px`,s.style.height=`${o.height}px`,n.textContent=i,n.style.display="block",n.style.left=`${Math.max(8,Math.min(o.left,window.innerWidth-532))}px`,n.style.top=`${Math.max(8,o.top-30)}px`}function _(){E||typeof document>"u"||process.env.NODE_ENV==="production"||(console.log("[react-inspector] installing"),E=!0,W(),document.addEventListener("pointermove",e=>{if(!a)return;let i=N(e);i!==u&&(u=i,b(u))},!0),document.addEventListener("scroll",()=>{!a||!(u instanceof Element)||b(u)},!0),window.addEventListener("resize",()=>{if(t){let e=t.getBoundingClientRect(),i=8,o=parseFloat(t.style.top),d=parseFloat(t.style.bottom),l=parseFloat(t.style.left),g=parseFloat(t.style.right);isNaN(o)||(t.style.top=`${Math.max(i,Math.min(o,window.innerHeight-e.height-i))}px`),isNaN(d)||(t.style.bottom=`${Math.max(i,Math.min(d,window.innerHeight-e.height-i))}px`),isNaN(l)||(t.style.left=`${Math.max(i,Math.min(l,window.innerWidth-e.width-i))}px`),isNaN(g)||(t.style.right=`${Math.max(i,Math.min(g,window.innerWidth-e.width-i))}px`)}!a||!(u instanceof Element)||b(u)}),document.addEventListener("keydown",e=>{e.key==="Escape"&&a&&w(!1)},!0),document.addEventListener("click",async e=>{if(!a||e.button!==0)return;let i=N(e);if(!(i instanceof Element))return;let o=L(i.getAttribute(M));e.preventDefault(),e.stopPropagation(),w(!1),await R(o)},!0))}_();export{_ as installInspector};
44
45
  //# sourceMappingURL=runtime.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/runtime/install.ts"],"sourcesContent":["// @ts-nocheck\r\n\r\nconst ATTR = \"data-source\";\r\nconst INSPECTOR_ROOT_ID = \"__react_inspector_overlay__\";\r\n\r\nconst REGEX = /(.+):(\\d+):(\\d+)$/;\r\n\r\n/**\r\n * @param {string | null} value\r\n */\r\nfunction parseSource(value) {\r\n if (!value) return null;\r\n\r\n const match = value.match(REGEX);\r\n\r\n if (!match) return null;\r\n\r\n return {\r\n file: match[1],\r\n line: Number(match[2]),\r\n column: Number(match[3])\r\n }\r\n}\r\n\r\n/**\r\n * @param {{ file: string; line: number; column: number } | null} source\r\n */\r\nasync function openSource(source) {\r\n if (!source) return;\r\n\r\n await fetch(\"/__open\", {\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json\"\r\n },\r\n body: JSON.stringify(source),\r\n });\r\n}\r\n\r\nlet installed = false\r\nlet selectMode = false;\r\nlet activeTarget = null;\r\nlet root = null;\r\nlet toggleButton = null;\r\nlet highlight = null;\r\nlet label = null;\r\n\r\nfunction createOverlay() {\r\n root = document.createElement(\"div\");\r\n root.id = INSPECTOR_ROOT_ID;\r\n root.style.all = \"initial\";\r\n root.style.position = \"fixed\";\r\n root.style.top = \"16px\";\r\n root.style.right = \"16px\";\r\n root.style.zIndex = \"2147483647\";\r\n root.style.fontFamily = \"ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \\\"Segoe UI\\\", sans-serif\";\r\n root.style.pointerEvents = \"auto\";\r\n\r\n const shadow = root.attachShadow({ mode: \"open\" });\r\n\r\n const style = document.createElement(\"style\");\r\n style.textContent = `\r\n :host {\r\n all: initial;\r\n }\r\n\r\n button {\r\n align-items: center;\r\n background-color: black;\r\n border: 1px solid rgba(255, 255, 255, 0.28);\r\n border-radius: 8px;\r\n color: #f9fafb;\r\n cursor: pointer;\r\n display: inline-flex;\r\n font: 600 13px/1 ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif;\r\n gap: 8px;\r\n min-height: 34px;\r\n padding: 0 12px;\r\n outline: none;\r\n transition: background-color 100ms ease-in-out;\r\n }\r\n \r\n button:hover {\r\n background-color: hsl(0, 0%, 7%);\r\n }\r\n\r\n button::before {\r\n background: currentColor;\r\n content: \"\";\r\n display: block;\r\n height: 14px;\r\n mask: url(\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIGNsYXNzPSJsdWNpZGUgbHVjaWRlLWNyb3NzaGFpci1pY29uIGx1Y2lkZS1jcm9zc2hhaXIiPjxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjEwIi8+PGxpbmUgeDE9IjIyIiB4Mj0iMTgiIHkxPSIxMiIgeTI9IjEyIi8+PGxpbmUgeDE9IjYiIHgyPSIyIiB5MT0iMTIiIHkyPSIxMiIvPjxsaW5lIHgxPSIxMiIgeDI9IjEyIiB5MT0iNiIgeTI9IjIiLz48bGluZSB4MT0iMTIiIHgyPSIxMiIgeTE9IjIyIiB5Mj0iMTgiLz48L3N2Zz4=\") center / contain no-repeat;\r\n -webkit-mask: url(\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIGNsYXNzPSJsdWNpZGUgbHVjaWRlLWNyb3NzaGFpci1pY29uIGx1Y2lkZS1jcm9zc2hhaXIiPjxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjEwIi8+PGxpbmUgeDE9IjIyIiB4Mj0iMTgiIHkxPSIxMiIgeTI9IjEyIi8+PGxpbmUgeDE9IjYiIHgyPSIyIiB5MT0iMTIiIHkyPSIxMiIvPjxsaW5lIHgxPSIxMiIgeDI9IjEyIiB5MT0iNiIgeTI9IjIiLz48bGluZSB4MT0iMTIiIHgyPSIxMiIgeTE9IjIyIiB5Mj0iMTgiLz48L3N2Zz4=\") center / contain no-repeat;\r\n width: 14px;\r\n }\r\n\r\n button[data-active=\"true\"] {\r\n background-color: hsl(0, 0%, 10%);\r\n }\r\n\r\n button[data-active=\"true\"]::before {\r\n background: #fef3c7;\r\n }\r\n `;\r\n\r\n toggleButton = document.createElement(\"button\");\r\n toggleButton.type = \"button\";\r\n toggleButton.textContent = \"Select\";\r\n toggleButton.setAttribute(\"aria-pressed\", \"false\");\r\n toggleButton.addEventListener(\"click\", () => setSelectMode(!selectMode));\r\n\r\n shadow.append(style, toggleButton);\r\n document.documentElement.appendChild(root);\r\n\r\n highlight = document.createElement(\"div\");\r\n highlight.style.position = \"fixed\";\r\n highlight.style.zIndex = \"2147483646\";\r\n highlight.style.border = \"2px solid hsl(193, 80%, 50%)\";\r\n highlight.style.borderRadius = \"4px\";\r\n highlight.style.boxShadow = \"0 0 0 999999px hsla(193, 80%, 50%, 0.12), 0 0 24px hsla(193, 80%, 50%, 0.55)\";\r\n highlight.style.pointerEvents = \"none\";\r\n highlight.style.display = \"none\";\r\n highlight.style.transition = \"left 0.15s ease-out, top 0.15s ease-out, width 0.15s ease-out, height 0.15s ease-out\";\r\n\r\n label = document.createElement(\"div\");\r\n label.style.position = \"fixed\";\r\n label.style.zIndex = \"2147483646\";\r\n label.style.maxWidth = \"min(520px, calc(100vw - 24px))\";\r\n label.style.overflow = \"hidden\";\r\n label.style.textOverflow = \"ellipsis\";\r\n label.style.whiteSpace = \"nowrap\";\r\n label.style.background = \"hsl(193, 90%, 50%)\";\r\n label.style.color = \"black\";\r\n label.style.borderRadius = \"6px\";\r\n label.style.boxShadow = \"0 8px 20px rgba(0, 0, 0, 0.22)\";\r\n label.style.font = \"600 12px/1 ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \\\"Segoe UI\\\", sans-serif\";\r\n label.style.padding = \"6px 8px\";\r\n label.style.pointerEvents = \"none\";\r\n label.style.display = \"none\";\r\n label.style.transition = \"left 0.15s ease-out, top 0.15s ease-out\";\r\n\r\n document.documentElement.append(highlight, label);\r\n}\r\n\r\nfunction setSelectMode(next) {\r\n selectMode = next;\r\n\r\n if (toggleButton) {\r\n toggleButton.dataset.active = String(selectMode);\r\n toggleButton.textContent = selectMode ? \"Selecting\" : \"Select\";\r\n toggleButton.setAttribute(\"aria-pressed\", String(selectMode));\r\n }\r\n\r\n document.documentElement.style.cursor = selectMode ? \"crosshair\" : \"\";\r\n\r\n if (!selectMode) {\r\n activeTarget = null;\r\n hideHighlight();\r\n }\r\n}\r\n\r\nfunction hideHighlight() {\r\n if (highlight) highlight.style.display = \"none\";\r\n if (label) label.style.display = \"none\";\r\n}\r\n\r\nfunction getSourceTarget(e) {\r\n const path = e.composedPath();\r\n\r\n return path.find(\r\n (node) =>\r\n node instanceof Element\r\n && node.id !== INSPECTOR_ROOT_ID\r\n && !root?.contains(node)\r\n && node.hasAttribute(ATTR)\r\n );\r\n}\r\n\r\nfunction renderHighlight(target) {\r\n if (!highlight || !label) return;\r\n if (!(target instanceof Element)) {\r\n hideHighlight();\r\n return;\r\n }\r\n\r\n const source = target.getAttribute(ATTR) || \"\";\r\n const rect = target.getBoundingClientRect();\r\n\r\n highlight.style.display = \"block\";\r\n highlight.style.left = `${rect.left}px`;\r\n highlight.style.top = `${rect.top}px`;\r\n highlight.style.width = `${rect.width}px`;\r\n highlight.style.height = `${rect.height}px`;\r\n\r\n label.textContent = source;\r\n label.style.display = \"block\";\r\n label.style.left = `${Math.max(8, Math.min(rect.left, window.innerWidth - 532))}px`;\r\n label.style.top = `${Math.max(8, rect.top - 30)}px`;\r\n}\r\n\r\nexport function installInspector() {\r\n if (installed || typeof document === \"undefined\") return;\r\n console.log(\"[react-inspector] installing\");\r\n \r\n installed = true\r\n createOverlay();\r\n \r\n document.addEventListener(\"pointermove\", (e) => {\r\n if (!selectMode) return;\r\n\r\n const target = getSourceTarget(e);\r\n\r\n if (target === activeTarget) return;\r\n\r\n activeTarget = target;\r\n renderHighlight(activeTarget);\r\n }, true);\r\n\r\n document.addEventListener(\"scroll\", () => {\r\n if (!selectMode || !(activeTarget instanceof Element)) return;\r\n renderHighlight(activeTarget);\r\n }, true);\r\n\r\n window.addEventListener(\"resize\", () => {\r\n if (!selectMode || !(activeTarget instanceof Element)) return;\r\n renderHighlight(activeTarget);\r\n });\r\n\r\n document.addEventListener(\"keydown\", (e) => {\r\n if (e.key === \"Escape\" && selectMode) setSelectMode(false);\r\n }, true);\r\n\r\n document.addEventListener(\"click\", async (e) => {\r\n if (!selectMode) return;\r\n if (e.button !== 0) return;\r\n\r\n const target = getSourceTarget(e);\r\n\r\n if (!(target instanceof Element)) return;\r\n\r\n const parsed = parseSource(target.getAttribute(ATTR));\r\n\r\n e.preventDefault();\r\n e.stopPropagation();\r\n setSelectMode(false);\r\n\r\n await openSource(parsed);\r\n }, true);\r\n}\r\n\r\ninstallInspector();"],"mappings":"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","names":["ATTR","INSPECTOR_ROOT_ID","REGEX","parseSource","value","match","openSource","source","installed","selectMode","activeTarget","root","toggleButton","highlight","label","createOverlay","shadow","style","setSelectMode","next","hideHighlight","getSourceTarget","node","renderHighlight","target","rect","installInspector","parsed"]}
1
+ {"version":3,"sources":["../src/runtime/install.ts"],"sourcesContent":["// @ts-nocheck\r\n\r\nconst ATTR = \"data-source\";\r\nconst INSPECTOR_ROOT_ID = \"__react_inspector_overlay__\";\r\n\r\nconst REGEX = /(.+):(\\d+):(\\d+)$/;\r\n\r\n/**\r\n * @param {string | null} value\r\n */\r\nfunction parseSource(value) {\r\n if (!value) return null;\r\n\r\n const match = value.match(REGEX);\r\n\r\n if (!match) return null;\r\n\r\n return {\r\n file: match[1],\r\n line: Number(match[2]),\r\n column: Number(match[3])\r\n }\r\n}\r\n\r\n/**\r\n * @param {{ file: string; line: number; column: number } | null} source\r\n */\r\nasync function openSource(source) {\r\n if (!source) return;\r\n\r\n await fetch(\"/__open\", {\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json\"\r\n },\r\n body: JSON.stringify(source),\r\n });\r\n}\r\n\r\nlet installed = false\r\nlet selectMode = false;\r\nlet activeTarget = null;\r\nlet root = null;\r\nlet toggleButton = null;\r\nlet highlight = null;\r\nlet label = null;\r\n\r\nfunction createOverlay() {\r\n root = document.createElement(\"div\");\r\n root.id = INSPECTOR_ROOT_ID;\r\n root.style.all = \"initial\";\r\n root.style.position = \"fixed\";\r\n root.style.top = \"16px\";\r\n root.style.right = \"16px\";\r\n root.style.zIndex = \"2147483647\";\r\n root.style.fontFamily = \"ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \\\"Segoe UI\\\", sans-serif\";\r\n root.style.pointerEvents = \"auto\";\r\n\r\n const shadow = root.attachShadow({ mode: \"open\" });\r\n\r\n const style = document.createElement(\"style\");\r\n style.textContent = `\r\n :host {\r\n all: initial;\r\n }\r\n\r\n button {\r\n align-items: center;\r\n background-color: black;\r\n border: 1px solid rgba(255, 255, 255, 0.28);\r\n border-radius: 8px;\r\n color: #f9fafb;\r\n cursor: pointer;\r\n display: inline-flex;\r\n font: 600 13px/1 ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif;\r\n gap: 8px;\r\n min-height: 34px;\r\n padding: 0 12px;\r\n outline: none;\r\n transition: background-color 100ms ease-in-out;\r\n touch-action: none;\r\n }\r\n \r\n button:hover {\r\n background-color: hsl(0, 0%, 7%);\r\n }\r\n\r\n button::before {\r\n background: currentColor;\r\n content: \"\";\r\n display: block;\r\n height: 14px;\r\n mask: url(\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIGNsYXNzPSJsdWNpZGUgbHVjaWRlLWNyb3NzaGFpci1pY29uIGx1Y2lkZS1jcm9zc2hhaXIiPjxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjEwIi8+PGxpbmUgeDE9IjIyIiB4Mj0iMTgiIHkxPSIxMiIgeTI9IjEyIi8+PGxpbmUgeDE9IjYiIHgyPSIyIiB5MT0iMTIiIHkyPSIxMiIvPjxsaW5lIHgxPSIxMiIgeDI9IjEyIiB5MT0iNiIgeTI9IjIiLz48bGluZSB4MT0iMTIiIHgyPSIxMiIgeTE9IjIyIiB5Mj0iMTgiLz48L3N2Zz4=\") center / contain no-repeat;\r\n -webkit-mask: url(\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIGNsYXNzPSJsdWNpZGUgbHVjaWRlLWNyb3NzaGFpci1pY29uIGx1Y2lkZS1jcm9zc2hhaXIiPjxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjEwIi8+PGxpbmUgeDE9IjIyIiB4Mj0iMTgiIHkxPSIxMiIgeTI9IjEyIi8+PGxpbmUgeDE9IjYiIHgyPSIyIiB5MT0iMTIiIHkyPSIxMiIvPjxsaW5lIHgxPSIxMiIgeDI9IjEyIiB5MT0iNiIgeTI9IjIiLz48bGluZSB4MT0iMTIiIHgyPSIxMiIgeTE9IjIyIiB5Mj0iMTgiLz48L3N2Zz4=\") center / contain no-repeat;\r\n width: 14px;\r\n }\r\n\r\n button[data-active=\"true\"] {\r\n background-color: hsl(0, 0%, 10%);\r\n }\r\n\r\n button[data-active=\"true\"]::before {\r\n background: #fef3c7;\r\n }\r\n `;\r\n\r\n toggleButton = document.createElement(\"button\");\r\n toggleButton.type = \"button\";\r\n toggleButton.textContent = \"Select\";\r\n toggleButton.setAttribute(\"aria-pressed\", \"false\");\r\n\r\n const savedPos = localStorage.getItem(\"__react_inspector_pos__\");\r\n if (savedPos) {\r\n try {\r\n const pos = JSON.parse(savedPos);\r\n root.style.top = \"auto\";\r\n root.style.bottom = \"auto\";\r\n root.style.left = \"auto\";\r\n root.style.right = \"auto\";\r\n \r\n if (pos.verticalSide === \"bottom\") {\r\n root.style.bottom = pos.verticalValue;\r\n } else {\r\n root.style.top = pos.verticalValue;\r\n }\r\n\r\n if (pos.horizontalSide === \"right\") {\r\n root.style.right = pos.horizontalValue;\r\n } else {\r\n root.style.left = pos.horizontalValue;\r\n }\r\n } catch (e) { }\r\n }\r\n\r\n let isDragging = false;\r\n toggleButton.addEventListener(\"pointerdown\", (e) => {\r\n const startX = e.clientX;\r\n const startY = e.clientY;\r\n const rect = root.getBoundingClientRect();\r\n const initialTop = rect.top;\r\n const initialLeft = rect.left;\r\n isDragging = false;\r\n\r\n const onPointerMove = (moveEvent) => {\r\n const dx = moveEvent.clientX - startX;\r\n const dy = moveEvent.clientY - startY;\r\n if (!isDragging && (Math.abs(dx) > 5 || Math.abs(dy) > 5)) {\r\n isDragging = true;\r\n }\r\n if (isDragging) {\r\n const newTop = initialTop + dy;\r\n const newLeft = initialLeft + dx;\r\n \r\n const padding = 8;\r\n const maxTop = window.innerHeight - rect.height - padding;\r\n const maxLeft = window.innerWidth - rect.width - padding;\r\n\r\n root.style.top = `${Math.max(padding, Math.min(newTop, maxTop))}px`;\r\n root.style.left = `${Math.max(padding, Math.min(newLeft, maxLeft))}px`;\r\n root.style.bottom = \"auto\";\r\n root.style.right = \"auto\";\r\n }\r\n };\r\n\r\n const onPointerUp = () => {\r\n if (isDragging) {\r\n const rect = root.getBoundingClientRect();\r\n const centerX = rect.left + rect.width / 2;\r\n const centerY = rect.top + rect.height / 2;\r\n\r\n const horizontalSide = centerX > window.innerWidth / 2 ? \"right\" : \"left\";\r\n const verticalSide = centerY > window.innerHeight / 2 ? \"bottom\" : \"top\";\r\n\r\n const horizontalValue = horizontalSide === \"right\" \r\n ? `${window.innerWidth - rect.right}px` \r\n : `${rect.left}px`;\r\n \r\n const verticalValue = verticalSide === \"bottom\" \r\n ? `${window.innerHeight - rect.bottom}px` \r\n : `${rect.top}px`;\r\n\r\n localStorage.setItem(\"__react_inspector_pos__\", JSON.stringify({\r\n horizontalSide,\r\n horizontalValue,\r\n verticalSide,\r\n verticalValue\r\n }));\r\n\r\n // Apply the side-based styles immediately\r\n root.style.top = verticalSide === \"top\" ? verticalValue : \"auto\";\r\n root.style.bottom = verticalSide === \"bottom\" ? verticalValue : \"auto\";\r\n root.style.left = horizontalSide === \"left\" ? horizontalValue : \"auto\";\r\n root.style.right = horizontalSide === \"right\" ? horizontalValue : \"auto\";\r\n }\r\n window.removeEventListener(\"pointermove\", onPointerMove);\r\n window.removeEventListener(\"pointerup\", onPointerUp);\r\n };\r\n\r\n window.addEventListener(\"pointermove\", onPointerMove);\r\n window.addEventListener(\"pointerup\", onPointerUp);\r\n });\r\n\r\n toggleButton.addEventListener(\"click\", () => {\r\n if (!isDragging) {\r\n setSelectMode(!selectMode);\r\n }\r\n });\r\n\r\n shadow.append(style, toggleButton);\r\n document.documentElement.appendChild(root);\r\n\r\n highlight = document.createElement(\"div\");\r\n highlight.style.position = \"fixed\";\r\n highlight.style.zIndex = \"2147483646\";\r\n highlight.style.border = \"2px solid hsl(193, 80%, 50%)\";\r\n highlight.style.borderRadius = \"4px\";\r\n highlight.style.boxShadow = \"0 0 0 999999px hsla(193, 80%, 50%, 0.12), 0 0 24px hsla(193, 80%, 50%, 0.55)\";\r\n highlight.style.pointerEvents = \"none\";\r\n highlight.style.display = \"none\";\r\n highlight.style.transition = \"left 0.15s ease-out, top 0.15s ease-out, width 0.15s ease-out, height 0.15s ease-out\";\r\n\r\n label = document.createElement(\"div\");\r\n label.style.position = \"fixed\";\r\n label.style.zIndex = \"2147483646\";\r\n label.style.maxWidth = \"min(520px, calc(100vw - 24px))\";\r\n label.style.overflow = \"hidden\";\r\n label.style.textOverflow = \"ellipsis\";\r\n label.style.whiteSpace = \"nowrap\";\r\n label.style.background = \"hsl(193, 90%, 50%)\";\r\n label.style.color = \"black\";\r\n label.style.borderRadius = \"6px\";\r\n label.style.boxShadow = \"0 8px 20px rgba(0, 0, 0, 0.22)\";\r\n label.style.font = \"600 12px/1 ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \\\"Segoe UI\\\", sans-serif\";\r\n label.style.padding = \"6px 8px\";\r\n label.style.pointerEvents = \"none\";\r\n label.style.display = \"none\";\r\n label.style.transition = \"left 0.15s ease-out, top 0.15s ease-out\";\r\n\r\n document.documentElement.append(highlight, label);\r\n}\r\n\r\nfunction setSelectMode(next) {\r\n selectMode = next;\r\n\r\n if (toggleButton) {\r\n toggleButton.dataset.active = String(selectMode);\r\n toggleButton.textContent = selectMode ? \"Selecting\" : \"Select\";\r\n toggleButton.setAttribute(\"aria-pressed\", String(selectMode));\r\n }\r\n\r\n document.documentElement.style.cursor = selectMode ? \"crosshair !important\" : \"\";\r\n\r\n if (!selectMode) {\r\n activeTarget = null;\r\n hideHighlight();\r\n }\r\n}\r\n\r\nfunction hideHighlight() {\r\n if (highlight) highlight.style.display = \"none\";\r\n if (label) label.style.display = \"none\";\r\n}\r\n\r\nfunction getSourceTarget(e) {\r\n const path = e.composedPath();\r\n\r\n return path.find(\r\n (node) =>\r\n node instanceof Element\r\n && node.id !== INSPECTOR_ROOT_ID\r\n && !root?.contains(node)\r\n && node.hasAttribute(ATTR)\r\n );\r\n}\r\n\r\nfunction renderHighlight(target) {\r\n if (!highlight || !label) return;\r\n if (!(target instanceof Element)) {\r\n hideHighlight();\r\n return;\r\n }\r\n\r\n const source = target.getAttribute(ATTR) || \"\";\r\n const rect = target.getBoundingClientRect();\r\n\r\n highlight.style.display = \"block\";\r\n highlight.style.left = `${rect.left}px`;\r\n highlight.style.top = `${rect.top}px`;\r\n highlight.style.width = `${rect.width}px`;\r\n highlight.style.height = `${rect.height}px`;\r\n\r\n label.textContent = source;\r\n label.style.display = \"block\";\r\n label.style.left = `${Math.max(8, Math.min(rect.left, window.innerWidth - 532))}px`;\r\n label.style.top = `${Math.max(8, rect.top - 30)}px`;\r\n}\r\n\r\nexport function installInspector() {\r\n if (\r\n installed ||\r\n typeof document === \"undefined\" ||\r\n process.env.NODE_ENV === \"production\"\r\n ) return;\r\n console.log(\"[react-inspector] installing\");\r\n \r\n installed = true\r\n createOverlay();\r\n \r\n document.addEventListener(\"pointermove\", (e) => {\r\n if (!selectMode) return;\r\n\r\n const target = getSourceTarget(e);\r\n\r\n if (target === activeTarget) return;\r\n\r\n activeTarget = target;\r\n renderHighlight(activeTarget);\r\n }, true);\r\n\r\n document.addEventListener(\"scroll\", () => {\r\n if (!selectMode || !(activeTarget instanceof Element)) return;\r\n renderHighlight(activeTarget);\r\n }, true);\r\n\r\n window.addEventListener(\"resize\", () => {\r\n if (root) {\r\n const rect = root.getBoundingClientRect();\r\n const padding = 8;\r\n \r\n // Just ensure it stays on screen if the side it's pinned to is pushed\r\n const currentTop = parseFloat(root.style.top);\r\n const currentBottom = parseFloat(root.style.bottom);\r\n const currentLeft = parseFloat(root.style.left);\r\n const currentRight = parseFloat(root.style.right);\r\n\r\n if (!isNaN(currentTop)) root.style.top = `${Math.max(padding, Math.min(currentTop, window.innerHeight - rect.height - padding))}px`;\r\n if (!isNaN(currentBottom)) root.style.bottom = `${Math.max(padding, Math.min(currentBottom, window.innerHeight - rect.height - padding))}px`;\r\n if (!isNaN(currentLeft)) root.style.left = `${Math.max(padding, Math.min(currentLeft, window.innerWidth - rect.width - padding))}px`;\r\n if (!isNaN(currentRight)) root.style.right = `${Math.max(padding, Math.min(currentRight, window.innerWidth - rect.width - padding))}px`;\r\n }\r\n if (!selectMode || !(activeTarget instanceof Element)) return;\r\n renderHighlight(activeTarget);\r\n });\r\n\r\n document.addEventListener(\"keydown\", (e) => {\r\n if (e.key === \"Escape\" && selectMode) setSelectMode(false);\r\n }, true);\r\n\r\n document.addEventListener(\"click\", async (e) => {\r\n if (!selectMode) return;\r\n if (e.button !== 0) return;\r\n\r\n const target = getSourceTarget(e);\r\n\r\n if (!(target instanceof Element)) return;\r\n\r\n const parsed = parseSource(target.getAttribute(ATTR));\r\n\r\n e.preventDefault();\r\n e.stopPropagation();\r\n setSelectMode(false);\r\n\r\n await openSource(parsed);\r\n }, true);\r\n}\r\n\r\ninstallInspector();"],"mappings":"AAEA,IAAMA,EAAO,cACPC,EAAoB,8BAEpBC,EAAQ,oBAKd,SAASC,EAAYC,EAAO,CACxB,GAAI,CAACA,EAAO,OAAO,KAEnB,IAAMC,EAAQD,EAAM,MAAMF,CAAK,EAE/B,OAAKG,EAEE,CACH,KAAMA,EAAM,CAAC,EACb,KAAM,OAAOA,EAAM,CAAC,CAAC,EACrB,OAAQ,OAAOA,EAAM,CAAC,CAAC,CAC3B,EANmB,IAOvB,CAKA,eAAeC,EAAWC,EAAQ,CACzBA,GAEL,MAAM,MAAM,UAAW,CACnB,OAAQ,OACR,QAAS,CACL,eAAgB,kBACpB,EACA,KAAM,KAAK,UAAUA,CAAM,CAC/B,CAAC,CACL,CAEA,IAAIC,EAAY,GACZC,EAAa,GACbC,EAAe,KACfC,EAAO,KACPC,EAAe,KACfC,EAAY,KACZC,EAAQ,KAEZ,SAASC,GAAgB,CACrBJ,EAAO,SAAS,cAAc,KAAK,EACnCA,EAAK,GAAKV,EACVU,EAAK,MAAM,IAAM,UACjBA,EAAK,MAAM,SAAW,QACtBA,EAAK,MAAM,IAAM,OACjBA,EAAK,MAAM,MAAQ,OACnBA,EAAK,MAAM,OAAS,aACpBA,EAAK,MAAM,WAAa,sFACxBA,EAAK,MAAM,cAAgB,OAE3B,IAAMK,EAASL,EAAK,aAAa,CAAE,KAAM,MAAO,CAAC,EAE3CM,EAAQ,SAAS,cAAc,OAAO,EAC5CA,EAAM,YAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MA6CpBL,EAAe,SAAS,cAAc,QAAQ,EAC9CA,EAAa,KAAO,SACpBA,EAAa,YAAc,SAC3BA,EAAa,aAAa,eAAgB,OAAO,EAEjD,IAAMM,EAAW,aAAa,QAAQ,yBAAyB,EAC/D,GAAIA,EACA,GAAI,CACA,IAAMC,EAAM,KAAK,MAAMD,CAAQ,EAC/BP,EAAK,MAAM,IAAM,OACjBA,EAAK,MAAM,OAAS,OACpBA,EAAK,MAAM,KAAO,OAClBA,EAAK,MAAM,MAAQ,OAEfQ,EAAI,eAAiB,SACrBR,EAAK,MAAM,OAASQ,EAAI,cAExBR,EAAK,MAAM,IAAMQ,EAAI,cAGrBA,EAAI,iBAAmB,QACvBR,EAAK,MAAM,MAAQQ,EAAI,gBAEvBR,EAAK,MAAM,KAAOQ,EAAI,eAE9B,MAAY,CAAE,CAGlB,IAAIC,EAAa,GACjBR,EAAa,iBAAiB,cAAgBS,GAAM,CAChD,IAAMC,EAASD,EAAE,QACXE,EAASF,EAAE,QACXG,EAAOb,EAAK,sBAAsB,EAClCc,EAAaD,EAAK,IAClBE,EAAcF,EAAK,KACzBJ,EAAa,GAEb,IAAMO,EAAiBC,GAAc,CACjC,IAAMC,EAAKD,EAAU,QAAUN,EACzBQ,EAAKF,EAAU,QAAUL,EAI/B,GAHI,CAACH,IAAe,KAAK,IAAIS,CAAE,EAAI,GAAK,KAAK,IAAIC,CAAE,EAAI,KACnDV,EAAa,IAEbA,EAAY,CACZ,IAAMW,EAASN,EAAaK,EACtBE,EAAUN,EAAcG,EAExBI,EAAU,EACVC,EAAS,OAAO,YAAcV,EAAK,OAASS,EAC5CE,EAAU,OAAO,WAAaX,EAAK,MAAQS,EAEjDtB,EAAK,MAAM,IAAM,GAAG,KAAK,IAAIsB,EAAS,KAAK,IAAIF,EAAQG,CAAM,CAAC,CAAC,KAC/DvB,EAAK,MAAM,KAAO,GAAG,KAAK,IAAIsB,EAAS,KAAK,IAAID,EAASG,CAAO,CAAC,CAAC,KAClExB,EAAK,MAAM,OAAS,OACpBA,EAAK,MAAM,MAAQ,MACvB,CACJ,EAEMyB,EAAc,IAAM,CACtB,GAAIhB,EAAY,CACZ,IAAMI,EAAOb,EAAK,sBAAsB,EAClC0B,EAAUb,EAAK,KAAOA,EAAK,MAAQ,EACnCc,EAAUd,EAAK,IAAMA,EAAK,OAAS,EAEnCe,EAAiBF,EAAU,OAAO,WAAa,EAAI,QAAU,OAC7DG,EAAeF,EAAU,OAAO,YAAc,EAAI,SAAW,MAE7DG,EAAkBF,IAAmB,QACrC,GAAG,OAAO,WAAaf,EAAK,KAAK,KACjC,GAAGA,EAAK,IAAI,KAEZkB,EAAgBF,IAAiB,SACjC,GAAG,OAAO,YAAchB,EAAK,MAAM,KACnC,GAAGA,EAAK,GAAG,KAEjB,aAAa,QAAQ,0BAA2B,KAAK,UAAU,CAC3D,eAAAe,EACA,gBAAAE,EACA,aAAAD,EACA,cAAAE,CACJ,CAAC,CAAC,EAGF/B,EAAK,MAAM,IAAM6B,IAAiB,MAAQE,EAAgB,OAC1D/B,EAAK,MAAM,OAAS6B,IAAiB,SAAWE,EAAgB,OAChE/B,EAAK,MAAM,KAAO4B,IAAmB,OAASE,EAAkB,OAChE9B,EAAK,MAAM,MAAQ4B,IAAmB,QAAUE,EAAkB,MACtE,CACA,OAAO,oBAAoB,cAAed,CAAa,EACvD,OAAO,oBAAoB,YAAaS,CAAW,CACvD,EAEA,OAAO,iBAAiB,cAAeT,CAAa,EACpD,OAAO,iBAAiB,YAAaS,CAAW,CACpD,CAAC,EAEDxB,EAAa,iBAAiB,QAAS,IAAM,CACpCQ,GACDuB,EAAc,CAAClC,CAAU,CAEjC,CAAC,EAEDO,EAAO,OAAOC,EAAOL,CAAY,EACjC,SAAS,gBAAgB,YAAYD,CAAI,EAEzCE,EAAY,SAAS,cAAc,KAAK,EACxCA,EAAU,MAAM,SAAW,QAC3BA,EAAU,MAAM,OAAS,aACzBA,EAAU,MAAM,OAAS,+BACzBA,EAAU,MAAM,aAAe,MAC/BA,EAAU,MAAM,UAAY,+EAC5BA,EAAU,MAAM,cAAgB,OAChCA,EAAU,MAAM,QAAU,OAC1BA,EAAU,MAAM,WAAa,uFAE7BC,EAAQ,SAAS,cAAc,KAAK,EACpCA,EAAM,MAAM,SAAW,QACvBA,EAAM,MAAM,OAAS,aACrBA,EAAM,MAAM,SAAW,iCACvBA,EAAM,MAAM,SAAW,SACvBA,EAAM,MAAM,aAAe,WAC3BA,EAAM,MAAM,WAAa,SACzBA,EAAM,MAAM,WAAa,qBACzBA,EAAM,MAAM,MAAQ,QACpBA,EAAM,MAAM,aAAe,MAC3BA,EAAM,MAAM,UAAY,iCACxBA,EAAM,MAAM,KAAO,iGACnBA,EAAM,MAAM,QAAU,UACtBA,EAAM,MAAM,cAAgB,OAC5BA,EAAM,MAAM,QAAU,OACtBA,EAAM,MAAM,WAAa,0CAEzB,SAAS,gBAAgB,OAAOD,EAAWC,CAAK,CACpD,CAEA,SAAS6B,EAAcC,EAAM,CACzBnC,EAAamC,EAEThC,IACAA,EAAa,QAAQ,OAAS,OAAOH,CAAU,EAC/CG,EAAa,YAAcH,EAAa,YAAc,SACtDG,EAAa,aAAa,eAAgB,OAAOH,CAAU,CAAC,GAGhE,SAAS,gBAAgB,MAAM,OAASA,EAAa,uBAAyB,GAEzEA,IACDC,EAAe,KACfmC,EAAc,EAEtB,CAEA,SAASA,GAAgB,CACjBhC,IAAWA,EAAU,MAAM,QAAU,QACrCC,IAAOA,EAAM,MAAM,QAAU,OACrC,CAEA,SAASgC,EAAgB,EAAG,CAGxB,OAFa,EAAE,aAAa,EAEhB,KACPC,GACGA,aAAgB,SACbA,EAAK,KAAO9C,GACZ,CAACU,GAAM,SAASoC,CAAI,GACpBA,EAAK,aAAa/C,CAAI,CACjC,CACJ,CAEA,SAASgD,EAAgBC,EAAQ,CAC7B,GAAI,CAACpC,GAAa,CAACC,EAAO,OAC1B,GAAI,EAAEmC,aAAkB,SAAU,CAC9BJ,EAAc,EACd,MACJ,CAEA,IAAMtC,EAAS0C,EAAO,aAAajD,CAAI,GAAK,GACtCwB,EAAOyB,EAAO,sBAAsB,EAE1CpC,EAAU,MAAM,QAAU,QAC1BA,EAAU,MAAM,KAAO,GAAGW,EAAK,IAAI,KACnCX,EAAU,MAAM,IAAM,GAAGW,EAAK,GAAG,KACjCX,EAAU,MAAM,MAAQ,GAAGW,EAAK,KAAK,KACrCX,EAAU,MAAM,OAAS,GAAGW,EAAK,MAAM,KAEvCV,EAAM,YAAcP,EACpBO,EAAM,MAAM,QAAU,QACtBA,EAAM,MAAM,KAAO,GAAG,KAAK,IAAI,EAAG,KAAK,IAAIU,EAAK,KAAM,OAAO,WAAa,GAAG,CAAC,CAAC,KAC/EV,EAAM,MAAM,IAAM,GAAG,KAAK,IAAI,EAAGU,EAAK,IAAM,EAAE,CAAC,IACnD,CAEO,SAAS0B,GAAmB,CAE3B1C,GACA,OAAO,SAAa,KACpB,QAAQ,IAAI,WAAa,eAE7B,QAAQ,IAAI,8BAA8B,EAE1CA,EAAY,GACZO,EAAc,EAEd,SAAS,iBAAiB,cAAgB,GAAM,CAC5C,GAAI,CAACN,EAAY,OAEjB,IAAMwC,EAASH,EAAgB,CAAC,EAE5BG,IAAWvC,IAEfA,EAAeuC,EACfD,EAAgBtC,CAAY,EAChC,EAAG,EAAI,EAEP,SAAS,iBAAiB,SAAU,IAAM,CAClC,CAACD,GAAc,EAAEC,aAAwB,UAC7CsC,EAAgBtC,CAAY,CAChC,EAAG,EAAI,EAEP,OAAO,iBAAiB,SAAU,IAAM,CACpC,GAAIC,EAAM,CACN,IAAMa,EAAOb,EAAK,sBAAsB,EAClCsB,EAAU,EAGVkB,EAAa,WAAWxC,EAAK,MAAM,GAAG,EACtCyC,EAAgB,WAAWzC,EAAK,MAAM,MAAM,EAC5C0C,EAAc,WAAW1C,EAAK,MAAM,IAAI,EACxC2C,EAAe,WAAW3C,EAAK,MAAM,KAAK,EAE3C,MAAMwC,CAAU,IAAGxC,EAAK,MAAM,IAAM,GAAG,KAAK,IAAIsB,EAAS,KAAK,IAAIkB,EAAY,OAAO,YAAc3B,EAAK,OAASS,CAAO,CAAC,CAAC,MAC1H,MAAMmB,CAAa,IAAGzC,EAAK,MAAM,OAAS,GAAG,KAAK,IAAIsB,EAAS,KAAK,IAAImB,EAAe,OAAO,YAAc5B,EAAK,OAASS,CAAO,CAAC,CAAC,MACnI,MAAMoB,CAAW,IAAG1C,EAAK,MAAM,KAAO,GAAG,KAAK,IAAIsB,EAAS,KAAK,IAAIoB,EAAa,OAAO,WAAa7B,EAAK,MAAQS,CAAO,CAAC,CAAC,MAC3H,MAAMqB,CAAY,IAAG3C,EAAK,MAAM,MAAQ,GAAG,KAAK,IAAIsB,EAAS,KAAK,IAAIqB,EAAc,OAAO,WAAa9B,EAAK,MAAQS,CAAO,CAAC,CAAC,KACvI,CACI,CAACxB,GAAc,EAAEC,aAAwB,UAC7CsC,EAAgBtC,CAAY,CAChC,CAAC,EAED,SAAS,iBAAiB,UAAY,GAAM,CACpC,EAAE,MAAQ,UAAYD,GAAYkC,EAAc,EAAK,CAC7D,EAAG,EAAI,EAEP,SAAS,iBAAiB,QAAS,MAAO,GAAM,CAE5C,GADI,CAAClC,GACD,EAAE,SAAW,EAAG,OAEpB,IAAMwC,EAASH,EAAgB,CAAC,EAEhC,GAAI,EAAEG,aAAkB,SAAU,OAElC,IAAMM,EAASpD,EAAY8C,EAAO,aAAajD,CAAI,CAAC,EAEpD,EAAE,eAAe,EACjB,EAAE,gBAAgB,EAClB2C,EAAc,EAAK,EAEnB,MAAMrC,EAAWiD,CAAM,CAC3B,EAAG,EAAI,EACX,CAEAL,EAAiB","names":["ATTR","INSPECTOR_ROOT_ID","REGEX","parseSource","value","match","openSource","source","installed","selectMode","activeTarget","root","toggleButton","highlight","label","createOverlay","shadow","style","savedPos","pos","isDragging","e","startX","startY","rect","initialTop","initialLeft","onPointerMove","moveEvent","dx","dy","newTop","newLeft","padding","maxTop","maxLeft","onPointerUp","centerX","centerY","horizontalSide","verticalSide","horizontalValue","verticalValue","setSelectMode","next","hideHighlight","getSourceTarget","node","renderHighlight","target","installInspector","currentTop","currentBottom","currentLeft","currentRight","parsed"]}
package/dist/vite.cjs CHANGED
@@ -1,9 +1,9 @@
1
- "use strict";var J=Object.create;var f=Object.defineProperty;var B=Object.getOwnPropertyDescriptor;var X=Object.getOwnPropertyNames;var V=Object.getPrototypeOf,H=Object.prototype.hasOwnProperty;var K=(t,n)=>{for(var e in n)f(t,e,{get:n[e],enumerable:!0})},k=(t,n,e,r)=>{if(n&&typeof n=="object"||typeof n=="function")for(let s of X(n))!H.call(t,s)&&s!==e&&f(t,s,{get:()=>n[s],enumerable:!(r=B(n,s))||r.enumerable});return t};var c=(t,n,e)=>(e=t!=null?J(V(t)):{},k(n||!t||!t.__esModule?f(e,"default",{value:t,enumerable:!0}):e,t)),F=t=>k(f({},"__esModule",{value:!0}),t);var gt={};K(gt,{default:()=>dt,next:()=>L});module.exports=F(gt);var A=require("unplugin"),u=c(require("path"),1),C=require("url"),h=c(require("launch-editor"),1),v=c(require("http"),1),P=c(require("fs"),1);function G(t){let n=0,e=0;if(t.startsWith("#!")){let r=t.indexOf(`
1
+ "use strict";var J=Object.create;var p=Object.defineProperty;var B=Object.getOwnPropertyDescriptor;var V=Object.getOwnPropertyNames;var X=Object.getPrototypeOf,H=Object.prototype.hasOwnProperty;var K=(t,n)=>{for(var e in n)p(t,e,{get:n[e],enumerable:!0})},k=(t,n,e,r)=>{if(n&&typeof n=="object"||typeof n=="function")for(let s of V(n))!H.call(t,s)&&s!==e&&p(t,s,{get:()=>n[s],enumerable:!(r=B(n,s))||r.enumerable});return t};var c=(t,n,e)=>(e=t!=null?J(X(t)):{},k(n||!t||!t.__esModule?p(e,"default",{value:t,enumerable:!0}):e,t)),F=t=>k(p({},"__esModule",{value:!0}),t);var gt={};K(gt,{default:()=>dt,next:()=>L});module.exports=F(gt);var v=require("unplugin"),u=c(require("path"),1),A=require("url"),h=c(require("launch-editor"),1),C=c(require("http"),1),P=c(require("fs"),1);function G(t){let n=0,e=0;if(t.startsWith("#!")){let r=t.indexOf(`
2
2
  `);n=r===-1?t.length:r+1,e=n}for(;n<t.length;){let r=t.indexOf(`
3
3
  `,n),s=r===-1?t.length:r+1,o=t.slice(n,s).trim();if(!o||o.startsWith("//")){n=s;continue}if(o.startsWith("/*")){let a=t.indexOf("*/",n+2);n=a===-1?t.length:a+2,t[n]==="\r"&&(n+=1),t[n]===`
4
- `&&(n+=1);continue}if(/^(['"])(.*?)\1;?$/.test(o)){e=s,n=s;continue}break}return e}function w(t,n){let e=`import ${JSON.stringify(n)};`;if(t.includes(e))return t;let r=G(t);return`${t.slice(0,r)}${e}
5
- ${t.slice(r)}`}var j=c(require("path"),1),_=require("@babel/parser"),m=c(require("@babel/traverse"),1),S=c(require("magic-string"),1),Q=m.default.default||m.default,x="data-source";function E(t){return t.split("?")[0].split("#")[0].replace(/\\/g,"/")}function Y(t){return/\.(mjs|js|jsx|ts|tsx)$/.test(E(t))}function Z(t){if(t.type!=="JSXIdentifier")return!1;let n=t.name;return/^[a-z]/.test(n)||n==="Image"||n==="Link"}function O(t,n){if(process.env.NODE_ENV==="production")return;let e=E(n);if(!Y(e))return null;let r=new S.default(t),s;try{s=(0,_.parse)(t,{sourceType:"unambiguous",plugins:["jsx","typescript","decorators-legacy","classProperties","classPrivateProperties","classPrivateMethods","importAttributes"]})}catch{return null}let i=j.default.relative(process.cwd(),e).replaceAll("\\","/");return Q(s,{JSXOpeningElement(o){let a=o.node;if(!a.loc||!Z(a.name)||a.attributes.some(b=>b.type==="JSXAttribute"&&b.name.name===x))return;let z=a.end-(a.selfClosing?2:1),{line:M,column:U}=a.loc.start;r.prependLeft(z,` ${x}="${i}:${M}:${U}"`)}}),{code:r.toString(),map:r.generateMap()}}var yt={},g="virtual:react-inspector",R="\0"+g,W=/\.(mjs|js|jsx|ts|tsx)$/,q=/\/(node_modules|dist|build|coverage|\.next|\.nuxt|\.svelte-kit|\.output|\.astro)\//;function l(t){return t?t.split("?")[0].split("#")[0].replace(/\\/g,"/"):""}var tt=typeof __filename=="string"?__filename:(0,C.fileURLToPath)(yt.url),d=u.default.dirname(tt),$=l(P.default.existsSync(u.default.resolve(d,"../runtime/install.ts"))?u.default.resolve(d,"../runtime/install.ts"):u.default.resolve(d,"./runtime.js"));function nt(t,n){let e=t.split(/\r?\n/),r=!1;for(let s of e){let i=s.trim();if(!i)continue;if(r){i.includes("*/")&&(r=!1);continue}if(i.startsWith("/*")){i.includes("*/")||(r=!0);continue}if(i.startsWith("//"))continue;return i.match(/^(['"])(.+)\1;?$/)?.[2]===n}return!1}function I(t){return nt(t,"use client")}function et(t){if(!t)return!1;let n=l(t);return q.test(n)||n.includes("\0")?!1:W.test(n)}function rt(t){return/from\s+["']react-dom\/client["']/.test(t)||/require\(\s*["']react-dom\/client["']\s*\)/.test(t)}function st(t){let r=(l(t).split("/").pop()??"").replace(W,"");return["main","index","app","_app","root","client","entry-client","entry.client"].includes(r)}function it(t,n,e){if(!t)return!1;let r=l(t);return e==="webpack"||e==="rspack"?!1:r.endsWith("/pages/_app.tsx")||r.endsWith("/pages/_app.jsx")||r.endsWith("/pages/_app.js")?!0:r.endsWith("/app/layout.tsx")||r.endsWith("/app/layout.jsx")||r.endsWith("/app/page.tsx")||r.endsWith("/app/page.jsx")?I(n):I(n)||rt(n)||st(r)}function T(t){return t.framework==="vite"?`/@fs/${$}`:$}function y(t,n){return typeof t=="string"?t===n?t:[n,t]:Array.isArray(t)?t.includes(n)?t:[n,...t]:t&&typeof t=="object"&&"import"in t?{...t,import:y(t.import,n)}:t}function ot(t,n){let e=t.options.name?.toLowerCase()??"";if(e.includes("server")||e.includes("edge"))return;let r=t.options.entry;t.options.entry=async()=>{let s=typeof r=="function"?await r():r;return typeof s=="string"||Array.isArray(s)?y(s,n):s&&typeof s=="object"?Object.fromEntries(Object.entries(s).map(([i,o])=>[i,y(o,n)])):s}}function N(t){t.use("/__open",(n,e)=>{let r="";n.on("data",s=>r+=s),n.on("end",()=>{try{let{file:s,line:i,column:o}=JSON.parse(r);(0,h.default)(`${s}:${i}:${o}`),e.statusCode=204,e.end()}catch{e.statusCode=400,e.end()}})})}var p=null;function at(){return p||(p=new Promise(t=>{let n=v.default.createServer((e,r)=>{if(e.url==="/__open"&&e.method==="POST"){let s="";e.on("data",i=>s+=i),e.on("end",()=>{try{let{file:i,line:o,column:a}=JSON.parse(s);(0,h.default)(`${i}:${o}:${a}`),r.statusCode=204,r.end()}catch{r.statusCode=400,r.end()}})}else r.statusCode=404,r.end()});n.listen(0,"127.0.0.1",()=>{let e=n.address().port;t(e)})}),p)}function ct(t){let n=t.options.devServer;if(!n||typeof n!="object")return;let e=n.setupMiddlewares;n.setupMiddlewares=(r,s)=>(s.app&&N(s.app),typeof e=="function"?e(r,s):r)}var ut=["*.mjs","*.js","*.jsx","*.ts","*.tsx"],ft="interactive-react-inspector/loader";function pt(t,n){return Array.isArray(t)?[...t,n]:t?[t,n]:n}function lt(t){return t!=="*.js"?{not:"foreign"}:{all:[{not:"foreign"},{path:/\.js$/},{not:{path:/\.(?:jsx|ts|tsx)\.js$/}}]}}function mt(t={}){let n={...t};for(let e of ut)n[e]=pt(n[e],{condition:lt(e),loaders:[{loader:ft,options:{runtime:!0}}]});return n}var D=(0,A.createUnplugin)((t,n)=>({name:"react-inspector",enforce:"pre",resolveId(e){if(e===g)return R},load(e){if(e===R)return`
4
+ `&&(n+=1);continue}if(/^(['"])(.*?)\1;?$/.test(o)){e=s,n=s;continue}break}return e}function _(t,n){let e=`import ${JSON.stringify(n)};`;if(t.includes(e))return t;let r=G(t);return`${t.slice(0,r)}${e}
5
+ ${t.slice(r)}`}var x=c(require("path"),1),j=require("@babel/parser"),m=c(require("@babel/traverse"),1),E=c(require("magic-string"),1),Q=m.default.default||m.default,w="data-source";function O(t){return t.split("?")[0].split("#")[0].replace(/\\/g,"/")}function Y(t){return/\.(mjs|js|jsx|ts|tsx)$/.test(O(t))}function Z(t){if(t.type!=="JSXIdentifier")return!1;let n=t.name;return/^[a-z]/.test(n)||n==="Image"||n==="Link"}function S(t,n){if(process.env.NODE_ENV==="production")return;let e=O(n);if(!Y(e))return null;let r=new E.default(t),s;try{s=(0,j.parse)(t,{sourceType:"unambiguous",plugins:["jsx","typescript","decorators-legacy","classProperties","classPrivateProperties","classPrivateMethods","importAttributes"]})}catch{return null}let i=x.default.relative(process.cwd(),e).replaceAll("\\","/");return Q(s,{JSXOpeningElement(o){let a=o.node;if(!a.loc||!Z(a.name)||a.attributes.some(b=>b.type==="JSXAttribute"&&b.name.name===w))return;let z=a.end-(a.selfClosing?2:1),{line:M,column:U}=a.loc.start;r.prependLeft(z,` ${w}="${i}:${M}:${U}"`)}}),{code:r.toString(),map:r.generateMap()}}var yt={},g="virtual:react-inspector",R="\0"+g,N=/\.(mjs|js|jsx|ts|tsx)$/,q=/\/(node_modules|dist|build|coverage|\.next|\.nuxt|\.svelte-kit|\.output|\.astro)\//;function l(t){return t?t.split("?")[0].split("#")[0].replace(/\\/g,"/"):""}var tt=typeof __filename=="string"?__filename:(0,A.fileURLToPath)(yt.url),d=u.default.dirname(tt),$=l(P.default.existsSync(u.default.resolve(d,"../runtime/install.ts"))?u.default.resolve(d,"../runtime/install.ts"):u.default.resolve(d,"./runtime.js"));function nt(t,n){let e=t.split(/\r?\n/),r=!1;for(let s of e){let i=s.trim();if(!i)continue;if(r){i.includes("*/")&&(r=!1);continue}if(i.startsWith("/*")){i.includes("*/")||(r=!0);continue}if(i.startsWith("//"))continue;return i.match(/^(['"])(.+)\1;?$/)?.[2]===n}return!1}function I(t){return nt(t,"use client")}function et(t){if(!t)return!1;let n=l(t);return q.test(n)||n.includes("\0")?!1:N.test(n)}function rt(t){return/from\s+["']react-dom\/client["']/.test(t)||/require\(\s*["']react-dom\/client["']\s*\)/.test(t)}function st(t){let r=(l(t).split("/").pop()??"").replace(N,"");return["main","index","app","_app","root","client","entry-client","entry.client"].includes(r)}function it(t,n,e){if(!t)return!1;let r=l(t);return e==="webpack"||e==="rspack"?!1:r.endsWith("/pages/_app.tsx")||r.endsWith("/pages/_app.jsx")||r.endsWith("/pages/_app.js")?!0:r.endsWith("/app/layout.tsx")||r.endsWith("/app/layout.jsx")||r.endsWith("/app/page.tsx")||r.endsWith("/app/page.jsx")?I(n):I(n)||rt(n)||st(r)}function T(t){return t.framework==="vite"?`/@fs/${$}`:$}function y(t,n){return typeof t=="string"?t===n?t:[n,t]:Array.isArray(t)?t.includes(n)?t:[n,...t]:t&&typeof t=="object"&&"import"in t?{...t,import:y(t.import,n)}:t}function ot(t,n){let e=t.options.name?.toLowerCase()??"";if(e.includes("server")||e.includes("edge"))return;let r=t.options.entry;t.options.entry=async()=>{let s=typeof r=="function"?await r():r;return typeof s=="string"||Array.isArray(s)?y(s,n):s&&typeof s=="object"?Object.fromEntries(Object.entries(s).map(([i,o])=>[i,y(o,n)])):s}}function W(t){t.use("/__open",(n,e)=>{let r="";n.on("data",s=>r+=s),n.on("end",()=>{try{let{file:s,line:i,column:o}=JSON.parse(r);(0,h.default)(`${s}:${i}:${o}`),e.statusCode=204,e.end()}catch{e.statusCode=400,e.end()}})})}var f=null;function at(){return f||(f=new Promise(t=>{let n=C.default.createServer((e,r)=>{if(e.url==="/__open"&&e.method==="POST"){let s="";e.on("data",i=>s+=i),e.on("end",()=>{try{let{file:i,line:o,column:a}=JSON.parse(s);(0,h.default)(`${i}:${o}:${a}`),r.statusCode=204,r.end()}catch{r.statusCode=400,r.end()}})}else r.statusCode=404,r.end()});n.listen(0,"127.0.0.1",()=>{let e=n.address().port;t(e)})}),f)}function ct(t){let n=t.options.devServer;if(!n||typeof n!="object")return;let e=n.setupMiddlewares;n.setupMiddlewares=(r,s)=>(s.app&&W(s.app),typeof e=="function"?e(r,s):r)}var ut=["*.mjs","*.js","*.jsx","*.ts","*.tsx"],pt="interactive-react-inspector/loader";function ft(t,n){return Array.isArray(t)?[...t,n]:t?[t,n]:n}function lt(t){return t!=="*.js"?{not:"foreign"}:{all:[{not:"foreign"},{path:/\.js$/},{not:{path:/\.(?:jsx|ts|tsx)\.js$/}}]}}function mt(t={}){let n={...t};for(let e of ut)n[e]=ft(n[e],{condition:lt(e),loaders:[{loader:pt,options:{runtime:!0}}]});return n}var D=(0,v.createUnplugin)((t,n)=>process.env.NODE_ENV==="production"?{name:"react-inspector"}:{name:"react-inspector",enforce:"pre",resolveId(e){if(e===g)return R},load(e){if(e===R)return`
6
6
  "use client";
7
7
  import ${JSON.stringify(T(n))};
8
- `},transform(e,r){if(!et(r))return;let s=O(e,r);return it(r,e,n.framework)&&s&&(s.code=w(s.code,g)),s},vite:{configureServer(e){N(e.middlewares)}},webpack(e){ot(e,T(n)),ct(e)}}));function L(t={}){let n=t.webpack;return{...t,turbopack:{...t.turbopack,rules:mt(t.turbopack?.rules)},async rewrites(){let e=await at(),r=typeof t.rewrites=="function"?await t.rewrites():t.rewrites,s={source:"/__open",destination:`http://127.0.0.1:${e}/__open`};return Array.isArray(r)?[...r,s]:r&&typeof r=="object"?{...r,fallback:[...r.fallback||[],s]}:[s]},webpack(e,r){let s=typeof n=="function"?n(e,r)??e:e;return s.plugins??=[],s.plugins.push(D.webpack()),s}}}var dt=Object.assign(D,{next:L});0&&(module.exports={next});
8
+ `},transform(e,r){if(!et(r))return;let s=S(e,r);return it(r,e,n.framework)&&s&&(s.code=_(s.code,g)),s},vite:{configureServer(e){W(e.middlewares)}},webpack(e){ot(e,T(n)),ct(e)}});function L(t={}){if(process.env.NODE_ENV==="production")return t;let n=t.webpack;return{...t,turbopack:{...t.turbopack,rules:mt(t.turbopack?.rules)},async rewrites(){let e=await at(),r=typeof t.rewrites=="function"?await t.rewrites():t.rewrites,s={source:"/__open",destination:`http://127.0.0.1:${e}/__open`};return Array.isArray(r)?[...r,s]:r&&typeof r=="object"?{...r,fallback:[...r.fallback||[],s]}:[s]},webpack(e,r){let s=typeof n=="function"?n(e,r)??e:e;return s.plugins??=[],s.plugins.push(D.webpack()),s}}}var dt=Object.assign(D,{next:L});0&&(module.exports={next});
9
9
  //# sourceMappingURL=vite.cjs.map
package/dist/vite.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/unplugin/index.ts","../src/core/imports.ts","../src/core/transform.ts"],"sourcesContent":["import { createUnplugin } from \"unplugin\";\r\nimport path from \"node:path\";\r\nimport { fileURLToPath } from \"node:url\";\r\nimport launch from \"launch-editor\";\r\nimport http from \"node:http\";\r\nimport type { AddressInfo } from \"node:net\";\r\n\r\nimport fs from \"node:fs\";\n\nimport { injectSideEffectImport } from \"../core/imports.ts\";\nimport { transform as sourceTransform } from \"../core/transform.ts\";\n\r\nconst VIRTUAL_ID = \"virtual:react-inspector\";\r\nconst RESOLVED_ID = \"\\0\" + VIRTUAL_ID;\r\nconst SOURCE_EXT_RE = /\\.(mjs|js|jsx|ts|tsx)$/;\r\nconst IGNORED_PATH_RE = /\\/(node_modules|dist|build|coverage|\\.next|\\.nuxt|\\.svelte-kit|\\.output|\\.astro)\\//;\r\n\r\nfunction normalizeId(id?: string) {\r\n if (!id) return \"\";\r\n\r\n // Strip query/hash and normalize Windows paths for consistent matching.\r\n const cleaned = id.split(\"?\")[0].split(\"#\")[0];\r\n return cleaned.replace(/\\\\/g, \"/\");\r\n}\r\n\r\nconst currentFile = typeof __filename === \"string\"\n ? __filename\n : fileURLToPath(import.meta.url);\nconst __dirname = path.dirname(currentFile);\nconst RUNTIME_PATH = normalizeId(\n fs.existsSync(path.resolve(__dirname, \"../runtime/install.ts\"))\r\n ? path.resolve(__dirname, \"../runtime/install.ts\")\r\n : path.resolve(__dirname, \"./runtime.js\"),\r\n);\r\n\r\nfunction hasDirective(code: string, directive: string) {\r\n const lines = code.split(/\\r?\\n/);\r\n let inBlockComment = false;\r\n\r\n for (const line of lines) {\r\n const trimmed = line.trim();\r\n\r\n if (!trimmed) continue;\r\n\r\n if (inBlockComment) {\r\n if (trimmed.includes(\"*/\")) inBlockComment = false;\r\n continue;\r\n }\r\n\r\n if (trimmed.startsWith(\"/*\")) {\r\n if (!trimmed.includes(\"*/\")) inBlockComment = true;\r\n continue;\r\n }\r\n\r\n if (trimmed.startsWith(\"//\")) continue;\r\n\r\n const match = trimmed.match(/^(['\"])(.+)\\1;?$/);\r\n\r\n if (match?.[2] === directive) return true;\r\n\r\n // First non-directive statement means no `use client`.\r\n return false;\r\n }\r\n\r\n return false;\r\n}\r\n\r\nfunction hasUseClientDirective(code: string) {\r\n return hasDirective(code, \"use client\");\r\n}\r\n\r\nfunction shouldTransform(id?: string) {\r\n if (!id) return false;\r\n\r\n const normalized = normalizeId(id);\r\n\r\n if (\r\n IGNORED_PATH_RE.test(normalized) ||\r\n normalized.includes(\"\\0\")\r\n ) return false;\r\n\r\n return SOURCE_EXT_RE.test(normalized);\r\n}\r\n\r\nfunction importsClientRenderer(code: string) {\r\n return /from\\s+[\"']react-dom\\/client[\"']/.test(code) ||\r\n /require\\(\\s*[\"']react-dom\\/client[\"']\\s*\\)/.test(code);\r\n}\r\n\r\nfunction isLikelyClientEntry(id: string) {\r\n const normalized = normalizeId(id);\r\n const file = normalized.split(\"/\").pop() ?? \"\";\r\n const stem = file.replace(SOURCE_EXT_RE, \"\");\r\n\r\n return [\r\n \"main\",\r\n \"index\",\r\n \"app\",\r\n \"_app\",\r\n \"root\",\r\n \"client\",\r\n \"entry-client\",\r\n \"entry.client\",\r\n ].includes(stem);\r\n}\r\n\r\nfunction shouldInjectRuntime(id: string | undefined, code: string, framework: string) {\r\n if (!id) return false;\r\n\r\n const normalized = normalizeId(id);\r\n\r\n if (framework === \"webpack\" || framework === \"rspack\") {\r\n return false;\r\n }\r\n\r\n if (\r\n normalized.endsWith(\"/pages/_app.tsx\") ||\r\n normalized.endsWith(\"/pages/_app.jsx\") ||\r\n normalized.endsWith(\"/pages/_app.js\")\r\n ) return true;\r\n\r\n if (\r\n normalized.endsWith(\"/app/layout.tsx\") ||\r\n normalized.endsWith(\"/app/layout.jsx\") ||\r\n normalized.endsWith(\"/app/page.tsx\") ||\r\n normalized.endsWith(\"/app/page.jsx\")\r\n ) {\r\n return hasUseClientDirective(code);\r\n }\r\n\r\n return hasUseClientDirective(code) ||\r\n importsClientRenderer(code) ||\r\n isLikelyClientEntry(normalized);\r\n}\r\n\r\nfunction getRuntimeImport(meta: { framework: string }) {\r\n if (meta.framework === \"vite\") {\r\n return `/@fs/${RUNTIME_PATH}`;\r\n }\r\n\r\n return RUNTIME_PATH;\r\n}\r\n\r\nfunction prependImport(value: unknown, id: string): unknown {\r\n if (typeof value === \"string\") {\r\n return value === id ? value : [id, value];\r\n }\r\n\r\n if (Array.isArray(value)) {\r\n return value.includes(id) ? value : [id, ...value];\r\n }\r\n\r\n if (value && typeof value === \"object\" && \"import\" in value) {\r\n return {\r\n ...value,\r\n import: prependImport((value as { import: unknown }).import, id),\r\n };\r\n }\r\n\r\n return value;\r\n}\r\n\r\nfunction injectWebpackEntry(\r\n compiler: { options: { name?: string; entry?: unknown } },\r\n id: string,\r\n) {\r\n const name = compiler.options.name?.toLowerCase() ?? \"\";\r\n\r\n if (name.includes(\"server\") || name.includes(\"edge\")) return;\r\n\r\n const originalEntry = compiler.options.entry;\r\n\r\n compiler.options.entry = async () => {\r\n const entry =\r\n typeof originalEntry === \"function\"\r\n ? await originalEntry()\r\n : originalEntry;\r\n\r\n if (typeof entry === \"string\" || Array.isArray(entry)) {\r\n return prependImport(entry, id);\r\n }\r\n\r\n if (entry && typeof entry === \"object\") {\r\n return Object.fromEntries(\r\n Object.entries(entry).map(([key, value]) => [\r\n key,\r\n prependImport(value, id),\r\n ]),\r\n );\r\n }\r\n\r\n return entry;\r\n };\r\n}\r\n\r\nfunction installOpenMiddleware(app: any) {\r\n app.use(\"/__open\", (req: any, res: any) => {\r\n let body = \"\";\r\n\r\n req.on(\"data\", (c: Buffer | string) => body += c);\r\n\r\n req.on(\"end\", () => {\r\n try {\r\n const { file, line, column } = JSON.parse(body);\r\n\r\n launch(`${file}:${line}:${column}`);\r\n\r\n res.statusCode = 204;\r\n res.end();\r\n } catch {\r\n res.statusCode = 400;\r\n res.end();\r\n }\r\n });\r\n },\r\n );\r\n}\r\n\r\nlet bridgePortPromise: Promise<number> | null = null;\r\n\r\nfunction getBridgeServerPort() {\r\n if (bridgePortPromise) return bridgePortPromise;\r\n\r\n bridgePortPromise = new Promise((resolve) => {\r\n const server = http.createServer((req, res) => {\r\n if (req.url === \"/__open\" && req.method === \"POST\") {\r\n let body = \"\";\r\n req.on(\"data\", (chunk) => (body += chunk));\r\n req.on(\"end\", () => {\r\n try {\r\n const { file, line, column } = JSON.parse(body);\r\n launch(`${file}:${line}:${column}`);\r\n res.statusCode = 204;\r\n res.end();\r\n } catch {\r\n res.statusCode = 400;\r\n res.end();\r\n }\r\n });\r\n } else {\r\n res.statusCode = 404;\r\n res.end();\r\n }\r\n });\r\n\r\n server.listen(0, \"127.0.0.1\", () => {\r\n const port = (server.address() as AddressInfo).port;\r\n resolve(port);\r\n });\r\n });\r\n\r\n return bridgePortPromise;\r\n}\r\n\r\nfunction injectWebpackDevServerOpenRoute(compiler: { options: { devServer?: any } }) {\r\n const devServer = compiler.options.devServer;\r\n\r\n if (!devServer || typeof devServer !== \"object\") return;\r\n\r\n const originalSetupMiddlewares = devServer.setupMiddlewares;\r\n\r\n devServer.setupMiddlewares = (middlewares: unknown[], server: { app?: any }) => {\r\n if (server.app) installOpenMiddleware(server.app);\r\n\r\n return typeof originalSetupMiddlewares === \"function\"\r\n ? originalSetupMiddlewares(middlewares, server)\r\n : middlewares;\r\n };\r\n}\r\n\r\ntype NextConfigLike = Record<string, any> & {\r\n turbopack?: Record<string, any> & {\r\n rules?: Record<string, any>;\r\n };\r\n webpack?: ((config: any, context: any) => any) | null;\r\n rewrites?: (() => Promise<any> | any) | any;\r\n};\n\nconst TURBOPACK_EXTENSIONS = [\"*.mjs\", \"*.js\", \"*.jsx\", \"*.ts\", \"*.tsx\"];\nconst TURBOPACK_LOADER = \"interactive-react-inspector/loader\";\n\nfunction appendTurbopackRule(existing: unknown, rule: unknown) {\n return Array.isArray(existing)\n ? [...existing, rule]\n : existing\n ? [existing, rule]\n : rule;\n}\n\nfunction getTurbopackCondition(extension: string) {\n if (extension !== \"*.js\") return { not: \"foreign\" };\n\n return {\n all: [\n { not: \"foreign\" },\n { path: /\\.js$/ },\n { not: { path: /\\.(?:jsx|ts|tsx)\\.js$/ } },\n ],\n };\n}\n\nfunction createTurbopackRules(existingRules: Record<string, any> = {}) {\n const rules = { ...existingRules };\n\n for (const extension of TURBOPACK_EXTENSIONS) {\n rules[extension] = appendTurbopackRule(rules[extension], {\n condition: getTurbopackCondition(extension),\n loaders: [\n {\n loader: TURBOPACK_LOADER,\n options: { runtime: true },\n },\n ],\n });\n }\n\n return rules;\n}\n\nconst Inspector = createUnplugin((_options, meta) => ({\n name: \"react-inspector\",\r\n enforce: \"pre\",\r\n\r\n resolveId(id) {\r\n if (id === VIRTUAL_ID) {\r\n return RESOLVED_ID;\r\n }\r\n },\r\n\r\n load(id) {\r\n if (id === RESOLVED_ID) {\r\n return `\r\n\"use client\";\r\nimport ${JSON.stringify(getRuntimeImport(meta))};\r\n`;\r\n }\r\n },\r\n\r\n transform(code, id) {\r\n if (!shouldTransform(id)) return;\r\n\r\n let result = sourceTransform(code, id);\r\n\r\n if (shouldInjectRuntime(id, code, meta.framework) && result) {\r\n result.code = injectSideEffectImport(result.code, VIRTUAL_ID);\n }\n\n return result;\n },\r\n\r\n vite: {\r\n configureServer(server) {\r\n installOpenMiddleware(server.middlewares);\r\n },\r\n },\r\n\r\n webpack(compiler) {\r\n injectWebpackEntry(compiler, getRuntimeImport(meta));\r\n injectWebpackDevServerOpenRoute(compiler);\r\n },\r\n}));\n\nfunction next<TConfig extends NextConfigLike>(config: TConfig = {} as TConfig) {\r\n const originalWebpack = config.webpack;\r\n\r\n return {\r\n ...config,\r\n turbopack: {\r\n ...config.turbopack,\r\n rules: createTurbopackRules(config.turbopack?.rules),\r\n },\r\n async rewrites() {\r\n const bridgePort = await getBridgeServerPort();\r\n const originalRewrites = typeof config.rewrites === \"function\"\r\n ? await config.rewrites()\r\n : config.rewrites;\r\n\r\n const inspectorRewrite = {\r\n source: \"/__open\",\r\n destination: `http://127.0.0.1:${bridgePort}/__open`,\r\n };\r\n\r\n if (Array.isArray(originalRewrites)) {\r\n return [...originalRewrites, inspectorRewrite];\r\n } else if (originalRewrites && typeof originalRewrites === \"object\") {\r\n return {\r\n ...originalRewrites,\r\n fallback: [...(originalRewrites.fallback || []), inspectorRewrite],\r\n };\r\n }\r\n\r\n return [inspectorRewrite];\r\n },\r\n webpack(webpackConfig: any, context: any) {\r\n const nextWebpackConfig = typeof originalWebpack === \"function\"\r\n ? originalWebpack(webpackConfig, context) ?? webpackConfig\r\n : webpackConfig;\r\n\r\n nextWebpackConfig.plugins ??= [];\r\n nextWebpackConfig.plugins.push(Inspector.webpack());\r\n\r\n return nextWebpackConfig;\r\n },\r\n };\r\n}\n\nexport { next };\n\nexport default Object.assign(Inspector, { next });\n","function getDirectiveInsertOffset(code: string) {\n let offset = 0;\n let insertOffset = 0;\n\n if (code.startsWith(\"#!\")) {\n const lineEnd = code.indexOf(\"\\n\");\n offset = lineEnd === -1 ? code.length : lineEnd + 1;\n insertOffset = offset;\n }\n\n while (offset < code.length) {\n const lineEnd = code.indexOf(\"\\n\", offset);\n const end = lineEnd === -1 ? code.length : lineEnd + 1;\n const line = code.slice(offset, end);\n const trimmed = line.trim();\n\n if (!trimmed || trimmed.startsWith(\"//\")) {\n offset = end;\n continue;\n }\n\n if (trimmed.startsWith(\"/*\")) {\n const blockEnd = code.indexOf(\"*/\", offset + 2);\n offset = blockEnd === -1 ? code.length : blockEnd + 2;\n if (code[offset] === \"\\r\") offset += 1;\n if (code[offset] === \"\\n\") offset += 1;\n continue;\n }\n\n if (/^(['\"])(.*?)\\1;?$/.test(trimmed)) {\n insertOffset = end;\n offset = end;\n continue;\n }\n\n break;\n }\n\n return insertOffset;\n}\n\nexport function injectSideEffectImport(code: string, id: string) {\n const statement = `import ${JSON.stringify(id)};`;\n\n if (code.includes(statement)) return code;\n\n const offset = getDirectiveInsertOffset(code);\n\n return `${code.slice(0, offset)}${statement}\\n${code.slice(offset)}`;\n}\n","import path from \"node:path\";\r\nimport { parse } from \"@babel/parser\";\r\nimport _traverse from \"@babel/traverse\";\r\nimport MagicString from \"magic-string\";\r\n\r\n// Unwrap the default export for ESM compatibility\r\nconst traverse = (_traverse as any).default || _traverse;\r\n\r\nconst ATTR = \"data-source\";\r\n\r\nfunction normalizeId(id: string) {\r\n return id.split(\"?\")[0].split(\"#\")[0].replace(/\\\\/g, \"/\");\r\n}\r\n\r\nfunction shouldTransform(id: string) {\r\n return /\\.(mjs|js|jsx|ts|tsx)$/.test(normalizeId(id));\r\n}\r\n\r\nfunction isInspectableElement(name: any) {\r\n if (name.type !== \"JSXIdentifier\") return false;\r\n const nameStr = name.name;\r\n return /^[a-z]/.test(nameStr) || nameStr === \"Image\" || nameStr === \"Link\";\r\n}\r\n\r\nexport function transform(code: string, id: string) {\r\n if (process.env.NODE_ENV === \"production\") return;\r\n\r\n const normalizedId = normalizeId(id);\r\n\r\n if (!shouldTransform(normalizedId)) return null;\r\n\r\n const s = new MagicString(code);\r\n\r\n let ast;\r\n\r\n try {\r\n ast = parse(code, {\r\n sourceType: \"unambiguous\",\r\n plugins: [\r\n \"jsx\",\r\n \"typescript\",\r\n \"decorators-legacy\",\r\n \"classProperties\",\r\n \"classPrivateProperties\",\r\n \"classPrivateMethods\",\r\n \"importAttributes\",\r\n ],\r\n });\r\n } catch {\r\n return null;\r\n }\r\n\r\n const relative = path.relative(\r\n process.cwd(),\r\n normalizedId,\r\n ).replaceAll(\"\\\\\", \"/\");\r\n\r\n traverse(ast, {\r\n JSXOpeningElement(p: { node: any; }) {\r\n const node = p.node;\r\n\r\n if (!node.loc) return;\r\n if (!isInspectableElement(node.name)) return;\r\n\r\n const exists = node.attributes.some(\r\n (a: { type: string; name: { name: string; }; }) =>\r\n a.type === \"JSXAttribute\"\r\n && a.name.name === ATTR,\r\n );\r\n\r\n if (exists) return;\r\n\r\n const insert = node.end! - (\r\n node.selfClosing\r\n ? 2\r\n : 1\r\n );\r\n\r\n const { line, column } = node.loc.start;\r\n\r\n s.prependLeft(\r\n insert,\r\n ` ${ATTR}=\"${relative}:${line}:${column}\"`,\r\n );\r\n },\r\n });\r\n\r\n return {\r\n code: s.toString(),\r\n map: s.generateMap(),\r\n }\r\n}\r\n"],"mappings":"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","names":["unplugin_exports","__export","unplugin_default","next","__toCommonJS","import_unplugin","import_node_path","import_node_url","import_launch_editor","import_node_http","import_node_fs","getDirectiveInsertOffset","code","offset","insertOffset","lineEnd","end","trimmed","blockEnd","injectSideEffectImport","id","statement","import_node_path","import_parser","import_traverse","import_magic_string","traverse","_traverse","ATTR","normalizeId","id","shouldTransform","isInspectableElement","name","nameStr","transform","code","normalizedId","s","MagicString","ast","relative","path","p","node","a","insert","line","column","import_meta","VIRTUAL_ID","RESOLVED_ID","SOURCE_EXT_RE","IGNORED_PATH_RE","normalizeId","id","currentFile","__dirname","path","RUNTIME_PATH","fs","hasDirective","code","directive","lines","inBlockComment","line","trimmed","hasUseClientDirective","shouldTransform","normalized","importsClientRenderer","isLikelyClientEntry","stem","shouldInjectRuntime","framework","getRuntimeImport","meta","prependImport","value","injectWebpackEntry","compiler","name","originalEntry","entry","key","installOpenMiddleware","app","req","res","body","c","file","column","launch","bridgePortPromise","getBridgeServerPort","resolve","server","http","chunk","port","injectWebpackDevServerOpenRoute","devServer","originalSetupMiddlewares","middlewares","TURBOPACK_EXTENSIONS","TURBOPACK_LOADER","appendTurbopackRule","existing","rule","getTurbopackCondition","extension","createTurbopackRules","existingRules","rules","Inspector","_options","result","transform","injectSideEffectImport","next","config","originalWebpack","bridgePort","originalRewrites","inspectorRewrite","webpackConfig","context","nextWebpackConfig","unplugin_default","Inspector","next"]}
1
+ {"version":3,"sources":["../src/unplugin/index.ts","../src/core/imports.ts","../src/core/transform.ts"],"sourcesContent":["import { createUnplugin } from \"unplugin\";\r\nimport path from \"node:path\";\r\nimport { fileURLToPath } from \"node:url\";\r\nimport launch from \"launch-editor\";\r\nimport http from \"node:http\";\r\nimport type { AddressInfo } from \"node:net\";\r\n\r\nimport fs from \"node:fs\";\n\nimport { injectSideEffectImport } from \"../core/imports.ts\";\nimport { transform as sourceTransform } from \"../core/transform.ts\";\n\r\nconst VIRTUAL_ID = \"virtual:react-inspector\";\r\nconst RESOLVED_ID = \"\\0\" + VIRTUAL_ID;\r\nconst SOURCE_EXT_RE = /\\.(mjs|js|jsx|ts|tsx)$/;\r\nconst IGNORED_PATH_RE = /\\/(node_modules|dist|build|coverage|\\.next|\\.nuxt|\\.svelte-kit|\\.output|\\.astro)\\//;\r\n\r\nfunction normalizeId(id?: string) {\r\n if (!id) return \"\";\r\n\r\n // Strip query/hash and normalize Windows paths for consistent matching.\r\n const cleaned = id.split(\"?\")[0].split(\"#\")[0];\r\n return cleaned.replace(/\\\\/g, \"/\");\r\n}\r\n\r\nconst currentFile = typeof __filename === \"string\"\n ? __filename\n : fileURLToPath(import.meta.url);\nconst __dirname = path.dirname(currentFile);\nconst RUNTIME_PATH = normalizeId(\n fs.existsSync(path.resolve(__dirname, \"../runtime/install.ts\"))\r\n ? path.resolve(__dirname, \"../runtime/install.ts\")\r\n : path.resolve(__dirname, \"./runtime.js\"),\r\n);\r\n\r\nfunction hasDirective(code: string, directive: string) {\r\n const lines = code.split(/\\r?\\n/);\r\n let inBlockComment = false;\r\n\r\n for (const line of lines) {\r\n const trimmed = line.trim();\r\n\r\n if (!trimmed) continue;\r\n\r\n if (inBlockComment) {\r\n if (trimmed.includes(\"*/\")) inBlockComment = false;\r\n continue;\r\n }\r\n\r\n if (trimmed.startsWith(\"/*\")) {\r\n if (!trimmed.includes(\"*/\")) inBlockComment = true;\r\n continue;\r\n }\r\n\r\n if (trimmed.startsWith(\"//\")) continue;\r\n\r\n const match = trimmed.match(/^(['\"])(.+)\\1;?$/);\r\n\r\n if (match?.[2] === directive) return true;\r\n\r\n // First non-directive statement means no `use client`.\r\n return false;\r\n }\r\n\r\n return false;\r\n}\r\n\r\nfunction hasUseClientDirective(code: string) {\r\n return hasDirective(code, \"use client\");\r\n}\r\n\r\nfunction shouldTransform(id?: string) {\r\n if (!id) return false;\r\n\r\n const normalized = normalizeId(id);\r\n\r\n if (\r\n IGNORED_PATH_RE.test(normalized) ||\r\n normalized.includes(\"\\0\")\r\n ) return false;\r\n\r\n return SOURCE_EXT_RE.test(normalized);\r\n}\r\n\r\nfunction importsClientRenderer(code: string) {\r\n return /from\\s+[\"']react-dom\\/client[\"']/.test(code) ||\r\n /require\\(\\s*[\"']react-dom\\/client[\"']\\s*\\)/.test(code);\r\n}\r\n\r\nfunction isLikelyClientEntry(id: string) {\r\n const normalized = normalizeId(id);\r\n const file = normalized.split(\"/\").pop() ?? \"\";\r\n const stem = file.replace(SOURCE_EXT_RE, \"\");\r\n\r\n return [\r\n \"main\",\r\n \"index\",\r\n \"app\",\r\n \"_app\",\r\n \"root\",\r\n \"client\",\r\n \"entry-client\",\r\n \"entry.client\",\r\n ].includes(stem);\r\n}\r\n\r\nfunction shouldInjectRuntime(id: string | undefined, code: string, framework: string) {\r\n if (!id) return false;\r\n\r\n const normalized = normalizeId(id);\r\n\r\n if (framework === \"webpack\" || framework === \"rspack\") {\r\n return false;\r\n }\r\n\r\n if (\r\n normalized.endsWith(\"/pages/_app.tsx\") ||\r\n normalized.endsWith(\"/pages/_app.jsx\") ||\r\n normalized.endsWith(\"/pages/_app.js\")\r\n ) return true;\r\n\r\n if (\r\n normalized.endsWith(\"/app/layout.tsx\") ||\r\n normalized.endsWith(\"/app/layout.jsx\") ||\r\n normalized.endsWith(\"/app/page.tsx\") ||\r\n normalized.endsWith(\"/app/page.jsx\")\r\n ) {\r\n return hasUseClientDirective(code);\r\n }\r\n\r\n return hasUseClientDirective(code) ||\r\n importsClientRenderer(code) ||\r\n isLikelyClientEntry(normalized);\r\n}\r\n\r\nfunction getRuntimeImport(meta: { framework: string }) {\r\n if (meta.framework === \"vite\") {\r\n return `/@fs/${RUNTIME_PATH}`;\r\n }\r\n\r\n return RUNTIME_PATH;\r\n}\r\n\r\nfunction prependImport(value: unknown, id: string): unknown {\r\n if (typeof value === \"string\") {\r\n return value === id ? value : [id, value];\r\n }\r\n\r\n if (Array.isArray(value)) {\r\n return value.includes(id) ? value : [id, ...value];\r\n }\r\n\r\n if (value && typeof value === \"object\" && \"import\" in value) {\r\n return {\r\n ...value,\r\n import: prependImport((value as { import: unknown }).import, id),\r\n };\r\n }\r\n\r\n return value;\r\n}\r\n\r\nfunction injectWebpackEntry(\r\n compiler: { options: { name?: string; entry?: unknown } },\r\n id: string,\r\n) {\r\n const name = compiler.options.name?.toLowerCase() ?? \"\";\r\n\r\n if (name.includes(\"server\") || name.includes(\"edge\")) return;\r\n\r\n const originalEntry = compiler.options.entry;\r\n\r\n compiler.options.entry = async () => {\r\n const entry =\r\n typeof originalEntry === \"function\"\r\n ? await originalEntry()\r\n : originalEntry;\r\n\r\n if (typeof entry === \"string\" || Array.isArray(entry)) {\r\n return prependImport(entry, id);\r\n }\r\n\r\n if (entry && typeof entry === \"object\") {\r\n return Object.fromEntries(\r\n Object.entries(entry).map(([key, value]) => [\r\n key,\r\n prependImport(value, id),\r\n ]),\r\n );\r\n }\r\n\r\n return entry;\r\n };\r\n}\r\n\r\nfunction installOpenMiddleware(app: any) {\r\n app.use(\"/__open\", (req: any, res: any) => {\r\n let body = \"\";\r\n\r\n req.on(\"data\", (c: Buffer | string) => body += c);\r\n\r\n req.on(\"end\", () => {\r\n try {\r\n const { file, line, column } = JSON.parse(body);\r\n\r\n launch(`${file}:${line}:${column}`);\r\n\r\n res.statusCode = 204;\r\n res.end();\r\n } catch {\r\n res.statusCode = 400;\r\n res.end();\r\n }\r\n });\r\n },\r\n );\r\n}\r\n\r\nlet bridgePortPromise: Promise<number> | null = null;\r\n\r\nfunction getBridgeServerPort() {\r\n if (bridgePortPromise) return bridgePortPromise;\r\n\r\n bridgePortPromise = new Promise((resolve) => {\r\n const server = http.createServer((req, res) => {\r\n if (req.url === \"/__open\" && req.method === \"POST\") {\r\n let body = \"\";\r\n req.on(\"data\", (chunk) => (body += chunk));\r\n req.on(\"end\", () => {\r\n try {\r\n const { file, line, column } = JSON.parse(body);\r\n launch(`${file}:${line}:${column}`);\r\n res.statusCode = 204;\r\n res.end();\r\n } catch {\r\n res.statusCode = 400;\r\n res.end();\r\n }\r\n });\r\n } else {\r\n res.statusCode = 404;\r\n res.end();\r\n }\r\n });\r\n\r\n server.listen(0, \"127.0.0.1\", () => {\r\n const port = (server.address() as AddressInfo).port;\r\n resolve(port);\r\n });\r\n });\r\n\r\n return bridgePortPromise;\r\n}\r\n\r\nfunction injectWebpackDevServerOpenRoute(compiler: { options: { devServer?: any } }) {\r\n const devServer = compiler.options.devServer;\r\n\r\n if (!devServer || typeof devServer !== \"object\") return;\r\n\r\n const originalSetupMiddlewares = devServer.setupMiddlewares;\r\n\r\n devServer.setupMiddlewares = (middlewares: unknown[], server: { app?: any }) => {\r\n if (server.app) installOpenMiddleware(server.app);\r\n\r\n return typeof originalSetupMiddlewares === \"function\"\r\n ? originalSetupMiddlewares(middlewares, server)\r\n : middlewares;\r\n };\r\n}\r\n\r\ntype NextConfigLike = Record<string, any> & {\r\n turbopack?: Record<string, any> & {\r\n rules?: Record<string, any>;\r\n };\r\n webpack?: ((config: any, context: any) => any) | null;\r\n rewrites?: (() => Promise<any> | any) | any;\r\n};\n\nconst TURBOPACK_EXTENSIONS = [\"*.mjs\", \"*.js\", \"*.jsx\", \"*.ts\", \"*.tsx\"];\nconst TURBOPACK_LOADER = \"interactive-react-inspector/loader\";\n\nfunction appendTurbopackRule(existing: unknown, rule: unknown) {\n return Array.isArray(existing)\n ? [...existing, rule]\n : existing\n ? [existing, rule]\n : rule;\n}\n\nfunction getTurbopackCondition(extension: string) {\n if (extension !== \"*.js\") return { not: \"foreign\" };\n\n return {\n all: [\n { not: \"foreign\" },\n { path: /\\.js$/ },\n { not: { path: /\\.(?:jsx|ts|tsx)\\.js$/ } },\n ],\n };\n}\n\nfunction createTurbopackRules(existingRules: Record<string, any> = {}) {\n const rules = { ...existingRules };\n\n for (const extension of TURBOPACK_EXTENSIONS) {\n rules[extension] = appendTurbopackRule(rules[extension], {\n condition: getTurbopackCondition(extension),\n loaders: [\n {\n loader: TURBOPACK_LOADER,\n options: { runtime: true },\n },\n ],\n });\n }\n\n return rules;\n}\n\nconst Inspector = createUnplugin((_options, meta) => {\r\n if (process.env.NODE_ENV === \"production\") {\r\n return {\r\n name: \"react-inspector\",\r\n };\r\n }\r\n\r\n return {\r\n name: \"react-inspector\",\r\n enforce: \"pre\",\n\r\n resolveId(id) {\r\n if (id === VIRTUAL_ID) {\r\n return RESOLVED_ID;\r\n }\r\n },\r\n\r\n load(id) {\r\n if (id === RESOLVED_ID) {\r\n return `\r\n\"use client\";\r\nimport ${JSON.stringify(getRuntimeImport(meta))};\r\n`;\r\n }\r\n },\r\n\r\n transform(code, id) {\r\n if (!shouldTransform(id)) return;\r\n\r\n let result = sourceTransform(code, id);\r\n\r\n if (shouldInjectRuntime(id, code, meta.framework) && result) {\r\n result.code = injectSideEffectImport(result.code, VIRTUAL_ID);\n }\n\n return result;\n },\r\n\r\n vite: {\r\n configureServer(server) {\r\n installOpenMiddleware(server.middlewares);\r\n },\r\n },\r\n\r\n webpack(compiler) {\r\n injectWebpackEntry(compiler, getRuntimeImport(meta));\r\n injectWebpackDevServerOpenRoute(compiler);\r\n },\r\n };\r\n});\n\nfunction next<TConfig extends NextConfigLike>(config: TConfig = {} as TConfig) {\r\n if (process.env.NODE_ENV === \"production\") {\r\n return config;\r\n }\r\n\r\n const originalWebpack = config.webpack;\r\n\r\n return {\r\n ...config,\r\n turbopack: {\r\n ...config.turbopack,\r\n rules: createTurbopackRules(config.turbopack?.rules),\r\n },\r\n async rewrites() {\r\n const bridgePort = await getBridgeServerPort();\r\n const originalRewrites = typeof config.rewrites === \"function\"\r\n ? await config.rewrites()\r\n : config.rewrites;\r\n\r\n const inspectorRewrite = {\r\n source: \"/__open\",\r\n destination: `http://127.0.0.1:${bridgePort}/__open`,\r\n };\r\n\r\n if (Array.isArray(originalRewrites)) {\r\n return [...originalRewrites, inspectorRewrite];\r\n } else if (originalRewrites && typeof originalRewrites === \"object\") {\r\n return {\r\n ...originalRewrites,\r\n fallback: [...(originalRewrites.fallback || []), inspectorRewrite],\r\n };\r\n }\r\n\r\n return [inspectorRewrite];\r\n },\r\n webpack(webpackConfig: any, context: any) {\r\n const nextWebpackConfig = typeof originalWebpack === \"function\"\r\n ? originalWebpack(webpackConfig, context) ?? webpackConfig\r\n : webpackConfig;\r\n\r\n nextWebpackConfig.plugins ??= [];\r\n nextWebpackConfig.plugins.push(Inspector.webpack());\r\n\r\n return nextWebpackConfig;\r\n },\r\n };\r\n}\n\nexport { next };\n\nexport default Object.assign(Inspector, { next });\n","function getDirectiveInsertOffset(code: string) {\n let offset = 0;\n let insertOffset = 0;\n\n if (code.startsWith(\"#!\")) {\n const lineEnd = code.indexOf(\"\\n\");\n offset = lineEnd === -1 ? code.length : lineEnd + 1;\n insertOffset = offset;\n }\n\n while (offset < code.length) {\n const lineEnd = code.indexOf(\"\\n\", offset);\n const end = lineEnd === -1 ? code.length : lineEnd + 1;\n const line = code.slice(offset, end);\n const trimmed = line.trim();\n\n if (!trimmed || trimmed.startsWith(\"//\")) {\n offset = end;\n continue;\n }\n\n if (trimmed.startsWith(\"/*\")) {\n const blockEnd = code.indexOf(\"*/\", offset + 2);\n offset = blockEnd === -1 ? code.length : blockEnd + 2;\n if (code[offset] === \"\\r\") offset += 1;\n if (code[offset] === \"\\n\") offset += 1;\n continue;\n }\n\n if (/^(['\"])(.*?)\\1;?$/.test(trimmed)) {\n insertOffset = end;\n offset = end;\n continue;\n }\n\n break;\n }\n\n return insertOffset;\n}\n\nexport function injectSideEffectImport(code: string, id: string) {\n const statement = `import ${JSON.stringify(id)};`;\n\n if (code.includes(statement)) return code;\n\n const offset = getDirectiveInsertOffset(code);\n\n return `${code.slice(0, offset)}${statement}\\n${code.slice(offset)}`;\n}\n","import path from \"node:path\";\r\nimport { parse } from \"@babel/parser\";\r\nimport _traverse from \"@babel/traverse\";\r\nimport MagicString from \"magic-string\";\r\n\r\n// Unwrap the default export for ESM compatibility\r\nconst traverse = (_traverse as any).default || _traverse;\r\n\r\nconst ATTR = \"data-source\";\r\n\r\nfunction normalizeId(id: string) {\r\n return id.split(\"?\")[0].split(\"#\")[0].replace(/\\\\/g, \"/\");\r\n}\r\n\r\nfunction shouldTransform(id: string) {\r\n return /\\.(mjs|js|jsx|ts|tsx)$/.test(normalizeId(id));\r\n}\r\n\r\nfunction isInspectableElement(name: any) {\r\n if (name.type !== \"JSXIdentifier\") return false;\r\n const nameStr = name.name;\r\n return /^[a-z]/.test(nameStr) || nameStr === \"Image\" || nameStr === \"Link\";\r\n}\r\n\r\nexport function transform(code: string, id: string) {\r\n if (process.env.NODE_ENV === \"production\") return;\r\n\r\n const normalizedId = normalizeId(id);\r\n\r\n if (!shouldTransform(normalizedId)) return null;\r\n\r\n const s = new MagicString(code);\r\n\r\n let ast;\r\n\r\n try {\r\n ast = parse(code, {\r\n sourceType: \"unambiguous\",\r\n plugins: [\r\n \"jsx\",\r\n \"typescript\",\r\n \"decorators-legacy\",\r\n \"classProperties\",\r\n \"classPrivateProperties\",\r\n \"classPrivateMethods\",\r\n \"importAttributes\",\r\n ],\r\n });\r\n } catch {\r\n return null;\r\n }\r\n\r\n const relative = path.relative(\r\n process.cwd(),\r\n normalizedId,\r\n ).replaceAll(\"\\\\\", \"/\");\r\n\r\n traverse(ast, {\r\n JSXOpeningElement(p: { node: any; }) {\r\n const node = p.node;\r\n\r\n if (!node.loc) return;\r\n if (!isInspectableElement(node.name)) return;\r\n\r\n const exists = node.attributes.some(\r\n (a: { type: string; name: { name: string; }; }) =>\r\n a.type === \"JSXAttribute\"\r\n && a.name.name === ATTR,\r\n );\r\n\r\n if (exists) return;\r\n\r\n const insert = node.end! - (\r\n node.selfClosing\r\n ? 2\r\n : 1\r\n );\r\n\r\n const { line, column } = node.loc.start;\r\n\r\n s.prependLeft(\r\n insert,\r\n ` ${ATTR}=\"${relative}:${line}:${column}\"`,\r\n );\r\n },\r\n });\r\n\r\n return {\r\n code: s.toString(),\r\n map: s.generateMap(),\r\n }\r\n}\r\n"],"mappings":"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","names":["unplugin_exports","__export","unplugin_default","next","__toCommonJS","import_unplugin","import_node_path","import_node_url","import_launch_editor","import_node_http","import_node_fs","getDirectiveInsertOffset","code","offset","insertOffset","lineEnd","end","trimmed","blockEnd","injectSideEffectImport","id","statement","import_node_path","import_parser","import_traverse","import_magic_string","traverse","_traverse","ATTR","normalizeId","id","shouldTransform","isInspectableElement","name","nameStr","transform","code","normalizedId","s","MagicString","ast","relative","path","p","node","a","insert","line","column","import_meta","VIRTUAL_ID","RESOLVED_ID","SOURCE_EXT_RE","IGNORED_PATH_RE","normalizeId","id","currentFile","__dirname","path","RUNTIME_PATH","fs","hasDirective","code","directive","lines","inBlockComment","line","trimmed","hasUseClientDirective","shouldTransform","normalized","importsClientRenderer","isLikelyClientEntry","stem","shouldInjectRuntime","framework","getRuntimeImport","meta","prependImport","value","injectWebpackEntry","compiler","name","originalEntry","entry","key","installOpenMiddleware","app","req","res","body","c","file","column","launch","bridgePortPromise","getBridgeServerPort","resolve","server","http","chunk","port","injectWebpackDevServerOpenRoute","devServer","originalSetupMiddlewares","middlewares","TURBOPACK_EXTENSIONS","TURBOPACK_LOADER","appendTurbopackRule","existing","rule","getTurbopackCondition","extension","createTurbopackRules","existingRules","rules","Inspector","_options","result","transform","injectSideEffectImport","next","config","originalWebpack","bridgePort","originalRewrites","inspectorRewrite","webpackConfig","context","nextWebpackConfig","unplugin_default","Inspector","next"]}
package/dist/vite.js CHANGED
@@ -1,2 +1,2 @@
1
- import{a,b}from"./chunk-RY62FD45.js";import"./chunk-VI6QGAEY.js";export{b as default,a as next};
1
+ import{a,b}from"./chunk-PTKTPWXB.js";import"./chunk-VI6QGAEY.js";export{b as default,a as next};
2
2
  //# sourceMappingURL=vite.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "interactive-react-inspector",
3
- "version": "1.1.0",
3
+ "version": "1.2.0",
4
4
  "description": "React component inspector and source code jump utility",
5
5
  "author": "Jakub Sokol",
6
6
  "license": "MIT",
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/unplugin/index.ts"],"sourcesContent":["import { createUnplugin } from \"unplugin\";\r\nimport path from \"node:path\";\r\nimport { fileURLToPath } from \"node:url\";\r\nimport launch from \"launch-editor\";\r\nimport http from \"node:http\";\r\nimport type { AddressInfo } from \"node:net\";\r\n\r\nimport fs from \"node:fs\";\n\nimport { injectSideEffectImport } from \"../core/imports.ts\";\nimport { transform as sourceTransform } from \"../core/transform.ts\";\n\r\nconst VIRTUAL_ID = \"virtual:react-inspector\";\r\nconst RESOLVED_ID = \"\\0\" + VIRTUAL_ID;\r\nconst SOURCE_EXT_RE = /\\.(mjs|js|jsx|ts|tsx)$/;\r\nconst IGNORED_PATH_RE = /\\/(node_modules|dist|build|coverage|\\.next|\\.nuxt|\\.svelte-kit|\\.output|\\.astro)\\//;\r\n\r\nfunction normalizeId(id?: string) {\r\n if (!id) return \"\";\r\n\r\n // Strip query/hash and normalize Windows paths for consistent matching.\r\n const cleaned = id.split(\"?\")[0].split(\"#\")[0];\r\n return cleaned.replace(/\\\\/g, \"/\");\r\n}\r\n\r\nconst currentFile = typeof __filename === \"string\"\n ? __filename\n : fileURLToPath(import.meta.url);\nconst __dirname = path.dirname(currentFile);\nconst RUNTIME_PATH = normalizeId(\n fs.existsSync(path.resolve(__dirname, \"../runtime/install.ts\"))\r\n ? path.resolve(__dirname, \"../runtime/install.ts\")\r\n : path.resolve(__dirname, \"./runtime.js\"),\r\n);\r\n\r\nfunction hasDirective(code: string, directive: string) {\r\n const lines = code.split(/\\r?\\n/);\r\n let inBlockComment = false;\r\n\r\n for (const line of lines) {\r\n const trimmed = line.trim();\r\n\r\n if (!trimmed) continue;\r\n\r\n if (inBlockComment) {\r\n if (trimmed.includes(\"*/\")) inBlockComment = false;\r\n continue;\r\n }\r\n\r\n if (trimmed.startsWith(\"/*\")) {\r\n if (!trimmed.includes(\"*/\")) inBlockComment = true;\r\n continue;\r\n }\r\n\r\n if (trimmed.startsWith(\"//\")) continue;\r\n\r\n const match = trimmed.match(/^(['\"])(.+)\\1;?$/);\r\n\r\n if (match?.[2] === directive) return true;\r\n\r\n // First non-directive statement means no `use client`.\r\n return false;\r\n }\r\n\r\n return false;\r\n}\r\n\r\nfunction hasUseClientDirective(code: string) {\r\n return hasDirective(code, \"use client\");\r\n}\r\n\r\nfunction shouldTransform(id?: string) {\r\n if (!id) return false;\r\n\r\n const normalized = normalizeId(id);\r\n\r\n if (\r\n IGNORED_PATH_RE.test(normalized) ||\r\n normalized.includes(\"\\0\")\r\n ) return false;\r\n\r\n return SOURCE_EXT_RE.test(normalized);\r\n}\r\n\r\nfunction importsClientRenderer(code: string) {\r\n return /from\\s+[\"']react-dom\\/client[\"']/.test(code) ||\r\n /require\\(\\s*[\"']react-dom\\/client[\"']\\s*\\)/.test(code);\r\n}\r\n\r\nfunction isLikelyClientEntry(id: string) {\r\n const normalized = normalizeId(id);\r\n const file = normalized.split(\"/\").pop() ?? \"\";\r\n const stem = file.replace(SOURCE_EXT_RE, \"\");\r\n\r\n return [\r\n \"main\",\r\n \"index\",\r\n \"app\",\r\n \"_app\",\r\n \"root\",\r\n \"client\",\r\n \"entry-client\",\r\n \"entry.client\",\r\n ].includes(stem);\r\n}\r\n\r\nfunction shouldInjectRuntime(id: string | undefined, code: string, framework: string) {\r\n if (!id) return false;\r\n\r\n const normalized = normalizeId(id);\r\n\r\n if (framework === \"webpack\" || framework === \"rspack\") {\r\n return false;\r\n }\r\n\r\n if (\r\n normalized.endsWith(\"/pages/_app.tsx\") ||\r\n normalized.endsWith(\"/pages/_app.jsx\") ||\r\n normalized.endsWith(\"/pages/_app.js\")\r\n ) return true;\r\n\r\n if (\r\n normalized.endsWith(\"/app/layout.tsx\") ||\r\n normalized.endsWith(\"/app/layout.jsx\") ||\r\n normalized.endsWith(\"/app/page.tsx\") ||\r\n normalized.endsWith(\"/app/page.jsx\")\r\n ) {\r\n return hasUseClientDirective(code);\r\n }\r\n\r\n return hasUseClientDirective(code) ||\r\n importsClientRenderer(code) ||\r\n isLikelyClientEntry(normalized);\r\n}\r\n\r\nfunction getRuntimeImport(meta: { framework: string }) {\r\n if (meta.framework === \"vite\") {\r\n return `/@fs/${RUNTIME_PATH}`;\r\n }\r\n\r\n return RUNTIME_PATH;\r\n}\r\n\r\nfunction prependImport(value: unknown, id: string): unknown {\r\n if (typeof value === \"string\") {\r\n return value === id ? value : [id, value];\r\n }\r\n\r\n if (Array.isArray(value)) {\r\n return value.includes(id) ? value : [id, ...value];\r\n }\r\n\r\n if (value && typeof value === \"object\" && \"import\" in value) {\r\n return {\r\n ...value,\r\n import: prependImport((value as { import: unknown }).import, id),\r\n };\r\n }\r\n\r\n return value;\r\n}\r\n\r\nfunction injectWebpackEntry(\r\n compiler: { options: { name?: string; entry?: unknown } },\r\n id: string,\r\n) {\r\n const name = compiler.options.name?.toLowerCase() ?? \"\";\r\n\r\n if (name.includes(\"server\") || name.includes(\"edge\")) return;\r\n\r\n const originalEntry = compiler.options.entry;\r\n\r\n compiler.options.entry = async () => {\r\n const entry =\r\n typeof originalEntry === \"function\"\r\n ? await originalEntry()\r\n : originalEntry;\r\n\r\n if (typeof entry === \"string\" || Array.isArray(entry)) {\r\n return prependImport(entry, id);\r\n }\r\n\r\n if (entry && typeof entry === \"object\") {\r\n return Object.fromEntries(\r\n Object.entries(entry).map(([key, value]) => [\r\n key,\r\n prependImport(value, id),\r\n ]),\r\n );\r\n }\r\n\r\n return entry;\r\n };\r\n}\r\n\r\nfunction installOpenMiddleware(app: any) {\r\n app.use(\"/__open\", (req: any, res: any) => {\r\n let body = \"\";\r\n\r\n req.on(\"data\", (c: Buffer | string) => body += c);\r\n\r\n req.on(\"end\", () => {\r\n try {\r\n const { file, line, column } = JSON.parse(body);\r\n\r\n launch(`${file}:${line}:${column}`);\r\n\r\n res.statusCode = 204;\r\n res.end();\r\n } catch {\r\n res.statusCode = 400;\r\n res.end();\r\n }\r\n });\r\n },\r\n );\r\n}\r\n\r\nlet bridgePortPromise: Promise<number> | null = null;\r\n\r\nfunction getBridgeServerPort() {\r\n if (bridgePortPromise) return bridgePortPromise;\r\n\r\n bridgePortPromise = new Promise((resolve) => {\r\n const server = http.createServer((req, res) => {\r\n if (req.url === \"/__open\" && req.method === \"POST\") {\r\n let body = \"\";\r\n req.on(\"data\", (chunk) => (body += chunk));\r\n req.on(\"end\", () => {\r\n try {\r\n const { file, line, column } = JSON.parse(body);\r\n launch(`${file}:${line}:${column}`);\r\n res.statusCode = 204;\r\n res.end();\r\n } catch {\r\n res.statusCode = 400;\r\n res.end();\r\n }\r\n });\r\n } else {\r\n res.statusCode = 404;\r\n res.end();\r\n }\r\n });\r\n\r\n server.listen(0, \"127.0.0.1\", () => {\r\n const port = (server.address() as AddressInfo).port;\r\n resolve(port);\r\n });\r\n });\r\n\r\n return bridgePortPromise;\r\n}\r\n\r\nfunction injectWebpackDevServerOpenRoute(compiler: { options: { devServer?: any } }) {\r\n const devServer = compiler.options.devServer;\r\n\r\n if (!devServer || typeof devServer !== \"object\") return;\r\n\r\n const originalSetupMiddlewares = devServer.setupMiddlewares;\r\n\r\n devServer.setupMiddlewares = (middlewares: unknown[], server: { app?: any }) => {\r\n if (server.app) installOpenMiddleware(server.app);\r\n\r\n return typeof originalSetupMiddlewares === \"function\"\r\n ? originalSetupMiddlewares(middlewares, server)\r\n : middlewares;\r\n };\r\n}\r\n\r\ntype NextConfigLike = Record<string, any> & {\r\n turbopack?: Record<string, any> & {\r\n rules?: Record<string, any>;\r\n };\r\n webpack?: ((config: any, context: any) => any) | null;\r\n rewrites?: (() => Promise<any> | any) | any;\r\n};\n\nconst TURBOPACK_EXTENSIONS = [\"*.mjs\", \"*.js\", \"*.jsx\", \"*.ts\", \"*.tsx\"];\nconst TURBOPACK_LOADER = \"interactive-react-inspector/loader\";\n\nfunction appendTurbopackRule(existing: unknown, rule: unknown) {\n return Array.isArray(existing)\n ? [...existing, rule]\n : existing\n ? [existing, rule]\n : rule;\n}\n\nfunction getTurbopackCondition(extension: string) {\n if (extension !== \"*.js\") return { not: \"foreign\" };\n\n return {\n all: [\n { not: \"foreign\" },\n { path: /\\.js$/ },\n { not: { path: /\\.(?:jsx|ts|tsx)\\.js$/ } },\n ],\n };\n}\n\nfunction createTurbopackRules(existingRules: Record<string, any> = {}) {\n const rules = { ...existingRules };\n\n for (const extension of TURBOPACK_EXTENSIONS) {\n rules[extension] = appendTurbopackRule(rules[extension], {\n condition: getTurbopackCondition(extension),\n loaders: [\n {\n loader: TURBOPACK_LOADER,\n options: { runtime: true },\n },\n ],\n });\n }\n\n return rules;\n}\n\nconst Inspector = createUnplugin((_options, meta) => ({\n name: \"react-inspector\",\r\n enforce: \"pre\",\r\n\r\n resolveId(id) {\r\n if (id === VIRTUAL_ID) {\r\n return RESOLVED_ID;\r\n }\r\n },\r\n\r\n load(id) {\r\n if (id === RESOLVED_ID) {\r\n return `\r\n\"use client\";\r\nimport ${JSON.stringify(getRuntimeImport(meta))};\r\n`;\r\n }\r\n },\r\n\r\n transform(code, id) {\r\n if (!shouldTransform(id)) return;\r\n\r\n let result = sourceTransform(code, id);\r\n\r\n if (shouldInjectRuntime(id, code, meta.framework) && result) {\r\n result.code = injectSideEffectImport(result.code, VIRTUAL_ID);\n }\n\n return result;\n },\r\n\r\n vite: {\r\n configureServer(server) {\r\n installOpenMiddleware(server.middlewares);\r\n },\r\n },\r\n\r\n webpack(compiler) {\r\n injectWebpackEntry(compiler, getRuntimeImport(meta));\r\n injectWebpackDevServerOpenRoute(compiler);\r\n },\r\n}));\n\nfunction next<TConfig extends NextConfigLike>(config: TConfig = {} as TConfig) {\r\n const originalWebpack = config.webpack;\r\n\r\n return {\r\n ...config,\r\n turbopack: {\r\n ...config.turbopack,\r\n rules: createTurbopackRules(config.turbopack?.rules),\r\n },\r\n async rewrites() {\r\n const bridgePort = await getBridgeServerPort();\r\n const originalRewrites = typeof config.rewrites === \"function\"\r\n ? await config.rewrites()\r\n : config.rewrites;\r\n\r\n const inspectorRewrite = {\r\n source: \"/__open\",\r\n destination: `http://127.0.0.1:${bridgePort}/__open`,\r\n };\r\n\r\n if (Array.isArray(originalRewrites)) {\r\n return [...originalRewrites, inspectorRewrite];\r\n } else if (originalRewrites && typeof originalRewrites === \"object\") {\r\n return {\r\n ...originalRewrites,\r\n fallback: [...(originalRewrites.fallback || []), inspectorRewrite],\r\n };\r\n }\r\n\r\n return [inspectorRewrite];\r\n },\r\n webpack(webpackConfig: any, context: any) {\r\n const nextWebpackConfig = typeof originalWebpack === \"function\"\r\n ? originalWebpack(webpackConfig, context) ?? webpackConfig\r\n : webpackConfig;\r\n\r\n nextWebpackConfig.plugins ??= [];\r\n nextWebpackConfig.plugins.push(Inspector.webpack());\r\n\r\n return nextWebpackConfig;\r\n },\r\n };\r\n}\n\nexport { next };\n\nexport default Object.assign(Inspector, { next });\n"],"mappings":"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","names":["createUnplugin","path","fileURLToPath","launch","http","fs","VIRTUAL_ID","RESOLVED_ID","SOURCE_EXT_RE","IGNORED_PATH_RE","normalizeId","id","currentFile","fileURLToPath","__dirname","path","RUNTIME_PATH","fs","hasDirective","code","directive","lines","inBlockComment","line","trimmed","hasUseClientDirective","shouldTransform","normalized","importsClientRenderer","isLikelyClientEntry","stem","shouldInjectRuntime","framework","getRuntimeImport","meta","prependImport","value","injectWebpackEntry","compiler","name","originalEntry","entry","key","installOpenMiddleware","app","req","res","body","c","file","column","launch","bridgePortPromise","getBridgeServerPort","resolve","server","http","chunk","port","injectWebpackDevServerOpenRoute","devServer","originalSetupMiddlewares","middlewares","TURBOPACK_EXTENSIONS","TURBOPACK_LOADER","appendTurbopackRule","existing","rule","getTurbopackCondition","extension","createTurbopackRules","existingRules","rules","Inspector","createUnplugin","_options","result","transform","injectSideEffectImport","next","config","originalWebpack","bridgePort","originalRewrites","inspectorRewrite","webpackConfig","context","nextWebpackConfig","unplugin_default","Inspector","next"]}