@jsenv/terminal-recorder 1.5.37 → 1.5.38
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/package.json +2 -2
- package/src/.jsenv/chrome@145.00/@fs/Users/dmail/Documents/dev/jsenv/core/packages/backend/server/src/plugins/autoreload_on_server_restart/client/autoreload_on_server_restart.js +133 -0
- package/src/.jsenv/chrome@145.00/@fs/Users/dmail/Documents/dev/jsenv/core/packages/internal/plugin-supervisor/src/client/supervisor.js +10 -2
- package/src/.jsenv/chrome@145.00/xterm.html +1 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jsenv/terminal-recorder",
|
|
3
|
-
"version": "1.5.
|
|
3
|
+
"version": "1.5.38",
|
|
4
4
|
"description": "Record terminal output as .svg, .gif, .webm, .mp4",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
},
|
|
36
36
|
"dependencies": {
|
|
37
37
|
"@jsenv/humanize": "1.7.6",
|
|
38
|
-
"@jsenv/server": "
|
|
38
|
+
"@jsenv/server": "17.0.0",
|
|
39
39
|
"@jsenv/terminal-text-size": "0.0.3",
|
|
40
40
|
"@playwright/browser-chromium": "1.58.1",
|
|
41
41
|
"ansi-regex": "6.2.2",
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
const css = /* css */ `
|
|
2
|
+
dialog {
|
|
3
|
+
opacity: 0;
|
|
4
|
+
transition: all 0.3s allow-discrete;
|
|
5
|
+
}
|
|
6
|
+
dialog::backdrop {
|
|
7
|
+
background-image: linear-gradient(
|
|
8
|
+
45deg,
|
|
9
|
+
magenta,
|
|
10
|
+
rebeccapurple,
|
|
11
|
+
dodgerblue,
|
|
12
|
+
green
|
|
13
|
+
);
|
|
14
|
+
opacity: 0;
|
|
15
|
+
transition: all 0.3s allow-discrete;
|
|
16
|
+
}
|
|
17
|
+
dialog:open {
|
|
18
|
+
opacity: 1;
|
|
19
|
+
}
|
|
20
|
+
dialog:open::backdrop {
|
|
21
|
+
opacity: 0.75;
|
|
22
|
+
}
|
|
23
|
+
`;
|
|
24
|
+
|
|
25
|
+
const html = /* html */ `<style>
|
|
26
|
+
${css}
|
|
27
|
+
</style>
|
|
28
|
+
<dialog>
|
|
29
|
+
<p>Connection with server is lost</p>
|
|
30
|
+
<button autofocus name="reconnect">Retry</button>
|
|
31
|
+
</dialog>`;
|
|
32
|
+
|
|
33
|
+
class JsenvAutoreloadOnServerRestart extends HTMLElement {
|
|
34
|
+
constructor({ url } = {}) {
|
|
35
|
+
super();
|
|
36
|
+
const root = this.attachShadow({ mode: "open" });
|
|
37
|
+
root.innerHTML = html;
|
|
38
|
+
|
|
39
|
+
const dialog = root.querySelector("dialog");
|
|
40
|
+
const reconnectButton = dialog.querySelector('button[name="reconnect"]');
|
|
41
|
+
|
|
42
|
+
(async () => {
|
|
43
|
+
const connect = () => {
|
|
44
|
+
const websocket = new WebSocket(url);
|
|
45
|
+
const connectedPromise = new Promise((resolve) => {
|
|
46
|
+
websocket.onerror = () => {
|
|
47
|
+
resolve(null);
|
|
48
|
+
};
|
|
49
|
+
websocket.onopen = () => {
|
|
50
|
+
resolve(websocket);
|
|
51
|
+
};
|
|
52
|
+
});
|
|
53
|
+
return connectedPromise;
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
const initialWebSocket = await connect();
|
|
57
|
+
if (!initialWebSocket) {
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
initialWebSocket.onclose = async () => {
|
|
61
|
+
console.info("connection to server lost, trying to reconnect");
|
|
62
|
+
const retry = async () => {
|
|
63
|
+
let attemptCount = 0;
|
|
64
|
+
let timeToWait = 100;
|
|
65
|
+
const tryToReconnect = async () => {
|
|
66
|
+
const newWebsocket = await connect();
|
|
67
|
+
if (newWebsocket) {
|
|
68
|
+
dialog.close();
|
|
69
|
+
console.info("reconnected to server, reloading the page...");
|
|
70
|
+
window.location.reload(true);
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
attemptCount++;
|
|
74
|
+
if (attemptCount === 10) {
|
|
75
|
+
dialog.showModal();
|
|
76
|
+
reconnectButton.onclick = async () => {
|
|
77
|
+
reconnectButton.disabled = true;
|
|
78
|
+
const previousContext = reconnectButton.textContent;
|
|
79
|
+
reconnectButton.textContent = "Retrying...";
|
|
80
|
+
await retry();
|
|
81
|
+
reconnectButton.textContent = previousContext;
|
|
82
|
+
reconnectButton.disabled = false;
|
|
83
|
+
};
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
timeToWait += 100;
|
|
87
|
+
await new Promise((resolve) => setTimeout(resolve, timeToWait));
|
|
88
|
+
await tryToReconnect();
|
|
89
|
+
};
|
|
90
|
+
await tryToReconnect();
|
|
91
|
+
};
|
|
92
|
+
retry();
|
|
93
|
+
};
|
|
94
|
+
})();
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
if (!customElements.get("jsenv-autoreload-on-server-restart")) {
|
|
98
|
+
customElements.define(
|
|
99
|
+
"jsenv-autoreload-on-server-restart",
|
|
100
|
+
JsenvAutoreloadOnServerRestart,
|
|
101
|
+
);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
const websocketEndpoint =
|
|
105
|
+
document.currentScript.getAttribute("data-ws-endpoint") ||
|
|
106
|
+
"/.internal/alive.websocket";
|
|
107
|
+
|
|
108
|
+
const jsenvAutoreloadOnServerRestartElement =
|
|
109
|
+
new JsenvAutoreloadOnServerRestart({
|
|
110
|
+
url: (() => {
|
|
111
|
+
const websocketScheme =
|
|
112
|
+
self.location.protocol === "https:" ? "wss" : "ws";
|
|
113
|
+
const websocketUrl = `${websocketScheme}://${self.location.host}${websocketEndpoint}`;
|
|
114
|
+
return websocketUrl;
|
|
115
|
+
})(),
|
|
116
|
+
});
|
|
117
|
+
|
|
118
|
+
// script is injected into document.body
|
|
119
|
+
if (document.body) {
|
|
120
|
+
document.currentScript.parentNode.replaceChild(
|
|
121
|
+
jsenvAutoreloadOnServerRestartElement,
|
|
122
|
+
document.currentScript,
|
|
123
|
+
);
|
|
124
|
+
}
|
|
125
|
+
// script injected outisde document.body (likely in head)
|
|
126
|
+
else {
|
|
127
|
+
document.currentScript.parentNode.removeChild(document.currentScript);
|
|
128
|
+
document.onreadystatechange = () => {
|
|
129
|
+
if (document.readyState === "interactive") {
|
|
130
|
+
document.body.appendChild(jsenvAutoreloadOnServerRestartElement);
|
|
131
|
+
}
|
|
132
|
+
};
|
|
133
|
+
}
|
|
@@ -1312,9 +1312,9 @@ window.__supervisor__ = (() => {
|
|
|
1312
1312
|
console.log('window "error" event received', errorEvent);
|
|
1313
1313
|
}
|
|
1314
1314
|
const { error, message, filename, lineno, colno } = errorEvent;
|
|
1315
|
-
if (error && error.
|
|
1315
|
+
if (error && error.__handled_by__) {
|
|
1316
1316
|
if (logs) {
|
|
1317
|
-
console.log("ignore error event because
|
|
1317
|
+
console.log("ignore error event because __handled_by__ is set");
|
|
1318
1318
|
}
|
|
1319
1319
|
return;
|
|
1320
1320
|
}
|
|
@@ -1333,6 +1333,14 @@ window.__supervisor__ = (() => {
|
|
|
1333
1333
|
if (event.defaultPrevented) {
|
|
1334
1334
|
return;
|
|
1335
1335
|
}
|
|
1336
|
+
if (event.reason && event.reason.__handled_by__) {
|
|
1337
|
+
if (logs) {
|
|
1338
|
+
console.log(
|
|
1339
|
+
"ignore unhandledrejection event because __handled_by__ is set",
|
|
1340
|
+
);
|
|
1341
|
+
}
|
|
1342
|
+
return;
|
|
1343
|
+
}
|
|
1336
1344
|
const exception = supervisor.createException(event.reason, {
|
|
1337
1345
|
reportedBy: "window_unhandledrejection_event",
|
|
1338
1346
|
});
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
]
|
|
29
29
|
});
|
|
30
30
|
</script>
|
|
31
|
-
<script src="/@fs/Users/dmail/Documents/dev/jsenv/core/packages/backend/server/src/
|
|
31
|
+
<script src="/@fs/Users/dmail/Documents/dev/jsenv/core/packages/backend/server/src/plugins/autoreload_on_server_restart/client/autoreload_on_server_restart.js" jsenv-injected-by="jsenv:autoreload_on_server_restart" data-ws-endpoint="/.internal/events.websocket"></script>
|
|
32
32
|
<script type="module" jsenv-injected-by="jsenv:drop_to_open" content-indented="">
|
|
33
33
|
import { initDropToOpen } from "/@fs/Users/dmail/Documents/dev/jsenv/core/src/plugins/drop_to_open/client/drop_to_open.js";
|
|
34
34
|
|