vue-hook-optimizer 0.0.57 → 0.0.59

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -2022,23 +2022,72 @@ function noIndegreeFilter(graph) {
2022
2022
  function findLinearPaths(graph) {
2023
2023
  const linearPaths = [];
2024
2024
  const visitedNodes = /* @__PURE__ */ new Set();
2025
+ const nodeInDegrees = /* @__PURE__ */ new Map();
2025
2026
  for (const [node, edges] of graph.entries()) {
2026
- if (edges.size === 1 && !visitedNodes.has(node)) {
2027
- const path = [node];
2028
- let nextNode = Array.from(edges)[0];
2029
- visitedNodes.add(node);
2030
- while (graph.get(nextNode)?.size === 1) {
2031
- if (visitedNodes.has(nextNode)) {
2027
+ if (!nodeInDegrees.has(node)) {
2028
+ nodeInDegrees.set(node, 0);
2029
+ }
2030
+ for (const edge of edges) {
2031
+ const inDegree = nodeInDegrees.get(edge) || 0;
2032
+ nodeInDegrees.set(edge, inDegree + 1);
2033
+ }
2034
+ }
2035
+ function dfs2(node, path) {
2036
+ if (visitedNodes.has(node)) {
2037
+ return;
2038
+ }
2039
+ path.push(node);
2040
+ visitedNodes.add(node);
2041
+ const edges = graph.get(node) || /* @__PURE__ */ new Set();
2042
+ if (edges.size === 0 || edges.size > 1) {
2043
+ if (path.length > 1) {
2044
+ addOrUpdatePath([...path]);
2045
+ }
2046
+ } else {
2047
+ const nextNode = Array.from(edges)[0];
2048
+ const nextNodeInDegree = nodeInDegrees.get(nextNode) || 0;
2049
+ if (nextNodeInDegree === 1) {
2050
+ dfs2(nextNode, path);
2051
+ }
2052
+ }
2053
+ path.pop();
2054
+ visitedNodes.delete(node);
2055
+ }
2056
+ function addOrUpdatePath(newPath) {
2057
+ let shouldAddNewPath = true;
2058
+ for (let i = linearPaths.length - 1; i >= 0; i--) {
2059
+ const existingPath = linearPaths[i];
2060
+ if (isSubpath(existingPath, newPath)) {
2061
+ linearPaths.splice(i, 1);
2062
+ } else if (isSubpath(newPath, existingPath)) {
2063
+ shouldAddNewPath = false;
2064
+ break;
2065
+ }
2066
+ }
2067
+ if (shouldAddNewPath && newPath.length > 2) {
2068
+ linearPaths.push(newPath);
2069
+ }
2070
+ }
2071
+ function isSubpath(shortPath, longPath) {
2072
+ if (shortPath.length >= longPath.length) {
2073
+ return false;
2074
+ }
2075
+ for (let i = 0; i <= longPath.length - shortPath.length; i++) {
2076
+ let isSub = true;
2077
+ for (let j = 0; j < shortPath.length; j++) {
2078
+ if (shortPath[j] !== longPath[i + j]) {
2079
+ isSub = false;
2032
2080
  break;
2033
2081
  }
2034
- path.push(nextNode);
2035
- visitedNodes.add(nextNode);
2036
- nextNode = Array.from(graph.get(nextNode))[0];
2037
2082
  }
2038
- if (path.length > 1) {
2039
- linearPaths.push(path);
2083
+ if (isSub) {
2084
+ return true;
2040
2085
  }
2041
2086
  }
2087
+ return false;
2088
+ }
2089
+ for (const node of graph.keys()) {
2090
+ dfs2(node, []);
2042
2091
  }
2043
2092
  return linearPaths;
2044
2093
  }
@@ -2155,11 +2204,16 @@ function gen(graph, nodesUsedInTemplate, nodesUsedInStyle = /* @__PURE__ */ new
2155
2204
  }
2156
2205
  const paths = findLinearPaths(g);
2157
2206
  paths.forEach((path) => {
2158
- suggestions.push({
2159
- type: "warning" /* warning */,
2160
- message: `Nodes [${path.length > 10 ? `${path.slice(0, 10).map((node) => node.label).join(",")}...(${path.length})` : path.map((node) => node.label).join(",")}] are have function chain calls, perhaps you can refactor it.`,
2161
- nodeInfo: path
2162
- });
2207
+ const firstUsedNodeIndex = path.findIndex((node) => usedNodes.has(node.label));
2208
+ const reverseLastNotUsedNodeIndex = path.slice().reverse().findIndex((node) => !usedNodes.has(node.label));
2209
+ const lastNotUsedNodeIndex = reverseLastNotUsedNodeIndex !== -1 ? path.length - 1 - reverseLastNotUsedNodeIndex : -1;
2210
+ if (firstUsedNodeIndex > -1 && firstUsedNodeIndex < lastNotUsedNodeIndex) {
2211
+ suggestions.push({
2212
+ type: "warning" /* warning */,
2213
+ message: `Nodes [${path.length > 10 ? `${path.slice(0, 10).map((node) => node.label).join(",")}...(${path.length})` : path.map((node) => node.label).join(",")}] are have function chain calls, perhaps you can refactor it.`,
2214
+ nodeInfo: path
2215
+ });
2216
+ }
2163
2217
  });
2164
2218
  if (g.size > 5) {
2165
2219
  const ap = findArticulationPoints(g);