binary-collections 2.0.9 → 2.0.10

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 (253) hide show
  1. package/binaries/binary-executor.cjs +43 -0
  2. package/{bin → binaries}/clean-nodemodule +0 -0
  3. package/binaries/clean-nodemodule.cjs +43 -0
  4. package/binaries/clean-nodemodule.cmd +4 -0
  5. package/{bin → binaries}/clean-nodemodules +0 -0
  6. package/binaries/clean-nodemodules.cjs +43 -0
  7. package/binaries/clean-nodemodules.cmd +5 -0
  8. package/{bin → binaries}/dev +0 -0
  9. package/binaries/dev.cjs +43 -0
  10. package/{bin → binaries}/empty +0 -0
  11. package/binaries/empty.cjs +43 -0
  12. package/{bin → binaries}/git-reduce-size +0 -0
  13. package/binaries/git-reduce-size.cjs +43 -0
  14. package/binaries/javakill.cjs +43 -0
  15. package/{bin → binaries}/javakill.cmd +0 -0
  16. package/{bin → binaries}/kill-process +0 -0
  17. package/binaries/kill-process.cjs +43 -0
  18. package/binaries/nodekill.cjs +43 -0
  19. package/{bin → binaries}/nodekill.ps1 +0 -0
  20. package/{bin → binaries}/prod +0 -0
  21. package/binaries/prod.cjs +43 -0
  22. package/{bin → binaries}/rmfind +0 -0
  23. package/binaries/rmfind.cjs +43 -0
  24. package/{bin → binaries}/rmx +0 -0
  25. package/binaries/rmx.cjs +43 -0
  26. package/{bin → binaries}/submodule-token +0 -0
  27. package/binaries/submodule-token.cjs +43 -0
  28. package/docs-src/clean-github-actions-caches.md +26 -0
  29. package/docs-src/free-chatgpt.md +26 -0
  30. package/lib/binary-collections-config.cjs +3 -2
  31. package/lib/binary-collections-config.mjs +2 -2
  32. package/lib/binary-collections.cjs +452 -105
  33. package/lib/binary-collections.mjs +131 -84
  34. package/lib/changelog.cjs +3 -3
  35. package/lib/changelog.mjs +177 -171
  36. package/lib/chunk-4EWQC6GZ.mjs +382 -0
  37. package/lib/chunk-4ZI7BQKQ.mjs +381 -0
  38. package/lib/chunk-5J2BEPY5.mjs +83 -0
  39. package/lib/{chunk-4BYBVEYC.mjs → chunk-66PAU5PS.mjs} +5 -4
  40. package/lib/chunk-6HHJRKFB.mjs +59 -0
  41. package/lib/chunk-6S4NXESK.mjs +26 -0
  42. package/lib/{chunk-ZYAQRPUL.mjs → chunk-7YD7IPFF.mjs} +2 -2
  43. package/lib/{chunk-SH3L6HHV.mjs → chunk-A2JQXI5Z.mjs} +2 -2
  44. package/lib/{chunk-EGSSKVDH.mjs → chunk-A3VUZEJK.mjs} +1 -1
  45. package/lib/chunk-AGZYRDC2.mjs +323 -0
  46. package/lib/{chunk-VVEZVNIV.mjs → chunk-AI4CVPJ7.mjs} +6 -6
  47. package/lib/chunk-BDCHCWHD.mjs +136 -0
  48. package/lib/chunk-BEZKJ25G.mjs +140 -0
  49. package/lib/chunk-DI5MDPSN.mjs +386 -0
  50. package/lib/{chunk-ONIBBBQ3.mjs → chunk-E6FDDAOO.mjs} +4 -3
  51. package/lib/chunk-FKI7IEB5.mjs +172 -0
  52. package/lib/chunk-GJTGHXRA.mjs +356 -0
  53. package/lib/{chunk-YV7DO3YV.mjs → chunk-HLGOWBEO.mjs} +1 -1
  54. package/lib/chunk-HMRMTYZM.mjs +40 -0
  55. package/lib/chunk-HN52G2YL.mjs +305 -0
  56. package/lib/chunk-HO6GHCOB.mjs +385 -0
  57. package/lib/chunk-LEM5OMRP.mjs +384 -0
  58. package/lib/{chunk-YX5U7XDR.mjs → chunk-M3YIYRHT.mjs} +6 -5
  59. package/lib/chunk-O6SWBEOQ.mjs +81 -0
  60. package/lib/{chunk-JGR2NW6D.mjs → chunk-PDSXF5HY.mjs} +3 -3
  61. package/lib/{chunk-AASHBCRW.mjs → chunk-QQ4A6DLD.mjs} +8 -0
  62. package/lib/chunk-RCP7DHVY.mjs +190 -0
  63. package/lib/chunk-SBNDSKG5.mjs +136 -0
  64. package/lib/chunk-U6SO4QEV.mjs +320 -0
  65. package/lib/{chunk-APBWENF6.mjs → chunk-V3N3JEUF.mjs} +3 -3
  66. package/lib/chunk-XD6BJK6Q.mjs +351 -0
  67. package/lib/chunk-XVBFFVCJ.mjs +209 -0
  68. package/lib/chunk-YXSFGA2D.mjs +383 -0
  69. package/lib/clean-github-actions-caches.cjs +243 -148
  70. package/lib/clean-github-actions-caches.mjs +3 -2
  71. package/lib/del-gradle.cjs +2 -2
  72. package/lib/del-gradle.js +1 -1
  73. package/lib/del-gradle.mjs +2 -2
  74. package/lib/del-node-modules.cjs +2 -2
  75. package/lib/del-node-modules.js +1 -1
  76. package/lib/del-node-modules.mjs +2 -2
  77. package/lib/del-ps.cjs +29 -8
  78. package/lib/del-ps.js +2 -2
  79. package/lib/del-ps.mjs +7 -5
  80. package/lib/del-yarn-caches.cjs +26 -5
  81. package/lib/del-yarn-caches.js +38 -3
  82. package/lib/del-yarn-caches.mjs +6 -6
  83. package/lib/find-node-modules-cli.cjs +5 -4
  84. package/lib/find-node-modules-cli.js +1 -1
  85. package/lib/find-node-modules-cli.mjs +2 -2
  86. package/lib/find-node-modules.cjs +4 -3
  87. package/lib/{find-node-modules.d.ts → find-node-modules.d.cts} +1 -1
  88. package/lib/find-node-modules.mjs +2 -2
  89. package/lib/free-chatgpt.cjs +548 -0
  90. package/lib/free-chatgpt.js +51 -0
  91. package/lib/free-chatgpt.mjs +50 -0
  92. package/lib/git/gitattributes.cjs +1 -1
  93. package/lib/git/{gitattributes.d.mts → gitattributes.d.cts} +5 -7
  94. package/lib/git/gitattributes.mjs +2 -2
  95. package/lib/git/line-endings.cjs +297 -64
  96. package/lib/git/line-endings.mjs +4 -4
  97. package/lib/git/normalize.cjs +26 -36
  98. package/lib/git/normalize.mjs +2 -2
  99. package/lib/git/permissions.cjs +77 -11
  100. package/lib/git/permissions.mjs +3 -3
  101. package/lib/git/pull-strategy.cjs +76 -9
  102. package/lib/git/pull-strategy.mjs +3 -3
  103. package/lib/git/user-config.cjs +266 -83
  104. package/lib/git/user-config.mjs +4 -4
  105. package/lib/git/utils.cjs +40 -60
  106. package/lib/git/utils.mjs +2 -2
  107. package/lib/git-diff-cli.cjs +651 -0
  108. package/lib/git-diff-cli.d.ts +1 -0
  109. package/lib/git-diff-cli.js +15 -0
  110. package/lib/git-diff-cli.mjs +16 -0
  111. package/lib/git-diff.cjs +657 -58
  112. package/lib/git-diff.d.ts +38 -83
  113. package/lib/git-diff.js +152 -0
  114. package/lib/git-diff.mjs +23 -85
  115. package/lib/git-fix.cjs +685 -97
  116. package/lib/git-fix.mjs +14 -13
  117. package/lib/git-purge.cjs +3 -3
  118. package/lib/git-purge.d.cts +1 -0
  119. package/lib/git-purge.mjs +43 -37
  120. package/lib/index.cjs +7 -6
  121. package/lib/index.d.ts +1 -1
  122. package/lib/index.js +2 -5
  123. package/lib/index.mjs +4 -4
  124. package/lib/npm-run-series.cjs +3 -3
  125. package/lib/npm-run-series.mjs +42 -36
  126. package/lib/package-resolutions-updater.cjs +5 -5
  127. package/lib/package-resolutions-updater.mjs +266 -309
  128. package/lib/print-directory-tree.cjs +275 -210
  129. package/lib/print-directory-tree.mjs +2 -2
  130. package/lib/ps/connected-domain.cjs +25 -2
  131. package/lib/ps/connected-domain.d.ts +10 -2
  132. package/lib/ps/connected-domain.js +5 -2
  133. package/lib/ps/connected-domain.mjs +8 -4
  134. package/lib/ps/index.cjs +345 -322
  135. package/lib/ps/index.d.mjs +1 -1
  136. package/lib/ps/index.js +1 -1
  137. package/lib/ps/index.mjs +179 -182
  138. package/lib/ps/isWin.cjs +24 -1
  139. package/lib/ps/isWin.d.ts +1 -1
  140. package/lib/ps/isWin.js +3 -1
  141. package/lib/ps/isWin.mjs +8 -4
  142. package/lib/ps/table-parser.cjs +167 -159
  143. package/lib/ps/table-parser.d.ts +5 -0
  144. package/lib/ps/table-parser.js +10 -4
  145. package/lib/ps/table-parser.mjs +9 -5
  146. package/lib/remove-module.cjs +262 -0
  147. package/lib/remove-module.d.mts +1 -0
  148. package/lib/remove-module.mjs +111 -0
  149. package/lib/rmpath.cjs +274 -0
  150. package/lib/rmpath.d.mts +3 -0
  151. package/lib/rmpath.mjs +108 -0
  152. package/lib/submodule-install.cjs +264 -86
  153. package/lib/submodule-install.mjs +51 -3
  154. package/lib/submodule-remove-cli.cjs +103 -0
  155. package/lib/submodule-remove-cli.d.ts +1 -0
  156. package/lib/submodule-remove-cli.js +31 -0
  157. package/lib/submodule-remove-cli.mjs +28 -0
  158. package/lib/submodule-remove.cjs +43 -0
  159. package/lib/submodule-remove.d.cts +2 -0
  160. package/lib/submodule-remove.mjs +6 -0
  161. package/lib/utils/chatgpt.cjs +383 -0
  162. package/lib/utils/chatgpt.d.ts +31 -0
  163. package/lib/utils/chatgpt.js +541 -0
  164. package/lib/utils/chatgpt.mjs +8 -0
  165. package/lib/{utils.cjs → utils/index.cjs} +1 -1
  166. package/lib/{utils.mjs → utils/index.mjs} +2 -2
  167. package/lib/yarn-reinstall.cjs +172 -38
  168. package/lib/yarn-reinstall.mjs +2 -2
  169. package/package.json +91 -71
  170. package/readme.md +43 -69
  171. package/releases/readme.md +36 -0
  172. package/test/README.md +101 -0
  173. package/test/package.json +2 -1
  174. package/test-project/readme.md +26 -0
  175. package/tmp/test-repo/README.md +35 -0
  176. package/tmp/test-repo/package.json +1 -1
  177. package/tmp/typedoc/readme.md +320 -0
  178. package/bin/bash-dummy +0 -56
  179. package/bin/bash-dummy.cmd +0 -25
  180. package/bin/dir-tree.cmd +0 -7
  181. package/bin/git-diff +0 -4
  182. package/bin/git-diff.cmd +0 -7
  183. package/bin/git-fix +0 -36
  184. package/bin/git-fix.cmd +0 -7
  185. package/bin/rmpath +0 -70
  186. package/bin/submodule-install.txt +0 -118
  187. package/bin/submodule-remove +0 -46
  188. package/bin/submodule.txt +0 -172
  189. package/lib/binary-collections-config.d.mts +0 -18
  190. package/lib/binary-collections-config.js +0 -39
  191. package/lib/binary-collections.d.mts +0 -137
  192. package/lib/binary-collections.d.ts +0 -137
  193. package/lib/changelog.d.mts +0 -2
  194. package/lib/changelog.js +0 -226
  195. package/lib/chunk-DPKAJKFO.mjs +0 -171
  196. package/lib/chunk-G3THLIDT.mjs +0 -200
  197. package/lib/chunk-W3ENOM53.mjs +0 -18
  198. package/lib/clean-github-actions-caches.d.mts +0 -169
  199. package/lib/clean-github-actions-caches.d.ts +0 -169
  200. package/lib/del-gradle.d.mts +0 -2
  201. package/lib/del-node-modules.d.mts +0 -2
  202. package/lib/del-ps.d.mts +0 -2
  203. package/lib/del-yarn-caches.d.mts +0 -2
  204. package/lib/find-node-modules-cli.d.mts +0 -1
  205. package/lib/find-node-modules.d.mts +0 -13
  206. package/lib/find-node-modules.js +0 -53
  207. package/lib/git/line-endings.d.mts +0 -83
  208. package/lib/git/line-endings.d.ts +0 -83
  209. package/lib/git/normalize.d.mts +0 -43
  210. package/lib/git/normalize.d.ts +0 -43
  211. package/lib/git/permissions.d.mts +0 -17
  212. package/lib/git/permissions.d.ts +0 -17
  213. package/lib/git/pull-strategy.d.mts +0 -15
  214. package/lib/git/pull-strategy.d.ts +0 -15
  215. package/lib/git/user-config.d.mts +0 -105
  216. package/lib/git/user-config.d.ts +0 -105
  217. package/lib/git/utils.d.mts +0 -69
  218. package/lib/git/utils.d.ts +0 -69
  219. package/lib/git-diff.d.mts +0 -84
  220. package/lib/git-fix.d.mts +0 -141
  221. package/lib/git-fix.d.ts +0 -141
  222. package/lib/git-purge.d.mts +0 -2
  223. package/lib/git-purge.js +0 -59
  224. package/lib/index.d.mts +0 -1
  225. package/lib/npm-run-series.d.mts +0 -1
  226. package/lib/npm-run-series.d.ts +0 -2
  227. package/lib/npm-run-series.js +0 -86
  228. package/lib/package-resolutions-updater.d.ts +0 -352
  229. package/lib/print-directory-tree.d.mts +0 -234
  230. package/lib/print-directory-tree.d.ts +0 -234
  231. package/lib/ps/connected-domain.d.mts +0 -3
  232. package/lib/ps/index.d.d.mts +0 -26
  233. package/lib/ps/index.d.d.ts +0 -26
  234. package/lib/ps/index.d.mts +0 -26
  235. package/lib/ps/isWin.d.mts +0 -3
  236. package/lib/ps/table-parser.d.mts +0 -3
  237. package/lib/submodule-install.d.mts +0 -121
  238. package/lib/submodule-install.d.ts +0 -121
  239. package/lib/utils.d.mts +0 -40
  240. package/lib/utils.js +0 -181
  241. package/lib/yarn-reinstall.d.mts +0 -49
  242. package/lib/yarn-reinstall.d.ts +0 -49
  243. package/src/package-resolutions-updater.mjs +0 -350
  244. package/src/print-directory-tree.cjs +0 -234
  245. package/src/ps/index.js +0 -286
  246. package/src/yarn-reinstall.cjs +0 -49
  247. /package/{bin → binaries}/nodekill +0 -0
  248. /package/{bin → binaries}/nodekill.cmd +0 -0
  249. /package/lib/{binary-collections-config.d.ts → binary-collections-config.d.cts} +0 -0
  250. /package/lib/{changelog.d.ts → changelog.d.cts} +0 -0
  251. /package/lib/{git-purge.d.ts → free-chatgpt.d.ts} +0 -0
  252. /package/lib/{git-diff.d.cts → npm-run-series.d.cts} +0 -0
  253. /package/lib/{utils.d.ts → utils/index.d.cts} +0 -0
