ts-codemod-lib 2.2.1 → 2.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (94) hide show
  1. package/dist/cmd/append-as-const.mjs +51 -48
  2. package/dist/cmd/append-as-const.mjs.map +1 -1
  3. package/dist/cmd/convert-interface-to-type.mjs +51 -48
  4. package/dist/cmd/convert-interface-to-type.mjs.map +1 -1
  5. package/dist/cmd/convert-to-readonly.mjs +51 -48
  6. package/dist/cmd/convert-to-readonly.mjs.map +1 -1
  7. package/dist/cmd/replace-any-with-unknown.mjs +51 -48
  8. package/dist/cmd/replace-any-with-unknown.mjs.map +1 -1
  9. package/dist/cmd/replace-record-with-unknown-record.mjs +51 -48
  10. package/dist/cmd/replace-record-with-unknown-record.mjs.map +1 -1
  11. package/dist/cmd/run-transformer-cli.d.mts.map +1 -1
  12. package/dist/cmd/run-transformer-cli.mjs +138 -127
  13. package/dist/cmd/run-transformer-cli.mjs.map +1 -1
  14. package/dist/functions/ast-transformers/append-as-const.d.mts.map +1 -1
  15. package/dist/functions/ast-transformers/append-as-const.mjs +205 -191
  16. package/dist/functions/ast-transformers/append-as-const.mjs.map +1 -1
  17. package/dist/functions/ast-transformers/convert-interface-to-type.mjs +62 -82
  18. package/dist/functions/ast-transformers/convert-interface-to-type.mjs.map +1 -1
  19. package/dist/functions/ast-transformers/convert-to-readonly.d.mts.map +1 -1
  20. package/dist/functions/ast-transformers/convert-to-readonly.mjs +742 -834
  21. package/dist/functions/ast-transformers/convert-to-readonly.mjs.map +1 -1
  22. package/dist/functions/ast-transformers/readonly-transformer-helpers/compare-union-types.d.mts.map +1 -1
  23. package/dist/functions/ast-transformers/readonly-transformer-helpers/compare-union-types.mjs +2 -14
  24. package/dist/functions/ast-transformers/readonly-transformer-helpers/compare-union-types.mjs.map +1 -1
  25. package/dist/functions/ast-transformers/readonly-transformer-helpers/constants.d.mts +2 -1
  26. package/dist/functions/ast-transformers/readonly-transformer-helpers/constants.d.mts.map +1 -1
  27. package/dist/functions/ast-transformers/readonly-transformer-helpers/constants.mjs +8 -8
  28. package/dist/functions/ast-transformers/readonly-transformer-helpers/constants.mjs.map +1 -1
  29. package/dist/functions/ast-transformers/readonly-transformer-helpers/group-union-types.d.mts.map +1 -1
  30. package/dist/functions/ast-transformers/readonly-transformer-helpers/group-union-types.mjs +51 -62
  31. package/dist/functions/ast-transformers/readonly-transformer-helpers/group-union-types.mjs.map +1 -1
  32. package/dist/functions/ast-transformers/readonly-transformer-helpers/readonly-context.d.mts +12 -12
  33. package/dist/functions/ast-transformers/readonly-transformer-helpers/readonly-context.d.mts.map +1 -1
  34. package/dist/functions/ast-transformers/readonly-transformer-helpers/readonly-context.mjs +16 -14
  35. package/dist/functions/ast-transformers/readonly-transformer-helpers/readonly-context.mjs.map +1 -1
  36. package/dist/functions/ast-transformers/replace-any-with-unknown.mjs +25 -27
  37. package/dist/functions/ast-transformers/replace-any-with-unknown.mjs.map +1 -1
  38. package/dist/functions/ast-transformers/replace-record-with-unknown-record.mjs +149 -208
  39. package/dist/functions/ast-transformers/replace-record-with-unknown-record.mjs.map +1 -1
  40. package/dist/functions/ast-transformers/transform-source-code.d.mts.map +1 -1
  41. package/dist/functions/ast-transformers/transform-source-code.mjs +70 -72
  42. package/dist/functions/ast-transformers/transform-source-code.mjs.map +1 -1
  43. package/dist/functions/constants/ignore-comment-text.d.mts +2 -2
  44. package/dist/functions/constants/ignore-comment-text.d.mts.map +1 -1
  45. package/dist/functions/constants/ignore-comment-text.mjs +8 -8
  46. package/dist/functions/constants/ignore-comment-text.mjs.map +1 -1
  47. package/dist/functions/functions/has-disable-next-line-comment.d.mts.map +1 -1
  48. package/dist/functions/functions/has-disable-next-line-comment.mjs +33 -65
  49. package/dist/functions/functions/has-disable-next-line-comment.mjs.map +1 -1
  50. package/dist/functions/functions/is-as-const-node.d.mts +1 -1
  51. package/dist/functions/functions/is-as-const-node.d.mts.map +1 -1
  52. package/dist/functions/functions/is-as-const-node.mjs +15 -23
  53. package/dist/functions/functions/is-as-const-node.mjs.map +1 -1
  54. package/dist/functions/functions/is-atomic-type-node.d.mts.map +1 -1
  55. package/dist/functions/functions/is-atomic-type-node.mjs +22 -36
  56. package/dist/functions/functions/is-atomic-type-node.mjs.map +1 -1
  57. package/dist/functions/functions/is-conditional-type-distribution-guard.d.mts.map +1 -1
  58. package/dist/functions/functions/is-conditional-type-distribution-guard.mjs +9 -33
  59. package/dist/functions/functions/is-conditional-type-distribution-guard.mjs.map +1 -1
  60. package/dist/functions/functions/is-readonly-node.d.mts.map +1 -1
  61. package/dist/functions/functions/is-readonly-node.mjs +11 -21
  62. package/dist/functions/functions/is-readonly-node.mjs.map +1 -1
  63. package/dist/functions/functions/is-spread-parameter-node.d.mts.map +1 -1
  64. package/dist/functions/functions/is-spread-parameter-node.mjs +2 -4
  65. package/dist/functions/functions/is-spread-parameter-node.mjs.map +1 -1
  66. package/dist/functions/functions/remove-parentheses.d.mts.map +1 -1
  67. package/dist/functions/functions/remove-parentheses.mjs +1 -4
  68. package/dist/functions/functions/remove-parentheses.mjs.map +1 -1
  69. package/dist/functions/functions/should-avoid-parentheses-for-readonly.d.mts.map +1 -1
  70. package/dist/functions/functions/should-avoid-parentheses-for-readonly.mjs +7 -24
  71. package/dist/functions/functions/should-avoid-parentheses-for-readonly.mjs.map +1 -1
  72. package/dist/functions/functions/unwrap-readonly.d.mts.map +1 -1
  73. package/dist/functions/functions/unwrap-readonly.mjs +1 -3
  74. package/dist/functions/functions/unwrap-readonly.mjs.map +1 -1
  75. package/dist/functions/functions/wrap-with-parentheses.d.mts.map +1 -1
  76. package/dist/functions/functions/wrap-with-parentheses.mjs +26 -51
  77. package/dist/functions/functions/wrap-with-parentheses.mjs.map +1 -1
  78. package/dist/functions/utils/replace-with-debug.d.mts.map +1 -1
  79. package/dist/functions/utils/replace-with-debug.mjs +2 -2
  80. package/dist/functions/utils/replace-with-debug.mjs.map +1 -1
  81. package/package.json +40 -29
  82. package/src/cmd/append-as-const.mts +3 -3
  83. package/src/cmd/convert-interface-to-type.mts +3 -3
  84. package/src/cmd/convert-to-readonly.mts +3 -3
  85. package/src/cmd/replace-any-with-unknown.mts +3 -3
  86. package/src/cmd/replace-record-with-unknown-record.mts +3 -3
  87. package/src/cmd/run-transformer-cli.mts +21 -17
  88. package/src/functions/ast-transformers/convert-interface-to-type.mts +1 -1
  89. package/src/functions/ast-transformers/convert-to-readonly.mts +64 -35
  90. package/src/functions/ast-transformers/convert-to-readonly.test.mts +67 -1
  91. package/src/functions/ast-transformers/readonly-transformer-helpers/readonly-context.mts +6 -6
  92. package/src/functions/ast-transformers/replace-record-with-unknown-record.mts +4 -4
  93. package/src/functions/functions/has-disable-next-line-comment.mts +5 -5
  94. package/src/functions/functions/wrap-with-parentheses.mts +17 -23
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  import * as cmd from 'cmd-ts';
3
- import { Result } from 'ts-data-forge';
3
+ import { Result, Arr } from 'ts-data-forge';
4
4
  import 'ts-morph';
