Conversation
doc/api/n-api.md
Outdated
There was a problem hiding this comment.
Period after Optional and after process.release.name.
src/node_api.cc
Outdated
There was a problem hiding this comment.
Could you add a test where release is null.
src/node_api.cc
Outdated
There was a problem hiding this comment.
Having a string out parameter is a little bit risky since there needs to be a clear chain of ownership. In this case it will always be a constant string, but as a developer it may not be clear what the scope of the string is and whether it needs to be freed by the caller.
There was a problem hiding this comment.
but as a developer it may not be clear what the scope of the string is and whether it needs to be freed by the caller.
I can add a bit to the docs if you have a suggestion for wording, but since this refers to a const char pointer, there isn’t really any ambiguity.
There was a problem hiding this comment.
Thanks @addaleax, you're right about the const char * being a good indicator, I hadn't really considered that the object would not be a valid argument to free with the const modifier. It does seem like all usages of this function would at least yield a global string value, so I think my original concern is invalid. I'll take a look at the documentation and suggest any specific changes there.
src/node_api.cc
Outdated
There was a problem hiding this comment.
Would it be better to use a struct here? I see two benefits:
- No need for the developer to study the documentation to determine the size of the array required
- Easier to access the parts of the version by member name
There was a problem hiding this comment.
Yea, that makes sense. I’ll push again in a couple minutes.
b41455a to
b2e5ccf
Compare
|
@kfarnung I’ve updated this anyway with the |
src/node_api.cc
Outdated
There was a problem hiding this comment.
Since we're returning a pointer to this static struct, should the result be a const napi_node_version** to prevent modification by the callers?
I think the other option would be to use a single indirection to a non-const napi_node_version and then just fill in the values. I'm fine either way.
There was a problem hiding this comment.
Since we're returning a pointer to this static struct, should the
resultbe aconst napi_node_version**to prevent modification by the callers?
Yes. :)
I think the other option would be to use a single indirection to a non-const
napi_node_versionand then just fill in the values. I'm fine either way.
I thought about that, but this approach has the advantage of being extensible on the N-API side in a backwards-compatible fashion, if we or somebody else (Node forkers?) ever need to do that.
There was a problem hiding this comment.
Agreed on the current approach.
|
FWIW, libuv has two separate functions for this, one that returns a version string and one that returns Aside: the |
All the
Maybe for this particular case, items 2 and 3 will never be an issue. But still it would be strange if this API did not follow the pattern of all the others that have |
|
CI: https://ci.nodejs.org/job/node-test-commit/11696/ This should be ready. |
doc/api/n-api.md
Outdated
There was a problem hiding this comment.
would it make sense for this struct to also include the dependency version details equivalent to process.versions?
There was a problem hiding this comment.
I don’t like it when N-API exposes things that are already doable by just calling into JS, using, well N-API :) This particular function might be required to check whether some of that calling-into-JS works the way you want it to.
There was a problem hiding this comment.
Well, eventually one of the goals should be for Node.js itself to use N-API internally, in which case this method would be the way to get at this information from JS :-) .. but that's down the road.
There was a problem hiding this comment.
Well, eventually one of the goals should be for Node.js itself to use N-API internally
I think N-API inherently adds too much complexity to fully replace the other APIs we use. :)
in which case this method would be the way to get at this information from JS
Adding new methods is easy, and this was implemented specifically in a way that’s easy to extend on the N-API side. :)
31e52f3 to
b23c9f3
Compare
b23c9f3 to
47ff33e
Compare
Add `napi_get_node_version`, to help with feature-detecting Node.js as an environment. PR-URL: nodejs#14696 Reviewed-By: Kyle Farnung <kfarnung@microsoft.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: Tobias Nießen <tniessen@tnie.de>
47ff33e to
ec61a0b
Compare
|
Landed in 835c383 |
Add `napi_get_node_version`, to help with feature-detecting Node.js as an environment. PR-URL: #14696 Reviewed-By: Kyle Farnung <kfarnung@microsoft.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: Tobias Nießen <tniessen@tnie.de>
Add `napi_get_node_version`, to help with feature-detecting Node.js as an environment. PR-URL: #14696 Reviewed-By: Kyle Farnung <kfarnung@microsoft.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: Tobias Nießen <tniessen@tnie.de>
Add `napi_get_node_version`, to help with feature-detecting Node.js as an environment. PR-URL: nodejs#14696 Reviewed-By: Kyle Farnung <kfarnung@microsoft.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: Tobias Nießen <tniessen@tnie.de>
Add `napi_get_node_version`, to help with feature-detecting Node.js as an environment. Backport-PR-URL: #19447 PR-URL: #14696 Reviewed-By: Kyle Farnung <kfarnung@microsoft.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: Tobias Nießen <tniessen@tnie.de>
Add
napi_get_node_version, to help with feature-detecting Node.js as an environment.Checklist
make -j4 test(UNIX), orvcbuild test(Windows) passesAffected core subsystem(s)
N-API
/cc @nodejs/n-api