WIP: feat(node_api): Add missing functions #7
108
CONTRIBUTING.md
Normal file
108
CONTRIBUTING.md
Normal file
@ -0,0 +1,108 @@
|
|||||||
|
# Contributing
|
||||||
|
|
||||||
|
## TODO
|
||||||
|
|
||||||
|
### Unstable APIs
|
||||||
|
|
||||||
|
```go
|
||||||
|
// filename: node_api.go
|
||||||
|
|
||||||
|
package napi
|
||||||
|
|
||||||
|
func BasicFinalize(env Env, finalizeData, finalizeHint unsafe.Pointer) Status {
|
||||||
|
return Status(C.node_api_basic_finalize(
|
||||||
|
C.napi_env(env),
|
||||||
|
finalizeData,
|
||||||
|
finalizeHint,
|
||||||
|
))
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
func BasicEnv(env Env) Status {
|
||||||
|
return Status(C.node_api_basic_env(C.napi_env(env)))
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
func PostFinalizer(env Env, finalizeData, finalizeHint unsafe.Pointer) Status {
|
||||||
|
return Status(C.node_api_post_finalizer(
|
||||||
|
C.napi_env(env),
|
||||||
|
finalizeData,
|
||||||
|
finalizeHint,
|
||||||
|
))
|
||||||
|
}
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
### Fix the following functions
|
||||||
|
|
||||||
|
```go
|
||||||
|
// filename: node_api.go
|
||||||
|
|
||||||
|
package napi
|
||||||
|
|
||||||
|
/*
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <node/napi_api.h>
|
||||||
|
*/
|
||||||
|
import "C"
|
||||||
|
import "unsafe"
|
||||||
|
|
||||||
|
// OpenCallbackScope Function to open a callback scope
|
||||||
|
func OpenCallbackScope(env Env, resourceObject, context Value) (CallbackScope, Status) {
|
||||||
|
var scope CallbackScope
|
||||||
|
status := Status(C.napi_open_callback_scope(
|
||||||
|
C.napi_env(env),
|
||||||
|
C.napi_value(resourceObject),
|
||||||
|
C.napi_value(context),
|
||||||
|
(*C.napi_callback_scope)(unsafe.Pointer(&scope.scope)),
|
||||||
|
))
|
||||||
|
return scope, status
|
||||||
|
}
|
||||||
|
|
||||||
|
func CreateExternalStringLatin1(env Env, str string, finalize Finalize, finalizeHint unsafe.Pointer) (Value, Status) {
|
||||||
|
cstr := C.CString(str)
|
||||||
|
defer C.free(unsafe.Pointer(cstr))
|
||||||
|
|
||||||
|
finalizer := FinalizeToFinalizer(finalize)
|
||||||
|
var result Value
|
||||||
|
status := Status(C.node_api_create_external_string_latin1(
|
||||||
|
C.napi_env(env),
|
||||||
|
cstr,
|
||||||
|
C.size_t(len([]byte(str))),
|
||||||
|
C.napi_finalize(unsafe.Pointer(&finalizer)),
|
||||||
|
finalizeHint,
|
||||||
|
(*C.napi_value)(unsafe.Pointer(&result)),
|
||||||
|
))
|
||||||
|
return result, status
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
func CreateExternalStringUtf16(env Env, str []uint16, finalize Finalize, finalizeHint unsafe.Pointer) (Value, Status) {
|
||||||
|
var result Value
|
||||||
|
finalizer := FinalizeToFinalizer(finalize)
|
||||||
|
status := Status(C.node_api_create_external_string_utf16(
|
||||||
|
C.napi_env(env),
|
||||||
|
(*C.char16_t)(unsafe.Pointer(&str[0])),
|
||||||
|
C.size_t(len(str)),
|
||||||
|
C.napi_finalize(unsafe.Pointer(&finalizer)),
|
||||||
|
finalizeHint,
|
||||||
|
(*C.napi_value)(unsafe.Pointer(&result)),
|
||||||
|
))
|
||||||
|
return result, status
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
func CreateBufferFromArrayBuffer(env Env, arrayBuffer Value, byteOffset, length int) (Value, *byte, Status) {
|
||||||
|
var result Value
|
||||||
|
var data *byte
|
||||||
|
status := Status(C.node_api_create_buffer_from_arraybuffer(
|
||||||
|
C.napi_env(env),
|
||||||
|
C.napi_value(arrayBuffer),
|
||||||
|
C.size_t(byteOffset),
|
||||||
|
C.size_t(length),
|
||||||
|
unsafe.Pointer(&data),
|
||||||
|
(*C.napi_value)(unsafe.Pointer(&result)),
|
||||||
|
))
|
||||||
|
return result, data, status
|
||||||
|
}
|
||||||
|
```
|
114
js_native_api.go
114
js_native_api.go
@ -340,13 +340,15 @@ func GetInstanceData(env Env) (any, Status) {
|
|||||||
return provider.GetUserData(), status
|
return provider.GetUserData(), status
|
||||||
}
|
}
|
||||||
|
|
||||||
func CreateBuffer(env Env, length int) (Value, *byte, Status) {
|
func CreateBuffer(env Env, length int) (Value, []byte, Status) {
|
||||||
var result Value
|
var result Value
|
||||||
var data *byte
|
data := make([]byte, length)
|
||||||
|
dataPtr := unsafe.Pointer(&data[0])
|
||||||
|
|
||||||
status := Status(C.napi_create_buffer(
|
status := Status(C.napi_create_buffer(
|
||||||
C.napi_env(env),
|
C.napi_env(env),
|
||||||
C.size_t(length),
|
C.size_t(length),
|
||||||
(**C.void)(unsafe.Pointer(&data)),
|
&dataPtr,
|
||||||
(*C.napi_value)(unsafe.Pointer(&result)),
|
(*C.napi_value)(unsafe.Pointer(&result)),
|
||||||
))
|
))
|
||||||
return result, data, status
|
return result, data, status
|
||||||
@ -354,10 +356,11 @@ func CreateBuffer(env Env, length int) (Value, *byte, Status) {
|
|||||||
|
|
||||||
func CreateExternal(env Env, data unsafe.Pointer, finalize Finalize, finalizeHint unsafe.Pointer) (Value, Status) {
|
func CreateExternal(env Env, data unsafe.Pointer, finalize Finalize, finalizeHint unsafe.Pointer) (Value, Status) {
|
||||||
var result Value
|
var result Value
|
||||||
|
finalizer := FinalizeToFinalizer(finalize)
|
||||||
status := Status(C.napi_create_external(
|
status := Status(C.napi_create_external(
|
||||||
C.napi_env(env),
|
C.napi_env(env),
|
||||||
data,
|
data,
|
||||||
C.napi_finalize(finalize),
|
C.napi_finalize(unsafe.Pointer(&finalizer)),
|
||||||
finalizeHint,
|
finalizeHint,
|
||||||
(*C.napi_value)(unsafe.Pointer(&result)),
|
(*C.napi_value)(unsafe.Pointer(&result)),
|
||||||
))
|
))
|
||||||
@ -365,13 +368,13 @@ func CreateExternal(env Env, data unsafe.Pointer, finalize Finalize, finalizeHin
|
|||||||
}
|
}
|
||||||
|
|
||||||
func GetValueInt32(env Env, value Value) (int32, Status) {
|
func GetValueInt32(env Env, value Value) (int32, Status) {
|
||||||
var result int32
|
var result C.int32_t
|
||||||
status := Status(C.napi_get_value_int32(
|
status := Status(C.napi_get_value_int32(
|
||||||
C.napi_env(env),
|
C.napi_env(env),
|
||||||
C.napi_value(value),
|
C.napi_value(value),
|
||||||
(*C.int32_t)(unsafe.Pointer(&result)),
|
&result,
|
||||||
))
|
))
|
||||||
return result, status
|
return int32(result), status
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetValueUint32(env Env, value Value) (uint32, Status) {
|
func GetValueUint32(env Env, value Value) (uint32, Status) {
|
||||||
@ -469,11 +472,12 @@ func CoerceToString(env Env, value Value) (Value, Status) {
|
|||||||
func CreateBufferCopy(env Env, data []byte) (Value, *byte, Status) {
|
func CreateBufferCopy(env Env, data []byte) (Value, *byte, Status) {
|
||||||
var result Value
|
var result Value
|
||||||
var copiedData *byte
|
var copiedData *byte
|
||||||
|
copiedDataPtr := unsafe.Pointer(&copiedData)
|
||||||
status := Status(C.napi_create_buffer_copy(
|
status := Status(C.napi_create_buffer_copy(
|
||||||
C.napi_env(env),
|
C.napi_env(env),
|
||||||
C.size_t(len(data)),
|
C.size_t(len(data)),
|
||||||
unsafe.Pointer(&data[0]),
|
unsafe.Pointer(&data[0]),
|
||||||
(**C.void)(unsafe.Pointer(&copiedData)),
|
&copiedDataPtr,
|
||||||
(*C.napi_value)(unsafe.Pointer(&result)),
|
(*C.napi_value)(unsafe.Pointer(&result)),
|
||||||
))
|
))
|
||||||
return result, copiedData, status
|
return result, copiedData, status
|
||||||
@ -482,10 +486,13 @@ func CreateBufferCopy(env Env, data []byte) (Value, *byte, Status) {
|
|||||||
func GetBufferInfo(env Env, value Value) (*byte, int, Status) {
|
func GetBufferInfo(env Env, value Value) (*byte, int, Status) {
|
||||||
var data *byte
|
var data *byte
|
||||||
var length C.size_t
|
var length C.size_t
|
||||||
|
|
||||||
|
dataPtr := unsafe.Pointer(&data)
|
||||||
|
|
||||||
status := Status(C.napi_get_buffer_info(
|
status := Status(C.napi_get_buffer_info(
|
||||||
C.napi_env(env),
|
C.napi_env(env),
|
||||||
C.napi_value(value),
|
C.napi_value(value),
|
||||||
(**C.void)(unsafe.Pointer(&data)),
|
&dataPtr,
|
||||||
&length,
|
&length,
|
||||||
))
|
))
|
||||||
return data, int(length), status
|
return data, int(length), status
|
||||||
@ -572,18 +579,24 @@ func IsTypedArray(env Env, value Value) (bool, Status) {
|
|||||||
return result, status
|
return result, status
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetTypedArrayInfo(env Env, value Value) (TypedArrayType, int, *byte, Status) {
|
func GetTypedArrayInfo(env Env, value Value) (TypedArrayType, int, *byte, Value, int, Status) {
|
||||||
var type_ TypedArrayType
|
var type_ TypedArrayType
|
||||||
var length C.size_t
|
var length C.size_t
|
||||||
var data *byte
|
var data *byte
|
||||||
|
var arrayBuffer Value
|
||||||
|
var byteOffset C.size_t
|
||||||
|
|
||||||
|
dataPtr := unsafe.Pointer(&data)
|
||||||
status := Status(C.napi_get_typedarray_info(
|
status := Status(C.napi_get_typedarray_info(
|
||||||
C.napi_env(env),
|
C.napi_env(env),
|
||||||
C.napi_value(value),
|
C.napi_value(value),
|
||||||
(*C.napi_typedarray_type)(unsafe.Pointer(&type_)),
|
(*C.napi_typedarray_type)(unsafe.Pointer(&type_)),
|
||||||
&length,
|
&length,
|
||||||
(**C.void)(unsafe.Pointer(&data)),
|
&dataPtr,
|
||||||
|
(*C.napi_value)(unsafe.Pointer(&arrayBuffer)),
|
||||||
|
&byteOffset,
|
||||||
))
|
))
|
||||||
return type_, int(length), data, status
|
return type_, int(length), data, arrayBuffer, int(byteOffset), status
|
||||||
}
|
}
|
||||||
|
|
||||||
func CreateTypedArray(env Env, type_ TypedArrayType, length int, arrayBuffer Value, byteOffset int) (Value, Status) {
|
func CreateTypedArray(env Env, type_ TypedArrayType, length int, arrayBuffer Value, byteOffset int) (Value, Status) {
|
||||||
@ -621,23 +634,32 @@ func CreateDataView(env Env, length int, arrayBuffer Value, byteOffset int) (Val
|
|||||||
return result, status
|
return result, status
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetDataViewInfo(env Env, value Value) (int, *byte, Status) {
|
func GetDataViewInfo(env Env, value Value) (int, *byte, Value, int, Status) {
|
||||||
var length C.size_t
|
var length C.size_t
|
||||||
var data *byte
|
var data *byte
|
||||||
|
var arrayBuffer Value
|
||||||
|
var byteOffset C.size_t
|
||||||
|
|
||||||
|
dataPtr := unsafe.Pointer(&data)
|
||||||
status := Status(C.napi_get_dataview_info(
|
status := Status(C.napi_get_dataview_info(
|
||||||
C.napi_env(env),
|
C.napi_env(env),
|
||||||
C.napi_value(value),
|
C.napi_value(value),
|
||||||
&length,
|
&length,
|
||||||
(**C.void)(unsafe.Pointer(&data)),
|
&dataPtr,
|
||||||
|
(*C.napi_value)(unsafe.Pointer(&arrayBuffer)),
|
||||||
|
&byteOffset,
|
||||||
))
|
))
|
||||||
return int(length), data, status
|
return int(length), data, arrayBuffer, int(byteOffset), status
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetAllPropertyNames(env Env, object Value) (Value, Status) {
|
func GetAllPropertyNames(env Env, object Value, keyMode KeyCollectionMode, keyFilter KeyFilter, keyConversion KeyConversion) (Value, Status) {
|
||||||
var result Value
|
var result Value
|
||||||
status := Status(C.napi_get_all_property_names(
|
status := Status(C.napi_get_all_property_names(
|
||||||
C.napi_env(env),
|
C.napi_env(env),
|
||||||
C.napi_value(object),
|
C.napi_value(object),
|
||||||
|
C.napi_key_collection_mode(keyMode),
|
||||||
|
C.napi_key_filter(keyFilter),
|
||||||
|
C.napi_key_conversion(keyConversion),
|
||||||
(*C.napi_value)(unsafe.Pointer(&result)),
|
(*C.napi_value)(unsafe.Pointer(&result)),
|
||||||
))
|
))
|
||||||
return result, status
|
return result, status
|
||||||
@ -684,15 +706,18 @@ func DefineProperties(env Env, object Value, properties []PropertyDescriptor) St
|
|||||||
))
|
))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Wrap function to use the Finalizer type internally
|
||||||
func Wrap(env Env, jsObject Value, nativeObject unsafe.Pointer, finalize Finalize, finalizeHint unsafe.Pointer) Status {
|
func Wrap(env Env, jsObject Value, nativeObject unsafe.Pointer, finalize Finalize, finalizeHint unsafe.Pointer) Status {
|
||||||
return Status(C.napi_wrap(
|
var result Reference
|
||||||
|
status := Status(C.napi_wrap(
|
||||||
C.napi_env(env),
|
C.napi_env(env),
|
||||||
C.napi_value(jsObject),
|
C.napi_value(jsObject),
|
||||||
nativeObject,
|
nativeObject,
|
||||||
C.napi_finalize(finalize),
|
C.napi_finalize(unsafe.Pointer(&finalize)),
|
||||||
finalizeHint,
|
finalizeHint,
|
||||||
(*C.napi_value)(unsafe.Pointer(&jsObject)),
|
(*C.napi_ref)(unsafe.Pointer(&result)),
|
||||||
))
|
))
|
||||||
|
return status
|
||||||
}
|
}
|
||||||
|
|
||||||
func Unwrap(env Env, jsObject Value) (unsafe.Pointer, Status) {
|
func Unwrap(env Env, jsObject Value) (unsafe.Pointer, Status) {
|
||||||
@ -706,9 +731,11 @@ func Unwrap(env Env, jsObject Value) (unsafe.Pointer, Status) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func RemoveWrap(env Env, jsObject Value) Status {
|
func RemoveWrap(env Env, jsObject Value) Status {
|
||||||
|
var result unsafe.Pointer
|
||||||
return Status(C.napi_remove_wrap(
|
return Status(C.napi_remove_wrap(
|
||||||
C.napi_env(env),
|
C.napi_env(env),
|
||||||
C.napi_value(jsObject),
|
C.napi_value(jsObject),
|
||||||
|
&result,
|
||||||
))
|
))
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -724,7 +751,7 @@ func OpenHandleScope(env Env) (HandleScope, Status) {
|
|||||||
func CloseHandleScope(env Env, scope HandleScope) Status {
|
func CloseHandleScope(env Env, scope HandleScope) Status {
|
||||||
return Status(C.napi_close_handle_scope(
|
return Status(C.napi_close_handle_scope(
|
||||||
C.napi_env(env),
|
C.napi_env(env),
|
||||||
C.napi_handle_scope(scope),
|
C.napi_handle_scope(unsafe.Pointer(&scope)),
|
||||||
))
|
))
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -740,7 +767,7 @@ func OpenEscapableHandleScope(env Env) (EscapableHandleScope, Status) {
|
|||||||
func CloseEscapableHandleScope(env Env, scope EscapableHandleScope) Status {
|
func CloseEscapableHandleScope(env Env, scope EscapableHandleScope) Status {
|
||||||
return Status(C.napi_close_escapable_handle_scope(
|
return Status(C.napi_close_escapable_handle_scope(
|
||||||
C.napi_env(env),
|
C.napi_env(env),
|
||||||
C.napi_escapable_handle_scope(scope),
|
C.napi_escapable_handle_scope(unsafe.Pointer(&scope)),
|
||||||
))
|
))
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -748,7 +775,7 @@ func EscapeHandle(env Env, scope EscapableHandleScope, escapee Value) (Value, St
|
|||||||
var result Value
|
var result Value
|
||||||
status := Status(C.napi_escape_handle(
|
status := Status(C.napi_escape_handle(
|
||||||
C.napi_env(env),
|
C.napi_env(env),
|
||||||
C.napi_escapable_handle_scope(scope),
|
C.napi_escapable_handle_scope(unsafe.Pointer(&scope)),
|
||||||
C.napi_value(escapee),
|
C.napi_value(escapee),
|
||||||
(*C.napi_value)(unsafe.Pointer(&result)),
|
(*C.napi_value)(unsafe.Pointer(&result)),
|
||||||
))
|
))
|
||||||
@ -769,7 +796,7 @@ func CreateReference(env Env, value Value, initialRefcount int) (Reference, Stat
|
|||||||
func DeleteReference(env Env, ref Reference) Status {
|
func DeleteReference(env Env, ref Reference) Status {
|
||||||
return Status(C.napi_delete_reference(
|
return Status(C.napi_delete_reference(
|
||||||
C.napi_env(env),
|
C.napi_env(env),
|
||||||
C.napi_ref(ref),
|
C.napi_ref(unsafe.Pointer(&ref)),
|
||||||
))
|
))
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -777,7 +804,7 @@ func ReferenceRef(env Env, ref Reference) (int, Status) {
|
|||||||
var result C.uint32_t
|
var result C.uint32_t
|
||||||
status := Status(C.napi_reference_ref(
|
status := Status(C.napi_reference_ref(
|
||||||
C.napi_env(env),
|
C.napi_env(env),
|
||||||
C.napi_ref(ref),
|
C.napi_ref(unsafe.Pointer(&ref)),
|
||||||
&result,
|
&result,
|
||||||
))
|
))
|
||||||
return int(result), status
|
return int(result), status
|
||||||
@ -787,7 +814,7 @@ func ReferenceUnref(env Env, ref Reference) (int, Status) {
|
|||||||
var result C.uint32_t
|
var result C.uint32_t
|
||||||
status := Status(C.napi_reference_unref(
|
status := Status(C.napi_reference_unref(
|
||||||
C.napi_env(env),
|
C.napi_env(env),
|
||||||
C.napi_ref(ref),
|
C.napi_ref(ref.Ref),
|
||||||
&result,
|
&result,
|
||||||
))
|
))
|
||||||
return int(result), status
|
return int(result), status
|
||||||
@ -797,7 +824,7 @@ func GetReferenceValue(env Env, ref Reference) (Value, Status) {
|
|||||||
var result Value
|
var result Value
|
||||||
status := Status(C.napi_get_reference_value(
|
status := Status(C.napi_get_reference_value(
|
||||||
C.napi_env(env),
|
C.napi_env(env),
|
||||||
C.napi_ref(ref),
|
C.napi_ref(unsafe.Pointer(&ref)),
|
||||||
(*C.napi_value)(unsafe.Pointer(&result)),
|
(*C.napi_value)(unsafe.Pointer(&result)),
|
||||||
))
|
))
|
||||||
return result, status
|
return result, status
|
||||||
@ -877,10 +904,11 @@ func DetachArrayBuffer(env Env, value Value) Status {
|
|||||||
func CreateArrayBuffer(env Env, length int) (Value, *byte, Status) {
|
func CreateArrayBuffer(env Env, length int) (Value, *byte, Status) {
|
||||||
var result Value
|
var result Value
|
||||||
var data *byte
|
var data *byte
|
||||||
|
dataPtr := unsafe.Pointer(&data)
|
||||||
status := Status(C.napi_create_arraybuffer(
|
status := Status(C.napi_create_arraybuffer(
|
||||||
C.napi_env(env),
|
C.napi_env(env),
|
||||||
C.size_t(length),
|
C.size_t(length),
|
||||||
(**C.void)(unsafe.Pointer(&data)),
|
&dataPtr,
|
||||||
(*C.napi_value)(unsafe.Pointer(&result)),
|
(*C.napi_value)(unsafe.Pointer(&result)),
|
||||||
))
|
))
|
||||||
return result, data, status
|
return result, data, status
|
||||||
@ -889,10 +917,11 @@ func CreateArrayBuffer(env Env, length int) (Value, *byte, Status) {
|
|||||||
func GetArrayBufferInfo(env Env, value Value) (*byte, int, Status) {
|
func GetArrayBufferInfo(env Env, value Value) (*byte, int, Status) {
|
||||||
var data *byte
|
var data *byte
|
||||||
var length C.size_t
|
var length C.size_t
|
||||||
|
dataPtr := unsafe.Pointer(&data)
|
||||||
status := Status(C.napi_get_arraybuffer_info(
|
status := Status(C.napi_get_arraybuffer_info(
|
||||||
C.napi_env(env),
|
C.napi_env(env),
|
||||||
C.napi_value(value),
|
C.napi_value(value),
|
||||||
(**C.void)(unsafe.Pointer(&data)),
|
&dataPtr,
|
||||||
&length,
|
&length,
|
||||||
))
|
))
|
||||||
return data, int(length), status
|
return data, int(length), status
|
||||||
@ -900,11 +929,12 @@ func GetArrayBufferInfo(env Env, value Value) (*byte, int, Status) {
|
|||||||
|
|
||||||
func CreateExternalArrayBuffer(env Env, data unsafe.Pointer, length int, finalize Finalize, finalizeHint unsafe.Pointer) (Value, Status) {
|
func CreateExternalArrayBuffer(env Env, data unsafe.Pointer, length int, finalize Finalize, finalizeHint unsafe.Pointer) (Value, Status) {
|
||||||
var result Value
|
var result Value
|
||||||
|
finalizer := FinalizeToFinalizer(finalize)
|
||||||
status := Status(C.napi_create_external_arraybuffer(
|
status := Status(C.napi_create_external_arraybuffer(
|
||||||
C.napi_env(env),
|
C.napi_env(env),
|
||||||
data,
|
data,
|
||||||
C.size_t(length),
|
C.size_t(length),
|
||||||
C.napi_finalize(finalize),
|
C.napi_finalize(unsafe.Pointer(&finalizer)),
|
||||||
finalizeHint,
|
finalizeHint,
|
||||||
(*C.napi_value)(unsafe.Pointer(&result)),
|
(*C.napi_value)(unsafe.Pointer(&result)),
|
||||||
))
|
))
|
||||||
@ -933,12 +963,15 @@ func GetProperty(env Env, object, key Value) (Value, Status) {
|
|||||||
return result, status
|
return result, status
|
||||||
}
|
}
|
||||||
|
|
||||||
func DeleteProperty(env Env, object, key Value) Status {
|
func DeleteProperty(env Env, object, key Value) (bool, Status) {
|
||||||
return Status(C.napi_delete_property(
|
var result bool
|
||||||
|
status := Status(C.napi_delete_property(
|
||||||
C.napi_env(env),
|
C.napi_env(env),
|
||||||
C.napi_value(object),
|
C.napi_value(object),
|
||||||
C.napi_value(key),
|
C.napi_value(key),
|
||||||
|
(*C.bool)(unsafe.Pointer(&result)),
|
||||||
))
|
))
|
||||||
|
return result, status
|
||||||
}
|
}
|
||||||
|
|
||||||
func SetNamedProperty(env Env, object Value, name string, value Value) Status {
|
func SetNamedProperty(env Env, object Value, name string, value Value) Status {
|
||||||
@ -989,12 +1022,15 @@ func HasElement(env Env, object Value, index int) (bool, Status) {
|
|||||||
return result, status
|
return result, status
|
||||||
}
|
}
|
||||||
|
|
||||||
func DeleteElement(env Env, object Value, index int) Status {
|
func DeleteElement(env Env, object Value, index int) (bool, Status) {
|
||||||
return Status(C.napi_delete_element(
|
var result bool
|
||||||
|
status := Status(C.napi_delete_element(
|
||||||
C.napi_env(env),
|
C.napi_env(env),
|
||||||
C.napi_value(object),
|
C.napi_value(object),
|
||||||
C.uint32_t(index),
|
C.uint32_t(index),
|
||||||
|
(*C.bool)(unsafe.Pointer(&result)),
|
||||||
))
|
))
|
||||||
|
return result, status
|
||||||
}
|
}
|
||||||
|
|
||||||
func ObjectFreeze(env Env, object Value) Status {
|
func ObjectFreeze(env Env, object Value) Status {
|
||||||
@ -1079,18 +1115,6 @@ type CallbackScope struct {
|
|||||||
scope C.napi_callback_scope
|
scope C.napi_callback_scope
|
||||||
}
|
}
|
||||||
|
|
||||||
// OpenCallbackScope Function to open a callback scope
|
|
||||||
func OpenCallbackScope(env Env, resourceObject, context Value) (CallbackScope, Status) {
|
|
||||||
var scope CallbackScope
|
|
||||||
status := Status(C.napi_open_callback_scope(
|
|
||||||
C.napi_env(env),
|
|
||||||
C.napi_value(resourceObject),
|
|
||||||
C.napi_value(context),
|
|
||||||
(*C.napi_callback_scope)(unsafe.Pointer(&scope.scope)),
|
|
||||||
))
|
|
||||||
return scope, status
|
|
||||||
}
|
|
||||||
|
|
||||||
// CloseCallbackScope Function to close a callback scope
|
// CloseCallbackScope Function to close a callback scope
|
||||||
func CloseCallbackScope(env Env, scope CallbackScope) Status {
|
func CloseCallbackScope(env Env, scope CallbackScope) Status {
|
||||||
return Status(C.napi_close_callback_scope(
|
return Status(C.napi_close_callback_scope(
|
||||||
|
34
key_type.go
Normal file
34
key_type.go
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
package napi
|
||||||
|
|
||||||
|
/*
|
||||||
|
#include <node/node_api.h>
|
||||||
|
*/
|
||||||
|
import "C"
|
||||||
|
|
||||||
|
// KeyCollectionMode type
|
||||||
|
type KeyCollectionMode C.napi_key_collection_mode
|
||||||
|
|
||||||
|
const (
|
||||||
|
KeyIncludePrototypes KeyCollectionMode = C.napi_key_include_prototypes
|
||||||
|
KeyOwnOnly KeyCollectionMode = C.napi_key_own_only
|
||||||
|
)
|
||||||
|
|
||||||
|
// KeyFilter type
|
||||||
|
type KeyFilter C.napi_key_filter
|
||||||
|
|
||||||
|
const (
|
||||||
|
KeyAllProperties KeyFilter = C.napi_key_all_properties
|
||||||
|
KeyWritable KeyFilter = C.napi_key_writable
|
||||||
|
KeyEnumerable KeyFilter = C.napi_key_enumerable
|
||||||
|
KeyConfigurable KeyFilter = C.napi_key_configurable
|
||||||
|
KeySkipStrings KeyFilter = C.napi_key_skip_strings
|
||||||
|
KeySkipSymbols KeyFilter = C.napi_key_skip_symbols
|
||||||
|
)
|
||||||
|
|
||||||
|
// KeyConversion type
|
||||||
|
type KeyConversion C.napi_key_conversion
|
||||||
|
|
||||||
|
const (
|
||||||
|
KeyKeepNumbers KeyConversion = C.napi_key_keep_numbers
|
||||||
|
KeyNumbersToStrings KeyConversion = C.napi_key_numbers_to_strings
|
||||||
|
)
|
68
node_api.go
68
node_api.go
@ -164,18 +164,6 @@ func UnrefThreadsafeFunction(env Env, fn ThreadsafeFunction) Status {
|
|||||||
))
|
))
|
||||||
}
|
}
|
||||||
|
|
||||||
func BasicEnv(env Env) Status {
|
|
||||||
return Status(C.node_api_basic_env(C.napi_env(env)))
|
|
||||||
}
|
|
||||||
|
|
||||||
func BasicFinalize(env Env, finalizeData, finalizeHint unsafe.Pointer) Status {
|
|
||||||
return Status(C.node_api_basic_finalize(
|
|
||||||
C.napi_env(env),
|
|
||||||
finalizeData,
|
|
||||||
finalizeHint,
|
|
||||||
))
|
|
||||||
}
|
|
||||||
|
|
||||||
func ThrowSyntaxError(env Env, code, msg string) Status {
|
func ThrowSyntaxError(env Env, code, msg string) Status {
|
||||||
codeCStr, msgCStr := C.CString(code), C.CString(msg)
|
codeCStr, msgCStr := C.CString(code), C.CString(msg)
|
||||||
defer C.free(unsafe.Pointer(codeCStr))
|
defer C.free(unsafe.Pointer(codeCStr))
|
||||||
@ -199,54 +187,12 @@ func CreateSyntaxError(env Env, code, msg Value) (Value, Status) {
|
|||||||
return result, status
|
return result, status
|
||||||
}
|
}
|
||||||
|
|
||||||
func SymbolFor(env Env, description Value) (Value, Status) {
|
func SymbolFor(env Env, description string) (Value, Status) {
|
||||||
var result Value
|
var result Value
|
||||||
status := Status(C.node_api_symbol_for(
|
status := Status(C.node_api_symbol_for(
|
||||||
C.napi_env(env),
|
C.napi_env(env),
|
||||||
C.napi_value(description),
|
C.CString(description),
|
||||||
(*C.napi_value)(unsafe.Pointer(&result)),
|
C.size_t(len(description)),
|
||||||
))
|
|
||||||
return result, status
|
|
||||||
}
|
|
||||||
|
|
||||||
func CreateBufferFromArrayBuffer(env Env, arrayBuffer Value, byteOffset, length int) (Value, *byte, Status) {
|
|
||||||
var result Value
|
|
||||||
var data *byte
|
|
||||||
status := Status(C.node_api_create_buffer_from_arraybuffer(
|
|
||||||
C.napi_env(env),
|
|
||||||
C.napi_value(arrayBuffer),
|
|
||||||
C.size_t(byteOffset),
|
|
||||||
C.size_t(length),
|
|
||||||
(**C.void)(unsafe.Pointer(&data)),
|
|
||||||
(*C.napi_value)(unsafe.Pointer(&result)),
|
|
||||||
))
|
|
||||||
return result, data, status
|
|
||||||
}
|
|
||||||
|
|
||||||
func CreateExternalStringLatin1(env Env, str string, finalize Finalize, finalizeHint unsafe.Pointer) (Value, Status) {
|
|
||||||
cstr := C.CString(str)
|
|
||||||
defer C.free(unsafe.Pointer(cstr))
|
|
||||||
|
|
||||||
var result Value
|
|
||||||
status := Status(C.node_api_create_external_string_latin1(
|
|
||||||
C.napi_env(env),
|
|
||||||
cstr,
|
|
||||||
C.size_t(len([]byte(str))),
|
|
||||||
C.napi_finalize(finalize),
|
|
||||||
finalizeHint,
|
|
||||||
(*C.napi_value)(unsafe.Pointer(&result)),
|
|
||||||
))
|
|
||||||
return result, status
|
|
||||||
}
|
|
||||||
|
|
||||||
func CreateExternalStringUtf16(env Env, str []uint16, finalize Finalize, finalizeHint unsafe.Pointer) (Value, Status) {
|
|
||||||
var result Value
|
|
||||||
status := Status(C.node_api_create_external_string_utf16(
|
|
||||||
C.napi_env(env),
|
|
||||||
(*C.char16_t)(unsafe.Pointer(&str[0])),
|
|
||||||
C.size_t(len(str)),
|
|
||||||
C.napi_finalize(finalize),
|
|
||||||
finalizeHint,
|
|
||||||
(*C.napi_value)(unsafe.Pointer(&result)),
|
(*C.napi_value)(unsafe.Pointer(&result)),
|
||||||
))
|
))
|
||||||
return result, status
|
return result, status
|
||||||
@ -290,11 +236,3 @@ func CreatePropertyKeyUtf8(env Env, str string) (Value, Status) {
|
|||||||
))
|
))
|
||||||
return result, status
|
return result, status
|
||||||
}
|
}
|
||||||
|
|
||||||
func PostFinalizer(env Env, finalizeData, finalizeHint unsafe.Pointer) Status {
|
|
||||||
return Status(C.node_api_post_finalizer(
|
|
||||||
C.napi_env(env),
|
|
||||||
finalizeData,
|
|
||||||
finalizeHint,
|
|
||||||
))
|
|
||||||
}
|
|
||||||
|
13
types.go
13
types.go
@ -1,5 +1,9 @@
|
|||||||
package napi
|
package napi
|
||||||
|
|
||||||
|
/*
|
||||||
|
#include <node/node_api.h>
|
||||||
|
*/
|
||||||
|
import "C"
|
||||||
import "unsafe"
|
import "unsafe"
|
||||||
|
|
||||||
type PropertyDescriptor struct {
|
type PropertyDescriptor struct {
|
||||||
@ -15,6 +19,15 @@ type PropertyDescriptor struct {
|
|||||||
|
|
||||||
type Finalize func(env Env, finalizeData, finalizeHint unsafe.Pointer)
|
type Finalize func(env Env, finalizeData, finalizeHint unsafe.Pointer)
|
||||||
|
|
||||||
|
func FinalizeToFinalizer(fn Finalize) Finalizer {
|
||||||
|
return func(env C.napi_env, finalizeData, finalizeHint unsafe.Pointer) {
|
||||||
|
fn(Env(env), finalizeData, finalizeHint)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Finalizer as a C-compatible function pointer type
|
||||||
|
type Finalizer func(env C.napi_env, finalizeData, finalizeHint unsafe.Pointer)
|
||||||
|
|
||||||
type Reference struct {
|
type Reference struct {
|
||||||
Ref unsafe.Pointer
|
Ref unsafe.Pointer
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user