Initial Dever 0.0.1
This commit is contained in:
commit
81233d098c
1479 files changed
+163782
No files matched your search
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"lib": ["pip:markdown@3.8.2"],
|
||||
"log": { "level": "info" }
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
# Markdown 渲染
|
||||
|
||||
用外部 Markdown 库实现渲染,通过 fake 测试成功与拒绝。
|
||||
|
||||
- [Markdown 适配器](doc/adapter.md)
|
||||
- [Markdown 命令](doc/api.md)
|
||||
- [业务操作](doc/app.md)
|
||||
- [外部接口](doc/port.md)
|
||||
- [调用流程](link.md)
|
||||
@@ -0,0 +1,3 @@
|
||||
external pip "python/render.py" {
|
||||
lib "markdown@3.8.2"
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
cmd render = app.render
|
||||
@@ -0,0 +1,8 @@
|
||||
type RenderResult {
|
||||
Rendered(html: Text)
|
||||
error Rejected(message: Text)
|
||||
}
|
||||
|
||||
render(source: Text) (html: Text) {
|
||||
html = port.render(source)
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
# Markdown 适配器
|
||||
|
||||
使用 `python/render.py` 和锁定的 Markdown 库实现渲染。第三方库与 Worker 资源须先准备,测试中的 fake 不依赖它们。
|
||||
@@ -0,0 +1,5 @@
|
||||
# Markdown 命令
|
||||
|
||||
## document.markup.api.render
|
||||
|
||||
调用外部组件把 Markdown 转为 HTML。
|
||||
@@ -0,0 +1,9 @@
|
||||
# 业务操作
|
||||
|
||||
## document.markup.RenderResult
|
||||
|
||||
Markdown 渲染成功或业务拒绝;拒绝包含原因。
|
||||
|
||||
## document.markup.render
|
||||
|
||||
调用外部渲染器把 Markdown 转为 HTML;渲染器可拒绝输入。
|
||||
@@ -0,0 +1,5 @@
|
||||
# 外部接口
|
||||
|
||||
## document.markup.port.render
|
||||
|
||||
外部 Markdown 渲染操作,失败类型为 RenderResult。
|
||||
@@ -0,0 +1,17 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"context"
|
||||
|
||||
"github.com/yuin/goldmark"
|
||||
)
|
||||
|
||||
func Render(ctx context.Context, payload any, setting any) (any, error) {
|
||||
var output bytes.Buffer
|
||||
source := payload.(map[string]any)["source"].(string)
|
||||
if err := goldmark.Convert([]byte(source), &output); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return map[string]any{"html": output.String()}, nil
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
import { marked } from 'marked';
|
||||
|
||||
export async function render(payload, setting, signal) {
|
||||
return { html: await marked.parse(payload.source) };
|
||||
}
|
||||
@@ -0,0 +1,114 @@
|
||||
<!-- Generated by dever inspect --links. Do not edit. -->
|
||||
<!-- source-sha256: 43bec2fc499db07b0488aa4e6d1775a75b4d28f1a575072696eba0c215ae34a6 -->
|
||||
|
||||
# document.markup
|
||||
|
||||
按求值顺序展示调用、分支和任务调度,包含 API 与自动 REST 入口。点击节点打开源码;双框为调用,虚线为调度或错误路径。外部库和驱动不展开。
|
||||
|
||||
图不是某次运行的日志,分句和 Adapter 按输入或配置选择。修改源码后运行 `dever inspect . --links`。
|
||||
|
||||
## 入口
|
||||
|
||||
- CMD [document.markup.api.render](api.dever#L1) → [document.markup.render](app.dever#L6)
|
||||
|
||||
## 外部调用方
|
||||
|
||||
当前加载的源码中没有已收录的外部调用。
|
||||
|
||||
## 能力与内部调用
|
||||
|
||||
### document.markup.RenderResult
|
||||
|
||||
定义:[app.dever:1:1](app.dever#L1,1)
|
||||
|
||||
没有已收录的下游调用。
|
||||
|
||||
### document.markup.adapter.render
|
||||
|
||||
定义:[adapter.dever:1:1](adapter.dever#L1,1)
|
||||
|
||||
<a id="flow-97bf2a6af81a831b-1"></a>
|
||||
|
||||
```mermaid
|
||||
flowchart TD
|
||||
n0(["render"])
|
||||
click n0 href "adapter.dever#L1,1" "打开源码"
|
||||
n1(["返回"])
|
||||
n3[["外部 pip Worker 边界:render(受检协议与结果)"]]
|
||||
click n3 href "adapter.dever#L1,1" "打开源码"
|
||||
n4(["声明的业务错误或 Worker 故障向调用方传播"])
|
||||
n0 --> n3
|
||||
n3 -->|"成功"| n1
|
||||
n3 -->|"失败"| n4
|
||||
```
|
||||
|
||||
没有已收录的下游调用。
|
||||
|
||||
### document.markup.api.render
|
||||
|
||||
定义:[api.dever:1:1](api.dever#L1,1)
|
||||
|
||||
<a id="flow-b479961e7bdb93bd-1"></a>
|
||||
|
||||
```mermaid
|
||||
flowchart TD
|
||||
n0(["document.markup.api.render"])
|
||||
click n0 href "api.dever#L1,14" "打开源码"
|
||||
n1[["document.markup.render"]]
|
||||
click n1 href "api.dever#L1,14" "打开源码"
|
||||
n2(["返回命令结果;未捕获错误终止命令"])
|
||||
n0 --> n1
|
||||
n1 --> n2
|
||||
```
|
||||
|
||||
<details>
|
||||
<summary>源码与子流程</summary>
|
||||
|
||||
| 节点 | 源码 | 子流程 |
|
||||
| --- | --- | --- |
|
||||
| document.markup.render | [api.dever:1:14](api.dever#L1,14) | [document.markup.render](link.md#flow-1e0e90ddee897072-1) |
|
||||
|
||||
</details>
|
||||
|
||||
| 目标 | 归属 | 方式 | 调用位置 |
|
||||
| --- | --- | --- | --- |
|
||||
| [document.markup.render](app.dever#L6) | 领域内 | CMD 绑定 | [api.dever:1:14](api.dever#L1,14) |
|
||||
|
||||
### document.markup.port.render
|
||||
|
||||
定义:[port.dever:1:1](port.dever#L1,1)
|
||||
|
||||
没有已收录的下游调用。
|
||||
|
||||
### document.markup.render
|
||||
|
||||
定义:[app.dever:6:1](app.dever#L6,1)
|
||||
|
||||
<a id="flow-1e0e90ddee897072-1"></a>
|
||||
|
||||
```mermaid
|
||||
flowchart TD
|
||||
n0(["render"])
|
||||
click n0 href "app.dever#L6,1" "打开源码"
|
||||
n1(["返回"])
|
||||
n3[["document.markup.adapter.render"]]
|
||||
click n3 href "app.dever#L7,10" "打开源码"
|
||||
n4["赋值 html"]
|
||||
click n4 href "app.dever#L7,10" "打开源码"
|
||||
n0 --> n3
|
||||
n3 --> n4
|
||||
n4 --> n1
|
||||
```
|
||||
|
||||
<details>
|
||||
<summary>源码与子流程</summary>
|
||||
|
||||
| 节点 | 源码 | 子流程 |
|
||||
| --- | --- | --- |
|
||||
| document.markup.adapter.render | [app.dever:7:10](app.dever#L7,10) | [document.markup.adapter.render](link.md#flow-97bf2a6af81a831b-1) |
|
||||
|
||||
</details>
|
||||
|
||||
| 目标 | 归属 | 方式 | 调用位置 |
|
||||
| --- | --- | --- | --- |
|
||||
| [document.markup.adapter.render](adapter.dever#L1) | 领域内 | 调用 | [app.dever:7:10](app.dever#L7,10) |
|
||||
@@ -0,0 +1 @@
|
||||
render(source: Text) (html: Text) fails app.RenderResult
|
||||
@@ -0,0 +1,5 @@
|
||||
import markdown
|
||||
|
||||
|
||||
async def render(payload, setting):
|
||||
return {"html": markdown.markdown(payload["source"])}
|
||||
@@ -0,0 +1,16 @@
|
||||
rejected() () {
|
||||
verify(result(app.render("rejected input")))
|
||||
}
|
||||
|
||||
port.render(source: Text) (html: Text) {
|
||||
assertEq(source, "rejected input")
|
||||
fail(app.RenderResult.Rejected("invalid document"))
|
||||
}
|
||||
|
||||
verify(value: app.RenderResult.Rejected(message)) () recover("test verifies declared rejection") {
|
||||
assertEq(message, "invalid document")
|
||||
}
|
||||
|
||||
verify(value: app.RenderResult.Rendered(html)) () recover("test verifies declared rejection") {
|
||||
assert(false)
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
rendered() () {
|
||||
assertEq(app.render("# Report"), "<h1>Report</h1>")
|
||||
}
|
||||
|
||||
port.render(source: Text) (html: Text) {
|
||||
assertEq(source, "# Report")
|
||||
html = "<h1>Report</h1>"
|
||||
}
|
||||
Reference in new issue
Block a user