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.
- package/dist/transforms/_generated/manifest.js +5 -0
- package/dist/transforms/_generated/registry.js +2 -0
- package/dist/transforms/recommended-transform-order.d.ts +1 -1
- package/dist/transforms/recommended-transform-order.js +1 -0
- package/dist/transforms/rename-http-server-parameters/manifest.json +12 -0
- package/dist/transforms/rename-http-server-parameters/rename-http-server-parameters-transform.d.ts +2 -0
- package/dist/transforms/rename-http-server-parameters/rename-http-server-parameters-transform.js +109 -0
- package/package.json +1 -1
|
@@ -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.
|
package/dist/transforms/rename-http-server-parameters/rename-http-server-parameters-transform.js
ADDED
|
@@ -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.
|
|
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",
|