react-code-locator 0.1.12 → 0.1.14
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/README.md +9 -0
- package/dist/babel.cjs +6 -5
- package/dist/babel.cjs.map +1 -1
- package/dist/babel.d.cts +2 -2
- package/dist/babel.d.ts +2 -2
- package/dist/babel.js +6 -5
- package/dist/babel.js.map +1 -1
- package/dist/babelInjectComponentSource.cjs +0 -3
- package/dist/babelInjectComponentSource.cjs.map +1 -1
- package/dist/babelInjectComponentSource.d.cts +1 -1
- package/dist/babelInjectComponentSource.d.ts +1 -1
- package/dist/babelInjectComponentSource.js +0 -3
- package/dist/babelInjectComponentSource.js.map +1 -1
- package/dist/client.cjs +0 -3
- package/dist/client.cjs.map +1 -1
- package/dist/client.d.cts +15 -1
- package/dist/client.d.ts +15 -1
- package/dist/client.js +0 -3
- package/dist/client.js.map +1 -1
- package/dist/esbuild.cjs +8 -7
- package/dist/esbuild.cjs.map +1 -1
- package/dist/esbuild.d.cts +1 -1
- package/dist/esbuild.d.ts +1 -1
- package/dist/esbuild.js +8 -7
- package/dist/esbuild.js.map +1 -1
- package/dist/index.cjs +2 -670
- 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 -657
- package/dist/index.js.map +1 -1
- package/dist/{sourceAdapter-DLWo_ABo.d.cts → sourceAdapter-dPr5CgLi.d.cts} +1 -2
- package/dist/{sourceAdapter-DLWo_ABo.d.ts → sourceAdapter-dPr5CgLi.d.ts} +1 -2
- package/dist/swc.cjs +8 -7
- package/dist/swc.cjs.map +1 -1
- package/dist/swc.d.cts +1 -1
- package/dist/swc.d.ts +1 -1
- package/dist/swc.js +8 -7
- package/dist/swc.js.map +1 -1
- package/dist/vite.cjs +11 -7
- package/dist/vite.cjs.map +1 -1
- package/dist/vite.d.cts +3 -3
- package/dist/vite.d.ts +3 -3
- package/dist/vite.js +11 -7
- package/dist/vite.js.map +1 -1
- package/dist/webpackRuntimeEntry.cjs +0 -3
- package/dist/webpackRuntimeEntry.cjs.map +1 -1
- package/dist/webpackRuntimeEntry.js +0 -3
- package/dist/webpackRuntimeEntry.js.map +1 -1
- package/package.json +1 -1
- package/dist/client-sm5wi0uT.d.cts +0 -15
- package/dist/client-sm5wi0uT.d.ts +0 -15
package/dist/esbuild.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/esbuild.ts","../src/sourceAdapter.ts","../src/sourceTransform.ts","../src/babelInjectComponentSource.ts","../src/constants.ts","../src/sourceMetadata.ts"],"sourcesContent":["import { readFile } from \"node:fs/promises\";\nimport { defineSourceAdapter, type SourceInjectionOptions } from \"./sourceAdapter\";\nimport { transformSourceWithLocator } from \"./sourceTransform\";\n\ntype EsbuildOnLoadResult = {\n contents: string;\n loader: \"js\" | \"jsx\" | \"ts\" | \"tsx\";\n};\n\ntype EsbuildPluginBuild = {\n onLoad: (\n options: { filter: RegExp },\n callback: (args: { path: string }) => Promise<EsbuildOnLoadResult | null>,\n ) => void;\n};\n\nexport type EsbuildPlugin = {\n name: string;\n setup: (build: EsbuildPluginBuild) => void;\n};\n\nexport type EsbuildSourceAdapterConfig = {\n plugins: EsbuildPlugin[];\n};\n\nfunction getEsbuildLoader(filename: string): EsbuildOnLoadResult[\"loader\"] {\n if (filename.endsWith(\".tsx\")) {\n return \"tsx\";\n }\n\n if (filename.endsWith(\".ts\")) {\n return \"ts\";\n }\n\n if (filename.endsWith(\".jsx\")) {\n return \"jsx\";\n }\n\n return \"js\";\n}\n\nexport function esbuildSourceTransformPlugin(\n options: SourceInjectionOptions = {},\n): EsbuildPlugin {\n return {\n name: \"react-code-locator-source-transform\",\n setup(build) {\n build.onLoad({ filter: /\\.[mc]?[jt]sx?$/ }, async ({ path }) => {\n if (path.includes(\"/node_modules/\")) {\n return null;\n }\n\n const code = await readFile(path, \"utf8\");\n const result = await transformSourceWithLocator(code, {\n filename: path,\n ...options,\n });\n\n return {\n contents: result.code,\n loader: getEsbuildLoader(path),\n };\n });\n },\n };\n}\n\nexport function createEsbuildSourceAdapter(options: SourceInjectionOptions = {}) {\n return defineSourceAdapter<EsbuildSourceAdapterConfig>({\n kind: \"esbuild\",\n name: \"react-code-locator/esbuild\",\n options,\n config: {\n plugins: [esbuildSourceTransformPlugin(options)],\n },\n });\n}\n\nexport const esbuildSourceAdapter = createEsbuildSourceAdapter();\n","export type SourceInjectionOptions = {\n injectJsxSource?: boolean;\n injectComponentSource?: boolean;\n projectRoot?: string;\n};\n\nexport type SourceAdapterKind = \"babel\" | \"vite\" | \"esbuild\" | \"swc\";\n\nexport type SourceAdapterDescriptor<TConfig = unknown, TOptions = SourceInjectionOptions> = {\n kind: SourceAdapterKind;\n name: string;\n options: TOptions;\n config: TConfig;\n};\n\nexport function defineSourceAdapter<TConfig = unknown, TOptions = SourceInjectionOptions>(\n descriptor: SourceAdapterDescriptor<TConfig, TOptions>,\n) {\n return descriptor;\n}\n","import { transformAsync } from \"@babel/core\";\nimport { babelInjectComponentSource, type BabelInjectComponentSourceOptions } from \"./babelInjectComponentSource\";\n\nexport type SourceTransformOptions = BabelInjectComponentSourceOptions & {\n filename: string;\n sourceMaps?: boolean;\n};\n\nexport async function transformSourceWithLocator(\n code: string,\n options: SourceTransformOptions,\n) {\n const { filename, sourceMaps = true, ...pluginOptions } = options;\n const result = await transformAsync(code, {\n filename,\n babelrc: false,\n configFile: false,\n sourceMaps,\n parserOpts: {\n sourceType: \"module\",\n plugins: [\"jsx\", \"typescript\"],\n },\n generatorOpts: {\n retainLines: true,\n },\n plugins: [[babelInjectComponentSource, pluginOptions]],\n });\n\n return {\n code: result?.code ?? code,\n map: result?.map ?? null,\n };\n}\n","import { types as t, type NodePath, type PluginObj } from \"@babel/core\";\nimport {\n JSX_SOURCE_PROP,\n JSX_SOURCE_REGISTRY_SYMBOL,\n SOURCE_PROP,\n} from \"./constants\";\nimport type { SourceInjectionOptions } from \"./sourceAdapter\";\nimport {\n isExternalToProjectRoot,\n toRelativeSource,\n} from \"./sourceMetadata\";\n\nexport type BabelInjectComponentSourceOptions = SourceInjectionOptions;\n\ntype BabelState = {\n file?: {\n opts?: {\n filename?: string;\n };\n };\n injectedIntrinsicHelper?: boolean;\n};\n\ntype BindingLike = {\n path: NodePath;\n};\n\nconst SOURCE_PROP_LOCAL = \"_componentSourceLoc\";\nconst SOURCE_PROPS_REST = \"__reactCodeLocatorProps\";\n\nfunction isComponentName(name: string) {\n return /^[A-Z]/.test(name);\n}\n\nfunction isCustomComponentTag(\n name: t.JSXIdentifier | t.JSXMemberExpression | t.JSXNamespacedName,\n) {\n if (t.isJSXIdentifier(name)) {\n return isComponentName(name.name);\n }\n\n if (t.isJSXMemberExpression(name)) {\n return true;\n }\n\n return false;\n}\n\nfunction isIntrinsicElementTag(\n name: t.JSXIdentifier | t.JSXMemberExpression | t.JSXNamespacedName,\n) {\n return t.isJSXIdentifier(name) && /^[a-z]/.test(name.name);\n}\n\nfunction isElementFactoryIdentifier(name: string) {\n return (\n name === \"jsx\" ||\n name === \"jsxs\" ||\n name === \"jsxDEV\" ||\n name === \"_jsx\" ||\n name === \"_jsxs\" ||\n name === \"_jsxDEV\" ||\n name === \"createElement\"\n );\n}\n\nfunction isReactElementFactoryCall(pathNode: NodePath<t.CallExpression>) {\n const callee = pathNode.node.callee;\n\n if (t.isIdentifier(callee)) {\n return isElementFactoryIdentifier(callee.name);\n }\n\n return (\n t.isMemberExpression(callee) &&\n t.isIdentifier(callee.object, { name: \"React\" }) &&\n t.isIdentifier(callee.property, { name: \"createElement\" })\n );\n}\n\nfunction getRootJsxIdentifierName(\n name: t.JSXIdentifier | t.JSXMemberExpression | t.JSXNamespacedName,\n): string | null {\n if (t.isJSXIdentifier(name)) {\n return name.name;\n }\n\n if (t.isJSXMemberExpression(name)) {\n return getRootJsxIdentifierName(name.object);\n }\n\n return null;\n}\n\nfunction isStyledModuleImport(binding: BindingLike | undefined) {\n if (!binding) {\n return false;\n }\n\n if (\n !binding.path.isImportSpecifier() &&\n !binding.path.isImportDefaultSpecifier() &&\n !binding.path.isImportNamespaceSpecifier()\n ) {\n return false;\n }\n\n const source = binding.path.parentPath.isImportDeclaration()\n ? binding.path.parentPath.node.source.value\n : null;\n if (typeof source !== \"string\") {\n return false;\n }\n\n const normalized = source.replace(/\\\\/g, \"/\");\n return (\n normalized === \"./styled\" ||\n normalized === \"../styled\" ||\n normalized.endsWith(\"/styled\")\n );\n}\n\nfunction isSupportedComponentInit(\n node: t.Expression | null | undefined,\n): boolean {\n if (!node) {\n return false;\n }\n\n if (t.isArrowFunctionExpression(node) || t.isFunctionExpression(node)) {\n return true;\n }\n\n if (!t.isCallExpression(node)) {\n return false;\n }\n\n if (\n t.isIdentifier(node.callee) &&\n (node.callee.name === \"memo\" || node.callee.name === \"forwardRef\")\n ) {\n return true;\n }\n\n return (\n t.isMemberExpression(node.callee) &&\n t.isIdentifier(node.callee.object, { name: \"React\" }) &&\n t.isIdentifier(node.callee.property) &&\n (node.callee.property.name === \"memo\" ||\n node.callee.property.name === \"forwardRef\")\n );\n}\n\nfunction hasSourcePropBinding(pattern: t.ObjectPattern) {\n return pattern.properties.some((property: t.ObjectPattern[\"properties\"][number]) => {\n if (!t.isObjectProperty(property)) {\n return false;\n }\n\n return (\n t.isIdentifier(property.key) && property.key.name === JSX_SOURCE_PROP\n );\n });\n}\n\nfunction injectSourcePropBinding(pattern: t.ObjectPattern) {\n if (hasSourcePropBinding(pattern)) {\n return;\n }\n\n const sourceBinding = t.objectProperty(\n t.identifier(JSX_SOURCE_PROP),\n t.identifier(SOURCE_PROP_LOCAL),\n false,\n false,\n );\n\n const restIndex = pattern.properties.findIndex((property: t.ObjectPattern[\"properties\"][number]) =>\n t.isRestElement(property),\n );\n if (restIndex === -1) {\n pattern.properties.push(sourceBinding);\n return;\n }\n\n pattern.properties.splice(restIndex, 0, sourceBinding);\n}\n\nfunction injectSourcePropIntoIdentifierParam(\n node:\n | t.FunctionDeclaration\n | t.FunctionExpression\n | t.ArrowFunctionExpression,\n param: t.Identifier,\n) {\n if (!t.isBlockStatement(node.body)) {\n node.body = t.blockStatement([t.returnStatement(node.body)]);\n }\n\n const alreadyInjected = node.body.body.some(\n (statement: t.Statement) =>\n t.isVariableDeclaration(statement) &&\n statement.declarations.some(\n (declaration: t.VariableDeclarator) =>\n t.isIdentifier(declaration.id) &&\n declaration.id.name === SOURCE_PROPS_REST,\n ),\n );\n if (alreadyInjected) {\n return;\n }\n\n node.body.body.unshift(\n t.variableDeclaration(\"const\", [\n t.variableDeclarator(\n t.objectPattern([\n t.objectProperty(\n t.identifier(JSX_SOURCE_PROP),\n t.identifier(SOURCE_PROP_LOCAL),\n false,\n false,\n ),\n t.restElement(t.identifier(SOURCE_PROPS_REST)),\n ]),\n param,\n ),\n ]),\n t.expressionStatement(\n t.assignmentExpression(\n \"=\",\n t.identifier(param.name),\n t.identifier(SOURCE_PROPS_REST),\n ),\n ),\n );\n}\n\nfunction injectSourcePropIntoFunctionParams(\n node:\n | t.FunctionDeclaration\n | t.FunctionExpression\n | t.ArrowFunctionExpression,\n) {\n const firstParam = node.params[0];\n if (!firstParam) {\n return;\n }\n\n if (t.isObjectPattern(firstParam)) {\n injectSourcePropBinding(firstParam);\n return;\n }\n\n if (t.isIdentifier(firstParam)) {\n injectSourcePropIntoIdentifierParam(node, firstParam);\n }\n}\n\nfunction injectSourcePropIntoExpression(node: t.Expression | null | undefined) {\n if (!node) {\n return;\n }\n\n if (t.isFunctionExpression(node) || t.isArrowFunctionExpression(node)) {\n injectSourcePropIntoFunctionParams(node);\n return;\n }\n\n if (!t.isCallExpression(node)) {\n return;\n }\n\n const firstArg = node.arguments[0];\n if (\n firstArg &&\n !t.isSpreadElement(firstArg) &&\n (t.isFunctionExpression(firstArg) || t.isArrowFunctionExpression(firstArg))\n ) {\n injectSourcePropIntoFunctionParams(firstArg);\n }\n}\n\nfunction getSourceValue(\n state: BabelState,\n loc: { line: number; column: number } | null | undefined,\n projectRoot?: string,\n) {\n const filename = state.file?.opts?.filename;\n if (!filename || !loc) {\n return null;\n }\n\n return toRelativeSource(filename, loc, projectRoot);\n}\n\nfunction buildAssignment(name: string, sourceValue: string) {\n return t.expressionStatement(\n t.assignmentExpression(\n \"=\",\n t.memberExpression(t.identifier(name), t.identifier(SOURCE_PROP)),\n t.stringLiteral(sourceValue),\n ),\n );\n}\n\nfunction buildIntrinsicSourceHelper() {\n return t.functionDeclaration(\n t.identifier(\"_markIntrinsicElementSource\"),\n [t.identifier(\"element\"), t.identifier(\"source\")],\n t.blockStatement([\n t.variableDeclaration(\"const\", [\n t.variableDeclarator(\n t.identifier(\"registryKey\"),\n t.callExpression(\n t.memberExpression(t.identifier(\"Symbol\"), t.identifier(\"for\")),\n [t.stringLiteral(JSX_SOURCE_REGISTRY_SYMBOL)],\n ),\n ),\n ]),\n t.variableDeclaration(\"let\", [\n t.variableDeclarator(\n t.identifier(\"registry\"),\n t.memberExpression(t.identifier(\"globalThis\"), t.identifier(\"registryKey\"), true),\n ),\n ]),\n t.ifStatement(\n t.unaryExpression(\n \"!\",\n t.binaryExpression(\"instanceof\", t.identifier(\"registry\"), t.identifier(\"WeakMap\")),\n ),\n t.blockStatement([\n t.expressionStatement(\n t.assignmentExpression(\n \"=\",\n t.identifier(\"registry\"),\n t.assignmentExpression(\n \"=\",\n t.memberExpression(t.identifier(\"globalThis\"), t.identifier(\"registryKey\"), true),\n t.newExpression(t.identifier(\"WeakMap\"), []),\n ),\n ),\n ),\n ]),\n ),\n t.ifStatement(\n t.logicalExpression(\n \"&&\",\n t.identifier(\"element\"),\n t.logicalExpression(\n \"&&\",\n t.binaryExpression(\"===\", t.unaryExpression(\"typeof\", t.identifier(\"element\")), t.stringLiteral(\"object\")),\n t.binaryExpression(\n \"===\",\n t.unaryExpression(\"typeof\", t.memberExpression(t.identifier(\"element\"), t.identifier(\"props\"))),\n t.stringLiteral(\"object\"),\n ),\n ),\n ),\n t.blockStatement([\n t.expressionStatement(\n t.callExpression(\n t.memberExpression(t.identifier(\"registry\"), t.identifier(\"set\")),\n [t.memberExpression(t.identifier(\"element\"), t.identifier(\"props\")), t.identifier(\"source\")],\n ),\n ),\n ]),\n ),\n t.returnStatement(t.identifier(\"element\")),\n ]),\n );\n}\n\nfunction ensureIntrinsicSourceHelper(programPath: NodePath<t.Program>, state: BabelState) {\n if (state.injectedIntrinsicHelper) {\n return;\n }\n\n const alreadyExists = programPath.node.body.some(\n (node: t.Statement) =>\n t.isFunctionDeclaration(node) && t.isIdentifier(node.id, { name: \"_markIntrinsicElementSource\" }),\n );\n if (!alreadyExists) {\n programPath.unshiftContainer(\"body\", buildIntrinsicSourceHelper());\n }\n\n state.injectedIntrinsicHelper = true;\n}\n\nfunction visitDeclaration(\n declarationPath: NodePath,\n insertAfterPath: NodePath,\n state: BabelState,\n seen: Set<string>,\n projectRoot?: string,\n) {\n if (\n declarationPath.isFunctionDeclaration() ||\n declarationPath.isClassDeclaration()\n ) {\n const name = declarationPath.node.id?.name;\n if (!name || !isComponentName(name) || seen.has(name)) {\n return;\n }\n\n if (declarationPath.isFunctionDeclaration()) {\n injectSourcePropIntoFunctionParams(declarationPath.node);\n }\n\n const sourceValue = getSourceValue(\n state,\n declarationPath.node.loc?.start,\n projectRoot,\n );\n if (!sourceValue) {\n return;\n }\n\n seen.add(name);\n insertAfterPath.insertAfter(buildAssignment(name, sourceValue));\n return;\n }\n\n if (!declarationPath.isVariableDeclaration()) {\n return;\n }\n\n const assignments = declarationPath.node.declarations.flatMap(\n (declarator: t.VariableDeclarator) => {\n if (\n !t.isIdentifier(declarator.id) ||\n !isComponentName(declarator.id.name) ||\n seen.has(declarator.id.name)\n ) {\n return [];\n }\n\n if (!declarator.init) {\n return [];\n }\n\n if (!isSupportedComponentInit(declarator.init)) {\n return [];\n }\n\n injectSourcePropIntoExpression(declarator.init);\n\n const sourceValue = getSourceValue(\n state,\n declarator.loc?.start ?? declarator.init.loc?.start,\n projectRoot,\n );\n if (!sourceValue) {\n return [];\n }\n\n seen.add(declarator.id.name);\n return [buildAssignment(declarator.id.name, sourceValue)];\n },\n );\n\n if (assignments.length > 0) {\n insertAfterPath.insertAfter(assignments);\n }\n}\n\nexport function babelInjectComponentSource(\n options: BabelInjectComponentSourceOptions = {},\n): PluginObj<BabelState> {\n const {\n injectJsxSource = true,\n injectComponentSource = true,\n projectRoot,\n } = options;\n\n return {\n name: \"babel-inject-component-source\",\n visitor: {\n CallExpression(pathNode: NodePath<t.CallExpression>, state: BabelState) {\n if (!injectJsxSource) {\n return;\n }\n\n if (!isReactElementFactoryCall(pathNode)) {\n return;\n }\n\n if (\n pathNode.parentPath.isCallExpression() &&\n t.isIdentifier(pathNode.parentPath.node.callee, {\n name: \"_markIntrinsicElementSource\",\n })\n ) {\n return;\n }\n\n const sourceValue = getSourceValue(\n state,\n pathNode.node.loc?.start,\n projectRoot,\n );\n if (!sourceValue) {\n return;\n }\n\n const programPath = pathNode.findParent((parent: NodePath) => parent.isProgram());\n if (!programPath || !programPath.isProgram()) {\n return;\n }\n\n ensureIntrinsicSourceHelper(programPath, state);\n pathNode.replaceWith(\n t.callExpression(t.identifier(\"_markIntrinsicElementSource\"), [\n pathNode.node,\n t.stringLiteral(sourceValue),\n ]),\n );\n pathNode.skip();\n },\n JSXElement: {\n exit(pathNode: NodePath<t.JSXElement>, state: BabelState) {\n if (!injectJsxSource) {\n return;\n }\n\n if (!isIntrinsicElementTag(pathNode.node.openingElement.name)) {\n return;\n }\n\n if (\n pathNode.parentPath.isCallExpression() &&\n t.isIdentifier(pathNode.parentPath.node.callee, { name: \"_markIntrinsicElementSource\" })\n ) {\n return;\n }\n\n const sourceValue = getSourceValue(\n state,\n pathNode.node.openingElement.loc?.start,\n projectRoot,\n );\n if (!sourceValue) {\n return;\n }\n\n const programPath = pathNode.findParent((parent: NodePath) => parent.isProgram());\n if (!programPath || !programPath.isProgram()) {\n return;\n }\n\n ensureIntrinsicSourceHelper(programPath, state);\n\n const wrappedNode = t.callExpression(t.identifier(\"_markIntrinsicElementSource\"), [\n pathNode.node,\n t.stringLiteral(sourceValue),\n ]);\n\n if (pathNode.parentPath.isJSXElement() || pathNode.parentPath.isJSXFragment()) {\n pathNode.replaceWith(t.jsxExpressionContainer(wrappedNode));\n return;\n }\n\n if (pathNode.parentPath.isJSXExpressionContainer()) {\n pathNode.parentPath.replaceWith(t.jsxExpressionContainer(wrappedNode));\n return;\n }\n\n pathNode.replaceWith(wrappedNode);\n },\n },\n JSXOpeningElement(pathNode: NodePath<t.JSXOpeningElement>, state: BabelState) {\n if (!injectJsxSource) {\n return;\n }\n\n if (!isCustomComponentTag(pathNode.node.name)) {\n return;\n }\n\n const rootIdentifierName = getRootJsxIdentifierName(pathNode.node.name);\n if (\n rootIdentifierName &&\n isExternalToProjectRoot(state.file?.opts?.filename, projectRoot) &&\n isStyledModuleImport(pathNode.scope.getBinding(rootIdentifierName))\n ) {\n return;\n }\n\n const hasSourceProp = pathNode.node.attributes.some(\n (attr: t.JSXAttribute | t.JSXSpreadAttribute) =>\n t.isJSXAttribute(attr) &&\n t.isJSXIdentifier(attr.name) &&\n attr.name.name === JSX_SOURCE_PROP,\n );\n if (hasSourceProp) {\n return;\n }\n\n const filename = state.file?.opts?.filename;\n const loc = pathNode.node.loc?.start;\n if (!filename || !loc) {\n return;\n }\n\n pathNode.node.attributes.push(\n t.jsxAttribute(\n t.jsxIdentifier(JSX_SOURCE_PROP),\n t.stringLiteral(\n getSourceValue(state, loc, projectRoot) ??\n `${filename.replace(/\\\\/g, \"/\")}:${loc.line}:${loc.column + 1}`,\n ),\n ),\n );\n },\n Program(programPath: NodePath<t.Program>, state: BabelState) {\n if (!injectComponentSource) {\n return;\n }\n\n const seen = new Set<string>();\n\n for (const childPath of programPath.get(\"body\")) {\n if (\n childPath.isExportNamedDeclaration() ||\n childPath.isExportDefaultDeclaration()\n ) {\n const declarationPath = childPath.get(\"declaration\");\n if (!Array.isArray(declarationPath) && declarationPath.node) {\n visitDeclaration(declarationPath, childPath, state, seen, projectRoot);\n }\n continue;\n }\n\n visitDeclaration(childPath, childPath, state, seen, projectRoot);\n }\n },\n },\n };\n}\n","export const SOURCE_PROP = \"__componentSourceLoc\";\nexport const JSX_SOURCE_PROP = \"$componentSourceLoc\";\nexport const JSX_SOURCE_REGISTRY_SYMBOL = \"react-code-locator.jsxSourceRegistry\";\n","export type SourceLocation = {\n line: number;\n column: number;\n};\n\nfunction normalizeSlashes(value: string) {\n return value.replace(/\\\\/g, \"/\");\n}\n\nfunction trimTrailingSlash(value: string) {\n return value.replace(/\\/+$/, \"\");\n}\n\nfunction splitPathSegments(value: string) {\n return normalizeSlashes(value).split(\"/\").filter(Boolean);\n}\n\nfunction computeRelativePath(fromPath: string, toPath: string) {\n const fromSegments = splitPathSegments(fromPath);\n const toSegments = splitPathSegments(toPath);\n\n let sharedIndex = 0;\n while (\n sharedIndex < fromSegments.length &&\n sharedIndex < toSegments.length &&\n fromSegments[sharedIndex] === toSegments[sharedIndex]\n ) {\n sharedIndex += 1;\n }\n\n const upSegments = new Array(Math.max(0, fromSegments.length - sharedIndex)).fill(\"..\");\n const downSegments = toSegments.slice(sharedIndex);\n const relativeSegments = [...upSegments, ...downSegments];\n return relativeSegments.length > 0 ? relativeSegments.join(\"/\") : \".\";\n}\n\nexport function normalizeProjectRoot(projectRoot?: string) {\n if (projectRoot) {\n return trimTrailingSlash(normalizeSlashes(projectRoot));\n }\n\n if (typeof process !== \"undefined\" && typeof process.cwd === \"function\") {\n return trimTrailingSlash(normalizeSlashes(process.cwd()));\n }\n\n return \"\";\n}\n\nexport function toRelativeSource(\n filename: string | undefined,\n loc: SourceLocation | null | undefined,\n projectRoot?: string,\n) {\n if (!filename || !loc) {\n return null;\n }\n\n const root = normalizeProjectRoot(projectRoot);\n const normalizedFilename = normalizeSlashes(filename);\n const relPath =\n root && normalizedFilename.startsWith(`${root}/`)\n ? normalizedFilename.slice(root.length + 1)\n : root\n ? computeRelativePath(root, normalizedFilename)\n : normalizedFilename;\n return `${relPath}:${loc.line}:${loc.column + 1}`;\n}\n\nexport function getSourceFile(source: string | null) {\n if (!source) {\n return null;\n }\n\n const match = source.match(/^(.*):\\d+:\\d+$/);\n return match?.[1] ?? null;\n}\n\nexport function isProjectLocalFile(filename: string | undefined, projectRoot?: string) {\n if (!filename) {\n return false;\n }\n\n const root = normalizeProjectRoot(projectRoot);\n const normalizedFilename = normalizeSlashes(filename);\n\n if (!root) {\n return (\n !normalizedFilename.startsWith(\"../\") &&\n !normalizedFilename.startsWith(\"/\") &&\n !/^[A-Za-z]:\\//.test(normalizedFilename)\n );\n }\n\n if (normalizedFilename.startsWith(`${root}/`) || normalizedFilename === root) {\n return true;\n }\n\n const relativePath = computeRelativePath(root, normalizedFilename);\n return !relativePath.startsWith(\"../\");\n}\n\nexport function isExternalToProjectRoot(filename: string | undefined, projectRoot?: string) {\n return !isProjectLocalFile(filename, projectRoot);\n}\n\nexport function isProjectLocalSource(source: string, projectRoot?: string) {\n const file = getSourceFile(source);\n return isProjectLocalFile(file ?? undefined, projectRoot);\n}\n"],"mappings":"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","names":["import_core","t"]}
|
|
1
|
+
{"version":3,"sources":["../src/esbuild.ts","../src/sourceAdapter.ts","../src/sourceTransform.ts","../src/babelInjectComponentSource.ts","../src/constants.ts","../src/sourceMetadata.ts"],"sourcesContent":["import { readFile } from \"node:fs/promises\";\nimport { defineSourceAdapter, type SourceInjectionOptions } from \"./sourceAdapter\";\nimport { transformSourceWithLocator } from \"./sourceTransform\";\n\ntype EsbuildOnLoadResult = {\n contents: string;\n loader: \"js\" | \"jsx\" | \"ts\" | \"tsx\";\n};\n\ntype EsbuildPluginBuild = {\n onLoad: (\n options: { filter: RegExp },\n callback: (args: { path: string }) => Promise<EsbuildOnLoadResult | null>,\n ) => void;\n};\n\nexport type EsbuildPlugin = {\n name: string;\n setup: (build: EsbuildPluginBuild) => void;\n};\n\nexport type EsbuildSourceAdapterConfig = {\n plugins: EsbuildPlugin[];\n};\n\nfunction getEsbuildLoader(filename: string): EsbuildOnLoadResult[\"loader\"] {\n if (filename.endsWith(\".tsx\")) {\n return \"tsx\";\n }\n\n if (filename.endsWith(\".ts\")) {\n return \"ts\";\n }\n\n if (filename.endsWith(\".jsx\")) {\n return \"jsx\";\n }\n\n return \"js\";\n}\n\nexport function esbuildSourceTransformPlugin(\n options: SourceInjectionOptions = {},\n): EsbuildPlugin {\n return {\n name: \"react-code-locator-source-transform\",\n setup(build) {\n build.onLoad({ filter: /\\.[mc]?[jt]sx?$/ }, async ({ path }) => {\n if (path.includes(\"/node_modules/\")) {\n return null;\n }\n\n const code = await readFile(path, \"utf8\");\n const result = await transformSourceWithLocator(code, {\n filename: path,\n ...options,\n });\n\n return {\n contents: result.code,\n loader: getEsbuildLoader(path),\n };\n });\n },\n };\n}\n\nexport function createEsbuildSourceAdapter(options: SourceInjectionOptions = {}) {\n const resolvedOptions = {\n projectRoot: process.cwd(),\n ...options,\n };\n\n return defineSourceAdapter<EsbuildSourceAdapterConfig>({\n kind: \"esbuild\",\n name: \"react-code-locator/esbuild\",\n options: resolvedOptions,\n config: {\n plugins: [esbuildSourceTransformPlugin(resolvedOptions)],\n },\n });\n}\n\nexport const esbuildSourceAdapter = createEsbuildSourceAdapter();\n","export type SourceInjectionOptions = {\n injectJsxSource?: boolean;\n injectComponentSource?: boolean;\n projectRoot?: string;\n};\n\nexport type SourceAdapterKind = \"babel\" | \"vite\" | \"esbuild\" | \"swc\";\n\nexport type SourceAdapterDescriptor<TConfig = unknown, TOptions = SourceInjectionOptions> = {\n kind: SourceAdapterKind;\n name: string;\n options: TOptions;\n config: TConfig;\n};\n\nexport function defineSourceAdapter<TConfig = unknown, TOptions = SourceInjectionOptions>(\n descriptor: SourceAdapterDescriptor<TConfig, TOptions>,\n) {\n return descriptor;\n}\n","import { transformAsync } from \"@babel/core\";\nimport { babelInjectComponentSource, type BabelInjectComponentSourceOptions } from \"./babelInjectComponentSource\";\n\nexport type SourceTransformOptions = BabelInjectComponentSourceOptions & {\n filename: string;\n sourceMaps?: boolean;\n};\n\nexport async function transformSourceWithLocator(\n code: string,\n options: SourceTransformOptions,\n) {\n const { filename, sourceMaps = true, projectRoot = process.cwd(), ...pluginOptions } = options;\n const result = await transformAsync(code, {\n filename,\n babelrc: false,\n configFile: false,\n sourceMaps,\n parserOpts: {\n sourceType: \"module\",\n plugins: [\"jsx\", \"typescript\"],\n },\n generatorOpts: {\n retainLines: true,\n },\n plugins: [[babelInjectComponentSource, { ...pluginOptions, projectRoot }]],\n });\n\n return {\n code: result?.code ?? code,\n map: result?.map ?? null,\n };\n}\n","import { types as t, type NodePath, type PluginObj } from \"@babel/core\";\nimport {\n JSX_SOURCE_PROP,\n JSX_SOURCE_REGISTRY_SYMBOL,\n SOURCE_PROP,\n} from \"./constants\";\nimport type { SourceInjectionOptions } from \"./sourceAdapter\";\nimport {\n isExternalToProjectRoot,\n toRelativeSource,\n} from \"./sourceMetadata\";\n\nexport type BabelInjectComponentSourceOptions = SourceInjectionOptions;\n\ntype BabelState = {\n file?: {\n opts?: {\n filename?: string;\n };\n };\n injectedIntrinsicHelper?: boolean;\n};\n\ntype BindingLike = {\n path: NodePath;\n};\n\nconst SOURCE_PROP_LOCAL = \"_componentSourceLoc\";\nconst SOURCE_PROPS_REST = \"__reactCodeLocatorProps\";\n\nfunction isComponentName(name: string) {\n return /^[A-Z]/.test(name);\n}\n\nfunction isCustomComponentTag(\n name: t.JSXIdentifier | t.JSXMemberExpression | t.JSXNamespacedName,\n) {\n if (t.isJSXIdentifier(name)) {\n return isComponentName(name.name);\n }\n\n if (t.isJSXMemberExpression(name)) {\n return true;\n }\n\n return false;\n}\n\nfunction isIntrinsicElementTag(\n name: t.JSXIdentifier | t.JSXMemberExpression | t.JSXNamespacedName,\n) {\n return t.isJSXIdentifier(name) && /^[a-z]/.test(name.name);\n}\n\nfunction isElementFactoryIdentifier(name: string) {\n return (\n name === \"jsx\" ||\n name === \"jsxs\" ||\n name === \"jsxDEV\" ||\n name === \"_jsx\" ||\n name === \"_jsxs\" ||\n name === \"_jsxDEV\" ||\n name === \"createElement\"\n );\n}\n\nfunction isReactElementFactoryCall(pathNode: NodePath<t.CallExpression>) {\n const callee = pathNode.node.callee;\n\n if (t.isIdentifier(callee)) {\n return isElementFactoryIdentifier(callee.name);\n }\n\n return (\n t.isMemberExpression(callee) &&\n t.isIdentifier(callee.object, { name: \"React\" }) &&\n t.isIdentifier(callee.property, { name: \"createElement\" })\n );\n}\n\nfunction getRootJsxIdentifierName(\n name: t.JSXIdentifier | t.JSXMemberExpression | t.JSXNamespacedName,\n): string | null {\n if (t.isJSXIdentifier(name)) {\n return name.name;\n }\n\n if (t.isJSXMemberExpression(name)) {\n return getRootJsxIdentifierName(name.object);\n }\n\n return null;\n}\n\nfunction isStyledModuleImport(binding: BindingLike | undefined) {\n if (!binding) {\n return false;\n }\n\n if (\n !binding.path.isImportSpecifier() &&\n !binding.path.isImportDefaultSpecifier() &&\n !binding.path.isImportNamespaceSpecifier()\n ) {\n return false;\n }\n\n const source = binding.path.parentPath.isImportDeclaration()\n ? binding.path.parentPath.node.source.value\n : null;\n if (typeof source !== \"string\") {\n return false;\n }\n\n const normalized = source.replace(/\\\\/g, \"/\");\n return (\n normalized === \"./styled\" ||\n normalized === \"../styled\" ||\n normalized.endsWith(\"/styled\")\n );\n}\n\nfunction isSupportedComponentInit(\n node: t.Expression | null | undefined,\n): boolean {\n if (!node) {\n return false;\n }\n\n if (t.isArrowFunctionExpression(node) || t.isFunctionExpression(node)) {\n return true;\n }\n\n if (!t.isCallExpression(node)) {\n return false;\n }\n\n if (\n t.isIdentifier(node.callee) &&\n (node.callee.name === \"memo\" || node.callee.name === \"forwardRef\")\n ) {\n return true;\n }\n\n return (\n t.isMemberExpression(node.callee) &&\n t.isIdentifier(node.callee.object, { name: \"React\" }) &&\n t.isIdentifier(node.callee.property) &&\n (node.callee.property.name === \"memo\" ||\n node.callee.property.name === \"forwardRef\")\n );\n}\n\nfunction hasSourcePropBinding(pattern: t.ObjectPattern) {\n return pattern.properties.some((property: t.ObjectPattern[\"properties\"][number]) => {\n if (!t.isObjectProperty(property)) {\n return false;\n }\n\n return (\n t.isIdentifier(property.key) && property.key.name === JSX_SOURCE_PROP\n );\n });\n}\n\nfunction injectSourcePropBinding(pattern: t.ObjectPattern) {\n if (hasSourcePropBinding(pattern)) {\n return;\n }\n\n const sourceBinding = t.objectProperty(\n t.identifier(JSX_SOURCE_PROP),\n t.identifier(SOURCE_PROP_LOCAL),\n false,\n false,\n );\n\n const restIndex = pattern.properties.findIndex((property: t.ObjectPattern[\"properties\"][number]) =>\n t.isRestElement(property),\n );\n if (restIndex === -1) {\n pattern.properties.push(sourceBinding);\n return;\n }\n\n pattern.properties.splice(restIndex, 0, sourceBinding);\n}\n\nfunction injectSourcePropIntoIdentifierParam(\n node:\n | t.FunctionDeclaration\n | t.FunctionExpression\n | t.ArrowFunctionExpression,\n param: t.Identifier,\n) {\n if (!t.isBlockStatement(node.body)) {\n node.body = t.blockStatement([t.returnStatement(node.body)]);\n }\n\n const alreadyInjected = node.body.body.some(\n (statement: t.Statement) =>\n t.isVariableDeclaration(statement) &&\n statement.declarations.some(\n (declaration: t.VariableDeclarator) =>\n t.isIdentifier(declaration.id) &&\n declaration.id.name === SOURCE_PROPS_REST,\n ),\n );\n if (alreadyInjected) {\n return;\n }\n\n node.body.body.unshift(\n t.variableDeclaration(\"const\", [\n t.variableDeclarator(\n t.objectPattern([\n t.objectProperty(\n t.identifier(JSX_SOURCE_PROP),\n t.identifier(SOURCE_PROP_LOCAL),\n false,\n false,\n ),\n t.restElement(t.identifier(SOURCE_PROPS_REST)),\n ]),\n param,\n ),\n ]),\n t.expressionStatement(\n t.assignmentExpression(\n \"=\",\n t.identifier(param.name),\n t.identifier(SOURCE_PROPS_REST),\n ),\n ),\n );\n}\n\nfunction injectSourcePropIntoFunctionParams(\n node:\n | t.FunctionDeclaration\n | t.FunctionExpression\n | t.ArrowFunctionExpression,\n) {\n const firstParam = node.params[0];\n if (!firstParam) {\n return;\n }\n\n if (t.isObjectPattern(firstParam)) {\n injectSourcePropBinding(firstParam);\n return;\n }\n\n if (t.isIdentifier(firstParam)) {\n injectSourcePropIntoIdentifierParam(node, firstParam);\n }\n}\n\nfunction injectSourcePropIntoExpression(node: t.Expression | null | undefined) {\n if (!node) {\n return;\n }\n\n if (t.isFunctionExpression(node) || t.isArrowFunctionExpression(node)) {\n injectSourcePropIntoFunctionParams(node);\n return;\n }\n\n if (!t.isCallExpression(node)) {\n return;\n }\n\n const firstArg = node.arguments[0];\n if (\n firstArg &&\n !t.isSpreadElement(firstArg) &&\n (t.isFunctionExpression(firstArg) || t.isArrowFunctionExpression(firstArg))\n ) {\n injectSourcePropIntoFunctionParams(firstArg);\n }\n}\n\nfunction getSourceValue(\n state: BabelState,\n loc: { line: number; column: number } | null | undefined,\n projectRoot?: string,\n) {\n const filename = state.file?.opts?.filename;\n if (!filename || !loc) {\n return null;\n }\n\n return toRelativeSource(filename, loc, projectRoot);\n}\n\nfunction buildAssignment(name: string, sourceValue: string) {\n return t.expressionStatement(\n t.assignmentExpression(\n \"=\",\n t.memberExpression(t.identifier(name), t.identifier(SOURCE_PROP)),\n t.stringLiteral(sourceValue),\n ),\n );\n}\n\nfunction buildIntrinsicSourceHelper() {\n return t.functionDeclaration(\n t.identifier(\"_markIntrinsicElementSource\"),\n [t.identifier(\"element\"), t.identifier(\"source\")],\n t.blockStatement([\n t.variableDeclaration(\"const\", [\n t.variableDeclarator(\n t.identifier(\"registryKey\"),\n t.callExpression(\n t.memberExpression(t.identifier(\"Symbol\"), t.identifier(\"for\")),\n [t.stringLiteral(JSX_SOURCE_REGISTRY_SYMBOL)],\n ),\n ),\n ]),\n t.variableDeclaration(\"let\", [\n t.variableDeclarator(\n t.identifier(\"registry\"),\n t.memberExpression(t.identifier(\"globalThis\"), t.identifier(\"registryKey\"), true),\n ),\n ]),\n t.ifStatement(\n t.unaryExpression(\n \"!\",\n t.binaryExpression(\"instanceof\", t.identifier(\"registry\"), t.identifier(\"WeakMap\")),\n ),\n t.blockStatement([\n t.expressionStatement(\n t.assignmentExpression(\n \"=\",\n t.identifier(\"registry\"),\n t.assignmentExpression(\n \"=\",\n t.memberExpression(t.identifier(\"globalThis\"), t.identifier(\"registryKey\"), true),\n t.newExpression(t.identifier(\"WeakMap\"), []),\n ),\n ),\n ),\n ]),\n ),\n t.ifStatement(\n t.logicalExpression(\n \"&&\",\n t.identifier(\"element\"),\n t.logicalExpression(\n \"&&\",\n t.binaryExpression(\"===\", t.unaryExpression(\"typeof\", t.identifier(\"element\")), t.stringLiteral(\"object\")),\n t.binaryExpression(\n \"===\",\n t.unaryExpression(\"typeof\", t.memberExpression(t.identifier(\"element\"), t.identifier(\"props\"))),\n t.stringLiteral(\"object\"),\n ),\n ),\n ),\n t.blockStatement([\n t.expressionStatement(\n t.callExpression(\n t.memberExpression(t.identifier(\"registry\"), t.identifier(\"set\")),\n [t.memberExpression(t.identifier(\"element\"), t.identifier(\"props\")), t.identifier(\"source\")],\n ),\n ),\n ]),\n ),\n t.returnStatement(t.identifier(\"element\")),\n ]),\n );\n}\n\nfunction ensureIntrinsicSourceHelper(programPath: NodePath<t.Program>, state: BabelState) {\n if (state.injectedIntrinsicHelper) {\n return;\n }\n\n const alreadyExists = programPath.node.body.some(\n (node: t.Statement) =>\n t.isFunctionDeclaration(node) && t.isIdentifier(node.id, { name: \"_markIntrinsicElementSource\" }),\n );\n if (!alreadyExists) {\n programPath.unshiftContainer(\"body\", buildIntrinsicSourceHelper());\n }\n\n state.injectedIntrinsicHelper = true;\n}\n\nfunction visitDeclaration(\n declarationPath: NodePath,\n insertAfterPath: NodePath,\n state: BabelState,\n seen: Set<string>,\n projectRoot?: string,\n) {\n if (\n declarationPath.isFunctionDeclaration() ||\n declarationPath.isClassDeclaration()\n ) {\n const name = declarationPath.node.id?.name;\n if (!name || !isComponentName(name) || seen.has(name)) {\n return;\n }\n\n if (declarationPath.isFunctionDeclaration()) {\n injectSourcePropIntoFunctionParams(declarationPath.node);\n }\n\n const sourceValue = getSourceValue(\n state,\n declarationPath.node.loc?.start,\n projectRoot,\n );\n if (!sourceValue) {\n return;\n }\n\n seen.add(name);\n insertAfterPath.insertAfter(buildAssignment(name, sourceValue));\n return;\n }\n\n if (!declarationPath.isVariableDeclaration()) {\n return;\n }\n\n const assignments = declarationPath.node.declarations.flatMap(\n (declarator: t.VariableDeclarator) => {\n if (\n !t.isIdentifier(declarator.id) ||\n !isComponentName(declarator.id.name) ||\n seen.has(declarator.id.name)\n ) {\n return [];\n }\n\n if (!declarator.init) {\n return [];\n }\n\n if (!isSupportedComponentInit(declarator.init)) {\n return [];\n }\n\n injectSourcePropIntoExpression(declarator.init);\n\n const sourceValue = getSourceValue(\n state,\n declarator.loc?.start ?? declarator.init.loc?.start,\n projectRoot,\n );\n if (!sourceValue) {\n return [];\n }\n\n seen.add(declarator.id.name);\n return [buildAssignment(declarator.id.name, sourceValue)];\n },\n );\n\n if (assignments.length > 0) {\n insertAfterPath.insertAfter(assignments);\n }\n}\n\nexport function babelInjectComponentSource(\n options: BabelInjectComponentSourceOptions = {},\n): PluginObj<BabelState> {\n const {\n injectJsxSource = true,\n injectComponentSource = true,\n projectRoot,\n } = options;\n\n return {\n name: \"babel-inject-component-source\",\n visitor: {\n CallExpression(pathNode: NodePath<t.CallExpression>, state: BabelState) {\n if (!injectJsxSource) {\n return;\n }\n\n if (!isReactElementFactoryCall(pathNode)) {\n return;\n }\n\n if (\n pathNode.parentPath.isCallExpression() &&\n t.isIdentifier(pathNode.parentPath.node.callee, {\n name: \"_markIntrinsicElementSource\",\n })\n ) {\n return;\n }\n\n const sourceValue = getSourceValue(\n state,\n pathNode.node.loc?.start,\n projectRoot,\n );\n if (!sourceValue) {\n return;\n }\n\n const programPath = pathNode.findParent((parent: NodePath) => parent.isProgram());\n if (!programPath || !programPath.isProgram()) {\n return;\n }\n\n ensureIntrinsicSourceHelper(programPath, state);\n pathNode.replaceWith(\n t.callExpression(t.identifier(\"_markIntrinsicElementSource\"), [\n pathNode.node,\n t.stringLiteral(sourceValue),\n ]),\n );\n pathNode.skip();\n },\n JSXElement: {\n exit(pathNode: NodePath<t.JSXElement>, state: BabelState) {\n if (!injectJsxSource) {\n return;\n }\n\n if (!isIntrinsicElementTag(pathNode.node.openingElement.name)) {\n return;\n }\n\n if (\n pathNode.parentPath.isCallExpression() &&\n t.isIdentifier(pathNode.parentPath.node.callee, { name: \"_markIntrinsicElementSource\" })\n ) {\n return;\n }\n\n const sourceValue = getSourceValue(\n state,\n pathNode.node.openingElement.loc?.start,\n projectRoot,\n );\n if (!sourceValue) {\n return;\n }\n\n const programPath = pathNode.findParent((parent: NodePath) => parent.isProgram());\n if (!programPath || !programPath.isProgram()) {\n return;\n }\n\n ensureIntrinsicSourceHelper(programPath, state);\n\n const wrappedNode = t.callExpression(t.identifier(\"_markIntrinsicElementSource\"), [\n pathNode.node,\n t.stringLiteral(sourceValue),\n ]);\n\n if (pathNode.parentPath.isJSXElement() || pathNode.parentPath.isJSXFragment()) {\n pathNode.replaceWith(t.jsxExpressionContainer(wrappedNode));\n return;\n }\n\n if (pathNode.parentPath.isJSXExpressionContainer()) {\n pathNode.parentPath.replaceWith(t.jsxExpressionContainer(wrappedNode));\n return;\n }\n\n pathNode.replaceWith(wrappedNode);\n },\n },\n JSXOpeningElement(pathNode: NodePath<t.JSXOpeningElement>, state: BabelState) {\n if (!injectJsxSource) {\n return;\n }\n\n if (!isCustomComponentTag(pathNode.node.name)) {\n return;\n }\n\n const rootIdentifierName = getRootJsxIdentifierName(pathNode.node.name);\n if (\n rootIdentifierName &&\n isExternalToProjectRoot(state.file?.opts?.filename, projectRoot) &&\n isStyledModuleImport(pathNode.scope.getBinding(rootIdentifierName))\n ) {\n return;\n }\n\n const hasSourceProp = pathNode.node.attributes.some(\n (attr: t.JSXAttribute | t.JSXSpreadAttribute) =>\n t.isJSXAttribute(attr) &&\n t.isJSXIdentifier(attr.name) &&\n attr.name.name === JSX_SOURCE_PROP,\n );\n if (hasSourceProp) {\n return;\n }\n\n const filename = state.file?.opts?.filename;\n const loc = pathNode.node.loc?.start;\n if (!filename || !loc) {\n return;\n }\n\n pathNode.node.attributes.push(\n t.jsxAttribute(\n t.jsxIdentifier(JSX_SOURCE_PROP),\n t.stringLiteral(\n getSourceValue(state, loc, projectRoot) ??\n `${filename.replace(/\\\\/g, \"/\")}:${loc.line}:${loc.column + 1}`,\n ),\n ),\n );\n },\n Program(programPath: NodePath<t.Program>, state: BabelState) {\n if (!injectComponentSource) {\n return;\n }\n\n const seen = new Set<string>();\n\n for (const childPath of programPath.get(\"body\")) {\n if (\n childPath.isExportNamedDeclaration() ||\n childPath.isExportDefaultDeclaration()\n ) {\n const declarationPath = childPath.get(\"declaration\");\n if (!Array.isArray(declarationPath) && declarationPath.node) {\n visitDeclaration(declarationPath, childPath, state, seen, projectRoot);\n }\n continue;\n }\n\n visitDeclaration(childPath, childPath, state, seen, projectRoot);\n }\n },\n },\n };\n}\n","export const SOURCE_PROP = \"__componentSourceLoc\";\nexport const JSX_SOURCE_PROP = \"$componentSourceLoc\";\nexport const JSX_SOURCE_REGISTRY_SYMBOL = \"react-code-locator.jsxSourceRegistry\";\n","export type SourceLocation = {\n line: number;\n column: number;\n};\n\nfunction normalizeSlashes(value: string) {\n return value.replace(/\\\\/g, \"/\");\n}\n\nfunction trimTrailingSlash(value: string) {\n return value.replace(/\\/+$/, \"\");\n}\n\nfunction splitPathSegments(value: string) {\n return normalizeSlashes(value).split(\"/\").filter(Boolean);\n}\n\nfunction computeRelativePath(fromPath: string, toPath: string) {\n const fromSegments = splitPathSegments(fromPath);\n const toSegments = splitPathSegments(toPath);\n\n let sharedIndex = 0;\n while (\n sharedIndex < fromSegments.length &&\n sharedIndex < toSegments.length &&\n fromSegments[sharedIndex] === toSegments[sharedIndex]\n ) {\n sharedIndex += 1;\n }\n\n const upSegments = new Array(Math.max(0, fromSegments.length - sharedIndex)).fill(\"..\");\n const downSegments = toSegments.slice(sharedIndex);\n const relativeSegments = [...upSegments, ...downSegments];\n return relativeSegments.length > 0 ? relativeSegments.join(\"/\") : \".\";\n}\n\nexport function normalizeProjectRoot(projectRoot?: string) {\n if (projectRoot) {\n return trimTrailingSlash(normalizeSlashes(projectRoot));\n }\n return \"\";\n}\n\nexport function toRelativeSource(\n filename: string | undefined,\n loc: SourceLocation | null | undefined,\n projectRoot?: string,\n) {\n if (!filename || !loc) {\n return null;\n }\n\n const root = normalizeProjectRoot(projectRoot);\n const normalizedFilename = normalizeSlashes(filename);\n const relPath =\n root && normalizedFilename.startsWith(`${root}/`)\n ? normalizedFilename.slice(root.length + 1)\n : root\n ? computeRelativePath(root, normalizedFilename)\n : normalizedFilename;\n return `${relPath}:${loc.line}:${loc.column + 1}`;\n}\n\nexport function getSourceFile(source: string | null) {\n if (!source) {\n return null;\n }\n\n const match = source.match(/^(.*):\\d+:\\d+$/);\n return match?.[1] ?? null;\n}\n\nexport function isProjectLocalFile(filename: string | undefined, projectRoot?: string) {\n if (!filename) {\n return false;\n }\n\n const root = normalizeProjectRoot(projectRoot);\n const normalizedFilename = normalizeSlashes(filename);\n\n if (!root) {\n return (\n !normalizedFilename.startsWith(\"../\") &&\n !normalizedFilename.startsWith(\"/\") &&\n !/^[A-Za-z]:\\//.test(normalizedFilename)\n );\n }\n\n if (normalizedFilename.startsWith(`${root}/`) || normalizedFilename === root) {\n return true;\n }\n\n const relativePath = computeRelativePath(root, normalizedFilename);\n return !relativePath.startsWith(\"../\");\n}\n\nexport function isExternalToProjectRoot(filename: string | undefined, projectRoot?: string) {\n return !isProjectLocalFile(filename, projectRoot);\n}\n\nexport function isProjectLocalSource(source: string, projectRoot?: string) {\n const file = getSourceFile(source);\n return isProjectLocalFile(file ?? undefined, projectRoot);\n}\n"],"mappings":"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","names":["import_core","t"]}
|
package/dist/esbuild.d.cts
CHANGED
package/dist/esbuild.d.ts
CHANGED
package/dist/esbuild.js
CHANGED
|
@@ -43,9 +43,6 @@ function normalizeProjectRoot(projectRoot) {
|
|
|
43
43
|
if (projectRoot) {
|
|
44
44
|
return trimTrailingSlash(normalizeSlashes(projectRoot));
|
|
45
45
|
}
|
|
46
|
-
if (typeof process !== "undefined" && typeof process.cwd === "function") {
|
|
47
|
-
return trimTrailingSlash(normalizeSlashes(process.cwd()));
|
|
48
|
-
}
|
|
49
46
|
return "";
|
|
50
47
|
}
|
|
51
48
|
function toRelativeSource(filename, loc, projectRoot) {
|
|
@@ -514,7 +511,7 @@ function babelInjectComponentSource(options = {}) {
|
|
|
514
511
|
|
|
515
512
|
// src/sourceTransform.ts
|
|
516
513
|
async function transformSourceWithLocator(code, options) {
|
|
517
|
-
const { filename, sourceMaps = true, ...pluginOptions } = options;
|
|
514
|
+
const { filename, sourceMaps = true, projectRoot = process.cwd(), ...pluginOptions } = options;
|
|
518
515
|
const result = await transformAsync(code, {
|
|
519
516
|
filename,
|
|
520
517
|
babelrc: false,
|
|
@@ -527,7 +524,7 @@ async function transformSourceWithLocator(code, options) {
|
|
|
527
524
|
generatorOpts: {
|
|
528
525
|
retainLines: true
|
|
529
526
|
},
|
|
530
|
-
plugins: [[babelInjectComponentSource, pluginOptions]]
|
|
527
|
+
plugins: [[babelInjectComponentSource, { ...pluginOptions, projectRoot }]]
|
|
531
528
|
});
|
|
532
529
|
return {
|
|
533
530
|
code: result?.code ?? code,
|
|
@@ -570,12 +567,16 @@ function esbuildSourceTransformPlugin(options = {}) {
|
|
|
570
567
|
};
|
|
571
568
|
}
|
|
572
569
|
function createEsbuildSourceAdapter(options = {}) {
|
|
570
|
+
const resolvedOptions = {
|
|
571
|
+
projectRoot: process.cwd(),
|
|
572
|
+
...options
|
|
573
|
+
};
|
|
573
574
|
return defineSourceAdapter({
|
|
574
575
|
kind: "esbuild",
|
|
575
576
|
name: "react-code-locator/esbuild",
|
|
576
|
-
options,
|
|
577
|
+
options: resolvedOptions,
|
|
577
578
|
config: {
|
|
578
|
-
plugins: [esbuildSourceTransformPlugin(
|
|
579
|
+
plugins: [esbuildSourceTransformPlugin(resolvedOptions)]
|
|
579
580
|
}
|
|
580
581
|
});
|
|
581
582
|
}
|
package/dist/esbuild.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/esbuild.ts","../src/sourceAdapter.ts","../src/sourceTransform.ts","../src/babelInjectComponentSource.ts","../src/constants.ts","../src/sourceMetadata.ts"],"sourcesContent":["import { readFile } from \"node:fs/promises\";\nimport { defineSourceAdapter, type SourceInjectionOptions } from \"./sourceAdapter\";\nimport { transformSourceWithLocator } from \"./sourceTransform\";\n\ntype EsbuildOnLoadResult = {\n contents: string;\n loader: \"js\" | \"jsx\" | \"ts\" | \"tsx\";\n};\n\ntype EsbuildPluginBuild = {\n onLoad: (\n options: { filter: RegExp },\n callback: (args: { path: string }) => Promise<EsbuildOnLoadResult | null>,\n ) => void;\n};\n\nexport type EsbuildPlugin = {\n name: string;\n setup: (build: EsbuildPluginBuild) => void;\n};\n\nexport type EsbuildSourceAdapterConfig = {\n plugins: EsbuildPlugin[];\n};\n\nfunction getEsbuildLoader(filename: string): EsbuildOnLoadResult[\"loader\"] {\n if (filename.endsWith(\".tsx\")) {\n return \"tsx\";\n }\n\n if (filename.endsWith(\".ts\")) {\n return \"ts\";\n }\n\n if (filename.endsWith(\".jsx\")) {\n return \"jsx\";\n }\n\n return \"js\";\n}\n\nexport function esbuildSourceTransformPlugin(\n options: SourceInjectionOptions = {},\n): EsbuildPlugin {\n return {\n name: \"react-code-locator-source-transform\",\n setup(build) {\n build.onLoad({ filter: /\\.[mc]?[jt]sx?$/ }, async ({ path }) => {\n if (path.includes(\"/node_modules/\")) {\n return null;\n }\n\n const code = await readFile(path, \"utf8\");\n const result = await transformSourceWithLocator(code, {\n filename: path,\n ...options,\n });\n\n return {\n contents: result.code,\n loader: getEsbuildLoader(path),\n };\n });\n },\n };\n}\n\nexport function createEsbuildSourceAdapter(options: SourceInjectionOptions = {}) {\n return defineSourceAdapter<EsbuildSourceAdapterConfig>({\n kind: \"esbuild\",\n name: \"react-code-locator/esbuild\",\n options,\n config: {\n plugins: [esbuildSourceTransformPlugin(options)],\n },\n });\n}\n\nexport const esbuildSourceAdapter = createEsbuildSourceAdapter();\n","export type SourceInjectionOptions = {\n injectJsxSource?: boolean;\n injectComponentSource?: boolean;\n projectRoot?: string;\n};\n\nexport type SourceAdapterKind = \"babel\" | \"vite\" | \"esbuild\" | \"swc\";\n\nexport type SourceAdapterDescriptor<TConfig = unknown, TOptions = SourceInjectionOptions> = {\n kind: SourceAdapterKind;\n name: string;\n options: TOptions;\n config: TConfig;\n};\n\nexport function defineSourceAdapter<TConfig = unknown, TOptions = SourceInjectionOptions>(\n descriptor: SourceAdapterDescriptor<TConfig, TOptions>,\n) {\n return descriptor;\n}\n","import { transformAsync } from \"@babel/core\";\nimport { babelInjectComponentSource, type BabelInjectComponentSourceOptions } from \"./babelInjectComponentSource\";\n\nexport type SourceTransformOptions = BabelInjectComponentSourceOptions & {\n filename: string;\n sourceMaps?: boolean;\n};\n\nexport async function transformSourceWithLocator(\n code: string,\n options: SourceTransformOptions,\n) {\n const { filename, sourceMaps = true, ...pluginOptions } = options;\n const result = await transformAsync(code, {\n filename,\n babelrc: false,\n configFile: false,\n sourceMaps,\n parserOpts: {\n sourceType: \"module\",\n plugins: [\"jsx\", \"typescript\"],\n },\n generatorOpts: {\n retainLines: true,\n },\n plugins: [[babelInjectComponentSource, pluginOptions]],\n });\n\n return {\n code: result?.code ?? code,\n map: result?.map ?? null,\n };\n}\n","import { types as t, type NodePath, type PluginObj } from \"@babel/core\";\nimport {\n JSX_SOURCE_PROP,\n JSX_SOURCE_REGISTRY_SYMBOL,\n SOURCE_PROP,\n} from \"./constants\";\nimport type { SourceInjectionOptions } from \"./sourceAdapter\";\nimport {\n isExternalToProjectRoot,\n toRelativeSource,\n} from \"./sourceMetadata\";\n\nexport type BabelInjectComponentSourceOptions = SourceInjectionOptions;\n\ntype BabelState = {\n file?: {\n opts?: {\n filename?: string;\n };\n };\n injectedIntrinsicHelper?: boolean;\n};\n\ntype BindingLike = {\n path: NodePath;\n};\n\nconst SOURCE_PROP_LOCAL = \"_componentSourceLoc\";\nconst SOURCE_PROPS_REST = \"__reactCodeLocatorProps\";\n\nfunction isComponentName(name: string) {\n return /^[A-Z]/.test(name);\n}\n\nfunction isCustomComponentTag(\n name: t.JSXIdentifier | t.JSXMemberExpression | t.JSXNamespacedName,\n) {\n if (t.isJSXIdentifier(name)) {\n return isComponentName(name.name);\n }\n\n if (t.isJSXMemberExpression(name)) {\n return true;\n }\n\n return false;\n}\n\nfunction isIntrinsicElementTag(\n name: t.JSXIdentifier | t.JSXMemberExpression | t.JSXNamespacedName,\n) {\n return t.isJSXIdentifier(name) && /^[a-z]/.test(name.name);\n}\n\nfunction isElementFactoryIdentifier(name: string) {\n return (\n name === \"jsx\" ||\n name === \"jsxs\" ||\n name === \"jsxDEV\" ||\n name === \"_jsx\" ||\n name === \"_jsxs\" ||\n name === \"_jsxDEV\" ||\n name === \"createElement\"\n );\n}\n\nfunction isReactElementFactoryCall(pathNode: NodePath<t.CallExpression>) {\n const callee = pathNode.node.callee;\n\n if (t.isIdentifier(callee)) {\n return isElementFactoryIdentifier(callee.name);\n }\n\n return (\n t.isMemberExpression(callee) &&\n t.isIdentifier(callee.object, { name: \"React\" }) &&\n t.isIdentifier(callee.property, { name: \"createElement\" })\n );\n}\n\nfunction getRootJsxIdentifierName(\n name: t.JSXIdentifier | t.JSXMemberExpression | t.JSXNamespacedName,\n): string | null {\n if (t.isJSXIdentifier(name)) {\n return name.name;\n }\n\n if (t.isJSXMemberExpression(name)) {\n return getRootJsxIdentifierName(name.object);\n }\n\n return null;\n}\n\nfunction isStyledModuleImport(binding: BindingLike | undefined) {\n if (!binding) {\n return false;\n }\n\n if (\n !binding.path.isImportSpecifier() &&\n !binding.path.isImportDefaultSpecifier() &&\n !binding.path.isImportNamespaceSpecifier()\n ) {\n return false;\n }\n\n const source = binding.path.parentPath.isImportDeclaration()\n ? binding.path.parentPath.node.source.value\n : null;\n if (typeof source !== \"string\") {\n return false;\n }\n\n const normalized = source.replace(/\\\\/g, \"/\");\n return (\n normalized === \"./styled\" ||\n normalized === \"../styled\" ||\n normalized.endsWith(\"/styled\")\n );\n}\n\nfunction isSupportedComponentInit(\n node: t.Expression | null | undefined,\n): boolean {\n if (!node) {\n return false;\n }\n\n if (t.isArrowFunctionExpression(node) || t.isFunctionExpression(node)) {\n return true;\n }\n\n if (!t.isCallExpression(node)) {\n return false;\n }\n\n if (\n t.isIdentifier(node.callee) &&\n (node.callee.name === \"memo\" || node.callee.name === \"forwardRef\")\n ) {\n return true;\n }\n\n return (\n t.isMemberExpression(node.callee) &&\n t.isIdentifier(node.callee.object, { name: \"React\" }) &&\n t.isIdentifier(node.callee.property) &&\n (node.callee.property.name === \"memo\" ||\n node.callee.property.name === \"forwardRef\")\n );\n}\n\nfunction hasSourcePropBinding(pattern: t.ObjectPattern) {\n return pattern.properties.some((property: t.ObjectPattern[\"properties\"][number]) => {\n if (!t.isObjectProperty(property)) {\n return false;\n }\n\n return (\n t.isIdentifier(property.key) && property.key.name === JSX_SOURCE_PROP\n );\n });\n}\n\nfunction injectSourcePropBinding(pattern: t.ObjectPattern) {\n if (hasSourcePropBinding(pattern)) {\n return;\n }\n\n const sourceBinding = t.objectProperty(\n t.identifier(JSX_SOURCE_PROP),\n t.identifier(SOURCE_PROP_LOCAL),\n false,\n false,\n );\n\n const restIndex = pattern.properties.findIndex((property: t.ObjectPattern[\"properties\"][number]) =>\n t.isRestElement(property),\n );\n if (restIndex === -1) {\n pattern.properties.push(sourceBinding);\n return;\n }\n\n pattern.properties.splice(restIndex, 0, sourceBinding);\n}\n\nfunction injectSourcePropIntoIdentifierParam(\n node:\n | t.FunctionDeclaration\n | t.FunctionExpression\n | t.ArrowFunctionExpression,\n param: t.Identifier,\n) {\n if (!t.isBlockStatement(node.body)) {\n node.body = t.blockStatement([t.returnStatement(node.body)]);\n }\n\n const alreadyInjected = node.body.body.some(\n (statement: t.Statement) =>\n t.isVariableDeclaration(statement) &&\n statement.declarations.some(\n (declaration: t.VariableDeclarator) =>\n t.isIdentifier(declaration.id) &&\n declaration.id.name === SOURCE_PROPS_REST,\n ),\n );\n if (alreadyInjected) {\n return;\n }\n\n node.body.body.unshift(\n t.variableDeclaration(\"const\", [\n t.variableDeclarator(\n t.objectPattern([\n t.objectProperty(\n t.identifier(JSX_SOURCE_PROP),\n t.identifier(SOURCE_PROP_LOCAL),\n false,\n false,\n ),\n t.restElement(t.identifier(SOURCE_PROPS_REST)),\n ]),\n param,\n ),\n ]),\n t.expressionStatement(\n t.assignmentExpression(\n \"=\",\n t.identifier(param.name),\n t.identifier(SOURCE_PROPS_REST),\n ),\n ),\n );\n}\n\nfunction injectSourcePropIntoFunctionParams(\n node:\n | t.FunctionDeclaration\n | t.FunctionExpression\n | t.ArrowFunctionExpression,\n) {\n const firstParam = node.params[0];\n if (!firstParam) {\n return;\n }\n\n if (t.isObjectPattern(firstParam)) {\n injectSourcePropBinding(firstParam);\n return;\n }\n\n if (t.isIdentifier(firstParam)) {\n injectSourcePropIntoIdentifierParam(node, firstParam);\n }\n}\n\nfunction injectSourcePropIntoExpression(node: t.Expression | null | undefined) {\n if (!node) {\n return;\n }\n\n if (t.isFunctionExpression(node) || t.isArrowFunctionExpression(node)) {\n injectSourcePropIntoFunctionParams(node);\n return;\n }\n\n if (!t.isCallExpression(node)) {\n return;\n }\n\n const firstArg = node.arguments[0];\n if (\n firstArg &&\n !t.isSpreadElement(firstArg) &&\n (t.isFunctionExpression(firstArg) || t.isArrowFunctionExpression(firstArg))\n ) {\n injectSourcePropIntoFunctionParams(firstArg);\n }\n}\n\nfunction getSourceValue(\n state: BabelState,\n loc: { line: number; column: number } | null | undefined,\n projectRoot?: string,\n) {\n const filename = state.file?.opts?.filename;\n if (!filename || !loc) {\n return null;\n }\n\n return toRelativeSource(filename, loc, projectRoot);\n}\n\nfunction buildAssignment(name: string, sourceValue: string) {\n return t.expressionStatement(\n t.assignmentExpression(\n \"=\",\n t.memberExpression(t.identifier(name), t.identifier(SOURCE_PROP)),\n t.stringLiteral(sourceValue),\n ),\n );\n}\n\nfunction buildIntrinsicSourceHelper() {\n return t.functionDeclaration(\n t.identifier(\"_markIntrinsicElementSource\"),\n [t.identifier(\"element\"), t.identifier(\"source\")],\n t.blockStatement([\n t.variableDeclaration(\"const\", [\n t.variableDeclarator(\n t.identifier(\"registryKey\"),\n t.callExpression(\n t.memberExpression(t.identifier(\"Symbol\"), t.identifier(\"for\")),\n [t.stringLiteral(JSX_SOURCE_REGISTRY_SYMBOL)],\n ),\n ),\n ]),\n t.variableDeclaration(\"let\", [\n t.variableDeclarator(\n t.identifier(\"registry\"),\n t.memberExpression(t.identifier(\"globalThis\"), t.identifier(\"registryKey\"), true),\n ),\n ]),\n t.ifStatement(\n t.unaryExpression(\n \"!\",\n t.binaryExpression(\"instanceof\", t.identifier(\"registry\"), t.identifier(\"WeakMap\")),\n ),\n t.blockStatement([\n t.expressionStatement(\n t.assignmentExpression(\n \"=\",\n t.identifier(\"registry\"),\n t.assignmentExpression(\n \"=\",\n t.memberExpression(t.identifier(\"globalThis\"), t.identifier(\"registryKey\"), true),\n t.newExpression(t.identifier(\"WeakMap\"), []),\n ),\n ),\n ),\n ]),\n ),\n t.ifStatement(\n t.logicalExpression(\n \"&&\",\n t.identifier(\"element\"),\n t.logicalExpression(\n \"&&\",\n t.binaryExpression(\"===\", t.unaryExpression(\"typeof\", t.identifier(\"element\")), t.stringLiteral(\"object\")),\n t.binaryExpression(\n \"===\",\n t.unaryExpression(\"typeof\", t.memberExpression(t.identifier(\"element\"), t.identifier(\"props\"))),\n t.stringLiteral(\"object\"),\n ),\n ),\n ),\n t.blockStatement([\n t.expressionStatement(\n t.callExpression(\n t.memberExpression(t.identifier(\"registry\"), t.identifier(\"set\")),\n [t.memberExpression(t.identifier(\"element\"), t.identifier(\"props\")), t.identifier(\"source\")],\n ),\n ),\n ]),\n ),\n t.returnStatement(t.identifier(\"element\")),\n ]),\n );\n}\n\nfunction ensureIntrinsicSourceHelper(programPath: NodePath<t.Program>, state: BabelState) {\n if (state.injectedIntrinsicHelper) {\n return;\n }\n\n const alreadyExists = programPath.node.body.some(\n (node: t.Statement) =>\n t.isFunctionDeclaration(node) && t.isIdentifier(node.id, { name: \"_markIntrinsicElementSource\" }),\n );\n if (!alreadyExists) {\n programPath.unshiftContainer(\"body\", buildIntrinsicSourceHelper());\n }\n\n state.injectedIntrinsicHelper = true;\n}\n\nfunction visitDeclaration(\n declarationPath: NodePath,\n insertAfterPath: NodePath,\n state: BabelState,\n seen: Set<string>,\n projectRoot?: string,\n) {\n if (\n declarationPath.isFunctionDeclaration() ||\n declarationPath.isClassDeclaration()\n ) {\n const name = declarationPath.node.id?.name;\n if (!name || !isComponentName(name) || seen.has(name)) {\n return;\n }\n\n if (declarationPath.isFunctionDeclaration()) {\n injectSourcePropIntoFunctionParams(declarationPath.node);\n }\n\n const sourceValue = getSourceValue(\n state,\n declarationPath.node.loc?.start,\n projectRoot,\n );\n if (!sourceValue) {\n return;\n }\n\n seen.add(name);\n insertAfterPath.insertAfter(buildAssignment(name, sourceValue));\n return;\n }\n\n if (!declarationPath.isVariableDeclaration()) {\n return;\n }\n\n const assignments = declarationPath.node.declarations.flatMap(\n (declarator: t.VariableDeclarator) => {\n if (\n !t.isIdentifier(declarator.id) ||\n !isComponentName(declarator.id.name) ||\n seen.has(declarator.id.name)\n ) {\n return [];\n }\n\n if (!declarator.init) {\n return [];\n }\n\n if (!isSupportedComponentInit(declarator.init)) {\n return [];\n }\n\n injectSourcePropIntoExpression(declarator.init);\n\n const sourceValue = getSourceValue(\n state,\n declarator.loc?.start ?? declarator.init.loc?.start,\n projectRoot,\n );\n if (!sourceValue) {\n return [];\n }\n\n seen.add(declarator.id.name);\n return [buildAssignment(declarator.id.name, sourceValue)];\n },\n );\n\n if (assignments.length > 0) {\n insertAfterPath.insertAfter(assignments);\n }\n}\n\nexport function babelInjectComponentSource(\n options: BabelInjectComponentSourceOptions = {},\n): PluginObj<BabelState> {\n const {\n injectJsxSource = true,\n injectComponentSource = true,\n projectRoot,\n } = options;\n\n return {\n name: \"babel-inject-component-source\",\n visitor: {\n CallExpression(pathNode: NodePath<t.CallExpression>, state: BabelState) {\n if (!injectJsxSource) {\n return;\n }\n\n if (!isReactElementFactoryCall(pathNode)) {\n return;\n }\n\n if (\n pathNode.parentPath.isCallExpression() &&\n t.isIdentifier(pathNode.parentPath.node.callee, {\n name: \"_markIntrinsicElementSource\",\n })\n ) {\n return;\n }\n\n const sourceValue = getSourceValue(\n state,\n pathNode.node.loc?.start,\n projectRoot,\n );\n if (!sourceValue) {\n return;\n }\n\n const programPath = pathNode.findParent((parent: NodePath) => parent.isProgram());\n if (!programPath || !programPath.isProgram()) {\n return;\n }\n\n ensureIntrinsicSourceHelper(programPath, state);\n pathNode.replaceWith(\n t.callExpression(t.identifier(\"_markIntrinsicElementSource\"), [\n pathNode.node,\n t.stringLiteral(sourceValue),\n ]),\n );\n pathNode.skip();\n },\n JSXElement: {\n exit(pathNode: NodePath<t.JSXElement>, state: BabelState) {\n if (!injectJsxSource) {\n return;\n }\n\n if (!isIntrinsicElementTag(pathNode.node.openingElement.name)) {\n return;\n }\n\n if (\n pathNode.parentPath.isCallExpression() &&\n t.isIdentifier(pathNode.parentPath.node.callee, { name: \"_markIntrinsicElementSource\" })\n ) {\n return;\n }\n\n const sourceValue = getSourceValue(\n state,\n pathNode.node.openingElement.loc?.start,\n projectRoot,\n );\n if (!sourceValue) {\n return;\n }\n\n const programPath = pathNode.findParent((parent: NodePath) => parent.isProgram());\n if (!programPath || !programPath.isProgram()) {\n return;\n }\n\n ensureIntrinsicSourceHelper(programPath, state);\n\n const wrappedNode = t.callExpression(t.identifier(\"_markIntrinsicElementSource\"), [\n pathNode.node,\n t.stringLiteral(sourceValue),\n ]);\n\n if (pathNode.parentPath.isJSXElement() || pathNode.parentPath.isJSXFragment()) {\n pathNode.replaceWith(t.jsxExpressionContainer(wrappedNode));\n return;\n }\n\n if (pathNode.parentPath.isJSXExpressionContainer()) {\n pathNode.parentPath.replaceWith(t.jsxExpressionContainer(wrappedNode));\n return;\n }\n\n pathNode.replaceWith(wrappedNode);\n },\n },\n JSXOpeningElement(pathNode: NodePath<t.JSXOpeningElement>, state: BabelState) {\n if (!injectJsxSource) {\n return;\n }\n\n if (!isCustomComponentTag(pathNode.node.name)) {\n return;\n }\n\n const rootIdentifierName = getRootJsxIdentifierName(pathNode.node.name);\n if (\n rootIdentifierName &&\n isExternalToProjectRoot(state.file?.opts?.filename, projectRoot) &&\n isStyledModuleImport(pathNode.scope.getBinding(rootIdentifierName))\n ) {\n return;\n }\n\n const hasSourceProp = pathNode.node.attributes.some(\n (attr: t.JSXAttribute | t.JSXSpreadAttribute) =>\n t.isJSXAttribute(attr) &&\n t.isJSXIdentifier(attr.name) &&\n attr.name.name === JSX_SOURCE_PROP,\n );\n if (hasSourceProp) {\n return;\n }\n\n const filename = state.file?.opts?.filename;\n const loc = pathNode.node.loc?.start;\n if (!filename || !loc) {\n return;\n }\n\n pathNode.node.attributes.push(\n t.jsxAttribute(\n t.jsxIdentifier(JSX_SOURCE_PROP),\n t.stringLiteral(\n getSourceValue(state, loc, projectRoot) ??\n `${filename.replace(/\\\\/g, \"/\")}:${loc.line}:${loc.column + 1}`,\n ),\n ),\n );\n },\n Program(programPath: NodePath<t.Program>, state: BabelState) {\n if (!injectComponentSource) {\n return;\n }\n\n const seen = new Set<string>();\n\n for (const childPath of programPath.get(\"body\")) {\n if (\n childPath.isExportNamedDeclaration() ||\n childPath.isExportDefaultDeclaration()\n ) {\n const declarationPath = childPath.get(\"declaration\");\n if (!Array.isArray(declarationPath) && declarationPath.node) {\n visitDeclaration(declarationPath, childPath, state, seen, projectRoot);\n }\n continue;\n }\n\n visitDeclaration(childPath, childPath, state, seen, projectRoot);\n }\n },\n },\n };\n}\n","export const SOURCE_PROP = \"__componentSourceLoc\";\nexport const JSX_SOURCE_PROP = \"$componentSourceLoc\";\nexport const JSX_SOURCE_REGISTRY_SYMBOL = \"react-code-locator.jsxSourceRegistry\";\n","export type SourceLocation = {\n line: number;\n column: number;\n};\n\nfunction normalizeSlashes(value: string) {\n return value.replace(/\\\\/g, \"/\");\n}\n\nfunction trimTrailingSlash(value: string) {\n return value.replace(/\\/+$/, \"\");\n}\n\nfunction splitPathSegments(value: string) {\n return normalizeSlashes(value).split(\"/\").filter(Boolean);\n}\n\nfunction computeRelativePath(fromPath: string, toPath: string) {\n const fromSegments = splitPathSegments(fromPath);\n const toSegments = splitPathSegments(toPath);\n\n let sharedIndex = 0;\n while (\n sharedIndex < fromSegments.length &&\n sharedIndex < toSegments.length &&\n fromSegments[sharedIndex] === toSegments[sharedIndex]\n ) {\n sharedIndex += 1;\n }\n\n const upSegments = new Array(Math.max(0, fromSegments.length - sharedIndex)).fill(\"..\");\n const downSegments = toSegments.slice(sharedIndex);\n const relativeSegments = [...upSegments, ...downSegments];\n return relativeSegments.length > 0 ? relativeSegments.join(\"/\") : \".\";\n}\n\nexport function normalizeProjectRoot(projectRoot?: string) {\n if (projectRoot) {\n return trimTrailingSlash(normalizeSlashes(projectRoot));\n }\n\n if (typeof process !== \"undefined\" && typeof process.cwd === \"function\") {\n return trimTrailingSlash(normalizeSlashes(process.cwd()));\n }\n\n return \"\";\n}\n\nexport function toRelativeSource(\n filename: string | undefined,\n loc: SourceLocation | null | undefined,\n projectRoot?: string,\n) {\n if (!filename || !loc) {\n return null;\n }\n\n const root = normalizeProjectRoot(projectRoot);\n const normalizedFilename = normalizeSlashes(filename);\n const relPath =\n root && normalizedFilename.startsWith(`${root}/`)\n ? normalizedFilename.slice(root.length + 1)\n : root\n ? computeRelativePath(root, normalizedFilename)\n : normalizedFilename;\n return `${relPath}:${loc.line}:${loc.column + 1}`;\n}\n\nexport function getSourceFile(source: string | null) {\n if (!source) {\n return null;\n }\n\n const match = source.match(/^(.*):\\d+:\\d+$/);\n return match?.[1] ?? null;\n}\n\nexport function isProjectLocalFile(filename: string | undefined, projectRoot?: string) {\n if (!filename) {\n return false;\n }\n\n const root = normalizeProjectRoot(projectRoot);\n const normalizedFilename = normalizeSlashes(filename);\n\n if (!root) {\n return (\n !normalizedFilename.startsWith(\"../\") &&\n !normalizedFilename.startsWith(\"/\") &&\n !/^[A-Za-z]:\\//.test(normalizedFilename)\n );\n }\n\n if (normalizedFilename.startsWith(`${root}/`) || normalizedFilename === root) {\n return true;\n }\n\n const relativePath = computeRelativePath(root, normalizedFilename);\n return !relativePath.startsWith(\"../\");\n}\n\nexport function isExternalToProjectRoot(filename: string | undefined, projectRoot?: string) {\n return !isProjectLocalFile(filename, projectRoot);\n}\n\nexport function isProjectLocalSource(source: string, projectRoot?: string) {\n const file = getSourceFile(source);\n return isProjectLocalFile(file ?? undefined, projectRoot);\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/esbuild.ts","../src/sourceAdapter.ts","../src/sourceTransform.ts","../src/babelInjectComponentSource.ts","../src/constants.ts","../src/sourceMetadata.ts"],"sourcesContent":["import { readFile } from \"node:fs/promises\";\nimport { defineSourceAdapter, type SourceInjectionOptions } from \"./sourceAdapter\";\nimport { transformSourceWithLocator } from \"./sourceTransform\";\n\ntype EsbuildOnLoadResult = {\n contents: string;\n loader: \"js\" | \"jsx\" | \"ts\" | \"tsx\";\n};\n\ntype EsbuildPluginBuild = {\n onLoad: (\n options: { filter: RegExp },\n callback: (args: { path: string }) => Promise<EsbuildOnLoadResult | null>,\n ) => void;\n};\n\nexport type EsbuildPlugin = {\n name: string;\n setup: (build: EsbuildPluginBuild) => void;\n};\n\nexport type EsbuildSourceAdapterConfig = {\n plugins: EsbuildPlugin[];\n};\n\nfunction getEsbuildLoader(filename: string): EsbuildOnLoadResult[\"loader\"] {\n if (filename.endsWith(\".tsx\")) {\n return \"tsx\";\n }\n\n if (filename.endsWith(\".ts\")) {\n return \"ts\";\n }\n\n if (filename.endsWith(\".jsx\")) {\n return \"jsx\";\n }\n\n return \"js\";\n}\n\nexport function esbuildSourceTransformPlugin(\n options: SourceInjectionOptions = {},\n): EsbuildPlugin {\n return {\n name: \"react-code-locator-source-transform\",\n setup(build) {\n build.onLoad({ filter: /\\.[mc]?[jt]sx?$/ }, async ({ path }) => {\n if (path.includes(\"/node_modules/\")) {\n return null;\n }\n\n const code = await readFile(path, \"utf8\");\n const result = await transformSourceWithLocator(code, {\n filename: path,\n ...options,\n });\n\n return {\n contents: result.code,\n loader: getEsbuildLoader(path),\n };\n });\n },\n };\n}\n\nexport function createEsbuildSourceAdapter(options: SourceInjectionOptions = {}) {\n const resolvedOptions = {\n projectRoot: process.cwd(),\n ...options,\n };\n\n return defineSourceAdapter<EsbuildSourceAdapterConfig>({\n kind: \"esbuild\",\n name: \"react-code-locator/esbuild\",\n options: resolvedOptions,\n config: {\n plugins: [esbuildSourceTransformPlugin(resolvedOptions)],\n },\n });\n}\n\nexport const esbuildSourceAdapter = createEsbuildSourceAdapter();\n","export type SourceInjectionOptions = {\n injectJsxSource?: boolean;\n injectComponentSource?: boolean;\n projectRoot?: string;\n};\n\nexport type SourceAdapterKind = \"babel\" | \"vite\" | \"esbuild\" | \"swc\";\n\nexport type SourceAdapterDescriptor<TConfig = unknown, TOptions = SourceInjectionOptions> = {\n kind: SourceAdapterKind;\n name: string;\n options: TOptions;\n config: TConfig;\n};\n\nexport function defineSourceAdapter<TConfig = unknown, TOptions = SourceInjectionOptions>(\n descriptor: SourceAdapterDescriptor<TConfig, TOptions>,\n) {\n return descriptor;\n}\n","import { transformAsync } from \"@babel/core\";\nimport { babelInjectComponentSource, type BabelInjectComponentSourceOptions } from \"./babelInjectComponentSource\";\n\nexport type SourceTransformOptions = BabelInjectComponentSourceOptions & {\n filename: string;\n sourceMaps?: boolean;\n};\n\nexport async function transformSourceWithLocator(\n code: string,\n options: SourceTransformOptions,\n) {\n const { filename, sourceMaps = true, projectRoot = process.cwd(), ...pluginOptions } = options;\n const result = await transformAsync(code, {\n filename,\n babelrc: false,\n configFile: false,\n sourceMaps,\n parserOpts: {\n sourceType: \"module\",\n plugins: [\"jsx\", \"typescript\"],\n },\n generatorOpts: {\n retainLines: true,\n },\n plugins: [[babelInjectComponentSource, { ...pluginOptions, projectRoot }]],\n });\n\n return {\n code: result?.code ?? code,\n map: result?.map ?? null,\n };\n}\n","import { types as t, type NodePath, type PluginObj } from \"@babel/core\";\nimport {\n JSX_SOURCE_PROP,\n JSX_SOURCE_REGISTRY_SYMBOL,\n SOURCE_PROP,\n} from \"./constants\";\nimport type { SourceInjectionOptions } from \"./sourceAdapter\";\nimport {\n isExternalToProjectRoot,\n toRelativeSource,\n} from \"./sourceMetadata\";\n\nexport type BabelInjectComponentSourceOptions = SourceInjectionOptions;\n\ntype BabelState = {\n file?: {\n opts?: {\n filename?: string;\n };\n };\n injectedIntrinsicHelper?: boolean;\n};\n\ntype BindingLike = {\n path: NodePath;\n};\n\nconst SOURCE_PROP_LOCAL = \"_componentSourceLoc\";\nconst SOURCE_PROPS_REST = \"__reactCodeLocatorProps\";\n\nfunction isComponentName(name: string) {\n return /^[A-Z]/.test(name);\n}\n\nfunction isCustomComponentTag(\n name: t.JSXIdentifier | t.JSXMemberExpression | t.JSXNamespacedName,\n) {\n if (t.isJSXIdentifier(name)) {\n return isComponentName(name.name);\n }\n\n if (t.isJSXMemberExpression(name)) {\n return true;\n }\n\n return false;\n}\n\nfunction isIntrinsicElementTag(\n name: t.JSXIdentifier | t.JSXMemberExpression | t.JSXNamespacedName,\n) {\n return t.isJSXIdentifier(name) && /^[a-z]/.test(name.name);\n}\n\nfunction isElementFactoryIdentifier(name: string) {\n return (\n name === \"jsx\" ||\n name === \"jsxs\" ||\n name === \"jsxDEV\" ||\n name === \"_jsx\" ||\n name === \"_jsxs\" ||\n name === \"_jsxDEV\" ||\n name === \"createElement\"\n );\n}\n\nfunction isReactElementFactoryCall(pathNode: NodePath<t.CallExpression>) {\n const callee = pathNode.node.callee;\n\n if (t.isIdentifier(callee)) {\n return isElementFactoryIdentifier(callee.name);\n }\n\n return (\n t.isMemberExpression(callee) &&\n t.isIdentifier(callee.object, { name: \"React\" }) &&\n t.isIdentifier(callee.property, { name: \"createElement\" })\n );\n}\n\nfunction getRootJsxIdentifierName(\n name: t.JSXIdentifier | t.JSXMemberExpression | t.JSXNamespacedName,\n): string | null {\n if (t.isJSXIdentifier(name)) {\n return name.name;\n }\n\n if (t.isJSXMemberExpression(name)) {\n return getRootJsxIdentifierName(name.object);\n }\n\n return null;\n}\n\nfunction isStyledModuleImport(binding: BindingLike | undefined) {\n if (!binding) {\n return false;\n }\n\n if (\n !binding.path.isImportSpecifier() &&\n !binding.path.isImportDefaultSpecifier() &&\n !binding.path.isImportNamespaceSpecifier()\n ) {\n return false;\n }\n\n const source = binding.path.parentPath.isImportDeclaration()\n ? binding.path.parentPath.node.source.value\n : null;\n if (typeof source !== \"string\") {\n return false;\n }\n\n const normalized = source.replace(/\\\\/g, \"/\");\n return (\n normalized === \"./styled\" ||\n normalized === \"../styled\" ||\n normalized.endsWith(\"/styled\")\n );\n}\n\nfunction isSupportedComponentInit(\n node: t.Expression | null | undefined,\n): boolean {\n if (!node) {\n return false;\n }\n\n if (t.isArrowFunctionExpression(node) || t.isFunctionExpression(node)) {\n return true;\n }\n\n if (!t.isCallExpression(node)) {\n return false;\n }\n\n if (\n t.isIdentifier(node.callee) &&\n (node.callee.name === \"memo\" || node.callee.name === \"forwardRef\")\n ) {\n return true;\n }\n\n return (\n t.isMemberExpression(node.callee) &&\n t.isIdentifier(node.callee.object, { name: \"React\" }) &&\n t.isIdentifier(node.callee.property) &&\n (node.callee.property.name === \"memo\" ||\n node.callee.property.name === \"forwardRef\")\n );\n}\n\nfunction hasSourcePropBinding(pattern: t.ObjectPattern) {\n return pattern.properties.some((property: t.ObjectPattern[\"properties\"][number]) => {\n if (!t.isObjectProperty(property)) {\n return false;\n }\n\n return (\n t.isIdentifier(property.key) && property.key.name === JSX_SOURCE_PROP\n );\n });\n}\n\nfunction injectSourcePropBinding(pattern: t.ObjectPattern) {\n if (hasSourcePropBinding(pattern)) {\n return;\n }\n\n const sourceBinding = t.objectProperty(\n t.identifier(JSX_SOURCE_PROP),\n t.identifier(SOURCE_PROP_LOCAL),\n false,\n false,\n );\n\n const restIndex = pattern.properties.findIndex((property: t.ObjectPattern[\"properties\"][number]) =>\n t.isRestElement(property),\n );\n if (restIndex === -1) {\n pattern.properties.push(sourceBinding);\n return;\n }\n\n pattern.properties.splice(restIndex, 0, sourceBinding);\n}\n\nfunction injectSourcePropIntoIdentifierParam(\n node:\n | t.FunctionDeclaration\n | t.FunctionExpression\n | t.ArrowFunctionExpression,\n param: t.Identifier,\n) {\n if (!t.isBlockStatement(node.body)) {\n node.body = t.blockStatement([t.returnStatement(node.body)]);\n }\n\n const alreadyInjected = node.body.body.some(\n (statement: t.Statement) =>\n t.isVariableDeclaration(statement) &&\n statement.declarations.some(\n (declaration: t.VariableDeclarator) =>\n t.isIdentifier(declaration.id) &&\n declaration.id.name === SOURCE_PROPS_REST,\n ),\n );\n if (alreadyInjected) {\n return;\n }\n\n node.body.body.unshift(\n t.variableDeclaration(\"const\", [\n t.variableDeclarator(\n t.objectPattern([\n t.objectProperty(\n t.identifier(JSX_SOURCE_PROP),\n t.identifier(SOURCE_PROP_LOCAL),\n false,\n false,\n ),\n t.restElement(t.identifier(SOURCE_PROPS_REST)),\n ]),\n param,\n ),\n ]),\n t.expressionStatement(\n t.assignmentExpression(\n \"=\",\n t.identifier(param.name),\n t.identifier(SOURCE_PROPS_REST),\n ),\n ),\n );\n}\n\nfunction injectSourcePropIntoFunctionParams(\n node:\n | t.FunctionDeclaration\n | t.FunctionExpression\n | t.ArrowFunctionExpression,\n) {\n const firstParam = node.params[0];\n if (!firstParam) {\n return;\n }\n\n if (t.isObjectPattern(firstParam)) {\n injectSourcePropBinding(firstParam);\n return;\n }\n\n if (t.isIdentifier(firstParam)) {\n injectSourcePropIntoIdentifierParam(node, firstParam);\n }\n}\n\nfunction injectSourcePropIntoExpression(node: t.Expression | null | undefined) {\n if (!node) {\n return;\n }\n\n if (t.isFunctionExpression(node) || t.isArrowFunctionExpression(node)) {\n injectSourcePropIntoFunctionParams(node);\n return;\n }\n\n if (!t.isCallExpression(node)) {\n return;\n }\n\n const firstArg = node.arguments[0];\n if (\n firstArg &&\n !t.isSpreadElement(firstArg) &&\n (t.isFunctionExpression(firstArg) || t.isArrowFunctionExpression(firstArg))\n ) {\n injectSourcePropIntoFunctionParams(firstArg);\n }\n}\n\nfunction getSourceValue(\n state: BabelState,\n loc: { line: number; column: number } | null | undefined,\n projectRoot?: string,\n) {\n const filename = state.file?.opts?.filename;\n if (!filename || !loc) {\n return null;\n }\n\n return toRelativeSource(filename, loc, projectRoot);\n}\n\nfunction buildAssignment(name: string, sourceValue: string) {\n return t.expressionStatement(\n t.assignmentExpression(\n \"=\",\n t.memberExpression(t.identifier(name), t.identifier(SOURCE_PROP)),\n t.stringLiteral(sourceValue),\n ),\n );\n}\n\nfunction buildIntrinsicSourceHelper() {\n return t.functionDeclaration(\n t.identifier(\"_markIntrinsicElementSource\"),\n [t.identifier(\"element\"), t.identifier(\"source\")],\n t.blockStatement([\n t.variableDeclaration(\"const\", [\n t.variableDeclarator(\n t.identifier(\"registryKey\"),\n t.callExpression(\n t.memberExpression(t.identifier(\"Symbol\"), t.identifier(\"for\")),\n [t.stringLiteral(JSX_SOURCE_REGISTRY_SYMBOL)],\n ),\n ),\n ]),\n t.variableDeclaration(\"let\", [\n t.variableDeclarator(\n t.identifier(\"registry\"),\n t.memberExpression(t.identifier(\"globalThis\"), t.identifier(\"registryKey\"), true),\n ),\n ]),\n t.ifStatement(\n t.unaryExpression(\n \"!\",\n t.binaryExpression(\"instanceof\", t.identifier(\"registry\"), t.identifier(\"WeakMap\")),\n ),\n t.blockStatement([\n t.expressionStatement(\n t.assignmentExpression(\n \"=\",\n t.identifier(\"registry\"),\n t.assignmentExpression(\n \"=\",\n t.memberExpression(t.identifier(\"globalThis\"), t.identifier(\"registryKey\"), true),\n t.newExpression(t.identifier(\"WeakMap\"), []),\n ),\n ),\n ),\n ]),\n ),\n t.ifStatement(\n t.logicalExpression(\n \"&&\",\n t.identifier(\"element\"),\n t.logicalExpression(\n \"&&\",\n t.binaryExpression(\"===\", t.unaryExpression(\"typeof\", t.identifier(\"element\")), t.stringLiteral(\"object\")),\n t.binaryExpression(\n \"===\",\n t.unaryExpression(\"typeof\", t.memberExpression(t.identifier(\"element\"), t.identifier(\"props\"))),\n t.stringLiteral(\"object\"),\n ),\n ),\n ),\n t.blockStatement([\n t.expressionStatement(\n t.callExpression(\n t.memberExpression(t.identifier(\"registry\"), t.identifier(\"set\")),\n [t.memberExpression(t.identifier(\"element\"), t.identifier(\"props\")), t.identifier(\"source\")],\n ),\n ),\n ]),\n ),\n t.returnStatement(t.identifier(\"element\")),\n ]),\n );\n}\n\nfunction ensureIntrinsicSourceHelper(programPath: NodePath<t.Program>, state: BabelState) {\n if (state.injectedIntrinsicHelper) {\n return;\n }\n\n const alreadyExists = programPath.node.body.some(\n (node: t.Statement) =>\n t.isFunctionDeclaration(node) && t.isIdentifier(node.id, { name: \"_markIntrinsicElementSource\" }),\n );\n if (!alreadyExists) {\n programPath.unshiftContainer(\"body\", buildIntrinsicSourceHelper());\n }\n\n state.injectedIntrinsicHelper = true;\n}\n\nfunction visitDeclaration(\n declarationPath: NodePath,\n insertAfterPath: NodePath,\n state: BabelState,\n seen: Set<string>,\n projectRoot?: string,\n) {\n if (\n declarationPath.isFunctionDeclaration() ||\n declarationPath.isClassDeclaration()\n ) {\n const name = declarationPath.node.id?.name;\n if (!name || !isComponentName(name) || seen.has(name)) {\n return;\n }\n\n if (declarationPath.isFunctionDeclaration()) {\n injectSourcePropIntoFunctionParams(declarationPath.node);\n }\n\n const sourceValue = getSourceValue(\n state,\n declarationPath.node.loc?.start,\n projectRoot,\n );\n if (!sourceValue) {\n return;\n }\n\n seen.add(name);\n insertAfterPath.insertAfter(buildAssignment(name, sourceValue));\n return;\n }\n\n if (!declarationPath.isVariableDeclaration()) {\n return;\n }\n\n const assignments = declarationPath.node.declarations.flatMap(\n (declarator: t.VariableDeclarator) => {\n if (\n !t.isIdentifier(declarator.id) ||\n !isComponentName(declarator.id.name) ||\n seen.has(declarator.id.name)\n ) {\n return [];\n }\n\n if (!declarator.init) {\n return [];\n }\n\n if (!isSupportedComponentInit(declarator.init)) {\n return [];\n }\n\n injectSourcePropIntoExpression(declarator.init);\n\n const sourceValue = getSourceValue(\n state,\n declarator.loc?.start ?? declarator.init.loc?.start,\n projectRoot,\n );\n if (!sourceValue) {\n return [];\n }\n\n seen.add(declarator.id.name);\n return [buildAssignment(declarator.id.name, sourceValue)];\n },\n );\n\n if (assignments.length > 0) {\n insertAfterPath.insertAfter(assignments);\n }\n}\n\nexport function babelInjectComponentSource(\n options: BabelInjectComponentSourceOptions = {},\n): PluginObj<BabelState> {\n const {\n injectJsxSource = true,\n injectComponentSource = true,\n projectRoot,\n } = options;\n\n return {\n name: \"babel-inject-component-source\",\n visitor: {\n CallExpression(pathNode: NodePath<t.CallExpression>, state: BabelState) {\n if (!injectJsxSource) {\n return;\n }\n\n if (!isReactElementFactoryCall(pathNode)) {\n return;\n }\n\n if (\n pathNode.parentPath.isCallExpression() &&\n t.isIdentifier(pathNode.parentPath.node.callee, {\n name: \"_markIntrinsicElementSource\",\n })\n ) {\n return;\n }\n\n const sourceValue = getSourceValue(\n state,\n pathNode.node.loc?.start,\n projectRoot,\n );\n if (!sourceValue) {\n return;\n }\n\n const programPath = pathNode.findParent((parent: NodePath) => parent.isProgram());\n if (!programPath || !programPath.isProgram()) {\n return;\n }\n\n ensureIntrinsicSourceHelper(programPath, state);\n pathNode.replaceWith(\n t.callExpression(t.identifier(\"_markIntrinsicElementSource\"), [\n pathNode.node,\n t.stringLiteral(sourceValue),\n ]),\n );\n pathNode.skip();\n },\n JSXElement: {\n exit(pathNode: NodePath<t.JSXElement>, state: BabelState) {\n if (!injectJsxSource) {\n return;\n }\n\n if (!isIntrinsicElementTag(pathNode.node.openingElement.name)) {\n return;\n }\n\n if (\n pathNode.parentPath.isCallExpression() &&\n t.isIdentifier(pathNode.parentPath.node.callee, { name: \"_markIntrinsicElementSource\" })\n ) {\n return;\n }\n\n const sourceValue = getSourceValue(\n state,\n pathNode.node.openingElement.loc?.start,\n projectRoot,\n );\n if (!sourceValue) {\n return;\n }\n\n const programPath = pathNode.findParent((parent: NodePath) => parent.isProgram());\n if (!programPath || !programPath.isProgram()) {\n return;\n }\n\n ensureIntrinsicSourceHelper(programPath, state);\n\n const wrappedNode = t.callExpression(t.identifier(\"_markIntrinsicElementSource\"), [\n pathNode.node,\n t.stringLiteral(sourceValue),\n ]);\n\n if (pathNode.parentPath.isJSXElement() || pathNode.parentPath.isJSXFragment()) {\n pathNode.replaceWith(t.jsxExpressionContainer(wrappedNode));\n return;\n }\n\n if (pathNode.parentPath.isJSXExpressionContainer()) {\n pathNode.parentPath.replaceWith(t.jsxExpressionContainer(wrappedNode));\n return;\n }\n\n pathNode.replaceWith(wrappedNode);\n },\n },\n JSXOpeningElement(pathNode: NodePath<t.JSXOpeningElement>, state: BabelState) {\n if (!injectJsxSource) {\n return;\n }\n\n if (!isCustomComponentTag(pathNode.node.name)) {\n return;\n }\n\n const rootIdentifierName = getRootJsxIdentifierName(pathNode.node.name);\n if (\n rootIdentifierName &&\n isExternalToProjectRoot(state.file?.opts?.filename, projectRoot) &&\n isStyledModuleImport(pathNode.scope.getBinding(rootIdentifierName))\n ) {\n return;\n }\n\n const hasSourceProp = pathNode.node.attributes.some(\n (attr: t.JSXAttribute | t.JSXSpreadAttribute) =>\n t.isJSXAttribute(attr) &&\n t.isJSXIdentifier(attr.name) &&\n attr.name.name === JSX_SOURCE_PROP,\n );\n if (hasSourceProp) {\n return;\n }\n\n const filename = state.file?.opts?.filename;\n const loc = pathNode.node.loc?.start;\n if (!filename || !loc) {\n return;\n }\n\n pathNode.node.attributes.push(\n t.jsxAttribute(\n t.jsxIdentifier(JSX_SOURCE_PROP),\n t.stringLiteral(\n getSourceValue(state, loc, projectRoot) ??\n `${filename.replace(/\\\\/g, \"/\")}:${loc.line}:${loc.column + 1}`,\n ),\n ),\n );\n },\n Program(programPath: NodePath<t.Program>, state: BabelState) {\n if (!injectComponentSource) {\n return;\n }\n\n const seen = new Set<string>();\n\n for (const childPath of programPath.get(\"body\")) {\n if (\n childPath.isExportNamedDeclaration() ||\n childPath.isExportDefaultDeclaration()\n ) {\n const declarationPath = childPath.get(\"declaration\");\n if (!Array.isArray(declarationPath) && declarationPath.node) {\n visitDeclaration(declarationPath, childPath, state, seen, projectRoot);\n }\n continue;\n }\n\n visitDeclaration(childPath, childPath, state, seen, projectRoot);\n }\n },\n },\n };\n}\n","export const SOURCE_PROP = \"__componentSourceLoc\";\nexport const JSX_SOURCE_PROP = \"$componentSourceLoc\";\nexport const JSX_SOURCE_REGISTRY_SYMBOL = \"react-code-locator.jsxSourceRegistry\";\n","export type SourceLocation = {\n line: number;\n column: number;\n};\n\nfunction normalizeSlashes(value: string) {\n return value.replace(/\\\\/g, \"/\");\n}\n\nfunction trimTrailingSlash(value: string) {\n return value.replace(/\\/+$/, \"\");\n}\n\nfunction splitPathSegments(value: string) {\n return normalizeSlashes(value).split(\"/\").filter(Boolean);\n}\n\nfunction computeRelativePath(fromPath: string, toPath: string) {\n const fromSegments = splitPathSegments(fromPath);\n const toSegments = splitPathSegments(toPath);\n\n let sharedIndex = 0;\n while (\n sharedIndex < fromSegments.length &&\n sharedIndex < toSegments.length &&\n fromSegments[sharedIndex] === toSegments[sharedIndex]\n ) {\n sharedIndex += 1;\n }\n\n const upSegments = new Array(Math.max(0, fromSegments.length - sharedIndex)).fill(\"..\");\n const downSegments = toSegments.slice(sharedIndex);\n const relativeSegments = [...upSegments, ...downSegments];\n return relativeSegments.length > 0 ? relativeSegments.join(\"/\") : \".\";\n}\n\nexport function normalizeProjectRoot(projectRoot?: string) {\n if (projectRoot) {\n return trimTrailingSlash(normalizeSlashes(projectRoot));\n }\n return \"\";\n}\n\nexport function toRelativeSource(\n filename: string | undefined,\n loc: SourceLocation | null | undefined,\n projectRoot?: string,\n) {\n if (!filename || !loc) {\n return null;\n }\n\n const root = normalizeProjectRoot(projectRoot);\n const normalizedFilename = normalizeSlashes(filename);\n const relPath =\n root && normalizedFilename.startsWith(`${root}/`)\n ? normalizedFilename.slice(root.length + 1)\n : root\n ? computeRelativePath(root, normalizedFilename)\n : normalizedFilename;\n return `${relPath}:${loc.line}:${loc.column + 1}`;\n}\n\nexport function getSourceFile(source: string | null) {\n if (!source) {\n return null;\n }\n\n const match = source.match(/^(.*):\\d+:\\d+$/);\n return match?.[1] ?? null;\n}\n\nexport function isProjectLocalFile(filename: string | undefined, projectRoot?: string) {\n if (!filename) {\n return false;\n }\n\n const root = normalizeProjectRoot(projectRoot);\n const normalizedFilename = normalizeSlashes(filename);\n\n if (!root) {\n return (\n !normalizedFilename.startsWith(\"../\") &&\n !normalizedFilename.startsWith(\"/\") &&\n !/^[A-Za-z]:\\//.test(normalizedFilename)\n );\n }\n\n if (normalizedFilename.startsWith(`${root}/`) || normalizedFilename === root) {\n return true;\n }\n\n const relativePath = computeRelativePath(root, normalizedFilename);\n return !relativePath.startsWith(\"../\");\n}\n\nexport function isExternalToProjectRoot(filename: string | undefined, projectRoot?: string) {\n return !isProjectLocalFile(filename, projectRoot);\n}\n\nexport function isProjectLocalSource(source: string, projectRoot?: string) {\n const file = getSourceFile(source);\n return isProjectLocalFile(file ?? undefined, projectRoot);\n}\n"],"mappings":"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","names":[]}
|