binary-collections 2.0.8 → 2.0.10

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 (250) hide show
  1. package/binaries/binary-executor.cjs +43 -0
  2. package/{bin → binaries}/clean-nodemodule +0 -0
  3. package/binaries/clean-nodemodule.cjs +43 -0
  4. package/binaries/clean-nodemodule.cmd +4 -0
  5. package/{bin → binaries}/clean-nodemodules +0 -0
  6. package/binaries/clean-nodemodules.cjs +43 -0
  7. package/binaries/clean-nodemodules.cmd +5 -0
  8. package/{bin → binaries}/dev +0 -0
  9. package/binaries/dev.cjs +43 -0
  10. package/{bin → binaries}/empty +0 -0
  11. package/binaries/empty.cjs +43 -0
  12. package/{bin → binaries}/git-reduce-size +0 -0
  13. package/binaries/git-reduce-size.cjs +43 -0
  14. package/binaries/javakill.cjs +43 -0
  15. package/{bin → binaries}/javakill.cmd +0 -0
  16. package/{bin → binaries}/kill-process +0 -0
  17. package/binaries/kill-process.cjs +43 -0
  18. package/binaries/nodekill.cjs +43 -0
  19. package/{bin → binaries}/nodekill.ps1 +0 -0
  20. package/{bin → binaries}/prod +0 -0
  21. package/binaries/prod.cjs +43 -0
  22. package/{bin → binaries}/rmfind +0 -0
  23. package/binaries/rmfind.cjs +43 -0
  24. package/{bin → binaries}/rmx +0 -0
  25. package/binaries/rmx.cjs +43 -0
  26. package/{bin → binaries}/submodule-token +0 -0
  27. package/binaries/submodule-token.cjs +43 -0
  28. package/docs-src/clean-github-actions-caches.md +26 -0
  29. package/docs-src/free-chatgpt.md +26 -0
  30. package/lib/binary-collections-config.cjs +3 -2
  31. package/lib/binary-collections-config.mjs +2 -2
  32. package/lib/binary-collections.cjs +452 -87
  33. package/lib/binary-collections.mjs +247 -8
  34. package/lib/changelog.cjs +328 -0
  35. package/lib/changelog.mjs +205 -0
  36. package/lib/chunk-4EWQC6GZ.mjs +382 -0
  37. package/lib/chunk-4ZI7BQKQ.mjs +381 -0
  38. package/lib/chunk-5J2BEPY5.mjs +83 -0
  39. package/lib/{chunk-4BYBVEYC.mjs → chunk-66PAU5PS.mjs} +5 -4
  40. package/lib/chunk-6HHJRKFB.mjs +59 -0
  41. package/lib/chunk-6S4NXESK.mjs +26 -0
  42. package/lib/{chunk-ZYAQRPUL.mjs → chunk-7YD7IPFF.mjs} +2 -2
  43. package/lib/{chunk-SH3L6HHV.mjs → chunk-A2JQXI5Z.mjs} +2 -2
  44. package/lib/{chunk-EGSSKVDH.mjs → chunk-A3VUZEJK.mjs} +1 -1
  45. package/lib/chunk-AGZYRDC2.mjs +323 -0
  46. package/lib/{chunk-VVEZVNIV.mjs → chunk-AI4CVPJ7.mjs} +6 -6
  47. package/lib/chunk-BDCHCWHD.mjs +136 -0
  48. package/lib/chunk-BEZKJ25G.mjs +140 -0
  49. package/lib/chunk-DI5MDPSN.mjs +386 -0
  50. package/lib/{chunk-ONIBBBQ3.mjs → chunk-E6FDDAOO.mjs} +4 -3
  51. package/lib/chunk-FKI7IEB5.mjs +172 -0
  52. package/lib/chunk-GJTGHXRA.mjs +356 -0
  53. package/lib/{chunk-YV7DO3YV.mjs → chunk-HLGOWBEO.mjs} +1 -1
  54. package/lib/chunk-HMRMTYZM.mjs +40 -0
  55. package/lib/chunk-HN52G2YL.mjs +305 -0
  56. package/lib/chunk-HO6GHCOB.mjs +385 -0
  57. package/lib/chunk-LEM5OMRP.mjs +384 -0
  58. package/lib/{chunk-YX5U7XDR.mjs → chunk-M3YIYRHT.mjs} +6 -5
  59. package/lib/chunk-O6SWBEOQ.mjs +81 -0
  60. package/lib/{chunk-JGR2NW6D.mjs → chunk-PDSXF5HY.mjs} +3 -3
  61. package/lib/{chunk-AASHBCRW.mjs → chunk-QQ4A6DLD.mjs} +8 -0
  62. package/lib/chunk-RCP7DHVY.mjs +190 -0
  63. package/lib/chunk-SBNDSKG5.mjs +136 -0
  64. package/lib/chunk-U6SO4QEV.mjs +320 -0
  65. package/lib/{chunk-APBWENF6.mjs → chunk-V3N3JEUF.mjs} +3 -3
  66. package/lib/chunk-XD6BJK6Q.mjs +351 -0
  67. package/lib/chunk-XVBFFVCJ.mjs +209 -0
  68. package/lib/chunk-YXSFGA2D.mjs +383 -0
  69. package/lib/clean-github-actions-caches.cjs +243 -148
  70. package/lib/clean-github-actions-caches.mjs +4 -3
  71. package/lib/del-gradle.cjs +2 -2
  72. package/lib/del-gradle.js +1 -1
  73. package/lib/del-gradle.mjs +2 -2
  74. package/lib/del-node-modules.cjs +2 -2
  75. package/lib/del-node-modules.js +1 -1
  76. package/lib/del-node-modules.mjs +2 -2
  77. package/lib/del-ps.cjs +29 -8
  78. package/lib/del-ps.js +2 -2
  79. package/lib/del-ps.mjs +7 -5
  80. package/lib/del-yarn-caches.cjs +26 -5
  81. package/lib/del-yarn-caches.js +38 -3
  82. package/lib/del-yarn-caches.mjs +6 -6
  83. package/lib/find-node-modules-cli.cjs +5 -4
  84. package/lib/find-node-modules-cli.js +1 -1
  85. package/lib/find-node-modules-cli.mjs +2 -2
  86. package/lib/find-node-modules.cjs +4 -3
  87. package/lib/{find-node-modules.d.ts → find-node-modules.d.cts} +1 -1
  88. package/lib/find-node-modules.mjs +2 -2
  89. package/lib/free-chatgpt.cjs +548 -0
  90. package/lib/free-chatgpt.d.ts +1 -0
  91. package/lib/free-chatgpt.js +51 -0
  92. package/lib/free-chatgpt.mjs +50 -0
  93. package/lib/git/gitattributes.cjs +1 -1
  94. package/lib/git/{gitattributes.d.mts → gitattributes.d.cts} +5 -7
  95. package/lib/git/gitattributes.mjs +2 -2
  96. package/lib/git/line-endings.cjs +297 -64
  97. package/lib/git/line-endings.mjs +4 -4
  98. package/lib/git/normalize.cjs +26 -36
  99. package/lib/git/normalize.mjs +2 -2
  100. package/lib/git/permissions.cjs +77 -11
  101. package/lib/git/permissions.mjs +3 -3
  102. package/lib/git/pull-strategy.cjs +76 -9
  103. package/lib/git/pull-strategy.mjs +3 -3
  104. package/lib/git/user-config.cjs +266 -83
  105. package/lib/git/user-config.mjs +4 -4
  106. package/lib/git/utils.cjs +40 -60
  107. package/lib/git/utils.mjs +2 -2
  108. package/lib/git-diff-cli.cjs +651 -0
  109. package/lib/git-diff-cli.d.ts +1 -0
  110. package/lib/git-diff-cli.js +15 -0
  111. package/lib/git-diff-cli.mjs +16 -0
  112. package/lib/git-diff.cjs +657 -58
  113. package/lib/git-diff.d.ts +38 -83
  114. package/lib/git-diff.js +152 -0
  115. package/lib/git-diff.mjs +23 -85
  116. package/lib/git-fix.cjs +685 -97
  117. package/lib/git-fix.mjs +12 -11
  118. package/lib/git-purge.cjs +3 -3
  119. package/lib/git-purge.d.cts +1 -0
  120. package/lib/git-purge.mjs +43 -37
  121. package/lib/index.cjs +7 -6
  122. package/lib/index.d.ts +1 -1
  123. package/lib/index.js +2 -5
  124. package/lib/index.mjs +4 -4
  125. package/lib/npm-run-series.cjs +3 -3
  126. package/lib/npm-run-series.mjs +42 -36
  127. package/lib/package-resolutions-updater.cjs +174 -1
  128. package/lib/package-resolutions-updater.mjs +270 -290
  129. package/lib/print-directory-tree.cjs +275 -210
  130. package/lib/print-directory-tree.mjs +2 -2
  131. package/lib/ps/connected-domain.cjs +25 -2
  132. package/lib/ps/connected-domain.d.ts +10 -2
  133. package/lib/ps/connected-domain.js +5 -2
  134. package/lib/ps/connected-domain.mjs +8 -4
  135. package/lib/ps/index.cjs +345 -322
  136. package/lib/ps/index.d.mjs +1 -1
  137. package/lib/ps/index.js +1 -1
  138. package/lib/ps/index.mjs +179 -182
  139. package/lib/ps/isWin.cjs +24 -1
  140. package/lib/ps/isWin.d.ts +1 -1
  141. package/lib/ps/isWin.js +3 -1
  142. package/lib/ps/isWin.mjs +8 -4
  143. package/lib/ps/table-parser.cjs +167 -159
  144. package/lib/ps/table-parser.d.ts +5 -0
  145. package/lib/ps/table-parser.js +10 -4
  146. package/lib/ps/table-parser.mjs +9 -5
  147. package/lib/remove-module.cjs +262 -0
  148. package/lib/remove-module.d.mts +1 -0
  149. package/lib/remove-module.mjs +111 -0
  150. package/lib/rmpath.cjs +274 -0
  151. package/lib/rmpath.d.mts +3 -0
  152. package/lib/rmpath.mjs +108 -0
  153. package/lib/submodule-install.cjs +264 -85
  154. package/lib/submodule-install.mjs +56 -7
  155. package/lib/submodule-remove-cli.cjs +103 -0
  156. package/lib/submodule-remove-cli.d.ts +1 -0
  157. package/lib/submodule-remove-cli.js +31 -0
  158. package/lib/submodule-remove-cli.mjs +28 -0
  159. package/lib/submodule-remove.cjs +43 -0
  160. package/lib/submodule-remove.d.cts +2 -0
  161. package/lib/submodule-remove.mjs +6 -0
  162. package/lib/utils/chatgpt.cjs +383 -0
  163. package/lib/utils/chatgpt.d.ts +31 -0
  164. package/lib/utils/chatgpt.js +541 -0
  165. package/lib/utils/chatgpt.mjs +8 -0
  166. package/lib/{utils.cjs → utils/index.cjs} +1 -1
  167. package/lib/{utils.mjs → utils/index.mjs} +2 -2
  168. package/lib/yarn-reinstall.cjs +172 -38
  169. package/lib/yarn-reinstall.mjs +2 -2
  170. package/package.json +91 -71
  171. package/readme.md +43 -69
  172. package/releases/readme.md +36 -0
  173. package/test/README.md +101 -0
  174. package/test/package.json +2 -1
  175. package/test-project/readme.md +26 -0
  176. package/tmp/test-repo/README.md +35 -0
  177. package/tmp/typedoc/readme.md +320 -0
  178. package/bin/bash-dummy +0 -56
  179. package/bin/bash-dummy.cmd +0 -25
  180. package/bin/dir-tree.cmd +0 -7
  181. package/bin/git-diff +0 -4
  182. package/bin/git-diff.cmd +0 -7
  183. package/bin/git-fix +0 -36
  184. package/bin/git-fix.cmd +0 -7
  185. package/bin/rmpath +0 -70
  186. package/bin/submodule-install.txt +0 -118
  187. package/bin/submodule-remove +0 -46
  188. package/bin/submodule.txt +0 -172
  189. package/lib/binary-collections-config.d.mts +0 -18
  190. package/lib/binary-collections-config.js +0 -39
  191. package/lib/binary-collections.d.mts +0 -121
  192. package/lib/binary-collections.d.ts +0 -121
  193. package/lib/chunk-DPKAJKFO.mjs +0 -171
  194. package/lib/chunk-G3THLIDT.mjs +0 -200
  195. package/lib/chunk-W3ENOM53.mjs +0 -18
  196. package/lib/clean-github-actions-caches.d.mts +0 -169
  197. package/lib/clean-github-actions-caches.d.ts +0 -169
  198. package/lib/del-gradle.d.mts +0 -2
  199. package/lib/del-node-modules.d.mts +0 -2
  200. package/lib/del-ps.d.mts +0 -2
  201. package/lib/del-yarn-caches.d.mts +0 -2
  202. package/lib/find-node-modules-cli.d.mts +0 -1
  203. package/lib/find-node-modules.d.mts +0 -13
  204. package/lib/find-node-modules.js +0 -53
  205. package/lib/git/line-endings.d.mts +0 -83
  206. package/lib/git/line-endings.d.ts +0 -83
  207. package/lib/git/normalize.d.mts +0 -43
  208. package/lib/git/normalize.d.ts +0 -43
  209. package/lib/git/permissions.d.mts +0 -17
  210. package/lib/git/permissions.d.ts +0 -17
  211. package/lib/git/pull-strategy.d.mts +0 -15
  212. package/lib/git/pull-strategy.d.ts +0 -15
  213. package/lib/git/user-config.d.mts +0 -105
  214. package/lib/git/user-config.d.ts +0 -105
  215. package/lib/git/utils.d.mts +0 -69
  216. package/lib/git/utils.d.ts +0 -69
  217. package/lib/git-diff.d.mts +0 -84
  218. package/lib/git-fix.d.mts +0 -141
  219. package/lib/git-fix.d.ts +0 -141
  220. package/lib/git-purge.d.mts +0 -2
  221. package/lib/git-purge.js +0 -59
  222. package/lib/index.d.mts +0 -1
  223. package/lib/npm-run-series.d.mts +0 -1
  224. package/lib/npm-run-series.d.ts +0 -2
  225. package/lib/npm-run-series.js +0 -86
  226. package/lib/package-resolutions-updater.d.ts +0 -326
  227. package/lib/print-directory-tree.d.mts +0 -234
  228. package/lib/print-directory-tree.d.ts +0 -234
  229. package/lib/ps/connected-domain.d.mts +0 -3
  230. package/lib/ps/index.d.d.mts +0 -26
  231. package/lib/ps/index.d.d.ts +0 -26
  232. package/lib/ps/index.d.mts +0 -26
  233. package/lib/ps/isWin.d.mts +0 -3
  234. package/lib/ps/table-parser.d.mts +0 -3
  235. package/lib/submodule-install.d.mts +0 -121
  236. package/lib/submodule-install.d.ts +0 -121
  237. package/lib/utils.d.mts +0 -40
  238. package/lib/utils.js +0 -181
  239. package/lib/yarn-reinstall.d.mts +0 -49
  240. package/lib/yarn-reinstall.d.ts +0 -49
  241. package/src/package-resolutions-updater.mjs +0 -325
  242. package/src/print-directory-tree.cjs +0 -234
  243. package/src/ps/index.js +0 -286
  244. package/src/yarn-reinstall.cjs +0 -49
  245. /package/{bin → binaries}/nodekill +0 -0
  246. /package/{bin → binaries}/nodekill.cmd +0 -0
  247. /package/lib/{binary-collections-config.d.ts → binary-collections-config.d.cts} +0 -0
  248. /package/lib/{git-purge.d.ts → changelog.d.cts} +0 -0
  249. /package/lib/{git-diff.d.cts → npm-run-series.d.cts} +0 -0
  250. /package/lib/{utils.d.ts → utils/index.d.cts} +0 -0
