vue-hook-optimizer 0.0.55 → 0.0.57

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.d.mts CHANGED
@@ -1,7 +1,8 @@
1
+ import { SFCStyleBlock } from '@vue/compiler-sfc';
1
2
  export { parse } from '@vue/compiler-sfc';
2
3
  import { Edge, Node } from 'vis-network';
3
4
 
4
- declare function analyze$3(content: string): Set<string>;
5
+ declare function analyze$4(content: string): Set<string>;
5
6
 
6
7
  interface TypedNode {
7
8
  label: string;
@@ -18,12 +19,12 @@ declare enum NodeType {
18
19
  fun = "fun"
19
20
  }
20
21
 
21
- declare function analyze$2(content: string, lineOffset?: number, jsx?: boolean): {
22
+ declare function analyze$3(content: string, lineOffset?: number, jsx?: boolean): {
22
23
  nodes: Set<TypedNode>;
23
24
  edges: Map<TypedNode, Set<TypedNode>>;
24
25
  };
25
26
 
26
- declare function analyze$1(content: string, lineOffset?: number, jsx?: boolean): {
27
+ declare function analyze$2(content: string, lineOffset?: number, jsx?: boolean): {
27
28
  graph: {
28
29
  nodes: Set<TypedNode>;
29
30
  edges: Map<TypedNode, Set<TypedNode>>;
@@ -31,7 +32,7 @@ declare function analyze$1(content: string, lineOffset?: number, jsx?: boolean):
31
32
  nodesUsedInTemplate: Set<string>;
32
33
  };
33
34
 
34
- declare function analyze(content: string, type?: "vue" | "react", lineOffset?: number, addInfo?: boolean): {
35
+ declare function analyze$1(content: string, type?: "vue" | "react", lineOffset?: number, addInfo?: boolean): {
35
36
  graph: {
36
37
  nodes: Set<TypedNode>;
37
38
  edges: Map<TypedNode, Set<TypedNode>>;
@@ -39,6 +40,8 @@ declare function analyze(content: string, type?: "vue" | "react", lineOffset?: n
39
40
  nodesUsedInTemplate: Set<string>;
40
41
  };
41
42
 
43
+ declare function analyze(styles: SFCStyleBlock[]): Set<string>;
44
+
42
45
  declare enum SuggestionType {
43
46
  info = "info",
44
47
  warning = "warning",
@@ -52,7 +55,7 @@ interface Suggestion {
52
55
  declare function gen(graph: {
53
56
  nodes: Set<TypedNode>;
54
57
  edges: Map<TypedNode, Set<TypedNode>>;
55
- }, usedNodes: Set<string>): Suggestion[];
58
+ }, nodesUsedInTemplate: Set<string>, nodesUsedInStyle?: Set<string>): Suggestion[];
56
59
 
57
60
  type CustomNode = Node & {
58
61
  info: TypedNode['info'];
@@ -60,9 +63,9 @@ type CustomNode = Node & {
60
63
  declare function getVisData(graph: {
61
64
  nodes: Set<TypedNode>;
62
65
  edges: Map<TypedNode, Set<TypedNode>>;
63
- }, usedNodes: Set<string>): {
66
+ }, nodesUsedInTemplate: Set<string>, nodesUsedInStyle?: Set<string>): {
64
67
  nodes: CustomNode[];
65
68
  edges: Edge[];
66
69
  };
67
70
 
68
- export { NodeType, type Suggestion, SuggestionType, type TypedNode, analyze$1 as analyzeOptions, analyze$2 as analyzeSetupScript, analyze$3 as analyzeTemplate, analyze as analyzeTsx, gen, getVisData };
71
+ export { NodeType, type Suggestion, SuggestionType, type TypedNode, analyze$2 as analyzeOptions, analyze$3 as analyzeSetupScript, analyze as analyzeStyle, analyze$4 as analyzeTemplate, analyze$1 as analyzeTsx, gen, getVisData };
package/dist/index.d.ts CHANGED
@@ -1,7 +1,8 @@
1
+ import { SFCStyleBlock } from '@vue/compiler-sfc';
1
2
  export { parse } from '@vue/compiler-sfc';
2
3
  import { Edge, Node } from 'vis-network';
3
4
 
4
- declare function analyze$3(content: string): Set<string>;
5
+ declare function analyze$4(content: string): Set<string>;
5
6
 
6
7
  interface TypedNode {
7
8
  label: string;
@@ -18,12 +19,12 @@ declare enum NodeType {
18
19
  fun = "fun"
19
20
  }
20
21
 
21
- declare function analyze$2(content: string, lineOffset?: number, jsx?: boolean): {
22
+ declare function analyze$3(content: string, lineOffset?: number, jsx?: boolean): {
22
23
  nodes: Set<TypedNode>;
23
24
  edges: Map<TypedNode, Set<TypedNode>>;
24
25
  };
25
26
 
26
- declare function analyze$1(content: string, lineOffset?: number, jsx?: boolean): {
27
+ declare function analyze$2(content: string, lineOffset?: number, jsx?: boolean): {
27
28
  graph: {
28
29
  nodes: Set<TypedNode>;
29
30
  edges: Map<TypedNode, Set<TypedNode>>;
@@ -31,7 +32,7 @@ declare function analyze$1(content: string, lineOffset?: number, jsx?: boolean):
31
32
  nodesUsedInTemplate: Set<string>;
32
33
  };
33
34
 
34
- declare function analyze(content: string, type?: "vue" | "react", lineOffset?: number, addInfo?: boolean): {
35
+ declare function analyze$1(content: string, type?: "vue" | "react", lineOffset?: number, addInfo?: boolean): {
35
36
  graph: {
36
37
  nodes: Set<TypedNode>;
37
38
  edges: Map<TypedNode, Set<TypedNode>>;
@@ -39,6 +40,8 @@ declare function analyze(content: string, type?: "vue" | "react", lineOffset?: n
39
40
  nodesUsedInTemplate: Set<string>;
40
41
  };
41
42
 
43
+ declare function analyze(styles: SFCStyleBlock[]): Set<string>;
44
+
42
45
  declare enum SuggestionType {
43
46
  info = "info",
44
47
  warning = "warning",
@@ -52,7 +55,7 @@ interface Suggestion {
52
55
  declare function gen(graph: {
53
56
  nodes: Set<TypedNode>;
54
57
  edges: Map<TypedNode, Set<TypedNode>>;
55
- }, usedNodes: Set<string>): Suggestion[];
58
+ }, nodesUsedInTemplate: Set<string>, nodesUsedInStyle?: Set<string>): Suggestion[];
56
59
 
57
60
  type CustomNode = Node & {
58
61
  info: TypedNode['info'];
@@ -60,9 +63,9 @@ type CustomNode = Node & {
60
63
  declare function getVisData(graph: {
61
64
  nodes: Set<TypedNode>;
62
65
  edges: Map<TypedNode, Set<TypedNode>>;
63
- }, usedNodes: Set<string>): {
66
+ }, nodesUsedInTemplate: Set<string>, nodesUsedInStyle?: Set<string>): {
64
67
  nodes: CustomNode[];
65
68
  edges: Edge[];
66
69
  };
67
70
 
68
- export { NodeType, type Suggestion, SuggestionType, type TypedNode, analyze$1 as analyzeOptions, analyze$2 as analyzeSetupScript, analyze$3 as analyzeTemplate, analyze as analyzeTsx, gen, getVisData };
71
+ export { NodeType, type Suggestion, SuggestionType, type TypedNode, analyze$2 as analyzeOptions, analyze$3 as analyzeSetupScript, analyze as analyzeStyle, analyze$4 as analyzeTemplate, analyze$1 as analyzeTsx, gen, getVisData };
package/dist/index.js CHANGED
@@ -34,6 +34,7 @@ __export(src_exports, {
34
34
  SuggestionType: () => SuggestionType,
35
35
  analyzeOptions: () => analyze3,
36
36
  analyzeSetupScript: () => analyze2,
37
+ analyzeStyle: () => analyze5,
37
38
  analyzeTemplate: () => analyze,
38
39
  analyzeTsx: () => analyze4,
39
40
  gen: () => gen,
@@ -72,7 +73,9 @@ function analyze(content) {
72
73
  if (path.node.key.type === "Identifier" && path.node.key.name === "ref") {
73
74
  if (path.node.value.type === "StringLiteral") {
74
75
  const name = path.node.value.value;
75
- name && nodes.add(name);
76
+ if (name) {
77
+ nodes.add(name);
78
+ }
76
79
  }
77
80
  }
78
81
  },
@@ -81,7 +84,9 @@ function analyze(content) {
81
84
  if (path.node.callee.type === "Identifier" && path.node.callee.name === "_resolveComponent") {
82
85
  if (path.node.arguments[0].type === "StringLiteral") {
83
86
  const name = path.node.arguments[0].value;
84
- name && nodes.add(name);
87
+ if (name) {
88
+ nodes.add(name);
89
+ }
85
90
  }
86
91
  }
87
92
  }
@@ -181,7 +186,7 @@ function getComment(node) {
181
186
  return;
182
187
  }
183
188
  if (_comment.value.trim().startsWith("*")) {
184
- comment += `${_comment.value.trim().replace(/^[\s]*\*+[\s]*\**/gm, "").trim()}
189
+ comment += `${_comment.value.trim().replace(/^\s*\*+\s*\**/gm, "").trim()}
185
190
  `;
186
191
  }
187
192
  });
@@ -190,7 +195,7 @@ function getComment(node) {
190
195
  return;
191
196
  }
192
197
  if (_comment.value.trim().startsWith("*")) {
193
- comment += `${_comment.value.trim().replace(/^[\s]*\*+[\s]*\**/gm, "").trim()}
198
+ comment += `${_comment.value.trim().replace(/^\s*\*+\s*\**/gm, "").trim()}
194
199
  `;
195
200
  } else {
196
201
  comment += `${_comment.value.trim()}
@@ -1883,6 +1888,67 @@ function analyze4(content, type = "vue", lineOffset = 0, addInfo = true) {
1883
1888
  };
1884
1889
  }
1885
1890
 
1891
+ // src/analyze/style.ts
1892
+ function lexBinding(content, start) {
1893
+ let state = 0 /* inParens */;
1894
+ let parenDepth = 0;
1895
+ for (let i = start; i < content.length; i++) {
1896
+ const char = content.charAt(i);
1897
+ switch (state) {
1898
+ case 0 /* inParens */:
1899
+ if (char === "'") {
1900
+ state = 1 /* inSingleQuoteString */;
1901
+ } else if (char === '"') {
1902
+ state = 2 /* inDoubleQuoteString */;
1903
+ } else if (char === "(") {
1904
+ parenDepth++;
1905
+ } else if (char === ")") {
1906
+ if (parenDepth > 0) {
1907
+ parenDepth--;
1908
+ } else {
1909
+ return i;
1910
+ }
1911
+ }
1912
+ break;
1913
+ case 1 /* inSingleQuoteString */:
1914
+ if (char === "'") {
1915
+ state = 0 /* inParens */;
1916
+ }
1917
+ break;
1918
+ case 2 /* inDoubleQuoteString */:
1919
+ if (char === '"') {
1920
+ state = 0 /* inParens */;
1921
+ }
1922
+ break;
1923
+ }
1924
+ }
1925
+ return null;
1926
+ }
1927
+ function normalizeExpression(exp) {
1928
+ exp = exp.trim();
1929
+ if (exp[0] === "'" && exp[exp.length - 1] === "'" || exp[0] === '"' && exp[exp.length - 1] === '"') {
1930
+ return exp.slice(1, -1);
1931
+ }
1932
+ return exp;
1933
+ }
1934
+ var vBindRE = /v-bind\s*\(/g;
1935
+ function analyze5(styles) {
1936
+ const nodes = /* @__PURE__ */ new Set();
1937
+ styles.forEach((style) => {
1938
+ let match;
1939
+ const content = style.content.replace(/\/\*([\s\S]*?)\*\/|\/\/.*/g, "");
1940
+ while (match = vBindRE.exec(content)) {
1941
+ const start = match.index + match[0].length;
1942
+ const end = lexBinding(content, start);
1943
+ if (end !== null) {
1944
+ const variable = normalizeExpression(content.slice(start, end));
1945
+ nodes.add(variable);
1946
+ }
1947
+ }
1948
+ });
1949
+ return nodes;
1950
+ }
1951
+
1886
1952
  // src/suggest/split.ts
1887
1953
  function dfs(graph, node, targets, visited, component) {
1888
1954
  component.add(node);
@@ -1957,7 +2023,7 @@ function findLinearPaths(graph) {
1957
2023
  const linearPaths = [];
1958
2024
  const visitedNodes = /* @__PURE__ */ new Set();
1959
2025
  for (const [node, edges] of graph.entries()) {
1960
- if (edges.size === 1 && !visitedNodes.has(node) && node.type === "fun" /* fun */) {
2026
+ if (edges.size === 1 && !visitedNodes.has(node)) {
1961
2027
  const path = [node];
1962
2028
  let nextNode = Array.from(edges)[0];
1963
2029
  visitedNodes.add(node);
@@ -2057,7 +2123,8 @@ var SuggestionType = /* @__PURE__ */ ((SuggestionType2) => {
2057
2123
  SuggestionType2["error"] = "error";
2058
2124
  return SuggestionType2;
2059
2125
  })(SuggestionType || {});
2060
- function gen(graph, usedNodes) {
2126
+ function gen(graph, nodesUsedInTemplate, nodesUsedInStyle = /* @__PURE__ */ new Set()) {
2127
+ const usedNodes = /* @__PURE__ */ new Set([...nodesUsedInTemplate, ...nodesUsedInStyle]);
2061
2128
  const suggestions = [];
2062
2129
  const splitedGraph = splitGraph(graph.edges);
2063
2130
  splitedGraph.forEach((g) => {
@@ -2121,7 +2188,8 @@ function gen(graph, usedNodes) {
2121
2188
  }
2122
2189
 
2123
2190
  // src/vis.ts
2124
- function getVisData(graph, usedNodes) {
2191
+ function getVisData(graph, nodesUsedInTemplate, nodesUsedInStyle = /* @__PURE__ */ new Set()) {
2192
+ const usedNodes = /* @__PURE__ */ new Set([...nodesUsedInTemplate, ...nodesUsedInStyle]);
2125
2193
  const nodes = [];
2126
2194
  const edges = [];
2127
2195
  graph.nodes.forEach((node) => {
@@ -2132,7 +2200,12 @@ function getVisData(graph, usedNodes) {
2132
2200
  group: usedNodes.has(node.label) || node.info?.used?.size ? "used" : "normal",
2133
2201
  title: `${node.info?.used?.size ? `used by ${Array.from(node.info?.used || [])?.map((i) => `\`${i}\``).join(",")}
2134
2202
 
2135
- ` : ""}${usedNodes.has(node.label) ? "used in template\n\n" : ""}${node.info?.comment || ""}`.trim() || void 0,
2203
+ ` : ""}${usedNodes.has(node.label) ? `used in ${[
2204
+ nodesUsedInStyle.has(node.label) ? "style" : "",
2205
+ nodesUsedInTemplate.has(node.label) ? "template" : ""
2206
+ ].filter(Boolean).join(" and ")}
2207
+
2208
+ ` : ""}${node.info?.comment || ""}`.trim() || void 0,
2136
2209
  info: node.info
2137
2210
  });
2138
2211
  });
@@ -2164,6 +2237,7 @@ function getVisData(graph, usedNodes) {
2164
2237
  SuggestionType,
2165
2238
  analyzeOptions,
2166
2239
  analyzeSetupScript,
2240
+ analyzeStyle,
2167
2241
  analyzeTemplate,
2168
2242
  analyzeTsx,
2169
2243
  gen,