@derivesome/sockets 1.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 (119) hide show
  1. package/.package.json.~undo-tree~ +40 -0
  2. package/.tsconfig.cjs.json.~undo-tree~ +5 -0
  3. package/.tsconfig.json.~undo-tree~ +6 -0
  4. package/dist/cjs/env.d.ts +2 -0
  5. package/dist/cjs/env.d.ts.map +1 -0
  6. package/dist/cjs/env.js +11 -0
  7. package/dist/cjs/env.js.map +1 -0
  8. package/dist/cjs/index.d.ts +4 -0
  9. package/dist/cjs/index.d.ts.map +1 -0
  10. package/dist/cjs/index.js +20 -0
  11. package/dist/cjs/index.js.map +1 -0
  12. package/dist/cjs/server/app.d.ts +20 -0
  13. package/dist/cjs/server/app.d.ts.map +1 -0
  14. package/dist/cjs/server/app.js +153 -0
  15. package/dist/cjs/server/app.js.map +1 -0
  16. package/dist/cjs/server/events.d.ts +41 -0
  17. package/dist/cjs/server/events.d.ts.map +1 -0
  18. package/dist/cjs/server/events.js +3 -0
  19. package/dist/cjs/server/events.js.map +1 -0
  20. package/dist/cjs/server/index.d.ts +5 -0
  21. package/dist/cjs/server/index.d.ts.map +1 -0
  22. package/dist/cjs/server/index.js +21 -0
  23. package/dist/cjs/server/index.js.map +1 -0
  24. package/dist/cjs/server/plugin.d.ts +8 -0
  25. package/dist/cjs/server/plugin.d.ts.map +1 -0
  26. package/dist/cjs/server/plugin.js +3 -0
  27. package/dist/cjs/server/plugin.js.map +1 -0
  28. package/dist/cjs/server/server.d.ts +13 -0
  29. package/dist/cjs/server/server.d.ts.map +1 -0
  30. package/dist/cjs/server/server.js +54 -0
  31. package/dist/cjs/server/server.js.map +1 -0
  32. package/dist/cjs/socket.d.ts +17 -0
  33. package/dist/cjs/socket.d.ts.map +1 -0
  34. package/dist/cjs/socket.js +53 -0
  35. package/dist/cjs/socket.js.map +1 -0
  36. package/dist/cjs/utils.d.ts +2 -0
  37. package/dist/cjs/utils.d.ts.map +1 -0
  38. package/dist/cjs/utils.js +12 -0
  39. package/dist/cjs/utils.js.map +1 -0
  40. package/dist/esm/env.d.ts +2 -0
  41. package/dist/esm/env.d.ts.map +1 -0
  42. package/dist/esm/env.js +7 -0
  43. package/dist/esm/env.js.map +1 -0
  44. package/dist/esm/index.d.ts +4 -0
  45. package/dist/esm/index.d.ts.map +1 -0
  46. package/dist/esm/index.js +4 -0
  47. package/dist/esm/index.js.map +1 -0
  48. package/dist/esm/package.json +1 -0
  49. package/dist/esm/server/app.d.ts +20 -0
  50. package/dist/esm/server/app.d.ts.map +1 -0
  51. package/dist/esm/server/app.js +149 -0
  52. package/dist/esm/server/app.js.map +1 -0
  53. package/dist/esm/server/events.d.ts +41 -0
  54. package/dist/esm/server/events.d.ts.map +1 -0
  55. package/dist/esm/server/events.js +2 -0
  56. package/dist/esm/server/events.js.map +1 -0
  57. package/dist/esm/server/index.d.ts +5 -0
  58. package/dist/esm/server/index.d.ts.map +1 -0
  59. package/dist/esm/server/index.js +5 -0
  60. package/dist/esm/server/index.js.map +1 -0
  61. package/dist/esm/server/plugin.d.ts +8 -0
  62. package/dist/esm/server/plugin.d.ts.map +1 -0
  63. package/dist/esm/server/plugin.js +2 -0
  64. package/dist/esm/server/plugin.js.map +1 -0
  65. package/dist/esm/server/server.d.ts +13 -0
  66. package/dist/esm/server/server.d.ts.map +1 -0
  67. package/dist/esm/server/server.js +47 -0
  68. package/dist/esm/server/server.js.map +1 -0
  69. package/dist/esm/socket.d.ts +17 -0
  70. package/dist/esm/socket.d.ts.map +1 -0
  71. package/dist/esm/socket.js +49 -0
  72. package/dist/esm/socket.js.map +1 -0
  73. package/dist/esm/utils.d.ts +2 -0
  74. package/dist/esm/utils.d.ts.map +1 -0
  75. package/dist/esm/utils.js +8 -0
  76. package/dist/esm/utils.js.map +1 -0
  77. package/package.json +63 -0
  78. package/package.json~ +62 -0
  79. package/src/#socket-impl.ts# +4 -0
  80. package/src/.channel.ts.~undo-tree~ +12 -0
  81. package/src/.env.ts.~undo-tree~ +7 -0
  82. package/src/.index.ts.~undo-tree~ +12 -0
  83. package/src/.server.ts.~undo-tree~ +337 -0
  84. package/src/.socket-impl.ts.~undo-tree~ +9 -0
  85. package/src/.socket.ts.~undo-tree~ +196 -0
  86. package/src/.utils.ts.~undo-tree~ +6 -0
  87. package/src/channel.ts~ +14 -0
  88. package/src/env.ts +5 -0
  89. package/src/env.ts~ +5 -0
  90. package/src/index.ts +3 -0
  91. package/src/index.ts~ +2 -0
  92. package/src/server/.app.test.ts.~undo-tree~ +92 -0
  93. package/src/server/.app.ts.~undo-tree~ +283 -0
  94. package/src/server/.events.ts.~undo-tree~ +248 -0
  95. package/src/server/.index.ts.~undo-tree~ +10 -0
  96. package/src/server/.plugin.ts.~undo-tree~ +16 -0
  97. package/src/server/.server.ts.~undo-tree~ +183 -0
  98. package/src/server/app.test.ts +51 -0
  99. package/src/server/app.test.ts~ +51 -0
  100. package/src/server/app.ts +171 -0
  101. package/src/server/app.ts~ +171 -0
  102. package/src/server/events.ts +41 -0
  103. package/src/server/events.ts~ +47 -0
  104. package/src/server/index.ts +4 -0
  105. package/src/server/index.ts~ +1 -0
  106. package/src/server/plugin.ts +8 -0
  107. package/src/server/plugin.ts~ +8 -0
  108. package/src/server/server.ts +62 -0
  109. package/src/server/server.ts~ +62 -0
  110. package/src/server.ts~ +73 -0
  111. package/src/socket-impl.ts~ +5 -0
  112. package/src/socket.ts +66 -0
  113. package/src/socket.ts~ +66 -0
  114. package/src/utils.ts +7 -0
  115. package/src/utils.ts~ +7 -0
  116. package/tsconfig.cjs.json +8 -0
  117. package/tsconfig.cjs.json~ +0 -0
  118. package/tsconfig.json +24 -0
  119. package/tsconfig.json~ +24 -0
