@cardenelabs/dragon 0.14.0 → 0.15.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/dist/index.cjs +33 -8
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +144 -119
- package/dist/index.d.ts +144 -119
- package/dist/index.js +33 -8
- package/dist/index.js.map +1 -1
- package/package.json +11 -11
- package/src/compile.ts +70 -9
- package/src/index.ts +11 -0
- package/src/types.ts +13 -1
- package/src/v05/parser.ts +15 -7
package/dist/index.d.cts
CHANGED
|
@@ -1,4 +1,136 @@
|
|
|
1
1
|
import { CdlDiagram, NodeKind, Tone, EdgeStyle, LaidDiagram } from '@cardenelabs/cdl';
|
|
2
|
+
export { CdlDiagram } from '@cardenelabs/cdl';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Text DSL v0.5 parser
|
|
6
|
+
*
|
|
7
|
+
* 設計方針:
|
|
8
|
+
* - keyword は英語のみ (title / type / actors / flow / states / animation / step / focus / tween / set / badge)
|
|
9
|
+
* - 値の日本語は quote 必須 (`title: "API call"` / `step: "request" 1.5s`)
|
|
10
|
+
* - YAML 風 + 短縮 keyword + 箇条書き構造
|
|
11
|
+
* - Mermaid 知ってる人にもゼロ学習、 非エンジニアにも直感的
|
|
12
|
+
*
|
|
13
|
+
* syntax 例:
|
|
14
|
+
*
|
|
15
|
+
* title: "API call"
|
|
16
|
+
* type: sequence
|
|
17
|
+
*
|
|
18
|
+
* actors:
|
|
19
|
+
* - Client
|
|
20
|
+
* - API: function
|
|
21
|
+
* - DB
|
|
22
|
+
*
|
|
23
|
+
* flow:
|
|
24
|
+
* - Client -> API: "GET /items"
|
|
25
|
+
* - API -> DB: "SELECT" (success)
|
|
26
|
+
*
|
|
27
|
+
* states:
|
|
28
|
+
* request_count: 0
|
|
29
|
+
* row_count: 0
|
|
30
|
+
*
|
|
31
|
+
* animation:
|
|
32
|
+
* - step: "request" 1.5s
|
|
33
|
+
* focus: [Client, API]
|
|
34
|
+
* tween:
|
|
35
|
+
* request_count: 0 -> 1
|
|
36
|
+
* badge: "request"
|
|
37
|
+
*
|
|
38
|
+
* - step: "query" 1.5s
|
|
39
|
+
* focus: [API, DB]
|
|
40
|
+
* tween:
|
|
41
|
+
* row_count: 0 -> 20
|
|
42
|
+
* badge: "query"
|
|
43
|
+
*
|
|
44
|
+
* 出力は v0.4 と同じ DslDocument。 既存 compile.ts で CdlDiagram に変換できる。
|
|
45
|
+
*/
|
|
46
|
+
|
|
47
|
+
type V05ParseResult = {
|
|
48
|
+
ok: true;
|
|
49
|
+
doc: DslDocument;
|
|
50
|
+
} | {
|
|
51
|
+
ok: false;
|
|
52
|
+
errors: DslError[];
|
|
53
|
+
};
|
|
54
|
+
/**
|
|
55
|
+
* 記法が受ける top-level の項目 (#1190)。
|
|
56
|
+
*
|
|
57
|
+
* 読めない行の案内と、記法一覧が全て載せているかの検査が、どちらもここを見る。 一覧に手で
|
|
58
|
+
* 書くと、項目を足した時に案内か一覧のどちらかが取り残される (実際に `states` / `values` が
|
|
59
|
+
* 一覧に 1 件も無い状態で放置されていた)。
|
|
60
|
+
*/
|
|
61
|
+
declare const TOP_LEVEL_KEYS: readonly ["title", "type", "actors", "flow", "states", "values", "animation", "viewport", "lanes", "groups", "eyebrow", "axes", "readouts", "inputs", "formulas", "events", "scrolls"];
|
|
62
|
+
/** 受け付ける図種。 記法一覧はここを見る。 */
|
|
63
|
+
declare const PRESET_TYPES: ReadonlySet<PresetType>;
|
|
64
|
+
/**
|
|
65
|
+
* 記法だけが持つ種類。 描画側には無いが、 図種ごとの組み立てで意味を持つ。
|
|
66
|
+
*
|
|
67
|
+
* `contract` / `eoa` / `multisig` / `proxy` / `library` / `interface` は Solidity 図の
|
|
68
|
+
* 役割分けに、 `entity` / `state` は ER 図と状態遷移図に使う。
|
|
69
|
+
*
|
|
70
|
+
* **描画側へ渡す前に必ず読み替える** (`compile.ts` の `描ける種別`)。 読み替えを通さずに渡すと
|
|
71
|
+
* 図の組み立てが落ちる = 描画側は知らない種類の大きさを引けない (#1420 で実測、
|
|
72
|
+
* `Cannot read properties of undefined (reading 'h')`)。
|
|
73
|
+
*/
|
|
74
|
+
declare const DSL_ONLY_KINDS: readonly ["entity", "state", "contract", "eoa", "multisig", "proxy", "library", "interface"];
|
|
75
|
+
/** 記法だけが持つ種類。 描画側の `NodeKind` には含まれない */
|
|
76
|
+
type DslOnlyKind = (typeof DSL_ONLY_KINDS)[number];
|
|
77
|
+
/**
|
|
78
|
+
* 受け付ける箱の種類。 描画できる種類 (cdl の `NODE_KINDS`) に、 記法だけが持つ種類を足す。
|
|
79
|
+
*
|
|
80
|
+
* 以前は手書きの 31 種だった。 描画できる 90 種のうち 78 種が記法から書けず、 部品名として
|
|
81
|
+
* 扱われて「そんな部品は無い」 と警告が出るだけだった。 描画側を出所に加えることで
|
|
82
|
+
* 「描画できるものは書ける」 が成立する。
|
|
83
|
+
*/
|
|
84
|
+
/**
|
|
85
|
+
* 記法が受理する種類の全体。 これに載っていない種類は見本 (パーツ) の候補になる。
|
|
86
|
+
*
|
|
87
|
+
* 画面側が「本文が見本を使っているか」 を判定するのに使う (#1022)。 手書きの一覧を
|
|
88
|
+
* 別に持つと、種類が増えた時にそちらだけ取り残されて余分な読み込みが起きる。
|
|
89
|
+
*/
|
|
90
|
+
declare const NODE_KIND_VALID: ReadonlySet<string>;
|
|
91
|
+
declare function parseTextDslV05(src: string): V05ParseResult;
|
|
92
|
+
/**
|
|
93
|
+
* 対応する引用符だけを外す。
|
|
94
|
+
*
|
|
95
|
+
* 先頭と末尾を別々に外すと、対応しない形 (`'300,200"`) が中身だけ取り出せてしまう。
|
|
96
|
+
* 画面側も同じ関数を使う (#1028) = 別々に持つと、片方だけが読める本文ができる。
|
|
97
|
+
*/
|
|
98
|
+
declare function stripQuotes(s: string): string;
|
|
99
|
+
/**
|
|
100
|
+
* 段に書ける項目の英語名。 `parsePhase` が受け付ける名前の入口でも使う。
|
|
101
|
+
*
|
|
102
|
+
* 誤りの案内で使うほか、**見本が値の名前にこの語を使っていないか** を見るのにも使う
|
|
103
|
+
* (#1330)。 段の項目と値は階層が違うので衝突しないが、同じ語が 2 つの意味で並ぶと
|
|
104
|
+
* 見本を読む人が階層から意味を判断することになる。
|
|
105
|
+
*/
|
|
106
|
+
declare const PHASE_ITEM_WORDS: readonly ["focus", "badge", "body", "description", "tween", "set", "draw"];
|
|
107
|
+
/**
|
|
108
|
+
* `draw:` に書ける語と、その語が効く図種 (#1312 / #1314)。
|
|
109
|
+
*
|
|
110
|
+
* **語と図種の対応をここ 1 箇所で持つ**。 受ける語の一覧 (`DRAW_WORDS`) も、組み立て側が見る
|
|
111
|
+
* 図種の一覧 (`DRAWABLE_DOC_TYPES`) も、この表から導く。 3 つを別々に並べると、語を足した時に
|
|
112
|
+
* どれかが古いまま残る (#1310 / #1304 で 3 度直した形)。
|
|
113
|
+
*
|
|
114
|
+
* | 語 | 図種 | 起点 |
|
|
115
|
+
* |---|---|---|
|
|
116
|
+
* | `line` | `line` | 左端から右へ線が伸びる |
|
|
117
|
+
* | `bar` | `bar` | 横軸から上へ棒が伸びる |
|
|
118
|
+
* | `pie` | `pie` | 12 時から時計回りに扇が開く |
|
|
119
|
+
* | `journey` | `journey` | 左端から右へ気持ちの線が伸びる |
|
|
120
|
+
* | `mind` | `mind` | 中心から外へ枝が伸びる |
|
|
121
|
+
* | `tree` | `tree` | 根から下へ枝が伸びる |
|
|
122
|
+
* | `gantt` | `gantt` | 各帯の始端から右へ帯が伸びる |
|
|
123
|
+
* | `funnel` | `funnel` | 上端から順に段が積まれる |
|
|
124
|
+
*
|
|
125
|
+
* `quadrant` は入れない。 4 つの区画に項目を置く図で **項目に順序が無く**、起点を決められない
|
|
126
|
+
* (順番を書いた順で決めると、動きが図の意味を持たない)。
|
|
127
|
+
*
|
|
128
|
+
* いまは語と図種が同じ綴りだが、**同じものとして扱わない**。 語は書き手が書く名前で、
|
|
129
|
+
* 図種は `type:` が取る値。 片方だけ別名を足したくなった時に、対応が表に残っている形にする。
|
|
130
|
+
*/
|
|
131
|
+
declare const DRAW_TARGETS: ReadonlyMap<string, PresetType>;
|
|
132
|
+
/** `draw:` に書ける語。 表から導く (#1314) */
|
|
133
|
+
declare const DRAW_WORDS: ReadonlySet<string>;
|
|
2
134
|
|
|
3
135
|
/**
|
|
4
136
|
* 位置を他の要素からの相対で書くための解決。
|
|
@@ -82,6 +214,17 @@ declare function orderByDependency(items: ReadonlyArray<{
|
|
|
82
214
|
* docs/cdl/text-dsl-spec.md の文法を AST に変換した中間表現
|
|
83
215
|
*/
|
|
84
216
|
|
|
217
|
+
/**
|
|
218
|
+
* 記法が書ける箱の種類 (#1420)。
|
|
219
|
+
*
|
|
220
|
+
* 描画できる種類 (`NodeKind`) に、**記法だけが持つ種類** (`contract` / `eoa` など) を足す。
|
|
221
|
+
* 後者は図種ごとの役割分け (`solidity` の縦列の並べ替えなど) に使い、描画側へ渡す手前で
|
|
222
|
+
* `compile.ts` の `描ける種別` が読み替える。
|
|
223
|
+
*
|
|
224
|
+
* `NodeKind` だけに縛っていた間、記法が受ける値を型が表せていなかった。
|
|
225
|
+
*/
|
|
226
|
+
type DslNodeKind = NodeKind | DslOnlyKind;
|
|
227
|
+
|
|
85
228
|
/**
|
|
86
229
|
* 箱の中に描く図形 (#1374)。 **描画側の型をそのまま使う**。
|
|
87
230
|
*
|
|
@@ -250,7 +393,7 @@ type DslAxes = {
|
|
|
250
393
|
/** 登場人物 (v0.5+ ... inline option 拡張) */
|
|
251
394
|
type DslActor = {
|
|
252
395
|
name: string;
|
|
253
|
-
kind:
|
|
396
|
+
kind: DslNodeKind;
|
|
254
397
|
/**
|
|
255
398
|
* 著者が種類を書いたか。 書かなかった時 `kind` には既定の `actor` が入るため、
|
|
256
399
|
* `kind` の値だけでは「書いた `actor`」 と「書かなかった」 を区別できない。
|
|
@@ -861,124 +1004,6 @@ declare function partsGridCenters(baseNodeCount: number, items: ReadonlyArray<{
|
|
|
861
1004
|
cy: number;
|
|
862
1005
|
}>;
|
|
863
1006
|
|
|
864
|
-
/**
|
|
865
|
-
* Text DSL v0.5 parser
|
|
866
|
-
*
|
|
867
|
-
* 設計方針:
|
|
868
|
-
* - keyword は英語のみ (title / type / actors / flow / states / animation / step / focus / tween / set / badge)
|
|
869
|
-
* - 値の日本語は quote 必須 (`title: "API call"` / `step: "request" 1.5s`)
|
|
870
|
-
* - YAML 風 + 短縮 keyword + 箇条書き構造
|
|
871
|
-
* - Mermaid 知ってる人にもゼロ学習、 非エンジニアにも直感的
|
|
872
|
-
*
|
|
873
|
-
* syntax 例:
|
|
874
|
-
*
|
|
875
|
-
* title: "API call"
|
|
876
|
-
* type: sequence
|
|
877
|
-
*
|
|
878
|
-
* actors:
|
|
879
|
-
* - Client
|
|
880
|
-
* - API: function
|
|
881
|
-
* - DB
|
|
882
|
-
*
|
|
883
|
-
* flow:
|
|
884
|
-
* - Client -> API: "GET /items"
|
|
885
|
-
* - API -> DB: "SELECT" (success)
|
|
886
|
-
*
|
|
887
|
-
* states:
|
|
888
|
-
* request_count: 0
|
|
889
|
-
* row_count: 0
|
|
890
|
-
*
|
|
891
|
-
* animation:
|
|
892
|
-
* - step: "request" 1.5s
|
|
893
|
-
* focus: [Client, API]
|
|
894
|
-
* tween:
|
|
895
|
-
* request_count: 0 -> 1
|
|
896
|
-
* badge: "request"
|
|
897
|
-
*
|
|
898
|
-
* - step: "query" 1.5s
|
|
899
|
-
* focus: [API, DB]
|
|
900
|
-
* tween:
|
|
901
|
-
* row_count: 0 -> 20
|
|
902
|
-
* badge: "query"
|
|
903
|
-
*
|
|
904
|
-
* 出力は v0.4 と同じ DslDocument。 既存 compile.ts で CdlDiagram に変換できる。
|
|
905
|
-
*/
|
|
906
|
-
|
|
907
|
-
type V05ParseResult = {
|
|
908
|
-
ok: true;
|
|
909
|
-
doc: DslDocument;
|
|
910
|
-
} | {
|
|
911
|
-
ok: false;
|
|
912
|
-
errors: DslError[];
|
|
913
|
-
};
|
|
914
|
-
/**
|
|
915
|
-
* 記法が受ける top-level の項目 (#1190)。
|
|
916
|
-
*
|
|
917
|
-
* 読めない行の案内と、記法一覧が全て載せているかの検査が、どちらもここを見る。 一覧に手で
|
|
918
|
-
* 書くと、項目を足した時に案内か一覧のどちらかが取り残される (実際に `states` / `values` が
|
|
919
|
-
* 一覧に 1 件も無い状態で放置されていた)。
|
|
920
|
-
*/
|
|
921
|
-
declare const TOP_LEVEL_KEYS: readonly ["title", "type", "actors", "flow", "states", "values", "animation", "viewport", "lanes", "groups", "eyebrow", "axes", "readouts", "inputs", "formulas", "events", "scrolls"];
|
|
922
|
-
/** 受け付ける図種。 記法一覧はここを見る。 */
|
|
923
|
-
declare const PRESET_TYPES: ReadonlySet<PresetType>;
|
|
924
|
-
/**
|
|
925
|
-
* 受け付ける箱の種類。 描画できる種類 (cdl の `NODE_KINDS`) に、 記法だけが持つ種類を足す。
|
|
926
|
-
*
|
|
927
|
-
* 以前は手書きの 31 種だった。 描画できる 90 種のうち 78 種が記法から書けず、 部品名として
|
|
928
|
-
* 扱われて「そんな部品は無い」 と警告が出るだけだった。 描画側を出所に加えることで
|
|
929
|
-
* 「描画できるものは書ける」 が成立する。
|
|
930
|
-
*/
|
|
931
|
-
/**
|
|
932
|
-
* 記法が受理する種類の全体。 これに載っていない種類は見本 (パーツ) の候補になる。
|
|
933
|
-
*
|
|
934
|
-
* 画面側が「本文が見本を使っているか」 を判定するのに使う (#1022)。 手書きの一覧を
|
|
935
|
-
* 別に持つと、種類が増えた時にそちらだけ取り残されて余分な読み込みが起きる。
|
|
936
|
-
*/
|
|
937
|
-
declare const NODE_KIND_VALID: ReadonlySet<string>;
|
|
938
|
-
declare function parseTextDslV05(src: string): V05ParseResult;
|
|
939
|
-
/**
|
|
940
|
-
* 対応する引用符だけを外す。
|
|
941
|
-
*
|
|
942
|
-
* 先頭と末尾を別々に外すと、対応しない形 (`'300,200"`) が中身だけ取り出せてしまう。
|
|
943
|
-
* 画面側も同じ関数を使う (#1028) = 別々に持つと、片方だけが読める本文ができる。
|
|
944
|
-
*/
|
|
945
|
-
declare function stripQuotes(s: string): string;
|
|
946
|
-
/**
|
|
947
|
-
* 段に書ける項目の英語名。 `parsePhase` が受け付ける名前の入口でも使う。
|
|
948
|
-
*
|
|
949
|
-
* 誤りの案内で使うほか、**見本が値の名前にこの語を使っていないか** を見るのにも使う
|
|
950
|
-
* (#1330)。 段の項目と値は階層が違うので衝突しないが、同じ語が 2 つの意味で並ぶと
|
|
951
|
-
* 見本を読む人が階層から意味を判断することになる。
|
|
952
|
-
*/
|
|
953
|
-
declare const PHASE_ITEM_WORDS: readonly ["focus", "badge", "body", "description", "tween", "set", "draw"];
|
|
954
|
-
/**
|
|
955
|
-
* `draw:` に書ける語と、その語が効く図種 (#1312 / #1314)。
|
|
956
|
-
*
|
|
957
|
-
* **語と図種の対応をここ 1 箇所で持つ**。 受ける語の一覧 (`DRAW_WORDS`) も、組み立て側が見る
|
|
958
|
-
* 図種の一覧 (`DRAWABLE_DOC_TYPES`) も、この表から導く。 3 つを別々に並べると、語を足した時に
|
|
959
|
-
* どれかが古いまま残る (#1310 / #1304 で 3 度直した形)。
|
|
960
|
-
*
|
|
961
|
-
* | 語 | 図種 | 起点 |
|
|
962
|
-
* |---|---|---|
|
|
963
|
-
* | `line` | `line` | 左端から右へ線が伸びる |
|
|
964
|
-
* | `bar` | `bar` | 横軸から上へ棒が伸びる |
|
|
965
|
-
* | `pie` | `pie` | 12 時から時計回りに扇が開く |
|
|
966
|
-
* | `journey` | `journey` | 左端から右へ気持ちの線が伸びる |
|
|
967
|
-
* | `mind` | `mind` | 中心から外へ枝が伸びる |
|
|
968
|
-
* | `tree` | `tree` | 根から下へ枝が伸びる |
|
|
969
|
-
* | `gantt` | `gantt` | 各帯の始端から右へ帯が伸びる |
|
|
970
|
-
* | `funnel` | `funnel` | 上端から順に段が積まれる |
|
|
971
|
-
*
|
|
972
|
-
* `quadrant` は入れない。 4 つの区画に項目を置く図で **項目に順序が無く**、起点を決められない
|
|
973
|
-
* (順番を書いた順で決めると、動きが図の意味を持たない)。
|
|
974
|
-
*
|
|
975
|
-
* いまは語と図種が同じ綴りだが、**同じものとして扱わない**。 語は書き手が書く名前で、
|
|
976
|
-
* 図種は `type:` が取る値。 片方だけ別名を足したくなった時に、対応が表に残っている形にする。
|
|
977
|
-
*/
|
|
978
|
-
declare const DRAW_TARGETS: ReadonlyMap<string, PresetType>;
|
|
979
|
-
/** `draw:` に書ける語。 表から導く (#1314) */
|
|
980
|
-
declare const DRAW_WORDS: ReadonlySet<string>;
|
|
981
|
-
|
|
982
1007
|
/**
|
|
983
1008
|
* Text DSL i18n キーワード一覧
|
|
984
1009
|
* 日本語 / 英語両対応 (大文字小文字無視)
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,136 @@
|
|
|
1
1
|
import { CdlDiagram, NodeKind, Tone, EdgeStyle, LaidDiagram } from '@cardenelabs/cdl';
|
|
2
|
+
export { CdlDiagram } from '@cardenelabs/cdl';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Text DSL v0.5 parser
|
|
6
|
+
*
|
|
7
|
+
* 設計方針:
|
|
8
|
+
* - keyword は英語のみ (title / type / actors / flow / states / animation / step / focus / tween / set / badge)
|
|
9
|
+
* - 値の日本語は quote 必須 (`title: "API call"` / `step: "request" 1.5s`)
|
|
10
|
+
* - YAML 風 + 短縮 keyword + 箇条書き構造
|
|
11
|
+
* - Mermaid 知ってる人にもゼロ学習、 非エンジニアにも直感的
|
|
12
|
+
*
|
|
13
|
+
* syntax 例:
|
|
14
|
+
*
|
|
15
|
+
* title: "API call"
|
|
16
|
+
* type: sequence
|
|
17
|
+
*
|
|
18
|
+
* actors:
|
|
19
|
+
* - Client
|
|
20
|
+
* - API: function
|
|
21
|
+
* - DB
|
|
22
|
+
*
|
|
23
|
+
* flow:
|
|
24
|
+
* - Client -> API: "GET /items"
|
|
25
|
+
* - API -> DB: "SELECT" (success)
|
|
26
|
+
*
|
|
27
|
+
* states:
|
|
28
|
+
* request_count: 0
|
|
29
|
+
* row_count: 0
|
|
30
|
+
*
|
|
31
|
+
* animation:
|
|
32
|
+
* - step: "request" 1.5s
|
|
33
|
+
* focus: [Client, API]
|
|
34
|
+
* tween:
|
|
35
|
+
* request_count: 0 -> 1
|
|
36
|
+
* badge: "request"
|
|
37
|
+
*
|
|
38
|
+
* - step: "query" 1.5s
|
|
39
|
+
* focus: [API, DB]
|
|
40
|
+
* tween:
|
|
41
|
+
* row_count: 0 -> 20
|
|
42
|
+
* badge: "query"
|
|
43
|
+
*
|
|
44
|
+
* 出力は v0.4 と同じ DslDocument。 既存 compile.ts で CdlDiagram に変換できる。
|
|
45
|
+
*/
|
|
46
|
+
|
|
47
|
+
type V05ParseResult = {
|
|
48
|
+
ok: true;
|
|
49
|
+
doc: DslDocument;
|
|
50
|
+
} | {
|
|
51
|
+
ok: false;
|
|
52
|
+
errors: DslError[];
|
|
53
|
+
};
|
|
54
|
+
/**
|
|
55
|
+
* 記法が受ける top-level の項目 (#1190)。
|
|
56
|
+
*
|
|
57
|
+
* 読めない行の案内と、記法一覧が全て載せているかの検査が、どちらもここを見る。 一覧に手で
|
|
58
|
+
* 書くと、項目を足した時に案内か一覧のどちらかが取り残される (実際に `states` / `values` が
|
|
59
|
+
* 一覧に 1 件も無い状態で放置されていた)。
|
|
60
|
+
*/
|
|
61
|
+
declare const TOP_LEVEL_KEYS: readonly ["title", "type", "actors", "flow", "states", "values", "animation", "viewport", "lanes", "groups", "eyebrow", "axes", "readouts", "inputs", "formulas", "events", "scrolls"];
|
|
62
|
+
/** 受け付ける図種。 記法一覧はここを見る。 */
|
|
63
|
+
declare const PRESET_TYPES: ReadonlySet<PresetType>;
|
|
64
|
+
/**
|
|
65
|
+
* 記法だけが持つ種類。 描画側には無いが、 図種ごとの組み立てで意味を持つ。
|
|
66
|
+
*
|
|
67
|
+
* `contract` / `eoa` / `multisig` / `proxy` / `library` / `interface` は Solidity 図の
|
|
68
|
+
* 役割分けに、 `entity` / `state` は ER 図と状態遷移図に使う。
|
|
69
|
+
*
|
|
70
|
+
* **描画側へ渡す前に必ず読み替える** (`compile.ts` の `描ける種別`)。 読み替えを通さずに渡すと
|
|
71
|
+
* 図の組み立てが落ちる = 描画側は知らない種類の大きさを引けない (#1420 で実測、
|
|
72
|
+
* `Cannot read properties of undefined (reading 'h')`)。
|
|
73
|
+
*/
|
|
74
|
+
declare const DSL_ONLY_KINDS: readonly ["entity", "state", "contract", "eoa", "multisig", "proxy", "library", "interface"];
|
|
75
|
+
/** 記法だけが持つ種類。 描画側の `NodeKind` には含まれない */
|
|
76
|
+
type DslOnlyKind = (typeof DSL_ONLY_KINDS)[number];
|
|
77
|
+
/**
|
|
78
|
+
* 受け付ける箱の種類。 描画できる種類 (cdl の `NODE_KINDS`) に、 記法だけが持つ種類を足す。
|
|
79
|
+
*
|
|
80
|
+
* 以前は手書きの 31 種だった。 描画できる 90 種のうち 78 種が記法から書けず、 部品名として
|
|
81
|
+
* 扱われて「そんな部品は無い」 と警告が出るだけだった。 描画側を出所に加えることで
|
|
82
|
+
* 「描画できるものは書ける」 が成立する。
|
|
83
|
+
*/
|
|
84
|
+
/**
|
|
85
|
+
* 記法が受理する種類の全体。 これに載っていない種類は見本 (パーツ) の候補になる。
|
|
86
|
+
*
|
|
87
|
+
* 画面側が「本文が見本を使っているか」 を判定するのに使う (#1022)。 手書きの一覧を
|
|
88
|
+
* 別に持つと、種類が増えた時にそちらだけ取り残されて余分な読み込みが起きる。
|
|
89
|
+
*/
|
|
90
|
+
declare const NODE_KIND_VALID: ReadonlySet<string>;
|
|
91
|
+
declare function parseTextDslV05(src: string): V05ParseResult;
|
|
92
|
+
/**
|
|
93
|
+
* 対応する引用符だけを外す。
|
|
94
|
+
*
|
|
95
|
+
* 先頭と末尾を別々に外すと、対応しない形 (`'300,200"`) が中身だけ取り出せてしまう。
|
|
96
|
+
* 画面側も同じ関数を使う (#1028) = 別々に持つと、片方だけが読める本文ができる。
|
|
97
|
+
*/
|
|
98
|
+
declare function stripQuotes(s: string): string;
|
|
99
|
+
/**
|
|
100
|
+
* 段に書ける項目の英語名。 `parsePhase` が受け付ける名前の入口でも使う。
|
|
101
|
+
*
|
|
102
|
+
* 誤りの案内で使うほか、**見本が値の名前にこの語を使っていないか** を見るのにも使う
|
|
103
|
+
* (#1330)。 段の項目と値は階層が違うので衝突しないが、同じ語が 2 つの意味で並ぶと
|
|
104
|
+
* 見本を読む人が階層から意味を判断することになる。
|
|
105
|
+
*/
|
|
106
|
+
declare const PHASE_ITEM_WORDS: readonly ["focus", "badge", "body", "description", "tween", "set", "draw"];
|
|
107
|
+
/**
|
|
108
|
+
* `draw:` に書ける語と、その語が効く図種 (#1312 / #1314)。
|
|
109
|
+
*
|
|
110
|
+
* **語と図種の対応をここ 1 箇所で持つ**。 受ける語の一覧 (`DRAW_WORDS`) も、組み立て側が見る
|
|
111
|
+
* 図種の一覧 (`DRAWABLE_DOC_TYPES`) も、この表から導く。 3 つを別々に並べると、語を足した時に
|
|
112
|
+
* どれかが古いまま残る (#1310 / #1304 で 3 度直した形)。
|
|
113
|
+
*
|
|
114
|
+
* | 語 | 図種 | 起点 |
|
|
115
|
+
* |---|---|---|
|
|
116
|
+
* | `line` | `line` | 左端から右へ線が伸びる |
|
|
117
|
+
* | `bar` | `bar` | 横軸から上へ棒が伸びる |
|
|
118
|
+
* | `pie` | `pie` | 12 時から時計回りに扇が開く |
|
|
119
|
+
* | `journey` | `journey` | 左端から右へ気持ちの線が伸びる |
|
|
120
|
+
* | `mind` | `mind` | 中心から外へ枝が伸びる |
|
|
121
|
+
* | `tree` | `tree` | 根から下へ枝が伸びる |
|
|
122
|
+
* | `gantt` | `gantt` | 各帯の始端から右へ帯が伸びる |
|
|
123
|
+
* | `funnel` | `funnel` | 上端から順に段が積まれる |
|
|
124
|
+
*
|
|
125
|
+
* `quadrant` は入れない。 4 つの区画に項目を置く図で **項目に順序が無く**、起点を決められない
|
|
126
|
+
* (順番を書いた順で決めると、動きが図の意味を持たない)。
|
|
127
|
+
*
|
|
128
|
+
* いまは語と図種が同じ綴りだが、**同じものとして扱わない**。 語は書き手が書く名前で、
|
|
129
|
+
* 図種は `type:` が取る値。 片方だけ別名を足したくなった時に、対応が表に残っている形にする。
|
|
130
|
+
*/
|
|
131
|
+
declare const DRAW_TARGETS: ReadonlyMap<string, PresetType>;
|
|
132
|
+
/** `draw:` に書ける語。 表から導く (#1314) */
|
|
133
|
+
declare const DRAW_WORDS: ReadonlySet<string>;
|
|
2
134
|
|
|
3
135
|
/**
|
|
4
136
|
* 位置を他の要素からの相対で書くための解決。
|
|
@@ -82,6 +214,17 @@ declare function orderByDependency(items: ReadonlyArray<{
|
|
|
82
214
|
* docs/cdl/text-dsl-spec.md の文法を AST に変換した中間表現
|
|
83
215
|
*/
|
|
84
216
|
|
|
217
|
+
/**
|
|
218
|
+
* 記法が書ける箱の種類 (#1420)。
|
|
219
|
+
*
|
|
220
|
+
* 描画できる種類 (`NodeKind`) に、**記法だけが持つ種類** (`contract` / `eoa` など) を足す。
|
|
221
|
+
* 後者は図種ごとの役割分け (`solidity` の縦列の並べ替えなど) に使い、描画側へ渡す手前で
|
|
222
|
+
* `compile.ts` の `描ける種別` が読み替える。
|
|
223
|
+
*
|
|
224
|
+
* `NodeKind` だけに縛っていた間、記法が受ける値を型が表せていなかった。
|
|
225
|
+
*/
|
|
226
|
+
type DslNodeKind = NodeKind | DslOnlyKind;
|
|
227
|
+
|
|
85
228
|
/**
|
|
86
229
|
* 箱の中に描く図形 (#1374)。 **描画側の型をそのまま使う**。
|
|
87
230
|
*
|
|
@@ -250,7 +393,7 @@ type DslAxes = {
|
|
|
250
393
|
/** 登場人物 (v0.5+ ... inline option 拡張) */
|
|
251
394
|
type DslActor = {
|
|
252
395
|
name: string;
|
|
253
|
-
kind:
|
|
396
|
+
kind: DslNodeKind;
|
|
254
397
|
/**
|
|
255
398
|
* 著者が種類を書いたか。 書かなかった時 `kind` には既定の `actor` が入るため、
|
|
256
399
|
* `kind` の値だけでは「書いた `actor`」 と「書かなかった」 を区別できない。
|
|
@@ -861,124 +1004,6 @@ declare function partsGridCenters(baseNodeCount: number, items: ReadonlyArray<{
|
|
|
861
1004
|
cy: number;
|
|
862
1005
|
}>;
|
|
863
1006
|
|
|
864
|
-
/**
|
|
865
|
-
* Text DSL v0.5 parser
|
|
866
|
-
*
|
|
867
|
-
* 設計方針:
|
|
868
|
-
* - keyword は英語のみ (title / type / actors / flow / states / animation / step / focus / tween / set / badge)
|
|
869
|
-
* - 値の日本語は quote 必須 (`title: "API call"` / `step: "request" 1.5s`)
|
|
870
|
-
* - YAML 風 + 短縮 keyword + 箇条書き構造
|
|
871
|
-
* - Mermaid 知ってる人にもゼロ学習、 非エンジニアにも直感的
|
|
872
|
-
*
|
|
873
|
-
* syntax 例:
|
|
874
|
-
*
|
|
875
|
-
* title: "API call"
|
|
876
|
-
* type: sequence
|
|
877
|
-
*
|
|
878
|
-
* actors:
|
|
879
|
-
* - Client
|
|
880
|
-
* - API: function
|
|
881
|
-
* - DB
|
|
882
|
-
*
|
|
883
|
-
* flow:
|
|
884
|
-
* - Client -> API: "GET /items"
|
|
885
|
-
* - API -> DB: "SELECT" (success)
|
|
886
|
-
*
|
|
887
|
-
* states:
|
|
888
|
-
* request_count: 0
|
|
889
|
-
* row_count: 0
|
|
890
|
-
*
|
|
891
|
-
* animation:
|
|
892
|
-
* - step: "request" 1.5s
|
|
893
|
-
* focus: [Client, API]
|
|
894
|
-
* tween:
|
|
895
|
-
* request_count: 0 -> 1
|
|
896
|
-
* badge: "request"
|
|
897
|
-
*
|
|
898
|
-
* - step: "query" 1.5s
|
|
899
|
-
* focus: [API, DB]
|
|
900
|
-
* tween:
|
|
901
|
-
* row_count: 0 -> 20
|
|
902
|
-
* badge: "query"
|
|
903
|
-
*
|
|
904
|
-
* 出力は v0.4 と同じ DslDocument。 既存 compile.ts で CdlDiagram に変換できる。
|
|
905
|
-
*/
|
|
906
|
-
|
|
907
|
-
type V05ParseResult = {
|
|
908
|
-
ok: true;
|
|
909
|
-
doc: DslDocument;
|
|
910
|
-
} | {
|
|
911
|
-
ok: false;
|
|
912
|
-
errors: DslError[];
|
|
913
|
-
};
|
|
914
|
-
/**
|
|
915
|
-
* 記法が受ける top-level の項目 (#1190)。
|
|
916
|
-
*
|
|
917
|
-
* 読めない行の案内と、記法一覧が全て載せているかの検査が、どちらもここを見る。 一覧に手で
|
|
918
|
-
* 書くと、項目を足した時に案内か一覧のどちらかが取り残される (実際に `states` / `values` が
|
|
919
|
-
* 一覧に 1 件も無い状態で放置されていた)。
|
|
920
|
-
*/
|
|
921
|
-
declare const TOP_LEVEL_KEYS: readonly ["title", "type", "actors", "flow", "states", "values", "animation", "viewport", "lanes", "groups", "eyebrow", "axes", "readouts", "inputs", "formulas", "events", "scrolls"];
|
|
922
|
-
/** 受け付ける図種。 記法一覧はここを見る。 */
|
|
923
|
-
declare const PRESET_TYPES: ReadonlySet<PresetType>;
|
|
924
|
-
/**
|
|
925
|
-
* 受け付ける箱の種類。 描画できる種類 (cdl の `NODE_KINDS`) に、 記法だけが持つ種類を足す。
|
|
926
|
-
*
|
|
927
|
-
* 以前は手書きの 31 種だった。 描画できる 90 種のうち 78 種が記法から書けず、 部品名として
|
|
928
|
-
* 扱われて「そんな部品は無い」 と警告が出るだけだった。 描画側を出所に加えることで
|
|
929
|
-
* 「描画できるものは書ける」 が成立する。
|
|
930
|
-
*/
|
|
931
|
-
/**
|
|
932
|
-
* 記法が受理する種類の全体。 これに載っていない種類は見本 (パーツ) の候補になる。
|
|
933
|
-
*
|
|
934
|
-
* 画面側が「本文が見本を使っているか」 を判定するのに使う (#1022)。 手書きの一覧を
|
|
935
|
-
* 別に持つと、種類が増えた時にそちらだけ取り残されて余分な読み込みが起きる。
|
|
936
|
-
*/
|
|
937
|
-
declare const NODE_KIND_VALID: ReadonlySet<string>;
|
|
938
|
-
declare function parseTextDslV05(src: string): V05ParseResult;
|
|
939
|
-
/**
|
|
940
|
-
* 対応する引用符だけを外す。
|
|
941
|
-
*
|
|
942
|
-
* 先頭と末尾を別々に外すと、対応しない形 (`'300,200"`) が中身だけ取り出せてしまう。
|
|
943
|
-
* 画面側も同じ関数を使う (#1028) = 別々に持つと、片方だけが読める本文ができる。
|
|
944
|
-
*/
|
|
945
|
-
declare function stripQuotes(s: string): string;
|
|
946
|
-
/**
|
|
947
|
-
* 段に書ける項目の英語名。 `parsePhase` が受け付ける名前の入口でも使う。
|
|
948
|
-
*
|
|
949
|
-
* 誤りの案内で使うほか、**見本が値の名前にこの語を使っていないか** を見るのにも使う
|
|
950
|
-
* (#1330)。 段の項目と値は階層が違うので衝突しないが、同じ語が 2 つの意味で並ぶと
|
|
951
|
-
* 見本を読む人が階層から意味を判断することになる。
|
|
952
|
-
*/
|
|
953
|
-
declare const PHASE_ITEM_WORDS: readonly ["focus", "badge", "body", "description", "tween", "set", "draw"];
|
|
954
|
-
/**
|
|
955
|
-
* `draw:` に書ける語と、その語が効く図種 (#1312 / #1314)。
|
|
956
|
-
*
|
|
957
|
-
* **語と図種の対応をここ 1 箇所で持つ**。 受ける語の一覧 (`DRAW_WORDS`) も、組み立て側が見る
|
|
958
|
-
* 図種の一覧 (`DRAWABLE_DOC_TYPES`) も、この表から導く。 3 つを別々に並べると、語を足した時に
|
|
959
|
-
* どれかが古いまま残る (#1310 / #1304 で 3 度直した形)。
|
|
960
|
-
*
|
|
961
|
-
* | 語 | 図種 | 起点 |
|
|
962
|
-
* |---|---|---|
|
|
963
|
-
* | `line` | `line` | 左端から右へ線が伸びる |
|
|
964
|
-
* | `bar` | `bar` | 横軸から上へ棒が伸びる |
|
|
965
|
-
* | `pie` | `pie` | 12 時から時計回りに扇が開く |
|
|
966
|
-
* | `journey` | `journey` | 左端から右へ気持ちの線が伸びる |
|
|
967
|
-
* | `mind` | `mind` | 中心から外へ枝が伸びる |
|
|
968
|
-
* | `tree` | `tree` | 根から下へ枝が伸びる |
|
|
969
|
-
* | `gantt` | `gantt` | 各帯の始端から右へ帯が伸びる |
|
|
970
|
-
* | `funnel` | `funnel` | 上端から順に段が積まれる |
|
|
971
|
-
*
|
|
972
|
-
* `quadrant` は入れない。 4 つの区画に項目を置く図で **項目に順序が無く**、起点を決められない
|
|
973
|
-
* (順番を書いた順で決めると、動きが図の意味を持たない)。
|
|
974
|
-
*
|
|
975
|
-
* いまは語と図種が同じ綴りだが、**同じものとして扱わない**。 語は書き手が書く名前で、
|
|
976
|
-
* 図種は `type:` が取る値。 片方だけ別名を足したくなった時に、対応が表に残っている形にする。
|
|
977
|
-
*/
|
|
978
|
-
declare const DRAW_TARGETS: ReadonlyMap<string, PresetType>;
|
|
979
|
-
/** `draw:` に書ける語。 表から導く (#1314) */
|
|
980
|
-
declare const DRAW_WORDS: ReadonlySet<string>;
|
|
981
|
-
|
|
982
1007
|
/**
|
|
983
1008
|
* Text DSL i18n キーワード一覧
|
|
984
1009
|
* 日本語 / 英語両対応 (大文字小文字無視)
|
package/dist/index.js
CHANGED
|
@@ -4752,6 +4752,21 @@ function describeOversizeSource(src) {
|
|
|
4752
4752
|
}
|
|
4753
4753
|
|
|
4754
4754
|
// src/compile.ts
|
|
4755
|
+
var \u8A18\u6CD5\u3060\u3051\u306E\u7A2E\u985E\u306E\u8AAD\u307F\u66FF\u3048 = {
|
|
4756
|
+
entity: "storage",
|
|
4757
|
+
state: "card",
|
|
4758
|
+
contract: "card",
|
|
4759
|
+
proxy: "card",
|
|
4760
|
+
library: "card",
|
|
4761
|
+
interface: "card",
|
|
4762
|
+
eoa: "person",
|
|
4763
|
+
multisig: "signer"
|
|
4764
|
+
};
|
|
4765
|
+
function \u63CF\u3051\u308B\u7A2E\u5225(kind) {
|
|
4766
|
+
if (kind === void 0) return "actor";
|
|
4767
|
+
const \u8AAD\u307F\u66FF\u3048\u5148 = \u8A18\u6CD5\u3060\u3051\u306E\u7A2E\u985E\u306E\u8AAD\u307F\u66FF\u3048[kind];
|
|
4768
|
+
return \u8AAD\u307F\u66FF\u3048\u5148 ?? kind;
|
|
4769
|
+
}
|
|
4755
4770
|
function compileToCdl(doc, opts) {
|
|
4756
4771
|
const oversize = describeOversize({ elements: countDocElements(doc), bytes: 0 });
|
|
4757
4772
|
if (oversize) throw new Error(oversize);
|
|
@@ -7570,7 +7585,7 @@ function compileC4(doc) {
|
|
|
7570
7585
|
b.node(x.id, {
|
|
7571
7586
|
lane: lid,
|
|
7572
7587
|
stack,
|
|
7573
|
-
kind: x.actor.kind,
|
|
7588
|
+
kind: \u63CF\u3051\u308B\u7A2E\u5225(x.actor.kind),
|
|
7574
7589
|
title: x.actor.name
|
|
7575
7590
|
});
|
|
7576
7591
|
}
|
|
@@ -8154,7 +8169,7 @@ function compileFlow(doc) {
|
|
|
8154
8169
|
flowBuilder.step(
|
|
8155
8170
|
{
|
|
8156
8171
|
id: slugify(a.name),
|
|
8157
|
-
kind: a.kind,
|
|
8172
|
+
kind: \u63CF\u3051\u308B\u7A2E\u5225(a.kind),
|
|
8158
8173
|
title: \u7BB1\u306E\u984C(a)
|
|
8159
8174
|
},
|
|
8160
8175
|
edgeLabel
|
|
@@ -8184,7 +8199,7 @@ function compileSwimlane(doc) {
|
|
|
8184
8199
|
swim.node(nodeId, {
|
|
8185
8200
|
lane: laneId,
|
|
8186
8201
|
stack,
|
|
8187
|
-
kind: actor?.kind
|
|
8202
|
+
kind: \u63CF\u3051\u308B\u7A2E\u5225(actor?.kind),
|
|
8188
8203
|
title: actorName
|
|
8189
8204
|
});
|
|
8190
8205
|
laneStackCount.set(laneId, stack + 1);
|
|
@@ -8206,7 +8221,7 @@ function compileSwimlane(doc) {
|
|
|
8206
8221
|
swim.node(slugify(a.name), {
|
|
8207
8222
|
lane: swim.laneId(a.name),
|
|
8208
8223
|
stack: 0,
|
|
8209
|
-
kind: a.kind
|
|
8224
|
+
kind: \u63CF\u3051\u308B\u7A2E\u5225(a.kind),
|
|
8210
8225
|
title: \u7BB1\u306E\u984C(a)
|
|
8211
8226
|
});
|
|
8212
8227
|
});
|
|
@@ -8295,7 +8310,7 @@ function compileTopology(doc) {
|
|
|
8295
8310
|
for (const a of doc.actors) {
|
|
8296
8311
|
groupBuilder.add({
|
|
8297
8312
|
id: slugify(a.name),
|
|
8298
|
-
kind: a.kind,
|
|
8313
|
+
kind: \u63CF\u3051\u308B\u7A2E\u5225(a.kind),
|
|
8299
8314
|
title: \u7BB1\u306E\u984C(a)
|
|
8300
8315
|
});
|
|
8301
8316
|
}
|
|
@@ -8361,7 +8376,12 @@ function compileGenericWithAnimate(doc, opts) {
|
|
|
8361
8376
|
while (\u96C6\u5408?.has(stack)) stack += 1;
|
|
8362
8377
|
\u57CB\u3081\u308B(lid, stack);
|
|
8363
8378
|
}
|
|
8364
|
-
b.node(id, {
|
|
8379
|
+
b.node(id, {
|
|
8380
|
+
lane: lid,
|
|
8381
|
+
stack,
|
|
8382
|
+
kind: \u63CF\u3051\u308B\u7A2E\u5225(a.kind),
|
|
8383
|
+
title: \u7BB1\u306E\u984C(a)
|
|
8384
|
+
});
|
|
8365
8385
|
});
|
|
8366
8386
|
} else if (kind === "flow" || kind === "topology") {
|
|
8367
8387
|
const lid = opts.laneId ?? "main";
|
|
@@ -8373,7 +8393,12 @@ function compileGenericWithAnimate(doc, opts) {
|
|
|
8373
8393
|
doc.actors.forEach((a, idx) => {
|
|
8374
8394
|
const id = slugify(a.name);
|
|
8375
8395
|
actorToNodeId.set(a.name, id);
|
|
8376
|
-
b.node(id, {
|
|
8396
|
+
b.node(id, {
|
|
8397
|
+
lane: lid,
|
|
8398
|
+
stack: idx,
|
|
8399
|
+
kind: \u63CF\u3051\u308B\u7A2E\u5225(a.kind),
|
|
8400
|
+
title: \u7BB1\u306E\u984C(a)
|
|
8401
|
+
});
|
|
8377
8402
|
});
|
|
8378
8403
|
} else {
|
|
8379
8404
|
const \u898B\u51FA\u3057\u3092\u4ED8\u3051\u308B = kind === "swimlane";
|
|
@@ -8388,7 +8413,7 @@ function compileGenericWithAnimate(doc, opts) {
|
|
|
8388
8413
|
b.node(id, {
|
|
8389
8414
|
lane: lid,
|
|
8390
8415
|
stack: 0,
|
|
8391
|
-
kind: a.kind,
|
|
8416
|
+
kind: \u63CF\u3051\u308B\u7A2E\u5225(a.kind),
|
|
8392
8417
|
title: \u7BB1\u306E\u984C(a),
|
|
8393
8418
|
...isInitial ? { eyebrow: "\u521D\u671F" } : {},
|
|
8394
8419
|
...isFinal ? { eyebrow: "\u6700\u7D42" } : {}
|