@flatfile/listener
Advanced tools
Comparing version 0.3.1 to 0.3.2
# @flatfile/listener | ||
## 0.3.2 | ||
### Patch Changes | ||
- 84f6807: resolves a minor bug with afterAll callbacks and adds recursive listener introspection | ||
## 0.3.1 | ||
@@ -4,0 +10,0 @@ |
@@ -117,4 +117,5 @@ import { Flatfile } from '@flatfile/api'; | ||
* @param event | ||
* @param recursive | ||
*/ | ||
trigger(event: FlatfileEvent): Promise<void>; | ||
trigger(event: FlatfileEvent, recursive?: boolean): Promise<void>; | ||
/** | ||
@@ -124,4 +125,5 @@ * Get any listeners from this target subscribing to this event | ||
* @param event | ||
* @param recursive | ||
*/ | ||
getListeners(event: FlatfileEvent): EventCallback[]; | ||
getListeners(event: FlatfileEvent, recursive?: boolean): Listener[]; | ||
/** | ||
@@ -144,2 +146,7 @@ * Attach more event listeners using a callback function. Used most | ||
type Arrayable<T> = T | Array<T>; | ||
type Listener = { | ||
query: string | string[]; | ||
filter: any; | ||
callback: EventCallback; | ||
}; | ||
@@ -259,2 +266,2 @@ declare abstract class EventDriver { | ||
export { Arrayable, AuthenticatedClient, Browser, Client, EventCallback, EventDriver, EventFilter, EventHandler, FlatfileEvent, FlatfileListener, FlatfileVirtualMachine }; | ||
export { Arrayable, AuthenticatedClient, Browser, Client, EventCallback, EventDriver, EventFilter, EventHandler, FlatfileEvent, FlatfileListener, FlatfileVirtualMachine, Listener }; |
@@ -460,9 +460,3 @@ "use strict"; | ||
} | ||
if (!this.matchEvent(event, this.filterQuery)) { | ||
return; | ||
} | ||
await this.trigger(event); | ||
for (const node of this.nodes) { | ||
await node.dispatchEvent(event); | ||
} | ||
await this.trigger(event, true); | ||
await event.afterAllCallbacks.forEach(async (cb) => cb(event)); | ||
@@ -486,7 +480,8 @@ event.cache.delete(); | ||
* @param event | ||
* @param recursive | ||
*/ | ||
async trigger(event) { | ||
const listeners = this.getListeners(event); | ||
async trigger(event, recursive = false) { | ||
const listeners = this.getListeners(event, recursive); | ||
for (const cb of listeners) { | ||
await cb(event); | ||
await cb.callback(event); | ||
} | ||
@@ -498,9 +493,17 @@ } | ||
* @param event | ||
* @param recursive | ||
*/ | ||
getListeners(event) { | ||
return this.listeners.filter(([query, filter]) => { | ||
getListeners(event, recursive = false) { | ||
if (!this.matchEvent(event, this.filterQuery)) { | ||
return []; | ||
} | ||
const listeners = this.listeners.filter(([query, filter]) => { | ||
const globbed = glob(event.topic, query); | ||
const matched = this.matchEvent(event, filter); | ||
return globbed && matched; | ||
}).map(([_q, _ctx, cb]) => cb); | ||
}).map(([query, filter, callback]) => ({ query, filter, callback })); | ||
return !recursive ? listeners : [ | ||
...listeners, | ||
...this.nodes.flatMap((n) => n.getListeners(event, true)) | ||
]; | ||
} | ||
@@ -507,0 +510,0 @@ /** |
{ | ||
"name": "@flatfile/listener", | ||
"version": "0.3.1", | ||
"version": "0.3.2", | ||
"description": "A PubSub Listener for configuring and using Flatfile", | ||
@@ -5,0 +5,0 @@ "main": "dist/index.js", |
@@ -80,3 +80,5 @@ import { AuthenticatedClient } from './authenticated.client' | ||
*/ | ||
async dispatchEvent(event: FlatfileEvent | Flatfile.Event | any): Promise<void> { | ||
async dispatchEvent( | ||
event: FlatfileEvent | Flatfile.Event | any | ||
): Promise<void> { | ||
if (!(event instanceof FlatfileEvent)) { | ||
@@ -92,12 +94,4 @@ event = new FlatfileEvent(event, this._accessToken, this._apiUrl) | ||
if (!this.matchEvent(event, this.filterQuery)) { | ||
return | ||
} | ||
await this.trigger(event) | ||
await this.trigger(event, true) | ||
// dispatch the event on any registered children first | ||
for (const node of this.nodes) { | ||
await node.dispatchEvent(event) | ||
} | ||
await event.afterAllCallbacks.forEach(async (cb: any) => cb(event)) | ||
@@ -123,7 +117,11 @@ event.cache.delete() | ||
* @param event | ||
* @param recursive | ||
*/ | ||
async trigger(event: FlatfileEvent): Promise<void> { | ||
const listeners = this.getListeners(event) | ||
async trigger( | ||
event: FlatfileEvent, | ||
recursive: boolean = false | ||
): Promise<void> { | ||
const listeners = this.getListeners(event, recursive) | ||
for (const cb of listeners) { | ||
await cb(event) | ||
await cb.callback(event) | ||
} | ||
@@ -136,5 +134,16 @@ } | ||
* @param event | ||
* @param recursive | ||
*/ | ||
public getListeners(event: FlatfileEvent): EventCallback[] { | ||
return this.listeners | ||
public getListeners( | ||
event: FlatfileEvent, | ||
recursive: boolean = false | ||
): Listener[] { | ||
// never return any listeners if the event doesn't match the filter | ||
// event recursion should not occur either | ||
if (!this.matchEvent(event, this.filterQuery)) { | ||
return [] | ||
} | ||
// look at listeners registered here | ||
const listeners = this.listeners | ||
.filter(([query, filter]) => { | ||
@@ -145,3 +154,10 @@ const globbed = glob(event.topic, query) | ||
}) | ||
.map(([_q, _ctx, cb]) => cb) | ||
.map(([query, filter, callback]) => ({ query, filter, callback })) | ||
return !recursive | ||
? listeners | ||
: [ | ||
...listeners, | ||
...this.nodes.flatMap((n) => n.getListeners(event, true)), | ||
] | ||
} | ||
@@ -177,1 +193,6 @@ | ||
export type Arrayable<T> = T | Array<T> | ||
export type Listener = { | ||
query: string | string[] | ||
filter: any | ||
callback: EventCallback | ||
} |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
78851
2520