mirror of
https://github.com/flynx/guaranteeEvents.git
synced 2025-10-29 11:00:13 +00:00
Compare commits
13 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| ae560cd00a | |||
| 541f4bfe82 | |||
| 9be9caefc9 | |||
| 3572df122e | |||
| bf9674d063 | |||
| 7b16dc493f | |||
| 32a8826587 | |||
| 01ca45aec3 | |||
| b068e0b49a | |||
| 367f85371f | |||
| f1373a167b | |||
| c764dcf6ad | |||
| 93a5d86492 |
7
.editorconfig
Executable file
7
.editorconfig
Executable file
@ -0,0 +1,7 @@
|
||||
root = true
|
||||
|
||||
[**]
|
||||
indent_style = tab
|
||||
tab_width = 4
|
||||
charset = utf-8
|
||||
end_of_line = lf
|
||||
2
LICENSE
Normal file → Executable file
2
LICENSE
Normal file → Executable file
@ -1,4 +1,4 @@
|
||||
Copyright (c) 2014, Alex A. Naanou
|
||||
Copyright (c) 2014-2023, Alex A. Naanou
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
|
||||
21
README.md
Normal file → Executable file
21
README.md
Normal file → Executable file
@ -11,6 +11,9 @@ will provide the following functionality:
|
||||
* Call new handlers of the specified event with each of the prior event
|
||||
data sets in order of event occurrence.
|
||||
|
||||
* Add a `.clearGuaranteedQueue(<event>)` method to the emitter to facilitate
|
||||
event cache cleaning.
|
||||
|
||||
This is useful for modules like [glob](https://github.com/isaacs/node-glob)
|
||||
that use the [EventEmitter](http://nodejs.org/api/events.html#events_class_events_eventemitter)
|
||||
model to pass data to the user (see examples below).
|
||||
@ -55,7 +58,8 @@ emitter.emit('event', 'some data')
|
||||
|
||||
```
|
||||
|
||||
A real-life use-case:
|
||||
A real-life use-case using the excellent [glob](https://github.com/isaacs/node-glob)
|
||||
utility:
|
||||
```javascript
|
||||
var glob = require('glob')
|
||||
var guaranteeEvents = require('guarantee-events')
|
||||
@ -78,19 +82,20 @@ results.on('match', function(path){ console.log('found: '+path) })
|
||||
Cache cleaning and use for long running emitters
|
||||
------------------------------------------------
|
||||
|
||||
This is not recommended for use in long running event emitters as each
|
||||
event emitted data will get stored and might get quite large, i.e. a
|
||||
potential source for a leak.
|
||||
One of the dangers in using this in long running event emitters is _cache
|
||||
buildup_ -- the data for each event emitted will get stored and this
|
||||
might get quite large, this, if not managed, is a potential memory leak.
|
||||
|
||||
To deal with this issue a `.clearGuaranteedQueue(<event>)` method is
|
||||
added to the emitter, this will clear the cache for a specific event and
|
||||
a shorthand form `.clearGuaranteedQueue('*')` that will clear the cache
|
||||
for all wrapped events.
|
||||
added to the emitter, this will clear the cache for a specific event.
|
||||
This and has a shorthand form `.clearGuaranteedQueue('*')` that will
|
||||
clear the cache for all wrapped events.
|
||||
|
||||
So for the above example:
|
||||
```javascript
|
||||
// This this will drop all the prior matches, so newly registred handlers
|
||||
// This this will drop all the prior match data, so newly registred handlers
|
||||
// will not see them...
|
||||
// NOTE: this will not affect the underlaying glob object in any way.
|
||||
results.clearGuaranteedQueue('match')
|
||||
|
||||
```
|
||||
|
||||
47
index.js
Normal file → Executable file
47
index.js
Normal file → Executable file
@ -4,6 +4,28 @@
|
||||
*
|
||||
**********************************************************************/
|
||||
|
||||
// Clear event cache...
|
||||
//
|
||||
// This is added as a method to the emitter passed to guaranteeEvents(..)...
|
||||
//
|
||||
// NOTE: his has the same event names semantics as guaranteeEvents(..)
|
||||
// NOTE: for more info see docs for guaranteeEvents(..)
|
||||
function clearGuaranteedQueue(names){
|
||||
names = names == '*' ? Object.keys(this._guaranteed_queue)
|
||||
: typeof(names) == typeof('str') ? names.split(/\s+/g)
|
||||
: names
|
||||
|
||||
var that = this
|
||||
names.forEach(function(name){
|
||||
if(name in that._guaranteed_queue){
|
||||
that._guaranteed_queue[name] = []
|
||||
}
|
||||
})
|
||||
|
||||
return this
|
||||
}
|
||||
|
||||
|
||||
// Guarantee that every event handler gets every event...
|
||||
//
|
||||
// guaranteeEvents('event', emitter)
|
||||
@ -28,29 +50,12 @@
|
||||
//
|
||||
// NOTE: the seen stack might get quite big, this is not recommended for
|
||||
// long running emitters...
|
||||
//
|
||||
var guaranteeEvents =
|
||||
module.exports =
|
||||
function(names, emitter){
|
||||
function guaranteeEvents(names, emitter){
|
||||
names = typeof(names) == typeof('str') ? names.split(/\s+/g) : names
|
||||
|
||||
// add ability to clear the queue...
|
||||
if(emitter.clearGuaranteedQueue == null){
|
||||
emitter.clearGuaranteedQueue = function(names){
|
||||
names = names == '*' ? Object.keys(this._guaranteed_queue)
|
||||
: typeof(names) == typeof('str') ? names.split(/\s+/g)
|
||||
: names
|
||||
|
||||
var that = this
|
||||
names.forEach(function(name){
|
||||
if(name in that._guaranteed_queue){
|
||||
that._guaranteed_queue[name] = []
|
||||
}
|
||||
})
|
||||
|
||||
return this
|
||||
}
|
||||
|
||||
emitter.clearGuaranteedQueue = clearGuaranteedQueue
|
||||
emitter._guaranteed_queue = {}
|
||||
}
|
||||
|
||||
@ -81,6 +86,10 @@ function(names, emitter){
|
||||
}
|
||||
|
||||
|
||||
// this is the only thing we are exporting...
|
||||
module.exports = guaranteeEvents
|
||||
|
||||
|
||||
|
||||
/**********************************************************************
|
||||
* vim:set ts=4 sw=4 : */
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "guarantee-events",
|
||||
"version": "1.0.2",
|
||||
"version": "1.0.6",
|
||||
"description": "Guarantee that every event handler gets every event...",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
@ -18,7 +18,7 @@
|
||||
"event"
|
||||
],
|
||||
"author": "Alex A. Naanou <alex.nanou@gmail.com> (https://github.com/flynx)",
|
||||
"license": "New BSD",
|
||||
"license": "BSD-3-Clause",
|
||||
"bugs": {
|
||||
"url": "https://github.com/flynx/guaranteeEvents/issues"
|
||||
},
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user