npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

h56-translator

v1.0.6

Published

Simple translator wrapper for h56-translator-api

Readme

h56-translator

Translation Service dengan dukungan 100+ bahasa terjemahan — client ringan tanpa dependensi untuk Node.js (server-side).

Daftar Isi


Deskripsi singkat

h56-translator adalah client ringan untuk layanan terjemahan yang mendukung 100+ bahasa. Dirancang untuk digunakan di lingkungan server-side Node.js tanpa dependensi eksternal.

Instalasi

NPM:

npm install h56-translator

Catatan: package mengharuskan Node.js >= 18 (Fetch API global tersedia). Jika menggunakan versi Node yang lebih lama, gunakan polyfill Fetch pada runtime.

Dukungan runtime

  • Node.js: >= 18.0.0 (menggunakan global fetch)
  • Environment: server-side
  • Dependensi: tidak ada (zero-deps)
  • Tidak mengharuskan variabel lingkungan untuk operasi dasar

API publik

Ekspor

  • CommonJS:
const { translate } = require('h56-translator')
  • ESM:
import { translate } from 'h56-translator'

Fungsi utama:

translate(text, targetLang, options?)

Tanda tangan fungsi (TypeScript)

export interface TranslationResult {
  translatedText: string;
  sourceLang: string;    // kode bahasa terdeteksi (ISO-ish, service-defined)
  targetLang: string;    // nilai yang diminta
  serviceStatus: 'ok' | 'error';
  raw?: any;             // seluruh payload respons dari service (opsional)
}

export interface TranslateOptions {
  endpoint?: string;               // default: https://h56-translator-api.vercel.app/api/translate
  signal?: AbortSignal;            // untuk cancelation
  fetch?: typeof globalThis.fetch; // opsional: override fetch untuk testing
  timeoutMs?: number;              // opsional: helper timeout (implementasi internal, non-throwing jika 0/undefined)
}

declare function translate(
  text: string,
  targetLang: string,
  options?: TranslateOptions
): Promise<TranslationResult>;

Perilaku dan error handling

  • Fungsi mengembalikan Promise yang resolve dengan TranslationResult ketika service merespons dengan status sukses.
  • Service melakukan deteksi bahasa sumber otomatis; sourceLang disediakan oleh response.
  • Jika parameter text atau targetLang tidak diisi, fungsi melempar (throw) TypeError sinkron atau reject Promise dengan pesan error yang jelas.

Contoh penggunaan

CommonJS (Node.js):

const { translate } = require('h56-translator');

(async () => {
  try {
    const result = await translate('Halo dunia', 'en');
    console.log(result.translatedText); // => expected English string
    console.log({ source: result.sourceLang, target: result.targetLang });
  } catch (err) {
    console.error('Translate error:', err);
  }
})();

Contoh lain — melihat daftar bahasa yang didukung:

const { translate, supportedLanguages } = require("h56-translator");

console.log(supportedLanguages.map(l => `${l.code} — ${l.name}`));

(async () => {
  try {
    const result = await translate("Halo", "id");
    console.log(result);
  } catch (err) {
    console.error(err.message);
  }
})();

Kontrak HTTP (request / response)

Default endpoint: https://h56-translator-api.vercel.app/api/translate

Request (POST, JSON):

{
  "text": "Halo dunia",
  "targetLang": "en"
}

Respons sukses (200 OK) — contoh sesuai TranslationResult:

{
  "translatedText": "Hello world",
  "sourceLang": "id",
  "targetLang": "en",
  "serviceStatus": "ok",
  "raw": { /* seluruh payload dari service jika tersedia */ }
}

Contoh respons error terstruktur:

{
  "serviceStatus": "error",
  "error": {
    "code": "unsupported_language",
    "message": "bahasa respon tidak didukung atau tidak ada"
  }
}

Catatan: implementasi server dapat mengembalikan kode status HTTP yang sesuai (4xx/5xx) selain payload JSON di atas.

Penanganan error dan kode status

Pesan error (perilaku client):

  • Jika text atau targetLang tidak diisi: text dan targetLang wajib diisi
  • Jika language tidak didukung: bahasa respon tidak didukung atau tidak ada
  • Jika remote API mengembalikan non-ok: API error: <status>

Rekomendasi mapping status:

  • 400 Bad Request — parameter tidak lengkap / invalid
  • 422 Unprocessable Entity — language tidak didukung
  • 502 / 503 — gateway / service error (coba ulang sesuai strategi retry)
  • 500 — internal server error

Praktik integrasi (timeout, abort, retry)

  • Gunakan opsi signal (AbortSignal) untuk membatalkan request bila diperlukan.
  • timeoutMs disediakan sebagai helper: bila di-set, client dapat secara internal melakukan abort setelah timeout.
  • fetch dapat dioverride untuk testing.

Contoh pattern timeout + abort:

const controller = new AbortController();
const timeout = setTimeout(() => controller.abort(), 5000); // 5s

try {
  const res = await translate("Halo", "en", { signal: controller.signal });
  // ... gunakan res
} catch (err) {
  if (err.name === "AbortError") {
    // request di-cancel / timeout
  }
  throw err;
} finally {
  clearTimeout(timeout);
}

Strategi retry:

  • Untuk transient server errors (5xx, 502/503), gunakan retry dengan exponential backoff.
  • Batasi jumlah retry (mis. 3 percobaan).
  • Pastikan retry hanya untuk idempotent / safe scenarios atau ketika request dapat diulang.

Struktur paket

Contoh struktur file yang direkomendasikan:

  • package.json
  • README.md
  • index.js (entry point, CommonJS)
  • dist/ atau lib/ (jika build/ts -> js)
  • types.d.ts (opsional, TypeScript declarations)
  • test/ (unit & integration tests)

Pengujian & checklist audit

Checklist dasar sebelum rilis:

  • [ ] Unit tests untuk:
    • valid input -> hasil terjemahan
    • missing text / targetLang -> throw TypeError
    • override fetch untuk response sukses & error
  • [ ] Integration test (opsional) terhadap endpoint staging
  • [ ] Coverage untuk timeout & abort handling
  • [ ] Linting & static types (jika pakai TypeScript)
  • [ ] Dokumentasi API & contoh kode di README

Keamanan & privasi

  • Tidak ada dependensi eksternal (zero-deps) — mengurangi permukaan serangan.
  • Pastikan tidak mengirim data sensitif ke endpoint publik tanpa persetujuan pengguna.
  • Tinjau kebijakan privasi service backend jika menangani data pengguna.
  • Gunakan HTTPS untuk komunikasi ke endpoint.

Penerbitan / versi

  • Ikuti SemVer untuk rilis (MAJOR.MINOR.PATCH).
  • Menyebutkan persyaratan runtime minimal di setiap rilis (Node >= 18).
  • Tandai breaking changes di changelog.

Lisensi & penulis

  • Lisensi: MIT
  • Author: HASYIM56