vue-hook-optimizer 0.0.55 → 0.0.57

Sign up to get free protection for your applications and to get access to all the features.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/analyze/template.ts","../src/analyze/setupScript.ts","../src/analyze/utils.ts","../src/analyze/options.ts","../src/analyze/tsx.ts","../src/utils/traverse.ts","../src/suggest/split.ts","../src/suggest/filter.ts","../src/suggest/utils.ts","../src/suggest/index.ts","../src/vis.ts"],"sourcesContent":["export { parse } from '@vue/compiler-sfc';\nexport * from './analyze';\nexport * from './suggest';\nexport { getVisData } from './vis';\nexport type { TypedNode } from './analyze/utils';\nexport { NodeType } from './analyze/utils';\n","import { babelParse, compileTemplate } from '@vue/compiler-sfc';\nimport _traverse from '@babel/traverse';\n\nconst traverse: typeof _traverse\n // @ts-expect-error unwarp default\n = _traverse.default?.default || _traverse.default || _traverse;\n\nexport function analyze(\n content: string,\n) {\n const id = 'template';\n const { code } = compileTemplate({\n id,\n source: content,\n filename: `${id}.js`,\n });\n\n // console.log(code);\n const ast = babelParse(code, { sourceType: 'module', plugins: [\n 'typescript',\n ] });\n\n // ----\n\n const nodes = new Set<string>();\n\n traverse(ast, {\n MemberExpression(path) {\n if (path.type === 'MemberExpression') {\n if (path.node.object && path.node.object.type === 'Identifier' && path.node.object.name === '_ctx') {\n if (path.node.property && path.node.property.type === 'Identifier') {\n nodes.add(path.node.property.name);\n }\n }\n }\n },\n ObjectProperty(path) {\n if (path.node.key.type === 'Identifier' && path.node.key.name === 'ref') {\n if (path.node.value.type === 'StringLiteral') {\n const name = path.node.value.value;\n name && nodes.add(name);\n }\n }\n },\n // component\n CallExpression(path) {\n if (path.node.callee.type === 'Identifier' && path.node.callee.name === '_resolveComponent') {\n if (path.node.arguments[0].type === 'StringLiteral') {\n const name = path.node.arguments[0].value;\n name && nodes.add(name);\n }\n }\n },\n });\n\n return nodes;\n}\n","import { babelParse } from '@vue/compiler-sfc';\nimport type { Scope } from '@babel/traverse';\nimport _traverse from '@babel/traverse';\nimport type * as t from '@babel/types';\nimport { NodeCollection, NodeType, getComment } from './utils';\n\nconst traverse: typeof _traverse\n // @ts-expect-error unwarp default\n = _traverse.default?.default || _traverse.default || _traverse;\n\nconst ignoreFunctionsName = ['defineProps', 'defineEmits', 'withDefaults'];\n\nexport function processSetup(\n ast: t.Node,\n parentScope?: Scope,\n parentPath?: t.Node,\n _spread?: string[],\n _lineOffset = 0,\n) {\n const spread = _spread || [];\n\n const nodeCollection = new NodeCollection(_lineOffset);\n\n const graph = {\n nodes: new Set<string>(),\n edges: new Map<string, Set<string>>(),\n spread: new Map<string, Set<string>>(),\n };\n\n traverse(ast, {\n VariableDeclaration(path) {\n path.node.declarations.forEach((declaration) => {\n if (declaration.id.type === 'ArrayPattern') {\n declaration.id.elements.forEach((element) => {\n if (element?.type === 'Identifier') {\n const name = element.name;\n const binding = path.scope.getBinding(name);\n\n if (\n binding\n && (path.parent.type === 'Program'\n || (parentPath?.type === 'ObjectMethod' && parentPath.body === path.parent)\n )\n && !(declaration.init?.type === 'CallExpression'\n && declaration.init?.callee.type === 'Identifier'\n && ignoreFunctionsName.includes(declaration.init?.callee.name)\n )\n ) {\n graph.nodes.add(name);\n nodeCollection.addNode(name, element, {\n comment: getComment(path.node),\n });\n if (!graph.edges.get(name)) {\n graph.edges.set(name, new Set());\n }\n }\n }\n if (element?.type === 'RestElement' && element.argument.type === 'Identifier') {\n const name = element.argument.name;\n const binding = path.scope.getBinding(name);\n\n if (\n binding\n && (path.parent.type === 'Program'\n || (parentPath?.type === 'ObjectMethod' && parentPath.body === path.parent)\n )\n && !(declaration.init?.type === 'CallExpression'\n && declaration.init?.callee.type === 'Identifier'\n && ignoreFunctionsName.includes(declaration.init?.callee.name)\n )\n ) {\n graph.nodes.add(name);\n nodeCollection.addNode(name, element.argument, {\n comment: getComment(path.node),\n });\n if (!graph.edges.get(name)) {\n graph.edges.set(name, new Set());\n }\n }\n }\n });\n }\n if (declaration.id.type === 'ObjectPattern') {\n declaration.id.properties.forEach((property) => {\n if (property.type === 'ObjectProperty' && property.value.type === 'Identifier') {\n const name = property.value.name;\n const binding = path.scope.getBinding(name);\n if (\n binding\n && (path.parent.type === 'Program'\n || (parentPath?.type === 'ObjectMethod' && parentPath.body === path.parent)\n )\n && !(declaration.init?.type === 'CallExpression'\n && declaration.init?.callee.type === 'Identifier'\n && ignoreFunctionsName.includes(declaration.init?.callee.name)\n )\n ) {\n graph.nodes.add(name);\n nodeCollection.addNode(name, property.value, {\n comment: getComment(property),\n });\n if (!graph.edges.get(name)) {\n graph.edges.set(name, new Set());\n }\n }\n }\n\n if (property.type === 'RestElement' && property.argument.type === 'Identifier') {\n const name = property.argument.name;\n const binding = path.scope.getBinding(name);\n if (\n binding\n && (path.parent.type === 'Program'\n || (parentPath?.type === 'ObjectMethod' && parentPath.body === path.parent)\n )\n && !(declaration.init?.type === 'CallExpression'\n && declaration.init?.callee.type === 'Identifier'\n && ignoreFunctionsName.includes(declaration.init?.callee.name)\n )\n ) {\n graph.nodes.add(name);\n nodeCollection.addNode(name, property.argument, {\n comment: getComment(property),\n });\n if (!graph.edges.get(name)) {\n graph.edges.set(name, new Set());\n }\n }\n }\n });\n }\n if (declaration.id?.type === 'Identifier') {\n const name = declaration.id.name;\n const binding = path.scope.getBinding(name);\n if (\n binding\n && (path.parent.type === 'Program'\n || (parentPath?.type === 'ObjectMethod' && parentPath.body === path.parent)\n )\n && !(declaration.init?.type === 'CallExpression'\n && declaration.init?.callee.type === 'Identifier'\n && ignoreFunctionsName.includes(declaration.init?.callee.name)\n )\n ) {\n graph.nodes.add(name);\n nodeCollection.addNode(name, declaration, {\n comment: getComment(path.node),\n });\n if (!graph.edges.get(name)) {\n graph.edges.set(name, new Set());\n }\n\n if (spread.includes(name)) {\n if (declaration.init?.type === 'ObjectExpression') {\n declaration.init?.properties.forEach((prop) => {\n if (\n (prop.type === 'ObjectProperty' || prop.type === 'ObjectMethod')\n && prop.key.type === 'Identifier'\n ) {\n const keyName = prop.key.name;\n graph.nodes.add(keyName);\n nodeCollection.addNode(keyName, prop, {\n comment: getComment(prop),\n });\n if (!graph.edges.get(keyName)) {\n graph.edges.set(keyName, new Set());\n }\n if (graph.spread.has(name)) {\n graph.spread.get(name)?.add(keyName);\n }\n else {\n graph.spread.set(name, new Set([keyName]));\n }\n }\n else if (prop.type === 'SpreadElement') {\n console.warn('not support spread in spread');\n }\n });\n }\n if (\n declaration.init?.type === 'CallExpression'\n && declaration.init?.callee.type === 'Identifier'\n && declaration.init?.callee.name === 'reactive'\n ) {\n const arg = declaration.init?.arguments[0];\n if (arg.type === 'ObjectExpression') {\n arg.properties.forEach((prop) => {\n if (\n (prop.type === 'ObjectProperty' || prop.type === 'ObjectMethod')\n && prop.key.type === 'Identifier'\n ) {\n const keyName = prop.key.name;\n graph.nodes.add(keyName);\n nodeCollection.addNode(keyName, prop, {\n comment: getComment(prop),\n });\n if (!graph.edges.get(keyName)) {\n graph.edges.set(keyName, new Set());\n }\n if (graph.spread.has(name)) {\n graph.spread.get(name)?.add(keyName);\n }\n else {\n graph.spread.set(name, new Set([keyName]));\n }\n }\n else if (prop.type === 'SpreadElement') {\n console.warn('not support spread in spread');\n }\n });\n }\n }\n }\n }\n }\n });\n },\n FunctionDeclaration(path) {\n const name = path.node.id?.name;\n if (name) {\n const binding = path.scope.getBinding(name);\n if (binding && (path.parent.type === 'Program'\n || (parentPath?.type === 'ObjectMethod' && parentPath.body === path.parent)\n )) {\n graph.nodes.add(name);\n nodeCollection.addNode(name, path.node.id!, {\n isMethod: true,\n comment: getComment(path.node),\n });\n if (!graph.edges.get(name)) {\n graph.edges.set(name, new Set());\n }\n }\n }\n },\n }, parentScope, parentPath);\n\n // get the relation between the variable and the function\n\n traverse(ast, {\n FunctionDeclaration(path) {\n const name = path.node.id?.name;\n if (name && graph.nodes.has(name)) {\n traverse(path.node.body, {\n Identifier(path1) {\n const binding = path1.scope.getBinding(path1.node.name);\n if (\n graph.nodes.has(path1.node.name)\n && (\n (path1.parent.type !== 'MemberExpression'\n && path1.parent.type !== 'OptionalMemberExpression')\n || path1.parent.object === path1.node\n )\n && (binding?.scope.block.type === 'Program'\n || (parentScope === binding?.scope)\n )\n ) {\n graph.edges.get(name)?.add(path1.node.name);\n }\n },\n MemberExpression(path1) {\n if (\n path1.node.object.type === 'Identifier'\n && spread.includes(path1.node.object.name)\n ) {\n const binding = path1.scope.getBinding(path1.node.object.name);\n if (\n spread.includes(path1.node.object.name)\n && path1.node.property.type === 'Identifier'\n && (binding?.scope.block.type === 'Program'\n || (parentScope === binding?.scope)\n )\n ) {\n graph.edges.get(name)?.add(path1.node.property.name);\n }\n }\n },\n }, path.scope, path);\n }\n },\n\n VariableDeclarator(path) {\n if (path.node.init) {\n if (path.node.id.type === 'ArrayPattern') {\n path.node.id.elements.forEach((element) => {\n if (element?.type === 'Identifier') {\n const name = element.name;\n if (name && graph.nodes.has(name) && path.node.init?.type === 'CallExpression') {\n traverse(path.node.init, {\n Identifier(path1) {\n const binding = path1.scope.getBinding(path1.node.name);\n if (\n graph.nodes.has(path1.node.name)\n && (\n (path1.parent.type !== 'MemberExpression'\n && path1.parent.type !== 'OptionalMemberExpression')\n || path1.parent.object === path1.node\n )\n && (binding?.scope.block.type === 'Program'\n || (parentScope === binding?.scope)\n )\n ) {\n graph.edges.get(name)?.add(path1.node.name);\n }\n },\n MemberExpression(path1) {\n if (\n path1.node.object.type === 'Identifier'\n && spread.includes(path1.node.object.name)\n ) {\n const binding = path1.scope.getBinding(path1.node.object.name);\n if (\n spread.includes(path1.node.object.name)\n && path1.node.property.type === 'Identifier'\n && (binding?.scope.block.type === 'Program'\n || (parentScope === binding?.scope)\n )\n ) {\n graph.edges.get(name)?.add(path1.node.property.name);\n }\n }\n },\n }, path.scope, path);\n }\n }\n });\n }\n else if (path.node.id.type === 'ObjectPattern') {\n path.node.id.properties.forEach((property) => {\n if (property.type === 'ObjectProperty' && property.value.type === 'Identifier') {\n const name = property.value.name;\n if (name && graph.nodes.has(name) && path.node.init) {\n traverse(path.node.init, {\n Identifier(path1) {\n const binding = path1.scope.getBinding(path1.node.name);\n if (\n graph.nodes.has(path1.node.name)\n && (\n (path1.parent.type !== 'MemberExpression'\n && path1.parent.type !== 'OptionalMemberExpression')\n || path1.parent.object === path1.node\n )\n && (binding?.scope.block.type === 'Program'\n || (parentScope === binding?.scope)\n )\n ) {\n graph.edges.get(name)?.add(path1.node.name);\n }\n },\n MemberExpression(path1) {\n if (\n path1.node.object.type === 'Identifier'\n && spread.includes(path1.node.object.name)\n ) {\n const binding = path1.scope.getBinding(path1.node.object.name);\n if (\n spread.includes(path1.node.object.name)\n && path1.node.property.type === 'Identifier'\n && (binding?.scope.block.type === 'Program'\n || (parentScope === binding?.scope)\n )\n ) {\n graph.edges.get(name)?.add(path1.node.property.name);\n }\n }\n },\n }, path.scope, path);\n }\n }\n });\n }\n else if ([\n 'CallExpression',\n 'ArrowFunctionExpression',\n 'FunctionDeclaration',\n ].includes(path.node.init.type)\n && path.node.id.type === 'Identifier'\n ) {\n const name = path.node.id?.name;\n if (name && graph.nodes.has(name)) {\n traverse(path.node.init, {\n Identifier(path1) {\n const binding = path1.scope.getBinding(path1.node.name);\n if (\n graph.nodes.has(path1.node.name)\n && (\n (path1.parent.type !== 'MemberExpression'\n && path1.parent.type !== 'OptionalMemberExpression')\n || path1.parent.object === path1.node\n )\n && (binding?.scope.block.type === 'Program'\n || (parentScope === binding?.scope)\n )\n ) {\n graph.edges.get(name)?.add(path1.node.name);\n }\n },\n MemberExpression(path1) {\n if (\n path1.node.object.type === 'Identifier'\n && spread.includes(path1.node.object.name)\n ) {\n const binding = path1.scope.getBinding(path1.node.object.name);\n if (\n spread.includes(path1.node.object.name)\n && path1.node.property.type === 'Identifier'\n && (binding?.scope.block.type === 'Program'\n || (parentScope === binding?.scope)\n )\n ) {\n graph.edges.get(name)?.add(path1.node.property.name);\n }\n }\n },\n }, path.scope, path);\n }\n }\n else if (path.node.id.type === 'Identifier') {\n const name = path.node.id.name;\n if (path.node.init.type === 'Identifier') {\n const binding = path.scope.getBinding(path.node.init.name);\n if (\n graph.nodes.has(path.node.init.name)\n && (binding?.scope.block.type === 'Program'\n || (parentScope === binding?.scope)\n )\n ) {\n graph.edges.get(name)?.add(path.node.init.name);\n }\n }\n else {\n traverse(path.node.init, {\n Identifier(path1) {\n const binding = path1.scope.getBinding(path1.node.name);\n if (\n graph.nodes.has(path1.node.name)\n && (\n (path1.parent.type !== 'MemberExpression'\n && path1.parent.type !== 'OptionalMemberExpression')\n || path1.parent.object === path1.node\n )\n && (binding?.scope.block.type === 'Program'\n || (parentScope === binding?.scope)\n )\n ) {\n graph.edges.get(name)?.add(path1.node.name);\n }\n },\n }, path.scope, path);\n }\n }\n }\n },\n\n ObjectMethod(path) {\n if (path.node.key.type === 'Identifier' && graph.nodes.has(path.node.key.name)) {\n const name = path.node.key.name;\n\n traverse(path.node.body, {\n Identifier(path1) {\n const binding = path1.scope.getBinding(path1.node.name);\n if (\n graph.nodes.has(path1.node.name)\n && (\n (path1.parent.type !== 'MemberExpression'\n && path1.parent.type !== 'OptionalMemberExpression')\n || path1.parent.object === path1.node\n )\n && (binding?.scope.block.type === 'Program'\n || (parentScope === binding?.scope)\n )\n ) {\n graph.edges.get(name)?.add(path1.node.name);\n }\n },\n MemberExpression(path1) {\n if (\n path1.node.object.type === 'Identifier'\n && spread.includes(path1.node.object.name)\n ) {\n const binding = path1.scope.getBinding(path1.node.object.name);\n if (\n spread.includes(path1.node.object.name)\n && path1.node.property.type === 'Identifier'\n && (binding?.scope.block.type === 'Program'\n || (parentScope === binding?.scope)\n )\n ) {\n graph.edges.get(name)?.add(path1.node.property.name);\n }\n }\n },\n }, path.scope, path);\n }\n },\n\n ObjectProperty(path) {\n if (path.node.key.type === 'Identifier' && graph.nodes.has(path.node.key.name)) {\n const name = path.node.key.name;\n\n traverse(path.node.value, {\n MemberExpression(path1) {\n if (\n path1.node.object.type === 'Identifier'\n && spread.includes(path1.node.object.name)\n ) {\n const binding = path1.scope.getBinding(path1.node.object.name);\n if (\n spread.includes(path1.node.object.name)\n && path1.node.property.type === 'Identifier'\n && (binding?.scope.block.type === 'Program'\n || (parentScope === binding?.scope)\n )\n ) {\n graph.edges.get(name)?.add(path1.node.property.name);\n }\n }\n },\n }, path.scope, path);\n }\n },\n\n ExpressionStatement(path) {\n if (path.node.expression.type === 'CallExpression' && path.node.expression.callee.type === 'Identifier') {\n const hookName = path.node.expression.callee.name;\n const hookBinding = path.scope.getBinding(hookName);\n if (!(hookBinding === undefined || hookBinding?.scope.block.type === 'Program'\n || parentScope === hookBinding?.scope)) {\n return;\n }\n\n const watchArgs = new Set<t.Identifier>();\n\n if (hookName === 'provide') {\n traverse(path.node.expression, {\n Identifier(path1) {\n const binding = path1.scope.getBinding(path1.node.name);\n if (\n graph.nodes.has(path1.node.name)\n && (\n (path1.parent.type !== 'MemberExpression'\n && path1.parent.type !== 'OptionalMemberExpression')\n || path1.parent.object === path1.node\n )\n && (binding?.scope.block.type === 'Program'\n || parentScope === binding?.scope)\n ) {\n const _node = nodeCollection.getNode(path1.node.name);\n if (_node?.info?.used) {\n _node?.info?.used?.add(hookName);\n }\n else if (_node) {\n _node.info = {\n ..._node?.info,\n used: new Set([hookName]),\n };\n }\n }\n },\n }, path.scope, path);\n }\n else if (hookName === 'watch') {\n if (path.node.expression.arguments[0].type === 'Identifier') {\n const binding = path.scope.getBinding(path.node.expression.arguments[0].name);\n if (\n graph.nodes.has(path.node.expression.arguments[0].name)\n && (binding?.scope.block.type === 'Program'\n || parentScope === binding?.scope)\n ) {\n watchArgs.add(path.node.expression.arguments[0]);\n }\n }\n else {\n traverse(path.node.expression.arguments[0], {\n Identifier(path1) {\n const binding = path1.scope.getBinding(path1.node.name);\n if (\n graph.nodes.has(path1.node.name)\n && (\n (path1.parent.type !== 'MemberExpression'\n && path1.parent.type !== 'OptionalMemberExpression')\n || path1.parent.object === path1.node\n )\n && (binding?.scope.block.type === 'Program'\n || parentScope === binding?.scope)\n ) {\n watchArgs.add(path1.node);\n }\n },\n }, path.scope, path);\n }\n }\n else if (hookName === 'useEffect' && path.node.expression.arguments[1].type === 'ArrayExpression') {\n traverse(path.node.expression.arguments[1], {\n Identifier(path1) {\n const binding = path1.scope.getBinding(path1.node.name);\n if (\n graph.nodes.has(path1.node.name)\n && (\n (path1.parent.type !== 'MemberExpression'\n && path1.parent.type !== 'OptionalMemberExpression')\n || path1.parent.object === path1.node\n )\n && (binding?.scope.block.type === 'Program'\n || parentScope === binding?.scope)\n ) {\n watchArgs.add(path1.node);\n }\n },\n }, path.scope, path);\n }\n path.node.expression.arguments.forEach((argNode, index) => {\n if (hookName === 'watch' && index === 0 && argNode.type === 'Identifier') {\n const _node = nodeCollection.getNode(argNode.name);\n if (_node?.info?.used) {\n _node?.info?.used?.add(hookName);\n }\n else if (_node) {\n _node.info = {\n ..._node?.info,\n used: new Set([hookName]),\n };\n }\n return;\n }\n traverse(argNode, {\n Identifier(path1) {\n const binding = path1.scope.getBinding(path1.node.name);\n if (\n graph.nodes.has(path1.node.name)\n && (\n (path1.parent.type !== 'MemberExpression'\n && path1.parent.type !== 'OptionalMemberExpression')\n || path1.parent.object === path1.node\n )\n && (binding?.scope.block.type === 'Program'\n || parentScope === binding?.scope)\n ) {\n if (['watch', 'useEffect'].includes(hookName) && watchArgs.size > 0) {\n const watchArgsNames = Array.from(watchArgs).map(arg => arg.name);\n watchArgs.forEach((watchArg) => {\n if (!watchArgsNames.includes(path1.node.name)) {\n graph.edges.get(watchArg.name)?.add(path1.node.name);\n }\n });\n }\n const _node = nodeCollection.getNode(path1.node.name);\n if (_node?.info?.used) {\n _node?.info?.used?.add(hookName);\n }\n else if (_node) {\n _node.info = {\n ..._node?.info,\n used: new Set([hookName]),\n };\n }\n }\n },\n }, path.scope, path);\n });\n }\n },\n }, parentScope, parentPath);\n\n return {\n graph,\n nodeCollection,\n };\n}\n\nexport function analyze(\n content: string,\n lineOffset = 0,\n jsx = false,\n) {\n // console.log(content);\n const ast = babelParse(content, { sourceType: 'module', plugins: [\n 'typescript',\n ...jsx\n ? ['jsx' as const]\n : [],\n ] });\n\n // ---\n const { graph, nodeCollection } = processSetup(ast, undefined, undefined, undefined, lineOffset);\n return nodeCollection.map(graph);\n}\n","import type * as t from '@babel/types';\n\nexport interface TypedNode {\n label: string\n type: NodeType\n info?: Partial<{\n line: number\n column: number\n comment: string\n used: Set<string>\n }>\n};\n\nexport enum NodeType {\n var = 'var',\n fun = 'fun',\n}\n\ninterface Options {\n isComputed: boolean\n isMethod: boolean\n comment: string\n};\n\nexport class NodeCollection {\n lineOffset = 0;\n addInfo = true;\n constructor(_lineOffset = 0, _addInfo = true) {\n this.lineOffset = _lineOffset;\n this.addInfo = _addInfo;\n }\n\n nodes = new Map<string, TypedNode>();\n\n addNode(\n label: string,\n node: t.Node,\n options: Partial<Options> = { isComputed: false, isMethod: false, comment: '' },\n ) {\n if (this.nodes.has(label)) {\n return;\n }\n if (\n (!options.isComputed && (\n (node.type === 'VariableDeclarator' && [\n 'ArrowFunctionExpression',\n 'FunctionDeclaration',\n 'FunctionExpression',\n ].includes(node.init?.type || ''))\n || (node.type === 'ObjectProperty' && [\n 'ArrowFunctionExpression',\n 'FunctionDeclaration',\n 'FunctionExpression',\n ].includes(node.value?.type || ''))\n || node.type === 'FunctionDeclaration'\n || node.type === 'ObjectMethod'\n || node.type === 'ArrowFunctionExpression'\n || node.type === 'FunctionExpression'\n ))\n || options.isMethod\n ) {\n this.nodes.set(label, {\n label,\n type: NodeType.fun,\n ...(this.addInfo\n ? {\n info: {\n line: (node.loc?.start.line || 1) - 1 + this.lineOffset,\n column: node.loc?.start.column || 0,\n ...options.comment\n ? { comment: options.comment }\n : {},\n },\n }\n : {}),\n });\n }\n else {\n this.nodes.set(label, {\n label,\n type: NodeType.var,\n ...(this.addInfo\n ? {\n info: {\n line: (node.loc?.start.line || 1) - 1 + this.lineOffset,\n column: node.loc?.start.column || 0,\n ...options.comment\n ? { comment: options.comment }\n : {},\n },\n }\n : {}),\n });\n }\n }\n\n addTypedNode(label: string, node: TypedNode) {\n this.nodes.set(label, {\n label,\n type: node.type,\n ...(this.addInfo\n ? {\n info: {\n ...(node.info || {}),\n },\n }\n : {}),\n });\n }\n\n getNode(label: string) {\n return this.nodes.get(label);\n }\n\n map(graph: {\n nodes: Set<string>\n edges: Map<string, Set<string>>\n }) {\n const nodes = new Set(Array.from(graph.nodes).map((node) => {\n return this.nodes.get(node)!;\n }).filter(node => !!node));\n\n const edges = new Map(Array.from(graph.edges).map(([from, to]) => {\n return [this.nodes.get(from)!, new Set(Array.from(to).map((node) => {\n return this.nodes.get(node)!;\n }).filter(node => !!node))];\n }));\n\n return {\n nodes,\n edges,\n };\n }\n}\n\nexport function getComment(node: t.Node) {\n let comment = '';\n\n node.leadingComments?.forEach((_comment) => {\n if (_comment.loc!.end.line > node.loc!.start.line) {\n return;\n }\n if (_comment.value.trim().startsWith('*')) {\n comment += `${_comment.value.trim().replace(/^[\\s]*\\*+[\\s]*\\**/gm, '').trim()}\\n`;\n }\n });\n\n node.trailingComments?.forEach((_comment) => {\n if (_comment.loc!.end.line > node.loc!.start.line) {\n return;\n }\n if (_comment.value.trim().startsWith('*')) {\n comment += `${_comment.value.trim().replace(/^[\\s]*\\*+[\\s]*\\**/gm, '').trim()}\\n`;\n }\n else {\n comment += `${_comment.value.trim()}\\n`;\n }\n });\n\n return comment.trim();\n}\n","import { babelParse } from '@vue/compiler-sfc';\nimport type { NodePath } from '@babel/traverse';\nimport _traverse from '@babel/traverse';\nimport type * as t from '@babel/types';\nimport { processSetup } from './setupScript';\nimport { NodeCollection, getComment } from './utils';\n\nconst traverse: typeof _traverse\n // @ts-expect-error unwarp default\n = _traverse.default?.default || _traverse.default || _traverse;\n\nconst vueLifeCycleHooks = [\n 'beforeCreate',\n 'created',\n 'beforeMount',\n 'mounted',\n 'beforeUpdate',\n 'updated',\n 'beforeDestroy',\n 'destroyed',\n 'activated',\n 'deactivated',\n 'errorCaptured',\n 'renderTracked',\n 'renderTriggered',\n 'provide',\n];\n\nexport function analyze(\n content: string,\n lineOffset = 0,\n jsx = false,\n) {\n // console.log({lineOffset});\n // console.log(content);\n const ast = babelParse(content, { sourceType: 'module', plugins: [\n 'typescript',\n ...jsx\n ? ['jsx' as const]\n : [],\n ] });\n\n // ---\n\n let nodeCollection = new NodeCollection(lineOffset);\n\n const tNodes = new Map<string, t.Identifier>();\n const graph = {\n nodes: new Set<string>(),\n edges: new Map<string, Set<string>>(),\n };\n\n /** used in render block or setup return */\n const nodesUsedInTemplate = new Set<string>();\n\n function process(node: t.ObjectExpression, path: NodePath<t.ExportDefaultDeclaration>) {\n traverse(node, {\n ObjectProperty(path1) {\n if (\n (\n path.node.declaration.type === 'ObjectExpression'\n && path1.parent === path.node.declaration\n ) || (\n path.node.declaration.type === 'CallExpression'\n && path1.parent === path.node.declaration.arguments[0]\n )\n ) {\n // data\n if (\n path1.node.key.type === 'Identifier'\n && path1.node.key.name === 'data'\n && (\n path1.node.value.type === 'ArrowFunctionExpression'\n || path1.node.value.type === 'FunctionExpression'\n )\n ) {\n const dataNode = path1.node.value;\n\n traverse(dataNode, {\n ReturnStatement(path2) {\n if (path2.parent === dataNode.body) {\n if (path2.node.argument?.type === 'ObjectExpression') {\n path2.node.argument.properties.forEach((prop) => {\n if (prop.type === 'ObjectProperty') {\n if (prop.key.type === 'Identifier') {\n const name = prop.key.name;\n graph.nodes.add(name);\n tNodes.set(name, prop.key);\n nodeCollection.addNode(name, prop, {\n comment: getComment(prop),\n });\n if (!graph.edges.get(name)) {\n graph.edges.set(name, new Set());\n }\n }\n }\n });\n }\n }\n },\n }, path1.scope, path1);\n }\n\n // computed\n if (path1.node.key.type === 'Identifier' && path1.node.key.name === 'computed') {\n const computedNode = path1.node;\n if (computedNode.value.type === 'ObjectExpression') {\n computedNode.value.properties.forEach((prop) => {\n if (prop.type === 'ObjectProperty' || prop.type === 'ObjectMethod') {\n if (prop.key.type === 'Identifier') {\n const name = prop.key.name;\n graph.nodes.add(name);\n tNodes.set(name, prop.key);\n nodeCollection.addNode(name, prop, {\n isComputed: true,\n comment: getComment(prop),\n });\n if (!graph.edges.get(name)) {\n graph.edges.set(name, new Set());\n }\n }\n }\n });\n }\n }\n\n // methods\n if (path1.node.key.type === 'Identifier' && path1.node.key.name === 'methods') {\n const methodsNode = path1.node;\n if (methodsNode.value.type === 'ObjectExpression') {\n methodsNode.value.properties.forEach((prop) => {\n if (prop.type === 'ObjectProperty' || prop.type === 'ObjectMethod') {\n if (prop.key.type === 'Identifier') {\n const name = prop.key.name;\n graph.nodes.add(name);\n tNodes.set(name, prop.key);\n nodeCollection.addNode(name, prop, {\n isMethod: true,\n comment: getComment(prop),\n });\n if (!graph.edges.get(name)) {\n graph.edges.set(name, new Set());\n }\n }\n }\n });\n }\n }\n\n if (\n path1.node.key.type === 'Identifier'\n && path1.node.key.name === 'render'\n && (\n path1.node.value.type === 'ArrowFunctionExpression'\n || path1.node.value.type === 'FunctionExpression'\n )\n ) {\n traverse(path1.node.value, {\n ReturnStatement(path2) {\n const templateNode = path2.node;\n traverse(templateNode, {\n MemberExpression(path3) {\n if (path3.node.object && path3.node.object.type === 'ThisExpression') {\n if (path3.node.property && path3.node.property.type === 'Identifier') {\n nodesUsedInTemplate.add(path3.node.property.name);\n }\n }\n },\n }, path2.scope, path2);\n },\n }, path1.scope, path1);\n }\n }\n },\n ObjectMethod(path1) {\n if (\n (\n path.node.declaration.type === 'ObjectExpression'\n && path1.parent === path.node.declaration\n ) || (\n path.node.declaration.type === 'CallExpression'\n && path1.parent === path.node.declaration.arguments[0]\n )\n ) {\n // setup\n if (path1.node.key.type === 'Identifier' && path1.node.key.name === 'setup') {\n const setupNode = path1.node;\n\n const spread: string[] = [];\n\n traverse(setupNode, {\n ReturnStatement(path2) {\n if (path2.node.argument?.type === 'ObjectExpression') {\n const returnNode = path2.node.argument;\n traverse(returnNode, {\n SpreadElement(path3) {\n // ...toRefs(xxx)\n if (\n path3.node.argument.type === 'CallExpression'\n && path3.node.argument.callee.type === 'Identifier'\n && path3.node.argument.callee.name === 'toRefs'\n && path3.node.argument.arguments[0].type === 'Identifier'\n ) {\n spread.push(path3.node.argument.arguments[0].name);\n }\n // ...xxx\n else if (\n path3.node.argument.type === 'Identifier'\n ) {\n spread.push(path3.node.argument.name);\n }\n },\n }, path2.scope, path2);\n }\n if (\n path2.node.argument?.type === 'FunctionExpression'\n || path2.node.argument?.type === 'ArrowFunctionExpression'\n ) {\n const templateNode = path2.node.argument.body;\n traverse(templateNode, {\n Identifier(path3) {\n const binding = path3.scope.getBinding(path3.node.name);\n if (binding?.scope === path1.scope) {\n nodesUsedInTemplate.add(path3.node.name);\n }\n },\n JSXIdentifier(path3) {\n const binding = path3.scope.getBinding(path3.node.name);\n if (binding?.scope === path1.scope) {\n nodesUsedInTemplate.add(path3.node.name);\n }\n },\n }, path2.scope, path2);\n }\n },\n }, path1.scope, path1);\n\n const {\n graph: {\n nodes: tempNodes,\n edges: tempEdges,\n spread: tempSpread,\n },\n nodeCollection: tempNodeCollection,\n } = processSetup(setupNode, path1.scope, setupNode, spread, lineOffset);\n\n // 3 filter data by return\n traverse(setupNode, {\n ReturnStatement(path2) {\n // only process return in setupNode scope\n if (path2.scope !== path1.scope) {\n return;\n }\n\n if (path2.node.argument?.type === 'ObjectExpression') {\n const returnNode = path2.node.argument;\n traverse(returnNode, {\n ObjectProperty(path3) {\n if (path3.parent === returnNode) {\n if (\n path3.node.key.type === 'Identifier'\n && path3.node.value.type === 'Identifier'\n && tempNodes.has(path3.node.value.name)\n ) {\n const valName = path3.node.value.name;\n if (!graph.nodes.has(valName)) {\n graph.nodes.add(valName);\n tNodes.set(valName, path3.node.value);\n nodeCollection.addTypedNode(\n valName,\n tempNodeCollection.nodes.get(valName)!,\n );\n }\n if (!graph.edges.has(valName)) {\n graph.edges.set(valName, new Set([...Array.from(\n tempEdges.get(valName) || new Set<string>(),\n )]));\n }\n\n const name = path3.node.key.name;\n if (name !== valName) {\n graph.nodes.add(name);\n tNodes.set(name, path3.node.key);\n nodeCollection.addNode(name, path3.node.key, {\n comment: getComment(path3.node),\n });\n graph.edges.set(name, new Set([valName]));\n }\n }\n }\n },\n SpreadElement(path3) {\n // ...toRefs(xxx)\n if (\n path3.node.argument.type === 'CallExpression'\n && path3.node.argument.callee.type === 'Identifier'\n && path3.node.argument.callee.name === 'toRefs'\n && path3.node.argument.arguments[0].type === 'Identifier'\n && tempSpread.get(path3.node.argument.arguments[0].name)\n ) {\n tempSpread.get(path3.node.argument.arguments[0].name)?.forEach((name) => {\n graph.nodes.add(name);\n // @ts-expect-error Identifier\n tNodes.set(name, path3.node.argument.arguments[0]);\n nodeCollection.addTypedNode(name, tempNodeCollection.nodes.get(name)!);\n if (!graph.edges.get(name)) {\n graph.edges.set(name, new Set());\n tempEdges.get(name)?.forEach((edge) => {\n graph.edges.get(name)?.add(edge);\n });\n }\n });\n }\n // ...xxx\n else if (\n path3.node.argument.type === 'Identifier'\n && tempSpread.get(path3.node.argument.name)\n ) {\n tempSpread.get(path3.node.argument.name)?.forEach((name) => {\n graph.nodes.add(name);\n // @ts-expect-error Identifier\n tNodes.set(name, path3.node.argument);\n nodeCollection.addTypedNode(name, tempNodeCollection.nodes.get(name)!);\n if (!graph.edges.get(name)) {\n graph.edges.set(name, new Set());\n tempEdges.get(name)?.forEach((edge) => {\n graph.edges.get(name)?.add(edge);\n });\n }\n });\n }\n },\n }, path2.scope, path2);\n }\n else {\n graph.edges = tempEdges;\n graph.nodes = tempNodes;\n nodeCollection = tempNodeCollection;\n }\n },\n }, path1.scope, path1);\n }\n\n // data\n if (path1.node.key.type === 'Identifier' && path1.node.key.name === 'data') {\n const dataNode = path1.node;\n\n traverse(dataNode, {\n ReturnStatement(path2) {\n if (path2.parent === dataNode.body) {\n if (path2.node.argument?.type === 'ObjectExpression') {\n path2.node.argument.properties.forEach((prop) => {\n if (prop.type === 'ObjectProperty') {\n if (prop.key.type === 'Identifier') {\n const name = prop.key.name;\n graph.nodes.add(name);\n tNodes.set(name, prop.key);\n nodeCollection.addNode(name, prop, {\n comment: getComment(prop),\n });\n if (!graph.edges.get(name)) {\n graph.edges.set(name, new Set());\n }\n }\n }\n });\n }\n }\n },\n }, path1.scope, path1);\n }\n\n // render\n if (path1.node.key.type === 'Identifier' && path1.node.key.name === 'render') {\n traverse(path1.node, {\n ReturnStatement(path2) {\n const templateNode = path2.node;\n traverse(templateNode, {\n MemberExpression(path3) {\n if (path3.node.object && path3.node.object.type === 'ThisExpression') {\n if (path3.node.property && path3.node.property.type === 'Identifier') {\n nodesUsedInTemplate.add(path3.node.property.name);\n }\n }\n },\n }, path2.scope, path2);\n },\n }, path1.scope, path1);\n }\n }\n },\n }, path.scope, path);\n\n traverse(node, {\n ObjectMethod(path1) {\n if (\n (\n path.node.declaration.type === 'ObjectExpression'\n && path1.parent === path.node.declaration\n ) || (\n path.node.declaration.type === 'CallExpression'\n && path1.parent === path.node.declaration.arguments[0]\n )\n ) {\n if (path1.node.key.type === 'Identifier' && vueLifeCycleHooks.includes(path1.node.key.name)) {\n const hookName = path1.node.key.name;\n\n traverse(path1.node.body, {\n MemberExpression(path2) {\n if (path2.node.object.type === 'ThisExpression' && path2.node.property.type === 'Identifier') {\n const _node = nodeCollection.getNode(path2.node.property.name);\n if (_node?.info?.used) {\n _node?.info?.used?.add(hookName);\n }\n else if (_node) {\n _node.info = {\n ..._node?.info,\n used: new Set([hookName]),\n };\n }\n }\n },\n }, path1.scope, path1);\n }\n }\n },\n ObjectProperty(path1) {\n if (\n (\n path.node.declaration.type === 'ObjectExpression'\n && path1.parent === path.node.declaration\n ) || (\n path.node.declaration.type === 'CallExpression'\n && path1.parent === path.node.declaration.arguments[0]\n )\n ) {\n if (path1.node.key.type === 'Identifier' && path1.node.key.name === 'computed') {\n const computedNode = path1.node;\n if (computedNode.value.type === 'ObjectExpression') {\n computedNode.value.properties.forEach((prop) => {\n if (prop.type === 'ObjectMethod' && prop.key.type === 'Identifier') {\n const name = prop.key.name;\n traverse(prop, {\n MemberExpression(path2) {\n if (path2.node.object.type === 'ThisExpression' && path2.node.property.type === 'Identifier') {\n graph.edges.get(name)?.add(path2.node.property.name);\n }\n },\n }, path1.scope, path1);\n }\n\n if (\n prop.type === 'ObjectProperty'\n && prop.key.type === 'Identifier'\n && prop.value.type === 'ObjectExpression'\n ) {\n const name = prop.key.name;\n prop.value.properties.forEach((prop1) => {\n if (\n prop1.type === 'ObjectProperty'\n && prop1.key.type === 'Identifier'\n && prop1.key.name === 'get'\n ) {\n traverse(prop1, {\n MemberExpression(path2) {\n if (\n path2.node.object.type === 'ThisExpression'\n && path2.node.property.type === 'Identifier'\n ) {\n graph.edges.get(name)?.add(path2.node.property.name);\n }\n },\n }, path1.scope, path1);\n }\n });\n }\n });\n }\n }\n\n if (path1.node.key.type === 'Identifier' && path1.node.key.name === 'methods') {\n const methodsNode = path1.node;\n if (methodsNode.value.type === 'ObjectExpression') {\n methodsNode.value.properties.forEach((prop) => {\n if (\n (prop.type === 'ObjectMethod'\n || prop.type === 'ObjectProperty')\n && prop.key.type === 'Identifier'\n ) {\n const name = prop.key.name;\n traverse(prop, {\n MemberExpression(path2) {\n if (path2.node.object.type === 'ThisExpression' && path2.node.property.type === 'Identifier') {\n graph.edges.get(name)?.add(path2.node.property.name);\n }\n },\n }, path1.scope, path1);\n }\n });\n }\n }\n\n if (path1.node.key.type === 'Identifier' && ['watch', ...vueLifeCycleHooks].includes(path1.node.key.name)) {\n const hookName = path1.node.key.name;\n\n if (hookName === 'watch' && path1.node.value.type === 'ObjectExpression') {\n path1.node.value.properties.forEach((prop) => {\n if ((prop.type === 'ObjectProperty' || prop.type === 'ObjectMethod') && (\n prop.key.type === 'Identifier' || prop.key.type === 'StringLiteral'\n )) {\n const keyName = prop.key.type === 'Identifier'\n ? prop.key.name\n : prop.key.type === 'StringLiteral'\n ? prop.key.value.split('.')[0]\n : '';\n const watchArg = tNodes.get(keyName);\n\n const _node = nodeCollection.getNode(keyName);\n if (_node?.info?.used) {\n _node?.info?.used?.add(hookName);\n }\n else if (_node) {\n _node.info = {\n ..._node?.info,\n used: new Set([hookName]),\n };\n }\n\n traverse(path1.node.value, {\n MemberExpression(path2) {\n if (path2.node.object.type === 'ThisExpression' && path2.node.property.type === 'Identifier') {\n if (watchArg && watchArg.name !== path2.node.property.name) {\n graph.edges.get(watchArg.name)?.add(path2.node.property.name);\n }\n }\n },\n }, path1.scope, path1);\n }\n });\n }\n else {\n traverse(path1.node.value, {\n MemberExpression(path2) {\n if (path2.node.object.type === 'ThisExpression' && path2.node.property.type === 'Identifier') {\n const _node = nodeCollection.getNode(path2.node.property.name);\n if (_node?.info?.used) {\n _node?.info?.used?.add(hookName);\n }\n else if (_node) {\n _node.info = {\n ..._node?.info,\n used: new Set([hookName]),\n };\n }\n }\n },\n }, path1.scope, path1);\n }\n }\n }\n },\n }, path.scope, path);\n }\n\n traverse(ast, {\n ExportDefaultDeclaration(path) {\n // export default {}\n if (path.node.declaration.type === 'ObjectExpression') {\n process(path.node.declaration, path);\n }\n // export default defineComponent({})\n else if (path.node.declaration.type === 'CallExpression'\n && path.node.declaration.callee.type === 'Identifier'\n && path.node.declaration.callee.name === 'defineComponent'\n && path.node.declaration.arguments[0].type === 'ObjectExpression'\n ) {\n process(path.node.declaration.arguments[0], path);\n }\n },\n });\n\n return {\n graph: nodeCollection.map(graph),\n nodesUsedInTemplate,\n };\n}\n","import type { NodePath, Scope } from '@babel/traverse';\nimport _traverse from '@babel/traverse';\nimport type * as t from '@babel/types';\nimport { babelParse } from '@vue/compiler-sfc';\nimport type {\n IAddEdge,\n IAddNode,\n IReturnData,\n IUsedNode,\n} from '../utils/traverse';\nimport {\n addGraphBySpreadIdentifier,\n addIdentifiesToGraphByScanReturn,\n addSpreadToGraphByScanReturn,\n collectionSpread,\n parseEdgeFunctionPattern,\n parseEdgeLeftArrayPattern,\n parseEdgeLeftIdentifierPattern,\n parseEdgeLeftObjectPattern,\n parseNodeArrayPattern,\n parseNodeFunctionPattern,\n parseNodeIdentifierPattern,\n parseNodeObjectPattern,\n parseReturnJsxPattern,\n traverse,\n traverseSetup,\n} from '../utils/traverse';\nimport { NodeCollection, getComment } from './utils';\n\ninterface IProcessMain {\n node: t.Node\n type: 'vue' | 'react'\n lineOffset?: number\n addInfo?: boolean\n}\n\ninterface IProcessBranch {\n node: t.ObjectExpression\n lineOffset?: number\n addInfo?: boolean\n parentScope?: Scope\n parentNode?: t.ExportDefaultDeclaration\n parentPath: NodePath<t.ExportDefaultDeclaration>\n spread?: string[]\n}\n\ntype IProcessReact = {\n node: t.BlockStatement\n lineOffset?: number\n addInfo?: boolean\n parentScope: Scope\n parentNode: t.FunctionDeclaration\n parentPath: NodePath<t.FunctionDeclaration>\n} | {\n node: t.BlockStatement\n lineOffset?: number\n addInfo?: boolean\n parentScope: Scope\n parentNode: t.ClassMethod\n parentPath: NodePath<t.ClassMethod>\n};\n\n// deal when setup return object\nfunction processByReturnNotJSX(params: IProcessBranch) {\n const { node, parentPath, lineOffset, addInfo } = params;\n const spread: string[] = [];\n\n const nodeCollection = new NodeCollection(lineOffset, addInfo);\n\n const graph = {\n nodes: new Set<string>(),\n edges: new Map<string, Set<string>>(),\n };\n\n // 解析return, 收集spread\n const setupPath = traverseSetup({ node, parentScope: parentPath.scope, parentPath });\n\n // setup return\n collectionSpread({ path: setupPath, spread });\n\n // 收集除return之外的所有节点和边\n const {\n graph: {\n nodes: tempNodes,\n edges: tempEdges,\n spread: tempSpread,\n },\n nodeCollection: tempNodeCollection,\n nodesUsedInTemplate,\n } = processByReturnJSX({ node, parentPath, spread, lineOffset, addInfo });\n\n // 根据return信息添加必要节点\n addIdentifiesToGraphByScanReturn({\n path: setupPath,\n graph,\n nodeCollection,\n tempNodeCollection,\n tempEdges,\n });\n\n // 根据return信息添加必要节点\n addSpreadToGraphByScanReturn({\n path: setupPath,\n graph,\n nodeCollection,\n tempNodeCollection,\n tempEdges,\n tempSpread,\n });\n\n return {\n graph,\n nodeCollection,\n nodesUsedInTemplate,\n };\n}\n\n// deal when setup return jsx\nfunction processByReturnJSX(params: IProcessBranch) {\n const { node, parentPath, spread = [], lineOffset, addInfo } = params;\n\n const nodeCollection = new NodeCollection(lineOffset, addInfo);\n const nodesUsedInTemplate = new Set<string>();\n\n const graph = {\n nodes: new Set<string>(),\n edges: new Map<string, Set<string>>(),\n spread: new Map<string, Set<string>>(),\n };\n\n function addNode({ name, node, path, scope }: IAddNode, commentParentNode?: t.Node) {\n const binding = path.scope.getBinding(name);\n if (scope === binding?.scope) {\n graph.nodes.add(name);\n nodeCollection.addNode(name, node, {\n comment: commentParentNode\n ? getComment(commentParentNode)\n : '',\n });\n if (!graph.edges.get(name)) {\n graph.edges.set(name, new Set());\n }\n }\n }\n\n function addEdge({ fromName, toName, path, scope, toScope, collectionNodes }: IAddEdge) {\n const bindingScope = toScope || path.scope.getBinding(toName)?.scope;\n if (scope === bindingScope && collectionNodes.has(toName)) {\n graph.edges.get(fromName)?.add(toName);\n }\n }\n\n function addUsed({ name, path, parentPath }: IUsedNode) {\n const binding = path.scope.getBinding(name);\n if (binding?.scope === parentPath.scope) {\n nodesUsedInTemplate.add(name);\n }\n }\n\n const setupPath = traverseSetup({ node, parentScope: parentPath.scope, parentPath });\n const setupScope = setupPath.scope;\n const setupNode = setupPath.node;\n\n // 收集节点, 并收集spread依赖\n traverse(setupNode, {\n VariableDeclarator(path1) {\n parseNodeIdentifierPattern({\n path: path1,\n rootScope: setupScope,\n cb: (params) => {\n if (!spread.includes(params.name)) {\n addNode(params, path1.node);\n }\n else {\n addGraphBySpreadIdentifier({\n path: path1,\n graph,\n nodeCollection,\n iname: params.name,\n });\n }\n },\n });\n\n parseNodeObjectPattern({\n path: path1,\n rootScope: setupScope,\n cb: addNode,\n });\n\n parseNodeArrayPattern({\n path: path1,\n rootScope: setupScope,\n cb: addNode,\n });\n },\n FunctionDeclaration(path1) {\n parseNodeFunctionPattern({\n path: path1,\n rootScope: setupScope,\n cb: addNode,\n });\n },\n }, setupScope, setupPath);\n\n // 搜集jsx模版使用节点\n setupPath.traverse({\n ReturnStatement(path2) {\n // setup return jsx\n parseReturnJsxPattern({\n path: path2,\n parentPath: setupPath,\n cb: addUsed,\n });\n },\n });\n\n // 收集边\n traverse(setupNode, {\n VariableDeclarator(path1) {\n parseEdgeLeftIdentifierPattern({\n path: path1,\n rootScope: setupScope,\n collectionNodes: graph.nodes,\n cb: addEdge,\n spread,\n });\n\n parseEdgeLeftObjectPattern({\n path: path1,\n rootScope: setupScope,\n collectionNodes: graph.nodes,\n cb: addEdge,\n });\n\n parseEdgeLeftArrayPattern({\n path: path1,\n rootScope: setupScope,\n collectionNodes: graph.nodes,\n cb: addEdge,\n });\n },\n FunctionDeclaration(path1) {\n parseEdgeFunctionPattern({\n path: path1,\n rootScope: setupScope,\n collectionNodes: graph.nodes,\n cb: addEdge,\n });\n },\n }, setupScope, setupPath);\n\n return {\n graph,\n nodeCollection,\n nodesUsedInTemplate,\n };\n}\n\nfunction processByReact(params: IProcessReact) {\n const { node, parentScope, parentPath, lineOffset, addInfo } = params;\n\n const nodeCollection = new NodeCollection(lineOffset, addInfo);\n const nodesUsedInTemplate = new Set<string>();\n\n const graph = {\n nodes: new Set<string>(),\n edges: new Map<string, Set<string>>(),\n spread: new Map<string, Set<string>>(),\n };\n\n function addNode({ name, node, path, scope }: IAddNode, commentParentNode?: t.Node) {\n const binding = path.scope.getBinding(name);\n if (scope === binding?.scope) {\n graph.nodes.add(name);\n nodeCollection.addNode(name, node, {\n comment: commentParentNode\n ? getComment(commentParentNode)\n : '',\n });\n if (!graph.edges.get(name)) {\n graph.edges.set(name, new Set());\n }\n }\n }\n\n function addEdge({ fromName, toName, path, scope, toScope, collectionNodes }: IAddEdge) {\n const bindingScope = toScope || path.scope.getBinding(toName)?.scope;\n if (scope === bindingScope && collectionNodes.has(toName)) {\n graph.edges.get(fromName)?.add(toName);\n }\n }\n\n function addUsed({ name, path, parentPath }: IUsedNode) {\n const binding = path.scope.getBinding(name);\n if (binding?.scope === parentPath.scope) {\n nodesUsedInTemplate.add(name);\n }\n }\n\n // 收集节点依赖\n traverse(node, {\n VariableDeclarator(path1) {\n parseNodeIdentifierPattern({\n path: path1,\n rootScope: parentScope!,\n cb: (params) => {\n addNode(params, path1.node);\n },\n });\n\n parseNodeObjectPattern({\n path: path1,\n rootScope: parentScope!,\n cb: addNode,\n });\n\n parseNodeArrayPattern({\n path: path1,\n rootScope: parentScope!,\n cb: addNode,\n });\n },\n FunctionDeclaration(path1) {\n parseNodeFunctionPattern({\n path: path1,\n rootScope: parentScope!,\n cb: addNode,\n });\n },\n }, parentScope, parentPath);\n\n // 搜集jsx模版使用节点\n traverse(node, {\n ReturnStatement(path2) {\n // setup return jsx\n parseReturnJsxPattern({\n path: path2,\n parentPath,\n cb: addUsed,\n });\n },\n }, parentScope, parentPath);\n\n // 收集边\n traverse(node, {\n VariableDeclarator(path1) {\n parseEdgeLeftIdentifierPattern({\n path: path1,\n rootScope: parentScope!,\n collectionNodes: graph.nodes,\n cb: addEdge,\n });\n\n parseEdgeLeftObjectPattern({\n path: path1,\n rootScope: parentScope!,\n collectionNodes: graph.nodes,\n cb: addEdge,\n });\n\n parseEdgeLeftArrayPattern({\n path: path1,\n rootScope: parentScope!,\n collectionNodes: graph.nodes,\n cb: addEdge,\n });\n },\n FunctionDeclaration(path1) {\n parseEdgeFunctionPattern({\n path: path1,\n rootScope: parentScope!,\n collectionNodes: graph.nodes,\n cb: addEdge,\n });\n },\n }, parentScope, parentPath);\n\n return {\n graph,\n nodeCollection,\n nodesUsedInTemplate,\n };\n}\n\nexport function processTsx(params: IProcessMain) {\n let result: IReturnData | undefined;\n\n function process(params: IProcessBranch) {\n const { node, parentPath } = params;\n // resolve `return` then determine use processByReturnJSX or processByReturnNotJSX\n const setupPath = traverseSetup({ node, parentScope: parentPath.scope, parentPath });\n\n setupPath.traverse({\n ReturnStatement(path) {\n if (path.node.argument\n && (path.node.argument.type === 'ArrowFunctionExpression'\n || path.node.argument.type === 'FunctionExpression')\n && (path.node.argument.body.type === 'JSXElement'\n || path.node.argument.body.type === 'JSXFragment')\n ) {\n result = processByReturnJSX(params);\n }\n else {\n result = processByReturnNotJSX(params);\n }\n },\n });\n }\n\n traverse(params.node, {\n ExportDefaultDeclaration(path) {\n if (params.type === 'vue') {\n if (path.node.declaration.type === 'ObjectExpression') {\n // export default {}\n process({\n ...params,\n node: path.node.declaration,\n parentNode: path.node,\n parentPath: path,\n });\n }\n else if (\n path.node.declaration.type === 'CallExpression'\n && path.node.declaration.callee.type === 'Identifier'\n && path.node.declaration.callee.name === 'defineComponent'\n && path.node.declaration.arguments[0].type === 'ObjectExpression'\n ) {\n // export default defineComponent({})\n process({\n ...params,\n node: path.node.declaration.arguments[0],\n parentNode: path.node,\n parentPath: path,\n });\n }\n }\n if (params.type === 'react') {\n if (\n (path.node.declaration.type === 'FunctionDeclaration'\n || path.node.declaration.type === 'ArrowFunctionExpression')\n && path.node.declaration.body.type === 'BlockStatement'\n ) {\n // export default function () {}\n\n const functionPath = path.get('declaration') as NodePath<t.FunctionDeclaration>;\n\n result = processByReact({\n ...params,\n node: path.node.declaration.body,\n parentNode: functionPath.node,\n parentPath: functionPath,\n parentScope: functionPath.scope,\n });\n }\n if (path.node.declaration.type === 'ClassDeclaration') {\n // export default class Index {}\n\n const renderFunction = path.node.declaration.body.body.find((node) => {\n if (node.type === 'ClassMethod' && node.key.type === 'Identifier' && node.key.name === 'render') {\n return node;\n }\n return undefined;\n }) as t.ClassMethod;\n if (!renderFunction) {\n return;\n }\n\n const renderPath = path.get(`declaration.body.body.${\n path.node.declaration.body.body.indexOf(renderFunction)\n }`) as NodePath<t.ClassMethod>;\n\n result = processByReact({\n ...params,\n node: renderFunction.body,\n parentNode: renderFunction,\n parentPath: renderPath,\n parentScope: renderPath.scope,\n });\n }\n }\n },\n });\n\n return result!;\n}\n\nexport function analyze(\n content: string,\n type = 'vue' as 'vue' | 'react',\n lineOffset = 0,\n addInfo = true,\n) {\n const ast = babelParse(content, { sourceType: 'module', plugins: [\n 'typescript',\n 'jsx',\n ] });\n\n const { graph, nodeCollection, nodesUsedInTemplate } = processTsx({\n node: ast,\n type,\n lineOffset,\n addInfo,\n });\n\n return {\n graph: nodeCollection.map(graph),\n nodesUsedInTemplate,\n };\n}\n","import type * as t from '@babel/types';\nimport type { NodePath, Scope } from '@babel/traverse';\nimport _traverse from '@babel/traverse';\nimport type { NodeCollection } from '../analyze/utils';\nimport { getComment } from '../analyze/utils';\n\nexport const traverse: typeof _traverse\n // @ts-expect-error unwarp default\n = _traverse.default?.default || _traverse.default || _traverse;\n\nexport interface IReturnData {\n graph: {\n nodes: Set<string>\n edges: Map<string, Set<string>>\n spread?: Map<string, Set<string>>\n }\n nodeCollection: NodeCollection\n nodesUsedInTemplate: Set<string>\n}\n\nexport interface IAddNode {\n name: string\n node: t.Node\n path: NodePath<t.VariableDeclarator | t.FunctionDeclaration>\n scope: Scope\n}\n\nexport interface IUsedNode {\n name: string\n path: NodePath<t.Identifier>\n parentPath: NodePath<t.Node>\n}\n\nexport interface IAddEdge {\n fromName: string\n toName: string\n path: NodePath<t.Identifier | t.MemberExpression>\n scope: Scope\n toScope?: Scope\n collectionNodes: Set<string>\n}\n\nexport interface IParseVariable {\n path: NodePath<t.VariableDeclarator>\n rootScope: Scope\n}\n\nexport interface IParseNodeBase extends IParseVariable {\n cb?: (params: IAddNode) => void\n}\n\nexport interface IParseEdgeBase extends IParseVariable {\n cb?: (params: IAddEdge) => void\n collectionNodes: Set<string>\n spread?: string[]\n}\n\nexport interface IRescureObject {\n node: t.ObjectPattern\n rootScope: Scope\n res: t.Identifier[]\n parentScope: Scope\n parentPath: NodePath<t.VariableDeclarator | t.ObjectProperty>\n}\n\nexport interface IRescureArray {\n node: t.ArrayPattern\n rootScope: Scope\n res: t.Identifier[]\n parentScope: Scope\n parentPath: NodePath<t.VariableDeclarator | t.ArrayPattern>\n}\n\nexport interface IParseNodeFunction {\n path: NodePath<t.FunctionDeclaration>\n rootScope: Scope\n cb?: (params: IAddNode) => void\n}\n\nexport interface IParseEdgeFunction {\n path: NodePath<t.FunctionDeclaration>\n rootScope: Scope\n cb?: (params: IAddEdge) => void\n collectionNodes: Set<string>\n}\n\nexport interface IParseReturnJSX {\n path: NodePath<t.ReturnStatement>\n parentPath: NodePath<t.Node>\n cb?: (params: IUsedNode) => void\n}\n\nexport interface IParseSetup {\n node: t.ObjectExpression\n parentScope: Scope\n parentPath: NodePath<t.ExportDefaultDeclaration>\n}\n\nexport interface ICollectSpread {\n path: NodePath<t.ObjectMethod>\n spread: string[]\n}\n\nexport interface IAddIdentifiesToGraphByScanReturn {\n path: NodePath<t.ObjectMethod>\n graph: IReturnData['graph']\n nodeCollection: IReturnData['nodeCollection']\n tempNodeCollection: IReturnData['nodeCollection']\n tempEdges: IReturnData['graph']['edges']\n}\n\nexport interface IAddSpreadToGraphByScanReturn {\n path: NodePath<t.ObjectMethod>\n graph: IReturnData['graph']\n nodeCollection: IReturnData['nodeCollection']\n tempNodeCollection: IReturnData['nodeCollection']\n tempEdges: IReturnData['graph']['edges']\n tempSpread: Map<string, Set<string>>\n}\n\nexport interface IAddGraphBySpreadIdentifier {\n path: NodePath<t.VariableDeclarator>\n graph: IReturnData['graph'] & {\n spread: Map<string, Set<string>>\n }\n nodeCollection: IReturnData['nodeCollection']\n iname: string\n}\n\n/**\n * 递归遍历如下结构:\n * let { loc, loc: locd, loc: { start, end }, loc: { start: { line: { deep } }} } = node;\n * 解出 loc, locd, start, end, deep\n */\nexport function rescureObjectPattern({ node, rootScope, res, parentScope, parentPath }: IRescureObject) {\n traverse(node, {\n ObjectProperty(path1) {\n if (path1.node.type === 'ObjectProperty'\n && path1.node.key.type === 'Identifier' && path1.node.value.type === 'Identifier') {\n const name = path1.node.value.name;\n const _scope = path1.scope.getBinding(name)?.scope;\n if (_scope && _scope === rootScope) {\n res.push(path1.node.value);\n }\n }\n else if (path1.node.type === 'ObjectProperty'\n && path1.node.key.type === 'Identifier' && path1.node.value.type === 'ObjectPattern') {\n rescureObjectPattern({\n node: path1.node.value,\n rootScope,\n res,\n parentScope: path1.scope,\n parentPath: path1,\n });\n }\n },\n RestElement(path1) {\n if (path1.node.argument.type === 'Identifier') {\n const name = path1.node.argument.name;\n const _scope = path1.scope.getBinding(name)?.scope;\n if (_scope && _scope === rootScope) {\n res.push(path1.node.argument);\n }\n }\n },\n }, parentScope, parentPath);\n}\n\n/**\n * 递归遍历如下结构:\n * let [foo, [bar, baz]] = [1, [[2], 3]];\n * 解出 foo, bar, baz\n */\nexport function rescureArrayPattern({ node, rootScope, res, parentScope, parentPath }: IRescureArray) {\n traverse(node, {\n Identifier(path1) {\n if (path1.node.type === 'Identifier') {\n const name = path1.node.name;\n const _scope = path1.scope.getBinding(name)?.scope;\n if (_scope && _scope === rootScope) {\n res.push(path1.node);\n }\n }\n },\n ArrayPattern(path1) {\n if (path1.node.type === 'ArrayPattern') {\n rescureArrayPattern({\n node: path1.node,\n rootScope,\n res,\n parentScope: path1.scope,\n parentPath: path1,\n });\n }\n },\n }, parentScope, parentPath);\n}\n\nexport function parseNodeIdentifierPattern({\n path,\n rootScope,\n cb,\n}: IParseNodeBase) {\n if (path.node.id.type !== 'Identifier') {\n return;\n }\n\n if (path.node.init?.type === 'ArrowFunctionExpression' || path.node.init?.type === 'FunctionExpression') {\n // const speak = () => {}\n cb?.({\n name: path.node.id.name,\n node: path.node,\n path,\n scope: rootScope,\n });\n }\n else {\n // const open = 22\n cb?.({\n name: path.node.id.name,\n node: path.node,\n path,\n scope: rootScope,\n });\n }\n}\n\nexport function parseNodeObjectPattern({ path, rootScope, cb }: IParseNodeBase) {\n if (path.node.id.type !== 'ObjectPattern') {\n return;\n }\n\n path.node.id.properties.forEach((property) => {\n if (property.type === 'ObjectProperty'\n && property.key.type === 'Identifier' && property.value.type === 'Identifier') {\n // const { x } = obj\n cb?.({\n name: property.value.name,\n node: property,\n path,\n scope: rootScope,\n });\n }\n else if (property.type === 'ObjectProperty'\n && property.key.type === 'Identifier' && property.value.type === 'AssignmentPattern') {\n // const { x = 3 } = obj\n cb?.({\n name: property.key.name,\n node: property,\n path,\n scope: rootScope,\n });\n }\n else if (property.type === 'RestElement' && property.argument.type === 'Identifier') {\n // const { ...rest } = obj\n cb?.({\n name: property.argument.name,\n node: property,\n path,\n scope: rootScope,\n });\n }\n else if (property.type === 'ObjectProperty'\n && property.key.type === 'Identifier' && property.value.type === 'ObjectPattern') {\n // let { loc, loc: locd, loc: { start, end } } = node;\n const res: t.Identifier[] = [];\n rescureObjectPattern({\n node: property.value,\n rootScope,\n res,\n parentScope: path.scope,\n parentPath: path,\n });\n res.forEach(r => cb?.({\n name: r.name,\n node: r,\n path,\n scope: rootScope,\n }));\n }\n });\n}\n\nexport function parseNodeArrayPattern({ path, rootScope, cb }: IParseNodeBase) {\n if (path.node.id.type !== 'ArrayPattern') {\n return;\n }\n\n path.node.id.elements.forEach((ele) => {\n if (ele?.type === 'Identifier') {\n // const [arr, brr] = array\n cb?.({\n name: ele.name,\n node: ele,\n path,\n scope: rootScope,\n });\n }\n else if (ele?.type === 'ArrayPattern') {\n // let [foo, [bar, baz]] = array;\n const res: t.Identifier[] = [];\n rescureArrayPattern({\n node: ele,\n rootScope,\n res,\n parentScope: path.scope,\n parentPath: path,\n });\n res.forEach(r => cb?.({\n name: r.name,\n node: r,\n path,\n scope: rootScope,\n }));\n }\n else if (ele?.type === 'AssignmentPattern') {\n if (ele.left.type === 'Identifier') {\n // let [yy = 'b'] = array;\n cb?.({\n name: ele.left.name,\n node: ele,\n path,\n scope: rootScope,\n });\n }\n }\n else if (ele?.type === 'RestElement') {\n if (ele.argument.type === 'Identifier') {\n // const [arr2, ...rest2] = array\n cb?.({\n name: ele.argument.name,\n node: ele,\n path,\n scope: rootScope,\n });\n }\n }\n });\n}\n\nexport function parseNodeFunctionPattern({ path, rootScope, cb }: IParseNodeFunction) {\n if (path.node.type !== 'FunctionDeclaration') {\n return;\n }\n if (path.node.id?.type === 'Identifier') {\n // function abc () {}\n cb?.({\n name: path.node.id.name,\n node: path.node,\n path,\n scope: rootScope,\n });\n }\n}\n\nexport function parseEdgeLeftIdentifierPattern({ path, rootScope, cb, collectionNodes, spread }: IParseEdgeBase) {\n if (!path.node.id || path.node.id.type !== 'Identifier') {\n return;\n }\n\n if (path.node.init?.type\n && [\n 'ArrowFunctionExpression',\n 'FunctionExpression',\n 'CallExpression',\n 'ObjectExpression',\n 'ArrayExpression',\n ].includes(path.node.init.type)\n ) {\n // if (graph.nodes.has(path.node.id.name) && path.scope.getBinding(path.node.id.name)?.scope === rootScope) {\n if (collectionNodes.has(path.node.id.name) && path.scope.getBinding(path.node.id.name)?.scope === rootScope) {\n const name = path.node.id.name;\n traverse(path.node.init, {\n Identifier(path1) {\n // graph.edges.get(name)?.add(path1.node.name);\n\n const binding = path1.scope.getBinding(path1.node.name);\n if (\n binding?.scope === rootScope\n && collectionNodes.has(path1.node.name)\n && (\n (path1.parent.type !== 'MemberExpression'\n && path1.parent.type !== 'OptionalMemberExpression')\n || path1.parent.object === path1.node\n )\n ) {\n cb?.({\n fromName: name,\n toName: path1.node.name,\n path: path1,\n scope: rootScope,\n collectionNodes,\n });\n }\n },\n MemberExpression(path1) {\n if (spread?.length && path1.node.object.type === 'Identifier'\n && spread.includes(path1.node.object.name)\n && path1.node.property.type === 'Identifier') {\n cb?.({\n fromName: name,\n toName: path1.node.property.name,\n toScope: path1.scope.getBinding(path1.node.object.name)?.scope,\n path: path1,\n scope: rootScope,\n collectionNodes,\n });\n }\n },\n }, path.scope, path);\n }\n }\n}\n\nexport function parseEdgeLeftObjectPattern({ path, rootScope, cb, collectionNodes }: IParseEdgeBase) {\n if (!path.node.id || path.node.id.type !== 'ObjectPattern') {\n return;\n }\n if (path.node.init?.type\n && [\n 'ArrowFunctionExpression',\n 'FunctionExpression',\n 'CallExpression',\n 'ObjectExpression',\n 'ArrayExpression',\n ].includes(path.node.init.type)\n ) {\n const res: t.Identifier[] = [];\n rescureObjectPattern({\n node: path.node.id,\n rootScope,\n res,\n parentScope: path.scope,\n parentPath: path,\n });\n\n // res.filter(r => (graph.nodes.has(r.name) && path.scope.getBinding(r.name)?.scope === rootScope));\n res.filter(r => (collectionNodes.has(r.name) && path.scope.getBinding(r.name)?.scope === rootScope));\n\n traverse(path.node.init, {\n Identifier(path1) {\n const binding = path1.scope.getBinding(path1.node.name);\n if (\n binding?.scope === rootScope\n && collectionNodes.has(path1.node.name)\n && (\n (path1.parent.type !== 'MemberExpression'\n && path1.parent.type !== 'OptionalMemberExpression')\n || path1.parent.object === path1.node\n )\n ) {\n res.forEach((r) => {\n cb?.({\n fromName: r.name,\n toName: path1.node.name,\n path: path1,\n scope: rootScope,\n collectionNodes,\n });\n });\n }\n },\n }, path.scope, path);\n }\n}\n\nexport function parseEdgeLeftArrayPattern({ path, rootScope, cb, collectionNodes }: IParseEdgeBase) {\n if (!path.node.id || path.node.id.type !== 'ArrayPattern') {\n return;\n }\n if (path.node.init?.type\n && [\n 'ArrowFunctionExpression',\n 'FunctionExpression',\n 'CallExpression',\n 'ObjectExpression',\n 'ArrayExpression',\n ].includes(path.node.init.type)\n ) {\n const res: t.Identifier[] = [];\n rescureArrayPattern({\n node: path.node.id,\n rootScope,\n res,\n parentScope: path.scope,\n parentPath: path,\n });\n\n res.filter(r => (collectionNodes.has(r.name) && path.scope.getBinding(r.name)?.scope === rootScope));\n\n traverse(path.node.init, {\n Identifier(path1) {\n const binding = path1.scope.getBinding(path1.node.name);\n if (\n binding?.scope === rootScope\n && collectionNodes.has(path1.node.name)\n && (\n (path1.parent.type !== 'MemberExpression'\n && path1.parent.type !== 'OptionalMemberExpression')\n || path1.parent.object === path1.node\n )\n ) {\n res.forEach((r) => {\n cb?.({\n fromName: r.name,\n toName: path1.node.name,\n path: path1,\n scope: rootScope,\n collectionNodes,\n });\n });\n }\n },\n }, path.scope, path);\n }\n}\n\nexport function parseEdgeFunctionPattern({ path, rootScope, cb, collectionNodes }: IParseEdgeFunction) {\n if (!path.node.id) {\n return;\n }\n if (collectionNodes.has(path.node.id.name) && path.scope.getBinding(path.node.id.name)?.scope === rootScope) {\n const name = path.node.id.name;\n traverse(path.node.body, {\n Identifier(path1) {\n const binding = path1.scope.getBinding(path1.node.name);\n if (binding?.scope === rootScope && collectionNodes.has(path1.node.name)) {\n cb?.({\n fromName: name,\n toName: path1.node.name,\n path: path1,\n scope: rootScope,\n collectionNodes,\n });\n }\n },\n }, path.scope, path);\n }\n}\n\nexport function parseReturnJsxPattern({ path, parentPath, cb }: IParseReturnJSX) {\n if (\n path.node.argument\n && (\n // return () => (<div></div>)\n // return function() (<div></div>)\n (\n (\n path.node.argument.type === 'ArrowFunctionExpression'\n || path.node.argument.type === 'FunctionExpression'\n ) && (\n path.node.argument.body.type === 'JSXElement'\n || path.node.argument.body.type === 'JSXFragment'\n )\n )\n // return (<div></div>)\n || (\n path.node.argument.type === 'JSXElement'\n || path.node.argument.type === 'JSXFragment'\n )\n )\n ) {\n path.traverse({\n Identifier(path1) {\n // if (path1.scope.getBinding(path1.node.name)?.scope === parentPath.scope) {\n // nodesUsedInTemplate.add(path1.node.name);\n // }\n cb?.({\n name: path1.node.name,\n path: path1,\n parentPath,\n });\n },\n });\n }\n}\n\nexport function traverseSetup({ node, parentScope, parentPath }: IParseSetup) {\n let path: NodePath<t.ObjectMethod>;\n\n traverse(node, {\n ObjectMethod(path1) {\n if (\n (\n parentPath.node.declaration.type === 'ObjectExpression'\n && path1.parent === parentPath.node.declaration\n ) || (\n parentPath.node.declaration.type === 'CallExpression'\n && path1.parent === parentPath.node.declaration.arguments[0]\n )\n ) {\n if (path1.node.key.type === 'Identifier' && path1.node.key.name === 'setup') {\n path = path1;\n }\n }\n },\n }, parentScope, parentPath);\n\n return path!;\n}\n\nexport function collectionSpread({ path: path1, spread }: ICollectSpread) {\n path1.traverse({\n ReturnStatement(path2) {\n // get setup return obj spread\n if (path2.node.argument?.type === 'ObjectExpression') {\n const returnNode = path2.node.argument;\n traverse(returnNode, {\n SpreadElement(path3) {\n // ...toRefs(xxx)\n if (\n path3.node.argument.type === 'CallExpression'\n && path3.node.argument.callee.type === 'Identifier'\n && path3.node.argument.callee.name === 'toRefs'\n && path3.node.argument.arguments[0].type === 'Identifier'\n ) {\n spread.push(path3.node.argument.arguments[0].name);\n }\n // ...xxx\n else if (\n path3.node.argument.type === 'Identifier'\n ) {\n spread.push(path3.node.argument.name);\n }\n },\n }, path2.scope, path2);\n }\n },\n });\n}\n\nexport function addIdentifiesToGraphByScanReturn(\n { path: path1, graph, nodeCollection, tempNodeCollection, tempEdges }: IAddIdentifiesToGraphByScanReturn,\n) {\n path1.traverse({\n ReturnStatement(path2) {\n // get setup return obj spread\n if (path2.node.argument?.type === 'ObjectExpression') {\n const returnNode = path2.node.argument;\n traverse(returnNode, {\n ObjectProperty(path3) {\n // not spread node\n if (path3.parent === returnNode) {\n if (path3.node.key.type === 'Identifier' && path3.node.value.type === 'Identifier') {\n const valName = path3.node.value.name;\n if (!graph.nodes.has(valName)) {\n graph.nodes.add(valName);\n nodeCollection.addTypedNode(\n valName,\n tempNodeCollection.nodes.get(valName)!,\n );\n }\n if (!graph.edges.has(valName)) {\n graph.edges.set(valName, new Set([...Array.from(\n tempEdges.get(valName) || new Set<string>(),\n )]));\n }\n\n const name = path3.node.key.name;\n if (name !== valName) {\n graph.nodes.add(name);\n nodeCollection.addNode(name, path3.node.key, {\n comment: getComment(path3.node),\n });\n graph.edges.set(name, new Set([valName]));\n }\n }\n }\n },\n }, path2.scope, path2);\n }\n },\n });\n}\n\nexport function addSpreadToGraphByScanReturn(\n { path: path1, graph, nodeCollection, tempNodeCollection, tempEdges, tempSpread }: IAddSpreadToGraphByScanReturn,\n) {\n path1.traverse({\n ReturnStatement(path2) {\n // get setup return obj spread\n if (path2.node.argument?.type === 'ObjectExpression') {\n const returnNode = path2.node.argument;\n traverse(returnNode, {\n SpreadElement(path3) {\n // ...toRefs(xxx)\n if (\n path3.node.argument.type === 'CallExpression'\n && path3.node.argument.callee.type === 'Identifier'\n && path3.node.argument.callee.name === 'toRefs'\n && path3.node.argument.arguments[0].type === 'Identifier'\n && tempSpread.get(path3.node.argument.arguments[0].name)\n ) {\n tempSpread.get(path3.node.argument.arguments[0].name)?.forEach((name) => {\n graph.nodes.add(name);\n nodeCollection.addTypedNode(name, tempNodeCollection.nodes.get(name)!);\n if (!graph.edges.get(name)) {\n graph.edges.set(name, new Set());\n tempEdges.get(name)?.forEach((edge) => {\n graph.edges.get(name)?.add(edge);\n });\n }\n });\n }\n // ...xxx\n else if (\n path3.node.argument.type === 'Identifier'\n && tempSpread.get(path3.node.argument.name)\n ) {\n tempSpread.get(path3.node.argument.name)?.forEach((name) => {\n graph.nodes.add(name);\n nodeCollection.addTypedNode(name, tempNodeCollection.nodes.get(name)!);\n if (!graph.edges.get(name)) {\n graph.edges.set(name, new Set());\n tempEdges.get(name)?.forEach((edge) => {\n graph.edges.get(name)?.add(edge);\n });\n }\n });\n }\n },\n }, path2.scope, path2);\n }\n },\n });\n}\n\nexport function addGraphBySpreadIdentifier({ path: path1, graph, nodeCollection, iname }: IAddGraphBySpreadIdentifier) {\n if (path1.node.init?.type === 'ObjectExpression') {\n path1.node.init?.properties.forEach((prop) => {\n if (\n (prop.type === 'ObjectProperty' || prop.type === 'ObjectMethod')\n && prop.key.type === 'Identifier'\n ) {\n const keyName = prop.key.name;\n graph.nodes.add(keyName);\n nodeCollection.addNode(keyName, prop, {\n comment: getComment(prop),\n });\n if (!graph.edges.get(keyName)) {\n graph.edges.set(keyName, new Set());\n }\n if (graph.spread.has(iname)) {\n graph.spread.get(iname)?.add(keyName);\n }\n else {\n graph.spread.set(iname, new Set([keyName]));\n }\n }\n else if (prop.type === 'SpreadElement') {\n console.warn('not support spread in spread');\n }\n });\n }\n\n if (\n path1.node.init?.type === 'CallExpression'\n && path1.node.init?.callee.type === 'Identifier'\n && path1.node.init?.callee.name === 'reactive'\n ) {\n const arg = path1.node.init?.arguments[0];\n if (arg.type === 'ObjectExpression') {\n arg.properties.forEach((prop) => {\n if (\n (prop.type === 'ObjectProperty' || prop.type === 'ObjectMethod')\n && prop.key.type === 'Identifier'\n ) {\n const keyName = prop.key.name;\n graph.nodes.add(keyName);\n nodeCollection.addNode(keyName, prop, {\n comment: getComment(prop),\n });\n if (!graph.edges.get(keyName)) {\n graph.edges.set(keyName, new Set());\n }\n if (graph.spread.has(iname)) {\n graph.spread.get(iname)?.add(keyName);\n }\n else {\n graph.spread.set(iname, new Set([keyName]));\n }\n }\n else if (prop.type === 'SpreadElement') {\n console.warn('not support spread in spread');\n }\n });\n }\n }\n}\n","import type { TypedNode } from '../analyze/utils';\n\nfunction dfs(\n graph: Map<TypedNode, Set<TypedNode>>,\n node: TypedNode,\n targets: Set<TypedNode>,\n visited: Set<TypedNode>,\n component: Set<TypedNode>,\n) {\n component.add(node);\n visited.add(node);\n targets.forEach((target) => {\n if (!visited.has(target)) {\n dfs(graph, target, graph.get(target) || new Set(), visited, component);\n }\n });\n}\n\nfunction haveIntersection(setA: Set<TypedNode>, setB: Set<TypedNode>): boolean {\n for (const item of setA) {\n if (setB.has(item)) {\n return true;\n }\n }\n return false;\n}\n\nfunction mergeSets(arr: Set<TypedNode>[]): Set<TypedNode>[] {\n let result: Set<TypedNode>[] = [...arr];\n for (let i = 0; i < result.length; i++) {\n for (let j = i + 1; j < result.length; j++) {\n if (haveIntersection(result[i], result[j])) {\n const newSet = new Set([...result[i], ...result[j]]);\n result.splice(j, 1);\n result.splice(i, 1);\n result = [...result, newSet];\n return mergeSets(result);\n }\n }\n }\n return result;\n}\n\nexport function splitGraph(\n graph: Map<TypedNode, Set<TypedNode>>,\n) {\n const components = [] as Set<TypedNode>[];\n\n const sorted = Array.from(graph).sort((a, b) => b[1].size - a[1].size);\n\n (new Map(sorted)).forEach((targets, node) => {\n const visited = new Set<TypedNode>();\n if (!visited.has(node)) {\n const component = new Set<TypedNode>();\n dfs(graph, node, targets, visited, component);\n components.push(component);\n }\n });\n\n return mergeSets(components).map((component) => {\n const subGraph = new Map<TypedNode, Set<TypedNode>>();\n component.forEach((node) => {\n const targets = graph.get(node);\n if (targets) {\n subGraph.set(node, targets);\n }\n });\n return subGraph;\n });\n}\n","import type { TypedNode } from '../analyze/utils';\nimport { NodeType } from '../analyze/utils';\n\n/**\n * Filter out nodes that have no indegree.\n */\nexport function noIndegreeFilter(\n graph: Map<TypedNode, Set<TypedNode>>,\n) {\n const nodes = Array.from(graph.keys());\n const indegree = new Map<TypedNode, number>();\n nodes.forEach((node) => {\n indegree.set(node, 0);\n });\n graph.forEach((targets, node) => {\n targets.forEach((target) => {\n indegree.set(target, (indegree.get(target) || 0) + 1);\n });\n });\n return nodes.filter(node => indegree.get(node) === 0);\n}\n\n/**\n * Filter out nodes that have no outdegree.\n */\nexport function noOutdegreeFilter(\n graph: Map<TypedNode, Set<TypedNode>>,\n) {\n const zeroOutdegreeNodes = [];\n\n for (const [node, edges] of graph.entries()) {\n if (edges.size === 0) {\n zeroOutdegreeNodes.push(node);\n }\n }\n\n return zeroOutdegreeNodes;\n}\n\n// ---\n\nfunction removeVariable(\n graph: Map<TypedNode, Set<TypedNode>>,\n targets: Set<TypedNode>,\n) {\n const newTarget = new Set<TypedNode>();\n targets.forEach((target) => {\n if (target.type === NodeType.var) {\n const nodes = graph.get(target);\n nodes?.forEach((node) => {\n newTarget.add(node);\n });\n }\n if (target.type === NodeType.fun) {\n newTarget.add(target);\n }\n });\n return newTarget;\n}\n\n/**\n * only save function nodes\n */\nexport function onlyFunctions(\n graph: Map<TypedNode, Set<TypedNode>>,\n): Map<TypedNode, Set<TypedNode>> {\n const result = new Map<TypedNode, Set<TypedNode>>();\n graph.forEach((targets, node) => {\n if (node.type === NodeType.fun) {\n const nodes = removeVariable(graph, targets);\n result.set(node, nodes);\n }\n });\n return result;\n}\n\n// ---\n\nexport function findLinearPaths(graph: Map<TypedNode, Set<TypedNode>>) {\n const linearPaths = [];\n\n const visitedNodes = new Set();\n\n for (const [node, edges] of graph.entries()) {\n if (edges.size === 1 && !visitedNodes.has(node) && node.type === NodeType.fun) {\n const path = [node];\n let nextNode = Array.from(edges)[0];\n\n visitedNodes.add(node);\n\n while (graph.get(nextNode)?.size === 1) {\n if (visitedNodes.has(nextNode)) {\n break;\n }\n path.push(nextNode);\n visitedNodes.add(nextNode);\n nextNode = Array.from(graph.get(nextNode)!)[0];\n }\n\n if (path.length > 1) {\n linearPaths.push(path);\n }\n }\n }\n\n return linearPaths;\n}\n\n// ---\n\nexport function findArticulationPoints(graph: Map<TypedNode, Set<TypedNode>>) {\n const noIndegreeNodes = noIndegreeFilter(graph);\n let time = 0;\n const low = new Map<TypedNode, number>();\n const disc = new Map<TypedNode, number>();\n const parent = new Map<TypedNode, TypedNode | null>();\n const ap = new Set<TypedNode>();\n const visited = new Set<TypedNode>();\n\n function APUtil(graph: Map<TypedNode, Set<TypedNode>>, node: TypedNode) {\n let children = 0;\n disc.set(node, time);\n low.set(node, time);\n time++;\n visited.add(node);\n\n for (const neighbor of graph.get(node) || []) {\n if (!visited.has(neighbor)) {\n children++;\n parent.set(neighbor, node);\n APUtil(graph, neighbor);\n low.set(node, Math.min(low.get(node)!, low.get(neighbor)!));\n if (parent.get(node) === null && children > 1) {\n ap.add(node);\n }\n if (parent.get(node) !== null && low.get(neighbor)! >= disc.get(node)!) {\n ap.add(node);\n }\n }\n else if (neighbor !== parent.get(node)) {\n low.set(node, Math.min(low.get(node)!, disc.get(neighbor)!));\n }\n }\n }\n\n for (const node of graph.keys()) {\n if (!visited.has(node) && !noIndegreeNodes.includes(node)) {\n APUtil(graph, node);\n }\n }\n return ap;\n}\n","import type { TypedNode } from '../analyze/utils';\n\nexport function hasCycle(graph: Map<TypedNode, Set<TypedNode>>): { hasCycle: boolean, cycleNodes: TypedNode[] } {\n const visited: Set<TypedNode> = new Set();\n const onStack: Set<TypedNode> = new Set();\n const stack: TypedNode[] = [];\n\n function dfs(node: TypedNode): boolean {\n if (visited.has(node)) {\n if (onStack.has(node)) {\n // Find the start of the cycle.\n while (stack[0] !== node) {\n onStack.delete(stack.shift()!);\n }\n return true;\n }\n return false;\n }\n\n visited.add(node);\n onStack.add(node);\n stack.push(node);\n\n for (const neighbor of (graph.get(node) || new Set())) {\n if (dfs(neighbor)) {\n return true;\n }\n }\n\n onStack.delete(node);\n stack.pop();\n return false;\n }\n\n for (const [node, targets] of graph) {\n if (dfs(node)) {\n return { hasCycle: true, cycleNodes: [...stack] };\n }\n }\n\n return { hasCycle: false, cycleNodes: [] };\n}\n","import * as t from '@babel/types';\nimport type { TypedNode } from '../analyze/utils';\nimport { NodeType } from '../analyze/utils';\nimport { splitGraph } from './split';\nimport { findArticulationPoints, findLinearPaths, noIndegreeFilter, noOutdegreeFilter, onlyFunctions } from './filter';\nimport { hasCycle } from './utils';\n\nexport enum SuggestionType {\n info = 'info',\n warning = 'warning',\n error = 'error',\n}\n\nexport interface Suggestion {\n type: SuggestionType\n message: string\n nodeInfo?: TypedNode | Array<TypedNode>\n};\n\nexport function gen(\n graph: {\n nodes: Set<TypedNode>\n edges: Map<TypedNode, Set<TypedNode>>\n },\n usedNodes: Set<string>,\n) {\n const suggestions: Suggestion[] = [];\n const splitedGraph = splitGraph(graph.edges);\n // console.log(splitedGraph);\n splitedGraph.forEach((g) => {\n const nodes = Array.from(g.keys());\n\n if (splitedGraph.length > 1) {\n if (nodes.length > 2 && nodes.some(node => !usedNodes.has(node.label))) {\n suggestions.push({\n type: SuggestionType.info,\n message: `Nodes [${\n nodes.length > 10\n ? `${nodes.slice(0, 10).map(node => node.label).join(',')}...(${nodes.length})`\n : nodes.map(node => node.label).join(',')\n }] are isolated, perhaps you can refactor them to an isolated file.`,\n nodeInfo: nodes,\n });\n }\n }\n\n if (nodes.length > 1 && nodes.every(node => !usedNodes.has(node.label) && !node.info?.used?.size)) {\n suggestions.push({\n type: SuggestionType.info,\n message: `Nodes [${\n nodes.length > 10\n ? `${nodes.slice(0, 10).map(node => node.label).join(',')}...`\n : nodes.map(node => node.label).join(',')\n }] are not used, perhaps you can remove them.`,\n nodeInfo: nodes,\n });\n }\n const hasCycleResult = hasCycle(g);\n if (hasCycleResult.hasCycle) {\n suggestions.push({\n type: SuggestionType.error,\n message: `There is a loop call in nodes [${\n hasCycleResult.cycleNodes.map(node => node.label).join(',')\n }], perhaps you can refactor it.`,\n nodeInfo: hasCycleResult.cycleNodes,\n });\n }\n\n const paths = findLinearPaths(g);\n paths.forEach((path) => {\n suggestions.push({\n type: SuggestionType.warning,\n message: `Nodes [${\n path.length > 10\n ? `${path.slice(0, 10).map(node => node.label).join(',')}...(${path.length})`\n : path.map(node => node.label).join(',')\n }] are have function chain calls, perhaps you can refactor it.`,\n nodeInfo: path,\n });\n });\n\n if (g.size > 5) {\n const ap = findArticulationPoints(g);\n ap.forEach((node) => {\n if (node.type === NodeType.fun) {\n suggestions.push({\n type: SuggestionType.info,\n\n message: `Node [${\n node.label\n }] is an articulation point, perhaps you need to pay special attention to this node.`,\n nodeInfo: node,\n });\n }\n });\n }\n });\n\n const noIndegreeNodes = noIndegreeFilter(graph.edges);\n noIndegreeNodes.forEach((node) => {\n if (!usedNodes.has(node.label) && !node.info?.used?.size) {\n suggestions.push({\n type: SuggestionType.info,\n message: `Node [${node.label}] is not used, perhaps you can remove it.`,\n nodeInfo: node,\n });\n }\n });\n\n // const noOutdegreeNodes = noOutdegreeFilter(graph.edges);\n // noOutdegreeNodes.forEach(node => {\n // if(!usedNodes.has(node.label)) {\n // suggestions.push({\n // type: SuggestionType.info,\n // message: `Node [${node.label}] is not used, perhaps you can remove it.`,\n // nodeInfo: node,\n // });\n // }\n // });\n\n return suggestions;\n}\n","import type { Data, Edge, Node } from 'vis-network';\nimport type { TypedNode } from './analyze/utils';\n\ntype CustomNode = Node & {\n info: TypedNode['info']\n};\n\nexport function getVisData(\n graph: {\n nodes: Set<TypedNode>\n edges: Map<TypedNode, Set<TypedNode>>\n },\n usedNodes: Set<string>,\n) {\n const nodes: CustomNode[] = [];\n const edges: Edge[] = [];\n\n graph.nodes.forEach((node) => {\n nodes.push({\n id: node.label,\n label: node.label,\n shape: node.type === 'var'\n ? 'dot'\n : 'diamond',\n group: usedNodes.has(node.label) || node.info?.used?.size\n ? 'used'\n : 'normal',\n title: `${\n node.info?.used?.size\n ? `used by ${Array.from(node.info?.used || [])?.map(i => `\\`${i}\\``).join(',')}\\n\\n`\n : ''\n }${\n usedNodes.has(node.label)\n ? 'used in template\\n\\n'\n : ''\n }${node.info?.comment || ''}`.trim() || undefined,\n info: node.info,\n });\n });\n\n graph.edges.forEach((edge, key) => {\n edge.forEach((to) => {\n if (!to) {\n return;\n }\n edges.push({\n from: key.label,\n to: to.label,\n arrows: {\n to: {\n enabled: true,\n scaleFactor: 0.8,\n },\n },\n });\n });\n });\n\n return {\n nodes,\n edges,\n };\n}\n"],"mappings":"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","names":["analyze","import_compiler_sfc","_traverse","import_compiler_sfc","import_traverse","NodeType","traverse","_traverse","analyze","import_compiler_sfc","import_traverse","traverse","_traverse","analyze","import_compiler_sfc","import_traverse","traverse","_traverse","node","parentPath","traverse","params","analyze","graph","dfs","SuggestionType"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/analyze/template.ts","../src/analyze/setupScript.ts","../src/analyze/utils.ts","../src/analyze/options.ts","../src/analyze/tsx.ts","../src/utils/traverse.ts","../src/analyze/style.ts","../src/suggest/split.ts","../src/suggest/filter.ts","../src/suggest/utils.ts","../src/suggest/index.ts","../src/vis.ts"],"sourcesContent":["export { parse } from '@vue/compiler-sfc';\nexport * from './analyze';\nexport * from './suggest';\nexport { getVisData } from './vis';\nexport type { TypedNode } from './analyze/utils';\nexport { NodeType } from './analyze/utils';\n","import { babelParse, compileTemplate } from '@vue/compiler-sfc';\nimport _traverse from '@babel/traverse';\n\nconst traverse: typeof _traverse\n // @ts-expect-error unwarp default\n = _traverse.default?.default || _traverse.default || _traverse;\n\nexport function analyze(\n content: string,\n) {\n const id = 'template';\n const { code } = compileTemplate({\n id,\n source: content,\n filename: `${id}.js`,\n });\n\n // console.log(code);\n const ast = babelParse(code, { sourceType: 'module', plugins: [\n 'typescript',\n ] });\n\n // ----\n\n const nodes = new Set<string>();\n\n traverse(ast, {\n MemberExpression(path) {\n if (path.type === 'MemberExpression') {\n if (path.node.object && path.node.object.type === 'Identifier' && path.node.object.name === '_ctx') {\n if (path.node.property && path.node.property.type === 'Identifier') {\n nodes.add(path.node.property.name);\n }\n }\n }\n },\n ObjectProperty(path) {\n if (path.node.key.type === 'Identifier' && path.node.key.name === 'ref') {\n if (path.node.value.type === 'StringLiteral') {\n const name = path.node.value.value;\n if (name) {\n nodes.add(name);\n }\n }\n }\n },\n // component\n CallExpression(path) {\n if (path.node.callee.type === 'Identifier' && path.node.callee.name === '_resolveComponent') {\n if (path.node.arguments[0].type === 'StringLiteral') {\n const name = path.node.arguments[0].value;\n if (name) {\n nodes.add(name);\n }\n }\n }\n },\n });\n\n return nodes;\n}\n","import { babelParse } from '@vue/compiler-sfc';\nimport type { Scope } from '@babel/traverse';\nimport _traverse from '@babel/traverse';\nimport type * as t from '@babel/types';\nimport { NodeCollection, NodeType, getComment } from './utils';\n\nconst traverse: typeof _traverse\n // @ts-expect-error unwarp default\n = _traverse.default?.default || _traverse.default || _traverse;\n\nconst ignoreFunctionsName = ['defineProps', 'defineEmits', 'withDefaults'];\n\nexport function processSetup(\n ast: t.Node,\n parentScope?: Scope,\n parentPath?: t.Node,\n _spread?: string[],\n _lineOffset = 0,\n) {\n const spread = _spread || [];\n\n const nodeCollection = new NodeCollection(_lineOffset);\n\n const graph = {\n nodes: new Set<string>(),\n edges: new Map<string, Set<string>>(),\n spread: new Map<string, Set<string>>(),\n };\n\n traverse(ast, {\n VariableDeclaration(path) {\n path.node.declarations.forEach((declaration) => {\n if (declaration.id.type === 'ArrayPattern') {\n declaration.id.elements.forEach((element) => {\n if (element?.type === 'Identifier') {\n const name = element.name;\n const binding = path.scope.getBinding(name);\n\n if (\n binding\n && (path.parent.type === 'Program'\n || (parentPath?.type === 'ObjectMethod' && parentPath.body === path.parent)\n )\n && !(declaration.init?.type === 'CallExpression'\n && declaration.init?.callee.type === 'Identifier'\n && ignoreFunctionsName.includes(declaration.init?.callee.name)\n )\n ) {\n graph.nodes.add(name);\n nodeCollection.addNode(name, element, {\n comment: getComment(path.node),\n });\n if (!graph.edges.get(name)) {\n graph.edges.set(name, new Set());\n }\n }\n }\n if (element?.type === 'RestElement' && element.argument.type === 'Identifier') {\n const name = element.argument.name;\n const binding = path.scope.getBinding(name);\n\n if (\n binding\n && (path.parent.type === 'Program'\n || (parentPath?.type === 'ObjectMethod' && parentPath.body === path.parent)\n )\n && !(declaration.init?.type === 'CallExpression'\n && declaration.init?.callee.type === 'Identifier'\n && ignoreFunctionsName.includes(declaration.init?.callee.name)\n )\n ) {\n graph.nodes.add(name);\n nodeCollection.addNode(name, element.argument, {\n comment: getComment(path.node),\n });\n if (!graph.edges.get(name)) {\n graph.edges.set(name, new Set());\n }\n }\n }\n });\n }\n if (declaration.id.type === 'ObjectPattern') {\n declaration.id.properties.forEach((property) => {\n if (property.type === 'ObjectProperty' && property.value.type === 'Identifier') {\n const name = property.value.name;\n const binding = path.scope.getBinding(name);\n if (\n binding\n && (path.parent.type === 'Program'\n || (parentPath?.type === 'ObjectMethod' && parentPath.body === path.parent)\n )\n && !(declaration.init?.type === 'CallExpression'\n && declaration.init?.callee.type === 'Identifier'\n && ignoreFunctionsName.includes(declaration.init?.callee.name)\n )\n ) {\n graph.nodes.add(name);\n nodeCollection.addNode(name, property.value, {\n comment: getComment(property),\n });\n if (!graph.edges.get(name)) {\n graph.edges.set(name, new Set());\n }\n }\n }\n\n if (property.type === 'RestElement' && property.argument.type === 'Identifier') {\n const name = property.argument.name;\n const binding = path.scope.getBinding(name);\n if (\n binding\n && (path.parent.type === 'Program'\n || (parentPath?.type === 'ObjectMethod' && parentPath.body === path.parent)\n )\n && !(declaration.init?.type === 'CallExpression'\n && declaration.init?.callee.type === 'Identifier'\n && ignoreFunctionsName.includes(declaration.init?.callee.name)\n )\n ) {\n graph.nodes.add(name);\n nodeCollection.addNode(name, property.argument, {\n comment: getComment(property),\n });\n if (!graph.edges.get(name)) {\n graph.edges.set(name, new Set());\n }\n }\n }\n });\n }\n if (declaration.id?.type === 'Identifier') {\n const name = declaration.id.name;\n const binding = path.scope.getBinding(name);\n if (\n binding\n && (path.parent.type === 'Program'\n || (parentPath?.type === 'ObjectMethod' && parentPath.body === path.parent)\n )\n && !(declaration.init?.type === 'CallExpression'\n && declaration.init?.callee.type === 'Identifier'\n && ignoreFunctionsName.includes(declaration.init?.callee.name)\n )\n ) {\n graph.nodes.add(name);\n nodeCollection.addNode(name, declaration, {\n comment: getComment(path.node),\n });\n if (!graph.edges.get(name)) {\n graph.edges.set(name, new Set());\n }\n\n if (spread.includes(name)) {\n if (declaration.init?.type === 'ObjectExpression') {\n declaration.init?.properties.forEach((prop) => {\n if (\n (prop.type === 'ObjectProperty' || prop.type === 'ObjectMethod')\n && prop.key.type === 'Identifier'\n ) {\n const keyName = prop.key.name;\n graph.nodes.add(keyName);\n nodeCollection.addNode(keyName, prop, {\n comment: getComment(prop),\n });\n if (!graph.edges.get(keyName)) {\n graph.edges.set(keyName, new Set());\n }\n if (graph.spread.has(name)) {\n graph.spread.get(name)?.add(keyName);\n }\n else {\n graph.spread.set(name, new Set([keyName]));\n }\n }\n else if (prop.type === 'SpreadElement') {\n console.warn('not support spread in spread');\n }\n });\n }\n if (\n declaration.init?.type === 'CallExpression'\n && declaration.init?.callee.type === 'Identifier'\n && declaration.init?.callee.name === 'reactive'\n ) {\n const arg = declaration.init?.arguments[0];\n if (arg.type === 'ObjectExpression') {\n arg.properties.forEach((prop) => {\n if (\n (prop.type === 'ObjectProperty' || prop.type === 'ObjectMethod')\n && prop.key.type === 'Identifier'\n ) {\n const keyName = prop.key.name;\n graph.nodes.add(keyName);\n nodeCollection.addNode(keyName, prop, {\n comment: getComment(prop),\n });\n if (!graph.edges.get(keyName)) {\n graph.edges.set(keyName, new Set());\n }\n if (graph.spread.has(name)) {\n graph.spread.get(name)?.add(keyName);\n }\n else {\n graph.spread.set(name, new Set([keyName]));\n }\n }\n else if (prop.type === 'SpreadElement') {\n console.warn('not support spread in spread');\n }\n });\n }\n }\n }\n }\n }\n });\n },\n FunctionDeclaration(path) {\n const name = path.node.id?.name;\n if (name) {\n const binding = path.scope.getBinding(name);\n if (binding && (path.parent.type === 'Program'\n || (parentPath?.type === 'ObjectMethod' && parentPath.body === path.parent)\n )) {\n graph.nodes.add(name);\n nodeCollection.addNode(name, path.node.id!, {\n isMethod: true,\n comment: getComment(path.node),\n });\n if (!graph.edges.get(name)) {\n graph.edges.set(name, new Set());\n }\n }\n }\n },\n }, parentScope, parentPath);\n\n // get the relation between the variable and the function\n\n traverse(ast, {\n FunctionDeclaration(path) {\n const name = path.node.id?.name;\n if (name && graph.nodes.has(name)) {\n traverse(path.node.body, {\n Identifier(path1) {\n const binding = path1.scope.getBinding(path1.node.name);\n if (\n graph.nodes.has(path1.node.name)\n && (\n (path1.parent.type !== 'MemberExpression'\n && path1.parent.type !== 'OptionalMemberExpression')\n || path1.parent.object === path1.node\n )\n && (binding?.scope.block.type === 'Program'\n || (parentScope === binding?.scope)\n )\n ) {\n graph.edges.get(name)?.add(path1.node.name);\n }\n },\n MemberExpression(path1) {\n if (\n path1.node.object.type === 'Identifier'\n && spread.includes(path1.node.object.name)\n ) {\n const binding = path1.scope.getBinding(path1.node.object.name);\n if (\n spread.includes(path1.node.object.name)\n && path1.node.property.type === 'Identifier'\n && (binding?.scope.block.type === 'Program'\n || (parentScope === binding?.scope)\n )\n ) {\n graph.edges.get(name)?.add(path1.node.property.name);\n }\n }\n },\n }, path.scope, path);\n }\n },\n\n VariableDeclarator(path) {\n if (path.node.init) {\n if (path.node.id.type === 'ArrayPattern') {\n path.node.id.elements.forEach((element) => {\n if (element?.type === 'Identifier') {\n const name = element.name;\n if (name && graph.nodes.has(name) && path.node.init?.type === 'CallExpression') {\n traverse(path.node.init, {\n Identifier(path1) {\n const binding = path1.scope.getBinding(path1.node.name);\n if (\n graph.nodes.has(path1.node.name)\n && (\n (path1.parent.type !== 'MemberExpression'\n && path1.parent.type !== 'OptionalMemberExpression')\n || path1.parent.object === path1.node\n )\n && (binding?.scope.block.type === 'Program'\n || (parentScope === binding?.scope)\n )\n ) {\n graph.edges.get(name)?.add(path1.node.name);\n }\n },\n MemberExpression(path1) {\n if (\n path1.node.object.type === 'Identifier'\n && spread.includes(path1.node.object.name)\n ) {\n const binding = path1.scope.getBinding(path1.node.object.name);\n if (\n spread.includes(path1.node.object.name)\n && path1.node.property.type === 'Identifier'\n && (binding?.scope.block.type === 'Program'\n || (parentScope === binding?.scope)\n )\n ) {\n graph.edges.get(name)?.add(path1.node.property.name);\n }\n }\n },\n }, path.scope, path);\n }\n }\n });\n }\n else if (path.node.id.type === 'ObjectPattern') {\n path.node.id.properties.forEach((property) => {\n if (property.type === 'ObjectProperty' && property.value.type === 'Identifier') {\n const name = property.value.name;\n if (name && graph.nodes.has(name) && path.node.init) {\n traverse(path.node.init, {\n Identifier(path1) {\n const binding = path1.scope.getBinding(path1.node.name);\n if (\n graph.nodes.has(path1.node.name)\n && (\n (path1.parent.type !== 'MemberExpression'\n && path1.parent.type !== 'OptionalMemberExpression')\n || path1.parent.object === path1.node\n )\n && (binding?.scope.block.type === 'Program'\n || (parentScope === binding?.scope)\n )\n ) {\n graph.edges.get(name)?.add(path1.node.name);\n }\n },\n MemberExpression(path1) {\n if (\n path1.node.object.type === 'Identifier'\n && spread.includes(path1.node.object.name)\n ) {\n const binding = path1.scope.getBinding(path1.node.object.name);\n if (\n spread.includes(path1.node.object.name)\n && path1.node.property.type === 'Identifier'\n && (binding?.scope.block.type === 'Program'\n || (parentScope === binding?.scope)\n )\n ) {\n graph.edges.get(name)?.add(path1.node.property.name);\n }\n }\n },\n }, path.scope, path);\n }\n }\n });\n }\n else if ([\n 'CallExpression',\n 'ArrowFunctionExpression',\n 'FunctionDeclaration',\n ].includes(path.node.init.type)\n && path.node.id.type === 'Identifier'\n ) {\n const name = path.node.id?.name;\n if (name && graph.nodes.has(name)) {\n traverse(path.node.init, {\n Identifier(path1) {\n const binding = path1.scope.getBinding(path1.node.name);\n if (\n graph.nodes.has(path1.node.name)\n && (\n (path1.parent.type !== 'MemberExpression'\n && path1.parent.type !== 'OptionalMemberExpression')\n || path1.parent.object === path1.node\n )\n && (binding?.scope.block.type === 'Program'\n || (parentScope === binding?.scope)\n )\n ) {\n graph.edges.get(name)?.add(path1.node.name);\n }\n },\n MemberExpression(path1) {\n if (\n path1.node.object.type === 'Identifier'\n && spread.includes(path1.node.object.name)\n ) {\n const binding = path1.scope.getBinding(path1.node.object.name);\n if (\n spread.includes(path1.node.object.name)\n && path1.node.property.type === 'Identifier'\n && (binding?.scope.block.type === 'Program'\n || (parentScope === binding?.scope)\n )\n ) {\n graph.edges.get(name)?.add(path1.node.property.name);\n }\n }\n },\n }, path.scope, path);\n }\n }\n else if (path.node.id.type === 'Identifier') {\n const name = path.node.id.name;\n if (path.node.init.type === 'Identifier') {\n const binding = path.scope.getBinding(path.node.init.name);\n if (\n graph.nodes.has(path.node.init.name)\n && (binding?.scope.block.type === 'Program'\n || (parentScope === binding?.scope)\n )\n ) {\n graph.edges.get(name)?.add(path.node.init.name);\n }\n }\n else {\n traverse(path.node.init, {\n Identifier(path1) {\n const binding = path1.scope.getBinding(path1.node.name);\n if (\n graph.nodes.has(path1.node.name)\n && (\n (path1.parent.type !== 'MemberExpression'\n && path1.parent.type !== 'OptionalMemberExpression')\n || path1.parent.object === path1.node\n )\n && (binding?.scope.block.type === 'Program'\n || (parentScope === binding?.scope)\n )\n ) {\n graph.edges.get(name)?.add(path1.node.name);\n }\n },\n }, path.scope, path);\n }\n }\n }\n },\n\n ObjectMethod(path) {\n if (path.node.key.type === 'Identifier' && graph.nodes.has(path.node.key.name)) {\n const name = path.node.key.name;\n\n traverse(path.node.body, {\n Identifier(path1) {\n const binding = path1.scope.getBinding(path1.node.name);\n if (\n graph.nodes.has(path1.node.name)\n && (\n (path1.parent.type !== 'MemberExpression'\n && path1.parent.type !== 'OptionalMemberExpression')\n || path1.parent.object === path1.node\n )\n && (binding?.scope.block.type === 'Program'\n || (parentScope === binding?.scope)\n )\n ) {\n graph.edges.get(name)?.add(path1.node.name);\n }\n },\n MemberExpression(path1) {\n if (\n path1.node.object.type === 'Identifier'\n && spread.includes(path1.node.object.name)\n ) {\n const binding = path1.scope.getBinding(path1.node.object.name);\n if (\n spread.includes(path1.node.object.name)\n && path1.node.property.type === 'Identifier'\n && (binding?.scope.block.type === 'Program'\n || (parentScope === binding?.scope)\n )\n ) {\n graph.edges.get(name)?.add(path1.node.property.name);\n }\n }\n },\n }, path.scope, path);\n }\n },\n\n ObjectProperty(path) {\n if (path.node.key.type === 'Identifier' && graph.nodes.has(path.node.key.name)) {\n const name = path.node.key.name;\n\n traverse(path.node.value, {\n MemberExpression(path1) {\n if (\n path1.node.object.type === 'Identifier'\n && spread.includes(path1.node.object.name)\n ) {\n const binding = path1.scope.getBinding(path1.node.object.name);\n if (\n spread.includes(path1.node.object.name)\n && path1.node.property.type === 'Identifier'\n && (binding?.scope.block.type === 'Program'\n || (parentScope === binding?.scope)\n )\n ) {\n graph.edges.get(name)?.add(path1.node.property.name);\n }\n }\n },\n }, path.scope, path);\n }\n },\n\n ExpressionStatement(path) {\n if (path.node.expression.type === 'CallExpression' && path.node.expression.callee.type === 'Identifier') {\n const hookName = path.node.expression.callee.name;\n const hookBinding = path.scope.getBinding(hookName);\n if (!(hookBinding === undefined || hookBinding?.scope.block.type === 'Program'\n || parentScope === hookBinding?.scope)) {\n return;\n }\n\n const watchArgs = new Set<t.Identifier>();\n\n if (hookName === 'provide') {\n traverse(path.node.expression, {\n Identifier(path1) {\n const binding = path1.scope.getBinding(path1.node.name);\n if (\n graph.nodes.has(path1.node.name)\n && (\n (path1.parent.type !== 'MemberExpression'\n && path1.parent.type !== 'OptionalMemberExpression')\n || path1.parent.object === path1.node\n )\n && (binding?.scope.block.type === 'Program'\n || parentScope === binding?.scope)\n ) {\n const _node = nodeCollection.getNode(path1.node.name);\n if (_node?.info?.used) {\n _node?.info?.used?.add(hookName);\n }\n else if (_node) {\n _node.info = {\n ..._node?.info,\n used: new Set([hookName]),\n };\n }\n }\n },\n }, path.scope, path);\n }\n else if (hookName === 'watch') {\n if (path.node.expression.arguments[0].type === 'Identifier') {\n const binding = path.scope.getBinding(path.node.expression.arguments[0].name);\n if (\n graph.nodes.has(path.node.expression.arguments[0].name)\n && (binding?.scope.block.type === 'Program'\n || parentScope === binding?.scope)\n ) {\n watchArgs.add(path.node.expression.arguments[0]);\n }\n }\n else {\n traverse(path.node.expression.arguments[0], {\n Identifier(path1) {\n const binding = path1.scope.getBinding(path1.node.name);\n if (\n graph.nodes.has(path1.node.name)\n && (\n (path1.parent.type !== 'MemberExpression'\n && path1.parent.type !== 'OptionalMemberExpression')\n || path1.parent.object === path1.node\n )\n && (binding?.scope.block.type === 'Program'\n || parentScope === binding?.scope)\n ) {\n watchArgs.add(path1.node);\n }\n },\n }, path.scope, path);\n }\n }\n else if (hookName === 'useEffect' && path.node.expression.arguments[1].type === 'ArrayExpression') {\n traverse(path.node.expression.arguments[1], {\n Identifier(path1) {\n const binding = path1.scope.getBinding(path1.node.name);\n if (\n graph.nodes.has(path1.node.name)\n && (\n (path1.parent.type !== 'MemberExpression'\n && path1.parent.type !== 'OptionalMemberExpression')\n || path1.parent.object === path1.node\n )\n && (binding?.scope.block.type === 'Program'\n || parentScope === binding?.scope)\n ) {\n watchArgs.add(path1.node);\n }\n },\n }, path.scope, path);\n }\n path.node.expression.arguments.forEach((argNode, index) => {\n if (hookName === 'watch' && index === 0 && argNode.type === 'Identifier') {\n const _node = nodeCollection.getNode(argNode.name);\n if (_node?.info?.used) {\n _node?.info?.used?.add(hookName);\n }\n else if (_node) {\n _node.info = {\n ..._node?.info,\n used: new Set([hookName]),\n };\n }\n return;\n }\n traverse(argNode, {\n Identifier(path1) {\n const binding = path1.scope.getBinding(path1.node.name);\n if (\n graph.nodes.has(path1.node.name)\n && (\n (path1.parent.type !== 'MemberExpression'\n && path1.parent.type !== 'OptionalMemberExpression')\n || path1.parent.object === path1.node\n )\n && (binding?.scope.block.type === 'Program'\n || parentScope === binding?.scope)\n ) {\n if (['watch', 'useEffect'].includes(hookName) && watchArgs.size > 0) {\n const watchArgsNames = Array.from(watchArgs).map(arg => arg.name);\n watchArgs.forEach((watchArg) => {\n if (!watchArgsNames.includes(path1.node.name)) {\n graph.edges.get(watchArg.name)?.add(path1.node.name);\n }\n });\n }\n const _node = nodeCollection.getNode(path1.node.name);\n if (_node?.info?.used) {\n _node?.info?.used?.add(hookName);\n }\n else if (_node) {\n _node.info = {\n ..._node?.info,\n used: new Set([hookName]),\n };\n }\n }\n },\n }, path.scope, path);\n });\n }\n },\n }, parentScope, parentPath);\n\n return {\n graph,\n nodeCollection,\n };\n}\n\nexport function analyze(\n content: string,\n lineOffset = 0,\n jsx = false,\n) {\n // console.log(content);\n const ast = babelParse(content, { sourceType: 'module', plugins: [\n 'typescript',\n ...jsx\n ? ['jsx' as const]\n : [],\n ] });\n\n // ---\n const { graph, nodeCollection } = processSetup(ast, undefined, undefined, undefined, lineOffset);\n return nodeCollection.map(graph);\n}\n","import type * as t from '@babel/types';\n\nexport interface TypedNode {\n label: string\n type: NodeType\n info?: Partial<{\n line: number\n column: number\n comment: string\n used: Set<string>\n }>\n};\n\nexport enum NodeType {\n var = 'var',\n fun = 'fun',\n}\n\ninterface Options {\n isComputed: boolean\n isMethod: boolean\n comment: string\n};\n\nexport class NodeCollection {\n lineOffset = 0;\n addInfo = true;\n constructor(_lineOffset = 0, _addInfo = true) {\n this.lineOffset = _lineOffset;\n this.addInfo = _addInfo;\n }\n\n nodes = new Map<string, TypedNode>();\n\n addNode(\n label: string,\n node: t.Node,\n options: Partial<Options> = { isComputed: false, isMethod: false, comment: '' },\n ) {\n if (this.nodes.has(label)) {\n return;\n }\n if (\n (!options.isComputed && (\n (node.type === 'VariableDeclarator' && [\n 'ArrowFunctionExpression',\n 'FunctionDeclaration',\n 'FunctionExpression',\n ].includes(node.init?.type || ''))\n || (node.type === 'ObjectProperty' && [\n 'ArrowFunctionExpression',\n 'FunctionDeclaration',\n 'FunctionExpression',\n ].includes(node.value?.type || ''))\n || node.type === 'FunctionDeclaration'\n || node.type === 'ObjectMethod'\n || node.type === 'ArrowFunctionExpression'\n || node.type === 'FunctionExpression'\n ))\n || options.isMethod\n ) {\n this.nodes.set(label, {\n label,\n type: NodeType.fun,\n ...(this.addInfo\n ? {\n info: {\n line: (node.loc?.start.line || 1) - 1 + this.lineOffset,\n column: node.loc?.start.column || 0,\n ...options.comment\n ? { comment: options.comment }\n : {},\n },\n }\n : {}),\n });\n }\n else {\n this.nodes.set(label, {\n label,\n type: NodeType.var,\n ...(this.addInfo\n ? {\n info: {\n line: (node.loc?.start.line || 1) - 1 + this.lineOffset,\n column: node.loc?.start.column || 0,\n ...options.comment\n ? { comment: options.comment }\n : {},\n },\n }\n : {}),\n });\n }\n }\n\n addTypedNode(label: string, node: TypedNode) {\n this.nodes.set(label, {\n label,\n type: node.type,\n ...(this.addInfo\n ? {\n info: {\n ...(node.info || {}),\n },\n }\n : {}),\n });\n }\n\n getNode(label: string) {\n return this.nodes.get(label);\n }\n\n map(graph: {\n nodes: Set<string>\n edges: Map<string, Set<string>>\n }) {\n const nodes = new Set(Array.from(graph.nodes).map((node) => {\n return this.nodes.get(node)!;\n }).filter(node => !!node));\n\n const edges = new Map(Array.from(graph.edges).map(([from, to]) => {\n return [this.nodes.get(from)!, new Set(Array.from(to).map((node) => {\n return this.nodes.get(node)!;\n }).filter(node => !!node))];\n }));\n\n return {\n nodes,\n edges,\n };\n }\n}\n\nexport function getComment(node: t.Node) {\n let comment = '';\n\n node.leadingComments?.forEach((_comment) => {\n if (_comment.loc!.end.line > node.loc!.start.line) {\n return;\n }\n if (_comment.value.trim().startsWith('*')) {\n comment += `${_comment.value.trim().replace(/^\\s*\\*+\\s*\\**/gm, '').trim()}\\n`;\n }\n });\n\n node.trailingComments?.forEach((_comment) => {\n if (_comment.loc!.end.line > node.loc!.start.line) {\n return;\n }\n if (_comment.value.trim().startsWith('*')) {\n comment += `${_comment.value.trim().replace(/^\\s*\\*+\\s*\\**/gm, '').trim()}\\n`;\n }\n else {\n comment += `${_comment.value.trim()}\\n`;\n }\n });\n\n return comment.trim();\n}\n","import { babelParse } from '@vue/compiler-sfc';\nimport type { NodePath } from '@babel/traverse';\nimport _traverse from '@babel/traverse';\nimport type * as t from '@babel/types';\nimport { processSetup } from './setupScript';\nimport { NodeCollection, getComment } from './utils';\n\nconst traverse: typeof _traverse\n // @ts-expect-error unwarp default\n = _traverse.default?.default || _traverse.default || _traverse;\n\nconst vueLifeCycleHooks = [\n 'beforeCreate',\n 'created',\n 'beforeMount',\n 'mounted',\n 'beforeUpdate',\n 'updated',\n 'beforeDestroy',\n 'destroyed',\n 'activated',\n 'deactivated',\n 'errorCaptured',\n 'renderTracked',\n 'renderTriggered',\n 'provide',\n];\n\nexport function analyze(\n content: string,\n lineOffset = 0,\n jsx = false,\n) {\n // console.log({lineOffset});\n // console.log(content);\n const ast = babelParse(content, { sourceType: 'module', plugins: [\n 'typescript',\n ...jsx\n ? ['jsx' as const]\n : [],\n ] });\n\n // ---\n\n let nodeCollection = new NodeCollection(lineOffset);\n\n const tNodes = new Map<string, t.Identifier>();\n const graph = {\n nodes: new Set<string>(),\n edges: new Map<string, Set<string>>(),\n };\n\n /** used in render block or setup return */\n const nodesUsedInTemplate = new Set<string>();\n\n function process(node: t.ObjectExpression, path: NodePath<t.ExportDefaultDeclaration>) {\n traverse(node, {\n ObjectProperty(path1) {\n if (\n (\n path.node.declaration.type === 'ObjectExpression'\n && path1.parent === path.node.declaration\n ) || (\n path.node.declaration.type === 'CallExpression'\n && path1.parent === path.node.declaration.arguments[0]\n )\n ) {\n // data\n if (\n path1.node.key.type === 'Identifier'\n && path1.node.key.name === 'data'\n && (\n path1.node.value.type === 'ArrowFunctionExpression'\n || path1.node.value.type === 'FunctionExpression'\n )\n ) {\n const dataNode = path1.node.value;\n\n traverse(dataNode, {\n ReturnStatement(path2) {\n if (path2.parent === dataNode.body) {\n if (path2.node.argument?.type === 'ObjectExpression') {\n path2.node.argument.properties.forEach((prop) => {\n if (prop.type === 'ObjectProperty') {\n if (prop.key.type === 'Identifier') {\n const name = prop.key.name;\n graph.nodes.add(name);\n tNodes.set(name, prop.key);\n nodeCollection.addNode(name, prop, {\n comment: getComment(prop),\n });\n if (!graph.edges.get(name)) {\n graph.edges.set(name, new Set());\n }\n }\n }\n });\n }\n }\n },\n }, path1.scope, path1);\n }\n\n // computed\n if (path1.node.key.type === 'Identifier' && path1.node.key.name === 'computed') {\n const computedNode = path1.node;\n if (computedNode.value.type === 'ObjectExpression') {\n computedNode.value.properties.forEach((prop) => {\n if (prop.type === 'ObjectProperty' || prop.type === 'ObjectMethod') {\n if (prop.key.type === 'Identifier') {\n const name = prop.key.name;\n graph.nodes.add(name);\n tNodes.set(name, prop.key);\n nodeCollection.addNode(name, prop, {\n isComputed: true,\n comment: getComment(prop),\n });\n if (!graph.edges.get(name)) {\n graph.edges.set(name, new Set());\n }\n }\n }\n });\n }\n }\n\n // methods\n if (path1.node.key.type === 'Identifier' && path1.node.key.name === 'methods') {\n const methodsNode = path1.node;\n if (methodsNode.value.type === 'ObjectExpression') {\n methodsNode.value.properties.forEach((prop) => {\n if (prop.type === 'ObjectProperty' || prop.type === 'ObjectMethod') {\n if (prop.key.type === 'Identifier') {\n const name = prop.key.name;\n graph.nodes.add(name);\n tNodes.set(name, prop.key);\n nodeCollection.addNode(name, prop, {\n isMethod: true,\n comment: getComment(prop),\n });\n if (!graph.edges.get(name)) {\n graph.edges.set(name, new Set());\n }\n }\n }\n });\n }\n }\n\n if (\n path1.node.key.type === 'Identifier'\n && path1.node.key.name === 'render'\n && (\n path1.node.value.type === 'ArrowFunctionExpression'\n || path1.node.value.type === 'FunctionExpression'\n )\n ) {\n traverse(path1.node.value, {\n ReturnStatement(path2) {\n const templateNode = path2.node;\n traverse(templateNode, {\n MemberExpression(path3) {\n if (path3.node.object && path3.node.object.type === 'ThisExpression') {\n if (path3.node.property && path3.node.property.type === 'Identifier') {\n nodesUsedInTemplate.add(path3.node.property.name);\n }\n }\n },\n }, path2.scope, path2);\n },\n }, path1.scope, path1);\n }\n }\n },\n ObjectMethod(path1) {\n if (\n (\n path.node.declaration.type === 'ObjectExpression'\n && path1.parent === path.node.declaration\n ) || (\n path.node.declaration.type === 'CallExpression'\n && path1.parent === path.node.declaration.arguments[0]\n )\n ) {\n // setup\n if (path1.node.key.type === 'Identifier' && path1.node.key.name === 'setup') {\n const setupNode = path1.node;\n\n const spread: string[] = [];\n\n traverse(setupNode, {\n ReturnStatement(path2) {\n if (path2.node.argument?.type === 'ObjectExpression') {\n const returnNode = path2.node.argument;\n traverse(returnNode, {\n SpreadElement(path3) {\n // ...toRefs(xxx)\n if (\n path3.node.argument.type === 'CallExpression'\n && path3.node.argument.callee.type === 'Identifier'\n && path3.node.argument.callee.name === 'toRefs'\n && path3.node.argument.arguments[0].type === 'Identifier'\n ) {\n spread.push(path3.node.argument.arguments[0].name);\n }\n // ...xxx\n else if (\n path3.node.argument.type === 'Identifier'\n ) {\n spread.push(path3.node.argument.name);\n }\n },\n }, path2.scope, path2);\n }\n if (\n path2.node.argument?.type === 'FunctionExpression'\n || path2.node.argument?.type === 'ArrowFunctionExpression'\n ) {\n const templateNode = path2.node.argument.body;\n traverse(templateNode, {\n Identifier(path3) {\n const binding = path3.scope.getBinding(path3.node.name);\n if (binding?.scope === path1.scope) {\n nodesUsedInTemplate.add(path3.node.name);\n }\n },\n JSXIdentifier(path3) {\n const binding = path3.scope.getBinding(path3.node.name);\n if (binding?.scope === path1.scope) {\n nodesUsedInTemplate.add(path3.node.name);\n }\n },\n }, path2.scope, path2);\n }\n },\n }, path1.scope, path1);\n\n const {\n graph: {\n nodes: tempNodes,\n edges: tempEdges,\n spread: tempSpread,\n },\n nodeCollection: tempNodeCollection,\n } = processSetup(setupNode, path1.scope, setupNode, spread, lineOffset);\n\n // 3 filter data by return\n traverse(setupNode, {\n ReturnStatement(path2) {\n // only process return in setupNode scope\n if (path2.scope !== path1.scope) {\n return;\n }\n\n if (path2.node.argument?.type === 'ObjectExpression') {\n const returnNode = path2.node.argument;\n traverse(returnNode, {\n ObjectProperty(path3) {\n if (path3.parent === returnNode) {\n if (\n path3.node.key.type === 'Identifier'\n && path3.node.value.type === 'Identifier'\n && tempNodes.has(path3.node.value.name)\n ) {\n const valName = path3.node.value.name;\n if (!graph.nodes.has(valName)) {\n graph.nodes.add(valName);\n tNodes.set(valName, path3.node.value);\n nodeCollection.addTypedNode(\n valName,\n tempNodeCollection.nodes.get(valName)!,\n );\n }\n if (!graph.edges.has(valName)) {\n graph.edges.set(valName, new Set([...Array.from(\n tempEdges.get(valName) || new Set<string>(),\n )]));\n }\n\n const name = path3.node.key.name;\n if (name !== valName) {\n graph.nodes.add(name);\n tNodes.set(name, path3.node.key);\n nodeCollection.addNode(name, path3.node.key, {\n comment: getComment(path3.node),\n });\n graph.edges.set(name, new Set([valName]));\n }\n }\n }\n },\n SpreadElement(path3) {\n // ...toRefs(xxx)\n if (\n path3.node.argument.type === 'CallExpression'\n && path3.node.argument.callee.type === 'Identifier'\n && path3.node.argument.callee.name === 'toRefs'\n && path3.node.argument.arguments[0].type === 'Identifier'\n && tempSpread.get(path3.node.argument.arguments[0].name)\n ) {\n tempSpread.get(path3.node.argument.arguments[0].name)?.forEach((name) => {\n graph.nodes.add(name);\n // @ts-expect-error Identifier\n tNodes.set(name, path3.node.argument.arguments[0]);\n nodeCollection.addTypedNode(name, tempNodeCollection.nodes.get(name)!);\n if (!graph.edges.get(name)) {\n graph.edges.set(name, new Set());\n tempEdges.get(name)?.forEach((edge) => {\n graph.edges.get(name)?.add(edge);\n });\n }\n });\n }\n // ...xxx\n else if (\n path3.node.argument.type === 'Identifier'\n && tempSpread.get(path3.node.argument.name)\n ) {\n tempSpread.get(path3.node.argument.name)?.forEach((name) => {\n graph.nodes.add(name);\n // @ts-expect-error Identifier\n tNodes.set(name, path3.node.argument);\n nodeCollection.addTypedNode(name, tempNodeCollection.nodes.get(name)!);\n if (!graph.edges.get(name)) {\n graph.edges.set(name, new Set());\n tempEdges.get(name)?.forEach((edge) => {\n graph.edges.get(name)?.add(edge);\n });\n }\n });\n }\n },\n }, path2.scope, path2);\n }\n else {\n graph.edges = tempEdges;\n graph.nodes = tempNodes;\n nodeCollection = tempNodeCollection;\n }\n },\n }, path1.scope, path1);\n }\n\n // data\n if (path1.node.key.type === 'Identifier' && path1.node.key.name === 'data') {\n const dataNode = path1.node;\n\n traverse(dataNode, {\n ReturnStatement(path2) {\n if (path2.parent === dataNode.body) {\n if (path2.node.argument?.type === 'ObjectExpression') {\n path2.node.argument.properties.forEach((prop) => {\n if (prop.type === 'ObjectProperty') {\n if (prop.key.type === 'Identifier') {\n const name = prop.key.name;\n graph.nodes.add(name);\n tNodes.set(name, prop.key);\n nodeCollection.addNode(name, prop, {\n comment: getComment(prop),\n });\n if (!graph.edges.get(name)) {\n graph.edges.set(name, new Set());\n }\n }\n }\n });\n }\n }\n },\n }, path1.scope, path1);\n }\n\n // render\n if (path1.node.key.type === 'Identifier' && path1.node.key.name === 'render') {\n traverse(path1.node, {\n ReturnStatement(path2) {\n const templateNode = path2.node;\n traverse(templateNode, {\n MemberExpression(path3) {\n if (path3.node.object && path3.node.object.type === 'ThisExpression') {\n if (path3.node.property && path3.node.property.type === 'Identifier') {\n nodesUsedInTemplate.add(path3.node.property.name);\n }\n }\n },\n }, path2.scope, path2);\n },\n }, path1.scope, path1);\n }\n }\n },\n }, path.scope, path);\n\n traverse(node, {\n ObjectMethod(path1) {\n if (\n (\n path.node.declaration.type === 'ObjectExpression'\n && path1.parent === path.node.declaration\n ) || (\n path.node.declaration.type === 'CallExpression'\n && path1.parent === path.node.declaration.arguments[0]\n )\n ) {\n if (path1.node.key.type === 'Identifier' && vueLifeCycleHooks.includes(path1.node.key.name)) {\n const hookName = path1.node.key.name;\n\n traverse(path1.node.body, {\n MemberExpression(path2) {\n if (path2.node.object.type === 'ThisExpression' && path2.node.property.type === 'Identifier') {\n const _node = nodeCollection.getNode(path2.node.property.name);\n if (_node?.info?.used) {\n _node?.info?.used?.add(hookName);\n }\n else if (_node) {\n _node.info = {\n ..._node?.info,\n used: new Set([hookName]),\n };\n }\n }\n },\n }, path1.scope, path1);\n }\n }\n },\n ObjectProperty(path1) {\n if (\n (\n path.node.declaration.type === 'ObjectExpression'\n && path1.parent === path.node.declaration\n ) || (\n path.node.declaration.type === 'CallExpression'\n && path1.parent === path.node.declaration.arguments[0]\n )\n ) {\n if (path1.node.key.type === 'Identifier' && path1.node.key.name === 'computed') {\n const computedNode = path1.node;\n if (computedNode.value.type === 'ObjectExpression') {\n computedNode.value.properties.forEach((prop) => {\n if (prop.type === 'ObjectMethod' && prop.key.type === 'Identifier') {\n const name = prop.key.name;\n traverse(prop, {\n MemberExpression(path2) {\n if (path2.node.object.type === 'ThisExpression' && path2.node.property.type === 'Identifier') {\n graph.edges.get(name)?.add(path2.node.property.name);\n }\n },\n }, path1.scope, path1);\n }\n\n if (\n prop.type === 'ObjectProperty'\n && prop.key.type === 'Identifier'\n && prop.value.type === 'ObjectExpression'\n ) {\n const name = prop.key.name;\n prop.value.properties.forEach((prop1) => {\n if (\n prop1.type === 'ObjectProperty'\n && prop1.key.type === 'Identifier'\n && prop1.key.name === 'get'\n ) {\n traverse(prop1, {\n MemberExpression(path2) {\n if (\n path2.node.object.type === 'ThisExpression'\n && path2.node.property.type === 'Identifier'\n ) {\n graph.edges.get(name)?.add(path2.node.property.name);\n }\n },\n }, path1.scope, path1);\n }\n });\n }\n });\n }\n }\n\n if (path1.node.key.type === 'Identifier' && path1.node.key.name === 'methods') {\n const methodsNode = path1.node;\n if (methodsNode.value.type === 'ObjectExpression') {\n methodsNode.value.properties.forEach((prop) => {\n if (\n (prop.type === 'ObjectMethod'\n || prop.type === 'ObjectProperty')\n && prop.key.type === 'Identifier'\n ) {\n const name = prop.key.name;\n traverse(prop, {\n MemberExpression(path2) {\n if (path2.node.object.type === 'ThisExpression' && path2.node.property.type === 'Identifier') {\n graph.edges.get(name)?.add(path2.node.property.name);\n }\n },\n }, path1.scope, path1);\n }\n });\n }\n }\n\n if (path1.node.key.type === 'Identifier' && ['watch', ...vueLifeCycleHooks].includes(path1.node.key.name)) {\n const hookName = path1.node.key.name;\n\n if (hookName === 'watch' && path1.node.value.type === 'ObjectExpression') {\n path1.node.value.properties.forEach((prop) => {\n if ((prop.type === 'ObjectProperty' || prop.type === 'ObjectMethod') && (\n prop.key.type === 'Identifier' || prop.key.type === 'StringLiteral'\n )) {\n const keyName = prop.key.type === 'Identifier'\n ? prop.key.name\n : prop.key.type === 'StringLiteral'\n ? prop.key.value.split('.')[0]\n : '';\n const watchArg = tNodes.get(keyName);\n\n const _node = nodeCollection.getNode(keyName);\n if (_node?.info?.used) {\n _node?.info?.used?.add(hookName);\n }\n else if (_node) {\n _node.info = {\n ..._node?.info,\n used: new Set([hookName]),\n };\n }\n\n traverse(path1.node.value, {\n MemberExpression(path2) {\n if (path2.node.object.type === 'ThisExpression' && path2.node.property.type === 'Identifier') {\n if (watchArg && watchArg.name !== path2.node.property.name) {\n graph.edges.get(watchArg.name)?.add(path2.node.property.name);\n }\n }\n },\n }, path1.scope, path1);\n }\n });\n }\n else {\n traverse(path1.node.value, {\n MemberExpression(path2) {\n if (path2.node.object.type === 'ThisExpression' && path2.node.property.type === 'Identifier') {\n const _node = nodeCollection.getNode(path2.node.property.name);\n if (_node?.info?.used) {\n _node?.info?.used?.add(hookName);\n }\n else if (_node) {\n _node.info = {\n ..._node?.info,\n used: new Set([hookName]),\n };\n }\n }\n },\n }, path1.scope, path1);\n }\n }\n }\n },\n }, path.scope, path);\n }\n\n traverse(ast, {\n ExportDefaultDeclaration(path) {\n // export default {}\n if (path.node.declaration.type === 'ObjectExpression') {\n process(path.node.declaration, path);\n }\n // export default defineComponent({})\n else if (path.node.declaration.type === 'CallExpression'\n && path.node.declaration.callee.type === 'Identifier'\n && path.node.declaration.callee.name === 'defineComponent'\n && path.node.declaration.arguments[0].type === 'ObjectExpression'\n ) {\n process(path.node.declaration.arguments[0], path);\n }\n },\n });\n\n return {\n graph: nodeCollection.map(graph),\n nodesUsedInTemplate,\n };\n}\n","import type { NodePath, Scope } from '@babel/traverse';\nimport _traverse from '@babel/traverse';\nimport type * as t from '@babel/types';\nimport { babelParse } from '@vue/compiler-sfc';\nimport type {\n IAddEdge,\n IAddNode,\n IReturnData,\n IUsedNode,\n} from '../utils/traverse';\nimport {\n addGraphBySpreadIdentifier,\n addIdentifiesToGraphByScanReturn,\n addSpreadToGraphByScanReturn,\n collectionSpread,\n parseEdgeFunctionPattern,\n parseEdgeLeftArrayPattern,\n parseEdgeLeftIdentifierPattern,\n parseEdgeLeftObjectPattern,\n parseNodeArrayPattern,\n parseNodeFunctionPattern,\n parseNodeIdentifierPattern,\n parseNodeObjectPattern,\n parseReturnJsxPattern,\n traverse,\n traverseSetup,\n} from '../utils/traverse';\nimport { NodeCollection, getComment } from './utils';\n\ninterface IProcessMain {\n node: t.Node\n type: 'vue' | 'react'\n lineOffset?: number\n addInfo?: boolean\n}\n\ninterface IProcessBranch {\n node: t.ObjectExpression\n lineOffset?: number\n addInfo?: boolean\n parentScope?: Scope\n parentNode?: t.ExportDefaultDeclaration\n parentPath: NodePath<t.ExportDefaultDeclaration>\n spread?: string[]\n}\n\ntype IProcessReact = {\n node: t.BlockStatement\n lineOffset?: number\n addInfo?: boolean\n parentScope: Scope\n parentNode: t.FunctionDeclaration\n parentPath: NodePath<t.FunctionDeclaration>\n} | {\n node: t.BlockStatement\n lineOffset?: number\n addInfo?: boolean\n parentScope: Scope\n parentNode: t.ClassMethod\n parentPath: NodePath<t.ClassMethod>\n};\n\n// deal when setup return object\nfunction processByReturnNotJSX(params: IProcessBranch) {\n const { node, parentPath, lineOffset, addInfo } = params;\n const spread: string[] = [];\n\n const nodeCollection = new NodeCollection(lineOffset, addInfo);\n\n const graph = {\n nodes: new Set<string>(),\n edges: new Map<string, Set<string>>(),\n };\n\n // 解析return, 收集spread\n const setupPath = traverseSetup({ node, parentScope: parentPath.scope, parentPath });\n\n // setup return\n collectionSpread({ path: setupPath, spread });\n\n // 收集除return之外的所有节点和边\n const {\n graph: {\n nodes: tempNodes,\n edges: tempEdges,\n spread: tempSpread,\n },\n nodeCollection: tempNodeCollection,\n nodesUsedInTemplate,\n } = processByReturnJSX({ node, parentPath, spread, lineOffset, addInfo });\n\n // 根据return信息添加必要节点\n addIdentifiesToGraphByScanReturn({\n path: setupPath,\n graph,\n nodeCollection,\n tempNodeCollection,\n tempEdges,\n });\n\n // 根据return信息添加必要节点\n addSpreadToGraphByScanReturn({\n path: setupPath,\n graph,\n nodeCollection,\n tempNodeCollection,\n tempEdges,\n tempSpread,\n });\n\n return {\n graph,\n nodeCollection,\n nodesUsedInTemplate,\n };\n}\n\n// deal when setup return jsx\nfunction processByReturnJSX(params: IProcessBranch) {\n const { node, parentPath, spread = [], lineOffset, addInfo } = params;\n\n const nodeCollection = new NodeCollection(lineOffset, addInfo);\n const nodesUsedInTemplate = new Set<string>();\n\n const graph = {\n nodes: new Set<string>(),\n edges: new Map<string, Set<string>>(),\n spread: new Map<string, Set<string>>(),\n };\n\n function addNode({ name, node, path, scope }: IAddNode, commentParentNode?: t.Node) {\n const binding = path.scope.getBinding(name);\n if (scope === binding?.scope) {\n graph.nodes.add(name);\n nodeCollection.addNode(name, node, {\n comment: commentParentNode\n ? getComment(commentParentNode)\n : '',\n });\n if (!graph.edges.get(name)) {\n graph.edges.set(name, new Set());\n }\n }\n }\n\n function addEdge({ fromName, toName, path, scope, toScope, collectionNodes }: IAddEdge) {\n const bindingScope = toScope || path.scope.getBinding(toName)?.scope;\n if (scope === bindingScope && collectionNodes.has(toName)) {\n graph.edges.get(fromName)?.add(toName);\n }\n }\n\n function addUsed({ name, path, parentPath }: IUsedNode) {\n const binding = path.scope.getBinding(name);\n if (binding?.scope === parentPath.scope) {\n nodesUsedInTemplate.add(name);\n }\n }\n\n const setupPath = traverseSetup({ node, parentScope: parentPath.scope, parentPath });\n const setupScope = setupPath.scope;\n const setupNode = setupPath.node;\n\n // 收集节点, 并收集spread依赖\n traverse(setupNode, {\n VariableDeclarator(path1) {\n parseNodeIdentifierPattern({\n path: path1,\n rootScope: setupScope,\n cb: (params) => {\n if (!spread.includes(params.name)) {\n addNode(params, path1.node);\n }\n else {\n addGraphBySpreadIdentifier({\n path: path1,\n graph,\n nodeCollection,\n iname: params.name,\n });\n }\n },\n });\n\n parseNodeObjectPattern({\n path: path1,\n rootScope: setupScope,\n cb: addNode,\n });\n\n parseNodeArrayPattern({\n path: path1,\n rootScope: setupScope,\n cb: addNode,\n });\n },\n FunctionDeclaration(path1) {\n parseNodeFunctionPattern({\n path: path1,\n rootScope: setupScope,\n cb: addNode,\n });\n },\n }, setupScope, setupPath);\n\n // 搜集jsx模版使用节点\n setupPath.traverse({\n ReturnStatement(path2) {\n // setup return jsx\n parseReturnJsxPattern({\n path: path2,\n parentPath: setupPath,\n cb: addUsed,\n });\n },\n });\n\n // 收集边\n traverse(setupNode, {\n VariableDeclarator(path1) {\n parseEdgeLeftIdentifierPattern({\n path: path1,\n rootScope: setupScope,\n collectionNodes: graph.nodes,\n cb: addEdge,\n spread,\n });\n\n parseEdgeLeftObjectPattern({\n path: path1,\n rootScope: setupScope,\n collectionNodes: graph.nodes,\n cb: addEdge,\n });\n\n parseEdgeLeftArrayPattern({\n path: path1,\n rootScope: setupScope,\n collectionNodes: graph.nodes,\n cb: addEdge,\n });\n },\n FunctionDeclaration(path1) {\n parseEdgeFunctionPattern({\n path: path1,\n rootScope: setupScope,\n collectionNodes: graph.nodes,\n cb: addEdge,\n });\n },\n }, setupScope, setupPath);\n\n return {\n graph,\n nodeCollection,\n nodesUsedInTemplate,\n };\n}\n\nfunction processByReact(params: IProcessReact) {\n const { node, parentScope, parentPath, lineOffset, addInfo } = params;\n\n const nodeCollection = new NodeCollection(lineOffset, addInfo);\n const nodesUsedInTemplate = new Set<string>();\n\n const graph = {\n nodes: new Set<string>(),\n edges: new Map<string, Set<string>>(),\n spread: new Map<string, Set<string>>(),\n };\n\n function addNode({ name, node, path, scope }: IAddNode, commentParentNode?: t.Node) {\n const binding = path.scope.getBinding(name);\n if (scope === binding?.scope) {\n graph.nodes.add(name);\n nodeCollection.addNode(name, node, {\n comment: commentParentNode\n ? getComment(commentParentNode)\n : '',\n });\n if (!graph.edges.get(name)) {\n graph.edges.set(name, new Set());\n }\n }\n }\n\n function addEdge({ fromName, toName, path, scope, toScope, collectionNodes }: IAddEdge) {\n const bindingScope = toScope || path.scope.getBinding(toName)?.scope;\n if (scope === bindingScope && collectionNodes.has(toName)) {\n graph.edges.get(fromName)?.add(toName);\n }\n }\n\n function addUsed({ name, path, parentPath }: IUsedNode) {\n const binding = path.scope.getBinding(name);\n if (binding?.scope === parentPath.scope) {\n nodesUsedInTemplate.add(name);\n }\n }\n\n // 收集节点依赖\n traverse(node, {\n VariableDeclarator(path1) {\n parseNodeIdentifierPattern({\n path: path1,\n rootScope: parentScope!,\n cb: (params) => {\n addNode(params, path1.node);\n },\n });\n\n parseNodeObjectPattern({\n path: path1,\n rootScope: parentScope!,\n cb: addNode,\n });\n\n parseNodeArrayPattern({\n path: path1,\n rootScope: parentScope!,\n cb: addNode,\n });\n },\n FunctionDeclaration(path1) {\n parseNodeFunctionPattern({\n path: path1,\n rootScope: parentScope!,\n cb: addNode,\n });\n },\n }, parentScope, parentPath);\n\n // 搜集jsx模版使用节点\n traverse(node, {\n ReturnStatement(path2) {\n // setup return jsx\n parseReturnJsxPattern({\n path: path2,\n parentPath,\n cb: addUsed,\n });\n },\n }, parentScope, parentPath);\n\n // 收集边\n traverse(node, {\n VariableDeclarator(path1) {\n parseEdgeLeftIdentifierPattern({\n path: path1,\n rootScope: parentScope!,\n collectionNodes: graph.nodes,\n cb: addEdge,\n });\n\n parseEdgeLeftObjectPattern({\n path: path1,\n rootScope: parentScope!,\n collectionNodes: graph.nodes,\n cb: addEdge,\n });\n\n parseEdgeLeftArrayPattern({\n path: path1,\n rootScope: parentScope!,\n collectionNodes: graph.nodes,\n cb: addEdge,\n });\n },\n FunctionDeclaration(path1) {\n parseEdgeFunctionPattern({\n path: path1,\n rootScope: parentScope!,\n collectionNodes: graph.nodes,\n cb: addEdge,\n });\n },\n }, parentScope, parentPath);\n\n return {\n graph,\n nodeCollection,\n nodesUsedInTemplate,\n };\n}\n\nexport function processTsx(params: IProcessMain) {\n let result: IReturnData | undefined;\n\n function process(params: IProcessBranch) {\n const { node, parentPath } = params;\n // resolve `return` then determine use processByReturnJSX or processByReturnNotJSX\n const setupPath = traverseSetup({ node, parentScope: parentPath.scope, parentPath });\n\n setupPath.traverse({\n ReturnStatement(path) {\n if (path.node.argument\n && (path.node.argument.type === 'ArrowFunctionExpression'\n || path.node.argument.type === 'FunctionExpression')\n && (path.node.argument.body.type === 'JSXElement'\n || path.node.argument.body.type === 'JSXFragment')\n ) {\n result = processByReturnJSX(params);\n }\n else {\n result = processByReturnNotJSX(params);\n }\n },\n });\n }\n\n traverse(params.node, {\n ExportDefaultDeclaration(path) {\n if (params.type === 'vue') {\n if (path.node.declaration.type === 'ObjectExpression') {\n // export default {}\n process({\n ...params,\n node: path.node.declaration,\n parentNode: path.node,\n parentPath: path,\n });\n }\n else if (\n path.node.declaration.type === 'CallExpression'\n && path.node.declaration.callee.type === 'Identifier'\n && path.node.declaration.callee.name === 'defineComponent'\n && path.node.declaration.arguments[0].type === 'ObjectExpression'\n ) {\n // export default defineComponent({})\n process({\n ...params,\n node: path.node.declaration.arguments[0],\n parentNode: path.node,\n parentPath: path,\n });\n }\n }\n if (params.type === 'react') {\n if (\n (path.node.declaration.type === 'FunctionDeclaration'\n || path.node.declaration.type === 'ArrowFunctionExpression')\n && path.node.declaration.body.type === 'BlockStatement'\n ) {\n // export default function () {}\n\n const functionPath = path.get('declaration') as NodePath<t.FunctionDeclaration>;\n\n result = processByReact({\n ...params,\n node: path.node.declaration.body,\n parentNode: functionPath.node,\n parentPath: functionPath,\n parentScope: functionPath.scope,\n });\n }\n if (path.node.declaration.type === 'ClassDeclaration') {\n // export default class Index {}\n\n const renderFunction = path.node.declaration.body.body.find((node) => {\n if (node.type === 'ClassMethod' && node.key.type === 'Identifier' && node.key.name === 'render') {\n return node;\n }\n return undefined;\n }) as t.ClassMethod;\n if (!renderFunction) {\n return;\n }\n\n const renderPath = path.get(`declaration.body.body.${\n path.node.declaration.body.body.indexOf(renderFunction)\n }`) as NodePath<t.ClassMethod>;\n\n result = processByReact({\n ...params,\n node: renderFunction.body,\n parentNode: renderFunction,\n parentPath: renderPath,\n parentScope: renderPath.scope,\n });\n }\n }\n },\n });\n\n return result!;\n}\n\nexport function analyze(\n content: string,\n type = 'vue' as 'vue' | 'react',\n lineOffset = 0,\n addInfo = true,\n) {\n const ast = babelParse(content, { sourceType: 'module', plugins: [\n 'typescript',\n 'jsx',\n ] });\n\n const { graph, nodeCollection, nodesUsedInTemplate } = processTsx({\n node: ast,\n type,\n lineOffset,\n addInfo,\n });\n\n return {\n graph: nodeCollection.map(graph),\n nodesUsedInTemplate,\n };\n}\n","import type * as t from '@babel/types';\nimport type { NodePath, Scope } from '@babel/traverse';\nimport _traverse from '@babel/traverse';\nimport type { NodeCollection } from '../analyze/utils';\nimport { getComment } from '../analyze/utils';\n\nexport const traverse: typeof _traverse\n // @ts-expect-error unwarp default\n = _traverse.default?.default || _traverse.default || _traverse;\n\nexport interface IReturnData {\n graph: {\n nodes: Set<string>\n edges: Map<string, Set<string>>\n spread?: Map<string, Set<string>>\n }\n nodeCollection: NodeCollection\n nodesUsedInTemplate: Set<string>\n}\n\nexport interface IAddNode {\n name: string\n node: t.Node\n path: NodePath<t.VariableDeclarator | t.FunctionDeclaration>\n scope: Scope\n}\n\nexport interface IUsedNode {\n name: string\n path: NodePath<t.Identifier>\n parentPath: NodePath<t.Node>\n}\n\nexport interface IAddEdge {\n fromName: string\n toName: string\n path: NodePath<t.Identifier | t.MemberExpression>\n scope: Scope\n toScope?: Scope\n collectionNodes: Set<string>\n}\n\nexport interface IParseVariable {\n path: NodePath<t.VariableDeclarator>\n rootScope: Scope\n}\n\nexport interface IParseNodeBase extends IParseVariable {\n cb?: (params: IAddNode) => void\n}\n\nexport interface IParseEdgeBase extends IParseVariable {\n cb?: (params: IAddEdge) => void\n collectionNodes: Set<string>\n spread?: string[]\n}\n\nexport interface IRescureObject {\n node: t.ObjectPattern\n rootScope: Scope\n res: t.Identifier[]\n parentScope: Scope\n parentPath: NodePath<t.VariableDeclarator | t.ObjectProperty>\n}\n\nexport interface IRescureArray {\n node: t.ArrayPattern\n rootScope: Scope\n res: t.Identifier[]\n parentScope: Scope\n parentPath: NodePath<t.VariableDeclarator | t.ArrayPattern>\n}\n\nexport interface IParseNodeFunction {\n path: NodePath<t.FunctionDeclaration>\n rootScope: Scope\n cb?: (params: IAddNode) => void\n}\n\nexport interface IParseEdgeFunction {\n path: NodePath<t.FunctionDeclaration>\n rootScope: Scope\n cb?: (params: IAddEdge) => void\n collectionNodes: Set<string>\n}\n\nexport interface IParseReturnJSX {\n path: NodePath<t.ReturnStatement>\n parentPath: NodePath<t.Node>\n cb?: (params: IUsedNode) => void\n}\n\nexport interface IParseSetup {\n node: t.ObjectExpression\n parentScope: Scope\n parentPath: NodePath<t.ExportDefaultDeclaration>\n}\n\nexport interface ICollectSpread {\n path: NodePath<t.ObjectMethod>\n spread: string[]\n}\n\nexport interface IAddIdentifiesToGraphByScanReturn {\n path: NodePath<t.ObjectMethod>\n graph: IReturnData['graph']\n nodeCollection: IReturnData['nodeCollection']\n tempNodeCollection: IReturnData['nodeCollection']\n tempEdges: IReturnData['graph']['edges']\n}\n\nexport interface IAddSpreadToGraphByScanReturn {\n path: NodePath<t.ObjectMethod>\n graph: IReturnData['graph']\n nodeCollection: IReturnData['nodeCollection']\n tempNodeCollection: IReturnData['nodeCollection']\n tempEdges: IReturnData['graph']['edges']\n tempSpread: Map<string, Set<string>>\n}\n\nexport interface IAddGraphBySpreadIdentifier {\n path: NodePath<t.VariableDeclarator>\n graph: IReturnData['graph'] & {\n spread: Map<string, Set<string>>\n }\n nodeCollection: IReturnData['nodeCollection']\n iname: string\n}\n\n/**\n * 递归遍历如下结构:\n * let { loc, loc: locd, loc: { start, end }, loc: { start: { line: { deep } }} } = node;\n * 解出 loc, locd, start, end, deep\n */\nexport function rescureObjectPattern({ node, rootScope, res, parentScope, parentPath }: IRescureObject) {\n traverse(node, {\n ObjectProperty(path1) {\n if (path1.node.type === 'ObjectProperty'\n && path1.node.key.type === 'Identifier' && path1.node.value.type === 'Identifier') {\n const name = path1.node.value.name;\n const _scope = path1.scope.getBinding(name)?.scope;\n if (_scope && _scope === rootScope) {\n res.push(path1.node.value);\n }\n }\n else if (path1.node.type === 'ObjectProperty'\n && path1.node.key.type === 'Identifier' && path1.node.value.type === 'ObjectPattern') {\n rescureObjectPattern({\n node: path1.node.value,\n rootScope,\n res,\n parentScope: path1.scope,\n parentPath: path1,\n });\n }\n },\n RestElement(path1) {\n if (path1.node.argument.type === 'Identifier') {\n const name = path1.node.argument.name;\n const _scope = path1.scope.getBinding(name)?.scope;\n if (_scope && _scope === rootScope) {\n res.push(path1.node.argument);\n }\n }\n },\n }, parentScope, parentPath);\n}\n\n/**\n * 递归遍历如下结构:\n * let [foo, [bar, baz]] = [1, [[2], 3]];\n * 解出 foo, bar, baz\n */\nexport function rescureArrayPattern({ node, rootScope, res, parentScope, parentPath }: IRescureArray) {\n traverse(node, {\n Identifier(path1) {\n if (path1.node.type === 'Identifier') {\n const name = path1.node.name;\n const _scope = path1.scope.getBinding(name)?.scope;\n if (_scope && _scope === rootScope) {\n res.push(path1.node);\n }\n }\n },\n ArrayPattern(path1) {\n if (path1.node.type === 'ArrayPattern') {\n rescureArrayPattern({\n node: path1.node,\n rootScope,\n res,\n parentScope: path1.scope,\n parentPath: path1,\n });\n }\n },\n }, parentScope, parentPath);\n}\n\nexport function parseNodeIdentifierPattern({\n path,\n rootScope,\n cb,\n}: IParseNodeBase) {\n if (path.node.id.type !== 'Identifier') {\n return;\n }\n\n if (path.node.init?.type === 'ArrowFunctionExpression' || path.node.init?.type === 'FunctionExpression') {\n // const speak = () => {}\n cb?.({\n name: path.node.id.name,\n node: path.node,\n path,\n scope: rootScope,\n });\n }\n else {\n // const open = 22\n cb?.({\n name: path.node.id.name,\n node: path.node,\n path,\n scope: rootScope,\n });\n }\n}\n\nexport function parseNodeObjectPattern({ path, rootScope, cb }: IParseNodeBase) {\n if (path.node.id.type !== 'ObjectPattern') {\n return;\n }\n\n path.node.id.properties.forEach((property) => {\n if (property.type === 'ObjectProperty'\n && property.key.type === 'Identifier' && property.value.type === 'Identifier') {\n // const { x } = obj\n cb?.({\n name: property.value.name,\n node: property,\n path,\n scope: rootScope,\n });\n }\n else if (property.type === 'ObjectProperty'\n && property.key.type === 'Identifier' && property.value.type === 'AssignmentPattern') {\n // const { x = 3 } = obj\n cb?.({\n name: property.key.name,\n node: property,\n path,\n scope: rootScope,\n });\n }\n else if (property.type === 'RestElement' && property.argument.type === 'Identifier') {\n // const { ...rest } = obj\n cb?.({\n name: property.argument.name,\n node: property,\n path,\n scope: rootScope,\n });\n }\n else if (property.type === 'ObjectProperty'\n && property.key.type === 'Identifier' && property.value.type === 'ObjectPattern') {\n // let { loc, loc: locd, loc: { start, end } } = node;\n const res: t.Identifier[] = [];\n rescureObjectPattern({\n node: property.value,\n rootScope,\n res,\n parentScope: path.scope,\n parentPath: path,\n });\n res.forEach(r => cb?.({\n name: r.name,\n node: r,\n path,\n scope: rootScope,\n }));\n }\n });\n}\n\nexport function parseNodeArrayPattern({ path, rootScope, cb }: IParseNodeBase) {\n if (path.node.id.type !== 'ArrayPattern') {\n return;\n }\n\n path.node.id.elements.forEach((ele) => {\n if (ele?.type === 'Identifier') {\n // const [arr, brr] = array\n cb?.({\n name: ele.name,\n node: ele,\n path,\n scope: rootScope,\n });\n }\n else if (ele?.type === 'ArrayPattern') {\n // let [foo, [bar, baz]] = array;\n const res: t.Identifier[] = [];\n rescureArrayPattern({\n node: ele,\n rootScope,\n res,\n parentScope: path.scope,\n parentPath: path,\n });\n res.forEach(r => cb?.({\n name: r.name,\n node: r,\n path,\n scope: rootScope,\n }));\n }\n else if (ele?.type === 'AssignmentPattern') {\n if (ele.left.type === 'Identifier') {\n // let [yy = 'b'] = array;\n cb?.({\n name: ele.left.name,\n node: ele,\n path,\n scope: rootScope,\n });\n }\n }\n else if (ele?.type === 'RestElement') {\n if (ele.argument.type === 'Identifier') {\n // const [arr2, ...rest2] = array\n cb?.({\n name: ele.argument.name,\n node: ele,\n path,\n scope: rootScope,\n });\n }\n }\n });\n}\n\nexport function parseNodeFunctionPattern({ path, rootScope, cb }: IParseNodeFunction) {\n if (path.node.type !== 'FunctionDeclaration') {\n return;\n }\n if (path.node.id?.type === 'Identifier') {\n // function abc () {}\n cb?.({\n name: path.node.id.name,\n node: path.node,\n path,\n scope: rootScope,\n });\n }\n}\n\nexport function parseEdgeLeftIdentifierPattern({ path, rootScope, cb, collectionNodes, spread }: IParseEdgeBase) {\n if (!path.node.id || path.node.id.type !== 'Identifier') {\n return;\n }\n\n if (path.node.init?.type\n && [\n 'ArrowFunctionExpression',\n 'FunctionExpression',\n 'CallExpression',\n 'ObjectExpression',\n 'ArrayExpression',\n ].includes(path.node.init.type)\n ) {\n // if (graph.nodes.has(path.node.id.name) && path.scope.getBinding(path.node.id.name)?.scope === rootScope) {\n if (collectionNodes.has(path.node.id.name) && path.scope.getBinding(path.node.id.name)?.scope === rootScope) {\n const name = path.node.id.name;\n traverse(path.node.init, {\n Identifier(path1) {\n // graph.edges.get(name)?.add(path1.node.name);\n\n const binding = path1.scope.getBinding(path1.node.name);\n if (\n binding?.scope === rootScope\n && collectionNodes.has(path1.node.name)\n && (\n (path1.parent.type !== 'MemberExpression'\n && path1.parent.type !== 'OptionalMemberExpression')\n || path1.parent.object === path1.node\n )\n ) {\n cb?.({\n fromName: name,\n toName: path1.node.name,\n path: path1,\n scope: rootScope,\n collectionNodes,\n });\n }\n },\n MemberExpression(path1) {\n if (spread?.length && path1.node.object.type === 'Identifier'\n && spread.includes(path1.node.object.name)\n && path1.node.property.type === 'Identifier') {\n cb?.({\n fromName: name,\n toName: path1.node.property.name,\n toScope: path1.scope.getBinding(path1.node.object.name)?.scope,\n path: path1,\n scope: rootScope,\n collectionNodes,\n });\n }\n },\n }, path.scope, path);\n }\n }\n}\n\nexport function parseEdgeLeftObjectPattern({ path, rootScope, cb, collectionNodes }: IParseEdgeBase) {\n if (!path.node.id || path.node.id.type !== 'ObjectPattern') {\n return;\n }\n if (path.node.init?.type\n && [\n 'ArrowFunctionExpression',\n 'FunctionExpression',\n 'CallExpression',\n 'ObjectExpression',\n 'ArrayExpression',\n ].includes(path.node.init.type)\n ) {\n const res: t.Identifier[] = [];\n rescureObjectPattern({\n node: path.node.id,\n rootScope,\n res,\n parentScope: path.scope,\n parentPath: path,\n });\n\n // res.filter(r => (graph.nodes.has(r.name) && path.scope.getBinding(r.name)?.scope === rootScope));\n res.filter(r => (collectionNodes.has(r.name) && path.scope.getBinding(r.name)?.scope === rootScope));\n\n traverse(path.node.init, {\n Identifier(path1) {\n const binding = path1.scope.getBinding(path1.node.name);\n if (\n binding?.scope === rootScope\n && collectionNodes.has(path1.node.name)\n && (\n (path1.parent.type !== 'MemberExpression'\n && path1.parent.type !== 'OptionalMemberExpression')\n || path1.parent.object === path1.node\n )\n ) {\n res.forEach((r) => {\n cb?.({\n fromName: r.name,\n toName: path1.node.name,\n path: path1,\n scope: rootScope,\n collectionNodes,\n });\n });\n }\n },\n }, path.scope, path);\n }\n}\n\nexport function parseEdgeLeftArrayPattern({ path, rootScope, cb, collectionNodes }: IParseEdgeBase) {\n if (!path.node.id || path.node.id.type !== 'ArrayPattern') {\n return;\n }\n if (path.node.init?.type\n && [\n 'ArrowFunctionExpression',\n 'FunctionExpression',\n 'CallExpression',\n 'ObjectExpression',\n 'ArrayExpression',\n ].includes(path.node.init.type)\n ) {\n const res: t.Identifier[] = [];\n rescureArrayPattern({\n node: path.node.id,\n rootScope,\n res,\n parentScope: path.scope,\n parentPath: path,\n });\n\n res.filter(r => (collectionNodes.has(r.name) && path.scope.getBinding(r.name)?.scope === rootScope));\n\n traverse(path.node.init, {\n Identifier(path1) {\n const binding = path1.scope.getBinding(path1.node.name);\n if (\n binding?.scope === rootScope\n && collectionNodes.has(path1.node.name)\n && (\n (path1.parent.type !== 'MemberExpression'\n && path1.parent.type !== 'OptionalMemberExpression')\n || path1.parent.object === path1.node\n )\n ) {\n res.forEach((r) => {\n cb?.({\n fromName: r.name,\n toName: path1.node.name,\n path: path1,\n scope: rootScope,\n collectionNodes,\n });\n });\n }\n },\n }, path.scope, path);\n }\n}\n\nexport function parseEdgeFunctionPattern({ path, rootScope, cb, collectionNodes }: IParseEdgeFunction) {\n if (!path.node.id) {\n return;\n }\n if (collectionNodes.has(path.node.id.name) && path.scope.getBinding(path.node.id.name)?.scope === rootScope) {\n const name = path.node.id.name;\n traverse(path.node.body, {\n Identifier(path1) {\n const binding = path1.scope.getBinding(path1.node.name);\n if (binding?.scope === rootScope && collectionNodes.has(path1.node.name)) {\n cb?.({\n fromName: name,\n toName: path1.node.name,\n path: path1,\n scope: rootScope,\n collectionNodes,\n });\n }\n },\n }, path.scope, path);\n }\n}\n\nexport function parseReturnJsxPattern({ path, parentPath, cb }: IParseReturnJSX) {\n if (\n path.node.argument\n && (\n // return () => (<div></div>)\n // return function() (<div></div>)\n (\n (\n path.node.argument.type === 'ArrowFunctionExpression'\n || path.node.argument.type === 'FunctionExpression'\n ) && (\n path.node.argument.body.type === 'JSXElement'\n || path.node.argument.body.type === 'JSXFragment'\n )\n )\n // return (<div></div>)\n || (\n path.node.argument.type === 'JSXElement'\n || path.node.argument.type === 'JSXFragment'\n )\n )\n ) {\n path.traverse({\n Identifier(path1) {\n // if (path1.scope.getBinding(path1.node.name)?.scope === parentPath.scope) {\n // nodesUsedInTemplate.add(path1.node.name);\n // }\n cb?.({\n name: path1.node.name,\n path: path1,\n parentPath,\n });\n },\n });\n }\n}\n\nexport function traverseSetup({ node, parentScope, parentPath }: IParseSetup) {\n let path: NodePath<t.ObjectMethod>;\n\n traverse(node, {\n ObjectMethod(path1) {\n if (\n (\n parentPath.node.declaration.type === 'ObjectExpression'\n && path1.parent === parentPath.node.declaration\n ) || (\n parentPath.node.declaration.type === 'CallExpression'\n && path1.parent === parentPath.node.declaration.arguments[0]\n )\n ) {\n if (path1.node.key.type === 'Identifier' && path1.node.key.name === 'setup') {\n path = path1;\n }\n }\n },\n }, parentScope, parentPath);\n\n return path!;\n}\n\nexport function collectionSpread({ path: path1, spread }: ICollectSpread) {\n path1.traverse({\n ReturnStatement(path2) {\n // get setup return obj spread\n if (path2.node.argument?.type === 'ObjectExpression') {\n const returnNode = path2.node.argument;\n traverse(returnNode, {\n SpreadElement(path3) {\n // ...toRefs(xxx)\n if (\n path3.node.argument.type === 'CallExpression'\n && path3.node.argument.callee.type === 'Identifier'\n && path3.node.argument.callee.name === 'toRefs'\n && path3.node.argument.arguments[0].type === 'Identifier'\n ) {\n spread.push(path3.node.argument.arguments[0].name);\n }\n // ...xxx\n else if (\n path3.node.argument.type === 'Identifier'\n ) {\n spread.push(path3.node.argument.name);\n }\n },\n }, path2.scope, path2);\n }\n },\n });\n}\n\nexport function addIdentifiesToGraphByScanReturn(\n { path: path1, graph, nodeCollection, tempNodeCollection, tempEdges }: IAddIdentifiesToGraphByScanReturn,\n) {\n path1.traverse({\n ReturnStatement(path2) {\n // get setup return obj spread\n if (path2.node.argument?.type === 'ObjectExpression') {\n const returnNode = path2.node.argument;\n traverse(returnNode, {\n ObjectProperty(path3) {\n // not spread node\n if (path3.parent === returnNode) {\n if (path3.node.key.type === 'Identifier' && path3.node.value.type === 'Identifier') {\n const valName = path3.node.value.name;\n if (!graph.nodes.has(valName)) {\n graph.nodes.add(valName);\n nodeCollection.addTypedNode(\n valName,\n tempNodeCollection.nodes.get(valName)!,\n );\n }\n if (!graph.edges.has(valName)) {\n graph.edges.set(valName, new Set([...Array.from(\n tempEdges.get(valName) || new Set<string>(),\n )]));\n }\n\n const name = path3.node.key.name;\n if (name !== valName) {\n graph.nodes.add(name);\n nodeCollection.addNode(name, path3.node.key, {\n comment: getComment(path3.node),\n });\n graph.edges.set(name, new Set([valName]));\n }\n }\n }\n },\n }, path2.scope, path2);\n }\n },\n });\n}\n\nexport function addSpreadToGraphByScanReturn(\n { path: path1, graph, nodeCollection, tempNodeCollection, tempEdges, tempSpread }: IAddSpreadToGraphByScanReturn,\n) {\n path1.traverse({\n ReturnStatement(path2) {\n // get setup return obj spread\n if (path2.node.argument?.type === 'ObjectExpression') {\n const returnNode = path2.node.argument;\n traverse(returnNode, {\n SpreadElement(path3) {\n // ...toRefs(xxx)\n if (\n path3.node.argument.type === 'CallExpression'\n && path3.node.argument.callee.type === 'Identifier'\n && path3.node.argument.callee.name === 'toRefs'\n && path3.node.argument.arguments[0].type === 'Identifier'\n && tempSpread.get(path3.node.argument.arguments[0].name)\n ) {\n tempSpread.get(path3.node.argument.arguments[0].name)?.forEach((name) => {\n graph.nodes.add(name);\n nodeCollection.addTypedNode(name, tempNodeCollection.nodes.get(name)!);\n if (!graph.edges.get(name)) {\n graph.edges.set(name, new Set());\n tempEdges.get(name)?.forEach((edge) => {\n graph.edges.get(name)?.add(edge);\n });\n }\n });\n }\n // ...xxx\n else if (\n path3.node.argument.type === 'Identifier'\n && tempSpread.get(path3.node.argument.name)\n ) {\n tempSpread.get(path3.node.argument.name)?.forEach((name) => {\n graph.nodes.add(name);\n nodeCollection.addTypedNode(name, tempNodeCollection.nodes.get(name)!);\n if (!graph.edges.get(name)) {\n graph.edges.set(name, new Set());\n tempEdges.get(name)?.forEach((edge) => {\n graph.edges.get(name)?.add(edge);\n });\n }\n });\n }\n },\n }, path2.scope, path2);\n }\n },\n });\n}\n\nexport function addGraphBySpreadIdentifier({ path: path1, graph, nodeCollection, iname }: IAddGraphBySpreadIdentifier) {\n if (path1.node.init?.type === 'ObjectExpression') {\n path1.node.init?.properties.forEach((prop) => {\n if (\n (prop.type === 'ObjectProperty' || prop.type === 'ObjectMethod')\n && prop.key.type === 'Identifier'\n ) {\n const keyName = prop.key.name;\n graph.nodes.add(keyName);\n nodeCollection.addNode(keyName, prop, {\n comment: getComment(prop),\n });\n if (!graph.edges.get(keyName)) {\n graph.edges.set(keyName, new Set());\n }\n if (graph.spread.has(iname)) {\n graph.spread.get(iname)?.add(keyName);\n }\n else {\n graph.spread.set(iname, new Set([keyName]));\n }\n }\n else if (prop.type === 'SpreadElement') {\n console.warn('not support spread in spread');\n }\n });\n }\n\n if (\n path1.node.init?.type === 'CallExpression'\n && path1.node.init?.callee.type === 'Identifier'\n && path1.node.init?.callee.name === 'reactive'\n ) {\n const arg = path1.node.init?.arguments[0];\n if (arg.type === 'ObjectExpression') {\n arg.properties.forEach((prop) => {\n if (\n (prop.type === 'ObjectProperty' || prop.type === 'ObjectMethod')\n && prop.key.type === 'Identifier'\n ) {\n const keyName = prop.key.name;\n graph.nodes.add(keyName);\n nodeCollection.addNode(keyName, prop, {\n comment: getComment(prop),\n });\n if (!graph.edges.get(keyName)) {\n graph.edges.set(keyName, new Set());\n }\n if (graph.spread.has(iname)) {\n graph.spread.get(iname)?.add(keyName);\n }\n else {\n graph.spread.set(iname, new Set([keyName]));\n }\n }\n else if (prop.type === 'SpreadElement') {\n console.warn('not support spread in spread');\n }\n });\n }\n }\n}\n","// https://github.com/vuejs/core/blob/main/packages/compiler-sfc/src/style/cssVars.ts\n\nimport type { SFCStyleBlock } from '@vue/compiler-sfc';\n\nenum LexerState {\n inParens,\n inSingleQuoteString,\n inDoubleQuoteString,\n}\n\nfunction lexBinding(content: string, start: number): number | null {\n let state: LexerState = LexerState.inParens;\n let parenDepth = 0;\n\n for (let i = start; i < content.length; i++) {\n const char = content.charAt(i);\n switch (state) {\n case LexerState.inParens:\n if (char === '\\'') {\n state = LexerState.inSingleQuoteString;\n }\n else if (char === '\"') {\n state = LexerState.inDoubleQuoteString;\n }\n else if (char === '(') {\n parenDepth++;\n }\n else if (char === ')') {\n if (parenDepth > 0) {\n parenDepth--;\n }\n else {\n return i;\n }\n }\n break;\n case LexerState.inSingleQuoteString:\n if (char === '\\'') {\n state = LexerState.inParens;\n }\n break;\n case LexerState.inDoubleQuoteString:\n if (char === '\"') {\n state = LexerState.inParens;\n }\n break;\n }\n }\n return null;\n}\n\nfunction normalizeExpression(exp: string) {\n exp = exp.trim();\n if (\n (exp[0] === '\\'' && exp[exp.length - 1] === '\\'')\n || (exp[0] === '\"' && exp[exp.length - 1] === '\"')\n ) {\n return exp.slice(1, -1);\n }\n return exp;\n}\n\nconst vBindRE = /v-bind\\s*\\(/g;\n\nexport function analyze(\n styles: SFCStyleBlock[],\n) {\n const nodes = new Set<string>();\n\n styles.forEach((style) => {\n let match;\n const content = style.content.replace(/\\/\\*([\\s\\S]*?)\\*\\/|\\/\\/.*/g, '');\n // eslint-disable-next-line no-cond-assign\n while ((match = vBindRE.exec(content))) {\n const start = match.index + match[0].length;\n const end = lexBinding(content, start);\n if (end !== null) {\n const variable = normalizeExpression(content.slice(start, end));\n nodes.add(variable);\n }\n }\n });\n\n return nodes;\n}\n","import type { TypedNode } from '../analyze/utils';\n\nfunction dfs(\n graph: Map<TypedNode, Set<TypedNode>>,\n node: TypedNode,\n targets: Set<TypedNode>,\n visited: Set<TypedNode>,\n component: Set<TypedNode>,\n) {\n component.add(node);\n visited.add(node);\n targets.forEach((target) => {\n if (!visited.has(target)) {\n dfs(graph, target, graph.get(target) || new Set(), visited, component);\n }\n });\n}\n\nfunction haveIntersection(setA: Set<TypedNode>, setB: Set<TypedNode>): boolean {\n for (const item of setA) {\n if (setB.has(item)) {\n return true;\n }\n }\n return false;\n}\n\nfunction mergeSets(arr: Set<TypedNode>[]): Set<TypedNode>[] {\n let result: Set<TypedNode>[] = [...arr];\n for (let i = 0; i < result.length; i++) {\n for (let j = i + 1; j < result.length; j++) {\n if (haveIntersection(result[i], result[j])) {\n const newSet = new Set([...result[i], ...result[j]]);\n result.splice(j, 1);\n result.splice(i, 1);\n result = [...result, newSet];\n return mergeSets(result);\n }\n }\n }\n return result;\n}\n\nexport function splitGraph(\n graph: Map<TypedNode, Set<TypedNode>>,\n) {\n const components = [] as Set<TypedNode>[];\n\n const sorted = Array.from(graph).sort((a, b) => b[1].size - a[1].size);\n\n (new Map(sorted)).forEach((targets, node) => {\n const visited = new Set<TypedNode>();\n if (!visited.has(node)) {\n const component = new Set<TypedNode>();\n dfs(graph, node, targets, visited, component);\n components.push(component);\n }\n });\n\n return mergeSets(components).map((component) => {\n const subGraph = new Map<TypedNode, Set<TypedNode>>();\n component.forEach((node) => {\n const targets = graph.get(node);\n if (targets) {\n subGraph.set(node, targets);\n }\n });\n return subGraph;\n });\n}\n","import type { TypedNode } from '../analyze/utils';\nimport { NodeType } from '../analyze/utils';\n\n/**\n * Filter out nodes that have no indegree.\n */\nexport function noIndegreeFilter(\n graph: Map<TypedNode, Set<TypedNode>>,\n) {\n const nodes = Array.from(graph.keys());\n const indegree = new Map<TypedNode, number>();\n nodes.forEach((node) => {\n indegree.set(node, 0);\n });\n graph.forEach((targets, node) => {\n targets.forEach((target) => {\n indegree.set(target, (indegree.get(target) || 0) + 1);\n });\n });\n return nodes.filter(node => indegree.get(node) === 0);\n}\n\n/**\n * Filter out nodes that have no outdegree.\n */\nexport function noOutdegreeFilter(\n graph: Map<TypedNode, Set<TypedNode>>,\n) {\n const zeroOutdegreeNodes = [];\n\n for (const [node, edges] of graph.entries()) {\n if (edges.size === 0) {\n zeroOutdegreeNodes.push(node);\n }\n }\n\n return zeroOutdegreeNodes;\n}\n\n// ---\n\nfunction removeVariable(\n graph: Map<TypedNode, Set<TypedNode>>,\n targets: Set<TypedNode>,\n) {\n const newTarget = new Set<TypedNode>();\n targets.forEach((target) => {\n if (target.type === NodeType.var) {\n const nodes = graph.get(target);\n nodes?.forEach((node) => {\n newTarget.add(node);\n });\n }\n if (target.type === NodeType.fun) {\n newTarget.add(target);\n }\n });\n return newTarget;\n}\n\n/**\n * only save function nodes\n */\nexport function onlyFunctions(\n graph: Map<TypedNode, Set<TypedNode>>,\n): Map<TypedNode, Set<TypedNode>> {\n const result = new Map<TypedNode, Set<TypedNode>>();\n graph.forEach((targets, node) => {\n if (node.type === NodeType.fun) {\n const nodes = removeVariable(graph, targets);\n result.set(node, nodes);\n }\n });\n return result;\n}\n\n// ---\n\nexport function findLinearPaths(graph: Map<TypedNode, Set<TypedNode>>) {\n const linearPaths = [];\n\n const visitedNodes = new Set();\n\n for (const [node, edges] of graph.entries()) {\n if (edges.size === 1 && !visitedNodes.has(node)) {\n const path = [node];\n let nextNode = Array.from(edges)[0];\n\n visitedNodes.add(node);\n\n while (graph.get(nextNode)?.size === 1) {\n if (visitedNodes.has(nextNode)) {\n break;\n }\n path.push(nextNode);\n visitedNodes.add(nextNode);\n nextNode = Array.from(graph.get(nextNode)!)[0];\n }\n\n if (path.length > 1) {\n linearPaths.push(path);\n }\n }\n }\n\n return linearPaths;\n}\n\n// ---\n\nexport function findArticulationPoints(graph: Map<TypedNode, Set<TypedNode>>) {\n const noIndegreeNodes = noIndegreeFilter(graph);\n let time = 0;\n const low = new Map<TypedNode, number>();\n const disc = new Map<TypedNode, number>();\n const parent = new Map<TypedNode, TypedNode | null>();\n const ap = new Set<TypedNode>();\n const visited = new Set<TypedNode>();\n\n function APUtil(graph: Map<TypedNode, Set<TypedNode>>, node: TypedNode) {\n let children = 0;\n disc.set(node, time);\n low.set(node, time);\n time++;\n visited.add(node);\n\n for (const neighbor of graph.get(node) || []) {\n if (!visited.has(neighbor)) {\n children++;\n parent.set(neighbor, node);\n APUtil(graph, neighbor);\n low.set(node, Math.min(low.get(node)!, low.get(neighbor)!));\n if (parent.get(node) === null && children > 1) {\n ap.add(node);\n }\n if (parent.get(node) !== null && low.get(neighbor)! >= disc.get(node)!) {\n ap.add(node);\n }\n }\n else if (neighbor !== parent.get(node)) {\n low.set(node, Math.min(low.get(node)!, disc.get(neighbor)!));\n }\n }\n }\n\n for (const node of graph.keys()) {\n if (!visited.has(node) && !noIndegreeNodes.includes(node)) {\n APUtil(graph, node);\n }\n }\n return ap;\n}\n","import type { TypedNode } from '../analyze/utils';\n\nexport function hasCycle(graph: Map<TypedNode, Set<TypedNode>>): { hasCycle: boolean, cycleNodes: TypedNode[] } {\n const visited: Set<TypedNode> = new Set();\n const onStack: Set<TypedNode> = new Set();\n const stack: TypedNode[] = [];\n\n function dfs(node: TypedNode): boolean {\n if (visited.has(node)) {\n if (onStack.has(node)) {\n // Find the start of the cycle.\n while (stack[0] !== node) {\n onStack.delete(stack.shift()!);\n }\n return true;\n }\n return false;\n }\n\n visited.add(node);\n onStack.add(node);\n stack.push(node);\n\n for (const neighbor of (graph.get(node) || new Set())) {\n if (dfs(neighbor)) {\n return true;\n }\n }\n\n onStack.delete(node);\n stack.pop();\n return false;\n }\n\n for (const [node, targets] of graph) {\n if (dfs(node)) {\n return { hasCycle: true, cycleNodes: [...stack] };\n }\n }\n\n return { hasCycle: false, cycleNodes: [] };\n}\n","import * as t from '@babel/types';\nimport type { TypedNode } from '../analyze/utils';\nimport { NodeType } from '../analyze/utils';\nimport { splitGraph } from './split';\nimport { findArticulationPoints, findLinearPaths, noIndegreeFilter, noOutdegreeFilter, onlyFunctions } from './filter';\nimport { hasCycle } from './utils';\n\nexport enum SuggestionType {\n info = 'info',\n warning = 'warning',\n error = 'error',\n}\n\nexport interface Suggestion {\n type: SuggestionType\n message: string\n nodeInfo?: TypedNode | Array<TypedNode>\n};\n\nexport function gen(\n graph: {\n nodes: Set<TypedNode>\n edges: Map<TypedNode, Set<TypedNode>>\n },\n nodesUsedInTemplate: Set<string>,\n nodesUsedInStyle: Set<string> = new Set(),\n) {\n const usedNodes = new Set([...nodesUsedInTemplate, ...nodesUsedInStyle]);\n\n const suggestions: Suggestion[] = [];\n const splitedGraph = splitGraph(graph.edges);\n // console.log(splitedGraph);\n splitedGraph.forEach((g) => {\n const nodes = Array.from(g.keys());\n\n if (splitedGraph.length > 1) {\n if (nodes.length > 2 && nodes.some(node => !usedNodes.has(node.label))) {\n suggestions.push({\n type: SuggestionType.info,\n message: `Nodes [${\n nodes.length > 10\n ? `${nodes.slice(0, 10).map(node => node.label).join(',')}...(${nodes.length})`\n : nodes.map(node => node.label).join(',')\n }] are isolated, perhaps you can refactor them to an isolated file.`,\n nodeInfo: nodes,\n });\n }\n }\n\n if (nodes.length > 1 && nodes.every(node => !usedNodes.has(node.label) && !node.info?.used?.size)) {\n suggestions.push({\n type: SuggestionType.info,\n message: `Nodes [${\n nodes.length > 10\n ? `${nodes.slice(0, 10).map(node => node.label).join(',')}...`\n : nodes.map(node => node.label).join(',')\n }] are not used, perhaps you can remove them.`,\n nodeInfo: nodes,\n });\n }\n const hasCycleResult = hasCycle(g);\n if (hasCycleResult.hasCycle) {\n suggestions.push({\n type: SuggestionType.error,\n message: `There is a loop call in nodes [${\n hasCycleResult.cycleNodes.map(node => node.label).join(',')\n }], perhaps you can refactor it.`,\n nodeInfo: hasCycleResult.cycleNodes,\n });\n }\n\n const paths = findLinearPaths(g);\n paths.forEach((path) => {\n suggestions.push({\n type: SuggestionType.warning,\n message: `Nodes [${\n path.length > 10\n ? `${path.slice(0, 10).map(node => node.label).join(',')}...(${path.length})`\n : path.map(node => node.label).join(',')\n }] are have function chain calls, perhaps you can refactor it.`,\n nodeInfo: path,\n });\n });\n\n if (g.size > 5) {\n const ap = findArticulationPoints(g);\n ap.forEach((node) => {\n if (node.type === NodeType.fun) {\n suggestions.push({\n type: SuggestionType.info,\n\n message: `Node [${\n node.label\n }] is an articulation point, perhaps you need to pay special attention to this node.`,\n nodeInfo: node,\n });\n }\n });\n }\n });\n\n const noIndegreeNodes = noIndegreeFilter(graph.edges);\n noIndegreeNodes.forEach((node) => {\n if (!usedNodes.has(node.label) && !node.info?.used?.size) {\n suggestions.push({\n type: SuggestionType.info,\n message: `Node [${node.label}] is not used, perhaps you can remove it.`,\n nodeInfo: node,\n });\n }\n });\n\n // const noOutdegreeNodes = noOutdegreeFilter(graph.edges);\n // noOutdegreeNodes.forEach(node => {\n // if(!usedNodes.has(node.label)) {\n // suggestions.push({\n // type: SuggestionType.info,\n // message: `Node [${node.label}] is not used, perhaps you can remove it.`,\n // nodeInfo: node,\n // });\n // }\n // });\n\n return suggestions;\n}\n","import type { Data, Edge, Node } from 'vis-network';\nimport type { TypedNode } from './analyze/utils';\n\ntype CustomNode = Node & {\n info: TypedNode['info']\n};\n\nexport function getVisData(\n graph: {\n nodes: Set<TypedNode>\n edges: Map<TypedNode, Set<TypedNode>>\n },\n nodesUsedInTemplate: Set<string>,\n nodesUsedInStyle: Set<string> = new Set(),\n) {\n const usedNodes = new Set([...nodesUsedInTemplate, ...nodesUsedInStyle]);\n\n const nodes: CustomNode[] = [];\n const edges: Edge[] = [];\n\n graph.nodes.forEach((node) => {\n nodes.push({\n id: node.label,\n label: node.label,\n shape: node.type === 'var'\n ? 'dot'\n : 'diamond',\n group: usedNodes.has(node.label) || node.info?.used?.size\n ? 'used'\n : 'normal',\n title: `${\n node.info?.used?.size\n ? `used by ${Array.from(node.info?.used || [])?.map(i => `\\`${i}\\``).join(',')}\\n\\n`\n : ''\n }${\n usedNodes.has(node.label)\n ? `used in ${\n [\n nodesUsedInStyle.has(node.label)\n ? 'style'\n : '',\n nodesUsedInTemplate.has(node.label)\n ? 'template'\n : '',\n ].filter(Boolean).join(' and ')\n }\\n\\n`\n : ''\n }${node.info?.comment || ''}`.trim() || undefined,\n info: node.info,\n });\n });\n\n graph.edges.forEach((edge, key) => {\n edge.forEach((to) => {\n if (!to) {\n return;\n }\n edges.push({\n from: key.label,\n to: to.label,\n arrows: {\n to: {\n enabled: true,\n scaleFactor: 0.8,\n },\n },\n });\n });\n });\n\n return {\n nodes,\n edges,\n };\n}\n"],"mappings":"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","names":["analyze","import_compiler_sfc","_traverse","import_compiler_sfc","import_traverse","NodeType","traverse","_traverse","analyze","import_compiler_sfc","import_traverse","traverse","_traverse","analyze","import_compiler_sfc","import_traverse","traverse","_traverse","node","parentPath","traverse","params","analyze","analyze","graph","dfs","SuggestionType"]}