ts-codemod-lib 2.0.3 → 2.0.5

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 (76) hide show
  1. package/README.md +10 -4
  2. package/dist/cmd/append-as-const.d.mts +1 -1
  3. package/dist/cmd/append-as-const.d.mts.map +1 -1
  4. package/dist/cmd/append-as-const.mjs +1 -2
  5. package/dist/cmd/append-as-const.mjs.map +1 -1
  6. package/dist/cmd/convert-interface-to-type.d.mts +1 -1
  7. package/dist/cmd/convert-interface-to-type.d.mts.map +1 -1
  8. package/dist/cmd/convert-interface-to-type.mjs +1 -2
  9. package/dist/cmd/convert-interface-to-type.mjs.map +1 -1
  10. package/dist/cmd/convert-to-readonly.d.mts +1 -1
  11. package/dist/cmd/convert-to-readonly.d.mts.map +1 -1
  12. package/dist/cmd/convert-to-readonly.mjs +1 -2
  13. package/dist/cmd/convert-to-readonly.mjs.map +1 -1
  14. package/dist/cmd/replace-any-with-unknown.d.mts +1 -1
  15. package/dist/cmd/replace-any-with-unknown.d.mts.map +1 -1
  16. package/dist/cmd/replace-any-with-unknown.mjs +1 -2
  17. package/dist/cmd/replace-any-with-unknown.mjs.map +1 -1
  18. package/dist/cmd/replace-record-with-unknown-record.d.mts +1 -1
  19. package/dist/cmd/replace-record-with-unknown-record.d.mts.map +1 -1
  20. package/dist/cmd/replace-record-with-unknown-record.mjs +1 -2
  21. package/dist/cmd/replace-record-with-unknown-record.mjs.map +1 -1
  22. package/dist/cmd/run-transformer-cli.mjs +3 -3
  23. package/dist/cmd/run-transformer-cli.mjs.map +1 -1
  24. package/dist/entry-point.mjs +1 -0
  25. package/dist/entry-point.mjs.map +1 -1
  26. package/dist/functions/ast-transformers/convert-interface-to-type.d.mts.map +1 -1
  27. package/dist/functions/ast-transformers/convert-interface-to-type.mjs +4 -4
  28. package/dist/functions/ast-transformers/convert-interface-to-type.mjs.map +1 -1
  29. package/dist/functions/ast-transformers/convert-to-readonly.d.mts.map +1 -1
  30. package/dist/functions/ast-transformers/convert-to-readonly.mjs +31 -12
  31. package/dist/functions/ast-transformers/convert-to-readonly.mjs.map +1 -1
  32. package/dist/functions/ast-transformers/readonly-transformer-helpers/compare-union-types.mjs +1 -0
  33. package/dist/functions/ast-transformers/readonly-transformer-helpers/compare-union-types.mjs.map +1 -1
  34. package/dist/functions/ast-transformers/readonly-transformer-helpers/group-union-types.mjs +1 -0
  35. package/dist/functions/ast-transformers/readonly-transformer-helpers/group-union-types.mjs.map +1 -1
  36. package/dist/functions/ast-transformers/replace-any-with-unknown.mjs +1 -1
  37. package/dist/functions/ast-transformers/replace-record-with-unknown-record.mjs +13 -12
  38. package/dist/functions/ast-transformers/replace-record-with-unknown-record.mjs.map +1 -1
  39. package/dist/functions/ast-transformers/transform-source-code.d.mts.map +1 -1
  40. package/dist/functions/ast-transformers/transform-source-code.mjs +3 -2
  41. package/dist/functions/ast-transformers/transform-source-code.mjs.map +1 -1
  42. package/dist/functions/functions/index.d.mts +1 -0
  43. package/dist/functions/functions/index.d.mts.map +1 -1
  44. package/dist/functions/functions/index.mjs +1 -0
  45. package/dist/functions/functions/index.mjs.map +1 -1
  46. package/dist/functions/functions/is-as-const-node.d.mts.map +1 -1
  47. package/dist/functions/functions/is-as-const-node.mjs +2 -1
  48. package/dist/functions/functions/is-as-const-node.mjs.map +1 -1
  49. package/dist/functions/functions/should-avoid-parentheses-for-readonly.d.mts +16 -0
  50. package/dist/functions/functions/should-avoid-parentheses-for-readonly.d.mts.map +1 -0
  51. package/dist/functions/functions/should-avoid-parentheses-for-readonly.mjs +32 -0
  52. package/dist/functions/functions/should-avoid-parentheses-for-readonly.mjs.map +1 -0
  53. package/dist/functions/functions/wrap-with-parentheses.d.mts +13 -1
  54. package/dist/functions/functions/wrap-with-parentheses.d.mts.map +1 -1
  55. package/dist/functions/functions/wrap-with-parentheses.mjs +58 -1
  56. package/dist/functions/functions/wrap-with-parentheses.mjs.map +1 -1
  57. package/dist/functions/index.mjs +1 -0
  58. package/dist/functions/index.mjs.map +1 -1
  59. package/dist/index.mjs +1 -0
  60. package/dist/index.mjs.map +1 -1
  61. package/package.json +29 -12
  62. package/src/cmd/append-as-const.mts +1 -2
  63. package/src/cmd/convert-interface-to-type.mts +1 -2
  64. package/src/cmd/convert-to-readonly.mts +1 -2
  65. package/src/cmd/replace-any-with-unknown.mts +1 -2
  66. package/src/cmd/replace-record-with-unknown-record.mts +1 -2
  67. package/src/cmd/run-transformer-cli.mts +3 -3
  68. package/src/functions/ast-transformers/convert-interface-to-type.mts +6 -7
  69. package/src/functions/ast-transformers/convert-to-readonly.mts +39 -13
  70. package/src/functions/ast-transformers/convert-to-readonly.test.mts +79 -0
  71. package/src/functions/ast-transformers/replace-record-with-unknown-record.mts +15 -12
  72. package/src/functions/ast-transformers/transform-source-code.mts +3 -2
  73. package/src/functions/functions/index.mts +1 -0
  74. package/src/functions/functions/is-as-const-node.mts +2 -1
  75. package/src/functions/functions/should-avoid-parentheses-for-readonly.mts +32 -0
  76. package/src/functions/functions/wrap-with-parentheses.mts +75 -2
