MoonBit-native OpenAPI contract validation and deterministic mock toolkit
Dependencies
加载 OpenAPI -> 编译路由与引用 -> 校验 HTTP 交互 -> 生成确定性 Mock -> 回放契约用例
git clone https://github.com/Han-Wentao/mooncontract.git
cd mooncontract
moon check --target wasm-gc --deny-warn
moon test --target wasm-gcmoon run cmd/mooncontract --target native -- \
lint --spec examples/petstore/openapi.yamlmoon run cmd/mooncontract --target native -- \
check \
--spec examples/petstore/openapi.yaml \
--cases examples/petstore/cases.jsonmoon run cmd/mooncontract --target native -- \
mock \
--spec examples/petstore/openapi.yaml \
--request examples/petstore/request.json \
--seed 42moon run cmd/mooncontract --target native -- \
serve --spec examples/petstore/openapi.yaml --port 4010
curl http://127.0.0.1:4010/pets/7mooncontract lint --spec FILE [--format text|json]
mooncontract check --spec FILE --cases FILE [--format text|json] [--seed N]
mooncontract mock --spec FILE --request FILE [--seed N] [--status CODE]
mooncontract serve --spec FILE [--host HOST] [--port PORT] [--seed N]import {
"Han-Wentao/mooncontract/src/openapi",
"Han-Wentao/mooncontract/src/contract",
"Han-Wentao/mooncontract/src/mock",
}let document = @openapi.parse_json(source).unwrap()
let contract = @contract.compile(document).unwrap()
let request = @contract.HttpRequest::new(@openapi.Get, "/pets/7")
let validation = contract.validate_request(request)
let response = @mock.MockEngine::new(contract).respond(request)moon fmt --check
moon check --target wasm-gc --deny-warn
moon check --target wasm --deny-warn
moon check --target js --deny-warn
moon check --target native --deny-warn
moon test --target wasm-gc
moon test --target nativeMoonBit-native OpenAPI contract validation and deterministic mock toolkit
Dependencies