@@ -0,0 +1,103 @@
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 __esm = (fn, res) => function __init() {
8
+ return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
9
+ };
10
+ var __commonJS = (cb, mod) => function __require() {
11
+ return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
12
+ };
13
+ var __copyProps = (to, from, except, desc) => {
14
+ if (from && typeof from === "object" || typeof from === "function") {
15
+ for (let key of __getOwnPropNames(from))
16
+ if (!__hasOwnProp.call(to, key) && key !== except)
17
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
18
+ }
19
+ return to;
20
+ };
21
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
22
+ // If the importer is in node compatibility mode or this is not an ESM
23
+ // file that has been converted to a CommonJS file using a Babel-
24
+ // compatible transform (i.e. "__esModule" has not been set), then set
25
+ // "default" to the CommonJS "module.exports" for node compatibility.
26
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
27
+ mod
28
+ ));
29
+
30
+ // node_modules/tsup/assets/cjs_shims.js
31
+ var init_cjs_shims = __esm({
32
+ "node_modules/tsup/assets/cjs_shims.js"() {
33
+ }
34
+ });
35
+
36
+ // src/submodule-remove.cjs
37
+ var require_submodule_remove = __commonJS({
38
+ "src/submodule-remove.cjs"(exports2, module2) {
39
+ init_cjs_shims();
40
+ var { spawnAsync } = require("cross-spawn");
41
+ var path2 = require("upath");
42
+ var fs2 = require("fs-extra");
43
+ var dotenv = require("dotenv");
44
+ dotenv.config({ path: path2.resolve(process.cwd(), ".env") });
45
+ async function removeSubmodule2(submodulePath2) {
46
+ try {
47
+ await spawnAsync("git", ["submodule", "deinit", "-f", submodulePath2], { stdio: "inherit" });
48
+ } catch (error) {
49
+ console.warn(`Warning: Could not deinitialize submodule "${submodulePath2}". It may not exist.`);
50
+ console.warn(error.message);
51
+ }
52
+ try {
53
+ await spawnAsync("git", ["config", "--remove-section", `submodule.${submodulePath2}`], { stdio: "inherit" });
54
+ } catch (error) {
55
+ console.warn(`Warning: Could not remove git config section for submodule "${submodulePath2}". It may not exist.`);
56
+ console.warn(error.message);
57
+ }
58
+ const gitModulesPath = path2.resolve(".git", "modules", submodulePath2);
59
+ if (fs2.existsSync(gitModulesPath)) {
60
+ fs2.rmSync(gitModulesPath, { recursive: true, force: true });
61
+ console.log(`Removed .git/modules entry for submodule "${submodulePath2}".`);
62
+ } else {
63
+ console.warn(`Warning: The path "${gitModulesPath}" does not exist. Skipping removal of .git/modules entry.`);
64
+ }
65
+ const gitmodulesPath = path2.resolve(".gitmodules");
66
+ if (fs2.existsSync(gitmodulesPath)) {
67
+ let gitmodulesContent = fs2.readFileSync(gitmodulesPath, "utf-8");
68
+ const submoduleSectionRegex = new RegExp(
69
+ `\\[submodule "${submodulePath2.replace(/[-/\\^$*+?.()|[\]{}]/g, "\\$&")}"]([\\s\\S]*?)(?=\\[|$)`,
70
+ "g"
71
+ );
72
+ gitmodulesContent = gitmodulesContent.replace(submoduleSectionRegex, "").trim();
73
+ fs2.writeFileSync(gitmodulesPath, gitmodulesContent);
74
+ console.log(`Removed submodule "${submodulePath2}" from .gitmodules.`);
75
+ } else {
76
+ console.warn(`Warning: The .gitmodules file does not exist. Skipping removal of submodule "${submodulePath2}".`);
77
+ }
78
+ fs2.rmSync(path2.resolve(submodulePath2), { recursive: true, force: true });
79
+ console.log(`Submodule "${submodulePath2}" has been removed.`);
80
+ }
81
+ module2.exports = removeSubmodule2;
82
+ }
83
+ });
84
+
85
+ // src/submodule-remove-cli.js
86
+ init_cjs_shims();
87
+ var import_fs_extra = __toESM(require("fs-extra"), 1);
88
+ var import_minimist = __toESM(require("minimist"), 1);
89
+ var import_upath = __toESM(require("upath"), 1);
90
+ var import_submodule_remove = __toESM(require_submodule_remove(), 1);
91
+ var args = (0, import_minimist.default)(process.argv.slice(2));
92
+ var submodulePath = args._[0];
93
+ if (!submodulePath) {
94
+ console.error("Usage: node submodule-remove.cjs <submodule-path>");
95
+ process.exit(1);
96
+ }
97
+ if (!import_fs_extra.default.existsSync(import_upath.default.resolve(submodulePath))) {
98
+ console.error(`Error: The path "${submodulePath}" does not exist.`);
99
+ process.exit(1);
100
+ }
101
+ (async () => {
102
+ await (0, import_submodule_remove.default)(submodulePath);
103
+ })();
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ const fs_extra_1 = __importDefault(require("fs-extra"));
16
+ const minimist_1 = __importDefault(require("minimist"));
17
+ const upath_1 = __importDefault(require("upath"));
18
+ const submodule_remove_cjs_1 = __importDefault(require("./submodule-remove.cjs"));
19
+ const args = (0, minimist_1.default)(process.argv.slice(2));
20
+ const submodulePath = args._[0];
21
+ if (!submodulePath) {
22
+ console.error("Usage: node submodule-remove.cjs <submodule-path>");
23
+ process.exit(1);
24
+ }
25
+ if (!fs_extra_1.default.existsSync(upath_1.default.resolve(submodulePath))) {
26
+ console.error(`Error: The path "${submodulePath}" does not exist.`);
27
+ process.exit(1);
28
+ }
29
+ (() => __awaiter(void 0, void 0, void 0, function* () {
30
+ yield (0, submodule_remove_cjs_1.default)(submodulePath);
31
+ }))();
@@ -0,0 +1,28 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import {
3
+ require_submodule_remove
4
+ } from "./chunk-6HHJRKFB.mjs";
5
+ import {
6
+ __toESM,
7
+ init_esm_shims
8
+ } from "./chunk-QQ4A6DLD.mjs";
9
+
10
+ // src/submodule-remove-cli.js
11
+ init_esm_shims();
12
+ var import_submodule_remove = __toESM(require_submodule_remove(), 1);
13
+ import fs from "fs-extra";
14
+ import minimist from "minimist";
15
+ import path from "upath";
16
+ var args = minimist(process.argv.slice(2));
17
+ var submodulePath = args._[0];
18
+ if (!submodulePath) {
19
+ console.error("Usage: node submodule-remove.cjs <submodule-path>");
20
+ process.exit(1);
21
+ }
22
+ if (!fs.existsSync(path.resolve(submodulePath))) {
23
+ console.error(`Error: The path "${submodulePath}" does not exist.`);
24
+ process.exit(1);
25
+ }
26
+ (async () => {
27
+ await (0, import_submodule_remove.default)(submodulePath);
28
+ })();
@@ -0,0 +1,43 @@
1
+ // src/submodule-remove.cjs
2
+ var { spawnAsync } = require("cross-spawn");
3
+ var path = require("upath");
4
+ var fs = require("fs-extra");
5
+ var dotenv = require("dotenv");
6
+ dotenv.config({ path: path.resolve(process.cwd(), ".env") });
7
+ async function removeSubmodule(submodulePath) {
8
+ try {
9
+ await spawnAsync("git", ["submodule", "deinit", "-f", submodulePath], { stdio: "inherit" });
10
+ } catch (error) {
11
+ console.warn(`Warning: Could not deinitialize submodule "${submodulePath}". It may not exist.`);
12
+ console.warn(error.message);
13
+ }
14
+ try {
15
+ await spawnAsync("git", ["config", "--remove-section", `submodule.${submodulePath}`], { stdio: "inherit" });
16
+ } catch (error) {
17
+ console.warn(`Warning: Could not remove git config section for submodule "${submodulePath}". It may not exist.`);
18
+ console.warn(error.message);
19
+ }
20
+ const gitModulesPath = path.resolve(".git", "modules", submodulePath);
21
+ if (fs.existsSync(gitModulesPath)) {
22
+ fs.rmSync(gitModulesPath, { recursive: true, force: true });
23
+ console.log(`Removed .git/modules entry for submodule "${submodulePath}".`);
24
+ } else {
25
+ console.warn(`Warning: The path "${gitModulesPath}" does not exist. Skipping removal of .git/modules entry.`);
26
+ }
27
+ const gitmodulesPath = path.resolve(".gitmodules");
28
+ if (fs.existsSync(gitmodulesPath)) {
29
+ let gitmodulesContent = fs.readFileSync(gitmodulesPath, "utf-8");
30
+ const submoduleSectionRegex = new RegExp(
31
+ `\\[submodule "${submodulePath.replace(/[-/\\^$*+?.()|[\]{}]/g, "\\$&")}"]([\\s\\S]*?)(?=\\[|$)`,
32
+ "g"
33
+ );
34
+ gitmodulesContent = gitmodulesContent.replace(submoduleSectionRegex, "").trim();
35
+ fs.writeFileSync(gitmodulesPath, gitmodulesContent);
36
+ console.log(`Removed submodule "${submodulePath}" from .gitmodules.`);
37
+ } else {
38
+ console.warn(`Warning: The .gitmodules file does not exist. Skipping removal of submodule "${submodulePath}".`);
39
+ }
40
+ fs.rmSync(path.resolve(submodulePath), { recursive: true, force: true });
41
+ console.log(`Submodule "${submodulePath}" has been removed.`);
42
+ }
43
+ module.exports = removeSubmodule;
@@ -0,0 +1,2 @@
1
+ export = removeSubmodule;
2
+ declare function removeSubmodule(submodulePath: any): Promise<void>;
@@ -0,0 +1,6 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import {
3
+ require_submodule_remove
4
+ } from "./chunk-6HHJRKFB.mjs";
5
+ import "./chunk-QQ4A6DLD.mjs";
6
+ export default require_submodule_remove();
@@ -0,0 +1,383 @@
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/utils/chatgpt.js
30
+ var chatgpt_exports = {};
31
+ __export(chatgpt_exports, {
32
+ runChatGpt: () => runChatGpt
33
+ });
34
+ module.exports = __toCommonJS(chatgpt_exports);
35
+ var import_fs_extra = __toESM(require("fs-extra"), 1);
36
+ var import_puppeteer_extra = __toESM(require("puppeteer-extra"), 1);
37
+ var import_puppeteer_extra_plugin_stealth = __toESM(require("puppeteer-extra-plugin-stealth"), 1);
38
+ var import_upath = __toESM(require("upath"), 1);
39
+ var COOKIE_DIR = import_upath.default.join(process.cwd(), "tmp", "cookies");
40
+ var DEFAULT_COOKIE_PATH = import_upath.default.join(COOKIE_DIR, "cookies.json");
41
+ import_fs_extra.default.ensureDirSync(COOKIE_DIR);
42
+ async function saveCookies(page, path2 = DEFAULT_COOKIE_PATH) {
43
+ const cookies = await page.cookies();
44
+ import_fs_extra.default.writeFileSync(path2, JSON.stringify(cookies, null, 2));
45
+ }
46
+ function getCookiePathForUrl(url) {
47
+ try {
48
+ const { hostname } = new URL(url);
49
+ return import_upath.default.join(COOKIE_DIR, `cookies_${hostname}.json`);
50
+ } catch {
51
+ return DEFAULT_COOKIE_PATH;
52
+ }
53
+ }
54
+ async function navigatePage(page, url) {
55
+ const cookiePath = getCookiePathForUrl(url);
56
+ const cookies = loadCookies(cookiePath);
57
+ if (cookies) {
58
+ await page.setCookie(...cookies);
59
+ }
60
+ await page.goto(url, { waitUntil: "networkidle0" });
61
+ await page.evaluate(() => {
62
+ window.__domStillUpdating = true;
63
+ if (window.__domObserver) {
64
+ window.__domObserver.disconnect();
65
+ }
66
+ window.__domObserver = new MutationObserver(() => {
67
+ window.__lastDomMutation = Date.now();
68
+ });
69
+ window.__lastDomMutation = Date.now();
70
+ window.__domObserver.observe(document.body, {
71
+ childList: true,
72
+ subtree: true,
73
+ attributes: true,
74
+ characterData: true
75
+ });
76
+ setTimeout(() => {
77
+ window.__domStillUpdating = false;
78
+ window.__domObserver.disconnect();
79
+ }, 3e4);
80
+ });
81
+ const waitForDomIdle = async (idleMs = 1e3, timeout = 1e4) => {
82
+ const start = Date.now();
83
+ while (Date.now() - start < timeout) {
84
+ const lastMutation = await page.evaluate(() => window.__lastDomMutation);
85
+ const idle = Date.now() - lastMutation;
86
+ if (idle >= idleMs) {
87
+ return true;
88
+ }
89
+ await new Promise((r) => setTimeout(r, 200));
90
+ }
91
+ throw new Error("DOM did not stabilize within timeout");
92
+ };
93
+ return { waitForDomIdle };
94
+ }
95
+ function loadCookies(cookieFilePath = DEFAULT_COOKIE_PATH) {
96
+ if (!import_fs_extra.default.existsSync(cookieFilePath)) return null;
97
+ return JSON.parse(import_fs_extra.default.readFileSync(cookieFilePath));
98
+ }
99
+ async function writeQuestion(page, question) {
100
+ const questions = question.split("\n");
101
+ const promptTextarea = await page.waitForSelector("#prompt-textarea", { timeout: 3e4 });
102
+ if (!promptTextarea) {
103
+ console.log(
104
+ "Cannot find the prompt input on the webpage. Please check whether you have access to chat.openai.com without logging in via your browser."
105
+ );
106
+ }
107
+ await page.evaluate(() => {
108
+ document.querySelector("#prompt-textarea").innerHTML = `<p></p>`;
109
+ });
110
+ if (questions.length === 1) {
111
+ await page.type("#prompt-textarea", questions[0], { delay: 100 });
112
+ return;
113
+ }
114
+ for (const q of questions) {
115
+ await page.type("#prompt-textarea", q, { delay: 100 });
116
+ if (q !== questions[questions.length - 1]) {
117
+ await page.keyboard.down("Shift");
118
+ await page.keyboard.press("Enter");
119
+ await page.keyboard.up("Shift");
120
+ }
121
+ }
122
+ }
123
+ async function clickSubmitButton(page) {
124
+ try {
125
+ const fruitjuiceSendButton = await page.evaluate(() => {
126
+ return document.querySelector('[data-testid="fruitjuice-send-button"]') !== null;
127
+ });
128
+ const sendButton = await page.evaluate(() => {
129
+ return document.querySelector('[data-testid="send-button"]') !== null;
130
+ });
131
+ if (fruitjuiceSendButton) {
132
+ await page.click('[data-testid="fruitjuice-send-button"]');
133
+ } else if (sendButton) {
134
+ await page.click('[data-testid="send-button"]');
135
+ } else {
136
+ console.log("Neither send button is present");
137
+ }
138
+ } catch (e) {
139
+ console.log(`Failed to click the send button: ${e}`);
140
+ }
141
+ }
142
+ var lastMessageId = null;
143
+ var messageCount = 0;
144
+ var is_streaming = false;
145
+ function sleep(ms) {
146
+ return new Promise((resolve) => setTimeout(resolve, ms));
147
+ }
148
+ async function waitForInitialResponse(page, timeout = 3e4) {
149
+ const startTime = Date.now();
150
+ while (Date.now() - startTime < timeout) {
151
+ const assistantMessages = await page.$$('[data-message-author-role="assistant"]');
152
+ const currentMessageCount = assistantMessages.length;
153
+ if (currentMessageCount > messageCount) {
154
+ const lastMessage = assistantMessages[assistantMessages.length - 1];
155
+ const isThinking = await lastMessage.$(".result-thinking");
156
+ if (!isThinking) {
157
+ lastMessageId = await page.evaluate((element) => element.getAttribute("data-message-id"), lastMessage);
158
+ messageCount = currentMessageCount;
159
+ return;
160
+ }
161
+ }
162
+ await sleep(100);
163
+ }
164
+ console.log("Timed out waiting for the initial response.");
165
+ }
166
+ async function handleStreamingResponse(page, outputFile = import_upath.default.join(process.cwd(), "tmp/response.txt")) {
167
+ let previousText = "";
168
+ let completeResponse = "";
169
+ let newContentDetected = false;
170
+ while (!newContentDetected) {
171
+ const assistantMessages = await page.$$('[data-message-author-role="assistant"]');
172
+ if (assistantMessages.length > 0) {
173
+ const lastMessage = assistantMessages[assistantMessages.length - 1];
174
+ const currentMessageId = await page.evaluate((element) => element.getAttribute("data-message-id"), lastMessage);
175
+ if (currentMessageId === lastMessageId) {
176
+ const currentText = await page.evaluate((element) => element.textContent, lastMessage);
177
+ console.log(`Current text: ${currentText}`);
178
+ if (currentText !== previousText) {
179
+ if (is_streaming) {
180
+ process.stdout.write(currentText.slice(previousText.length));
181
+ } else {
182
+ completeResponse += currentText.slice(previousText.length);
183
+ }
184
+ }
185
+ previousText = currentText;
186
+ const isStreaming = await lastMessage.$(".result-streaming");
187
+ if (!isStreaming) {
188
+ newContentDetected = true;
189
+ }
190
+ } else {
191
+ lastMessageId = currentMessageId;
192
+ }
193
+ }
194
+ await sleep(100);
195
+ }
196
+ if (!is_streaming) {
197
+ console.log(completeResponse.trim());
198
+ console.log("\n\n");
199
+ import_fs_extra.default.ensureDirSync(import_upath.default.dirname(outputFile));
200
+ import_fs_extra.default.writeFileSync(outputFile, completeResponse.trim());
201
+ console.log(`Response saved to ${outputFile}`);
202
+ }
203
+ }
204
+ async function isLoggedIn(page) {
205
+ const result = await page.evaluate(() => {
206
+ const loginButton = document.querySelector('[data-testid="login-button"]');
207
+ return !(loginButton && loginButton.offsetParent !== null);
208
+ });
209
+ return result === true;
210
+ }
211
+ async function createBrowser(browserOptions = {}) {
212
+ const defaultOptions = {
213
+ headless: false,
214
+ userDataDir: import_upath.default.join(process.cwd(), "tmp/puppeteer-profile"),
215
+ // Windows-specific options to handle browser launch issues
216
+ args: [
217
+ "--no-sandbox",
218
+ "--disable-setuid-sandbox",
219
+ "--disable-dev-shm-usage",
220
+ "--disable-accelerated-2d-canvas",
221
+ "--no-first-run",
222
+ "--no-zygote",
223
+ "--disable-gpu",
224
+ "--disable-background-timer-throttling",
225
+ "--disable-backgrounding-occluded-windows",
226
+ "--disable-renderer-backgrounding"
227
+ ],
228
+ ignoreDefaultArgs: ["--disable-extensions"],
229
+ ...process.platform === "win32" && {
230
+ // Additional Windows-specific options
231
+ executablePath: void 0
232
+ // Let Puppeteer find Chrome automatically
233
+ }
234
+ };
235
+ try {
236
+ return await import_puppeteer_extra.default.use((0, import_puppeteer_extra_plugin_stealth.default)()).launch({ ...defaultOptions, ...browserOptions });
237
+ } catch (_error) {
238
+ console.error("Failed to launch browser with default options. Trying fallback options...");
239
+ try {
240
+ return await import_puppeteer_extra.default.use((0, import_puppeteer_extra_plugin_stealth.default)()).launch({
241
+ headless: browserOptions.headless || false,
242
+ args: ["--no-sandbox", "--disable-setuid-sandbox"],
243
+ ignoreDefaultArgs: false,
244
+ ...browserOptions
245
+ });
246
+ } catch (fallbackError) {
247
+ console.error("Browser launch failed completely. Common solutions:");
248
+ console.error("1. Install Google Chrome if not installed");
249
+ console.error("2. Update Node.js to the latest version");
250
+ console.error("3. Try running: npm install puppeteer --force");
251
+ console.error("4. Check if antivirus is blocking browser launch");
252
+ throw new Error(`Browser launch failed: ${fallbackError.message}`);
253
+ }
254
+ }
255
+ }
256
+ async function loginToChatGpt() {
257
+ const browser = await createBrowser({ headless: false });
258
+ const page = (await browser.pages()).length > 0 ? (await browser.pages())[0] : await browser.newPage();
259
+ const url = "https://chat.openai.com";
260
+ const navigate = await navigatePage(page, url);
261
+ await navigate.waitForDomIdle(2e3, 1e4);
262
+ const loginButtonExists = await page.evaluate(() => {
263
+ return document.querySelector('[data-testid="login-button"]') !== null;
264
+ });
265
+ if (loginButtonExists) {
266
+ console.log("Login button found, clicking to log in...");
267
+ await page.click('[data-testid="login-button"]');
268
+ await page.waitForNavigation({ waitUntil: "networkidle0" });
269
+ console.log("Login process completed.");
270
+ } else {
271
+ console.log("No login required - user appears to be already logged in.");
272
+ }
273
+ }
274
+ async function runChatGpt(chatgptOptions = {}) {
275
+ const headless = chatgptOptions.headless !== void 0 ? chatgptOptions.headless : true;
276
+ const questionFile = chatgptOptions.questionFile;
277
+ let question = chatgptOptions.question;
278
+ const responseFile = chatgptOptions.responseFile || import_upath.default.join(process.cwd(), "tmp", "response.txt");
279
+ const noInputProvided = !question && !questionFile;
280
+ const questionIsEmpty = question && question.trim().length === 0;
281
+ const questionFileIsEmpty = questionFile && questionFile.trim().length === 0;
282
+ if (noInputProvided || questionIsEmpty || questionFileIsEmpty) {
283
+ throw new Error("You must provide a question or a question file.");
284
+ }
285
+ let browser;
286
+ try {
287
+ browser = await createBrowser({ headless });
288
+ } catch (error) {
289
+ console.error("Error running ChatGPT:", error);
290
+ console.error("\nTroubleshooting steps:");
291
+ console.error("1. Make sure Google Chrome is installed");
292
+ console.error("2. Try running: yarn add puppeteer --force");
293
+ console.error("3. Check if your antivirus is blocking the browser");
294
+ console.error("4. Close any running Chrome instances and try again");
295
+ throw error;
296
+ }
297
+ const page = (await browser.pages()).length > 0 ? (await browser.pages())[0] : await browser.newPage();
298
+ try {
299
+ const url = "https://chat.openai.com";
300
+ const navigate = await navigatePage(page, url);
301
+ await navigate.waitForDomIdle(2e3, 15e3);
302
+ try {
303
+ const tempChatButton = await page.$('button[aria-label="Turn on temporary chat"]');
304
+ if (tempChatButton) {
305
+ await page.evaluate((el) => el.click(), tempChatButton);
306
+ console.log("Successfully clicked temporary chat button");
307
+ await navigate.waitForDomIdle(1e3, 1e4);
308
+ } else {
309
+ console.log("Temporary chat button not found, proceeding without it.");
310
+ }
311
+ } catch (error) {
312
+ console.log(`Failed to click temporary chat button: ${error.message}`);
313
+ }
314
+ if (question) {
315
+ await writeQuestion(page, question);
316
+ await clickSubmitButton(page);
317
+ await navigate.waitForDomIdle(1e3, 3e4);
318
+ await waitForInitialResponse(page);
319
+ await handleStreamingResponse(page, responseFile);
320
+ await saveCookies(page, getCookiePathForUrl(url));
321
+ } else if (questionFile) {
322
+ await navigate.waitForDomIdle(2e3, 1e4);
323
+ const isUserLoggedIn = await isLoggedIn(page);
324
+ console.log(`Login status: ${isUserLoggedIn ? "Logged in" : "Not logged in"}`);
325
+ if (!isUserLoggedIn) {
326
+ console.log(
327
+ "Not logged in. Please log in to ChatGPT in the browser window, then close it and run the command again."
328
+ );
329
+ return loginToChatGpt();
330
+ }
331
+ const plusButtonExists = await page.evaluate(() => {
332
+ const button = document.querySelector('[data-testid="composer-plus-btn"]');
333
+ return button !== null;
334
+ });
335
+ if (plusButtonExists) {
336
+ await page.click('[data-testid="composer-plus-btn"]');
337
+ await sleep(500);
338
+ const menuItems = await page.$$('[role="menuitem"]');
339
+ let clicked = false;
340
+ for (const item of menuItems) {
341
+ const text = await page.evaluate((el) => el.innerText, item);
342
+ if (text && text.includes("Add photos") && text.includes("files")) {
343
+ await item.hover();
344
+ clicked = true;
345
+ break;
346
+ }
347
+ }
348
+ if (!clicked) {
349
+ console.log('Could not find the "Add photos & files" menu item.');
350
+ return;
351
+ }
352
+ try {
353
+ await sleep(1e3);
354
+ const fileInput = await page.waitForSelector('input[type="file"]', { timeout: 1e4 });
355
+ if (fileInput) {
356
+ console.log(`Uploading file: ${questionFile}`);
357
+ await fileInput.uploadFile(questionFile);
358
+ await navigate.waitForDomIdle(2e3, 15e3);
359
+ console.log("File uploaded successfully");
360
+ await clickSubmitButton(page);
361
+ await navigate.waitForDomIdle(1e3, 3e4);
362
+ await waitForInitialResponse(page);
363
+ await handleStreamingResponse(page, responseFile);
364
+ } else {
365
+ console.log("Could not find file input element");
366
+ }
367
+ } catch (error) {
368
+ console.log(`Error uploading file: ${error.message}`);
369
+ }
370
+ } else {
371
+ console.log('Could not find the [data-testid="composer-plus-btn"] button.');
372
+ }
373
+ }
374
+ } finally {
375
+ if (browser) {
376
+ await browser.close();
377
+ }
378
+ }
379
+ }
380
+ // Annotate the CommonJS export names for ESM import in node:
381
+ 0 && (module.exports = {
382
+ runChatGpt
383
+ });
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Automates ChatGPT interactions using Puppeteer. Can send text questions or upload files to ChatGPT.
3
+ *
4
+ * @param {Object} [chatgptOptions={}] - Configuration options for ChatGPT automation.
5
+ * @param {boolean} [chatgptOptions.headless=true] - Whether to run the browser in headless mode.
6
+ * @param {string} [chatgptOptions.question] - Text question to send to ChatGPT. Either question or questionFile must be provided.
7
+ * @param {string} [chatgptOptions.questionFile] - Path to a file to upload to ChatGPT. Either question or questionFile must be provided.
8
+ * @param {string} [chatgptOptions.responseFile] - Path to save the response. Defaults to tmp/response.txt.
9
+ * @returns {Promise<void>} Resolves when the ChatGPT interaction is complete. Responses are logged to console and saved to specified file.
10
+ * @throws {Error} Throws an error if neither question nor questionFile is provided.
11
+ *
12
+ * @example
13
+ * // Send a text question
14
+ * await runChatGpt({
15
+ * headless: false,
16
+ * question: "What is the capital of France?"
17
+ * });
18
+ *
19
+ * @example
20
+ * // Upload a file for analysis
21
+ * await runChatGpt({
22
+ * headless: false,
23
+ * questionFile: "./path/to/document.txt"
24
+ * });
25
+ */
26
+ export function runChatGpt(chatgptOptions?: {
27
+ headless?: boolean;
28
+ question?: string;
29
+ questionFile?: string;
30
+ responseFile?: string;
31
+ }): Promise<void>;