@cardenelabs/cdl 0.53.0 → 0.54.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 CHANGED
@@ -5,6 +5,31 @@ CDL (Chainome Diagram Language) の主要変更履歴。
5
5
 
6
6
  ## [Unreleased]
7
7
 
8
+ ## [0.54.0] - 2026-09-11
9
+
10
+ ### Changed
11
+
12
+ - **図の組み立て関数が自動で書き足す字を、英語から日本語にした** (#835)
13
+
14
+ 組み立て関数は書き手の入力とは別に、箱の札・説明・最後の段の説明を書き足す。 そこに英語が混ざっていた。
15
+
16
+ | 組み立て関数 | 直す前 | 直した後 |
17
+ |---|---|---|
18
+ | `flowchart` の形の札 | `process` `decision` `start` `end` `loop` | 処理 / 判断 / 開始 / 終了 / 繰り返し |
19
+ | `network` の機器の札 | `router` `switch` `firewall` `server` `client` | ルーター / スイッチ / ファイアウォール / サーバー / 端末 |
20
+ | `stateMachine2` の入れ子の札 | `状態 / nested in active` (親の識別子) | `状態 / Activeの中` (親の題) |
21
+ | `stateMachine2` の入る時と出る時 | `entry: clearForm` / `exit: stopSpinner` | `入る時: clearForm` / `出る時: stopSpinner` |
22
+ | 17 種の最後の段の説明 | 「全 step 順次実行。」 「network 全 device + link を visible 化。」 など | 「すべての段を上から順に通った流れ。」 「すべての機器と接続を並べた構成。」 など |
23
+
24
+ 入れ子の札は、親を後から宣言しても親の題を引く。 段の札 (`badge`) と、描く側が描かない図表の札は変えていない。
25
+
26
+ - **文書で関係の種類を呼ぶ語を、見本帳と同じ UML の用語にした** (#833)
27
+
28
+ `README.md` の端の形の説明は、関係の種類を `継ぐ` `満たす` `持つ` と作った語で呼んでいた。
29
+ 見本帳 (dragon) が 継承 / 実装 / 集約 / コンポジション / 関連 / 依存 に揃えたので、同じ語にした。
30
+ 型と表の説明 (`EdgeStyle` / `EdgeHead` / `EdgeHeadFill` / `CLASS_RELATION_LOOK` / `SequenceMessageKind`) も同じ語にした。
31
+ 見本帳を写した検査の関係名とテスト名も見本帳と同じ語にした。 実装は変えていない。
32
+
8
33
  ## [0.53.0] - 2026-09-11
9
34
 
10
35
  ### Fixed
@@ -2462,7 +2487,8 @@ Initial OSS release.
2462
2487
  使わない = annotated tag を push しても GitHub Release は作られず、 Release を作っていない版で
2463
2488
  行き止まりになる。
2464
2489
 
2465
- [Unreleased]: https://github.com/cardene777/cdl/compare/v0.53.0...HEAD
2490
+ [Unreleased]: https://github.com/cardene777/cdl/compare/v0.54.0...HEAD
2491
+ [0.54.0]: https://github.com/cardene777/cdl/compare/v0.53.0...v0.54.0
2466
2492
  [0.53.0]: https://github.com/cardene777/cdl/compare/v0.52.0...v0.53.0
2467
2493
  [0.52.0]: https://github.com/cardene777/cdl/compare/v0.51.0...v0.52.0
2468
2494
  [0.51.0]: https://github.com/cardene777/cdl/compare/v0.50.0...v0.51.0
package/README.md CHANGED
@@ -200,8 +200,8 @@ export const custom = diagram("custom", { topic: "Custom" })
200
200
  | `dotted-flow` | 点線 + 進行点 glow (3 重円) が path 上を流れる、 node 貫通自動判定 |
201
201
 
202
202
  端の形 (`head`) は線の種類とは **別の軸** で、線の先端に何を置くかを決める。
203
- 実線 × 三角 (継ぐ) と破線 × 三角 (満たす) は線種で分かれ、
204
- 実線 × 三角 (継ぐ) と実線 × 菱 (持つ) は端で分かれる。
203
+ 実線 × 三角 (継承) と破線 × 三角 (実装) は線種で分かれ、
204
+ 実線 × 三角 (継承) と実線 × 菱 (集約) は端で分かれる。
205
205
 
206
206
  | EdgeHead | 形 | 表すもの |
207
207
  |---|---|---|
package/dist/index.cjs CHANGED
@@ -32169,7 +32169,7 @@ function flow(preset) {
32169
32169
  build() {
32170
32170
  b.phase(
32171
32171
  "flow",
32172
- { duration: 2400, title: preset.topic, body: "\u5168 step \u9806\u6B21\u5B9F\u884C\u3002" },
32172
+ { duration: 2400, title: preset.topic, body: "\u3059\u3079\u3066\u306E\u6BB5\u3092\u4E0A\u304B\u3089\u9806\u306B\u901A\u3063\u305F\u6D41\u308C\u3002" },
32173
32173
  (p) => p.activate(...phaseActivate).badge("flow")
32174
32174
  );
32175
32175
  return b.build();
@@ -32227,7 +32227,7 @@ function sequence(preset) {
32227
32227
  });
32228
32228
  b.phase(
32229
32229
  "sequence",
32230
- { duration: 2400, title: preset.topic, body: "sequence \u306E\u5168 message \u3092\u6642\u7CFB\u5217\u5C55\u958B\u3002" },
32230
+ { duration: 2400, title: preset.topic, body: "\u3059\u3079\u3066\u306E\u3084\u308A\u53D6\u308A\u3092\u6642\u9593\u306E\u9806\u306B\u4E26\u3079\u305F\u59FF\u3002" },
32231
32231
  (p) => p.activate(preset.id).badge("sequence")
32232
32232
  );
32233
32233
  return b.build();
@@ -32288,7 +32288,7 @@ function topology(preset) {
32288
32288
  build() {
32289
32289
  b.phase(
32290
32290
  "topo",
32291
- { duration: 2400, title: preset.topic, body: "topology \u306E\u5168 container + connection \u3092 visible \u5316\u3002" },
32291
+ { duration: 2400, title: preset.topic, body: "\u3059\u3079\u3066\u306E\u69CB\u6210\u8981\u7D20\u3068\u63A5\u7D9A\u3092\u4E26\u3079\u305F\u69CB\u6210\u3002" },
32292
32292
  (p) => p.activate(...phaseActivate).badge("topology")
32293
32293
  );
32294
32294
  return b.build();
@@ -32376,7 +32376,7 @@ function er(preset) {
32376
32376
  build() {
32377
32377
  b.phase(
32378
32378
  "er",
32379
- { duration: 2400, title: preset.topic, body: "ER \u56F3\u306E\u5168 entity + relation \u3092 visible \u5316\u3002" },
32379
+ { duration: 2400, title: preset.topic, body: "\u3059\u3079\u3066\u306E\u8868\u3068\u95A2\u4FC2\u3092\u4E26\u3079\u305F\u69CB\u9020\u3002" },
32380
32380
  (p) => p.activate(...phaseActivate).badge("er")
32381
32381
  );
32382
32382
  return b.build();
@@ -32494,7 +32494,7 @@ function stateMachine(preset) {
32494
32494
  });
32495
32495
  b.phase(
32496
32496
  "fsm",
32497
- { duration: 2400, title: preset.topic, body: "FSM \u306E\u5168 state + transition \u3092 visible \u5316\u3002" },
32497
+ { duration: 2400, title: preset.topic, body: "\u3059\u3079\u3066\u306E\u72B6\u614B\u3068\u9077\u79FB\u3092\u4E26\u3079\u305F\u59FF\u3002" },
32498
32498
  (p) => p.activate(...phaseActivate).badge("fsm")
32499
32499
  );
32500
32500
  return b.build();
@@ -32549,7 +32549,7 @@ function infrastructure(preset) {
32549
32549
  build() {
32550
32550
  b.phase(
32551
32551
  "infra",
32552
- { duration: 2400, title: preset.topic, body: "infrastructure \u5168 node + connection \u3092 visible \u5316\u3002" },
32552
+ { duration: 2400, title: preset.topic, body: "\u3059\u3079\u3066\u306E\u69CB\u6210\u8981\u7D20\u3068\u63A5\u7D9A\u3092\u4E26\u3079\u305F\u69CB\u6210\u3002" },
32553
32553
  (p) => p.activate(...phaseActivate).badge("infrastructure")
32554
32554
  );
32555
32555
  return b.build();
@@ -32666,7 +32666,7 @@ function classDiagram(preset) {
32666
32666
  });
32667
32667
  b.phase(
32668
32668
  "class",
32669
- { duration: 2400, title: preset.topic, body: "UML class \u5168 class + relation \u3092 visible \u5316\u3002" },
32669
+ { duration: 2400, title: preset.topic, body: "\u3059\u3079\u3066\u306E\u30AF\u30E9\u30B9\u3068\u95A2\u4FC2\u3092\u4E26\u3079\u305F\u69CB\u9020\u3002" },
32670
32670
  (p) => p.activate(...phaseActivate).badge("class")
32671
32671
  );
32672
32672
  return b.build();
@@ -32704,7 +32704,7 @@ function tree(preset) {
32704
32704
  });
32705
32705
  b.phase(
32706
32706
  "tree",
32707
- { duration: 2400, title: preset.topic, body: "tree \u306E\u5168 node + parent-child edge \u3092 hierarchical layout \u3067\u63CF\u753B\u3002" },
32707
+ { duration: 2400, title: preset.topic, body: "\u3059\u3079\u3066\u306E\u9805\u76EE\u3092\u89AA\u5B50\u306E\u968E\u5C64\u3067\u4E26\u3079\u305F\u6728\u3002" },
32708
32708
  (p) => p.activate(nodeId).badge("tree")
32709
32709
  );
32710
32710
  return b.build();
@@ -32743,7 +32743,7 @@ function userJourney(preset) {
32743
32743
  });
32744
32744
  b.phase(
32745
32745
  "journey",
32746
- { duration: 2400, title: preset.topic, body: "userJourney \u5168 step \u3092\u611F\u60C5\u66F2\u7DDA + touchpoint \u3067\u63CF\u753B\u3002" },
32746
+ { duration: 2400, title: preset.topic, body: "\u3059\u3079\u3066\u306E\u6BB5\u968E\u3092\u3001\u6C17\u6301\u3061\u306E\u66F2\u7DDA\u3068\u63A5\u70B9\u3067\u4E26\u3079\u305F\u4F53\u9A13\u3002" },
32747
32747
  (p) => p.activate(nodeId).badge("journey")
32748
32748
  );
32749
32749
  return b.build();
@@ -32787,7 +32787,7 @@ function mindMap(preset) {
32787
32787
  });
32788
32788
  b.phase(
32789
32789
  "mindmap",
32790
- { duration: 2400, title: preset.topic, body: "mindMap \u5168 branch \u3092 visible \u5316\u3001 \u4E2D\u5FC3 + \u653E\u5C04\u3067\u63CF\u753B\u3002" },
32790
+ { duration: 2400, title: preset.topic, body: "\u4E2D\u5FC3\u306E\u4E3B\u984C\u304B\u3089\u3001\u3059\u3079\u3066\u306E\u679D\u3092\u653E\u5C04\u72B6\u306B\u5E83\u3052\u305F\u59FF\u3002" },
32791
32791
  (p) => p.activate(nodeId).badge("mindmap")
32792
32792
  );
32793
32793
  return b.build();
@@ -32825,7 +32825,7 @@ function funnel(preset) {
32825
32825
  });
32826
32826
  b.phase(
32827
32827
  "funnel",
32828
- { duration: 2400, title: preset.topic, body: "funnel \u5168 stage \u3092\u9006\u4E09\u89D2\u5F62 + count \u3067\u63CF\u753B\u3002" },
32828
+ { duration: 2400, title: preset.topic, body: "\u3059\u3079\u3066\u306E\u6BB5\u968E\u3092\u3001\u4EBA\u6570\u3068\u3068\u3082\u306B\u4E0A\u304B\u3089\u7D5E\u308A\u8FBC\u3093\u3060\u59FF\u3002" },
32829
32829
  (p) => p.activate(nodeId).badge("funnel")
32830
32830
  );
32831
32831
  return b.build();
@@ -32874,7 +32874,7 @@ function quadrant(preset) {
32874
32874
  });
32875
32875
  b.phase(
32876
32876
  "quadrant",
32877
- { duration: 2400, title: preset.topic, body: "quadrant \u5341\u5B57\u8EF8 + 4 \u8C61\u9650 + item \u3092\u63CF\u753B\u3002" },
32877
+ { duration: 2400, title: preset.topic, body: "2 \u672C\u306E\u8EF8\u3067\u5206\u3051\u305F 4 \u3064\u306E\u67A0\u306B\u3001\u3059\u3079\u3066\u306E\u9805\u76EE\u3092\u7F6E\u3044\u305F\u59FF\u3002" },
32878
32878
  (p) => p.activate(nodeId).badge("quadrant")
32879
32879
  );
32880
32880
  return b.build();
@@ -32925,7 +32925,7 @@ function chart(preset) {
32925
32925
  });
32926
32926
  b.phase(
32927
32927
  "chart",
32928
- { duration: 2400, title: preset.topic, body: `${preset.type} chart \u306E\u5168 datum \u3092 visible \u5316\u3002` },
32928
+ { duration: 2400, title: preset.topic, body: "\u3059\u3079\u3066\u306E\u5024\u3092\u63CF\u3044\u305F\u30B0\u30E9\u30D5\u3002" },
32929
32929
  (p) => p.activate(nodeId).badge(preset.type)
32930
32930
  );
32931
32931
  return b.build();
@@ -32978,7 +32978,7 @@ function gantt(preset) {
32978
32978
  });
