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.
- package/README.md +16 -16
- package/dist/functions/ast-transformers/append-as-const.mjs +11 -10
- package/dist/functions/ast-transformers/append-as-const.mjs.map +1 -1
- package/dist/functions/ast-transformers/replace-record-with-unknown-record.mjs +10 -19
- package/dist/functions/ast-transformers/replace-record-with-unknown-record.mjs.map +1 -1
- package/dist/functions/ast-transformers/transform-source-code.d.mts.map +1 -1
- package/dist/functions/ast-transformers/transform-source-code.mjs +101 -49
- package/dist/functions/ast-transformers/transform-source-code.mjs.map +1 -1
- package/dist/functions/functions/should-avoid-parentheses-for-readonly.d.mts.map +1 -1
- package/dist/functions/functions/should-avoid-parentheses-for-readonly.mjs +1 -4
- package/dist/functions/functions/should-avoid-parentheses-for-readonly.mjs.map +1 -1
- package/dist/functions/functions/wrap-with-parentheses.d.mts.map +1 -1
- package/dist/functions/functions/wrap-with-parentheses.mjs +3 -4
- package/dist/functions/functions/wrap-with-parentheses.mjs.map +1 -1
- package/package.json +41 -40
- package/src/functions/ast-transformers/append-as-const.mts +22 -20
- package/src/functions/ast-transformers/convert-to-readonly.test.mts +2 -10
- package/src/functions/ast-transformers/enable-no-unchecked-indexed-access.test.mts +1 -1
- package/src/functions/ast-transformers/replace-record-with-unknown-record.mts +13 -22
- package/src/functions/ast-transformers/transform-source-code.mts +158 -57
- package/src/functions/ast-transformers/transform-source-code.test.mts +123 -0
- package/src/functions/functions/should-avoid-parentheses-for-readonly.mts +1 -5
- package/src/functions/functions/wrap-with-parentheses.mts +3 -5
package/README.md
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
[](https://github.com/noshiro-pf/mono/blob/main/libs/ts-codemod-lib/LICENSE)
|
|
6
6
|
[](https://codecov.io/gh/noshiro-pf/mono)
|
|
7
7
|
|
|
8
|
-
A TypeScript library for code transformations using AST (Abstract Syntax Tree) transformers, powered by
|
|
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 `
|
|
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
|
-
|
|
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
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
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
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
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":"AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAEhC,OAAO,EACL,yBAAyB,EACzB,aAAa,GACd,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAG/D,MAAM,gBAAgB,GAAG,iBAAiB,CAAC;AAE3C,MAAM,CAAC,MAAM,wBAAwB,GAAG,CACtC,OAAyC,EACrB,EAAE;IACtB,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,CAChC,OAAO,EAAE,cAAc,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAC/D,CAAC;IAEF,MAAM,eAAe,GAA4C;QAC/D,UAAU,EAAE,OAAO,EAAE,UAAU,IAAI,qBAAqB;QACxD,eAAe,EAAE,cAAc;QAC/B,mCAAmC,EACjC,OAAO,EAAE,mCAAmC,IAAI,IAAI;QAEtD,UAAU,EAAE,OAAO,EAAE,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,GAAE,CAAC;QAC9D,WAAW,EACT,OAAO,EAAE,KAAK,KAAK,IAAI;YACrB,CAAC,CAAC,yBAAyB;YAC3B,CAAC,CAAC,CAAC,IAAI,EAAE,WAAW,EAAE,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC;KACtD,CAAC;IAEX,OAAO;QACL,IAAI,EAAE,gBAAgB;QACtB,SAAS,EAAE,CAAC,SAAS,EAAE,EAAE;YACvB,KAAK,MAAM,IAAI,IAAI,SAAS,CAAC,oBAAoB,CAC/C,GAAG,CAAC,UAAU,CAAC,mBAAmB,CACnC,EAAE,CAAC;gBACF,aAAa,CACX,IAAI,EACJ;oBACE,mBAAmB,EAAE,KAAK;oBAC1B,6BAA6B,EAAE,KAAK;iBACrC,EACD,eAAe,CAChB,CAAC;YACJ,CAAC;YAED,IAAI,eAAe,CAAC,mCAAmC,EAAE,CAAC;gBACxD,qCAAqC,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;YACpE,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC,CAAC;AA8DF,MAAM,aAAa,GAAG,CACpB,IAAc,EACd,OAAuB,EACvB,OAAgD,EAC1C,EAAE;IACR,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC;QACxB,OAAO;IACT,CAAC;IAED,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;IAEpE,IAAI,yBAAyB,CAAC,IAAI,EAAE,gBAAgB,CAAC,EAAE,CAAC;QACtD,OAAO,CAAC,UAAU,CAAC,sCAAsC,CAAC,CAAC;QAE3D,OAAO;IACT,CAAC;IAED,IACE,OAAO,CAAC,UAAU,KAAK,qBAAqB;QAC5C,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAC/B,CAAC;QACD,OAAO;IACT,CAAC;IAED,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,mBAAmB,CAAC,EAAE,CAAC;QACpD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QAEhC,yBAAyB;QACzB,IAAI,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAChE,kEAAkE;YAClE,wFAAwF;YACxF,OAAO,CAAC,UAAU,CAAC,gDAAgD,CAAC,CAAC;YAErE,OAAO;QACT,CAAC;QAED,MAAM,iBAAiB,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAEtD,IACE,iBAAiB,KAAK,SAAS;YAC/B,yBAAyB,CAAC,iBAAiB,EAAE,gBAAgB,CAAC,EAC9D,CAAC;YACD,OAAO;QACT,CAAC;QAED,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QAE1C,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YAC9B,OAAO;QACT,CAAC;QAED,MAAM,uBAAuB,GAAG,IAAI;aACjC,oBAAoB,EAAE;YACvB,EAAE,0BAA0B,EAAE;aAC7B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QAE3B,IACE,uBAAuB,KAAK,SAAS;YACrC,GAAG,CAAC,kBAAkB,CAAC,CAAC,EAAE,uBAAuB,CAAC,EAClD,CAAC;YACD,aAAa,CACX,WAAW,EACX;gBACE,6BAA6B,EAAE,uBAAuB,CAAC,CAAC,CAAC,KAAK,OAAO;gBACrE,mBAAmB,EAAE,KAAK;aAC3B,EACD,OAAO,CACR,CAAC;YAEF,OAAO;QACT,CAAC;QAED,sBAAsB;QACtB,uDAAuD;QACvD,4CAA4C;QAC5C,0DAA0D;QAC1D,IAAI;QAEJ,wBAAwB;QACxB,wDAAwD;QACxD,6CAA6C;QAC7C,0DAA0D;QAC1D,IAAI;IACN,CAAC;IAED,mCAAmC;IACnC,IAAI,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1D,OAAO;IACT,CAAC;IAED,uBAAuB;IACvB,IAAI,GAAG,CAAC,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7C,aAAa,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QAEtD,OAAO;IACT,CAAC;IAED,mCAAmC;IACnC,IAAI,GAAG,CAAC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,EAAE,CAAC;QACzC,aAAa,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QAEtD,OAAO;IACT,CAAC;IAED,uDAAuD;IACvD,IAAI,GAAG,CAAC,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC;QACxC,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QAE1C,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YAC9B,aAAa,CAAC,WAAW,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QAC/C,CAAC;QAED,OAAO;IACT,CAAC;IAED,+CAA+C;IAC/C,IAAI,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;QACnC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QAE5B,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QAEtC,OAAO;IACT,CAAC;IAED,uCAAuC;IACvC,IAAI,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;QACnC,aAAa,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QAEtD,OAAO;IACT,CAAC;IAED,IACE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,6BAA6B,CAAC,IAAI,QAAQ;QACrE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,cAAc,CAAC,IAAI,MAAM;QACpD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,aAAa,CAAC,IAAI,OAAO;QACpD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,aAAa,CAAC,IAAI,QAAQ;QACrD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,OAAO;QAClD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,QAAQ;MACjD,CAAC;QACD,IACE,CAAC,OAAO,CAAC,6BAA6B;YACtC,CAAC,OAAO,CAAC,mBAAmB,EAC5B,CAAC;YACD,OAAO,CAAC,WAAW,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QAC1D,CAAC;QAED,OAAO;IACT,CAAC;IAED,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,kBAAkB,CAAC,EAAE,CAAC;QACnD,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,CAAC;YACjC,OAAO,CAAC,WAAW,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QAC1D,CAAC;QAED,OAAO;IACT,CAAC;IAED,IAAI,GAAG,CAAC,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5C,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YACpC,aAAa,CACX,EAAE,EACF;gBACE,mBAAmB,EAAE,IAAI,EAAE,iBAAiB;gBAC5C,6BAA6B,EAAE,KAAK;aACrC,EACD,OAAO,CACR,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,CAAC;YACjC,OAAO,CAAC,WAAW,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QAC1D,CAAC;QAED,OAAO;IACT,CAAC;IAED,IAAI,GAAG,CAAC,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7C,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC;YACtC,aAAa,CACX,EAAE,EACF;gBACE,mBAAmB,EAAE,IAAI,EAAE,iBAAiB;gBAC5C,6BAA6B,EAAE,KAAK;aACrC,EACD,OAAO,CACR,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,CAAC;YACjC,OAAO,CAAC,WAAW,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QAC1D,CAAC;QAED,OAAO;IACT,CAAC;IAED,kBAAkB;IAClB,IAAI,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;QACxB,IAAI,OAAO,CAAC,6BAA6B,EAAE,CAAC;YAC1C,gGAAgG;YAEhG,aAAa,CACX,IAAI,CAAC,aAAa,EAAE,EACpB;gBACE,mBAAmB,EAAE,KAAK;gBAC1B,6BAA6B,EAAE,IAAI;aACpC,EACD,OAAO,CACR,CAAC;YAEF,OAAO,CAAC,WAAW,CACjB,IAAI;YACJ,0CAA0C;YAC1C,IAAI,CAAC,aAAa,EAAE,CAAC,OAAO,EAAE,CAC/B,CAAC,CAAC,oBAAoB;YAEvB,OAAO;QACT,CAAC;QAED,IAAI,OAAO,CAAC,mBAAmB,EAAE,CAAC;YAChC,aAAa,CACX,IAAI,CAAC,aAAa,EAAE,EACpB;gBACE,mBAAmB,EAAE,IAAI;gBACzB,6BAA6B,EAAE,KAAK;aACrC,EACD,OAAO,CACR,CAAC;YAEF,OAAO,CAAC,WAAW,CACjB,IAAI;YACJ,0CAA0C;YAC1C,IAAI,CAAC,aAAa,EAAE,CAAC,OAAO,EAAE,CAC/B,CAAC,CAAC,oBAAoB;YAEvB,OAAO;QACT,CAAC;QAED,aAAa,CACX,IAAI,CAAC,aAAa,EAAE,EACpB;YACE,mBAAmB,EAAE,IAAI;YACzB,6BAA6B,EAAE,KAAK;SACrC,EACD,OAAO,CACR,CAAC;QAEF,OAAO;IACT,CAAC;IAED,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5C,OAAO;IACT,CAAC;IAED,6EAA6E;IAC7E,aAAa,CACX,IAAI,CAAC,WAAW,EAAE,EAClB;QACE,6BAA6B,EAAE,OAAO,CAAC,6BAA6B;QACpE,mBAAmB,EAAE,KAAK;KAC3B,EACD,OAAO,CACR,CAAC;IAEF,aAAa,CACX,IAAI,CAAC,YAAY,EAAE,EACnB;QACE,6BAA6B,EAAE,OAAO,CAAC,6BAA6B;QACpE,mBAAmB,EAAE,KAAK;KAC3B,EACD,OAAO,CACR,CAAC;IAEF,UAAU;AACZ,CAAC,CAAC;AAEF;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,qCAAqC,GAAG;AAC5C,8EAA8E;AAC9E,SAAyB,EACzB,OAAgD,EAC1C,EAAE;IACR,oEAAoE;IACpE,uEAAuE;IACvE,KAAK,MAAM,IAAI,IAAI,SAAS;SACzB,oBAAoB,CAAC,GAAG,CAAC,UAAU,CAAC,cAAc,CAAC;SACnD,UAAU,EAAE,EAAE,CAAC;QAChB,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC;YACxB,SAAS;QACX,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QAEjC,6DAA6D;QAC7D,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;YAC9B,SAAS;QACX,CAAC;QAED,IAAI,yBAAyB,CAAC,IAAI,EAAE,gBAAgB,CAAC,EAAE,CAAC;YACtD,SAAS;QACX,CAAC;QAED,MAAM,iBAAiB,GAAG,IAAI,CAAC,sBAAsB,CACnD,GAAG,CAAC,UAAU,CAAC,iBAAiB,CACjC,CAAC;QAEF,IACE,iBAAiB,KAAK,SAAS;YAC/B,yBAAyB,CAAC,iBAAiB,EAAE,gBAAgB,CAAC,EAC9D,CAAC;YACD,SAAS;QACX,CAAC;QAED,uEAAuE;QACvE,yCAAyC;QACzC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,EAAE,CAAC;YAC1C,SAAS;QACX,CAAC;QAED,MAAM,UAAU,GAAG,gCAAgC,CAAC,IAAI,CAAC,CAAC;QAE1D,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;YAC7B,SAAS;QACX,CAAC;QAED,uBAAuB,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;IACrD,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,uBAAuB,GAAG,CAC9B,IAAyB;AACzB,8EAA8E;AAC9E,UAA8B,EAC9B,OAAgD,EAC1C,EAAE;IACR,yEAAyE;IACzE,wBAAwB;IACxB,MAAM,gBAAgB,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAC5C,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,aAAa,CAAC,CACvC,CAAC;IAEF,MAAM,gBAAgB,GACpB,gBAAgB,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,gBAAgB,CAAC;IAE3D,KAAK,MAAM,CAAC,aAAa,EAAE,QAAQ,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;QACvD,IAAI,aAAa,IAAI,gBAAgB,EAAE,CAAC;YACtC,OAAO;QACT,CAAC;QAED,IAAI,QAAQ,CAAC,YAAY,EAAE,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC;YACxD,SAAS;QACX,CAAC;QAED,IAAI,yBAAyB,CAAC,QAAQ,EAAE,gBAAgB,CAAC,EAAE,CAAC;YAC1D,SAAS;QACX,CAAC;QAED,MAAM,SAAS,GAAG,mBAAmB,CAAC,UAAU,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;QAE5E,IACE,SAAS,KAAK,SAAS;YACvB,CAAC,iCAAiC,CAChC,SAAS,EACT,UAAU,CAAC,uBAAuB,CACnC,EACD,CAAC;YACD,SAAS;QACX,CAAC;QAED,OAAO,CAAC,UAAU,CAChB,8DAA8D,EAC9D,QAAQ,CAAC,OAAO,EAAE,CACnB,CAAC;QAEF,OAAO,CAAC,WAAW,CAAC,QAAQ,EAAE,QAAQ,CAAC,aAAa,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;IACpE,CAAC;AACH,CAAC,CAAC;AAOF;;;;;;;;GAQG;AACH,MAAM,gCAAgC,GAAG;AACvC,8EAA8E;AAC9E,IAAwB,EACQ,EAAE;IAClC,yEAAyE;IACzE,sDAAsD;IACtD,yEAAyE;IACzE,wBAAwB;IACxB,IACE,CAAC,GAAG,CAAC,kBAAkB,CACrB,CAAC,EACD,IAAI,CAAC,aAAa,EAAE,CAAC,OAAO,EAAE,CAAC,iBAAiB,EAAE,CACnD,EACD,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,WAAW,GAAG,IAAI;SACrB,UAAU,EAAE;SACZ,cAAc,EAAE;SAChB,oBAAoB,CAAC,IAAI,CAAC;QAC3B,EAAE,cAAc,EAAE,CAAC;IAErB,IACE,WAAW,KAAK,SAAS;QACzB,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC;QACpC,CAAC,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,EACxC,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,yEAAyE;IACzE,yEAAyE;IACzE,wEAAwE;IACxE,MAAM,uBAAuB,GAAG,IAAI,CAAC,MAAM,CACzC,WAAW;SACR,iBAAiB,EAAE;SACnB,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;SAC3D,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAC7B,CAAC;IAEF,IAAI,uBAAuB,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACvC,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO;QACL,UAAU,EAAE,WAAW,CAAC,aAAa,EAAE;QACvC,uBAAuB;KACf,CAAC;AACb,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG;AAC1B,8EAA8E;AAC9E,UAA+C,EAC/C,aAAqB,EACiB,EAAE;IACxC,IAAI,aAAa,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC;QACtC,OAAO,UAAU,CAAC,aAAa,CAAC,CAAC;IACnC,CAAC;IAED,MAAM,aAAa,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAExC,OAAO,aAAa,EAAE,eAAe,EAAE,KAAK,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC;AAC/E,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,iCAAiC,GAAG;AACxC,8EAA8E;AAC9E,SAAmC,EACnC,uBAAqC,EAC5B,EAAE;IACX,MAAM,QAAQ,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC;IAEzC,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QACnD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,QAAQ,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;IAExC,OAAO,CACL,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC;QAC1C,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,EAAE,CAAC;QACxC,uBAAuB,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAChD,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -28,9 +28,7 @@ const processDeclarations = (container) => {
|
|
|
28
28
|
return false;
|
|
29
29
|
}
|
|
30
30
|
const typeNode = typeAlias.getTypeNode();
|
|
31
|
-
|
|
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
|
-
|
|
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
|
|
112
|
+
return typeNode !== undefined && visitTypeNode(typeNode);
|
|
117
113
|
}
|
|
118
114
|
if (tsm.Node.isIndexSignatureDeclaration(member)) {
|
|
119
115
|
const typeNode = member.getReturnTypeNode();
|
|
120
|
-
return 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
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
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":"AAAA,sGAAsG;AACtG,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AACpC,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AAGnE,MAAM,gBAAgB,GAAG,oCAAoC,CAAC;AAE9D,MAAM,qBAAqB,GAAG,eAAe,CAAC;AAE9C,MAAM,mBAAmB,GAAG,eAAe,CAAC;AAE5C;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,yCAAyC,GACpD,GAAuB,EAAE,CACvB,CAAC;IACC,IAAI,EAAE,gBAAgB;IACtB,SAAS,EAAE,CAAC,SAAS,EAAE,EAAE;QACvB,MAAM,sBAAsB,GAAG,GAAG,CAAC,WAAW,CAC5C,SAAS,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC,mBAAmB,CAAC,EAC/C,mBAAmB,CAAC,SAAS,CAAC,CAC/B,CAAC;QAEF,IAAI,sBAAsB,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1C,yBAAyB,CAAC,SAAS,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;CACF,CAAU,CAAC;AAEhB,MAAM,mBAAmB,GAAG,CAC1B,SAAiD,EACxC,EAAE;IACX,MAAM,sBAAsB,GAAG,SAAS,CAAC,cAAc,EAAE,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE;QAC1E,IAAI,yBAAyB,CAAC,SAAS,EAAE,gBAAgB,CAAC,EAAE,CAAC;YAC3D,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,QAAQ,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC;QAEzC,
|
|
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;
|
|
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
|
|
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
|
-
|
|
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
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
const
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
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
|
-
|
|
56
|
-
|
|
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
|
-
|
|
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(
|
|
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":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AACpC,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAGhC,MAAM,
|
|
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,
|
|
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
|
|
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,
|
|
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,
|
|
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
|
-
|
|
69
|
-
|
|
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,
|
|
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.
|
|
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.
|
|
47
|
-
"@vitest/browser-playwright": "5.0.
|
|
48
|
-
"@vitest/coverage-v8": "5.0.
|
|
49
|
-
"@vitest/ui": "5.0.
|
|
50
|
-
"cspell": "10.
|
|
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.
|
|
54
|
-
"eslint-config-typed": "5.
|
|
55
|
-
"eslint-plugin-ts-data-forge": "0.
|
|
56
|
-
"eslint-plugin-ts-fortress": "1.2.
|
|
57
|
-
"eslint-plugin-ts-type-forge": "0.8.
|
|
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.
|
|
61
|
-
"prettier": "3.9.
|
|
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.
|
|
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.
|
|
71
|
-
"vitest": "5.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.
|
|
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
|
-
"
|
|
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
|
-
"
|
|
100
|
-
"
|
|
101
|
-
"
|
|
102
|
-
"fmt
|
|
103
|
-
"
|
|
104
|
-
"
|
|
105
|
-
"lint": "eslint .",
|
|
106
|
-
"
|
|
107
|
-
"
|
|
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
|
|
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
|
-
"
|
|
115
|
-
"
|
|
116
|
-
"
|
|
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
|
-
|
|
367
|
-
|
|
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
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
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
|
-
|
|
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
|
-
|
|
68
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
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)
|
|
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
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
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
|
-
|
|
27
|
-
|
|
32
|
+
return undefined;
|
|
33
|
+
};
|
|
28
34
|
|
|
29
|
-
|
|
30
|
-
|
|
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
|
-
|
|
33
|
-
|
|
34
|
-
|
|
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
|
-
|
|
38
|
-
|
|
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
|
-
|
|
47
|
-
transformerName: string
|
|
48
|
-
): boolean =>
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
//
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
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
|
-
|
|
66
|
-
|
|
67
|
-
|
|
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
|
-
|
|
71
|
-
|
|
72
|
-
|
|
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
|
-
|
|
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(
|
|
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
|
|
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
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
return `(${trimmed})` as const;
|
|
79
|
+
return isWrappedWithParentheses(trimmed)
|
|
80
|
+
? trimmed
|
|
81
|
+
: (`(${trimmed})` as const);
|
|
84
82
|
};
|