package/src/socket.ts ADDED
@@ -0,0 +1,66 @@
1
+ import { bin, BinaryBuffer, serial, type Binary } from "binencode";
2
+ import { type WebSocket as WSWebSocket } from "ws";
3
+ import { type Pat, pattern, type InferPattern, type PatLoose } from 'p-lens';
4
+ import { pubsub, type PubSub } from "@derivesome/core";
5
+
6
+ export type WebSocketImplementation = WebSocket | WSWebSocket;
7
+
8
+ export type SocketConfig = {
9
+ }
10
+
11
+ export class Socket<
12
+ Impl extends WebSocketImplementation = WebSocketImplementation,
13
+ > {
14
+ connection!: Impl;
15
+ factory: () => Impl;
16
+ ps: PubSub<Binary>
17
+
18
+ constructor(factory: () => Impl, _cfg: SocketConfig = {}) {
19
+ this.factory = factory;
20
+ this.ps = pubsub();
21
+ this.connect();
22
+ }
23
+
24
+ private connect() {
25
+ this.connection = this.factory();
26
+ this.connection.binaryType = "arraybuffer";
27
+ const con = this.connection;
28
+
29
+ if (con instanceof WebSocket) {
30
+ con.addEventListener('message', async (ev) => {
31
+ if (ev.data instanceof ArrayBuffer) {
32
+ const buff = new BinaryBuffer();
33
+ buff.data = new Uint8Array(ev.data);
34
+ try {
35
+ const decoded = serial.decode(buff);
36
+ await this.ps.publishAsync(decoded);
37
+ } catch (e) {
38
+ console.error(e);
39
+ }
40
+ }
41
+ })
42
+ }
43
+ }
44
+
45
+ sendBinary(data: Binary) {
46
+ const encoded = serial.encode(data);
47
+ this.connection.send(new Uint8Array(encoded.data));
48
+ }
49
+
50
+ send<T>(data: T) {
51
+ return this.sendBinary(bin.auto(data));
52
+ }
53
+
54
+
55
+ watch<P extends PatLoose>(
56
+ pat: P,
57
+ fn: (data: InferPattern<P>) => (void | Promise<void>)
58
+ ) {
59
+ return this.ps.subscribe(async (binary) => {
60
+ const data = serial.toJS(binary);
61
+ if (pattern.is.matching(data, pat as any)) {
62
+ await fn(data);
63
+ }
64
+ });
65
+ }
66
+ }
package/src/socket.ts~ ADDED
@@ -0,0 +1,66 @@
1
+ import { bin, BinaryBuffer, serial, type Binary } from "binencode";
2
+ import { type WebSocket as WSWebSocket } from "ws";
3
+ import { type Pat, pattern, type InferPattern, type PatLoose } from 'p-lens';
4
+ import { pubsub, type PubSub } from "@derivesome/core";
5
+
6
+ export type WebSocketImplementation = WebSocket | WSWebSocket;
7
+
8
+ export type SocketConfig = {
9
+ }
10
+
11
+ export class Socket<
12
+ Impl extends WebSocketImplementation = WebSocketImplementation,
13
+ > {
14
+ connection!: Impl;
15
+ factory: () => Impl;
16
+ ps: PubSub<Binary>
17
+
18
+ constructor(factory: () => Impl, _cfg: SocketConfig = {}) {
19
+ this.factory = factory;
20
+ this.ps = pubsub();
21
+ this.connect();
22
+ }
23
+
24
+ private connect() {
25
+ this.connection = this.factory();
26
+ this.connection.binaryType = "arraybuffer";
27
+ const con = this.connection;
28
+
29
+ if (con instanceof WebSocket) {
30
+ con.addEventListener('message', async (ev) => {
31
+ if (ev.data instanceof ArrayBuffer) {
32
+ const buff = new BinaryBuffer();
33
+ buff.data = new Uint8Array(ev.data);
34
+ try {
35
+ const decoded = serial.decode(buff);
36
+ await this.ps.publishAsync(decoded);
37
+ } catch (e) {
38
+ console.error(e);
39
+ }
40
+ }
41
+ })
42
+ }
43
+ }
44
+
45
+ sendBinary(data: Binary) {
46
+ const encoded = serial.encode(data);
47
+ this.connection.send(new Uint8Array(encoded.data));
48
+ }
49
+
50
+ send<T>(data: T) {
51
+ return this.sendBinary(bin.auto(data));
52
+ }
53
+
54
+
55
+ watch<P extends Pat>(
56
+ pat: P,
57
+ fn: (data: InferPattern<P>) => (void | Promise<void>)
58
+ ) {
59
+ return this.ps.subscribe(async (binary) => {
60
+ const data = serial.toJS(binary);
61
+ if (pattern.is.matching(data, pat)) {
62
+ await fn(data);
63
+ }
64
+ });
65
+ }
66
+ }
package/src/utils.ts ADDED
@@ -0,0 +1,7 @@
1
+ export const sleep = (n: number): Promise<void> => {
2
+ return new Promise<void>((resolve) => {
3
+ setTimeout(() => {
4
+ resolve();
5
+ }, n);
6
+ });
7
+ };
package/src/utils.ts~ ADDED
@@ -0,0 +1,7 @@
1
+ export const sleep = (n: number): Promise<void> => {
2
+ return new Promise<void>((resolve) => {
3
+ setTimeout(() => {
4
+ resolve();
5
+ }, n);
6
+ })
7
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "extends": "./tsconfig.json",
3
+ "compilerOptions": {
4
+ "module": "commonjs",
5
+ "moduleResolution": "node10",
6
+ "outDir": "./dist/cjs"
7
+ }
8
+ }
File without changes
package/tsconfig.json ADDED
@@ -0,0 +1,24 @@
1
+ {
2
+ "compilerOptions": {
3
+ "rootDir": "./src",
4
+ "outDir": "./dist/esm",
5
+ "module": "esnext",
6
+ "moduleResolution": "bundler",
7
+ "target": "esnext",
8
+ "lib": ["esnext", "dom", "dom.iterable"],
9
+ "types": ["node"],
10
+ "sourceMap": true,
11
+ "declaration": true,
12
+ "declarationMap": true,
13
+ "noUncheckedIndexedAccess": true,
14
+ "exactOptionalPropertyTypes": true,
15
+ "strict": true,
16
+ "isolatedModules": true,
17
+ "esModuleInterop": true,
18
+ "noUncheckedSideEffectImports": true,
19
+ "moduleDetection": "force",
20
+ "skipLibCheck": true
21
+ },
22
+ "include": ["./src/**/*.ts"],
23
+ "exclude": ["./src/**/*.test.ts"]
24
+ }
package/tsconfig.json~ ADDED
@@ -0,0 +1,24 @@
1
+ {
2
+ "compilerOptions": {
3
+ "rootDir": "./src",
4
+ "outDir": "./dist/esm",
5
+ "module": "esnext",
6
+ "moduleResolution": "bundler",
7
+ "target": "esnext",
8
+ "lib": ["esnext"],
9
+ "types": ["node"],
10
+ "sourceMap": true,
11
+ "declaration": true,
12
+ "declarationMap": true,
13
+ "noUncheckedIndexedAccess": true,
14
+ "exactOptionalPropertyTypes": true,
15
+ "strict": true,
16
+ "isolatedModules": true,
17
+ "esModuleInterop": true,
18
+ "noUncheckedSideEffectImports": true,
19
+ "moduleDetection": "force",
20
+ "skipLibCheck": true
21
+ },
22
+ "include": ["./src/**/*.ts"],
23
+ "exclude": ["./src/**/*.test.ts"]
24
+ }