@vworlds/vecs 1.0.24 → 1.0.26
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/README.md +29 -778
- package/dist/component.d.ts +1 -1
- package/dist/component.js +1 -1
- package/dist/component.js.map +1 -1
- package/dist/component_meta.d.ts +5 -1
- package/dist/component_meta.js +10 -0
- package/dist/component_meta.js.map +1 -1
- package/dist/dsl.d.ts +2 -2
- package/dist/entity/entity.base.d.ts +2 -18
- package/dist/entity/entity.base.js +2 -20
- package/dist/entity/entity.base.js.map +1 -1
- package/dist/entity/entity.components.d.ts +1 -0
- package/dist/entity/entity.components.js +50 -0
- package/dist/entity/entity.components.js.map +1 -1
- package/dist/entity/entity.lifecycle.d.ts +3 -3
- package/dist/entity/entity.lifecycle.js +6 -9
- package/dist/entity/entity.lifecycle.js.map +1 -1
- package/dist/entity/entity.relationships.js +2 -2
- package/dist/entity/entity.relationships.js.map +1 -1
- package/dist/filter.d.ts +1 -0
- package/dist/filter.js +3 -2
- package/dist/filter.js.map +1 -1
- package/dist/index.d.ts +4 -2
- package/dist/index.js +4 -2
- package/dist/index.js.map +1 -1
- package/dist/inject.d.ts +3 -2
- package/dist/inject.js.map +1 -1
- package/dist/modules/implements.d.ts +14 -0
- package/dist/modules/implements.js +98 -0
- package/dist/modules/implements.js.map +1 -0
- package/dist/package.json +1 -8
- package/dist/query/callbacks.d.ts +6 -2
- package/dist/query/callbacks.js +5 -2
- package/dist/query/callbacks.js.map +1 -1
- package/dist/query/query.d.ts +14 -1
- package/dist/query/query.js +26 -15
- package/dist/query/query.js.map +1 -1
- package/dist/system.d.ts +5 -4
- package/dist/system.js +17 -6
- package/dist/system.js.map +1 -1
- package/dist/util/array_map.d.ts +70 -12
- package/dist/util/array_map.js +113 -26
- package/dist/util/array_map.js.map +1 -1
- package/dist/util/bitset.js +0 -17
- package/dist/util/bitset.js.map +1 -1
- package/dist/util/events.d.ts +42 -12
- package/dist/util/events.js +94 -43
- package/dist/util/events.js.map +1 -1
- package/dist/util/ordered_set.js +43 -19
- package/dist/util/ordered_set.js.map +1 -1
- package/dist/world/world.deferred.js +2 -0
- package/dist/world/world.deferred.js.map +1 -1
- package/dist/world/world.entities.d.ts +8 -1
- package/dist/world/world.entities.js +25 -6
- package/dist/world/world.entities.js.map +1 -1
- package/dist/world/world.js +8 -1
- package/dist/world/world.js.map +1 -1
- package/dist/world/world.queries.js +6 -1
- package/dist/world/world.queries.js.map +1 -1
- package/dist/world/world.storage.d.ts +2 -2
- package/dist/world/world.storage.js +6 -3
- package/dist/world/world.storage.js.map +1 -1
- package/docs/README.md +50 -0
- package/docs/components.md +267 -0
- package/docs/concepts.md +86 -0
- package/docs/design-guide.md +506 -0
- package/docs/entities.md +175 -0
- package/docs/execution-model.md +173 -0
- package/docs/getting-started.md +215 -0
- package/docs/glossary.md +113 -0
- package/docs/modules.md +108 -0
- package/docs/queries-and-filters.md +187 -0
- package/docs/relationships.md +148 -0
- package/docs/systems.md +311 -0
- package/docs/utilities.md +139 -0
- package/package.json +1 -8
package/dist/util/array_map.d.ts
CHANGED
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* A `Map<number, T>` substitute backed by a sparse JavaScript array.
|
|
2
|
+
* A cheap `Map<number, T>` substitute backed directly by a sparse JavaScript array.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* instances and per-type metadata.
|
|
4
|
+
* Use this when callers only need random access (`get`, `set`, `has`, `delete`)
|
|
5
|
+
* by non-negative integer keys. Lookups are a single array read and memory usage
|
|
6
|
+
* is one sparse backing array, so it is cheaper than {@link IterableArrayMap}.
|
|
8
7
|
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
8
|
+
* This does not support iteration. Sparse holes are skipped only implicitly by
|
|
9
|
+
* `get`/`has`, and high key values can create a large sparse backing array.
|
|
11
10
|
*
|
|
12
11
|
* @typeParam T - Value type stored in the map.
|
|
13
12
|
*/
|
|
@@ -41,21 +40,80 @@ export declare class ArrayMap<T> {
|
|
|
41
40
|
* @param key - Non-negative integer key.
|
|
42
41
|
*/
|
|
43
42
|
delete(key: number): void;
|
|
43
|
+
/** Remove all entries and reset {@link size} to zero. */
|
|
44
|
+
clear(): void;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* An iterable `Map<number, T>` substitute backed by dense entries plus sparse indexes.
|
|
48
|
+
*
|
|
49
|
+
* Use this when callers need fast `forEach` or `values` over present entries.
|
|
50
|
+
* Random access resolves `key -> dense index` through {@link ArrayMap}, then
|
|
51
|
+
* indexes into `_items`; iteration walks the dense `_items` array directly.
|
|
52
|
+
*
|
|
53
|
+
* Deletes keep `_items` dense by moving the last value into the removed slot
|
|
54
|
+
* and updating the moved value's stored index.
|
|
55
|
+
*
|
|
56
|
+
* Compared with {@link ArrayMap}, this costs extra memory for tuple storage and
|
|
57
|
+
* an index map, and `delete`/new `set` do more bookkeeping. In return, iteration
|
|
58
|
+
* is dense and does not scan sparse holes.
|
|
59
|
+
*
|
|
60
|
+
* @typeParam T - Value type stored in the map.
|
|
61
|
+
*/
|
|
62
|
+
export declare class IterableArrayMap<T> {
|
|
63
|
+
private readonly _indices;
|
|
64
|
+
private readonly _items;
|
|
65
|
+
/** The number of entries currently in the map. */
|
|
66
|
+
get size(): number;
|
|
67
|
+
/**
|
|
68
|
+
* Insert or replace the value at `key`.
|
|
69
|
+
*
|
|
70
|
+
* @param key - Non-negative integer key.
|
|
71
|
+
* @param value - Value to store.
|
|
72
|
+
*/
|
|
73
|
+
set(key: number, value: T): void;
|
|
74
|
+
/**
|
|
75
|
+
* Retrieve the value stored at `key`, or `undefined` if no entry exists.
|
|
76
|
+
*
|
|
77
|
+
* @param key - Non-negative integer key.
|
|
78
|
+
*/
|
|
79
|
+
get(key: number): T | undefined;
|
|
80
|
+
/**
|
|
81
|
+
* Return `true` when an entry exists at `key`.
|
|
82
|
+
*
|
|
83
|
+
* @param key - Non-negative integer key.
|
|
84
|
+
*/
|
|
85
|
+
has(key: number): boolean;
|
|
86
|
+
/**
|
|
87
|
+
* Remove the entry at `key`. Does nothing if no entry exists there.
|
|
88
|
+
*
|
|
89
|
+
* @param key - Non-negative integer key.
|
|
90
|
+
*/
|
|
91
|
+
delete(key: number): void;
|
|
44
92
|
/**
|
|
45
|
-
* Visit every present entry in
|
|
93
|
+
* Visit every present entry in dense item order.
|
|
46
94
|
*
|
|
47
95
|
* @param callback - Invoked with `(value, key, map)` for each entry.
|
|
48
96
|
*/
|
|
49
|
-
forEach(callback: (value: T, key: number, map:
|
|
50
|
-
/**
|
|
97
|
+
forEach(callback: (value: T, key: number, map: IterableArrayMap<T>) => void): void;
|
|
98
|
+
/**
|
|
99
|
+
* Return an iterator over `[key, value]` entries in dense item order.
|
|
100
|
+
*
|
|
101
|
+
* Entries are backed by the map's internal storage for speed. Treat them as
|
|
102
|
+
* immutable; mutating them through casts or plain JavaScript can corrupt the
|
|
103
|
+
* map's key index.
|
|
104
|
+
*/
|
|
105
|
+
entries(): IterableIterator<readonly [number, T]>;
|
|
106
|
+
/** Return an iterator over `[key, value]` entries in dense item order. */
|
|
107
|
+
[Symbol.iterator](): IterableIterator<readonly [number, T]>;
|
|
108
|
+
/** Return every present value in dense item order. */
|
|
51
109
|
values(): T[];
|
|
52
110
|
/** Remove all entries and reset {@link size} to zero. */
|
|
53
111
|
clear(): void;
|
|
54
112
|
}
|
|
55
113
|
/**
|
|
56
|
-
* Read-only view of an {@link
|
|
114
|
+
* Read-only view of an {@link IterableArrayMap}: the mutating methods `set`, `delete`,
|
|
57
115
|
* and `clear` are omitted.
|
|
58
116
|
*
|
|
59
117
|
* @typeParam T - Value type stored in the map.
|
|
60
118
|
*/
|
|
61
|
-
export type
|
|
119
|
+
export type ReadonlyIterableArrayMap<T> = Omit<IterableArrayMap<T>, "set" | "delete" | "clear">;
|
package/dist/util/array_map.js
CHANGED
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* A `Map<number, T>` substitute backed by a sparse JavaScript array.
|
|
2
|
+
* A cheap `Map<number, T>` substitute backed directly by a sparse JavaScript array.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* instances and per-type metadata.
|
|
4
|
+
* Use this when callers only need random access (`get`, `set`, `has`, `delete`)
|
|
5
|
+
* by non-negative integer keys. Lookups are a single array read and memory usage
|
|
6
|
+
* is one sparse backing array, so it is cheaper than {@link IterableArrayMap}.
|
|
8
7
|
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
8
|
+
* This does not support iteration. Sparse holes are skipped only implicitly by
|
|
9
|
+
* `get`/`has`, and high key values can create a large sparse backing array.
|
|
11
10
|
*
|
|
12
11
|
* @typeParam T - Value type stored in the map.
|
|
13
12
|
*/
|
|
@@ -61,36 +60,124 @@ export class ArrayMap {
|
|
|
61
60
|
this._size--;
|
|
62
61
|
}
|
|
63
62
|
}
|
|
63
|
+
/** Remove all entries and reset {@link size} to zero. */
|
|
64
|
+
clear() {
|
|
65
|
+
this._backend.length = 0;
|
|
66
|
+
this._size = 0;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* An iterable `Map<number, T>` substitute backed by dense entries plus sparse indexes.
|
|
71
|
+
*
|
|
72
|
+
* Use this when callers need fast `forEach` or `values` over present entries.
|
|
73
|
+
* Random access resolves `key -> dense index` through {@link ArrayMap}, then
|
|
74
|
+
* indexes into `_items`; iteration walks the dense `_items` array directly.
|
|
75
|
+
*
|
|
76
|
+
* Deletes keep `_items` dense by moving the last value into the removed slot
|
|
77
|
+
* and updating the moved value's stored index.
|
|
78
|
+
*
|
|
79
|
+
* Compared with {@link ArrayMap}, this costs extra memory for tuple storage and
|
|
80
|
+
* an index map, and `delete`/new `set` do more bookkeeping. In return, iteration
|
|
81
|
+
* is dense and does not scan sparse holes.
|
|
82
|
+
*
|
|
83
|
+
* @typeParam T - Value type stored in the map.
|
|
84
|
+
*/
|
|
85
|
+
export class IterableArrayMap {
|
|
86
|
+
constructor() {
|
|
87
|
+
this._indices = new ArrayMap();
|
|
88
|
+
this._items = [];
|
|
89
|
+
}
|
|
90
|
+
/** The number of entries currently in the map. */
|
|
91
|
+
get size() {
|
|
92
|
+
return this._items.length;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Insert or replace the value at `key`.
|
|
96
|
+
*
|
|
97
|
+
* @param key - Non-negative integer key.
|
|
98
|
+
* @param value - Value to store.
|
|
99
|
+
*/
|
|
100
|
+
set(key, value) {
|
|
101
|
+
const existingIndex = this._indices.get(key);
|
|
102
|
+
if (existingIndex !== undefined) {
|
|
103
|
+
this._items[existingIndex] = [key, value];
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
const index = this._items.length;
|
|
107
|
+
this._indices.set(key, index);
|
|
108
|
+
this._items.push([key, value]);
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Retrieve the value stored at `key`, or `undefined` if no entry exists.
|
|
112
|
+
*
|
|
113
|
+
* @param key - Non-negative integer key.
|
|
114
|
+
*/
|
|
115
|
+
get(key) {
|
|
116
|
+
const index = this._indices.get(key);
|
|
117
|
+
return index === undefined ? undefined : this._items[index][1];
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Return `true` when an entry exists at `key`.
|
|
121
|
+
*
|
|
122
|
+
* @param key - Non-negative integer key.
|
|
123
|
+
*/
|
|
124
|
+
has(key) {
|
|
125
|
+
return this._indices.has(key);
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Remove the entry at `key`. Does nothing if no entry exists there.
|
|
129
|
+
*
|
|
130
|
+
* @param key - Non-negative integer key.
|
|
131
|
+
*/
|
|
132
|
+
delete(key) {
|
|
133
|
+
const index = this._indices.get(key);
|
|
134
|
+
if (index === undefined) {
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
const lastIndex = this._items.length - 1;
|
|
138
|
+
if (index !== lastIndex) {
|
|
139
|
+
const lastItem = this._items[lastIndex];
|
|
140
|
+
this._items[index] = lastItem;
|
|
141
|
+
const lastKey = lastItem[0];
|
|
142
|
+
this._indices.set(lastKey, index);
|
|
143
|
+
}
|
|
144
|
+
this._items.pop();
|
|
145
|
+
this._indices.delete(key);
|
|
146
|
+
}
|
|
64
147
|
/**
|
|
65
|
-
* Visit every present entry in
|
|
148
|
+
* Visit every present entry in dense item order.
|
|
66
149
|
*
|
|
67
150
|
* @param callback - Invoked with `(value, key, map)` for each entry.
|
|
68
151
|
*/
|
|
69
152
|
forEach(callback) {
|
|
70
|
-
const
|
|
71
|
-
for (let i = 0; i <
|
|
72
|
-
const value =
|
|
73
|
-
|
|
74
|
-
callback(value, i, this);
|
|
75
|
-
}
|
|
153
|
+
const items = this._items;
|
|
154
|
+
for (let i = 0; i < items.length; i++) {
|
|
155
|
+
const [key, value] = items[i];
|
|
156
|
+
callback(value, key, this);
|
|
76
157
|
}
|
|
77
158
|
}
|
|
78
|
-
/**
|
|
159
|
+
/**
|
|
160
|
+
* Return an iterator over `[key, value]` entries in dense item order.
|
|
161
|
+
*
|
|
162
|
+
* Entries are backed by the map's internal storage for speed. Treat them as
|
|
163
|
+
* immutable; mutating them through casts or plain JavaScript can corrupt the
|
|
164
|
+
* map's key index.
|
|
165
|
+
*/
|
|
166
|
+
entries() {
|
|
167
|
+
return this._items.values();
|
|
168
|
+
}
|
|
169
|
+
/** Return an iterator over `[key, value]` entries in dense item order. */
|
|
170
|
+
[Symbol.iterator]() {
|
|
171
|
+
return this.entries();
|
|
172
|
+
}
|
|
173
|
+
/** Return every present value in dense item order. */
|
|
79
174
|
values() {
|
|
80
|
-
|
|
81
|
-
const backend = this._backend;
|
|
82
|
-
for (let i = 0; i < backend.length; i++) {
|
|
83
|
-
const value = backend[i];
|
|
84
|
-
if (value !== undefined) {
|
|
85
|
-
out.push(value);
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
return out;
|
|
175
|
+
return this._items.map(([, value]) => value);
|
|
89
176
|
}
|
|
90
177
|
/** Remove all entries and reset {@link size} to zero. */
|
|
91
178
|
clear() {
|
|
92
|
-
this.
|
|
93
|
-
this.
|
|
179
|
+
this._indices.clear();
|
|
180
|
+
this._items.length = 0;
|
|
94
181
|
}
|
|
95
182
|
}
|
|
96
183
|
//# sourceMappingURL=array_map.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"array_map.js","sourceRoot":"","sources":["../../src/util/array_map.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"array_map.js","sourceRoot":"","sources":["../../src/util/array_map.ts"],"names":[],"mappings":"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"}
|
package/dist/util/bitset.js
CHANGED
|
@@ -199,23 +199,6 @@ export class Bitset {
|
|
|
199
199
|
this.forEach((i) => idx.push(i));
|
|
200
200
|
return idx;
|
|
201
201
|
}
|
|
202
|
-
/**
|
|
203
|
-
* OR `bitmask` into the word at position `arrayIndex`.
|
|
204
|
-
*
|
|
205
|
-
* @internal Low-level bulk operation; prefer {@link add} or {@link addBit}
|
|
206
|
-
* for single bits.
|
|
207
|
-
*/
|
|
208
|
-
_addIndexBitmask(arrayIndex, bitmask) {
|
|
209
|
-
this._bits[arrayIndex] |= bitmask;
|
|
210
|
-
}
|
|
211
|
-
/**
|
|
212
|
-
* Replace the word at position `arrayIndex` with `bitmask`.
|
|
213
|
-
*
|
|
214
|
-
* @internal Used by network deserialization to write a whole word at once.
|
|
215
|
-
*/
|
|
216
|
-
_setIndexBitmask(arrayIndex, bitmask) {
|
|
217
|
-
this._bits[arrayIndex] = bitmask;
|
|
218
|
-
}
|
|
219
202
|
/**
|
|
220
203
|
* Emit a JavaScript expression that evaluates to `true` when the bitset
|
|
221
204
|
* addressed by `targetBitsExpr` (a `number[]` of 32-bit words) contains
|
package/dist/util/bitset.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bitset.js","sourceRoot":"","sources":["../../src/util/bitset.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,OAAO,MAAM;IAAnB;QACE;;;;WAIG;QACI,UAAK,GAAa,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"bitset.js","sourceRoot":"","sources":["../../src/util/bitset.ts"],"names":[],"mappings":"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"}
|
package/dist/util/events.d.ts
CHANGED
|
@@ -1,23 +1,53 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Minimal, strongly-typed event emitter.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* `on` / `emit` / `off` signatures driven by an
|
|
4
|
+
* Provides the small subset of the `EventEmitter` API vecs packages need —
|
|
5
|
+
* `on` / `addListener`, `once`, `off` / `removeListener`,
|
|
6
|
+
* `removeAllListeners`, `emit`, `eventNames`, `listeners`, and
|
|
7
|
+
* `listenerCount` — with `on` / `emit` / `off` signatures driven by an
|
|
8
|
+
* `EventMap`.
|
|
8
9
|
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
* usable directly on top of `eventemitter3`.
|
|
12
|
-
*
|
|
13
|
-
* @internal Used only inside the package, to expose typed entity-level events.
|
|
10
|
+
* Use this for package-level events that need typed `on` and `emit` calls
|
|
11
|
+
* without adding an external runtime dependency.
|
|
14
12
|
*/
|
|
15
13
|
declare type ValidEventMap<T = any> = T extends {
|
|
16
14
|
[P in keyof T]: (...args: any[]) => void;
|
|
17
15
|
} ? T : never;
|
|
18
|
-
declare type Handler<T extends any | ((...args: any[]) => R), R = any> = T;
|
|
19
16
|
/** Listener signature inferred from an `EventMap` entry. */
|
|
20
|
-
export declare type EventListener<T extends ValidEventMap, K extends EventNames<T>> =
|
|
17
|
+
export declare type EventListener<T extends ValidEventMap, K extends EventNames<T>> = K extends keyof T ? T[K] extends (...args: any[]) => void ? T[K] : never : (...args: any[]) => void;
|
|
18
|
+
declare type EventArgs<T extends ValidEventMap, K extends EventNames<T>> = Parameters<EventListener<T, K>>;
|
|
21
19
|
/** Names of the events declared on an `EventMap`. */
|
|
22
20
|
export declare type EventNames<T extends ValidEventMap> = T extends string | symbol ? T : keyof T;
|
|
21
|
+
/**
|
|
22
|
+
* Typed `EventEmitter` parameterised by an `EventMap` of `eventName -> handler`.
|
|
23
|
+
*
|
|
24
|
+
* Use for package-level events that need typed event names and payloads.
|
|
25
|
+
*/
|
|
26
|
+
export declare class Events<EventMap extends ValidEventMap = any> {
|
|
27
|
+
private _listeners;
|
|
28
|
+
/** Alias of {@link on}. */
|
|
29
|
+
addListener<T extends EventNames<EventMap>>(event: T, fn: EventListener<EventMap, T>, context?: any): this;
|
|
30
|
+
/** Calls every listener registered for `event` with `args`, returning whether any listener ran. */
|
|
31
|
+
emit<T extends EventNames<EventMap>>(event: T, ...args: EventArgs<EventMap, T>): boolean;
|
|
32
|
+
/** Names of the events with at least one registered listener. */
|
|
33
|
+
eventNames(): EventNames<EventMap>[];
|
|
34
|
+
/** Number of listeners registered for `event`. */
|
|
35
|
+
listenerCount(event: EventNames<EventMap>): number;
|
|
36
|
+
/** Listener functions registered for `event`. */
|
|
37
|
+
listeners(event: EventNames<EventMap>): ((...args: any[]) => void)[];
|
|
38
|
+
/** Removes a listener registered for `event`, or every listener for `event` when `fn` is omitted. */
|
|
39
|
+
off<T extends EventNames<EventMap>>(event: T, fn?: EventListener<EventMap, T>, context?: any): this;
|
|
40
|
+
/** Registers `fn` to be called every time `event` is emitted. */
|
|
41
|
+
on<T extends EventNames<EventMap>>(event: T, fn: EventListener<EventMap, T>, context?: any): this;
|
|
42
|
+
/** Registers `fn` to be called the next time `event` is emitted, then removes it. */
|
|
43
|
+
once<T extends EventNames<EventMap>>(event: T, fn: EventListener<EventMap, T>, context?: any): this;
|
|
44
|
+
/** Removes all listeners, or all listeners for `event` when given. */
|
|
45
|
+
removeAllListeners(event?: EventNames<EventMap>): this;
|
|
46
|
+
/** Alias of {@link off}. */
|
|
47
|
+
removeListener<T extends EventNames<EventMap>>(event: T, fn?: EventListener<EventMap, T>, context?: any): this;
|
|
48
|
+
/** Registers a listener, storing both the callable (`fn`) and the function used for `off` matching (`original`). */
|
|
49
|
+
private _add;
|
|
50
|
+
/** Whether `registration` was registered with `fn` (directly or as a `once` original) and, if given, `context`. */
|
|
51
|
+
private _matches;
|
|
52
|
+
}
|
|
23
53
|
export {};
|
package/dist/util/events.js
CHANGED
|
@@ -1,64 +1,115 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Minimal, strongly-typed event emitter.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* `on` / `emit` / `off` signatures driven by an
|
|
4
|
+
* Provides the small subset of the `EventEmitter` API vecs packages need —
|
|
5
|
+
* `on` / `addListener`, `once`, `off` / `removeListener`,
|
|
6
|
+
* `removeAllListeners`, `emit`, `eventNames`, `listeners`, and
|
|
7
|
+
* `listenerCount` — with `on` / `emit` / `off` signatures driven by an
|
|
8
|
+
* `EventMap`.
|
|
8
9
|
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
* usable directly on top of `eventemitter3`.
|
|
12
|
-
*
|
|
13
|
-
* @internal Used only inside the package, to expose typed entity-level events.
|
|
10
|
+
* Use this for package-level events that need typed `on` and `emit` calls
|
|
11
|
+
* without adding an external runtime dependency.
|
|
14
12
|
*/
|
|
15
|
-
import eventEmitter3 from "eventemitter3";
|
|
16
|
-
const { EventEmitter } = eventEmitter3;
|
|
17
13
|
/**
|
|
18
|
-
* Typed
|
|
19
|
-
*
|
|
14
|
+
* Typed `EventEmitter` parameterised by an `EventMap` of `eventName -> handler`.
|
|
15
|
+
*
|
|
16
|
+
* Use for package-level events that need typed event names and payloads.
|
|
20
17
|
*/
|
|
21
|
-
class
|
|
22
|
-
|
|
23
|
-
|
|
18
|
+
export class Events {
|
|
19
|
+
constructor() {
|
|
20
|
+
this._listeners = new Map();
|
|
24
21
|
}
|
|
25
|
-
|
|
26
|
-
|
|
22
|
+
/** Alias of {@link on}. */
|
|
23
|
+
addListener(event, fn, context) {
|
|
24
|
+
return this.on(event, fn, context);
|
|
27
25
|
}
|
|
28
|
-
|
|
29
|
-
|
|
26
|
+
/** Calls every listener registered for `event` with `args`, returning whether any listener ran. */
|
|
27
|
+
emit(event, ...args) {
|
|
28
|
+
const registrations = this._listeners.get(event);
|
|
29
|
+
if (!registrations || registrations.length === 0) {
|
|
30
|
+
return false;
|
|
31
|
+
}
|
|
32
|
+
for (const { fn, context } of registrations.slice()) {
|
|
33
|
+
fn.apply(context, args);
|
|
34
|
+
}
|
|
35
|
+
return true;
|
|
30
36
|
}
|
|
37
|
+
/** Names of the events with at least one registered listener. */
|
|
31
38
|
eventNames() {
|
|
32
|
-
return
|
|
39
|
+
return [...this._listeners.keys()];
|
|
33
40
|
}
|
|
41
|
+
/** Number of listeners registered for `event`. */
|
|
42
|
+
listenerCount(event) {
|
|
43
|
+
return this._listeners.get(event)?.length ?? 0;
|
|
44
|
+
}
|
|
45
|
+
/** Listener functions registered for `event`. */
|
|
34
46
|
listeners(event) {
|
|
35
|
-
return
|
|
47
|
+
return (this._listeners.get(event) ?? []).map((r) => r.fn);
|
|
36
48
|
}
|
|
37
|
-
|
|
38
|
-
|
|
49
|
+
/** Removes a listener registered for `event`, or every listener for `event` when `fn` is omitted. */
|
|
50
|
+
off(event, fn, context) {
|
|
51
|
+
return this.removeListener(event, fn, context);
|
|
39
52
|
}
|
|
40
|
-
|
|
41
|
-
|
|
53
|
+
/** Registers `fn` to be called every time `event` is emitted. */
|
|
54
|
+
on(event, fn, context) {
|
|
55
|
+
return this._add(event, fn, fn, context);
|
|
56
|
+
}
|
|
57
|
+
/** Registers `fn` to be called the next time `event` is emitted, then removes it. */
|
|
58
|
+
once(event, fn, context) {
|
|
59
|
+
const original = fn;
|
|
60
|
+
const wrapper = (...args) => {
|
|
61
|
+
this.removeListener(event, wrapper);
|
|
62
|
+
original.apply(context, args);
|
|
63
|
+
};
|
|
64
|
+
return this._add(event, wrapper, original, context);
|
|
42
65
|
}
|
|
66
|
+
/** Removes all listeners, or all listeners for `event` when given. */
|
|
43
67
|
removeAllListeners(event) {
|
|
44
|
-
|
|
68
|
+
if (event === undefined) {
|
|
69
|
+
this._listeners.clear();
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
this._listeners.delete(event);
|
|
73
|
+
}
|
|
74
|
+
return this;
|
|
45
75
|
}
|
|
46
|
-
|
|
47
|
-
|
|
76
|
+
/** Alias of {@link off}. */
|
|
77
|
+
removeListener(event, fn, context) {
|
|
78
|
+
if (fn === undefined) {
|
|
79
|
+
this._listeners.delete(event);
|
|
80
|
+
return this;
|
|
81
|
+
}
|
|
82
|
+
const registrations = this._listeners.get(event);
|
|
83
|
+
if (!registrations) {
|
|
84
|
+
return this;
|
|
85
|
+
}
|
|
86
|
+
const remaining = registrations.filter((r) => !this._matches(r, fn, context));
|
|
87
|
+
if (remaining.length === 0) {
|
|
88
|
+
this._listeners.delete(event);
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
this._listeners.set(event, remaining);
|
|
92
|
+
}
|
|
93
|
+
return this;
|
|
48
94
|
}
|
|
49
|
-
|
|
50
|
-
|
|
95
|
+
/** Registers a listener, storing both the callable (`fn`) and the function used for `off` matching (`original`). */
|
|
96
|
+
_add(event, fn, original, context) {
|
|
97
|
+
const registrations = this._listeners.get(event);
|
|
98
|
+
const registration = { fn, original, context };
|
|
99
|
+
if (registrations) {
|
|
100
|
+
registrations.push(registration);
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
this._listeners.set(event, [registration]);
|
|
104
|
+
}
|
|
105
|
+
return this;
|
|
106
|
+
}
|
|
107
|
+
/** Whether `registration` was registered with `fn` (directly or as a `once` original) and, if given, `context`. */
|
|
108
|
+
_matches(registration, fn, context) {
|
|
109
|
+
if (registration.original !== fn && registration.fn !== fn) {
|
|
110
|
+
return false;
|
|
111
|
+
}
|
|
112
|
+
return context === undefined || registration.context === context;
|
|
51
113
|
}
|
|
52
|
-
}
|
|
53
|
-
events = EventEmitter;
|
|
54
|
-
/**
|
|
55
|
-
* Typed `EventEmitter` parameterised by an `EventMap` of `eventName -> handler`.
|
|
56
|
-
*
|
|
57
|
-
* Constructed lazily by `Entity.events`. Inherits its concrete behavior from
|
|
58
|
-
* `eventemitter3`'s `EventEmitter`.
|
|
59
|
-
*
|
|
60
|
-
* @internal
|
|
61
|
-
*/
|
|
62
|
-
export class Events extends events {
|
|
63
114
|
}
|
|
64
115
|
//# sourceMappingURL=events.js.map
|
package/dist/util/events.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/util/events.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/util/events.ts"],"names":[],"mappings":"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"}
|