-module(gleam@javascript). -compile(no_auto_import). -export([type_of/1, get_symbol/1, dereference/1, set_reference/2, make_reference/1, update_reference/2]). -export_type([type_of/0, symbol/0, reference_/1]). -type type_of() :: undefined_type | object_type | boolean_type | number_type | big_int_type | string_type | symbol_type | function_type. -type symbol() :: any(). -type reference_(Value) :: any() | {gleam_phantom, Value}. -spec type_of(any()) -> type_of(). type_of(A) -> '../ffi.mjs':type_of(A). -spec get_symbol(binary()) -> symbol(). get_symbol(A) -> '../ffi.mjs':get_symbol(A). -spec dereference(reference_(AH)) -> AH. dereference(A) -> '../ffi.mjs':dereference(A). -spec set_reference(reference_(AJ), AJ) -> AJ. set_reference(A, B) -> '../ffi.mjs':set_reference(A, B). -spec make_reference(AL) -> reference_(AL). make_reference(A) -> '../ffi.mjs':make_reference(A). -spec update_reference(reference_(AN), fun((AN) -> AN)) -> AN. update_reference(Ref, F) -> Value = '../ffi.mjs':dereference(Ref), '../ffi.mjs':set_reference(Ref, F(Value)), Value.