32979
32979
  b.phase(
32980
32980
  "gantt",
32981
- { duration: 2400, title: preset.topic, body: "gantt \u5168 task \u3092 visible \u5316\u3001 \u5E2F\u72B6 timeline + \u4F9D\u5B58 arrow \u3067\u63CF\u753B\u3002" },
32981
+ { duration: 2400, title: preset.topic, body: "\u3059\u3079\u3066\u306E\u4F5C\u696D\u3092\u3001\u671F\u9593\u306E\u5E2F\u3068\u524D\u5F8C\u95A2\u4FC2\u306E\u77E2\u5370\u3067\u4E26\u3079\u305F\u5DE5\u7A0B\u3002" },
32982
32982
  (p) => p.activate(nodeId).badge("gantt")
32983
32983
  );
32984
32984
  return b.build();
@@ -32994,11 +32994,11 @@ var SHAPE_KIND = {
32994
32994
  loop: "card"
32995
32995
  };
32996
32996
  var SHAPE_EYEBROW = {
32997
- process: "process",
32998
- decision: "decision",
32999
- start: "start",
33000
- end: "end",
33001
- loop: "loop"
32997
+ process: "\u51E6\u7406",
32998
+ decision: "\u5224\u65AD",
32999
+ start: "\u958B\u59CB",
33000
+ end: "\u7D42\u4E86",
33001
+ loop: "\u7E70\u308A\u8FD4\u3057"
33002
33002
  };
