binary-collections 2.0.10 → 2.0.12

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 (290) hide show
  1. package/.opencode/package.json +5 -0
  2. package/.puppeterrc.cjs +25 -0
  3. package/binaries/binary-executor.cjs +138 -3
  4. package/binaries/clean-nodemodule.cjs +138 -3
  5. package/binaries/clean-nodemodules.cjs +138 -3
  6. package/binaries/dev.cjs +138 -3
  7. package/binaries/empty.cjs +138 -3
  8. package/binaries/git-reduce-size.cjs +138 -3
  9. package/binaries/javakill.cjs +138 -3
  10. package/binaries/kill-night-crows.bat +7 -0
  11. package/binaries/kill-night-crows.ps1 +172 -0
  12. package/binaries/kill-process.cjs +138 -3
  13. package/binaries/nodekill.cjs +138 -3
  14. package/binaries/prod.cjs +138 -3
  15. package/binaries/py +111 -0
  16. package/binaries/py.cjs +178 -0
  17. package/binaries/py.cmd +49 -0
  18. package/binaries/rmfind.cjs +138 -3
  19. package/binaries/rmx +15 -1
  20. package/binaries/rmx.cjs +138 -3
  21. package/binaries/rmx.cmd +12 -0
  22. package/binaries/submodule-token.cjs +138 -3
  23. package/binaries/test-cjs +18 -0
  24. package/binaries/test-cjs.cjs +178 -0
  25. package/binaries/test-cjs.cmd +26 -0
  26. package/binaries/test-esm +16 -0
  27. package/binaries/test-esm.cjs +178 -0
  28. package/binaries/test-esm.cmd +23 -0
  29. package/binaries/yarn-clean +32 -0
  30. package/binaries/yarn-clean.cjs +178 -0
  31. package/binaries/yarn-clean.cmd +30 -0
  32. package/binaries/yarn-clean.py +166 -0
  33. package/binaries/yc +110 -0
  34. package/binaries/yc.cjs +178 -0
  35. package/lib/binary-collections/config.cjs +126 -0
  36. package/lib/binary-collections/config.mjs +7 -0
  37. package/lib/binary-collections/executeScript.cjs +19 -0
  38. package/lib/binary-collections/executeScript.d.cts +12 -0
  39. package/lib/binary-collections/executeScript.mjs +6 -0
  40. package/lib/binary-collections/findScript.cjs +284 -0
  41. package/lib/binary-collections/findScript.d.cts +12 -0
  42. package/lib/binary-collections/findScript.mjs +7 -0
  43. package/lib/binary-collections/listScript.cjs +266 -0
  44. package/lib/binary-collections/listScript.d.cts +19 -0
  45. package/lib/binary-collections/listScript.mjs +7 -0
  46. package/lib/binary-collections.cjs +342 -194
  47. package/lib/binary-collections.mjs +22 -268
  48. package/lib/changelog.cjs +61 -13
  49. package/lib/changelog.mjs +1 -1
  50. package/lib/{chunk-E6FDDAOO.mjs → chunk-2LSRSEXF.mjs} +2 -2
  51. package/lib/chunk-34IQDTLZ.mjs +27 -0
  52. package/lib/chunk-3HFFECCI.mjs +27 -0
  53. package/lib/{chunk-V3N3JEUF.mjs → chunk-5RTXZVCW.mjs} +60 -13
  54. package/lib/chunk-66KDU4TX.mjs +268 -0
  55. package/lib/chunk-6PU7BAHB.mjs +61 -0
  56. package/lib/{chunk-6HHJRKFB.mjs → chunk-BZWVHODJ.mjs} +4 -1
  57. package/lib/chunk-C6D2TTYU.mjs +32 -0
  58. package/lib/chunk-FB2WKVJD.mjs +158 -0
  59. package/lib/{chunk-66PAU5PS.mjs → chunk-G5UUEWUO.mjs} +9 -5
  60. package/lib/{chunk-HO6GHCOB.mjs → chunk-GAGABICI.mjs} +198 -63
  61. package/lib/chunk-H44UWUFY.mjs +105 -0
  62. package/lib/chunk-NCZPTKDV.mjs +79 -0
  63. package/lib/chunk-NGFK3EYW.mjs +28 -0
  64. package/lib/chunk-NVEG3LEZ.mjs +143 -0
  65. package/lib/chunk-OGXVGBRI.mjs +29 -0
  66. package/lib/chunk-OXV52GD5.mjs +62 -0
  67. package/lib/{chunk-PDSXF5HY.mjs → chunk-PDN26I7O.mjs} +1 -0
  68. package/lib/chunk-PXBMHE7O.mjs +35 -0
  69. package/lib/chunk-R5FJOR63.mjs +47 -0
  70. package/lib/chunk-SPTECFE5.mjs +180 -0
  71. package/lib/chunk-UXCFNAR6.mjs +55 -0
  72. package/lib/chunk-V2IBPCEV.mjs +39 -0
  73. package/lib/chunk-XPJGCDOD.mjs +14 -0
  74. package/lib/{chunk-AI4CVPJ7.mjs → chunk-ZDMWBSYF.mjs} +4 -4
  75. package/lib/chunk-ZOWVMII3.mjs +228 -0
  76. package/lib/clean-github-actions-caches-cli.cjs +465 -0
  77. package/lib/clean-github-actions-caches-cli.d.cts +1 -0
  78. package/lib/clean-github-actions-caches-cli.mjs +56 -0
  79. package/lib/clean-github-actions-caches.cjs +152 -160
  80. package/lib/clean-github-actions-caches.d.cts +15 -1
  81. package/lib/clean-github-actions-caches.mjs +4 -130
  82. package/lib/cross-env/command.cjs +63 -0
  83. package/lib/cross-env/command.d.ts +8 -0
  84. package/lib/cross-env/command.js +45 -0
  85. package/lib/cross-env/command.mjs +9 -0
  86. package/lib/cross-env/index.cjs +178 -0
  87. package/lib/cross-env/index.d.ts +8 -0
  88. package/lib/cross-env/index.js +102 -0
  89. package/lib/cross-env/index.mjs +101 -0
  90. package/lib/cross-env/variable.cjs +60 -0
  91. package/lib/cross-env/variable.d.ts +7 -0
  92. package/lib/cross-env/variable.js +59 -0
  93. package/lib/cross-env/variable.mjs +9 -0
  94. package/lib/del-gradle.cjs +61 -13
  95. package/lib/del-gradle.js +9 -8
  96. package/lib/del-gradle.mjs +1 -1
  97. package/lib/del-node-modules.cjs +143 -148
  98. package/lib/del-node-modules.js +210 -14
  99. package/lib/del-node-modules.mjs +148 -17
  100. package/lib/del-ps.cjs +61 -13
  101. package/lib/del-ps.js +9 -8
  102. package/lib/del-ps.mjs +1 -1
  103. package/lib/del-yarn-caches.cjs +61 -13
  104. package/lib/del-yarn-caches.js +2 -2
  105. package/lib/del-yarn-caches.mjs +1 -1
  106. package/lib/file/copy-cli.cjs +92 -0
  107. package/lib/file/copy-cli.d.mts +1 -0
  108. package/lib/file/copy-cli.mjs +55 -0
  109. package/lib/file/copy.cjs +56 -0
  110. package/lib/file/copy.d.mts +1 -0
  111. package/lib/file/copy.mjs +8 -0
  112. package/lib/file/move-cli.cjs +91 -0
  113. package/lib/file/move-cli.d.mts +1 -0
  114. package/lib/file/move-cli.mjs +55 -0
  115. package/lib/file/move.cjs +55 -0
  116. package/lib/file/move.d.mts +1 -0
  117. package/lib/file/move.mjs +8 -0
  118. package/lib/find-node-modules-cli.js +2 -1
  119. package/lib/free-chatgpt.cjs +259 -47
  120. package/lib/free-chatgpt.js +10 -10
  121. package/lib/free-chatgpt.mjs +2 -2
  122. package/lib/git/gitattributes.cjs +1 -0
  123. package/lib/git/gitattributes.d.cts +7 -2
  124. package/lib/git/gitattributes.mjs +1 -1
  125. package/lib/git/line-endings.cjs +2 -1
  126. package/lib/git/line-endings.mjs +2 -2
  127. package/lib/git/undo-commit-cli.cjs +110 -0
  128. package/lib/git/undo-commit-cli.d.ts +1 -0
  129. package/lib/git/undo-commit-cli.js +4 -0
  130. package/lib/git/undo-commit-cli.mjs +14 -0
  131. package/lib/git/undo-commit.cjs +81 -0
  132. package/lib/git/undo-commit.d.cts +1 -0
  133. package/lib/git/undo-commit.mjs +7 -0
  134. package/lib/git/undo-staged-cli.cjs +110 -0
  135. package/lib/git/undo-staged-cli.d.ts +1 -0
  136. package/lib/git/undo-staged-cli.js +4 -0
  137. package/lib/git/undo-staged-cli.mjs +14 -0
  138. package/lib/git/undo-staged.cjs +81 -0
  139. package/lib/git/undo-staged.d.cts +1 -0
  140. package/lib/git/undo-staged.mjs +7 -0
  141. package/lib/git/user-config.cjs +61 -14
  142. package/lib/git/user-config.mjs +2 -2
  143. package/lib/git-diff-cli.cjs +427 -75
  144. package/lib/git-diff-cli.d.ts +1 -0
  145. package/lib/git-diff-cli.js +1 -0
  146. package/lib/git-diff-cli.mjs +6 -4
  147. package/lib/git-diff.cjs +426 -75
  148. package/lib/git-diff.d.ts +2 -1
  149. package/lib/git-diff.js +91 -34
  150. package/lib/git-diff.mjs +5 -4
  151. package/lib/git-fix.cjs +64 -16
  152. package/lib/git-fix.mjs +10 -10
  153. package/lib/git-purge.cjs +61 -13
  154. package/lib/git-purge.mjs +1 -1
  155. package/lib/index.d.ts +1 -1
  156. package/lib/kill-night-crows.cjs +87 -0
  157. package/lib/kill-night-crows.d.mts +1 -0
  158. package/lib/kill-night-crows.mjs +65 -0
  159. package/lib/node-cache-cleaner/npm.cjs +65 -0
  160. package/lib/node-cache-cleaner/npm.d.ts +2 -0
  161. package/lib/node-cache-cleaner/npm.js +41 -0
  162. package/lib/node-cache-cleaner/npm.mjs +10 -0
  163. package/lib/node-cache-cleaner/npx.cjs +89 -0
  164. package/lib/node-cache-cleaner/npx.d.ts +4 -0
  165. package/lib/node-cache-cleaner/npx.js +82 -0
  166. package/lib/{ps/index.d.mjs → node-cache-cleaner/npx.mjs} +6 -5
  167. package/lib/node-cache-cleaner/yarn.cjs +73 -0
  168. package/lib/node-cache-cleaner/yarn.d.ts +2 -0
  169. package/lib/node-cache-cleaner/yarn.js +62 -0
  170. package/lib/node-cache-cleaner/yarn.mjs +10 -0
  171. package/lib/node-cache-cleaner-cli.cjs +182 -0
  172. package/lib/node-cache-cleaner-cli.d.ts +2 -0
  173. package/lib/node-cache-cleaner-cli.js +60 -0
  174. package/lib/node-cache-cleaner-cli.mjs +56 -0
  175. package/lib/node-executor.cjs +91 -0
  176. package/lib/node-executor.d.cts +2 -0
  177. package/lib/node-executor.mjs +103 -0
  178. package/lib/npm-run-series.cjs +79 -39
  179. package/lib/npm-run-series.mjs +20 -6
  180. package/lib/package-resolutions-updater-cli.cjs +645 -0
  181. package/lib/package-resolutions-updater-cli.d.mts +1 -0
  182. package/lib/package-resolutions-updater-cli.mjs +102 -0
  183. package/lib/package-resolutions-updater.cjs +259 -133
  184. package/lib/package-resolutions-updater.d.mts +51 -1
  185. package/lib/package-resolutions-updater.mjs +18 -294
  186. package/lib/php-cs-fixer-staged.cjs +105 -0
  187. package/lib/php-cs-fixer-staged.d.cts +2 -0
  188. package/lib/php-cs-fixer-staged.mjs +117 -0
  189. package/lib/print-directory-tree.cjs +62 -14
  190. package/lib/print-directory-tree.mjs +2 -2
  191. package/lib/ps/connected-domain.d.ts +1 -1
  192. package/lib/ps/connected-domain.js +10 -10
  193. package/lib/ps/index.cjs +1 -1
  194. package/lib/ps/index.mjs +177 -171
  195. package/lib/ps/isWin.js +1 -1
  196. package/lib/ps/table-parser.js +6 -6
  197. package/lib/remove-module.cjs +61 -13
  198. package/lib/remove-module.mjs +1 -1
  199. package/lib/rm-node-module-cli.cjs +222 -0
  200. package/lib/rm-node-module-cli.d.cts +1 -0
  201. package/lib/rm-node-module-cli.mjs +89 -0
  202. package/lib/rm-node-modules.cjs +127 -0
  203. package/lib/rm-node-modules.d.cts +35 -0
  204. package/lib/{binary-collections-config.mjs → rm-node-modules.mjs} +3 -3
  205. package/lib/rmpath.cjs +63 -15
  206. package/lib/rmpath.mjs +2 -2
  207. package/lib/submodule-install.cjs +107 -47
  208. package/lib/submodule-install.mjs +48 -35
  209. package/lib/submodule-remove-cli.cjs +6 -3
  210. package/lib/submodule-remove-cli.js +3 -3
  211. package/lib/submodule-remove-cli.mjs +2 -3
  212. package/lib/submodule-remove.cjs +4 -1
  213. package/lib/submodule-remove.mjs +1 -1
  214. package/lib/utils/chatgpt.cjs +198 -34
  215. package/lib/utils/chatgpt.js +260 -93
  216. package/lib/utils/chatgpt.mjs +1 -1
  217. package/lib/utils/findEnvFiles.cjs +89 -0
  218. package/lib/utils/findEnvFiles.d.cts +19 -0
  219. package/lib/utils/findEnvFiles.mjs +6 -0
  220. package/lib/utils/findWorkspaceRoot.cjs +70 -0
  221. package/lib/utils/findWorkspaceRoot.d.ts +9 -0
  222. package/lib/utils/findWorkspaceRoot.js +57 -0
  223. package/lib/utils/findWorkspaceRoot.mjs +40 -0
  224. package/lib/utils/index.cjs +60 -13
  225. package/lib/utils/index.mjs +1 -1
  226. package/lib/utils/isGithubTokenValid.cjs +64 -0
  227. package/lib/utils/isGithubTokenValid.d.ts +7 -0
  228. package/lib/utils/isGithubTokenValid.js +48 -0
  229. package/lib/utils/isGithubTokenValid.mjs +36 -0
  230. package/lib/{ps/index.d.cjs → utils/isWindows.cjs} +17 -3
  231. package/lib/utils/isWindows.d.ts +5 -0
  232. package/lib/utils/isWindows.js +10 -0
  233. package/lib/utils/isWindows.mjs +8 -0
  234. package/lib/utils/runBash.cjs +53 -0
  235. package/lib/utils/runBash.d.cts +12 -0
  236. package/lib/utils/runBash.mjs +66 -0
  237. package/lib/yarn-per-branch-lock-installer.cjs +97 -0
  238. package/lib/yarn-per-branch-lock-installer.d.cts +2 -0
  239. package/lib/yarn-per-branch-lock-installer.mjs +109 -0
  240. package/lib/yarn-reinstall.cjs +61 -13
  241. package/lib/yarn-reinstall.mjs +1 -1
  242. package/package.json +133 -110
  243. package/readme.html +784 -0
  244. package/readme.md +116 -229
  245. package/releases/readme.md +1 -1
  246. package/requirements.txt +1 -0
  247. package/test/README.md +2 -2
  248. package/test-project/package.json +8 -2
  249. package/test-project/workspaces/workspace-a/package.json +135 -0
  250. package/test-project/workspaces/workspace-a/readme.md +20 -0
  251. package/test-project/workspaces/workspace-a/release/readme.md +42 -0
  252. package/test-project/workspaces/workspace-a/test/demo/package.json +25 -0
  253. package/test-project/workspaces/workspace-a/test/readme.md +12 -0
  254. package/test-project/workspaces/workspace-b/package.json +139 -0
  255. package/test-project/workspaces/workspace-b/readme.md +94 -0
  256. package/test-project/workspaces/workspace-b/requirements.txt +1 -0
  257. package/test-project/workspaces/workspace-b/test/sample-project/package.json +7 -0
  258. package/test-project/workspaces/workspace-b/themes/hexo-theme-flowbite/package.json +96 -0
  259. package/test-project/workspaces/workspace-b/themes/hexo-theme-flowbite/readme.md +156 -0
  260. package/tmp/rm-node-modules-test-project/package.json +17 -0
  261. package/tmp/rm-node-modules-test-project/packages/workspace-a/package.json +16 -0
  262. package/tmp/rm-node-modules-test-project/packages/workspace-b/package.json +16 -0
  263. package/tmp/test-repo/README.md +2 -35
  264. package/tmp/test-repo/package.json +13 -3
  265. package/docs-src/clean-github-actions-caches.md +0 -26
  266. package/docs-src/free-chatgpt.md +0 -26
  267. package/lib/binary-collections-config.cjs +0 -15
  268. package/lib/chunk-4EWQC6GZ.mjs +0 -382
  269. package/lib/chunk-4ZI7BQKQ.mjs +0 -381
  270. package/lib/chunk-5J2BEPY5.mjs +0 -83
  271. package/lib/chunk-AGZYRDC2.mjs +0 -323
  272. package/lib/chunk-BDCHCWHD.mjs +0 -136
  273. package/lib/chunk-BEZKJ25G.mjs +0 -140
  274. package/lib/chunk-DI5MDPSN.mjs +0 -386
  275. package/lib/chunk-GJTGHXRA.mjs +0 -356
  276. package/lib/chunk-HMRMTYZM.mjs +0 -40
  277. package/lib/chunk-HN52G2YL.mjs +0 -305
  278. package/lib/chunk-LEM5OMRP.mjs +0 -384
  279. package/lib/chunk-O6SWBEOQ.mjs +0 -81
  280. package/lib/chunk-RCP7DHVY.mjs +0 -190
  281. package/lib/chunk-SBNDSKG5.mjs +0 -136
  282. package/lib/chunk-U6SO4QEV.mjs +0 -320
  283. package/lib/chunk-XD6BJK6Q.mjs +0 -351
  284. package/lib/chunk-YXSFGA2D.mjs +0 -383
  285. package/lib/git/gitattributes.d.ts +0 -33
  286. package/lib/git/gitattributes.js +0 -223
  287. package/lib/ps/index.d.ts +0 -2
  288. package/lib/ps/index.js +0 -253
  289. package/tmp/typedoc/readme.md +0 -320
  290. /package/lib/{binary-collections-config.d.cts → binary-collections/config.d.cts} +0 -0
