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.
- package/dist/{chunk-RY62FD45.js → chunk-PTKTPWXB.js} +4 -4
- package/dist/chunk-PTKTPWXB.js.map +1 -0
- package/dist/index.cjs +4 -4
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -9
- package/dist/index.d.ts +1 -9
- package/dist/index.js +1 -1
- package/dist/runtime.cjs +3 -2
- package/dist/runtime.cjs.map +1 -1
- package/dist/runtime.js +3 -2
- package/dist/runtime.js.map +1 -1
- package/dist/vite.cjs +4 -4
- package/dist/vite.cjs.map +1 -1
- package/dist/vite.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-RY62FD45.js.map +0 -1
|
@@ -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
|
|
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(
|
|
4
|
-
`},transform(e,r){if(!I(r))return;let o=m(e,r);return
|
|
5
|
-
//# sourceMappingURL=chunk-
|
|
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":"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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"]}
|
package/dist/index.cjs
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
"use strict";var J=Object.create;var
|
|
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
|
|
5
|
-
${t.slice(r)}`}var
|
|
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=
|
|
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
|
package/dist/index.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/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-
|
|
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
|
|
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
|
-
`,
|
|
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
|
package/dist/runtime.cjs.map
CHANGED
|
@@ -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
|
|
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
|
-
`,
|
|
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
|
package/dist/runtime.js.map
CHANGED
|
@@ -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":"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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","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
|
|
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
|
|
5
|
-
${t.slice(r)}`}var
|
|
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=
|
|
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":"0jBAAA,IAAAA,GAAA,GAAAC,EAAAD,GAAA,aAAAE,GAAA,SAAAC,IAAA,eAAAC,EAAAJ,IAAA,IAAAK,EAA+B,oBAC/BC,EAAiB,qBACjBC,EAA8B,eAC9BC,EAAmB,8BACnBC,EAAiB,qBAGjBC,EAAe,mBCPf,SAASC,EAAyBC,EAAc,CAC5C,IAAIC,EAAS,EACTC,EAAe,EAEnB,GAAIF,EAAK,WAAW,IAAI,EAAG,CACvB,IAAMG,EAAUH,EAAK,QAAQ;AAAA,CAAI,EACjCC,EAASE,IAAY,GAAKH,EAAK,OAASG,EAAU,EAClDD,EAAeD,CACnB,CAEA,KAAOA,EAASD,EAAK,QAAQ,CACzB,IAAMG,EAAUH,EAAK,QAAQ;AAAA,EAAMC,CAAM,EACnCG,EAAMD,IAAY,GAAKH,EAAK,OAASG,EAAU,EAE/CE,EADOL,EAAK,MAAMC,EAAQG,CAAG,EACd,KAAK,EAE1B,GAAI,CAACC,GAAWA,EAAQ,WAAW,IAAI,EAAG,CACtCJ,EAASG,EACT,QACJ,CAEA,GAAIC,EAAQ,WAAW,IAAI,EAAG,CAC1B,IAAMC,EAAWN,EAAK,QAAQ,KAAMC,EAAS,CAAC,EAC9CA,EAASK,IAAa,GAAKN,EAAK,OAASM,EAAW,EAChDN,EAAKC,CAAM,IAAM,OAAMA,GAAU,GACjCD,EAAKC,CAAM,IAAM;AAAA,IAAMA,GAAU,GACrC,QACJ,CAEA,GAAI,oBAAoB,KAAKI,CAAO,EAAG,CACnCH,EAAeE,EACfH,EAASG,EACT,QACJ,CAEA,KACJ,CAEA,OAAOF,CACX,CAEO,SAASK,EAAuBP,EAAcQ,EAAY,CAC7D,IAAMC,EAAY,UAAU,KAAK,UAAUD,CAAE,CAAC,IAE9C,GAAIR,EAAK,SAASS,CAAS,EAAG,OAAOT,EAErC,IAAMC,EAASF,EAAyBC,CAAI,EAE5C,MAAO,GAAGA,EAAK,MAAM,EAAGC,CAAM,CAAC,GAAGQ,CAAS;AAAA,EAAKT,EAAK,MAAMC,CAAM,CAAC,EACtE,CCjDA,IAAAS,EAAiB,qBACjBC,EAAsB,yBACtBC,EAAsB,gCACtBC,EAAwB,6BAGlBC,EAAY,EAAAC,QAAkB,SAAW,EAAAA,QAEzCC,EAAO,cAEb,SAASC,EAAYC,EAAY,CAC7B,OAAOA,EAAG,MAAM,GAAG,EAAE,CAAC,EAAE,MAAM,GAAG,EAAE,CAAC,EAAE,QAAQ,MAAO,GAAG,CAC5D,CAEA,SAASC,EAAgBD,EAAY,CACjC,MAAO,yBAAyB,KAAKD,EAAYC,CAAE,CAAC,CACxD,CAEA,SAASE,EAAqBC,EAAW,CACrC,GAAIA,EAAK,OAAS,gBAAiB,MAAO,GAC1C,IAAMC,EAAUD,EAAK,KACrB,MAAO,SAAS,KAAKC,CAAO,GAAKA,IAAY,SAAWA,IAAY,MACxE,CAEO,SAASC,EAAUC,EAAcN,EAAY,CAChD,GAAI,QAAQ,IAAI,WAAa,aAAc,OAE3C,IAAMO,EAAeR,EAAYC,CAAE,EAEnC,GAAI,CAACC,EAAgBM,CAAY,EAAG,OAAO,KAE3C,IAAMC,EAAI,IAAI,EAAAC,QAAYH,CAAI,EAE1BI,EAEJ,GAAI,CACAA,KAAM,SAAMJ,EAAM,CACd,WAAY,cACZ,QAAS,CACL,MACA,aACA,oBACA,kBACA,yBACA,sBACA,kBACJ,CACJ,CAAC,CACL,MAAQ,CACJ,OAAO,IACX,CAEA,IAAMK,EAAW,EAAAC,QAAK,SAClB,QAAQ,IAAI,EACZL,CACJ,EAAE,WAAW,KAAM,GAAG,EAEtB,OAAAX,EAASc,EAAK,CACV,kBAAkBG,EAAmB,CACjC,IAAMC,EAAOD,EAAE,KAWf,GATI,CAACC,EAAK,KACN,CAACZ,EAAqBY,EAAK,IAAI,GAEpBA,EAAK,WAAW,KAC1BC,GACGA,EAAE,OAAS,gBACRA,EAAE,KAAK,OAASjB,CAC3B,EAEY,OAEZ,IAAMkB,EAASF,EAAK,KAChBA,EAAK,YACC,EACA,GAGJ,CAAE,KAAAG,EAAM,OAAAC,CAAO,EAAIJ,EAAK,IAAI,MAElCN,EAAE,YACEQ,EACA,IAAIlB,CAAI,KAAKa,CAAQ,IAAIM,CAAI,IAAIC,CAAM,GAC3C,CACJ,CACJ,CAAC,EAEM,CACH,KAAMV,EAAE,SAAS,EACjB,IAAKA,EAAE,YAAY,CACvB,CACJ,CF3FA,IAAAW,GAAA,GAYMC,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,GAAc,OAAO,YAAe,SACpC,cACA,iBAAcP,GAAY,GAAG,EAC7BQ,EAAY,EAAAC,QAAK,QAAQF,EAAW,EACpCG,EAAeL,EACjB,EAAAM,QAAG,WAAW,EAAAF,QAAK,QAAQD,EAAW,uBAAuB,CAAC,EACxD,EAAAC,QAAK,QAAQD,EAAW,uBAAuB,EAC/C,EAAAC,QAAK,QAAQD,EAAW,cAAc,CAChD,EAEA,SAASI,GAAaC,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,GAAaC,EAAM,YAAY,CAC1C,CAEA,SAASO,GAAgBd,EAAa,CAClC,GAAI,CAACA,EAAI,MAAO,GAEhB,IAAMe,EAAahB,EAAYC,CAAE,EAEjC,OACIF,EAAgB,KAAKiB,CAAU,GAC/BA,EAAW,SAAS,IAAI,EACnB,GAEFlB,EAAc,KAAKkB,CAAU,CACxC,CAEA,SAASC,GAAsBT,EAAc,CACzC,MAAO,mCAAmC,KAAKA,CAAI,GAC/C,6CAA6C,KAAKA,CAAI,CAC9D,CAEA,SAASU,GAAoBjB,EAAY,CAGrC,IAAMkB,GAFanB,EAAYC,CAAE,EACT,MAAM,GAAG,EAAE,IAAI,GAAK,IAC1B,QAAQH,EAAe,EAAE,EAE3C,MAAO,CACH,OACA,QACA,MACA,OACA,OACA,SACA,eACA,cACJ,EAAE,SAASqB,CAAI,CACnB,CAEA,SAASC,GAAoBnB,EAAwBO,EAAca,EAAmB,CAClF,GAAI,CAACpB,EAAI,MAAO,GAEhB,IAAMe,EAAahB,EAAYC,CAAE,EAEjC,OAAIoB,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,GAAsBT,CAAI,GAC1BU,GAAoBF,CAAU,CACtC,CAEA,SAASM,EAAiBC,EAA6B,CACnD,OAAIA,EAAK,YAAc,OACZ,QAAQlB,CAAY,GAGxBA,CACX,CAEA,SAASmB,EAAcC,EAAgBxB,EAAqB,CACxD,OAAI,OAAOwB,GAAU,SACVA,IAAUxB,EAAKwB,EAAQ,CAACxB,EAAIwB,CAAK,EAGxC,MAAM,QAAQA,CAAK,EACZA,EAAM,SAASxB,CAAE,EAAIwB,EAAQ,CAACxB,EAAI,GAAGwB,CAAK,EAGjDA,GAAS,OAAOA,GAAU,UAAY,WAAYA,EAC3C,CACH,GAAGA,EACH,OAAQD,EAAeC,EAA8B,OAAQxB,CAAE,CACnE,EAGGwB,CACX,CAEA,SAASC,GACLC,EACA1B,EACF,CACE,IAAM2B,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,EAAO7B,CAAE,EAG9B6B,GAAS,OAAOA,GAAU,SACnB,OAAO,YACV,OAAO,QAAQA,CAAK,EAAE,IAAI,CAAC,CAACC,EAAKN,CAAK,IAAM,CACxCM,EACAP,EAAcC,EAAOxB,CAAE,CAC3B,CAAC,CACL,EAGG6B,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,KAE9C,EAAAI,SAAO,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,IAAsB,CAC3B,OAAID,IAEJA,EAAoB,IAAI,QAASE,GAAY,CACzC,IAAMC,EAAS,EAAAC,QAAK,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,KAC9C,EAAAI,SAAO,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,GAAgCrB,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,GAAuB,CAAC,QAAS,OAAQ,QAAS,OAAQ,OAAO,EACjEC,GAAmB,qCAEzB,SAASC,GAAoBC,EAAmBC,EAAe,CAC3D,OAAO,MAAM,QAAQD,CAAQ,EACvB,CAAC,GAAGA,EAAUC,CAAI,EAClBD,EACI,CAACA,EAAUC,CAAI,EACfA,CACd,CAEA,SAASC,GAAsBC,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,GAAqBC,EAAqC,CAAC,EAAG,CACnE,IAAMC,EAAQ,CAAE,GAAGD,CAAc,EAEjC,QAAWF,KAAaN,GACpBS,EAAMH,CAAS,EAAIJ,GAAoBO,EAAMH,CAAS,EAAG,CACrD,UAAWD,GAAsBC,CAAS,EAC1C,QAAS,CACL,CACI,OAAQL,GACR,QAAS,CAAE,QAAS,EAAK,CAC7B,CACJ,CACJ,CAAC,EAGL,OAAOQ,CACX,CAEA,IAAMC,KAAY,kBAAe,CAACC,EAAUxC,KAAU,CAClD,KAAM,kBACN,QAAS,MAET,UAAUtB,EAAI,CACV,GAAIA,IAAOL,EACP,OAAOC,CAEf,EAEA,KAAKI,EAAI,CACL,GAAIA,IAAOJ,EACP,MAAO;AAAA;AAAA,SAEV,KAAK,UAAUyB,EAAiBC,CAAI,CAAC,CAAC;AAAA,CAG3C,EAEA,UAAUf,EAAMP,EAAI,CAChB,GAAI,CAACc,GAAgBd,CAAE,EAAG,OAE1B,IAAI+D,EAASC,EAAgBzD,EAAMP,CAAE,EAErC,OAAImB,GAAoBnB,EAAIO,EAAMe,EAAK,SAAS,GAAKyC,IACjDA,EAAO,KAAOE,EAAuBF,EAAO,KAAMpE,CAAU,GAGzDoE,CACX,EAEA,KAAM,CACF,gBAAgBpB,EAAQ,CACpBZ,EAAsBY,EAAO,WAAW,CAC5C,CACJ,EAEA,QAAQjB,EAAU,CACdD,GAAmBC,EAAUL,EAAiBC,CAAI,CAAC,EACnDyB,GAAgCrB,CAAQ,CAC5C,CACJ,EAAE,EAEF,SAASwC,EAAqCC,EAAkB,CAAC,EAAc,CAC3E,IAAMC,EAAkBD,EAAO,QAE/B,MAAO,CACH,GAAGA,EACH,UAAW,CACP,GAAGA,EAAO,UACV,MAAOT,GAAqBS,EAAO,WAAW,KAAK,CACvD,EACA,MAAM,UAAW,CACb,IAAME,EAAa,MAAM5B,GAAoB,EACvC6B,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,KAAKb,EAAU,QAAQ,CAAC,EAE3Ca,CACX,CACJ,CACJ,CAIA,IAAOC,GAAQ,OAAO,OAAOC,EAAW,CAAE,KAAAC,CAAK,CAAC","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-
|
|
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 +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"]}
|