33003
33003
  function flowchart(preset) {
33004
33004
  const laneW = preset.laneWidth ?? 380;
@@ -33046,7 +33046,7 @@ function flowchart(preset) {
33046
33046
  build() {
33047
33047
  b.phase(
33048
33048
  "flowchart",
33049
- { duration: 2400, title: preset.topic, body: "flowchart \u5168 node + edge \u3092 visible \u5316\u3001 swimlane + decision \u3092\u8868\u73FE\u3002" },
33049
+ { duration: 2400, title: preset.topic, body: "\u3059\u3079\u3066\u306E\u51E6\u7406\u3068\u5206\u5C90\u3092\u3001\u62C5\u5F53\u3054\u3068\u306E\u30EC\u30FC\u30F3\u306B\u4E26\u3079\u305F\u6D41\u308C\u3002" },
33050
33050
  (p) => p.activate(...phaseActivate).badge("flowchart")
33051
33051
  );
33052
33052
  return b.build();
@@ -33061,6 +33061,13 @@ var NET_KIND_MAP = {
33061
33061
  server: "backend",
33062
33062
  client: "actor"
33063
33063
  };
33064
+ var NET_KIND_LABEL = {
33065
+ router: "\u30EB\u30FC\u30BF\u30FC",
33066
+ switch: "\u30B9\u30A4\u30C3\u30C1",
33067
+ firewall: "\u30D5\u30A1\u30A4\u30A2\u30A6\u30A9\u30FC\u30EB",
33068
+ server: "\u30B5\u30FC\u30D0\u30FC",
33069
+ client: "\u7AEF\u672B"
33070
+ };
33064
33071
  function network(preset) {
33065
33072
  const laneW = preset.laneWidth ?? 320;
33066
33073
  const tone = preset.defaultTone ?? "info";
@@ -33076,7 +33083,7 @@ function network(preset) {
33076
33083
  b.lane(laneId, { width: laneW });
33077
33084
  colLaneIds.set(d.col, laneId);
33078
33085
  }
33079
- const eyebrowParts = [d.kind];
33086
+ const eyebrowParts = [NET_KIND_LABEL[d.kind]];
33080
33087
  if (d.segment) eyebrowParts.push(d.segment);
33081
33088
  b.node(d.id, {
33082
33089
  lane: laneId,
@@ -33102,7 +33109,7 @@ function network(preset) {
33102
33109
  build() {
33103
33110
  b.phase(
33104
33111
  "network",
33105
- { duration: 2400, title: preset.topic, body: "network \u5168 device + link \u3092 visible \u5316\u3002" },
33112
+ { duration: 2400, title: preset.topic, body: "\u3059\u3079\u3066\u306E\u6A5F\u5668\u3068\u63A5\u7D9A\u3092\u4E26\u3079\u305F\u69CB\u6210\u3002" },
33106
33113
  (p) => p.activate(...phaseActivate).badge("network")
33107
33114
  );
33108
33115
  return b.build();
@@ -33118,18 +33125,21 @@ function stateMachine2(preset) {
33118
33125
  const stateOrder = /* @__PURE__ */ new Map();
33119
33126
  const phaseActivate = [];
33120
33127
  let transIdx = 0;
33128
+ const \u984C = /* @__PURE__ */ new Map();
33129
+ const \u89AA = /* @__PURE__ */ new Map();
33121
33130
  const api = {
33122
33131
  state(s) {
33123
33132
  const laneId = `lane-${s.id}`;
33124
33133
  b.lane(laneId, { width: laneW });
33134
+ \u984C.set(s.id, s.title);
33135
+ if (s.parent) \u89AA.set(s.id, s.parent);
33125
33136
  const eyebrowParts = [];
33126
33137
  if (s.initial) eyebrowParts.push("\u521D\u671F");
33127
33138
  else if (s.final) eyebrowParts.push("\u6700\u7D42");
33128
33139
  else eyebrowParts.push("\u72B6\u614B");
33129
- if (s.parent) eyebrowParts.push(`nested in ${s.parent}`);
33130
33140
  const subtitleParts = [];
33131
- if (s.entry) subtitleParts.push(`entry: ${s.entry}`);
33132
- if (s.exit) subtitleParts.push(`exit: ${s.exit}`);
33141
+ if (s.entry) subtitleParts.push(`\u5165\u308B\u6642: ${s.entry}`);
33142
+ if (s.exit) subtitleParts.push(`\u51FA\u308B\u6642: ${s.exit}`);
33133
33143
  b.node(s.id, {
33134
33144
  lane: laneId,
33135
33145
  stack: 0,
@@ -33162,10 +33172,23 @@ function stateMachine2(preset) {
33162
33172
  build() {
33163
33173
  b.phase(
33164
33174
  "sm2",
33165
- { duration: 2400, title: preset.topic, body: "\u62E1\u5F35 FSM (nested + action) \u3092 visible \u5316\u3002" },
33175
+ {
33176
+ duration: 2400,
33177
+ title: preset.topic,
33178
+ body: "\u5165\u308C\u5B50\u306E\u72B6\u614B\u3068\u3001\u5165\u308B\u6642\u30FB\u51FA\u308B\u6642\u306E\u51E6\u7406\u3092\u542B\u3081\u305F\u3001\u3059\u3079\u3066\u306E\u72B6\u614B\u3068\u9077\u79FB\u3002"
33179
+ },
33166
33180
  (p) => p.activate(...phaseActivate).badge("statemachine2")
33167
33181
  );
33168
- return b.build();
33182
+ const d = b.build();
33183
+ return {
33184
+ ...d,
33185
+ nodes: d.nodes.map((n) => {
33186
+ const \u89AA\u306E\u8B58\u5225\u5B50 = \u89AA.get(n.id);
33187
+ if (\u89AA\u306E\u8B58\u5225\u5B50 === void 0) return n;
33188
+ const \u89AA\u306E\u984C = \u984C.get(\u89AA\u306E\u8B58\u5225\u5B50) ?? \u89AA\u306E\u8B58\u5225\u5B50;
33189
+ return { ...n, eyebrow: `${n.eyebrow ?? "\u72B6\u614B"} / ${\u89AA\u306E\u984C}\u306E\u4E2D` };
33190
+ })
33191
+ };
33169
33192
  }
33170
33193
  };
33171
33194
  return api;