redux-cluster-ws 1.3.1 → 2.0.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.
Files changed (54) hide show
  1. package/FUNDING.yml +7 -0
  2. package/LICENSE +21 -21
  3. package/README.md +394 -90
  4. package/dist/cjs/client.d.ts +43 -0
  5. package/dist/cjs/client.js +276 -0
  6. package/dist/cjs/client.js.map +1 -0
  7. package/dist/cjs/index.d.ts +4 -0
  8. package/dist/cjs/index.js +25 -0
  9. package/dist/cjs/index.js.map +1 -0
  10. package/dist/cjs/package.json +1 -0
  11. package/dist/cjs/server.d.ts +31 -0
  12. package/dist/cjs/server.js +295 -0
  13. package/dist/cjs/server.js.map +1 -0
  14. package/dist/cjs/types.d.ts +83 -0
  15. package/dist/cjs/types.js +3 -0
  16. package/dist/cjs/types.js.map +1 -0
  17. package/dist/cjs/utils.d.ts +17 -0
  18. package/dist/cjs/utils.js +75 -0
  19. package/dist/cjs/utils.js.map +1 -0
  20. package/dist/esm/client.d.ts +43 -0
  21. package/dist/esm/client.js +282 -0
  22. package/dist/esm/client.js.map +1 -0
  23. package/dist/esm/index.d.ts +4 -0
  24. package/dist/esm/index.js +5 -0
  25. package/dist/esm/index.js.map +1 -0
  26. package/dist/esm/server.d.ts +31 -0
  27. package/dist/esm/server.js +299 -0
  28. package/dist/esm/server.js.map +1 -0
  29. package/dist/esm/types.d.ts +83 -0
  30. package/dist/esm/types.js +2 -0
  31. package/dist/esm/types.js.map +1 -0
  32. package/dist/esm/utils.d.ts +17 -0
  33. package/dist/esm/utils.js +69 -0
  34. package/dist/esm/utils.js.map +1 -0
  35. package/eslint.config.js +143 -0
  36. package/examples/browser-example.cjs +350 -0
  37. package/examples/browser.html +255 -0
  38. package/examples/client.cjs +155 -0
  39. package/examples/cross-library-browser.html +655 -0
  40. package/examples/cross-library-client.cjs +190 -0
  41. package/examples/cross-library-server.cjs +213 -0
  42. package/examples/server.cjs +96 -0
  43. package/package.json +96 -23
  44. package/client.js +0 -192
  45. package/index.js +0 -12
  46. package/server.js +0 -175
  47. package/test.auto.proc1.js +0 -100
  48. package/test.auto.proc2.js +0 -74
  49. package/test.visual.client.html +0 -37
  50. package/test.visual.client.js +0 -63
  51. package/test.visual.server.js +0 -66
  52. package/umd/ReduxCluster.js +0 -18
  53. package/webpack-src.js +0 -6
  54. package/webpack.config.js +0 -25
