///|
fn reference_helpers() -> String {
  (
    #|#ifndef MOONOHOS_BUFFER_ALLOCATE
    #|#define MOONOHOS_BUFFER_ALLOCATE() ((void)0)
    #|#endif
    #|template struct MoonOwner {
    #|  T ptr;
    #|  explicit MoonOwner(T value) : ptr(value) {}
    #|  MoonOwner(const MoonOwner &) = delete;
    #|  MoonOwner &operator=(const MoonOwner &) = delete;
    #|  ~MoonOwner() { if (ptr) moonbit_decref(ptr); }
    #|};
    #|static bool CheckLength(napi_env env, size_t length, size_t width) {
    #|  if (length > INT32_MAX || length > (std::numeric_limits::max() - sizeof(moonbit_object)) / width - 1) {
    #|    Check(env, napi_throw_range_error(env, nullptr, "buffer length exceeded")); return false;
    #|  }
    #|  return true;
    #|}
    #|static bool ReadText(napi_env env, napi_value value, std::u16string &out) {
    #|  napi_valuetype type;
    #|  if (!Check(env, napi_typeof(env, value, &type))) return false;
    #|  if (type != napi_string) { Check(env, napi_throw_type_error(env, nullptr, "string required")); return false; }
    #|  size_t length;
    #|  if (!Check(env, napi_get_value_string_utf16(env, value, nullptr, 0, &length))) return false;
    #|  if (!CheckLength(env, length, sizeof(char16_t))) return false;
    #|  MOONOHOS_BUFFER_ALLOCATE();
    #|  out.resize(length + 1);
    #|  size_t written;
    #|  if (!Check(env, napi_get_value_string_utf16(env, value, out.data(), out.size(), &written))) return false;
    #|  if (written != length) { Check(env, napi_throw_error(env, nullptr, "string length changed")); return false; }
    #|  out.resize(length);
    #|  return true;
    #|}
    #|static bool ReadBytes(napi_env env, napi_value value, std::vector &out) {
    #|  bool typed;
    #|  if (!Check(env, napi_is_typedarray(env, value, &typed))) return false;
    #|  if (!typed) { Check(env, napi_throw_type_error(env, nullptr, "Uint8Array required")); return false; }
    #|  bool sendable;
    #|  if (!Check(env, napi_is_sendable(env, value, &sendable))) return false;
    #|  if (sendable) { Check(env, napi_throw_type_error(env, nullptr, "shared/sendable Uint8Array unsupported")); return false; }
    #|  napi_typedarray_type type;
    #|  size_t length, offset;
    #|  void *data;
    #|  napi_value buffer;
    #|  if (!Check(env, napi_get_typedarray_info(env, value, &type, &length, &data, &buffer, &offset))) return false;
    #|  bool ordinary;
    #|  if (!Check(env, napi_is_arraybuffer(env, buffer, &ordinary))) return false;
    #|  if (type != napi_uint8_array || !ordinary) { Check(env, napi_throw_type_error(env, nullptr, "ordinary Uint8Array required")); return false; }
    #|  if (!Check(env, napi_is_sendable(env, buffer, &sendable))) return false;
    #|  if (sendable) { Check(env, napi_throw_type_error(env, nullptr, "shared/sendable ArrayBuffer unsupported")); return false; }
    #|  bool detached;
    #|  if (!Check(env, napi_is_detached_arraybuffer(env, buffer, &detached))) return false;
    #|  if (detached) { Check(env, napi_throw_type_error(env, nullptr, "detached ArrayBuffer")); return false; }
    #|  if (!CheckLength(env, length, 1)) return false;
    #|  if (length && !data) { Check(env, napi_throw_type_error(env, nullptr, "invalid Uint8Array storage")); return false; }
    #|  MOONOHOS_BUFFER_ALLOCATE();
    #|  out.resize(length);
    #|  // Node-API's data pointer already includes the view offset.
    #|  if (length) std::memcpy(out.data(), data, length);
    #|  return true;
    #|}
    #|static moonbit_string_t MakeText(const std::u16string &value) {
    #|  auto result = moonbit_make_string_raw(static_cast(value.size()));
    #|  if (!value.empty()) std::memcpy(result, value.data(), value.size() * sizeof(char16_t));
    #|  return result;
    #|}
    #|static moonbit_bytes_t MakeBytes(const std::vector &value) {
    #|  auto result = moonbit_make_bytes_raw(static_cast(value.size()));
    #|  if (!value.empty()) std::memcpy(result, value.data(), value.size());
    #|  return result;
    #|}
    #|static std::u16string CopyText(moonbit_string_t value) {
    #|  int32_t length = Moonbit_array_length(value);
    #|  if (length < 0) throw std::length_error("invalid MoonBit string length");
    #|  MOONOHOS_BUFFER_ALLOCATE();
    #|  std::u16string result(static_cast(length), 0);
    #|  if (length) std::memcpy(result.data(), value, static_cast(length) * sizeof(char16_t));
    #|  return result;
    #|}
    #|static std::vector CopyBytes(moonbit_bytes_t value) {
    #|  int32_t length = Moonbit_array_length(value);
    #|  if (length < 0) throw std::length_error("invalid MoonBit bytes length");
    #|  MOONOHOS_BUFFER_ALLOCATE();
    #|  std::vector result(static_cast(length));
    #|  if (length) std::memcpy(result.data(), value, length);
    #|  return result;
    #|}
    #|static napi_status CreateBytes(napi_env env, const std::vector &value, napi_value *result) {
    #|  napi_value buffer;
    #|  void *data;
    #|  napi_status status = napi_create_arraybuffer(env, value.size(), &data, &buffer);
    #|  if (status != napi_ok) return status;
    #|  if (!value.empty()) std::memcpy(data, value.data(), value.size());
    #|  return napi_create_typedarray(env, napi_uint8_array, value.size(), buffer, 0, result);
    #|}
    #|
  ) +
  "\n"
}