@@ -1,17 +0,0 @@
1
- const { runGitCommand } = require("./utils.cjs");
2
-
3
- /**
4
- * Configure git to ignore file permission changes
5
- * - Sets core.filemode = false
6
- * - Sets diff.ignoreSubmodules = dirty
7
- */
8
- function ignoreFilePermissions() {
9
- console.log("\n=== Configuring File Permissions ===");
10
-
11
- runGitCommand(["config", "core.filemode", "false"], "Ignore file permission changes");
12
- runGitCommand(["config", "diff.ignoreSubmodules", "dirty"], "Ignore submodule permission changes");
13
- }
14
-
15
- module.exports = {
16
- ignoreFilePermissions
17
- };
@@ -1,17 +0,0 @@
1
- const { runGitCommand } = require("./utils.cjs");
2
-
3
- /**
4
- * Configure git to ignore file permission changes
5
- * - Sets core.filemode = false
6
- * - Sets diff.ignoreSubmodules = dirty
7
- */
8
- function ignoreFilePermissions() {
9
- console.log("\n=== Configuring File Permissions ===");
10
-
11
- runGitCommand(["config", "core.filemode", "false"], "Ignore file permission changes");
12
- runGitCommand(["config", "diff.ignoreSubmodules", "dirty"], "Ignore submodule permission changes");
13
- }
14
-
15
- module.exports = {
16
- ignoreFilePermissions
17
- };
@@ -1,15 +0,0 @@
1
- const { runGitCommand } = require("./utils.cjs");
2
-
3
- /**
4
- * Set git pull strategy to disable automatic rebase
5
- * - Sets pull.rebase = false
6
- */
7
- function setPullStrategy() {
8
- console.log("\n=== Configuring Pull Strategy ===");
9
-
10
- runGitCommand(["config", "pull.rebase", "false"], "Disable automatic rebase on pull");
11
- }
12
-
13
- module.exports = {
14
- setPullStrategy
15
- };
@@ -1,15 +0,0 @@
1
- const { runGitCommand } = require("./utils.cjs");
2
-
3
- /**
4
- * Set git pull strategy to disable automatic rebase
5
- * - Sets pull.rebase = false
6
- */
7
- function setPullStrategy() {
8
- console.log("\n=== Configuring Pull Strategy ===");
9
-
10
- runGitCommand(["config", "pull.rebase", "false"], "Disable automatic rebase on pull");
11
- }
12
-
13
- module.exports = {
14
- setPullStrategy
15
- };
@@ -1,105 +0,0 @@
1
- const gch = require("git-command-helper");
2
- const { runGitCommand, runGitCommandOutput } = require("./utils.cjs");
3
- const { getArgs } = require("../utils.js");
4
-
5
- /**
6
- * Configure Git user from CLI arguments or environment variables
7
- * @param {string|null} cliUser - Username from CLI arguments
8
- * @param {string|null} cliEmail - Email from CLI arguments
9
- * @param {object} [options] - Options object
10
- * @param {boolean} [options.updateRemote] - If true, update remote URL without prompt
11
- */
12
- function configureGitUser(cliUser = null, cliEmail = null, options = {}) {
13
- console.log("\n=== Configuring Git User ===");
14
-
15
- // Determine user and email with CLI args taking precedence
16
- let username, email;
17
-
18
- if (cliUser && cliEmail) {
19
- username = cliUser.trim();
20
- email = cliEmail.trim();
21
- console.log("[i] Using CLI-provided user configuration");
22
- } else {
23
- username = process.env.GITHUB_USER ? process.env.GITHUB_USER.trim() : undefined;
24
- email = process.env.GITHUB_EMAIL ? process.env.GITHUB_EMAIL.trim() : undefined;
25
- if (username || email) {
26
- console.log("[i] Using environment variable user configuration");
27
- }
28
- }
29
-
30
- if (!username && !email) {
31
- console.log("[i] No Git user configuration needed (no CLI args or environment variables set)");
32
- return;
33
- }
34
-
35
- if (username) {
36
- const success = runGitCommand(["config", "user.name", username], `Set Git username to "${username}"`);
37
- if (!success) {
38
- console.log("[i] Failed to set Git username, but continuing...");
39
- }
40
- } else {
41
- console.log("[i] No username provided, skipping username configuration");
42
- }
43
-
44
- if (email) {
45
- const success = runGitCommand(["config", "user.email", email], `Set Git email to "${email}"`);
46
- if (!success) {
47
- console.log("[i] Failed to set Git email, but continuing...");
48
- }
49
- } else {
50
- console.log("[i] No email provided, skipping email configuration");
51
- }
52
-
53
- if (username || email) {
54
- console.log("[✓] Git user configuration completed");
55
- }
56
-
57
- if (username) {
58
- // Ask user to modify the origin remote URL if it doesn't match the username
59
- const remoteUrl = runGitCommandOutput(["remote", "get-url", "origin"], "Fetching remote URL for verification");
60
- if (remoteUrl) {
61
- console.log(`[i] Remote URL: ${remoteUrl}`);
62
- const parsedUrl = gch.parseGitHubUrl(remoteUrl);
63
- if (parsedUrl && parsedUrl.owner && username && parsedUrl.owner.toLowerCase() !== username.toLowerCase()) {
64
- console.warn(
65
- `\n[!] The GitHub remote owner ("${parsedUrl.owner}") does not match the configured username ("${username}").`
66
- );
67
- console.warn(`[!] If this is not intentional, consider updating the remote URL to use your username.`);
68
- console.warn(`[!] Example: git remote set-url origin https://github.com/${username}/<repo>.git\n`);
69
- // Check for --update-remote CLI argument or options.updateRemote
70
- const args = getArgs();
71
- const updateRemote = options.updateRemote || args["update-remote"] === true;
72
- if (updateRemote) {
73
- // Only update the username in the URL, not the repo path
74
- let newUrl = remoteUrl;
75
- // Handle https:// and git@ URLs
76
- if (/^https:\/\//.test(remoteUrl)) {
77
- newUrl = remoteUrl.replace(/https:\/\/(?:[^@]+@)?github.com/, `https://${username}@github.com`);
78
- } else if (/^git@github.com:/.test(remoteUrl)) {
79
- // For git@github.com:user/repo.git, do not change path, just warn user to use HTTPS with username if needed
80
- console.warn(
81
- `[!] For SSH remotes, set your SSH config or use HTTPS with username if you want to change authentication user.`
82
- );
83
- return;
84
- }
85
- if (newUrl !== remoteUrl) {
86
- const updated = runGitCommand(["remote", "set-url", "origin", newUrl], `Set origin to ${newUrl}`);
87
- if (updated) {
88
- console.log(`[✓] Remote URL updated to: ${newUrl}`);
89
- } else {
90
- console.warn(`[!] Failed to update remote URL. Please update it manually if needed.`);
91
- }
92
- } else {
93
- console.log(`[i] Remote URL does not use HTTPS or already contains the username.`);
94
- }
95
- } else {
96
- console.log(`[i] Remote URL not changed. Use --update-remote to update automatically.`);
97
- }
98
- }
99
- }
100
- }
101
- }
102
-
103
- module.exports = {
104
- configureGitUser
105
- };
@@ -1,105 +0,0 @@
1
- const gch = require("git-command-helper");
2
- const { runGitCommand, runGitCommandOutput } = require("./utils.cjs");
3
- const { getArgs } = require("../utils.js");
4
-
5
- /**
6
- * Configure Git user from CLI arguments or environment variables
7
- * @param {string|null} cliUser - Username from CLI arguments
8
- * @param {string|null} cliEmail - Email from CLI arguments
9
- * @param {object} [options] - Options object
10
- * @param {boolean} [options.updateRemote] - If true, update remote URL without prompt
11
- */
12
- function configureGitUser(cliUser = null, cliEmail = null, options = {}) {
13
- console.log("\n=== Configuring Git User ===");
14
-
15
- // Determine user and email with CLI args taking precedence
16
- let username, email;
17
-
18
- if (cliUser && cliEmail) {
19
- username = cliUser.trim();
20
- email = cliEmail.trim();
21
- console.log("[i] Using CLI-provided user configuration");
22
- } else {
23
- username = process.env.GITHUB_USER ? process.env.GITHUB_USER.trim() : undefined;
24
- email = process.env.GITHUB_EMAIL ? process.env.GITHUB_EMAIL.trim() : undefined;
25
- if (username || email) {
26
- console.log("[i] Using environment variable user configuration");
27
- }
28
- }
29
-
30
- if (!username && !email) {
31
- console.log("[i] No Git user configuration needed (no CLI args or environment variables set)");
32
- return;
33
- }
34
-
35
- if (username) {
36
- const success = runGitCommand(["config", "user.name", username], `Set Git username to "${username}"`);
37
- if (!success) {
38
- console.log("[i] Failed to set Git username, but continuing...");
39
- }
40
- } else {
41
- console.log("[i] No username provided, skipping username configuration");
42
- }
43
-
44
- if (email) {
45
- const success = runGitCommand(["config", "user.email", email], `Set Git email to "${email}"`);
46
- if (!success) {
47
- console.log("[i] Failed to set Git email, but continuing...");
48
- }
49
- } else {
50
- console.log("[i] No email provided, skipping email configuration");
51
- }
52
-
53
- if (username || email) {
54
- console.log("[✓] Git user configuration completed");
55
- }
56
-
57
- if (username) {
58
- // Ask user to modify the origin remote URL if it doesn't match the username
59
- const remoteUrl = runGitCommandOutput(["remote", "get-url", "origin"], "Fetching remote URL for verification");
60
- if (remoteUrl) {
61
- console.log(`[i] Remote URL: ${remoteUrl}`);
62
- const parsedUrl = gch.parseGitHubUrl(remoteUrl);
63
- if (parsedUrl && parsedUrl.owner && username && parsedUrl.owner.toLowerCase() !== username.toLowerCase()) {
64
- console.warn(
65
- `\n[!] The GitHub remote owner ("${parsedUrl.owner}") does not match the configured username ("${username}").`
66
- );
67
- console.warn(`[!] If this is not intentional, consider updating the remote URL to use your username.`);
68
- console.warn(`[!] Example: git remote set-url origin https://github.com/${username}/<repo>.git\n`);
69
- // Check for --update-remote CLI argument or options.updateRemote
70
- const args = getArgs();
71
- const updateRemote = options.updateRemote || args["update-remote"] === true;
72
- if (updateRemote) {
73
- // Only update the username in the URL, not the repo path
74
- let newUrl = remoteUrl;
75
- // Handle https:// and git@ URLs
76
- if (/^https:\/\//.test(remoteUrl)) {
77
- newUrl = remoteUrl.replace(/https:\/\/(?:[^@]+@)?github.com/, `https://${username}@github.com`);
78
- } else if (/^git@github.com:/.test(remoteUrl)) {
79
- // For git@github.com:user/repo.git, do not change path, just warn user to use HTTPS with username if needed
80
- console.warn(
81
- `[!] For SSH remotes, set your SSH config or use HTTPS with username if you want to change authentication user.`
82
- );
83
- return;
84
- }
85
- if (newUrl !== remoteUrl) {
86
- const updated = runGitCommand(["remote", "set-url", "origin", newUrl], `Set origin to ${newUrl}`);
87
- if (updated) {
88
- console.log(`[✓] Remote URL updated to: ${newUrl}`);
89
- } else {
90
- console.warn(`[!] Failed to update remote URL. Please update it manually if needed.`);
91
- }
92
- } else {
93
- console.log(`[i] Remote URL does not use HTTPS or already contains the username.`);
94
- }
95
- } else {
96
- console.log(`[i] Remote URL not changed. Use --update-remote to update automatically.`);
97
- }
98
- }
99
- }
100
- }
101
- }
102
-
103
- module.exports = {
104
- configureGitUser
105
- };
@@ -1,69 +0,0 @@
1
- const { execSync, spawnSync } = require("child_process");
2
- /**
3
- * Execute a git command with proper error handling and logging
4
- * @param {string[]} args - Git command arguments
5
- * @param {string} description - Description of the operation for logging
6
- * @returns {boolean} - True if successful, false otherwise
7
- */
8
- function runGitCommand(args, description) {
9
- try {
10
- console.log(`[i] ${description}`);
11
- const result = spawnSync("git", args, { encoding: "utf-8" });
12
- if (result.status !== 0) {
13
- console.error(`[✗] Failed: ${description}`);
14
- console.error(`Error: ${result.stderr || result.stdout}`);
15
- return false;
16
- }
17
- console.log(`[✓] ${description}`);
18
- return true;
19
- } catch (error) {
20
- console.error(`[✗] Failed: ${description}`);
21
- console.error(`Error: ${error.message}`);
22
- return false;
23
- }
24
- }
25
-
26
- /**
27
- * Check if the given cwd (or current directory) is a git repository
28
- * @param {string} [cwd] - Directory to check (defaults to current directory at call time)
29
- * @returns {boolean} - True if in a git repository, false otherwise
30
- */
31
- function isGitRepository(cwd) {
32
- const dir = typeof cwd === "string" ? cwd : process.cwd();
33
- try {
34
- execSync("git rev-parse --git-dir", { stdio: "pipe", cwd: dir });
35
- return true;
36
- } catch {
37
- return false;
38
- }
39
- }
40
-
41
- /**
42
- * Execute a git command and return stdout (or null on error)
43
- * @param {string[]} args - Git command arguments
44
- * @param {string} description - Description of the operation for logging
45
- * @returns {string|null} - stdout string if successful, null otherwise
46
- */
47
- function runGitCommandOutput(args, description) {
48
- try {
49
- console.log(`[i] ${description}`);
50
- const result = spawnSync("git", args, { encoding: "utf-8" });
51
- if (result.status !== 0) {
52
- console.error(`[✗] Failed: ${description}`);
53
- console.error(`Error: ${result.stderr || result.stdout}`);
54
- return null;
55
- }
56
- console.log(`[✓] ${description}`);
57
- return result.stdout.trim();
58
- } catch (error) {
59
- console.error(`[✗] Failed: ${description}`);
60
- console.error(`Error: ${error.message}`);
61
- return null;
62
- }
63
- }
64
-
65
- module.exports = {
66
- runGitCommand,
67
- runGitCommandOutput,
68
- isGitRepository
69
- };
@@ -1,69 +0,0 @@
1
- const { execSync, spawnSync } = require("child_process");
2
- /**
3
- * Execute a git command with proper error handling and logging
4
- * @param {string[]} args - Git command arguments
5
- * @param {string} description - Description of the operation for logging
6
- * @returns {boolean} - True if successful, false otherwise
7
- */
8
- function runGitCommand(args, description) {
9
- try {
10
- console.log(`[i] ${description}`);
11
- const result = spawnSync("git", args, { encoding: "utf-8" });
12
- if (result.status !== 0) {
13
- console.error(`[✗] Failed: ${description}`);
14
- console.error(`Error: ${result.stderr || result.stdout}`);
15
- return false;
16
- }
17
- console.log(`[✓] ${description}`);
18
- return true;
19
- } catch (error) {
20
- console.error(`[✗] Failed: ${description}`);
21
- console.error(`Error: ${error.message}`);
22
- return false;
23
- }
24
- }
25
-
26
- /**
27
- * Check if the given cwd (or current directory) is a git repository
28
- * @param {string} [cwd] - Directory to check (defaults to current directory at call time)
29
- * @returns {boolean} - True if in a git repository, false otherwise
30
- */
31
- function isGitRepository(cwd) {
32
- const dir = typeof cwd === "string" ? cwd : process.cwd();
33
- try {
34
- execSync("git rev-parse --git-dir", { stdio: "pipe", cwd: dir });
35
- return true;
36
- } catch {
37
- return false;
38
- }
39
- }
40
-
41
- /**
42
- * Execute a git command and return stdout (or null on error)
43
- * @param {string[]} args - Git command arguments
44
- * @param {string} description - Description of the operation for logging
45
- * @returns {string|null} - stdout string if successful, null otherwise
46
- */
47
- function runGitCommandOutput(args, description) {
48
- try {
49
- console.log(`[i] ${description}`);
50
- const result = spawnSync("git", args, { encoding: "utf-8" });
51
- if (result.status !== 0) {
52
- console.error(`[✗] Failed: ${description}`);
53
- console.error(`Error: ${result.stderr || result.stdout}`);
54
- return null;
55
- }
56
- console.log(`[✓] ${description}`);
57
- return result.stdout.trim();
58
- } catch (error) {
59
- console.error(`[✗] Failed: ${description}`);
60
- console.error(`Error: ${error.message}`);
61
- return null;
62
- }
63
- }
64
-
65
- module.exports = {
66
- runGitCommand,
67
- runGitCommandOutput,
68
- isGitRepository
69
- };
@@ -1,84 +0,0 @@
1
- #!/usr/bin/env node
2
- const { execSync } = require("child_process");
3
- const fs = require("fs");
4
- const path = require("path");
5
- const { getTempPath } = require("./binary-collections-config");
6
-
7
- // Output path using centralized temp directory configuration
8
- const OUTPUT = getTempPath("git-diff.txt");
9
- const CACHE_DIR = path.dirname(OUTPUT);
10
-
11
- // Ensure output directory exists
12
- if (!fs.existsSync(CACHE_DIR)) {
13
- fs.mkdirSync(CACHE_DIR, { recursive: true });
14
- }
15
-
16
- function showHelp() {
17
- console.log("Git Diff Helper");
18
- console.log("----------------------------");
19
- console.log("Usage:");
20
- console.log(" git-diff FILE Show staged diff of specified file");
21
- console.log(" git-diff --staged-only Show staged diff of all files");
22
- console.log(" git-diff -s | -S Same as --staged-only");
23
- console.log(" git-diff --help | -h Show this help message");
24
- console.log("");
25
- console.log(`Output is saved to: ${OUTPUT}`);
26
- process.exit(0);
27
- }
28
-
29
- function runGitDiff(command, successMessage, errorMessage) {
30
- try {
31
- console.log(`[i] Running command: ${command}`);
32
- const result = execSync(command, {
33
- encoding: "utf8",
34
- maxBuffer: 1024 * 1024 * 10 // 10MB buffer to handle large diffs
35
- });
36
-
37
- // If result is empty, inform user but don't treat as error
38
- if (!result || result.trim() === "") {
39
- console.log(`[i] No changes found for the specified criteria`);
40
- fs.writeFileSync(OUTPUT, "# No changes found\n");
41
- console.log(`[✓] Empty diff saved to "${OUTPUT}"`);
42
- return;
43
- }
44
-
45
- fs.writeFileSync(OUTPUT, result);
46
- console.log(`[✓] ${successMessage}`);
47
- } catch (error) {
48
- console.error(`[✗] ${errorMessage}`);
49
- console.error(`Command: ${command}`);
50
- console.error(`Error: ${error.message}`);
51
-
52
- // Check if it's a git-related error
53
- if (error.message.includes("not a git repository")) {
54
- console.error("Make sure you are in a git repository");
55
- }
56
-
57
- process.exit(1);
58
- }
59
- }
60
-
61
- const { getArgs } = require("./utils.js");
62
- const args = getArgs();
63
- const positional = args._ || [];
64
-
65
- // Show help if no arguments or --help/-h is passed
66
- if (args.help || args.h) {
67
- showHelp();
68
- }
69
-
70
- if (args["staged-only"] || args.s || args.S) {
71
- runGitDiff("git --no-pager diff --staged", `Full staged diff saved to "${OUTPUT}"`, "Failed to save staged diff");
72
- } else {
73
- // Handle specific file diff
74
- const file = positional[0];
75
- if (!file) {
76
- runGitDiff("git --no-pager diff", `Full staged diff saved to "${OUTPUT}"`, "Failed to save all diff's");
77
- } else {
78
- runGitDiff(
79
- `git --no-pager diff --cached -- "${file}"`,
80
- `Staged diff of "${file}" saved to "${OUTPUT}"`,
81
- `Failed to generate diff for "${file}"`
82
- );
83
- }
84
- }
package/lib/git-fix.d.mts DELETED
@@ -1,141 +0,0 @@
1
- #!/usr/bin/env node
2
- const { isGitRepository } = require("./git/utils.cjs");
3
- const { forceLfLineEndings } = require("./git/line-endings.cjs");
4
- const { ignoreFilePermissions } = require("./git/permissions.cjs");
5
- const { setPullStrategy } = require("./git/pull-strategy.cjs");
6
- const { configureGitUser } = require("./git/user-config.cjs");
7
- const { normalizeLineEndings } = require("./git/normalize.cjs");
8
- const { getArgs } = require("./utils.js");
9
- const path = require("upath");
10
-
11
- function showHelp() {
12
- console.log("Git Fix Utility");
13
- console.log("----------------------------");
14
- console.log("Fixes common Git configuration issues:");
15
- console.log("• Forces LF line endings (core.autocrlf = false)");
16
- console.log("• Ignores file permission changes (core.filemode = false)");
17
- console.log("• Sets pull strategy to false (prevents auto-rebase)");
18
- console.log("• Normalizes existing line endings");
19
- console.log("• Configures Git user from environment variables");
20
- console.log("");
21
- console.log("Usage:");
22
- console.log(" git-fix Apply all fixes");
23
- console.log(" git-fix --lf-only Force LF line endings only");
24
- console.log(" git-fix --permissions Ignore file permissions only");
25
- console.log(" git-fix --normalize Normalize existing files only");
26
- console.log(" git-fix --user Configure Git user from environment");
27
- console.log(" git-fix --user NAME EMAIL Configure Git user with specified name and email");
28
- console.log(" git-fix --help | -h Show this help message");
29
- console.log("");
30
- console.log("Options can be combined: git-fix --lf-only --permissions");
31
- console.log("");
32
- console.log("User configuration precedence:");
33
- console.log(" 1. CLI arguments (--user NAME EMAIL)");
34
- console.log(" 2. Environment variables (GITHUB_USER, GITHUB_EMAIL)");
35
- console.log(" 3. Skip if neither provided");
36
- console.log("");
37
- console.log("Environment variables for --user option:");
38
- console.log(" GITHUB_USER - Git username (for user.name)");
39
- console.log(" GITHUB_EMAIL - Git email (for user.email)");
40
- process.exit(0);
41
- }
42
-
43
- const args = getArgs();
44
-
45
- let userConfig = { hasUserFlag: false, cliUser: null, cliEmail: null };
46
- if (Object.prototype.hasOwnProperty.call(args, "user")) {
47
- userConfig.hasUserFlag = true;
48
- // args.user can be string, array, or boolean
49
- if (Array.isArray(args.user)) {
50
- if (args.user.length === 2) {
51
- userConfig.cliUser = args.user[0];
52
- userConfig.cliEmail = args.user[1];
53
- } else if (args.user.length === 1) {
54
- // Only one value provided, error
55
- console.error("[✗] Error: --user requires both NAME and EMAIL or no arguments");
56
- console.error("Usage: --user (uses environment variables) or --user NAME EMAIL");
57
- process.exit(1);
58
- }
59
- // If length === 0, treat as env
60
- } else if (typeof args.user === "string") {
61
- // Only one value provided, error
62
- console.error("[✗] Error: --user requires both NAME and EMAIL or no arguments");
63
- console.error("Usage: --user (uses environment variables) or --user NAME EMAIL");
64
- process.exit(1);
65
- }
66
- }
67
-
68
- // Show help if requested
69
- if (args.help || args.h) {
70
- showHelp();
71
- process.exit(0); // Exit after showing help
72
- }
73
-
74
- console.log("[i] Current working directory:", path.toUnix(process.cwd()));
75
-
76
- // Check if we're in a git repository
77
- if (!isGitRepository(process.cwd())) {
78
- console.error("[✗] Error: Not in a git repository");
79
- console.error("Please run this command from within a git repository");
80
- process.exit(1);
81
- } else {
82
- console.log("[✓] Detected git repository");
83
- }
84
-
85
- console.log("Git Fix Utility");
86
- console.log("===============");
87
-
88
- // Parse options
89
- const options = {
90
- lfOnly: args["lf-only"] === true,
91
- permissions: args["permissions"] === true,
92
- normalize: args["normalize"] === true,
93
- user: userConfig.hasUserFlag,
94
- updateRemote: args["update-remote"] === true,
95
- all: Object.keys(args).filter((k) => k !== "_" && args[k] === true).length === 0 && !userConfig.hasUserFlag
96
- };
97
-
98
- // Execute requested fixes
99
- if (options.all || options.lfOnly) {
100
- forceLfLineEndings();
101
- }
102
-
103
- if (options.all || options.permissions) {
104
- ignoreFilePermissions();
105
- }
106
-
107
- if (options.all) {
108
- setPullStrategy();
109
- }
110
-
111
- if (options.all || options.user) {
112
- configureGitUser(userConfig.cliUser, userConfig.cliEmail, { updateRemote: options.updateRemote });
113
- } else if (options.updateRemote) {
114
- // If --update-remote is present without --user or --all, still call configureGitUser
115
- configureGitUser(null, null, { updateRemote: true });
116
- }
117
-
118
- if (options.all || options.normalize) {
119
- normalizeLineEndings();
120
- }
121
-
122
- console.log("\n=== Summary ===");
123
- console.log("[✓] Git fix utility completed successfully");
124
-
125
- if (options.all || options.lfOnly || options.normalize) {
126
- console.log("[i] Line endings are now configured for LF");
127
- }
128
-
129
- if (options.all || options.permissions) {
130
- console.log("[i] File permission changes will be ignored");
131
- }
132
-
133
- if (options.all || options.user) {
134
- const username = userConfig.cliUser || process.env.GITHUB_USER?.trim();
135
- const email = userConfig.cliEmail || process.env.GITHUB_EMAIL?.trim();
136
- if (username || email) {
137
- console.log("[i] Git user configuration has been applied");
138
- }
139
- }
140
-
141
- console.log("[i] Repository is ready for cross-platform development");