binary-collections 2.0.12 → 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 (231) 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.cjs +89 -13
  14. package/binaries/submodule-token.cjs +89 -13
  15. package/binaries/test-cjs.cjs +89 -13
  16. package/binaries/test-esm.cjs +89 -13
  17. package/binaries/yarn-clean.cjs +89 -13
  18. package/binaries/yc +22 -1
  19. package/binaries/yc.cjs +89 -13
  20. package/binaries/ycw +256 -0
  21. package/binaries/ycw.cjs +254 -0
  22. package/docs-src/binary-collections.md +34 -0
  23. package/docs-src/changelog.md +26 -0
  24. package/docs-src/clean-github-actions-caches.md +115 -0
  25. package/docs-src/copy-move-file.md +59 -0
  26. package/docs-src/del-gradle.md +17 -0
  27. package/docs-src/del-ps.md +28 -0
  28. package/docs-src/downloader.md +62 -0
  29. package/docs-src/env-helpers.md +29 -0
  30. package/docs-src/find-node-modules.md +17 -0
  31. package/docs-src/free-chatgpt.md +26 -0
  32. package/docs-src/git-diff.md +33 -0
  33. package/docs-src/git-fix.md +34 -0
  34. package/docs-src/git-purge.md +17 -0
  35. package/docs-src/git-reduce-size.md +17 -0
  36. package/docs-src/git-undo.md +21 -0
  37. package/docs-src/kill-night-crows.md +26 -0
  38. package/docs-src/node-cache-cleaner.md +182 -0
  39. package/docs-src/node-executor.md +50 -0
  40. package/docs-src/node-package-packer.md +48 -0
  41. package/docs-src/npm-run-series.md +43 -0
  42. package/docs-src/package-resolutions-updater.md +22 -0
  43. package/docs-src/php-cs-fixer-staged.md +19 -0
  44. package/docs-src/print-directory-tree.md +35 -0
  45. package/docs-src/print-tarball-tree.md +55 -0
  46. package/docs-src/py.md +19 -0
  47. package/docs-src/remove-module.md +32 -0
  48. package/docs-src/rmfind-rmx.md +21 -0
  49. package/docs-src/rmpath.md +38 -0
  50. package/docs-src/run-by-checksum.md +87 -0
  51. package/docs-src/submodule-install.md +31 -0
  52. package/docs-src/submodule-remove.md +22 -0
  53. package/docs-src/submodule-token.md +17 -0
  54. package/docs-src/test-runners.md +21 -0
  55. package/docs-src/yarn-install.md +31 -0
  56. package/docs-src/yarn-reinstall.md +27 -0
  57. package/lib/binary-collections/config.cjs +1 -1
  58. package/lib/binary-collections/config.mjs +1 -1
  59. package/lib/binary-collections/findScript.cjs +35 -10
  60. package/lib/binary-collections/findScript.mjs +2 -2
  61. package/lib/binary-collections/listScript.cjs +35 -10
  62. package/lib/binary-collections/listScript.mjs +2 -2
  63. package/lib/binary-collections.cjs +45 -25
  64. package/lib/binary-collections.mjs +11 -11
  65. package/lib/changelog.cjs +7 -12
  66. package/lib/changelog.mjs +2 -2
  67. package/lib/{chunk-SPTECFE5.mjs → chunk-2MN4VPV2.mjs} +86 -20
  68. package/lib/{chunk-V2IBPCEV.mjs → chunk-6C7KTYGZ.mjs} +3 -1
  69. package/lib/{chunk-5RTXZVCW.mjs → chunk-6RK5UCTP.mjs} +5 -10
  70. package/lib/{chunk-FB2WKVJD.mjs → chunk-CD3HF3LK.mjs} +67 -35
  71. package/lib/{chunk-6PU7BAHB.mjs → chunk-FLYSZFLW.mjs} +1 -1
  72. package/lib/chunk-KLKAIFKI.mjs +40 -0
  73. package/lib/chunk-LVSPEFU2.mjs +86 -0
  74. package/lib/{chunk-2LSRSEXF.mjs → chunk-MGPYPKIE.mjs} +2 -2
  75. package/lib/{chunk-ZOWVMII3.mjs → chunk-NQXUYO67.mjs} +35 -10
  76. package/lib/{chunk-C6D2TTYU.mjs → chunk-OBXLTXFJ.mjs} +4 -2
  77. package/lib/chunk-QD4T255Z.mjs +40 -0
  78. package/lib/{chunk-XPJGCDOD.mjs → chunk-QII2EKCS.mjs} +14 -2
  79. package/lib/chunk-RDGDLSPD.mjs +76 -0
  80. package/lib/{chunk-NCZPTKDV.mjs → chunk-RDN6HF5Z.mjs} +1 -1
  81. package/lib/chunk-RJKTSUAX.mjs +123 -0
  82. package/lib/{chunk-66KDU4TX.mjs → chunk-TBWXE7ST.mjs} +36 -61
  83. package/lib/{chunk-M3YIYRHT.mjs → chunk-UY5VUEA3.mjs} +1 -1
  84. package/lib/chunk-WSHVPGNM.mjs +44 -0
  85. package/lib/{chunk-G5UUEWUO.mjs → chunk-X2B3X7D4.mjs} +1 -1
  86. package/lib/clean-github-actions-caches-cli.cjs +255 -213
  87. package/lib/clean-github-actions-caches-cli.mjs +25 -7
  88. package/lib/clean-github-actions-caches.cjs +231 -35
  89. package/lib/clean-github-actions-caches.d.cts +39 -1
  90. package/lib/clean-github-actions-caches.mjs +2 -1
  91. package/lib/cross-env/command.cjs +2 -2
  92. package/lib/cross-env/command.js +2 -2
  93. package/lib/cross-env/command.mjs +2 -2
  94. package/lib/cross-env/index.cjs +2 -2
  95. package/lib/cross-env/index.mjs +3 -3
  96. package/lib/cross-env/variable.mjs +2 -2
  97. package/lib/del-gradle.cjs +6 -11
  98. package/lib/del-gradle.mjs +1 -1
  99. package/lib/del-node-modules.cjs +185 -3
  100. package/lib/del-node-modules.js +3 -3
  101. package/lib/del-node-modules.mjs +6 -3
  102. package/lib/{del-ps.cjs → del-ps-cli.cjs} +36 -41
  103. package/lib/del-ps-cli.mjs +44 -0
  104. package/lib/del-yarn-caches.cjs +6 -11
  105. package/lib/del-yarn-caches.mjs +1 -1
  106. package/lib/downloader-cli.cjs +256 -0
  107. package/lib/downloader-cli.d.cts +2 -0
  108. package/lib/downloader-cli.mjs +90 -0
  109. package/lib/file/copy-cli.cjs +183 -2
  110. package/lib/file/copy-cli.mjs +6 -2
  111. package/lib/file/move-cli.cjs +183 -2
  112. package/lib/file/move-cli.mjs +6 -2
  113. package/lib/find-node-modules-cli.cjs +1 -1
  114. package/lib/find-node-modules-cli.mjs +1 -1
  115. package/lib/find-node-modules.cjs +1 -1
  116. package/lib/find-node-modules.mjs +1 -1
  117. package/lib/free-chatgpt.cjs +6 -11
  118. package/lib/free-chatgpt.mjs +1 -1
  119. package/lib/git/user-config.cjs +7 -12
  120. package/lib/git/user-config.mjs +2 -2
  121. package/lib/git-diff-cli.cjs +91 -30
  122. package/lib/git-diff-cli.mjs +3 -3
  123. package/lib/git-diff.cjs +91 -30
  124. package/lib/git-diff.js +85 -28
  125. package/lib/git-diff.mjs +3 -3
  126. package/lib/git-fix.cjs +7 -12
  127. package/lib/git-fix.mjs +2 -2
  128. package/lib/git-purge.cjs +7 -12
  129. package/lib/git-purge.mjs +2 -2
  130. package/lib/index.cjs +1 -1
  131. package/lib/index.mjs +1 -1
  132. package/lib/node-cache-cleaner-cli.cjs +185 -2
  133. package/lib/node-cache-cleaner-cli.js +2 -5
  134. package/lib/node-cache-cleaner-cli.mjs +8 -4
  135. package/lib/node-executor.cjs +183 -2
  136. package/lib/node-executor.mjs +5 -2
  137. package/lib/node-package-packer/build-readme.cjs +150 -0
  138. package/lib/node-package-packer/build-readme.d.mts +10 -0
  139. package/lib/node-package-packer/build-readme.mjs +10 -0
  140. package/lib/node-package-packer/build-tarball.cjs +495 -0
  141. package/lib/node-package-packer/build-tarball.d.mts +33 -0
  142. package/lib/node-package-packer/build-tarball.mjs +175 -0
  143. package/lib/node-package-packer-cli.cjs +525 -0
  144. package/lib/node-package-packer-cli.d.mts +1 -0
  145. package/lib/node-package-packer-cli.mjs +34 -0
  146. package/lib/npm-run-series.cjs +7 -12
  147. package/lib/npm-run-series.mjs +2 -2
  148. package/lib/package-resolutions-updater-cli.cjs +73 -76
  149. package/lib/package-resolutions-updater-cli.mjs +4 -3
  150. package/lib/package-resolutions-updater.cjs +71 -74
  151. package/lib/package-resolutions-updater.d.mts +34 -0
  152. package/lib/package-resolutions-updater.mjs +3 -2
  153. package/lib/php-cs-fixer-staged.cjs +1 -1
  154. package/lib/php-cs-fixer-staged.mjs +1 -1
  155. package/lib/print-directory-tree.cjs +16 -18
  156. package/lib/print-directory-tree.mjs +11 -8
  157. package/lib/print-tarball-tree.cjs +262 -0
  158. package/lib/print-tarball-tree.d.mts +1 -0
  159. package/lib/print-tarball-tree.mjs +68 -0
  160. package/lib/ps/index.cjs +10 -10
  161. package/lib/ps/index.mjs +4 -4
  162. package/lib/ps/table-parser.d.ts +3 -4
  163. package/lib/ps/table-parser.js +9 -16
  164. package/lib/remove-module.cjs +17 -22
  165. package/lib/remove-module.mjs +2 -2
  166. package/lib/rm-node-module-cli.cjs +171 -4
  167. package/lib/rm-node-module-cli.mjs +7 -4
  168. package/lib/rmpath-cli.cjs +285 -0
  169. package/lib/rmpath-cli.d.mts +1 -0
  170. package/lib/rmpath-cli.mjs +23 -0
  171. package/lib/rmpath.cjs +6 -217
  172. package/lib/rmpath.mjs +5 -101
  173. package/lib/run-by-checksum/cache.cjs +69 -0
  174. package/lib/run-by-checksum/cache.d.ts +19 -0
  175. package/lib/run-by-checksum/cache.js +50 -0
  176. package/lib/run-by-checksum/cache.mjs +12 -0
  177. package/lib/run-by-checksum/hash.cjs +72 -0
  178. package/lib/run-by-checksum/hash.d.ts +14 -0
  179. package/lib/run-by-checksum/hash.js +85 -0
  180. package/lib/{ps/isWin.mjs → run-by-checksum/hash.mjs} +5 -5
  181. package/lib/run-by-checksum/run.cjs +169 -0
  182. package/lib/run-by-checksum/run.d.ts +22 -0
  183. package/lib/run-by-checksum/run.js +93 -0
  184. package/lib/run-by-checksum/run.mjs +10 -0
  185. package/lib/run-by-checksum-cli.cjs +382 -0
  186. package/lib/run-by-checksum-cli.d.ts +2 -0
  187. package/lib/run-by-checksum-cli.js +43 -0
  188. package/lib/run-by-checksum-cli.mjs +56 -0
  189. package/lib/submodule-install.cjs +8 -13
  190. package/lib/submodule-install.mjs +3 -3
  191. package/lib/submodule-remove-cli.cjs +169 -2
  192. package/lib/submodule-remove-cli.js +2 -2
  193. package/lib/submodule-remove-cli.mjs +5 -2
  194. package/lib/utils/fetchResponse.cjs +24 -0
  195. package/lib/utils/fetchResponse.d.cts +25 -0
  196. package/lib/utils/fetchResponse.mjs +6 -0
  197. package/lib/utils/index.cjs +5 -10
  198. package/lib/utils/index.d.cts +2 -9
  199. package/lib/utils/index.mjs +1 -1
  200. package/lib/utils/isWindows.mjs +3 -1
  201. package/lib/utils/runBash.cjs +1 -1
  202. package/lib/utils/runBash.mjs +1 -1
  203. package/lib/yarn-per-branch-lock-installer.cjs +202 -11
  204. package/lib/yarn-per-branch-lock-installer.mjs +24 -11
  205. package/lib/yarn-reinstall.cjs +6 -11
  206. package/lib/yarn-reinstall.mjs +1 -1
  207. package/package.json +35 -10
  208. package/readme.html +2 -2
  209. package/readme.md +5 -5
  210. package/releases/readme.md +6 -3
  211. package/tmp/test-repo-runChecksum/test-complex-glob/README.md +1 -0
  212. package/tmp/test-repo-runChecksum/test-mixed-args/README.md +1 -0
  213. package/.opencode/package.json +0 -5
  214. package/lib/chunk-6S4NXESK.mjs +0 -26
  215. package/lib/del-ps.js +0 -32
  216. package/lib/del-ps.mjs +0 -43
  217. package/lib/ps/isWin.cjs +0 -26
  218. package/lib/ps/isWin.d.ts +0 -2
  219. package/lib/ps/isWin.js +0 -4
  220. package/test/package.json +0 -20
  221. package/test-project/package.json +0 -22
  222. package/test-project/workspaces/workspace-a/package.json +0 -135
  223. package/test-project/workspaces/workspace-a/test/demo/package.json +0 -25
  224. package/test-project/workspaces/workspace-b/package.json +0 -139
  225. package/test-project/workspaces/workspace-b/test/sample-project/package.json +0 -7
  226. package/test-project/workspaces/workspace-b/themes/hexo-theme-flowbite/package.json +0 -96
  227. package/tmp/rm-node-modules-test-project/package.json +0 -17
  228. package/tmp/rm-node-modules-test-project/packages/workspace-a/package.json +0 -16
  229. package/tmp/rm-node-modules-test-project/packages/workspace-b/package.json +0 -16
  230. package/tmp/test-repo/package.json +0 -17
  231. /package/lib/{del-ps.d.ts → del-ps-cli.d.mts} +0 -0
