miniread 1.61.0 → 1.62.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.
@@ -108,6 +108,10 @@ const manifestData = {
108
108
  notes: "Auto-added by evaluation script. Measured with baseline none: 0.09%.",
109
109
  evaluations: { "legacy:evaluation": { "evaluatedAt": "2026-01-25T19:59:48.188Z", "changedLines": 38927, "durationSeconds": 0, "stableNames": 0, "diffSizePercent": 97.80020410477378 }, "claude-code-2.1.10:claude-code-2.1.11": { "diffSizePercent": 97.80020410477378, "evaluatedAt": "2026-01-25T23:15:44.243Z", "changedLines": 38927, "durationSeconds": 76.61873741599999, "stableNames": 4505 } },
110
110
  },
111
+ "rename-document-fragment-variables": {
112
+ recommended: true,
113
+ evaluations: { "claude-code-2.1.10:claude-code-2.1.11": { "diffSizePercent": 100, "evaluatedAt": "2026-02-02T22:12:52.993Z", "changedLines": 20, "durationSeconds": 207.34089557, "stableNames": 1358 } },
114
+ },
111
115
  "rename-error-first-callback-parameters": {
112
116
  recommended: true,
113
117
  notes: "Measured with baseline none: 0.00%.",
@@ -375,6 +379,7 @@ export const recommendedTransformIds = [
375
379
  "rename-interval-ids",
376
380
  "rename-loop-index-variables-v3",
377
381
  "rename-loop-length-variables",
382
+ "rename-document-fragment-variables",
378
383
  "rename-object-keys-variables",
379
384
  "rename-parameters-to-match-properties-v2",
380
385
  "rename-promise-executor-parameters-v2",
@@ -21,6 +21,7 @@ import { renameDateNowStartTimesTransform } from "../rename-date-now-start-times
21
21
  import { renameDefaultOptionsParametersTransform } from "../rename-default-options-parameters/rename-default-options-parameters-transform.js";
22
22
  import { renameDeferredResolveParametersTransform } from "../rename-deferred-resolve-parameters/rename-deferred-resolve-parameters-transform.js";
23
23
  import { renameDestructuredAliasesTransform } from "../rename-destructured-aliases/rename-destructured-aliases-transform.js";
24
+ import { renameDocumentFragmentVariablesTransform } from "../rename-document-fragment-variables/rename-document-fragment-variables-transform.js";
24
25
  import { renameErrorFirstCallbackParametersTransform } from "../rename-error-first-callback-parameters/rename-error-first-callback-parameters-transform.js";
25
26
  import { renameErrorVariablesTransform } from "../rename-error-variables/rename-error-variables-transform.js";
26
27
  import { renameEventParametersTransform } from "../rename-event-parameters/rename-event-parameters-transform.js";
@@ -88,6 +89,7 @@ export const transformRegistry = {
88
89
  [renameDefaultOptionsParametersTransform.id]: renameDefaultOptionsParametersTransform,
89
90
  [renameDeferredResolveParametersTransform.id]: renameDeferredResolveParametersTransform,
90
91
  [renameDestructuredAliasesTransform.id]: renameDestructuredAliasesTransform,
92
+ [renameDocumentFragmentVariablesTransform.id]: renameDocumentFragmentVariablesTransform,
91
93
  [renameErrorFirstCallbackParametersTransform.id]: renameErrorFirstCallbackParametersTransform,
92
94
  [renameErrorVariablesTransform.id]: renameErrorVariablesTransform,
93
95
  [renameEventParametersTransform.id]: renameEventParametersTransform,
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "recommended": {
3
- "diffSizePercent": 78.49401564414286,
4
- "notes": "Measured with baseline none: 78.49% of original diff."
3
+ "diffSizePercent": 78.49967015361418,
4
+ "notes": "Measured with baseline none: 78.50% of original diff. Stats re-evaluated against updated sources (Feb 2026)."
5
5
  }
6
6
  }
@@ -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-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-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-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"];
@@ -39,6 +39,7 @@ export const recommendedTransformOrder = [
39
39
  "rename-interval-ids",
40
40
  "rename-loop-index-variables-v3",
41
41
  "rename-loop-length-variables",
42
+ "rename-document-fragment-variables",
42
43
  "rename-object-keys-variables",
43
44
  "rename-parameters-to-match-properties-v2",
44
45
  "rename-promise-executor-parameters-v2",
@@ -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-02T22:12:52.993Z",
7
+ "changedLines": 20,
8
+ "durationSeconds": 207.34089557,
9
+ "stableNames": 1358
10
+ }
11
+ }
12
+ }
@@ -0,0 +1,2 @@
1
+ import { type Transform } from "../../core/types.js";
2
+ export declare const renameDocumentFragmentVariablesTransform: Transform;
@@ -0,0 +1,84 @@
1
+ import { createRequire } from "node:module";
2
+ import { collectExportedNames } from "../../core/collect-exported-names.js";
3
+ import { isStableRenamed, RenameGroup } from "../../core/stable-naming.js";
4
+ import { getFilesToProcess, } from "../../core/types.js";
5
+ import * as t from "@babel/types";
6
+ const require = createRequire(import.meta.url);
7
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
8
+ const traverse = require("@babel/traverse").default;
9
+ const BASE_NAME = "documentFragment";
10
+ const METHOD_NAME = "createDocumentFragment";
11
+ const isCreateDocumentFragmentCall = (init) => {
12
+ if (!init)
13
+ return false;
14
+ if (init.type !== "CallExpression" && init.type !== "OptionalCallExpression")
15
+ return false;
16
+ if (init.arguments.length > 0)
17
+ return false;
18
+ if (init.callee.type !== "MemberExpression" &&
19
+ init.callee.type !== "OptionalMemberExpression")
20
+ return false;
21
+ if (init.callee.computed) {
22
+ if (t.isStringLiteral(init.callee.property) &&
23
+ init.callee.property.value === METHOD_NAME) {
24
+ return true;
25
+ }
26
+ if (t.isTemplateLiteral(init.callee.property) &&
27
+ init.callee.property.expressions.length === 0 &&
28
+ init.callee.property.quasis.length === 1) {
29
+ const quasi = init.callee.property.quasis[0];
30
+ return quasi?.value.cooked === METHOD_NAME;
31
+ }
32
+ return false;
33
+ }
34
+ return (init.callee.property.type === "Identifier" &&
35
+ init.callee.property.name === METHOD_NAME);
36
+ };
37
+ const getDocumentFragmentIdentifier = (declarator) => {
38
+ if (declarator.id.type !== "Identifier")
39
+ return undefined;
40
+ if (!isCreateDocumentFragmentCall(declarator.init))
41
+ return undefined;
42
+ return declarator.id;
43
+ };
44
+ export const renameDocumentFragmentVariablesTransform = {
45
+ id: "rename-document-fragment-variables",
46
+ description: "Renames variables assigned from createDocumentFragment() to a stable $documentFragment (or suffixed variant when needed) when unique in scope, otherwise uses readable documentFragment/documentFragment2/...",
47
+ scope: "file",
48
+ parallelizable: true,
49
+ transform(context) {
50
+ let nodesVisited = 0;
51
+ let transformationsApplied = 0;
52
+ for (const fileInfo of getFilesToProcess(context)) {
53
+ const group = new RenameGroup();
54
+ const exportedNames = collectExportedNames(fileInfo.ast.program);
55
+ traverse(fileInfo.ast, {
56
+ VariableDeclarator(path) {
57
+ nodesVisited++;
58
+ const identifier = getDocumentFragmentIdentifier(path.node);
59
+ if (!identifier)
60
+ return;
61
+ if (isStableRenamed(identifier.name))
62
+ return;
63
+ const currentName = identifier.name;
64
+ const binding = path.scope.getBinding(identifier.name);
65
+ if (!binding)
66
+ return;
67
+ if (!binding.constant)
68
+ return;
69
+ if (binding.scope.block.type === "Program" &&
70
+ exportedNames.has(currentName)) {
71
+ return;
72
+ }
73
+ group.add({
74
+ scope: binding.scope,
75
+ currentName,
76
+ baseName: BASE_NAME,
77
+ });
78
+ },
79
+ });
80
+ transformationsApplied += group.apply();
81
+ }
82
+ return Promise.resolve({ nodesVisited, transformationsApplied });
83
+ },
84
+ };
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.61.0",
5
+ "version": "1.62.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",