in src/Reader.cc [148:172]
Napi::Value Reader::NewInstance(const Napi::CallbackInfo &info, std::shared_ptr<pulsar_client_t> cClient) {
auto deferred = ThreadSafeDeferred::New(info.Env());
Napi::Object config = info[0].As<Napi::Object>();
auto readerConfig = std::make_shared<ReaderConfig>(config, &ReaderListener);
const std::string &topic = readerConfig->GetTopic();
if (topic.empty()) {
deferred->Reject(std::string("Topic is required and must be specified as a string when creating reader"));
return deferred->Promise();
}
if (readerConfig->GetCStartMessageId().get() == nullptr) {
deferred->Reject(std::string(
"StartMessageId is required and must be specified as a MessageId object when creating reader"));
return deferred->Promise();
}
auto ctx = new ReaderNewInstanceContext(deferred, cClient, readerConfig);
pulsar_client_create_reader_async(cClient.get(), topic.c_str(), readerConfig->GetCStartMessageId().get(),
readerConfig->GetCReaderConfig().get(),
&ReaderNewInstanceContext::createReaderCallback, ctx);
return deferred->Promise();
}