@signaldb/core 1.2.2 → 1.2.4
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/dist/index.cjs13.js +28 -41
- package/dist/index13.mjs +28 -41
- package/dist/types/Selector.d.ts +33 -35
- package/dist/utils/EventEmitter.d.ts +4 -8
- package/package.json +1 -1
package/dist/index.cjs13.js
CHANGED
|
@@ -2,15 +2,11 @@
|
|
|
2
2
|
var __defProp = Object.defineProperty;
|
|
3
3
|
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
4
4
|
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
5
|
-
class EventEmitter
|
|
5
|
+
class EventEmitter {
|
|
6
6
|
constructor() {
|
|
7
|
-
super(...arguments);
|
|
8
7
|
__publicField(this, "_maxListeners", 100);
|
|
9
8
|
/**
|
|
10
|
-
* We store a
|
|
11
|
-
* eventName => (originalListener => wrappedListener)
|
|
12
|
-
*
|
|
13
|
-
* The "wrappedListener" is the actual function passed to `addEventListener()`.
|
|
9
|
+
* We store a set of the listeners for each event.
|
|
14
10
|
*/
|
|
15
11
|
__publicField(this, "_listenerStore", /* @__PURE__ */ new Map());
|
|
16
12
|
}
|
|
@@ -25,19 +21,14 @@ class EventEmitter extends EventTarget {
|
|
|
25
21
|
* @returns The emitter instance (for chaining).
|
|
26
22
|
*/
|
|
27
23
|
on(eventName, listener) {
|
|
28
|
-
let
|
|
29
|
-
if (!
|
|
30
|
-
|
|
31
|
-
this._listenerStore.set(eventName,
|
|
24
|
+
let listenersSet = this._listenerStore.get(eventName);
|
|
25
|
+
if (!listenersSet) {
|
|
26
|
+
listenersSet = /* @__PURE__ */ new Set();
|
|
27
|
+
this._listenerStore.set(eventName, listenersSet);
|
|
32
28
|
}
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
};
|
|
37
|
-
listenersMap.set(listener, wrappedListener);
|
|
38
|
-
this.addEventListener(eventName, wrappedListener);
|
|
39
|
-
if (listenersMap.size > this._maxListeners) {
|
|
40
|
-
console.warn(`Possible EventEmitter memory leak detected. ${listenersMap.size} ${String(eventName)} listeners added. Use emitter.setMaxListeners() to increase limit.`);
|
|
29
|
+
listenersSet.add(listener);
|
|
30
|
+
if (listenersSet.size > this._maxListeners) {
|
|
31
|
+
console.warn(`Possible EventEmitter memory leak detected. ${listenersSet.size} ${String(eventName)} listeners added. Use emitter.setMaxListeners() to increase limit.`);
|
|
41
32
|
}
|
|
42
33
|
return this;
|
|
43
34
|
}
|
|
@@ -71,15 +62,11 @@ class EventEmitter extends EventTarget {
|
|
|
71
62
|
* @returns The emitter instance (for chaining).
|
|
72
63
|
*/
|
|
73
64
|
off(eventName, listener) {
|
|
74
|
-
const
|
|
75
|
-
if (!
|
|
65
|
+
const listenersSet = this._listenerStore.get(eventName);
|
|
66
|
+
if (!listenersSet)
|
|
76
67
|
return this;
|
|
77
|
-
|
|
78
|
-
if (
|
|
79
|
-
this.removeEventListener(eventName, wrappedListener);
|
|
80
|
-
listenersMap.delete(listener);
|
|
81
|
-
}
|
|
82
|
-
if (listenersMap.size === 0) {
|
|
68
|
+
listenersSet.delete(listener);
|
|
69
|
+
if (listenersSet.size === 0) {
|
|
83
70
|
this._listenerStore.delete(eventName);
|
|
84
71
|
}
|
|
85
72
|
return this;
|
|
@@ -97,11 +84,11 @@ class EventEmitter extends EventTarget {
|
|
|
97
84
|
* Emit (dispatch) an event with a variable number of arguments.
|
|
98
85
|
* @param eventName The event name (key of E).
|
|
99
86
|
* @param args The arguments to pass to subscribed listeners.
|
|
100
|
-
* @returns A boolean indicating if the event was not cancelled.
|
|
101
87
|
*/
|
|
102
88
|
emit(eventName, ...args) {
|
|
103
|
-
|
|
104
|
-
|
|
89
|
+
this.listeners(eventName).forEach((listener) => {
|
|
90
|
+
listener(...args);
|
|
91
|
+
});
|
|
105
92
|
}
|
|
106
93
|
/**
|
|
107
94
|
* Returns the array of listener functions currently registered for a given event.
|
|
@@ -109,10 +96,10 @@ class EventEmitter extends EventTarget {
|
|
|
109
96
|
* @returns An array of listener functions.
|
|
110
97
|
*/
|
|
111
98
|
listeners(eventName) {
|
|
112
|
-
const
|
|
113
|
-
if (!
|
|
99
|
+
const listenersSet = this._listenerStore.get(eventName);
|
|
100
|
+
if (!listenersSet)
|
|
114
101
|
return [];
|
|
115
|
-
return [...
|
|
102
|
+
return [...listenersSet.values()];
|
|
116
103
|
}
|
|
117
104
|
/**
|
|
118
105
|
* Returns the number of listeners for a given event.
|
|
@@ -120,8 +107,8 @@ class EventEmitter extends EventTarget {
|
|
|
120
107
|
* @returns The number of listeners.
|
|
121
108
|
*/
|
|
122
109
|
listenerCount(eventName) {
|
|
123
|
-
const
|
|
124
|
-
return
|
|
110
|
+
const listenersSet = this._listenerStore.get(eventName);
|
|
111
|
+
return listenersSet ? listenersSet.size : 0;
|
|
125
112
|
}
|
|
126
113
|
/**
|
|
127
114
|
* Removes all listeners for a given event, or all events if none is specified.
|
|
@@ -130,17 +117,17 @@ class EventEmitter extends EventTarget {
|
|
|
130
117
|
*/
|
|
131
118
|
removeAllListeners(eventName) {
|
|
132
119
|
if (eventName === void 0) {
|
|
133
|
-
for (const [eventName_,
|
|
134
|
-
for (const
|
|
135
|
-
this.
|
|
120
|
+
for (const [eventName_, listenersSet] of this._listenerStore.entries()) {
|
|
121
|
+
for (const listener of listenersSet.values()) {
|
|
122
|
+
this.off(eventName_, listener);
|
|
136
123
|
}
|
|
137
124
|
}
|
|
138
125
|
this._listenerStore.clear();
|
|
139
126
|
} else {
|
|
140
|
-
const
|
|
141
|
-
if (
|
|
142
|
-
for (const
|
|
143
|
-
this.
|
|
127
|
+
const listenersSet = this._listenerStore.get(eventName);
|
|
128
|
+
if (listenersSet) {
|
|
129
|
+
for (const listener of listenersSet.values()) {
|
|
130
|
+
this.off(eventName, listener);
|
|
144
131
|
}
|
|
145
132
|
this._listenerStore.delete(eventName);
|
|
146
133
|
}
|
package/dist/index13.mjs
CHANGED
|
@@ -1,15 +1,11 @@
|
|
|
1
1
|
var __defProp = Object.defineProperty;
|
|
2
2
|
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
3
3
|
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
4
|
-
class EventEmitter
|
|
4
|
+
class EventEmitter {
|
|
5
5
|
constructor() {
|
|
6
|
-
super(...arguments);
|
|
7
6
|
__publicField(this, "_maxListeners", 100);
|
|
8
7
|
/**
|
|
9
|
-
* We store a
|
|
10
|
-
* eventName => (originalListener => wrappedListener)
|
|
11
|
-
*
|
|
12
|
-
* The "wrappedListener" is the actual function passed to `addEventListener()`.
|
|
8
|
+
* We store a set of the listeners for each event.
|
|
13
9
|
*/
|
|
14
10
|
__publicField(this, "_listenerStore", /* @__PURE__ */ new Map());
|
|
15
11
|
}
|
|
@@ -24,19 +20,14 @@ class EventEmitter extends EventTarget {
|
|
|
24
20
|
* @returns The emitter instance (for chaining).
|
|
25
21
|
*/
|
|
26
22
|
on(eventName, listener) {
|
|
27
|
-
let
|
|
28
|
-
if (!
|
|
29
|
-
|
|
30
|
-
this._listenerStore.set(eventName,
|
|
23
|
+
let listenersSet = this._listenerStore.get(eventName);
|
|
24
|
+
if (!listenersSet) {
|
|
25
|
+
listenersSet = /* @__PURE__ */ new Set();
|
|
26
|
+
this._listenerStore.set(eventName, listenersSet);
|
|
31
27
|
}
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
};
|
|
36
|
-
listenersMap.set(listener, wrappedListener);
|
|
37
|
-
this.addEventListener(eventName, wrappedListener);
|
|
38
|
-
if (listenersMap.size > this._maxListeners) {
|
|
39
|
-
console.warn(`Possible EventEmitter memory leak detected. ${listenersMap.size} ${String(eventName)} listeners added. Use emitter.setMaxListeners() to increase limit.`);
|
|
28
|
+
listenersSet.add(listener);
|
|
29
|
+
if (listenersSet.size > this._maxListeners) {
|
|
30
|
+
console.warn(`Possible EventEmitter memory leak detected. ${listenersSet.size} ${String(eventName)} listeners added. Use emitter.setMaxListeners() to increase limit.`);
|
|
40
31
|
}
|
|
41
32
|
return this;
|
|
42
33
|
}
|
|
@@ -70,15 +61,11 @@ class EventEmitter extends EventTarget {
|
|
|
70
61
|
* @returns The emitter instance (for chaining).
|
|
71
62
|
*/
|
|
72
63
|
off(eventName, listener) {
|
|
73
|
-
const
|
|
74
|
-
if (!
|
|
64
|
+
const listenersSet = this._listenerStore.get(eventName);
|
|
65
|
+
if (!listenersSet)
|
|
75
66
|
return this;
|
|
76
|
-
|
|
77
|
-
if (
|
|
78
|
-
this.removeEventListener(eventName, wrappedListener);
|
|
79
|
-
listenersMap.delete(listener);
|
|
80
|
-
}
|
|
81
|
-
if (listenersMap.size === 0) {
|
|
67
|
+
listenersSet.delete(listener);
|
|
68
|
+
if (listenersSet.size === 0) {
|
|
82
69
|
this._listenerStore.delete(eventName);
|
|
83
70
|
}
|
|
84
71
|
return this;
|
|
@@ -96,11 +83,11 @@ class EventEmitter extends EventTarget {
|
|
|
96
83
|
* Emit (dispatch) an event with a variable number of arguments.
|
|
97
84
|
* @param eventName The event name (key of E).
|
|
98
85
|
* @param args The arguments to pass to subscribed listeners.
|
|
99
|
-
* @returns A boolean indicating if the event was not cancelled.
|
|
100
86
|
*/
|
|
101
87
|
emit(eventName, ...args) {
|
|
102
|
-
|
|
103
|
-
|
|
88
|
+
this.listeners(eventName).forEach((listener) => {
|
|
89
|
+
listener(...args);
|
|
90
|
+
});
|
|
104
91
|
}
|
|
105
92
|
/**
|
|
106
93
|
* Returns the array of listener functions currently registered for a given event.
|
|
@@ -108,10 +95,10 @@ class EventEmitter extends EventTarget {
|
|
|
108
95
|
* @returns An array of listener functions.
|
|
109
96
|
*/
|
|
110
97
|
listeners(eventName) {
|
|
111
|
-
const
|
|
112
|
-
if (!
|
|
98
|
+
const listenersSet = this._listenerStore.get(eventName);
|
|
99
|
+
if (!listenersSet)
|
|
113
100
|
return [];
|
|
114
|
-
return [...
|
|
101
|
+
return [...listenersSet.values()];
|
|
115
102
|
}
|
|
116
103
|
/**
|
|
117
104
|
* Returns the number of listeners for a given event.
|
|
@@ -119,8 +106,8 @@ class EventEmitter extends EventTarget {
|
|
|
119
106
|
* @returns The number of listeners.
|
|
120
107
|
*/
|
|
121
108
|
listenerCount(eventName) {
|
|
122
|
-
const
|
|
123
|
-
return
|
|
109
|
+
const listenersSet = this._listenerStore.get(eventName);
|
|
110
|
+
return listenersSet ? listenersSet.size : 0;
|
|
124
111
|
}
|
|
125
112
|
/**
|
|
126
113
|
* Removes all listeners for a given event, or all events if none is specified.
|
|
@@ -129,17 +116,17 @@ class EventEmitter extends EventTarget {
|
|
|
129
116
|
*/
|
|
130
117
|
removeAllListeners(eventName) {
|
|
131
118
|
if (eventName === void 0) {
|
|
132
|
-
for (const [eventName_,
|
|
133
|
-
for (const
|
|
134
|
-
this.
|
|
119
|
+
for (const [eventName_, listenersSet] of this._listenerStore.entries()) {
|
|
120
|
+
for (const listener of listenersSet.values()) {
|
|
121
|
+
this.off(eventName_, listener);
|
|
135
122
|
}
|
|
136
123
|
}
|
|
137
124
|
this._listenerStore.clear();
|
|
138
125
|
} else {
|
|
139
|
-
const
|
|
140
|
-
if (
|
|
141
|
-
for (const
|
|
142
|
-
this.
|
|
126
|
+
const listenersSet = this._listenerStore.get(eventName);
|
|
127
|
+
if (listenersSet) {
|
|
128
|
+
for (const listener of listenersSet.values()) {
|
|
129
|
+
this.off(eventName, listener);
|
|
143
130
|
}
|
|
144
131
|
this._listenerStore.delete(eventName);
|
|
145
132
|
}
|
package/dist/types/Selector.d.ts
CHANGED
|
@@ -1,54 +1,52 @@
|
|
|
1
1
|
export interface FieldExpression<T> {
|
|
2
|
-
$eq?: T
|
|
3
|
-
$gt?: T
|
|
4
|
-
$gte?: T
|
|
5
|
-
$lt?: T
|
|
6
|
-
$lte?: T
|
|
2
|
+
$eq?: T;
|
|
3
|
+
$gt?: T;
|
|
4
|
+
$gte?: T;
|
|
5
|
+
$lt?: T;
|
|
6
|
+
$lte?: T;
|
|
7
7
|
$in?: T[] | undefined;
|
|
8
|
-
$nin?: T[]
|
|
9
|
-
$ne?: T
|
|
10
|
-
$exists?: boolean
|
|
11
|
-
$not?: FieldExpression<T
|
|
12
|
-
$expr?: FieldExpression<T
|
|
8
|
+
$nin?: T[];
|
|
9
|
+
$ne?: T;
|
|
10
|
+
$exists?: boolean;
|
|
11
|
+
$not?: FieldExpression<T>;
|
|
12
|
+
$expr?: FieldExpression<T>;
|
|
13
13
|
$jsonSchema?: any;
|
|
14
|
-
$mod?: number[]
|
|
15
|
-
$regex?: RegExp | string
|
|
16
|
-
$options?: string
|
|
14
|
+
$mod?: number[];
|
|
15
|
+
$regex?: RegExp | string;
|
|
16
|
+
$options?: string;
|
|
17
17
|
$text?: {
|
|
18
18
|
$search: string;
|
|
19
|
-
$language?: string
|
|
20
|
-
$caseSensitive?: boolean
|
|
21
|
-
$diacriticSensitive?: boolean
|
|
22
|
-
}
|
|
23
|
-
$where?: string | ((item: T) => boolean)
|
|
24
|
-
$all?: T[]
|
|
25
|
-
$elemMatch?: T extends object ? Query<T> : FieldExpression<T
|
|
26
|
-
$size?: number
|
|
19
|
+
$language?: string;
|
|
20
|
+
$caseSensitive?: boolean;
|
|
21
|
+
$diacriticSensitive?: boolean;
|
|
22
|
+
};
|
|
23
|
+
$where?: string | ((item: T) => boolean);
|
|
24
|
+
$all?: T[];
|
|
25
|
+
$elemMatch?: T extends object ? Query<T> : FieldExpression<T>;
|
|
26
|
+
$size?: number;
|
|
27
27
|
$bitsAllClear?: any;
|
|
28
28
|
$bitsAllSet?: any;
|
|
29
29
|
$bitsAnyClear?: any;
|
|
30
30
|
$bitsAnySet?: any;
|
|
31
31
|
}
|
|
32
|
-
type
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
}[keyof T
|
|
36
|
-
type Split<S extends string, Delimiter extends string> = S extends `${infer Head}${Delimiter}${infer Tail}` ? [Head, ...Split<Tail, Delimiter>] : [S];
|
|
37
|
-
type GetTypeByParts<T, Parts extends readonly string[]> = Parts extends [infer Head, ...infer Tail] ? Head extends keyof T ? GetTypeByParts<T[Head], Extract<Tail, string[]>> : Head extends '$' ? T extends Array<infer U> ? GetTypeByParts<U, Extract<Tail, string[]>> : never : never : T;
|
|
38
|
-
type Get<T, Path extends string> = GetTypeByParts<T, Split<Path, '.'>>;
|
|
39
|
-
type Flatten<T> = T extends any[] ? T[0] : T;
|
|
32
|
+
type DotNotation<T> = {
|
|
33
|
+
[K in keyof T & string]: T[K] extends Array<infer U> ? `${K}` | `${K}.$` | `${K}.${DotNotation<U>}` : T[K] extends object ? `${K}` | `${K}.${DotNotation<T[K]>}` : `${K}`;
|
|
34
|
+
}[keyof T & string];
|
|
35
|
+
type GetType<T, P extends string> = P extends `${infer H}.${infer R}` ? H extends keyof T ? T[H] extends Array<infer U> ? GetType<U, R> : GetType<T[H], R> : H extends '$' ? T extends Array<infer U> ? GetType<U, R> : never : never : P extends keyof T ? T[P] : never;
|
|
40
36
|
type FlatQuery<T> = {
|
|
41
|
-
[P in
|
|
37
|
+
[P in DotNotation<T>]?: FlatQueryValue<T, P>;
|
|
42
38
|
};
|
|
39
|
+
type FieldValue<U> = U extends string ? string | RegExp | FieldExpression<string> : U | FieldExpression<U>;
|
|
40
|
+
type FlatQueryValue<T, P extends string> = GetType<T, P> extends never ? never : GetType<T, P> extends Array<infer U> ? FieldValue<U> | FieldValue<U[]> : FieldValue<GetType<T, P>>;
|
|
43
41
|
type Query<T> = FlatQuery<T> & {
|
|
44
|
-
$or?: Query<T>[]
|
|
45
|
-
$and?: Query<T>[]
|
|
46
|
-
$nor?: Query<T>[]
|
|
42
|
+
$or?: Query<T>[];
|
|
43
|
+
$and?: Query<T>[];
|
|
44
|
+
$nor?: Query<T>[];
|
|
47
45
|
};
|
|
48
|
-
export type FlatSelector<T extends Record<string, any
|
|
46
|
+
export type FlatSelector<T extends Record<string, any>> = FlatQuery<T> & {
|
|
49
47
|
$or?: never;
|
|
50
48
|
$and?: never;
|
|
51
49
|
$nor?: never;
|
|
52
50
|
};
|
|
53
|
-
type Selector<T extends Record<string, any
|
|
51
|
+
type Selector<T extends Record<string, any>> = Query<T>;
|
|
54
52
|
export default Selector;
|
|
@@ -1,13 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* A strongly‑typed EventEmitter
|
|
2
|
+
* A strongly‑typed EventEmitter.
|
|
3
3
|
*/
|
|
4
|
-
export default class EventEmitter<Events extends Record<string | symbol, any>>
|
|
4
|
+
export default class EventEmitter<Events extends Record<string | symbol, any>> {
|
|
5
5
|
private _maxListeners;
|
|
6
6
|
/**
|
|
7
|
-
* We store a
|
|
8
|
-
* eventName => (originalListener => wrappedListener)
|
|
9
|
-
*
|
|
10
|
-
* The "wrappedListener" is the actual function passed to `addEventListener()`.
|
|
7
|
+
* We store a set of the listeners for each event.
|
|
11
8
|
*/
|
|
12
9
|
private _listenerStore;
|
|
13
10
|
setMaxListeners(max: number): this;
|
|
@@ -51,9 +48,8 @@ export default class EventEmitter<Events extends Record<string | symbol, any>> e
|
|
|
51
48
|
* Emit (dispatch) an event with a variable number of arguments.
|
|
52
49
|
* @param eventName The event name (key of E).
|
|
53
50
|
* @param args The arguments to pass to subscribed listeners.
|
|
54
|
-
* @returns A boolean indicating if the event was not cancelled.
|
|
55
51
|
*/
|
|
56
|
-
emit<K extends keyof Events>(eventName: K, ...args: Parameters<Events[K]>):
|
|
52
|
+
emit<K extends keyof Events>(eventName: K, ...args: Parameters<Events[K]>): void;
|
|
57
53
|
/**
|
|
58
54
|
* Returns the array of listener functions currently registered for a given event.
|
|
59
55
|
* @param eventName The event name (key of E).
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@signaldb/core",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.4",
|
|
4
4
|
"description": "SignalDB is a client-side database that provides a simple MongoDB-like interface to the data with first-class typescript support to achieve an optimistic UI. Data persistence can be achieved by using storage providers that store the data through a JSON interface to places such as localStorage.",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"build": "rimraf dist && vite build"
|