ts-codemod-lib 2.2.4 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/README.md +15 -54
  2. package/dist/functions/ast-transformers/convert-to-readonly.d.mts.map +1 -1
  3. package/dist/functions/ast-transformers/convert-to-readonly.mjs +2 -3
  4. package/dist/functions/ast-transformers/convert-to-readonly.mjs.map +1 -1
  5. package/dist/functions/ast-transformers/readonly-transformer-helpers/readonly-context.d.mts +3 -3
  6. package/dist/functions/ast-transformers/readonly-transformer-helpers/readonly-context.d.mts.map +1 -1
  7. package/dist/functions/ast-transformers/readonly-transformer-helpers/readonly-context.mjs.map +1 -1
  8. package/dist/functions/ast-transformers/transform-source-code.mjs +1 -1
  9. package/dist/functions/ast-transformers/transform-source-code.mjs.map +1 -1
  10. package/dist/functions/functions/is-readonly-node.d.mts +5 -5
  11. package/dist/functions/functions/is-readonly-node.d.mts.map +1 -1
  12. package/dist/functions/functions/is-readonly-node.mjs.map +1 -1
  13. package/dist/functions/functions/should-avoid-parentheses-for-readonly.d.mts.map +1 -1
  14. package/dist/functions/functions/should-avoid-parentheses-for-readonly.mjs +1 -4
  15. package/dist/functions/functions/should-avoid-parentheses-for-readonly.mjs.map +1 -1
  16. package/package.json +69 -115
  17. package/src/functions/ast-transformers/convert-to-readonly.mts +20 -17
  18. package/src/functions/ast-transformers/readonly-transformer-helpers/readonly-context.mts +3 -3
  19. package/src/functions/ast-transformers/transform-source-code.mts +1 -1
  20. package/src/functions/functions/is-readonly-node.mts +5 -5
  21. package/src/functions/functions/should-avoid-parentheses-for-readonly.mts +1 -5
  22. package/dist/cmd/append-as-const.d.mts +0 -3
  23. package/dist/cmd/append-as-const.d.mts.map +0 -1
  24. package/dist/cmd/append-as-const.mjs +0 -63
  25. package/dist/cmd/append-as-const.mjs.map +0 -1
  26. package/dist/cmd/convert-interface-to-type.d.mts +0 -3
  27. package/dist/cmd/convert-interface-to-type.d.mts.map +0 -1
  28. package/dist/cmd/convert-interface-to-type.mjs +0 -63
  29. package/dist/cmd/convert-interface-to-type.mjs.map +0 -1
  30. package/dist/cmd/convert-to-readonly.d.mts +0 -3
  31. package/dist/cmd/convert-to-readonly.d.mts.map +0 -1
  32. package/dist/cmd/convert-to-readonly.mjs +0 -63
  33. package/dist/cmd/convert-to-readonly.mjs.map +0 -1
  34. package/dist/cmd/replace-any-with-unknown.d.mts +0 -3
  35. package/dist/cmd/replace-any-with-unknown.d.mts.map +0 -1
  36. package/dist/cmd/replace-any-with-unknown.mjs +0 -63
  37. package/dist/cmd/replace-any-with-unknown.mjs.map +0 -1
  38. package/dist/cmd/replace-record-with-unknown-record.d.mts +0 -3
  39. package/dist/cmd/replace-record-with-unknown-record.d.mts.map +0 -1
  40. package/dist/cmd/replace-record-with-unknown-record.mjs +0 -63
  41. package/dist/cmd/replace-record-with-unknown-record.mjs.map +0 -1
  42. package/dist/cmd/run-transformer-cli.d.mts +0 -13
  43. package/dist/cmd/run-transformer-cli.d.mts.map +0 -1
  44. package/dist/cmd/run-transformer-cli.mjs +0 -176
  45. package/dist/cmd/run-transformer-cli.mjs.map +0 -1
  46. package/src/cmd/append-as-const.mts +0 -67
  47. package/src/cmd/convert-interface-to-type.mts +0 -67
  48. package/src/cmd/convert-to-readonly.mts +0 -67
  49. package/src/cmd/replace-any-with-unknown.mts +0 -67
  50. package/src/cmd/replace-record-with-unknown-record.mts +0 -67
  51. package/src/cmd/run-transformer-cli.mts +0 -307
