vue-hook-optimizer 0.0.59 → 0.0.61
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 +129 -87
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +129 -87
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -2
package/dist/index.mjs
CHANGED
@@ -315,6 +315,108 @@ function processSetup(ast, parentScope, parentPath, _spread, _lineOffset = 0) {
|
|
315
315
|
}
|
316
316
|
}
|
317
317
|
}, parentScope, parentPath);
|
318
|
+
function traverseHooks(node, patentScope) {
|
319
|
+
if (node.type === "ExpressionStatement" && node.expression.type === "CallExpression" && node.expression.callee.type === "Identifier" || node.type === "CallExpression" && node.callee.type === "Identifier") {
|
320
|
+
const hookName = (() => {
|
321
|
+
if (node.type === "ExpressionStatement" && node.expression.type === "CallExpression" && node.expression.callee.type === "Identifier") {
|
322
|
+
return node.expression.callee.name;
|
323
|
+
}
|
324
|
+
if (node.type === "CallExpression" && node.callee.type === "Identifier") {
|
325
|
+
return node.callee.name;
|
326
|
+
}
|
327
|
+
})() || "";
|
328
|
+
if (!hookName) {
|
329
|
+
return;
|
330
|
+
}
|
331
|
+
const hookBinding = patentScope.getBinding(hookName);
|
332
|
+
if (!(hookBinding === void 0 || hookBinding?.scope.block.type === "Program" || parentScope === hookBinding?.scope)) {
|
333
|
+
return;
|
334
|
+
}
|
335
|
+
const expression = node.type === "ExpressionStatement" ? node.expression : node;
|
336
|
+
const watchArgs = /* @__PURE__ */ new Set();
|
337
|
+
if (hookName === "provide") {
|
338
|
+
traverse2(expression, {
|
339
|
+
Identifier(path1) {
|
340
|
+
const binding = path1.scope.getBinding(path1.node.name);
|
341
|
+
if (graph.nodes.has(path1.node.name) && (path1.parent.type !== "MemberExpression" && path1.parent.type !== "OptionalMemberExpression" || path1.parent.object === path1.node) && (binding?.scope.block.type === "Program" || parentScope === binding?.scope)) {
|
342
|
+
const _node = nodeCollection.getNode(path1.node.name);
|
343
|
+
if (_node?.info?.used) {
|
344
|
+
_node?.info?.used?.add(hookName);
|
345
|
+
} else if (_node) {
|
346
|
+
_node.info = {
|
347
|
+
..._node?.info,
|
348
|
+
used: /* @__PURE__ */ new Set([hookName])
|
349
|
+
};
|
350
|
+
}
|
351
|
+
}
|
352
|
+
}
|
353
|
+
}, patentScope, node);
|
354
|
+
} else if (hookName === "watch") {
|
355
|
+
if (expression.arguments[0].type === "Identifier") {
|
356
|
+
const binding = patentScope.getBinding(expression.arguments[0].name);
|
357
|
+
if (graph.nodes.has(expression.arguments[0].name) && (binding?.scope.block.type === "Program" || parentScope === binding?.scope)) {
|
358
|
+
watchArgs.add(expression.arguments[0]);
|
359
|
+
}
|
360
|
+
} else {
|
361
|
+
traverse2(expression.arguments[0], {
|
362
|
+
Identifier(path1) {
|
363
|
+
const binding = path1.scope.getBinding(path1.node.name);
|
364
|
+
if (graph.nodes.has(path1.node.name) && (path1.parent.type !== "MemberExpression" && path1.parent.type !== "OptionalMemberExpression" || path1.parent.object === path1.node) && (binding?.scope.block.type === "Program" || parentScope === binding?.scope)) {
|
365
|
+
watchArgs.add(path1.node);
|
366
|
+
}
|
367
|
+
}
|
368
|
+
}, patentScope, node);
|
369
|
+
}
|
370
|
+
} else if (hookName === "useEffect" && expression.arguments[1].type === "ArrayExpression") {
|
371
|
+
traverse2(expression.arguments[1], {
|
372
|
+
Identifier(path1) {
|
373
|
+
const binding = path1.scope.getBinding(path1.node.name);
|
374
|
+
if (graph.nodes.has(path1.node.name) && (path1.parent.type !== "MemberExpression" && path1.parent.type !== "OptionalMemberExpression" || path1.parent.object === path1.node) && (binding?.scope.block.type === "Program" || parentScope === binding?.scope)) {
|
375
|
+
watchArgs.add(path1.node);
|
376
|
+
}
|
377
|
+
}
|
378
|
+
}, patentScope, node);
|
379
|
+
}
|
380
|
+
expression.arguments.forEach((argNode, index) => {
|
381
|
+
if (hookName === "watch" && index === 0 && argNode.type === "Identifier") {
|
382
|
+
const _node = nodeCollection.getNode(argNode.name);
|
383
|
+
if (_node?.info?.used) {
|
384
|
+
_node?.info?.used?.add(hookName);
|
385
|
+
} else if (_node) {
|
386
|
+
_node.info = {
|
387
|
+
..._node?.info,
|
388
|
+
used: /* @__PURE__ */ new Set([hookName])
|
389
|
+
};
|
390
|
+
}
|
391
|
+
return;
|
392
|
+
}
|
393
|
+
traverse2(argNode, {
|
394
|
+
Identifier(path1) {
|
395
|
+
const binding = path1.scope.getBinding(path1.node.name);
|
396
|
+
if (graph.nodes.has(path1.node.name) && (path1.parent.type !== "MemberExpression" && path1.parent.type !== "OptionalMemberExpression" || path1.parent.object === path1.node) && (binding?.scope.block.type === "Program" || parentScope === binding?.scope)) {
|
397
|
+
if (["watch", "useEffect"].includes(hookName) && watchArgs.size > 0) {
|
398
|
+
const watchArgsNames = Array.from(watchArgs).map((arg) => arg.name);
|
399
|
+
watchArgs.forEach((watchArg) => {
|
400
|
+
if (!watchArgsNames.includes(path1.node.name)) {
|
401
|
+
graph.edges.get(watchArg.name)?.add(path1.node.name);
|
402
|
+
}
|
403
|
+
});
|
404
|
+
}
|
405
|
+
const _node = nodeCollection.getNode(path1.node.name);
|
406
|
+
if (_node?.info?.used) {
|
407
|
+
_node?.info?.used?.add(hookName);
|
408
|
+
} else if (_node) {
|
409
|
+
_node.info = {
|
410
|
+
..._node?.info,
|
411
|
+
used: /* @__PURE__ */ new Set([hookName])
|
412
|
+
};
|
413
|
+
}
|
414
|
+
}
|
415
|
+
}
|
416
|
+
}, patentScope, node);
|
417
|
+
});
|
418
|
+
}
|
419
|
+
}
|
318
420
|
traverse2(ast, {
|
319
421
|
FunctionDeclaration(path) {
|
320
422
|
const name = path.node.id?.name;
|
@@ -392,6 +494,9 @@ function processSetup(ast, parentScope, parentPath, _spread, _lineOffset = 0) {
|
|
392
494
|
"ArrowFunctionExpression",
|
393
495
|
"FunctionDeclaration"
|
394
496
|
].includes(path.node.init.type) && path.node.id.type === "Identifier") {
|
497
|
+
if (path.node.init.type === "CallExpression" && path.node.init.callee.type === "Identifier" && ["watch", "watchEffect"].includes(path.node.init.callee.name)) {
|
498
|
+
traverseHooks(path.node.init, path.scope);
|
499
|
+
}
|
395
500
|
const name = path.node.id?.name;
|
396
501
|
if (name && graph.nodes.has(name)) {
|
397
502
|
traverse2(path.node.init, {
|
@@ -468,94 +573,24 @@ function processSetup(ast, parentScope, parentPath, _spread, _lineOffset = 0) {
|
|
468
573
|
}
|
469
574
|
},
|
470
575
|
ExpressionStatement(path) {
|
471
|
-
if (path.node.expression.type === "CallExpression" && path.node.expression.callee.type === "Identifier") {
|
472
|
-
const
|
473
|
-
|
474
|
-
|
475
|
-
|
476
|
-
|
477
|
-
|
478
|
-
|
479
|
-
|
480
|
-
|
481
|
-
|
482
|
-
if (graph.nodes.has(path1.node.name) && (path1.parent.type !== "MemberExpression" && path1.parent.type !== "OptionalMemberExpression" || path1.parent.object === path1.node) && (binding?.scope.block.type === "Program" || parentScope === binding?.scope)) {
|
483
|
-
const _node = nodeCollection.getNode(path1.node.name);
|
484
|
-
if (_node?.info?.used) {
|
485
|
-
_node?.info?.used?.add(hookName);
|
486
|
-
} else if (_node) {
|
487
|
-
_node.info = {
|
488
|
-
..._node?.info,
|
489
|
-
used: /* @__PURE__ */ new Set([hookName])
|
490
|
-
};
|
491
|
-
}
|
492
|
-
}
|
493
|
-
}
|
494
|
-
}, path.scope, path);
|
495
|
-
} else if (hookName === "watch") {
|
496
|
-
if (path.node.expression.arguments[0].type === "Identifier") {
|
497
|
-
const binding = path.scope.getBinding(path.node.expression.arguments[0].name);
|
498
|
-
if (graph.nodes.has(path.node.expression.arguments[0].name) && (binding?.scope.block.type === "Program" || parentScope === binding?.scope)) {
|
499
|
-
watchArgs.add(path.node.expression.arguments[0]);
|
500
|
-
}
|
501
|
-
} else {
|
502
|
-
traverse2(path.node.expression.arguments[0], {
|
503
|
-
Identifier(path1) {
|
504
|
-
const binding = path1.scope.getBinding(path1.node.name);
|
505
|
-
if (graph.nodes.has(path1.node.name) && (path1.parent.type !== "MemberExpression" && path1.parent.type !== "OptionalMemberExpression" || path1.parent.object === path1.node) && (binding?.scope.block.type === "Program" || parentScope === binding?.scope)) {
|
506
|
-
watchArgs.add(path1.node);
|
507
|
-
}
|
508
|
-
}
|
509
|
-
}, path.scope, path);
|
576
|
+
if (path.type === "ExpressionStatement" && path.node.expression.type === "CallExpression" && path.node.expression.callee.type === "Identifier") {
|
577
|
+
const name = path.node.expression.callee.name;
|
578
|
+
if (graph.nodes.has(name) && path.scope.block.type === "Program") {
|
579
|
+
const _node = nodeCollection.getNode(name);
|
580
|
+
if (_node?.info?.used) {
|
581
|
+
_node?.info?.used?.add("Call Expression");
|
582
|
+
} else if (_node) {
|
583
|
+
_node.info = {
|
584
|
+
..._node?.info,
|
585
|
+
used: /* @__PURE__ */ new Set(["Call Expression"])
|
586
|
+
};
|
510
587
|
}
|
511
|
-
} else
|
512
|
-
|
513
|
-
Identifier(path1) {
|
514
|
-
const binding = path1.scope.getBinding(path1.node.name);
|
515
|
-
if (graph.nodes.has(path1.node.name) && (path1.parent.type !== "MemberExpression" && path1.parent.type !== "OptionalMemberExpression" || path1.parent.object === path1.node) && (binding?.scope.block.type === "Program" || parentScope === binding?.scope)) {
|
516
|
-
watchArgs.add(path1.node);
|
517
|
-
}
|
518
|
-
}
|
519
|
-
}, path.scope, path);
|
588
|
+
} else {
|
589
|
+
traverseHooks(path.node.expression, path.scope);
|
520
590
|
}
|
521
|
-
|
522
|
-
|
523
|
-
|
524
|
-
if (_node?.info?.used) {
|
525
|
-
_node?.info?.used?.add(hookName);
|
526
|
-
} else if (_node) {
|
527
|
-
_node.info = {
|
528
|
-
..._node?.info,
|
529
|
-
used: /* @__PURE__ */ new Set([hookName])
|
530
|
-
};
|
531
|
-
}
|
532
|
-
return;
|
533
|
-
}
|
534
|
-
traverse2(argNode, {
|
535
|
-
Identifier(path1) {
|
536
|
-
const binding = path1.scope.getBinding(path1.node.name);
|
537
|
-
if (graph.nodes.has(path1.node.name) && (path1.parent.type !== "MemberExpression" && path1.parent.type !== "OptionalMemberExpression" || path1.parent.object === path1.node) && (binding?.scope.block.type === "Program" || parentScope === binding?.scope)) {
|
538
|
-
if (["watch", "useEffect"].includes(hookName) && watchArgs.size > 0) {
|
539
|
-
const watchArgsNames = Array.from(watchArgs).map((arg) => arg.name);
|
540
|
-
watchArgs.forEach((watchArg) => {
|
541
|
-
if (!watchArgsNames.includes(path1.node.name)) {
|
542
|
-
graph.edges.get(watchArg.name)?.add(path1.node.name);
|
543
|
-
}
|
544
|
-
});
|
545
|
-
}
|
546
|
-
const _node = nodeCollection.getNode(path1.node.name);
|
547
|
-
if (_node?.info?.used) {
|
548
|
-
_node?.info?.used?.add(hookName);
|
549
|
-
} else if (_node) {
|
550
|
-
_node.info = {
|
551
|
-
..._node?.info,
|
552
|
-
used: /* @__PURE__ */ new Set([hookName])
|
553
|
-
};
|
554
|
-
}
|
555
|
-
}
|
556
|
-
}
|
557
|
-
}, path.scope, path);
|
558
|
-
});
|
591
|
+
}
|
592
|
+
if (path.type === "ExpressionStatement" && path.node.expression.type === "AssignmentExpression" && path.node.expression.right.type === "CallExpression" && path.node.expression.right.callee.type === "Identifier") {
|
593
|
+
traverseHooks(path.node.expression.right, path.scope);
|
559
594
|
}
|
560
595
|
}
|
561
596
|
}, parentScope, parentPath);
|
@@ -2199,6 +2234,13 @@ function gen(graph, nodesUsedInTemplate, nodesUsedInStyle = /* @__PURE__ */ new
|
|
2199
2234
|
}
|
2200
2235
|
|
2201
2236
|
// src/vis.ts
|
2237
|
+
function filterNodeUserd(used) {
|
2238
|
+
const usedArray = Array.from(used || []);
|
2239
|
+
return new Set(usedArray.filter((u) => ![
|
2240
|
+
"Assignment Expression",
|
2241
|
+
"Call Expression"
|
2242
|
+
].includes(u)));
|
2243
|
+
}
|
2202
2244
|
function getVisData(graph, nodesUsedInTemplate, nodesUsedInStyle = /* @__PURE__ */ new Set()) {
|
2203
2245
|
const usedNodes = /* @__PURE__ */ new Set([...nodesUsedInTemplate, ...nodesUsedInStyle]);
|
2204
2246
|
const nodes = [];
|
@@ -2209,7 +2251,7 @@ function getVisData(graph, nodesUsedInTemplate, nodesUsedInStyle = /* @__PURE__
|
|
2209
2251
|
label: node.label,
|
2210
2252
|
shape: node.type === "var" ? "dot" : "diamond",
|
2211
2253
|
group: usedNodes.has(node.label) || node.info?.used?.size ? "used" : "normal",
|
2212
|
-
title: `${node.info?.used
|
2254
|
+
title: `${filterNodeUserd(node.info?.used).size ? `used by ${Array.from(filterNodeUserd(node.info?.used))?.map((i) => `\`${i}\``).join(",")}
|
2213
2255
|
|
2214
2256
|
` : ""}${usedNodes.has(node.label) ? `used in ${[
|
2215
2257
|
nodesUsedInStyle.has(node.label) ? "style" : "",
|