5
5
  import '../functions/functions/is-atomic-type-node.mjs';
6
6
  import '../functions/ast-transformers/readonly-transformer-helpers/constants.mjs';
@@ -9,52 +9,55 @@ import { runTransformerCLI } from './run-transformer-cli.mjs';
9
9
 
10
10
  const transformer = replaceRecordWithUnknownRecordTransformer();
11
11
  const cmdDef = cmd.command({
12
- name: transformer.name,
13
- version: '2.2.1',
14
- args: {
15
- baseDir: cmd.positional({
16
- type: cmd.string,
17
- displayName: 'baseDir',
18
- description: 'The base directory in which to perform the conversion',
19
- }),
20
- exclude: cmd.multioption({
21
- long: 'exclude',
22
- type: cmd.optional(cmd.array(cmd.string)),
23
- description: 'Glob patterns of files to exclude from the base directory (e.g., "src/generated/**/*.mts")',
24
- }),
25
- uncommitted: cmd.flag({
26
- long: 'uncommitted',
27
- type: cmd.optional(cmd.boolean),
28
- description: 'If true, transforms only uncommitted files (untracked, modified, and staged files)',
29
- }),
30
- diffFrom: cmd.option({
31
- long: 'diff-from',
32
- type: cmd.optional(cmd.string),
33
- description: 'If provided, transforms only files that differ from the given base branch or commit hash',
34
- }),
35
- silent: cmd.flag({
36
- long: 'silent',
37
- type: cmd.optional(cmd.boolean),
38
- description: 'If true, suppresses output messages (default: false)',
39
- }),
40
- },
41
- handler: (args) => {
42
- (async () => {
43
- const result = await runTransformerCLI({
44
- baseDir: args.baseDir,
45
- exclude: args.exclude ?? [],
46
- uncommitted: args.uncommitted ?? false,
47
- diffFrom: args.diffFrom,
48
- silent: args.silent ?? false,
49
- }, [transformer]);
50
- if (Result.isErr(result)) {
51
- process.exit(1);
52
- }
53
- })().catch((error) => {
54
- console.error('An error occurred:', error);
55
- process.exit(1);
56
- });
57
- },
12
+ name: transformer.name,
13
+ version: "2.2.3",
14
+ args: {
15
+ baseDir: cmd.positional({
16
+ type: cmd.string,
17
+ displayName: "baseDir",
18
+ description: "The base directory in which to perform the conversion"
19
+ }),
20
+ exclude: cmd.multioption({
21
+ long: "exclude",
22
+ type: cmd.optional(cmd.array(cmd.string)),
23
+ description: 'Glob patterns of files to exclude from the base directory (e.g., "src/generated/**/*.mts")'
24
+ }),
25
+ uncommitted: cmd.flag({
26
+ long: "uncommitted",
27
+ type: cmd.optional(cmd.boolean),
28
+ description: "If true, transforms only uncommitted files (untracked, modified, and staged files)"
29
+ }),
30
+ diffFrom: cmd.option({
31
+ long: "diff-from",
32
+ type: cmd.optional(cmd.string),
33
+ description: "If provided, transforms only files that differ from the given base branch or commit hash"
34
+ }),
35
+ silent: cmd.flag({
36
+ long: "silent",
37
+ type: cmd.optional(cmd.boolean),
38
+ description: "If true, suppresses output messages (default: false)"
39
+ })
40
+ },
41
+ handler: (args) => {
42
+ (async () => {
43
+ const result = await runTransformerCLI(
44
+ {
45
+ baseDir: args.baseDir,
46
+ exclude: args.exclude ?? [],
47
+ uncommitted: args.uncommitted ?? false,
48
+ diffFrom: args.diffFrom,
49
+ silent: args.silent ?? false
50
+ },
51
+ [transformer]
52
+ );
53
+ if (Result.isErr(result)) {
54
+ process.exit(1);
55
+ }
56
+ })().catch((error) => {
57
+ console.error("An error occurred:", error);
58
+ process.exit(1);
59
+ });
60
+ }
58
61
  });
