ts-codemod-lib 3.3.2 → 3.3.3

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 (23) hide show
  1. package/README.md +16 -16
  2. package/dist/functions/ast-transformers/append-as-const.mjs +11 -10
  3. package/dist/functions/ast-transformers/append-as-const.mjs.map +1 -1
  4. package/dist/functions/ast-transformers/replace-record-with-unknown-record.mjs +10 -19
  5. package/dist/functions/ast-transformers/replace-record-with-unknown-record.mjs.map +1 -1
  6. package/dist/functions/ast-transformers/transform-source-code.d.mts.map +1 -1
  7. package/dist/functions/ast-transformers/transform-source-code.mjs +101 -49
  8. package/dist/functions/ast-transformers/transform-source-code.mjs.map +1 -1
  9. package/dist/functions/functions/should-avoid-parentheses-for-readonly.d.mts.map +1 -1
  10. package/dist/functions/functions/should-avoid-parentheses-for-readonly.mjs +1 -4
  11. package/dist/functions/functions/should-avoid-parentheses-for-readonly.mjs.map +1 -1
  12. package/dist/functions/functions/wrap-with-parentheses.d.mts.map +1 -1
  13. package/dist/functions/functions/wrap-with-parentheses.mjs +3 -4
  14. package/dist/functions/functions/wrap-with-parentheses.mjs.map +1 -1
  15. package/package.json +41 -40
  16. package/src/functions/ast-transformers/append-as-const.mts +22 -20
  17. package/src/functions/ast-transformers/convert-to-readonly.test.mts +2 -10
  18. package/src/functions/ast-transformers/enable-no-unchecked-indexed-access.test.mts +1 -1
  19. package/src/functions/ast-transformers/replace-record-with-unknown-record.mts +13 -22
  20. package/src/functions/ast-transformers/transform-source-code.mts +158 -57
  21. package/src/functions/ast-transformers/transform-source-code.test.mts +123 -0
  22. package/src/functions/functions/should-avoid-parentheses-for-readonly.mts +1 -5
  23. package/src/functions/functions/wrap-with-parentheses.mts +3 -5
