Как исправить устаревшую функцию GetFunction из v8?

Я пытаюсь восстановить node-osmium, чтобы он работал с Node 12, так как у меня есть старый код, который я хотел бы запустить.

v8 теперь полностью устарел многие API, которые не сигнализируют о сбое должным образом. Раньше это были только предупреждения о скором устаревании, теперь это ошибки, поэтому он больше не будет собираться. Я (думаю, что) исправил большинство из них, следуя этому CPP STYLE GUIDE.md, используя возможно версию раздела API v8.

Но я застрял с этой ошибкой для GetFunction:

../src/utils.hpp:39:67: error: no matching function for call to ‘v8::FunctionTemplate::GetFunction()’
         Nan::MaybeLocal<v8::Object> maybe_local = Nan::NewInstance(Nan::New(T::constructor)->GetFunction(), 1, &ext);

Я предполагаю, что это такое же исправление, как и в других функциях, но где мне взять контекст в этом конструкторе?

извлечь из node-osmium / src / utils.hpp:

namespace node_osmium {

    template<class T>
    auto unwrap(const v8::Local<v8::Object>& object) -> decltype(Nan::ObjectWrap::Unwrap<T>(object)->get()) {
        return Nan::ObjectWrap::Unwrap<T>(object)->get();
    }

    template<class T, class... Args>
    v8::Local<v8::Object> new_external(Args&&... args) {
        Nan::EscapableHandleScope scope;
        v8::Local<v8::Value> ext = Nan::New<v8::External>(new T(std::forward<Args>(args)...));
        Nan::MaybeLocal<v8::Object> maybe_local = Nan::NewInstance(Nan::New(T::constructor)->GetFunction(context), 1, &ext);
        if (maybe_local.IsEmpty()) Nan::ThrowError("Could not create new Buffer instance");
        return scope.Escape(maybe_local.ToLocalChecked());

    }

    v8::Local<v8::Value> create_js_box(const osmium::Box& box);

    osmium::osm_entity_bits::type object_to_entity_bits(v8::Local<v8::Object> options);

} // namespace node_osmium

0 ответов

Другие вопросы по тегам