@zenbu-labs/pixel 0.0.0 → 0.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/dist/bin.d.ts +2 -0
- package/dist/bin.js +166 -0
- package/dist/bootstrap.d.ts +1 -0
- package/dist/bootstrap.js +75 -0
- package/dist/context-menu.d.ts +20 -0
- package/dist/context-menu.js +57 -0
- package/dist/debug.d.ts +1 -0
- package/dist/debug.js +9 -0
- package/dist/devtools-layout.d.ts +21 -0
- package/dist/devtools-layout.js +45 -0
- package/dist/devtools.d.ts +33 -0
- package/dist/devtools.js +125 -0
- package/dist/electron/index.d.ts +3 -0
- package/dist/electron/index.js +4 -0
- package/dist/host/guest.d.ts +5 -0
- package/dist/host/guest.js +178 -0
- package/dist/host/server.d.ts +91 -0
- package/dist/host/server.js +296 -0
- package/dist/host/shell.d.ts +35 -0
- package/dist/host/shell.js +113 -0
- package/dist/host/strip.d.ts +6 -0
- package/dist/host/strip.js +63 -0
- package/dist/icons.d.ts +30 -0
- package/dist/icons.js +58 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.js +39 -0
- package/dist/instances.d.ts +30 -0
- package/dist/instances.js +177 -0
- package/dist/layout.d.ts +5 -0
- package/dist/layout.js +34 -0
- package/dist/popup.d.ts +21 -0
- package/dist/popup.js +47 -0
- package/dist/preload/index.d.ts +15 -0
- package/dist/preload/index.js +3 -0
- package/dist/react/colors.d.ts +3 -0
- package/dist/react/colors.js +25 -0
- package/dist/react/components.d.ts +21 -0
- package/dist/react/components.js +45 -0
- package/dist/react/devtools/app.d.ts +3 -0
- package/dist/react/devtools/app.js +89 -0
- package/dist/react/devtools/console-capture.d.ts +1 -0
- package/dist/react/devtools/console-capture.js +41 -0
- package/dist/react/devtools/controller.d.ts +45 -0
- package/dist/react/devtools/controller.js +252 -0
- package/dist/react/devtools/elements.d.ts +4 -0
- package/dist/react/devtools/elements.js +152 -0
- package/dist/react/devtools/export-profile.d.ts +2 -0
- package/dist/react/devtools/export-profile.js +225 -0
- package/dist/react/devtools/fiber-hook.d.ts +1 -0
- package/dist/react/devtools/fiber-hook.js +89 -0
- package/dist/react/devtools/log-panel.d.ts +4 -0
- package/dist/react/devtools/log-panel.js +113 -0
- package/dist/react/devtools/profiler.d.ts +11 -0
- package/dist/react/devtools/profiler.js +374 -0
- package/dist/react/devtools/store.d.ts +27 -0
- package/dist/react/devtools/store.js +61 -0
- package/dist/react/devtools/stores.d.ts +92 -0
- package/dist/react/devtools/stores.js +41 -0
- package/dist/react/devtools/theme.d.ts +35 -0
- package/dist/react/devtools/theme.js +77 -0
- package/dist/react/devtools/ui.d.ts +24 -0
- package/dist/react/devtools/ui.js +59 -0
- package/dist/react/index.d.ts +110 -0
- package/dist/react/index.js +538 -0
- package/dist/react/markdown.d.ts +25 -0
- package/dist/react/markdown.js +270 -0
- package/dist/react/native.d.ts +116 -0
- package/dist/react/native.js +56 -0
- package/dist/react/reconciler-config.d.ts +241 -0
- package/dist/react/reconciler-config.js +412 -0
- package/dist/react/styles.d.ts +88 -0
- package/dist/react/styles.js +85 -0
- package/dist/react/surface.d.ts +55 -0
- package/dist/react/surface.js +74 -0
- package/dist/registry.d.ts +53 -0
- package/dist/registry.js +193 -0
- package/dist/root.d.ts +19 -0
- package/dist/root.js +342 -0
- package/dist/sandbox.d.ts +4 -0
- package/dist/sandbox.js +84 -0
- package/dist/scale.d.ts +7 -0
- package/dist/scale.js +31 -0
- package/dist/ssh/index.d.ts +58 -0
- package/dist/ssh/index.js +445 -0
- package/dist/terminal/applescript.d.ts +2 -0
- package/dist/terminal/applescript.js +20 -0
- package/dist/terminal/detect.d.ts +10 -0
- package/dist/terminal/detect.js +34 -0
- package/dist/terminal/graphics.d.ts +9 -0
- package/dist/terminal/graphics.js +142 -0
- package/dist/terminal/index.d.ts +12 -0
- package/dist/terminal/index.js +23 -0
- package/dist/terminal/run.d.ts +2 -0
- package/dist/terminal/run.js +15 -0
- package/dist/terminal/shared.d.ts +20 -0
- package/dist/terminal/shared.js +88 -0
- package/dist/terminal/terminal.d.ts +66 -0
- package/dist/terminal/terminal.js +6 -0
- package/dist/terminal/terminals/cmux.d.ts +2 -0
- package/dist/terminal/terminals/cmux.js +98 -0
- package/dist/terminal/terminals/ghostty-script.d.ts +1 -0
- package/dist/terminal/terminals/ghostty-script.js +179 -0
- package/dist/terminal/terminals/ghostty.d.ts +2 -0
- package/dist/terminal/terminals/ghostty.js +336 -0
- package/dist/terminal/terminals/herdr.d.ts +2 -0
- package/dist/terminal/terminals/herdr.js +141 -0
- package/dist/terminal/terminals/index.d.ts +5 -0
- package/dist/terminal/terminals/index.js +26 -0
- package/dist/terminal/terminals/kitty.d.ts +2 -0
- package/dist/terminal/terminals/kitty.js +209 -0
- package/dist/terminal/terminals/supacode.d.ts +2 -0
- package/dist/terminal/terminals/supacode.js +79 -0
- package/dist/terminal/terminals/tmux.d.ts +2 -0
- package/dist/terminal/terminals/tmux.js +132 -0
- package/dist/terminal/terminals/tty7.d.ts +2 -0
- package/dist/terminal/terminals/tty7.js +58 -0
- package/dist/terminal/terminals/vscode.d.ts +2 -0
- package/dist/terminal/terminals/vscode.js +13 -0
- package/dist/terminal/terminals/wezterm.d.ts +2 -0
- package/dist/terminal/terminals/wezterm.js +59 -0
- package/dist/theme.d.ts +22 -0
- package/dist/theme.js +40 -0
- package/dist/web/browser-session.d.ts +13 -0
- package/dist/web/browser-session.js +186 -0
- package/dist/web/cursor.d.ts +1 -0
- package/dist/web/cursor.js +24 -0
- package/dist/web/devtools.d.ts +39 -0
- package/dist/web/devtools.js +300 -0
- package/dist/web/favicon.d.ts +7 -0
- package/dist/web/favicon.js +73 -0
- package/dist/web/frame-rate.d.ts +1 -0
- package/dist/web/frame-rate.js +12 -0
- package/dist/web/host.d.ts +123 -0
- package/dist/web/host.js +573 -0
- package/dist/web/input.d.ts +49 -0
- package/dist/web/input.js +468 -0
- package/dist/web/offscreen.d.ts +2 -0
- package/dist/web/offscreen.js +23 -0
- package/dist/web/paint.d.ts +11 -0
- package/dist/web/paint.js +128 -0
- package/dist/web/popup.d.ts +40 -0
- package/dist/web/popup.js +144 -0
- package/dist/web/session.d.ts +20 -0
- package/dist/web/session.js +110 -0
- package/dist/web/types.d.ts +38 -0
- package/dist/web/types.js +39 -0
- package/dist/web/zoom.d.ts +5 -0
- package/dist/web/zoom.js +36 -0
- package/dist/webview.d.ts +55 -0
- package/dist/webview.js +481 -0
- package/package.json +69 -3
- package/scripts/apparmor.sh +71 -0
- package/scripts/postinstall.mjs +150 -0
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
import { execFileSync } from "node:child_process";
|
|
2
|
+
import crypto from "node:crypto";
|
|
3
|
+
import fs from "node:fs";
|
|
4
|
+
import os from "node:os";
|
|
5
|
+
import path from "node:path";
|
|
6
|
+
|
|
7
|
+
const packageDir = path.resolve(import.meta.dirname, "..");
|
|
8
|
+
const version = JSON.parse(fs.readFileSync(path.join(packageDir, "package.json"), "utf8")).config.electron;
|
|
9
|
+
const electronDir = path.join(packageDir, "electron");
|
|
10
|
+
const dest = path.join(electronDir, "dist");
|
|
11
|
+
const typesFile = path.join(electronDir, "electron.d.ts");
|
|
12
|
+
const typesMarker = path.join(electronDir, ".electron.d.ts.source");
|
|
13
|
+
const marker = path.join(dest, ".zenbu-electron-sha256");
|
|
14
|
+
const skipBinary = process.env.PIXEL_SKIP_DOWNLOAD === "1";
|
|
15
|
+
|
|
16
|
+
const platforms = {
|
|
17
|
+
"darwin-arm64": "darwin-arm64",
|
|
18
|
+
"darwin-x64": "darwin-x64",
|
|
19
|
+
"linux-x64": "linux-x64",
|
|
20
|
+
"linux-arm64": "linux-arm64",
|
|
21
|
+
};
|
|
22
|
+
const platform = platforms[`${process.platform}-${process.arch}`];
|
|
23
|
+
if (!platform) {
|
|
24
|
+
process.stderr.write(`pixel: unsupported platform ${process.platform}-${process.arch}\n`);
|
|
25
|
+
process.exit(1);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
const mirror =
|
|
29
|
+
process.env.PIXEL_ELECTRON_MIRROR ??
|
|
30
|
+
`https://github.com/zenbu-labs/pixel/releases/download/electron-v${version}`;
|
|
31
|
+
const zipName = `electron-v${version}-${platform}.zip`;
|
|
32
|
+
|
|
33
|
+
async function fetchBytes(url) {
|
|
34
|
+
const response = await fetch(url, { redirect: "follow" });
|
|
35
|
+
if (!response.ok || !response.body) throw new Error(`${url}: ${response.status}`);
|
|
36
|
+
return Buffer.from(await response.arrayBuffer());
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
function sha256(bytes) {
|
|
40
|
+
return crypto.createHash("sha256").update(bytes).digest("hex");
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
function isSymlink(file) {
|
|
44
|
+
try {
|
|
45
|
+
return fs.lstatSync(file).isSymbolicLink();
|
|
46
|
+
} catch {
|
|
47
|
+
return false;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
function readMarker(file) {
|
|
52
|
+
try {
|
|
53
|
+
return fs.readFileSync(file, "utf8").trim();
|
|
54
|
+
} catch {
|
|
55
|
+
return null;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
fs.mkdirSync(electronDir, { recursive: true });
|
|
60
|
+
|
|
61
|
+
let shasums;
|
|
62
|
+
try {
|
|
63
|
+
shasums = (await fetchBytes(`${mirror}/SHASUMS256.txt`)).toString("utf8");
|
|
64
|
+
} catch (error) {
|
|
65
|
+
if (skipBinary && fs.existsSync(typesFile)) process.exit(0);
|
|
66
|
+
process.stderr.write(
|
|
67
|
+
`pixel: [placeholder copy: no patched electron v${version} is published (${error.message}). ` +
|
|
68
|
+
`This release of pixel is built against electron ${version}; a newer pixel may be needed.]\n`,
|
|
69
|
+
);
|
|
70
|
+
process.exit(1);
|
|
71
|
+
}
|
|
72
|
+
const listed = (name) =>
|
|
73
|
+
shasums
|
|
74
|
+
.split("\n")
|
|
75
|
+
.map((line) => line.trim().split(/\s+/))
|
|
76
|
+
.find((columns) => columns[1] === `*${name}` || columns[1] === name)?.[0];
|
|
77
|
+
|
|
78
|
+
// Types: generated from the patched docs by the same build as the binary. Older
|
|
79
|
+
// releases predate that asset, so fall back to upstream's types for the version.
|
|
80
|
+
const typesSha = listed("electron.d.ts");
|
|
81
|
+
const wantedSource = typesSha ? `${version} ${typesSha}` : `${version} npm`;
|
|
82
|
+
if (readMarker(typesMarker) !== wantedSource || !fs.existsSync(typesFile)) {
|
|
83
|
+
let bytes;
|
|
84
|
+
if (typesSha) {
|
|
85
|
+
bytes = await fetchBytes(`${mirror}/electron.d.ts`);
|
|
86
|
+
if (sha256(bytes) !== typesSha) {
|
|
87
|
+
process.stderr.write(`pixel: electron.d.ts does not match SHASUMS256.txt\n`);
|
|
88
|
+
process.exit(1);
|
|
89
|
+
}
|
|
90
|
+
} else {
|
|
91
|
+
const tgz = await fetchBytes(`https://registry.npmjs.org/electron/-/electron-${version}.tgz`);
|
|
92
|
+
bytes = execFileSync("tar", ["-xzf", "-", "-O", "package/electron.d.ts"], {
|
|
93
|
+
input: tgz,
|
|
94
|
+
maxBuffer: 64 * 1024 * 1024,
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
fs.writeFileSync(typesFile, bytes);
|
|
98
|
+
fs.writeFileSync(typesMarker, wantedSource);
|
|
99
|
+
process.stderr.write(`pixel: installed electron.d.ts for v${version}\n`);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
if (skipBinary) process.exit(0);
|
|
103
|
+
|
|
104
|
+
const expected = listed(zipName);
|
|
105
|
+
if (!expected) {
|
|
106
|
+
process.stderr.write(`pixel: ${zipName} is missing from ${mirror}/SHASUMS256.txt\n`);
|
|
107
|
+
process.exit(1);
|
|
108
|
+
}
|
|
109
|
+
const frameworkBinary = path.join(
|
|
110
|
+
dest, "Electron.app", "Contents", "Frameworks", "Electron Framework.framework", "Electron Framework",
|
|
111
|
+
);
|
|
112
|
+
const intact = process.platform !== "darwin" || isSymlink(frameworkBinary);
|
|
113
|
+
if (readMarker(marker) === expected && intact) process.exit(0);
|
|
114
|
+
|
|
115
|
+
// Package managers that copy this package (pnpm file: links, fresh installs)
|
|
116
|
+
// run this script again, so downloaded zips are kept per user and reused.
|
|
117
|
+
const cacheDir = path.join(process.env.XDG_CACHE_HOME ?? path.join(os.homedir(), ".cache"), "pixel");
|
|
118
|
+
const tmp = fs.mkdtempSync(path.join(os.tmpdir(), "pixel-"));
|
|
119
|
+
try {
|
|
120
|
+
const cached = path.join(cacheDir, zipName);
|
|
121
|
+
let bytes = fs.existsSync(cached) ? fs.readFileSync(cached) : null;
|
|
122
|
+
if (!bytes || sha256(bytes) !== expected) {
|
|
123
|
+
process.stderr.write(`pixel: downloading patched electron v${version} (${platform})\n`);
|
|
124
|
+
bytes = await fetchBytes(`${mirror}/${zipName}`);
|
|
125
|
+
const actual = sha256(bytes);
|
|
126
|
+
if (actual !== expected) {
|
|
127
|
+
throw new Error(`${zipName} does not match SHASUMS256.txt (expected ${expected}, got ${actual})`);
|
|
128
|
+
}
|
|
129
|
+
fs.mkdirSync(cacheDir, { recursive: true });
|
|
130
|
+
fs.writeFileSync(cached, bytes);
|
|
131
|
+
}
|
|
132
|
+
const zip = path.join(tmp, zipName);
|
|
133
|
+
fs.writeFileSync(zip, bytes);
|
|
134
|
+
const unpacked = path.join(tmp, "app");
|
|
135
|
+
fs.mkdirSync(unpacked);
|
|
136
|
+
execFileSync("unzip", ["-q", zip, "-d", unpacked], { stdio: "inherit" });
|
|
137
|
+
const stamped = fs.readFileSync(path.join(unpacked, "version"), "utf8").trim();
|
|
138
|
+
if (stamped !== version) {
|
|
139
|
+
throw new Error(`fetched electron stamps itself ${stamped}, expected ${version}`);
|
|
140
|
+
}
|
|
141
|
+
fs.rmSync(dest, { recursive: true, force: true });
|
|
142
|
+
fs.renameSync(unpacked, dest);
|
|
143
|
+
fs.writeFileSync(marker, expected);
|
|
144
|
+
process.stderr.write(`pixel: installed patched electron v${version} into ${dest}\n`);
|
|
145
|
+
} catch (error) {
|
|
146
|
+
process.stderr.write(`pixel: ${error.message}\n`);
|
|
147
|
+
process.exit(1);
|
|
148
|
+
} finally {
|
|
149
|
+
fs.rmSync(tmp, { recursive: true, force: true });
|
|
150
|
+
}
|