lib0 0.2.84 → 0.2.86
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/coverage/tmp/coverage-12951-1695475540140-0.json +1 -0
- package/crypto.test.d.ts.map +1 -1
- package/deno.json +1 -0
- package/dist/crypto.test.d.ts.map +1 -1
- package/dist/index.cjs +1 -1
- package/dist/observable.cjs +83 -0
- package/dist/observable.cjs.map +1 -1
- package/dist/observable.d.ts +49 -0
- package/dist/observable.d.ts.map +1 -1
- package/dist/observable.test.d.ts +3 -0
- package/dist/observable.test.d.ts.map +1 -0
- package/dist/{websocket-44e4ead5.cjs → websocket-aa53d26d.cjs} +2 -1
- package/dist/websocket-aa53d26d.cjs.map +1 -0
- package/dist/websocket.cjs +1 -1
- package/dist/websocket.d.ts +1 -0
- package/dist/websocket.d.ts.map +1 -1
- package/observable.d.ts +49 -0
- package/observable.d.ts.map +1 -1
- package/observable.js +82 -0
- package/observable.test.d.ts +3 -0
- package/observable.test.d.ts.map +1 -0
- package/package.json +2 -1
- package/test.js +2 -0
- package/websocket.d.ts +1 -0
- package/websocket.d.ts.map +1 -1
- package/websocket.js +1 -0
- package/coverage/tmp/coverage-67819-1694526631880-0.json +0 -1
- package/dist/websocket-44e4ead5.cjs.map +0 -1
package/crypto.test.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"crypto.test.d.ts","sourceRoot":"","sources":["crypto.test.js"],"names":[],"mappings":"AAWO,6BAFI,EAAE,QAAQ,iBAkBpB;AAKM,mCAFI,EAAE,QAAQ,iBAoCpB;AAKM,0CAFI,EAAE,QAAQ,iBA8BpB;AAKM,qCAFI,EAAE,QAAQ,iBAgDpB;AAKM,8CAFI,EAAE,QAAQ,iBAwCpB;AAKM,iDAFI,EAAE,QAAQ,
|
|
1
|
+
{"version":3,"file":"crypto.test.d.ts","sourceRoot":"","sources":["crypto.test.js"],"names":[],"mappings":"AAWO,6BAFI,EAAE,QAAQ,iBAkBpB;AAKM,mCAFI,EAAE,QAAQ,iBAoCpB;AAKM,0CAFI,EAAE,QAAQ,iBA8BpB;AAKM,qCAFI,EAAE,QAAQ,iBAgDpB;AAKM,8CAFI,EAAE,QAAQ,iBAwCpB;AAKM,iDAFI,EAAE,QAAQ,iBA2EpB;AAKM,gCAFI,EAAE,QAAQ,iBAapB;mBA3RkB,cAAc"}
|
package/deno.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"crypto.test.d.ts","sourceRoot":"","sources":["../crypto.test.js"],"names":[],"mappings":"AAWO,6BAFI,EAAE,QAAQ,iBAkBpB;AAKM,mCAFI,EAAE,QAAQ,iBAoCpB;AAKM,0CAFI,EAAE,QAAQ,iBA8BpB;AAKM,qCAFI,EAAE,QAAQ,iBAgDpB;AAKM,8CAFI,EAAE,QAAQ,iBAwCpB;AAKM,iDAFI,EAAE,QAAQ,
|
|
1
|
+
{"version":3,"file":"crypto.test.d.ts","sourceRoot":"","sources":["../crypto.test.js"],"names":[],"mappings":"AAWO,6BAFI,EAAE,QAAQ,iBAkBpB;AAKM,mCAFI,EAAE,QAAQ,iBAoCpB;AAKM,0CAFI,EAAE,QAAQ,iBA8BpB;AAKM,qCAFI,EAAE,QAAQ,iBAgDpB;AAKM,8CAFI,EAAE,QAAQ,iBAwCpB;AAKM,iDAFI,EAAE,QAAQ,iBA2EpB;AAKM,gCAFI,EAAE,QAAQ,iBAapB;mBA3RkB,cAAc"}
|
package/dist/index.cjs
CHANGED
|
@@ -32,7 +32,7 @@ var string = require('./string-6d104757.cjs');
|
|
|
32
32
|
var symbol = require('./symbol-c5caa724.cjs');
|
|
33
33
|
var time = require('./time-bc2081b9.cjs');
|
|
34
34
|
var tree = require('./tree-9f3c8837.cjs');
|
|
35
|
-
var websocket = require('./websocket-
|
|
35
|
+
var websocket = require('./websocket-aa53d26d.cjs');
|
|
36
36
|
require('./storage.cjs');
|
|
37
37
|
require('./metric.cjs');
|
|
38
38
|
require('./observable.cjs');
|
package/dist/observable.cjs
CHANGED
|
@@ -14,7 +14,88 @@ var array = require('./array-704ca50e.cjs');
|
|
|
14
14
|
|
|
15
15
|
/**
|
|
16
16
|
* Handles named events.
|
|
17
|
+
* @experimental
|
|
17
18
|
*
|
|
19
|
+
* This is basically a (better typed) duplicate of Observable, which will replace Observable in the
|
|
20
|
+
* next release.
|
|
21
|
+
*
|
|
22
|
+
* @template {{[key: string]: function(...any):void}} EVENTS
|
|
23
|
+
*/
|
|
24
|
+
class ObservableV2 {
|
|
25
|
+
constructor () {
|
|
26
|
+
/**
|
|
27
|
+
* Some desc.
|
|
28
|
+
* @type {Map<string, Set<any>>}
|
|
29
|
+
*/
|
|
30
|
+
this._observers = map.create();
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* @template {string} NAME
|
|
35
|
+
* @param {NAME} name
|
|
36
|
+
* @param {EVENTS[NAME]} f
|
|
37
|
+
*/
|
|
38
|
+
on (name, f) {
|
|
39
|
+
map.setIfUndefined(this._observers, /** @type {string} */ (name), set.create).add(f);
|
|
40
|
+
return f
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* @template {string} NAME
|
|
45
|
+
* @param {NAME} name
|
|
46
|
+
* @param {EVENTS[NAME]} f
|
|
47
|
+
*/
|
|
48
|
+
once (name, f) {
|
|
49
|
+
/**
|
|
50
|
+
* @param {...any} args
|
|
51
|
+
*/
|
|
52
|
+
const _f = (...args) => {
|
|
53
|
+
this.off(name, /** @type {any} */ (_f));
|
|
54
|
+
f(...args);
|
|
55
|
+
};
|
|
56
|
+
this.on(name, /** @type {any} */ (_f));
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* @template {string} NAME
|
|
61
|
+
* @param {NAME} name
|
|
62
|
+
* @param {EVENTS[NAME]} f
|
|
63
|
+
*/
|
|
64
|
+
off (name, f) {
|
|
65
|
+
const observers = this._observers.get(name);
|
|
66
|
+
if (observers !== undefined) {
|
|
67
|
+
observers.delete(f);
|
|
68
|
+
if (observers.size === 0) {
|
|
69
|
+
this._observers.delete(name);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Emit a named event. All registered event listeners that listen to the
|
|
76
|
+
* specified name will receive the event.
|
|
77
|
+
*
|
|
78
|
+
* @todo This should catch exceptions
|
|
79
|
+
*
|
|
80
|
+
* @template {string} NAME
|
|
81
|
+
* @param {NAME} name The event name.
|
|
82
|
+
* @param {Parameters<EVENTS[NAME]>} args The arguments that are applied to the event listener.
|
|
83
|
+
*/
|
|
84
|
+
emit (name, args) {
|
|
85
|
+
// copy all listeners to an array first to make sure that no event is emitted to listeners that are subscribed while the event handler is called.
|
|
86
|
+
return array.from((this._observers.get(name) || map.create()).values()).forEach(f => f(...args))
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
destroy () {
|
|
90
|
+
this._observers = map.create();
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/* c8 ignore start */
|
|
95
|
+
/**
|
|
96
|
+
* Handles named events.
|
|
97
|
+
*
|
|
98
|
+
* @deprecated
|
|
18
99
|
* @template N
|
|
19
100
|
*/
|
|
20
101
|
class Observable {
|
|
@@ -81,6 +162,8 @@ class Observable {
|
|
|
81
162
|
this._observers = map.create();
|
|
82
163
|
}
|
|
83
164
|
}
|
|
165
|
+
/* c8 ignore end */
|
|
84
166
|
|
|
85
167
|
exports.Observable = Observable;
|
|
168
|
+
exports.ObservableV2 = ObservableV2;
|
|
86
169
|
//# sourceMappingURL=observable.cjs.map
|
package/dist/observable.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"observable.cjs","sources":["../observable.js"],"sourcesContent":["/**\n * Observable class prototype.\n *\n * @module observable\n */\n\nimport * as map from './map.js'\nimport * as set from './set.js'\nimport * as array from './array.js'\n\n/**\n * Handles named events.\n *\n * @template N\n */\nexport class Observable {\n constructor () {\n /**\n * Some desc.\n * @type {Map<N, any>}\n */\n this._observers = map.create()\n }\n\n /**\n * @param {N} name\n * @param {function} f\n */\n on (name, f) {\n map.setIfUndefined(this._observers, name, set.create).add(f)\n }\n\n /**\n * @param {N} name\n * @param {function} f\n */\n once (name, f) {\n /**\n * @param {...any} args\n */\n const _f = (...args) => {\n this.off(name, _f)\n f(...args)\n }\n this.on(name, _f)\n }\n\n /**\n * @param {N} name\n * @param {function} f\n */\n off (name, f) {\n const observers = this._observers.get(name)\n if (observers !== undefined) {\n observers.delete(f)\n if (observers.size === 0) {\n this._observers.delete(name)\n }\n }\n }\n\n /**\n * Emit a named event. All registered event listeners that listen to the\n * specified name will receive the event.\n *\n * @todo This should catch exceptions\n *\n * @param {N} name The event name.\n * @param {Array<any>} args The arguments that are applied to the event listener.\n */\n emit (name, args) {\n // copy all listeners to an array first to make sure that no event is emitted to listeners that are subscribed while the event handler is called.\n return array.from((this._observers.get(name) || map.create()).values()).forEach(f => f(...args))\n }\n\n destroy () {\n this._observers = map.create()\n }\n}\n"],"names":["map.create","map.setIfUndefined","set.create","array.from"],"mappings":";;;;;;;;AAAA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,UAAU,CAAC;AACxB,EAAE,WAAW,CAAC,GAAG;AACjB;AACA;AACA;AACA;AACA,IAAI,IAAI,CAAC,UAAU,GAAGA,UAAU,GAAE;AAClC,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE;AACf,IAAIC,kBAAkB,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,EAAEC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,EAAC;AAChE,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE;AACjB;AACA;AACA;AACA,IAAI,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,KAAK;AAC5B,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,EAAC;AACxB,MAAM,CAAC,CAAC,GAAG,IAAI,EAAC;AAChB,MAAK;AACL,IAAI,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,EAAC;AACrB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE;AAChB,IAAI,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,EAAC;AAC/C,IAAI,IAAI,SAAS,KAAK,SAAS,EAAE;AACjC,MAAM,SAAS,CAAC,MAAM,CAAC,CAAC,EAAC;AACzB,MAAM,IAAI,SAAS,CAAC,IAAI,KAAK,CAAC,EAAE;AAChC,QAAQ,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,EAAC;AACpC,OAAO;AACP,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE;AACpB;AACA,IAAI,OAAOC,UAAU,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAIH,UAAU,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AACpG,GAAG;AACH;AACA,EAAE,OAAO,CAAC,GAAG;AACb,IAAI,IAAI,CAAC,UAAU,GAAGA,UAAU,GAAE;AAClC,GAAG;AACH
|
|
1
|
+
{"version":3,"file":"observable.cjs","sources":["../observable.js"],"sourcesContent":["/**\n * Observable class prototype.\n *\n * @module observable\n */\n\nimport * as map from './map.js'\nimport * as set from './set.js'\nimport * as array from './array.js'\n\n/**\n * Handles named events.\n * @experimental\n *\n * This is basically a (better typed) duplicate of Observable, which will replace Observable in the\n * next release.\n *\n * @template {{[key: string]: function(...any):void}} EVENTS\n */\nexport class ObservableV2 {\n constructor () {\n /**\n * Some desc.\n * @type {Map<string, Set<any>>}\n */\n this._observers = map.create()\n }\n\n /**\n * @template {string} NAME\n * @param {NAME} name\n * @param {EVENTS[NAME]} f\n */\n on (name, f) {\n map.setIfUndefined(this._observers, /** @type {string} */ (name), set.create).add(f)\n return f\n }\n\n /**\n * @template {string} NAME\n * @param {NAME} name\n * @param {EVENTS[NAME]} f\n */\n once (name, f) {\n /**\n * @param {...any} args\n */\n const _f = (...args) => {\n this.off(name, /** @type {any} */ (_f))\n f(...args)\n }\n this.on(name, /** @type {any} */ (_f))\n }\n\n /**\n * @template {string} NAME\n * @param {NAME} name\n * @param {EVENTS[NAME]} f\n */\n off (name, f) {\n const observers = this._observers.get(name)\n if (observers !== undefined) {\n observers.delete(f)\n if (observers.size === 0) {\n this._observers.delete(name)\n }\n }\n }\n\n /**\n * Emit a named event. All registered event listeners that listen to the\n * specified name will receive the event.\n *\n * @todo This should catch exceptions\n *\n * @template {string} NAME\n * @param {NAME} name The event name.\n * @param {Parameters<EVENTS[NAME]>} args The arguments that are applied to the event listener.\n */\n emit (name, args) {\n // copy all listeners to an array first to make sure that no event is emitted to listeners that are subscribed while the event handler is called.\n return array.from((this._observers.get(name) || map.create()).values()).forEach(f => f(...args))\n }\n\n destroy () {\n this._observers = map.create()\n }\n}\n\n/* c8 ignore start */\n/**\n * Handles named events.\n *\n * @deprecated\n * @template N\n */\nexport class Observable {\n constructor () {\n /**\n * Some desc.\n * @type {Map<N, any>}\n */\n this._observers = map.create()\n }\n\n /**\n * @param {N} name\n * @param {function} f\n */\n on (name, f) {\n map.setIfUndefined(this._observers, name, set.create).add(f)\n }\n\n /**\n * @param {N} name\n * @param {function} f\n */\n once (name, f) {\n /**\n * @param {...any} args\n */\n const _f = (...args) => {\n this.off(name, _f)\n f(...args)\n }\n this.on(name, _f)\n }\n\n /**\n * @param {N} name\n * @param {function} f\n */\n off (name, f) {\n const observers = this._observers.get(name)\n if (observers !== undefined) {\n observers.delete(f)\n if (observers.size === 0) {\n this._observers.delete(name)\n }\n }\n }\n\n /**\n * Emit a named event. All registered event listeners that listen to the\n * specified name will receive the event.\n *\n * @todo This should catch exceptions\n *\n * @param {N} name The event name.\n * @param {Array<any>} args The arguments that are applied to the event listener.\n */\n emit (name, args) {\n // copy all listeners to an array first to make sure that no event is emitted to listeners that are subscribed while the event handler is called.\n return array.from((this._observers.get(name) || map.create()).values()).forEach(f => f(...args))\n }\n\n destroy () {\n this._observers = map.create()\n }\n}\n/* c8 ignore end */\n"],"names":["map.create","map.setIfUndefined","set.create","array.from"],"mappings":"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"}
|
package/dist/observable.d.ts
CHANGED
|
@@ -1,6 +1,55 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Handles named events.
|
|
3
|
+
* @experimental
|
|
3
4
|
*
|
|
5
|
+
* This is basically a (better typed) duplicate of Observable, which will replace Observable in the
|
|
6
|
+
* next release.
|
|
7
|
+
*
|
|
8
|
+
* @template {{[key: string]: function(...any):void}} EVENTS
|
|
9
|
+
*/
|
|
10
|
+
export class ObservableV2<EVENTS extends {
|
|
11
|
+
[key: string]: (...arg0: any[]) => void;
|
|
12
|
+
}> {
|
|
13
|
+
/**
|
|
14
|
+
* Some desc.
|
|
15
|
+
* @type {Map<string, Set<any>>}
|
|
16
|
+
*/
|
|
17
|
+
_observers: Map<string, Set<any>>;
|
|
18
|
+
/**
|
|
19
|
+
* @template {string} NAME
|
|
20
|
+
* @param {NAME} name
|
|
21
|
+
* @param {EVENTS[NAME]} f
|
|
22
|
+
*/
|
|
23
|
+
on<NAME extends string>(name: NAME, f: EVENTS[NAME]): EVENTS[NAME];
|
|
24
|
+
/**
|
|
25
|
+
* @template {string} NAME
|
|
26
|
+
* @param {NAME} name
|
|
27
|
+
* @param {EVENTS[NAME]} f
|
|
28
|
+
*/
|
|
29
|
+
once<NAME_1 extends string>(name: NAME_1, f: EVENTS[NAME_1]): void;
|
|
30
|
+
/**
|
|
31
|
+
* @template {string} NAME
|
|
32
|
+
* @param {NAME} name
|
|
33
|
+
* @param {EVENTS[NAME]} f
|
|
34
|
+
*/
|
|
35
|
+
off<NAME_2 extends string>(name: NAME_2, f: EVENTS[NAME_2]): void;
|
|
36
|
+
/**
|
|
37
|
+
* Emit a named event. All registered event listeners that listen to the
|
|
38
|
+
* specified name will receive the event.
|
|
39
|
+
*
|
|
40
|
+
* @todo This should catch exceptions
|
|
41
|
+
*
|
|
42
|
+
* @template {string} NAME
|
|
43
|
+
* @param {NAME} name The event name.
|
|
44
|
+
* @param {Parameters<EVENTS[NAME]>} args The arguments that are applied to the event listener.
|
|
45
|
+
*/
|
|
46
|
+
emit<NAME_3 extends string>(name: NAME_3, args: Parameters<EVENTS[NAME_3]>): void;
|
|
47
|
+
destroy(): void;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Handles named events.
|
|
51
|
+
*
|
|
52
|
+
* @deprecated
|
|
4
53
|
* @template N
|
|
5
54
|
*/
|
|
6
55
|
export class Observable<N> {
|
package/dist/observable.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"observable.d.ts","sourceRoot":"","sources":["../observable.js"],"names":[],"mappings":"AAUA;;;;
|
|
1
|
+
{"version":3,"file":"observable.d.ts","sourceRoot":"","sources":["../observable.js"],"names":[],"mappings":"AAUA;;;;;;;;GAQG;AACH;6BAF0C,GAAG,OAAE,IAAI;;IAI/C;;;OAGG;IACH,YAFU,IAAI,MAAM,EAAE,IAAI,GAAG,CAAC,CAAC,CAED;IAGhC;;;;OAIG;IACH,mEAGC;IAED;;;;OAIG;IACH,mEASC;IAED;;;;OAIG;IACH,kEAQC;IAED;;;;;;;;;OASG;IACH,kFAGC;IAED,gBAEC;CACF;AAGD;;;;;GAKG;AACH;IAEI;;;OAGG;IACH,YAFU,IAAI,CAAC,EAAE,GAAG,CAAC,CAES;IAGhC;;;OAGG;IACH,SAHW,CAAC,qBAKX;IAED;;;OAGG;IACH,WAHW,CAAC,qBAYX;IAED;;;OAGG;IACH,UAHW,CAAC,qBAWX;IAED;;;;;;;;OAQG;IACH,WAHW,CAAC,QACD,MAAM,GAAG,CAAC,QAKpB;IAED,gBAEC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"observable.test.d.ts","sourceRoot":"","sources":["../observable.test.js"],"names":[],"mappings":"AAMO,yCAFI,EAAE,QAAQ,QA6CpB;mBAjDkB,cAAc"}
|
|
@@ -81,6 +81,7 @@ const setupWS = (wsclient) => {
|
|
|
81
81
|
};
|
|
82
82
|
|
|
83
83
|
/**
|
|
84
|
+
* @deprecated
|
|
84
85
|
* @extends Observable<string>
|
|
85
86
|
*/
|
|
86
87
|
class WebsocketClient extends observable.Observable {
|
|
@@ -153,4 +154,4 @@ var websocket = /*#__PURE__*/Object.freeze({
|
|
|
153
154
|
|
|
154
155
|
exports.WebsocketClient = WebsocketClient;
|
|
155
156
|
exports.websocket = websocket;
|
|
156
|
-
//# sourceMappingURL=websocket-
|
|
157
|
+
//# sourceMappingURL=websocket-aa53d26d.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"websocket-aa53d26d.cjs","sources":["../websocket.js"],"sourcesContent":["/* eslint-env browser */\n\n/**\n * Tiny websocket connection handler.\n *\n * Implements exponential backoff reconnects, ping/pong, and a nice event system using [lib0/observable].\n *\n * @module websocket\n */\n\nimport { Observable } from './observable.js'\nimport * as time from './time.js'\nimport * as math from './math.js'\n\nconst reconnectTimeoutBase = 1200\nconst maxReconnectTimeout = 2500\n// @todo - this should depend on awareness.outdatedTime\nconst messageReconnectTimeout = 30000\n\n/**\n * @param {WebsocketClient} wsclient\n */\nconst setupWS = (wsclient) => {\n if (wsclient.shouldConnect && wsclient.ws === null) {\n const websocket = new WebSocket(wsclient.url)\n const binaryType = wsclient.binaryType\n /**\n * @type {any}\n */\n let pingTimeout = null\n if (binaryType) {\n websocket.binaryType = binaryType\n }\n wsclient.ws = websocket\n wsclient.connecting = true\n wsclient.connected = false\n websocket.onmessage = event => {\n wsclient.lastMessageReceived = time.getUnixTime()\n const data = event.data\n const message = typeof data === 'string' ? JSON.parse(data) : data\n if (message && message.type === 'pong') {\n clearTimeout(pingTimeout)\n pingTimeout = setTimeout(sendPing, messageReconnectTimeout / 2)\n }\n wsclient.emit('message', [message, wsclient])\n }\n /**\n * @param {any} error\n */\n const onclose = error => {\n if (wsclient.ws !== null) {\n wsclient.ws = null\n wsclient.connecting = false\n if (wsclient.connected) {\n wsclient.connected = false\n wsclient.emit('disconnect', [{ type: 'disconnect', error }, wsclient])\n } else {\n wsclient.unsuccessfulReconnects++\n }\n // Start with no reconnect timeout and increase timeout by\n // log10(wsUnsuccessfulReconnects).\n // The idea is to increase reconnect timeout slowly and have no reconnect\n // timeout at the beginning (log(1) = 0)\n setTimeout(setupWS, math.min(math.log10(wsclient.unsuccessfulReconnects + 1) * reconnectTimeoutBase, maxReconnectTimeout), wsclient)\n }\n clearTimeout(pingTimeout)\n }\n const sendPing = () => {\n if (wsclient.ws === websocket) {\n wsclient.send({\n type: 'ping'\n })\n }\n }\n websocket.onclose = () => onclose(null)\n websocket.onerror = error => onclose(error)\n websocket.onopen = () => {\n wsclient.lastMessageReceived = time.getUnixTime()\n wsclient.connecting = false\n wsclient.connected = true\n wsclient.unsuccessfulReconnects = 0\n wsclient.emit('connect', [{ type: 'connect' }, wsclient])\n // set ping\n pingTimeout = setTimeout(sendPing, messageReconnectTimeout / 2)\n }\n }\n}\n\n/**\n * @deprecated\n * @extends Observable<string>\n */\nexport class WebsocketClient extends Observable {\n /**\n * @param {string} url\n * @param {object} opts\n * @param {'arraybuffer' | 'blob' | null} [opts.binaryType] Set `ws.binaryType`\n */\n constructor (url, { binaryType } = {}) {\n super()\n this.url = url\n /**\n * @type {WebSocket?}\n */\n this.ws = null\n this.binaryType = binaryType || null\n this.connected = false\n this.connecting = false\n this.unsuccessfulReconnects = 0\n this.lastMessageReceived = 0\n /**\n * Whether to connect to other peers or not\n * @type {boolean}\n */\n this.shouldConnect = true\n this._checkInterval = setInterval(() => {\n if (this.connected && messageReconnectTimeout < time.getUnixTime() - this.lastMessageReceived) {\n // no message received in a long time - not even your own awareness\n // updates (which are updated every 15 seconds)\n /** @type {WebSocket} */ (this.ws).close()\n }\n }, messageReconnectTimeout / 2)\n setupWS(this)\n }\n\n /**\n * @param {any} message\n */\n send (message) {\n if (this.ws) {\n this.ws.send(JSON.stringify(message))\n }\n }\n\n destroy () {\n clearInterval(this._checkInterval)\n this.disconnect()\n super.destroy()\n }\n\n disconnect () {\n this.shouldConnect = false\n if (this.ws !== null) {\n this.ws.close()\n }\n }\n\n connect () {\n this.shouldConnect = true\n if (!this.connected && this.ws === null) {\n setupWS(this)\n }\n }\n}\n"],"names":["time.getUnixTime","math.min","math.log10","Observable"],"mappings":"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"}
|
package/dist/websocket.cjs
CHANGED
|
@@ -5,7 +5,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
5
5
|
require('./observable.cjs');
|
|
6
6
|
require('./time-bc2081b9.cjs');
|
|
7
7
|
require('./math-08e068f9.cjs');
|
|
8
|
-
var websocket = require('./websocket-
|
|
8
|
+
var websocket = require('./websocket-aa53d26d.cjs');
|
|
9
9
|
require('./map-9a5915e4.cjs');
|
|
10
10
|
require('./set-0f209abb.cjs');
|
|
11
11
|
require('./array-704ca50e.cjs');
|
package/dist/websocket.d.ts
CHANGED
package/dist/websocket.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"websocket.d.ts","sourceRoot":"","sources":["../websocket.js"],"names":[],"mappings":"AAwFA
|
|
1
|
+
{"version":3,"file":"websocket.d.ts","sourceRoot":"","sources":["../websocket.js"],"names":[],"mappings":"AAwFA;;;GAGG;AACH;IACE;;;;OAIG;IACH,iBAJW,MAAM;QAE+B,UAAU;OA2BzD;IAvBC,YAAc;IACd;;OAEG;IACH,IAFU,SAAS,QAEL;IACd,0CAAoC;IACpC,mBAAsB;IACtB,oBAAuB;IACvB,+BAA+B;IAC/B,4BAA4B;IAC5B;;;OAGG;IACH,eAFU,OAAO,CAEQ;IACzB,6BAM+B;IAIjC;;OAEG;IACH,cAFW,GAAG,QAMb;IAQD,mBAKC;IAED,gBAKC;CACF;2BA/I0B,iBAAiB"}
|
package/observable.d.ts
CHANGED
|
@@ -1,6 +1,55 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Handles named events.
|
|
3
|
+
* @experimental
|
|
3
4
|
*
|
|
5
|
+
* This is basically a (better typed) duplicate of Observable, which will replace Observable in the
|
|
6
|
+
* next release.
|
|
7
|
+
*
|
|
8
|
+
* @template {{[key: string]: function(...any):void}} EVENTS
|
|
9
|
+
*/
|
|
10
|
+
export class ObservableV2<EVENTS extends {
|
|
11
|
+
[key: string]: (...arg0: any[]) => void;
|
|
12
|
+
}> {
|
|
13
|
+
/**
|
|
14
|
+
* Some desc.
|
|
15
|
+
* @type {Map<string, Set<any>>}
|
|
16
|
+
*/
|
|
17
|
+
_observers: Map<string, Set<any>>;
|
|
18
|
+
/**
|
|
19
|
+
* @template {string} NAME
|
|
20
|
+
* @param {NAME} name
|
|
21
|
+
* @param {EVENTS[NAME]} f
|
|
22
|
+
*/
|
|
23
|
+
on<NAME extends string>(name: NAME, f: EVENTS[NAME]): EVENTS[NAME];
|
|
24
|
+
/**
|
|
25
|
+
* @template {string} NAME
|
|
26
|
+
* @param {NAME} name
|
|
27
|
+
* @param {EVENTS[NAME]} f
|
|
28
|
+
*/
|
|
29
|
+
once<NAME_1 extends string>(name: NAME_1, f: EVENTS[NAME_1]): void;
|
|
30
|
+
/**
|
|
31
|
+
* @template {string} NAME
|
|
32
|
+
* @param {NAME} name
|
|
33
|
+
* @param {EVENTS[NAME]} f
|
|
34
|
+
*/
|
|
35
|
+
off<NAME_2 extends string>(name: NAME_2, f: EVENTS[NAME_2]): void;
|
|
36
|
+
/**
|
|
37
|
+
* Emit a named event. All registered event listeners that listen to the
|
|
38
|
+
* specified name will receive the event.
|
|
39
|
+
*
|
|
40
|
+
* @todo This should catch exceptions
|
|
41
|
+
*
|
|
42
|
+
* @template {string} NAME
|
|
43
|
+
* @param {NAME} name The event name.
|
|
44
|
+
* @param {Parameters<EVENTS[NAME]>} args The arguments that are applied to the event listener.
|
|
45
|
+
*/
|
|
46
|
+
emit<NAME_3 extends string>(name: NAME_3, args: Parameters<EVENTS[NAME_3]>): void;
|
|
47
|
+
destroy(): void;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Handles named events.
|
|
51
|
+
*
|
|
52
|
+
* @deprecated
|
|
4
53
|
* @template N
|
|
5
54
|
*/
|
|
6
55
|
export class Observable<N> {
|
package/observable.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"observable.d.ts","sourceRoot":"","sources":["observable.js"],"names":[],"mappings":"AAUA;;;;
|
|
1
|
+
{"version":3,"file":"observable.d.ts","sourceRoot":"","sources":["observable.js"],"names":[],"mappings":"AAUA;;;;;;;;GAQG;AACH;6BAF0C,GAAG,OAAE,IAAI;;IAI/C;;;OAGG;IACH,YAFU,IAAI,MAAM,EAAE,IAAI,GAAG,CAAC,CAAC,CAED;IAGhC;;;;OAIG;IACH,mEAGC;IAED;;;;OAIG;IACH,mEASC;IAED;;;;OAIG;IACH,kEAQC;IAED;;;;;;;;;OASG;IACH,kFAGC;IAED,gBAEC;CACF;AAGD;;;;;GAKG;AACH;IAEI;;;OAGG;IACH,YAFU,IAAI,CAAC,EAAE,GAAG,CAAC,CAES;IAGhC;;;OAGG;IACH,SAHW,CAAC,qBAKX;IAED;;;OAGG;IACH,WAHW,CAAC,qBAYX;IAED;;;OAGG;IACH,UAHW,CAAC,qBAWX;IAED;;;;;;;;OAQG;IACH,WAHW,CAAC,QACD,MAAM,GAAG,CAAC,QAKpB;IAED,gBAEC;CACF"}
|
package/observable.js
CHANGED
|
@@ -10,7 +10,88 @@ import * as array from './array.js'
|
|
|
10
10
|
|
|
11
11
|
/**
|
|
12
12
|
* Handles named events.
|
|
13
|
+
* @experimental
|
|
13
14
|
*
|
|
15
|
+
* This is basically a (better typed) duplicate of Observable, which will replace Observable in the
|
|
16
|
+
* next release.
|
|
17
|
+
*
|
|
18
|
+
* @template {{[key: string]: function(...any):void}} EVENTS
|
|
19
|
+
*/
|
|
20
|
+
export class ObservableV2 {
|
|
21
|
+
constructor () {
|
|
22
|
+
/**
|
|
23
|
+
* Some desc.
|
|
24
|
+
* @type {Map<string, Set<any>>}
|
|
25
|
+
*/
|
|
26
|
+
this._observers = map.create()
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* @template {string} NAME
|
|
31
|
+
* @param {NAME} name
|
|
32
|
+
* @param {EVENTS[NAME]} f
|
|
33
|
+
*/
|
|
34
|
+
on (name, f) {
|
|
35
|
+
map.setIfUndefined(this._observers, /** @type {string} */ (name), set.create).add(f)
|
|
36
|
+
return f
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* @template {string} NAME
|
|
41
|
+
* @param {NAME} name
|
|
42
|
+
* @param {EVENTS[NAME]} f
|
|
43
|
+
*/
|
|
44
|
+
once (name, f) {
|
|
45
|
+
/**
|
|
46
|
+
* @param {...any} args
|
|
47
|
+
*/
|
|
48
|
+
const _f = (...args) => {
|
|
49
|
+
this.off(name, /** @type {any} */ (_f))
|
|
50
|
+
f(...args)
|
|
51
|
+
}
|
|
52
|
+
this.on(name, /** @type {any} */ (_f))
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* @template {string} NAME
|
|
57
|
+
* @param {NAME} name
|
|
58
|
+
* @param {EVENTS[NAME]} f
|
|
59
|
+
*/
|
|
60
|
+
off (name, f) {
|
|
61
|
+
const observers = this._observers.get(name)
|
|
62
|
+
if (observers !== undefined) {
|
|
63
|
+
observers.delete(f)
|
|
64
|
+
if (observers.size === 0) {
|
|
65
|
+
this._observers.delete(name)
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Emit a named event. All registered event listeners that listen to the
|
|
72
|
+
* specified name will receive the event.
|
|
73
|
+
*
|
|
74
|
+
* @todo This should catch exceptions
|
|
75
|
+
*
|
|
76
|
+
* @template {string} NAME
|
|
77
|
+
* @param {NAME} name The event name.
|
|
78
|
+
* @param {Parameters<EVENTS[NAME]>} args The arguments that are applied to the event listener.
|
|
79
|
+
*/
|
|
80
|
+
emit (name, args) {
|
|
81
|
+
// copy all listeners to an array first to make sure that no event is emitted to listeners that are subscribed while the event handler is called.
|
|
82
|
+
return array.from((this._observers.get(name) || map.create()).values()).forEach(f => f(...args))
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
destroy () {
|
|
86
|
+
this._observers = map.create()
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/* c8 ignore start */
|
|
91
|
+
/**
|
|
92
|
+
* Handles named events.
|
|
93
|
+
*
|
|
94
|
+
* @deprecated
|
|
14
95
|
* @template N
|
|
15
96
|
*/
|
|
16
97
|
export class Observable {
|
|
@@ -77,3 +158,4 @@ export class Observable {
|
|
|
77
158
|
this._observers = map.create()
|
|
78
159
|
}
|
|
79
160
|
}
|
|
161
|
+
/* c8 ignore end */
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"observable.test.d.ts","sourceRoot":"","sources":["observable.test.js"],"names":[],"mappings":"AAMO,yCAFI,EAAE,QAAQ,QA6CpB;mBAjDkB,cAAc"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lib0",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.86",
|
|
4
4
|
"description": "",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"type": "module",
|
|
@@ -430,6 +430,7 @@
|
|
|
430
430
|
"types": "./webcrypto.d.ts",
|
|
431
431
|
"deno": "./webcrypto.deno.js",
|
|
432
432
|
"bun": "./webcrypto.js",
|
|
433
|
+
"browser": "./webcrypto.js",
|
|
433
434
|
"node": {
|
|
434
435
|
"module": "./webcrypto.node.js",
|
|
435
436
|
"require": "./dist/webcrypto.node.cjs",
|
package/test.js
CHANGED
|
@@ -22,6 +22,7 @@ import * as eventloop from './eventloop.test.js'
|
|
|
22
22
|
import * as time from './time.test.js'
|
|
23
23
|
import * as pair from './pair.test.js'
|
|
24
24
|
import * as object from './object.test.js'
|
|
25
|
+
import * as observable from './observable.test.js'
|
|
25
26
|
import * as math from './math.test.js'
|
|
26
27
|
import * as number from './number.test.js'
|
|
27
28
|
import * as buffer from './buffer.test.js'
|
|
@@ -65,6 +66,7 @@ runTests({
|
|
|
65
66
|
time,
|
|
66
67
|
pair,
|
|
67
68
|
object,
|
|
69
|
+
observable,
|
|
68
70
|
math,
|
|
69
71
|
number,
|
|
70
72
|
buffer,
|
package/websocket.d.ts
CHANGED
package/websocket.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"websocket.d.ts","sourceRoot":"","sources":["websocket.js"],"names":[],"mappings":"AAwFA
|
|
1
|
+
{"version":3,"file":"websocket.d.ts","sourceRoot":"","sources":["websocket.js"],"names":[],"mappings":"AAwFA;;;GAGG;AACH;IACE;;;;OAIG;IACH,iBAJW,MAAM;QAE+B,UAAU;OA2BzD;IAvBC,YAAc;IACd;;OAEG;IACH,IAFU,SAAS,QAEL;IACd,0CAAoC;IACpC,mBAAsB;IACtB,oBAAuB;IACvB,+BAA+B;IAC/B,4BAA4B;IAC5B;;;OAGG;IACH,eAFU,OAAO,CAEQ;IACzB,6BAM+B;IAIjC;;OAEG;IACH,cAFW,GAAG,QAMb;IAQD,mBAKC;IAED,gBAKC;CACF;2BA/I0B,iBAAiB"}
|