New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

events: remove reaches into _events internals #17440

Closed
wants to merge 4 commits into
base: master
from

Conversation

@apapirovski
Member

apapirovski commented Dec 3, 2017

This strips out the harmless bits of #17324 into this standalone PR so they can actually land.

Refactoring of the lib & src code to eliminate all deep reaches into the internal _events dictionary object, instead use available APIs and add an extra method to EventEmitter: rawListeners (this seems to be a common reason to reach into _events in user-code as well).

Checklist
  • make -j4 test (UNIX), or vcbuild test (Windows) passes
  • tests and/or benchmarks are included
  • documentation is changed or added
  • commit message follows commit guidelines
Affected core subsystem(s)

events

return unwrapListeners(evlistener);
EventEmitter.prototype.rawListeners = function rawListeners(type) {

This comment has been minimized.

@lpinca

lpinca Dec 3, 2017

Member

Is there a way to not make this public? I don't like to expose internal details of the EventEmitter.

@lpinca

lpinca Dec 3, 2017

Member

Is there a way to not make this public? I don't like to expose internal details of the EventEmitter.

This comment has been minimized.

@apapirovski

apapirovski Dec 3, 2017

Member

I guess the question is whether it's beneficial to hide these internals or not? I've already seen lots of user-code reaching into _events for the wrappers. We do it ourselves even. That seems to indicate that we probably need a way to get those once wrappers.

Having this be behind a method at least gives us some control over the internals that users accessing _events[type] directly doesn't.

@apapirovski

apapirovski Dec 3, 2017

Member

I guess the question is whether it's beneficial to hide these internals or not? I've already seen lots of user-code reaching into _events for the wrappers. We do it ourselves even. That seems to indicate that we probably need a way to get those once wrappers.

Having this be behind a method at least gives us some control over the internals that users accessing _events[type] directly doesn't.

This comment has been minimized.

@apapirovski

apapirovski Dec 3, 2017

Member

FWIW there's good discussion on this in #6881 where the change listeners was made. It seems like @addaleax, @ChALkeR & @Fishrock123 wanted to add an ability to return the wrapped listeners anyway but then that fell by the wayside.

@apapirovski

apapirovski Dec 3, 2017

Member

FWIW there's good discussion on this in #6881 where the change listeners was made. It seems like @addaleax, @ChALkeR & @Fishrock123 wanted to add an ability to return the wrapped listeners anyway but then that fell by the wayside.

This comment has been minimized.

@lpinca

lpinca Dec 3, 2017

Member

I've already seen lots of user-code reaching into _events for the wrappers

Can you link some examples which is not readable-stream? We added eventNames() to prevent people from using _events and there weren't a lot of modules using _events at the time.

We do it ourselves even. That seems to indicate that we probably need a way to get those once wrappers.

Agreed but I would prefer to have it private.

@lpinca

lpinca Dec 3, 2017

Member

I've already seen lots of user-code reaching into _events for the wrappers

Can you link some examples which is not readable-stream? We added eventNames() to prevent people from using _events and there weren't a lot of modules using _events at the time.

We do it ourselves even. That seems to indicate that we probably need a way to get those once wrappers.

Agreed but I would prefer to have it private.

This comment has been minimized.

@apapirovski

apapirovski Dec 3, 2017

Member

I've seen it in private codebases for this particular use case, described by @ChALkeR in the PR linked above:

It looks like there will be no way to re-attach the events then, which could be useful for cloning, intercepting, or temporary disabling events. Perhaps some API should be added that allows that?

As an example out in the wild, this module broke after the change to listeners and would need to use _events now. (Of course, as far as I can tell, prependListener just solves the same problem anyway but that's a different story.)

https://github.com/timoxley/overshadow-listeners/blob/master/index.js

Also, Ultron is subtly broken if one adds the same handler as a once using Ultron and then as a real event without Ultron. Ultron will then inadvertently remove the second version. (Although that's also partially a general issue with storing the ID directly on the function.)

https://github.com/unshiftio/ultron/blob/336c789616db9ca3f164f4e5f15ed78f49d528da/index.js#L105-L111

@apapirovski

apapirovski Dec 3, 2017

Member

I've seen it in private codebases for this particular use case, described by @ChALkeR in the PR linked above:

It looks like there will be no way to re-attach the events then, which could be useful for cloning, intercepting, or temporary disabling events. Perhaps some API should be added that allows that?

As an example out in the wild, this module broke after the change to listeners and would need to use _events now. (Of course, as far as I can tell, prependListener just solves the same problem anyway but that's a different story.)

https://github.com/timoxley/overshadow-listeners/blob/master/index.js

Also, Ultron is subtly broken if one adds the same handler as a once using Ultron and then as a real event without Ultron. Ultron will then inadvertently remove the second version. (Although that's also partially a general issue with storing the ID directly on the function.)

https://github.com/unshiftio/ultron/blob/336c789616db9ca3f164f4e5f15ed78f49d528da/index.js#L105-L111

This comment has been minimized.

@addaleax

addaleax Dec 3, 2017

Member

Yeah, I think this should be exposed for API completeness (for the reason in the @ChALkeR quote above); and that there is code in Node core that uses this should be a good indicator that there are valid use cases.

@addaleax

addaleax Dec 3, 2017

Member

Yeah, I think this should be exposed for API completeness (for the reason in the @ChALkeR quote above); and that there is code in Node core that uses this should be a good indicator that there are valid use cases.

This comment has been minimized.

@lpinca

lpinca Dec 3, 2017

Member

I don't see it coming, but changes to how once events are handled can potentially translate to breaking changes if this api is exposed.

@lpinca

lpinca Dec 3, 2017

Member

I don't see it coming, but changes to how once events are handled can potentially translate to breaking changes if this api is exposed.

This comment has been minimized.

@mcollina

mcollina Dec 6, 2017

Member

@lpinca can you please articulate this more? What would change on how once events are handled?
I think we will have breaking changes anyway if people used _events, just outside of the public API.

@mcollina

mcollina Dec 6, 2017

Member

@lpinca can you please articulate this more? What would change on how once events are handled?
I think we will have breaking changes anyway if people used _events, just outside of the public API.

This comment has been minimized.

@lpinca

lpinca Dec 6, 2017

Member

This will probably never happen but imagine that we will switch to an object to handle events, for example:

{ once: false, listener }

rawListeners can no longer return a function.

I think we will have breaking changes anyway if people used _events, just outside of the public API.

Yes, the difference is that _events is "private" so you know beforehand that if you use it your code can break at any time.

@lpinca

lpinca Dec 6, 2017

Member

This will probably never happen but imagine that we will switch to an object to handle events, for example:

{ once: false, listener }

rawListeners can no longer return a function.

I think we will have breaking changes anyway if people used _events, just outside of the public API.

Yes, the difference is that _events is "private" so you know beforehand that if you use it your code can break at any time.

This comment has been minimized.

@mcollina

mcollina Dec 6, 2017

Member

However we can't currently touch _events because a good chunk of the ecosystem uses it.

@mcollina

mcollina Dec 6, 2017

Member

However we can't currently touch _events because a good chunk of the ecosystem uses it.

@jasnell jasnell requested a review from mcollina Dec 5, 2017

@apapirovski

This comment has been minimized.

Show comment
Hide comment
@addaleax

Didn’t realize this was a separate PR when I commented

LGTM :)

Show outdated Hide outdated lib/events.js Outdated
Show outdated Hide outdated lib/events.js Outdated
Local<Object> events_obj = Object::New(env->isolate());
CHECK(events_obj->SetPrototype(env->context(),
Null(env->isolate())).FromJust());
process->Set(env->events_string(), events_obj);

This comment has been minimized.

@mcollina

mcollina Dec 6, 2017

Member

does this cause a perf regression?

@mcollina

mcollina Dec 6, 2017

Member

does this cause a perf regression?

This comment has been minimized.

@apapirovski

apapirovski Dec 6, 2017

Member

Not that I can tell, since we create it in the init call anyway.

@apapirovski

apapirovski Dec 6, 2017

Member

Not that I can tell, since we create it in the init call anyway.

Show outdated Hide outdated lib/vm.js Outdated
Show outdated Hide outdated lib/vm.js Outdated
return unwrapListeners(evlistener);
EventEmitter.prototype.rawListeners = function rawListeners(type) {

This comment has been minimized.

@mcollina

mcollina Dec 6, 2017

Member

@lpinca can you please articulate this more? What would change on how once events are handled?
I think we will have breaking changes anyway if people used _events, just outside of the public API.

@mcollina

mcollina Dec 6, 2017

Member

@lpinca can you please articulate this more? What would change on how once events are handled?
I think we will have breaking changes anyway if people used _events, just outside of the public API.

Show outdated Hide outdated test/parallel/test-event-emitter-listeners.js Outdated
- `eventName` {any}
Returns a copy of the array of listeners for the event named `eventName`,
including any wrappers (such as those created by `.once`).

This comment has been minimized.

@mcollina

mcollina Dec 6, 2017

Member

The doc does not explain what a wrapper is in this context, and how it is wrapped.

@mcollina

mcollina Dec 6, 2017

Member

The doc does not explain what a wrapper is in this context, and how it is wrapped.

This comment has been minimized.

@apapirovski

apapirovski Dec 6, 2017

Member

Any thoughts on how we should document this or whether we even should? I'm not certain we want to necessarily encourage the usage. If someone needs it they'll know and otherwise we might want it to be a bit obscure, haha? Not sure...

If anyone has any thoughts, please chime in.

@apapirovski

apapirovski Dec 6, 2017

Member

Any thoughts on how we should document this or whether we even should? I'm not certain we want to necessarily encourage the usage. If someone needs it they'll know and otherwise we might want it to be a bit obscure, haha? Not sure...

If anyone has any thoughts, please chime in.

This comment has been minimized.

@mcollina

mcollina Dec 6, 2017

Member

If it's documented, it needs to be documented in full. Otherwise it doesn't. I'm fine either way.

@mcollina

mcollina Dec 6, 2017

Member

If it's documented, it needs to be documented in full. Otherwise it doesn't. I'm fine either way.

This comment has been minimized.

@apapirovski

apapirovski Dec 6, 2017

Member

Do we have precedent for including a publicly exposed function that's not documented? Just trying to figure out the direction we would best go here. This isn't something we want to encourage being used but it's a step better than the current situation of reaching into _events.

@apapirovski

apapirovski Dec 6, 2017

Member

Do we have precedent for including a publicly exposed function that's not documented? Just trying to figure out the direction we would best go here. This isn't something we want to encourage being used but it's a step better than the current situation of reaching into _events.

This comment has been minimized.

@TimothyGu

TimothyGu Dec 7, 2017

Member

I'd rather this get documented fully.

@TimothyGu

TimothyGu Dec 7, 2017

Member

I'd rather this get documented fully.

@addaleax

This comment has been minimized.

Show comment
Hide comment
@addaleax

addaleax Dec 10, 2017

Member

CI: https://ci.nodejs.org/job/node-test-commit/14721/

Are there any issues with landing this PR as it is?

Member

addaleax commented Dec 10, 2017

CI: https://ci.nodejs.org/job/node-test-commit/14721/

Are there any issues with landing this PR as it is?

@apapirovski

This comment has been minimized.

Show comment
Hide comment
@apapirovski

apapirovski Dec 10, 2017

Member

I'm guessing that documenting wrappers might be a good idea (for the purposes of rawListeners), as per feedback above, but I don't really know a good format for it.

Member

apapirovski commented Dec 10, 2017

I'm guessing that documenting wrappers might be a good idea (for the purposes of rawListeners), as per feedback above, but I don't really know a good format for it.

@apapirovski

This comment has been minimized.

Show comment
Hide comment
@apapirovski

apapirovski Dec 12, 2017

Member

@mcollina @TimothyGu do you have any suggestions for a good way to document the once wrappers. This PR is held up on it and I don't have any good ideas re: format that doesn't make that information confusing... Also, do we document as part of rawListeners or once?

Member

apapirovski commented Dec 12, 2017

@mcollina @TimothyGu do you have any suggestions for a good way to document the once wrappers. This PR is held up on it and I don't have any good ideas re: format that doesn't make that information confusing... Also, do we document as part of rawListeners or once?

@mcollina

This comment has been minimized.

Show comment
Hide comment
@mcollina

mcollina Dec 12, 2017

Member

I would just write there an example output of the rawListeners call. There is no need to document this in once.

Member

mcollina commented Dec 12, 2017

I would just write there an example output of the rawListeners call. There is no need to document this in once.

@apapirovski

This comment has been minimized.

Show comment
Hide comment
@apapirovski

apapirovski Dec 12, 2017

Member

@mcollina PTAL. Thank you!

Member

apapirovski commented Dec 12, 2017

@mcollina PTAL. Thank you!

// Returns a new Array with a function `onceWrapper` which has a property
// `listener` which contains the original listener bound above
const listeners = emitter.rawListeners('log');
const logFnWrapper = listeners[0];

This comment has been minimized.

@mcollina

mcollina Dec 12, 2017

Member

can you add an example also with on()?

@mcollina

mcollina Dec 12, 2017

Member

can you add an example also with on()?

This comment has been minimized.

@apapirovski

apapirovski Dec 12, 2017

Member

Updated. Let me know if this isn't what you had in mind.

@apapirovski

apapirovski Dec 12, 2017

Member

Updated. Let me know if this isn't what you had in mind.

@mcollina

LGTM with my nit.

<!-- YAML
added: REPLACEME
-->
- `eventName` {any}

This comment has been minimized.

@TimothyGu

TimothyGu Dec 13, 2017

Member

Hmm, shouldn't this be {string|symbol}

@TimothyGu

TimothyGu Dec 13, 2017

Member

Hmm, shouldn't this be {string|symbol}

This comment has been minimized.

@apapirovski

apapirovski Dec 13, 2017

Member

It matches the rest of the docs and it is at least partially correct. We don't validate the input so if they pass in a number, it'll get automatically converted to a string.

Either way, if we're changing this then it should be changed in all of the docs.

@apapirovski

apapirovski Dec 13, 2017

Member

It matches the rest of the docs and it is at least partially correct. We don't validate the input so if they pass in a number, it'll get automatically converted to a string.

Either way, if we're changing this then it should be changed in all of the docs.

This comment has been minimized.

@TimothyGu

TimothyGu Dec 13, 2017

Member

I've filed #17657 to track that. This again LGTM.

@TimothyGu

TimothyGu Dec 13, 2017

Member

I've filed #17657 to track that. This again LGTM.

aprilwebster added a commit to aprilwebster/node that referenced this pull request Dec 13, 2017

doc: change eventName type annotations
Change type annotations for eventName in events API doc from {any} to {string|symbol} to be consistent with doc changes made in nodejs#17440.

Fixes: nodejs#17657

@aprilwebster aprilwebster referenced this pull request Dec 13, 2017

Closed

doc: change eventName type annotations #17666

2 of 2 tasks complete

apapirovski added some commits Nov 25, 2017

events: remove reaches into _events internals
Refactor lib & src code to eliminate all deep reaches into the
internal _events dictionary object, instead use available APIs
and add an extra method to EventEmitter: wrappedListeners.

apapirovski added a commit that referenced this pull request Dec 14, 2017

events: remove reaches into _events internals
Refactor lib & src code to eliminate all deep reaches into the
internal _events dictionary object, instead use available APIs
and add an extra method to EventEmitter: rawListeners.

PR-URL: #17440
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: Timothy Gu <timothygu99@gmail.com>
Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
@apapirovski

This comment has been minimized.

Show comment
Hide comment
@apapirovski

apapirovski Dec 14, 2017

Member

Landed in decab71

Member

apapirovski commented Dec 14, 2017

Landed in decab71

@apapirovski apapirovski deleted the apapirovski:patch-ee-internals-usage branch Dec 14, 2017

aprilwebster added a commit to aprilwebster/node that referenced this pull request Dec 14, 2017

doc: change eventName type annotations
Change type annotations for eventName in events API doc from {any} to {string|symbol} to be consistent with doc changes made in nodejs#17440.

Fixes: nodejs#17657

MylesBorins added a commit that referenced this pull request Jan 8, 2018

events: remove reaches into _events internals
Refactor lib & src code to eliminate all deep reaches into the
internal _events dictionary object, instead use available APIs
and add an extra method to EventEmitter: rawListeners.

PR-URL: #17440
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: Timothy Gu <timothygu99@gmail.com>
Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>

MylesBorins added a commit that referenced this pull request Jan 10, 2018

2019-01-10 Version 9.4.0 (Current)
Notable change:

* async_hooks:
  - deprecate AsyncHooks Sensitive API and runInAsyncIdScope. Neither
    API were documented. (Andreas Madsen)
    #16972
* deps:
  - update nghttp2 to 1.29.0 (James M Snell)
    #17908
  - upgrade npm to 5.6.0 (Kat Marchán)
    #17535
  - cherry-pick 50f7455 from upstream V8 (Michaël Zasso)
    #16591
* events:
  - remove reaches into _events internals (Anatoli Papirovski)
    #17440
* http:
  - add rawPacket in err of `clientError` event (XadillaX)
    #17672
* http2:
  - implement maxSessionMemory (James M Snell)
    #17967
  - add initial support for originSet (James M Snell)
    #17935
  - add altsvc support (James M Snell)
    #17917
  - perf_hooks integration (James M Snell)
    #17906
* net:
  - remove Socket.prototype.write (Anna Henningsen)
    #17644
  - remove Socket.prototype.listen (Ruben Bridgewater)
    #13735
* repl:
  - show lexically scoped vars in tab completion (Michaël Zasso)
    #16591
* stream:
  - rm {writeable/readable}State.length (Calvin Metcalf)
    #12857
  - add flow and buffer properties to streams (Calvin Metcalf)
    #12855
* util:
  - allow wildcards in NODE_DEBUG variable (Tyler)
    #17609
* zlib:
  - add ArrayBuffer support (Jem Bezooyen)
    #16042
* Addedew collaborator**
  - [starkwang](https://github.com/starkwang) Weijia Wang
* Addedew TSC member**
  - [danbev](https://github.com/danbev) Daniel Bevenius

PR-URL: Coming Soon

@MylesBorins MylesBorins referenced this pull request Jan 10, 2018

Merged

v9.4.0 proposal #18069

MylesBorins added a commit that referenced this pull request Jan 10, 2018

2019-01-10 Version 9.4.0 (Current)
Notable change:

* async_hooks:
  - deprecate AsyncHooks Sensitive API and runInAsyncIdScope. Neither
    API were documented. (Andreas Madsen)
    #16972
* deps:
  - update nghttp2 to 1.29.0 (James M Snell)
    #17908
  - upgrade npm to 5.6.0 (Kat Marchán)
    #17535
  - cherry-pick 50f7455 from upstream V8 (Michaël Zasso)
    #16591
* events:
  - remove reaches into _events internals (Anatoli Papirovski)
    #17440
* http:
  - add rawPacket in err of `clientError` event (XadillaX)
    #17672
* http2:
  - implement maxSessionMemory (James M Snell)
    #17967
  - add initial support for originSet (James M Snell)
    #17935
  - add altsvc support (James M Snell)
    #17917
  - perf_hooks integration (James M Snell)
    #17906
* net:
  - remove Socket.prototype.write (Anna Henningsen)
    #17644
  - remove Socket.prototype.listen (Ruben Bridgewater)
    #13735
* repl:
  - show lexically scoped vars in tab completion (Michaël Zasso)
    #16591
* stream:
  - rm {writeable/readable}State.length (Calvin Metcalf)
    #12857
  - add flow and buffer properties to streams (Calvin Metcalf)
    #12855
* util:
  - allow wildcards in NODE_DEBUG variable (Tyler)
    #17609
* zlib:
  - add ArrayBuffer support (Jem Bezooyen)
    #16042
* Addedew collaborator**
  - [starkwang](https://github.com/starkwang) Weijia Wang
* Addedew TSC member**
  - [danbev](https://github.com/danbev) Daniel Bevenius

PR-URL: #18069

MylesBorins added a commit that referenced this pull request Jan 10, 2018

2019-01-10 Version 9.4.0 (Current)
Notable change:

* async_hooks:
  - deprecate AsyncHooks Sensitive API and runInAsyncIdScope. Neither
    API were documented. (Andreas Madsen)
    #16972
* deps:
  - update nghttp2 to 1.29.0 (James M Snell)
    #17908
  - upgrade npm to 5.6.0 (Kat Marchán)
    #17535
  - cherry-pick 50f7455 from upstream V8 (Michaël Zasso)
    #16591
* events:
  - remove reaches into _events internals (Anatoli Papirovski)
    #17440
* http:
  - add rawPacket in err of `clientError` event (XadillaX)
    #17672
* http2:
  - implement maxSessionMemory (James M Snell)
    #17967
  - add initial support for originSet (James M Snell)
    #17935
  - add altsvc support (James M Snell)
    #17917
  - perf_hooks integration (James M Snell)
    #17906
  - Refactoring and cleanup of Http2Session and Http2Stream destroy
    (James M Snell) #17406
* net:
  - remove Socket.prototype.write (Anna Henningsen)
    #17644
  - remove Socket.prototype.listen (Ruben Bridgewater)
    #13735
* repl:
  - show lexically scoped vars in tab completion (Michaël Zasso)
    #16591
* stream:
  - rm {writeable/readable}State.length (Calvin Metcalf)
    #12857
  - add flow and buffer properties to streams (Calvin Metcalf)
    #12855
* util:
  - allow wildcards in NODE_DEBUG variable (Tyler)
    #17609
* zlib:
  - add ArrayBuffer support (Jem Bezooyen)
    #16042
* Addedew collaborator**
  - [starkwang](https://github.com/starkwang) Weijia Wang
* Addedew TSC member**
  - [danbev](https://github.com/danbev) Daniel Bevenius

PR-URL: #18069

MylesBorins added a commit that referenced this pull request Jan 10, 2018

2019-01-10 Version 9.4.0 (Current)
Notable change:

* async_hooks:
  - deprecate AsyncHooks Sensitive API and runInAsyncIdScope. Neither
    API were documented. (Andreas Madsen)
    #16972
* deps:
  - update nghttp2 to 1.29.0 (James M Snell)
    #17908
  - upgrade npm to 5.6.0 (Kat Marchán)
    #17535
  - cherry-pick 50f7455 from upstream V8 (Michaël Zasso)
    #16591
* events:
  - remove reaches into _events internals (Anatoli Papirovski)
    #17440
* http:
  - add rawPacket in err of `clientError` event (XadillaX)
    #17672
* http2:
  - implement maxSessionMemory (James M Snell)
    #17967
  - add initial support for originSet (James M Snell)
    #17935
  - add altsvc support (James M Snell)
    #17917
  - perf_hooks integration (James M Snell)
    #17906
  - Refactoring and cleanup of Http2Session and Http2Stream destroy
    (James M Snell) #17406
* net:
  - remove Socket.prototype.write (Anna Henningsen)
    #17644
  - remove Socket.prototype.listen (Ruben Bridgewater)
    #13735
* repl:
  - show lexically scoped vars in tab completion (Michaël Zasso)
    #16591
* stream:
  - rm {writeable/readable}State.length (Calvin Metcalf)
    #12857
  - add flow and buffer properties to streams (Calvin Metcalf)
    #12855
* util:
  - allow wildcards in NODE_DEBUG variable (Tyler)
    #17609
* zlib:
  - add ArrayBuffer support (Jem Bezooyen)
    #16042
* Addedew collaborator**
  - [starkwang](https://github.com/starkwang) Weijia Wang
* Addedew TSC member**
  - [danbev](https://github.com/danbev) Daniel Bevenius

PR-URL: #18069

MylesBorins added a commit that referenced this pull request Jan 10, 2018

2019-01-10 Version 9.4.0 (Current)
Notable change:

* async_hooks:
  - deprecate AsyncHooks Sensitive API and runInAsyncIdScope. Neither
    API were documented. (Andreas Madsen)
    #16972
* deps:
  - update nghttp2 to 1.29.0 (James M Snell)
    #17908
  - upgrade npm to 5.6.0 (Kat Marchán)
    #17535
* events:
  - remove reaches into _events internals (Anatoli Papirovski)
    #17440
* http:
  - add rawPacket in err of `clientError` event (XadillaX)
    #17672
* http2:
  - implement maxSessionMemory (James M Snell)
    #17967
  - add initial support for originSet (James M Snell)
    #17935
  - add altsvc support (James M Snell)
    #17917
  - perf_hooks integration (James M Snell)
    #17906
  - Refactoring and cleanup of Http2Session and Http2Stream destroy
    (James M Snell) #17406
* net:
  - remove Socket.prototype.write (Anna Henningsen)
    #17644
  - remove Socket.prototype.listen (Ruben Bridgewater)
    #13735
* stream:
  - rm {writeable/readable}State.length (Calvin Metcalf)
    #12857
  - add flow and buffer properties to streams (Calvin Metcalf)
    #12855
* util:
  - allow wildcards in NODE_DEBUG variable (Tyler)
    #17609
* zlib:
  - add ArrayBuffer support (Jem Bezooyen)
    #16042
* Addedew collaborator**
  - [starkwang](https://github.com/starkwang) Weijia Wang
* Addedew TSC member**
  - [danbev](https://github.com/danbev) Daniel Bevenius

PR-URL: #18069

MylesBorins added a commit that referenced this pull request Jan 10, 2018

2019-01-10 Version 9.4.0 (Current)
Notable change:

* async_hooks:
  - deprecate AsyncHooks Sensitive API and runInAsyncIdScope. Neither
    API were documented. (Andreas Madsen)
    #16972
* deps:
  - update nghttp2 to 1.29.0 (James M Snell)
    #17908
  - upgrade npm to 5.6.0 (Kat Marchán)
    #17535
* events:
  - remove reaches into _events internals (Anatoli Papirovski)
    #17440
* http:
  - add rawPacket in err of `clientError` event (XadillaX)
    #17672
* http2:
  - implement maxSessionMemory (James M Snell)
    #17967
  - add initial support for originSet (James M Snell)
    #17935
  - add altsvc support (James M Snell)
    #17917
  - perf_hooks integration (James M Snell)
    #17906
  - Refactoring and cleanup of Http2Session and Http2Stream destroy
    (James M Snell) #17406
* net:
  - remove Socket.prototype.write (Anna Henningsen)
    #17644
  - remove Socket.prototype.listen (Ruben Bridgewater)
    #13735
* stream:
  - rm {writeable/readable}State.length (Calvin Metcalf)
    #12857
  - add flow and buffer properties to streams (Calvin Metcalf)
    #12855
* util:
  - allow wildcards in NODE_DEBUG variable (Tyler)
    #17609
* zlib:
  - add ArrayBuffer support (Jem Bezooyen)
    #16042
* Addedew collaborator**
  - [starkwang](https://github.com/starkwang) Weijia Wang
* Addedew TSC member**
  - [danbev](https://github.com/danbev) Daniel Bevenius

PR-URL: #18069

MylesBorins added a commit that referenced this pull request Jan 10, 2018

2019-01-10 Version 9.4.0 (Current)
Notable change:

* async_hooks:
  - deprecate AsyncHooks Sensitive API and runInAsyncIdScope. Neither
    API were documented. (Andreas Madsen)
    #16972
* deps:
  - update nghttp2 to 1.29.0 (James M Snell)
    #17908
  - upgrade npm to 5.6.0 (Kat Marchán)
    #17535
  - cherry-pick 50f7455 from upstream V8 (Michaël Zasso)
    #16591
* events:
  - remove reaches into _events internals (Anatoli Papirovski)
    #17440
* http:
  - add rawPacket in err of `clientError` event (XadillaX)
    #17672
* http2:
  - implement maxSessionMemory (James M Snell)
    #17967
  - add initial support for originSet (James M Snell)
    #17935
  - add altsvc support (James M Snell)
    #17917
  - perf_hooks integration (James M Snell)
    #17906
  - Refactoring and cleanup of Http2Session and Http2Stream destroy
    (James M Snell) #17406
* net:
  - remove Socket.prototype.write (Anna Henningsen)
    #17644
  - remove Socket.prototype.listen (Ruben Bridgewater)
    #13735
* repl:
  - show lexically scoped vars in tab completion (Michaël Zasso)
    #16591
* stream:
  - rm {writeable/readable}State.length (Calvin Metcalf)
    #12857
  - add flow and buffer properties to streams (Calvin Metcalf)
    #12855
* util:
  - allow wildcards in NODE_DEBUG variable (Tyler)
    #17609
* zlib:
  - add ArrayBuffer support (Jem Bezooyen)
    #16042
* Addedew collaborator**
  - [starkwang](https://github.com/starkwang) Weijia Wang
* Addedew TSC member**
  - [danbev](https://github.com/danbev) Daniel Bevenius

PR-URL: #18069

MylesBorins added a commit that referenced this pull request Jan 10, 2018

2019-01-10 Version 9.4.0 (Current)
Notable change:

* async_hooks:
  - deprecate AsyncHooks Sensitive API and runInAsyncIdScope. Neither
    API were documented. (Andreas Madsen)
    #16972
* deps:
  - update nghttp2 to 1.29.0 (James M Snell)
    #17908
  - upgrade npm to 5.6.0 (Kat Marchán)
    #17535
  - cherry-pick 50f7455 from upstream V8 (Michaël Zasso)
    #16591
* events:
  - remove reaches into _events internals (Anatoli Papirovski)
    #17440
* http:
  - add rawPacket in err of `clientError` event (XadillaX)
    #17672
* http2:
  - implement maxSessionMemory (James M Snell)
    #17967
  - add initial support for originSet (James M Snell)
    #17935
  - add altsvc support (James M Snell)
    #17917
  - perf_hooks integration (James M Snell)
    #17906
  - Refactoring and cleanup of Http2Session and Http2Stream destroy
    (James M Snell) #17406
* net:
  - remove Socket.prototype.write (Anna Henningsen)
    #17644
  - remove Socket.prototype.listen (Ruben Bridgewater)
    #13735
* repl:
  - show lexically scoped vars in tab completion (Michaël Zasso)
    #16591
* stream:
  - rm {writeable/readable}State.length (Calvin Metcalf)
    #12857
  - add flow and buffer properties to streams (Calvin Metcalf)
    #12855
* util:
  - allow wildcards in NODE_DEBUG variable (Tyler)
    #17609
* zlib:
  - add ArrayBuffer support (Jem Bezooyen)
    #16042
* Addedew collaborator**
  - [starkwang](https://github.com/starkwang) Weijia Wang
* Addedew TSC member**
  - [danbev](https://github.com/danbev) Daniel Bevenius

PR-URL: #18069

msoechting added a commit to hpicgs/node that referenced this pull request Feb 5, 2018

events: remove reaches into _events internals
Refactor lib & src code to eliminate all deep reaches into the
internal _events dictionary object, instead use available APIs
and add an extra method to EventEmitter: rawListeners.

PR-URL: nodejs#17440
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: Timothy Gu <timothygu99@gmail.com>
Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>

msoechting added a commit to hpicgs/node that referenced this pull request Feb 5, 2018

2019-01-10 Version 9.4.0 (Current)
Notable change:

* async_hooks:
  - deprecate AsyncHooks Sensitive API and runInAsyncIdScope. Neither
    API were documented. (Andreas Madsen)
    nodejs#16972
* deps:
  - update nghttp2 to 1.29.0 (James M Snell)
    nodejs#17908
  - upgrade npm to 5.6.0 (Kat Marchán)
    nodejs#17535
  - cherry-pick 50f7455 from upstream V8 (Michaël Zasso)
    nodejs#16591
* events:
  - remove reaches into _events internals (Anatoli Papirovski)
    nodejs#17440
* http:
  - add rawPacket in err of `clientError` event (XadillaX)
    nodejs#17672
* http2:
  - implement maxSessionMemory (James M Snell)
    nodejs#17967
  - add initial support for originSet (James M Snell)
    nodejs#17935
  - add altsvc support (James M Snell)
    nodejs#17917
  - perf_hooks integration (James M Snell)
    nodejs#17906
  - Refactoring and cleanup of Http2Session and Http2Stream destroy
    (James M Snell) nodejs#17406
* net:
  - remove Socket.prototype.write (Anna Henningsen)
    nodejs#17644
  - remove Socket.prototype.listen (Ruben Bridgewater)
    nodejs#13735
* repl:
  - show lexically scoped vars in tab completion (Michaël Zasso)
    nodejs#16591
* stream:
  - rm {writeable/readable}State.length (Calvin Metcalf)
    nodejs#12857
  - add flow and buffer properties to streams (Calvin Metcalf)
    nodejs#12855
* util:
  - allow wildcards in NODE_DEBUG variable (Tyler)
    nodejs#17609
* zlib:
  - add ArrayBuffer support (Jem Bezooyen)
    nodejs#16042
* Addedew collaborator**
  - [starkwang](https://github.com/starkwang) Weijia Wang
* Addedew TSC member**
  - [danbev](https://github.com/danbev) Daniel Bevenius

PR-URL: nodejs#18069

msoechting added a commit to hpicgs/node that referenced this pull request Feb 7, 2018

events: remove reaches into _events internals
Refactor lib & src code to eliminate all deep reaches into the
internal _events dictionary object, instead use available APIs
and add an extra method to EventEmitter: rawListeners.

PR-URL: nodejs#17440
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: Timothy Gu <timothygu99@gmail.com>
Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>

msoechting added a commit to hpicgs/node that referenced this pull request Feb 7, 2018

2019-01-10 Version 9.4.0 (Current)
Notable change:

* async_hooks:
  - deprecate AsyncHooks Sensitive API and runInAsyncIdScope. Neither
    API were documented. (Andreas Madsen)
    nodejs#16972
* deps:
  - update nghttp2 to 1.29.0 (James M Snell)
    nodejs#17908
  - upgrade npm to 5.6.0 (Kat Marchán)
    nodejs#17535
  - cherry-pick 50f7455 from upstream V8 (Michaël Zasso)
    nodejs#16591
* events:
  - remove reaches into _events internals (Anatoli Papirovski)
    nodejs#17440
* http:
  - add rawPacket in err of `clientError` event (XadillaX)
    nodejs#17672
* http2:
  - implement maxSessionMemory (James M Snell)
    nodejs#17967
  - add initial support for originSet (James M Snell)
    nodejs#17935
  - add altsvc support (James M Snell)
    nodejs#17917
  - perf_hooks integration (James M Snell)
    nodejs#17906
  - Refactoring and cleanup of Http2Session and Http2Stream destroy
    (James M Snell) nodejs#17406
* net:
  - remove Socket.prototype.write (Anna Henningsen)
    nodejs#17644
  - remove Socket.prototype.listen (Ruben Bridgewater)
    nodejs#13735
* repl:
  - show lexically scoped vars in tab completion (Michaël Zasso)
    nodejs#16591
* stream:
  - rm {writeable/readable}State.length (Calvin Metcalf)
    nodejs#12857
  - add flow and buffer properties to streams (Calvin Metcalf)
    nodejs#12855
* util:
  - allow wildcards in NODE_DEBUG variable (Tyler)
    nodejs#17609
* zlib:
  - add ArrayBuffer support (Jem Bezooyen)
    nodejs#16042
* Addedew collaborator**
  - [starkwang](https://github.com/starkwang) Weijia Wang
* Addedew TSC member**
  - [danbev](https://github.com/danbev) Daniel Bevenius

PR-URL: nodejs#18069
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment