@joystick.js/cli-canary 0.0.0-canary.139 → 0.0.0-canary.140
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/lib/dev/hmrServer.js +66 -0
- package/package.json +1 -1
- package/src/lib/dev/hmrServer.js +78 -0
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import fs from "fs";
|
|
2
|
+
import { WebSocketServer } from "ws";
|
|
3
|
+
import generateId from "../generateId.js";
|
|
4
|
+
var hmrServer_default = (() => {
|
|
5
|
+
const websocketServer = new WebSocketServer({
|
|
6
|
+
port: parseInt(process.env.PORT, 10) + 1,
|
|
7
|
+
path: "/_joystick/hmr"
|
|
8
|
+
});
|
|
9
|
+
process.on("message", (message) => {
|
|
10
|
+
if (typeof process.HMR_CONNECTIONS === "object") {
|
|
11
|
+
const parsedMessage = JSON.parse(message);
|
|
12
|
+
const connections = Object.values(process.HMR_CONNECTIONS);
|
|
13
|
+
for (let i = 0; i < connections?.length; i += 1) {
|
|
14
|
+
const connection = connections[i];
|
|
15
|
+
if (connection?.connection?.send) {
|
|
16
|
+
connection.connection.send(
|
|
17
|
+
JSON.stringify({
|
|
18
|
+
type: "FILE_CHANGE",
|
|
19
|
+
settings: {
|
|
20
|
+
global: parsedMessage?.settings?.global,
|
|
21
|
+
public: parsedMessage?.settings?.public
|
|
22
|
+
},
|
|
23
|
+
indexHTMLChanged: parsedMessage?.indexHTMLChanged
|
|
24
|
+
})
|
|
25
|
+
);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
websocketServer.on("connection", function connection(websocketConnection) {
|
|
31
|
+
const connectionId = generateId();
|
|
32
|
+
process.HMR_CONNECTIONS = {
|
|
33
|
+
...process.HMR_CONNECTIONS || {},
|
|
34
|
+
[connectionId]: {
|
|
35
|
+
connection: websocketConnection,
|
|
36
|
+
watchlist: []
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
if (Object.keys(process.HMR_CONNECTIONS || {})?.length > 0) {
|
|
40
|
+
process.send({ type: "HAS_HMR_CONNECTIONS" });
|
|
41
|
+
}
|
|
42
|
+
websocketConnection.on("message", (message) => {
|
|
43
|
+
const parsedMessage = JSON.parse(message);
|
|
44
|
+
if (parsedMessage?.type === "HMR_UPDATE_COMPLETE") {
|
|
45
|
+
process.send({ type: "HMR_UPDATE_COMPLETED", sessions: parsedMessage?.sessions });
|
|
46
|
+
}
|
|
47
|
+
if (parsedMessage?.type === "HMR_WATCHLIST") {
|
|
48
|
+
process.HMR_CONNECTIONS[connectionId]?.watchlist?.push(
|
|
49
|
+
...parsedMessage?.tags || []
|
|
50
|
+
);
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
websocketConnection.on("close", () => {
|
|
54
|
+
if (process.HMR_CONNECTIONS[connectionId]) {
|
|
55
|
+
delete process.HMR_CONNECTIONS[connectionId];
|
|
56
|
+
if (Object.keys(process.HMR_CONNECTIONS || {})?.length === 0) {
|
|
57
|
+
process.send({ type: "HAS_NO_HMR_CONNECTIONS" });
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
});
|
|
62
|
+
return true;
|
|
63
|
+
})();
|
|
64
|
+
export {
|
|
65
|
+
hmrServer_default as default
|
|
66
|
+
};
|
package/package.json
CHANGED
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import fs from "fs";
|
|
2
|
+
import { WebSocketServer } from "ws";
|
|
3
|
+
import generateId from "../generateId.js";
|
|
4
|
+
|
|
5
|
+
// NOTE: This doesn't run on the app server (in node). This runs on your local computer
|
|
6
|
+
// as a totally separate process that's forked on joystick start.
|
|
7
|
+
|
|
8
|
+
export default (() => {
|
|
9
|
+
const websocketServer = new WebSocketServer({
|
|
10
|
+
port: parseInt(process.env.PORT, 10) + 1,
|
|
11
|
+
path: "/_joystick/hmr",
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
process.on("message", (message) => {
|
|
15
|
+
if (typeof process.HMR_CONNECTIONS === "object") {
|
|
16
|
+
const parsedMessage = JSON.parse(message);
|
|
17
|
+
const connections = Object.values(process.HMR_CONNECTIONS);
|
|
18
|
+
for (let i = 0; i < connections?.length; i += 1) {
|
|
19
|
+
const connection = connections[i];
|
|
20
|
+
if (connection?.connection?.send) {
|
|
21
|
+
connection.connection.send(
|
|
22
|
+
JSON.stringify({
|
|
23
|
+
type: "FILE_CHANGE",
|
|
24
|
+
settings: {
|
|
25
|
+
global: parsedMessage?.settings?.global,
|
|
26
|
+
public: parsedMessage?.settings?.public,
|
|
27
|
+
},
|
|
28
|
+
indexHTMLChanged: parsedMessage?.indexHTMLChanged,
|
|
29
|
+
})
|
|
30
|
+
);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
websocketServer.on("connection", function connection(websocketConnection) {
|
|
37
|
+
const connectionId = generateId();
|
|
38
|
+
|
|
39
|
+
process.HMR_CONNECTIONS = {
|
|
40
|
+
...(process.HMR_CONNECTIONS || {}),
|
|
41
|
+
[connectionId]: {
|
|
42
|
+
connection: websocketConnection,
|
|
43
|
+
watchlist: [],
|
|
44
|
+
},
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
if (Object.keys(process.HMR_CONNECTIONS || {})?.length > 0) {
|
|
48
|
+
process.send({ type: "HAS_HMR_CONNECTIONS" });
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
websocketConnection.on("message", (message) => {
|
|
52
|
+
const parsedMessage = JSON.parse(message);
|
|
53
|
+
|
|
54
|
+
if (parsedMessage?.type === "HMR_UPDATE_COMPLETE") {
|
|
55
|
+
process.send({ type: "HMR_UPDATE_COMPLETED", sessions: parsedMessage?.sessions });
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
if (parsedMessage?.type === "HMR_WATCHLIST") {
|
|
59
|
+
process.HMR_CONNECTIONS[connectionId]?.watchlist?.push(
|
|
60
|
+
...(parsedMessage?.tags || [])
|
|
61
|
+
);
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
websocketConnection.on("close", () => {
|
|
66
|
+
if (process.HMR_CONNECTIONS[connectionId]) {
|
|
67
|
+
delete process.HMR_CONNECTIONS[connectionId];
|
|
68
|
+
|
|
69
|
+
if (Object.keys(process.HMR_CONNECTIONS || {})?.length === 0) {
|
|
70
|
+
process.send({ type: "HAS_NO_HMR_CONNECTIONS" });
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
return true;
|
|
78
|
+
})();
|