miniread 1.63.0 → 1.64.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.
@@ -136,6 +136,10 @@ const manifestData = {
136
136
  notes: "Auto-added by evaluation script. Note: rename transforms can slightly increase diff size in isolation (longer identifiers), but the goal here is stability/readability and improved alignment when composed with other transforms in the recommended preset. Safety: skips files with obvious dynamic name-lookup patterns (e.g. free `eval` / `Function` / `with`) since string-based lookups are not rewritten by renames.",
137
137
  evaluations: { "claude-code-2.1.10:claude-code-2.1.11": { "diffSizePercent": 100.01319385543303, "evaluatedAt": "2026-02-01T23:10:38.195Z", "changedLines": 515, "durationSeconds": 398.35224649, "stableNames": 1358 } },
138
138
  },
139
+ "rename-http-server-parameters": {
140
+ recommended: true,
141
+ evaluations: { "claude-code-2.1.10:claude-code-2.1.11": { "diffSizePercent": 100, "evaluatedAt": "2026-02-04T12:54:37.434Z", "changedLines": 14, "durationSeconds": 231.553556391, "stableNames": 1358 } },
142
+ },
139
143
  "rename-interval-ids": {
140
144
  recommended: true,
141
145
  evaluations: { "claude-code-2.1.10:claude-code-2.1.11": { "diffSizePercent": 100, "evaluatedAt": "2026-02-01T09:30:55.276Z", "changedLines": 58, "durationSeconds": 201.398360841, "stableNames": 1358 } },
@@ -380,6 +384,7 @@ export const recommendedTransformIds = [
380
384
  "rename-error-first-callback-parameters",
381
385
  "rename-error-variables",
382
386
  "rename-event-parameters",
387
+ "rename-http-server-parameters",
383
388
  "rename-fs-sync-variables",
384
389
  "rename-interval-ids",
385
390
  "rename-loop-index-variables-v3",
@@ -27,6 +27,7 @@ import { renameErrorFirstCallbackParametersTransform } from "../rename-error-fir
27
27
  import { renameErrorVariablesTransform } from "../rename-error-variables/rename-error-variables-transform.js";
28
28
  import { renameEventParametersTransform } from "../rename-event-parameters/rename-event-parameters-transform.js";
29
29
  import { renameFsSyncVariablesTransform } from "../rename-fs-sync-variables/rename-fs-sync-variables-transform.js";
30
+ import { renameHttpServerParametersTransform } from "../rename-http-server-parameters/rename-http-server-parameters-transform.js";
30
31
  import { renameIntervalIdsTransform } from "../rename-interval-ids/rename-interval-ids-transform.js";
31
32
  import { renameLoopIndexVariablesTransform } from "../rename-loop-index-variables/rename-loop-index-variables-transform.js";
32
33
  import { renameLoopIndexVariablesV2Transform } from "../rename-loop-index-variables-v2/rename-loop-index-variables-v2-transform.js";
@@ -96,6 +97,7 @@ export const transformRegistry = {
96
97
  [renameErrorVariablesTransform.id]: renameErrorVariablesTransform,
97
98
  [renameEventParametersTransform.id]: renameEventParametersTransform,
98
99
  [renameFsSyncVariablesTransform.id]: renameFsSyncVariablesTransform,
100
+ [renameHttpServerParametersTransform.id]: renameHttpServerParametersTransform,
99
101
  [renameIntervalIdsTransform.id]: renameIntervalIdsTransform,
100
102
  [renameLoopIndexVariablesTransform.id]: renameLoopIndexVariablesTransform,
101
103
  [renameLoopIndexVariablesV2Transform.id]: renameLoopIndexVariablesV2Transform,
@@ -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", "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", "rename-deferred-resolve-parameters", "rename-destructured-aliases", "rename-error-first-callback-parameters", "rename-error-variables", "rename-event-parameters", "rename-fs-sync-variables", "rename-interval-ids", "rename-loop-index-variables-v3", "rename-loop-length-variables", "rename-document-fragment-variables", "rename-object-keys-variables", "rename-parameters-to-match-properties-v2", "rename-promise-executor-parameters-v2", "rename-range-parameters", "rename-read-file-lines", "rename-regex-builders", "rename-rest-parameters", "rename-search-parameters-variables", "rename-string-split-variables", "rename-this-aliases", "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", "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", "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", "rename-deferred-resolve-parameters", "rename-destructured-aliases", "rename-error-first-callback-parameters", "rename-error-variables", "rename-event-parameters", "rename-http-server-parameters", "rename-fs-sync-variables", "rename-interval-ids", "rename-loop-index-variables-v3", "rename-loop-length-variables", "rename-document-fragment-variables", "rename-object-keys-variables", "rename-parameters-to-match-properties-v2", "rename-promise-executor-parameters-v2", "rename-range-parameters", "rename-read-file-lines", "rename-regex-builders", "rename-rest-parameters", "rename-search-parameters-variables", "rename-string-split-variables", "rename-this-aliases", "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", "simplify-boolean-negations", "simplify-string-trim", "split-variable-declarations", "use-optional-chaining", "use-object-property-shorthand", "use-object-shorthand", "replace-dynamic-require-eval"];
@@ -33,6 +33,7 @@ export const recommendedTransformOrder = [
33
33
  "rename-error-first-callback-parameters",
34
34
  "rename-error-variables",
35
35
  "rename-event-parameters",
36
+ "rename-http-server-parameters",
36
37
  // Runs after stabilize-top-level-bindings: in the recommended preset, top-level `fs` bindings
37
38
  // are already stable-hashed. This transform gives remaining non-stable `fs` helpers stable
38
39
  // `$fs`-style names.
@@ -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-04T12:54:37.434Z",
7
+ "changedLines": 14,
8
+ "durationSeconds": 231.553556391,
9
+ "stableNames": 1358
10
+ }
11
+ }
12
+ }
@@ -0,0 +1,2 @@
1
+ import { type Transform } from "../../core/types.js";
2
+ export declare const renameHttpServerParametersTransform: Transform;
@@ -0,0 +1,109 @@
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
+ // prettier-ignore
8
+ const REQUEST_PROPERTY_NAMES = new Set(["url", "method", "headers", "socket", "connection", "httpVersion", "trailers"]);
9
+ // prettier-ignore
10
+ const RESPONSE_PROPERTY_NAMES = new Set(["end", "write", "writeHead", "setHeader", "getHeader", "removeHeader", "statusCode", "statusMessage"]);
11
+ // prettier-ignore
12
+ const isListenerFunction = (argumentPath) => argumentPath.isFunctionExpression() || argumentPath.isArrowFunctionExpression();
13
+ const getListenerFromCreateServerCall = (path) => {
14
+ // Intentionally module-agnostic: rely on request/response property usage (one high-signal access each).
15
+ const callee = path.node.callee;
16
+ if ((callee.type !== "MemberExpression" &&
17
+ callee.type !== "OptionalMemberExpression") ||
18
+ callee.computed ||
19
+ callee.property.type !== "Identifier" ||
20
+ callee.property.name !== "createServer")
21
+ return undefined;
22
+ const [firstArgument, secondArgument] = path.get("arguments");
23
+ if (firstArgument && isListenerFunction(firstArgument))
24
+ return firstArgument;
25
+ if (secondArgument && isListenerFunction(secondArgument))
26
+ return secondArgument;
27
+ return undefined;
28
+ };
29
+ const getMemberExpressionPropertyName = (expression) => {
30
+ const key = expression.property;
31
+ if (!expression.computed)
32
+ return key.type === "Identifier"
33
+ ? key.name
34
+ : key.type === "StringLiteral"
35
+ ? key.value
36
+ : undefined;
37
+ if (key.type === "StringLiteral")
38
+ return key.value;
39
+ if (key.type === "TemplateLiteral" &&
40
+ key.expressions.length === 0 &&
41
+ key.quasis.length === 1) {
42
+ const quasi = key.quasis[0];
43
+ return quasi?.value.cooked ?? quasi?.value.raw;
44
+ }
45
+ return undefined;
46
+ };
47
+ const hasPropertyUsage = (bindingName, referencePaths, propertyNames) => referencePaths.some((referencePath) => {
48
+ if (!referencePath.isIdentifier() ||
49
+ referencePath.node.name !== bindingName)
50
+ return false;
51
+ let parentPath = referencePath.parentPath;
52
+ let objectNode = referencePath.node;
53
+ if (parentPath.isTSNonNullExpression()) {
54
+ objectNode = parentPath.node;
55
+ parentPath = parentPath.parentPath;
56
+ }
57
+ if ((!parentPath.isMemberExpression() &&
58
+ !parentPath.isOptionalMemberExpression()) ||
59
+ parentPath.node.object !== objectNode)
60
+ return false;
61
+ const propertyName = getMemberExpressionPropertyName(parentPath.node);
62
+ return propertyName ? propertyNames.has(propertyName) : false;
63
+ });
64
+ // prettier-ignore
65
+ const canRenameParameter = (parameter, bindingReferences, propertyNames, targetName) => parameter.name !== targetName && !isStableRenamed(parameter.name) && hasPropertyUsage(parameter.name, bindingReferences, propertyNames);
66
+ const handleCreateServerCall = (path, group, nodesVisited) => {
67
+ nodesVisited.value++;
68
+ const listenerPath = getListenerFromCreateServerCall(path);
69
+ if (!listenerPath)
70
+ return;
71
+ const [firstParameter, secondParameter] = listenerPath.node.params;
72
+ if (!firstParameter ||
73
+ !secondParameter ||
74
+ firstParameter.type !== "Identifier" ||
75
+ secondParameter.type !== "Identifier" ||
76
+ firstParameter.name === secondParameter.name)
77
+ return;
78
+ const requestBinding = listenerPath.scope.getBinding(firstParameter.name);
79
+ const responseBinding = listenerPath.scope.getBinding(secondParameter.name);
80
+ if (!requestBinding ||
81
+ !responseBinding ||
82
+ !requestBinding.constant ||
83
+ !responseBinding.constant ||
84
+ !canRenameParameter(firstParameter, requestBinding.referencePaths, REQUEST_PROPERTY_NAMES, "$request") ||
85
+ !canRenameParameter(secondParameter, responseBinding.referencePaths, RESPONSE_PROPERTY_NAMES, "$response"))
86
+ return;
87
+ // prettier-ignore
88
+ group.add({ scope: listenerPath.scope, currentName: firstParameter.name, baseName: "request" });
89
+ // prettier-ignore
90
+ group.add({ scope: listenerPath.scope, currentName: secondParameter.name, baseName: "response" });
91
+ };
92
+ export const renameHttpServerParametersTransform = {
93
+ id: "rename-http-server-parameters",
94
+ description: "Renames createServer request/response parameters to $request/$response when usage is high-confidence",
95
+ scope: "file",
96
+ parallelizable: true,
97
+ transform(context) {
98
+ const nodesVisited = { value: 0 };
99
+ let transformationsApplied = 0;
100
+ for (const fileInfo of getFilesToProcess(context)) {
101
+ const group = new RenameGroup();
102
+ // prettier-ignore
103
+ traverse(fileInfo.ast, { CallExpression(path) { handleCreateServerCall(path, group, nodesVisited); }, OptionalCallExpression(path) { handleCreateServerCall(path, group, nodesVisited); } });
104
+ transformationsApplied += group.apply();
105
+ }
106
+ // prettier-ignore
107
+ return Promise.resolve({ nodesVisited: nodesVisited.value, transformationsApplied });
108
+ },
109
+ };
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.63.0",
5
+ "version": "1.64.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",