binary-collections 2.0.11 → 2.0.13

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 (330) hide show
  1. package/binaries/binary-executor.cjs +89 -13
  2. package/binaries/clean-nodemodule.cjs +89 -13
  3. package/binaries/clean-nodemodules.cjs +89 -13
  4. package/binaries/dev.cjs +89 -13
  5. package/binaries/empty.cjs +89 -13
  6. package/binaries/git-reduce-size.cjs +89 -13
  7. package/binaries/javakill.cjs +89 -13
  8. package/binaries/kill-process.cjs +89 -13
  9. package/binaries/nodekill.cjs +89 -13
  10. package/binaries/prod.cjs +89 -13
  11. package/binaries/py.cjs +89 -13
  12. package/binaries/rmfind.cjs +89 -13
  13. package/binaries/rmx +15 -1
  14. package/binaries/rmx.cjs +89 -13
  15. package/binaries/rmx.cmd +12 -0
  16. package/binaries/submodule-token.cjs +89 -13
  17. package/binaries/test-cjs +9 -1
  18. package/binaries/test-cjs.cjs +89 -13
  19. package/binaries/test-cjs.cmd +16 -1
  20. package/binaries/test-esm +16 -0
  21. package/binaries/test-esm.cjs +254 -0
  22. package/binaries/test-esm.cmd +23 -0
  23. package/binaries/yarn-clean +1 -1
  24. package/binaries/yarn-clean.cjs +89 -13
  25. package/binaries/yarn-clean.cmd +1 -1
  26. package/binaries/yarn-clean.py +33 -15
  27. package/binaries/yc +131 -0
  28. package/binaries/yc.cjs +254 -0
  29. package/binaries/ycw +256 -0
  30. package/binaries/ycw.cjs +254 -0
  31. package/docs-src/binary-collections.md +34 -0
  32. package/docs-src/changelog.md +26 -0
  33. package/docs-src/clean-github-actions-caches.md +91 -2
  34. package/docs-src/copy-move-file.md +59 -0
  35. package/docs-src/del-gradle.md +17 -0
  36. package/docs-src/del-ps.md +28 -0
  37. package/docs-src/downloader.md +62 -0
  38. package/docs-src/env-helpers.md +29 -0
  39. package/docs-src/find-node-modules.md +17 -0
  40. package/docs-src/git-diff.md +33 -0
  41. package/docs-src/git-fix.md +34 -0
  42. package/docs-src/git-purge.md +17 -0
  43. package/docs-src/git-reduce-size.md +17 -0
  44. package/docs-src/git-undo.md +21 -0
  45. package/docs-src/kill-night-crows.md +26 -0
  46. package/docs-src/node-cache-cleaner.md +182 -0
  47. package/docs-src/node-executor.md +50 -0
  48. package/docs-src/node-package-packer.md +48 -0
  49. package/docs-src/npm-run-series.md +43 -0
  50. package/docs-src/package-resolutions-updater.md +22 -0
  51. package/docs-src/php-cs-fixer-staged.md +19 -0
  52. package/docs-src/print-directory-tree.md +35 -0
  53. package/docs-src/print-tarball-tree.md +55 -0
  54. package/docs-src/py.md +19 -0
  55. package/docs-src/remove-module.md +32 -0
  56. package/docs-src/rmfind-rmx.md +21 -0
  57. package/docs-src/rmpath.md +38 -0
  58. package/docs-src/run-by-checksum.md +87 -0
  59. package/docs-src/submodule-install.md +31 -0
  60. package/docs-src/submodule-remove.md +22 -0
  61. package/docs-src/submodule-token.md +17 -0
  62. package/docs-src/test-runners.md +21 -0
  63. package/docs-src/yarn-install.md +31 -0
  64. package/docs-src/yarn-reinstall.md +27 -0
  65. package/lib/binary-collections/config.cjs +126 -0
  66. package/lib/binary-collections/config.mjs +7 -0
  67. package/lib/binary-collections/executeScript.cjs +19 -0
  68. package/lib/binary-collections/executeScript.d.cts +12 -0
  69. package/lib/binary-collections/executeScript.mjs +6 -0
  70. package/lib/binary-collections/findScript.cjs +309 -0
  71. package/lib/binary-collections/findScript.d.cts +12 -0
  72. package/lib/binary-collections/findScript.mjs +7 -0
  73. package/lib/binary-collections/listScript.cjs +291 -0
  74. package/lib/binary-collections/listScript.d.cts +19 -0
  75. package/lib/binary-collections/listScript.mjs +7 -0
  76. package/lib/binary-collections.cjs +264 -157
  77. package/lib/binary-collections.mjs +26 -286
  78. package/lib/changelog.cjs +9 -14
  79. package/lib/changelog.mjs +2 -2
  80. package/lib/chunk-2MN4VPV2.mjs +246 -0
  81. package/lib/chunk-6C7KTYGZ.mjs +41 -0
  82. package/lib/{chunk-Z6JLYU2J.mjs → chunk-6RK5UCTP.mjs} +7 -12
  83. package/lib/chunk-CD3HF3LK.mjs +190 -0
  84. package/lib/chunk-FLYSZFLW.mjs +61 -0
  85. package/lib/{chunk-N436BNBK.mjs → chunk-GAGABICI.mjs} +19 -13
  86. package/lib/chunk-H44UWUFY.mjs +105 -0
  87. package/lib/chunk-KLKAIFKI.mjs +40 -0
  88. package/lib/chunk-LVSPEFU2.mjs +86 -0
  89. package/lib/{chunk-RWLXRTYP.mjs → chunk-MGPYPKIE.mjs} +2 -2
  90. package/lib/chunk-NGFK3EYW.mjs +28 -0
  91. package/lib/chunk-NQXUYO67.mjs +253 -0
  92. package/lib/chunk-NVEG3LEZ.mjs +143 -0
  93. package/lib/chunk-OBXLTXFJ.mjs +34 -0
  94. package/lib/chunk-OGXVGBRI.mjs +29 -0
  95. package/lib/chunk-OXV52GD5.mjs +62 -0
  96. package/lib/chunk-PXBMHE7O.mjs +35 -0
  97. package/lib/chunk-QD4T255Z.mjs +40 -0
  98. package/lib/chunk-QII2EKCS.mjs +26 -0
  99. package/lib/chunk-R5FJOR63.mjs +47 -0
  100. package/lib/chunk-RDGDLSPD.mjs +76 -0
  101. package/lib/chunk-RDN6HF5Z.mjs +79 -0
  102. package/lib/chunk-RJKTSUAX.mjs +123 -0
  103. package/lib/{chunk-XA3SNBPA.mjs → chunk-TBWXE7ST.mjs} +97 -38
  104. package/lib/chunk-UXCFNAR6.mjs +55 -0
  105. package/lib/{chunk-M3YIYRHT.mjs → chunk-UY5VUEA3.mjs} +1 -1
  106. package/lib/chunk-WSHVPGNM.mjs +44 -0
  107. package/lib/{chunk-66PAU5PS.mjs → chunk-X2B3X7D4.mjs} +10 -6
  108. package/lib/clean-github-actions-caches-cli.cjs +507 -0
  109. package/lib/clean-github-actions-caches-cli.mjs +74 -0
  110. package/lib/clean-github-actions-caches.cjs +246 -106
  111. package/lib/clean-github-actions-caches.d.cts +53 -1
  112. package/lib/clean-github-actions-caches.mjs +5 -130
  113. package/lib/cross-env/command.cjs +63 -0
  114. package/lib/cross-env/command.d.ts +8 -0
  115. package/lib/cross-env/command.js +45 -0
  116. package/lib/{ps/isWin.mjs → cross-env/command.mjs} +4 -5
  117. package/lib/cross-env/index.cjs +178 -0
  118. package/lib/cross-env/index.d.ts +8 -0
  119. package/lib/cross-env/index.js +102 -0
  120. package/lib/cross-env/index.mjs +101 -0
  121. package/lib/cross-env/variable.cjs +60 -0
  122. package/lib/cross-env/variable.d.ts +7 -0
  123. package/lib/cross-env/variable.js +59 -0
  124. package/lib/cross-env/variable.mjs +9 -0
  125. package/lib/del-gradle.cjs +8 -13
  126. package/lib/del-gradle.js +8 -8
  127. package/lib/del-gradle.mjs +1 -1
  128. package/lib/del-node-modules.cjs +185 -3
  129. package/lib/del-node-modules.js +25 -25
  130. package/lib/del-node-modules.mjs +6 -3
  131. package/lib/{del-ps.cjs → del-ps-cli.cjs} +38 -43
  132. package/lib/del-ps-cli.d.mts +1 -0
  133. package/lib/del-ps-cli.mjs +44 -0
  134. package/lib/del-yarn-caches.cjs +8 -13
  135. package/lib/del-yarn-caches.js +2 -2
  136. package/lib/del-yarn-caches.mjs +1 -1
  137. package/lib/downloader-cli.cjs +256 -0
  138. package/lib/downloader-cli.d.cts +2 -0
  139. package/lib/downloader-cli.mjs +90 -0
  140. package/lib/file/copy-cli.cjs +273 -0
  141. package/lib/file/copy-cli.d.mts +1 -0
  142. package/lib/file/copy-cli.mjs +59 -0
  143. package/lib/file/copy.cjs +56 -0
  144. package/lib/file/copy.d.mts +1 -0
  145. package/lib/file/copy.mjs +8 -0
  146. package/lib/file/move-cli.cjs +272 -0
  147. package/lib/file/move-cli.d.mts +1 -0
  148. package/lib/file/move-cli.mjs +59 -0
  149. package/lib/file/move.cjs +55 -0
  150. package/lib/file/move.d.mts +1 -0
  151. package/lib/file/move.mjs +8 -0
  152. package/lib/find-node-modules-cli.cjs +1 -1
  153. package/lib/find-node-modules-cli.js +1 -1
  154. package/lib/find-node-modules-cli.mjs +1 -1
  155. package/lib/find-node-modules.cjs +1 -1
  156. package/lib/find-node-modules.mjs +1 -1
  157. package/lib/free-chatgpt.cjs +27 -26
  158. package/lib/free-chatgpt.js +10 -10
  159. package/lib/free-chatgpt.mjs +2 -2
  160. package/lib/git/user-config.cjs +9 -14
  161. package/lib/git/user-config.mjs +2 -2
  162. package/lib/git-diff-cli.cjs +273 -66
  163. package/lib/git-diff-cli.mjs +5 -4
  164. package/lib/git-diff.cjs +273 -66
  165. package/lib/git-diff.d.ts +2 -1
  166. package/lib/git-diff.js +153 -39
  167. package/lib/git-diff.mjs +5 -4
  168. package/lib/git-fix.cjs +9 -14
  169. package/lib/git-fix.mjs +2 -2
  170. package/lib/git-purge.cjs +9 -14
  171. package/lib/git-purge.mjs +2 -2
  172. package/lib/index.cjs +1 -1
  173. package/lib/index.d.ts +1 -1
  174. package/lib/index.mjs +1 -1
  175. package/lib/kill-night-crows.cjs +7 -7
  176. package/lib/kill-night-crows.mjs +7 -7
  177. package/lib/node-cache-cleaner/npm.cjs +65 -0
  178. package/lib/node-cache-cleaner/npm.d.ts +2 -0
  179. package/lib/node-cache-cleaner/npm.js +41 -0
  180. package/lib/node-cache-cleaner/npm.mjs +10 -0
  181. package/lib/node-cache-cleaner/npx.cjs +89 -0
  182. package/lib/node-cache-cleaner/npx.d.ts +4 -0
  183. package/lib/node-cache-cleaner/npx.js +82 -0
  184. package/lib/{ps/index.d.mjs → node-cache-cleaner/npx.mjs} +6 -5
  185. package/lib/node-cache-cleaner/yarn.cjs +73 -0
  186. package/lib/node-cache-cleaner/yarn.d.ts +2 -0
  187. package/lib/node-cache-cleaner/yarn.js +62 -0
  188. package/lib/node-cache-cleaner/yarn.mjs +10 -0
  189. package/lib/node-cache-cleaner-cli.cjs +365 -0
  190. package/lib/node-cache-cleaner-cli.d.ts +2 -0
  191. package/lib/node-cache-cleaner-cli.js +57 -0
  192. package/lib/node-cache-cleaner-cli.mjs +60 -0
  193. package/lib/node-executor.cjs +272 -0
  194. package/lib/node-executor.d.cts +2 -0
  195. package/lib/node-executor.mjs +106 -0
  196. package/lib/node-package-packer/build-readme.cjs +150 -0
  197. package/lib/node-package-packer/build-readme.d.mts +10 -0
  198. package/lib/node-package-packer/build-readme.mjs +10 -0
  199. package/lib/node-package-packer/build-tarball.cjs +495 -0
  200. package/lib/node-package-packer/build-tarball.d.mts +33 -0
  201. package/lib/node-package-packer/build-tarball.mjs +175 -0
  202. package/lib/node-package-packer-cli.cjs +525 -0
  203. package/lib/node-package-packer-cli.d.mts +1 -0
  204. package/lib/node-package-packer-cli.mjs +34 -0
  205. package/lib/npm-run-series.cjs +28 -40
  206. package/lib/npm-run-series.mjs +21 -7
  207. package/lib/package-resolutions-updater-cli.cjs +255 -173
  208. package/lib/package-resolutions-updater-cli.mjs +19 -40
  209. package/lib/package-resolutions-updater.cjs +244 -141
  210. package/lib/package-resolutions-updater.d.mts +54 -1
  211. package/lib/package-resolutions-updater.mjs +8 -5
  212. package/lib/php-cs-fixer-staged.cjs +1 -1
  213. package/lib/php-cs-fixer-staged.mjs +1 -1
  214. package/lib/print-directory-tree.cjs +18 -20
  215. package/lib/print-directory-tree.mjs +11 -8
  216. package/lib/print-tarball-tree.cjs +262 -0
  217. package/lib/print-tarball-tree.d.mts +1 -0
  218. package/lib/print-tarball-tree.mjs +68 -0
  219. package/lib/ps/connected-domain.js +10 -10
  220. package/lib/ps/index.cjs +11 -11
  221. package/lib/ps/index.mjs +180 -174
  222. package/lib/ps/table-parser.d.ts +3 -4
  223. package/lib/ps/table-parser.js +15 -22
  224. package/lib/remove-module.cjs +19 -24
  225. package/lib/remove-module.mjs +2 -2
  226. package/lib/rm-node-module-cli.cjs +389 -0
  227. package/lib/rm-node-module-cli.d.cts +1 -0
  228. package/lib/rm-node-module-cli.mjs +92 -0
  229. package/lib/rm-node-modules.cjs +127 -0
  230. package/lib/rm-node-modules.d.cts +35 -0
  231. package/lib/{binary-collections-config.mjs → rm-node-modules.mjs} +3 -3
  232. package/lib/rmpath-cli.cjs +285 -0
  233. package/lib/rmpath-cli.d.mts +1 -0
  234. package/lib/rmpath-cli.mjs +23 -0
  235. package/lib/rmpath.cjs +6 -217
  236. package/lib/rmpath.mjs +5 -101
  237. package/lib/run-by-checksum/cache.cjs +69 -0
  238. package/lib/run-by-checksum/cache.d.ts +19 -0
  239. package/lib/run-by-checksum/cache.js +50 -0
  240. package/lib/run-by-checksum/cache.mjs +12 -0
  241. package/lib/run-by-checksum/hash.cjs +72 -0
  242. package/lib/run-by-checksum/hash.d.ts +14 -0
  243. package/lib/run-by-checksum/hash.js +85 -0
  244. package/lib/run-by-checksum/hash.mjs +10 -0
  245. package/lib/run-by-checksum/run.cjs +169 -0
  246. package/lib/run-by-checksum/run.d.ts +22 -0
  247. package/lib/run-by-checksum/run.js +93 -0
  248. package/lib/run-by-checksum/run.mjs +10 -0
  249. package/lib/run-by-checksum-cli.cjs +382 -0
  250. package/lib/run-by-checksum-cli.d.ts +2 -0
  251. package/lib/run-by-checksum-cli.js +43 -0
  252. package/lib/run-by-checksum-cli.mjs +56 -0
  253. package/lib/submodule-install.cjs +55 -47
  254. package/lib/submodule-install.mjs +48 -35
  255. package/lib/submodule-remove-cli.cjs +170 -4
  256. package/lib/submodule-remove-cli.js +5 -5
  257. package/lib/submodule-remove-cli.mjs +6 -4
  258. package/lib/utils/chatgpt.cjs +19 -13
  259. package/lib/utils/chatgpt.js +94 -94
  260. package/lib/utils/chatgpt.mjs +1 -1
  261. package/lib/utils/fetchResponse.cjs +24 -0
  262. package/lib/utils/fetchResponse.d.cts +25 -0
  263. package/lib/utils/fetchResponse.mjs +6 -0
  264. package/lib/utils/findEnvFiles.cjs +28 -46
  265. package/lib/utils/findEnvFiles.d.cts +19 -0
  266. package/lib/utils/findEnvFiles.mjs +3 -5
  267. package/lib/utils/findWorkspaceRoot.js +4 -4
  268. package/lib/utils/index.cjs +7 -12
  269. package/lib/utils/index.d.cts +2 -9
  270. package/lib/utils/index.mjs +1 -1
  271. package/lib/utils/isGithubTokenValid.js +7 -7
  272. package/lib/{ps/isWin.cjs → utils/isWindows.cjs} +12 -7
  273. package/lib/utils/isWindows.d.ts +5 -0
  274. package/lib/utils/isWindows.js +10 -0
  275. package/lib/utils/isWindows.mjs +10 -0
  276. package/lib/utils/runBash.cjs +53 -0
  277. package/lib/utils/runBash.d.cts +12 -0
  278. package/lib/utils/runBash.mjs +66 -0
  279. package/lib/yarn-per-branch-lock-installer.cjs +288 -0
  280. package/lib/yarn-per-branch-lock-installer.d.cts +2 -0
  281. package/lib/yarn-per-branch-lock-installer.mjs +122 -0
  282. package/lib/yarn-reinstall.cjs +8 -13
  283. package/lib/yarn-reinstall.mjs +1 -1
  284. package/package.json +91 -57
  285. package/readme.html +784 -0
  286. package/readme.md +107 -219
  287. package/releases/readme.md +6 -3
  288. package/test/README.md +2 -2
  289. package/test-project/workspaces/workspace-a/readme.md +20 -0
  290. package/test-project/workspaces/workspace-a/release/readme.md +42 -0
  291. package/test-project/workspaces/workspace-a/test/readme.md +12 -0
  292. package/test-project/workspaces/workspace-b/readme.md +94 -0
  293. package/test-project/workspaces/workspace-b/requirements.txt +1 -0
  294. package/test-project/workspaces/workspace-b/themes/hexo-theme-flowbite/readme.md +156 -0
  295. package/tmp/test-repo/README.md +2 -35
  296. package/tmp/test-repo-runChecksum/test-complex-glob/README.md +1 -0
  297. package/tmp/test-repo-runChecksum/test-mixed-args/README.md +1 -0
  298. package/lib/binary-collections-config.cjs +0 -15
  299. package/lib/chunk-2CBJCW7E.mjs +0 -81
  300. package/lib/chunk-4UHL4WVN.mjs +0 -136
  301. package/lib/chunk-6HHJRKFB.mjs +0 -59
  302. package/lib/chunk-6S4NXESK.mjs +0 -26
  303. package/lib/chunk-7XTEJHOE.mjs +0 -193
  304. package/lib/chunk-AJDD5DZM.mjs +0 -109
  305. package/lib/chunk-FCDQGYBF.mjs +0 -136
  306. package/lib/chunk-GEYA2USY.mjs +0 -207
  307. package/lib/chunk-GJTGHXRA.mjs +0 -356
  308. package/lib/chunk-ID2WBTE2.mjs +0 -80
  309. package/lib/chunk-JXFOHKDM.mjs +0 -239
  310. package/lib/chunk-NCXAP7AA.mjs +0 -31
  311. package/lib/chunk-PDSXF5HY.mjs +0 -187
  312. package/lib/chunk-TOIVAQF7.mjs +0 -136
  313. package/lib/chunk-V5SKYJUB.mjs +0 -136
  314. package/lib/chunk-WSRETQCA.mjs +0 -59
  315. package/lib/chunk-YYLIQQKF.mjs +0 -31
  316. package/lib/del-ps.js +0 -32
  317. package/lib/del-ps.mjs +0 -43
  318. package/lib/ps/index.d.cjs +0 -17
  319. package/lib/ps/index.d.ts +0 -2
  320. package/lib/ps/index.js +0 -254
  321. package/lib/ps/isWin.d.ts +0 -2
  322. package/lib/ps/isWin.js +0 -4
  323. package/lib/utils/findEnvFiles.d.ts +0 -8
  324. package/lib/utils/findEnvFiles.js +0 -121
  325. package/test/package.json +0 -20
  326. package/test-project/package.json +0 -16
  327. package/tmp/test-repo/package.json +0 -7
  328. package/tmp/typedoc/readme.md +0 -320
  329. /package/lib/{binary-collections-config.d.cts → binary-collections/config.d.cts} +0 -0
  330. /package/lib/{del-ps.d.ts → clean-github-actions-caches-cli.d.cts} +0 -0
