binary-collections 2.0.10 → 2.0.11

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 (165) hide show
  1. package/.puppeterrc.cjs +25 -0
  2. package/binaries/binary-executor.cjs +138 -3
  3. package/binaries/clean-nodemodule.cjs +138 -3
  4. package/binaries/clean-nodemodules.cjs +138 -3
  5. package/binaries/dev.cjs +138 -3
  6. package/binaries/empty.cjs +138 -3
  7. package/binaries/git-reduce-size.cjs +138 -3
  8. package/binaries/javakill.cjs +138 -3
  9. package/binaries/kill-night-crows.bat +7 -0
  10. package/binaries/kill-night-crows.ps1 +172 -0
  11. package/binaries/kill-process.cjs +138 -3
  12. package/binaries/nodekill.cjs +138 -3
  13. package/binaries/prod.cjs +138 -3
  14. package/binaries/py +111 -0
  15. package/binaries/py.cjs +178 -0
  16. package/binaries/py.cmd +49 -0
  17. package/binaries/rmfind.cjs +138 -3
  18. package/binaries/rmx.cjs +138 -3
  19. package/binaries/submodule-token.cjs +138 -3
  20. package/binaries/test-cjs +10 -0
  21. package/binaries/test-cjs.cjs +178 -0
  22. package/binaries/test-cjs.cmd +11 -0
  23. package/binaries/yarn-clean +32 -0
  24. package/binaries/yarn-clean.cjs +178 -0
  25. package/binaries/yarn-clean.cmd +30 -0
  26. package/binaries/yarn-clean.py +148 -0
  27. package/lib/binary-collections-config.cjs +1 -1
  28. package/lib/binary-collections-config.mjs +1 -1
  29. package/lib/binary-collections.cjs +167 -106
  30. package/lib/binary-collections.mjs +108 -94
  31. package/lib/changelog.cjs +61 -13
  32. package/lib/changelog.mjs +1 -1
  33. package/lib/{chunk-AI4CVPJ7.mjs → chunk-2CBJCW7E.mjs} +4 -4
  34. package/lib/chunk-34IQDTLZ.mjs +27 -0
  35. package/lib/chunk-3HFFECCI.mjs +27 -0
  36. package/lib/{chunk-SBNDSKG5.mjs → chunk-4UHL4WVN.mjs} +1 -1
  37. package/lib/chunk-7XTEJHOE.mjs +193 -0
  38. package/lib/chunk-AJDD5DZM.mjs +109 -0
  39. package/lib/chunk-BZWVHODJ.mjs +62 -0
  40. package/lib/{chunk-BEZKJ25G.mjs → chunk-FCDQGYBF.mjs} +5 -9
  41. package/lib/chunk-GEYA2USY.mjs +207 -0
  42. package/lib/chunk-ID2WBTE2.mjs +80 -0
  43. package/lib/chunk-JXFOHKDM.mjs +239 -0
  44. package/lib/{chunk-DI5MDPSN.mjs → chunk-N436BNBK.mjs} +192 -64
  45. package/lib/chunk-NCXAP7AA.mjs +31 -0
  46. package/lib/chunk-PDN26I7O.mjs +188 -0
  47. package/lib/{chunk-E6FDDAOO.mjs → chunk-RWLXRTYP.mjs} +1 -1
  48. package/lib/{chunk-BDCHCWHD.mjs → chunk-TOIVAQF7.mjs} +4 -4
  49. package/lib/chunk-V5SKYJUB.mjs +136 -0
  50. package/lib/{chunk-HMRMTYZM.mjs → chunk-WSRETQCA.mjs} +21 -2
  51. package/lib/chunk-XA3SNBPA.mjs +184 -0
  52. package/lib/chunk-YYLIQQKF.mjs +31 -0
  53. package/lib/{chunk-V3N3JEUF.mjs → chunk-Z6JLYU2J.mjs} +60 -13
  54. package/lib/{chunk-O6SWBEOQ.mjs → chunk-ZDMWBSYF.mjs} +2 -2
  55. package/lib/clean-github-actions-caches.cjs +63 -15
  56. package/lib/clean-github-actions-caches.mjs +3 -3
  57. package/lib/del-gradle.cjs +61 -13
  58. package/lib/del-gradle.js +1 -0
  59. package/lib/del-gradle.mjs +1 -1
  60. package/lib/del-node-modules.cjs +143 -148
  61. package/lib/del-node-modules.js +210 -14
  62. package/lib/del-node-modules.mjs +148 -17
  63. package/lib/del-ps.cjs +61 -13
  64. package/lib/del-ps.js +1 -0
  65. package/lib/del-ps.mjs +1 -1
  66. package/lib/del-yarn-caches.cjs +61 -13
  67. package/lib/del-yarn-caches.mjs +1 -1
  68. package/lib/find-node-modules-cli.js +1 -0
  69. package/lib/free-chatgpt.cjs +253 -47
  70. package/lib/free-chatgpt.mjs +2 -2
  71. package/lib/git/gitattributes.cjs +1 -0
  72. package/lib/git/gitattributes.d.cts +7 -2
  73. package/lib/git/gitattributes.mjs +1 -1
  74. package/lib/git/line-endings.cjs +2 -1
  75. package/lib/git/line-endings.mjs +2 -2
  76. package/lib/git/undo-commit-cli.cjs +110 -0
  77. package/lib/git/undo-commit-cli.d.ts +1 -0
  78. package/lib/git/undo-commit-cli.js +4 -0
  79. package/lib/git/undo-commit-cli.mjs +14 -0
  80. package/lib/git/undo-commit.cjs +81 -0
  81. package/lib/git/undo-commit.d.cts +1 -0
  82. package/lib/git/undo-commit.mjs +7 -0
  83. package/lib/git/undo-staged-cli.cjs +110 -0
  84. package/lib/git/undo-staged-cli.d.ts +1 -0
  85. package/lib/git/undo-staged-cli.js +4 -0
  86. package/lib/git/undo-staged-cli.mjs +14 -0
  87. package/lib/git/undo-staged.cjs +81 -0
  88. package/lib/git/undo-staged.d.cts +1 -0
  89. package/lib/git/undo-staged.mjs +7 -0
  90. package/lib/git/user-config.cjs +61 -14
  91. package/lib/git/user-config.mjs +2 -2
  92. package/lib/git-diff-cli.cjs +255 -49
  93. package/lib/git-diff-cli.d.ts +1 -0
  94. package/lib/git-diff-cli.js +1 -0
  95. package/lib/git-diff-cli.mjs +5 -4
  96. package/lib/git-diff.cjs +254 -49
  97. package/lib/git-diff.mjs +4 -4
  98. package/lib/git-fix.cjs +64 -16
  99. package/lib/git-fix.mjs +10 -10
  100. package/lib/git-purge.cjs +61 -13
  101. package/lib/git-purge.mjs +1 -1
  102. package/lib/kill-night-crows.cjs +87 -0
  103. package/lib/kill-night-crows.d.mts +1 -0
  104. package/lib/kill-night-crows.mjs +65 -0
  105. package/lib/npm-run-series.cjs +60 -13
  106. package/lib/npm-run-series.mjs +1 -1
  107. package/lib/package-resolutions-updater-cli.cjs +560 -0
  108. package/lib/package-resolutions-updater-cli.d.mts +1 -0
  109. package/lib/package-resolutions-updater-cli.mjs +124 -0
  110. package/lib/package-resolutions-updater.cjs +174 -154
  111. package/lib/package-resolutions-updater.d.mts +32 -1
  112. package/lib/package-resolutions-updater.mjs +16 -294
  113. package/lib/php-cs-fixer-staged.cjs +105 -0
  114. package/lib/php-cs-fixer-staged.d.cts +2 -0
  115. package/lib/php-cs-fixer-staged.mjs +117 -0
  116. package/lib/print-directory-tree.cjs +62 -14
  117. package/lib/print-directory-tree.mjs +2 -2
  118. package/lib/ps/connected-domain.d.ts +1 -1
  119. package/lib/ps/index.js +1 -0
  120. package/lib/remove-module.cjs +61 -13
  121. package/lib/remove-module.mjs +1 -1
  122. package/lib/rmpath.cjs +63 -15
  123. package/lib/rmpath.mjs +2 -2
  124. package/lib/submodule-install.cjs +62 -15
  125. package/lib/submodule-install.mjs +3 -3
  126. package/lib/submodule-remove-cli.cjs +5 -1
  127. package/lib/submodule-remove-cli.mjs +1 -1
  128. package/lib/submodule-remove.cjs +4 -1
  129. package/lib/submodule-remove.mjs +1 -1
  130. package/lib/utils/chatgpt.cjs +192 -34
  131. package/lib/utils/chatgpt.js +210 -43
  132. package/lib/utils/chatgpt.mjs +1 -1
  133. package/lib/utils/findEnvFiles.cjs +107 -0
  134. package/lib/utils/findEnvFiles.d.ts +8 -0
  135. package/lib/utils/findEnvFiles.js +121 -0
  136. package/lib/utils/findEnvFiles.mjs +8 -0
  137. package/lib/utils/findWorkspaceRoot.cjs +70 -0
  138. package/lib/utils/findWorkspaceRoot.d.ts +9 -0
  139. package/lib/utils/findWorkspaceRoot.js +57 -0
  140. package/lib/utils/findWorkspaceRoot.mjs +40 -0
  141. package/lib/utils/index.cjs +60 -13
  142. package/lib/utils/index.mjs +1 -1
  143. package/lib/utils/isGithubTokenValid.cjs +64 -0
  144. package/lib/utils/isGithubTokenValid.d.ts +7 -0
  145. package/lib/utils/isGithubTokenValid.js +48 -0
  146. package/lib/utils/isGithubTokenValid.mjs +36 -0
  147. package/lib/yarn-reinstall.cjs +61 -13
  148. package/lib/yarn-reinstall.mjs +1 -1
  149. package/package.json +107 -93
  150. package/readme.md +33 -34
  151. package/releases/readme.md +1 -1
  152. package/requirements.txt +1 -0
  153. package/lib/chunk-4EWQC6GZ.mjs +0 -382
  154. package/lib/chunk-4ZI7BQKQ.mjs +0 -381
  155. package/lib/chunk-5J2BEPY5.mjs +0 -83
  156. package/lib/chunk-AGZYRDC2.mjs +0 -323
  157. package/lib/chunk-HN52G2YL.mjs +0 -305
  158. package/lib/chunk-HO6GHCOB.mjs +0 -385
  159. package/lib/chunk-LEM5OMRP.mjs +0 -384
  160. package/lib/chunk-RCP7DHVY.mjs +0 -190
  161. package/lib/chunk-U6SO4QEV.mjs +0 -320
  162. package/lib/chunk-XD6BJK6Q.mjs +0 -351
  163. package/lib/chunk-YXSFGA2D.mjs +0 -383
  164. package/lib/git/gitattributes.d.ts +0 -33
  165. package/lib/git/gitattributes.js +0 -223
