1#include <js_native_api.h> 2#include "../common.h" 3#include "../entry_point.h" 4 5napi_deferred deferred = NULL; 6 7static napi_value createPromise(napi_env env, napi_callback_info info) { 8 napi_value promise; 9 10 // We do not overwrite an existing deferred. 11 if (deferred != NULL) { 12 return NULL; 13 } 14 15 NODE_API_CALL(env, napi_create_promise(env, &deferred, &promise)); 16 17 return promise; 18} 19 20static napi_value 21concludeCurrentPromise(napi_env env, napi_callback_info info) { 22 napi_value argv[2]; 23 size_t argc = 2; 24 bool resolution; 25 26 NODE_API_CALL(env, napi_get_cb_info(env, info, &argc, argv, NULL, NULL)); 27 NODE_API_CALL(env, napi_get_value_bool(env, argv[1], &resolution)); 28 if (resolution) { 29 NODE_API_CALL(env, napi_resolve_deferred(env, deferred, argv[0])); 30 } else { 31 NODE_API_CALL(env, napi_reject_deferred(env, deferred, argv[0])); 32 } 33 34 deferred = NULL; 35 36 return NULL; 37} 38 39static napi_value isPromise(napi_env env, napi_callback_info info) { 40 napi_value promise, result; 41 size_t argc = 1; 42 bool is_promise; 43 44 NODE_API_CALL(env, napi_get_cb_info(env, info, &argc, &promise, NULL, NULL)); 45 NODE_API_CALL(env, napi_is_promise(env, promise, &is_promise)); 46 NODE_API_CALL(env, napi_get_boolean(env, is_promise, &result)); 47 48 return result; 49} 50 51EXTERN_C_START 52napi_value Init(napi_env env, napi_value exports) { 53 napi_property_descriptor descriptors[] = { 54 DECLARE_NODE_API_PROPERTY("createPromise", createPromise), 55 DECLARE_NODE_API_PROPERTY("concludeCurrentPromise", concludeCurrentPromise), 56 DECLARE_NODE_API_PROPERTY("isPromise", isPromise), 57 }; 58 59 NODE_API_CALL(env, napi_define_properties( 60 env, exports, sizeof(descriptors) / sizeof(*descriptors), descriptors)); 61 62 return exports; 63} 64EXTERN_C_END 65