package/lib/git-diff.cjs CHANGED
@@ -42,12 +42,108 @@ var init_cjs_shims = __esm({
42
42
  }
43
43
  });
44
44
 
45
- // src/binary-collections-config.cjs
46
- var require_binary_collections_config = __commonJS({
47
- "src/binary-collections-config.cjs"(exports2, module2) {
45
+ // src/utils/findEnvFiles.cjs
46
+ var require_findEnvFiles = __commonJS({
47
+ "src/utils/findEnvFiles.cjs"(exports2, module2) {
48
48
  init_cjs_shims();
49
+ var fs3 = require("fs");
49
50
  var path3 = require("path");
50
- require("dotenv").config({ path: path3.join(process.cwd(), ".env"), quiet: true, override: true });
51
+ var glob = require("glob");
52
+ var DEFAULT_IGNORES = [
53
+ "**/node_modules/**",
54
+ "**/.git/**",
55
+ "**/.yarn/**",
56
+ "**/.pnpm/**",
57
+ "**/dist/**",
58
+ "**/build/**",
59
+ "**/coverage/**",
60
+ "**/vendor/**",
61
+ "**/tmp/**",
62
+ "**/.cache/**",
63
+ "**/assets/**",
64
+ "**/logs/**",
65
+ "**/output/**",
66
+ "**/public/**",
67
+ "**/static/**",
68
+ "**/temp/**",
69
+ "**/backup/**",
70
+ "**/backups/**",
71
+ "**/examples/**",
72
+ "**/docs/**",
73
+ "**/tests/**",
74
+ "**/__tests__/**",
75
+ "**/spec/**",
76
+ "**/__specs__/**",
77
+ "**/scripts/**",
78
+ "**/bin/**",
79
+ "**/hooks/**",
80
+ "**/config/**",
81
+ "**/configs/**",
82
+ "**/settings/**",
83
+ "**/.vscode/**",
84
+ "**/.idea/**"
85
+ ];
86
+ function findEnvFiles(startDir = process.cwd(), filter) {
87
+ const found = /* @__PURE__ */ new Set();
88
+ function addFile(file) {
89
+ const normalized = path3.normalize(file);
90
+ if (typeof filter === "function" && !filter(normalized)) {
91
+ return;
92
+ }
93
+ found.add(normalized);
94
+ }
95
+ let current = path3.resolve(startDir);
96
+ while (true) {
97
+ const envPath = path3.join(current, ".env");
98
+ if (fs3.existsSync(envPath)) {
99
+ addFile(envPath);
100
+ }
101
+ const parent = path3.dirname(current);
102
+ if (parent === current) {
103
+ break;
104
+ }
105
+ current = parent;
106
+ }
107
+ const files = glob.globSync("**/.env*", {
108
+ cwd: startDir,
109
+ absolute: true,
110
+ nodir: true,
111
+ ignore: DEFAULT_IGNORES
112
+ });
113
+ for (const file of files) {
114
+ addFile(file);
115
+ }
116
+ return [...found];
117
+ }
118
+ function findEnvWithToken(startDir = process.cwd(), tokenName = "GITHUB_TOKEN") {
119
+ const envFiles = findEnvFiles(startDir);
120
+ return envFiles.find((file) => {
121
+ try {
122
+ const content = fs3.readFileSync(file, "utf-8");
123
+ const regex = new RegExp(`^\\s*${tokenName}\\s*=`, "m");
124
+ return regex.test(content);
125
+ } catch (err) {
126
+ console.warn(`Failed to read ${file}: ${err instanceof Error ? err.message : String(err)}`);
127
+ return false;
128
+ }
129
+ });
130
+ }
131
+ module2.exports = {
132
+ DEFAULT_IGNORES,
133
+ findEnvFiles,
134
+ findEnvWithToken,
135
+ default: findEnvFiles
136
+ };
137
+ }
138
+ });
139
+
140
+ // src/binary-collections/config.cjs
141
+ var require_config = __commonJS({
142
+ "src/binary-collections/config.cjs"(exports2, module2) {
143
+ init_cjs_shims();
144
+ var path3 = require("upath");
145
+ var { findEnvWithToken } = require_findEnvFiles();
146
+ require("dotenv").config({ path: findEnvWithToken(), quiet: true, overwrite: true });
51
147
  function getTempDir() {
52
148
  return process.env.TEMP_DIR || path3.join(process.cwd(), "tmp");
53
149
  }
@@ -69,9 +165,9 @@ var require_utils = __commonJS({
69
165
  init_cjs_shims();
70
166
  var fs3 = require("fs");
71
167
  var path3 = require("upath");
72
- var argv = require("minimist")(process.argv.slice(2));
168
+ var minimistLib = require("minimist");
169
+ var argv = minimistLib(process.argv.slice(2));
73
170
  var { exec } = require("child_process");
74
- var { URL: URL2 } = require("url");
75
171
  var { promisify } = require("util");
76
172
  var execAsync = promisify(exec);
77
173
  async function parseGitRemotes() {
@@ -84,7 +180,7 @@ var require_utils = __commonJS({
84
180
  if (name && url) {
85
181
  const [repoUrl] = url.split(" ");
86
182
  try {
87
- const parsedUrl = new URL2(repoUrl);
183
+ const parsedUrl = new URL(repoUrl);
88
184
  const pathParts = parsedUrl.pathname.split("/").filter(Boolean);
89
185
  if (parsedUrl.hostname === "github.com" && pathParts.length === 2) {
90
186
  let repoPath = pathParts.join("/");
@@ -105,15 +201,10 @@ var require_utils = __commonJS({
105
201
  }
106
202
  }
107
203
  module2.exports.parseGitRemotes = parseGitRemotes;
108
- function joinPathPreserveDriveLetter(...segments) {
109
- let fullPath = require("path").join(...segments);
110
- if (/^[a-z]:\\/.test(fullPath)) {
111
- fullPath = fullPath.charAt(0).toUpperCase() + fullPath.slice(1);
204
+ function getArgs2(opts) {
205
+ if (opts) {
206
+ return minimistLib(process.argv.slice(2), opts);
112
207
  }
113
- return fullPath;
114
- }
115
- module2.exports.joinPathPreserveDriveLetter = joinPathPreserveDriveLetter;
116
- function getArgs2() {
117
208
  return argv;
118
209
  }
119
210
  module2.exports.getArgs = getArgs2;
@@ -138,7 +229,7 @@ var require_utils = __commonJS({
138
229
  try {
139
230
  fs3.rmdirSync(fullPath);
140
231
  console.log("deleted", fullPath);
141
- } catch (e) {
232
+ } catch (_e) {
142
233
  try {
143
234
  fs3.rmSync(fullPath, { recursive: true, force: true, retryDelay: 7e3 });
144
235
  console.log("deleted", fullPath);
@@ -151,7 +242,7 @@ var require_utils = __commonJS({
151
242
  try {
152
243
  fs3.unlinkSync(fullPath);
153
244
  console.log("deleted", fullPath);
154
- } catch (e) {
245
+ } catch (_e) {
155
246
  try {
156
247
  fs3.rmSync(fullPath, { recursive: true, force: true, retryDelay: 7e3 });
157
248
  console.log("deleted", fullPath);
@@ -249,11 +340,13 @@ __export(git_diff_exports, {
249
340
  });
250
341
  module.exports = __toCommonJS(git_diff_exports);
251
342
  init_cjs_shims();
343
+ var import_ansi_colors = __toESM(require("ansi-colors"), 1);
252
344
  var import_child_process = require("child_process");
253
345
  var import_fs_extra2 = __toESM(require("fs-extra"), 1);
346
+ var import_sbg_utility = require("sbg-utility");
254
347
  var import_upath2 = __toESM(require("upath"), 1);
255
348
  var import_url = require("url");
256
- var import_binary_collections_config = __toESM(require_binary_collections_config(), 1);
349
+ var import_config = __toESM(require_config(), 1);
257
350
 
258
351
  // src/utils/chatgpt.js
259
352
  init_cjs_shims();
@@ -372,7 +465,10 @@ async function writeQuestion(page, question) {
372
465
  async function clickSubmitButton(page) {
373
466
  console.log("Attempting to click the submit button...");
374
467
  try {
375
- const userMessageCountBefore = await page.$$eval('[data-message-author-role="user"]', (elements) => elements.length);
468
+ const userMessageCountBefore = await page.$$eval(
469
+ '[data-message-author-role="user"]',
470
+ (elements) => elements.length
471
+ );
376
472
  const waitForSubmit = async (timeout = 5e3) => {
377
473
  try {
378
474
  await page.waitForFunction(
@@ -388,18 +484,21 @@ async function clickSubmitButton(page) {
388
484
  return false;
389
485
  }
390
486
  };
391
- await page.waitForFunction(() => {
392
- const candidates = [
393
- document.querySelector('[data-testid="fruitjuice-send-button"]'),
394
- document.querySelector("#composer-submit-button"),
395
- document.querySelector('[data-testid="send-button"]')
396
- ].filter(Boolean);
397
- return candidates.some((button) => {
398
- const isDisabled = button.disabled || button.getAttribute("aria-disabled") === "true";
399
- const isVisible = button.offsetParent !== null;
400
- return !isDisabled && isVisible;
401
- });
402
- }, { timeout: 5e3 }).catch(() => {
487
+ await page.waitForFunction(
488
+ () => {
489
+ const candidates = [
490
+ document.querySelector('[data-testid="fruitjuice-send-button"]'),
491
+ document.querySelector("#composer-submit-button"),
492
+ document.querySelector('[data-testid="send-button"]')
493
+ ].filter(Boolean);
494
+ return candidates.some((button) => {
495
+ const isDisabled = button.disabled || button.getAttribute("aria-disabled") === "true";
496
+ const isVisible = button.offsetParent !== null;
497
+ return !isDisabled && isVisible;
498
+ });
499
+ },
500
+ { timeout: 5e3 }
501
+ ).catch(() => {
403
502
  });
404
503
  const buttonDetails = await page.evaluate(() => {
405
504
  const selectors = [
@@ -765,22 +864,26 @@ async function runChatGpt(chatgptOptions = {}) {
765
864
  var import_utils = __toESM(require_utils(), 1);
766
865
  var __filename2 = (0, import_url.fileURLToPath)(importMetaUrl);
767
866
  var __dirname = import_upath2.default.dirname(__filename2);
768
- var DIFF_OUTPUT = (0, import_binary_collections_config.getTempPath)("git-diff.txt");
769
- var GPT_DIFF_OUTPUT = (0, import_binary_collections_config.getTempPath)("gpt-question.txt");
867
+ var args = (0, import_utils.getArgs)();
868
+ var positional = args._ || [];
869
+ var FILENAME = (0, import_sbg_utility.md5)((positional[0] || "default") + JSON.stringify(args));
870
+ var DIFF_OUTPUT = (0, import_config.getTempPath)(`git-diff/${FILENAME}.txt`);
871
+ var GPT_DIFF_OUTPUT = (0, import_config.getTempPath)(`git-diff/gpt-${FILENAME}.txt`);
770
872
  var CACHE_DIR = import_upath2.default.dirname(DIFF_OUTPUT);
771
873
  var DIFF_OUTPUT_RELATIVE = import_upath2.default.relative(process.cwd(), DIFF_OUTPUT);
772
874
  var GPT_DIFF_OUTPUT_RELATIVE = import_upath2.default.relative(process.cwd(), GPT_DIFF_OUTPUT);
773
- if (!import_fs_extra2.default.existsSync(CACHE_DIR)) {
774
- import_fs_extra2.default.mkdirSync(CACHE_DIR, { recursive: true });
775
- }
875
+ import_fs_extra2.default.ensureDirSync(CACHE_DIR, { mode: 493 });
776
876
  function showHelp() {
777
- console.log("\u{1F4DD} Git Diff Helper");
778
- console.log("\u{1F4C4} Usage:");
779
- console.log(" \u{1F4C2} git-diff FILE Show staged diff of specified file");
780
- console.log(" \u{1F4C2} git-diff --staged-only Show staged diff of all files");
781
- console.log(" \u{1F4C2} git-diff -s | -S Same as --staged-only");
782
- console.log(" \u{1F4C2} git-diff --ai Run ChatGPT automation for commit message");
783
- console.log(" \u{1F4C2} git-diff --help | -h Show this help message");
877
+ console.log("\u{1F4CB} Git Diff Helper");
878
+ console.log("Usage:");
879
+ console.log(" git-diff FILE Show staged diff of specified file");
880
+ console.log(" git-diff --staged-only Show staged diff of all files");
881
+ console.log(" git-diff -s | -S Same as --staged-only");
882
+ console.log(" git-diff --unstaged FILE Show unstaged diff of specified file");
883
+ console.log(" git-diff --unstaged Show unstaged diff of all files");
884
+ console.log(" git-diff -u Same as --unstaged");
885
+ console.log(" git-diff --ai Run ChatGPT automation for commit message");
886
+ console.log(" git-diff --help | -h Show this help message");
784
887
  console.log("");
785
888
  console.log(`\u{1F4BE} Output is saved to: ${DIFF_OUTPUT_RELATIVE}`);
786
889
  console.log(`\u{1F916} GPT prompt is saved to: ${GPT_DIFF_OUTPUT_RELATIVE}`);
@@ -788,22 +891,22 @@ function showHelp() {
788
891
  }
789
892
  function runGitDiff(command, successMessage, errorMessage) {
790
893
  try {
791
- console.log(`\u{1F50D} [i] Running command: ${command}`);
894
+ console.log(`\u2139\uFE0F Running command: ${command}`);
792
895
  const result = (0, import_child_process.execSync)(command, {
793
896
  encoding: "utf8",
794
897
  maxBuffer: 1024 * 1024 * 10
795
898
  // 10MB buffer to handle large diffs
796
899
  });
797
900
  if (!result || result.trim() === "") {
798
- console.log(`\u2139\uFE0F [i] No changes found for the specified criteria`);
799
- import_fs_extra2.default.writeFileSync(DIFF_OUTPUT, "# No changes found\n");
901
+ console.log(`\u2139\uFE0F No changes found for the specified criteria`);
902
+ (0, import_sbg_utility.writefile)(DIFF_OUTPUT, "# No changes found\n");
800
903
  console.log(`\u2705 Empty diff saved to "${DIFF_OUTPUT_RELATIVE}"`);
801
- return;
904
+ return false;
802
905
  }
803
- import_fs_extra2.default.writeFileSync(DIFF_OUTPUT, result);
804
- import_fs_extra2.default.writeFileSync(
906
+ (0, import_sbg_utility.writefile)(DIFF_OUTPUT, result);
907
+ (0, import_sbg_utility.writefile)(
805
908
  GPT_DIFF_OUTPUT,
806
- `Hello, ChatGPT!
909
+ `Hello!
807
910
  Can you create a conventional commit message by diff content below:
808
911
 
809
912
  \`\`\`${result}
@@ -814,45 +917,149 @@ Give me result as codeblock with language "text" only.
814
917
  Thank you!`
815
918
  );
816
919
  console.log(`\u2705 ${successMessage}`);
817
- console.log(`\u{1F4BE} GPT diff prompt saved to "${GPT_DIFF_OUTPUT_RELATIVE}"`);
920
+ console.log(`\u{1F4BE} GPT diff prompt saved to "${import_ansi_colors.default.green(GPT_DIFF_OUTPUT_RELATIVE)}"`);
921
+ return true;
818
922
  } catch (error) {
819
923
  console.error(`\u274C ${errorMessage}`);
820
- console.error(`\u{1F4DD} Command: ${command}`);
821
- console.error(`\u26A0\uFE0F Error: ${error.message}`);
924
+ console.error(`\u274C Command: ${command}`);
925
+ console.error(`\u274C Error: ${error.message}`);
822
926
  if (error.message.includes("not a git repository")) {
823
- console.error("\u{1F6A7} Make sure you are in a git repository");
927
+ console.error("\u274C Make sure you are in a git repository");
824
928
  }
825
929
  process.exit(1);
826
930
  }
827
931
  }
932
+ function getUntrackedDiff() {
933
+ try {
934
+ const untrackedStr = (0, import_child_process.execSync)("git ls-files --others --exclude-standard", {
935
+ encoding: "utf8",
936
+ maxBuffer: 1024 * 1024 * 10
937
+ }).trim();
938
+ if (!untrackedStr) return "";
939
+ const untrackedFiles = untrackedStr.split("\n").filter(function(f) {
940
+ return f;
941
+ });
942
+ if (untrackedFiles.length === 0) return "";
943
+ var result = "\n# Untracked files:\n";
944
+ for (var i = 0; i < untrackedFiles.length; i++) {
945
+ var file = untrackedFiles[i];
946
+ if (!import_fs_extra2.default.existsSync(file)) continue;
947
+ var stat = import_fs_extra2.default.statSync(file);
948
+ if (!stat.isFile()) continue;
949
+ var content;
950
+ try {
951
+ content = import_fs_extra2.default.readFileSync(file, "utf8");
952
+ } catch (_a) {
953
+ continue;
954
+ }
955
+ var lines = content.split("\n");
956
+ if (lines.length > 0 && lines[lines.length - 1] === "") {
957
+ lines.pop();
958
+ }
959
+ result += "diff --git a/" + file + " b/" + file + "\n";
960
+ result += "new file mode 100644\n";
961
+ result += "index 0000000..0000000\n";
962
+ result += "--- /dev/null\n";
963
+ result += "+++ b/" + file + "\n";
964
+ result += "@@ -0,0 +1," + (lines.length || 0) + " @@\n";
965
+ for (var j = 0; j < lines.length; j++) {
966
+ result += "+" + lines[j] + "\n";
967
+ }
968
+ }
969
+ return result;
970
+ } catch (_b) {
971
+ return "";
972
+ }
973
+ }
974
+ function fileHasChanges(file, mode) {
975
+ const command = mode === "staged" ? `git diff --cached --quiet -- "${file}"` : `git diff --quiet -- "${file}"`;
976
+ try {
977
+ (0, import_child_process.execSync)(command, { stdio: "ignore" });
978
+ return false;
979
+ } catch (error) {
980
+ if (error.status === 1) {
981
+ return true;
982
+ }
983
+ throw error;
984
+ }
985
+ }
828
986
  async function mainGitDiff() {
829
- const args = (0, import_utils.getArgs)();
830
- const positional = args._ || [];
831
987
  if (args.help || args.h) {
832
988
  showHelp();
833
989
  }
990
+ const useUnstaged = args.unstaged || args.u;
991
+ const fileFromFlag = typeof args.unstaged === "string" ? args.unstaged : typeof args.u === "string" ? args.u : null;
992
+ let hasDiff = false;
834
993
  if (args["staged-only"] || args.s || args.S) {
835
- runGitDiff(
994
+ hasDiff = runGitDiff(
836
995
  "git --no-pager diff --staged",
837
- `Full staged diff saved to "${DIFF_OUTPUT_RELATIVE}"`,
996
+ `Full staged diff saved to "${import_ansi_colors.default.green(DIFF_OUTPUT_RELATIVE)}"`,
838
997
  "Failed to save staged diff"
839
998
  );
840
999
  } else {
841
- const file = positional[0];
1000
+ const file = positional[0] || fileFromFlag;
842
1001
  if (!file) {
843
- runGitDiff(
1002
+ const fullDiffModeLabel = useUnstaged ? "unstaged" : "unstaged";
1003
+ hasDiff = runGitDiff(
844
1004
  "git --no-pager diff",
845
- `Full staged diff saved to "${DIFF_OUTPUT_RELATIVE}"`,
1005
+ `Full ${fullDiffModeLabel} diff saved to "${import_ansi_colors.default.green(DIFF_OUTPUT_RELATIVE)}"`,
846
1006
  "Failed to save all diff's"
847
1007
  );
1008
+ const untrackedDiff = getUntrackedDiff();
1009
+ if (untrackedDiff) {
1010
+ const UNTRACKED_DIFF_OUTPUT = (0, import_config.getTempPath)(`git-diff/untracked-${FILENAME}.txt`);
1011
+ const UNTRACKED_GPT_DIFF_OUTPUT = (0, import_config.getTempPath)(`git-diff/gpt-untracked-${FILENAME}.txt`);
1012
+ const UNTRACKED_DIFF_OUTPUT_RELATIVE = import_upath2.default.relative(process.cwd(), UNTRACKED_DIFF_OUTPUT);
1013
+ (0, import_sbg_utility.writefile)(UNTRACKED_DIFF_OUTPUT, untrackedDiff);
1014
+ (0, import_sbg_utility.writefile)(
1015
+ UNTRACKED_GPT_DIFF_OUTPUT,
1016
+ `Hello!
1017
+ Can you create a conventional commit message by diff content below:
1018
+
1019
+ \`\`\`${untrackedDiff}
1020
+ \`\`\`
1021
+
1022
+ Give me result as codeblock with language "text" only.
1023
+
1024
+ Thank you!`
1025
+ );
1026
+ console.log(`\u2705 Untracked file diff saved to "${import_ansi_colors.default.green(UNTRACKED_DIFF_OUTPUT_RELATIVE)}"`);
1027
+ console.log(
1028
+ `\u{1F4BE} AI diff prompt saved to "${import_ansi_colors.default.green(import_upath2.default.relative(process.cwd(), UNTRACKED_GPT_DIFF_OUTPUT))}"`
1029
+ );
1030
+ hasDiff = true;
1031
+ }
848
1032
  } else {
849
- runGitDiff(
850
- `git --no-pager diff --cached -- "${file}"`,
851
- `Staged diff of "${file}" saved to "${DIFF_OUTPUT_RELATIVE}"`,
852
- `Failed to generate diff for "${file}"`
1033
+ let fileDiffMode = useUnstaged ? "unstaged" : "staged";
1034
+ if (!useUnstaged && !fileHasChanges(file, "staged") && fileHasChanges(file, "unstaged")) {
1035
+ fileDiffMode = "unstaged";
1036
+ }
1037
+ hasDiff = runGitDiff(
1038
+ fileDiffMode === "unstaged" ? `git --no-pager diff -- "${file}"` : `git --no-pager diff --cached -- "${file}"`,
1039
+ `${fileDiffMode[0].toUpperCase() + fileDiffMode.slice(1)} diff of "${file}" saved to "${import_ansi_colors.default.green(
1040
+ DIFF_OUTPUT_RELATIVE
1041
+ )}"`,
1042
+ `Failed to generate ${fileDiffMode} diff for "${file}"`
853
1043
  );
854
1044
  }
855
1045
  }
1046
+ if (hasDiff) {
1047
+ const opencodePrompt = [
1048
+ "",
1049
+ "\u{1F916} OpenCode Prompt Helper",
1050
+ "\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500",
1051
+ "",
1052
+ "\u{1F4C4} App Prompt:",
1053
+ ` Generate a conventional commit message from diff file: ${DIFF_OUTPUT}`,
1054
+ "",
1055
+ "\u{1F4BB} CLI Command:",
1056
+ ` opencode run "Generate a conventional commit message from diff file ${DIFF_OUTPUT}"`,
1057
+ ""
1058
+ ];
1059
+ const opencodePromptPath = (0, import_config.getTempPath)(`git-diff/opencode-${FILENAME}.txt`);
1060
+ (0, import_sbg_utility.writefile)(opencodePromptPath, opencodePrompt.join("\n"));
1061
+ console.log(`\u2705 OpenCode prompt saved to "${import_ansi_colors.default.green(import_upath2.default.relative(process.cwd(), opencodePromptPath))}"`);
1062
+ }
856
1063
  if (args.ai) {
857
1064
  try {
858
1065
  await runChatGpt({ headless: true, questionFile: GPT_DIFF_OUTPUT });
@@ -861,7 +1068,7 @@ async function mainGitDiff() {
861
1068
  console.error("\u{1F4A1} Try running with visible browser mode or check if Chrome is installed");
862
1069
  }
863
1070
  } else {
864
- console.log("\u{1F4A1} Tip: Use --ai flag to generate commit message with ChatGPT");
1071
+ console.log("\u{1F4A1} Use --ai flag to generate commit message with ChatGPT");
865
1072
  }
866
1073
  }
867
1074
  var git_diff_default = runGitDiff;
package/lib/git-diff.d.ts CHANGED
@@ -10,6 +10,7 @@ export default runGitDiff;
10
10
  * @param {string} command - The git command to execute (e.g., "git --no-pager diff --staged")
11
11
  * @param {string} successMessage - Message to display when the command executes successfully
12
12
  * @param {string} errorMessage - Message to display when the command fails
13
+ * @returns {boolean} True when diff content exists, false when no changes were found
13
14
  *
14
15
  * @throws {Error} Exits the process with code 1 if the git command fails
15
16
  *
@@ -29,7 +30,7 @@ export default runGitDiff;
29
30
  * 'Failed to generate file diff'
30
31
  * );
31
32
  */
32
- declare function runGitDiff(command: string, successMessage: string, errorMessage: string): void;
33
+ declare function runGitDiff(command: string, successMessage: string, errorMessage: string): boolean;
33
34
  export const CACHE_DIR: string;
34
35
  export const DIFF_OUTPUT: string;
35
36
  export const DIFF_OUTPUT_RELATIVE: string;