@cardenelabs/dragon 0.33.0 → 0.34.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.d.cts CHANGED
@@ -26,9 +26,8 @@ declare const DIRECTION_ALIAS: Record<string, DslDirection>;
26
26
  *
27
27
  * 書かなければ **書いた順** のまま。 `種類` と書くと箱の種類で並べ替えてから置く。
28
28
  *
29
- * これは図の型として持っていた差を語に出したもの。 並べ替えの鍵しか持たない型
30
- * (`solidity`) が在り、`compile.ts` は「順序図 または その型」 という条件を 6 か所で
31
- * 書いていた。 **型が 1 つ増えるたびに条件を 2 つ並べる形**になるので、差が並べ替えだけなら
29
+ * これは図の型として持っていた差を語に出したもの。 並べ替えの鍵しか持たない型が在り、
30
+ * `compile.ts` は「順序図 または その型」 という条件を 6 か所で書いていた。 **型が 1 つ増えるたびに条件を 2 つ並べる形**になるので、差が並べ替えだけなら
32
31
  * 型ではなく語で表す。
33
32
  */
34
33
  declare const ORDERS: readonly ["種類"];
@@ -187,16 +186,15 @@ declare const PRESET_TYPES: ReadonlySet<PresetType>;
187
186
  * 図種の別名 (#2655 / #2657)。
188
187
  *
189
188
  * **差が語 1 つしかない図種を、畳んだ先の型とその語に読み替える**。
189
+ * 数を描く 9 つは `chart` + `shape: <綴り>` に読み替える = 同じ組み立て関数に渡す文字列 2 つ
190
+ * しか違わない。
190
191
  *
191
- * | 古い綴り | 読み替え先 | 差 |
192
- * |---|---|---|
193
- * | `solidity` | `sequence` + `order: 種類` | 箱を種類で並べ替えるだけで、独自の組み立てを持たない |
194
- * | 数を描く 9 つ | `chart` + `shape: <綴り>` | 同じ組み立て関数に渡す文字列 2 つしか違わない |
195
- *
196
- * 型として持つと、同じ扱いをする条件と表が型の数だけ増える。 `solidity` は
197
- * 「順序図 または その型」 という条件を 12 か所に増やし、数を描く 9 つは 4 つの表に
192
+ * 型として持つと、同じ扱いをする条件と表が型の数だけ増える。 数を描く 9 つは 4 つの表に
198
193
  * 同じ値の行を 9 行ずつ並べていた (足す人が 1 か所書き忘れると黙って外れる)。
199
194
  *
195
+ * `solidity` も `sequence` + `order: 種類` への別名だったが、特定の技術に向けた図種なので
196
+ * 外した (#2947)。 書いた人には `removed-syntax.ts` の表が置き換え先を返す。
197
+ *
200
198
  * **読み替えは読み取りの入口 1 か所に閉じる**。 ここを通った後は古い綴りが
201
199
  * どこにも残らないので、組み立て側は畳んだ先の型として 1 通りに扱える。
202
200
  *
@@ -204,21 +202,20 @@ declare const PRESET_TYPES: ReadonlySet<PresetType>;
204
202
  */
205
203
  type 読み替え先 = {
206
204
  type: PresetType;
207
- order?: DslOrder;
208
205
  shape?: DslShape;
209
206
  };
210
207
  declare const TYPE_ALIASES: ReadonlyMap<string, 読み替え先>;
211
208
  /**
212
209
  * 記法だけが持つ種類。 描画側には無いが、 図種ごとの組み立てで意味を持つ。
213
210
  *
214
- * `contract` / `eoa` / `multisig` / `proxy` / `library` / `interface` は Solidity 図の
215
- * 役割分けに、 `entity` / `state` は ER 図と状態遷移図に使う。
211
+ * `entity` / `state` は ER 図と状態遷移図に使う。 Solidity の図の役割分け
212
+ * (`contract` / `eoa` など) は外した (#2947、置き換え先は `removed-syntax.ts`)。
216
213
  *
217
214
  * **描画側へ渡す前に必ず読み替える** (`compile.ts` の `描ける種別`)。 読み替えを通さずに渡すと
218
215
  * 図の組み立てが落ちる = 描画側は知らない種類の大きさを引けない (#1420 で実測、
219
216
  * `Cannot read properties of undefined (reading 'h')`)。
220
217
  */
221
- declare const DSL_ONLY_KINDS: readonly ["entity", "state", "contract", "eoa", "multisig", "proxy", "library", "interface", "loop"];
218
+ declare const DSL_ONLY_KINDS: readonly ["entity", "state", "loop"];
222
219
  /** 記法だけが持つ種類。 描画側の `NodeKind` には含まれない */
223
220
  type DslOnlyKind = (typeof DSL_ONLY_KINDS)[number];
224
221
  /**
@@ -389,8 +386,8 @@ declare function orderByDependency(items: ReadonlyArray<{
389
386
  /**
390
387
  * 記法が書ける箱の種類 (#1420)。
391
388
  *
392
- * 描画できる種類 (`NodeKind`) に、**記法だけが持つ種類** (`contract` / `eoa` など) を足す。
393
- * 後者は図種ごとの役割分け (`solidity` の縦列の並べ替えなど) に使い、描画側へ渡す手前で
389
+ * 描画できる種類 (`NodeKind`) に、**記法だけが持つ種類** (`entity` / `state` など) を足す。
390
+ * 後者は図種ごとの役割分け (ER 図の実体など) に使い、描画側へ渡す手前で
394
391
  * `compile.ts` の `描ける種別` が読み替える。
395
392
  *
396
393
  * `NodeKind` だけに縛っていた間、記法が受ける値を型が表せていなかった。
@@ -741,8 +738,8 @@ type DslDocument = {
741
738
  * 効くのは順序図だけで、他の図種は並び方そのものが読み方を担うため書いても効かない
742
739
  * (知らせを出す)。
743
740
  *
744
- * 並べ替えの鍵しか持たない図種 (`solidity`) を畳んだ先。 読み取りの入口で
745
- * 順序図 + この語 に読み替えるので、古い名前で書いた記法はそのまま動く。
741
+ * 並べ替えの鍵しか持たない図種を畳んだ先。 その図種 (`solidity`) は特定の技術に向けた
742
+ * 名前なので外した (#2947)。
746
743
  */
747
744
  order?: DslOrder;
748
745
  /** `order:` を書いた行。 効かない時の知らせで、書いた場所を指すために持つ */
@@ -2087,7 +2084,7 @@ declare function 書いた場所の鍵(...道: readonly (string | number)[]): st
2087
2084
  */
2088
2085
 
2089
2086
  /** 古い綴りで書いた図種 (#2655 / #2657)。 受ける値は `TYPE_ALIASES` が SSOT */
2090
- type 図種の別名 = "solidity" | DslShape;
2087
+ type 図種の別名 = DslShape;
2091
2088
  /**
2092
2089
  * LLM 向け JSON DSL の入力 shape。 YAML DSL と 1:1 対応、 top-level は flat な object。
2093
2090
  */
@@ -2097,8 +2094,9 @@ interface DragonJson {
2097
2094
  /**
2098
2095
  * preset type (必須)。 受け付ける値は `PRESET_TYPES` と `TYPE_ALIASES` が SSOT。
2099
2096
  *
2100
- * 別名 (#2655 / #2657) は読み取りで図種と語の 2 つに開く = `solidity` と書いた JSON は
2101
- * 順序図 + 種類で並べ替え、`pie` と書いた JSON は 数を描く図 + 円の形 として読まれる。
2097
+ * 別名 (#2655 / #2657) は読み取りで図種と語の 2 つに開く = `pie` と書いた JSON は
2098
+ * 数を描く図 + 円の形 として読まれる。 外した図種 (`solidity`) は置き換え先を誤りとして返す
2099
+ * (#2947、`v05/removed-syntax.ts`)。
2102
2100
  */
2103
2101
  type: PresetType | 図種の別名;
2104
2102
  /** 円グラフの見せ方。 */
package/dist/index.d.ts CHANGED
@@ -26,9 +26,8 @@ declare const DIRECTION_ALIAS: Record<string, DslDirection>;
26
26
  *
27
27
  * 書かなければ **書いた順** のまま。 `種類` と書くと箱の種類で並べ替えてから置く。
28
28
  *
29
- * これは図の型として持っていた差を語に出したもの。 並べ替えの鍵しか持たない型
30
- * (`solidity`) が在り、`compile.ts` は「順序図 または その型」 という条件を 6 か所で
31
- * 書いていた。 **型が 1 つ増えるたびに条件を 2 つ並べる形**になるので、差が並べ替えだけなら
29
+ * これは図の型として持っていた差を語に出したもの。 並べ替えの鍵しか持たない型が在り、
30
+ * `compile.ts` は「順序図 または その型」 という条件を 6 か所で書いていた。 **型が 1 つ増えるたびに条件を 2 つ並べる形**になるので、差が並べ替えだけなら
32
31
  * 型ではなく語で表す。
33
32
  */
34
33
  declare const ORDERS: readonly ["種類"];
@@ -187,16 +186,15 @@ declare const PRESET_TYPES: ReadonlySet<PresetType>;
187
186
  * 図種の別名 (#2655 / #2657)。
188
187
  *
189
188
  * **差が語 1 つしかない図種を、畳んだ先の型とその語に読み替える**。
189
+ * 数を描く 9 つは `chart` + `shape: <綴り>` に読み替える = 同じ組み立て関数に渡す文字列 2 つ
190
+ * しか違わない。
190
191
  *
191
- * | 古い綴り | 読み替え先 | 差 |
192
- * |---|---|---|
193
- * | `solidity` | `sequence` + `order: 種類` | 箱を種類で並べ替えるだけで、独自の組み立てを持たない |
194
- * | 数を描く 9 つ | `chart` + `shape: <綴り>` | 同じ組み立て関数に渡す文字列 2 つしか違わない |
195
- *
196
- * 型として持つと、同じ扱いをする条件と表が型の数だけ増える。 `solidity` は
197
- * 「順序図 または その型」 という条件を 12 か所に増やし、数を描く 9 つは 4 つの表に
192
+ * 型として持つと、同じ扱いをする条件と表が型の数だけ増える。 数を描く 9 つは 4 つの表に
198
193
  * 同じ値の行を 9 行ずつ並べていた (足す人が 1 か所書き忘れると黙って外れる)。
199
194
  *
195
+ * `solidity` も `sequence` + `order: 種類` への別名だったが、特定の技術に向けた図種なので
196
+ * 外した (#2947)。 書いた人には `removed-syntax.ts` の表が置き換え先を返す。
197
+ *
200
198
  * **読み替えは読み取りの入口 1 か所に閉じる**。 ここを通った後は古い綴りが
201
199
  * どこにも残らないので、組み立て側は畳んだ先の型として 1 通りに扱える。
202
200
  *
@@ -204,21 +202,20 @@ declare const PRESET_TYPES: ReadonlySet<PresetType>;
204
202
  */
205
203
  type 読み替え先 = {
206
204
  type: PresetType;
207
- order?: DslOrder;
208
205
  shape?: DslShape;
209
206
  };
210
207
  declare const TYPE_ALIASES: ReadonlyMap<string, 読み替え先>;
211
208
  /**
212
209
  * 記法だけが持つ種類。 描画側には無いが、 図種ごとの組み立てで意味を持つ。
213
210
  *
214
- * `contract` / `eoa` / `multisig` / `proxy` / `library` / `interface` は Solidity 図の
215
- * 役割分けに、 `entity` / `state` は ER 図と状態遷移図に使う。
211
+ * `entity` / `state` は ER 図と状態遷移図に使う。 Solidity の図の役割分け
212
+ * (`contract` / `eoa` など) は外した (#2947、置き換え先は `removed-syntax.ts`)。
216
213
  *
217
214
  * **描画側へ渡す前に必ず読み替える** (`compile.ts` の `描ける種別`)。 読み替えを通さずに渡すと
218
215
  * 図の組み立てが落ちる = 描画側は知らない種類の大きさを引けない (#1420 で実測、
219
216
  * `Cannot read properties of undefined (reading 'h')`)。
220
217
  */
221
- declare const DSL_ONLY_KINDS: readonly ["entity", "state", "contract", "eoa", "multisig", "proxy", "library", "interface", "loop"];
218
+ declare const DSL_ONLY_KINDS: readonly ["entity", "state", "loop"];
222
219
  /** 記法だけが持つ種類。 描画側の `NodeKind` には含まれない */
223
220
  type DslOnlyKind = (typeof DSL_ONLY_KINDS)[number];
224
221
  /**
@@ -389,8 +386,8 @@ declare function orderByDependency(items: ReadonlyArray<{
389
386
  /**
390
387
  * 記法が書ける箱の種類 (#1420)。
391
388
  *
392
- * 描画できる種類 (`NodeKind`) に、**記法だけが持つ種類** (`contract` / `eoa` など) を足す。
393
- * 後者は図種ごとの役割分け (`solidity` の縦列の並べ替えなど) に使い、描画側へ渡す手前で
389
+ * 描画できる種類 (`NodeKind`) に、**記法だけが持つ種類** (`entity` / `state` など) を足す。
390
+ * 後者は図種ごとの役割分け (ER 図の実体など) に使い、描画側へ渡す手前で
394
391
  * `compile.ts` の `描ける種別` が読み替える。
395
392
  *
396
393
  * `NodeKind` だけに縛っていた間、記法が受ける値を型が表せていなかった。
@@ -741,8 +738,8 @@ type DslDocument = {
741
738
  * 効くのは順序図だけで、他の図種は並び方そのものが読み方を担うため書いても効かない
742
739
  * (知らせを出す)。
743
740
  *
744
- * 並べ替えの鍵しか持たない図種 (`solidity`) を畳んだ先。 読み取りの入口で
745
- * 順序図 + この語 に読み替えるので、古い名前で書いた記法はそのまま動く。
741
+ * 並べ替えの鍵しか持たない図種を畳んだ先。 その図種 (`solidity`) は特定の技術に向けた
742
+ * 名前なので外した (#2947)。
746
743
  */
747
744
  order?: DslOrder;
748
745
  /** `order:` を書いた行。 効かない時の知らせで、書いた場所を指すために持つ */
@@ -2087,7 +2084,7 @@ declare function 書いた場所の鍵(...道: readonly (string | number)[]): st
2087
2084
  */
2088
2085
 
2089
2086
  /** 古い綴りで書いた図種 (#2655 / #2657)。 受ける値は `TYPE_ALIASES` が SSOT */
2090
- type 図種の別名 = "solidity" | DslShape;
2087
+ type 図種の別名 = DslShape;
2091
2088
  /**
2092
2089
  * LLM 向け JSON DSL の入力 shape。 YAML DSL と 1:1 対応、 top-level は flat な object。
2093
2090
  */
@@ -2097,8 +2094,9 @@ interface DragonJson {
2097
2094
  /**
2098
2095
  * preset type (必須)。 受け付ける値は `PRESET_TYPES` と `TYPE_ALIASES` が SSOT。
2099
2096
  *
2100
- * 別名 (#2655 / #2657) は読み取りで図種と語の 2 つに開く = `solidity` と書いた JSON は
2101
- * 順序図 + 種類で並べ替え、`pie` と書いた JSON は 数を描く図 + 円の形 として読まれる。
2097
+ * 別名 (#2655 / #2657) は読み取りで図種と語の 2 つに開く = `pie` と書いた JSON は
2098
+ * 数を描く図 + 円の形 として読まれる。 外した図種 (`solidity`) は置き換え先を誤りとして返す
2099
+ * (#2947、`v05/removed-syntax.ts`)。
2102
2100
  */
2103
2101
  type: PresetType | 図種の別名;
2104
2102
  /** 円グラフの見せ方。 */
package/dist/index.js CHANGED
@@ -550,17 +550,10 @@ function \u5F8C\u308D\u3078\u623B\u308B\u77E2\u5370\u304B(kind, fromId, toId, \u
550
550
 
551
551
  // src/compile/order.ts
552
552
  var \u7A2E\u985E\u306E\u6BB5 = {
553
- eoa: 0,
554
553
  actor: 0,
555
- multisig: 0,
556
554
  signer: 0,
557
- wallet: 0,
558
- contract: 1,
559
- proxy: 1,
560
- library: 1,
561
- interface: 1,
562
- storage: 2,
563
- event: 3
555
+ storage: 1,
556
+ event: 2
564
557
  };
565
558
  var \u8868\u306B\u7121\u3044\u7A2E\u985E\u306E\u6BB5 = 5;
566
559
  var \u4E26\u3073\u9806\u3092\u9078\u3079\u308B\u56F3\u7A2E = /* @__PURE__ */ new Set(["sequence"]);
@@ -620,12 +613,6 @@ function \u59CB\u307E\u308A\u3068\u7D42\u308F\u308A\u306E\u6C7A\u3081\u65B9(doc,
620
613
  var \u8A18\u6CD5\u3060\u3051\u306E\u7A2E\u985E\u306E\u8AAD\u307F\u66FF\u3048 = {
621
614
  entity: "storage",
622
615
  state: "card",
623
- contract: "card",
624
- proxy: "card",
625
- library: "card",
626
- interface: "card",
627
- eoa: "person",
628
- multisig: "signer",
629
616
  loop: "card"
630
617
  };
631
618
  function \u63CF\u3051\u308B\u7A2E\u5225(kind) {
@@ -3357,6 +3344,79 @@ function \u7DE8\u96C6\u8DDD\u96E2(a, b, \u4E0A\u9650) {
3357
3344
  return \u524D[b.length];
3358
3345
  }
3359
3346
 
3347
+ // src/v05/removed-syntax.ts
3348
+ var \u5916\u3057\u305F\u56F3\u7A2E = /* @__PURE__ */ new Map([
3349
+ ["solidity", "`type: sequence` \u3068 `order: \u7A2E\u985E`"]
3350
+ ]);
3351
+ var \u5916\u3057\u305F\u633F\u7D75\u306E\u7A2E\u985E = [
3352
+ "shape-kanban-card",
3353
+ "shape-message-bubble",
3354
+ "shape-gear",
3355
+ "shape-network-node",
3356
+ "shape-iot-sensor",
3357
+ "shape-robot-arm",
3358
+ "shape-satellite",
3359
+ "shape-website",
3360
+ "shape-cdn-edge",
3361
+ "shape-api-gateway",
3362
+ "shape-storefront",
3363
+ "shape-warehouse",
3364
+ "shape-online-shop",
3365
+ "shape-customer-service",
3366
+ "shape-lawyer",
3367
+ "shape-auditor",
3368
+ "shape-regulator",
3369
+ "shape-notary",
3370
+ "shape-trader",
3371
+ "shape-smart-contract",
3372
+ "shape-blockchain-block",
3373
+ "shape-blockchain",
3374
+ "shape-bitcoin-chain",
3375
+ "shape-ethereum-chain",
3376
+ "shape-blockchain-node",
3377
+ "shape-rpc-node",
3378
+ "shape-wallet",
3379
+ "shape-nft",
3380
+ "shape-token",
3381
+ "shape-bank",
3382
+ "shape-trust-bank",
3383
+ "shape-payment-provider",
3384
+ "shape-credit-card",
3385
+ "shape-brokerage",
3386
+ "shape-exchange",
3387
+ "shape-atm"
3388
+ ];
3389
+ var \u633F\u7D75\u306E\u4EE3\u308F\u308A = "\u57FA\u672C\u306E\u5F62 (`shape-file` / `shape-cylinder` \u306A\u3069) \u3092\u4F7F\u3046\u304B\u3001\u7BB1\u306B `kindForm: icon` \u3068 `icon` \u3092\u66F8\u304F";
3390
+ var \u5916\u3057\u305F\u7A2E\u985E = new Map([
3391
+ ["contract", "`card`"],
3392
+ ["proxy", "`card`"],
3393
+ ["library", "`card`"],
3394
+ ["interface", "`card`"],
3395
+ ["eoa", "`person`"],
3396
+ ["multisig", "`signer`"],
3397
+ ["alb", "`api`"],
3398
+ ["ecs", "`microservice`"],
3399
+ ["iam", "`admin`"],
3400
+ ["kms", "`admin`"],
3401
+ ["lambda", "`function`"],
3402
+ ["rds", "`database`"],
3403
+ ["s3", "`storage`"],
3404
+ ...\u5916\u3057\u305F\u633F\u7D75\u306E\u7A2E\u985E.map((k) => [k, \u633F\u7D75\u306E\u4EE3\u308F\u308A])
3405
+ ]);
3406
+ function \u5916\u3057\u305F\u7A2E\u985E\u306E\u77E5\u3089\u305B(kind) {
3407
+ const \u4EE3\u308F\u308A = \u5916\u3057\u305F\u7A2E\u985E.get(kind);
3408
+ if (\u4EE3\u308F\u308A === void 0) return void 0;
3409
+ return {
3410
+ message: `\u7BB1\u306E\u7A2E\u985E "${kind}" \u306F\u5916\u3057\u307E\u3057\u305F`,
3411
+ hint: \u5916\u3057\u305F\u633F\u7D75\u306E\u7A2E\u985E.includes(kind) ? \u4EE3\u308F\u308A : `\u4EE3\u308F\u308A\u306B ${\u4EE3\u308F\u308A} \u3092\u66F8\u304F`
3412
+ };
3413
+ }
3414
+ function \u5916\u3057\u305F\u56F3\u7A2E\u306E\u77E5\u3089\u305B(type) {
3415
+ const \u4EE3\u308F\u308A = \u5916\u3057\u305F\u56F3\u7A2E.get(type);
3416
+ if (\u4EE3\u308F\u308A === void 0) return void 0;
3417
+ return { message: `\u56F3\u7A2E "${type}" \u306F\u5916\u3057\u307E\u3057\u305F`, hint: `\u4EE3\u308F\u308A\u306B ${\u4EE3\u308F\u308A} \u3092\u66F8\u304F` };
3418
+ }
3419
+
3360
3420
  // src/relative-pos.ts
3361
3421
  var RELATIVE_DIRECTIONS = ["right", "left", "above", "below"];
3362
3422
  var RELATIVE_GAP_DEFAULT = 160;
@@ -5237,7 +5297,6 @@ var PRESET_TYPES = /* @__PURE__ */ new Set([
5237
5297
  "mind"
5238
5298
  ]);
5239
5299
  var TYPE_ALIASES = new Map([
5240
- ["solidity", { type: "sequence", order: "\u7A2E\u985E" }],
5241
5300
  ...SHAPES.map((s) => [s, { type: "chart", shape: s }])
5242
5301
  ]);
5243
5302
  function shape\u306E\u6848\u5185(type) {
@@ -5249,34 +5308,14 @@ var NODE_KIND_DEFAULT = "actor";
5249
5308
  var DSL_ONLY_KINDS = [
5250
5309
  "entity",
5251
5310
  "state",
5252
- "contract",
5253
- "eoa",
5254
- "multisig",
5255
- "proxy",
5256
- "library",
5257
- "interface",
5258
5311
  // 繰り返しの箱 (#2523)。 描画側は分かれ道の図の形としてだけ持ち、種類としては持たないため
5259
5312
  // ここに置く。 分かれ道の図では形に読み替わり (`compile/flowchart.ts`)、それ以外の図種では
5260
5313
  // `記法だけの種類の読み替え` が札に落とす
5261
5314
  "loop"
5262
5315
  ];
5263
5316
  var INFRA_KIND_ALIAS = {
5264
- alb: "shape-api-gateway",
5265
- // 入口で振り分ける
5266
5317
  browser: "frontend",
5267
5318
  // 画面側
5268
- ecs: "microservice",
5269
- // コンテナ群
5270
- iam: "admin",
5271
- // 権限を守る
5272
- kms: "admin",
5273
- // 鍵を守る
5274
- lambda: "function",
5275
- // 呼ぶと動く
5276
- rds: "database",
5277
- // 表を持つ
5278
- s3: "storage",
5279
- // 置き場
5280
5319
  secret: "storage",
5281
5320
  // 機密の置き場
5282
5321
  user: "person",
@@ -5943,12 +5982,12 @@ function parseTextDslV05(src) {
5943
5982
  if (head.key === "type") {
5944
5983
  const v = (head.value ?? "").trim().toLowerCase();
5945
5984
  const \u5225\u540D = TYPE_ALIASES.get(v);
5946
- if (\u5225\u540D !== void 0) {
5985
+ const \u5916\u3057\u305F = \u5916\u3057\u305F\u56F3\u7A2E\u306E\u77E5\u3089\u305B(v);
5986
+ if (\u5916\u3057\u305F !== void 0) {
5987
+ errors.push({ line: line.no, ...\u5916\u3057\u305F });
5988
+ type = "sequence";
5989
+ } else if (\u5225\u540D !== void 0) {
5947
5990
  type = \u5225\u540D.type;
5948
- if (order === null && \u5225\u540D.order !== void 0) {
5949
- order = \u5225\u540D.order;
5950
- orderLine = line.no;
5951
- }
5952
5991
  if (\u5225\u540D.shape !== void 0) {
5953
5992
  aliasShape = \u5225\u540D.shape;
5954
5993
  aliasShapeLine = line.no;
@@ -7707,6 +7746,12 @@ function reportV04Kind(kindRaw, line, errors) {
7707
7746
  hint: `v0.5 \u3067\u306F\u82F1\u8A9E\u3067\u66F8\u304F (\`${\u82F1\u8A9E}\`)`
7708
7747
  });
7709
7748
  }
7749
+ function reportRemovedKind(kindRaw, line, errors) {
7750
+ const \u77E5\u3089\u305B = \u5916\u3057\u305F\u7A2E\u985E\u306E\u77E5\u3089\u305B(kindRaw);
7751
+ if (\u77E5\u3089\u305B === void 0) return false;
7752
+ errors.push({ line, ...\u77E5\u3089\u305B });
7753
+ return true;
7754
+ }
7710
7755
  var COLOR_KEYS = /* @__PURE__ */ new Set(["\u8272", "color", "tone"]);
7711
7756
  var SCALE_KEYS = /* @__PURE__ */ new Set(["scale", "\u500D\u7387"]);
7712
7757
  var SCALE_ORDER = ["scale", "\u500D\u7387"];
@@ -7756,9 +7801,10 @@ function applyContinuationLines(actor, rest, errors) {
7756
7801
  case "\u7A2E\u985E": {
7757
7802
  const k = stripQuotes(raw).toLowerCase();
7758
7803
  reportV04Kind(k, ln.no, errors);
7759
- const isPart = k !== "" && !NODE_KIND_VALID.has(k);
7760
- out.kind = isPart ? NODE_KIND_DEFAULT : resolveNodeKind(k);
7761
- out.kindWritten = k !== "" && !isPart;
7804
+ const \u5916\u3057\u305F = reportRemovedKind(k, ln.no, errors);
7805
+ const isPart = k !== "" && !\u5916\u3057\u305F && !NODE_KIND_VALID.has(k);
7806
+ out.kind = isPart || \u5916\u3057\u305F ? NODE_KIND_DEFAULT : resolveNodeKind(k);
7807
+ out.kindWritten = k !== "" && !isPart && !\u5916\u3057\u305F;
7762
7808
  out.partId = isPart ? k : void 0;
7763
7809
  break;
7764
7810
  }
@@ -8576,7 +8622,8 @@ function parseActor2(line, errors) {
8576
8622
  if (!namePart2) return null;
8577
8623
  const opts = \u4E2D\u62EC\u5F27\u306E\u5225\u540D\u3092\u5BC4\u305B\u308B(parseInlineMapping(mapMatch.inner));
8578
8624
  const kindRaw = (opts.kind ?? "").toLowerCase();
8579
- const isPart = kindRaw !== "" && !NODE_KIND_VALID.has(kindRaw);
8625
+ const \u5916\u3057\u305F = reportRemovedKind(kindRaw, line.no, errors);
8626
+ const isPart = kindRaw !== "" && !\u5916\u3057\u305F && !NODE_KIND_VALID.has(kindRaw);
8580
8627
  const inlineScale = resolveScale(writtenScaleFields(mapMatch.inner), line.no, errors);
8581
8628
  reportScaleOnNonPart(isPart, inlineScale.keys[0], line.no, errors);
8582
8629
  reportUnknownInlineKeys(isPart, mapMatch.inner, line.no, errors);
@@ -8622,7 +8669,7 @@ function parseActor2(line, errors) {
8622
8669
  kind,
8623
8670
  // parts 候補は `kind` を既定に倒して `partId` へ退避するため、 名札に載せる種類としては
8624
8671
  // 「書かなかった」 と同じ扱いにする (#1058)
8625
- kindWritten: kindRaw !== "" && !isPart,
8672
+ kindWritten: kindRaw !== "" && !isPart && !\u5916\u3057\u305F,
8626
8673
  subtitle: opts.subtitle,
8627
8674
  kindForm: \u9589\u3058\u305F\u7BB1\u306E\u5024("kindForm", KIND_FORM_VALUES),
8628
8675
  icon: \u9589\u3058\u305F\u7BB1\u306E\u5024("icon", CDL_ICON_VALUES),
@@ -8693,7 +8740,8 @@ function parseActor2(line, errors) {
8693
8740
  const rest = raw.slice(idx + 1).trim();
8694
8741
  if (!namePart2) return null;
8695
8742
  const v = classifyValues(splitValues(rest), line.no, errors);
8696
- const isPart = v.kind !== "" && !NODE_KIND_VALID.has(v.kind);
8743
+ const \u5916\u3057\u305F = reportRemovedKind(v.kind, line.no, errors);
8744
+ const isPart = v.kind !== "" && !\u5916\u3057\u305F && !NODE_KIND_VALID.has(v.kind);
8697
8745
  reportV04Kind(v.kind, line.no, errors);
8698
8746
  reportScaleOnNonPart(isPart, v.scaleKeys?.[0], line.no, errors);
8699
8747
  const kind = isPart ? NODE_KIND_DEFAULT : resolveNodeKind(NODE_KIND_VALID.has(v.kind) ? v.kind : "");
@@ -8702,7 +8750,7 @@ function parseActor2(line, errors) {
8702
8750
  kind,
8703
8751
  // parts 候補は `kind` を既定に倒して `partId` へ退避するため、 名札に載せる種類としては
8704
8752
  // 「書かなかった」 と同じ扱いにする (#1058)
8705
- kindWritten: v.kind !== "" && !isPart,
8753
+ kindWritten: v.kind !== "" && !isPart && !\u5916\u3057\u305F,
8706
8754
  // parts では `tone` を状態の上書きとして扱うため、 色として渡さない
8707
8755
  tone: isPart ? void 0 : v.tone,
8708
8756
  subtitle: v.subtitle,
@@ -15279,7 +15327,12 @@ function \u5024\u3092\u691C\u67FB(v, \u578B, path, \u540D\u524D, errors) {
15279
15327
  });
15280
15328
  }
15281
15329
  return;
15282
- case "\u5FC5\u9808\u306E\u56F3\u7A2E":
15330
+ case "\u5FC5\u9808\u306E\u56F3\u7A2E": {
15331
+ const \u5916\u3057\u305F = typeof v === "string" ? \u5916\u3057\u305F\u56F3\u7A2E\u306E\u77E5\u3089\u305B(v) : void 0;
15332
+ if (\u5916\u3057\u305F !== void 0) {
15333
+ errors.push({ path, message: `${\u540D\u524D} "${String(v)}" was removed`, hint: \u5916\u3057\u305F.hint });
15334
+ return;
15335
+ }
15283
15336
  if (typeof v !== "string" || !(VALID_PRESETS.includes(v) || VALID_ALIASES.includes(v))) {
15284
15337
  errors.push({
15285
15338
  path,
@@ -15288,6 +15341,7 @@ function \u5024\u3092\u691C\u67FB(v, \u578B, path, \u540D\u524D, errors) {
15288
15341
  });
15289
15342
  }
15290
15343
  return;
15344
+ }
15291
15345
  case "object":
15292
15346
  case "\u4E26\u3073":
15293
15347
  case "\u5FC5\u9808\u306E\u4E26\u3073":
@@ -15365,7 +15419,7 @@ function validateRelativeAnchors(actors, errors) {
15365
15419
  }
15366
15420
  function \u898B\u672C\u306E\u540D\u524D\u304B(kind) {
15367
15421
  if (typeof kind !== "string" || kind.length === 0) return false;
15368
- return kind !== "actor" && !VALID_KIND_SET.has(kind);
15422
+ return kind !== "actor" && !\u5916\u3057\u305F\u7A2E\u985E.has(kind) && !VALID_KIND_SET.has(kind);
15369
15423
  }
15370
15424
  function validateViewport(v, errors) {
15371
15425
  if (v === void 0) return;
@@ -16550,6 +16604,10 @@ function validateJson(json) {
16550
16604
  }
16551
16605
  const ao = a;
16552
16606
  checkUnknownKeys(ao, "actor", `$.actors[${i}]`, errors);
16607
+ const \u5916\u3057\u305F = typeof ao.kind === "string" ? \u5916\u3057\u305F\u7A2E\u985E\u306E\u77E5\u3089\u305B(ao.kind) : void 0;
16608
+ if (\u5916\u3057\u305F !== void 0) {
16609
+ errors.push({ path: `$.actors[${i}].kind`, message: `kind "${String(ao.kind)}" was removed`, hint: \u5916\u3057\u305F.hint });
16610
+ }
16553
16611
  \u8868\u3067\u691C\u67FB(ao, "actor", `$.actors[${i}]`, "actor", errors);
16554
16612
  const actorEnum = (key, allowed) => {
16555
16613
  const value = ao[key];
@@ -16903,15 +16961,16 @@ function jsonToDoc(json, \u884C\u306E\u8868) {
16903
16961
  return { name: a, kind: "actor", kindWritten: false, pos: \u4F4D\u7F6E("actors", i) };
16904
16962
  }
16905
16963
  const kindStr = a.kind ?? "actor";
16906
- const isPart = kindStr !== "actor" && !VALID_KIND_SET.has(kindStr);
16964
+ const isPart = \u898B\u672C\u306E\u540D\u524D\u304B(kindStr);
16965
+ const \u5916\u3057\u305F = \u5916\u3057\u305F\u7A2E\u985E.has(kindStr);
16907
16966
  const \u8272 = a.color !== void 0 ? splitColorValue(a.color) : {};
16908
16967
  const \u66F8\u3044\u305F\u5EA7\u6A19 = a.at ?? a.\u70B9\u306E\u4F4D\u7F6E;
16909
16968
  return {
16910
16969
  name: a.name,
16911
- kind: isPart ? "actor" : resolveNodeKind(kindStr),
16970
+ kind: isPart || \u5916\u3057\u305F ? "actor" : resolveNodeKind(kindStr),
16912
16971
  // parts 候補は `kind` を `actor` に倒して `partId` へ退避するため、 名札に載せる種類としては
16913
16972
  // 「書かなかった」 と同じ扱いにする (#1058)
16914
- kindWritten: a.kind !== void 0 && !isPart,
16973
+ kindWritten: a.kind !== void 0 && !isPart && !\u5916\u3057\u305F,
16915
16974
  subtitle: a.subtitle,
16916
16975
  kindForm: isPart ? void 0 : a.kindForm,
16917
16976
  icon: isPart ? void 0 : a.icon,
@@ -17174,7 +17233,6 @@ function jsonToDoc(json, \u884C\u306E\u8868) {
17174
17233
  ...json.ganttSize !== void 0 ? { ganttSize: json.ganttSize } : {},
17175
17234
  ...json.quadrantLabelPosition !== void 0 ? { quadrantLabelPosition: json.quadrantLabelPosition } : {},
17176
17235
  ...json.quadrantSize !== void 0 ? { quadrantSize: json.quadrantSize } : {},
17177
- ...\u5225\u540D?.order !== void 0 ? { order: \u5225\u540D.order, orderPos: \u4F4D\u7F6E("type") } : {},
17178
17236
  ...\u5225\u540D?.shape !== void 0 ? { shape: \u5225\u540D.shape, shapePos: \u4F4D\u7F6E("type") } : {},
17179
17237
  // 前後の空白を落としてから見る。 記法側 (`v05/parser.ts`) が `trim()` してから
17180
17238
  // 空かどうかを判定するため、 揃えないと **空白だけの値で入口ごとに図が変わる**
@@ -17292,7 +17350,6 @@ var diagram_default = {
17292
17350
  "swimlane",
17293
17351
  "record",
17294
17352
  "topology",
17295
- "solidity",
17296
17353
  "gantt",
17297
17354
  "chart",
17298
17355
  "pie",
@@ -17311,7 +17368,7 @@ var diagram_default = {
17311
17368
  "c4",
17312
17369
  "mind"
17313
17370
  ],
17314
- description: '\u56F3\u306E\u7A2E\u985E\u3002 \u578B\u3054\u3068\u306B actors \u306E\u66F8\u304D\u65B9\u304C\u9055\u3046\u3002 [\u95A2\u4FC2\u3092\u63CF\u304F] sequence (\u6642\u7CFB\u5217\u306E\u547C\u3073\u51FA\u3057) / flow (\u51E6\u7406\u306E\u6D41\u308C) / flowchart (\u5206\u304B\u308C\u9053\u3068\u5224\u65AD\u3092\u542B\u3080\u624B\u9806) / swimlane (\u8CAC\u52D9\u3054\u3068\u306E\u6D41\u308C) / record (\u7BB1\u304C\u884C\u3092\u6301\u3061\u95A2\u4FC2\u3092\u6301\u3064\u56F3\u3002 \u8868\u306E\u3064\u306A\u304C\u308A\u3001\u79FB\u308A\u5909\u308F\u308A\u3001UML \u30AF\u30E9\u30B9\u95A2\u4FC2\u306B\u3082\u4F7F\u3046) / topology (network) / c4 (architecture) / mind (\u767A\u60F3\u306E\u679D\u5206\u304B\u308C) \u306F actors \u306B\u540D\u524D\u3092\u4E26\u3079 flow \u306B\u77E2\u5370\u3092\u66F8\u304F\u3002 [\u5024\u3092\u63CF\u304F] chart (\u6570\u306E\u4E26\u3073) \u306F actors \u306B `- \u540D\u524D: "45"` \u306E\u5F62\u3067\u6570\u3092\u66F8\u304D\u3001 shape \u3067\u5F62\u3092\u9078\u3076 (pie = \u5272\u5408 / bar = \u68D2\u306E\u9AD8\u3055 / line = \u7DDA\u306E\u9AD8\u3055\u3067\u66F8\u3044\u305F\u9806\u306B\u4E26\u3076 / gauge = \u5408\u8A08\u3092\u534A\u5186\u3067\u793A\u3059 / radial = \u5F27\u306E\u9577\u3055\u3067\u6BD4\u3079\u308B / stat = \u5024 1 \u3064\u3092\u5927\u304D\u304F\u793A\u3059 / waffle = \u5272\u5408\u3092 100 \u500B\u306E\u5370\u3067\u793A\u3059 / stacked = \u5185\u8A33\u3092\u5E2F\u3067\u793A\u3059 / slope = 2 \u6642\u70B9\u3092\u76F4\u7DDA\u3067\u3064\u306A\u304E\u5897\u6E1B\u3068\u9806\u4F4D\u306E\u5165\u308C\u66FF\u308F\u308A\u3092\u793A\u3059)\u3002 shape \u304C stat \u3068 stacked \u3068 slope \u306E\u6642\u306F `- \u540D\u524D: { value: "320", previous: "280" }` \u306E\u5F62\u3067\u524D\u306E\u6642\u70B9\u306E\u5024\u3082\u66F8\u3051\u308B\u3002 funnel (\u6BB5\u3054\u3068\u306B\u6E1B\u308B\u6570) \u3082\u540C\u3058\u5F62\u3002 [\u8A9E\u3092\u63CF\u304F] journey (\u4F53\u9A13\u306E\u8D77\u4F0F) \u306F `- \u767B\u9332: "\u4E0D\u6E80"` \u306E\u5F62\u3067 \u6700\u9AD8 / \u6E80\u8DB3 / \u666E\u901A / \u4E0D\u6E80 / \u6012\u308A \u306E\u3069\u308C\u304B\u3092\u66F8\u304F\u3002 quadrant (2 \u8EF8\u306E\u4ED5\u5206\u3051) \u306F `- \u91CD\u8907\u524A\u9664: "\u5DE6\u4E0A"` \u306E\u5F62\u3067 \u5DE6\u4E0A / \u53F3\u4E0A / \u5DE6\u4E0B / \u53F3\u4E0B \u306E\u3069\u308C\u304B\u3092\u66F8\u304F\u3002 [\u6642\u671F\u3092\u63CF\u304F] gantt (\u5DE5\u7A0B\u306E\u4E26\u3073) \u306F `- \u8A2D\u8A08: "1\u6708"` \u306E\u5F62\u3067\u59CB\u307E\u308A\u306E\u6642\u671F\u3092\u66F8\u304D\u3001 flow \u306E\u77E2\u5370\u3067\u524D\u5F8C\u95A2\u4FC2\u3092\u66F8\u304F\u3002 [\u89AA\u5B50\u3092\u63CF\u304F] tree (\u89AA\u5B50\u306E\u5165\u308C\u5B50) \u306F actors \u306B\u540D\u524D\u3092\u4E26\u3079 flow \u306E\u77E2\u5370\u3067\u89AA\u5B50\u3092\u66F8\u304F (\u77E2\u5370\u306E\u5148\u304C\u5B50)\u3002 [\u53E4\u3044\u7DB4\u308A] solidity \u306F sequence \u3068 order: kind \u306E\u7D44\u3001 pie / bar / line / gauge / radial / stat / waffle / stacked / slope \u306F chart \u3068\u540C\u3058\u7DB4\u308A\u306E shape \u306E\u7D44\u3068\u540C\u3058\u6271\u3044\u306B\u306A\u308B'
17371
+ description: '\u56F3\u306E\u7A2E\u985E\u3002 \u578B\u3054\u3068\u306B actors \u306E\u66F8\u304D\u65B9\u304C\u9055\u3046\u3002 [\u95A2\u4FC2\u3092\u63CF\u304F] sequence (\u6642\u7CFB\u5217\u306E\u547C\u3073\u51FA\u3057) / flow (\u51E6\u7406\u306E\u6D41\u308C) / flowchart (\u5206\u304B\u308C\u9053\u3068\u5224\u65AD\u3092\u542B\u3080\u624B\u9806) / swimlane (\u8CAC\u52D9\u3054\u3068\u306E\u6D41\u308C) / record (\u7BB1\u304C\u884C\u3092\u6301\u3061\u95A2\u4FC2\u3092\u6301\u3064\u56F3\u3002 \u8868\u306E\u3064\u306A\u304C\u308A\u3001\u79FB\u308A\u5909\u308F\u308A\u3001UML \u30AF\u30E9\u30B9\u95A2\u4FC2\u306B\u3082\u4F7F\u3046) / topology (network) / c4 (architecture) / mind (\u767A\u60F3\u306E\u679D\u5206\u304B\u308C) \u306F actors \u306B\u540D\u524D\u3092\u4E26\u3079 flow \u306B\u77E2\u5370\u3092\u66F8\u304F\u3002 [\u5024\u3092\u63CF\u304F] chart (\u6570\u306E\u4E26\u3073) \u306F actors \u306B `- \u540D\u524D: "45"` \u306E\u5F62\u3067\u6570\u3092\u66F8\u304D\u3001 shape \u3067\u5F62\u3092\u9078\u3076 (pie = \u5272\u5408 / bar = \u68D2\u306E\u9AD8\u3055 / line = \u7DDA\u306E\u9AD8\u3055\u3067\u66F8\u3044\u305F\u9806\u306B\u4E26\u3076 / gauge = \u5408\u8A08\u3092\u534A\u5186\u3067\u793A\u3059 / radial = \u5F27\u306E\u9577\u3055\u3067\u6BD4\u3079\u308B / stat = \u5024 1 \u3064\u3092\u5927\u304D\u304F\u793A\u3059 / waffle = \u5272\u5408\u3092 100 \u500B\u306E\u5370\u3067\u793A\u3059 / stacked = \u5185\u8A33\u3092\u5E2F\u3067\u793A\u3059 / slope = 2 \u6642\u70B9\u3092\u76F4\u7DDA\u3067\u3064\u306A\u304E\u5897\u6E1B\u3068\u9806\u4F4D\u306E\u5165\u308C\u66FF\u308F\u308A\u3092\u793A\u3059)\u3002 shape \u304C stat \u3068 stacked \u3068 slope \u306E\u6642\u306F `- \u540D\u524D: { value: "320", previous: "280" }` \u306E\u5F62\u3067\u524D\u306E\u6642\u70B9\u306E\u5024\u3082\u66F8\u3051\u308B\u3002 funnel (\u6BB5\u3054\u3068\u306B\u6E1B\u308B\u6570) \u3082\u540C\u3058\u5F62\u3002 [\u8A9E\u3092\u63CF\u304F] journey (\u4F53\u9A13\u306E\u8D77\u4F0F) \u306F `- \u767B\u9332: "\u4E0D\u6E80"` \u306E\u5F62\u3067 \u6700\u9AD8 / \u6E80\u8DB3 / \u666E\u901A / \u4E0D\u6E80 / \u6012\u308A \u306E\u3069\u308C\u304B\u3092\u66F8\u304F\u3002 quadrant (2 \u8EF8\u306E\u4ED5\u5206\u3051) \u306F `- \u91CD\u8907\u524A\u9664: "\u5DE6\u4E0A"` \u306E\u5F62\u3067 \u5DE6\u4E0A / \u53F3\u4E0A / \u5DE6\u4E0B / \u53F3\u4E0B \u306E\u3069\u308C\u304B\u3092\u66F8\u304F\u3002 [\u6642\u671F\u3092\u63CF\u304F] gantt (\u5DE5\u7A0B\u306E\u4E26\u3073) \u306F `- \u8A2D\u8A08: "1\u6708"` \u306E\u5F62\u3067\u59CB\u307E\u308A\u306E\u6642\u671F\u3092\u66F8\u304D\u3001 flow \u306E\u77E2\u5370\u3067\u524D\u5F8C\u95A2\u4FC2\u3092\u66F8\u304F\u3002 [\u89AA\u5B50\u3092\u63CF\u304F] tree (\u89AA\u5B50\u306E\u5165\u308C\u5B50) \u306F actors \u306B\u540D\u524D\u3092\u4E26\u3079 flow \u306E\u77E2\u5370\u3067\u89AA\u5B50\u3092\u66F8\u304F (\u77E2\u5370\u306E\u5148\u304C\u5B50)\u3002 [\u53E4\u3044\u7DB4\u308A] pie / bar / line / gauge / radial / stat / waffle / stacked / slope \u306F chart \u3068\u540C\u3058\u7DB4\u308A\u306E shape \u306E\u7D44\u3068\u540C\u3058\u6271\u3044\u306B\u306A\u308B'
17315
17372
  },
17316
17373
  form: {
17317
17374
  type: "string",
@@ -17673,7 +17730,7 @@ var diagram_default = {
17673
17730
  },
17674
17731
  kind: {
17675
17732
  type: "string",
17676
- description: "node kind\u3002 shape-* \u3092\u6307\u5B9A\u3057\u3066 49 shape \u4E2D\u304B\u3089\u9078\u3076\u3002 \u4F8B: 'shape-wallet' / 'shape-smart-contract' / 'shape-cloud' / 'shape-file' / 'actor' (default) / 'function' / 'storage' / 'event' \u7B49\u3002 \u7A2E\u5225\u306B\u7121\u3044\u540D\u524D\u306F\u90E8\u54C1\u306E\u540D\u524D\u3068\u3057\u3066\u90E8\u54C1\u306E\u4E00\u89A7 (partsCatalog) \u304B\u3089\u5F15\u304D\u3001\u4E00\u89A7\u306B\u3082\u7121\u3051\u308C\u3070\u7A2E\u5225\u3092\u66F8\u304B\u306A\u304B\u3063\u305F\u7BB1\u306B\u306A\u308B\u3002 \u90E8\u54C1\u3092\u6301\u3064\u4E00\u89A7\u3092\u6E21\u3057\u305F\u6642\u306F\u77E5\u3089\u305B\u3092\u51FA\u3057\u3001\u7DB4\u308A\u306E\u8FD1\u3044\u540D\u524D\u3092\u6848\u5185\u3059\u308B\u3002"
17733
+ description: "node kind\u3002 shape-* \u3092\u6307\u5B9A\u3059\u308B\u3068\u57FA\u672C\u306E\u5F62 (\u7BB1\u306E\u5F62\u305D\u306E\u3082\u306E\u3092\u63CF\u304F) \u3068\u6C4E\u7528\u306E\u633F\u7D75 (\u7A93 / \u7AEF\u672B / \u30B3\u30FC\u30C9\u306E\u672D / \u643A\u5E2F / \u30B5\u30FC\u30D0\u30FC\u306E\u68DA) \u304B\u3089\u9078\u3079\u308B\u3002 \u4F8B: 'shape-cloud' / 'shape-file' / 'shape-window' / 'actor' (default) / 'function' / 'storage' / 'event' \u7B49\u3002 \u7A2E\u5225\u306B\u7121\u3044\u540D\u524D\u306F\u90E8\u54C1\u306E\u540D\u524D\u3068\u3057\u3066\u90E8\u54C1\u306E\u4E00\u89A7 (partsCatalog) \u304B\u3089\u5F15\u304D\u3001\u4E00\u89A7\u306B\u3082\u7121\u3051\u308C\u3070\u7A2E\u5225\u3092\u66F8\u304B\u306A\u304B\u3063\u305F\u7BB1\u306B\u306A\u308B\u3002 \u90E8\u54C1\u3092\u6301\u3064\u4E00\u89A7\u3092\u6E21\u3057\u305F\u6642\u306F\u77E5\u3089\u305B\u3092\u51FA\u3057\u3001\u7DB4\u308A\u306E\u8FD1\u3044\u540D\u524D\u3092\u6848\u5185\u3059\u308B\u3002"
17677
17734
  },
17678
17735
  subtitle: {
17679
17736
  type: "string",