예제 #1
0
napi_status napi_define_class(napi_env env, const char* utf8name, size_t length,
                              napi_callback constructor, void* data,
                              size_t property_count,
                              const napi_property_descriptor* properties,
                              napi_value* result) {
  NAPI_TRY_ENV(env);
  napi_value nval;
  NAPI_INTERNAL_CALL(
      napi_create_function(env, utf8name, length, constructor, data, &nval));

  // `prototype` is undefined in `napi_create_function` results
  napi_value nval_prototype;
  NAPI_INTERNAL_CALL(napi_create_object(env, &nval_prototype));
  NAPI_INTERNAL_CALL(
      napi_set_named_property(env, nval, "prototype", nval_prototype));

  for (size_t i = 0; i < property_count; ++i) {
    napi_property_descriptor prop = properties[i];
    if (prop.attributes & napi_static) {
      NAPI_INTERNAL_CALL(napi_define_properties(env, nval, 1, &prop));
    } else {
      NAPI_INTERNAL_CALL(napi_define_properties(env, nval_prototype, 1, &prop));
    }
  }

  NAPI_ASSIGN(result, nval);
  NAPI_RETURN(napi_ok);
}
예제 #2
0
파일: xattr.c 프로젝트: LinusU/fs-xattr
static napi_value Init(napi_env env, napi_value exports) {
  napi_value result;
  assert(napi_create_object(env, &result) == napi_ok);

  napi_value get_fn;
  assert(napi_create_function(env, "get", NAPI_AUTO_LENGTH, xattr_get, NULL, &get_fn) == napi_ok);
  assert(napi_set_named_property(env, result, "get", get_fn) == napi_ok);
  napi_value set_fn;
  assert(napi_create_function(env, "set", NAPI_AUTO_LENGTH, xattr_set, NULL, &set_fn) == napi_ok);
  assert(napi_set_named_property(env, result, "set", set_fn) == napi_ok);
  napi_value list_fn;
  assert(napi_create_function(env, "list", NAPI_AUTO_LENGTH, xattr_list, NULL, &list_fn) == napi_ok);
  assert(napi_set_named_property(env, result, "list", list_fn) == napi_ok);
  napi_value remove_fn;
  assert(napi_create_function(env, "remove", NAPI_AUTO_LENGTH, xattr_remove, NULL, &remove_fn) == napi_ok);
  assert(napi_set_named_property(env, result, "remove", remove_fn) == napi_ok);

  napi_value get_sync_fn;
  assert(napi_create_function(env, "getSync", NAPI_AUTO_LENGTH, xattr_get_sync, NULL, &get_sync_fn) == napi_ok);
  assert(napi_set_named_property(env, result, "getSync", get_sync_fn) == napi_ok);
  napi_value set_sync_fn;
  assert(napi_create_function(env, "setSync", NAPI_AUTO_LENGTH, xattr_set_sync, NULL, &set_sync_fn) == napi_ok);
  assert(napi_set_named_property(env, result, "setSync", set_sync_fn) == napi_ok);
  napi_value list_sync_fn;
  assert(napi_create_function(env, "listSync", NAPI_AUTO_LENGTH, xattr_list_sync, NULL, &list_sync_fn) == napi_ok);
  assert(napi_set_named_property(env, result, "listSync", list_sync_fn) == napi_ok);
  napi_value remove_sync_fn;
  assert(napi_create_function(env, "removeSync", NAPI_AUTO_LENGTH, xattr_remove_sync, NULL, &remove_sync_fn) == napi_ok);
  assert(napi_set_named_property(env, result, "removeSync", remove_sync_fn) == napi_ok);

  return result;
}
예제 #3
0
파일: buf.c 프로젝트: Globik/globibot
napi_value bufferInfo(napi_env env, napi_callback_info info){
size_t argc=1;
napi_value args[1];
napi_status status;
//napi_valuetype valuetype;
//bool valuetype;
status=napi_get_cb_info(env, info, &argc, args,NULL,NULL);
	if(status !=napi_ok){return NULL;}
//assert(status==napi_ok);
//if(argc > 1){napi_throw_type_error(env,nullptr,"Wrong number of arguments!");
				// return NULL;
				//}
//status=napi_is_buffer(env,args[0], &valuetype);
	//if(status !=napi_ok){return status;}
//assert(status==napi_ok);
//if(valuetype == false){
//napi_throw_type_error(env,nullptr,"Wrong type of argument. Expects a buffer!");
//return NULL;
//}

	napi_value theBuffer=args[0], ua_family;
	
	const char* bufferData;
	napi_value obj;
	//size_t bufferLength;
	status=napi_get_buffer_info(env,theBuffer,(void**)(&bufferData),/*&bufferLength*/NULL);
	if(status !=napi_ok){return NULL;}
	//assert(status==napi_ok);
	//printf("here: %s\n",bufferData);
	//printf("here len: %zu\n",bufferLength);
	//printf("sizeof(theText): %zu\n",sizeof(theText));
	//status=napi_get_boolean(env,!strcmp(bufferData,theText) && bufferLength==sizeof(theText),&returnValue);
	//assert(status==napi_ok);
//struct user_agent_parser *ua_parser = user_agent_parser_create();
//struct user_agent_info *ua_info = user_agent_info_create();
//user_agent_parser_read_buffer(ua_parser, ___uap_core_regexes_yaml, ___uap_core_regexes_yaml_len);
	status=napi_create_object(env,&obj);
	if(status !=napi_ok){return NULL;}

if (user_agent_parser_parse_string(ua_parser, ua_info,bufferData)) {
	//status=
	napi_create_string_utf8(env,ua_info->user_agent.family,NAPI_AUTO_LENGTH,&ua_family);
	//if(status !=napi_ok){return NULL;}
	//assert(status==napi_ok);
	
	//assert(status==napi_ok);
	//status=napi_set_named_property(env,obj,"ua_family",ua_family);//major,minor,patch
	//if(status !=napi_ok){return NULL;}
	//assert(status==napi_ok);
}
	napi_property_descriptor descriptors[]={
		{"ua_family",NULL,0,0,0,ua_family,napi_default,0}
	};
	status=napi_define_properties(env,obj,sizeof(descriptors)/sizeof(descriptors[0]),descriptors);
	//assert(status==napi_ok);
	//user_agent_parser_destroy(ua_parser);
	//user_agent_info_destroy(ua_info);
	return obj;
}
예제 #4
0
static napi_value NewScope(napi_env env, napi_callback_info info) {
  napi_handle_scope scope;
  napi_value output = NULL;

  NAPI_CALL(env, napi_open_handle_scope(env, &scope));
  NAPI_CALL(env, napi_create_object(env, &output));
  NAPI_CALL(env, napi_close_handle_scope(env, scope));
  return NULL;
}
예제 #5
0
static napi_value NewScopeEscape(napi_env env, napi_callback_info info) {
  napi_escapable_handle_scope scope;
  napi_value output = NULL;
  napi_value escapee = NULL;

  NAPI_CALL(env, napi_open_escapable_handle_scope(env, &scope));
  NAPI_CALL(env, napi_create_object(env, &output));
  NAPI_CALL(env, napi_escape_handle(env, scope, output, &escapee));
  NAPI_CALL(env, napi_close_escapable_handle_scope(env, scope));
  return escapee;
}
예제 #6
0
파일: binding.c 프로젝트: dnalborczyk/node
static napi_value CreateObject(napi_env env, napi_callback_info info) {
  size_t argc = 1;
  napi_value args[1];
  NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, NULL, NULL));

  napi_value obj;
  NAPI_CALL(env, napi_create_object(env, &obj));

  NAPI_CALL(env, napi_set_named_property(env, obj, "msg", args[0]));

  return obj;
}
예제 #7
0
static napi_value NewScopeEscapeTwice(napi_env env, napi_callback_info info) {
  napi_escapable_handle_scope scope;
  napi_value output = NULL;
  napi_value escapee = NULL;
  napi_status status;

  NAPI_CALL(env, napi_open_escapable_handle_scope(env, &scope));
  NAPI_CALL(env, napi_create_object(env, &output));
  NAPI_CALL(env, napi_escape_handle(env, scope, output, &escapee));
  status = napi_escape_handle(env, scope, output, &escapee);
  NAPI_ASSERT(env, status == napi_escape_called_twice, "Escaping twice fails");
  NAPI_CALL(env, napi_close_escapable_handle_scope(env, scope));
  return NULL;
}
예제 #8
0
파일: binding.c 프로젝트: dnalborczyk/node
static napi_value CreateAsyncResource(napi_env env, napi_callback_info info) {
  napi_value object;
  NAPI_CALL(env, napi_create_object(env, &object));

  napi_value resource_name;
  NAPI_CALL(env, napi_create_string_utf8(
      env, "test_gcable", NAPI_AUTO_LENGTH, &resource_name));

  napi_async_context context;
  NAPI_CALL(env, napi_async_init(env, object, resource_name, &context));

  NAPI_CALL(env, napi_add_finalizer(
      env, object, (void*)context, AsyncDestroyCb, NULL, NULL));

  return object;
}
예제 #9
0
napi_value New(napi_env env, napi_callback_info info) {
  napi_value ret;
  NAPI_CALL(env, napi_create_object(env, &ret));

  napi_value num;
  NAPI_CALL(env, napi_create_int32(env, 987654321, &num));

  NAPI_CALL(env, napi_set_named_property(env, ret, "test_number", num));

  napi_value str;
  const char* str_val = "test string";
  size_t str_len = strlen(str_val);
  NAPI_CALL(env, napi_create_string_utf8(env, str_val, str_len, &str));

  NAPI_CALL(env, napi_set_named_property(env, ret, "test_string", str));

  return ret;
}
예제 #10
0
static napi_value NewScopeWithException(napi_env env, napi_callback_info info) {
  napi_handle_scope scope;
  size_t argc;
  napi_value exception_function;
  napi_status status;
  napi_value output = NULL;

  NAPI_CALL(env, napi_open_handle_scope(env, &scope));
  NAPI_CALL(env, napi_create_object(env, &output));

  argc = 1;
  NAPI_CALL(env, napi_get_cb_info(
      env, info, &argc, &exception_function, NULL, NULL));

  status = napi_call_function(
      env, output, exception_function, 0, NULL, NULL);
  NAPI_ASSERT(env, status == napi_pending_exception,
      "Function should have thrown.");

  // Closing a handle scope should still work while an exception is pending.
  NAPI_CALL(env, napi_close_handle_scope(env, scope));
  return NULL;
}