@@ -0,0 +1,155 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * Basic Redux-Cluster-WS Client Example
5
+ *
6
+ * This example demonstrates how to create a WebSocket client
7
+ * that connects to a Redux-Cluster-WS server and synchronizes state.
8
+ */
9
+
10
+ const { createStore } = require("redux-cluster");
11
+ const { client } = require("../dist/cjs/index.js");
12
+ const readline = require("readline");
13
+
14
+ // Same reducer as server (must be identical for proper synchronization)
15
+ function counterReducer(state = { count: 0, lastUpdate: null }, action) {
16
+ switch (action.type) {
17
+ case "INCREMENT":
18
+ return {
19
+ count: state.count + 1,
20
+ lastUpdate: new Date().toISOString(),
21
+ };
22
+
23
+ case "DECREMENT":
24
+ return {
25
+ count: state.count - 1,
26
+ lastUpdate: new Date().toISOString(),
27
+ };
28
+
29
+ case "RESET":
30
+ return {
31
+ count: 0,
32
+ lastUpdate: new Date().toISOString(),
33
+ };
34
+
35
+ default:
36
+ return state;
37
+ }
38
+ }
39
+
40
+ console.log("šŸ”Œ Starting Redux-Cluster-WS Client Example...");
41
+
42
+ // Create Redux store
43
+ const store = createStore(counterReducer);
44
+
45
+ // Add WebSocket client capability
46
+ client(store);
47
+
48
+ // Subscribe to state changes
49
+ store.subscribe(() => {
50
+ const state = store.getState();
51
+ console.log(
52
+ `\\nšŸ“Š State synchronized: count=${state.count}, lastUpdate=${state.lastUpdate}`
53
+ );
54
+ showMenu();
55
+ });
56
+
57
+ // Connect to server
58
+ console.log("šŸ”— Connecting to server...");
59
+
60
+ store.createWSClient({
61
+ host: "ws://localhost",
62
+ port: 8088,
63
+ login: "demo",
64
+ password: "demo",
65
+ });
66
+
67
+ // Setup interactive menu
68
+ const rl = readline.createInterface({
69
+ input: process.stdin,
70
+ output: process.stdout,
71
+ });
72
+
73
+ function showMenu() {
74
+ if (store.connected) {
75
+ console.log("\\nšŸŽ® Available actions:");
76
+ console.log(" [1] Increment counter");
77
+ console.log(" [2] Decrement counter");
78
+ console.log(" [3] Reset counter");
79
+ console.log(" [4] Show current state");
80
+ console.log(" [q] Quit");
81
+ console.log("");
82
+ process.stdout.write("Choose action: ");
83
+ } else {
84
+ console.log("\\nā³ Waiting for connection...");
85
+ }
86
+ }
87
+
88
+ rl.on("line", (input) => {
89
+ const choice = input.trim().toLowerCase();
90
+
91
+ if (!store.connected) {
92
+ console.log("āŒ Not connected to server yet. Please wait...");
93
+ return;
94
+ }
95
+
96
+ switch (choice) {
97
+ case "1":
98
+ console.log("āž• Sending INCREMENT action...");
99
+ store.dispatch({ type: "INCREMENT" });
100
+ break;
101
+
102
+ case "2":
103
+ console.log("āž– Sending DECREMENT action...");
104
+ store.dispatch({ type: "DECREMENT" });
105
+ break;
106
+
107
+ case "3":
108
+ console.log("šŸ”„ Sending RESET action...");
109
+ store.dispatch({ type: "RESET" });
110
+ break;
111
+
112
+ case "4":
113
+ const state = store.getState();
114
+ console.log("\\nšŸ“‹ Current state:");
115
+ console.log(JSON.stringify(state, null, 2));
116
+ showMenu();
117
+ break;
118
+
119
+ case "q":
120
+ case "quit":
121
+ case "exit":
122
+ console.log("\\nšŸ‘‹ Goodbye!");
123
+ process.exit(0);
124
+ break;
125
+
126
+ default:
127
+ console.log("ā“ Invalid choice. Please try again.");
128
+ showMenu();
129
+ break;
130
+ }
131
+ });
132
+
133
+ // Handle connection events
134
+ setTimeout(() => {
135
+ if (store.connected) {
136
+ console.log("āœ… Connected to server!");
137
+ const state = store.getState();
138
+ console.log(`šŸ“Š Initial state: count=${state.count}`);
139
+ showMenu();
140
+ } else {
141
+ console.log("āŒ Failed to connect to server.");
142
+ console.log("šŸ’” Make sure the server is running on ws://localhost:8080");
143
+ console.log("šŸ’” Run: node examples/server.js");
144
+ process.exit(1);
145
+ }
146
+ }, 2000);
147
+
148
+ // Handle graceful shutdown
149
+ process.on("SIGINT", () => {
150
+ console.log("\\nšŸ‘‹ Shutting down client...");
151
+ rl.close();
152
+ process.exit(0);
153
+ });
154
+
155
+ console.log("ā³ Connecting... (this may take a moment)");