@@ -0,0 +1,254 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * Built-in Node.js modules:
5
+ *
6
+ * - child_process:
7
+ * Used to launch external scripts/programs.
8
+ *
9
+ * - path:
10
+ * Safely handles file paths across operating systems.
11
+ *
12
+ * - fs:
13
+ * Used to check whether files exist.
14
+ */
15
+ const { spawnSync } = require('child_process');
16
+ const path = require('path');
17
+ const fs = require('fs');
18
+ const which = require('which');
19
+ const { isWindows } = require('../src/utils/isWindows.js');
20
+
21
+ /**
22
+ * __dirname
23
+ * Absolute directory path of this launcher script.
24
+ *
25
+ * __filename
26
+ * Absolute path of this launcher file itself.
27
+ *
28
+ * base
29
+ * Filename without extension.
30
+ *
31
+ * Example:
32
+ * File = "/tools/mytool.js"
33
+ *
34
+ * binDir = "/tools"
35
+ * base = "mytool"
36
+ */
37
+ const binDir = __dirname;
38
+ const base = path.basename(__filename, path.extname(__filename));
39
+
40
+ /**
41
+ * Determine which script extensions to search for
42
+ * based on the current operating system.
43
+ *
44
+ * Windows:
45
+ * .cmd
46
+ * .bat
47
+ * .ps1
48
+ * .vbs
49
+ *
50
+ * Linux/macOS:
51
+ * .sh
52
+ * executable file without extension
53
+ */
54
+ const candidates = process.platform === 'win32' ? ['.cmd', '.bat', '.ps1', '.vbs'] : ['.sh', ''];
55
+
56
+ /**
57
+ * Search for the first matching script
58
+ * in the same directory as this launcher.
59
+ *
60
+ * Example:
61
+ * If base = "mytool"
62
+ *
63
+ * Windows checks:
64
+ * mytool.cmd
65
+ * mytool.bat
66
+ * mytool.ps1
67
+ * mytool.vbs
68
+ *
69
+ * Linux/macOS checks:
70
+ * mytool.sh
71
+ * mytool
72
+ */
73
+ let found = null;
74
+
75
+ for (const ext of candidates) {
76
+ const script = path.join(binDir, base + ext);
77
+ const exists = fs.existsSync(script);
78
+ // console.log(`Checking for ${script}: ${exists ? 'found' : 'not found'}`);
79
+ if (exists) {
80
+ found = script;
81
+ break;
82
+ }
83
+ }
84
+
85
+ /**
86
+ * If no matching script was found,
87
+ * try check if `bash` is available and if so, check for a .sh script.
88
+ */
89
+ if (!found) {
90
+ try {
91
+ spawnSync('bash', ['--version'], { stdio: 'ignore' });
92
+ const bashScript = [path.join(binDir, base), path.join(binDir, base + '.sh')].find((script) =>
93
+ fs.existsSync(script)
94
+ );
95
+ if (bashScript) {
96
+ found = bashScript;
97
+ }
98
+ } catch {
99
+ // bash is not available, do nothing
100
+ }
101
+ }
102
+
103
+ /**
104
+ * If no matching script was found,
105
+ * print an error and exit with failure code 1.
106
+ */
107
+ if (!found) {
108
+ console.error(`No script found for ${base} in ${binDir}`);
109
+ process.exit(1);
110
+ }
111
+
112
+ /**
113
+ * Detect special script types
114
+ * that require a shell/interpreter.
115
+ */
116
+ const isPs1 = found.endsWith('.ps1');
117
+ const isCmd = found.endsWith('.cmd');
118
+ const isUnixShell = found.endsWith('.sh') || path.extname(found) === '';
119
+
120
+ /**
121
+ * cmd
122
+ * The executable program to launch.
123
+ *
124
+ * args
125
+ * Arguments passed to the executable.
126
+ */
127
+ let cmd, args;
128
+
129
+ /**
130
+ * PowerShell scripts:
131
+ *
132
+ * Run through powershell.exe because .ps1 files
133
+ * are not directly executable like binaries.
134
+ *
135
+ * Flags:
136
+ * -NoProfile
137
+ * Prevent loading user profile scripts.
138
+ *
139
+ * -ExecutionPolicy Bypass
140
+ * Allow script execution even if policy blocks it.
141
+ *
142
+ * -File
143
+ * Specifies the script to execute.
144
+ *
145
+ * process.argv.slice(2)
146
+ * Forward all user-provided command-line arguments.
147
+ */
148
+ if (isPs1) {
149
+ cmd = 'powershell.exe';
150
+
151
+ args = ['-NoProfile', '-ExecutionPolicy', 'Bypass', '-File', found, ...process.argv.slice(2)];
152
+
153
+ /**
154
+ * CMD batch files:
155
+ *
156
+ * Run through cmd.exe using:
157
+ * /c
158
+ * which means:
159
+ * "execute command and terminate"
160
+ */
161
+ } else if (isCmd) {
162
+ cmd = 'cmd.exe';
163
+
164
+ args = ['/c', found, ...process.argv.slice(2)];
165
+
166
+ /**
167
+ * Other scripts:
168
+ *
169
+ * Usually:
170
+ * - shell scripts (.sh)
171
+ * - executable binaries
172
+ *
173
+ * These can be executed directly.
174
+ */
175
+ } else if (isUnixShell) {
176
+ // Capture shebang scripts (no extension) and .sh scripts
177
+ const shebang = fs.readFileSync(found, 'utf8').split('\n')[0].trim();
178
+ const interpreter = shebang.startsWith('#!')
179
+ ? shebang
180
+ .slice(2)
181
+ .trim()
182
+ .replace(/^\/usr\/bin\/env\s+/, '')
183
+ .replace(/^\/bin\/env\s+/, '')
184
+ .replace(/^\/usr\/bin\//, '')
185
+ .replace(/^\/bin\//, '')
186
+ : null;
187
+
188
+ if (interpreter) {
189
+ const resolvedOrNull = which.sync(interpreter, { nothrow: true });
190
+ if (!resolvedOrNull) {
191
+ if (['bash', 'sh'].includes(interpreter) && isWindows()) {
192
+ const locationsToCheck = [
193
+ 'C:\\Program Files\\Git\\usr\\bin',
194
+ 'C:\\Program Files\\Git\\bin',
195
+ 'C:\\Program Files (x86)\\Git\\usr\\bin',
196
+ 'C:\\msys64\\usr\\bin',
197
+ 'C:\\msys64\\bin',
198
+ 'C:\\cygwin64\\bin',
199
+ 'C:\\cygwin\\bin',
200
+ 'C:\\MinGW\\bin',
201
+ 'C:\\MinGW\\msys\\1.0\\bin'
202
+ ];
203
+ for (const location of locationsToCheck) {
204
+ const potentialPath = path.join(location, 'bash.exe');
205
+ if (fs.existsSync(potentialPath)) {
206
+ cmd = potentialPath;
207
+ args = [found, ...process.argv.slice(2)];
208
+ break;
209
+ }
210
+ }
211
+ }
212
+ } else {
213
+ cmd = resolvedOrNull || interpreter;
214
+ args = [found, ...process.argv.slice(2)];
215
+ }
216
+ } else {
217
+ cmd = found;
218
+ args = process.argv.slice(2);
219
+ }
220
+ } else {
221
+ cmd = found;
222
+ args = process.argv.slice(2);
223
+ }
224
+
225
+ console.log(
226
+ `Executing: ${path.isAbsolute(cmd) ? path.relative(process.cwd(), cmd) : cmd} ${args
227
+ .map((f) => {
228
+ if (path.isAbsolute(f)) return path.relative(process.cwd(), f);
229
+ return f;
230
+ })
231
+ .join(' ')}`
232
+ );
233
+
234
+ /**
235
+ * Execute the selected script synchronously.
236
+ *
237
+ * stdio: "inherit"
238
+ * Shares the current terminal with the child process,
239
+ * so stdout/stderr/input behave normally.
240
+ *
241
+ * spawnSync waits until the child process exits.
242
+ */
243
+ const result = spawnSync(cmd, args, {
244
+ stdio: 'inherit'
245
+ });
246
+
247
+ /**
248
+ * Exit using the same exit code
249
+ * returned by the child process.
250
+ *
251
+ * If result.status is null/undefined,
252
+ * default to exit code 1.
253
+ */
254
+ process.exit(result.status ?? 1);
@@ -0,0 +1,34 @@
1
+ ## Binary Collections (Main Dispatcher)
2
+
3
+ The main entry point that dynamically finds and executes other scripts by name.
4
+
5
+ ### Usage
6
+
7
+ ```bash
8
+ npx --legacy-peer-deps -y binary-collections <script-name> [...args]
9
+ ```
10
+
11
+ ### Subcommands
12
+
13
+ | Subcommand | Description |
14
+ |------------|-------------|
15
+ | `list` | List all available scripts |
16
+ | `<script-name>` | Find and execute a script by name |
17
+ | `-h, --help` | Show help message |
18
+
19
+ ### Examples
20
+
21
+ ```bash
22
+ npx --legacy-peer-deps -y binary-collections list
23
+ npx --legacy-peer-deps -y binary-collections git-diff -s
24
+ npx --legacy-peer-deps -y binary-collections del-node-modules --force
25
+ npx --legacy-peer-deps -y binary-collections find-node-modules
26
+ ```
27
+
28
+ ### Development
29
+
30
+ When developing locally, use `bc <commandName>` (`bin/bc` on Unix or `bin/bc.cmd` on Windows). Its usage is the same as `binary-collections <commandName>`.
31
+
32
+ ### Source
33
+
34
+ See [`src/binary-collections.cjs`](../src/binary-collections.cjs) & [`bin/bc`](../bin/bc)
@@ -0,0 +1,26 @@
1
+ ## Changelog Generator
2
+
3
+ Generates a `CHANGELOG.md` file from git commit history, grouped by version bumps.
4
+
5
+ ### Usage
6
+
7
+ ```bash
8
+ changelog
9
+ ```
10
+
11
+ ### Description
12
+
13
+ - Analyzes git commit history looking for version bumps
14
+ - Groups commits by version
15
+ - Skips dependabot and irrelevant commits
16
+ - Outputs the original git log to `tmp/original.md` for reference
17
+
18
+ ### Options
19
+
20
+ | Option | Description |
21
+ |--------|-------------|
22
+ | `-h, --help` | Show help message |
23
+
24
+ ### Source
25
+
26
+ See [`src/changelog.cjs`](../src/changelog.cjs)
@@ -0,0 +1,115 @@
1
+ ## GitHub Actions Cache Cleaner
2
+
3
+ Removes outdated GitHub Actions caches in the current repository, keeping only the newest cache for each prefix. Ensures safe cleanup by retaining the latest cache per group and authenticates using tokens from your .env file.
4
+
5
+ ### Usage
6
+
7
+ ```bash
8
+ # use npx
9
+ npx --yes binary-collections@https://raw.githubusercontent.com/dimaslanjaka/bin/master/releases/bin.tgz clean-github-actions-caches
10
+
11
+ # use yarn dlx
12
+ yarn dlx binary-collections@https://raw.githubusercontent.com/dimaslanjaka/bin/master/releases/bin.tgz clean-github-actions-caches
13
+
14
+ # keep the first 3 cache key segments as the grouping prefix
15
+ clean-github-actions-caches --prefix-depth 3
16
+ ```
17
+
18
+ ### Aliases
19
+
20
+ This command is available under several aliases (all invoke the same CLI):
21
+
22
+ - `clean-github-actions-cache`
23
+ - `clear-github-actions-cache`
24
+ - `clear-github-actions-caches`
25
+ - `clear-gh-caches`
26
+
27
+
28
+ ### Features
29
+ - Authenticates using `ACCESS_TOKEN` or `GITHUB_TOKEN` from your `.env` file
30
+ - Groups caches by the first N key segments split on `-` or `_` and deletes all but the latest for each group
31
+ - Operates on the current repository (origin remote) and matches the working directory of your terminal
32
+ - Safe: Only deletes caches older than the most recent per prefix
33
+ - Accepts `--repo owner/repo` to target a specific repository and `--prefix-depth <n>` to control grouping
34
+
35
+ ### Environment Setup
36
+ 1. Add `ACCESS_TOKEN` or `GITHUB_TOKEN` to your `.env` file
37
+ 2. Ensure you have access to the repository's cache management
38
+
39
+ ### Source
40
+ See [`src/clean-github-actions-caches.cjs`](../src/clean-github-actions-caches.cjs) & [`src/clean-github-actions-caches-cli.cjs`](../src/clean-github-actions-caches-cli.cjs)
41
+
42
+ ### Github CI Examples
43
+
44
+ ```yaml
45
+ name: Clean GitHub Actions Cache
46
+
47
+ on:
48
+ # Trigger this workflow when the specified workflows complete (e.g., after build and test workflows)
49
+ workflow_run:
50
+ workflows:
51
+ - Node.js Package Build
52
+ - Node.js Package Test
53
+ types:
54
+ - completed
55
+
56
+ # Allow manual triggering of this workflow from the GitHub Actions UI
57
+ workflow_dispatch:
58
+
59
+ # Uncomment the following lines to enable scheduled cache cleaning (e.g., every hour)
60
+ # schedule:
61
+ # - cron: '0 * * * *'
62
+
63
+ # Uncomment the following lines to enable cache cleaning on pushes to the master branch
64
+ # push:
65
+ # branches:
66
+ # - master
67
+
68
+ # Allow this workflow to be called by other workflows, passing the ACCESS_TOKEN secret
69
+ workflow_call:
70
+ secrets:
71
+ ACCESS_TOKEN:
72
+ required: true
73
+
74
+ concurrency:
75
+ group: clean-cache
76
+ cancel-in-progress: true
77
+
78
+ jobs:
79
+ clean-cache:
80
+ # if: contains(github.repository, 'php-proxy-hunter')
81
+ runs-on: windows-latest
82
+
83
+ env:
84
+ PIP_CACHE_DIR: "${{ github.workspace }}/project/tmp/pip"
85
+ NUITKA_CACHE_DIR: "${{ github.workspace }}/project/tmp/nuitka-cache"
86
+ NODE_OPTIONS: "--max_old_space_size=4096"
87
+ YARN_ENABLE_IMMUTABLE_INSTALLS: false
88
+ ACCESS_TOKEN: ${{ secrets.ACCESS_TOKEN || secrets.GITHUB_TOKEN }}
89
+ GH_TOKEN: ${{ secrets.ACCESS_TOKEN || secrets.GITHUB_TOKEN }}
90
+ YARN_CHECKSUM_BEHAVIOR: update
91
+
92
+ steps:
93
+ - name: 📥 Checkout Repository
94
+ uses: actions/checkout@v6
95
+ with:
96
+ token: ${{ secrets.ACCESS_TOKEN || secrets.GITHUB_TOKEN }}
97
+
98
+ - name: 🐍 Setup Python
99
+ uses: actions/setup-python@v6
100
+ with:
101
+ python-version: "3.11"
102
+ architecture: "x64"
103
+
104
+ - name: 🟢 Setup Node.js
105
+ uses: actions/setup-node@v6
106
+ with:
107
+ node-version: 20.x
108
+
109
+ - name: 🧹 Clean GitHub Actions Cache ${{ github.event.workflow_run.head_sha }}
110
+ env:
111
+ GH_TOKEN: ${{ secrets.ACCESS_TOKEN || secrets.GITHUB_TOKEN }}
112
+ run: |
113
+ npx --legacy-peer-deps -y binary-collections@https://raw.githubusercontent.com/dimaslanjaka/bin/master/releases/bin.tgz clean-github-actions-caches --repo ${{ github.repository }} --sha ${{ github.event.workflow_run.head_sha }}
114
+ shell: bash
115
+ ```
@@ -0,0 +1,59 @@
1
+ ## Copy & Move File
2
+
3
+ Copies or moves files/directories via CLI.
4
+
5
+ ### Usage
6
+
7
+ ```bash
8
+ copy <src> <dest>
9
+ move <src> <dest>
10
+ ````
11
+
12
+ ### Behavior
13
+
14
+ * If `src` is a **file** and `dest` is a **directory**, the file will be placed inside that directory using its original filename.
15
+ * If `src` is a **file** and `dest` is a **file path**, it will be copied/moved directly to that path.
16
+ * If `src` is a **directory**, the entire directory will be copied/moved into the destination.
17
+
18
+ ### Aliases
19
+
20
+ The copy command is available under several aliases (all invoke the same CLI):
21
+
22
+ * `copy` (default)
23
+ * `node-copy`
24
+ * `copy-file`
25
+
26
+ The move command is available under several aliases (all invoke the same CLI):
27
+
28
+ * `move` (default)
29
+ * `node-move`
30
+ * `move-file`
31
+
32
+ ### Options
33
+
34
+ | Option | Description |
35
+ | ------------ | ----------------- |
36
+ | `-h, --help` | Show help message |
37
+
38
+ ### Examples
39
+
40
+ ```bash
41
+ # file → file
42
+ copy file.txt backup/file.txt
43
+ move file.txt backup/file.txt
44
+
45
+ # file → directory (auto-append filename)
46
+ copy file.txt backup/
47
+ move file.txt backup/
48
+
49
+ # directory → directory
50
+ copy ./src ./dist
51
+ move ./src ./dist
52
+ ```
53
+
54
+ ### Source
55
+
56
+ See [`src/file/copy-cli.mjs`](../src/file/copy-cli.mjs),
57
+ [`src/file/copy.mjs`](../src/file/copy.mjs),
58
+ [`src/file/move-cli.mjs`](../src/file/move-cli.mjs),
59
+ [`src/file/move.mjs`](../src/file/move.mjs)
@@ -0,0 +1,17 @@
1
+ ## Gradle Build Cleaner
2
+
3
+ Deletes Gradle `build/` directories.
4
+
5
+ ### Usage
6
+
7
+ ```bash
8
+ del-gradle
9
+ ```
10
+
11
+ ### Description
12
+
13
+ Searches for `build.gradle` files and deletes the adjacent `build/` directories, ignoring `node_modules` and `vendor` directories.
14
+
15
+ ### Source
16
+
17
+ See [`src/del-gradle.js`](../src/del-gradle.js)
@@ -0,0 +1,28 @@
1
+ ## Process Management
2
+
3
+ Terminate processes quickly by name or type across platforms.
4
+
5
+ ### Commands
6
+
7
+ | Command | Description |
8
+ |---------|-------------|
9
+ | `del-ps <process-name>` | Kill processes by command name (cross-platform) |
10
+ | `kill-process <name>` | Kill process by name (Unix `killall`) |
11
+ | `nodekill` | Kill all Node.js processes |
12
+ | `javakill` | Kill all Java processes (Windows `taskkill`) |
13
+
14
+ ### Usage
15
+
16
+ ```bash
17
+ # Kill processes by name
18
+ del-ps <process-name>
19
+
20
+ # Kill specific types
21
+ kill-process <name> # Unix: uses killall
22
+ nodekill # Kill all node.exe processes
23
+ javakill # Kill all java.exe processes (Windows)
24
+ ```
25
+
26
+ ### Source
27
+
28
+ See [`src/del-ps.js`](../src/del-ps.js) and shell wrappers in [`bin/`](../bin/)
@@ -0,0 +1,62 @@
1
+ # Downloader
2
+
3
+ Downloads files from URLs over HTTP/HTTPS to the local filesystem. Uses `axios` with streaming to efficiently write downloaded content directly to disk, and supports up to 10 redirects.
4
+
5
+ ## Usage
6
+
7
+ ```bash
8
+ downloader <url> [output-path]
9
+ ```
10
+
11
+ ### Aliases
12
+
13
+ This command is available under several aliases (all invoke the same CLI):
14
+
15
+ - `downloader` (default)
16
+ - `download`
17
+ - `download-file`
18
+ - `file-downloader`
19
+ - `fetch-file`
20
+
21
+ ### Arguments
22
+
23
+ | Argument | Description |
24
+ | :------------ | :-------------------------------------- |
25
+ | `url` | File URL to download (required) |
26
+ | `output-path` | Optional destination path on disk |
27
+
28
+ ### Options
29
+
30
+ | Flag | Description |
31
+ | :------------- | :---------------- |
32
+ | `-h`, `--help` | Show help message |
33
+
34
+ ### Behavior
35
+
36
+ - If no `output-path` is provided, the filename is derived from the URL's pathname (e.g., `https://example.com/file.zip` saves as `file.zip` in the current directory).
37
+ - If the URL path ends with `/` or has no filename segment, the default name `downloaded-file` is used.
38
+ - The output path is resolved to an absolute path, and any missing parent directories are created automatically.
39
+
40
+ ### Examples
41
+
42
+ Download to the current directory (filename auto-derived from URL):
43
+
44
+ ```bash
45
+ downloader https://example.com/file.zip
46
+ ```
47
+
48
+ Download and save with a custom filename:
49
+
50
+ ```bash
51
+ downloader https://example.com/file.zip downloads/custom.zip
52
+ ```
53
+
54
+ Using an alias:
55
+
56
+ ```bash
57
+ fetch-file https://example.com/data.json ./data/input.json
58
+ ```
59
+
60
+ ## Source
61
+
62
+ See [`src/downloader-cli.cjs`](../src/downloader-cli.cjs).
@@ -0,0 +1,29 @@
1
+ ## Environment Helpers
2
+
3
+ Set `NODE_ENV` and run a command in the configured environment.
4
+
5
+ ### Commands
6
+
7
+ | Command | Description |
8
+ |---------|-------------|
9
+ | `dev <command>` | Sets `NODE_ENV=development` and runs the command |
10
+ | `prod <command>` | Sets `NODE_ENV=production` and runs the command |
11
+ | `empty` | No-op utility placeholder |
12
+
13
+ ### Usage
14
+
15
+ ```bash
16
+ dev <command> [args...]
17
+ prod <command> [args...]
18
+ ```
19
+
20
+ ### Examples
21
+
22
+ ```bash
23
+ dev node server.js
24
+ prod npm start
25
+ ```
26
+
27
+ ### Source
28
+
29
+ See [`bin/dev`](../bin/dev) & [`bin/prod`](../bin/prod)
@@ -0,0 +1,17 @@
1
+ ## Find Node Modules
2
+
3
+ Locates all `node_modules` directories within a project.
4
+
5
+ ### Usage
6
+
7
+ ```bash
8
+ find-node-modules
9
+ ```
10
+
11
+ ### Description
12
+
13
+ Finds and prints all `node_modules` directories under the current working directory.
14
+
15
+ ### Source
16
+
17
+ See [`src/find-node-modules.cjs`](../src/find-node-modules.cjs) & [`src/find-node-modules-cli.js`](../src/find-node-modules-cli.js)
@@ -0,0 +1,26 @@
1
+ # free-chatgpt.js
2
+
3
+ Automates browser interaction with ChatGPT using Puppeteer, including login, question submission, and response retrieval. Supports session persistence via cookies and flexible question input.
4
+
5
+ ## Usage
6
+
7
+ ```bash
8
+ # use npx
9
+ npx --yes binary-collections@https://raw.githubusercontent.com/dimaslanjaka/bin/master/releases/bin.tgz free-chatgpt
10
+
11
+ # use yarn dlx
12
+ yarn dlx binary-collections@https://raw.githubusercontent.com/dimaslanjaka/bin/master/releases/bin.tgz free-chatgpt
13
+ ```
14
+
15
+ ### Argument Options
16
+
17
+ - `--question, -q` The question to ask ChatGPT (default: "Hello, ChatGPT!")
18
+ - `--qfile, -qf` Path to a file containing the question text
19
+ - `--help, -h` Show help message
20
+
21
+ ## Notes
22
+
23
+ - Cookies are stored in `./tmp/cookies` for session reuse.
24
+ - Responses are saved to `./tmp/response.txt`.
25
+ - Requires access to `chat.openai.com` (firewall must allow connection).
26
+ - Uses Puppeteer with stealth plugin to avoid bot detection.