{"action":"created","comment":{"url":"https://api.github.com/repos/nodejs/abi-stable-node/pulls/comments/109496647","pull_request_review_id":30602480,"id":109496647,"diff_hunk":"@@ -0,0 +1,760 @@\n+# N-API - JavaScript Data Types and Values \n+\n+N-API exposes a set of APIs to create fundamental JavaScript Objects. \n+Some of these types are documented under [Section 6](https://tc39.github.io/ecma262/#sec-ecmascript-data-types-and-values) \n+of the [ECMAScript Language Specification](https://tc39.github.io/ecma262/).\n+\n+Fundamentally, these APIs are used to do one of the following:\n+1. Create a new JavaScript object\n+2. Convert from a primitive C++ type to N-API value\n+3. Convert from N-API value to a primitive C++ type\n+\n+N-API values are represented by the type `napi_value`.\n+Any N-API API that requires a JavaScript object takes in a `napi_value`.\n+In some cases, the API does check the type of the `napi_value` up-front.\n+However, for better performance, it's better that the caller makes sure that \n+the `napi_value` in question is of the JavaScript type expected by the API.\n+\n+## Enum types\n+\n+### *napi_value_type*\n+\n+#### Definition\n+```\n+enum napi_valuetype {\n+  napi_undefined,\n+  napi_null,\n+  napi_boolean,\n+  napi_number,\n+  napi_string,\n+  napi_symbol,\n+  napi_object,\n+  napi_function,\n+  napi_external,\n+}\n+```\n+\n+#### Description\n+Describes the type of a napi_value. This generally corresponds with the types described\n+in [Section 6.1 of the ECMAScript Language Specification](https://tc39.github.io/ecma262/#sec-ecmascript-language-types).\n+In addition to types in that section, `napi_value_type` also can represent Functions and Objects with external data.\n+\n+### *napi_typedarray_type*\n+\n+#### Definition\n+```\n+enum napi_typedarray_type {\n+  napi_int8_array,\n+  napi_uint8_array,\n+  napi_uint8_clamped_array,\n+  napi_int16_array,\n+  napi_uint16_array,\n+  napi_int32_array,\n+  napi_uint32_array,\n+  napi_float32_array,\n+  napi_float6_array4\n+}\n+```\n+\n+#### Description\n+This represents the underlying binary scalar datatype of the TypedArray.\n+Elements of this enum correspond to [Section 22.2 of the ECMAScript Language Specification](https://tc39.github.io/ecma262/#sec-typedarray-objects).\n+\n+## Functions\n+\n+### *napi_create_array*\n+\n+#### Signature\n+```\n+napi_status napi_create_array(napi_env env, napi_value* result)\n+```\n+\n+#### Parameters\n+- `[in]  env`: The environment that the N-API API is invoked under\n+- `[out] result`: A `napi_value` representing a JavaScript Array\n+\n+#### Return value\n+- `napi_ok` if the API succeeded.\n+\n+#### Description\n+This API returns a N-API value corresponding to a JavaScript Array type. \n+JavaScript arrays are described in [Section 22.1](https://tc39.github.io/ecma262/#sec-array-objects) of the ECMAScript Language Specification.\n+\n+### *napi_create_array_with_length*\n+\n+#### Signature\n+```\n+napi_status napi_create_array(napi_env env, size_t length, napi_value* result)\n+```\n+\n+#### Parameters\n+- `[in]  env`: The environment that the API is invoked under\n+- `[in]  length`: The initial length of the Array\n+- `[out] result`: A `napi_value` representing a JavaScript Array\n+\n+#### Return value\n+- `napi_ok` if the API succeeded.\n+\n+#### Description\n+This API returns a N-API value corresponding to a JavaScript Array type. \n+The Array's length property is set to the passed in length parameter. \n+However, the underlying buffer is not guaranteed to be pre-allocated- that behavior\n+is left to the underlying VM implementation. If you need the buffer to be \n+guaranteed, consider using `napi_create_external_arraybuffer`.\n+\n+JavaScript arrays are described in [Section 22.1](https://tc39.github.io/ecma262/#sec-array-objects) \n+of the ECMAScript Language Specification.\n+\n+### *napi_create_arraybuffer*\n+\n+#### Signature\n+```\n+napi_status napi_create_arraybuffer(napi_env env, size_t byte_length, void** data, napi_value* result)\n+```\n+\n+#### Parameters\n+- `[in]  env`: The environment that the API is invoked under\n+- `[in]  length`: The length in bytes of the array buffer to create\n+- `[out] data`: Pointer to the underlying byte buffer of the ArrayBuffer\n+- `[out] result`: A `napi_value` representing a JavaScript ArrayBuffer\n+\n+#### Return value\n+- `napi_ok` if the API succeeded.\n+\n+#### Description\n+This API returns a N-API value corresponding to a JavaScript ArrayBuffer.\n+ArrayBuffers are used to represent fixed-length binary data buffers. \n+The ArrayBuffer allocated will have an underlying byte buffer whose size is determined \n+by the `length` parameter that's passed in. \n+The underlying buffer is optionally returned back to the caller in case the caller\n+wants to directly manipulate the buffer. This buffer can only be written to directly\n+from Native code. To write to this buffer from JavaScript, a typed array or DataView\n+object would need to be created.\n+\n+JavaScript ArrayBuffers are described in [Section 24.1](https://tc39.github.io/ecma262/#sec-arraybuffer-objects) \n+of the ECMAScript Language Specification.\n+\n+### *napi_create_buffer*\n+\n+#### Signature\n+```\n+napi_status napi_create_buffer(napi_env env, size_t size, void** data, napi_value* result)\n+```\n+\n+#### Parameters\n+- `[in]  env`: The environment that the API is invoked under\n+- `[in]  size`: Size in bytes of the underlying buffer\n+- `[out] data`: Raw pointer to the underlying buffer\n+- `[out] result`: A `napi_value` representing a node::Buffer\n+\n+#### Return value\n+- `napi_ok` if the API succeeded.\n+\n+#### Description\n+This API allocates a node::Buffer object. It exists for compat with older Node versions.\n+Consider using typed arrays instead.\n+\n+### *napi_create_buffer_copy*\n+\n+#### Signature\n+```\n+napi_status napi_create_buffer_copy(napi_env env, size_t length, const void* data, void** result_data, napi_value* result)\n+```\n+\n+#### Parameters\n+- `[in]  env`: The environment that the API is invoked under\n+- `[in]  size`: Size in bytes of the input buffer (should be same as size of the new buffer)\n+- `[in]  data`: Raw pointer to the underlying buffer to copy from\n+- `[out] result_data`: Pointer to the new Buffer's underlying data buffer\n+- `[out] result`: A `napi_value` representing a node::Buffer\n+\n+#### Return value\n+- `napi_ok` if the API succeeded.\n+\n+#### Description\n+This API allocates a node::Buffer object, and initializes it with data copied from the \n+passed in buffer. It exists for compat with older Node versions. Consider using typed \n+arrays instead.\n+\n+### *napi_create_external*\n+\n+#### Signature\n+```\n+napi_status napi_create_external(napi_env env, void* data, napi_finalize finalize_cb, void* finalize_hint, napi_value* result)\n+```\n+\n+#### Parameters\n+- `[in]  env`: The environment that the API is invoked under\n+- `[in]  data`: Raw pointer to the external data being wrapped\n+- `[in]  finalize_cb`: Optional callback to call when the wrapped object is being collected\n+- `[in]  finalize_hint`: Optional hint to pass to the finalize callback during collection.\n+- `[out] result`: A `napi_value` representing an external object.\n+\n+#### Return value\n+- `napi_ok` if the API succeeded.\n+\n+#### Description\n+This API allocates a JavaScript object with external data attached to it.\n+This is used to wrap native objects and project them into JavaScript.\n+The API allows the caller to pass in a finalize callback, in case the underlying native\n+resource needs to be cleaned up when the wrapper JavaScript object gets collected.\n+\n+### *napi_create_external_arraybuffer*\n+\n+#### Signature\n+```\n+napi_status\n+napi_create_external_arraybuffer(napi_env env,\n+                                 void* external_data,\n+                                 size_t byte_length,\n+                                 napi_finalize finalize_cb,\n+                                 void* finalize_hint,\n+                                 napi_value* result)\n+```\n+\n+#### Parameters\n+- `[in]  env`: The environment that the API is invoked under\n+- `[in]  external_data`: Pointer to the underlying byte buffer of the ArrayBuffer\n+- `[in]  byte_length`: The length in bytes of the underlying buffer\n+- `[in]  finalize_cb`: Optional callback to call when the ArrayBuffer is being collected\n+- `[in]  finalize_hint`: Optional hint to pass to the finalize callback during collection.\n+- `[out] result`: A `napi_value` representing a JavaScript ArrayBuffer\n+\n+#### Return value\n+- `napi_ok` if the API succeeded.\n+\n+#### Description\n+This API returns a N-API value corresponding to a JavaScript ArrayBuffer.\n+The underlying byte buffer of the ArrayBuffer is externally allocated and managed.\n+The called must ensure that the byte buffer must be valid until the finalize callback is called.\n+\n+JavaScript ArrayBuffers are described in [Section 24.1](https://tc39.github.io/ecma262/#sec-arraybuffer-objects) \n+of the ECMAScript Language Specification.\n+\n+### *napi_create_external_buffer*\n+\n+#### Signature\n+```\n+napi_status napi_create_external_buffer(napi_env env,\n+                                        size_t length,\n+                                        void* data,\n+                                        napi_finalize finalize_cb,\n+                                        void* finalize_hint,\n+                                        napi_value* result)\n+```\n+\n+#### Parameters\n+- `[in]  env`: The environment that the API is invoked under\n+- `[in]  length`: Size in bytes of the input buffer (should be same as size of the new buffer)\n+- `[in]  data`: Raw pointer to the underlying buffer to copy from\n+- `[in]  finalize_cb`: Optional callback to call when the ArrayBuffer is being collected\n+- `[in]  finalize_hint`: Optional hint to pass to the finalize callback during collection.\n+- `[out] result`: A `napi_value` representing a node::Buffer\n+\n+#### Return value\n+- `napi_ok` if the API succeeded.\n+\n+#### Description\n+This API allocates a node::Buffer object, and initializes it with data backed by the \n+passed in buffer. It exists for compat with older Node versions. Consider using typed \n+arrays instead.\n+\n+### *napi_create_function*\n+\n+#### Signature\n+```\n+napi_status napi_create_function(napi_env env,\n+                                 const char* utf8name,\n+                                 napi_callback cb,\n+                                 void* data,\n+                                 napi_value* result)\n+```\n+\n+#### Parameters\n+- `[in]  env`: The environment that the API is invoked under\n+- `[in]  utf8name`: A string representing the name of the function encoded as utf8\n+- `[in]  cb`: A function pointer to the native function to be invoked when the created function is invoked from JavaScript\n+- `[in]  data`: Optional arbitrary context data to be passed in to the callback when the function is invoked\n+- `[out] result`: A `napi_value` representing a JavaScript Function\n+\n+#### Return value\n+- `napi_ok` if the API succeeded.\n+\n+#### Description\n+This API returns a N-API value corresponding to a JavaScript Function object.\n+It's used to wrap native functions so that they can be invoked from JavaScript.\n+\n+JavaScript Functions are described in [Section 19.2](https://tc39.github.io/ecma262/#sec-function-objects) \n+of the ECMAScript Language Specification.\n+\n+### *napi_create_number*\n+\n+#### Signature\n+```\n+napi_status napi_create_number(napi_env env, double value, napi_value* result)\n+```\n+\n+#### Parameters\n+- `[in]  env`: The environment that the API is invoked under\n+- `[in]  value`: Double-precision value to be represented in JavaScript\n+- `[out] result`: A `napi_value` representing a JavaScript Number\n+\n+#### Return value\n+- `napi_ok` if the API succeeded.\n+\n+#### Description\n+This API is used to convert from C++ doubles to JavaScript Number.\n+\n+JavaScript Number type is described in [Section 6.1.6](https://tc39.github.io/ecma262/#sec-ecmascript-language-types-number-type) \n+of the ECMAScript Language Specification.\n+\n+### *napi_create_object*\n+\n+#### Signature\n+```\n+napi_status napi_create_object(napi_env env, napi_value* result)\n+```\n+\n+#### Parameters\n+- `[in]  env`: The environment that the API is invoked under\n+- `[out] result`: A `napi_value` representing a JavaScript Object\n+\n+#### Return value\n+- `napi_ok` if the API succeeded.\n+\n+#### Description\n+This API allocates a default JavaScript Object. \n+It is the equivalent of doing `new Object()` in JavaScript.\n+\n+JavaScript Object type is described in [Section 6.1.7](https://tc39.github.io/ecma262/#sec-object-type) of the ECMAScript Language Specification.\n+\n+### *napi_create_string_utf16*\n+\n+#### Signature\n+```\n+napi_status napi_create_string_utf16(napi_env env, const char16_t* str, size_t length, napi_value* result)\n+```\n+\n+#### Parameters\n+- `[in]  env`: The environment that the API is invoked under\n+- `[in]  str`: Character buffer representing a UTF16-LE encoded string\n+- `[in]  length`: The length of the string in characters, or -1 if it is null-terminated.\n+- `[out] result`: A `napi_value` representing a JavaScript String\n+\n+#### Return value\n+- `napi_ok` if the API succeeded.\n+\n+#### Description\n+This API creates a JavaScript String object from a UTF16-LE encoded C++ string\n+\n+JavaScript String type is described in [Section 6.1.4](https://tc39.github.io/ecma262/#sec-ecmascript-language-types-string-type) of the ECMAScript Language Specification.\n+\n+### *napi_create_string_utf8*\n+\n+#### Signature\n+```\n+napi_status napi_create_string_utf8(napi_env env, const char* str, size_t length, napi_value* result)\n+```\n+\n+#### Parameters\n+- `[in]  env`: The environment that the API is invoked under\n+- `[in]  s`: Character buffer representing a utf8 encoded string\n+- `[in]  length`: The length of the string in characters, or -1 if it is null-terminated.\n+- `[out] result`: A `napi_value` representing a JavaScript String\n+\n+#### Return value\n+- `napi_ok` if the API succeeded.\n+\n+#### Description\n+This API creates a JavaScript String object from a utf8 encoded C++ string\n+\n+JavaScript String type is described in [Section 6.1.4](https://tc39.github.io/ecma262/#sec-ecmascript-language-types-string-type) of the ECMAScript Language Specification.\n+\n+### *napi_create_symbol*\n+\n+#### Signature\n+```\n+napi_status napi_create_string_utf8(napi_env env, const char* description, napi_value* result)\n+```\n+\n+#### Parameters\n+- `[in]  env`: The environment that the API is invoked under\n+- `[in]  description`: Null-terminated character buffer representing a utf8 encoded string to describe the symbol\n+- `[out] result`: A `napi_value` representing a JavaScript Symbol\n+\n+#### Return value\n+- `napi_ok` if the API succeeded.\n+\n+#### Description\n+This API creates a JavaScript Symbol object from a utf8 encoded C++ string\n+\n+JavaScript Symbol type is described in [Section 19.4](https://tc39.github.io/ecma262/#sec-symbol-objects) \n+of the ECMAScript Language Specification.\n+\n+### *napi_create_typedarray*\n+\n+#### Signature\n+```\n+napi_status napi_create_typedarray(napi_env env,\n+                                   napi_typedarray_type type,\n+                                   size_t length,\n+                                   napi_value arraybuffer,\n+                                   size_t byte_offset,\n+                                   napi_value* result)\n+```\n+\n+#### Parameters\n+- `[in]  env`: The environment that the API is invoked under\n+- `[in]  type`: Scalar datatype of the elements within the TypedArray\n+- `[in]  length`: Number of elements in the TypedArray\n+- `[in]  arraybuffer`: ArrayBuffer underlying the typed array\n+- `[in]  byte_offset`: The byte offset within the ArrayBuffer from which to start projecting the TypedArray\n+- `[out] result`: A `napi_value` representing a JavaScript TypedArray\n+\n+#### Return value\n+- `napi_ok` if the API succeeded.\n+\n+#### Description\n+This API creates a JavaScript TypedArray object over an existing ArrayBuffer.\n+TypedArray objects provide an array-like view over an underlying data buffer \n+where each element has the same underlying binary scalar datatype.\n+\n+It's required that (length * size_of_element) + byte_offset should be <= ArrayBuffer.ArrayBufferByteLength. \n+If not, a RangeError exception is raised.\n+\n+JavaScript TypedArray Objects are described in [Section 22.2](https://tc39.github.io/ecma262/#sec-typedarray-objects) \n+of the ECMAScript Language Specification.\n+\n+### *napi_get_array_length*\n+\n+#### Signature\n+```\n+napi_status napi_get_array_length(napi_env env, napi_value value, uint32_t* result)\n+```\n+\n+#### Parameters\n+- `[in]  env`: The environment that the API is invoked under\n+- `[in]  value`: napi_value representing the JavaScript Array whose length is being queried\n+- `[out] result`: uint32 representing length of the array\n+\n+#### Return value\n+- `napi_ok` if the API succeeded.\n+\n+#### Description\n+This API returns the length of an array.\n+\n+Array length is described in [Section 22.1.4.1](https://tc39.github.io/ecma262/#sec-properties-of-array-instances-length) \n+of the ECMAScript Language Specification.\n+\n+### *napi_get_arraybuffer_info*\n+\n+#### Signature\n+```\n+napi_status napi_get_arraybuffer_info(napi_env env,\n+                                      napi_value arraybuffer,\n+                                      void** data,\n+                                      size_t* byte_length)\n+```\n+\n+#### Parameters\n+- `[in]  env`: The environment that the API is invoked under\n+- `[in]  arraybuffer`: napi_value representing the ArrayBuffer being queried\n+- `[out] data`: The underlying data buffer of the ArrayBuffer\n+- `[out] byte_length`: Length in bytes of the underlying data buffer\n+\n+#### Return value\n+- `napi_ok` if the API succeeded.\n+\n+#### Description\n+This API is used to retrieve the underlying data buffer of an ArrayBuffer and it's length.\n+WARNING: This API is dangerous. The lifetime of the underlying data buffer is managed by the \n+ArrayBuffer even after it's returned to you. The one possible safe to use this API is in conjunction \n+with napi_create_reference, which can be used to guarantee that you control the lifetime of\n+the ArrayBuffer.\n+\n+<TODO: What happens to this buffer in case of a compacting GC?>\n+\n+### *napi_get_boolean*\n+\n+#### Signature\n+```\n+napi_status napi_get_boolean(napi_env env, bool value, napi_value* result)\n+```\n+\n+#### Parameters\n+- `[in]  env`: The environment that the API is invoked under\n+- `[in]  value`: The value of the boolean to retrieve\n+- `[out] result`: `napi_value` representing JavaScript Boolean singleton to retrieve\n+\n+#### Description\n+This API is used to return the JavaScript singleton object that is used to represent the given boolean value\n+\n+#### Return value\n+- `napi_ok` if the API succeeded.\n+\n+### *napi_get_buffer_info*\n+\n+#### Signature\n+```\n+napi_status napi_get_buffer_info(napi_env env,\n+                                 napi_value value,\n+                                 void** data,\n+                                 size_t* length)\n+```\n+\n+#### Parameters\n+- `[in]  env`: The environment that the API is invoked under\n+- `[in]  value`: napi_value representing the node::Buffer being queried\n+- `[out] data`: The underlying data buffer of the node::Buffer\n+- `[out] length`: Length in bytes of the underlying data buffer\n+\n+#### Return value\n+- `napi_ok` if the API succeeded.\n+\n+#### Description\n+This API is used to retrieve the underlying data buffer of an node::Buffer and it's length.\n+\n+### *napi_get_global*\n+\n+#### Signature\n+```\n+napi_status napi_get_global(napi_env env, napi_value* result)\n+```\n+\n+#### Parameters\n+- `[in]  env`: The environment that the API is invoked under\n+- `[out] result`: `napi_value` representing JavaScript Global Object\n+\n+#### Return value\n+- `napi_ok` if the API succeeded.\n+\n+### *napi_get_null*\n+\n+#### Signature\n+```\n+napi_status napi_get_null(napi_env env, napi_value* result)\n+```\n+\n+#### Parameters\n+- `[in]  env`: The environment that the API is invoked under\n+- `[out] result`: `napi_value` representing JavaScript Null Object\n+\n+#### Return value\n+- `napi_ok` if the API succeeded.\n+\n+### *napi_get_prototype*\n+\n+#### Signature\n+```\n+napi_status napi_get_prototype(napi_env env, napi_value object, napi_value* result)\n+```\n+\n+#### Parameters\n+- `[in]  env`: The environment that the API is invoked under\n+- `[in]  object`: `napi_value` representing JavaScript Object whose prototype to return\n+- `[out] result`: `napi_value` representing prototype of the given object\n+\n+#### Return value\n+- `napi_ok` if the API succeeded.\n+\n+### *napi_get_typedarray_info*\n+\n+#### Signature\n+```\n+napi_status napi_get_typedarray_info(napi_env env,\n+                                     napi_value typedarray,\n+                                     napi_typedarray_type* type,\n+                                     size_t* length,\n+                                     void** data,\n+                                     napi_value* arraybuffer,\n+                                     size_t* byte_offset)\n+```\n+\n+#### Parameters\n+- `[in]  env`: The environment that the API is invoked under\n+- `[in]  typedarray`: `napi_value` representing the TypedArray whose properties to query\n+- `[out] type`: Scalar datatype of the elements within the TypedArray\n+- `[out] length`: Number of elements in the TypedArray\n+- `[out] data`: The data buffer underlying the typed array\n+- `[out] byte_offset`: The byte offset within the data buffer from which to start projecting the TypedArray\n+\n+#### Return value\n+- `napi_ok` if the API succeeded.\n+\n+#### Description\n+This API returns various properties of a typed array. \n+Warning: This API is dangerous since the underlying data buffer is managed by the VM","path":"napi_js_data.md","position":586,"original_position":586,"commit_id":"104640d356a9a361ec7c46cd51ea041b7b355ff3","original_commit_id":"104640d356a9a361ec7c46cd51ea041b7b355ff3","user":{"login":"jasongin","id":13093042,"avatar_url":"https://avatars3.githubusercontent.com/u/13093042?v=3","gravatar_id":"","url":"https://api.github.com/users/jasongin","html_url":"https://github.com/jasongin","followers_url":"https://api.github.com/users/jasongin/followers","following_url":"https://api.github.com/users/jasongin/following{/other_user}","gists_url":"https://api.github.com/users/jasongin/gists{/gist_id}","starred_url":"https://api.github.com/users/jasongin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jasongin/subscriptions","organizations_url":"https://api.github.com/users/jasongin/orgs","repos_url":"https://api.github.com/users/jasongin/repos","events_url":"https://api.github.com/users/jasongin/events{/privacy}","received_events_url":"https://api.github.com/users/jasongin/received_events","type":"User","site_admin":false},"body":"I wouldn't say the API itself is \"dangerous\", just that using the returned data buffer requires caution.","created_at":"2017-04-03T18:53:24Z","updated_at":"2017-04-03T18:53:24Z","html_url":"https://github.com/nodejs/abi-stable-node/pull/218#discussion_r109496647","pull_request_url":"https://api.github.com/repos/nodejs/abi-stable-node/pulls/218","_links":{"self":{"href":"https://api.github.com/repos/nodejs/abi-stable-node/pulls/comments/109496647"},"html":{"href":"https://github.com/nodejs/abi-stable-node/pull/218#discussion_r109496647"},"pull_request":{"href":"https://api.github.com/repos/nodejs/abi-stable-node/pulls/218"}}},"pull_request":{"url":"https://api.github.com/repos/nodejs/abi-stable-node/pulls/218","id":113863453,"html_url":"https://github.com/nodejs/abi-stable-node/pull/218","diff_url":"https://github.com/nodejs/abi-stable-node/pull/218.diff","patch_url":"https://github.com/nodejs/abi-stable-node/pull/218.patch","issue_url":"https://api.github.com/repos/nodejs/abi-stable-node/issues/218","number":218,"state":"open","locked":false,"title":"Add N-API doc to create and manipulate JS datatypes","user":{"login":"digitalinfinity","id":158390,"avatar_url":"https://avatars1.githubusercontent.com/u/158390?v=3","gravatar_id":"","url":"https://api.github.com/users/digitalinfinity","html_url":"https://github.com/digitalinfinity","followers_url":"https://api.github.com/users/digitalinfinity/followers","following_url":"https://api.github.com/users/digitalinfinity/following{/other_user}","gists_url":"https://api.github.com/users/digitalinfinity/gists{/gist_id}","starred_url":"https://api.github.com/users/digitalinfinity/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/digitalinfinity/subscriptions","organizations_url":"https://api.github.com/users/digitalinfinity/orgs","repos_url":"https://api.github.com/users/digitalinfinity/repos","events_url":"https://api.github.com/users/digitalinfinity/events{/privacy}","received_events_url":"https://api.github.com/users/digitalinfinity/received_events","type":"User","site_admin":false},"body":"Ref: #153","created_at":"2017-04-03T06:12:47Z","updated_at":"2017-04-03T18:53:24Z","closed_at":null,"merged_at":null,"merge_commit_sha":"63ebaa94a64adf79ebb0ab933cf1db49c1c06db4","assignee":null,"assignees":[],"milestone":null,"commits_url":"https://api.github.com/repos/nodejs/abi-stable-node/pulls/218/commits","review_comments_url":"https://api.github.com/repos/nodejs/abi-stable-node/pulls/218/comments","review_comment_url":"https://api.github.com/repos/nodejs/abi-stable-node/pulls/comments{/number}","comments_url":"https://api.github.com/repos/nodejs/abi-stable-node/issues/218/comments","statuses_url":"https://api.github.com/repos/nodejs/abi-stable-node/statuses/104640d356a9a361ec7c46cd51ea041b7b355ff3","head":{"label":"digitalinfinity:napi_js_data","ref":"napi_js_data","sha":"104640d356a9a361ec7c46cd51ea041b7b355ff3","user":{"login":"digitalinfinity","id":158390,"avatar_url":"https://avatars1.githubusercontent.com/u/158390?v=3","gravatar_id":"","url":"https://api.github.com/users/digitalinfinity","html_url":"https://github.com/digitalinfinity","followers_url":"https://api.github.com/users/digitalinfinity/followers","following_url":"https://api.github.com/users/digitalinfinity/following{/other_user}","gists_url":"https://api.github.com/users/digitalinfinity/gists{/gist_id}","starred_url":"https://api.github.com/users/digitalinfinity/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/digitalinfinity/subscriptions","organizations_url":"https://api.github.com/users/digitalinfinity/orgs","repos_url":"https://api.github.com/users/digitalinfinity/repos","events_url":"https://api.github.com/users/digitalinfinity/events{/privacy}","received_events_url":"https://api.github.com/users/digitalinfinity/received_events","type":"User","site_admin":false},"repo":{"id":74196517,"name":"abi-stable-node","full_name":"digitalinfinity/abi-stable-node","owner":{"login":"digitalinfinity","id":158390,"avatar_url":"https://avatars1.githubusercontent.com/u/158390?v=3","gravatar_id":"","url":"https://api.github.com/users/digitalinfinity","html_url":"https://github.com/digitalinfinity","followers_url":"https://api.github.com/users/digitalinfinity/followers","following_url":"https://api.github.com/users/digitalinfinity/following{/other_user}","gists_url":"https://api.github.com/users/digitalinfinity/gists{/gist_id}","starred_url":"https://api.github.com/users/digitalinfinity/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/digitalinfinity/subscriptions","organizations_url":"https://api.github.com/users/digitalinfinity/orgs","repos_url":"https://api.github.com/users/digitalinfinity/repos","events_url":"https://api.github.com/users/digitalinfinity/events{/privacy}","received_events_url":"https://api.github.com/users/digitalinfinity/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/digitalinfinity/abi-stable-node","description":"Node with PoC ABI stable API for native modules","fork":true,"url":"https://api.github.com/repos/digitalinfinity/abi-stable-node","forks_url":"https://api.github.com/repos/digitalinfinity/abi-stable-node/forks","keys_url":"https://api.github.com/repos/digitalinfinity/abi-stable-node/keys{/key_id}","collaborators_url":"https://api.github.com/repos/digitalinfinity/abi-stable-node/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/digitalinfinity/abi-stable-node/teams","hooks_url":"https://api.github.com/repos/digitalinfinity/abi-stable-node/hooks","issue_events_url":"https://api.github.com/repos/digitalinfinity/abi-stable-node/issues/events{/number}","events_url":"https://api.github.com/repos/digitalinfinity/abi-stable-node/events","assignees_url":"https://api.github.com/repos/digitalinfinity/abi-stable-node/assignees{/user}","branches_url":"https://api.github.com/repos/digitalinfinity/abi-stable-node/branches{/branch}","tags_url":"https://api.github.com/repos/digitalinfinity/abi-stable-node/tags","blobs_url":"https://api.github.com/repos/digitalinfinity/abi-stable-node/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/digitalinfinity/abi-stable-node/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/digitalinfinity/abi-stable-node/git/refs{/sha}","trees_url":"https://api.github.com/repos/digitalinfinity/abi-stable-node/git/trees{/sha}","statuses_url":"https://api.github.com/repos/digitalinfinity/abi-stable-node/statuses/{sha}","languages_url":"https://api.github.com/repos/digitalinfinity/abi-stable-node/languages","stargazers_url":"https://api.github.com/repos/digitalinfinity/abi-stable-node/stargazers","contributors_url":"https://api.github.com/repos/digitalinfinity/abi-stable-node/contributors","subscribers_url":"https://api.github.com/repos/digitalinfinity/abi-stable-node/subscribers","subscription_url":"https://api.github.com/repos/digitalinfinity/abi-stable-node/subscription","commits_url":"https://api.github.com/repos/digitalinfinity/abi-stable-node/commits{/sha}","git_commits_url":"https://api.github.com/repos/digitalinfinity/abi-stable-node/git/commits{/sha}","comments_url":"https://api.github.com/repos/digitalinfinity/abi-stable-node/comments{/number}","issue_comment_url":"https://api.github.com/repos/digitalinfinity/abi-stable-node/issues/comments{/number}","contents_url":"https://api.github.com/repos/digitalinfinity/abi-stable-node/contents/{+path}","compare_url":"https://api.github.com/repos/digitalinfinity/abi-stable-node/compare/{base}...{head}","merges_url":"https://api.github.com/repos/digitalinfinity/abi-stable-node/merges","archive_url":"https://api.github.com/repos/digitalinfinity/abi-stable-node/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/digitalinfinity/abi-stable-node/downloads","issues_url":"https://api.github.com/repos/digitalinfinity/abi-stable-node/issues{/number}","pulls_url":"https://api.github.com/repos/digitalinfinity/abi-stable-node/pulls{/number}","milestones_url":"https://api.github.com/repos/digitalinfinity/abi-stable-node/milestones{/number}","notifications_url":"https://api.github.com/repos/digitalinfinity/abi-stable-node/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/digitalinfinity/abi-stable-node/labels{/name}","releases_url":"https://api.github.com/repos/digitalinfinity/abi-stable-node/releases{/id}","deployments_url":"https://api.github.com/repos/digitalinfinity/abi-stable-node/deployments","created_at":"2016-11-19T08:25:58Z","updated_at":"2016-11-19T08:26:03Z","pushed_at":"2017-04-03T17:39:50Z","git_url":"git://github.com/digitalinfinity/abi-stable-node.git","ssh_url":"git@github.com:digitalinfinity/abi-stable-node.git","clone_url":"https://github.com/digitalinfinity/abi-stable-node.git","svn_url":"https://github.com/digitalinfinity/abi-stable-node","homepage":null,"size":235893,"stargazers_count":0,"watchers_count":0,"language":"JavaScript","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"nodejs:doc","ref":"doc","sha":"cbad51594603c4f413f3cae86ccccc83531f09b1","user":{"login":"nodejs","id":9950313,"avatar_url":"https://avatars0.githubusercontent.com/u/9950313?v=3","gravatar_id":"","url":"https://api.github.com/users/nodejs","html_url":"https://github.com/nodejs","followers_url":"https://api.github.com/users/nodejs/followers","following_url":"https://api.github.com/users/nodejs/following{/other_user}","gists_url":"https://api.github.com/users/nodejs/gists{/gist_id}","starred_url":"https://api.github.com/users/nodejs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nodejs/subscriptions","organizations_url":"https://api.github.com/users/nodejs/orgs","repos_url":"https://api.github.com/users/nodejs/repos","events_url":"https://api.github.com/users/nodejs/events{/privacy}","received_events_url":"https://api.github.com/users/nodejs/received_events","type":"Organization","site_admin":false},"repo":{"id":67543822,"name":"abi-stable-node","full_name":"nodejs/abi-stable-node","owner":{"login":"nodejs","id":9950313,"avatar_url":"https://avatars0.githubusercontent.com/u/9950313?v=3","gravatar_id":"","url":"https://api.github.com/users/nodejs","html_url":"https://github.com/nodejs","followers_url":"https://api.github.com/users/nodejs/followers","following_url":"https://api.github.com/users/nodejs/following{/other_user}","gists_url":"https://api.github.com/users/nodejs/gists{/gist_id}","starred_url":"https://api.github.com/users/nodejs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nodejs/subscriptions","organizations_url":"https://api.github.com/users/nodejs/orgs","repos_url":"https://api.github.com/users/nodejs/repos","events_url":"https://api.github.com/users/nodejs/events{/privacy}","received_events_url":"https://api.github.com/users/nodejs/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/nodejs/abi-stable-node","description":"NAPI — Node with PoC ABI stable API for native modules.","fork":false,"url":"https://api.github.com/repos/nodejs/abi-stable-node","forks_url":"https://api.github.com/repos/nodejs/abi-stable-node/forks","keys_url":"https://api.github.com/repos/nodejs/abi-stable-node/keys{/key_id}","collaborators_url":"https://api.github.com/repos/nodejs/abi-stable-node/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/nodejs/abi-stable-node/teams","hooks_url":"https://api.github.com/repos/nodejs/abi-stable-node/hooks","issue_events_url":"https://api.github.com/repos/nodejs/abi-stable-node/issues/events{/number}","events_url":"https://api.github.com/repos/nodejs/abi-stable-node/events","assignees_url":"https://api.github.com/repos/nodejs/abi-stable-node/assignees{/user}","branches_url":"https://api.github.com/repos/nodejs/abi-stable-node/branches{/branch}","tags_url":"https://api.github.com/repos/nodejs/abi-stable-node/tags","blobs_url":"https://api.github.com/repos/nodejs/abi-stable-node/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/nodejs/abi-stable-node/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/nodejs/abi-stable-node/git/refs{/sha}","trees_url":"https://api.github.com/repos/nodejs/abi-stable-node/git/trees{/sha}","statuses_url":"https://api.github.com/repos/nodejs/abi-stable-node/statuses/{sha}","languages_url":"https://api.github.com/repos/nodejs/abi-stable-node/languages","stargazers_url":"https://api.github.com/repos/nodejs/abi-stable-node/stargazers","contributors_url":"https://api.github.com/repos/nodejs/abi-stable-node/contributors","subscribers_url":"https://api.github.com/repos/nodejs/abi-stable-node/subscribers","subscription_url":"https://api.github.com/repos/nodejs/abi-stable-node/subscription","commits_url":"https://api.github.com/repos/nodejs/abi-stable-node/commits{/sha}","git_commits_url":"https://api.github.com/repos/nodejs/abi-stable-node/git/commits{/sha}","comments_url":"https://api.github.com/repos/nodejs/abi-stable-node/comments{/number}","issue_comment_url":"https://api.github.com/repos/nodejs/abi-stable-node/issues/comments{/number}","contents_url":"https://api.github.com/repos/nodejs/abi-stable-node/contents/{+path}","compare_url":"https://api.github.com/repos/nodejs/abi-stable-node/compare/{base}...{head}","merges_url":"https://api.github.com/repos/nodejs/abi-stable-node/merges","archive_url":"https://api.github.com/repos/nodejs/abi-stable-node/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/nodejs/abi-stable-node/downloads","issues_url":"https://api.github.com/repos/nodejs/abi-stable-node/issues{/number}","pulls_url":"https://api.github.com/repos/nodejs/abi-stable-node/pulls{/number}","milestones_url":"https://api.github.com/repos/nodejs/abi-stable-node/milestones{/number}","notifications_url":"https://api.github.com/repos/nodejs/abi-stable-node/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/nodejs/abi-stable-node/labels{/name}","releases_url":"https://api.github.com/repos/nodejs/abi-stable-node/releases{/id}","deployments_url":"https://api.github.com/repos/nodejs/abi-stable-node/deployments","created_at":"2016-09-06T20:23:47Z","updated_at":"2017-03-31T18:17:49Z","pushed_at":"2017-04-03T17:39:51Z","git_url":"git://github.com/nodejs/abi-stable-node.git","ssh_url":"git@github.com:nodejs/abi-stable-node.git","clone_url":"https://github.com/nodejs/abi-stable-node.git","svn_url":"https://github.com/nodejs/abi-stable-node","homepage":"","size":238980,"stargazers_count":47,"watchers_count":47,"language":"JavaScript","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":11,"mirror_url":null,"open_issues_count":47,"forks":11,"open_issues":47,"watchers":47,"default_branch":"doc"}},"_links":{"self":{"href":"https://api.github.com/repos/nodejs/abi-stable-node/pulls/218"},"html":{"href":"https://github.com/nodejs/abi-stable-node/pull/218"},"issue":{"href":"https://api.github.com/repos/nodejs/abi-stable-node/issues/218"},"comments":{"href":"https://api.github.com/repos/nodejs/abi-stable-node/issues/218/comments"},"review_comments":{"href":"https://api.github.com/repos/nodejs/abi-stable-node/pulls/218/comments"},"review_comment":{"href":"https://api.github.com/repos/nodejs/abi-stable-node/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/nodejs/abi-stable-node/pulls/218/commits"},"statuses":{"href":"https://api.github.com/repos/nodejs/abi-stable-node/statuses/104640d356a9a361ec7c46cd51ea041b7b355ff3"}}}}
{"actor":{"display_login":"jasongin"}}