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 默认小写映射,与用户的区域设置无关。它可能改变字符串长度("İ" 变为 "i̇",即两个 UTF-16 码元)。它不会去除或合并空白,也不会移除重音符号。
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 build src/static_search --target js 还会写出一个 ES 模块,因为该包的 moon.pkg 用以下配置链接它
options(
link: {
"js": {
"exports": [ "runtime_version", "normalize_text" ],
"format": "esm",
},
},
)
该模块以 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"