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"