mwork

    moon.work / moon.mod manifest parsing with stable dependency topological sorting for MoonBit workspaces

    moonbit
    workspace
    manifest
    toposort
    moon.work
    Download zip
    Author
    Version
    0.1.0
    License
    MIT
    Last updated
    6 hours ago
    Downloads
    3

    Dependencies

    #chensuiyi/mwork

    moon.work / moon.mod workspace toolkit · 工作区清单工具

    解析 moon.work 成员列表与 moon.mod 清单(name / version / imports),按依赖关系做稳定拓扑排序,重写版本行。

    • parse_mod 对 import 自动剥离 @version 后缀,得到模块路径
    • topo_sort 为 Kahn 算法,平局保持 moon.work 声明顺序
    • 无 I/O:文件读写由调用方完成
    • 依赖:chensuiyi/fndash

    Parse the moon.work member list and moon.mod manifests (name / version / imports), topologically sort members by dependencies, and rewrite version lines.

    • parse_mod strips any @version suffix from imports, yielding module paths
    • topo_sort is Kahn's algorithm, stable on the moon.work declaration order
    • No I/O: callers read and write the files
    • Depends on chensuiyi/fndash

    #API

    接口 Interface说明 Description
    parse_members(text)moon.work 成员目录;Member directories from moon.work
    parse_mod(dir, text)清单 → Member;Manifest → Member
    topo_sort(selected, items)被依赖者先,稳定;Dependencies first, stable
    replace_version(text, old, next)重写首个 version 行;Rewrite the first version line

    License: MIT

    ManifestError

    pub(all) suberror ManifestError {
    Missing(dir~ : String)
    }

    ManifestError::output

    fn ManifestError::output(self : ManifestError, logger : &Logger) -> Unit

    ManifestError::to_string

    fn ManifestError::to_string(self : ManifestError) -> String

    Member

    pub(all) struct Member {
    dir : String
    name : String
    version : String
    imports : Array[String]
    }

    One workspace member: directory, module name, current version, and the member modules it imports.

    parse_members

    fn parse_members(text : String) -> Array[String]

    Directory names from the members list of moon.work.

    parse_mod

    fn parse_mod(dir : String, text : String) -> Member raise ManifestError

    Parse one moon.mod text: module name, version and the module paths in the import list (any @version suffix stripped). Raises Missing when name or version cannot be found.

    replace_version

    fn replace_version(text : String, old : String, next : String) -> String

    Replace version = "old" with version = "next" in a moon.mod text. Only the first exact-match line is rewritten; the caller reads and writes the file.

    topo_sort

    fn topo_sort(selected : Array[Member], items : Array[Member]) -> Array[Member]

    Order selected members so that a member never publishes before a selected member it imports. Stable: ties keep the moon.work member order.