aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/napi/napi.zig73
1 files changed, 72 insertions, 1 deletions
diff --git a/src/napi/napi.zig b/src/napi/napi.zig
index b52593f25..2af4da303 100644
--- a/src/napi/napi.zig
+++ b/src/napi/napi.zig
@@ -291,7 +291,78 @@ pub export fn napi_create_error(env: napi_env, code: napi_value, msg: napi_value
}
pub extern fn napi_create_type_error(env: napi_env, code: napi_value, msg: napi_value, result: *napi_value) napi_status;
pub extern fn napi_create_range_error(env: napi_env, code: napi_value, msg: napi_value, result: *napi_value) napi_status;
-pub extern fn napi_typeof(env: napi_env, value: napi_value, result: *napi_valuetype) napi_status;
+pub export fn napi_typeof(env: napi_env, value: napi_value, result: *napi_valuetype) napi_status {
+ if (value.isEmpty()) {
+ result.* = .undefined;
+ return .ok;
+ }
+
+ //"undefined" = 0,
+ //"null" = 1,
+ //"boolean" = 2,
+ //"number" = 3,
+ //"string" = 4,
+ //"symbol" = 5,
+ //"object" = 6,
+ //"function" = 7,
+ //"external" = 8,
+ //"bigint" = 9,
+
+ if (value.isUndefined()) {
+ result.* = .undefined;
+ return .ok;
+ }
+
+ if (value.isNull()) {
+ result.* = .null;
+ return .ok;
+ }
+
+ if (value.isBoolean()) {
+ result.* = .boolean;
+ return .ok;
+ }
+
+ if (value.isNumber()) {
+ result.* = .number;
+ return .ok;
+ }
+
+ if (value.isString()) {
+ result.* = .string;
+ return .ok;
+ }
+
+ if (value.isSymbol()) {
+ result.* = .symbol;
+ return .ok;
+ }
+
+ if (value.isBigInt()) {
+ result.* = .bigint;
+ return .ok;
+ }
+
+ if (value.jsType() == .JSProxy) {
+ result.* = .external;
+ return .ok;
+ }
+
+ if (value.isObject()) {
+ if (value.isCallable(env.vm())) {
+ result.* = .function;
+ return .ok;
+ }
+ result.* = .object;
+ return .ok;
+ }
+
+ if (value.isCell() and value.isCallable(env.vm())) {
+ result.* = .function;
+ return .ok;
+ }
+
+ return .invalid_arg;
pub export fn napi_get_value_double(_: napi_env, value: napi_value, result: *f64) napi_status {
result.* = value.to(f64);
return .ok;