59
- await cmd.run(cmdDef, process.argv.slice(2));
62
+ await cmd.run(cmdDef, Arr.skip(process.argv, 2));
60
63
  //# sourceMappingURL=replace-record-with-unknown-record.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"replace-record-with-unknown-record.mjs","sources":["../../src/cmd/replace-record-with-unknown-record.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;;;AAOA,MAAM,WAAW,GAAG,yCAAyC,EAAE;AAE/D,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC;IACzB,IAAI,EAAE,WAAW,CAAC,IAAI;AACtB,IAAA,OAAO,EAAE,OAAO;AAChB,IAAA,IAAI,EAAE;AACJ,QAAA,OAAO,EAAE,GAAG,CAAC,UAAU,CAAC;YACtB,IAAI,EAAE,GAAG,CAAC,MAAM;AAChB,YAAA,WAAW,EAAE,SAAS;AACtB,YAAA,WAAW,EAAE,uDAAuD;SACrE,CAAC;AACF,QAAA,OAAO,EAAE,GAAG,CAAC,WAAW,CAAC;AACvB,YAAA,IAAI,EAAE,SAAS;AACf,YAAA,IAAI,EAAE,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AACzC,YAAA,WAAW,EACT,4FAA4F;SAC/F,CAAC;AACF,QAAA,WAAW,EAAE,GAAG,CAAC,IAAI,CAAC;AACpB,YAAA,IAAI,EAAE,aAAa;YACnB,IAAI,EAAE,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC;AAC/B,YAAA,WAAW,EACT,oFAAoF;SACvF,CAAC;AACF,QAAA,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC;AACnB,YAAA,IAAI,EAAE,WAAW;YACjB,IAAI,EAAE,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC;AAC9B,YAAA,WAAW,EACT,0FAA0F;SAC7F,CAAC;AACF,QAAA,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC;AACf,YAAA,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC;AAC/B,YAAA,WAAW,EAAE,sDAAsD;SACpE,CAAC;AACH,KAAA;AACD,IAAA,OAAO,EAAE,CAAC,IAAI,KAAI;QAChB,CAAC,YAA0B;AACzB,YAAA,MAAM,MAAM,GAAG,MAAM,iBAAiB,CACpC;gBACE,OAAO,EAAE,IAAI,CAAC,OAAO;AACrB,gBAAA,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,EAAE;AAC3B,gBAAA,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,KAAK;gBACtC,QAAQ,EAAE,IAAI,CAAC,QAAQ;AACvB,gBAAA,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,KAAK;AAC7B,aAAA,EACD,CAAC,WAAW,CAAC,CACd;AAED,YAAA,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;AACxB,gBAAA,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;YACjB;QACF,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,KAAc,KAAI;AAC5B,YAAA,OAAO,CAAC,KAAK,CAAC,oBAAoB,EAAE,KAAK,CAAC;AAE1C,YAAA,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;AACjB,QAAA,CAAC,CAAC;IACJ,CAAC;AACF,CAAA,CAAC;AAEF,MAAM,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"replace-record-with-unknown-record.mjs","sources":["../../src/cmd/replace-record-with-unknown-record.mts"],"sourcesContent":["#!/usr/bin/env node\n\nimport * as cmd from 'cmd-ts';\nimport { Arr, Result } from 'ts-data-forge';\nimport { replaceRecordWithUnknownRecordTransformer } from '../functions/index.mjs';\nimport { runTransformerCLI } from './run-transformer-cli.mjs';\n\nconst transformer = replaceRecordWithUnknownRecordTransformer();\n\nconst cmdDef = cmd.command({\n name: transformer.name,\n version: '2.2.3',\n args: {\n baseDir: cmd.positional({\n type: cmd.string,\n displayName: 'baseDir',\n description: 'The base directory in which to perform the conversion',\n }),\n exclude: cmd.multioption({\n long: 'exclude',\n type: cmd.optional(cmd.array(cmd.string)),\n description:\n 'Glob patterns of files to exclude from the base directory (e.g., \"src/generated/**/*.mts\")',\n }),\n uncommitted: cmd.flag({\n long: 'uncommitted',\n type: cmd.optional(cmd.boolean),\n description:\n 'If true, transforms only uncommitted files (untracked, modified, and staged files)',\n }),\n diffFrom: cmd.option({\n long: 'diff-from',\n type: cmd.optional(cmd.string),\n description:\n 'If provided, transforms only files that differ from the given base branch or commit hash',\n }),\n silent: cmd.flag({\n long: 'silent',\n type: cmd.optional(cmd.boolean),\n description: 'If true, suppresses output messages (default: false)',\n }),\n },\n handler: (args) => {\n (async (): Promise<void> => {\n const result = await runTransformerCLI(\n {\n baseDir: args.baseDir,\n exclude: args.exclude ?? [],\n uncommitted: args.uncommitted ?? false,\n diffFrom: args.diffFrom,\n silent: args.silent ?? false,\n },\n [transformer],\n );\n\n if (Result.isErr(result)) {\n process.exit(1);\n }\n })().catch((error: unknown) => {\n console.error('An error occurred:', error);\n\n process.exit(1);\n });\n },\n});\n\nawait cmd.run(cmdDef, Arr.skip(process.argv, 2));\n"],"names":[],"mappings":";;;;;;;;;AAOA,MAAM,cAAc,yCAAA,EAA0C;AAE9D,MAAM,MAAA,GAAS,IAAI,OAAA,CAAQ;AAAA,EACzB,MAAM,WAAA,CAAY,IAAA;AAAA,EAClB,OAAA,EAAS,OAAA;AAAA,EACT,IAAA,EAAM;AAAA,IACJ,OAAA,EAAS,IAAI,UAAA,CAAW;AAAA,MACtB,MAAM,GAAA,CAAI,MAAA;AAAA,MACV,WAAA,EAAa,SAAA;AAAA,MACb,WAAA,EAAa;AAAA,KACd,CAAA;AAAA,IACD,OAAA,EAAS,IAAI,WAAA,CAAY;AAAA,MACvB,IAAA,EAAM,SAAA;AAAA,MACN,MAAM,GAAA,CAAI,QAAA,CAAS,IAAI,KAAA,CAAM,GAAA,CAAI,MAAM,CAAC,CAAA;AAAA,MACxC,WAAA,EACE;AAAA,KACH,CAAA;AAAA,IACD,WAAA,EAAa,IAAI,IAAA,CAAK;AAAA,MACpB,IAAA,EAAM,aAAA;AAAA,MACN,IAAA,EAAM,GAAA,CAAI,QAAA,CAAS,GAAA,CAAI,OAAO,CAAA;AAAA,MAC9B,WAAA,EACE;AAAA,KACH,CAAA;AAAA,IACD,QAAA,EAAU,IAAI,MAAA,CAAO;AAAA,MACnB,IAAA,EAAM,WAAA;AAAA,MACN,IAAA,EAAM,GAAA,CAAI,QAAA,CAAS,GAAA,CAAI,MAAM,CAAA;AAAA,MAC7B,WAAA,EACE;AAAA,KACH,CAAA;AAAA,IACD,MAAA,EAAQ,IAAI,IAAA,CAAK;AAAA,MACf,IAAA,EAAM,QAAA;AAAA,MACN,IAAA,EAAM,GAAA,CAAI,QAAA,CAAS,GAAA,CAAI,OAAO,CAAA;AAAA,MAC9B,WAAA,EAAa;AAAA,KACd;AAAA,GACH;AAAA,EACA,OAAA,EAAS,CAAC,IAAA,KAAS;AACjB,IAAA,CAAC,YAA2B;AAC1B,MAAA,MAAM,SAAS,MAAM,iBAAA;AAAA,QACnB;AAAA,UACE,SAAS,IAAA,CAAK,OAAA;AAAA,UACd,OAAA,EAAS,IAAA,CAAK,OAAA,IAAW,EAAC;AAAA,UAC1B,WAAA,EAAa,KAAK,WAAA,IAAe,KAAA;AAAA,UACjC,UAAU,IAAA,CAAK,QAAA;AAAA,UACf,MAAA,EAAQ,KAAK,MAAA,IAAU;AAAA,SACzB;AAAA,QACA,CAAC,WAAW;AAAA,OACd;AAEA,MAAA,IAAI,MAAA,CAAO,KAAA,CAAM,MAAM,CAAA,EAAG;AACxB,QAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,MAChB;AAAA,IACF,CAAA,GAAG,CAAE,KAAA,CAAM,CAAC,KAAA,KAAmB;AAC7B,MAAA,OAAA,CAAQ,KAAA,CAAM,sBAAsB,KAAK,CAAA;AAEzC,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB,CAAC,CAAA;AAAA,EACH;AACF,CAAC,CAAA;AAED,MAAM,GAAA,CAAI,IAAI,MAAA,EAAQ,GAAA,CAAI,KAAK,OAAA,CAAQ,IAAA,EAAM,CAAC,CAAC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"run-transformer-cli.d.mts","sourceRoot":"","sources":["../../src/cmd/run-transformer-cli.mts"],"names":[],"mappings":"AAKA,OAAO,EAAO,MAAM,EAAmB,MAAM,eAAe,CAAC;AAQ7D,OAAO,EAEL,KAAK,kBAAkB,EACxB,MAAM,wBAAwB,CAAC;AAEhC,KAAK,eAAe,GAAG,QAAQ,CAAC;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,WAAW,EAAE,OAAO,CAAC;IACrB,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,MAAM,EAAE,OAAO,CAAC;CACjB,CAAC,CAAC;AAEH,KAAK,qBAAqB,GAAG,eAAe,CAAC;AAE7C,eAAO,MAAM,iBAAiB,GAC5B,SAAS,qBAAqB,EAC9B,cAAc,SAAS,kBAAkB,EAAE,KAC1C,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,CAkEtC,CAAC"}
