tinker-electron-debug 0.1.0

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/README.md ADDED
@@ -0,0 +1,26 @@
1
+ # tinker-electron-debug
2
+
3
+ An Electron app debugger plugin for [TINKER](https://github.com/liriliri/tinker), enabling remote debugging of in-production Electron applications.
4
+
5
+ ![Screenshot](https://raw.githubusercontent.com/liriliri/tinker-plugins/master/packages/tinker-electron-debug/screenshot.png)
6
+
7
+ ## Features
8
+
9
+ - **Auto-detect** Electron apps installed on the system
10
+ - **Launch & attach** debugger with a single click
11
+ - **Inspect pages** — view Node.js and renderer process targets
12
+ - **DevTools integration** — open Chrome DevTools for any target
13
+ - **Live log output** — stream stdout/stderr in a built-in terminal
14
+ - **Multi-session** support for debugging multiple apps simultaneously
15
+
16
+ ## Installation
17
+
18
+ Download and install TINKER from `https://tinker.liriliri.io/`, then run `npm i -g tinker-electron-debug`.
19
+
20
+ ## Usage
21
+
22
+ 1. Select an Electron app from the app grid
23
+ 2. The app launches with debugging ports enabled
24
+ 3. Inspect Node.js or renderer process targets in the page list
25
+ 4. Click **Inspect** to open Chrome DevTools for a target
26
+ 5. View live log output in the terminal below
@@ -0,0 +1,379 @@
1
+ import { contextBridge as K } from "electron";
2
+ import l from "fs";
3
+ import x from "path";
4
+ import h from "process";
5
+ import { spawn as $ } from "child_process";
6
+ import H from "got";
7
+ import rr from "net";
8
+ import tr from "ws";
9
+ function er(t) {
10
+ return t && t.__esModule && Object.prototype.hasOwnProperty.call(t, "default") ? t.default : t;
11
+ }
12
+ var y = { exports: {} }, E = { exports: {} }, A = { exports: {} }, S = { exports: {} }, b = { exports: {} };
13
+ (function(t, r) {
14
+ var s = Object.prototype.toString;
15
+ r = function(o) {
16
+ return s.call(o);
17
+ }, t.exports = r;
18
+ })(b, b.exports);
19
+ var m = b.exports;
20
+ (function(t, r) {
21
+ var s = m;
22
+ r = function(o) {
23
+ return s(o) === "[object Number]";
24
+ }, t.exports = r;
25
+ })(S, S.exports);
26
+ var nr = S.exports, O = { exports: {} };
27
+ (function(t, r) {
28
+ var s = m;
29
+ r = function(o) {
30
+ var i = s(o);
31
+ return i === "[object Function]" || i === "[object GeneratorFunction]" || i === "[object AsyncFunction]";
32
+ }, t.exports = r;
33
+ })(O, O.exports);
34
+ var V = O.exports;
35
+ (function(t, r) {
36
+ var s = nr, o = V, i = Math.pow(2, 53) - 1;
37
+ r = function(e) {
38
+ if (!e) return !1;
39
+ var n = e.length;
40
+ return s(n) && n >= 0 && n <= i && !o(e);
41
+ }, t.exports = r;
42
+ })(A, A.exports);
43
+ var J = A.exports, k = { exports: {} }, j = { exports: {} }, D = { exports: {} };
44
+ (function(t, r) {
45
+ r = function(s) {
46
+ var o = typeof s;
47
+ return !!s && (o === "function" || o === "object");
48
+ }, t.exports = r;
49
+ })(D, D.exports);
50
+ var or = D.exports, P = { exports: {} };
51
+ (function(t, r) {
52
+ var s = m;
53
+ Array.isArray ? r = Array.isArray : r = function(o) {
54
+ return s(o) === "[object Array]";
55
+ }, t.exports = r;
56
+ })(P, P.exports);
57
+ var w = P.exports, C = { exports: {} }, M = { exports: {} };
58
+ (function(t, r) {
59
+ r = function(s) {
60
+ return s === void 0;
61
+ }, t.exports = r;
62
+ })(M, M.exports);
63
+ var I = M.exports;
64
+ (function(t, r) {
65
+ var s = I;
66
+ r = function(o, i, e) {
67
+ if (s(i)) return o;
68
+ switch (e ?? 3) {
69
+ case 1:
70
+ return function(n) {
71
+ return o.call(i, n);
72
+ };
73
+ case 3:
74
+ return function(n, c, a) {
75
+ return o.call(i, n, c, a);
76
+ };
77
+ case 4:
78
+ return function(n, c, a, u) {
79
+ return o.call(i, n, c, a, u);
80
+ };
81
+ }
82
+ return function() {
83
+ return o.apply(i, arguments);
84
+ };
85
+ }, t.exports = r;
86
+ })(C, C.exports);
87
+ var Y = C.exports, F = { exports: {} }, N = { exports: {} }, T = { exports: {} }, U = { exports: {} };
88
+ (function(t, r) {
89
+ var s = Object.prototype.hasOwnProperty;
90
+ r = function(o, i) {
91
+ return s.call(o, i);
92
+ }, t.exports = r;
93
+ })(U, U.exports);
94
+ var Z = U.exports;
95
+ (function(t, r) {
96
+ var s = Z;
97
+ Object.keys ? r = Object.keys : r = function(o) {
98
+ var i = [];
99
+ for (var e in o)
100
+ s(o, e) && i.push(e);
101
+ return i;
102
+ }, t.exports = r;
103
+ })(T, T.exports);
104
+ var g = T.exports, L = { exports: {} }, W = { exports: {} };
105
+ (function(t, r) {
106
+ var s = J, o = g, i = Y;
107
+ r = function(e, n, c) {
108
+ n = i(n, c);
109
+ var a, u;
110
+ if (s(e))
111
+ for (a = 0, u = e.length; a < u; a++) n(e[a], a, e);
112
+ else {
113
+ var p = o(e);
114
+ for (a = 0, u = p.length; a < u; a++)
115
+ n(e[p[a]], p[a], e);
116
+ }
117
+ return e;
118
+ }, t.exports = r;
119
+ })(W, W.exports);
120
+ var sr = W.exports;
121
+ (function(t, r) {
122
+ var s = I, o = sr;
123
+ r = function(i, e) {
124
+ return function(n) {
125
+ return o(arguments, function(c, a) {
126
+ if (a !== 0) {
127
+ var u = i(c);
128
+ o(u, function(p) {
129
+ (!e || s(n[p])) && (n[p] = c[p]);
130
+ });
131
+ }
132
+ }), n;
133
+ };
134
+ }, t.exports = r;
135
+ })(L, L.exports);
136
+ var ir = L.exports;
137
+ (function(t, r) {
138
+ var s = g, o = ir;
139
+ r = o(s), t.exports = r;
140
+ })(N, N.exports);
141
+ var ar = N.exports, _ = { exports: {} };
142
+ (function(t, r) {
143
+ var s = g;
144
+ r = function(o, i) {
145
+ var e = s(i), n = e.length;
146
+ if (o == null) return !n;
147
+ o = Object(o);
148
+ for (var c = 0; c < n; c++) {
149
+ var a = e[c];
150
+ if (i[a] !== o[a] || !(a in o)) return !1;
151
+ }
152
+ return !0;
153
+ }, t.exports = r;
154
+ })(_, _.exports);
155
+ var cr = _.exports;
156
+ (function(t, r) {
157
+ var s = ar, o = cr;
158
+ r = function(i) {
159
+ return i = s({}, i), function(e) {
160
+ return o(e, i);
161
+ };
162
+ }, t.exports = r;
163
+ })(F, F.exports);
164
+ var ur = F.exports, q = { exports: {} };
165
+ (function(t, r) {
166
+ r = function(s) {
167
+ return s;
168
+ }, t.exports = r;
169
+ })(q, q.exports);
170
+ var pr = q.exports, z = { exports: {} }, G = { exports: {} }, R = { exports: {} };
171
+ (function(t, r) {
172
+ var s = Z, o = w;
173
+ r = function(n, c) {
174
+ if (o(n)) return n;
175
+ if (c && s(c, n)) return [n];
176
+ var a = [];
177
+ return n.replace(i, function(u, p, f, v) {
178
+ a.push(f ? v.replace(e, "$1") : p || u);
179
+ }), a;
180
+ };
181
+ var i = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g, e = /\\(\\)?/g;
182
+ t.exports = r;
183
+ })(R, R.exports);
184
+ var fr = R.exports;
185
+ (function(t, r) {
186
+ var s = I, o = fr;
187
+ r = function(i, e) {
188
+ e = o(e, i);
189
+ var n;
190
+ for (n = e.shift(); !s(n); ) {
191
+ if (i = i[n], i == null) return;
192
+ n = e.shift();
193
+ }
194
+ return i;
195
+ }, t.exports = r;
196
+ })(G, G.exports);
197
+ var vr = G.exports;
198
+ (function(t, r) {
199
+ var s = w, o = vr;
200
+ r = function(e) {
201
+ return s(e) ? function(n) {
202
+ return o(n, e);
203
+ } : i(e);
204
+ };
205
+ function i(e) {
206
+ return function(n) {
207
+ return n == null ? void 0 : n[e];
208
+ };
209
+ }
210
+ t.exports = r;
211
+ })(z, z.exports);
212
+ var xr = z.exports;
213
+ (function(t, r) {
214
+ var s = V, o = or, i = w, e = Y, n = ur, c = pr, a = xr;
215
+ r = function(u, p, f) {
216
+ return u == null ? c : s(u) ? e(u, p, f) : o(u) && !i(u) ? n(u) : a(u);
217
+ }, t.exports = r;
218
+ })(j, j.exports);
219
+ var lr = j.exports;
220
+ (function(t, r) {
221
+ var s = lr, o = g, i = J;
222
+ r = function(e, n, c) {
223
+ n = s(n, c);
224
+ for (var a = !i(e) && o(e), u = (a || e).length, p = Array(u), f = 0; f < u; f++) {
225
+ var v = a ? a[f] : f;
226
+ p[f] = n(e[v], v, e);
227
+ }
228
+ return p;
229
+ }, t.exports = r;
230
+ })(k, k.exports);
231
+ var dr = k.exports, B = { exports: {} };
232
+ (function(t, r) {
233
+ var s = m;
234
+ r = function(o) {
235
+ return s(o) === "[object String]";
236
+ }, t.exports = r;
237
+ })(B, B.exports);
238
+ var mr = B.exports;
239
+ (function(t, r) {
240
+ var s = J, o = dr, i = w, e = mr;
241
+ r = function(n) {
242
+ return n ? i(n) ? n : s(n) && !e(n) ? o(n) : [n] : [];
243
+ }, t.exports = r;
244
+ })(E, E.exports);
245
+ var wr = E.exports;
246
+ (function(t, r) {
247
+ const s = wr, o = rr;
248
+ r = function(e, n) {
249
+ return e = s(e), e.push(0), e.reduce((c, a) => c.catch(() => i(a, n)), Promise.reject());
250
+ };
251
+ function i(e, n) {
252
+ return new Promise((c, a) => {
253
+ const u = o.createServer();
254
+ u.unref(), u.on("error", a);
255
+ const p = {};
256
+ p.port = e, n && (p.host = n), u.listen(p, () => {
257
+ const { port: f } = u.address();
258
+ u.close(() => {
259
+ c(f);
260
+ });
261
+ });
262
+ });
263
+ }
264
+ t.exports = r;
265
+ })(y, y.exports);
266
+ var gr = y.exports;
267
+ const Q = /* @__PURE__ */ er(gr);
268
+ function hr(t) {
269
+ return l.existsSync(
270
+ x.join(t, "Contents/Frameworks/Electron Framework.framework")
271
+ );
272
+ }
273
+ function yr(t) {
274
+ const r = x.dirname(t), s = x.join(r, "resources");
275
+ return l.existsSync(s) ? [
276
+ "electron.asar",
277
+ "default_app.asar",
278
+ "app.asar",
279
+ "app.asar.unpacked"
280
+ ].some((o) => l.existsSync(x.join(s, o))) : !1;
281
+ }
282
+ function Er(t) {
283
+ return l.existsSync(x.join(t, "../resources/electron.asar")) || l.existsSync(x.join(t, "../LICENSE.electron.txt")) || l.existsSync(x.join(t, "../chrome-sandbox"));
284
+ }
285
+ const d = /* @__PURE__ */ new Map();
286
+ function Ar(t, r, s) {
287
+ return new Promise((o, i) => {
288
+ const e = new tr(t, {
289
+ headers: { Origin: "devtools://devtools" }
290
+ });
291
+ e.on("open", () => {
292
+ e.send(JSON.stringify({ id: 1, method: r, params: s }));
293
+ }), e.on("message", (n) => {
294
+ try {
295
+ const c = JSON.parse(n.toString());
296
+ c.id === 1 && (e.close(), o(c));
297
+ } catch {
298
+ }
299
+ }), e.on("error", i), setTimeout(() => {
300
+ e.terminate(), i(new Error("timeout"));
301
+ }, 5e3);
302
+ });
303
+ }
304
+ const Sr = {
305
+ isElectronApp: (t) => {
306
+ const r = h.platform;
307
+ return r === "darwin" ? hr(t) : r === "win32" ? yr(t) : Er(t);
308
+ },
309
+ launchApp: async (t, r, s, o) => {
310
+ var p, f;
311
+ const [i, e] = await Promise.all([
312
+ Q(0, "127.0.0.1"),
313
+ Q(0, "127.0.0.1")
314
+ ]);
315
+ let n = r;
316
+ if (h.platform === "darwin") {
317
+ const v = x.join(r, "Contents/MacOS");
318
+ if (l.existsSync(v)) {
319
+ const X = l.readdirSync(v);
320
+ X[0] && (n = x.join(v, X[0]));
321
+ }
322
+ }
323
+ const c = h.platform === "win32" ? x.dirname(n) : "/", a = $(
324
+ n,
325
+ [
326
+ `--inspect=${i}`,
327
+ `--remote-debugging-port=${e}`,
328
+ "--remote-allow-origins=devtools://devtools"
329
+ ],
330
+ { cwd: c }
331
+ ), u = (v) => s(v.toString());
332
+ return (p = a.stdout) == null || p.on("data", u), (f = a.stderr) == null || f.on("data", u), a.on("close", () => {
333
+ d.delete(t), o();
334
+ }), d.set(t, { nodePort: i, windowPort: e, kill: () => a.kill() }), { nodePort: i, windowPort: e };
335
+ },
336
+ stopApp: (t) => {
337
+ var r;
338
+ (r = d.get(t)) == null || r.kill(), d.delete(t);
339
+ },
340
+ getPages: async (t) => {
341
+ try {
342
+ return await H(`http://127.0.0.1:${t}/json`, {
343
+ timeout: { request: 2e3 }
344
+ }).json();
345
+ } catch {
346
+ return [];
347
+ }
348
+ },
349
+ openDevTools: async (t, r) => {
350
+ var c;
351
+ const o = (await H(
352
+ `http://127.0.0.1:${t}/json`,
353
+ { timeout: { request: 2e3 } }
354
+ ).json())[0];
355
+ if (!(o != null && o.webSocketDebuggerUrl))
356
+ throw new Error("No node target found");
357
+ const i = r.replace(/^\/devtools/, "devtools://devtools/bundled").replace(/^chrome-devtools:\/\//, "devtools://"), e = `
358
+ (function() {
359
+ const { BrowserWindow } = process.mainModule.require('electron');
360
+ const win = new BrowserWindow({
361
+ width: 1280,
362
+ height: 800,
363
+ webPreferences: { nodeIntegration: false }
364
+ });
365
+ win.loadURL(${JSON.stringify(i)});
366
+ win.show();
367
+ })()
368
+ `, n = await Ar(
369
+ o.webSocketDebuggerUrl,
370
+ "Runtime.evaluate",
371
+ { expression: e, awaitPromise: !1 }
372
+ );
373
+ if (n != null && n.exceptionDetails)
374
+ throw new Error(
375
+ ((c = n.exceptionDetails.exception) == null ? void 0 : c.description) || n.exceptionDetails.text
376
+ );
377
+ }
378
+ };
379
+ K.exposeInMainWorld("electronDebug", Sr);