@@ -1,63 +0,0 @@
1
- #!/usr/bin/env node
2
- import * as cmd from 'cmd-ts';
3
- import { Result, Arr } from 'ts-data-forge';
4
- import { appendAsConstTransformer } from '../functions/ast-transformers/append-as-const.mjs';
5
- import 'ts-morph';
6
- import '../functions/functions/is-atomic-type-node.mjs';
7
- import '../functions/ast-transformers/readonly-transformer-helpers/constants.mjs';
8
- import { runTransformerCLI } from './run-transformer-cli.mjs';
9
-
10
- const transformer = appendAsConstTransformer();
11
- const cmdDef = cmd.command({
12
- name: transformer.name,
13
- version: "2.2.4",
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
- }
61
- });
62
- await cmd.run(cmdDef, Arr.skip(process.argv, 2));
63
- //# sourceMappingURL=append-as-const.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"append-as-const.mjs","sources":["../../src/cmd/append-as-const.mts"],"sourcesContent":["#!/usr/bin/env node\n\nimport * as cmd from 'cmd-ts';\nimport { Arr, Result } from 'ts-data-forge';\nimport { appendAsConstTransformer } from '../functions/index.mjs';\nimport { runTransformerCLI } from './run-transformer-cli.mjs';\n\nconst transformer = appendAsConstTransformer();\n\nconst cmdDef = cmd.command({\n name: transformer.name,\n version: '2.2.4',\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,wBAAA,EAAyB;AAE7C,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,3 +0,0 @@
1
- #!/usr/bin/env node
2
- export {};
3
- //# sourceMappingURL=convert-interface-to-type.d.mts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"convert-interface-to-type.d.mts","sourceRoot":"","sources":["../../src/cmd/convert-interface-to-type.mts"],"names":[],"mappings":""}
@@ -1,63 +0,0 @@
1
- #!/usr/bin/env node
2
- import * as cmd from 'cmd-ts';
3
- import { Result, Arr } from 'ts-data-forge';
4
- import 'ts-morph';
5
- import '../functions/functions/is-atomic-type-node.mjs';
6
- import { convertInterfaceToTypeTransformer } from '../functions/ast-transformers/convert-interface-to-type.mjs';
7
- import '../functions/ast-transformers/readonly-transformer-helpers/constants.mjs';
8
- import { runTransformerCLI } from './run-transformer-cli.mjs';
9
-
10
- const transformer = convertInterfaceToTypeTransformer();
11
- const cmdDef = cmd.command({
12
- name: transformer.name,
13
- version: "2.2.4",
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
- }
61
- });
62
- await cmd.run(cmdDef, Arr.skip(process.argv, 2));
63
- //# sourceMappingURL=convert-interface-to-type.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"convert-interface-to-type.mjs","sources":["../../src/cmd/convert-interface-to-type.mts"],"sourcesContent":["#!/usr/bin/env node\n\nimport * as cmd from 'cmd-ts';\nimport { Arr, Result } from 'ts-data-forge';\nimport { convertInterfaceToTypeTransformer } from '../functions/index.mjs';\nimport { runTransformerCLI } from './run-transformer-cli.mjs';\n\nconst transformer = convertInterfaceToTypeTransformer();\n\nconst cmdDef = cmd.command({\n name: transformer.name,\n version: '2.2.4',\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,iCAAA,EAAkC;AAEtD,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,3 +0,0 @@
1
- #!/usr/bin/env node
2
- export {};
3
- //# sourceMappingURL=convert-to-readonly.d.mts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"convert-to-readonly.d.mts","sourceRoot":"","sources":["../../src/cmd/convert-to-readonly.mts"],"names":[],"mappings":""}
@@ -1,63 +0,0 @@
1
- #!/usr/bin/env node
2
- import * as cmd from 'cmd-ts';
3
- import { Result, Arr } from 'ts-data-forge';
4
- import 'ts-morph';
5
- import '../functions/functions/is-atomic-type-node.mjs';
6
- import { convertToReadonlyTransformer } from '../functions/ast-transformers/convert-to-readonly.mjs';
7
- import '../functions/ast-transformers/readonly-transformer-helpers/constants.mjs';
8
- import { runTransformerCLI } from './run-transformer-cli.mjs';
9
-
10
- const transformer = convertToReadonlyTransformer();
11
- const cmdDef = cmd.command({
12
- name: transformer.name,
13
- version: "2.2.4",
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
- }
61
- });
62
- await cmd.run(cmdDef, Arr.skip(process.argv, 2));
63
- //# sourceMappingURL=convert-to-readonly.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"convert-to-readonly.mjs","sources":["../../src/cmd/convert-to-readonly.mts"],"sourcesContent":["#!/usr/bin/env node\n\nimport * as cmd from 'cmd-ts';\nimport { Arr, Result } from 'ts-data-forge';\nimport { convertToReadonlyTransformer } from '../functions/index.mjs';\nimport { runTransformerCLI } from './run-transformer-cli.mjs';\n\nconst transformer = convertToReadonlyTransformer();\n\nconst cmdDef = cmd.command({\n name: transformer.name,\n version: '2.2.4',\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,4BAAA,EAA6B;AAEjD,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,3 +0,0 @@
1
- #!/usr/bin/env node
2
- export {};
3
- //# sourceMappingURL=replace-any-with-unknown.d.mts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"replace-any-with-unknown.d.mts","sourceRoot":"","sources":["../../src/cmd/replace-any-with-unknown.mts"],"names":[],"mappings":""}
@@ -1,63 +0,0 @@
1
- #!/usr/bin/env node
2
- import * as cmd from 'cmd-ts';
3
- import { Result, Arr } from 'ts-data-forge';
4
- import 'ts-morph';
5
- import '../functions/functions/is-atomic-type-node.mjs';
6
- import '../functions/ast-transformers/readonly-transformer-helpers/constants.mjs';
7
- import { replaceAnyWithUnknownTransformer } from '../functions/ast-transformers/replace-any-with-unknown.mjs';
8
- import { runTransformerCLI } from './run-transformer-cli.mjs';
9
-
10
- const transformer = replaceAnyWithUnknownTransformer();
11
- const cmdDef = cmd.command({
12
- name: transformer.name,
13
- version: "2.2.4",
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
- }
61
- });
62
- await cmd.run(cmdDef, Arr.skip(process.argv, 2));
63
- //# sourceMappingURL=replace-any-with-unknown.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"replace-any-with-unknown.mjs","sources":["../../src/cmd/replace-any-with-unknown.mts"],"sourcesContent":["#!/usr/bin/env node\n\nimport * as cmd from 'cmd-ts';\nimport { Arr, Result } from 'ts-data-forge';\nimport { replaceAnyWithUnknownTransformer } from '../functions/index.mjs';\nimport { runTransformerCLI } from './run-transformer-cli.mjs';\n\nconst transformer = replaceAnyWithUnknownTransformer();\n\nconst cmdDef = cmd.command({\n name: transformer.name,\n version: '2.2.4',\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,gCAAA,EAAiC;AAErD,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,3 +0,0 @@
1
- #!/usr/bin/env node
2
- export {};
3
- //# sourceMappingURL=replace-record-with-unknown-record.d.mts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"replace-record-with-unknown-record.d.mts","sourceRoot":"","sources":["../../src/cmd/replace-record-with-unknown-record.mts"],"names":[],"mappings":""}
@@ -1,63 +0,0 @@
1
- #!/usr/bin/env node
2
- import * as cmd from 'cmd-ts';
3
- import { Result, Arr } from 'ts-data-forge';
4
- import 'ts-morph';
5
- import '../functions/functions/is-atomic-type-node.mjs';
6
- import '../functions/ast-transformers/readonly-transformer-helpers/constants.mjs';
7
- import { replaceRecordWithUnknownRecordTransformer } from '../functions/ast-transformers/replace-record-with-unknown-record.mjs';
8
- import { runTransformerCLI } from './run-transformer-cli.mjs';
9
-
10
- const transformer = replaceRecordWithUnknownRecordTransformer();
11
- const cmdDef = cmd.command({
12
- name: transformer.name,
13
- version: "2.2.4",
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
- }
61
- });
62
- await cmd.run(cmdDef, Arr.skip(process.argv, 2));
63
- //# sourceMappingURL=replace-record-with-unknown-record.mjs.map
@@ -1 +0,0 @@
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.4',\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,13 +0,0 @@
1
- import { Result } from 'ts-data-forge';
2
- import { type TsMorphTransformer } from '../functions/index.mjs';
3
- type GetFilesOptions = Readonly<{
4
- baseDir: string;
5
- exclude: readonly string[];
6
- uncommitted: boolean;
7
- diffFrom: string | undefined;
8
- silent: boolean;
9
- }>;
10
- type TransformerCLIOptions = GetFilesOptions;
11
- export declare const runTransformerCLI: (options: TransformerCLIOptions, transformers: readonly TsMorphTransformer[]) => Promise<Result<undefined, undefined>>;
12
- export {};
13
- //# sourceMappingURL=run-transformer-cli.d.mts.map
@@ -1 +0,0 @@
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"}
@@ -1,176 +0,0 @@
1
- import dedent from 'dedent';
2
- import * as fs from 'node:fs/promises';
3
- import * as path from 'node:path';
4
- import { Result, Arr, unknownToString } from 'ts-data-forge';
5
- import { getDiffFrom, glob, getUntrackedFiles, getModifiedFiles, getStagedFiles } from 'ts-repo-utils';
6
- import 'ts-morph';
7
- import '../functions/functions/is-atomic-type-node.mjs';
8
- import '../functions/ast-transformers/readonly-transformer-helpers/constants.mjs';
9
- import { transformSourceCode } from '../functions/ast-transformers/transform-source-code.mjs';
10
-
11
- const runTransformerCLI = async (options, transformers) => {
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.isEmpty(files)) {
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`
38
- ${hr}
39
- Summary:
40
- ✅ Transformed: ${transformedCount}
41
- ⏭️ Unchanged: ${unchangedCount}
42
- ❌ Errors: ${errorFiles.length}
43
- 📊 Total: ${files.length}
44
- `);
45
- if (Arr.isNonEmpty(errorFiles)) {
46
- echoIfNotSilent("\nFiles with errors:");
47
- for (const fileName of errorFiles) {
48
- echoIfNotSilent(` - ${fileName}`);
49
- }
50
- }
51
- echoIfNotSilent(hr);
52
- if (Arr.isNonEmpty(errorFiles)) {
53
- return Result.err(void 0);
54
- }
55
- return Result.ok(void 0);
56
- };
57
- const getFilesForTransformation = async (options) => {
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;
71
- }
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;
80
- }
81
- mut_files = Arr.setIntersection(mut_files, diffFiles.value);
82
- }
83
- return Result.ok(mut_files);
84
- };
85
- const getUncommittedFiles = async (silent) => {
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));
103
- };
104
- const getFilesFromGlob = async (baseDir, exclude, silent) => {
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);
120
- }
121
- return Result.err([globResult.value]);
122
- }
123
- return Result.ok(globResult.value);
124
- };
125
- const transformFiles = async (filePaths, transformers, silent) => {
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));
139
- }
140
- }
141
- return {
142
- transformedCount: mut_transformedCount,
143
- unchangedCount: mut_unchangedCount,
144
- errorFiles: mut_errorFiles
145
- };
146
- };
147
- const transformOneFile = async (filePath, transformers, silent) => {
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");
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
- }
173
- };
174
-
175
- export { runTransformerCLI };
176
- //# sourceMappingURL=run-transformer-cli.mjs.map
@@ -1 +0,0 @@
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.isEmpty(files)) {\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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"}