package/README.md CHANGED
@@ -5,7 +5,7 @@
5
5
  [![License](https://img.shields.io/npm/l/ts-codemod-lib.svg)](https://github.com/noshiro-pf/mono/blob/main/libs/ts-codemod-lib/LICENSE)
6
6
  [![codecov](https://codecov.io/gh/noshiro-pf/mono/graph/badge.svg?component=ts-codemod-lib)](https://codecov.io/gh/noshiro-pf/mono)
7
7
 
8
- A TypeScript library for code transformations using AST (Abstract Syntax Tree) transformers, powered by the [ts-morph](https://github.com/dsherret/ts-morph).
8
+ A TypeScript library for code transformations using AST (Abstract Syntax Tree) transformers, powered by [ts-morph](https://github.com/dsherret/ts-morph).
9
9
 
10
10
  ## Overview
11
11
 
@@ -160,7 +160,7 @@ type User2 = {
160
160
 
161
161
  Replaces `any` type annotations with `unknown` for improved type safety. The `unknown` type requires type checking before operations, making your code more robust. For function parameters with rest arguments, `(...args: any) => R` is converted to `(...args: readonly unknown[]) => R`.
162
162
 
163
- Example:
163
+ Example (the `as any` casts in the "After" code are not produced by the transformer; they are there only to keep the sample compiling):
164
164
 
165
165
  ```ts
166
166
  // Before
@@ -319,7 +319,7 @@ The transformers are also available as commands, published separately as
319
319
 
320
320
  ```bash
321
321
  npm add -D ts-codemod-cli
322
- npx convert-to-readonly 'src/**/*.mts'
322
+ npx ts-codemod -t convert-to-readonly 'src/**/*.mts'
323
323
  ```
324
324
 
325
325
  They are in their own package because they need `cmd-ts`, `dedent` and
@@ -330,7 +330,7 @@ package's README for the full command list and options.
330
330
 
331
331
  ### Using Transformers with String Input/Output
332
332
 
333
- You can use the `astTransformerToStringTransformer` utility to apply these transformers to source code strings:
333
+ You can use the `transformSourceCode` utility to apply these transformers to source code strings:
334
334
 
335
335
  ```tsx
336
336
  import dedent from 'dedent';
@@ -475,12 +475,12 @@ node codemod.mjs
475
475
  * @param {string[]} user.roles - User roles.
476
476
  * @returns {object} Processed data.
477
477
  */
478
- function processUser(user: { name: string; roles: string[] }): {
478
+ const processUser = (_user: {
479
+ name: string;
480
+ roles: string[];
481
+ }): {
479
482
  success: boolean;
480
- } {
481
- // ... implementation ...
482
- return { success: true };
483
- }
483
+ } => ({ success: true });
484
484
 
485
485
  // After applying convertToReadonlyTransformer
486
486
  /**
@@ -489,12 +489,12 @@ node codemod.mjs
489
489
  * @param {string[]} user.roles - User roles. // JSDoc type is not changed
490
490
  * @returns {object} Processed data. // JSDoc type is not changed
491
491
  */
492
- function processUser(
493
- user: Readonly<{ name: string; roles: readonly string[] }>,
494
- ): Readonly<{ success: boolean }> {
495
- // ... implementation ...
496
- return { success: true };
497
- }
492
+ const processUser2 = (
493
+ _user: Readonly<{
494
+ name: string;
495
+ roles: readonly string[];
496
+ }>,
497
+ ): Readonly<{ success: boolean }> => ({ success: true }) as const;
498
498
  ```
499
499
 
500
500
  - Comment positions might change due to the heuristics used for restoring comments in the code.
@@ -505,7 +505,7 @@ node codemod.mjs
505
505
 
506
506
  ## Documentation
507
507
 
508
- - API reference: <https://noshiro-pf.github.io/ts-codemod-lib/>
508
+ - API reference: <https://noshiro-pf.github.io/mono/ts-codemod-lib/>
509
509
 
510
510
  ## For Developers
511
511
 
@@ -188,18 +188,19 @@ const transformNode = (node, context, options) => {
188
188
  }, options);
189
189
  return;
190
190
  }
191
- if (tsm.Node.isConditionalExpression(node)) {
191
+ if (!tsm.Node.isConditionalExpression(node)) {
192
+ return;
193
+ }
192
194
 
193
- transformNode(node.getWhenTrue(), {
194
- isDirectUnderConstInitializer: context.isDirectUnderConstInitializer,
195
- isUnderConstContext: false,
196
- }, options);
197
- transformNode(node.getWhenFalse(), {
198
- isDirectUnderConstInitializer: context.isDirectUnderConstInitializer,
199
- isUnderConstContext: false,
200
- }, options);
195
+ transformNode(node.getWhenTrue(), {
196
+ isDirectUnderConstInitializer: context.isDirectUnderConstInitializer,
197
+ isUnderConstContext: false,
198
+ }, options);
199
+ transformNode(node.getWhenFalse(), {
200
+ isDirectUnderConstInitializer: context.isDirectUnderConstInitializer,
201
+ isUnderConstContext: false,
202
+ }, options);
201
203
 
202
- }
203
204
  };
204
205
 
205
206
 
@@ -1 +1 @@
1
- {"version":3,"file":"append-as-const.mjs","sourceRoot":"","sources":["../../../src/functions/ast-transformers/append-as-const.mts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"append-as-const.mjs","sourceRoot":"","sources":["../../../src/functions/ast-transformers/append-as-const.mts"],"names":[],"mappings":"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"}
@@ -28,9 +28,7 @@ const processDeclarations = (container) => {
28
28
  return false;
29
29
  }
30
30
  const typeNode = typeAlias.getTypeNode();
31
- if (typeNode === undefined)
32
- return false;
33
- return visitTypeNode(typeNode);
31
+ return typeNode !== undefined && visitTypeNode(typeNode);
34
32
  });
35
33
  const interfaceModifications = container
36
34
  .getInterfaces()
@@ -68,9 +66,7 @@ const processInterfaceDeclaration = (interfaceDecl) => {
68
66
  .getProperties()
69
67
  .map((property) => {
70
68
  const typeNode = property.getTypeNode();
71
- if (typeNode === undefined)
72
- return false;
73
- return visitTypeNode(typeNode);
69
+ return typeNode !== undefined && visitTypeNode(typeNode);
74
70
  })
75
71
  .includes(true);
76
72
  };
@@ -113,11 +109,11 @@ const visitTypeNode = (node) => {
113
109
  .map((member) => {
114
110
  if (tsm.Node.isPropertySignature(member)) {
115
111
  const typeNode = member.getTypeNode();
116
- return typeNode === undefined ? false : visitTypeNode(typeNode);
112
+ return typeNode !== undefined && visitTypeNode(typeNode);
117
113
  }
118
114
  if (tsm.Node.isIndexSignatureDeclaration(member)) {
119
115
  const typeNode = member.getReturnTypeNode();
120
- return typeNode === undefined ? false : visitTypeNode(typeNode);
116
+ return typeNode !== undefined && visitTypeNode(typeNode);
121
117
  }
122
118
  return false;
123
119
  })
@@ -137,16 +133,10 @@ const visitTypeNode = (node) => {
137
133
  return visitTypeNode(node.getTypeNode());
138
134
  }
139
135
 
140
- if (tsm.Node.isTypeOperatorTypeNode(node)) {
141
- return visitTypeNode(node.getTypeNode());
142
- }
143
- if (tsm.Node.isRestTypeNode(node)) {
144
- return visitTypeNode(node.getTypeNode());
145
- }
146
- if (tsm.Node.isNamedTupleMember(node)) {
147
- return visitTypeNode(node.getTypeNode());
148
- }
149
- return false;
136
+ return ((tsm.Node.isTypeOperatorTypeNode(node) ||
137
+ tsm.Node.isRestTypeNode(node) ||
138
+ tsm.Node.isNamedTupleMember(node)) &&
139
+ visitTypeNode(node.getTypeNode()));
150
140
  };
151
141
  const isStringUnknownIndexSignature = (sig) => {
152
142
  const keyType = sig.getKeyTypeNode();
@@ -210,8 +200,9 @@ const ensureUnknownRecordImport = (sourceFile) => {
210
200
  const alreadyImported = existingImport
211
201
  .getNamedImports()
212
202
  .some((ni) => ni.getName() === UNKNOWN_RECORD_NAME);
213
- if (alreadyImported)
203
+ if (alreadyImported) {
214
204
  return;
205
+ }
215
206
  existingImport.addNamedImport({
216
207
  name: UNKNOWN_RECORD_NAME,
217
208
  isTypeOnly: true,
@@ -1 +1 @@
1
- {"version":3,"file":"replace-record-with-unknown-record.mjs","sourceRoot":"","sources":["../../../src/functions/ast-transformers/replace-record-with-unknown-record.mts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"replace-record-with-unknown-record.mjs","sourceRoot":"","sources":["../../../src/functions/ast-transformers/replace-record-with-unknown-record.mts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"transform-source-code.d.mts","sourceRoot":"","sources":["../../../src/functions/ast-transformers/transform-source-code.mts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,aAAa,CAAC;AA4EtD,eAAO,MAAM,mBAAmB,SACxB,MAAM,SACL,OAAO,gBACA,SAAS,kBAAkB,EAAE,UACpC,OAAO,KACb,MAgCF,CAAC"}
1
+ {"version":3,"file":"transform-source-code.d.mts","sourceRoot":"","sources":["../../../src/functions/ast-transformers/transform-source-code.mts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,aAAa,CAAC;AA+KtD,eAAO,MAAM,mBAAmB,SACxB,MAAM,SACL,OAAO,gBACA,SAAS,kBAAkB,EAAE,UACpC,OAAO,KACb,MAkCF,CAAC"}
@@ -1,63 +1,114 @@
1
1
  import { Arr } from 'ts-data-forge';
2
2
  import * as tsm from 'ts-morph';
3
- const extractFileIgnoreTransformers = (code) => {
3
+ const fileIgnorePrefixes = [
4
+ 'transformer-ignore',
5
+ 'ts-codemod-ignore',
6
+ 'codemod-ignore',
7
+ 'transform-ignore',
8
+ ];
9
+
10
+
11
+
12
+
13
+
4
14
 
5
- const patterns = [
6
- {
7
- prefix: 'transformer-ignore',
8
- regex: /\/\*\s*transformer-ignore\s*(.*?)\s*\*\//u,
9
- },
10
- {
11
- prefix: 'ts-codemod-ignore',
12
- regex: /\/\*\s*ts-codemod-ignore\s*(.*?)\s*\*\//u,
13
- },
14
- {
15
- prefix: 'codemod-ignore',
16
- regex: /\/\*\s*codemod-ignore\s*(.*?)\s*\*\//u,
17
- },
18
- {
19
- prefix: 'transform-ignore',
20
- regex: /\/\*\s*transform-ignore\s*(.*?)\s*\*\//u,
21
- },
22
- ];
23
- for (const { regex } of patterns) {
24
- const match = regex.exec(code);
25
- if (match !== null) {
26
- const targetTransformers = match[1]?.trim() ?? '';
27
-
28
- if (targetTransformers === '') {
29
- return [];
30
- }
31
15
 
32
- return targetTransformers.split(',').map((name) => name.trim());
16
+
17
+
18
+ const findFileIgnoreTransformers = (code) => {
19
+ for (const prefix of fileIgnorePrefixes) {
20
+ const names = findFileIgnoreComment(code, prefix);
21
+ if (names !== undefined) {
22
+ return names;
33
23
  }
34
24
  }
35
- return [];
25
+ return undefined;
36
26
  };
37
- const shouldSkipFile = (code, transformerName) => {
38
- const ignoredTransformers = extractFileIgnoreTransformers(code);
39
-
40
- const patterns = [
41
- /\/\*\s*transformer-ignore\s*.*?\s*\*\//u,
42
- /\/\*\s*ts-codemod-ignore\s*.*?\s*\*\//u,
43
- /\/\*\s*codemod-ignore\s*.*?\s*\*\//u,
44
- /\/\*\s*transform-ignore\s*.*?\s*\*\//u,
45
- ];
46
- const hasFileIgnoreComment = patterns.some((regex) => regex.test(code));
47
- if (!hasFileIgnoreComment && Arr.isEmpty(ignoredTransformers)) {
48
- return false;
49
- }
27
+ const findFileIgnoreComment = (code, prefix) => {
28
+
29
+
30
+ const findCommentEnd = createForwardSearch((from) => code.indexOf('*/', from));
31
+ const findLineTerminator = createForwardSearch((from) => indexOfLineTerminator(code, from));
32
+ const trimEndBefore = createLastValueCache((commentEnd) => skipWhitespaceBackward(code, commentEnd));
33
+ for (let mut_open = code.indexOf('/*'); mut_open !== -1; mut_open = code.indexOf('/*', mut_open + 2)) {
34
+ const prefixStart = skipWhitespace(code, mut_open + 2);
35
+ if (!code.startsWith(prefix, prefixStart)) {
36
+ continue;
37
+ }
38
+ const namesStart = skipWhitespace(code, prefixStart + prefix.length);
39
+ const commentEnd = findCommentEnd(namesStart);
40
+
41
+ if (commentEnd === -1) {
42
+ return undefined;
43
+ }
44
+ const namesEnd = Math.max(namesStart, trimEndBefore(commentEnd));
45
+ const lineTerminator = findLineTerminator(namesStart);
46
+ if (lineTerminator === -1 || lineTerminator >= namesEnd) {
47
+ const names = code.slice(namesStart, namesEnd);
50
48
 
51
- if (Arr.isEmpty(ignoredTransformers)) {
52
- return true;
53
- }
54
49
 
55
- if (transformerName === undefined) {
56
- return false;
50
+ return names === '' ? [] : names.split(',').map((name) => name.trim());
51
+ }
57
52
  }
53
+ return undefined;
54
+ };
55
+ const shouldSkipFile = (ignoredTransformers, transformerName) => ignoredTransformers !== undefined &&
56
+
57
+
58
+
59
+ (Arr.isEmpty(ignoredTransformers) ||
60
+ ignoredTransformers.includes(transformerName));
58
61
 
59
- return ignoredTransformers.includes(transformerName);
62
+
63
+
64
+
65
+ const createForwardSearch = (search) => {
66
+ let mut_from = Number.POSITIVE_INFINITY;
67
+ let mut_found = -1;
68
+ return (from) => {
69
+ if (from < mut_from || (mut_found !== -1 && from > mut_found)) {
70
+ mut_from = from;
71
+ mut_found = search(from);
72
+ }
73
+ return mut_found;
74
+ };
60
75
  };
76
+ const createLastValueCache = (fn) => {
77
+ let mut_arg = undefined;
78
+ let mut_value = 0;
79
+ return (arg) => {
80
+ if (arg !== mut_arg) {
81
+ mut_arg = arg;
82
+ mut_value = fn(arg);
83
+ }
84
+ return mut_value;
85
+ };
86
+ };
87
+ const skipWhitespace = (code, from) => {
88
+ let mut_index = from;
89
+ while (mut_index < code.length && isWhitespace(code[mut_index])) {
90
+ mut_index += 1;
91
+ }
92
+ return mut_index;
93
+ };
94
+ const skipWhitespaceBackward = (code, end) => {
95
+ let mut_index = end;
96
+ while (mut_index > 0 && isWhitespace(code[mut_index - 1])) {
97
+ mut_index -= 1;
98
+ }
99
+ return mut_index;
100
+ };
101
+ const indexOfLineTerminator = (code, from) => {
102
+ let mut_index = from;
103
+ while (mut_index < code.length && !isLineTerminator(code[mut_index])) {
104
+ mut_index += 1;
105
+ }
106
+ return mut_index < code.length ? mut_index : -1;
107
+ };
108
+
109
+ const isWhitespace = (char) => char !== undefined && /^\s$/u.test(char);
110
+
111
+ const isLineTerminator = (char) => char !== undefined && /^[\n\r\u{2028}\u{2029}]$/u.test(char);
61
112
  export const transformSourceCode = (code, isTsx, transformers, debug = false) => {
62
113
  const project = new tsm.Project({
63
114
  useInMemoryFileSystem: true,
@@ -68,9 +119,10 @@ export const transformSourceCode = (code, isTsx, transformers, debug = false) =>
68
119
  },
69
120
  });
70
121
  const sourceAst = project.createSourceFile(`source.${isTsx ? 'tsx' : 'ts'}`, code);
122
+ const ignoredTransformers = findFileIgnoreTransformers(code);
71
123
  for (const transformer of transformers) {
72
124
  const transformerName = transformer.name;
73
- if (shouldSkipFile(code, transformerName)) {
125
+ if (shouldSkipFile(ignoredTransformers, transformerName)) {
74
126
  if (debug) {
75
127
  console.debug(`skipped by ignore-file comment for transformer: ${transformerName}`);
76
128
  }
@@ -1 +1 @@
1
- {"version":3,"file":"transform-source-code.mjs","sourceRoot":"","sources":["../../../src/functions/ast-transformers/transform-source-code.mts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"transform-source-code.mjs","sourceRoot":"","sources":["../../../src/functions/ast-transformers/transform-source-code.mts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"should-avoid-parentheses-for-readonly.d.mts","sourceRoot":"","sources":["../../../src/functions/functions/should-avoid-parentheses-for-readonly.mts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAEhC;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,iCAAiC,SAAU,GAAG,CAAC,IAAI,KAAG,OAYlE,CAAC"}
1
+ {"version":3,"file":"should-avoid-parentheses-for-readonly.d.mts","sourceRoot":"","sources":["../../../src/functions/functions/should-avoid-parentheses-for-readonly.mts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAEhC;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,iCAAiC,SAAU,GAAG,CAAC,IAAI,KAAG,OAQlE,CAAC"}
@@ -14,13 +14,10 @@ import * as tsm from 'ts-morph';
14
14
 
15
15
  export const shouldAvoidParenthesesForReadonly = (node) => {
16
16
  const parent = node.getParent();
17
- if (parent === undefined) {
18
- return false;
19
- }
20
17
 
21
18
 
22
19
 
23
20
 
24
- return parent.isKind(tsm.SyntaxKind.TypePredicate);
21
+ return parent?.isKind(tsm.SyntaxKind.TypePredicate) ?? false;
25
22
  };
26
23
  //# sourceMappingURL=should-avoid-parentheses-for-readonly.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"should-avoid-parentheses-for-readonly.mjs","sourceRoot":"","sources":["../../../src/functions/functions/should-avoid-parentheses-for-readonly.mts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAEhC;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,iCAAiC,GAAG,CAAC,IAAc,EAAW,EAAE;IAC3E,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;IAEhC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,2CAA2C;IAC3C,mFAAmF;IACnF,gDAAgD;IAChD,mDAAmD;IACnD,OAAO,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AACrD,CAAC,CAAC"}
1
+ {"version":3,"file":"should-avoid-parentheses-for-readonly.mjs","sourceRoot":"","sources":["../../../src/functions/functions/should-avoid-parentheses-for-readonly.mts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAEhC;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,iCAAiC,GAAG,CAAC,IAAc,EAAW,EAAE;IAC3E,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;IAEhC,2CAA2C;IAC3C,mFAAmF;IACnF,gDAAgD;IAChD,mDAAmD;IACnD,OAAO,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC;AAC/D,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"wrap-with-parentheses.d.mts","sourceRoot":"","sources":["../../../src/functions/functions/wrap-with-parentheses.mts"],"names":[],"mappings":"AAsDA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,mBAAmB,YAAa,MAAM,KAAG,MAQrD,CAAC"}
1
+ {"version":3,"file":"wrap-with-parentheses.d.mts","sourceRoot":"","sources":["../../../src/functions/functions/wrap-with-parentheses.mts"],"names":[],"mappings":"AAsDA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,mBAAmB,YAAa,MAAM,KAAG,MAMrD,CAAC"}
@@ -65,9 +65,8 @@ const isWrappedWithParentheses = (str) => {
65
65
 
66
66
  export const wrapWithParentheses = (nodeStr) => {
67
67
  const trimmed = nodeStr.trim();
68
- if (isWrappedWithParentheses(trimmed)) {
69
- return trimmed;
70
- }
71
- return `(${trimmed})`;
68
+ return isWrappedWithParentheses(trimmed)
69
+ ? trimmed
70
+ : `(${trimmed})`;
72
71
  };
73
72
  //# 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,IAAI,wBAAwB,CAAC,OAAO,CAAC,EAAE,CAAC;QACtC,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,OAAO,IAAI,OAAO,GAAY,CAAC;AACjC,CAAC,CAAC"}
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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ts-codemod-lib",
3
- "version": "3.3.2",
3
+ "version": "3.3.3",
4
4
  "private": false,
5
5
  "keywords": [
6
6
  "typescript",
@@ -43,39 +43,39 @@
43
43
  "ts-type-forge": "^9.2.2"
44
44
  },
45
45
  "devDependencies": {
46
- "@types/node": "26.5.0",
47
- "@vitest/browser-playwright": "5.0.0",
48
- "@vitest/coverage-v8": "5.0.0",
49
- "@vitest/ui": "5.0.0",
50
- "cspell": "10.2.1",
46
+ "@types/node": "26.6.1",
47
+ "@vitest/browser-playwright": "5.0.1",
48
+ "@vitest/coverage-v8": "5.0.1",
49
+ "@vitest/ui": "5.0.1",
50
+ "cspell": "10.3.3",
51
51
  "dedent": "1.7.2",
52
52
  "esbuild": "0.28.2",
53
- "eslint": "10.9.1",
54
- "eslint-config-typed": "5.11.7",
55
- "eslint-plugin-ts-data-forge": "0.7.4",
56
- "eslint-plugin-ts-fortress": "1.2.2",
57
- "eslint-plugin-ts-type-forge": "0.8.3",
53
+ "eslint": "10.10.0",
54
+ "eslint-config-typed": "5.14.0",
55
+ "eslint-plugin-ts-data-forge": "0.8.1",
56
+ "eslint-plugin-ts-fortress": "1.2.3",
57
+ "eslint-plugin-ts-type-forge": "0.8.4",
58
58
  "jiti": "2.7.0",
59
59
  "npm-run-all2": "9.0.3",
60
- "playwright": "1.62.1",
61
- "prettier": "3.9.6",
60
+ "playwright": "1.63.0",
61
+ "prettier": "3.9.7",
62
62
  "prettier-plugin-organize-imports": "4.3.0",
63
63
  "prettier-plugin-packagejson": "3.0.2",
64
- "ts-repo-utils": "10.6.2",
64
+ "ts-repo-utils": "10.7.1",
65
65
  "tsx": "4.23.13",
66
66
  "typedoc": "0.28.20",
67
67
  "typedoc-github-theme": "0.4.0",
68
68
  "typescript": "6.0.3",
69
69
  "typescript-native": "npm:typescript@7.0.2",
70
- "vite": "8.2.2",
71
- "vitest": "5.0.0"
70
+ "vite": "8.3.0",
71
+ "vitest": "5.0.1"
72
72
  },
73
73
  "engines": {
74
74
  "node": ">=22.22.2",
75
75
  "pnpm": ">=9.0.0"
76
76
  },
77
77
  "volta": {
78
- "node": "26.8.1"
78
+ "node": "26.9.0"
79
79
  },
80
80
  "publishConfig": {
81
81
  "access": "public",
@@ -83,38 +83,39 @@
83
83
  },
84
84
  "scripts": {
85
85
  "build": "tsx --tsconfig ../../tools/configs/tsconfig.tsx.json ./scripts/cmd/build.mts",
86
- "build:min": "tsx --tsconfig ../../tools/configs/tsconfig.tsx.json ./scripts/cmd/build.mts --skip-check",
86
+ "check:cspell": "cspell \"**\" --gitignore --gitignore-root ../../ --no-progress",
87
+ "check:dist": "tsx --tsconfig ../../tools/configs/tsconfig.tsx.json ./scripts/cmd/check-dist.mts",
87
88
  "check:ext": "tsx --tsconfig ../../tools/configs/tsconfig.tsx.json ./scripts/cmd/check-ext.mts",
89
+ "check:lint": "eslint .",
90
+ "check:test": "pnpm run z:vitest:node run",
91
+ "check:test:browser": "pnpm run z:vitest --project='Browser' run",
92
+ "check:test:cov": "pnpm run z:vitest:node run --coverage",
93
+ "check:types": "node ../../node_modules/typescript-native/bin/tsc --noEmit",
88
94
  "check-all": "tsx --tsconfig ../../tools/configs/tsconfig.tsx.json ./scripts/cmd/check-all.mts",
89
95
  "clean": "pnpm run /clean:.*/",
90
96
  "clean:logs": "npx rimraf ./*.log",
91
- "codemod": "tsx --tsconfig ../../tools/configs/tsconfig.tsx.json ../ts-codemod-cli/src/cmd/ts-codemod.mts --uncommitted --transformer append-as-const --transformer convert-interface-to-type --transformer convert-to-readonly --transformer replace-any-with-unknown --transformer replace-record-with-unknown-record '{src,scripts,samples,test}/**/*.{mts,tsx}' && pnpm run fmt",
92
- "codemod:diff": "tsx --tsconfig ../../tools/configs/tsconfig.tsx.json ../ts-codemod-cli/src/cmd/ts-codemod.mts --diff-from origin/main --transformer append-as-const --transformer convert-interface-to-type --transformer convert-to-readonly --transformer replace-any-with-unknown --transformer replace-record-with-unknown-record '{src,scripts,samples,test}/**/*.{mts,tsx}' && pnpm run fmt",
93
- "codemod:full": "tsx --tsconfig ../../tools/configs/tsconfig.tsx.json ../ts-codemod-cli/src/cmd/ts-codemod.mts --transformer append-as-const --transformer convert-interface-to-type --transformer convert-to-readonly --transformer replace-any-with-unknown --transformer replace-record-with-unknown-record '{src,scripts,samples,test}/**/*.{mts,tsx}' && pnpm run fmt",
94
- "cspell": "cspell \"**\" --gitignore --gitignore-root ../../ --no-progress",
95
97
  "doc": "tsx --tsconfig ../../tools/configs/tsconfig.tsx.json ./scripts/cmd/gen-docs.mts",
96
- "doc:embed": "tsx --tsconfig ../../tools/configs/tsconfig.tsx.json ./scripts/cmd/embed-examples.mts",
97
- "doc:embed:jsdoc": "tsx --tsconfig ../../tools/configs/tsconfig.tsx.json ./scripts/cmd/embed-examples-in-jsdoc.mts",
98
98
  "doc:preview": "vite preview --config ./configs/vite.doc.config.mts",
99
- "doc:watch": "typedoc --options ./configs/typedoc.config.mjs --watch",
100
- "fmt": "tsx --tsconfig ../../tools/configs/tsconfig.tsx.json ../../libs/ts-repo-utils/src/cmd/format-uncommitted.mts --cwd .",
101
- "fmt:diff": "tsx --tsconfig ../../tools/configs/tsconfig.tsx.json ../../libs/ts-repo-utils/src/cmd/format-diff-from.mts origin/main --cwd .",
102
- "fmt:full": "prettier --write .",
103
- "gi": "run-s gi:src fmt",
104
- "gi:src": "tsx --tsconfig ../../tools/configs/tsconfig.tsx.json ../../libs/ts-repo-utils/src/cmd/gen-index-ts.mts ./src --index-ext .mts --export-ext .mjs --target-ext .mts --target-ext .tsx --exclude entry-point.mts",
105
- "lint": "eslint .",
106
- "lint:fix": "eslint . --fix",
107
- "prepare-release": "run-s fmt build doc",
99
+ "fix:codemod": "tsx --tsconfig ../../tools/configs/tsconfig.tsx.json ../ts-codemod-cli/src/cmd/ts-codemod.mts --uncommitted --transformer append-as-const --transformer convert-interface-to-type --transformer convert-to-readonly --transformer replace-any-with-unknown --transformer replace-record-with-unknown-record '{src,scripts,samples,test}/**/*.{mts,tsx}' && pnpm run fix:fmt",
100
+ "fix:codemod:diff": "tsx --tsconfig ../../tools/configs/tsconfig.tsx.json ../ts-codemod-cli/src/cmd/ts-codemod.mts --diff-from origin/main --transformer append-as-const --transformer convert-interface-to-type --transformer convert-to-readonly --transformer replace-any-with-unknown --transformer replace-record-with-unknown-record '{src,scripts,samples,test}/**/*.{mts,tsx}' && pnpm run fix:fmt",
101
+ "fix:codemod:full": "tsx --tsconfig ../../tools/configs/tsconfig.tsx.json ../ts-codemod-cli/src/cmd/ts-codemod.mts --transformer append-as-const --transformer convert-interface-to-type --transformer convert-to-readonly --transformer replace-any-with-unknown --transformer replace-record-with-unknown-record '{src,scripts,samples,test}/**/*.{mts,tsx}' && pnpm run fix:fmt",
102
+ "fix:fmt": "tsx --tsconfig ../../tools/configs/tsconfig.tsx.json ../../libs/ts-repo-utils/src/cmd/format-uncommitted.mts --cwd .",
103
+ "fix:fmt:diff": "tsx --tsconfig ../../tools/configs/tsconfig.tsx.json ../../libs/ts-repo-utils/src/cmd/format-diff-from.mts origin/main --cwd .",
104
+ "fix:fmt:full": "prettier --write .",
105
+ "fix:lint": "eslint . --fix",
106
+ "fmt": "pnpm run fix:fmt",
107
+ "gen": "run-s gen:index gen:readme gen:jsdoc",
108
+ "gen:index": "run-s gen:index:src fix:fmt",
109
+ "gen:index:src": "tsx --tsconfig ../../tools/configs/tsconfig.tsx.json ../../libs/ts-repo-utils/src/cmd/gen-index-ts.mts ./src --index-ext .mts --export-ext .mjs --target-ext .mts --target-ext .tsx --exclude entry-point.mts",
110
+ "gen:jsdoc": "tsx --tsconfig ../../tools/configs/tsconfig.tsx.json ./scripts/cmd/embed-examples-in-jsdoc.mts",
111
+ "gen:readme": "tsx --tsconfig ../../tools/configs/tsconfig.tsx.json ./scripts/cmd/embed-examples.mts",
108
112
  "run:test": "tsx --tsconfig ../../tools/configs/tsconfig.tsx.json ./scripts/test-code/transform-test-code.mts",
109
- "test": "pnpm run z:vitest:node run",
110
- "test:browser": "pnpm run z:vitest --project='Browser' run",
111
- "test:cov": "pnpm run z:vitest:node run --coverage",
113
+ "test": "pnpm run check:test",
112
114
  "test:cov:ui": "vite preview --outDir ./coverage",
113
115
  "test:ui": "pnpm run z:vitest:node --ui",
114
- "testw": "pnpm run z:vitest:node watch",
115
- "tsc": "node ../../node_modules/typescript-native/bin/tsc --noEmit",
116
- "tscw": "node ../../node_modules/typescript-native/bin/tsc --noEmit --watch -p ./tsconfig.json",
117
- "type-check": "node ../../node_modules/typescript-native/bin/tsc --noEmit",
116
+ "watch:doc": "typedoc --options ./configs/typedoc.config.mjs --watch",
117
+ "watch:test": "pnpm run z:vitest:node watch",
118
+ "watch:types": "node ../../node_modules/typescript-native/bin/tsc --noEmit --watch -p ./tsconfig.json",
118
119
  "z:vitest": "vitest --config ./configs/vitest.config.mts",
119
120
  "z:vitest:node": "pnpm run z:vitest --project='Node.js'"
120
121
  }
@@ -362,28 +362,30 @@ const transformNode = (
362
362
  return;
363
363
  }
364
364
 
365
- if (tsm.Node.isConditionalExpression(node)) {
366
- // For conditional expressions, traverse both branches in a non-const context
367
- transformNode(
368
- node.getWhenTrue(),
369
- {
370
- isDirectUnderConstInitializer: context.isDirectUnderConstInitializer,
371
- isUnderConstContext: false,
372
- },
373
- options,
374
- );
365
+ if (!tsm.Node.isConditionalExpression(node)) {
366
+ return;
367
+ }
375
368
 
376
- transformNode(
377
- node.getWhenFalse(),
378
- {
379
- isDirectUnderConstInitializer: context.isDirectUnderConstInitializer,
380
- isUnderConstContext: false,
381
- },
382
- options,
383
- );
369
+ // For conditional expressions, traverse both branches in a non-const context
370
+ transformNode(
371
+ node.getWhenTrue(),
372
+ {
373
+ isDirectUnderConstInitializer: context.isDirectUnderConstInitializer,
374
+ isUnderConstContext: false,
375
+ },
376
+ options,
377
+ );
384
378
 
385
- // return;
386
- }
379
+ transformNode(
380
+ node.getWhenFalse(),
381
+ {
382
+ isDirectUnderConstInitializer: context.isDirectUnderConstInitializer,
383
+ isUnderConstContext: false,
384
+ },
385
+ options,
386
+ );
387
+
388
+ // return;
387
389
  };
388
390
 
389
391
  /**
@@ -6,7 +6,6 @@ import dedent from 'dedent';
6
6
  import * as prettierPluginEstree from 'prettier/plugins/estree';
7
7
  import * as prettierPluginTypeScript from 'prettier/plugins/typescript';
8
8
  import * as prettier from 'prettier/standalone';
9
- import { isString } from 'ts-data-forge';
10
9
  import {
11
10
  convertToReadonlyTransformer,
12
11
  type ReadonlyTransformerOptions,
@@ -64,15 +63,8 @@ const normalizeWhitespaceForComparison = (code: string): string => {
64
63
  // 1. Protect newlines immediately following line comments
65
64
  const protectedCode = code.replaceAll(
66
65
  /(\/\/.*?)\r?\n/gu,
67
- // The strict standard library types a capture group as `unknown`: an
68
- // optional group is `undefined` when it does not participate, so `string`
69
- // is not something the signature can promise. This group is not optional,
70
- // so the narrowing never actually fails — it just has to be written.
71
- (match: string, ...args: readonly unknown[]): string => {
72
- const comment = args[0];
73
-
74
- return isString(comment) ? `${comment}${placeholder}` : match;
75
- },
66
+ (match: string, comment: string | undefined): string =>
67
+ comment === undefined ? match : `${comment}${placeholder}`,
76
68
  );
77
69
 
78
70
  // 2. Collapse multiple whitespace characters (including unprotected newlines) into a single space
@@ -84,7 +84,7 @@ const transformInProject = (
84
84
  * off. A case that went through it therefore paid for the whole default
85
85
  * library, `lib.esnext.full.d.ts` with the DOM inside it, being parsed and
86
86
  * checked from scratch: ~300 ms a case, of which the file under test was a
87
- * fraction of a millisecond. Sixty of those took `test:cov` past Vitest's
87
+ * fraction of a millisecond. Sixty of those took `check:test:cov` past Vitest's
88
88
  * timeout on CI.
89
89
  *
90
90
  * Reusing the project is half of the answer and the smaller half — measured,
@@ -44,9 +44,7 @@ const processDeclarations = (
44
44
 
45
45
  const typeNode = typeAlias.getTypeNode();
46
46
 
47
- if (typeNode === undefined) return false;
48
-
49
- return visitTypeNode(typeNode);
47
+ return typeNode !== undefined && visitTypeNode(typeNode);
50
48
  });
51
49
 
52
50
  const interfaceModifications = container
@@ -103,9 +101,7 @@ const processInterfaceDeclaration = (
103
101
  .map((property) => {
104
102
  const typeNode = property.getTypeNode();
105
103
 
106
- if (typeNode === undefined) return false;
107
-
108
- return visitTypeNode(typeNode);
104
+ return typeNode !== undefined && visitTypeNode(typeNode);
109
105
  })
110
106
  .includes(true);
111
107
  };
@@ -170,13 +166,13 @@ const visitTypeNode = (node: tsm.TypeNode): boolean => {
170
166
  if (tsm.Node.isPropertySignature(member)) {
171
167
  const typeNode = member.getTypeNode();
172
168
 
173
- return typeNode === undefined ? false : visitTypeNode(typeNode);
169
+ return typeNode !== undefined && visitTypeNode(typeNode);
174
170
  }
175
171
 
176
172
  if (tsm.Node.isIndexSignatureDeclaration(member)) {
177
173
  const typeNode = member.getReturnTypeNode();
178
174
 
179
- return typeNode === undefined ? false : visitTypeNode(typeNode);
175
+ return typeNode !== undefined && visitTypeNode(typeNode);
180
176
  }
181
177
 
182
178
  return false;
@@ -202,19 +198,12 @@ const visitTypeNode = (node: tsm.TypeNode): boolean => {
202
198
  }
203
199
 
204
200
  // Handles `readonly T[]`, `readonly [...]`, `keyof T`
205
- if (tsm.Node.isTypeOperatorTypeNode(node)) {
206
- return visitTypeNode(node.getTypeNode());
207
- }
208
-
209
- if (tsm.Node.isRestTypeNode(node)) {
210
- return visitTypeNode(node.getTypeNode());
211
- }
212
-
213
- if (tsm.Node.isNamedTupleMember(node)) {
214
- return visitTypeNode(node.getTypeNode());
215
- }
216
-
217
- return false;
201
+ return (
202
+ (tsm.Node.isTypeOperatorTypeNode(node) ||
203
+ tsm.Node.isRestTypeNode(node) ||
204
+ tsm.Node.isNamedTupleMember(node)) &&
205
+ visitTypeNode(node.getTypeNode())
206
+ );
218
207
  };
219
208
 
220
209
  const isStringUnknownIndexSignature = (
@@ -305,7 +294,9 @@ const ensureUnknownRecordImport = (sourceFile: tsm.SourceFile): void => {
305
294
  .getNamedImports()
306
295
  .some((ni) => ni.getName() === UNKNOWN_RECORD_NAME);
307
296
 
308
- if (alreadyImported) return;
297
+ if (alreadyImported) {
298
+ return;
299
+ }
309
300
 
310
301
  existingImport.addNamedImport({
311
302
  name: UNKNOWN_RECORD_NAME,
@@ -2,80 +2,179 @@ import { Arr } from 'ts-data-forge';
2
2
  import * as tsm from 'ts-morph';
3
3
  import { type TsMorphTransformer } from './types.mjs';
4
4
 
5
- const extractFileIgnoreTransformers = (code: string): readonly string[] => {
6
- // Try to find any of the supported file-level ignore comment prefixes
7
- const patterns = [
8
- {
9
- prefix: 'transformer-ignore',
10
- regex: /\/\*\s*transformer-ignore\s*(.*?)\s*\*\//u,
11
- },
12
- {
13
- prefix: 'ts-codemod-ignore',
14
- regex: /\/\*\s*ts-codemod-ignore\s*(.*?)\s*\*\//u,
15
- },
16
- {
17
- prefix: 'codemod-ignore',
18
- regex: /\/\*\s*codemod-ignore\s*(.*?)\s*\*\//u,
19
- },
20
- {
21
- prefix: 'transform-ignore',
22
- regex: /\/\*\s*transform-ignore\s*(.*?)\s*\*\//u,
23
- },
24
- ] as const;
5
+ const fileIgnorePrefixes = [
6
+ 'transformer-ignore',
7
+ 'ts-codemod-ignore',
8
+ 'codemod-ignore',
9
+ 'transform-ignore',
10
+ ] as const;
11
+
12
+ /**
13
+ * Finds the file-level ignore comment `/* <prefix> name, name *\/` and returns
14
+ * the transformer names it lists (empty for all transformers), or `undefined`
15
+ * when the file has none. Whitespace, line breaks included, may surround the
16
+ * prefix and the names, but the names themselves must stay on one line. The
17
+ * prefixes are tried in order, each against the whole file.
18
+ *
19
+ * The scan runs in time linear in the length of `code`, whatever it contains.
20
+ */
21
+ const findFileIgnoreTransformers = (
22
+ code: string,
23
+ ): readonly string[] | undefined => {
24
+ for (const prefix of fileIgnorePrefixes) {
25
+ const names = findFileIgnoreComment(code, prefix);
26
+
27
+ if (names !== undefined) {
28
+ return names;
29
+ }
30
+ }
25
31
 
26
- for (const { regex } of patterns) {
27
- const match = regex.exec(code);
32
+ return undefined;
33
+ };
28
34
 
29
- if (match !== null) {
30
- const targetTransformers = match[1]?.trim() ?? '';
35
+ const findFileIgnoreComment = (
36
+ code: string,
37
+ prefix: string,
38
+ ): readonly string[] | undefined => {
39
+ // Queries into these searches only move forward, so each part of `code` is
40
+ // scanned a bounded number of times.
41
+ const findCommentEnd = createForwardSearch((from) =>
42
+ code.indexOf('*/', from),
43
+ );
31
44
 
32
- // Empty means ignore all transformers
33
- if (targetTransformers === '') {
34
- return [];
35
- }
45
+ const findLineTerminator = createForwardSearch((from) =>
46
+ indexOfLineTerminator(code, from),
47
+ );
48
+
49
+ const trimEndBefore = createLastValueCache((commentEnd: number) =>
50
+ skipWhitespaceBackward(code, commentEnd),
51
+ );
52
+
53
+ for (
54
+ let mut_open = code.indexOf('/*');
55
+ mut_open !== -1;
56
+ mut_open = code.indexOf('/*', mut_open + 2)
57
+ ) {
58
+ const prefixStart = skipWhitespace(code, mut_open + 2);
59
+
60
+ if (!code.startsWith(prefix, prefixStart)) {
61
+ continue;
62
+ }
63
+
64
+ const namesStart = skipWhitespace(code, prefixStart + prefix.length);
65
+
66
+ const commentEnd = findCommentEnd(namesStart);
67
+
68
+ // Nothing after this point is closed, so no later comment can match.
69
+ if (commentEnd === -1) {
70
+ return undefined;
71
+ }
72
+
73
+ const namesEnd = Math.max(namesStart, trimEndBefore(commentEnd));
36
74
 
37
- // Parse comma-separated transformer names
38
- return targetTransformers.split(',').map((name) => name.trim());
75
+ const lineTerminator = findLineTerminator(namesStart);
76
+
77
+ if (lineTerminator === -1 || lineTerminator >= namesEnd) {
78
+ const names = code.slice(namesStart, namesEnd);
79
+
80
+ // Empty means ignore all transformers; otherwise parse comma-separated
81
+ // transformer names
82
+ return names === '' ? [] : names.split(',').map((name) => name.trim());
39
83
  }
40
84
  }
41
85
 
42
- return [];
86
+ return undefined;
43
87
  };
44
88
 
45
89
  const shouldSkipFile = (
46
- code: string,
47
- transformerName: string | undefined,
48
- ): boolean => {
49
- const ignoredTransformers = extractFileIgnoreTransformers(code);
50
-
51
- // If no file-level ignore comment found, don't skip
52
- const patterns = [
53
- /\/\*\s*transformer-ignore\s*.*?\s*\*\//u,
54
- /\/\*\s*ts-codemod-ignore\s*.*?\s*\*\//u,
55
- /\/\*\s*codemod-ignore\s*.*?\s*\*\//u,
56
- /\/\*\s*transform-ignore\s*.*?\s*\*\//u,
57
- ] as const;
58
-
59
- const hasFileIgnoreComment = patterns.some((regex) => regex.test(code));
60
-
61
- if (!hasFileIgnoreComment && Arr.isEmpty(ignoredTransformers)) {
62
- return false;
90
+ ignoredTransformers: readonly string[] | undefined,
91
+ transformerName: string,
92
+ ): boolean =>
93
+ ignoredTransformers !== undefined &&
94
+ // Empty array means ignore all transformers (file-level ignore without
95
+ // specific transformers); otherwise check if the transformer is in the
96
+ // ignore list
97
+ (Arr.isEmpty(ignoredTransformers) ||
98
+ ignoredTransformers.includes(transformerName));
99
+
100
+ /**
101
+ * Wraps a search returning the first index at or after `from` (or -1), reusing
102
+ * the previous answer while it still holds for a later `from`.
103
+ */
104
+ const createForwardSearch = (
105
+ search: (from: number) => number,
106
+ ): ((from: number) => number) => {
107
+ let mut_from = Number.POSITIVE_INFINITY;
108
+
109
+ let mut_found = -1;
110
+
111
+ return (from) => {
112
+ if (from < mut_from || (mut_found !== -1 && from > mut_found)) {
113
+ mut_from = from;
114
+
115
+ mut_found = search(from);
116
+ }
117
+
118
+ return mut_found;
119
+ };
120
+ };
121
+
122
+ const createLastValueCache = (
123
+ fn: (arg: number) => number,
124
+ ): ((arg: number) => number) => {
125
+ let mut_arg: number | undefined = undefined;
126
+
127
+ let mut_value = 0;
128
+
129
+ return (arg) => {
130
+ if (arg !== mut_arg) {
131
+ mut_arg = arg;
132
+
133
+ mut_value = fn(arg);
134
+ }
135
+
136
+ return mut_value;
137
+ };
138
+ };
139
+
140
+ const skipWhitespace = (code: string, from: number): number => {
141
+ let mut_index = from;
142
+
143
+ while (mut_index < code.length && isWhitespace(code[mut_index])) {
144
+ mut_index += 1;
63
145
  }
64
146
 
65
- // Empty array means ignore all transformers (file-level ignore without specific transformers)
66
- if (Arr.isEmpty(ignoredTransformers)) {
67
- return true;
147
+ return mut_index;
148
+ };
149
+
150
+ const skipWhitespaceBackward = (code: string, end: number): number => {
151
+ let mut_index = end;
152
+
153
+ while (mut_index > 0 && isWhitespace(code[mut_index - 1])) {
154
+ mut_index -= 1;
68
155
  }
69
156
 
70
- // If transformer name is not specified, don't skip
71
- if (transformerName === undefined) {
72
- return false;
157
+ return mut_index;
158
+ };
159
+
160
+ const indexOfLineTerminator = (code: string, from: number): number => {
161
+ let mut_index = from;
162
+
163
+ while (mut_index < code.length && !isLineTerminator(code[mut_index])) {
164
+ mut_index += 1;
73
165
  }
74
166
 
75
- // Check if the transformer is in the ignore list
76
- return ignoredTransformers.includes(transformerName);
167
+ return mut_index < code.length ? mut_index : -1;
77
168
  };
78
169
 
170
+ // Same set as `\s` and `String.prototype.trim`
171
+ const isWhitespace = (char: string | undefined): boolean =>
172
+ char !== undefined && /^\s$/u.test(char);
173
+
174
+ // The characters `.` does not match
175
+ const isLineTerminator = (char: string | undefined): boolean =>
176
+ char !== undefined && /^[\n\r\u{2028}\u{2029}]$/u.test(char);
177
+
79
178
  export const transformSourceCode = (
80
179
  code: string,
81
180
  isTsx: boolean,
@@ -96,10 +195,12 @@ export const transformSourceCode = (
96
195
  code,
97
196
  );
98
197
 
198
+ const ignoredTransformers = findFileIgnoreTransformers(code);
199
+
99
200
  for (const transformer of transformers) {
100
201
  const transformerName = transformer.name;
101
202
 
102
- if (shouldSkipFile(code, transformerName)) {
203
+ if (shouldSkipFile(ignoredTransformers, transformerName)) {
103
204
  if (debug) {
104
205
  console.debug(
105
206
  `skipped by ignore-file comment for transformer: ${transformerName}`,
@@ -0,0 +1,123 @@
1
+ import { replaceAnyWithUnknownTransformer } from './replace-any-with-unknown.mjs';
2
+ import { transformSourceCode } from './transform-source-code.mjs';
3
+
4
+ const body = 'export const x: any = 1;\n';
5
+
6
+ const transformedBody = 'export const x: unknown = 1;\n';
7
+
8
+ const transform = (code: string): string =>
9
+ transformSourceCode(code, false, [replaceAnyWithUnknownTransformer()]);
10
+
11
+ describe('transformSourceCode file-level ignore comments', () => {
12
+ test.each([
13
+ {
14
+ name: 'no ignore comment',
15
+ header: '',
16
+ skipped: false,
17
+ },
18
+ {
19
+ name: 'ignore all transformers',
20
+ header: '/* transformer-ignore */\n',
21
+ skipped: true,
22
+ },
23
+ {
24
+ name: 'ignore all transformers without spaces',
25
+ header: '/*transformer-ignore*/\n',
26
+ skipped: true,
27
+ },
28
+ {
29
+ name: 'ignore the running transformer',
30
+ header: '/* transformer-ignore replace-any-with-unknown */\n',
31
+ skipped: true,
32
+ },
33
+ {
34
+ name: 'ignore the running transformer among others',
35
+ header:
36
+ '/* transformer-ignore append-as-const, replace-any-with-unknown */\n',
37
+ skipped: true,
38
+ },
39
+ {
40
+ name: 'ignore another transformer only',
41
+ header: '/* transformer-ignore append-as-const */\n',
42
+ skipped: false,
43
+ },
44
+ {
45
+ name: 'ts-codemod-ignore prefix',
46
+ header: '/* ts-codemod-ignore */\n',
47
+ skipped: true,
48
+ },
49
+ {
50
+ name: 'codemod-ignore prefix',
51
+ header: '/* codemod-ignore replace-any-with-unknown */\n',
52
+ skipped: true,
53
+ },
54
+ {
55
+ name: 'transform-ignore prefix',
56
+ header: '/* transform-ignore */\n',
57
+ skipped: true,
58
+ },
59
+ {
60
+ name: 'names on the first line and the terminator on the next',
61
+ header: '/* transformer-ignore replace-any-with-unknown\n */\n',
62
+ skipped: true,
63
+ },
64
+ {
65
+ name: 'prefix on the first line and names on the next',
66
+ header: '/*\n transformer-ignore\n replace-any-with-unknown */\n',
67
+ skipped: true,
68
+ },
69
+ {
70
+ name: 'names spanning several lines are not an ignore comment',
71
+ header: '/* transformer-ignore append-as-const\n note */\n',
72
+ skipped: false,
73
+ },
74
+ {
75
+ name: 'an unterminated comment is not an ignore comment',
76
+ header: '// /* transformer-ignore\n',
77
+ skipped: false,
78
+ },
79
+ {
80
+ name: 'a later well-formed comment is found after a malformed one',
81
+ header:
82
+ '/* transformer-ignore a\n b */\n/* transformer-ignore replace-any-with-unknown */\n',
83
+ skipped: true,
84
+ },
85
+ {
86
+ name: 'prefixes are tried in order, not by position',
87
+ header:
88
+ '/* codemod-ignore */\n/* transformer-ignore append-as-const */\n',
89
+ skipped: false,
90
+ },
91
+ ] as const)('$name', ({ header, skipped }) => {
92
+ assert.strictEqual(
93
+ transform(`${header}${body}`),
94
+ `${header}${skipped ? body : transformedBody}`,
95
+ );
96
+ });
97
+
98
+ test(
99
+ 'finishes in linear time on long whitespace runs in unterminated comments',
100
+ { timeout: 2000 },
101
+ () => {
102
+ const header = `/* transformer-ignore${' '.repeat(2000)}x\nnote */\n`;
103
+
104
+ assert.strictEqual(
105
+ transform(`${header}${body}`),
106
+ `${header}${transformedBody}`,
107
+ );
108
+ },
109
+ );
110
+
111
+ test(
112
+ 'finishes in linear time on many unterminated comments in one line',
113
+ { timeout: 2000 },
114
+ () => {
115
+ const header = `export const s = \`${'/* transformer-ignore x '.repeat(10_000)}\`;\n`;
116
+
117
+ assert.strictEqual(
118
+ transform(`${header}${body}`),
119
+ `${header}${transformedBody}`,
120
+ );
121
+ },
122
+ );
123
+ });
@@ -16,13 +16,9 @@ import * as tsm from 'ts-morph';
16
16
  export const shouldAvoidParenthesesForReadonly = (node: tsm.Node): boolean => {
17
17
  const parent = node.getParent();
18
18
 
19
- if (parent === undefined) {
20
- return false;
21
- }
22
-
23
19
  // Check if parent is TypePredicate: x is T
24
20
  // In this case, we MUST avoid parentheses: x is readonly T (not x is (readonly T))
25
21
  // because `x is (readonly T)` is a syntax error
26
22
  // For all other cases, keep parentheses for safety
27
- return parent.isKind(tsm.SyntaxKind.TypePredicate);
23
+ return parent?.isKind(tsm.SyntaxKind.TypePredicate) ?? false;
28
24
  };
@@ -76,9 +76,7 @@ const isWrappedWithParentheses = (str: string): boolean => {
76
76
  export const wrapWithParentheses = (nodeStr: string): string => {
77
77
  const trimmed = nodeStr.trim();
78
78
 
79
- if (isWrappedWithParentheses(trimmed)) {
80
- return trimmed;
81
- }
82
-
83
- return `(${trimmed})` as const;
79
+ return isWrappedWithParentheses(trimmed)
80
+ ? trimmed
81
+ : (`(${trimmed})` as const);
84
82
  };