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,91 @@
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 __copyProps = (to, from, except, desc) => {
9
+ if (from && typeof from === "object" || typeof from === "function") {
10
+ for (let key of __getOwnPropNames(from))
11
+ if (!__hasOwnProp.call(to, key) && key !== except)
12
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
13
+ }
14
+ return to;
15
+ };
16
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
17
+ // If the importer is in node compatibility mode or this is not an ESM
18
+ // file that has been converted to a CommonJS file using a Babel-
19
+ // compatible transform (i.e. "__esModule" has not been set), then set
20
+ // "default" to the CommonJS "module.exports" for node compatibility.
21
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
22
+ mod
23
+ ));
24
+
25
+ // src/file/move-cli.mjs
26
+ var import_minimist = __toESM(require("minimist"), 1);
27
+
28
+ // src/file/move.mjs
29
+ var import_fs_extra = __toESM(require("fs-extra"), 1);
30
+ var import_upath = __toESM(require("upath"), 1);
31
+ async function move(src, dest) {
32
+ if (!await import_fs_extra.default.pathExists(src)) {
33
+ throw new Error(`Source file does not exist: ${src}`);
34
+ }
35
+ const srcStat = await import_fs_extra.default.stat(src);
36
+ let finalDest = dest;
37
+ if (srcStat.isFile()) {
38
+ const destStat = await import_fs_extra.default.pathExists(dest) ? await import_fs_extra.default.stat(dest) : null;
39
+ if (destStat && destStat.isDirectory()) {
40
+ finalDest = import_upath.default.join(dest, import_upath.default.basename(src));
41
+ }
42
+ }
43
+ await import_fs_extra.default.ensureDir(import_upath.default.dirname(finalDest));
44
+ await import_fs_extra.default.move(src, finalDest, { overwrite: true });
45
+ }
46
+
47
+ // src/file/move-cli.mjs
48
+ function showHelp(exitCode = 0) {
49
+ console.log(
50
+ `
51
+ Usage:
52
+ move <src> <dest>
53
+
54
+ Options:
55
+ -h, --help Show this help message
56
+
57
+ Examples:
58
+ move file.txt backup/file.txt
59
+ move ./src ./dist
60
+ `.trim()
61
+ );
62
+ process.exit(exitCode);
63
+ }
64
+ async function main() {
65
+ const args = (0, import_minimist.default)(process.argv.slice(2), {
66
+ boolean: ["help", "h"],
67
+ alias: {
68
+ h: "help"
69
+ }
70
+ });
71
+ if (args.help) {
72
+ showHelp(0);
73
+ }
74
+ const [src, dest] = args._;
75
+ if (!src || !dest) {
76
+ console.error("Error: missing required arguments.\n");
77
+ showHelp(1);
78
+ }
79
+ try {
80
+ await move(src, dest);
81
+ console.log(`Moved ${src} to ${dest}`);
82
+ } catch (err) {
83
+ console.error(`Error moving file: ${err instanceof Error ? err.message : String(err)}`);
84
+ process.exit(1);
85
+ }
86
+ }
87
+ function handleError(err) {
88
+ console.error(`Unexpected error: ${err instanceof Error ? err.message : String(err)}`);
89
+ process.exit(1);
90
+ }
91
+ main().catch(handleError);
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,55 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import {
3
+ move
4
+ } from "../chunk-NGFK3EYW.mjs";
5
+ import {
6
+ init_esm_shims
7
+ } from "../chunk-QQ4A6DLD.mjs";
8
+
9
+ // src/file/move-cli.mjs
10
+ init_esm_shims();
11
+ import minimist from "minimist";
12
+ function showHelp(exitCode = 0) {
13
+ console.log(
14
+ `
15
+ Usage:
16
+ move <src> <dest>
17
+
18
+ Options:
19
+ -h, --help Show this help message
20
+
21
+ Examples:
22
+ move file.txt backup/file.txt
23
+ move ./src ./dist
24
+ `.trim()
25
+ );
26
+ process.exit(exitCode);
27
+ }
28
+ async function main() {
29
+ const args = minimist(process.argv.slice(2), {
30
+ boolean: ["help", "h"],
31
+ alias: {
32
+ h: "help"
33
+ }
34
+ });
35
+ if (args.help) {
36
+ showHelp(0);
37
+ }
38
+ const [src, dest] = args._;
39
+ if (!src || !dest) {
40
+ console.error("Error: missing required arguments.\n");
41
+ showHelp(1);
42
+ }
43
+ try {
44
+ await move(src, dest);
45
+ console.log(`Moved ${src} to ${dest}`);
46
+ } catch (err) {
47
+ console.error(`Error moving file: ${err instanceof Error ? err.message : String(err)}`);
48
+ process.exit(1);
49
+ }
50
+ }
51
+ function handleError(err) {
52
+ console.error(`Unexpected error: ${err instanceof Error ? err.message : String(err)}`);
53
+ process.exit(1);
54
+ }
55
+ main().catch(handleError);
@@ -0,0 +1,55 @@
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __getProtoOf = Object.getPrototypeOf;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __export = (target, all) => {
8
+ for (var name in all)
9
+ __defProp(target, name, { get: all[name], enumerable: true });
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from))
14
+ if (!__hasOwnProp.call(to, key) && key !== except)
15
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
+ }
17
+ return to;
18
+ };
19
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
20
+ // If the importer is in node compatibility mode or this is not an ESM
21
+ // file that has been converted to a CommonJS file using a Babel-
22
+ // compatible transform (i.e. "__esModule" has not been set), then set
23
+ // "default" to the CommonJS "module.exports" for node compatibility.
24
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
25
+ mod
26
+ ));
27
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
28
+
29
+ // src/file/move.mjs
30
+ var move_exports = {};
31
+ __export(move_exports, {
32
+ move: () => move
33
+ });
34
+ module.exports = __toCommonJS(move_exports);
35
+ var import_fs_extra = __toESM(require("fs-extra"), 1);
36
+ var import_upath = __toESM(require("upath"), 1);
37
+ async function move(src, dest) {
38
+ if (!await import_fs_extra.default.pathExists(src)) {
39
+ throw new Error(`Source file does not exist: ${src}`);
40
+ }
41
+ const srcStat = await import_fs_extra.default.stat(src);
42
+ let finalDest = dest;
43
+ if (srcStat.isFile()) {
44
+ const destStat = await import_fs_extra.default.pathExists(dest) ? await import_fs_extra.default.stat(dest) : null;
45
+ if (destStat && destStat.isDirectory()) {
46
+ finalDest = import_upath.default.join(dest, import_upath.default.basename(src));
47
+ }
48
+ }
49
+ await import_fs_extra.default.ensureDir(import_upath.default.dirname(finalDest));
50
+ await import_fs_extra.default.move(src, finalDest, { overwrite: true });
51
+ }
52
+ // Annotate the CommonJS export names for ESM import in node:
53
+ 0 && (module.exports = {
54
+ move
55
+ });
@@ -0,0 +1 @@
1
+ export function move(src: any, dest: any): Promise<void>;
@@ -0,0 +1,8 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import {
3
+ move
4
+ } from "../chunk-NGFK3EYW.mjs";
5
+ import "../chunk-QQ4A6DLD.mjs";
6
+ export {
7
+ move
8
+ };
@@ -1,3 +1,4 @@
1
1
  #!/usr/bin/env node
