static_search API
パッケージ Luna-Flow/mooncake-impact-factor/static_search は、静的公開モードの MoonBit 側を担います。静的検索ランタイムのバージョンタグと、検索で大文字と小文字を区別しないためのテキスト正規化です。JavaScript ターゲット専用で、JavaScript からインポートできる ES モジュールとしてもリンクされます。
ソース: src/static_search/search.mbt。ブラウザーで動く検索インデックスとクエリアルゴリズムは static_search の設計 で説明しています。
moon.pkg でパッケージをインポートします。インポートする側のパッケージも JavaScript ターゲット向けにビルドする必要があります。
import {
"Luna-Flow/mooncake-impact-factor/static_search",
}
supported_targets = "js"
runtime_version
runtime_version は静的検索ランタイムのバージョンタグを返します。
pub fn runtime_version() -> String
現在のタグは "static-search-js-v1" です。コンパイル済みモジュールを読み込んだ JavaScript コードは、これを読んでどのランタイムかを判別できます。
test "runtime_version" {
inspect(@static_search.runtime_version(), content="static-search-js-v1")
}
normalize_text
normalize_text は小文字に変換した input を返します。
pub fn normalize_text(String) -> String
変換には JavaScript の String.prototype.toLowerCase を使います。これは Unicode の既定の小文字マッピングで、ユーザーのロケールには依存しません。文字列の長さが変わることがあります("İ" は UTF-16 の 2 コード単位の "i̇" になります)。空白の除去や詰め、アクセント記号の除去は行いません。
test "normalize_text" {
inspect(@static_search.normalize_text("MoonBit JSON"), content="moonbit json")
inspect(@static_search.normalize_text(" Mixed Case "), content=" mixed case ")
}
JavaScript モジュール
パッケージの moon.pkg が次の設定でリンクしているため、moon build src/static_search --target js は ES モジュールも書き出します。
options(
link: {
"js": {
"exports": [ "runtime_version", "normalize_text" ],
"format": "esm",
},
},
)
モジュールは 2 つの関数を MoonBit と同じ名前でエクスポートします。
| エクスポート | JavaScript のシグネチャ |
|---|---|
runtime_version | () => string |
normalize_text | (input: string) => string |
import { runtime_version, normalize_text } from
"./_build/js/debug/build/static_search/static_search.js";
runtime_version(); // "static-search-js-v1"
normalize_text("Json Parser"); // "json parser"