miniread 1.79.0 → 1.80.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.
@@ -271,6 +271,10 @@ const manifestData = {
271
271
  recommended: true,
272
272
  evaluations: { "legacy:evaluation": { "evaluatedAt": "2026-01-25T20:11:03.532Z", "changedLines": 1300, "durationSeconds": 0, "stableNames": 0, "diffSizePercent": 100 }, "claude-code-2.1.10:claude-code-2.1.11": { "diffSizePercent": 100, "evaluatedAt": "2026-01-25T23:29:09.589Z", "changedLines": 1300, "durationSeconds": 56.599702834000006, "stableNames": 1359 } },
273
273
  },
274
+ "rename-rest-pop-callbacks": {
275
+ recommended: true,
276
+ evaluations: { "claude-code-2.1.10:claude-code-2.1.11": { "diffSizePercent": 100, "evaluatedAt": "2026-02-06T17:36:36.948Z", "changedLines": 14, "durationSeconds": 177.13338240899998, "stableNames": 1358 } },
277
+ },
274
278
  "rename-safe-property-accessor-parameters": {
275
279
  recommended: false,
276
280
  notes: "Negative diff reduction in evaluation; keep optional.",
@@ -454,6 +458,7 @@ export const recommendedTransformIds = [
454
458
  "rename-deferred-resolve-parameters",
455
459
  "rename-destructured-aliases",
456
460
  "rename-rest-parameters",
461
+ "rename-rest-pop-callbacks",
457
462
  "rename-execfile-arguments",
458
463
  "rename-file-reader-variables",
459
464
  "rename-error-first-callback-parameters",
@@ -55,6 +55,7 @@ import { renameRegexBuildersTransform } from "../rename-regex-builders/rename-re
55
55
  import { renameRegexSourceParametersTransform } from "../rename-regex-source-parameters/rename-regex-source-parameters-transform.js";
56
56
  import { renameReplaceChildParametersTransform } from "../rename-replace-child-parameters/rename-replace-child-parameters-transform.js";
57
57
  import { renameRestParametersTransform } from "../rename-rest-parameters/rename-rest-parameters-transform.js";
58
+ import { renameRestPopCallbacksTransform } from "../rename-rest-pop-callbacks/rename-rest-pop-callbacks-transform.js";
58
59
  import { renameSafePropertyAccessorParametersTransform } from "../rename-safe-property-accessor-parameters/rename-safe-property-accessor-parameters-transform.js";
59
60
  import { renameSearchParametersVariablesTransform } from "../rename-search-parameters-variables/rename-search-parameters-variables-transform.js";
60
61
  import { renameStringSplitVariablesTransform } from "../rename-string-split-variables/rename-string-split-variables-transform.js";
@@ -140,6 +141,7 @@ export const transformRegistry = {
140
141
  [renameRegexSourceParametersTransform.id]: renameRegexSourceParametersTransform,
141
142
  [renameReplaceChildParametersTransform.id]: renameReplaceChildParametersTransform,
142
143
  [renameRestParametersTransform.id]: renameRestParametersTransform,
144
+ [renameRestPopCallbacksTransform.id]: renameRestPopCallbacksTransform,
143
145
  [renameSafePropertyAccessorParametersTransform.id]: renameSafePropertyAccessorParametersTransform,
144
146
  [renameSearchParametersVariablesTransform.id]: renameSearchParametersVariablesTransform,
145
147
  [renameStringSplitVariablesTransform.id]: renameStringSplitVariablesTransform,
@@ -4,4 +4,4 @@
4
4
  * This lets us tune transform interactions intentionally instead of relying on
5
5
  * alphabetical ID sorting.
6
6
  */
7
- export declare const recommendedTransformOrder: readonly ["stabilize-top-level-bindings", "stabilize-nested-bindings", "stabilize-deferred-top-level-bindings", "stabilize-deferred-stable-rhs", "expand-boolean-literals", "expand-sequence-expressions-v5", "expand-special-number-literals", "expand-typeof-undefined-comparisons", "expand-undefined-literals", "remove-redundant-else", "rename-arguments-length-flags", "rename-asap-wrappers", "rename-awaiter-parameters", "rename-awaiter-helper-functions", "rename-buffer-variables", "rename-to-buffer-results", "rename-catch-parameters", "rename-promise-catch-parameters", "rename-char-code-at", "rename-charcode-variables-v2", "rename-client-aliases", "rename-comparison-flags", "rename-date-now-start-times", "rename-default-options-parameters-v2", "rename-deferred-resolve-parameters", "rename-destructured-aliases", "rename-rest-parameters", "rename-execfile-arguments", "rename-file-reader-variables", "rename-error-first-callback-parameters", "rename-error-first-callback-parameters-v2", "rename-error-variables", "rename-event-parameters", "rename-http-server-parameters", "rename-fs-sync-variables", "rename-http-method-parameters", "rename-interval-ids", "rename-indexeddb-request-variables", "rename-loop-index-variables-v3", "rename-loop-length-variables", "rename-document-fragment-variables", "rename-object-keys-variables", "rename-object-keys-iterator-variables", "rename-parameters-to-match-properties-v2", "rename-invalid-parameter-arguments", "rename-promise-executor-parameters-v2", "rename-range-parameters", "rename-read-file-lines", "rename-regex-builders", "rename-regex-source-parameters", "rename-search-parameters-variables", "rename-file-extension-variables", "rename-string-split-variables", "rename-this-aliases", "rename-timeout-promises", "rename-timeout-ids", "rename-typeof-variables", "rename-typescript-helper-aliases", "rename-uint8array-concat-variables", "rename-url-parameters", "rename-url-variables", "rename-use-reference-guards-v2", "rename-use-reference-sets", "rename-worker-handles", "rename-zod-check-parameters", "simplify-boolean-negations", "simplify-string-trim", "split-variable-declarations", "use-optional-chaining", "use-object-property-shorthand", "use-object-shorthand", "replace-dynamic-require-eval"];
7
+ export declare const recommendedTransformOrder: readonly ["stabilize-top-level-bindings", "stabilize-nested-bindings", "stabilize-deferred-top-level-bindings", "stabilize-deferred-stable-rhs", "expand-boolean-literals", "expand-sequence-expressions-v5", "expand-special-number-literals", "expand-typeof-undefined-comparisons", "expand-undefined-literals", "remove-redundant-else", "rename-arguments-length-flags", "rename-asap-wrappers", "rename-awaiter-parameters", "rename-awaiter-helper-functions", "rename-buffer-variables", "rename-to-buffer-results", "rename-catch-parameters", "rename-promise-catch-parameters", "rename-char-code-at", "rename-charcode-variables-v2", "rename-client-aliases", "rename-comparison-flags", "rename-date-now-start-times", "rename-default-options-parameters-v2", "rename-deferred-resolve-parameters", "rename-destructured-aliases", "rename-rest-parameters", "rename-rest-pop-callbacks", "rename-execfile-arguments", "rename-file-reader-variables", "rename-error-first-callback-parameters", "rename-error-first-callback-parameters-v2", "rename-error-variables", "rename-event-parameters", "rename-http-server-parameters", "rename-fs-sync-variables", "rename-http-method-parameters", "rename-interval-ids", "rename-indexeddb-request-variables", "rename-loop-index-variables-v3", "rename-loop-length-variables", "rename-document-fragment-variables", "rename-object-keys-variables", "rename-object-keys-iterator-variables", "rename-parameters-to-match-properties-v2", "rename-invalid-parameter-arguments", "rename-promise-executor-parameters-v2", "rename-range-parameters", "rename-read-file-lines", "rename-regex-builders", "rename-regex-source-parameters", "rename-search-parameters-variables", "rename-file-extension-variables", "rename-string-split-variables", "rename-this-aliases", "rename-timeout-promises", "rename-timeout-ids", "rename-typeof-variables", "rename-typescript-helper-aliases", "rename-uint8array-concat-variables", "rename-url-parameters", "rename-url-variables", "rename-use-reference-guards-v2", "rename-use-reference-sets", "rename-worker-handles", "rename-zod-check-parameters", "simplify-boolean-negations", "simplify-string-trim", "split-variable-declarations", "use-optional-chaining", "use-object-property-shorthand", "use-object-shorthand", "replace-dynamic-require-eval"];
@@ -41,6 +41,7 @@ export const recommendedTransformOrder = [
41
41
  "rename-deferred-resolve-parameters",
42
42
  "rename-destructured-aliases",
43
43
  "rename-rest-parameters",
44
+ "rename-rest-pop-callbacks",
44
45
  "rename-execfile-arguments",
45
46
  "rename-file-reader-variables",
46
47
  "rename-error-first-callback-parameters",
@@ -0,0 +1,12 @@
1
+ {
2
+ "recommended": true,
3
+ "evaluations": {
4
+ "claude-code-2.1.10:claude-code-2.1.11": {
5
+ "diffSizePercent": 100,
6
+ "evaluatedAt": "2026-02-06T17:36:36.948Z",
7
+ "changedLines": 14,
8
+ "durationSeconds": 177.13338240899998,
9
+ "stableNames": 1358
10
+ }
11
+ }
12
+ }
@@ -0,0 +1,2 @@
1
+ import { type Transform } from "../../core/types.js";
2
+ export declare const renameRestPopCallbacksTransform: Transform;
@@ -0,0 +1,125 @@
1
+ import { createRequire } from "node:module";
2
+ import { isIdentifier } from "@babel/types";
3
+ import { RenameGroup, isStableRenamed } from "../../core/stable-naming.js";
4
+ import { getFilesToProcess, } from "../../core/types.js";
5
+ const require = createRequire(import.meta.url);
6
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
7
+ const traverse = require("@babel/traverse").default;
8
+ const BASE_NAME = "callback";
9
+ const getRestParameterName = (parameters) => {
10
+ const lastParameter = parameters.at(-1);
11
+ if (!lastParameter)
12
+ return undefined;
13
+ if (lastParameter.type !== "RestElement")
14
+ return undefined;
15
+ if (!isIdentifier(lastParameter.argument))
16
+ return undefined;
17
+ return lastParameter.argument.name;
18
+ };
19
+ const getRestPopReceiverName = (init) => {
20
+ if (init.arguments.length > 0)
21
+ return undefined;
22
+ const callee = init.callee;
23
+ if (callee.type !== "MemberExpression")
24
+ return undefined;
25
+ if (callee.computed)
26
+ return undefined;
27
+ if (!isIdentifier(callee.object))
28
+ return undefined;
29
+ if (!isIdentifier(callee.property))
30
+ return undefined;
31
+ if (callee.property.name !== "pop")
32
+ return undefined;
33
+ return callee.object.name;
34
+ };
35
+ const getCallbackReferenceUsage = (referencePath) => {
36
+ const parentPath = referencePath.parentPath;
37
+ if (!parentPath ||
38
+ (!parentPath.isCallExpression() && !parentPath.isOptionalCallExpression())) {
39
+ return undefined;
40
+ }
41
+ if (referencePath.key === "callee")
42
+ return "direct-call";
43
+ if (referencePath.listKey === "arguments")
44
+ return "call-argument";
45
+ return undefined;
46
+ };
47
+ export const renameRestPopCallbacksTransform = {
48
+ id: "rename-rest-pop-callbacks",
49
+ description: "Renames callback locals assigned from this function's rest.pop() when references include a direct call site",
50
+ scope: "file",
51
+ parallelizable: true,
52
+ transform(context) {
53
+ let nodesVisited = 0;
54
+ let transformationsApplied = 0;
55
+ for (const fileInfo of getFilesToProcess(context)) {
56
+ const group = new RenameGroup();
57
+ traverse(fileInfo.ast, {
58
+ Function(path) {
59
+ nodesVisited++;
60
+ const restName = getRestParameterName(path.node.params);
61
+ if (!restName)
62
+ return;
63
+ const restParameterBinding = path.scope.getBinding(restName);
64
+ if (!restParameterBinding)
65
+ return;
66
+ path.traverse({
67
+ VariableDeclarator(declaratorPath) {
68
+ const id = declaratorPath.node.id;
69
+ if (!isIdentifier(id))
70
+ return;
71
+ const currentName = id.name;
72
+ if (isStableRenamed(currentName))
73
+ return;
74
+ const init = declaratorPath.node.init;
75
+ if (init?.type !== "CallExpression")
76
+ return;
77
+ const restPopReceiverName = getRestPopReceiverName(init);
78
+ if (restPopReceiverName !== restName)
79
+ return;
80
+ const restPopReceiverBinding = declaratorPath.scope.getBinding(restPopReceiverName);
81
+ if (restPopReceiverBinding !== restParameterBinding)
82
+ return;
83
+ const binding = declaratorPath.scope.getBinding(currentName);
84
+ if (!binding)
85
+ return;
86
+ if (!binding.constant)
87
+ return;
88
+ if (binding.referencePaths.length === 0)
89
+ return;
90
+ let hasInvalidUsage = false;
91
+ let hasDirectCallUsage = false;
92
+ for (const referencePath of binding.referencePaths) {
93
+ const usage = getCallbackReferenceUsage(referencePath);
94
+ if (!usage) {
95
+ hasInvalidUsage = true;
96
+ break;
97
+ }
98
+ if (usage === "direct-call")
99
+ hasDirectCallUsage = true;
100
+ }
101
+ if (hasInvalidUsage)
102
+ return;
103
+ if (!hasDirectCallUsage)
104
+ return;
105
+ group.add({
106
+ scope: declaratorPath.scope,
107
+ currentName,
108
+ baseName: BASE_NAME,
109
+ });
110
+ },
111
+ Function(innerPath) {
112
+ // Keep analysis local to the current function body.
113
+ innerPath.skip();
114
+ },
115
+ });
116
+ },
117
+ });
118
+ transformationsApplied += group.apply();
119
+ }
120
+ return Promise.resolve({
121
+ nodesVisited,
122
+ transformationsApplied,
123
+ });
124
+ },
125
+ };
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.79.0",
5
+ "version": "1.80.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",