@@ -0,0 +1,222 @@
1
+ #!/usr/bin/env node
2
+ var __getOwnPropNames = Object.getOwnPropertyNames;
3
+ var __esm = (fn, res) => function __init() {
4
+ return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
5
+ };
6
+ var __commonJS = (cb, mod) => function __require() {
7
+ return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
8
+ };
9
+
10
+ // node_modules/tsup/assets/cjs_shims.js
11
+ var init_cjs_shims = __esm({
12
+ "node_modules/tsup/assets/cjs_shims.js"() {
13
+ }
14
+ });
15
+
16
+ // src/rm-node-modules.cjs
17
+ var require_rm_node_modules = __commonJS({
18
+ "src/rm-node-modules.cjs"(exports2, module2) {
19
+ init_cjs_shims();
20
+ var fs2 = require("fs-extra");
21
+ var path2 = require("upath");
22
+ var ansiColors2 = require("ansi-colors");
23
+ var child_process = require("child_process");
24
+ var os = require("os");
25
+ function generateBashScript(options = {}) {
26
+ const { dryRun = true } = options;
27
+ return `
28
+ #!/bin/bash
29
+
30
+ set -u
31
+
32
+ cwd="$(pwd)"
33
+ max_jobs=4
34
+ DRY_RUN=${dryRun ? "true" : "false"}
35
+
36
+ cleanup_letter() {
37
+ local letter="$1"
38
+
39
+ if [ "$DRY_RUN" = "true" ]; then
40
+ echo "Would remove: node_modules/\${letter}*"
41
+ echo "Would remove: node_modules/@types/\${letter}*"
42
+ echo "Would remove: node_modules/@\${letter}*"
43
+ else
44
+ rm -rf "\${cwd}/node_modules/\${letter}"*
45
+ echo "Removed: node_modules/\${letter}*"
46
+
47
+ rm -rf "\${cwd}/node_modules/@types/\${letter}"*
48
+ echo "Removed: node_modules/@types/\${letter}*"
49
+
50
+ rm -rf "\${cwd}/node_modules/@\${letter}"*
51
+ echo "Removed: node_modules/@\${letter}*"
52
+ fi
53
+ }
54
+
55
+ export -f cleanup_letter
56
+ export cwd
57
+ export DRY_RUN
58
+
59
+ if [ "$DRY_RUN" = "true" ]; then
60
+ echo "Dry-run mode (pass --force to actually delete)"
61
+ fi
62
+
63
+ echo "Cleaning \${cwd}/node_modules..."
64
+
65
+ running=0
66
+
67
+ for letter in {a..z}; do
68
+ cleanup_letter "$letter" &
69
+
70
+ ((running++))
71
+
72
+ # limit concurrent jobs
73
+ if (( running >= max_jobs )); then
74
+ wait -n
75
+ ((running--))
76
+ fi
77
+ done
78
+
79
+ wait
80
+
81
+ # final full cleanup (ensure nothing left behind)
82
+ if [ "$DRY_RUN" = "true" ]; then
83
+ echo "Would remove: node_modules (final cleanup)"
84
+ else
85
+ rm -rf "\${cwd}/node_modules"
86
+ echo "Removed: node_modules (final cleanup)"
87
+ fi
88
+
89
+ if [ "$DRY_RUN" = "true" ]; then
90
+ echo "Done (dry-run). Run with --force to delete for real."
91
+ else
92
+ echo "Done cleaning node_modules."
93
+ fi
94
+ `.trim();
95
+ }
96
+ async function cleanUp2(rootDir, options = {}) {
97
+ const { dryRun = true } = options;
98
+ const nodeModulesDir = path2.join(rootDir, "node_modules");
99
+ const script = generateBashScript({ dryRun });
100
+ const tmpDir = os.tmpdir();
101
+ const name = `rm-node-modules-${Date.now()}-${Math.random().toString(36).slice(2)}.sh`;
102
+ const scriptPath = path2.join(tmpDir, name);
103
+ try {
104
+ fs2.writeFileSync(scriptPath, script, { encoding: "utf8" });
105
+ try {
106
+ fs2.chmodSync(scriptPath, 493);
107
+ } catch {
108
+ }
109
+ const result = child_process.spawnSync("bash", [scriptPath], {
110
+ cwd: rootDir,
111
+ env: process.env,
112
+ encoding: "utf8",
113
+ shell: false
114
+ });
115
+ if (result.stdout) process.stdout.write(result.stdout);
116
+ if (result.stderr) process.stderr.write(result.stderr);
117
+ if (result.error) {
118
+ try {
119
+ console.warn(
120
+ ansiColors2.yellow(`bash execution failed: ${result.error.message}. Falling back to Node removal.`)
121
+ );
122
+ console.log(`Cleaning ${ansiColors2.cyan(nodeModulesDir)}...`);
123
+ fs2.rmSync(nodeModulesDir, { recursive: true, force: true });
124
+ console.log(`Removed: ${ansiColors2.green("node_modules (final cleanup)")}`);
125
+ console.log("Done cleaning node_modules.");
126
+ return {
127
+ code: 0,
128
+ stdout: result.stdout || "",
129
+ stderr: (result.stderr || "") + `
130
+ ${result.error.stack || result.error.message}`
131
+ };
132
+ } catch (e) {
133
+ return { code: 1, stdout: result.stdout || "", stderr: (result.stderr || "") + `
134
+ ${e.stack || e.message}` };
135
+ }
136
+ }
137
+ return { code: result.status ?? 0, stdout: result.stdout ?? "", stderr: result.stderr ?? "" };
138
+ } finally {
139
+ try {
140
+ if (fs2.existsSync(scriptPath)) fs2.unlinkSync(scriptPath);
141
+ } catch {
142
+ }
143
+ }
144
+ }
145
+ module2.exports = { generateBashScript, cleanUp: cleanUp2 };
146
+ }
147
+ });
148
+
149
+ // src/rm-node-module-cli.cjs
150
+ init_cjs_shims();
151
+ var path = require("upath");
152
+ var fs = require("fs-extra");
153
+ var minimist = require("minimist");
154
+ var glob = require("glob");
155
+ var ansiColors = require("ansi-colors");
156
+ var { cleanUp } = require_rm_node_modules();
157
+ var argv = minimist(process.argv.slice(2), {
158
+ boolean: ["h", "help", "force"],
159
+ alias: {
160
+ h: "help"
161
+ }
162
+ });
163
+ if (argv.help) {
164
+ console.log(`
165
+ rm-node-modules
166
+
167
+ Usage:
168
+ rm-node-modules [options]
169
+
170
+ Examples:
171
+ node src/rm-node-module-cli.cjs
172
+ node src/rm-node-module-cli.cjs --force
173
+ npx binary-collections rm-node-modules
174
+ npx binary-collections rm-node-modules --force
175
+
176
+ Options:
177
+ -h, --help Show this help message
178
+ --force Actually delete node_modules (default is dry-run mode)
179
+
180
+ Description:
181
+ Removes node_modules subfolders by first-letter in parallel to speed up
182
+ deletions. By default runs in dry-run mode (shows what would be deleted).
183
+ Pass --force to actually perform deletion.
184
+ The script writes a temporary shell script and executes it; the
185
+ temporary script is removed after completion. On Windows, this requires a
186
+ Unix-compatible shell in PATH (e.g., Git Bash or WSL).
187
+ `);
188
+ process.exit(0);
189
+ }
190
+ async function main() {
191
+ if (!argv.workspace) {
192
+ await cleanUp(process.cwd(), { dryRun: !argv.force });
193
+ return;
194
+ }
195
+ const pkgJsonPath = path.resolve(process.cwd(), argv.workspace, "package.json");
196
+ if (!fs.existsSync(pkgJsonPath)) {
197
+ console.error(`Error: package.json not found in workspace directory: ${ansiColors.red(argv.workspace)}`);
198
+ process.exitCode = 1;
199
+ return;
200
+ }
201
+ const workspaces = (JSON.parse(fs.readFileSync(pkgJsonPath, "utf-8")).workspaces || []).flatMap((workspace) => {
202
+ return glob.sync(workspace, {
203
+ cwd: process.cwd(),
204
+ absolute: true,
205
+ ignore: ["**/node_modules/**", "**/dist/**", "**/build/**"]
206
+ });
207
+ });
208
+ for (const workspacePath of workspaces) {
209
+ if (fs.existsSync(path.join(workspacePath, "package.json"))) {
210
+ console.log(`Cleaning node_modules in workspace: ${ansiColors.cyan(workspacePath)}`);
211
+ await cleanUp(workspacePath, { dryRun: !argv.force });
212
+ } else {
213
+ console.warn(
214
+ `Warning: No package.json found in workspace path: ${ansiColors.yellow(workspacePath)}, skipping...`
215
+ );
216
+ }
217
+ }
218
+ }
219
+ main().catch((e) => {
220
+ console.error(ansiColors.red(e instanceof Error ? e.stack || e.message : String(e)));
221
+ process.exitCode = 1;
222
+ });
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,89 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import {
3
+ require_rm_node_modules
4
+ } from "./chunk-NVEG3LEZ.mjs";
5
+ import {
6
+ __commonJS,
7
+ __require,
8
+ init_esm_shims
9
+ } from "./chunk-QQ4A6DLD.mjs";
10
+
11
+ // src/rm-node-module-cli.cjs
12
+ var require_rm_node_module_cli = __commonJS({
13
+ "src/rm-node-module-cli.cjs"() {
14
+ init_esm_shims();
15
+ var path = __require("upath");
16
+ var fs = __require("fs-extra");
17
+ var minimist = __require("minimist");
18
+ var glob = __require("glob");
19
+ var ansiColors = __require("ansi-colors");
20
+ var { cleanUp } = require_rm_node_modules();
21
+ var argv = minimist(process.argv.slice(2), {
22
+ boolean: ["h", "help", "force"],
23
+ alias: {
24
+ h: "help"
25
+ }
26
+ });
27
+ if (argv.help) {
28
+ console.log(`
29
+ rm-node-modules
30
+
31
+ Usage:
32
+ rm-node-modules [options]
33
+
34
+ Examples:
35
+ node src/rm-node-module-cli.cjs
36
+ node src/rm-node-module-cli.cjs --force
37
+ npx binary-collections rm-node-modules
38
+ npx binary-collections rm-node-modules --force
39
+
40
+ Options:
41
+ -h, --help Show this help message
42
+ --force Actually delete node_modules (default is dry-run mode)
43
+
44
+ Description:
45
+ Removes node_modules subfolders by first-letter in parallel to speed up
46
+ deletions. By default runs in dry-run mode (shows what would be deleted).
47
+ Pass --force to actually perform deletion.
48
+ The script writes a temporary shell script and executes it; the
49
+ temporary script is removed after completion. On Windows, this requires a
50
+ Unix-compatible shell in PATH (e.g., Git Bash or WSL).
51
+ `);
52
+ process.exit(0);
53
+ }
54
+ async function main() {
55
+ if (!argv.workspace) {
56
+ await cleanUp(process.cwd(), { dryRun: !argv.force });
57
+ return;
58
+ }
59
+ const pkgJsonPath = path.resolve(process.cwd(), argv.workspace, "package.json");
60
+ if (!fs.existsSync(pkgJsonPath)) {
61
+ console.error(`Error: package.json not found in workspace directory: ${ansiColors.red(argv.workspace)}`);
62
+ process.exitCode = 1;
63
+ return;
64
+ }
65
+ const workspaces = (JSON.parse(fs.readFileSync(pkgJsonPath, "utf-8")).workspaces || []).flatMap((workspace) => {
66
+ return glob.sync(workspace, {
67
+ cwd: process.cwd(),
68
+ absolute: true,
69
+ ignore: ["**/node_modules/**", "**/dist/**", "**/build/**"]
70
+ });
71
+ });
72
+ for (const workspacePath of workspaces) {
73
+ if (fs.existsSync(path.join(workspacePath, "package.json"))) {
74
+ console.log(`Cleaning node_modules in workspace: ${ansiColors.cyan(workspacePath)}`);
75
+ await cleanUp(workspacePath, { dryRun: !argv.force });
76
+ } else {
77
+ console.warn(
78
+ `Warning: No package.json found in workspace path: ${ansiColors.yellow(workspacePath)}, skipping...`
79
+ );
80
+ }
81
+ }
82
+ }
83
+ main().catch((e) => {
84
+ console.error(ansiColors.red(e instanceof Error ? e.stack || e.message : String(e)));
85
+ process.exitCode = 1;
86
+ });
87
+ }
88
+ });
89
+ export default require_rm_node_module_cli();
@@ -0,0 +1,127 @@
1
+ // src/rm-node-modules.cjs
2
+ var fs = require("fs-extra");
3
+ var path = require("upath");
4
+ var ansiColors = require("ansi-colors");
5
+ var child_process = require("child_process");
6
+ var os = require("os");
7
+ function generateBashScript(options = {}) {
8
+ const { dryRun = true } = options;
9
+ return `
10
+ #!/bin/bash
11
+
12
+ set -u
13
+
14
+ cwd="$(pwd)"
15
+ max_jobs=4
16
+ DRY_RUN=${dryRun ? "true" : "false"}
17
+
18
+ cleanup_letter() {
19
+ local letter="$1"
20
+
21
+ if [ "$DRY_RUN" = "true" ]; then
22
+ echo "Would remove: node_modules/\${letter}*"
23
+ echo "Would remove: node_modules/@types/\${letter}*"
24
+ echo "Would remove: node_modules/@\${letter}*"
25
+ else
26
+ rm -rf "\${cwd}/node_modules/\${letter}"*
27
+ echo "Removed: node_modules/\${letter}*"
28
+
29
+ rm -rf "\${cwd}/node_modules/@types/\${letter}"*
30
+ echo "Removed: node_modules/@types/\${letter}*"
31
+
32
+ rm -rf "\${cwd}/node_modules/@\${letter}"*
33
+ echo "Removed: node_modules/@\${letter}*"
34
+ fi
35
+ }
36
+
37
+ export -f cleanup_letter
38
+ export cwd
39
+ export DRY_RUN
40
+
41
+ if [ "$DRY_RUN" = "true" ]; then
42
+ echo "Dry-run mode (pass --force to actually delete)"
43
+ fi
44
+
45
+ echo "Cleaning \${cwd}/node_modules..."
46
+
47
+ running=0
48
+
49
+ for letter in {a..z}; do
50
+ cleanup_letter "$letter" &
51
+
52
+ ((running++))
53
+
54
+ # limit concurrent jobs
55
+ if (( running >= max_jobs )); then
56
+ wait -n
57
+ ((running--))
58
+ fi
59
+ done
60
+
61
+ wait
62
+
63
+ # final full cleanup (ensure nothing left behind)
64
+ if [ "$DRY_RUN" = "true" ]; then
65
+ echo "Would remove: node_modules (final cleanup)"
66
+ else
67
+ rm -rf "\${cwd}/node_modules"
68
+ echo "Removed: node_modules (final cleanup)"
69
+ fi
70
+
71
+ if [ "$DRY_RUN" = "true" ]; then
72
+ echo "Done (dry-run). Run with --force to delete for real."
73
+ else
74
+ echo "Done cleaning node_modules."
75
+ fi
76
+ `.trim();
77
+ }
78
+ async function cleanUp(rootDir, options = {}) {
79
+ const { dryRun = true } = options;
80
+ const nodeModulesDir = path.join(rootDir, "node_modules");
81
+ const script = generateBashScript({ dryRun });
82
+ const tmpDir = os.tmpdir();
83
+ const name = `rm-node-modules-${Date.now()}-${Math.random().toString(36).slice(2)}.sh`;
84
+ const scriptPath = path.join(tmpDir, name);
85
+ try {
86
+ fs.writeFileSync(scriptPath, script, { encoding: "utf8" });
87
+ try {
88
+ fs.chmodSync(scriptPath, 493);
89
+ } catch {
90
+ }
91
+ const result = child_process.spawnSync("bash", [scriptPath], {
92
+ cwd: rootDir,
93
+ env: process.env,
94
+ encoding: "utf8",
95
+ shell: false
96
+ });
97
+ if (result.stdout) process.stdout.write(result.stdout);
98
+ if (result.stderr) process.stderr.write(result.stderr);
99
+ if (result.error) {
100
+ try {
101
+ console.warn(
102
+ ansiColors.yellow(`bash execution failed: ${result.error.message}. Falling back to Node removal.`)
103
+ );
104
+ console.log(`Cleaning ${ansiColors.cyan(nodeModulesDir)}...`);
105
+ fs.rmSync(nodeModulesDir, { recursive: true, force: true });
106
+ console.log(`Removed: ${ansiColors.green("node_modules (final cleanup)")}`);
107
+ console.log("Done cleaning node_modules.");
108
+ return {
109
+ code: 0,
110
+ stdout: result.stdout || "",
111
+ stderr: (result.stderr || "") + `
112
+ ${result.error.stack || result.error.message}`
113
+ };
114
+ } catch (e) {
115
+ return { code: 1, stdout: result.stdout || "", stderr: (result.stderr || "") + `
116
+ ${e.stack || e.message}` };
117
+ }
118
+ }
119
+ return { code: result.status ?? 0, stdout: result.stdout ?? "", stderr: result.stderr ?? "" };
120
+ } finally {
121
+ try {
122
+ if (fs.existsSync(scriptPath)) fs.unlinkSync(scriptPath);
123
+ } catch {
124
+ }
125
+ }
126
+ }
127
+ module.exports = { generateBashScript, cleanUp };
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Generate bash script for node_modules cleanup
3
+ * @param {Object} options
4
+ * @param {boolean} options.dryRun - If true, only print what would be deleted
5
+ * @returns {string} - The bash script
6
+ */
7
+ export function generateBashScript(options?: {
8
+ dryRun: boolean;
9
+ }): string;
10
+ /**
11
+ * Create and run a temporary bash script to remove `node_modules` contents.
12
+ *
13
+ * The script is written into `rootDir` and executed via `runBash`. A list of
14
+ * created temporary scripts is stored in a cache file under the OS temp
15
+ * directory so they can be removed after execution. When running with
16
+ * `spawnOptions.stdio === 'inherit'`, the child process uses the parent's
17
+ * stdio and the returned `stdout`/`stderr` may be empty; prefer `'pipe'` in
18
+ * tests when you need to assert against output.
19
+ *
20
+ * @async
21
+ * @param {string} rootDir - Directory where the cleanup script will be created and executed.
22
+ * @param {Object} [options]
23
+ * @param {boolean} [options.dryRun=true] - If true, the generated script will only print what would be deleted.
24
+ * @param {import('child_process').SpawnOptions} [options.spawnOptions] - Options forwarded to the underlying `spawn` call (via `runBash`).
25
+ * @returns {Promise<{code: number, stdout: string, stderr: string}>} Resolves with the result object returned by `runBash`.
26
+ * @throws {Error|Object} Throws for internal failures or rejects with the `runBash` result when the process exits non-zero.
27
+ */
28
+ export function cleanUp(rootDir: string, options?: {
29
+ dryRun?: boolean;
30
+ spawnOptions?: import("child_process").SpawnOptions;
31
+ }): Promise<{
32
+ code: number;
33
+ stdout: string;
34
+ stderr: string;
35
+ }>;
@@ -1,6 +1,6 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
2
  import {
3
- require_binary_collections_config
4
- } from "./chunk-66PAU5PS.mjs";
3
+ require_rm_node_modules
4
+ } from "./chunk-NVEG3LEZ.mjs";
5
5
  import "./chunk-QQ4A6DLD.mjs";
