Post https://github.com/electron/electron/pull/18924 we shouldn't be patching `CompileAndCall` into our node fork, instead that method can quite easily live in our code as a helper.
shell/common/api/atom_api_asar.cc
const base::FilePath& path) {
    base::FilePath new_path;
    if (!archive_ || !archive_->CopyFileOut(path, &new_path))
      return v8::False(isolate);
    return mate::ConvertToV8(isolate, new_path);
  }
  
  int GetFD() const {
    if (!archive_)
      return -1;
    return archive_->GetFD();
  }
 private:
  std::unique_ptr<asar::Archive> archive_;
  DISALLOW_COPY_AND_ASSIGN(Archive);
};
void InitAsarSupport(v8::Isolate* isolate, v8::Local<v8::Value> require) {
  
  std::vector<v8::Local<v8::String>> asar_init_params = {
      node::FIXED_ONE_BYTE_STRING(isolate, "require")};
  std::vector<v8::Local<v8::Value>> asar_init_args = {require};
  node::native_module::NativeModuleEnv::CompileAndCall(
      isolate->GetCurrentContext(), "electron/js2c/asar_init",
      &asar_init_params, &asar_init_args, nullptr);
}
v8::Local<v8::Value> SplitPath(v8::Isolate* isolate,