miniread 1.34.0 → 1.35.0

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.
@@ -44,6 +44,12 @@ const manifestData = {
44
44
  evaluatedAt: "2026-01-24T15:56:12.512Z",
45
45
  notes: "Measured with baseline none: 0.00%. Added to recommended for readability.",
46
46
  },
47
+ "rename-asap-wrappers": {
48
+ diffReductionImpact: 0,
49
+ recommended: true,
50
+ evaluatedAt: "2026-01-24T23:31:55.000Z",
51
+ notes: "Measured with baseline none: 0.00%. Added to recommended for readability.",
52
+ },
47
53
  "rename-awaiter-parameters": {
48
54
  diffReductionImpact: 0,
49
55
  recommended: true,
@@ -7,6 +7,7 @@ import { expandSpecialNumberLiteralsTransform } from "../expand-special-number-l
7
7
  import { expandUndefinedLiteralsTransform } from "../expand-undefined-literals/expand-undefined-literals-transform.js";
8
8
  import { removeRedundantElseTransform } from "../remove-redundant-else/remove-redundant-else-transform.js";
9
9
  import { renameArgumentsLengthFlagsTransform } from "../rename-arguments-length-flags/rename-arguments-length-flags-transform.js";
10
+ import { renameAsapWrappersTransform } from "../rename-asap-wrappers/rename-asap-wrappers-transform.js";
10
11
  import { renameAwaiterParametersTransform } from "../rename-awaiter-parameters/rename-awaiter-parameters-transform.js";
11
12
  import { renameCatchParametersTransform } from "../rename-catch-parameters/rename-catch-parameters-transform.js";
12
13
  import { renameCharCodeAtTransform } from "../rename-char-code-at/rename-char-code-at-transform.js";
@@ -48,6 +49,7 @@ export const transformRegistry = {
48
49
  [expandUndefinedLiteralsTransform.id]: expandUndefinedLiteralsTransform,
49
50
  [removeRedundantElseTransform.id]: removeRedundantElseTransform,
50
51
  [renameArgumentsLengthFlagsTransform.id]: renameArgumentsLengthFlagsTransform,
52
+ [renameAsapWrappersTransform.id]: renameAsapWrappersTransform,
51
53
  [renameAwaiterParametersTransform.id]: renameAwaiterParametersTransform,
52
54
  [renameCatchParametersTransform.id]: renameCatchParametersTransform,
53
55
  [renameCharCodeAtTransform.id]: renameCharCodeAtTransform,
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "recommended": {
3
- "diffReductionImpact": 0.0015455659221562668,
4
- "notes": "Measured with baseline none: 0.15%."
3
+ "diffReductionImpact": 0.0018848364904344717,
4
+ "notes": "Measured with baseline none: 0.19%."
5
5
  }
6
6
  }
@@ -0,0 +1,6 @@
1
+ {
2
+ "diffReductionImpact": 0,
3
+ "recommended": true,
4
+ "evaluatedAt": "2026-01-24T23:31:55.000Z",
5
+ "notes": "Measured with baseline none: 0.00%. Added to recommended for readability."
6
+ }
@@ -0,0 +1,2 @@
1
+ import { type Transform } from "../../core/types.js";
2
+ export declare const renameAsapWrappersTransform: Transform;
@@ -0,0 +1,116 @@
1
+ import { createRequire } from "node:module";
2
+ import { isStableRenamed, RenameGroup } from "../../core/stable-naming.js";
3
+ import { getFilesToProcess, } from "../../core/types.js";
4
+ const require = createRequire(import.meta.url);
5
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
6
+ const traverse = require("@babel/traverse").default;
7
+ const BASE_NAME = "asapWrapper";
8
+ const isAsapCallee = (call) => {
9
+ const callee = call.callee;
10
+ if (callee.type === "Identifier") {
11
+ return callee.name === "asap";
12
+ }
13
+ if (callee.type === "MemberExpression") {
14
+ if (callee.computed)
15
+ return false;
16
+ return (callee.property.type === "Identifier" && callee.property.name === "asap");
17
+ }
18
+ return false;
19
+ };
20
+ const getIdentifierName = (node) => {
21
+ if (node.type === "Identifier")
22
+ return node.name;
23
+ if (node.type === "RestElement" && node.argument.type === "Identifier") {
24
+ return node.argument.name;
25
+ }
26
+ return undefined;
27
+ };
28
+ const isAsapWrapper = (init) => {
29
+ if (init.params.length !== 1)
30
+ return false;
31
+ const outerParameter = init.params[0];
32
+ if (outerParameter?.type !== "Identifier")
33
+ return false;
34
+ if (init.body.type !== "ArrowFunctionExpression")
35
+ return false;
36
+ const inner = init.body;
37
+ if (inner.params.length !== 1)
38
+ return false;
39
+ const innerParameter = inner.params[0];
40
+ if (!innerParameter)
41
+ return false;
42
+ const restParameterName = getIdentifierName(innerParameter);
43
+ if (!restParameterName)
44
+ return false;
45
+ if (inner.body.type !== "CallExpression")
46
+ return false;
47
+ if (!isAsapCallee(inner.body))
48
+ return false;
49
+ if (inner.body.arguments.length !== 1)
50
+ return false;
51
+ const callback = inner.body.arguments[0];
52
+ if (callback?.type !== "ArrowFunctionExpression")
53
+ return false;
54
+ if (callback.params.length > 0)
55
+ return false;
56
+ if (callback.body.type !== "CallExpression")
57
+ return false;
58
+ const calledFunction = callback.body.callee;
59
+ if (calledFunction.type !== "Identifier")
60
+ return false;
61
+ if (calledFunction.name !== outerParameter.name)
62
+ return false;
63
+ const callbackArguments = callback.body.arguments;
64
+ if (callbackArguments.length !== 1)
65
+ return false;
66
+ const spread = callbackArguments[0];
67
+ if (spread?.type !== "SpreadElement")
68
+ return false;
69
+ if (spread.argument.type !== "Identifier")
70
+ return false;
71
+ if (spread.argument.name !== restParameterName)
72
+ return false;
73
+ return true;
74
+ };
75
+ export const renameAsapWrappersTransform = {
76
+ id: "rename-asap-wrappers",
77
+ description: "Renames higher-order wrappers that schedule callbacks with .asap(...) to $asapWrapper/$asapWrapper2/...",
78
+ scope: "file",
79
+ parallelizable: true,
80
+ transform(context) {
81
+ let nodesVisited = 0;
82
+ let transformationsApplied = 0;
83
+ for (const fileInfo of getFilesToProcess(context)) {
84
+ const group = new RenameGroup();
85
+ traverse(fileInfo.ast, {
86
+ VariableDeclarator(path) {
87
+ nodesVisited++;
88
+ const id = path.node.id;
89
+ if (id.type !== "Identifier")
90
+ return;
91
+ if (isStableRenamed(id.name))
92
+ return;
93
+ const init = path.node.init;
94
+ if (init?.type !== "ArrowFunctionExpression")
95
+ return;
96
+ if (!isAsapWrapper(init))
97
+ return;
98
+ const binding = path.scope.getBinding(id.name);
99
+ if (!binding)
100
+ return;
101
+ if (!binding.constant)
102
+ return;
103
+ if (binding.referencePaths.length === 0)
104
+ return;
105
+ group.add({
106
+ scope: path.scope,
107
+ currentName: id.name,
108
+ baseName: BASE_NAME,
109
+ });
110
+ },
111
+ });
112
+ transformationsApplied += group.apply();
113
+ }
114
+ return Promise.resolve({ nodesVisited, transformationsApplied });
115
+ },
116
+ };
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "miniread",
3
3
  "author": "Łukasz Jerciński",
4
4
  "license": "MIT",
5
- "version": "1.34.0",
5
+ "version": "1.35.0",
6
6
  "description": "Transform minified JavaScript/TypeScript into a more readable form using deterministic AST-based transforms.",
7
7
  "repository": {
8
8
  "type": "git",