Locutus
他言語の標準ライブラリを TypeScript に。PHP・Go・Python・Ruby・C 等、約500関数を個別 import で。
Locutus は、PHP・Go・Python・Ruby・C・Clojure などの標準ライブラリ関数を TypeScript で再実装したライブラリ。各関数は単体で import でき、tree-shake 可能。キャッチフレーズは「All your standard libraries will be assimilated into our TypeScript collective. Resistance is futile.」で、他言語の「定番」を JavaScript の世界に持ち込むのが目的だ。
教育・娯楽・実用のバランスで、同じ問題を他言語がどう解くかを TypeScript で体験できる。ビルド成果物は dist/(CommonJS)と dist/esm(ESM)、ES2022 ターゲット。
Locutus がポートするのは関数の振る舞いであり、他言語のランタイムやデータ構造ではない。API 境界は JavaScript ネイティブに保つ。
つまり、Go の slice/map、Python の tuple/bytes、Ruby の symbol、C の struct/pointer などを Locutus の API で再現しない。例: Go の日付フォーマット系をポートするなら、JavaScript の Date を受け取り string を返す形にする。
locutus.objectsAsArrays を有効にすると、プレーンな JS オブジェクトを連想配列として扱う挙動になる。
src/ 以下は言語ごとにディレクトリが分かれており、各言語内で array / strings / math / json / url などのモジュールに分類されている。型定義は index.d.ts で php, golang, python, ruby, c の名前空間として公開されている。
| 言語 | 主なモジュール例 |
|---|---|
php | array, strings, math, json, _var, datetime, url |
golang | strings(Contains, Join, Split, ToLower, Trim 等) |
python | string(ascii_letters, capwords 等), math(factorial, gcd, sqrt 等), re |
ruby | Math, String, Array |
c | math, stdio, ctype, stdlib, string |
clojure | core(reduce_kv, get_in, partition 等), Math, string |
npm install locutus
必要な関数だけをパス指定で import する。
import { sprintf } from 'locutus/php/strings/sprintf'
const effectiveness = 'futile'
console.log(sprintf('Resistance is %s', effectiveness))
// Resistance is futile
import { Contains } from 'locutus/golang/strings/Contains'
console.log(Contains('Locutus', 'cut')) // true
公式サイトの「Module JS / Standalone JS」スニペットは、広く使われているブラウザをベースラインにしている。アプリが古いブラウザを対象にする場合は、TypeScript/Babel/SWC/esbuild でトランスパイルし、必要な polyfill を自前で入れて検証する。Locutus はスニペットに polyfill を注入しない。
yarn check— format + lint + testyarn test:parity— 他言語との挙動照合yarn test— フルテストyarn lint— Biomeyarn fix:biome— 自動修正
バージョニングはプラグマティック: 関数レベルのパリティ修正も patch がデフォルト。詳細は CONTRIBUTING.md#versioning を参照。
- locutus.io — 公式サイト・関数一覧
- GitHub: locutusjs/locutus
- npm: locutus
ライセンスは MIT。ただし src/php/bc/ と src/php/_helpers/_bc.js は PHP の bcmath/Libbcmath 由来のため LGPL-2.1。