1
+ {"version":3,"file":"run-transformer-cli.d.mts","sourceRoot":"","sources":["../../src/cmd/run-transformer-cli.mts"],"names":[],"mappings":"AAKA,OAAO,EAAmB,MAAM,EAAmB,MAAM,eAAe,CAAC;AAQzE,OAAO,EAEL,KAAK,kBAAkB,EACxB,MAAM,wBAAwB,CAAC;AAEhC,KAAK,eAAe,GAAG,QAAQ,CAAC;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,WAAW,EAAE,OAAO,CAAC;IACrB,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,MAAM,EAAE,OAAO,CAAC;CACjB,CAAC,CAAC;AAEH,KAAK,qBAAqB,GAAG,eAAe,CAAC;AAE7C,eAAO,MAAM,iBAAiB,YACnB,qBAAqB,gBAChB,SAAS,kBAAkB,EAAE,KAC1C,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,CAkEtC,CAAC"}
@@ -8,31 +8,33 @@ import '../functions/functions/is-atomic-type-node.mjs';
8
8
  import '../functions/ast-transformers/readonly-transformer-helpers/constants.mjs';
9
9
  import { transformSourceCode } from '../functions/ast-transformers/transform-source-code.mjs';
10
10
 
11
- /* eslint-disable no-await-in-loop */
12
11
  const runTransformerCLI = async (options, transformers) => {
13
- const echoIfNotSilent = options.silent ? () => { } : console.log;
14
- const errorIfNotSilent = options.silent ? () => { } : console.error;
15
- const filesResult = await getFilesForTransformation(options);
16
- if (Result.isErr(filesResult)) {
17
- errorIfNotSilent(options.diffFrom !== undefined
18
- ? `Error getting diff files from "${options.diffFrom}":`
19
- : options.uncommitted
20
- ? 'Error getting uncommitted files:'
21
- : 'Error finding files matching pattern:', filesResult.value);
22
- return Result.err(undefined);
23
- }
24
- const files = filesResult.value;
25
- if (Arr.isArrayOfLength(files, 0)) {
26
- echoIfNotSilent(options.diffFrom !== undefined
27
- ? `No files found in diff from "${options.diffFrom}" matching pattern: ${options.baseDir}`
28
- : options.uncommitted
29
- ? 'No uncommitted files found'
30
- : `No files found matching pattern: ${options.baseDir}`);
31
- return Result.ok(undefined);
32
- }
33
- const { errorFiles, transformedCount, unchangedCount } = await transformFiles(files, transformers, options.silent);
34
- const hr = '='.repeat(50);
35
- echoIfNotSilent(dedent `
12
+ const echoIfNotSilent = options.silent ? () => {
13
+ } : console.log;
14
+ const errorIfNotSilent = options.silent ? () => {
15
+ } : console.error;
16
+ const filesResult = await getFilesForTransformation(options);
17
+ if (Result.isErr(filesResult)) {
18
+ errorIfNotSilent(
19
+ options.diffFrom !== void 0 ? `Error getting diff files from "${options.diffFrom}":` : options.uncommitted ? "Error getting uncommitted files:" : "Error finding files matching pattern:",
20
+ filesResult.value
21
+ );
22
+ return Result.err(void 0);
23
+ }
24
+ const files = filesResult.value;
25
+ if (Arr.isArrayOfLength(files, 0)) {
26
+ echoIfNotSilent(
27
+ options.diffFrom !== void 0 ? `No files found in diff from "${options.diffFrom}" matching pattern: ${options.baseDir}` : options.uncommitted ? "No uncommitted files found" : `No files found matching pattern: ${options.baseDir}`
28
+ );
29
+ return Result.ok(void 0);
30
+ }
31
+ const { errorFiles, transformedCount, unchangedCount } = await transformFiles(
32
+ files,
33
+ transformers,
34
+ options.silent
35
+ );
36
+ const hr = "=".repeat(50);
37
+ echoIfNotSilent(dedent`
36
38
  ${hr}
37
39
  Summary:
38
40
  ✅ Transformed: ${transformedCount}
@@ -40,125 +42,134 @@ const runTransformerCLI = async (options, transformers) => {
40
42
  ❌ Errors: ${errorFiles.length}
41
43
  📊 Total: ${files.length}
42
44
  `);
43
- if (Arr.isNonEmpty(errorFiles)) {
44
- echoIfNotSilent('\nFiles with errors:');
45
- for (const fileName of errorFiles) {
46
- echoIfNotSilent(` - ${fileName}`);
47
- }
48
- }
49
- echoIfNotSilent(hr);
50
- if (Arr.isNonEmpty(errorFiles)) {
51
- return Result.err(undefined);
45
+ if (Arr.isNonEmpty(errorFiles)) {
46
+ echoIfNotSilent("\nFiles with errors:");
47
+ for (const fileName of errorFiles) {
48
+ echoIfNotSilent(` - ${fileName}`);
52
49
  }
53
- return Result.ok(undefined);
50
+ }
51
+ echoIfNotSilent(hr);
52
+ if (Arr.isNonEmpty(errorFiles)) {
53
+ return Result.err(void 0);
54
+ }
55
+ return Result.ok(void 0);
54
56
  };
55
57
  const getFilesForTransformation = async (options) => {
56
- const filesFromGlob = await getFilesFromGlob(options.baseDir, options.exclude, options.silent);
57
- if (Result.isErr(filesFromGlob)) {
58
- return filesFromGlob;
58
+ const filesFromGlob = await getFilesFromGlob(
59
+ options.baseDir,
60
+ options.exclude,
61
+ options.silent
62
+ );
63
+ if (Result.isErr(filesFromGlob)) {
64
+ return filesFromGlob;
65
+ }
66
+ let mut_files = filesFromGlob.value;
67
+ if (options.uncommitted) {
68
+ const uncommittedFiles = await getUncommittedFiles(options.silent);
69
+ if (Result.isErr(uncommittedFiles)) {
70
+ return uncommittedFiles;
59
71
  }
60
- let mut_files = filesFromGlob.value;
61
- if (options.uncommitted) {
62
- const uncommittedFiles = await getUncommittedFiles(options.silent);
63
- if (Result.isErr(uncommittedFiles)) {
64
- return uncommittedFiles;
65
- }
66
- mut_files = Arr.setIntersection(mut_files, uncommittedFiles.value);
67
- }
68
- if (options.diffFrom !== undefined) {
69
- const diffFiles = await getDiffFrom(options.diffFrom, {
70
- silent: options.silent,
71
- });
72
- if (Result.isErr(diffFiles)) {
73
- return diffFiles;
74
- }
75
- mut_files = Arr.setIntersection(mut_files, diffFiles.value);
72
+ mut_files = Arr.setIntersection(mut_files, uncommittedFiles.value);
73
+ }
74
+ if (options.diffFrom !== void 0) {
75
+ const diffFiles = await getDiffFrom(options.diffFrom, {
76
+ silent: options.silent
77
+ });
78
+ if (Result.isErr(diffFiles)) {
79
+ return diffFiles;
76
80
  }
77
- return Result.ok(mut_files);
81
+ mut_files = Arr.setIntersection(mut_files, diffFiles.value);
82
+ }
83
+ return Result.ok(mut_files);
78
84
  };
79
85
  const getUncommittedFiles = async (silent) => {
80
- const mut_files = [];
81
- const untrackedFilesResult = await getUntrackedFiles({ silent });
82
- if (Result.isErr(untrackedFilesResult)) {
83
- return untrackedFilesResult;
84
- }
85
- mut_files.push(...untrackedFilesResult.value);
86
- const modifiedFilesResult = await getModifiedFiles({ silent });
87
- if (Result.isErr(modifiedFilesResult)) {
88
- return modifiedFilesResult;
89
- }
90
- mut_files.push(...modifiedFilesResult.value);
91
- const stagedFilesResult = await getStagedFiles({ silent });
92
- if (Result.isErr(stagedFilesResult)) {
93
- return stagedFilesResult;
94
- }
95
- mut_files.push(...stagedFilesResult.value);
96
- return Result.ok(Arr.uniq(mut_files));
86
+ const mut_files = [];
87
+ const untrackedFilesResult = await getUntrackedFiles({ silent });
88
+ if (Result.isErr(untrackedFilesResult)) {
89
+ return untrackedFilesResult;
90
+ }
91
+ mut_files.push(...untrackedFilesResult.value);
92
+ const modifiedFilesResult = await getModifiedFiles({ silent });
93
+ if (Result.isErr(modifiedFilesResult)) {
94
+ return modifiedFilesResult;
95
+ }
96
+ mut_files.push(...modifiedFilesResult.value);
97
+ const stagedFilesResult = await getStagedFiles({ silent });
98
+ if (Result.isErr(stagedFilesResult)) {
99
+ return stagedFilesResult;
100
+ }
101
+ mut_files.push(...stagedFilesResult.value);
102
+ return Result.ok(Arr.uniq(mut_files));
97
103
  };
98
104
  const getFilesFromGlob = async (baseDir, exclude, silent) => {
99
- const globResult = await glob(baseDir, {
100
- ignore: exclude,
101
- absolute: true,
102
- });
103
- if (Result.isErr(globResult)) {
104
- if (!silent) {
105
- console.error('Error finding files matching pattern:', globResult.value);
106
- }
107
- return Result.err([globResult.value]);
105
+ const globResult = await glob(baseDir, {
106
+ // Never transform files inside dependencies. With pnpm,
107
+ // `packages/*/node_modules/<dep>` are symlinks whose `src/` directory would
108
+ // otherwise be matched by patterns such as
109
+ // `packages/**/{src,scripts,samples,test}/**`, so the codemod would rewrite
110
+ // dependency source files (and could hit pathological types there).
111
+ ignore: Arr.toPushed(exclude, "**/node_modules/**"),
112
+ absolute: true,
113
+ // Do not escape the project tree by following symlinks (e.g. the pnpm
114
+ // `node_modules` symlinks above, or workspace-package links).
115
+ followSymbolicLinks: false
116
+ });
117
+ if (Result.isErr(globResult)) {
118
+ if (!silent) {
119
+ console.error("Error finding files matching pattern:", globResult.value);
108
120
  }
109
- return Result.ok(globResult.value);
121
+ return Result.err([globResult.value]);
122
+ }
123
+ return Result.ok(globResult.value);
110
124
  };
111
125
  const transformFiles = async (filePaths, transformers, silent) => {
112
- let mut_transformedCount = 0;
113
- let mut_unchangedCount = 0;
114
- const mut_errorFiles = [];
115
- for (const filePath of filePaths) {
116
- const result = await transformOneFile(filePath, transformers, silent);
117
- if (Result.isOk(result)) {
118
- switch (result.value) {
119
- case 'transformed':
120
- mut_transformedCount += 1;
121
- break;
122
- case 'unchanged':
123
- mut_unchangedCount += 1;
124
- break;
125
- }
126
- }
127
- else {
128
- mut_errorFiles.push(path.basename(filePath));
129
- }
126
+ let mut_transformedCount = 0;
127
+ let mut_unchangedCount = 0;
128
+ const mut_errorFiles = [];
129
+ for (const filePath of filePaths) {
130
+ const result = await transformOneFile(filePath, transformers, silent);
131
+ if (Result.isOk(result)) {
132
+ if (result.value === "transformed") {
133
+ mut_transformedCount += 1;
134
+ } else {
135
+ mut_unchangedCount += 1;
136
+ }
137
+ } else {
138
+ mut_errorFiles.push(path.basename(filePath));
130
139
  }
131
- return {
132
- transformedCount: mut_transformedCount,
133
- unchangedCount: mut_unchangedCount,
134
- errorFiles: mut_errorFiles,
135
- };
140
+ }
141
+ return {
142
+ transformedCount: mut_transformedCount,
143
+ unchangedCount: mut_unchangedCount,
144
+ errorFiles: mut_errorFiles
145
+ };
136
146
  };
137
147
  const transformOneFile = async (filePath, transformers, silent) => {
138
- const echoIfNotSilent = silent ? () => { } : console.log;
139
- const errorIfNotSilent = silent ? () => { } : console.error;
140
- const fileName = path.basename(filePath);
141
- const isTsx = fileName.endsWith('.tsx') || fileName.endsWith('.jsx');
142
- try {
143
- // eslint-disable-next-line security/detect-non-literal-fs-filename
144
- const originalCode = await fs.readFile(filePath, 'utf8');
145
- const transformedCode = transformSourceCode(originalCode, isTsx, transformers);
146
- if (transformedCode === originalCode) {
147
- echoIfNotSilent(`⏭️ ${fileName} - no changes needed`);
148
- return Result.ok('unchanged');
149
- }
150
- else {
151
- // eslint-disable-next-line security/detect-non-literal-fs-filename
152
- await fs.writeFile(filePath, transformedCode, 'utf8');
153
- echoIfNotSilent(`✅ ${fileName} - transformed`);
154
- return Result.ok('transformed');
155
- }
156
- }
157
- catch (error) {
158
- const errStr = unknownToString(error);
159
- errorIfNotSilent(`❌ ${fileName} - error: ${errStr}`);
160
- return Result.err(errStr);
148
+ const echoIfNotSilent = silent ? () => {
149
+ } : console.log;
150
+ const errorIfNotSilent = silent ? () => {
151
+ } : console.error;
152
+ const fileName = path.basename(filePath);
153
+ const isTsx = fileName.endsWith(".tsx") || fileName.endsWith(".jsx");
154
+ try {
155
+ const originalCode = await fs.readFile(filePath, "utf8");
156
+ const transformedCode = transformSourceCode(
157
+ originalCode,
158
+ isTsx,
159
+ transformers
160
+ );
161
+ if (transformedCode === originalCode) {
162
+ echoIfNotSilent(`\u23ED\uFE0F ${fileName} - no changes needed`);
163
+ return Result.ok("unchanged");
161
164
  }
165
+ await fs.writeFile(filePath, transformedCode, "utf8");
166
+ echoIfNotSilent(`\u2705 ${fileName} - transformed`);
167
+ return Result.ok("transformed");
168
+ } catch (error) {
169
+ const errStr = unknownToString(error);
170
+ errorIfNotSilent(`\u274C ${fileName} - error: ${errStr}`);
171
+ return Result.err(errStr);
172
+ }
162
173
  };
163
174
 
164
175
  export { runTransformerCLI };
@@ -1 +1 @@
1
- {"version":3,"file":"run-transformer-cli.mjs","sources":["../../src/cmd/run-transformer-cli.mts"],"sourcesContent":[null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"run-transformer-cli.mjs","sources":["../../src/cmd/run-transformer-cli.mts"],"sourcesContent":["/* eslint-disable no-await-in-loop */\n\nimport dedent from 'dedent';\nimport * as fs from 'node:fs/promises';\nimport * as path from 'node:path';\nimport { Arr, expectType, Result, unknownToString } from 'ts-data-forge';\nimport {\n getDiffFrom,\n getModifiedFiles,\n getStagedFiles,\n getUntrackedFiles,\n glob,\n} from 'ts-repo-utils';\nimport {\n transformSourceCode,\n type TsMorphTransformer,\n} from '../functions/index.mjs';\n\ntype GetFilesOptions = Readonly<{\n baseDir: string;\n exclude: readonly string[];\n uncommitted: boolean;\n diffFrom: string | undefined;\n silent: boolean;\n}>;\n\ntype TransformerCLIOptions = GetFilesOptions;\n\nexport const runTransformerCLI = async (\n options: TransformerCLIOptions,\n transformers: readonly TsMorphTransformer[],\n): Promise<Result<undefined, undefined>> => {\n const echoIfNotSilent = options.silent ? () => {} : console.log;\n\n const errorIfNotSilent = options.silent ? () => {} : console.error;\n\n const filesResult = await getFilesForTransformation(options);\n\n if (Result.isErr(filesResult)) {\n errorIfNotSilent(\n options.diffFrom !== undefined\n ? `Error getting diff files from \"${options.diffFrom}\":`\n : options.uncommitted\n ? 'Error getting uncommitted files:'\n : 'Error finding files matching pattern:',\n filesResult.value,\n );\n\n return Result.err(undefined);\n }\n\n const files = filesResult.value;\n\n if (Arr.isArrayOfLength(files, 0)) {\n echoIfNotSilent(\n options.diffFrom !== undefined\n ? `No files found in diff from \"${options.diffFrom}\" matching pattern: ${options.baseDir}`\n : options.uncommitted\n ? 'No uncommitted files found'\n : `No files found matching pattern: ${options.baseDir}`,\n );\n\n return Result.ok(undefined);\n }\n\n const { errorFiles, transformedCount, unchangedCount } = await transformFiles(\n files,\n transformers,\n options.silent,\n );\n\n const hr = '='.repeat(50);\n\n echoIfNotSilent(dedent`\n ${hr}\n Summary:\n ✅ Transformed: ${transformedCount}\n ⏭️ Unchanged: ${unchangedCount}\n ❌ Errors: ${errorFiles.length}\n 📊 Total: ${files.length}\n `);\n\n if (Arr.isNonEmpty(errorFiles)) {\n echoIfNotSilent('\\nFiles with errors:');\n\n for (const fileName of errorFiles) {\n echoIfNotSilent(` - ${fileName}`);\n }\n }\n\n echoIfNotSilent(hr);\n\n if (Arr.isNonEmpty(errorFiles)) {\n return Result.err(undefined);\n }\n\n return Result.ok(undefined);\n};\n\nconst getFilesForTransformation = async (\n options: GetFilesOptions,\n): Promise<\n Result<\n readonly string[],\n | readonly unknown[]\n | Readonly<{\n message: string;\n }>\n >\n> => {\n const filesFromGlob = await getFilesFromGlob(\n options.baseDir,\n options.exclude,\n options.silent,\n );\n\n if (Result.isErr(filesFromGlob)) {\n return filesFromGlob;\n }\n\n let mut_files = filesFromGlob.value;\n\n if (options.uncommitted) {\n const uncommittedFiles = await getUncommittedFiles(options.silent);\n\n if (Result.isErr(uncommittedFiles)) {\n return uncommittedFiles;\n }\n\n mut_files = Arr.setIntersection(mut_files, uncommittedFiles.value);\n }\n\n if (options.diffFrom !== undefined) {\n const diffFiles = await getDiffFrom(options.diffFrom, {\n silent: options.silent,\n });\n\n if (Result.isErr(diffFiles)) {\n return diffFiles;\n }\n\n mut_files = Arr.setIntersection(mut_files, diffFiles.value);\n }\n\n return Result.ok(mut_files);\n};\n\nconst getUncommittedFiles = async (\n silent: boolean,\n): Promise<\n Result<\n readonly string[],\n | readonly unknown[]\n | Readonly<{\n message: string;\n }>\n >\n> => {\n const mut_files: string[] = [];\n\n const untrackedFilesResult = await getUntrackedFiles({ silent });\n\n if (Result.isErr(untrackedFilesResult)) {\n return untrackedFilesResult;\n }\n\n mut_files.push(...untrackedFilesResult.value);\n\n const modifiedFilesResult = await getModifiedFiles({ silent });\n\n if (Result.isErr(modifiedFilesResult)) {\n return modifiedFilesResult;\n }\n\n mut_files.push(...modifiedFilesResult.value);\n\n const stagedFilesResult = await getStagedFiles({ silent });\n\n if (Result.isErr(stagedFilesResult)) {\n return stagedFilesResult;\n }\n\n mut_files.push(...stagedFilesResult.value);\n\n return Result.ok(Arr.uniq(mut_files));\n};\n\nconst getFilesFromGlob = async (\n baseDir: string,\n exclude: readonly string[],\n silent: boolean,\n): Promise<\n Result<\n readonly string[],\n | readonly unknown[]\n | Readonly<{\n message: string;\n }>\n >\n> => {\n const globResult = await glob(baseDir, {\n // Never transform files inside dependencies. With pnpm,\n // `packages/*/node_modules/<dep>` are symlinks whose `src/` directory would\n // otherwise be matched by patterns such as\n // `packages/**/{src,scripts,samples,test}/**`, so the codemod would rewrite\n // dependency source files (and could hit pathological types there).\n ignore: Arr.toPushed(exclude, '**/node_modules/**'),\n absolute: true,\n // Do not escape the project tree by following symlinks (e.g. the pnpm\n // `node_modules` symlinks above, or workspace-package links).\n followSymbolicLinks: false,\n });\n\n if (Result.isErr(globResult)) {\n if (!silent) {\n console.error('Error finding files matching pattern:', globResult.value);\n }\n\n return Result.err([globResult.value]);\n }\n\n return Result.ok(globResult.value);\n};\n\nconst transformFiles = async (\n filePaths: readonly string[],\n transformers: readonly TsMorphTransformer[],\n silent: boolean,\n): Promise<\n Readonly<{\n transformedCount: number;\n unchangedCount: number;\n errorFiles: readonly string[];\n }>\n> => {\n let mut_transformedCount: number = 0;\n\n let mut_unchangedCount: number = 0;\n\n const mut_errorFiles: string[] = [];\n\n for (const filePath of filePaths) {\n const result = await transformOneFile(filePath, transformers, silent);\n\n if (Result.isOk(result)) {\n expectType<typeof result.value, 'unchanged' | 'transformed'>('=');\n\n if (result.value === 'transformed') {\n mut_transformedCount += 1;\n } else {\n mut_unchangedCount += 1;\n }\n } else {\n mut_errorFiles.push(path.basename(filePath));\n }\n }\n\n return {\n transformedCount: mut_transformedCount,\n unchangedCount: mut_unchangedCount,\n errorFiles: mut_errorFiles,\n };\n};\n\nconst transformOneFile = async (\n filePath: string,\n transformers: readonly TsMorphTransformer[],\n silent: boolean,\n): Promise<Result<'unchanged' | 'transformed', string>> => {\n const echoIfNotSilent = silent ? () => {} : console.log;\n\n const errorIfNotSilent = silent ? () => {} : console.error;\n\n const fileName = path.basename(filePath);\n\n const isTsx = fileName.endsWith('.tsx') || fileName.endsWith('.jsx');\n\n try {\n // eslint-disable-next-line security/detect-non-literal-fs-filename\n const originalCode = await fs.readFile(filePath, 'utf8');\n\n const transformedCode = transformSourceCode(\n originalCode,\n isTsx,\n transformers,\n );\n\n if (transformedCode === originalCode) {\n echoIfNotSilent(`⏭️ ${fileName} - no changes needed`);\n\n return Result.ok('unchanged');\n }\n\n // eslint-disable-next-line security/detect-non-literal-fs-filename\n await fs.writeFile(filePath, transformedCode, 'utf8');\n\n echoIfNotSilent(`✅ ${fileName} - transformed`);\n\n return Result.ok('transformed');\n } catch (error) {\n const errStr = unknownToString(error);\n\n errorIfNotSilent(`❌ ${fileName} - error: ${errStr}`);\n\n return Result.err(errStr);\n }\n};\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"append-as-const.d.mts","sourceRoot":"","sources":["../../../src/functions/ast-transformers/append-as-const.mts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,eAAe,CAAC;AAMlD,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAItD,eAAO,MAAM,wBAAwB,GACnC,UAAU,+BAA+B,KACxC,kBAiCF,CAAC;AAEF,MAAM,MAAM,+BAA+B,GAAG,YAAY,CAAC;IACzD;;OAEG;IACH,UAAU,CAAC,EAAE,KAAK,GAAG,qBAAqB,CAAC;IAE3C;;;;;;OAMG;IACH,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAK1B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,CAAC,CAAC"}
1
+ {"version":3,"file":"append-as-const.d.mts","sourceRoot":"","sources":["../../../src/functions/ast-transformers/append-as-const.mts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,eAAe,CAAC;AAMlD,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAItD,eAAO,MAAM,wBAAwB,aACzB,+BAA+B,KACxC,kBAiCF,CAAC;AAEF,MAAM,MAAM,+BAA+B,GAAG,YAAY,CAAC;IACzD;;OAEG;IACH,UAAU,CAAC,EAAE,KAAK,GAAG,qBAAqB,CAAC;IAE3C;;;;;;OAMG;IACH,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAK1B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,CAAC,CAAC"}