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,382 @@
1
+ #!/usr/bin/env node
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __esm = (fn, res) => function __init() {
9
+ return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
10
+ };
11
+ var __commonJS = (cb, mod) => function __require() {
12
+ return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
13
+ };
14
+ var __copyProps = (to, from, except, desc) => {
15
+ if (from && typeof from === "object" || typeof from === "function") {
16
+ for (let key of __getOwnPropNames(from))
17
+ if (!__hasOwnProp.call(to, key) && key !== except)
18
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
19
+ }
20
+ return to;
21
+ };
22
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
23
+ // If the importer is in node compatibility mode or this is not an ESM
24
+ // file that has been converted to a CommonJS file using a Babel-
25
+ // compatible transform (i.e. "__esModule" has not been set), then set
26
+ // "default" to the CommonJS "module.exports" for node compatibility.
27
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
28
+ mod
29
+ ));
30
+
31
+ // node_modules/tsup/assets/cjs_shims.js
32
+ var init_cjs_shims = __esm({
33
+ "node_modules/tsup/assets/cjs_shims.js"() {
34
+ }
35
+ });
36
+
37
+ // src/utils/index.cjs
38
+ var require_utils = __commonJS({
39
+ "src/utils/index.cjs"(exports2, module2) {
40
+ init_cjs_shims();
41
+ var fs3 = require("fs");
42
+ var path3 = require("upath");
43
+ var minimistLib = require("minimist");
44
+ var argv2 = minimistLib(process.argv.slice(2));
45
+ var { exec } = require("child_process");
46
+ var { promisify } = require("util");
47
+ var execAsync = promisify(exec);
48
+ async function parseGitRemotes() {
49
+ try {
50
+ const { stdout } = await execAsync("git remote -v");
51
+ const lines = stdout.split("\n");
52
+ const remotes = {};
53
+ lines.forEach((line) => {
54
+ const [name, url] = line.split(" ");
55
+ if (name && url) {
56
+ const [repoUrl] = url.split(" ");
57
+ try {
58
+ const parsedUrl = new URL(repoUrl);
59
+ const pathParts = parsedUrl.pathname.split("/").filter(Boolean);
60
+ if (parsedUrl.hostname === "github.com" && pathParts.length === 2) {
61
+ let repoPath = pathParts.join("/");
62
+ if (repoPath.endsWith(".git")) {
63
+ repoPath = repoPath.slice(0, -4);
64
+ }
65
+ remotes[name] = repoPath;
66
+ }
67
+ } catch (e) {
68
+ console.error("URL Parsing Error:", e.message);
69
+ }
70
+ }
71
+ });
72
+ return remotes;
73
+ } catch (error) {
74
+ console.error("Error:", error.message);
75
+ return {};
76
+ }
77
+ }
78
+ module2.exports.parseGitRemotes = parseGitRemotes;
79
+ function getArgs2(opts) {
80
+ if (opts) {
81
+ return minimistLib(process.argv.slice(2), opts);
82
+ }
83
+ return argv2;
84
+ }
85
+ module2.exports.getArgs = getArgs2;
86
+ function del(fullPath) {
87
+ try {
88
+ if (!fs3.existsSync(fullPath)) return;
89
+ const stat = fs3.lstatSync(fullPath);
90
+ if (stat.isSymbolicLink()) {
91
+ try {
92
+ fs3.unlinkSync(fullPath);
93
+ console.log("deleted symlink", fullPath);
94
+ } catch (e) {
95
+ console.log("failed delete symlink", fullPath, e && e.message);
96
+ }
97
+ return;
98
+ }
99
+ if (stat.isDirectory()) {
100
+ const subdir = fs3.readdirSync(fullPath).map((dirPath) => path3.resolve(fullPath, dirPath));
101
+ for (let i = 0; i < subdir.length; i++) {
102
+ del(subdir[i]);
103
+ }
104
+ try {
105
+ fs3.rmdirSync(fullPath);
106
+ console.log("deleted", fullPath);
107
+ } catch (_e) {
108
+ try {
109
+ fs3.rmSync(fullPath, { recursive: true, force: true, retryDelay: 7e3 });
110
+ console.log("deleted", fullPath);
111
+ } catch (ee) {
112
+ console.log("failed delete", fullPath, ee && ee.message);
113
+ }
114
+ }
115
+ return;
116
+ }
117
+ try {
118
+ fs3.unlinkSync(fullPath);
119
+ console.log("deleted", fullPath);
120
+ } catch (_e) {
121
+ try {
122
+ fs3.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
+ } catch (err) {
129
+ console.log("failed delete", fullPath, err && err.message);
130
+ }
131
+ }
132
+ module2.exports.del = del;
133
+ function delStream(globStream) {
134
+ globStream.stream().on("data", (result) => {
135
+ const fullPath = path3.resolve(process.cwd(), result);
136
+ try {
137
+ if (fs3.existsSync(fullPath)) {
138
+ const stat = fs3.lstatSync(fullPath);
139
+ if (stat.isSymbolicLink()) {
140
+ try {
141
+ fs3.unlinkSync(fullPath);
142
+ console.log("deleted symlink", fullPath);
143
+ } catch (e) {
144
+ console.log("failed delete symlink", fullPath, e && e.message);
145
+ }
146
+ return;
147
+ }
148
+ if (stat.isDirectory()) {
149
+ const subdir = fs3.readdirSync(fullPath).map((dirPath) => path3.resolve(fullPath, dirPath));
150
+ for (let i = 0; i < subdir.length; i++) {
151
+ del(subdir[i]);
152
+ }
153
+ }
154
+ }
155
+ del(fullPath);
156
+ } catch (err) {
157
+ console.log("failed processing", fullPath, err && err.message);
158
+ }
159
+ });
160
+ }
161
+ module2.exports.delStream = delStream;
162
+ function getFileTreeString(hashArray) {
163
+ const tree = {};
164
+ const hashMap = {};
165
+ for (const entry of hashArray) {
166
+ const [filePath, hash] = entry.split(" ");
167
+ hashMap[filePath] = hash;
168
+ const parts = filePath.split("/");
169
+ let current = tree;
170
+ for (let i = 0; i < parts.length; i++) {
171
+ const part = parts[i];
172
+ if (i === parts.length - 1) {
173
+ current[part] = null;
174
+ } else {
175
+ current[part] = current[part] || {};
176
+ current = current[part];
177
+ }
178
+ }
179
+ }
180
+ function printNode(node, prefix = "", parentPath = "") {
181
+ const keys = Object.keys(node).sort();
182
+ let lines = [];
183
+ keys.forEach((key, idx) => {
184
+ const isLast = idx === keys.length - 1;
185
+ const branch = isLast ? "\u2514\u2500\u2500 " : "\u251C\u2500\u2500 ";
186
+ const currentPath = parentPath ? parentPath + "/" + key : key;
187
+ if (node[key] === null) {
188
+ lines.push(prefix + branch + key + " [" + (hashMap[currentPath] || "") + "]");
189
+ } else {
190
+ lines.push(prefix + branch + key + "/");
191
+ lines = lines.concat(printNode(node[key], prefix + (isLast ? " " : "\u2502 "), currentPath));
192
+ }
193
+ });
194
+ return lines;
195
+ }
196
+ return printNode(tree, "", "").join("\n");
197
+ }
198
+ module2.exports.getFileTreeString = getFileTreeString;
199
+ var delay = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
200
+ module2.exports.delay = delay;
201
+ }
202
+ });
203
+
204
+ // src/run-by-checksum-cli.js
205
+ init_cjs_shims();
206
+ var import_utils = __toESM(require_utils(), 1);
207
+
208
+ // src/run-by-checksum/run.js
209
+ init_cjs_shims();
210
+
211
+ // src/run-by-checksum/hash.js
212
+ init_cjs_shims();
213
+ var import_fs_extra = __toESM(require("fs-extra"), 1);
214
+ var glob = __toESM(require("glob"), 1);
215
+ var import_upath = __toESM(require("upath"), 1);
216
+ var import_upath2 = __toESM(require("upath"), 1);
217
+ var import_crypto = __toESM(require("crypto"), 1);
218
+ function getAllFiles({ patterns: patterns2, ignore: ignore2, cwd }) {
219
+ const files = /* @__PURE__ */ new Set();
220
+ const root = cwd || process.cwd();
221
+ for (const pattern of patterns2) {
222
+ const matched = glob.sync(pattern, {
223
+ cwd: root,
224
+ nodir: true,
225
+ ignore: ignore2
226
+ });
227
+ for (const f of matched) {
228
+ files.add(import_upath.default.normalize(import_upath2.default.resolve(root, f)));
229
+ }
230
+ }
231
+ return [...files].sort();
232
+ }
233
+ function hashFile(file) {
234
+ const content = import_fs_extra.default.readFileSync(file);
235
+ return import_crypto.default.createHash("sha256").update(content).digest("hex");
236
+ }
237
+ function buildChecksum(files) {
238
+ const hash = import_crypto.default.createHash("sha256");
239
+ for (const file of files) {
240
+ hash.update(file);
241
+ hash.update(hashFile(file));
242
+ }
243
+ return hash.digest("hex");
244
+ }
245
+
246
+ // src/run-by-checksum/cache.js
247
+ init_cjs_shims();
248
+ var import_fs_extra2 = __toESM(require("fs-extra"), 1);
249
+ var import_upath3 = __toESM(require("upath"), 1);
250
+ var import_crypto2 = __toESM(require("crypto"), 1);
251
+ function md5(str) {
252
+ return import_crypto2.default.createHash("md5").update(str).digest("hex");
253
+ }
254
+ function getCacheFile({ patterns: patterns2, ignore: ignore2, cwd }) {
255
+ const root = cwd || process.env.INIT_CWD || process.cwd();
256
+ const key = md5(
257
+ JSON.stringify({
258
+ patterns: [...patterns2].sort(),
259
+ ignore: [...ignore2].sort()
260
+ })
261
+ );
262
+ return import_upath3.default.join(root, "tmp", ".checksum", `${key}.json`);
263
+ }
264
+ function loadCache(file) {
265
+ try {
266
+ return import_fs_extra2.default.readJsonSync(file);
267
+ } catch {
268
+ return null;
269
+ }
270
+ }
271
+ function saveCache(file, data) {
272
+ import_fs_extra2.default.ensureDirSync(import_upath3.default.dirname(file));
273
+ import_fs_extra2.default.writeJsonSync(file, data, { spaces: 2 });
274
+ }
275
+
276
+ // src/run-by-checksum/run.js
277
+ var import_child_process = require("child_process");
278
+ async function runChecksum({
279
+ patterns: patterns2 = [],
280
+ ignore: ignore2 = [],
281
+ exec,
282
+ cwd = process.env.INIT_CWD || process.cwd(),
283
+ dryRun = false
284
+ }) {
285
+ if (!patterns2.length && !exec) {
286
+ console.log("No patterns or command provided, skipping checksum runner.");
287
+ process.exit(1);
288
+ }
289
+ if (!exec) {
290
+ console.log("No command provided, skipping checksum runner.");
291
+ process.exit(1);
292
+ }
293
+ if (!patterns2.length) {
294
+ console.log("No patterns provided, skipping checksum runner.");
295
+ process.exit(1);
296
+ }
297
+ const files = getAllFiles({ patterns: patterns2, ignore: ignore2, cwd });
298
+ const checksum = buildChecksum(files);
299
+ const cacheFile = getCacheFile({ patterns: patterns2, ignore: ignore2, cwd });
300
+ const cache = loadCache(cacheFile);
301
+ if ((cache == null ? void 0 : cache.checksum) === checksum) {
302
+ return {
303
+ changed: false,
304
+ cacheFile,
305
+ files
306
+ };
307
+ }
308
+ if (dryRun) {
309
+ return {
310
+ changed: true,
311
+ cacheFile,
312
+ files,
313
+ skipped: true
314
+ };
315
+ }
316
+ await runCommand(exec, cwd);
317
+ saveCache(cacheFile, {
318
+ checksum,
319
+ files,
320
+ patterns: patterns2,
321
+ ignore: ignore2,
322
+ updatedAt: (/* @__PURE__ */ new Date()).toISOString()
323
+ });
324
+ return {
325
+ changed: true,
326
+ cacheFile,
327
+ files
328
+ };
329
+ }
330
+ function runCommand(command, cwd) {
331
+ return new Promise((resolve, reject) => {
332
+ const child = (0, import_child_process.spawn)(command, {
333
+ shell: true,
334
+ stdio: "inherit",
335
+ cwd
336
+ });
337
+ child.on("exit", (code) => {
338
+ if (code === 0 || code === null) resolve();
339
+ else reject(new Error(`Command failed: ${code}`));
340
+ });
341
+ });
342
+ }
343
+
344
+ // src/run-by-checksum-cli.js
345
+ var argv = (0, import_utils.getArgs)({
346
+ string: ["pattern", "ignore", "exec", "cwd"],
347
+ alias: { p: "pattern", i: "ignore", e: "exec", c: "cwd", h: "help" },
348
+ default: {
349
+ pattern: [],
350
+ ignore: []
351
+ }
352
+ });
353
+ if (argv.help) {
354
+ console.log(`
355
+ Usage: run-by-checksum [options]
356
+
357
+ Run a command when the checksum of matched files changes.
358
+
359
+ Options:
360
+ -p, --pattern <glob> Glob pattern(s) to include (can be repeated)
361
+ -i, --ignore <glob> Glob pattern(s) to exclude (can be repeated)
362
+ -e, --exec <command> Command to execute when checksum changes
363
+ -c, --cwd <dir> Working directory for glob and spawn (default: process.env.INIT_CWD or cwd)
364
+ -h, --help Show this help message
365
+ `);
366
+ process.exit(0);
367
+ }
368
+ var patterns = Array.isArray(argv.pattern) ? argv.pattern : [argv.pattern];
369
+ var ignore = Array.isArray(argv.ignore) ? argv.ignore : [argv.ignore];
370
+ console.log("[run-by-checksum] patterns:", patterns.join(", "));
371
+ console.log("[run-by-checksum] ignore:", ignore.join(", ") || "(none)");
372
+ console.log("[run-by-checksum] cwd:", argv.cwd || process.env.INIT_CWD || process.cwd());
373
+ console.log("[run-by-checksum] exec:", argv.exec || "(none)");
374
+ runChecksum({
375
+ patterns,
376
+ ignore,
377
+ exec: argv.exec,
378
+ cwd: argv.cwd
379
+ }).catch((err) => {
380
+ console.error(err);
381
+ process.exit(1);
382
+ });
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};
@@ -0,0 +1,43 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ const index_cjs_1 = require("./utils/index.cjs");
5
+ const run_js_1 = require("./run-by-checksum/run.js");
6
+ const argv = (0, index_cjs_1.getArgs)({
7
+ string: ['pattern', 'ignore', 'exec', 'cwd'],
8
+ alias: { p: 'pattern', i: 'ignore', e: 'exec', c: 'cwd', h: 'help' },
9
+ default: {
10
+ pattern: [],
11
+ ignore: []
12
+ }
13
+ });
14
+ if (argv.help) {
15
+ console.log(`
16
+ Usage: run-by-checksum [options]
17
+
18
+ Run a command when the checksum of matched files changes.
19
+
20
+ Options:
21
+ -p, --pattern <glob> Glob pattern(s) to include (can be repeated)
22
+ -i, --ignore <glob> Glob pattern(s) to exclude (can be repeated)
23
+ -e, --exec <command> Command to execute when checksum changes
24
+ -c, --cwd <dir> Working directory for glob and spawn (default: process.env.INIT_CWD or cwd)
25
+ -h, --help Show this help message
26
+ `);
27
+ process.exit(0);
28
+ }
29
+ const patterns = Array.isArray(argv.pattern) ? argv.pattern : [argv.pattern];
30
+ const ignore = Array.isArray(argv.ignore) ? argv.ignore : [argv.ignore];
31
+ console.log('[run-by-checksum] patterns:', patterns.join(', '));
32
+ console.log('[run-by-checksum] ignore:', ignore.join(', ') || '(none)');
33
+ console.log('[run-by-checksum] cwd:', argv.cwd || process.env.INIT_CWD || process.cwd());
34
+ console.log('[run-by-checksum] exec:', argv.exec || '(none)');
35
+ (0, run_js_1.runChecksum)({
36
+ patterns,
37
+ ignore,
38
+ exec: argv.exec,
39
+ cwd: argv.cwd
40
+ }).catch((err) => {
41
+ console.error(err);
42
+ process.exit(1);
43
+ });
@@ -0,0 +1,56 @@
1
+ #!/usr/bin/env node
2
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
3
+ import {
4
+ runChecksum
5
+ } from "./chunk-LVSPEFU2.mjs";
6
+ import "./chunk-QD4T255Z.mjs";
7
+ import "./chunk-WSHVPGNM.mjs";
8
+ import {
9
+ require_utils
10
+ } from "./chunk-6RK5UCTP.mjs";
11
+ import {
12
+ __toESM,
13
+ init_esm_shims
14
+ } from "./chunk-QQ4A6DLD.mjs";
15
+
16
+ // src/run-by-checksum-cli.js
17
+ init_esm_shims();
18
+ var import_utils = __toESM(require_utils(), 1);
19
+ var argv = (0, import_utils.getArgs)({
20
+ string: ["pattern", "ignore", "exec", "cwd"],
21
+ alias: { p: "pattern", i: "ignore", e: "exec", c: "cwd", h: "help" },
22
+ default: {
23
+ pattern: [],
24
+ ignore: []
25
+ }
26
+ });
27
+ if (argv.help) {
28
+ console.log(`
29
+ Usage: run-by-checksum [options]
30
+
31
+ Run a command when the checksum of matched files changes.
32
+
33
+ Options:
34
+ -p, --pattern <glob> Glob pattern(s) to include (can be repeated)
35
+ -i, --ignore <glob> Glob pattern(s) to exclude (can be repeated)
36
+ -e, --exec <command> Command to execute when checksum changes
37
+ -c, --cwd <dir> Working directory for glob and spawn (default: process.env.INIT_CWD or cwd)
38
+ -h, --help Show this help message
39
+ `);
40
+ process.exit(0);
41
+ }
42
+ var patterns = Array.isArray(argv.pattern) ? argv.pattern : [argv.pattern];
43
+ var ignore = Array.isArray(argv.ignore) ? argv.ignore : [argv.ignore];
44
+ console.log("[run-by-checksum] patterns:", patterns.join(", "));
45
+ console.log("[run-by-checksum] ignore:", ignore.join(", ") || "(none)");
46
+ console.log("[run-by-checksum] cwd:", argv.cwd || process.env.INIT_CWD || process.cwd());
47
+ console.log("[run-by-checksum] exec:", argv.exec || "(none)");
48
+ runChecksum({
49
+ patterns,
50
+ ignore,
51
+ exec: argv.exec,
52
+ cwd: argv.cwd
53
+ }).catch((err) => {
54
+ console.error(err);
55
+ process.exit(1);
56
+ });
@@ -19,9 +19,9 @@ var require_utils = __commonJS({
19
19
  init_cjs_shims();
20
20
  var fs2 = require("fs");
21
21
  var path2 = require("upath");
22
- var argv = require("minimist")(process.argv.slice(2));
22
+ var minimistLib = require("minimist");
23
+ var argv = minimistLib(process.argv.slice(2));
23
24
  var { exec } = require("child_process");
24
- var { URL: URL2 } = require("url");
25
25
  var { promisify } = require("util");
26
26
  var execAsync = promisify(exec);
27
27
  async function parseGitRemotes() {
@@ -34,7 +34,7 @@ var require_utils = __commonJS({
34
34
  if (name && url) {
35
35
  const [repoUrl] = url.split(" ");
36
36
  try {
37
- const parsedUrl = new URL2(repoUrl);
37
+ const parsedUrl = new URL(repoUrl);
38
38
  const pathParts = parsedUrl.pathname.split("/").filter(Boolean);
39
39
  if (parsedUrl.hostname === "github.com" && pathParts.length === 2) {
40
40
  let repoPath = pathParts.join("/");
@@ -55,15 +55,10 @@ var require_utils = __commonJS({
55
55
  }
56
56
  }
57
57
  module2.exports.parseGitRemotes = parseGitRemotes;
58
- function joinPathPreserveDriveLetter(...segments) {
59
- let fullPath = require("path").join(...segments);
60
- if (/^[a-z]:\\/.test(fullPath)) {
61
- fullPath = fullPath.charAt(0).toUpperCase() + fullPath.slice(1);
58
+ function getArgs2(opts) {
59
+ if (opts) {
60
+ return minimistLib(process.argv.slice(2), opts);
62
61
  }
63
- return fullPath;
64
- }
65
- module2.exports.joinPathPreserveDriveLetter = joinPathPreserveDriveLetter;
66
- function getArgs2() {
67
62
  return argv;
68
63
  }
69
64
  module2.exports.getArgs = getArgs2;
@@ -190,7 +185,7 @@ init_cjs_shims();
190
185
  var { spawnSync } = require("child_process");
191
186
  var color = require("ansi-colors");
192
187
  var fs = require("fs");
193
- var path = require("path");
188
+ var path = require("upath");
194
189
  var dotenv = require("dotenv");
195
190
  var envPath = path.resolve(process.cwd(), ".env");
196
191
  if (fs.existsSync(envPath)) dotenv.config({ path: envPath, override: true, quiet: true });
@@ -210,7 +205,7 @@ if (args.help || args.h) {
210
205
  console.log();
211
206
  process.exit(0);
212
207
  }
213
- var ACCESS_TOKEN = process.env.GITHUB_TOKEN || process.env.ACCESS_TOKEN;
208
+ var ACCESS_TOKEN = process.env.ACCESS_TOKEN || process.env.GITHUB_TOKEN;
214
209
  var ROOT = runGit(["rev-parse", "--show-toplevel"]).trim();
215
210
  var REPO_PATH = ROOT;
216
211
  if (args.cwd) {
@@ -2,7 +2,7 @@
2
2
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
3
3
  import {
4
4
  require_utils
5
- } from "./chunk-5RTXZVCW.mjs";
5
+ } from "./chunk-6RK5UCTP.mjs";
6
6
  import {
7
7
  __commonJS,
8
8
  __filename,
@@ -17,7 +17,7 @@ var require_submodule_install = __commonJS({
17
17
  var { spawnSync } = __require("child_process");
18
18
  var color = __require("ansi-colors");
19
19
  var fs = __require("fs");
20
- var path = __require("path");
20
+ var path = __require("upath");
21
21
  var dotenv = __require("dotenv");
22
22
  var envPath = path.resolve(process.cwd(), ".env");
23
23
  if (fs.existsSync(envPath)) dotenv.config({ path: envPath, override: true, quiet: true });
@@ -37,7 +37,7 @@ var require_submodule_install = __commonJS({
37
37
  console.log();
38
38
  process.exit(0);
39
39
  }
40
- var ACCESS_TOKEN = process.env.GITHUB_TOKEN || process.env.ACCESS_TOKEN;
40
+ var ACCESS_TOKEN = process.env.ACCESS_TOKEN || process.env.GITHUB_TOKEN;
41
41
  var ROOT = runGit(["rev-parse", "--show-toplevel"]).trim();
42
42
  var REPO_PATH = ROOT;
43
43
  if (args.cwd) {