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.
- package/.opencode/package.json +5 -0
- package/.puppeterrc.cjs +25 -0
- package/binaries/binary-executor.cjs +138 -3
- package/binaries/clean-nodemodule.cjs +138 -3
- package/binaries/clean-nodemodules.cjs +138 -3
- package/binaries/dev.cjs +138 -3
- package/binaries/empty.cjs +138 -3
- package/binaries/git-reduce-size.cjs +138 -3
- package/binaries/javakill.cjs +138 -3
- package/binaries/kill-night-crows.bat +7 -0
- package/binaries/kill-night-crows.ps1 +172 -0
- package/binaries/kill-process.cjs +138 -3
- package/binaries/nodekill.cjs +138 -3
- package/binaries/prod.cjs +138 -3
- package/binaries/py +111 -0
- package/binaries/py.cjs +178 -0
- package/binaries/py.cmd +49 -0
- package/binaries/rmfind.cjs +138 -3
- package/binaries/rmx +15 -1
- package/binaries/rmx.cjs +138 -3
- package/binaries/rmx.cmd +12 -0
- package/binaries/submodule-token.cjs +138 -3
- package/binaries/test-cjs +18 -0
- package/binaries/test-cjs.cjs +178 -0
- package/binaries/test-cjs.cmd +26 -0
- package/binaries/test-esm +16 -0
- package/binaries/test-esm.cjs +178 -0
- package/binaries/test-esm.cmd +23 -0
- package/binaries/yarn-clean +32 -0
- package/binaries/yarn-clean.cjs +178 -0
- package/binaries/yarn-clean.cmd +30 -0
- package/binaries/yarn-clean.py +166 -0
- package/binaries/yc +110 -0
- package/binaries/yc.cjs +178 -0
- package/lib/binary-collections/config.cjs +126 -0
- package/lib/binary-collections/config.mjs +7 -0
- package/lib/binary-collections/executeScript.cjs +19 -0
- package/lib/binary-collections/executeScript.d.cts +12 -0
- package/lib/binary-collections/executeScript.mjs +6 -0
- package/lib/binary-collections/findScript.cjs +284 -0
- package/lib/binary-collections/findScript.d.cts +12 -0
- package/lib/binary-collections/findScript.mjs +7 -0
- package/lib/binary-collections/listScript.cjs +266 -0
- package/lib/binary-collections/listScript.d.cts +19 -0
- package/lib/binary-collections/listScript.mjs +7 -0
- package/lib/binary-collections.cjs +342 -194
- package/lib/binary-collections.mjs +22 -268
- package/lib/changelog.cjs +61 -13
- package/lib/changelog.mjs +1 -1
- package/lib/{chunk-E6FDDAOO.mjs → chunk-2LSRSEXF.mjs} +2 -2
- package/lib/chunk-34IQDTLZ.mjs +27 -0
- package/lib/chunk-3HFFECCI.mjs +27 -0
- package/lib/{chunk-V3N3JEUF.mjs → chunk-5RTXZVCW.mjs} +60 -13
- package/lib/chunk-66KDU4TX.mjs +268 -0
- package/lib/chunk-6PU7BAHB.mjs +61 -0
- package/lib/{chunk-6HHJRKFB.mjs → chunk-BZWVHODJ.mjs} +4 -1
- package/lib/chunk-C6D2TTYU.mjs +32 -0
- package/lib/chunk-FB2WKVJD.mjs +158 -0
- package/lib/{chunk-66PAU5PS.mjs → chunk-G5UUEWUO.mjs} +9 -5
- package/lib/{chunk-HO6GHCOB.mjs → chunk-GAGABICI.mjs} +198 -63
- package/lib/chunk-H44UWUFY.mjs +105 -0
- package/lib/chunk-NCZPTKDV.mjs +79 -0
- package/lib/chunk-NGFK3EYW.mjs +28 -0
- package/lib/chunk-NVEG3LEZ.mjs +143 -0
- package/lib/chunk-OGXVGBRI.mjs +29 -0
- package/lib/chunk-OXV52GD5.mjs +62 -0
- package/lib/{chunk-PDSXF5HY.mjs → chunk-PDN26I7O.mjs} +1 -0
- package/lib/chunk-PXBMHE7O.mjs +35 -0
- package/lib/chunk-R5FJOR63.mjs +47 -0
- package/lib/chunk-SPTECFE5.mjs +180 -0
- package/lib/chunk-UXCFNAR6.mjs +55 -0
- package/lib/chunk-V2IBPCEV.mjs +39 -0
- package/lib/chunk-XPJGCDOD.mjs +14 -0
- package/lib/{chunk-AI4CVPJ7.mjs → chunk-ZDMWBSYF.mjs} +4 -4
- package/lib/chunk-ZOWVMII3.mjs +228 -0
- package/lib/clean-github-actions-caches-cli.cjs +465 -0
- package/lib/clean-github-actions-caches-cli.d.cts +1 -0
- package/lib/clean-github-actions-caches-cli.mjs +56 -0
- package/lib/clean-github-actions-caches.cjs +152 -160
- package/lib/clean-github-actions-caches.d.cts +15 -1
- package/lib/clean-github-actions-caches.mjs +4 -130
- package/lib/cross-env/command.cjs +63 -0
- package/lib/cross-env/command.d.ts +8 -0
- package/lib/cross-env/command.js +45 -0
- package/lib/cross-env/command.mjs +9 -0
- package/lib/cross-env/index.cjs +178 -0
- package/lib/cross-env/index.d.ts +8 -0
- package/lib/cross-env/index.js +102 -0
- package/lib/cross-env/index.mjs +101 -0
- package/lib/cross-env/variable.cjs +60 -0
- package/lib/cross-env/variable.d.ts +7 -0
- package/lib/cross-env/variable.js +59 -0
- package/lib/cross-env/variable.mjs +9 -0
- package/lib/del-gradle.cjs +61 -13
- package/lib/del-gradle.js +9 -8
- package/lib/del-gradle.mjs +1 -1
- package/lib/del-node-modules.cjs +143 -148
- package/lib/del-node-modules.js +210 -14
- package/lib/del-node-modules.mjs +148 -17
- package/lib/del-ps.cjs +61 -13
- package/lib/del-ps.js +9 -8
- package/lib/del-ps.mjs +1 -1
- package/lib/del-yarn-caches.cjs +61 -13
- package/lib/del-yarn-caches.js +2 -2
- package/lib/del-yarn-caches.mjs +1 -1
- package/lib/file/copy-cli.cjs +92 -0
- package/lib/file/copy-cli.d.mts +1 -0
- package/lib/file/copy-cli.mjs +55 -0
- package/lib/file/copy.cjs +56 -0
- package/lib/file/copy.d.mts +1 -0
- package/lib/file/copy.mjs +8 -0
- package/lib/file/move-cli.cjs +91 -0
- package/lib/file/move-cli.d.mts +1 -0
- package/lib/file/move-cli.mjs +55 -0
- package/lib/file/move.cjs +55 -0
- package/lib/file/move.d.mts +1 -0
- package/lib/file/move.mjs +8 -0
- package/lib/find-node-modules-cli.js +2 -1
- package/lib/free-chatgpt.cjs +259 -47
- package/lib/free-chatgpt.js +10 -10
- package/lib/free-chatgpt.mjs +2 -2
- package/lib/git/gitattributes.cjs +1 -0
- package/lib/git/gitattributes.d.cts +7 -2
- package/lib/git/gitattributes.mjs +1 -1
- package/lib/git/line-endings.cjs +2 -1
- package/lib/git/line-endings.mjs +2 -2
- package/lib/git/undo-commit-cli.cjs +110 -0
- package/lib/git/undo-commit-cli.d.ts +1 -0
- package/lib/git/undo-commit-cli.js +4 -0
- package/lib/git/undo-commit-cli.mjs +14 -0
- package/lib/git/undo-commit.cjs +81 -0
- package/lib/git/undo-commit.d.cts +1 -0
- package/lib/git/undo-commit.mjs +7 -0
- package/lib/git/undo-staged-cli.cjs +110 -0
- package/lib/git/undo-staged-cli.d.ts +1 -0
- package/lib/git/undo-staged-cli.js +4 -0
- package/lib/git/undo-staged-cli.mjs +14 -0
- package/lib/git/undo-staged.cjs +81 -0
- package/lib/git/undo-staged.d.cts +1 -0
- package/lib/git/undo-staged.mjs +7 -0
- package/lib/git/user-config.cjs +61 -14
- package/lib/git/user-config.mjs +2 -2
- package/lib/git-diff-cli.cjs +427 -75
- package/lib/git-diff-cli.d.ts +1 -0
- package/lib/git-diff-cli.js +1 -0
- package/lib/git-diff-cli.mjs +6 -4
- package/lib/git-diff.cjs +426 -75
- package/lib/git-diff.d.ts +2 -1
- package/lib/git-diff.js +91 -34
- package/lib/git-diff.mjs +5 -4
- package/lib/git-fix.cjs +64 -16
- package/lib/git-fix.mjs +10 -10
- package/lib/git-purge.cjs +61 -13
- package/lib/git-purge.mjs +1 -1
- package/lib/index.d.ts +1 -1
- package/lib/kill-night-crows.cjs +87 -0
- package/lib/kill-night-crows.d.mts +1 -0
- package/lib/kill-night-crows.mjs +65 -0
- package/lib/node-cache-cleaner/npm.cjs +65 -0
- package/lib/node-cache-cleaner/npm.d.ts +2 -0
- package/lib/node-cache-cleaner/npm.js +41 -0
- package/lib/node-cache-cleaner/npm.mjs +10 -0
- package/lib/node-cache-cleaner/npx.cjs +89 -0
- package/lib/node-cache-cleaner/npx.d.ts +4 -0
- package/lib/node-cache-cleaner/npx.js +82 -0
- package/lib/{ps/index.d.mjs → node-cache-cleaner/npx.mjs} +6 -5
- package/lib/node-cache-cleaner/yarn.cjs +73 -0
- package/lib/node-cache-cleaner/yarn.d.ts +2 -0
- package/lib/node-cache-cleaner/yarn.js +62 -0
- package/lib/node-cache-cleaner/yarn.mjs +10 -0
- package/lib/node-cache-cleaner-cli.cjs +182 -0
- package/lib/node-cache-cleaner-cli.d.ts +2 -0
- package/lib/node-cache-cleaner-cli.js +60 -0
- package/lib/node-cache-cleaner-cli.mjs +56 -0
- package/lib/node-executor.cjs +91 -0
- package/lib/node-executor.d.cts +2 -0
- package/lib/node-executor.mjs +103 -0
- package/lib/npm-run-series.cjs +79 -39
- package/lib/npm-run-series.mjs +20 -6
- package/lib/package-resolutions-updater-cli.cjs +645 -0
- package/lib/package-resolutions-updater-cli.d.mts +1 -0
- package/lib/package-resolutions-updater-cli.mjs +102 -0
- package/lib/package-resolutions-updater.cjs +259 -133
- package/lib/package-resolutions-updater.d.mts +51 -1
- package/lib/package-resolutions-updater.mjs +18 -294
- package/lib/php-cs-fixer-staged.cjs +105 -0
- package/lib/php-cs-fixer-staged.d.cts +2 -0
- package/lib/php-cs-fixer-staged.mjs +117 -0
- package/lib/print-directory-tree.cjs +62 -14
- package/lib/print-directory-tree.mjs +2 -2
- package/lib/ps/connected-domain.d.ts +1 -1
- package/lib/ps/connected-domain.js +10 -10
- package/lib/ps/index.cjs +1 -1
- package/lib/ps/index.mjs +177 -171
- package/lib/ps/isWin.js +1 -1
- package/lib/ps/table-parser.js +6 -6
- package/lib/remove-module.cjs +61 -13
- package/lib/remove-module.mjs +1 -1
- package/lib/rm-node-module-cli.cjs +222 -0
- package/lib/rm-node-module-cli.d.cts +1 -0
- package/lib/rm-node-module-cli.mjs +89 -0
- package/lib/rm-node-modules.cjs +127 -0
- package/lib/rm-node-modules.d.cts +35 -0
- package/lib/{binary-collections-config.mjs → rm-node-modules.mjs} +3 -3
- package/lib/rmpath.cjs +63 -15
- package/lib/rmpath.mjs +2 -2
- package/lib/submodule-install.cjs +107 -47
- package/lib/submodule-install.mjs +48 -35
- package/lib/submodule-remove-cli.cjs +6 -3
- package/lib/submodule-remove-cli.js +3 -3
- package/lib/submodule-remove-cli.mjs +2 -3
- package/lib/submodule-remove.cjs +4 -1
- package/lib/submodule-remove.mjs +1 -1
- package/lib/utils/chatgpt.cjs +198 -34
- package/lib/utils/chatgpt.js +260 -93
- package/lib/utils/chatgpt.mjs +1 -1
- package/lib/utils/findEnvFiles.cjs +89 -0
- package/lib/utils/findEnvFiles.d.cts +19 -0
- package/lib/utils/findEnvFiles.mjs +6 -0
- package/lib/utils/findWorkspaceRoot.cjs +70 -0
- package/lib/utils/findWorkspaceRoot.d.ts +9 -0
- package/lib/utils/findWorkspaceRoot.js +57 -0
- package/lib/utils/findWorkspaceRoot.mjs +40 -0
- package/lib/utils/index.cjs +60 -13
- package/lib/utils/index.mjs +1 -1
- package/lib/utils/isGithubTokenValid.cjs +64 -0
- package/lib/utils/isGithubTokenValid.d.ts +7 -0
- package/lib/utils/isGithubTokenValid.js +48 -0
- package/lib/utils/isGithubTokenValid.mjs +36 -0
- package/lib/{ps/index.d.cjs → utils/isWindows.cjs} +17 -3
- package/lib/utils/isWindows.d.ts +5 -0
- package/lib/utils/isWindows.js +10 -0
- package/lib/utils/isWindows.mjs +8 -0
- package/lib/utils/runBash.cjs +53 -0
- package/lib/utils/runBash.d.cts +12 -0
- package/lib/utils/runBash.mjs +66 -0
- package/lib/yarn-per-branch-lock-installer.cjs +97 -0
- package/lib/yarn-per-branch-lock-installer.d.cts +2 -0
- package/lib/yarn-per-branch-lock-installer.mjs +109 -0
- package/lib/yarn-reinstall.cjs +61 -13
- package/lib/yarn-reinstall.mjs +1 -1
- package/package.json +133 -110
- package/readme.html +784 -0
- package/readme.md +116 -229
- package/releases/readme.md +1 -1
- package/requirements.txt +1 -0
- package/test/README.md +2 -2
- package/test-project/package.json +8 -2
- package/test-project/workspaces/workspace-a/package.json +135 -0
- package/test-project/workspaces/workspace-a/readme.md +20 -0
- package/test-project/workspaces/workspace-a/release/readme.md +42 -0
- package/test-project/workspaces/workspace-a/test/demo/package.json +25 -0
- package/test-project/workspaces/workspace-a/test/readme.md +12 -0
- package/test-project/workspaces/workspace-b/package.json +139 -0
- package/test-project/workspaces/workspace-b/readme.md +94 -0
- package/test-project/workspaces/workspace-b/requirements.txt +1 -0
- package/test-project/workspaces/workspace-b/test/sample-project/package.json +7 -0
- package/test-project/workspaces/workspace-b/themes/hexo-theme-flowbite/package.json +96 -0
- package/test-project/workspaces/workspace-b/themes/hexo-theme-flowbite/readme.md +156 -0
- package/tmp/rm-node-modules-test-project/package.json +17 -0
- package/tmp/rm-node-modules-test-project/packages/workspace-a/package.json +16 -0
- package/tmp/rm-node-modules-test-project/packages/workspace-b/package.json +16 -0
- package/tmp/test-repo/README.md +2 -35
- package/tmp/test-repo/package.json +13 -3
- package/docs-src/clean-github-actions-caches.md +0 -26
- package/docs-src/free-chatgpt.md +0 -26
- package/lib/binary-collections-config.cjs +0 -15
- package/lib/chunk-4EWQC6GZ.mjs +0 -382
- package/lib/chunk-4ZI7BQKQ.mjs +0 -381
- package/lib/chunk-5J2BEPY5.mjs +0 -83
- package/lib/chunk-AGZYRDC2.mjs +0 -323
- package/lib/chunk-BDCHCWHD.mjs +0 -136
- package/lib/chunk-BEZKJ25G.mjs +0 -140
- package/lib/chunk-DI5MDPSN.mjs +0 -386
- package/lib/chunk-GJTGHXRA.mjs +0 -356
- package/lib/chunk-HMRMTYZM.mjs +0 -40
- package/lib/chunk-HN52G2YL.mjs +0 -305
- package/lib/chunk-LEM5OMRP.mjs +0 -384
- package/lib/chunk-O6SWBEOQ.mjs +0 -81
- package/lib/chunk-RCP7DHVY.mjs +0 -190
- package/lib/chunk-SBNDSKG5.mjs +0 -136
- package/lib/chunk-U6SO4QEV.mjs +0 -320
- package/lib/chunk-XD6BJK6Q.mjs +0 -351
- package/lib/chunk-YXSFGA2D.mjs +0 -383
- package/lib/git/gitattributes.d.ts +0 -33
- package/lib/git/gitattributes.js +0 -223
- package/lib/ps/index.d.ts +0 -2
- package/lib/ps/index.js +0 -253
- package/tmp/typedoc/readme.md +0 -320
- /package/lib/{binary-collections-config.d.cts → binary-collections/config.d.cts} +0 -0
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
2
|
import {
|
|
3
|
-
__filename,
|
|
4
|
-
__require,
|
|
5
3
|
init_esm_shims
|
|
6
4
|
} from "./chunk-QQ4A6DLD.mjs";
|
|
7
5
|
|
|
@@ -11,10 +9,19 @@ import fs from "fs-extra";
|
|
|
11
9
|
import puppeteer from "puppeteer-extra";
|
|
12
10
|
import StealthPlugin from "puppeteer-extra-plugin-stealth";
|
|
13
11
|
import path from "upath";
|
|
14
|
-
import { pathToFileURL } from "url";
|
|
15
12
|
var COOKIE_DIR = path.join(process.cwd(), "tmp", "cookies");
|
|
16
13
|
var DEFAULT_COOKIE_PATH = path.join(COOKIE_DIR, "cookies.json");
|
|
14
|
+
var NAVIGATION_TIMEOUT_MS = 9e4;
|
|
15
|
+
var NETWORK_IDLE_TIMEOUT_MS = 15e3;
|
|
16
|
+
var MAX_INLINE_QUESTION_FILE_BYTES = 2 * 1024;
|
|
17
17
|
fs.ensureDirSync(COOKIE_DIR);
|
|
18
|
+
async function gotoWithFallback(page, url) {
|
|
19
|
+
await page.goto(url, { waitUntil: "domcontentloaded", timeout: NAVIGATION_TIMEOUT_MS });
|
|
20
|
+
try {
|
|
21
|
+
await page.waitForNetworkIdle({ idleTime: 1e3, timeout: NETWORK_IDLE_TIMEOUT_MS });
|
|
22
|
+
} catch {
|
|
23
|
+
}
|
|
24
|
+
}
|
|
18
25
|
async function saveCookies(page, path2 = DEFAULT_COOKIE_PATH) {
|
|
19
26
|
const cookies = await page.cookies();
|
|
20
27
|
fs.writeFileSync(path2, JSON.stringify(cookies, null, 2));
|
|
@@ -33,7 +40,7 @@ async function navigatePage(page, url) {
|
|
|
33
40
|
if (cookies) {
|
|
34
41
|
await page.setCookie(...cookies);
|
|
35
42
|
}
|
|
36
|
-
await page
|
|
43
|
+
await gotoWithFallback(page, url);
|
|
37
44
|
await page.evaluate(() => {
|
|
38
45
|
window.__domStillUpdating = true;
|
|
39
46
|
if (window.__domObserver) {
|
|
@@ -73,46 +80,157 @@ function loadCookies(cookieFilePath = DEFAULT_COOKIE_PATH) {
|
|
|
73
80
|
return JSON.parse(fs.readFileSync(cookieFilePath));
|
|
74
81
|
}
|
|
75
82
|
async function writeQuestion(page, question) {
|
|
76
|
-
const questions = question.split("\n");
|
|
77
83
|
const promptTextarea = await page.waitForSelector("#prompt-textarea", { timeout: 3e4 });
|
|
78
84
|
if (!promptTextarea) {
|
|
79
85
|
console.log(
|
|
80
86
|
"Cannot find the prompt input on the webpage. Please check whether you have access to chat.openai.com without logging in via your browser."
|
|
81
87
|
);
|
|
82
|
-
}
|
|
83
|
-
await page.evaluate(() => {
|
|
84
|
-
document.querySelector("#prompt-textarea").innerHTML = `<p></p>`;
|
|
85
|
-
});
|
|
86
|
-
if (questions.length === 1) {
|
|
87
|
-
await page.type("#prompt-textarea", questions[0], { delay: 100 });
|
|
88
88
|
return;
|
|
89
89
|
}
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
if (
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
90
|
+
await page.evaluate((text) => {
|
|
91
|
+
const promptEl = document.querySelector("#prompt-textarea");
|
|
92
|
+
if (!promptEl) {
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
promptEl.focus();
|
|
96
|
+
promptEl.innerHTML = "";
|
|
97
|
+
const lines = String(text).split("\n");
|
|
98
|
+
for (const line of lines) {
|
|
99
|
+
const p = document.createElement("p");
|
|
100
|
+
p.textContent = line;
|
|
101
|
+
promptEl.appendChild(p);
|
|
96
102
|
}
|
|
103
|
+
promptEl.dispatchEvent(new InputEvent("beforeinput", { bubbles: true, inputType: "insertFromPaste", data: text }));
|
|
104
|
+
promptEl.dispatchEvent(new InputEvent("input", { bubbles: true, inputType: "insertFromPaste", data: text }));
|
|
105
|
+
promptEl.dispatchEvent(new Event("change", { bubbles: true }));
|
|
106
|
+
}, question);
|
|
107
|
+
const hasPromptText = await page.evaluate(() => {
|
|
108
|
+
const promptEl = document.querySelector("#prompt-textarea");
|
|
109
|
+
return Boolean(promptEl && promptEl.textContent && promptEl.textContent.trim().length > 0);
|
|
110
|
+
});
|
|
111
|
+
if (!hasPromptText) {
|
|
112
|
+
console.log("Prompt state not updated by DOM injection. Falling back to keyboard insertText.");
|
|
113
|
+
await promptTextarea.click({ clickCount: 1 });
|
|
114
|
+
await page.keyboard.down("Control");
|
|
115
|
+
await page.keyboard.press("KeyA");
|
|
116
|
+
await page.keyboard.up("Control");
|
|
117
|
+
await page.keyboard.insertText(question);
|
|
97
118
|
}
|
|
98
119
|
}
|
|
99
120
|
async function clickSubmitButton(page) {
|
|
121
|
+
console.log("Attempting to click the submit button...");
|
|
100
122
|
try {
|
|
101
|
-
const
|
|
102
|
-
|
|
123
|
+
const userMessageCountBefore = await page.$$eval(
|
|
124
|
+
'[data-message-author-role="user"]',
|
|
125
|
+
(elements) => elements.length
|
|
126
|
+
);
|
|
127
|
+
const waitForSubmit = async (timeout = 5e3) => {
|
|
128
|
+
try {
|
|
129
|
+
await page.waitForFunction(
|
|
130
|
+
(previousCount) => {
|
|
131
|
+
const currentCount = document.querySelectorAll('[data-message-author-role="user"]').length;
|
|
132
|
+
return currentCount > previousCount;
|
|
133
|
+
},
|
|
134
|
+
{ timeout },
|
|
135
|
+
userMessageCountBefore
|
|
136
|
+
);
|
|
137
|
+
return true;
|
|
138
|
+
} catch {
|
|
139
|
+
return false;
|
|
140
|
+
}
|
|
141
|
+
};
|
|
142
|
+
await page.waitForFunction(
|
|
143
|
+
() => {
|
|
144
|
+
const candidates = [
|
|
145
|
+
document.querySelector('[data-testid="fruitjuice-send-button"]'),
|
|
146
|
+
document.querySelector("#composer-submit-button"),
|
|
147
|
+
document.querySelector('[data-testid="send-button"]')
|
|
148
|
+
].filter(Boolean);
|
|
149
|
+
return candidates.some((button) => {
|
|
150
|
+
const isDisabled = button.disabled || button.getAttribute("aria-disabled") === "true";
|
|
151
|
+
const isVisible = button.offsetParent !== null;
|
|
152
|
+
return !isDisabled && isVisible;
|
|
153
|
+
});
|
|
154
|
+
},
|
|
155
|
+
{ timeout: 5e3 }
|
|
156
|
+
).catch(() => {
|
|
157
|
+
});
|
|
158
|
+
const buttonDetails = await page.evaluate(() => {
|
|
159
|
+
const selectors = [
|
|
160
|
+
'[data-testid="fruitjuice-send-button"]',
|
|
161
|
+
"#composer-submit-button",
|
|
162
|
+
'[data-testid="send-button"]'
|
|
163
|
+
];
|
|
164
|
+
const details = selectors.map((selector) => {
|
|
165
|
+
const el = document.querySelector(selector);
|
|
166
|
+
const exists = Boolean(el);
|
|
167
|
+
const disabled = exists ? Boolean(el.disabled || el.getAttribute("aria-disabled") === "true") : null;
|
|
168
|
+
const visible = exists ? el.offsetParent !== null : null;
|
|
169
|
+
return { selector, exists, disabled, visible };
|
|
170
|
+
});
|
|
171
|
+
return details;
|
|
103
172
|
});
|
|
104
|
-
|
|
105
|
-
|
|
173
|
+
console.log(`Submit button details: ${JSON.stringify(buttonDetails)}`);
|
|
174
|
+
const clickable = buttonDetails.find((item) => item.exists && item.visible && item.disabled === false);
|
|
175
|
+
const selectedSelector = clickable ? clickable.selector : null;
|
|
176
|
+
if (selectedSelector) {
|
|
177
|
+
await page.click(selectedSelector);
|
|
178
|
+
console.log(`Clicked submit button selector: ${selectedSelector}`);
|
|
179
|
+
if (await waitForSubmit(5e3)) {
|
|
180
|
+
console.log("Submission detected after selector click.");
|
|
181
|
+
return true;
|
|
182
|
+
}
|
|
183
|
+
const forcedClickWorked = await page.evaluate((selector) => {
|
|
184
|
+
const el = document.querySelector(selector);
|
|
185
|
+
if (!el) {
|
|
186
|
+
return false;
|
|
187
|
+
}
|
|
188
|
+
el.click();
|
|
189
|
+
return true;
|
|
190
|
+
}, selectedSelector);
|
|
191
|
+
if (forcedClickWorked) {
|
|
192
|
+
console.log(`Forced DOM click on selector: ${selectedSelector}`);
|
|
193
|
+
if (await waitForSubmit(5e3)) {
|
|
194
|
+
console.log("Submission detected after forced DOM click.");
|
|
195
|
+
return true;
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
console.log("Submit button path did not submit. Trying Enter key fallback on prompt.");
|
|
200
|
+
await page.focus("#prompt-textarea");
|
|
201
|
+
await page.keyboard.press("Enter");
|
|
202
|
+
if (await waitForSubmit(5e3)) {
|
|
203
|
+
console.log("Submission detected after Enter key fallback.");
|
|
204
|
+
return true;
|
|
205
|
+
}
|
|
206
|
+
const didRequestSubmit = await page.evaluate(() => {
|
|
207
|
+
const prompt = document.querySelector("#prompt-textarea");
|
|
208
|
+
if (!prompt) {
|
|
209
|
+
return false;
|
|
210
|
+
}
|
|
211
|
+
const form = prompt.closest("form");
|
|
212
|
+
if (!form) {
|
|
213
|
+
return false;
|
|
214
|
+
}
|
|
215
|
+
if (typeof form.requestSubmit === "function") {
|
|
216
|
+
form.requestSubmit();
|
|
217
|
+
} else {
|
|
218
|
+
form.submit();
|
|
219
|
+
}
|
|
220
|
+
return true;
|
|
106
221
|
});
|
|
107
|
-
if (
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
222
|
+
if (didRequestSubmit) {
|
|
223
|
+
console.log("Triggered form submit fallback.");
|
|
224
|
+
if (await waitForSubmit(5e3)) {
|
|
225
|
+
console.log("Submission detected after form submit fallback.");
|
|
226
|
+
return true;
|
|
227
|
+
}
|
|
113
228
|
}
|
|
229
|
+
console.log("Failed to submit prompt after all strategies.");
|
|
230
|
+
return false;
|
|
114
231
|
} catch (e) {
|
|
115
232
|
console.log(`Failed to click the send button: ${e}`);
|
|
233
|
+
return false;
|
|
116
234
|
}
|
|
117
235
|
}
|
|
118
236
|
var lastMessageId = null;
|
|
@@ -185,11 +303,15 @@ async function isLoggedIn(page) {
|
|
|
185
303
|
return result === true;
|
|
186
304
|
}
|
|
187
305
|
async function createBrowser(browserOptions = {}) {
|
|
306
|
+
const windowsChromeExecutable = "C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe";
|
|
307
|
+
const hasWindowsChrome = process.platform === "win32" && fs.existsSync(windowsChromeExecutable);
|
|
188
308
|
const defaultOptions = {
|
|
189
309
|
headless: false,
|
|
310
|
+
defaultViewport: null,
|
|
190
311
|
userDataDir: path.join(process.cwd(), "tmp/puppeteer-profile"),
|
|
191
312
|
// Windows-specific options to handle browser launch issues
|
|
192
313
|
args: [
|
|
314
|
+
"--start-maximized",
|
|
193
315
|
"--no-sandbox",
|
|
194
316
|
"--disable-setuid-sandbox",
|
|
195
317
|
"--disable-dev-shm-usage",
|
|
@@ -202,10 +324,9 @@ async function createBrowser(browserOptions = {}) {
|
|
|
202
324
|
"--disable-renderer-backgrounding"
|
|
203
325
|
],
|
|
204
326
|
ignoreDefaultArgs: ["--disable-extensions"],
|
|
205
|
-
...
|
|
206
|
-
//
|
|
207
|
-
executablePath:
|
|
208
|
-
// Let Puppeteer find Chrome automatically
|
|
327
|
+
...hasWindowsChrome && {
|
|
328
|
+
// Prefer local Chrome installation when present on Windows.
|
|
329
|
+
executablePath: windowsChromeExecutable
|
|
209
330
|
}
|
|
210
331
|
};
|
|
211
332
|
try {
|
|
@@ -215,8 +336,12 @@ async function createBrowser(browserOptions = {}) {
|
|
|
215
336
|
try {
|
|
216
337
|
return await puppeteer.use(StealthPlugin()).launch({
|
|
217
338
|
headless: browserOptions.headless || false,
|
|
218
|
-
|
|
339
|
+
defaultViewport: null,
|
|
340
|
+
args: ["--start-maximized", "--no-sandbox", "--disable-setuid-sandbox"],
|
|
219
341
|
ignoreDefaultArgs: false,
|
|
342
|
+
...hasWindowsChrome && {
|
|
343
|
+
executablePath: windowsChromeExecutable
|
|
344
|
+
},
|
|
220
345
|
...browserOptions
|
|
221
346
|
});
|
|
222
347
|
} catch (fallbackError) {
|
|
@@ -241,7 +366,11 @@ async function loginToChatGpt() {
|
|
|
241
366
|
if (loginButtonExists) {
|
|
242
367
|
console.log("Login button found, clicking to log in...");
|
|
243
368
|
await page.click('[data-testid="login-button"]');
|
|
244
|
-
await page.waitForNavigation({ waitUntil: "
|
|
369
|
+
await page.waitForNavigation({ waitUntil: "domcontentloaded", timeout: NAVIGATION_TIMEOUT_MS });
|
|
370
|
+
try {
|
|
371
|
+
await page.waitForNetworkIdle({ idleTime: 1e3, timeout: NETWORK_IDLE_TIMEOUT_MS });
|
|
372
|
+
} catch {
|
|
373
|
+
}
|
|
245
374
|
console.log("Login process completed.");
|
|
246
375
|
} else {
|
|
247
376
|
console.log("No login required - user appears to be already logged in.");
|
|
@@ -251,6 +380,7 @@ async function runChatGpt(chatgptOptions = {}) {
|
|
|
251
380
|
const headless = chatgptOptions.headless !== void 0 ? chatgptOptions.headless : true;
|
|
252
381
|
const questionFile = chatgptOptions.questionFile;
|
|
253
382
|
let question = chatgptOptions.question;
|
|
383
|
+
let shouldUploadQuestionFile = Boolean(questionFile);
|
|
254
384
|
const responseFile = chatgptOptions.responseFile || path.join(process.cwd(), "tmp", "response.txt");
|
|
255
385
|
const noInputProvided = !question && !questionFile;
|
|
256
386
|
const questionIsEmpty = question && question.trim().length === 0;
|
|
@@ -258,6 +388,22 @@ async function runChatGpt(chatgptOptions = {}) {
|
|
|
258
388
|
if (noInputProvided || questionIsEmpty || questionFileIsEmpty) {
|
|
259
389
|
throw new Error("You must provide a question or a question file.");
|
|
260
390
|
}
|
|
391
|
+
if (!question && questionFile) {
|
|
392
|
+
if (!fs.existsSync(questionFile)) {
|
|
393
|
+
throw new Error(`Question file does not exist: ${questionFile}`);
|
|
394
|
+
}
|
|
395
|
+
const questionFileStats = fs.statSync(questionFile);
|
|
396
|
+
if (questionFileStats.size <= MAX_INLINE_QUESTION_FILE_BYTES) {
|
|
397
|
+
question = fs.readFileSync(questionFile, "utf8").trim();
|
|
398
|
+
if (!question) {
|
|
399
|
+
throw new Error("Question file is empty.");
|
|
400
|
+
}
|
|
401
|
+
shouldUploadQuestionFile = false;
|
|
402
|
+
console.log(
|
|
403
|
+
`Question file is ${questionFileStats.size} bytes (<= ${MAX_INLINE_QUESTION_FILE_BYTES}). Sending as text prompt.`
|
|
404
|
+
);
|
|
405
|
+
}
|
|
406
|
+
}
|
|
261
407
|
let browser;
|
|
262
408
|
try {
|
|
263
409
|
browser = await createBrowser({ headless });
|
|
@@ -270,7 +416,16 @@ async function runChatGpt(chatgptOptions = {}) {
|
|
|
270
416
|
console.error("4. Close any running Chrome instances and try again");
|
|
271
417
|
throw error;
|
|
272
418
|
}
|
|
273
|
-
const
|
|
419
|
+
const allPages = await browser.pages();
|
|
420
|
+
const page = allPages.length > 0 ? allPages[0] : await browser.newPage();
|
|
421
|
+
await page.bringToFront();
|
|
422
|
+
if (allPages.length > 1) {
|
|
423
|
+
for (const p of allPages) {
|
|
424
|
+
if (p !== page) {
|
|
425
|
+
await p.close();
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
}
|
|
274
429
|
try {
|
|
275
430
|
const url = "https://chat.openai.com";
|
|
276
431
|
const navigate = await navigatePage(page, url);
|
|
@@ -289,12 +444,15 @@ async function runChatGpt(chatgptOptions = {}) {
|
|
|
289
444
|
}
|
|
290
445
|
if (question) {
|
|
291
446
|
await writeQuestion(page, question);
|
|
292
|
-
await clickSubmitButton(page);
|
|
447
|
+
const didSubmit = await clickSubmitButton(page);
|
|
448
|
+
if (!didSubmit) {
|
|
449
|
+
throw new Error("Prompt was not submitted. The composer button may be disabled or blocked.");
|
|
450
|
+
}
|
|
293
451
|
await navigate.waitForDomIdle(1e3, 3e4);
|
|
294
452
|
await waitForInitialResponse(page);
|
|
295
453
|
await handleStreamingResponse(page, responseFile);
|
|
296
454
|
await saveCookies(page, getCookiePathForUrl(url));
|
|
297
|
-
} else if (questionFile) {
|
|
455
|
+
} else if (shouldUploadQuestionFile && questionFile) {
|
|
298
456
|
await navigate.waitForDomIdle(2e3, 1e4);
|
|
299
457
|
const isUserLoggedIn = await isLoggedIn(page);
|
|
300
458
|
console.log(`Login status: ${isUserLoggedIn ? "Logged in" : "Not logged in"}`);
|
|
@@ -333,7 +491,10 @@ async function runChatGpt(chatgptOptions = {}) {
|
|
|
333
491
|
await fileInput.uploadFile(questionFile);
|
|
334
492
|
await navigate.waitForDomIdle(2e3, 15e3);
|
|
335
493
|
console.log("File uploaded successfully");
|
|
336
|
-
await clickSubmitButton(page);
|
|
494
|
+
const didSubmit = await clickSubmitButton(page);
|
|
495
|
+
if (!didSubmit) {
|
|
496
|
+
throw new Error("Prompt was not submitted after file upload.");
|
|
497
|
+
}
|
|
337
498
|
await navigate.waitForDomIdle(1e3, 3e4);
|
|
338
499
|
await waitForInitialResponse(page);
|
|
339
500
|
await handleStreamingResponse(page, responseFile);
|
|
@@ -353,32 +514,6 @@ async function runChatGpt(chatgptOptions = {}) {
|
|
|
353
514
|
}
|
|
354
515
|
}
|
|
355
516
|
}
|
|
356
|
-
var isMain = false;
|
|
357
|
-
try {
|
|
358
|
-
const mainArg = process.argv[1] && path.resolve(process.argv[1]);
|
|
359
|
-
const currentScript = __filename && path.resolve(__filename);
|
|
360
|
-
if (typeof __require !== "undefined" && typeof module !== "undefined" && (__require.main === module || mainArg && currentScript && mainArg === currentScript)) {
|
|
361
|
-
isMain = true;
|
|
362
|
-
}
|
|
363
|
-
console.log("[chatgpt.js][CJS check]", typeof __require, typeof module, __require.main === module);
|
|
364
|
-
console.log("[chatgpt.js][CJS check]", mainArg, currentScript);
|
|
365
|
-
} catch (_e) {
|
|
366
|
-
}
|
|
367
|
-
try {
|
|
368
|
-
const mainArg = process.argv[1] && path.resolve(process.argv[1]);
|
|
369
|
-
if (mainArg && import.meta.url === pathToFileURL(mainArg).href) {
|
|
370
|
-
isMain = true;
|
|
371
|
-
}
|
|
372
|
-
} catch (_e) {
|
|
373
|
-
}
|
|
374
|
-
if (isMain) {
|
|
375
|
-
(async () => {
|
|
376
|
-
try {
|
|
377
|
-
} catch (error) {
|
|
378
|
-
console.error("Error running ChatGPT:", error);
|
|
379
|
-
}
|
|
380
|
-
})();
|
|
381
|
-
}
|
|
382
517
|
|
|
383
518
|
export {
|
|
384
519
|
runChatGpt
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
+
import {
|
|
3
|
+
__commonJS,
|
|
4
|
+
__require,
|
|
5
|
+
init_esm_shims
|
|
6
|
+
} from "./chunk-QQ4A6DLD.mjs";
|
|
7
|
+
|
|
8
|
+
// src/utils/findEnvFiles.cjs
|
|
9
|
+
var require_findEnvFiles = __commonJS({
|
|
10
|
+
"src/utils/findEnvFiles.cjs"(exports, module) {
|
|
11
|
+
init_esm_shims();
|
|
12
|
+
var fs = __require("fs");
|
|
13
|
+
var path = __require("path");
|
|
14
|
+
var glob = __require("glob");
|
|
15
|
+
var DEFAULT_IGNORES = [
|
|
16
|
+
"**/node_modules/**",
|
|
17
|
+
"**/.git/**",
|
|
18
|
+
"**/.yarn/**",
|
|
19
|
+
"**/.pnpm/**",
|
|
20
|
+
"**/dist/**",
|
|
21
|
+
"**/build/**",
|
|
22
|
+
"**/coverage/**",
|
|
23
|
+
"**/vendor/**",
|
|
24
|
+
"**/tmp/**",
|
|
25
|
+
"**/.cache/**",
|
|
26
|
+
"**/assets/**",
|
|
27
|
+
"**/logs/**",
|
|
28
|
+
"**/output/**",
|
|
29
|
+
"**/public/**",
|
|
30
|
+
"**/static/**",
|
|
31
|
+
"**/temp/**",
|
|
32
|
+
"**/backup/**",
|
|
33
|
+
"**/backups/**",
|
|
34
|
+
"**/examples/**",
|
|
35
|
+
"**/docs/**",
|
|
36
|
+
"**/tests/**",
|
|
37
|
+
"**/__tests__/**",
|
|
38
|
+
"**/spec/**",
|
|
39
|
+
"**/__specs__/**",
|
|
40
|
+
"**/scripts/**",
|
|
41
|
+
"**/bin/**",
|
|
42
|
+
"**/hooks/**",
|
|
43
|
+
"**/config/**",
|
|
44
|
+
"**/configs/**",
|
|
45
|
+
"**/settings/**",
|
|
46
|
+
"**/.vscode/**",
|
|
47
|
+
"**/.idea/**"
|
|
48
|
+
];
|
|
49
|
+
function findEnvFiles(startDir = process.cwd(), filter) {
|
|
50
|
+
const found = /* @__PURE__ */ new Set();
|
|
51
|
+
function addFile(file) {
|
|
52
|
+
const normalized = path.normalize(file);
|
|
53
|
+
if (typeof filter === "function" && !filter(normalized)) {
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
found.add(normalized);
|
|
57
|
+
}
|
|
58
|
+
let current = path.resolve(startDir);
|
|
59
|
+
while (true) {
|
|
60
|
+
const envPath = path.join(current, ".env");
|
|
61
|
+
if (fs.existsSync(envPath)) {
|
|
62
|
+
addFile(envPath);
|
|
63
|
+
}
|
|
64
|
+
const parent = path.dirname(current);
|
|
65
|
+
if (parent === current) {
|
|
66
|
+
break;
|
|
67
|
+
}
|
|
68
|
+
current = parent;
|
|
69
|
+
}
|
|
70
|
+
const files = glob.globSync("**/.env*", {
|
|
71
|
+
cwd: startDir,
|
|
72
|
+
absolute: true,
|
|
73
|
+
nodir: true,
|
|
74
|
+
ignore: DEFAULT_IGNORES
|
|
75
|
+
});
|
|
76
|
+
for (const file of files) {
|
|
77
|
+
addFile(file);
|
|
78
|
+
}
|
|
79
|
+
return [...found];
|
|
80
|
+
}
|
|
81
|
+
function findEnvWithToken(startDir = process.cwd(), tokenName = "GITHUB_TOKEN") {
|
|
82
|
+
const envFiles = findEnvFiles(startDir);
|
|
83
|
+
return envFiles.find((file) => {
|
|
84
|
+
try {
|
|
85
|
+
const content = fs.readFileSync(file, "utf-8");
|
|
86
|
+
const regex = new RegExp(`^\\s*${tokenName}\\s*=`, "m");
|
|
87
|
+
return regex.test(content);
|
|
88
|
+
} catch (err) {
|
|
89
|
+
console.warn(`Failed to read ${file}: ${err instanceof Error ? err.message : String(err)}`);
|
|
90
|
+
return false;
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
module.exports = {
|
|
95
|
+
DEFAULT_IGNORES,
|
|
96
|
+
findEnvFiles,
|
|
97
|
+
findEnvWithToken,
|
|
98
|
+
default: findEnvFiles
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
|
|
103
|
+
export {
|
|
104
|
+
require_findEnvFiles
|
|
105
|
+
};
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
+
import {
|
|
3
|
+
require_package
|
|
4
|
+
} from "./chunk-ZOWVMII3.mjs";
|
|
5
|
+
import {
|
|
6
|
+
__commonJS,
|
|
7
|
+
__dirname,
|
|
8
|
+
__require,
|
|
9
|
+
init_esm_shims
|
|
10
|
+
} from "./chunk-QQ4A6DLD.mjs";
|
|
11
|
+
|
|
12
|
+
// src/binary-collections/findScript.cjs
|
|
13
|
+
var require_findScript = __commonJS({
|
|
14
|
+
"src/binary-collections/findScript.cjs"(exports, module) {
|
|
15
|
+
init_esm_shims();
|
|
16
|
+
var { glob } = __require("glob");
|
|
17
|
+
var path = __require("upath");
|
|
18
|
+
var fs = __require("fs-extra");
|
|
19
|
+
var pkgJson = require_package();
|
|
20
|
+
function findScript(scriptName, searchDir = null) {
|
|
21
|
+
if (!searchDir) searchDir = path.join(__dirname, "..");
|
|
22
|
+
let result;
|
|
23
|
+
const ignorePatterns = [
|
|
24
|
+
`**/*config*.{cjs,js,mjs}`,
|
|
25
|
+
`**/utils.{cjs,js,mjs}`,
|
|
26
|
+
`**/index.{cjs,js,mjs}`,
|
|
27
|
+
`**/chunk-*.{cjs,js,mjs}`,
|
|
28
|
+
`**/*.d.{ts,cts,mts}`
|
|
29
|
+
// ignore TypeScript declaration files
|
|
30
|
+
];
|
|
31
|
+
try {
|
|
32
|
+
const pattern = `${scriptName}.{cjs,js,mjs}`;
|
|
33
|
+
const files = glob.sync(pattern, {
|
|
34
|
+
cwd: searchDir,
|
|
35
|
+
ignore: ignorePatterns,
|
|
36
|
+
absolute: true
|
|
37
|
+
});
|
|
38
|
+
if (files.length > 0) {
|
|
39
|
+
result = files[0];
|
|
40
|
+
} else {
|
|
41
|
+
if (pkgJson.bin[scriptName]) {
|
|
42
|
+
const find = [
|
|
43
|
+
path.join(searchDir, pkgJson.bin[scriptName]),
|
|
44
|
+
path.join(process.cwd(), "node_modules/binary-collections", pkgJson.bin[scriptName]),
|
|
45
|
+
path.join(__dirname, pkgJson.bin[scriptName]),
|
|
46
|
+
path.join(path.join(__dirname, ".."), pkgJson.bin[scriptName]),
|
|
47
|
+
path.join(path.join(__dirname, "../.."), pkgJson.bin[scriptName])
|
|
48
|
+
];
|
|
49
|
+
const filtered = find.filter((file) => fs.existsSync(file));
|
|
50
|
+
if (filtered.length > 0) {
|
|
51
|
+
result = filtered[0];
|
|
52
|
+
} else {
|
|
53
|
+
console.warn(`\u26A0\uFE0F Script "${scriptName}" not found in ${searchDir}.`);
|
|
54
|
+
console.warn(`\u{1F50D} Searched for: ${pattern} in ${searchDir}`);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
} catch (error) {
|
|
59
|
+
console.error(`\u{1F50D} Error searching for script: ${error.message}`);
|
|
60
|
+
}
|
|
61
|
+
if (result && !result.includes("-cli")) {
|
|
62
|
+
const ext = path.extname(result);
|
|
63
|
+
const filename = path.basename(result, ext);
|
|
64
|
+
const cliFile = path.join(path.dirname(result), `${filename}-cli${ext}`);
|
|
65
|
+
if (fs.existsSync(cliFile)) {
|
|
66
|
+
result = cliFile;
|
|
67
|
+
console.log(`\u{1F50D} Found CLI version: ${cliFile}`);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
return result;
|
|
71
|
+
}
|
|
72
|
+
module.exports = findScript;
|
|
73
|
+
module.exports.default = findScript;
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
export {
|
|
78
|
+
require_findScript
|
|
79
|
+
};
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
+
import {
|
|
3
|
+
init_esm_shims
|
|
4
|
+
} from "./chunk-QQ4A6DLD.mjs";
|
|
5
|
+
|
|
6
|
+
// src/file/move.mjs
|
|
7
|
+
init_esm_shims();
|
|
8
|
+
import fs from "fs-extra";
|
|
9
|
+
import path from "upath";
|
|
10
|
+
async function move(src, dest) {
|
|
11
|
+
if (!await fs.pathExists(src)) {
|
|
12
|
+
throw new Error(`Source file does not exist: ${src}`);
|
|
13
|
+
}
|
|
14
|
+
const srcStat = await fs.stat(src);
|
|
15
|
+
let finalDest = dest;
|
|
16
|
+
if (srcStat.isFile()) {
|
|
17
|
+
const destStat = await fs.pathExists(dest) ? await fs.stat(dest) : null;
|
|
18
|
+
if (destStat && destStat.isDirectory()) {
|
|
19
|
+
finalDest = path.join(dest, path.basename(src));
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
await fs.ensureDir(path.dirname(finalDest));
|
|
23
|
+
await fs.move(src, finalDest, { overwrite: true });
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export {
|
|
27
|
+
move
|
|
28
|
+
};
|