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"