in src/keymapping.cc [74:100]
napi_value _OnDidChangeKeyboardLayout(napi_env env, napi_callback_info info) {
size_t argc = 2;
napi_value args[2];
NotificationCallbackData *data;
NAPI_CALL(env, napi_get_instance_data(env, (void**)&data));
NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, NULL, NULL));
NAPI_ASSERT(env, argc == 1, "Wrong number of arguments. Expects a single argument.");
napi_valuetype valuetype0;
NAPI_CALL(env, napi_typeof(env, args[0], &valuetype0));
NAPI_ASSERT(env, valuetype0 == napi_function, "Wrong type of arguments. Expects a function as first argument.");
napi_value func = args[0];
napi_value resource_name;
NAPI_CALL(env, napi_create_string_utf8(env, "onDidChangeKeyboardLayoutCallback", NAPI_AUTO_LENGTH, &resource_name));
// Convert the callback retrieved from JavaScript into a thread-safe function
NAPI_CALL(env, napi_create_threadsafe_function(env, func, NULL, resource_name, 0, 1, NULL,
FinalizeThreadsafeFunction, NULL, NotifyJS,
&data->tsfn));
registerKeyboardLayoutChangeListener(data);
return napi_fetch_undefined(env);
}