Fix native clipboard in bun release (#6418)
* copy native clipboard .node files to the clipboard package
under the bun binary packaging, require("@mariozechner/clipboard-linux-x64-gnu")
doesn't work so instead we rely on require("./clipboard.linux-x64-gnu.node")
for that we need to copy the .node files to the clipboard package dir
* fallback to xclip if native clipboard fails on x11
This commit is contained in:
@@ -277,7 +277,7 @@ export async function readClipboardImage(options?: {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!image && !wayland) {
|
if (!image && !wayland) {
|
||||||
image = await readClipboardImageViaNativeClipboard();
|
image = (await readClipboardImageViaNativeClipboard()) ?? readClipboardImageViaXclip();
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
image = await readClipboardImageViaNativeClipboard();
|
image = await readClipboardImageViaNativeClipboard();
|
||||||
|
|||||||
@@ -147,7 +147,9 @@ describe("readClipboardImage", () => {
|
|||||||
|
|
||||||
test("Non-Wayland: uses clipboard", async () => {
|
test("Non-Wayland: uses clipboard", async () => {
|
||||||
mocks.spawnSync.mockImplementation(() => {
|
mocks.spawnSync.mockImplementation(() => {
|
||||||
throw new Error("spawnSync should not be called for non-Wayland sessions");
|
throw new Error(
|
||||||
|
"spawnSync should not be called for non-Wayland sessions when native clipboard returns an image",
|
||||||
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
mocks.clipboard.hasImage.mockReturnValue(true);
|
mocks.clipboard.hasImage.mockReturnValue(true);
|
||||||
@@ -160,15 +162,23 @@ describe("readClipboardImage", () => {
|
|||||||
expect(Array.from(result?.bytes ?? [])).toEqual([7]);
|
expect(Array.from(result?.bytes ?? [])).toEqual([7]);
|
||||||
});
|
});
|
||||||
|
|
||||||
test("Non-Wayland: returns null when clipboard has no image", async () => {
|
test("Non-Wayland: falls back to xclip when clipboard has no image", async () => {
|
||||||
mocks.spawnSync.mockImplementation(() => {
|
mocks.spawnSync.mockImplementation((command, args, _options) => {
|
||||||
throw new Error("spawnSync should not be called for non-Wayland sessions");
|
if (command === "xclip" && args.includes("TARGETS")) {
|
||||||
|
return spawnOk(Buffer.from("image/png\n", "utf-8"));
|
||||||
|
}
|
||||||
|
if (command === "xclip" && args.includes("image/png")) {
|
||||||
|
return spawnOk(Buffer.from([8, 9]));
|
||||||
|
}
|
||||||
|
throw new Error(`Unexpected spawnSync call: ${command} ${args.join(" ")}`);
|
||||||
});
|
});
|
||||||
|
|
||||||
mocks.clipboard.hasImage.mockReturnValue(false);
|
mocks.clipboard.hasImage.mockReturnValue(false);
|
||||||
|
|
||||||
const { readClipboardImage } = await import("../src/utils/clipboard-image.ts");
|
const { readClipboardImage } = await import("../src/utils/clipboard-image.ts");
|
||||||
const result = await readClipboardImage({ platform: "linux", env: {} });
|
const result = await readClipboardImage({ platform: "linux", env: {} });
|
||||||
expect(result).toBeNull();
|
expect(result).not.toBeNull();
|
||||||
|
expect(result?.mimeType).toBe("image/png");
|
||||||
|
expect(Array.from(result?.bytes ?? [])).toEqual([8, 9]);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -159,26 +159,34 @@ for platform in "${PLATFORMS[@]}"; do
|
|||||||
case "$platform" in
|
case "$platform" in
|
||||||
darwin-arm64)
|
darwin-arm64)
|
||||||
clipboard_native_package="clipboard-darwin-arm64"
|
clipboard_native_package="clipboard-darwin-arm64"
|
||||||
|
clipboard_native_file="clipboard.darwin-arm64.node"
|
||||||
;;
|
;;
|
||||||
darwin-x64)
|
darwin-x64)
|
||||||
clipboard_native_package="clipboard-darwin-x64"
|
clipboard_native_package="clipboard-darwin-x64"
|
||||||
|
clipboard_native_file="clipboard.darwin-x64.node"
|
||||||
;;
|
;;
|
||||||
linux-x64)
|
linux-x64)
|
||||||
clipboard_native_package="clipboard-linux-x64-gnu"
|
clipboard_native_package="clipboard-linux-x64-gnu"
|
||||||
|
clipboard_native_file="clipboard.linux-x64-gnu.node"
|
||||||
;;
|
;;
|
||||||
linux-arm64)
|
linux-arm64)
|
||||||
clipboard_native_package="clipboard-linux-arm64-gnu"
|
clipboard_native_package="clipboard-linux-arm64-gnu"
|
||||||
|
clipboard_native_file="clipboard.linux-arm64-gnu.node"
|
||||||
;;
|
;;
|
||||||
windows-x64)
|
windows-x64)
|
||||||
clipboard_native_package="clipboard-win32-x64-msvc"
|
clipboard_native_package="clipboard-win32-x64-msvc"
|
||||||
|
clipboard_native_file="clipboard.win32-x64-msvc.node"
|
||||||
;;
|
;;
|
||||||
windows-arm64)
|
windows-arm64)
|
||||||
clipboard_native_package="clipboard-win32-arm64-msvc"
|
clipboard_native_package="clipboard-win32-arm64-msvc"
|
||||||
|
clipboard_native_file="clipboard.win32-arm64-msvc.node"
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
mkdir -p "$OUTPUT_DIR/$platform/node_modules/@mariozechner"
|
mkdir -p "$OUTPUT_DIR/$platform/node_modules/@mariozechner"
|
||||||
cp -r ../../node_modules/@mariozechner/clipboard "$OUTPUT_DIR/$platform/node_modules/@mariozechner/"
|
cp -r ../../node_modules/@mariozechner/clipboard "$OUTPUT_DIR/$platform/node_modules/@mariozechner/"
|
||||||
cp -r ../../node_modules/@mariozechner/$clipboard_native_package "$OUTPUT_DIR/$platform/node_modules/@mariozechner/"
|
cp -r ../../node_modules/@mariozechner/$clipboard_native_package "$OUTPUT_DIR/$platform/node_modules/@mariozechner/"
|
||||||
|
cp "../../node_modules/@mariozechner/$clipboard_native_package/$clipboard_native_file" \
|
||||||
|
"$OUTPUT_DIR/$platform/node_modules/@mariozechner/clipboard/"
|
||||||
|
|
||||||
# Copy terminal input native helpers next to compiled binaries.
|
# Copy terminal input native helpers next to compiled binaries.
|
||||||
if [[ "$platform" == darwin-* ]]; then
|
if [[ "$platform" == darwin-* ]]; then
|
||||||
|
|||||||
Reference in New Issue
Block a user