@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.
@@ -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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@joystick.js/cli-canary",
3
- "version": "0.0.0-canary.139",
3
+ "version": "0.0.0-canary.140",
4
4
  "type": "module",
5
5
  "description": "CLI for the Joystick JavaScript framework.",
6
6
  "main": "development.js",
@@ -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
+ })();