ts-codemod-lib 4.0.0 → 4.1.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.
Files changed (52) hide show
  1. package/README.md +2 -1
  2. package/dist/functions/ast-transformers/append-as-const.d.mts +9 -10
  3. package/dist/functions/ast-transformers/append-as-const.d.mts.map +1 -1
  4. package/dist/functions/ast-transformers/append-as-const.mjs +123 -114
  5. package/dist/functions/ast-transformers/append-as-const.mjs.map +1 -1
  6. package/dist/functions/ast-transformers/convert-to-readonly.d.mts +28 -7
  7. package/dist/functions/ast-transformers/convert-to-readonly.d.mts.map +1 -1
  8. package/dist/functions/ast-transformers/convert-to-readonly.mjs +452 -253
  9. package/dist/functions/ast-transformers/convert-to-readonly.mjs.map +1 -1
  10. package/dist/functions/ast-transformers/enable-no-unchecked-indexed-access.d.mts +8 -8
  11. package/dist/functions/ast-transformers/enable-no-unchecked-indexed-access.mjs +103 -104
  12. package/dist/functions/ast-transformers/enable-no-unchecked-indexed-access.mjs.map +1 -1
  13. package/dist/functions/ast-transformers/replace-record-with-unknown-record.d.mts +2 -2
  14. package/dist/functions/ast-transformers/replace-record-with-unknown-record.mjs +51 -51
  15. package/dist/functions/ast-transformers/replace-record-with-unknown-record.mjs.map +1 -1
  16. package/dist/functions/ast-transformers/transform-source-code.d.mts.map +1 -1
  17. package/dist/functions/ast-transformers/transform-source-code.mjs +69 -69
  18. package/dist/functions/ast-transformers/transform-source-code.mjs.map +1 -1
  19. package/dist/functions/constants/mutable-prefixes.d.mts +8 -8
  20. package/dist/functions/functions/has-disable-next-line-comment.mjs +23 -23
  21. package/dist/functions/functions/has-disable-next-line-comment.mjs.map +1 -1
  22. package/dist/functions/functions/is-readonly-node.d.mts +2 -2
  23. package/dist/functions/functions/is-readonly-node.d.mts.map +1 -1
  24. package/dist/functions/functions/is-readonly-node.mjs +13 -13
  25. package/dist/functions/functions/is-readonly-node.mjs.map +1 -1
  26. package/dist/functions/functions/wrap-with-parentheses.d.mts +2 -2
  27. package/dist/functions/functions/wrap-with-parentheses.d.mts.map +1 -1
  28. package/dist/functions/functions/wrap-with-parentheses.mjs +87 -32
  29. package/dist/functions/functions/wrap-with-parentheses.mjs.map +1 -1
  30. package/dist/functions/utils/replace-node-with-text.d.mts +10 -11
  31. package/dist/functions/utils/replace-node-with-text.d.mts.map +1 -1
  32. package/dist/functions/utils/replace-node-with-text.mjs +0 -1
  33. package/dist/functions/utils/replace-node-with-text.mjs.map +1 -1
  34. package/package.json +9 -9
  35. package/src/functions/ast-transformers/append-as-const.mts +242 -231
  36. package/src/functions/ast-transformers/append-as-const.test.mts +39 -6
  37. package/src/functions/ast-transformers/convert-to-readonly-record-import.test.mts +458 -0
  38. package/src/functions/ast-transformers/convert-to-readonly.mts +1003 -694
  39. package/src/functions/ast-transformers/convert-to-readonly.test.mts +80 -33
  40. package/src/functions/ast-transformers/enable-no-unchecked-indexed-access.mts +178 -179
  41. package/src/functions/ast-transformers/enable-no-unchecked-indexed-access.test.mts +29 -29
  42. package/src/functions/ast-transformers/replace-any-with-unknown.test.mts +6 -6
  43. package/src/functions/ast-transformers/replace-record-with-unknown-record.mts +75 -75
  44. package/src/functions/ast-transformers/replace-record-with-unknown-record.test.mts +6 -6
  45. package/src/functions/ast-transformers/transform-source-code.mts +110 -110
  46. package/src/functions/ast-transformers/transformer-specific-ignore.test.mts +6 -6
  47. package/src/functions/constants/mutable-prefixes.mts +8 -8
  48. package/src/functions/functions/has-disable-next-line-comment.mts +35 -35
  49. package/src/functions/functions/is-readonly-node.mts +25 -25
  50. package/src/functions/functions/wrap-with-parentheses.mts +138 -52
  51. package/src/functions/functions/wrap-with-parentheses.test.mts +115 -0
  52. package/src/functions/utils/replace-node-with-text.mts +10 -11
