@cardenelabs/cdl 0.40.11 → 0.41.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 +51 -1
- package/dist/index.cjs +4 -23
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +4 -23
- package/dist/index.js.map +1 -1
- package/dist/react.cjs +3 -20
- package/dist/react.cjs.map +1 -1
- package/dist/react.js +3 -20
- package/dist/react.js.map +1 -1
- package/package.json +1 -1
- package/src/visual-validate.ts +22 -33
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cardenelabs/cdl",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.41.0",
|
|
4
4
|
"description": "CDL (Chainome Diagram Language). Mermaid-like declarative DSL that compiles to animated SVG diagrams. Built for blockchain / Solidity flows, generic enough for sequence / flow / state / ER / topology diagrams.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "cardene777",
|
package/src/visual-validate.ts
CHANGED
|
@@ -325,7 +325,6 @@ export type VisualAxis =
|
|
|
325
325
|
| "row-content-typing"
|
|
326
326
|
| "terminal-safe-text"
|
|
327
327
|
| "gpu-layer-efficiency"
|
|
328
|
-
| "memory-budget"
|
|
329
328
|
// CAR-Z8 (PR #87) 追加 = XSS / SEO / bidi / structured-data 4 領域。
|
|
330
329
|
| "svg-injection-safety"
|
|
331
330
|
| "seo-metadata-quality"
|
|
@@ -479,7 +478,6 @@ function emptyCounts(): Record<VisualAxis, number> {
|
|
|
479
478
|
"row-content-typing": 0,
|
|
480
479
|
"terminal-safe-text": 0,
|
|
481
480
|
"gpu-layer-efficiency": 0,
|
|
482
|
-
"memory-budget": 0,
|
|
483
481
|
"svg-injection-safety": 0,
|
|
484
482
|
"seo-metadata-quality": 0,
|
|
485
483
|
"bidi-hyphenation": 0,
|
|
@@ -3512,11 +3510,29 @@ function runAxes(
|
|
|
3512
3510
|
];
|
|
3513
3511
|
// ER / classDiagram の schema 宣言 (`email: string` / `total: number` 等) は実データでなく
|
|
3514
3512
|
// 型名を書く design、 Axis 37 の型判定対象外。 value が schema 型キーワードなら skip。
|
|
3513
|
+
//
|
|
3514
|
+
// **この一覧は印を持たない古い形のためだけに残す** (`#771`)。 `rows` を直接書いた形
|
|
3515
|
+
// (`.entity({ rows: ["id: PK"] })`) は行頭の印を持たないので、消すと丸ごと warn に落ちる。
|
|
3516
|
+
// 一方で **足しもしない** = 型名を手で並べると書き手が思い付いた名前が上限になり、
|
|
3517
|
+
// 抜けた名前 (実測 = `numeric`) が実データとして判定される。 新しい型名は下の印で通す。
|
|
3515
3518
|
const SCHEMA_KEYWORDS =
|
|
3516
3519
|
/^(string|number|boolean|text|enum|timestamp|date|datetime|json|blob|PK|FK|UUID|BIGINT|INT|FLOAT|VARCHAR|TEXT|DATETIME)$|^enum\(|^varchar\(/i;
|
|
3517
3520
|
for (const n of diag.nodes) {
|
|
3518
3521
|
if (!n.rows) continue;
|
|
3519
|
-
for (
|
|
3522
|
+
for (let i = 0; i < n.rows.length; i++) {
|
|
3523
|
+
const row = n.rows[i]!;
|
|
3524
|
+
/*
|
|
3525
|
+
* **行が列の宣言かどうかは、値の語ではなく行頭の印で決める** (`#771`)。
|
|
3526
|
+
*
|
|
3527
|
+
* 印 (`rowMarks`) は `er` / `classDiagram` が `columns` / `attributes` を受け取った時
|
|
3528
|
+
* だけ付く = 印がある行は、値の位置に **型の名前** が来ることを engine 自身が知っている。
|
|
3529
|
+
* 語の一覧で見分ける形は方言ごとに増える型名を追えない (`§ 導出可能記述は人手で書かない`)。
|
|
3530
|
+
*
|
|
3531
|
+
* Axis 4 (`row-format`) は箱の単位で外している (印を持つ箱では行の形式そのものを
|
|
3532
|
+
* 求めない)。 こちらは **行の単位** で外す = 印を持たない行が同じ箱に混ざった時、
|
|
3533
|
+
* その行の実データは従来どおり見る。 検知を落とさない側に倒す。
|
|
3534
|
+
*/
|
|
3535
|
+
if (n.rowMarks?.[i] != null) continue;
|
|
3520
3536
|
const m = row.match(/^([^:]+):\s*(.+)$/);
|
|
3521
3537
|
if (!m) continue;
|
|
3522
3538
|
const [, key, value] = m;
|
|
@@ -3612,32 +3628,6 @@ function runAxes(
|
|
|
3612
3628
|
);
|
|
3613
3629
|
}
|
|
3614
3630
|
|
|
3615
|
-
// ───────────────────────────────────────────────────────────
|
|
3616
|
-
// Axis 40: memory-budget (diagram size 総和による React re-render 負荷)
|
|
3617
|
-
//
|
|
3618
|
-
// 判定 = nodes×h×w + edges×path segment 数 + phases×(tweens + sets 数) の推定 memory 単位
|
|
3619
|
-
// が MEMORY_BUDGET (10^7) を超えると React re-render で GC pressure。 catalog 内 diagram は
|
|
3620
|
-
// 10^5-10^6 が実測、 10^7 で明確な破綻。
|
|
3621
|
-
// ───────────────────────────────────────────────────────────
|
|
3622
|
-
const MEMORY_BUDGET = 1_000_000;
|
|
3623
|
-
let nodeMemUnit = 0;
|
|
3624
|
-
for (const n of laid.nodes) nodeMemUnit += n.w * n.h;
|
|
3625
|
-
let edgeMemUnit = 0;
|
|
3626
|
-
for (const e of laid.edges) {
|
|
3627
|
-
const segs = extractPathSegments(e.d);
|
|
3628
|
-
edgeMemUnit += segs.length * 100; // 1 segment ≈ 100 memory unit (SVG path + marker + label)
|
|
3629
|
-
}
|
|
3630
|
-
let phaseMemUnit = 0;
|
|
3631
|
-
for (const p of diag.phases) phaseMemUnit += (p.tweens.length + p.sets.length) * 50;
|
|
3632
|
-
const totalMemUnit = nodeMemUnit + edgeMemUnit + phaseMemUnit;
|
|
3633
|
-
if (totalMemUnit > MEMORY_BUDGET) {
|
|
3634
|
-
push(
|
|
3635
|
-
"memory-budget",
|
|
3636
|
-
`diagram memory unit 推定 ${totalMemUnit.toFixed(0)} > budget ${MEMORY_BUDGET} (nodes=${nodeMemUnit.toFixed(0)} edges=${edgeMemUnit.toFixed(0)} phases=${phaseMemUnit.toFixed(0)})`,
|
|
3637
|
-
"warn",
|
|
3638
|
-
);
|
|
3639
|
-
}
|
|
3640
|
-
|
|
3641
3631
|
// ───────────────────────────────────────────────────────────
|
|
3642
3632
|
// Axis 41: svg-injection-safety (XSS / script injection 検知、 error severity)
|
|
3643
3633
|
//
|
|
@@ -4445,7 +4435,6 @@ function validateMetaAxes(
|
|
|
4445
4435
|
"row-content-typing",
|
|
4446
4436
|
"terminal-safe-text",
|
|
4447
4437
|
"gpu-layer-efficiency",
|
|
4448
|
-
"memory-budget",
|
|
4449
4438
|
"svg-injection-safety",
|
|
4450
4439
|
"seo-metadata-quality",
|
|
4451
4440
|
"bidi-hyphenation",
|
|
@@ -4515,7 +4504,6 @@ function validateMetaAxes(
|
|
|
4515
4504
|
"row-content-typing",
|
|
4516
4505
|
"terminal-safe-text",
|
|
4517
4506
|
"gpu-layer-efficiency",
|
|
4518
|
-
"memory-budget",
|
|
4519
4507
|
"svg-injection-safety",
|
|
4520
4508
|
"seo-metadata-quality",
|
|
4521
4509
|
"bidi-hyphenation",
|
|
@@ -4565,8 +4553,9 @@ function validateMetaAxes(
|
|
|
4565
4553
|
// 以前は comment に 69、 定数に 68 と別の数が書かれており、 どちらが正か読めなかった。
|
|
4566
4554
|
//
|
|
4567
4555
|
// 削除済 = engine-meta 51 (mermaid-parity、 #366) / 軸 29 (svg-filter-integrity) /
|
|
4568
|
-
// 軸 30 (neumorphism-shadow-budget、 どちらも #426 で主題の廃止に伴い削除)
|
|
4569
|
-
|
|
4556
|
+
// 軸 30 (neumorphism-shadow-budget、 どちらも #426 で主題の廃止に伴い削除) /
|
|
4557
|
+
// 軸 40 (memory-budget、 #775 で軸 34 に一本化)。
|
|
4558
|
+
const EXPECTED_AXIS_COUNT = 67;
|
|
4570
4559
|
if (allAxes.length !== EXPECTED_AXIS_COUNT) {
|
|
4571
4560
|
out.push({
|
|
4572
4561
|
axis: "axis-documentation-completeness",
|