@mikro-orm/core 6.6.2-dev.3 → 6.6.2-dev.5

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.
@@ -6,8 +6,9 @@ export declare class EventManager {
6
6
  private readonly entities;
7
7
  private readonly cache;
8
8
  private readonly subscribers;
9
- constructor(subscribers: EventSubscriber[]);
9
+ constructor(subscribers: Iterable<EventSubscriber>);
10
10
  registerSubscriber(subscriber: EventSubscriber): void;
11
+ getSubscribers(): Set<EventSubscriber>;
11
12
  dispatchEvent<T extends object>(event: TransactionEventType, args: TransactionEventArgs, meta?: EntityMetadata<T>): unknown;
12
13
  dispatchEvent<T extends object>(event: EventType.onInit, args: Partial<EventArgs<T>>, meta?: EntityMetadata<T>): unknown;
13
14
  dispatchEvent<T extends object>(event: EventType, args: Partial<EventArgs<T> | FlushEventArgs>, meta?: EntityMetadata<T>): Promise<unknown>;
@@ -7,21 +7,29 @@ class EventManager {
7
7
  listeners = {};
8
8
  entities = new Map();
9
9
  cache = new Map();
10
- subscribers = [];
10
+ subscribers = new Set();
11
11
  constructor(subscribers) {
12
- subscribers.forEach(subscriber => this.registerSubscriber(subscriber));
12
+ for (const subscriber of subscribers) {
13
+ this.registerSubscriber(subscriber);
14
+ }
13
15
  }
14
16
  registerSubscriber(subscriber) {
15
- this.subscribers.push(subscriber);
17
+ if (this.subscribers.has(subscriber)) {
18
+ return;
19
+ }
20
+ this.subscribers.add(subscriber);
16
21
  this.entities.set(subscriber, this.getSubscribedEntities(subscriber));
17
22
  this.cache.clear();
18
23
  utils_1.Utils.keys(enums_1.EventType)
19
24
  .filter(event => event in subscriber)
20
25
  .forEach(event => {
21
- this.listeners[event] ??= [];
22
- this.listeners[event].push(subscriber);
26
+ this.listeners[event] ??= new Set();
27
+ this.listeners[event].add(subscriber);
23
28
  });
24
29
  }
30
+ getSubscribers() {
31
+ return this.subscribers;
32
+ }
25
33
  dispatchEvent(event, args, meta) {
26
34
  const listeners = [];
27
35
  const entity = args.entity;
@@ -33,9 +41,9 @@ class EventManager {
33
41
  const handler = typeof hook === 'function' ? hook : entity[hook] ?? prototypeHook;
34
42
  return handler.bind(entity);
35
43
  }));
36
- for (const listener of this.listeners[event] || []) {
44
+ for (const listener of this.listeners[event] ?? new Set()) {
37
45
  const entities = this.entities.get(listener);
38
- if (entities.length === 0 || !entity || entities.includes(entity.constructor.name)) {
46
+ if (entities.size === 0 || !entity || entities.has(entity.constructor.name)) {
39
47
  listeners.push(listener[event].bind(listener));
40
48
  }
41
49
  }
@@ -54,9 +62,9 @@ class EventManager {
54
62
  this.cache.set(cacheKey, true);
55
63
  return true;
56
64
  }
57
- for (const listener of this.listeners[event] ?? []) {
65
+ for (const listener of this.listeners[event] ?? new Set()) {
58
66
  const entities = this.entities.get(listener);
59
- if (entities.length === 0 || entities.includes(meta.className)) {
67
+ if (entities.size === 0 || entities.has(meta.className)) {
60
68
  this.cache.set(cacheKey, true);
61
69
  return true;
62
70
  }
@@ -69,9 +77,9 @@ class EventManager {
69
77
  }
70
78
  getSubscribedEntities(listener) {
71
79
  if (!listener.getSubscribedEntities) {
72
- return [];
80
+ return new Set();
73
81
  }
74
- return listener.getSubscribedEntities().map(name => utils_1.Utils.className(name));
82
+ return new Set(listener.getSubscribedEntities().map(name => utils_1.Utils.className(name)));
75
83
  }
76
84
  }
77
85
  exports.EventManager = EventManager;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mikro-orm/core",
3
- "version": "6.6.2-dev.3",
3
+ "version": "6.6.2-dev.5",
4
4
  "description": "TypeScript ORM for Node.js based on Data Mapper, Unit of Work and Identity Map patterns. Supports MongoDB, MySQL, PostgreSQL and SQLite databases as well as usage with vanilla JavaScript.",
5
5
  "main": "index.js",
6
6
  "module": "index.mjs",
@@ -64,7 +64,7 @@
64
64
  "esprima": "4.0.1",
65
65
  "fs-extra": "11.3.2",
66
66
  "globby": "11.1.0",
67
- "mikro-orm": "6.6.2-dev.3",
67
+ "mikro-orm": "6.6.2-dev.5",
68
68
  "reflect-metadata": "0.2.2"
69
69
  }
70
70
  }
@@ -321,7 +321,7 @@ export interface MikroORMOptions<D extends IDatabaseDriver = IDatabaseDriver, EM
321
321
  extensions: {
322
322
  register: (orm: MikroORM) => void;
323
323
  }[];
324
- subscribers: (EventSubscriber | Constructor<EventSubscriber>)[];
324
+ subscribers: Iterable<EventSubscriber | Constructor<EventSubscriber>>;
325
325
  filters: Dictionary<{
326
326
  name?: string;
327
327
  } & Omit<FilterDef, 'name'>>;
@@ -345,7 +345,7 @@ class Configuration {
345
345
  if (!this.options.filtersOnRelations) {
346
346
  this.options.autoJoinRefsForFilters ??= false;
347
347
  }
348
- this.options.subscribers = Utils_1.Utils.unique(this.options.subscribers).map(subscriber => {
348
+ this.options.subscribers = [...this.options.subscribers].map(subscriber => {
349
349
  return subscriber.constructor.name === 'Function' ? new subscriber() : subscriber;
350
350
  });
351
351
  this.sync();