Index: src/Utils.cpp
===================================================================
--- a/src/Utils.cpp
+++ b/src/Utils.cpp
@@ -45,32 +45,39 @@
 {
   v8::String::Utf8Value stringValue(isolate, value);
   if (stringValue.length())
     return IFileSystem::IOBuffer(*stringValue, *stringValue + stringValue.length());
   else
     return IFileSystem::IOBuffer();
 }
 
-v8::Local<v8::String> Utils::ToV8String(v8::Isolate* isolate, const std::string& str)
+v8::MaybeLocal<v8::String> Utils::ToV8String(v8::Isolate* isolate, const std::string& str)
 {
   return v8::String::NewFromUtf8(isolate, str.c_str(),
-    v8::String::NewStringType::kNormalString, str.length());
+    v8::NewStringType::kNormal, str.length());
 }
 
-v8::Local<v8::String> Utils::StringBufferToV8String(v8::Isolate* isolate, const StringBuffer& str)
+v8::MaybeLocal<v8::String> Utils::StringBufferToV8String(v8::Isolate* isolate, const StringBuffer& str)
 {
   return v8::String::NewFromUtf8(isolate,
     reinterpret_cast<const char*>(str.data()),
-    v8::String::NewStringType::kNormalString, str.size());
+    v8::NewStringType::kNormal, str.size());
 }
 
 void Utils::ThrowExceptionInJS(v8::Isolate* isolate, const std::string& str)
 {
-  isolate->ThrowException(Utils::ToV8String(isolate, str));
+  auto maybe = Utils::ToV8String(isolate, str);
+  if (maybe.IsEmpty())
+  {
+    isolate->ThrowException(
+      Utils::ToV8String(isolate, "Unknown Exception").ToLocalChecked());
+  }
+  else
+    isolate->ThrowException(maybe.ToLocalChecked());
 }
 
 #ifdef _WIN32
 std::wstring Utils::ToUtf16String(const std::string& str)
 {
   size_t length = str.size();
   if (length == 0)
     return std::wstring();
