aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <jarred@jarredsumner.com> 2022-05-04 22:33:46 -0700
committerGravatar Jarred Sumner <jarred@jarredsumner.com> 2022-05-05 21:35:08 -0700
commitb6a8675658bab8eb9be9950a8de3fdeb9421aee7 (patch)
tree40860ba31c0770627c8d12f69faee5a3a13ae44f /src
parent2c0c91e2d0eb7749abf9dec4a4f2ce123c1ac8f2 (diff)
downloadbun-b6a8675658bab8eb9be9950a8de3fdeb9421aee7.tar.gz
bun-b6a8675658bab8eb9be9950a8de3fdeb9421aee7.tar.zst
bun-b6a8675658bab8eb9be9950a8de3fdeb9421aee7.zip
`typeof`
Diffstat (limited to 'src')
-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;