@@ -1 +1 @@
1
- {"version":3,"file":"compare-union-types.mjs","sources":["../../../../src/functions/ast-transformers/readonly-transformer-helpers/compare-union-types.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAMO,MAAM,6BAA6B,GAAG;AAC3C;AACA,CAAe;AACf;AACA,CAAe,KACJ,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC;AAEnC,MAAM,OAAO,GAAG,CAAC,CAA6B,KAC5C,gBAAgB,CAAC,CAAC;AAChB,MAAE;MACA,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC;QAChC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC;QAClC,8BAA8B,CAAC,CAAC;AAClC,UAAE;UACA,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,WAAW;AACnC,cAAE;cACA,CAAC;;;;"}
1
+ {"version":3,"file":"compare-union-types.mjs","sources":["../../../../src/functions/ast-transformers/readonly-transformer-helpers/compare-union-types.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;;AAMO,MAAM,6BAA6B,GAAG;AAC3C;AACA,CAAe;AACf;AACA,CAAe,KACJ,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC;AAEnC,MAAM,OAAO,GAAG,CAAC,CAA6B,KAC5C,gBAAgB,CAAC,CAAC;AAChB,MAAE;MACA,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC;QAChC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC;QAClC,8BAA8B,CAAC,CAAC;AAClC,UAAE;UACA,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,WAAW;AACnC,cAAE;cACA,CAAC;;;;"}
@@ -1,4 +1,5 @@
1
1
  import * as tsm from 'ts-morph';
2
+ import 'ts-data-forge';
2
3
  import { isAtomicTypeNode } from '../../functions/is-atomic-type-node.mjs';
3
4
  import { isReadonlyTupleOrArrayTypeNode, isReadonlyTypeReferenceNode } from '../../functions/is-readonly-node.mjs';
4
5
  import { removeParentheses } from '../../functions/remove-parentheses.mjs';
@@ -1 +1 @@
1
- {"version":3,"file":"group-union-types.mjs","sources":["../../../../src/functions/ast-transformers/readonly-transformer-helpers/group-union-types.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;;AAYO,MAAM,2BAA2B,GAAG;AACzC;AACA,KAA8B,KAkC3B;AACH,IAAA,MAAM,WAAW,GAiCb;AACF,QAAA,UAAU,EAAE,SAAS;AACrB,QAAA,eAAe,EAAE,SAAS;AAC1B,QAAA,YAAY,EAAE,SAAS;AACvB,QAAA,MAAM,EAAE,SAAS;KAClB;AAED,IAAA,KAAK,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE;AACrC,QAAA,MAAM,CAAC,GAAG,iBAAiB,CAAC,EAAE,CAAC;;AAG/B,QAAA,IAAI,gBAAgB,CAAC,CAAC,CAAC,EAAE;AACvB,YAAA,IAAI,WAAW,CAAC,UAAU,KAAK,SAAS,EAAE;gBACxC,WAAW,CAAC,UAAU,GAAG;AACvB,oBAAA,aAAa,EAAE,CAAC;oBAChB,KAAK,EAAE,CAAC,CAAC,CAAC;iBACF;YACZ;iBAAO;gBACL,WAAW,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;YACtC;YAEA;QACF;QAEA,IACE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC;YAClC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC;AAClC,YAAA,8BAA8B,CAAC,CAAC,CAAC,EACjC;AACA,YAAA,IAAI,WAAW,CAAC,eAAe,KAAK,SAAS,EAAE;gBAC7C,WAAW,CAAC,eAAe,GAAG;AAC5B,oBAAA,aAAa,EAAE,CAAC;oBAChB,KAAK,EAAE,CAAC,CAAC,CAAC;iBACF;YACZ;iBAAO;gBACL,WAAW,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;YAC3C;YAEA;QACF;QAEA,IACE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,WAAW,CAAC;AACpC,YAAA,2BAA2B,CAAC,CAAC,CAAC,EAC9B;AACA,YAAA,IAAI,WAAW,CAAC,YAAY,KAAK,SAAS,EAAE;gBAC1C,WAAW,CAAC,YAAY,GAAG;AACzB,oBAAA,aAAa,EAAE,CAAC;oBAChB,KAAK,EAAE,CAAC,CAAC,CAAC;iBACF;YACZ;iBAAO;gBACL,WAAW,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;YACxC;YAEA;QACF;;AAGA,QAAA,IAAI,WAAW,CAAC,MAAM,KAAK,SAAS,EAAE;YACpC,WAAW,CAAC,MAAM,GAAG;AACnB,gBAAA,aAAa,EAAE,CAAC;gBAChB,KAAK,EAAE,CAAC,CAAC,CAAC;aACF;QACZ;aAAO;YACL,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;QAClC;IACF;AAEA,IAAA,OAAO,WAAW;AACpB;;;;"}
1
+ {"version":3,"file":"group-union-types.mjs","sources":["../../../../src/functions/ast-transformers/readonly-transformer-helpers/group-union-types.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;AAYO,MAAM,2BAA2B,GAAG;AACzC;AACA,KAA8B,KAkC3B;AACH,IAAA,MAAM,WAAW,GAiCb;AACF,QAAA,UAAU,EAAE,SAAS;AACrB,QAAA,eAAe,EAAE,SAAS;AAC1B,QAAA,YAAY,EAAE,SAAS;AACvB,QAAA,MAAM,EAAE,SAAS;KAClB;AAED,IAAA,KAAK,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE;AACrC,QAAA,MAAM,CAAC,GAAG,iBAAiB,CAAC,EAAE,CAAC;;AAG/B,QAAA,IAAI,gBAAgB,CAAC,CAAC,CAAC,EAAE;AACvB,YAAA,IAAI,WAAW,CAAC,UAAU,KAAK,SAAS,EAAE;gBACxC,WAAW,CAAC,UAAU,GAAG;AACvB,oBAAA,aAAa,EAAE,CAAC;oBAChB,KAAK,EAAE,CAAC,CAAC,CAAC;iBACF;YACZ;iBAAO;gBACL,WAAW,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;YACtC;YAEA;QACF;QAEA,IACE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC;YAClC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC;AAClC,YAAA,8BAA8B,CAAC,CAAC,CAAC,EACjC;AACA,YAAA,IAAI,WAAW,CAAC,eAAe,KAAK,SAAS,EAAE;gBAC7C,WAAW,CAAC,eAAe,GAAG;AAC5B,oBAAA,aAAa,EAAE,CAAC;oBAChB,KAAK,EAAE,CAAC,CAAC,CAAC;iBACF;YACZ;iBAAO;gBACL,WAAW,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;YAC3C;YAEA;QACF;QAEA,IACE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,WAAW,CAAC;AACpC,YAAA,2BAA2B,CAAC,CAAC,CAAC,EAC9B;AACA,YAAA,IAAI,WAAW,CAAC,YAAY,KAAK,SAAS,EAAE;gBAC1C,WAAW,CAAC,YAAY,GAAG;AACzB,oBAAA,aAAa,EAAE,CAAC;oBAChB,KAAK,EAAE,CAAC,CAAC,CAAC;iBACF;YACZ;iBAAO;gBACL,WAAW,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;YACxC;YAEA;QACF;;AAGA,QAAA,IAAI,WAAW,CAAC,MAAM,KAAK,SAAS,EAAE;YACpC,WAAW,CAAC,MAAM,GAAG;AACnB,gBAAA,aAAa,EAAE,CAAC;gBAChB,KAAK,EAAE,CAAC,CAAC,CAAC;aACF;QACZ;aAAO;YACL,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;QAClC;IACF;AAEA,IAAA,OAAO,WAAW;AACpB;;;;"}
@@ -1,7 +1,7 @@
1
1
  import * as tsm from 'ts-morph';
2
2
  import { hasDisableNextLineComment } from '../functions/has-disable-next-line-comment.mjs';
3
- import '../functions/is-atomic-type-node.mjs';
4
3
  import 'ts-data-forge';
4
+ import '../functions/is-atomic-type-node.mjs';
5
5
  import { isSpreadParameterNode, isSpreadNamedTupleMemberNode } from '../functions/is-spread-parameter-node.mjs';
6
6
 
7
7
  const TRANSFORMER_NAME = 'replace-any-with-unknown';
@@ -47,7 +47,8 @@ const processDeclarations = (container) => {
47
47
  // If it has the signature and no other members, replace entire interface with type alias
48
48
  if (hasStringUnknownSignature) {
49
49
  const properties = interfaceDecl.getProperties();
50
- if (properties.length === 0 && indexSignatures.length === 1) {
50
+ if (Arr.isArrayOfLength(properties, 0) &&
51
+ Arr.isArrayOfLength(indexSignatures, 1)) {
51
52
  // Replace interface with type alias
52
53
  const interfaceName = interfaceDecl.getName();
53
54
  interfaceDecl.replaceWithText(`export type ${interfaceName} = UnknownRecord;`);
@@ -68,13 +69,13 @@ const visitTypeNode = (node) => {
68
69
  // Check if it's Readonly<{ [k: string]: unknown }>
69
70
  if (node.getTypeName().getText() === 'Readonly') {
70
71
  const typeArgs = node.getTypeArguments();
71
- if (typeArgs.length === 1) {
72
+ if (Arr.isArrayOfLength(typeArgs, 1)) {
72
73
  const typeArg = typeArgs[0];
73
74
  if (tsm.Node.isTypeLiteral(typeArg)) {
74
75
  const members = typeArg.getMembers();
75
76
  const indexSigs = members.filter((m) => tsm.Node.isIndexSignatureDeclaration(m));
76
77
  // Check if it has only one index signature [k: string]: unknown
77
- if (members.length === 1 &&
78
+ if (Arr.isArrayOfLength(members, 1) &&
78
79
  Arr.isArrayOfLength(indexSigs, 1) &&
79
80
  isStringUnknownIndexSignature(indexSigs[0])) {
80
81
  node.replaceWithText('UnknownRecord');
@@ -93,7 +94,7 @@ const visitTypeNode = (node) => {
93
94
  const members = node.getMembers();
94
95
  const indexSigs = members.filter((m) => tsm.Node.isIndexSignatureDeclaration(m));
95
96
  // Check if it has only one index signature [k: string]: unknown
96
- if (members.length === 1 &&
97
+ if (Arr.isArrayOfLength(members, 1) &&
97
98
  Arr.isArrayOfLength(indexSigs, 1) &&
98
99
  isStringUnknownIndexSignature(indexSigs[0])) {
99
100
  node.replaceWithText('UnknownRecord');
@@ -150,9 +151,9 @@ const replaceIfRecordUnknown = (node) => {
150
151
  case 'Record': {
151
152
  // Check if it's Record<string, unknown>
152
153
  const typeArgs = node.getTypeArguments();
153
- if (typeArgs.length === 2 &&
154
- typeArgs[0]?.getText() === 'string' &&
155
- typeArgs[1]?.getText() === 'unknown') {
154
+ if (Arr.isArrayOfLength(typeArgs, 2) &&
155
+ typeArgs[0].getText() === 'string' &&
156
+ typeArgs[1].getText() === 'unknown') {
156
157
  node.replaceWithText('UnknownRecord');
157
158
  }
158
159
  break;
@@ -160,15 +161,15 @@ const replaceIfRecordUnknown = (node) => {
160
161
  case 'Readonly': {
161
162
  // Check if it's Readonly<Record<string, unknown>>
162
163
  const typeArgs = node.getTypeArguments();
163
- if (typeArgs.length === 1) {
164
+ if (Arr.isArrayOfLength(typeArgs, 1)) {
164
165
  const innerType = typeArgs[0];
165
- if (innerType !== undefined && tsm.Node.isTypeReference(innerType)) {
166
+ if (tsm.Node.isTypeReference(innerType)) {
166
167
  const innerTypeName = innerType.getTypeName().getText();
167
168
  if (innerTypeName === 'Record') {
168
169
  const innerTypeArgs = innerType.getTypeArguments();
169
- if (innerTypeArgs.length === 2 &&
170
- innerTypeArgs[0]?.getText() === 'string' &&
171
- innerTypeArgs[1]?.getText() === 'unknown') {
170
+ if (Arr.isArrayOfLength(innerTypeArgs, 2) &&
171
+ innerTypeArgs[0].getText() === 'string' &&
172
+ innerTypeArgs[1].getText() === 'unknown') {
172
173
  node.replaceWithText('UnknownRecord');
173
174
  }
174
175
  }
@@ -1 +1 @@
1
- {"version":3,"file":"replace-record-with-unknown-record.mjs","sources":["../../../src/functions/ast-transformers/replace-record-with-unknown-record.mts"],"sourcesContent":[null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"replace-record-with-unknown-record.mjs","sources":["../../../src/functions/ast-transformers/replace-record-with-unknown-record.mts"],"sourcesContent":[null],"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":"AACA,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAgDtD,eAAO,MAAM,mBAAmB,GAC9B,MAAM,MAAM,EACZ,OAAO,OAAO,EACd,cAAc,SAAS,kBAAkB,EAAE,EAC3C,QAAO,OAAe,KACrB,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;AAgDtD,eAAO,MAAM,mBAAmB,GAC9B,MAAM,MAAM,EACZ,OAAO,OAAO,EACd,cAAc,SAAS,kBAAkB,EAAE,EAC3C,QAAO,OAAe,KACrB,MAgCF,CAAC"}
@@ -1,3 +1,4 @@
1
+ import { Arr } from 'ts-data-forge';
1
2
  import * as tsm from 'ts-morph';
2
3
 
3
4
  const extractFileIgnoreTransformers = (code) => {
@@ -16,12 +17,12 @@ const extractFileIgnoreTransformers = (code) => {
16
17
  const shouldSkipFile = (code, transformerName) => {
17
18
  const ignoredTransformers = extractFileIgnoreTransformers(code);
18
19
  // If no file-level ignore comment found, don't skip
19
- if (ignoredTransformers.length === 0 &&
20
+ if (Arr.isArrayOfLength(ignoredTransformers, 0) &&
20
21
  !/\/\*\s*transformer-ignore\s*.*?\s*\*\//u.test(code)) {
21
22
  return false;
22
23
  }
23
24
  // Empty array means ignore all transformers (file-level ignore without specific transformers)
24
- if (ignoredTransformers.length === 0) {
25
+ if (Arr.isArrayOfLength(ignoredTransformers, 0)) {
25
26
  return true;
26
27
  }
27
28
  // If transformer name is not specified, don't skip
@@ -1 +1 @@
1
- {"version":3,"file":"transform-source-code.mjs","sources":["../../../src/functions/ast-transformers/transform-source-code.mts"],"sourcesContent":[null],"names":[],"mappings":";;AAGA,MAAM,6BAA6B,GAAG,CAAC,IAAY,KAAuB;IACxE,MAAM,KAAK,GAAG,2CAA2C,CAAC,IAAI,CAAC,IAAI,CAAC;AAEpE,IAAA,IAAI,KAAK,KAAK,IAAI,EAAE;AAClB,QAAA,OAAO,EAAE;IACX;IAEA,MAAM,kBAAkB,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE;;AAGjD,IAAA,IAAI,kBAAkB,KAAK,EAAE,EAAE;AAC7B,QAAA,OAAO,EAAE;IACX;;AAGA,IAAA,OAAO,kBAAkB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC;AACjE,CAAC;AAED,MAAM,cAAc,GAAG,CACrB,IAAY,EACZ,eAAmC,KACxB;AACX,IAAA,MAAM,mBAAmB,GAAG,6BAA6B,CAAC,IAAI,CAAC;;AAG/D,IAAA,IACE,mBAAmB,CAAC,MAAM,KAAK,CAAC;AAChC,QAAA,CAAC,yCAAyC,CAAC,IAAI,CAAC,IAAI,CAAC,EACrD;AACA,QAAA,OAAO,KAAK;IACd;;AAGA,IAAA,IAAI,mBAAmB,CAAC,MAAM,KAAK,CAAC,EAAE;AACpC,QAAA,OAAO,IAAI;IACb;;AAGA,IAAA,IAAI,eAAe,KAAK,SAAS,EAAE;AACjC,QAAA,OAAO,KAAK;IACd;;AAGA,IAAA,OAAO,mBAAmB,CAAC,QAAQ,CAAC,eAAe,CAAC;AACtD,CAAC;AAEM,MAAM,mBAAmB,GAAG,CACjC,IAAY,EACZ,KAAc,EACd,YAA2C,EAC3C,KAAA,GAAiB,KAAK,KACZ;AACV,IAAA,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC;AAC9B,QAAA,qBAAqB,EAAE,IAAI;AAC3B,QAAA,eAAe,EAAE;AACf,YAAA,GAAG,EAAE,KAAK,GAAG,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,GAAG,SAAS;AAC7C,YAAA,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,YAAY,CAAC,MAAM;AAClC,YAAA,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM;AACjC,SAAA;AACF,KAAA,CAAC;IAEF,MAAM,SAAS,GAAG,OAAO,CAAC,gBAAgB,CACxC,CAAA,OAAA,EAAU,KAAK,GAAG,KAAK,GAAG,IAAI,EAAE,EAChC,IAAI,CACL;AAED,IAAA,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE;AACtC,QAAA,MAAM,eAAe,GAAG,WAAW,CAAC,IAAI;AAExC,QAAA,IAAI,cAAc,CAAC,IAAI,EAAE,eAAe,CAAC,EAAE;YACzC,IAAI,KAAK,EAAE;AACT,gBAAA,OAAO,CAAC,KAAK,CACX,mDAAmD,eAAe,CAAA,CAAE,CACrE;YACH;YAEA;QACF;AAEA,QAAA,WAAW,CAAC,SAAS,CAAC,SAAS,CAAC;IAClC;AAEA,IAAA,OAAO,SAAS,CAAC,WAAW,EAAE;AAChC;;;;"}
1
+ {"version":3,"file":"transform-source-code.mjs","sources":["../../../src/functions/ast-transformers/transform-source-code.mts"],"sourcesContent":[null],"names":[],"mappings":";;;AAIA,MAAM,6BAA6B,GAAG,CAAC,IAAY,KAAuB;IACxE,MAAM,KAAK,GAAG,2CAA2C,CAAC,IAAI,CAAC,IAAI,CAAC;AAEpE,IAAA,IAAI,KAAK,KAAK,IAAI,EAAE;AAClB,QAAA,OAAO,EAAE;IACX;IAEA,MAAM,kBAAkB,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE;;AAGjD,IAAA,IAAI,kBAAkB,KAAK,EAAE,EAAE;AAC7B,QAAA,OAAO,EAAE;IACX;;AAGA,IAAA,OAAO,kBAAkB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC;AACjE,CAAC;AAED,MAAM,cAAc,GAAG,CACrB,IAAY,EACZ,eAAmC,KACxB;AACX,IAAA,MAAM,mBAAmB,GAAG,6BAA6B,CAAC,IAAI,CAAC;;AAG/D,IAAA,IACE,GAAG,CAAC,eAAe,CAAC,mBAAmB,EAAE,CAAC,CAAC;AAC3C,QAAA,CAAC,yCAAyC,CAAC,IAAI,CAAC,IAAI,CAAC,EACrD;AACA,QAAA,OAAO,KAAK;IACd;;IAGA,IAAI,GAAG,CAAC,eAAe,CAAC,mBAAmB,EAAE,CAAC,CAAC,EAAE;AAC/C,QAAA,OAAO,IAAI;IACb;;AAGA,IAAA,IAAI,eAAe,KAAK,SAAS,EAAE;AACjC,QAAA,OAAO,KAAK;IACd;;AAGA,IAAA,OAAO,mBAAmB,CAAC,QAAQ,CAAC,eAAe,CAAC;AACtD,CAAC;AAEM,MAAM,mBAAmB,GAAG,CACjC,IAAY,EACZ,KAAc,EACd,YAA2C,EAC3C,KAAA,GAAiB,KAAK,KACZ;AACV,IAAA,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC;AAC9B,QAAA,qBAAqB,EAAE,IAAI;AAC3B,QAAA,eAAe,EAAE;AACf,YAAA,GAAG,EAAE,KAAK,GAAG,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,GAAG,SAAS;AAC7C,YAAA,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,YAAY,CAAC,MAAM;AAClC,YAAA,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM;AACjC,SAAA;AACF,KAAA,CAAC;IAEF,MAAM,SAAS,GAAG,OAAO,CAAC,gBAAgB,CACxC,CAAA,OAAA,EAAU,KAAK,GAAG,KAAK,GAAG,IAAI,EAAE,EAChC,IAAI,CACL;AAED,IAAA,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE;AACtC,QAAA,MAAM,eAAe,GAAG,WAAW,CAAC,IAAI;AAExC,QAAA,IAAI,cAAc,CAAC,IAAI,EAAE,eAAe,CAAC,EAAE;YACzC,IAAI,KAAK,EAAE;AACT,gBAAA,OAAO,CAAC,KAAK,CACX,mDAAmD,eAAe,CAAA,CAAE,CACrE;YACH;YAEA;QACF;AAEA,QAAA,WAAW,CAAC,SAAS,CAAC,SAAS,CAAC;IAClC;AAEA,IAAA,OAAO,SAAS,CAAC,WAAW,EAAE;AAChC;;;;"}
@@ -4,6 +4,7 @@ export * from './is-atomic-type-node.mjs';
4
4
  export * from './is-readonly-node.mjs';
5
5
  export * from './is-spread-parameter-node.mjs';
6
6
  export * from './remove-parentheses.mjs';
7
+ export * from './should-avoid-parentheses-for-readonly.mjs';
7
8
  export * from './unwrap-readonly.mjs';
8
9
  export * from './wrap-with-parentheses.mjs';
9
10
  //# sourceMappingURL=index.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../../../src/functions/functions/index.mts"],"names":[],"mappings":"AAAA,cAAc,qCAAqC,CAAC;AACpD,cAAc,wBAAwB,CAAC;AACvC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC;AACvC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC;AACtC,cAAc,6BAA6B,CAAC"}
1
+ {"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../../../src/functions/functions/index.mts"],"names":[],"mappings":"AAAA,cAAc,qCAAqC,CAAC;AACpD,cAAc,wBAAwB,CAAC;AACvC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC;AACvC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,0BAA0B,CAAC;AACzC,cAAc,6CAA6C,CAAC;AAC5D,cAAc,uBAAuB,CAAC;AACtC,cAAc,6BAA6B,CAAC"}
@@ -4,6 +4,7 @@ export { isAtomicTypeNode } from './is-atomic-type-node.mjs';
4
4
  export { isReadonlyArrayTypeNode, isReadonlyTupleOrArrayTypeNode, isReadonlyTupleTypeNode, isReadonlyTypeReferenceNode, isShallowReadonlyTypeNode } from './is-readonly-node.mjs';
5
5
  export { isSpreadNamedTupleMemberNode, isSpreadParameterNode } from './is-spread-parameter-node.mjs';
6
6
  export { removeParentheses } from './remove-parentheses.mjs';
7
+ export { shouldAvoidParenthesesForReadonly } from './should-avoid-parentheses-for-readonly.mjs';
7
8
  export { unwrapReadonlyTypeArgText } from './unwrap-readonly.mjs';
8
9
  export { wrapWithParentheses } from './wrap-with-parentheses.mjs';
9
10
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;"}
1
+ {"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"is-as-const-node.d.mts","sourceRoot":"","sources":["../../../src/functions/functions/is-as-const-node.mts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,UAAU,CAAC;AAE/B,eAAO,MAAM,aAAa,GACxB,MAAM,EAAE,CAAC,IAAI,KACZ,IAAI,IAAI,EAAE,CAAC,YAAY,GACxB,QAAQ,CAAC;IACP,IAAI,EAAE,EAAE,CAAC,iBAAiB,GACxB,QAAQ,CAAC;QACP,QAAQ,EAAE,EAAE,CAAC,UAAU,GACrB,QAAQ,CAAC;YACP,IAAI,EAAE,OAAO,CAAC;SACf,CAAC,CAAC;QACL,aAAa,EAAE,SAAS,CAAC;KAC1B,CAAC,CAAC;CACN,CAgCF,CAAC"}
1
+ {"version":3,"file":"is-as-const-node.d.mts","sourceRoot":"","sources":["../../../src/functions/functions/is-as-const-node.mts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,UAAU,CAAC;AAE/B,eAAO,MAAM,aAAa,GACxB,MAAM,EAAE,CAAC,IAAI,KACZ,IAAI,IAAI,EAAE,CAAC,YAAY,GACxB,QAAQ,CAAC;IACP,IAAI,EAAE,EAAE,CAAC,iBAAiB,GACxB,QAAQ,CAAC;QACP,QAAQ,EAAE,EAAE,CAAC,UAAU,GACrB,QAAQ,CAAC;YACP,IAAI,EAAE,OAAO,CAAC;SACf,CAAC,CAAC;QACL,aAAa,EAAE,SAAS,CAAC;KAC1B,CAAC,CAAC;CACN,CAgCF,CAAC"}
@@ -1,3 +1,4 @@
1
+ import { Arr } from 'ts-data-forge';
1
2
  import * as tsm from 'ts-morph';
2
3
 
3
4
  const isAsConstNode = (node) => {
@@ -23,7 +24,7 @@ const isAsConstNode = (node) => {
23
24
  // 6. Check if the Identifier's text is 'const'
24
25
  // and that there are no type arguments (as const doesn't have them)
25
26
  return (typeNameNode.getText() === 'const' &&
26
- typeNode.getTypeArguments().length === 0);
27
+ Arr.isArrayOfLength(typeNode.getTypeArguments(), 0));
27
28
  };
28
29
 
29
30
  export { isAsConstNode };
@@ -1 +1 @@
1
- {"version":3,"file":"is-as-const-node.mjs","sources":["../../../src/functions/functions/is-as-const-node.mts"],"sourcesContent":[null],"names":["ts"],"mappings":";;AAEO,MAAM,aAAa,GAAG,CAC3B,IAAa,KAWR;AACL,IAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAACA,GAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE;AAC5C,QAAA,OAAO,KAAK;IACd;;AAGA,IAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE;AAEnC,IAAA,IAAI,QAAQ,KAAK,SAAS,EAAE;QAC1B,OAAO,KAAK,CAAC;IACf;;AAGA,IAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAACA,GAAE,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE;AACjD,QAAA,OAAO,KAAK;IACd;;AAGA,IAAA,MAAM,YAAY,GAAG,QAAQ,CAAC,WAAW,EAAE;;AAG3C,IAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAACA,GAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE;;AAElD,QAAA,OAAO,KAAK;IACd;;;AAIA,IAAA,QACE,YAAY,CAAC,OAAO,EAAE,KAAK,OAAO;QAClC,QAAQ,CAAC,gBAAgB,EAAE,CAAC,MAAM,KAAK,CAAC;AAE5C;;;;"}
1
+ {"version":3,"file":"is-as-const-node.mjs","sources":["../../../src/functions/functions/is-as-const-node.mts"],"sourcesContent":[null],"names":["ts"],"mappings":";;;AAGO,MAAM,aAAa,GAAG,CAC3B,IAAa,KAWR;AACL,IAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAACA,GAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE;AAC5C,QAAA,OAAO,KAAK;IACd;;AAGA,IAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE;AAEnC,IAAA,IAAI,QAAQ,KAAK,SAAS,EAAE;QAC1B,OAAO,KAAK,CAAC;IACf;;AAGA,IAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAACA,GAAE,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE;AACjD,QAAA,OAAO,KAAK;IACd;;AAGA,IAAA,MAAM,YAAY,GAAG,QAAQ,CAAC,WAAW,EAAE;;AAG3C,IAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAACA,GAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE;;AAElD,QAAA,OAAO,KAAK;IACd;;;AAIA,IAAA,QACE,YAAY,CAAC,OAAO,EAAE,KAAK,OAAO;QAClC,GAAG,CAAC,eAAe,CAAC,QAAQ,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC;AAEvD;;;;"}
@@ -0,0 +1,16 @@
1
+ import * as tsm from 'ts-morph';
2
+ /**
3
+ * Determines if parentheses should be avoided when adding 'readonly' prefix to a type.
4
+ *
5
+ * Parentheses should be AVOIDED in these specific contexts:
6
+ * - Type predicates: `x is [T, U]` -> `x is readonly [T, U]` (not `x is (readonly [T, U])`)
7
+ * because parentheses around the type in a type predicate cause syntax errors
8
+ *
9
+ * For all other contexts, we keep parentheses for safety to avoid precedence issues,
10
+ * relying on prettier to remove unnecessary ones.
11
+ *
12
+ * @param node - The type node to check
13
+ * @returns true if parentheses should be avoided, false otherwise (keep parentheses)
14
+ */
15
+ export declare const shouldAvoidParenthesesForReadonly: (node: tsm.Node) => boolean;
16
+ //# sourceMappingURL=should-avoid-parentheses-for-readonly.d.mts.map
@@ -0,0 +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,GAAI,MAAM,GAAG,CAAC,IAAI,KAAG,OAgBlE,CAAC"}
@@ -0,0 +1,32 @@
1
+ import * as tsm from 'ts-morph';
2
+
3
+ /**
4
+ * Determines if parentheses should be avoided when adding 'readonly' prefix to a type.
5
+ *
6
+ * Parentheses should be AVOIDED in these specific contexts:
7
+ * - Type predicates: `x is [T, U]` -> `x is readonly [T, U]` (not `x is (readonly [T, U])`)
8
+ * because parentheses around the type in a type predicate cause syntax errors
9
+ *
10
+ * For all other contexts, we keep parentheses for safety to avoid precedence issues,
11
+ * relying on prettier to remove unnecessary ones.
12
+ *
13
+ * @param node - The type node to check
14
+ * @returns true if parentheses should be avoided, false otherwise (keep parentheses)
15
+ */
16
+ const shouldAvoidParenthesesForReadonly = (node) => {
17
+ const parent = node.getParent();
18
+ if (parent === undefined) {
19
+ return false;
20
+ }
21
+ // Check if parent is TypePredicate: x is T
22
+ // In this case, we MUST avoid parentheses: x is readonly T (not x is (readonly T))
23
+ // because `x is (readonly T)` is a syntax error
24
+ if (parent.isKind(tsm.SyntaxKind.TypePredicate)) {
25
+ return true;
26
+ }
27
+ // For all other cases, keep parentheses for safety
28
+ return false;
29
+ };
30
+
31
+ export { shouldAvoidParenthesesForReadonly };
32
+ //# sourceMappingURL=should-avoid-parentheses-for-readonly.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"should-avoid-parentheses-for-readonly.mjs","sources":["../../../src/functions/functions/should-avoid-parentheses-for-readonly.mts"],"sourcesContent":[null],"names":[],"mappings":";;AAEA;;;;;;;;;;;;AAYG;AACI,MAAM,iCAAiC,GAAG,CAAC,IAAc,KAAa;AAC3E,IAAA,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE;AAE/B,IAAA,IAAI,MAAM,KAAK,SAAS,EAAE;AACxB,QAAA,OAAO,KAAK;IACd;;;;IAKA,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE;AAC/C,QAAA,OAAO,IAAI;IACb;;AAGA,IAAA,OAAO,KAAK;AACd;;;;"}
@@ -1,2 +1,14 @@
1
- export declare const wrapWithParentheses: (nodeStr: string) => `(${string})`;
1
+ /**
2
+ * Wraps a string with parentheses if not already wrapped.
3
+ * Avoids adding redundant parentheses when the expression is already
4
+ * fully wrapped with balanced parentheses.
5
+ *
6
+ * @example
7
+ * wrapWithParentheses('A') // '(A)'
8
+ * wrapWithParentheses('(A)') // '(A)' (not '((A))')
9
+ * wrapWithParentheses('A | B') // '(A | B)'
10
+ * wrapWithParentheses('(A | B)') // '(A | B)' (not '((A | B))')
11
+ * wrapWithParentheses('(A) | (B)') // '((A) | (B))' (needs outer parens)
12
+ */
13
+ export declare const wrapWithParentheses: (nodeStr: string) => string;
2
14
  //# sourceMappingURL=wrap-with-parentheses.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"wrap-with-parentheses.d.mts","sourceRoot":"","sources":["../../../src/functions/functions/wrap-with-parentheses.mts"],"names":[],"mappings":"AAAA,eAAO,MAAM,mBAAmB,GAAI,SAAS,MAAM,KAAG,IAAI,MAAM,GAChC,CAAC"}
1
+ {"version":3,"file":"wrap-with-parentheses.d.mts","sourceRoot":"","sources":["../../../src/functions/functions/wrap-with-parentheses.mts"],"names":[],"mappings":"AAsDA;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,mBAAmB,GAAI,SAAS,MAAM,KAAG,MAQrD,CAAC"}
@@ -1,4 +1,61 @@
1
- const wrapWithParentheses = (nodeStr) => `(${nodeStr.trim()})`;
1
+ import { range, asUint32 } from 'ts-data-forge';
2
+
3
+ /**
4
+ * Checks if a string is already wrapped with a single pair of balanced parentheses
5
+ * that encompasses the entire expression.
6
+ *
7
+ * @example
8
+ * isWrappedWithParentheses('(A)') // true
9
+ * isWrappedWithParentheses('((A))') // true (outer pair wraps everything)
10
+ * isWrappedWithParentheses('(A) | (B)') // false (outer parens don't wrap everything)
11
+ * isWrappedWithParentheses('A') // false
12
+ */
13
+ const isWrappedWithParentheses = (str) => {
14
+ const trimmed = str.trim();
15
+ if (!trimmed.startsWith('(') || !trimmed.endsWith(')')) {
16
+ return false;
17
+ }
18
+ // Check if the opening and closing parentheses are balanced
19
+ // and the opening parenthesis corresponds to the closing one
20
+ let mut_depth = 0;
21
+ for (const mut_i of range(0, asUint32(trimmed.length))) {
22
+ const char = trimmed.charAt(mut_i);
23
+ switch (char) {
24
+ case '(': {
25
+ mut_depth += 1;
26
+ break;
27
+ }
28
+ case ')': {
29
+ mut_depth -= 1;
30
+ // If we reach depth 0 before the end, the outer parentheses don't wrap everything
31
+ if (mut_depth === 0 && mut_i < trimmed.length - 1) {
32
+ return false;
33
+ }
34
+ break;
35
+ }
36
+ }
37
+ }
38
+ return true;
39
+ };
40
+ /**
41
+ * Wraps a string with parentheses if not already wrapped.
42
+ * Avoids adding redundant parentheses when the expression is already
43
+ * fully wrapped with balanced parentheses.
44
+ *
45
+ * @example
46
+ * wrapWithParentheses('A') // '(A)'
47
+ * wrapWithParentheses('(A)') // '(A)' (not '((A))')
48
+ * wrapWithParentheses('A | B') // '(A | B)'
49
+ * wrapWithParentheses('(A | B)') // '(A | B)' (not '((A | B))')
50
+ * wrapWithParentheses('(A) | (B)') // '((A) | (B))' (needs outer parens)
51
+ */
52
+ const wrapWithParentheses = (nodeStr) => {
53
+ const trimmed = nodeStr.trim();
54
+ if (isWrappedWithParentheses(trimmed)) {
55
+ return trimmed;
56
+ }
57
+ return `(${trimmed})`;
58
+ };
2
59
 
3
60
  export { wrapWithParentheses };
4
61
  //# sourceMappingURL=wrap-with-parentheses.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"wrap-with-parentheses.mjs","sources":["../../../src/functions/functions/wrap-with-parentheses.mts"],"sourcesContent":[null],"names":[],"mappings":"AAAO,MAAM,mBAAmB,GAAG,CAAC,OAAe,KACjD,IAAI,OAAO,CAAC,IAAI,EAAE;;;;"}
1
+ {"version":3,"file":"wrap-with-parentheses.mjs","sources":["../../../src/functions/functions/wrap-with-parentheses.mts"],"sourcesContent":[null],"names":[],"mappings":";;AAAA;;;;;;;;;AASG;AAGH,MAAM,wBAAwB,GAAG,CAAC,GAAW,KAAa;AACxD,IAAA,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE;AAE1B,IAAA,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AACtD,QAAA,OAAO,KAAK;IACd;;;IAIA,IAAI,SAAS,GAAG,CAAC;AAEjB,IAAA,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE;QACtD,MAAM,IAAI,GAAW,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;QAE1C,QAAQ,IAAI;YACV,KAAK,GAAG,EAAE;gBACR,SAAS,IAAI,CAAC;gBAEd;YACF;YAEA,KAAK,GAAG,EAAE;gBACR,SAAS,IAAI,CAAC;;AAGd,gBAAA,IAAI,SAAS,KAAK,CAAC,IAAI,KAAK,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;AACjD,oBAAA,OAAO,KAAK;gBACd;gBAEA;YACF;;IAOJ;AAEA,IAAA,OAAO,IAAI;AACb,CAAC;AAED;;;;;;;;;;;AAWG;AACI,MAAM,mBAAmB,GAAG,CAAC,OAAe,KAAY;AAC7D,IAAA,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE;AAE9B,IAAA,IAAI,wBAAwB,CAAC,OAAO,CAAC,EAAE;AACrC,QAAA,OAAO,OAAO;IAChB;IAEA,OAAO,CAAA,CAAA,EAAI,OAAO,CAAA,CAAA,CAAY;AAChC;;;;"}
@@ -15,6 +15,7 @@ export { isAtomicTypeNode } from './functions/is-atomic-type-node.mjs';
15
15
  export { isReadonlyArrayTypeNode, isReadonlyTupleOrArrayTypeNode, isReadonlyTupleTypeNode, isReadonlyTypeReferenceNode, isShallowReadonlyTypeNode } from './functions/is-readonly-node.mjs';
16
16
  export { isSpreadNamedTupleMemberNode, isSpreadParameterNode } from './functions/is-spread-parameter-node.mjs';
17
17
  export { removeParentheses } from './functions/remove-parentheses.mjs';
18
+ export { shouldAvoidParenthesesForReadonly } from './functions/should-avoid-parentheses-for-readonly.mjs';
18
19
  export { unwrapReadonlyTypeArgText } from './functions/unwrap-readonly.mjs';
19
20
  export { wrapWithParentheses } from './functions/wrap-with-parentheses.mjs';
20
21
  export { replaceNodeWithDebugPrint } from './utils/replace-with-debug.mjs';
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;"}
package/dist/index.mjs CHANGED
@@ -15,6 +15,7 @@ export { isAtomicTypeNode } from './functions/functions/is-atomic-type-node.mjs'
15
15
  export { isReadonlyArrayTypeNode, isReadonlyTupleOrArrayTypeNode, isReadonlyTupleTypeNode, isReadonlyTypeReferenceNode, isShallowReadonlyTypeNode } from './functions/functions/is-readonly-node.mjs';
16
16
  export { isSpreadNamedTupleMemberNode, isSpreadParameterNode } from './functions/functions/is-spread-parameter-node.mjs';
17
17
  export { removeParentheses } from './functions/functions/remove-parentheses.mjs';
18
+ export { shouldAvoidParenthesesForReadonly } from './functions/functions/should-avoid-parentheses-for-readonly.mjs';
18
19
  export { unwrapReadonlyTypeArgText } from './functions/functions/unwrap-readonly.mjs';
19
20
  export { wrapWithParentheses } from './functions/functions/wrap-with-parentheses.mjs';
20
21
  export { replaceNodeWithDebugPrint } from './functions/utils/replace-with-debug.mjs';
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;"}
package/package.json CHANGED
@@ -1,12 +1,13 @@
1
1
  {
2
2
  "name": "ts-codemod-lib",
3
- "version": "2.0.3",
3
+ "version": "2.0.5",
4
4
  "private": false,
5
5
  "keywords": [
6
6
  "typescript",
7
7
  "codemod",
8
- "ast",
9
- "transformation"
8
+ "transformation",
9
+ "readonly",
10
+ "immutable"
10
11
  ],
11
12
  "repository": {
12
13
  "type": "git",
@@ -98,8 +99,7 @@
98
99
  "z:vitest:node": "pnpm run z:vitest --project='Node.js'"
99
100
  },
100
101
  "dependencies": {
101
- "cmd-ts": "0.14.3",
102
- "dedent": "1.7.1",
102
+ "ts-data-forge": "6.5.0",
103
103
  "ts-morph": "27.0.2"
104
104
  },
105
105
  "devDependencies": {
@@ -113,15 +113,17 @@
113
113
  "@semantic-release/github": "12.0.3",
114
114
  "@semantic-release/npm": "13.1.3",
115
115
  "@semantic-release/release-notes-generator": "14.1.0",
116
- "@types/node": "25.2.0",
116
+ "@types/node": "25.2.3",
117
117
  "@vitest/browser-playwright": "4.0.18",
118
118
  "@vitest/coverage-v8": "4.0.18",
119
119
  "@vitest/ui": "4.0.18",
120
+ "cmd-ts": "0.14.3",
120
121
  "conventional-changelog-conventionalcommits": "9.1.0",
121
- "cspell": "9.6.3",
122
+ "cspell": "9.6.4",
123
+ "dedent": "1.7.1",
122
124
  "eslint": "9.39.2",
123
- "eslint-config-typed": "4.6.1",
124
- "github-settings-as-code": "1.1.2",
125
+ "eslint-config-typed": "4.6.2",
126
+ "github-settings-as-code": "1.1.4",
125
127
  "jiti": "2.6.1",
126
128
  "markdownlint": "0.40.0",
127
129
  "markdownlint-cli2": "0.20.0",
@@ -132,8 +134,7 @@
132
134
  "prettier-plugin-packagejson": "3.0.0",
133
135
  "rollup": "4.57.1",
134
136
  "semantic-release": "25.0.3",
135
- "ts-data-forge": "6.4.0",
136
- "ts-repo-utils": "8.1.0",
137
+ "ts-repo-utils": "8.2.0",
137
138
  "ts-type-forge": "2.3.1",
138
139
  "tslib": "2.8.1",
139
140
  "tsx": "4.21.0",
@@ -143,7 +144,23 @@
143
144
  "vite": "7.3.1",
144
145
  "vitest": "4.0.18"
145
146
  },
146
- "packageManager": "pnpm@10.29.2",
147
+ "peerDependencies": {
148
+ "cmd-ts": "0.14.3",
149
+ "dedent": "1.7.1",
150
+ "ts-repo-utils": "8.1.0"
151
+ },
152
+ "peerDependenciesMeta": {
153
+ "cmd-ts": {
154
+ "optional": true
155
+ },
156
+ "dedent": {
157
+ "optional": true
158
+ },
159
+ "ts-repo-utils": {
160
+ "optional": true
161
+ }
162
+ },
163
+ "packageManager": "pnpm@10.29.3",
147
164
  "engines": {
148
165
  "node": ">=20.11.0",
149
166
  "pnpm": ">=8.0.0"
@@ -2,7 +2,6 @@
2
2
 
3
3
  import * as cmd from 'cmd-ts';
4
4
  import { Result } from 'ts-data-forge';
5
- import 'ts-repo-utils';
6
5
  import { appendAsConstTransformer } from '../functions/index.mjs';
7
6
  import { runTransformerCLI } from './run-transformer-cli.mjs';
8
7
 
@@ -10,7 +9,7 @@ const transformer = appendAsConstTransformer();
10
9
 
11
10
  const cmdDef = cmd.command({
12
11
  name: transformer.name,
13
- version: '2.0.3',
12
+ version: '2.0.5',
14
13
  args: {
15
14
  baseDir: cmd.positional({
16
15
  type: cmd.string,
@@ -2,7 +2,6 @@
2
2
 
3
3
  import * as cmd from 'cmd-ts';
4
4
  import { Result } from 'ts-data-forge';
5
- import 'ts-repo-utils';
6
5
  import { convertInterfaceToTypeTransformer } from '../functions/index.mjs';
7
6
  import { runTransformerCLI } from './run-transformer-cli.mjs';
8
7
 
@@ -10,7 +9,7 @@ const transformer = convertInterfaceToTypeTransformer();
10
9
 
11
10
  const cmdDef = cmd.command({
12
11
  name: transformer.name,
13
- version: '2.0.3',
12
+ version: '2.0.5',
14
13
  args: {
15
14
  baseDir: cmd.positional({
16
15
  type: cmd.string,
@@ -2,7 +2,6 @@
2
2
 
3
3
  import * as cmd from 'cmd-ts';
4
4
  import { Result } from 'ts-data-forge';
5
- import 'ts-repo-utils';
6
5
  import { convertToReadonlyTransformer } from '../functions/index.mjs';
7
6
  import { runTransformerCLI } from './run-transformer-cli.mjs';
8
7
 
@@ -10,7 +9,7 @@ const transformer = convertToReadonlyTransformer();
10
9
 
11
10
  const cmdDef = cmd.command({
12
11
  name: transformer.name,
13
- version: '2.0.3',
12
+ version: '2.0.5',
14
13
  args: {
15
14
  baseDir: cmd.positional({
16
15
  type: cmd.string,
@@ -2,7 +2,6 @@
2
2
 
3
3
  import * as cmd from 'cmd-ts';
4
4
  import { Result } from 'ts-data-forge';
5
- import 'ts-repo-utils';
6
5
  import { replaceAnyWithUnknownTransformer } from '../functions/index.mjs';
7
6
  import { runTransformerCLI } from './run-transformer-cli.mjs';
8
7
 
@@ -10,7 +9,7 @@ const transformer = replaceAnyWithUnknownTransformer();
10
9
 
11
10
  const cmdDef = cmd.command({
12
11
  name: transformer.name,
13
- version: '2.0.3',
12
+ version: '2.0.5',
14
13
  args: {
15
14
  baseDir: cmd.positional({
16
15
  type: cmd.string,
@@ -2,7 +2,6 @@
2
2
 
3
3
  import * as cmd from 'cmd-ts';
4
4
  import { Result } from 'ts-data-forge';
5
- import 'ts-repo-utils';
6
5
  import { replaceRecordWithUnknownRecordTransformer } from '../functions/index.mjs';
7
6
  import { runTransformerCLI } from './run-transformer-cli.mjs';
8
7
 
@@ -10,7 +9,7 @@ const transformer = replaceRecordWithUnknownRecordTransformer();
10
9
 
11
10
  const cmdDef = cmd.command({
12
11
  name: transformer.name,
13
- version: '2.0.3',
12
+ version: '2.0.5',
14
13
  args: {
15
14
  baseDir: cmd.positional({
16
15
  type: cmd.string,
@@ -44,7 +44,7 @@ export const runTransformerCLI = async (
44
44
 
45
45
  const files = filesResult.value;
46
46
 
47
- if (files.length === 0) {
47
+ if (Arr.isArrayOfLength(files, 0)) {
48
48
  echoIfNotSilent(
49
49
  options.uncommitted
50
50
  ? 'No uncommitted files found'
@@ -71,7 +71,7 @@ export const runTransformerCLI = async (
71
71
  📊 Total: ${files.length}
72
72
  `);
73
73
 
74
- if (errorFiles.length > 0) {
74
+ if (Arr.isNonEmpty(errorFiles)) {
75
75
  echoIfNotSilent('\nFiles with errors:');
76
76
 
77
77
  for (const fileName of errorFiles) {
@@ -81,7 +81,7 @@ export const runTransformerCLI = async (
81
81
 
82
82
  echoIfNotSilent(hr);
83
83
 
84
- if (errorFiles.length > 0) {
84
+ if (Arr.isNonEmpty(errorFiles)) {
85
85
  return Result.err(undefined);
86
86
  }
87
87