@@ -1,17 +1,4 @@
1
- import { asUint32, range } from 'ts-data-forge';
2
- const parenDepthDelta = (char) => {
3
- switch (char) {
4
- case '(':
5
- return 1;
6
- case ')':
7
- return -1;
8
-
9
-
10
- case undefined:
11
- default:
12
- return 0;
13
- }
14
- };
1
+ import * as tsm from 'ts-morph';
15
2
 
16
3
 
17
4
 
@@ -25,22 +12,23 @@ const parenDepthDelta = (char) => {
25
12
 
26
13
 
27
14
 
28
- const isWrappedWithParentheses = (str) => {
29
- const trimmed = str.trim();
30
- if (!trimmed.startsWith('(') || !trimmed.endsWith(')')) {
31
- return false;
32
- }
33
15
 
34
16
 
35
- let mut_depth = 0;
36
- for (const mut_i of range(0, asUint32(trimmed.length))) {
37
- mut_depth += parenDepthDelta(trimmed.at(mut_i));
38
17
 
39
- if (mut_depth === 0 && mut_i < trimmed.length - 1) {
40
- return false;
41
- }
42
- }
43
- return true;
18
+
19
+
20
+
21
+
22
+
23
+ export const wrapWithParentheses = (nodeStr) => {
24
+ const trimmed = nodeStr.trim();
25
+ return isWrappedWithParentheses(trimmed)
26
+ ? trimmed
27
+ : `(${trimmed})`;
28
+ };
29
+ const initialScanState = {
30
+ parenDepth: 0,
31
+ openBraces: '',
44
32
  };
45
33
 
46
34
 
@@ -48,14 +36,46 @@ const isWrappedWithParentheses = (str) => {
48
36
 
49
37
 
50
38
 
39
+ const untrustedTokens = new Set([
40
+ tsm.ts.SyntaxKind.SlashToken,
41
+ tsm.ts.SyntaxKind.SlashEqualsToken,
42
+ tsm.ts.SyntaxKind.Unknown,
43
+ ]);
51
44
 
52
45
 
53
46
 
54
47
 
55
48
 
49
+ const scanStep = new Map([
50
+ [
51
+ tsm.ts.SyntaxKind.OpenParenToken,
52
+ (state) => ({ ...state, parenDepth: state.parenDepth + 1 }),
53
+ ],
54
+ [
55
+ tsm.ts.SyntaxKind.CloseParenToken,
56
+ (state) => ({ ...state, parenDepth: state.parenDepth - 1 }),
57
+ ],
58
+ [
59
+ tsm.ts.SyntaxKind.OpenBraceToken,
60
+ (state) => ({ ...state, openBraces: `${state.openBraces}{` }),
61
+ ],
62
+ [
63
+ tsm.ts.SyntaxKind.TemplateHead,
64
+ (state) => ({ ...state, openBraces: `${state.openBraces}$` }),
65
+ ],
66
+ [
67
+ tsm.ts.SyntaxKind.CloseBraceToken,
68
+ (state, scanner) =>
56
69
 
57
70
 
58
71
 
72
+ state.openBraces.endsWith('$') &&
73
+ scanner.reScanTemplateToken( false) !==
74
+ tsm.ts.SyntaxKind.TemplateTail
75
+ ? state
76
+ : { ...state, openBraces: state.openBraces.slice(0, -1) },
77
+ ],
78
+ ]);
59
79
 
60
80
 
61
81
 
@@ -63,10 +83,45 @@ const isWrappedWithParentheses = (str) => {
63
83
 
64
84
 
65
85
 
66
- export const wrapWithParentheses = (nodeStr) => {
67
- const trimmed = nodeStr.trim();
68
- return isWrappedWithParentheses(trimmed)
69
- ? trimmed
70
- : `(${trimmed})`;
86
+
87
+
88
+
89
+
90
+
91
+
92
+
93
+
94
+
95
+
96
+
97
+
98
+
99
+ const isWrappedWithParentheses = (str) => {
100
+ const trimmed = str.trim();
101
+ if (!trimmed.startsWith('(') || !trimmed.endsWith(')')) {
102
+ return false;
103
+ }
104
+ const scanner = tsm.ts.createScanner(tsm.ts.ScriptTarget.Latest,
105
+ true, tsm.ts.LanguageVariant.Standard, trimmed);
106
+ let mut_state = initialScanState;
107
+ for (let mut_token = scanner.scan(); mut_token !== tsm.ts.SyntaxKind.EndOfFileToken; mut_token = scanner.scan()) {
108
+
109
+
110
+ if (untrustedTokens.has(mut_token)) {
111
+ return false;
112
+ }
113
+ mut_state = scanStep.get(mut_token)?.(mut_state, scanner) ?? mut_state;
114
+
115
+ if (scanner.isUnterminated()) {
116
+ return false;
117
+ }
118
+
119
+
120
+ if (mut_state.parenDepth === 0 && scanner.getTokenEnd() < trimmed.length) {
121
+ return false;
122
+ }
123
+ }
124
+
125
+ return mut_state.parenDepth === 0;
71
126
  };
72
127
  //# sourceMappingURL=wrap-with-parentheses.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"wrap-with-parentheses.mjs","sourceRoot":"","sources":["../../../src/functions/functions/wrap-with-parentheses.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAEhD,MAAM,eAAe,GAAG,CAAC,IAAwB,EAAU,EAAE;IAC3D,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,GAAG;YACN,OAAO,CAAC,CAAC;QAEX,KAAK,GAAG;YACN,OAAO,CAAC,CAAC,CAAC;QAEZ,sEAAsE;QACtE,0DAA0D;QAC1D,KAAK,SAAS,CAAC;QACf;YACE,OAAO,CAAC,CAAC;IACb,CAAC;AACH,CAAC,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,MAAM,wBAAwB,GAAG,CAAC,GAAW,EAAW,EAAE;IACxD,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IAE3B,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACvD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,4DAA4D;IAC5D,6DAA6D;IAC7D,IAAI,SAAS,GAAG,CAAC,CAAC;IAElB,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;QACvD,SAAS,IAAI,eAAe,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;QAEhD,kFAAkF;QAClF,IAAI,SAAS,KAAK,CAAC,IAAI,KAAK,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClD,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,OAAe,EAAU,EAAE;IAC7D,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAE/B,OAAO,wBAAwB,CAAC,OAAO,CAAC;QACtC,CAAC,CAAC,OAAO;QACT,CAAC,CAAE,IAAI,OAAO,GAAa,CAAC;AAChC,CAAC,CAAC"}
1
+ {"version":3,"file":"wrap-with-parentheses.mjs","sourceRoot":"","sources":["../../../src/functions/functions/wrap-with-parentheses.mts"],"names":[],"mappings":"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"}
@@ -3,19 +3,18 @@ import type * as tsm from 'ts-morph';
3
3
  * `node.replaceWithText(newNodeText)`, sparing a one-line text the indentation
4
4
  * lookup.
5
5
  *
6
- * `replaceWithText` writes the text through a writer whose indentation it
7
- * looks up first, for the lines after the first one, and the lookup reparses
8
- * the whole file in the language service: on top of the reparse every
9
- * replacement makes anyway, once per replacement, so it is quadratic in the
10
- * size of the file. A text with no `\n` has no line after the first, the
11
- * indentation is never applied, and a plain writer from the same project
12
- * writes the same text — so the lookup is skipped. A multi-line text takes
13
- * the original path.
6
+ * `replaceWithText` writes the text through a writer whose indentation it looks
7
+ * up first, for the lines after the first one, and the lookup reparses the
8
+ * whole file in the language service: on top of the reparse every replacement
9
+ * makes anyway, once per replacement, so it is quadratic in the size of the
10
+ * file. A text with no `\n` has no line after the first, the indentation is
11
+ * never applied, and a plain writer from the same project writes the same text
12
+ * — so the lookup is skipped. A multi-line text takes the original path.
14
13
  *
15
14
  * The writer is passed as `replaceWithText`'s second argument, which its
16
- * declaration leaves out and ts-morph passes itself when it sets an
17
- * expression. Were it ever dropped, the method would look the indentation up
18
- * as before: slower, never different.
15
+ * declaration leaves out and ts-morph passes itself when it sets an expression.
16
+ * Were it ever dropped, the method would look the indentation up as before:
17
+ * slower, never different.
19
18
  */
20
19
  export declare const replaceNodeWithText: (node: tsm.Node, newNodeText: string) => tsm.Node;
21
20
  //# sourceMappingURL=replace-node-with-text.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"replace-node-with-text.d.mts","sourceRoot":"","sources":["../../../src/functions/utils/replace-node-with-text.mts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,GAAG,MAAM,UAAU,CAAC;AAErC;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,mBAAmB,SACxB,GAAG,CAAC,IAAI,eACD,MAAM,KAClB,GAAG,CAAC,IAOA,CAAC"}
1
+ {"version":3,"file":"replace-node-with-text.d.mts","sourceRoot":"","sources":["../../../src/functions/utils/replace-node-with-text.mts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,GAAG,MAAM,UAAU,CAAC;AAErC;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,mBAAmB,SACxB,GAAG,CAAC,IAAI,eACD,MAAM,KAClB,GAAG,CAAC,IAOA,CAAC"}
@@ -15,7 +15,6 @@
15
15
 
16
16
 
17
17
 
18
-
19
18
  export const replaceNodeWithText = (node, newNodeText) => newNodeText.includes('\n')
20
19
  ? node.replaceWithText(newNodeText)
21
20
  : node.replaceWithText.call(node, newNodeText, node.getProject().createWriter());
@@ -1 +1 @@
1
- {"version":3,"file":"replace-node-with-text.mjs","sourceRoot":"","sources":["../../../src/functions/utils/replace-node-with-text.mts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CACjC,IAAc,EACd,WAAmB,EACT,EAAE,CACZ,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC;IACxB,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC;IACnC,CAAC,CAAE,IAAI,CAAC,eAA6C,CAAC,IAAI,CACtD,IAAI,EACJ,WAAW,EACX,IAAI,CAAC,UAAU,EAAE,CAAC,YAAY,EAAE,CACjC,CAAC"}
1
+ {"version":3,"file":"replace-node-with-text.mjs","sourceRoot":"","sources":["../../../src/functions/utils/replace-node-with-text.mts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CACjC,IAAc,EACd,WAAmB,EACT,EAAE,CACZ,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC;IACxB,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC;IACnC,CAAC,CAAE,IAAI,CAAC,eAA6C,CAAC,IAAI,CACtD,IAAI,EACJ,WAAW,EACX,IAAI,CAAC,UAAU,EAAE,CAAC,YAAY,EAAE,CACjC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ts-codemod-lib",
3
- "version": "4.0.0",
3
+ "version": "4.1.0",
4
4
  "private": false,
5
5
  "keywords": [
6
6
  "typescript",
@@ -38,30 +38,30 @@
38
38
  "LICENSE"
39
39
  ],
40
40
  "dependencies": {
41
- "ts-data-forge": "^14.10.0",
41
+ "ts-data-forge": "^14.11.0",
42
42
  "ts-morph": "^28.0.0",
43
43
  "ts-type-forge": "^9.2.2"
44
44
  },
45
45
  "devDependencies": {
46
46
  "@types/node": "26.6.5",
47
47
  "@vitest/browser-playwright": "5.0.5",
48
- "@vitest/coverage-v8": "5.0.5",
48
+ "@vitest/coverage-istanbul": "5.0.5",
49
49
  "@vitest/ui": "5.0.5",
50
50
  "cspell": "10.4.0",
51
51
  "dedent": "1.7.2",
52
52
  "esbuild": "0.28.2",
53
53
  "eslint": "10.13.0",
54
- "eslint-config-typed": "6.0.0",
55
- "eslint-plugin-ts-data-forge": "0.10.4",
56
- "eslint-plugin-ts-fortress": "1.3.9",
57
- "eslint-plugin-ts-type-forge": "0.8.14",
54
+ "eslint-config-typed": "7.5.0",
55
+ "eslint-plugin-ts-data-forge": "0.10.10",
56
+ "eslint-plugin-ts-fortress": "1.3.14",
57
+ "eslint-plugin-ts-type-forge": "0.8.19",
58
58
  "jiti": "2.7.0",
59
59
  "npm-run-all2": "9.0.4",
60
60
  "playwright": "1.64.1",
61
61
  "prettier": "3.9.10",
62
62
  "prettier-plugin-organize-imports": "4.3.0",
63
63
  "prettier-plugin-packagejson": "3.0.2",
64
- "ts-repo-utils": "10.7.1",
64
+ "ts-repo-utils": "10.7.3",
65
65
  "tsx": "4.23.15",
66
66
  "typedoc": "0.28.20",
67
67
  "typedoc-github-theme": "0.4.0",
@@ -75,7 +75,7 @@
75
75
  "pnpm": ">=9.0.0"
76
76
  },
77
77
  "volta": {
78
- "node": "26.12.1"
78
+ "node": "26.13.0"
79
79
  },
80
80
  "publishConfig": {
81
81
  "access": "public",