@milcho0604/velog-mcp 0.6.1 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +25 -0
- package/README.ko.md +7 -6
- package/README.md +7 -6
- package/dist/index.d.ts +2 -2
- package/dist/index.js +6 -2
- package/dist/index.js.map +1 -1
- package/dist/render/index.d.ts +3 -0
- package/dist/render/index.js +5 -0
- package/dist/render/index.js.map +1 -1
- package/dist/render/sequence.d.ts +93 -0
- package/dist/render/sequence.js +946 -0
- package/dist/render/sequence.js.map +1 -0
- package/dist/tools/images.js +111 -1
- package/dist/tools/images.js.map +1 -1
- package/docs/tools.md +86 -4
- package/npm-shrinkwrap.json +2 -2
- package/package.json +4 -2
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,30 @@
|
|
|
4
4
|
**무엇이 깨져 있었는지**를 먼저 적는다. 형식은 [Keep a Changelog](https://keepachangelog.com/ko/1.1.0/),
|
|
5
5
|
버전은 [유의적 버전](https://semver.org/lang/ko/)을 따른다.
|
|
6
6
|
|
|
7
|
+
## [0.7.0] — 2026-08-24
|
|
8
|
+
|
|
9
|
+
### 추가
|
|
10
|
+
|
|
11
|
+
- **시퀀스 다이어그램 도구 `velog_render_sequence` 를 넣었다.** 기존 `velog_render_diagram`
|
|
12
|
+
으로도 좌표를 손으로 주면 그려지긴 했다. 그런데 구성도는 좌표가 자유로운 반면
|
|
13
|
+
시퀀스는 열이 참가자, 행이 시간이라 좌표에 의미가 있다. 같은 도구에 얹으면 메시지
|
|
14
|
+
하나를 끼워 넣을 때마다 그 아래 y 를 전부 다시 계산해야 한다. 그래서 도구를 나눴고,
|
|
15
|
+
이쪽은 **좌표를 아예 받지 않는다** — 참가자와 순서 있는 메시지만 받고 열 간격,
|
|
16
|
+
행 높이, 라벨 줄바꿈, 활성 막대, 묶음 상자를 전부 실측으로 정한다.
|
|
17
|
+
|
|
18
|
+
글자를 줄여 맞추지 않고 **글자에 맞춰 자리를 넓힌다.** 라벨이 두 열 사이에 안 들어가면
|
|
19
|
+
그 구간의 열 간격을 늘리고, 길면 접고, 접힌 만큼 그 행을 높인다.
|
|
20
|
+
|
|
21
|
+
`velog_render_diagram` 은 손대지 않았다. 좌표계가 달라서 한 도구에 담을 수 없다.
|
|
22
|
+
|
|
23
|
+
### 알아둘 것
|
|
24
|
+
|
|
25
|
+
- 기존 도구로 생명선을 그리면 **끝에 화살촉이 달린다.** 모든 선에 `marker-end` 를
|
|
26
|
+
무조건 붙이기 때문이고, 이게 도구를 나눈 이유 중 하나다. 새 도구는 붙이지 않는다.
|
|
27
|
+
- 자가감사는 기하만 본다. 만들면서 나온 결함 여섯 개 중 **셋은 감사를 통과한 채**
|
|
28
|
+
눈으로 잡았다(칩이 활성 막대에 가려짐, 배지가 이름을 덮음, 묶음 상자가 관계없는
|
|
29
|
+
열까지 감쌈). 통과가 곧 좋은 그림이라는 뜻이 아니다.
|
|
30
|
+
|
|
7
31
|
## [0.6.1] — 2026-08-23
|
|
8
32
|
|
|
9
33
|
### 추가
|
|
@@ -109,5 +133,6 @@
|
|
|
109
133
|
|
|
110
134
|
- 첫 npm 공개 발행.
|
|
111
135
|
|
|
136
|
+
[0.7.0]: https://github.com/milcho0604/velog-mcp/releases/tag/v0.7.0
|
|
112
137
|
[0.6.1]: https://github.com/milcho0604/velog-mcp/releases/tag/v0.6.1
|
|
113
138
|
[0.6.0]: https://github.com/milcho0604/velog-mcp/releases/tag/v0.6.0
|
package/README.ko.md
CHANGED
|
@@ -63,7 +63,7 @@ npm 에 올려뒀으니 클론할 것 없이 MCP 클라이언트가 `npx` 로
|
|
|
63
63
|
|
|
64
64
|
```bash
|
|
65
65
|
claude mcp add velog -e VELOG_REFRESH_TOKEN=여기에_토큰 \
|
|
66
|
-
-- npx -y @milcho0604/velog-mcp@0.
|
|
66
|
+
-- npx -y @milcho0604/velog-mcp@0.7.0
|
|
67
67
|
```
|
|
68
68
|
|
|
69
69
|
이 방식은 토큰이 클라이언트 설정 파일에 남는다. 위의 플러그인 방식은 키체인에 넣는다.
|
|
@@ -85,7 +85,7 @@ MCP 클라이언트 설정 파일(`claude_desktop_config.json`, `.mcp.json` 등)
|
|
|
85
85
|
"mcpServers": {
|
|
86
86
|
"velog": {
|
|
87
87
|
"command": "npx",
|
|
88
|
-
"args": ["-y", "@milcho0604/velog-mcp@0.
|
|
88
|
+
"args": ["-y", "@milcho0604/velog-mcp@0.7.0"],
|
|
89
89
|
"env": {
|
|
90
90
|
"VELOG_REFRESH_TOKEN": "여기에 토큰"
|
|
91
91
|
}
|
|
@@ -98,7 +98,7 @@ Claude Code CLI 라면:
|
|
|
98
98
|
|
|
99
99
|
```bash
|
|
100
100
|
claude mcp add velog -e VELOG_REFRESH_TOKEN=여기에_토큰 \
|
|
101
|
-
-- npx -y @milcho0604/velog-mcp@0.
|
|
101
|
+
-- npx -y @milcho0604/velog-mcp@0.7.0
|
|
102
102
|
```
|
|
103
103
|
|
|
104
104
|
로컬 체크아웃으로 돌리려면 command 를
|
|
@@ -138,7 +138,7 @@ claude mcp add velog -e VELOG_REFRESH_TOKEN=여기에_토큰 \
|
|
|
138
138
|
|
|
139
139
|
| 환경변수 | 되는 것 |
|
|
140
140
|
| --- | --- |
|
|
141
|
-
| *(설정 없음)* | 전체 읽기 · 초안 작성 · **비공개 발행** · 그림 생성·업로드 — 도구
|
|
141
|
+
| *(설정 없음)* | 전체 읽기 · 초안 작성 · **비공개 발행** · 그림 생성·업로드 — 도구 22개 |
|
|
142
142
|
| `VELOG_ALLOW_PUBLIC=1` | …**공개 발행** 추가 (`is_private` 파라미터가 생김) |
|
|
143
143
|
| `VELOG_ALLOW_PROFILE=1` | …**프로필 수정** 추가 (도구 5개) |
|
|
144
144
|
|
|
@@ -187,7 +187,7 @@ if (count >= 10) {
|
|
|
187
187
|
|
|
188
188
|
## 도구
|
|
189
189
|
|
|
190
|
-
|
|
190
|
+
22개. 벨로그 상태를 바꾸는 건 그중 10개뿐이다.
|
|
191
191
|
|
|
192
192
|
### 읽기 — 인증 불필요
|
|
193
193
|
|
|
@@ -276,6 +276,7 @@ series_id: "e53810ca-..." ← id 를 알면 이쪽이 우선
|
|
|
276
276
|
| 도구 | 효과 |
|
|
277
277
|
| --- | --- |
|
|
278
278
|
| `velog_render_diagram` | 구성도·흐름도를 그려 올린다 |
|
|
279
|
+
| `velog_render_sequence` | 참가자와 순서 있는 메시지로 시퀀스 다이어그램을 그린다 |
|
|
279
280
|
| `velog_render_cover` | 글 표지 카드(1200×630)를 만든다 |
|
|
280
281
|
| `velog_upload_image` | 로컬 이미지를 올리고 마크다운을 돌려준다 |
|
|
281
282
|
|
|
@@ -306,7 +307,7 @@ bbox 로 정하므로 그림이 잘릴 수가 없다.
|
|
|
306
307
|
|
|
307
308
|
**크롬이 필요하다** (크로미움 계열이면 된다: Edge·Brave·Chromium). macOS·리눅스·
|
|
308
309
|
윈도우에서 알아서 찾고, 다른 데 있으면 `VELOG_CHROME_PATH` 로 지정한다.
|
|
309
|
-
이 중 브라우저를 쓰는 건 `velog_render_diagram
|
|
310
|
+
이 중 브라우저를 쓰는 건 `velog_render_diagram`, `velog_render_sequence`, `velog_render_cover` **셋뿐**이고,
|
|
310
311
|
`velog_upload_image` 를 포함한 나머지 19개는 크롬 없이 동작한다.
|
|
311
312
|
|
|
312
313
|
**비용은 실측해서 밝혀 둔다.** 그림 한 장에 크롬 9~11개·최대 약 1GB 를 3~4초 쓰고
|
package/README.md
CHANGED
|
@@ -68,7 +68,7 @@ Published on npm, so nothing to clone — your MCP client runs it via `npx`. See
|
|
|
68
68
|
|
|
69
69
|
```bash
|
|
70
70
|
claude mcp add velog -e VELOG_REFRESH_TOKEN=your_refresh_token \
|
|
71
|
-
-- npx -y @milcho0604/velog-mcp@0.
|
|
71
|
+
-- npx -y @milcho0604/velog-mcp@0.7.0
|
|
72
72
|
```
|
|
73
73
|
|
|
74
74
|
The token stays in your client's config file here. The plugin route above puts it in
|
|
@@ -91,7 +91,7 @@ Add this to your MCP client config (`claude_desktop_config.json`, `.mcp.json`,
|
|
|
91
91
|
"mcpServers": {
|
|
92
92
|
"velog": {
|
|
93
93
|
"command": "npx",
|
|
94
|
-
"args": ["-y", "@milcho0604/velog-mcp@0.
|
|
94
|
+
"args": ["-y", "@milcho0604/velog-mcp@0.7.0"],
|
|
95
95
|
"env": {
|
|
96
96
|
"VELOG_REFRESH_TOKEN": "your_refresh_token"
|
|
97
97
|
}
|
|
@@ -104,7 +104,7 @@ With the Claude Code CLI:
|
|
|
104
104
|
|
|
105
105
|
```bash
|
|
106
106
|
claude mcp add velog -e VELOG_REFRESH_TOKEN=your_refresh_token \
|
|
107
|
-
-- npx -y @milcho0604/velog-mcp@0.
|
|
107
|
+
-- npx -y @milcho0604/velog-mcp@0.7.0
|
|
108
108
|
```
|
|
109
109
|
|
|
110
110
|
To run a local checkout instead, swap the command for
|
|
@@ -148,7 +148,7 @@ and blog stats all work unauthenticated.
|
|
|
148
148
|
|
|
149
149
|
| Environment | What you get |
|
|
150
150
|
| --- | --- |
|
|
151
|
-
| *(nothing set)* | Read everything · create drafts · **publish privately** · draw and upload images —
|
|
151
|
+
| *(nothing set)* | Read everything · create drafts · **publish privately** · draw and upload images — 22 tools |
|
|
152
152
|
| `VELOG_ALLOW_PUBLIC=1` | …plus **public publishing** (adds an `is_private` parameter) |
|
|
153
153
|
| `VELOG_ALLOW_PROFILE=1` | …plus **profile editing** (adds 5 tools) |
|
|
154
154
|
|
|
@@ -199,7 +199,7 @@ Full reasoning: [docs/security.md](docs/security.md)
|
|
|
199
199
|
|
|
200
200
|
## Tools
|
|
201
201
|
|
|
202
|
-
|
|
202
|
+
22 tools. Only 10 of them change anything on Velog.
|
|
203
203
|
|
|
204
204
|
### Reading — no auth required
|
|
205
205
|
|
|
@@ -285,6 +285,7 @@ omit it.
|
|
|
285
285
|
| Tool | Effect |
|
|
286
286
|
| --- | --- |
|
|
287
287
|
| `velog_render_diagram` | Draw an architecture/flow diagram and upload it |
|
|
288
|
+
| `velog_render_sequence` | Draw a sequence diagram from participants and ordered messages |
|
|
288
289
|
| `velog_render_cover` | Draw a 1200×630 cover card for a post |
|
|
289
290
|
| `velog_upload_image` | Upload a local image file, get the Markdown back |
|
|
290
291
|
|
|
@@ -318,7 +319,7 @@ from primitive shapes. Nothing is fetched — the renderer runs with DNS disable
|
|
|
318
319
|
|
|
319
320
|
**Requires Chrome** (or any Chromium-based browser: Edge, Brave, Chromium). It is found
|
|
320
321
|
automatically on macOS/Linux/Windows; set `VELOG_CHROME_PATH` if yours lives elsewhere.
|
|
321
|
-
Only `velog_render_diagram` and `velog_render_cover` need it — `velog_upload_image`
|
|
322
|
+
Only `velog_render_diagram`, `velog_render_sequence` and `velog_render_cover` need it — `velog_upload_image`
|
|
322
323
|
just reads a local file, so it and the other 18 tools work without a browser.
|
|
323
324
|
|
|
324
325
|
**Cost, measured:** one diagram is ~1 GB peak across 9–11 Chrome processes for 3–4
|
package/dist/index.d.ts
CHANGED
|
@@ -10,7 +10,7 @@ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
|
10
10
|
import { type Capabilities } from './capabilities.ts';
|
|
11
11
|
import { VelogClient } from './client.ts';
|
|
12
12
|
export declare const SERVER_NAME = "velog-mcp";
|
|
13
|
-
export declare const SERVER_VERSION = "0.
|
|
13
|
+
export declare const SERVER_VERSION = "0.7.0";
|
|
14
14
|
export declare function createServer(client: VelogClient, capabilities?: Capabilities): McpServer;
|
|
15
15
|
/**
|
|
16
16
|
* 크롬이 있어야만 되는 도구들.
|
|
@@ -22,4 +22,4 @@ export declare function createServer(client: VelogClient, capabilities?: Capabil
|
|
|
22
22
|
* 그래서 개수를 세지 않고 **이름을 적는다.** 숫자는 코드와 따로 놀 수 있지만
|
|
23
23
|
* 이름은 테스트가 실물과 대조할 수 있다(P22).
|
|
24
24
|
*/
|
|
25
|
-
export declare const CHROME_TOOLS: readonly ["velog_render_diagram", "velog_render_cover"];
|
|
25
|
+
export declare const CHROME_TOOLS: readonly ["velog_render_diagram", "velog_render_sequence", "velog_render_cover"];
|
package/dist/index.js
CHANGED
|
@@ -28,7 +28,7 @@ import { registerImageTools } from "./tools/images.js";
|
|
|
28
28
|
export const SERVER_NAME = 'velog-mcp';
|
|
29
29
|
// ⚠️ 이 값은 네 곳이 함께 움직인다 — package.json / plugin.json / .mcp.json 의
|
|
30
30
|
// npx 핀 / 여기. 어긋나면 P8 테스트가 잡는다. 손으로 맞추지 말고 테스트를 믿을 것.
|
|
31
|
-
export const SERVER_VERSION = '0.
|
|
31
|
+
export const SERVER_VERSION = '0.7.0';
|
|
32
32
|
export function createServer(client, capabilities = { publicPublish: false, editProfile: false }) {
|
|
33
33
|
const server = new McpServer({ name: SERVER_NAME, version: SERVER_VERSION }, {
|
|
34
34
|
instructions: [
|
|
@@ -80,7 +80,11 @@ async function main() {
|
|
|
80
80
|
* 그래서 개수를 세지 않고 **이름을 적는다.** 숫자는 코드와 따로 놀 수 있지만
|
|
81
81
|
* 이름은 테스트가 실물과 대조할 수 있다(P22).
|
|
82
82
|
*/
|
|
83
|
-
export const CHROME_TOOLS = [
|
|
83
|
+
export const CHROME_TOOLS = [
|
|
84
|
+
'velog_render_diagram',
|
|
85
|
+
'velog_render_sequence',
|
|
86
|
+
'velog_render_cover',
|
|
87
|
+
];
|
|
84
88
|
/**
|
|
85
89
|
* 그 도구들이 지금 쓸 수 있는 상태인지 기동할 때 말한다.
|
|
86
90
|
*
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/render/index.d.ts
CHANGED
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
*/
|
|
14
14
|
import { type AuditReport, type DiagramSpec } from './page.ts';
|
|
15
15
|
import { type CoverAudit, type CoverSpec } from './cover.ts';
|
|
16
|
+
import { type SequenceAudit, type SequenceSpec } from './sequence.ts';
|
|
16
17
|
export interface RenderResult<A> {
|
|
17
18
|
/** 뽑아낸 PNG 경로 */
|
|
18
19
|
pngPath: string;
|
|
@@ -25,8 +26,10 @@ export interface RenderResult<A> {
|
|
|
25
26
|
bytes: number;
|
|
26
27
|
}
|
|
27
28
|
export declare function renderDiagram(spec: DiagramSpec, scale?: number): Promise<RenderResult<AuditReport>>;
|
|
29
|
+
export declare function renderSequence(spec: SequenceSpec, scale?: number): Promise<RenderResult<SequenceAudit>>;
|
|
28
30
|
export declare function renderCover(spec: CoverSpec, scale?: number): Promise<RenderResult<CoverAudit>>;
|
|
29
31
|
export { type DiagramSpec, type AuditReport, formatAudit } from './page.ts';
|
|
30
32
|
export { type CoverSpec, type CoverAudit, formatCoverAudit } from './cover.ts';
|
|
33
|
+
export { type SequenceSpec, type SequenceAudit, SEQ_KINDS, formatSequenceAudit, } from './sequence.ts';
|
|
31
34
|
export { ICON_NAMES } from './icons.ts';
|
|
32
35
|
export { TONE_NAMES } from './tones.ts';
|
package/dist/render/index.js
CHANGED
|
@@ -19,6 +19,7 @@ import { makeSerializer } from "../serial.js";
|
|
|
19
19
|
import { dumpDom, screenshot } from "./chrome.js";
|
|
20
20
|
import { MAX_AREA, MAX_DIM, buildDiagramHtml, parseAudit, } from "./page.js";
|
|
21
21
|
import { buildCoverHtml } from "./cover.js";
|
|
22
|
+
import { buildSequenceHtml, parseSequenceAudit, } from "./sequence.js";
|
|
22
23
|
/**
|
|
23
24
|
* 렌더는 한 번에 하나만 돈다.
|
|
24
25
|
*
|
|
@@ -132,6 +133,9 @@ async function render(args, parse) {
|
|
|
132
133
|
export function renderDiagram(spec, scale = 2) {
|
|
133
134
|
return serialize(() => render({ html: buildDiagramHtml(spec), basename: 'diagram', scale }, parseAudit));
|
|
134
135
|
}
|
|
136
|
+
export function renderSequence(spec, scale = 2) {
|
|
137
|
+
return serialize(() => render({ html: buildSequenceHtml(spec), basename: 'sequence', scale }, parseSequenceAudit));
|
|
138
|
+
}
|
|
135
139
|
export function renderCover(spec, scale = 2) {
|
|
136
140
|
return serialize(() => render({ html: buildCoverHtml(spec), basename: 'cover', scale }, (dom) => {
|
|
137
141
|
const match = /<title>AUDIT (\{.*?\})<\/title>/s.exec(dom);
|
|
@@ -142,6 +146,7 @@ export function renderCover(spec, scale = 2) {
|
|
|
142
146
|
}
|
|
143
147
|
export { formatAudit } from "./page.js";
|
|
144
148
|
export { formatCoverAudit } from "./cover.js";
|
|
149
|
+
export { SEQ_KINDS, formatSequenceAudit, } from "./sequence.js";
|
|
145
150
|
export { ICON_NAMES } from "./icons.js";
|
|
146
151
|
export { TONE_NAMES } from "./tones.js";
|
|
147
152
|
//# sourceMappingURL=index.js.map
|
package/dist/render/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/render/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACzE,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAGN,QAAQ,EACR,OAAO,EACP,gBAAgB,EAChB,UAAU,GACV,MAAM,WAAW,CAAC;AACnB,OAAO,EAAmC,cAAc,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/render/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 시퀀스 다이어그램 — "누가 누구에게 무엇을 언제" 만 받고 배치는 전부 계산한다.
|
|
3
|
+
*
|
|
4
|
+
* ## 왜 velog_render_diagram 과 도구를 나눴나
|
|
5
|
+
*
|
|
6
|
+
* 구성도는 **좌표계가 자유**다. 모델이 x 와 y 를 정하고 렌더러는 폭과 꺾임만 맞춘다.
|
|
7
|
+
* 시퀀스는 반대다 — 열은 참가자, 행은 시간이라 좌표가 의미를 갖는다.
|
|
8
|
+
* 같은 도구에 얹으면 모델이 매번 y 를 손으로 계산하게 되는데, 메시지 하나만
|
|
9
|
+
* 끼워 넣어도 그 아래 전부가 틀어진다. 실제로 기존 도구로 그려보고 확인한 것이다.
|
|
10
|
+
*
|
|
11
|
+
* 그래서 이 도구는 좌표를 **받지 않는다.** 참가자 목록과 순서 있는 메시지 목록만
|
|
12
|
+
* 받고 열 간격과 행 높이, 활성 막대, 프래그먼트 상자를 전부 실측으로 정한다.
|
|
13
|
+
*
|
|
14
|
+
* ## 겹치지 않는다는 보장이 어디서 오나
|
|
15
|
+
*
|
|
16
|
+
* 글자를 줄여 맞추지 않는다. 반대로 **글자에 맞춰 자리를 넓힌다.**
|
|
17
|
+
* - 라벨이 두 열 사이에 안 들어가면 그 구간의 열 간격을 늘린다
|
|
18
|
+
* - 자기호출 라벨이 옆 열을 침범하면 그 옆 간격을 늘린다
|
|
19
|
+
* - 라벨이 길면 줄바꿈하고, 줄이 늘어난 만큼 그 행을 높인다
|
|
20
|
+
* 그러고 나서 자가감사가 결과를 다시 잰다. 감사는 내 계산이 틀렸을 때 걸리라고
|
|
21
|
+
* 있는 것이지, 통과 도장이 아니다.
|
|
22
|
+
*/
|
|
23
|
+
/** 세로 열 하나 = 참가자 하나. */
|
|
24
|
+
export interface SequenceParticipant {
|
|
25
|
+
id?: string | undefined;
|
|
26
|
+
name: string;
|
|
27
|
+
sub?: string | undefined;
|
|
28
|
+
icon?: string | undefined;
|
|
29
|
+
icon_tone?: string | undefined;
|
|
30
|
+
tag?: string | undefined;
|
|
31
|
+
tag_tone?: string | undefined;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* 메시지 종류.
|
|
35
|
+
* call — 동기 호출 (실선 + 채운 화살촉)
|
|
36
|
+
* async — 비동기 발행 (실선 + 열린 화살촉)
|
|
37
|
+
* return — 응답 (점선 + 열린 화살촉). 활성 막대를 닫는다
|
|
38
|
+
* note — 선이 아니라 설명 상자. 순서 안에 끼워 넣는다
|
|
39
|
+
*/
|
|
40
|
+
export declare const SEQ_KINDS: readonly ["call", "async", "return", "note"];
|
|
41
|
+
export type SequenceKind = (typeof SEQ_KINDS)[number];
|
|
42
|
+
export interface SequenceMessage {
|
|
43
|
+
kind?: SequenceKind | undefined;
|
|
44
|
+
from: string;
|
|
45
|
+
/** note 는 생략하면 from 열에 붙는다. 주면 두 열 사이에 걸친다. */
|
|
46
|
+
to?: string | undefined;
|
|
47
|
+
label?: string | undefined;
|
|
48
|
+
}
|
|
49
|
+
/** alt, opt, loop 같은 묶음 상자. 메시지 인덱스 범위로 지정한다(양끝 포함). */
|
|
50
|
+
export interface SequenceFragment {
|
|
51
|
+
kind: string;
|
|
52
|
+
label?: string | undefined;
|
|
53
|
+
from: number;
|
|
54
|
+
to: number;
|
|
55
|
+
tone?: string | undefined;
|
|
56
|
+
}
|
|
57
|
+
export interface SequenceSpec {
|
|
58
|
+
title: string;
|
|
59
|
+
subtitle?: string | undefined;
|
|
60
|
+
participants: SequenceParticipant[];
|
|
61
|
+
messages: SequenceMessage[];
|
|
62
|
+
fragments?: SequenceFragment[] | undefined;
|
|
63
|
+
legend?: boolean | undefined;
|
|
64
|
+
/** 메시지 앞에 1. 2. 3. 을 붙인다 */
|
|
65
|
+
numbers?: boolean | undefined;
|
|
66
|
+
/** 호출/응답 짝에서 활성 막대를 뽑아 그린다 */
|
|
67
|
+
activations?: boolean | undefined;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* 캔버스 상한. page.ts 와 같은 값이고 같은 이유다 — 크기를 **설정하기 전에**
|
|
71
|
+
* 페이지 안에서 거른다. 바깥에서 막으면 이미 브라우저가 표면을 잡은 뒤라 늦는다.
|
|
72
|
+
*/
|
|
73
|
+
export declare const MAX_DIM = 6000;
|
|
74
|
+
export declare const MAX_AREA = 9000000;
|
|
75
|
+
export interface SequenceAudit {
|
|
76
|
+
w: number;
|
|
77
|
+
h: number;
|
|
78
|
+
/** 글자가 제 상자(카드나 노트나 칩)를 벗어남 — 자동 폭 계산이 틀렸다는 뜻 */
|
|
79
|
+
over: string[];
|
|
80
|
+
/** 카드끼리, 활성막대끼리, 노트끼리 겹침 — 열 간격 계산이 틀렸다는 뜻 */
|
|
81
|
+
collide: string[];
|
|
82
|
+
/** 라벨끼리 겹치거나 라벨이 카드나 노트를 가림 — 행 높이 계산이 틀렸다는 뜻 */
|
|
83
|
+
label: string[];
|
|
84
|
+
/** 화살표가 카드나 노트를 관통 — 활성막대 오프셋이 틀렸다는 뜻 */
|
|
85
|
+
cross: string[];
|
|
86
|
+
/** 프래그먼트가 제 메시지를 다 못 감쌈 — 상자 범위 계산이 틀렸다는 뜻 */
|
|
87
|
+
frame: string[];
|
|
88
|
+
}
|
|
89
|
+
export declare function buildSequenceHtml(spec: SequenceSpec): string;
|
|
90
|
+
/** `--dump-dom` 출력에서 자가감사 결과만 뽑는다. */
|
|
91
|
+
export declare function parseSequenceAudit(dom: string): SequenceAudit;
|
|
92
|
+
/** 사람이 읽는 감사 요약. */
|
|
93
|
+
export declare function formatSequenceAudit(a: SequenceAudit): string;
|