2
- const findNodeModules = require("./find-node-modules.cjs");
2
+ "use strict";
3
+ const findNodeModules = require('./find-node-modules.cjs');
3
4
  findNodeModules(null, console.log);
@@ -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;
@@ -88,31 +89,78 @@ var require_utils = __commonJS({
88
89
  }
89
90
  module2.exports.getArgs = getArgs2;
90
91
  function del(fullPath) {
91
- if (fs2.statSync(fullPath).isDirectory()) {
92
- const subdir = fs2.readdirSync(fullPath).map((dirPath) => path2.resolve(fullPath, dirPath));
93
- for (let i = 0; i < subdir.length; i++) {
94
- del(subdir[i]);
92
+ try {
93
+ if (!fs2.existsSync(fullPath)) return;
94
+ const stat = fs2.lstatSync(fullPath);
95
+ if (stat.isSymbolicLink()) {
96
+ try {
97
+ fs2.unlinkSync(fullPath);
98
+ console.log("deleted symlink", fullPath);
99
+ } catch (e) {
100
+ console.log("failed delete symlink", fullPath, e && e.message);
101
+ }
102
+ return;
103
+ }
104
+ if (stat.isDirectory()) {
105
+ const subdir = fs2.readdirSync(fullPath).map((dirPath) => path2.resolve(fullPath, dirPath));
106
+ for (let i = 0; i < subdir.length; i++) {
107
+ del(subdir[i]);
108
+ }
109
+ try {
110
+ fs2.rmdirSync(fullPath);
111
+ console.log("deleted", fullPath);
112
+ } catch (_e) {
113
+ try {
114
+ fs2.rmSync(fullPath, { recursive: true, force: true, retryDelay: 7e3 });
115
+ console.log("deleted", fullPath);
116
+ } catch (ee) {
117
+ console.log("failed delete", fullPath, ee && ee.message);
118
+ }
119
+ }
120
+ return;
95
121
  }
96
- } else {
97
122
  try {
98
- fs2.rmSync(fullPath, { recursive: true, force: true, retryDelay: 7e3 });
123
+ fs2.unlinkSync(fullPath);
99
124
  console.log("deleted", fullPath);
100
- } catch (_) {
101
- console.log("failed delete", fullPath);
125
+ } catch (_e) {
126
+ try {
127
+ fs2.rmSync(fullPath, { recursive: true, force: true, retryDelay: 7e3 });
128
+ console.log("deleted", fullPath);
129
+ } catch (ee) {
130
+ console.log("failed delete", fullPath, ee && ee.message);
131
+ }
102
132
  }
133
+ } catch (err) {
134
+ console.log("failed delete", fullPath, err && err.message);
103
135
  }
104
136
  }
105
137
  module2.exports.del = del;
106
138
  function delStream(globStream) {
107
139
  globStream.stream().on("data", (result) => {
108
140
  const fullPath = path2.resolve(process.cwd(), result);
109
- if (fs2.statSync(fullPath).isDirectory()) {
110
- const subdir = fs2.readdirSync(fullPath).map((dirPath) => path2.resolve(fullPath, dirPath));
111
- for (let i = 0; i < subdir.length; i++) {
112
- del(subdir[i]);
141
+ try {
142
+ if (fs2.existsSync(fullPath)) {
143
+ const stat = fs2.lstatSync(fullPath);
144
+ if (stat.isSymbolicLink()) {
145
+ try {
146
+ fs2.unlinkSync(fullPath);
147
+ console.log("deleted symlink", fullPath);
148
+ } catch (e) {
149
+ console.log("failed delete symlink", fullPath, e && e.message);
150
+ }
151
+ return;
152
+ }
153
+ if (stat.isDirectory()) {
154
+ const subdir = fs2.readdirSync(fullPath).map((dirPath) => path2.resolve(fullPath, dirPath));
155
+ for (let i = 0; i < subdir.length; i++) {
156
+ del(subdir[i]);
157
+ }
158
+ }
113
159
  }
160
+ del(fullPath);
161
+ } catch (err) {
162
+ console.log("failed processing", fullPath, err && err.message);
114
163
  }
115
- del(fullPath);
116
164
  });
117
165
  }
118
166
  module2.exports.delStream = delStream;
@@ -169,7 +217,17 @@ var import_puppeteer_extra_plugin_stealth = __toESM(require("puppeteer-extra-plu
169
217
  var import_upath = __toESM(require("upath"), 1);
170
218
  var COOKIE_DIR = import_upath.default.join(process.cwd(), "tmp", "cookies");
171
219
  var DEFAULT_COOKIE_PATH = import_upath.default.join(COOKIE_DIR, "cookies.json");
220
+ var NAVIGATION_TIMEOUT_MS = 9e4;
221
+ var NETWORK_IDLE_TIMEOUT_MS = 15e3;
222
+ var MAX_INLINE_QUESTION_FILE_BYTES = 2 * 1024;
172
223
  import_fs_extra.default.ensureDirSync(COOKIE_DIR);
224
+ async function gotoWithFallback(page, url) {
225
+ await page.goto(url, { waitUntil: "domcontentloaded", timeout: NAVIGATION_TIMEOUT_MS });
226
+ try {
227
+ await page.waitForNetworkIdle({ idleTime: 1e3, timeout: NETWORK_IDLE_TIMEOUT_MS });
228
+ } catch {
229
+ }
230
+ }
173
231
  async function saveCookies(page, path2 = DEFAULT_COOKIE_PATH) {
174
232
  const cookies = await page.cookies();
175
233
  import_fs_extra.default.writeFileSync(path2, JSON.stringify(cookies, null, 2));
@@ -188,7 +246,7 @@ async function navigatePage(page, url) {
188
246
  if (cookies) {
189
247
  await page.setCookie(...cookies);
190
248
  }
191
- await page.goto(url, { waitUntil: "networkidle0" });
249
+ await gotoWithFallback(page, url);
192
250
  await page.evaluate(() => {
193
251
  window.__domStillUpdating = true;
194
252
  if (window.__domObserver) {
@@ -228,46 +286,157 @@ function loadCookies(cookieFilePath = DEFAULT_COOKIE_PATH) {
228
286
  return JSON.parse(import_fs_extra.default.readFileSync(cookieFilePath));
229
287
  }
230
288
  async function writeQuestion(page, question2) {
231
- const questions = question2.split("\n");
232
289
  const promptTextarea = await page.waitForSelector("#prompt-textarea", { timeout: 3e4 });
233
290
  if (!promptTextarea) {
234
291
  console.log(
235
292
  "Cannot find the prompt input on the webpage. Please check whether you have access to chat.openai.com without logging in via your browser."
236
293
  );
237
- }
238
- await page.evaluate(() => {
239
- document.querySelector("#prompt-textarea").innerHTML = `<p></p>`;
240
- });
241
- if (questions.length === 1) {
242
- await page.type("#prompt-textarea", questions[0], { delay: 100 });
243
294
  return;
244
295
  }
245
- for (const q of questions) {
246
- await page.type("#prompt-textarea", q, { delay: 100 });
247
- if (q !== questions[questions.length - 1]) {
248
- await page.keyboard.down("Shift");
249
- await page.keyboard.press("Enter");
250
- await page.keyboard.up("Shift");
296
+ await page.evaluate((text) => {
297
+ const promptEl = document.querySelector("#prompt-textarea");
298
+ if (!promptEl) {
299
+ return;
251
300
  }
301
+ promptEl.focus();
302
+ promptEl.innerHTML = "";
303
+ const lines = String(text).split("\n");
304
+ for (const line of lines) {
305
+ const p = document.createElement("p");
306
+ p.textContent = line;
307
+ promptEl.appendChild(p);
308
+ }
309
+ promptEl.dispatchEvent(new InputEvent("beforeinput", { bubbles: true, inputType: "insertFromPaste", data: text }));
310
+ promptEl.dispatchEvent(new InputEvent("input", { bubbles: true, inputType: "insertFromPaste", data: text }));
311
+ promptEl.dispatchEvent(new Event("change", { bubbles: true }));
312
+ }, question2);
313
+ const hasPromptText = await page.evaluate(() => {
314
+ const promptEl = document.querySelector("#prompt-textarea");
315
+ return Boolean(promptEl && promptEl.textContent && promptEl.textContent.trim().length > 0);
316
+ });
317
+ if (!hasPromptText) {
318
+ console.log("Prompt state not updated by DOM injection. Falling back to keyboard insertText.");
319
+ await promptTextarea.click({ clickCount: 1 });
320
+ await page.keyboard.down("Control");
321
+ await page.keyboard.press("KeyA");
322
+ await page.keyboard.up("Control");
323
+ await page.keyboard.insertText(question2);
252
324
  }
253
325
  }
254
326
  async function clickSubmitButton(page) {
327
+ console.log("Attempting to click the submit button...");
255
328
  try {
256
- const fruitjuiceSendButton = await page.evaluate(() => {
257
- return document.querySelector('[data-testid="fruitjuice-send-button"]') !== null;
329
+ const userMessageCountBefore = await page.$$eval(
330
+ '[data-message-author-role="user"]',
331
+ (elements) => elements.length
332
+ );
333
+ const waitForSubmit = async (timeout = 5e3) => {
334
+ try {
335
+ await page.waitForFunction(
336
+ (previousCount) => {
337
+ const currentCount = document.querySelectorAll('[data-message-author-role="user"]').length;
338
+ return currentCount > previousCount;
339
+ },
340
+ { timeout },
341
+ userMessageCountBefore
342
+ );
343
+ return true;
344
+ } catch {
345
+ return false;
346
+ }
347
+ };
348
+ await page.waitForFunction(
349
+ () => {
350
+ const candidates = [
351
+ document.querySelector('[data-testid="fruitjuice-send-button"]'),
352
+ document.querySelector("#composer-submit-button"),
353
+ document.querySelector('[data-testid="send-button"]')
354
+ ].filter(Boolean);
355
+ return candidates.some((button) => {
356
+ const isDisabled = button.disabled || button.getAttribute("aria-disabled") === "true";
357
+ const isVisible = button.offsetParent !== null;
358
+ return !isDisabled && isVisible;
359
+ });
360
+ },
361
+ { timeout: 5e3 }
362
+ ).catch(() => {
258
363
  });
259
- const sendButton = await page.evaluate(() => {
260
- return document.querySelector('[data-testid="send-button"]') !== null;
364
+ const buttonDetails = await page.evaluate(() => {
365
+ const selectors = [
366
+ '[data-testid="fruitjuice-send-button"]',
367
+ "#composer-submit-button",
368
+ '[data-testid="send-button"]'
369
+ ];
370
+ const details = selectors.map((selector) => {
371
+ const el = document.querySelector(selector);
372
+ const exists = Boolean(el);
373
+ const disabled = exists ? Boolean(el.disabled || el.getAttribute("aria-disabled") === "true") : null;
374
+ const visible = exists ? el.offsetParent !== null : null;
375
+ return { selector, exists, disabled, visible };
376
+ });
377
+ return details;
378
+ });
379
+ console.log(`Submit button details: ${JSON.stringify(buttonDetails)}`);
380
+ const clickable = buttonDetails.find((item) => item.exists && item.visible && item.disabled === false);
381
+ const selectedSelector = clickable ? clickable.selector : null;
382
+ if (selectedSelector) {
383
+ await page.click(selectedSelector);
384
+ console.log(`Clicked submit button selector: ${selectedSelector}`);
385
+ if (await waitForSubmit(5e3)) {
386
+ console.log("Submission detected after selector click.");
387
+ return true;
388
+ }
389
+ const forcedClickWorked = await page.evaluate((selector) => {
390
+ const el = document.querySelector(selector);
391
+ if (!el) {
392
+ return false;
393
+ }
394
+ el.click();
395
+ return true;
396
+ }, selectedSelector);
397
+ if (forcedClickWorked) {
398
+ console.log(`Forced DOM click on selector: ${selectedSelector}`);
399
+ if (await waitForSubmit(5e3)) {
400
+ console.log("Submission detected after forced DOM click.");
401
+ return true;
402
+ }
403
+ }
404
+ }
405
+ console.log("Submit button path did not submit. Trying Enter key fallback on prompt.");
406
+ await page.focus("#prompt-textarea");
407
+ await page.keyboard.press("Enter");
408
+ if (await waitForSubmit(5e3)) {
409
+ console.log("Submission detected after Enter key fallback.");
410
+ return true;
411
+ }
412
+ const didRequestSubmit = await page.evaluate(() => {
413
+ const prompt = document.querySelector("#prompt-textarea");
414
+ if (!prompt) {
415
+ return false;
416
+ }
417
+ const form = prompt.closest("form");
418
+ if (!form) {
419
+ return false;
420
+ }
421
+ if (typeof form.requestSubmit === "function") {
422
+ form.requestSubmit();
423
+ } else {
424
+ form.submit();
425
+ }
426
+ return true;
261
427
  });
262
- if (fruitjuiceSendButton) {
263
- await page.click('[data-testid="fruitjuice-send-button"]');
264
- } else if (sendButton) {
265
- await page.click('[data-testid="send-button"]');
266
- } else {
267
- console.log("Neither send button is present");
428
+ if (didRequestSubmit) {
429
+ console.log("Triggered form submit fallback.");
430
+ if (await waitForSubmit(5e3)) {
431
+ console.log("Submission detected after form submit fallback.");
432
+ return true;
433
+ }
268
434
  }
435
+ console.log("Failed to submit prompt after all strategies.");
436
+ return false;
269
437
  } catch (e) {
270
438
  console.log(`Failed to click the send button: ${e}`);
439
+ return false;
271
440
  }
272
441
  }
273
442
  var lastMessageId = null;
@@ -340,11 +509,15 @@ async function isLoggedIn(page) {
340
509
  return result === true;
341
510
  }
342
511
  async function createBrowser(browserOptions = {}) {
512
+ const windowsChromeExecutable = "C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe";
513
+ const hasWindowsChrome = process.platform === "win32" && import_fs_extra.default.existsSync(windowsChromeExecutable);
343
514
  const defaultOptions = {
344
515
  headless: false,
516
+ defaultViewport: null,
345
517
  userDataDir: import_upath.default.join(process.cwd(), "tmp/puppeteer-profile"),
346
518
  // Windows-specific options to handle browser launch issues
347
519
  args: [
520
+ "--start-maximized",
348
521
  "--no-sandbox",
349
522
  "--disable-setuid-sandbox",
350
523
  "--disable-dev-shm-usage",
@@ -357,10 +530,9 @@ async function createBrowser(browserOptions = {}) {
357
530
  "--disable-renderer-backgrounding"
358
531
  ],
359
532
  ignoreDefaultArgs: ["--disable-extensions"],
360
- ...process.platform === "win32" && {
361
- // Additional Windows-specific options
362
- executablePath: void 0
363
- // Let Puppeteer find Chrome automatically
533
+ ...hasWindowsChrome && {
534
+ // Prefer local Chrome installation when present on Windows.
535
+ executablePath: windowsChromeExecutable
364
536
  }
365
537
  };
366
538
  try {
@@ -370,8 +542,12 @@ async function createBrowser(browserOptions = {}) {
370
542
  try {
371
543
  return await import_puppeteer_extra.default.use((0, import_puppeteer_extra_plugin_stealth.default)()).launch({
372
544
  headless: browserOptions.headless || false,
373
- args: ["--no-sandbox", "--disable-setuid-sandbox"],
545
+ defaultViewport: null,
546
+ args: ["--start-maximized", "--no-sandbox", "--disable-setuid-sandbox"],
374
547
  ignoreDefaultArgs: false,
548
+ ...hasWindowsChrome && {
549
+ executablePath: windowsChromeExecutable
550
+ },
375
551
  ...browserOptions
376
552
  });
377
553
  } catch (fallbackError) {
@@ -396,7 +572,11 @@ async function loginToChatGpt() {
396
572
  if (loginButtonExists) {
397
573
  console.log("Login button found, clicking to log in...");
398
574
  await page.click('[data-testid="login-button"]');
399
- await page.waitForNavigation({ waitUntil: "networkidle0" });
575
+ await page.waitForNavigation({ waitUntil: "domcontentloaded", timeout: NAVIGATION_TIMEOUT_MS });
576
+ try {
577
+ await page.waitForNetworkIdle({ idleTime: 1e3, timeout: NETWORK_IDLE_TIMEOUT_MS });
578
+ } catch {
579
+ }
400
580
  console.log("Login process completed.");
401
581
  } else {
402
582
  console.log("No login required - user appears to be already logged in.");
@@ -406,6 +586,7 @@ async function runChatGpt(chatgptOptions = {}) {
406
586
  const headless = chatgptOptions.headless !== void 0 ? chatgptOptions.headless : true;
407
587
  const questionFile2 = chatgptOptions.questionFile;
408
588
  let question2 = chatgptOptions.question;
589
+ let shouldUploadQuestionFile = Boolean(questionFile2);
409
590
  const responseFile = chatgptOptions.responseFile || import_upath.default.join(process.cwd(), "tmp", "response.txt");
410
591
  const noInputProvided = !question2 && !questionFile2;
411
592
  const questionIsEmpty = question2 && question2.trim().length === 0;
@@ -413,6 +594,22 @@ async function runChatGpt(chatgptOptions = {}) {
413
594
  if (noInputProvided || questionIsEmpty || questionFileIsEmpty) {
414
595
  throw new Error("You must provide a question or a question file.");
415
596
  }
597
+ if (!question2 && questionFile2) {
598
+ if (!import_fs_extra.default.existsSync(questionFile2)) {
599
+ throw new Error(`Question file does not exist: ${questionFile2}`);
600
+ }
601
+ const questionFileStats = import_fs_extra.default.statSync(questionFile2);
602
+ if (questionFileStats.size <= MAX_INLINE_QUESTION_FILE_BYTES) {
603
+ question2 = import_fs_extra.default.readFileSync(questionFile2, "utf8").trim();
604
+ if (!question2) {
605
+ throw new Error("Question file is empty.");
606
+ }
607
+ shouldUploadQuestionFile = false;
608
+ console.log(
609
+ `Question file is ${questionFileStats.size} bytes (<= ${MAX_INLINE_QUESTION_FILE_BYTES}). Sending as text prompt.`
610
+ );
611
+ }
612
+ }
416
613
  let browser;
417
614
  try {
418
615
  browser = await createBrowser({ headless });
@@ -425,7 +622,16 @@ async function runChatGpt(chatgptOptions = {}) {
425
622
  console.error("4. Close any running Chrome instances and try again");
426
623
  throw error;
427
624
  }
428
- const page = (await browser.pages()).length > 0 ? (await browser.pages())[0] : await browser.newPage();
625
+ const allPages = await browser.pages();
626
+ const page = allPages.length > 0 ? allPages[0] : await browser.newPage();
627
+ await page.bringToFront();
628
+ if (allPages.length > 1) {
629
+ for (const p of allPages) {
630
+ if (p !== page) {
631
+ await p.close();
632
+ }
633
+ }
634
+ }
429
635
  try {
430
636
  const url = "https://chat.openai.com";
431
637
  const navigate = await navigatePage(page, url);
@@ -444,12 +650,15 @@ async function runChatGpt(chatgptOptions = {}) {
444
650
  }
445
651
  if (question2) {
446
652
  await writeQuestion(page, question2);
447
- await clickSubmitButton(page);
653
+ const didSubmit = await clickSubmitButton(page);
654
+ if (!didSubmit) {
655
+ throw new Error("Prompt was not submitted. The composer button may be disabled or blocked.");
656
+ }
448
657
  await navigate.waitForDomIdle(1e3, 3e4);
449
658
  await waitForInitialResponse(page);
450
659
  await handleStreamingResponse(page, responseFile);
451
660
  await saveCookies(page, getCookiePathForUrl(url));
452
- } else if (questionFile2) {
661
+ } else if (shouldUploadQuestionFile && questionFile2) {
453
662
  await navigate.waitForDomIdle(2e3, 1e4);
454
663
  const isUserLoggedIn = await isLoggedIn(page);
455
664
  console.log(`Login status: ${isUserLoggedIn ? "Logged in" : "Not logged in"}`);
@@ -488,7 +697,10 @@ async function runChatGpt(chatgptOptions = {}) {
488
697
  await fileInput.uploadFile(questionFile2);
489
698
  await navigate.waitForDomIdle(2e3, 15e3);
490
699
  console.log("File uploaded successfully");
491
- await clickSubmitButton(page);
700
+ const didSubmit = await clickSubmitButton(page);
701
+ if (!didSubmit) {
702
+ throw new Error("Prompt was not submitted after file upload.");
703
+ }
492
704
  await navigate.waitForDomIdle(1e3, 3e4);
493
705
  await waitForInitialResponse(page);
494
706
  await handleStreamingResponse(page, responseFile);