dawn_node: Fix macOS build

Generate exported node symbol stubs with weak linking. This keeps the linker happy, and these are replaced by the real node symbols at runtime.

Fix clang warnings.

Have WGPUBufferMapAsyncStatus_DestroyedBeforeCallback reject the promise with an AbortError.

Bug: dawn:1123
Change-Id: I503f889b027b6cfc0e458abf434d4888990fb67b
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/65560
Reviewed-by: Austin Eng <enga@chromium.org>
Reviewed-by: Antonio Maiorano <amaiorano@google.com>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Commit-Queue: Ben Clayton <bclayton@google.com>
diff --git a/src/dawn_node/CMakeLists.txt b/src/dawn_node/CMakeLists.txt
index b4f3ae4..dd1e2e2 100644
--- a/src/dawn_node/CMakeLists.txt
+++ b/src/dawn_node/CMakeLists.txt
@@ -55,10 +55,22 @@
     )
 endfunction()
 
+# Generate the NapiSymbols.h file from the ${NODE_API_HEADERS_DIR}/symbols.js symbol list
+set(NAPI_SYMBOLS_H "${GEN_DIR}/NapiSymbols.h")
+file(READ "${NODE_API_HEADERS_DIR}/symbols.js" NAPI_SYMBOLS_JS_CONTENT)
+string(REGEX MATCHALL "napi_[a-z0-9_]*" NAPI_SYMBOLS "${NAPI_SYMBOLS_JS_CONTENT}")
+list(TRANSFORM NAPI_SYMBOLS PREPEND "NAPI_SYMBOL(")
+list(TRANSFORM NAPI_SYMBOLS APPEND ")\n")
+string(REPLACE ";" "" NAPI_SYMBOLS "${NAPI_SYMBOLS}")
+file(GENERATE OUTPUT "${NAPI_SYMBOLS_H}" CONTENT "${NAPI_SYMBOLS}")
+
 add_subdirectory(binding)
 add_subdirectory(interop)
 
-add_library(dawn_node SHARED "Module.cpp")
+add_library(dawn_node SHARED
+    "Module.cpp"
+    "NapiSymbols.cpp"
+)
 set_target_properties(dawn_node PROPERTIES
     PREFIX ""
     OUTPUT_NAME "dawn"
@@ -67,10 +79,10 @@
 )
 target_link_libraries(dawn_node dawn_node_binding dawn_node_interop dawn_native dawncpp dawn_proc)
 target_include_directories(dawn_node PRIVATE
-    ${CMAKE_SOURCE_DIR}
-    ${NODE_API_HEADERS_DIR}
-    ${NODE_ADDON_API_DIR}
-    ${GEN_DIR}
+    "${CMAKE_SOURCE_DIR}"
+    "${NODE_API_HEADERS_DIR}/include"
+    "${NODE_ADDON_API_DIR}"
+    "${GEN_DIR}"
 )
 
 # dawn_node targets require C++17