Implement Node.js errors
This commit is contained in:
parent
9627921cb2
commit
863ccb947b
|
@ -55,6 +55,17 @@ void js_copy_min_buf_finalizer(napi_env env, void* _finalize_data, void* finaliz
|
||||||
free(finalize_hint);
|
free(finalize_hint);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline void throw_js_ffi_error(napi_env env, ffi_error const* min_err) {
|
||||||
|
napi_value js_min_err_msg;
|
||||||
|
assert_ok(napi_create_string_utf8(env, (char const*) min_err->message, min_err->message_len, &js_min_err_msg));
|
||||||
|
napi_value js_min_err;
|
||||||
|
assert_ok(napi_create_error(env, NULL, js_min_err_msg, &js_min_err));
|
||||||
|
napi_value js_min_err_pos;
|
||||||
|
assert_ok(napi_create_int64(env, min_err->position, &js_min_err_pos));
|
||||||
|
assert_ok(napi_set_named_property(env, js_min_err, "position", js_min_err_pos));
|
||||||
|
assert_ok(napi_throw(env, js_min_err));
|
||||||
|
}
|
||||||
|
|
||||||
napi_value node_method_create_configuration(napi_env env, napi_callback_info info) {
|
napi_value node_method_create_configuration(napi_env env, napi_callback_info info) {
|
||||||
napi_value undefined = get_undefined(env);
|
napi_value undefined = get_undefined(env);
|
||||||
|
|
||||||
|
@ -110,6 +121,7 @@ napi_value node_method_minify_in_place(napi_env env, napi_callback_info info) {
|
||||||
assert_ok(napi_throw_error(env, NULL, "Failed to get callback info"));
|
assert_ok(napi_throw_error(env, NULL, "Failed to get callback info"));
|
||||||
goto rollback;
|
goto rollback;
|
||||||
}
|
}
|
||||||
|
napi_value min_buf_rv = undefined;
|
||||||
napi_value buffer_arg = argv[0];
|
napi_value buffer_arg = argv[0];
|
||||||
napi_value js_cfg_arg = argv[1];
|
napi_value js_cfg_arg = argv[1];
|
||||||
|
|
||||||
|
@ -140,32 +152,33 @@ napi_value node_method_minify_in_place(napi_env env, napi_callback_info info) {
|
||||||
size_t min_len;
|
size_t min_len;
|
||||||
min_err = ffi_in_place(buffer_data, buffer_len, cfg, &min_len);
|
min_err = ffi_in_place(buffer_data, buffer_len, cfg, &min_len);
|
||||||
if (min_err != NULL) {
|
if (min_err != NULL) {
|
||||||
// TODO
|
throw_js_ffi_error(env, min_err);
|
||||||
assert_ok(napi_throw_error(env, NULL, "Failed to run minifier"));
|
|
||||||
goto rollback;
|
goto rollback;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create minified buffer with underlying source memory but minified length.
|
// Create minified buffer with underlying source memory but minified length.
|
||||||
min_buf_meta = assert_malloc(sizeof(js_min_buf_metadata));
|
min_buf_meta = assert_malloc(sizeof(js_min_buf_metadata));
|
||||||
min_buf_meta->src_buf_ref = buffer_arg_ref;
|
min_buf_meta->src_buf_ref = buffer_arg_ref;
|
||||||
napi_value min_buf;
|
if (napi_create_external_buffer(env, min_len, buffer_data, js_min_buf_finalizer, min_buf_meta, &min_buf_rv) != napi_ok) {
|
||||||
if (napi_create_external_buffer(env, min_len, buffer_data, js_min_buf_finalizer, min_buf_meta, &min_buf) != napi_ok) {
|
|
||||||
assert_ok(napi_throw_error(env, NULL, "Failed to create minified buffer"));
|
assert_ok(napi_throw_error(env, NULL, "Failed to create minified buffer"));
|
||||||
goto rollback;
|
goto rollback;
|
||||||
}
|
}
|
||||||
|
|
||||||
return min_buf;
|
goto cleanup;
|
||||||
|
|
||||||
rollback:
|
rollback:
|
||||||
if (buffer_arg_ref_set) {
|
if (buffer_arg_ref_set) {
|
||||||
// Release source buffer.
|
// Release source buffer.
|
||||||
assert_ok(napi_delete_reference(env, buffer_arg_ref));
|
assert_ok(napi_delete_reference(env, buffer_arg_ref));
|
||||||
}
|
}
|
||||||
|
free(min_buf_meta);
|
||||||
|
|
||||||
|
cleanup:
|
||||||
if (min_err != NULL) {
|
if (min_err != NULL) {
|
||||||
ffi_drop_ffi_error(min_err);
|
ffi_drop_ffi_error(min_err);
|
||||||
}
|
}
|
||||||
free(min_buf_meta);
|
|
||||||
return undefined;
|
return min_buf_rv;
|
||||||
}
|
}
|
||||||
|
|
||||||
napi_value node_method_minify(napi_env env, napi_callback_info info) {
|
napi_value node_method_minify(napi_env env, napi_callback_info info) {
|
||||||
|
@ -184,6 +197,7 @@ napi_value node_method_minify(napi_env env, napi_callback_info info) {
|
||||||
assert_ok(napi_throw_error(env, NULL, "Failed to get callback info"));
|
assert_ok(napi_throw_error(env, NULL, "Failed to get callback info"));
|
||||||
goto rollback;
|
goto rollback;
|
||||||
}
|
}
|
||||||
|
napi_value min_buf_rv = undefined;
|
||||||
napi_value src_arg = argv[0];
|
napi_value src_arg = argv[0];
|
||||||
napi_value js_cfg_arg = argv[1];
|
napi_value js_cfg_arg = argv[1];
|
||||||
|
|
||||||
|
@ -224,26 +238,27 @@ napi_value node_method_minify(napi_env env, napi_callback_info info) {
|
||||||
size_t min_len;
|
size_t min_len;
|
||||||
min_err = ffi_in_place(src_data_copy, src_data_len, cfg, &min_len);
|
min_err = ffi_in_place(src_data_copy, src_data_len, cfg, &min_len);
|
||||||
if (min_err != NULL) {
|
if (min_err != NULL) {
|
||||||
// TODO
|
throw_js_ffi_error(env, min_err);
|
||||||
assert_ok(napi_throw_error(env, NULL, "Failed to run minifier"));
|
|
||||||
goto rollback;
|
goto rollback;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create minified buffer with copied memory.
|
// Create minified buffer with copied memory.
|
||||||
napi_value min_buf;
|
if (napi_create_external_buffer(env, min_len, src_data_copy, js_copy_min_buf_finalizer, src_data_copy, &min_buf_rv) != napi_ok) {
|
||||||
if (napi_create_external_buffer(env, min_len, src_data_copy, js_copy_min_buf_finalizer, src_data_copy, &min_buf) != napi_ok) {
|
|
||||||
assert_ok(napi_throw_error(env, NULL, "Failed to create minified buffer"));
|
assert_ok(napi_throw_error(env, NULL, "Failed to create minified buffer"));
|
||||||
goto rollback;
|
goto rollback;
|
||||||
}
|
}
|
||||||
|
|
||||||
return min_buf;
|
goto cleanup;
|
||||||
|
|
||||||
rollback:
|
rollback:
|
||||||
free(src_data_copy);
|
free(src_data_copy);
|
||||||
|
|
||||||
|
cleanup:
|
||||||
if (min_err != NULL) {
|
if (min_err != NULL) {
|
||||||
ffi_drop_ffi_error(min_err);
|
ffi_drop_ffi_error(min_err);
|
||||||
}
|
}
|
||||||
return undefined;
|
|
||||||
|
return min_buf_rv;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void define_method(napi_env env, napi_value exports, char const* name, napi_callback cb) {
|
static inline void define_method(napi_env env, napi_value exports, char const* name, napi_callback cb) {
|
||||||
|
|
Loading…
Reference in New Issue