6
- export default require_binary_collections_config();
6
+ export default require_rm_node_modules();
package/lib/rmpath.cjs CHANGED
@@ -1,3 +1,4 @@
1
+ #!/usr/bin/env node
1
2
  var __create = Object.create;
2
3
  var __defProp = Object.defineProperty;
3
4
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
@@ -36,7 +37,7 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
36
37
  var getImportMetaUrl, importMetaUrl;
37
38
  var init_cjs_shims = __esm({
38
39
  "node_modules/tsup/assets/cjs_shims.js"() {
39
- getImportMetaUrl = () => typeof document === "undefined" ? new URL(`file:${__filename}`).href : document.currentScript && document.currentScript.src || new URL("main.js", document.baseURI).href;
40
+ getImportMetaUrl = () => typeof document === "undefined" ? new URL(`file:${__filename}`).href : document.currentScript && document.currentScript.tagName.toUpperCase() === "SCRIPT" ? document.currentScript.src : new URL("main.js", document.baseURI).href;
40
41
  importMetaUrl = /* @__PURE__ */ getImportMetaUrl();
41
42
  }
42
43
  });
@@ -96,31 +97,78 @@ var require_utils = __commonJS({
96
97
  }
97
98
  module2.exports.getArgs = getArgs2;
98
99
  function del(fullPath) {
99
- if (fs2.statSync(fullPath).isDirectory()) {
100
- const subdir = fs2.readdirSync(fullPath).map((dirPath) => path2.resolve(fullPath, dirPath));
101
- for (let i = 0; i < subdir.length; i++) {
102
- del(subdir[i]);
100
+ try {
101
+ if (!fs2.existsSync(fullPath)) return;
102
+ const stat = fs2.lstatSync(fullPath);
103
+ if (stat.isSymbolicLink()) {
104
+ try {
105
+ fs2.unlinkSync(fullPath);
106
+ console.log("deleted symlink", fullPath);
107
+ } catch (e) {
108
+ console.log("failed delete symlink", fullPath, e && e.message);
109
+ }
110
+ return;
111
+ }
112
+ if (stat.isDirectory()) {
113
+ const subdir = fs2.readdirSync(fullPath).map((dirPath) => path2.resolve(fullPath, dirPath));
114
+ for (let i = 0; i < subdir.length; i++) {
115
+ del(subdir[i]);
116
+ }
117
+ try {
118
+ fs2.rmdirSync(fullPath);
119
+ console.log("deleted", fullPath);
120
+ } catch (_e) {
121
+ try {
122
+ fs2.rmSync(fullPath, { recursive: true, force: true, retryDelay: 7e3 });
123
+ console.log("deleted", fullPath);
124
+ } catch (ee) {
125
+ console.log("failed delete", fullPath, ee && ee.message);
126
+ }
127
+ }
128
+ return;
103
129
  }
104
- } else {
105
130
  try {
106
- fs2.rmSync(fullPath, { recursive: true, force: true, retryDelay: 7e3 });
131
+ fs2.unlinkSync(fullPath);
107
132
  console.log("deleted", fullPath);
108
- } catch (_) {
109
- console.log("failed delete", fullPath);
133
+ } catch (_e) {
134
+ try {
135
+ fs2.rmSync(fullPath, { recursive: true, force: true, retryDelay: 7e3 });
136
+ console.log("deleted", fullPath);
137
+ } catch (ee) {
138
+ console.log("failed delete", fullPath, ee && ee.message);
139
+ }
110
140
  }
141
+ } catch (err) {
142
+ console.log("failed delete", fullPath, err && err.message);
111
143
  }
112
144
  }
113
145
  module2.exports.del = del;
114
146
  function delStream(globStream) {
115
147
  globStream.stream().on("data", (result) => {
116
148
  const fullPath = path2.resolve(process.cwd(), result);
117
- if (fs2.statSync(fullPath).isDirectory()) {
118
- const subdir = fs2.readdirSync(fullPath).map((dirPath) => path2.resolve(fullPath, dirPath));
119
- for (let i = 0; i < subdir.length; i++) {
120
- del(subdir[i]);
149
+ try {
150
+ if (fs2.existsSync(fullPath)) {
151
+ const stat = fs2.lstatSync(fullPath);
152
+ if (stat.isSymbolicLink()) {
153
+ try {
154
+ fs2.unlinkSync(fullPath);
155
+ console.log("deleted symlink", fullPath);
156
+ } catch (e) {
157
+ console.log("failed delete symlink", fullPath, e && e.message);
158
+ }
159
+ return;
160
+ }
161
+ if (stat.isDirectory()) {
162
+ const subdir = fs2.readdirSync(fullPath).map((dirPath) => path2.resolve(fullPath, dirPath));
163
+ for (let i = 0; i < subdir.length; i++) {
164
+ del(subdir[i]);
165
+ }
166
+ }
121
167
  }
168
+ del(fullPath);
169
+ } catch (err) {
170
+ console.log("failed processing", fullPath, err && err.message);
122
171
  }
123
- del(fullPath);
124
172
  });
125
173
  }
126
174
  module2.exports.delStream = delStream;
@@ -185,7 +233,7 @@ var __filename2 = (0, import_url.fileURLToPath)(importMetaUrl);
185
233
  var __dirname = import_upath.default.dirname(__filename2);
186
234
  var dotenvPath = import_upath.default.resolve(process.cwd(), ".env");
187
235
  if (import_fs_extra.default.existsSync(dotenvPath)) {
188
- import_dotenv.default.config({ path: dotenvPath });
236
+ import_dotenv.default.config({ path: dotenvPath, override: true, quiet: true });
189
237
  }
190
238
  var argv = (0, import_utils.getArgs)();
191
239
  var positional = argv._ || [];
package/lib/rmpath.mjs CHANGED
@@ -1,7 +1,7 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
2
  import {
3
3
  require_utils
4
- } from "./chunk-V3N3JEUF.mjs";
4
+ } from "./chunk-5RTXZVCW.mjs";
5
5
  import {
6
6
  __require,
7
7
  __toESM,
@@ -20,7 +20,7 @@ var __filename = fileURLToPath(import.meta.url);
20
20
  var __dirname = path.dirname(__filename);
21
21
  var dotenvPath = path.resolve(process.cwd(), ".env");
22
22
  if (fs.existsSync(dotenvPath)) {
23
- dotenv.config({ path: dotenvPath });
23
+ dotenv.config({ path: dotenvPath, override: true, quiet: true });
24
24
  }
25
25
  var argv = (0, import_utils.getArgs)();
26
26
  var positional = argv._ || [];