@@ -60,31 +60,78 @@ var require_utils = __commonJS({
60
60
  }
61
61
  module.exports.getArgs = getArgs;
62
62
  function del(fullPath) {
63
- if (fs.statSync(fullPath).isDirectory()) {
64
- const subdir = fs.readdirSync(fullPath).map((dirPath) => path.resolve(fullPath, dirPath));
65
- for (let i = 0; i < subdir.length; i++) {
66
- del(subdir[i]);
63
+ try {
64
+ if (!fs.existsSync(fullPath)) return;
65
+ const stat = fs.lstatSync(fullPath);
66
+ if (stat.isSymbolicLink()) {
67
+ try {
68
+ fs.unlinkSync(fullPath);
69
+ console.log("deleted symlink", fullPath);
70
+ } catch (e) {
71
+ console.log("failed delete symlink", fullPath, e && e.message);
72
+ }
73
+ return;
74
+ }
75
+ if (stat.isDirectory()) {
76
+ const subdir = fs.readdirSync(fullPath).map((dirPath) => path.resolve(fullPath, dirPath));
77
+ for (let i = 0; i < subdir.length; i++) {
78
+ del(subdir[i]);
79
+ }
80
+ try {
81
+ fs.rmdirSync(fullPath);
82
+ console.log("deleted", fullPath);
83
+ } catch (e) {
84
+ try {
85
+ fs.rmSync(fullPath, { recursive: true, force: true, retryDelay: 7e3 });
86
+ console.log("deleted", fullPath);
87
+ } catch (ee) {
88
+ console.log("failed delete", fullPath, ee && ee.message);
89
+ }
90
+ }
91
+ return;
67
92
  }
68
- } else {
69
93
  try {
70
- fs.rmSync(fullPath, { recursive: true, force: true, retryDelay: 7e3 });
94
+ fs.unlinkSync(fullPath);
71
95
  console.log("deleted", fullPath);
72
- } catch (_) {
73
- console.log("failed delete", fullPath);
96
+ } catch (e) {
97
+ try {
98
+ fs.rmSync(fullPath, { recursive: true, force: true, retryDelay: 7e3 });
99
+ console.log("deleted", fullPath);
100
+ } catch (ee) {
101
+ console.log("failed delete", fullPath, ee && ee.message);
102
+ }
74
103
  }
104
+ } catch (err) {
105
+ console.log("failed delete", fullPath, err && err.message);
75
106
  }
76
107
  }
77
108
  module.exports.del = del;
78
109
  function delStream(globStream) {
79
110
  globStream.stream().on("data", (result) => {
80
111
  const fullPath = path.resolve(process.cwd(), result);
81
- if (fs.statSync(fullPath).isDirectory()) {
82
- const subdir = fs.readdirSync(fullPath).map((dirPath) => path.resolve(fullPath, dirPath));
83
- for (let i = 0; i < subdir.length; i++) {
84
- del(subdir[i]);
112
+ try {
113
+ if (fs.existsSync(fullPath)) {
114
+ const stat = fs.lstatSync(fullPath);
115
+ if (stat.isSymbolicLink()) {
116
+ try {
117
+ fs.unlinkSync(fullPath);
118
+ console.log("deleted symlink", fullPath);
119
+ } catch (e) {
120
+ console.log("failed delete symlink", fullPath, e && e.message);
121
+ }
122
+ return;
123
+ }
124
+ if (stat.isDirectory()) {
125
+ const subdir = fs.readdirSync(fullPath).map((dirPath) => path.resolve(fullPath, dirPath));
126
+ for (let i = 0; i < subdir.length; i++) {
127
+ del(subdir[i]);
128
+ }
129
+ }
85
130
  }
131
+ del(fullPath);
132
+ } catch (err) {
133
+ console.log("failed processing", fullPath, err && err.message);
86
134
  }
87
- del(fullPath);
88
135
  });
89
136
  }
90
137
  module.exports.delStream = delStream;
@@ -1,7 +1,7 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
2
  import {
3
3
  require_gitattributes
4
- } from "./chunk-PDSXF5HY.mjs";
4
+ } from "./chunk-PDN26I7O.mjs";
5
5
  import {
6
6
  require_utils
7
7
  } from "./chunk-A3VUZEJK.mjs";
@@ -18,7 +18,7 @@ var require_line_endings = __commonJS({
18
18
  var path = __require("upath");
19
19
  var fs = __require("fs");
20
20
  var { runGitCommand } = require_utils();
21
- var { updateGitAttributes } = require_gitattributes().default;
21
+ var { updateGitAttributes } = require_gitattributes();
22
22
  function forceLfLineEndings() {
23
23
  console.log("\n=== Configuring LF Line Endings ===");
24
24
  runGitCommand(["config", "core.autocrlf", "false"], "Disable automatic CRLF conversion");
@@ -1,3 +1,4 @@
1
+ #!/usr/bin/env node
1
2
  var __getOwnPropNames = Object.getOwnPropertyNames;
2
3
  var __esm = (fn, res) => function __init() {
3
4
  return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
@@ -67,31 +68,78 @@ var require_utils = __commonJS({
67
68
  }
68
69
  module2.exports.getArgs = getArgs;
69
70
  function del(fullPath) {
70
- if (fs2.statSync(fullPath).isDirectory()) {
71
- const subdir = fs2.readdirSync(fullPath).map((dirPath) => path2.resolve(fullPath, dirPath));
72
- for (let i = 0; i < subdir.length; i++) {
73
- del(subdir[i]);
71
+ try {
72
+ if (!fs2.existsSync(fullPath)) return;
73
+ const stat = fs2.lstatSync(fullPath);
74
+ if (stat.isSymbolicLink()) {
75
+ try {
76
+ fs2.unlinkSync(fullPath);
77
+ console.log("deleted symlink", fullPath);
78
+ } catch (e) {
79
+ console.log("failed delete symlink", fullPath, e && e.message);
80
+ }
81
+ return;
82
+ }
83
+ if (stat.isDirectory()) {
84
+ const subdir = fs2.readdirSync(fullPath).map((dirPath) => path2.resolve(fullPath, dirPath));
85
+ for (let i = 0; i < subdir.length; i++) {
86
+ del(subdir[i]);
87
+ }
88
+ try {
89
+ fs2.rmdirSync(fullPath);
90
+ console.log("deleted", fullPath);
91
+ } catch (e) {
92
+ try {
93
+ fs2.rmSync(fullPath, { recursive: true, force: true, retryDelay: 7e3 });
94
+ console.log("deleted", fullPath);
95
+ } catch (ee) {
96
+ console.log("failed delete", fullPath, ee && ee.message);
97
+ }
98
+ }
99
+ return;
74
100
  }
75
- } else {
76
101
  try {
77
- fs2.rmSync(fullPath, { recursive: true, force: true, retryDelay: 7e3 });
102
+ fs2.unlinkSync(fullPath);
78
103
  console.log("deleted", fullPath);
79
- } catch (_) {
80
- console.log("failed delete", fullPath);
104
+ } catch (e) {
105
+ try {
106
+ fs2.rmSync(fullPath, { recursive: true, force: true, retryDelay: 7e3 });
107
+ console.log("deleted", fullPath);
108
+ } catch (ee) {
109
+ console.log("failed delete", fullPath, ee && ee.message);
110
+ }
81
111
  }
112
+ } catch (err) {
113
+ console.log("failed delete", fullPath, err && err.message);
82
114
  }
83
115
  }
84
116
  module2.exports.del = del;
85
117
  function delStream(globStream) {
86
118
  globStream.stream().on("data", (result) => {
87
119
  const fullPath = path2.resolve(process.cwd(), result);
88
- if (fs2.statSync(fullPath).isDirectory()) {
89
- const subdir = fs2.readdirSync(fullPath).map((dirPath) => path2.resolve(fullPath, dirPath));
90
- for (let i = 0; i < subdir.length; i++) {
91
- del(subdir[i]);
120
+ try {
121
+ if (fs2.existsSync(fullPath)) {
122
+ const stat = fs2.lstatSync(fullPath);
123
+ if (stat.isSymbolicLink()) {
124
+ try {
125
+ fs2.unlinkSync(fullPath);
126
+ console.log("deleted symlink", fullPath);
127
+ } catch (e) {
128
+ console.log("failed delete symlink", fullPath, e && e.message);
129
+ }
130
+ return;
131
+ }
132
+ if (stat.isDirectory()) {
133
+ const subdir = fs2.readdirSync(fullPath).map((dirPath) => path2.resolve(fullPath, dirPath));
134
+ for (let i = 0; i < subdir.length; i++) {
135
+ del(subdir[i]);
136
+ }
137
+ }
92
138
  }
139
+ del(fullPath);
140
+ } catch (err) {
141
+ console.log("failed processing", fullPath, err && err.message);
93
142
  }
94
- del(fullPath);
95
143
  });
96
144
  }
97
145
  module2.exports.delStream = delStream;
@@ -146,11 +194,11 @@ var fs = require("fs");
146
194
  var projectDir = process.cwd();
147
195
  var envPath = path.join(projectDir, ".env");
148
196
  if (fs.existsSync(envPath)) {
149
- require("dotenv").config({ path: envPath });
197
+ require("dotenv").config({ path: envPath, quiet: true });
150
198
  } else {
151
199
  console.warn(`.env file not found at ${envPath}`);
152
200
  }
153
- require("dotenv").config({ path: path.join(process.cwd(), ".env") });
201
+ require("dotenv").config({ path: path.join(process.cwd(), ".env"), quiet: true });
154
202
  var ACCESS_TOKEN = process.env.GITHUB_TOKEN || process.env.ACCESS_TOKEN;
155
203
  if (!ACCESS_TOKEN) {
156
204
  throw new Error(
@@ -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-Z6JLYU2J.mjs";
5
5
  import {
6
6
  __commonJS,
7
7
  __require,
@@ -19,11 +19,11 @@ var require_clean_github_actions_caches = __commonJS({
19
19
  var projectDir = process.cwd();
20
20
  var envPath = path.join(projectDir, ".env");
21
21
  if (fs.existsSync(envPath)) {
22
- __require("dotenv").config({ path: envPath });
22
+ __require("dotenv").config({ path: envPath, quiet: true });
23
23
  } else {
24
24
  console.warn(`.env file not found at ${envPath}`);
25
25
  }
26
- __require("dotenv").config({ path: path.join(process.cwd(), ".env") });
26
+ __require("dotenv").config({ path: path.join(process.cwd(), ".env"), quiet: true });
27
27
  var ACCESS_TOKEN = process.env.GITHUB_TOKEN || process.env.ACCESS_TOKEN;
28
28
  if (!ACCESS_TOKEN) {
29
29
  throw new Error(
@@ -1,3 +1,4 @@
1
+ #!/usr/bin/env node
1
2
  var __getOwnPropNames = Object.getOwnPropertyNames;
2
3
  var __esm = (fn, res) => function __init() {
3
4
  return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
@@ -67,31 +68,78 @@ var require_utils = __commonJS({
67
68
  }
68
69
  module2.exports.getArgs = getArgs;
69
70
  function del2(fullPath) {
70
- if (fs.statSync(fullPath).isDirectory()) {
71
- const subdir = fs.readdirSync(fullPath).map((dirPath) => path2.resolve(fullPath, dirPath));
72
- for (let i = 0; i < subdir.length; i++) {
73
- del2(subdir[i]);
71
+ try {
72
+ if (!fs.existsSync(fullPath)) return;
73
+ const stat = fs.lstatSync(fullPath);
74
+ if (stat.isSymbolicLink()) {
75
+ try {
76
+ fs.unlinkSync(fullPath);
77
+ console.log("deleted symlink", fullPath);
78
+ } catch (e) {
79
+ console.log("failed delete symlink", fullPath, e && e.message);
80
+ }
81
+ return;
82
+ }
83
+ if (stat.isDirectory()) {
84
+ const subdir = fs.readdirSync(fullPath).map((dirPath) => path2.resolve(fullPath, dirPath));
85
+ for (let i = 0; i < subdir.length; i++) {
86
+ del2(subdir[i]);
87
+ }
88
+ try {
89
+ fs.rmdirSync(fullPath);
90
+ console.log("deleted", fullPath);
91
+ } catch (e) {
92
+ try {
93
+ fs.rmSync(fullPath, { recursive: true, force: true, retryDelay: 7e3 });
94
+ console.log("deleted", fullPath);
95
+ } catch (ee) {
96
+ console.log("failed delete", fullPath, ee && ee.message);
97
+ }
98
+ }
99
+ return;
74
100
  }
75
- } else {
76
101
  try {
77
- fs.rmSync(fullPath, { recursive: true, force: true, retryDelay: 7e3 });
102
+ fs.unlinkSync(fullPath);
78
103
  console.log("deleted", fullPath);
79
- } catch (_) {
80
- console.log("failed delete", fullPath);
104
+ } catch (e) {
105
+ try {
106
+ fs.rmSync(fullPath, { recursive: true, force: true, retryDelay: 7e3 });
107
+ console.log("deleted", fullPath);
108
+ } catch (ee) {
109
+ console.log("failed delete", fullPath, ee && ee.message);
110
+ }
81
111
  }
112
+ } catch (err) {
113
+ console.log("failed delete", fullPath, err && err.message);
82
114
  }
83
115
  }
84
116
  module2.exports.del = del2;
85
117
  function delStream(globStream2) {
86
118
  globStream2.stream().on("data", (result) => {
87
119
  const fullPath = path2.resolve(process.cwd(), result);
88
- if (fs.statSync(fullPath).isDirectory()) {
89
- const subdir = fs.readdirSync(fullPath).map((dirPath) => path2.resolve(fullPath, dirPath));
90
- for (let i = 0; i < subdir.length; i++) {
91
- del2(subdir[i]);
120
+ try {
121
+ if (fs.existsSync(fullPath)) {
122
+ const stat = fs.lstatSync(fullPath);
123
+ if (stat.isSymbolicLink()) {
124
+ try {
125
+ fs.unlinkSync(fullPath);
126
+ console.log("deleted symlink", fullPath);
127
+ } catch (e) {
128
+ console.log("failed delete symlink", fullPath, e && e.message);
129
+ }
130
+ return;
131
+ }
132
+ if (stat.isDirectory()) {
133
+ const subdir = fs.readdirSync(fullPath).map((dirPath) => path2.resolve(fullPath, dirPath));
134
+ for (let i = 0; i < subdir.length; i++) {
135
+ del2(subdir[i]);
136
+ }
137
+ }
92
138
  }
139
+ del2(fullPath);
140
+ } catch (err) {
141
+ console.log("failed processing", fullPath, err && err.message);
93
142
  }
94
- del2(fullPath);
95
143
  });
96
144
  }
97
145
  module2.exports.delStream = delStream;
package/lib/del-gradle.js CHANGED
@@ -1,3 +1,4 @@
1
+ "use strict";
1
2
  const glob = require("glob");
2
3
  const path = require("upath");
3
4
  const { del } = require("./utils/index.cjs");
@@ -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-Z6JLYU2J.mjs";
5
5
  import {
6
6
  __require,
7
7
  init_esm_shims
@@ -1,156 +1,151 @@
1
- var __getOwnPropNames = Object.getOwnPropertyNames;
2
- var __esm = (fn, res) => function __init() {
3
- return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
4
- };
5
- var __commonJS = (cb, mod) => function __require() {
6
- return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
7
- };
8
-
9
- // node_modules/tsup/assets/cjs_shims.js
10
- var init_cjs_shims = __esm({
11
- "node_modules/tsup/assets/cjs_shims.js"() {
12
- }
1
+ #!/usr/bin/env node
2
+ // src/del-node-modules.js
3
+ var fs = require("fs");
4
+ var fsp = fs.promises;
5
+ var path = require("path");
6
+ var os = require("os");
7
+ var minimist = require("minimist");
8
+ var argv = minimist(process.argv.slice(2), {
9
+ boolean: ["force", "help"],
10
+ alias: { h: "help", f: "force", c: "concurrent" },
11
+ default: { force: false, concurrent: 2 }
13
12
  });
14
-
15
- // src/utils/index.cjs
16
- var require_utils = __commonJS({
17
- "src/utils/index.cjs"(exports2, module2) {
18
- init_cjs_shims();
19
- var fs = require("fs");
20
- var path = require("upath");
21
- var argv = require("minimist")(process.argv.slice(2));
22
- var { exec } = require("child_process");
23
- var { URL: URL2 } = require("url");
24
- var { promisify } = require("util");
25
- var execAsync = promisify(exec);
26
- async function parseGitRemotes() {
27
- try {
28
- const { stdout } = await execAsync("git remote -v");
29
- const lines = stdout.split("\n");
30
- const remotes = {};
31
- lines.forEach((line) => {
32
- const [name, url] = line.split(" ");
33
- if (name && url) {
34
- const [repoUrl] = url.split(" ");
35
- try {
36
- const parsedUrl = new URL2(repoUrl);
37
- const pathParts = parsedUrl.pathname.split("/").filter(Boolean);
38
- if (parsedUrl.hostname === "github.com" && pathParts.length === 2) {
39
- let repoPath = pathParts.join("/");
40
- if (repoPath.endsWith(".git")) {
41
- repoPath = repoPath.slice(0, -4);
42
- }
43
- remotes[name] = repoPath;
44
- }
45
- } catch (e) {
46
- console.error("URL Parsing Error:", e.message);
47
- }
48
- }
49
- });
50
- return remotes;
51
- } catch (error) {
52
- console.error("Error:", error.message);
53
- return {};
54
- }
55
- }
56
- module2.exports.parseGitRemotes = parseGitRemotes;
57
- function joinPathPreserveDriveLetter(...segments) {
58
- let fullPath = require("path").join(...segments);
59
- if (/^[a-z]:\\/.test(fullPath)) {
60
- fullPath = fullPath.charAt(0).toUpperCase() + fullPath.slice(1);
13
+ if (argv.help) {
14
+ console.log(`Usage: clean-node [--force] [-c|--concurrent N]
15
+ By default runs in dry-run mode. Use --force to actually delete.
16
+ Use -c/--concurrent to set concurrent removals (default 2).`);
17
+ process.exit(0);
18
+ }
19
+ var DRY_RUN = !argv.force;
20
+ var defaultConcurrency = Math.max(2, os.cpus().length || 2);
21
+ var CONCURRENCY = Math.max(1, Number(argv.concurrent || argv.c || defaultConcurrency));
22
+ var customChars = "@.";
23
+ var vowels = "aeiouAEIOU";
24
+ var alnum = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
25
+ var combined = alnum + vowels + customChars;
26
+ var ROOT = process.cwd();
27
+ async function isSymlinkAsync(p) {
28
+ try {
29
+ return (await fsp.lstat(p)).isSymbolicLink();
30
+ } catch {
31
+ return false;
32
+ }
33
+ }
34
+ async function removeAsync(target) {
35
+ if (await isSymlinkAsync(target)) {
36
+ console.log("Skipping symlink", target);
37
+ return;
38
+ }
39
+ if (DRY_RUN) {
40
+ console.log("Would remove", target);
41
+ return;
42
+ }
43
+ try {
44
+ await fsp.rm(target, { recursive: true, force: true });
45
+ console.log("Deleting", target);
46
+ } catch (e) {
47
+ console.error("Failed:", target, e.message);
48
+ }
49
+ }
50
+ function runWithConcurrency(tasks, concurrency) {
51
+ return new Promise((resolve, reject) => {
52
+ let i = 0;
53
+ let active = 0;
54
+ let done = 0;
55
+ const total = tasks.length;
56
+ if (total === 0) return resolve();
57
+ function next() {
58
+ if (done === total) return resolve();
59
+ while (active < concurrency && i < total) {
60
+ const idx = i++;
61
+ active++;
62
+ Promise.resolve().then(() => tasks[idx]()).then(() => {
63
+ active--;
64
+ done++;
65
+ next();
66
+ }).catch((err) => reject(err));
61
67
  }
62
- return fullPath;
63
- }
64
- module2.exports.joinPathPreserveDriveLetter = joinPathPreserveDriveLetter;
65
- function getArgs() {
66
- return argv;
67
68
  }
68
- module2.exports.getArgs = getArgs;
69
- function del(fullPath) {
70
- if (fs.statSync(fullPath).isDirectory()) {
71
- const subdir = fs.readdirSync(fullPath).map((dirPath) => path.resolve(fullPath, dirPath));
72
- for (let i = 0; i < subdir.length; i++) {
73
- del(subdir[i]);
74
- }
75
- } else {
76
- try {
77
- fs.rmSync(fullPath, { recursive: true, force: true, retryDelay: 7e3 });
78
- console.log("deleted", fullPath);
79
- } catch (_) {
80
- console.log("failed delete", fullPath);
81
- }
69
+ next();
70
+ });
71
+ }
72
+ function walk(dir, callback, { skipNodeModulesChildren = false } = {}) {
73
+ let entries;
74
+ try {
75
+ entries = fs.readdirSync(dir, { withFileTypes: true });
76
+ } catch {
77
+ return;
78
+ }
79
+ for (const entry of entries) {
80
+ const fullPath = path.join(dir, entry.name);
81
+ if (entry.isSymbolicLink()) continue;
82
+ if (skipNodeModulesChildren && dir.includes("node_modules")) continue;
83
+ callback(fullPath, entry);
84
+ if (entry.isDirectory()) {
85
+ if (skipNodeModulesChildren && entry.name === "node_modules") {
86
+ continue;
82
87
  }
88
+ walk(fullPath, callback, { skipNodeModulesChildren });
83
89
  }
84
- module2.exports.del = del;
85
- function delStream2(globStream) {
86
- globStream.stream().on("data", (result) => {
87
- const fullPath = path.resolve(process.cwd(), result);
88
- if (fs.statSync(fullPath).isDirectory()) {
89
- const subdir = fs.readdirSync(fullPath).map((dirPath) => path.resolve(fullPath, dirPath));
90
- for (let i = 0; i < subdir.length; i++) {
91
- del(subdir[i]);
92
- }
93
- }
94
- del(fullPath);
95
- });
90
+ }
91
+ }
92
+ async function processNodeModules(dir) {
93
+ console.log("Found:", dir);
94
+ let items;
95
+ try {
96
+ items = fs.readdirSync(dir, { withFileTypes: true });
97
+ } catch {
98
+ return;
99
+ }
100
+ const targets = items.filter((entry) => entry.name.length && combined.includes(entry.name[0]));
101
+ const tasks = targets.map((entry) => async () => {
102
+ const name = entry.name;
103
+ const target = path.join(dir, name);
104
+ if (entry.isSymbolicLink && entry.isSymbolicLink()) {
105
+ console.log("Skipping symlink", target);
106
+ return;
96
107
  }
97
- module2.exports.delStream = delStream2;
98
- function getFileTreeString(hashArray) {
99
- const tree = {};
100
- const hashMap = {};
101
- for (const entry of hashArray) {
102
- const [filePath, hash] = entry.split(" ");
103
- hashMap[filePath] = hash;
104
- const parts = filePath.split("/");
105
- let current = tree;
106
- for (let i = 0; i < parts.length; i++) {
107
- const part = parts[i];
108
- if (i === parts.length - 1) {
109
- current[part] = null;
110
- } else {
111
- current[part] = current[part] || {};
112
- current = current[part];
113
- }
114
- }
115
- }
116
- function printNode(node, prefix = "", parentPath = "") {
117
- const keys = Object.keys(node).sort();
118
- let lines = [];
119
- keys.forEach((key, idx) => {
120
- const isLast = idx === keys.length - 1;
121
- const branch = isLast ? "\u2514\u2500\u2500 " : "\u251C\u2500\u2500 ";
122
- const currentPath = parentPath ? parentPath + "/" + key : key;
123
- if (node[key] === null) {
124
- lines.push(prefix + branch + key + " [" + (hashMap[currentPath] || "") + "]");
125
- } else {
126
- lines.push(prefix + branch + key + "/");
127
- lines = lines.concat(printNode(node[key], prefix + (isLast ? " " : "\u2502 "), currentPath));
128
- }
129
- });
130
- return lines;
131
- }
132
- return printNode(tree, "", "").join("\n");
108
+ await removeAsync(target);
109
+ });
110
+ await runWithConcurrency(tasks, CONCURRENCY);
111
+ await removeAsync(dir);
112
+ }
113
+ async function main() {
114
+ const nodeModulesDirs = [];
115
+ walk(ROOT, (fullPath, entry) => {
116
+ if (entry.isDirectory() && entry.name === "node_modules") {
117
+ nodeModulesDirs.push(fullPath);
133
118
  }
134
- module2.exports.getFileTreeString = getFileTreeString;
135
- var delay = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
136
- module2.exports.delay = delay;
119
+ });
120
+ for (const dir of nodeModulesDirs) {
121
+ await processNodeModules(dir);
137
122
  }
138
- });
139
-
140
- // src/del-node-modules.js
141
- init_cjs_shims();
142
- var glob = require("glob");
143
- var { delStream } = require_utils();
144
- var globalIgnore = [
145
- // ignore .git .github folder
146
- "**/.git*",
147
- // ignore composer folder
148
- "**/vendor/**"
149
- ];
150
- console.log("cleaning node_modules in", process.cwd());
151
- var g3 = new glob.Glob("**/node_modules", {
152
- withFileTypes: false,
153
- cwd: process.cwd(),
154
- ignore: globalIgnore
155
- });
156
- delStream(g3);
123
+ const packageLocks = [];
124
+ const yarnLocks = [];
125
+ const yarnCaches = [];
126
+ walk(
127
+ ROOT,
128
+ (fullPath, entry) => {
129
+ const base = path.basename(fullPath);
130
+ if (base === "package-lock.json") packageLocks.push(fullPath);
131
+ if (base === "yarn.lock") yarnLocks.push(fullPath);
132
+ if (entry.isDirectory() && fullPath.endsWith(path.join(".yarn", "cache"))) yarnCaches.push(fullPath);
133
+ },
134
+ { skipNodeModulesChildren: true }
135
+ );
136
+ if (DRY_RUN) {
137
+ console.log("Would remove package-lock.json files:");
138
+ for (const p of packageLocks) console.log(p);
139
+ console.log("Would remove yarn.lock files:");
140
+ for (const p of yarnLocks) console.log(p);
141
+ console.log("Would remove .yarn/cache directories:");
142
+ for (const p of yarnCaches) console.log(p);
143
+ } else {
144
+ const allTasks = [];
145
+ allTasks.push(...packageLocks.map((p) => async () => removeAsync(p)));
146
+ allTasks.push(...yarnLocks.map((p) => async () => removeAsync(p)));
147
+ allTasks.push(...yarnCaches.map((p) => async () => removeAsync(p)));
148
+ await runWithConcurrency(allTasks, CONCURRENCY);
149
+ }
150
+ }
151
+ main();