@cardenelabs/cdl 0.80.0 → 0.81.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 +35 -1
- package/dist/index.cjs +33 -8
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +9 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.js +33 -8
- package/dist/index.js.map +1 -1
- package/dist/react.cjs.map +1 -1
- package/dist/react.js.map +1 -1
- package/package.json +1 -1
- package/src/visual-validate.ts +78 -6
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,39 @@ CDL (Chainome Diagram Language) の主要変更履歴。
|
|
|
5
5
|
|
|
6
6
|
## [Unreleased]
|
|
7
7
|
|
|
8
|
+
## [0.81.0] - 2026-09-27
|
|
9
|
+
|
|
10
|
+
### Fixed
|
|
11
|
+
|
|
12
|
+
- **速さの判定が機械の混み具合で動かなくなった** (#897 / #898)
|
|
13
|
+
|
|
14
|
+
軸 `validate-performance-budget` は検査に掛かった時間を壁時計 (`Date.now()`) で測っていた。
|
|
15
|
+
壁時計は待たされた分も足すため、値が図の性質ではなく機械の混み具合で動く。
|
|
16
|
+
|
|
17
|
+
| 測り方 | 累計の幅 (使う側の図 599 枚を 3 周) |
|
|
18
|
+
|---|---|
|
|
19
|
+
| その検査だけを回す (5 回) | 335..1739ms |
|
|
20
|
+
| 検査を一式回す (5 回) | 806..2468ms |
|
|
21
|
+
|
|
22
|
+
同じ入力で 7.4 倍ぶれていた。 境の 5000ms に対して最悪 49% なので超えてはいないが、図の
|
|
23
|
+
枚数は 0.41.1 で軸を作った時の 444 枚から 599 枚に増えており、余裕は枚数の増加だけで減る。
|
|
24
|
+
|
|
25
|
+
CPU 時間で測る形にした。 待っている間は増えないため、同時に他の検査が走っても値が動かない。
|
|
26
|
+
`Date.now()` の 1ms 刻みでは 1 枚あたりがほとんど 0ms に丸まるが、CPU 時間はマイクロ秒で
|
|
27
|
+
返るため超過時の「重い順」 の内訳も読める。 読む上乗せは 1 回 0.0008ms。
|
|
28
|
+
|
|
29
|
+
### Added
|
|
30
|
+
|
|
31
|
+
- **掃き出しの返り値が速さの測り方を持つようになった** (#897 / #898)
|
|
32
|
+
|
|
33
|
+
`visualValidateAll` の返り値に `perfClock` (`"cpu"` または `"wall"`) が入る。
|
|
34
|
+
CPU 時間が読めない環境では壁時計に落ちるため、**どちらで測ったかを返り値と超過の文面の
|
|
35
|
+
2 箇所に出す**。 測り方が変わったのに同じ顔で報告すると、読み手が 2 つの値を同じものとして
|
|
36
|
+
並べる。
|
|
37
|
+
|
|
38
|
+
返り値にも出すのは、超過していない周では文面が出ないため。 呼ぶ側が「CPU 時間で測れて
|
|
39
|
+
いるか」 を超過の有無と切り離して確かめられる。
|
|
40
|
+
|
|
8
41
|
## [0.80.0] - 2026-09-27
|
|
9
42
|
|
|
10
43
|
### Fixed
|
|
@@ -3279,7 +3312,8 @@ Initial OSS release.
|
|
|
3279
3312
|
使わない = annotated tag を push しても GitHub Release は作られず、 Release を作っていない版で
|
|
3280
3313
|
行き止まりになる。
|
|
3281
3314
|
|
|
3282
|
-
[Unreleased]: https://github.com/cardene777/cdl/compare/v0.
|
|
3315
|
+
[Unreleased]: https://github.com/cardene777/cdl/compare/v0.81.0...HEAD
|
|
3316
|
+
[0.81.0]: https://github.com/cardene777/cdl/compare/v0.80.0...v0.81.0
|
|
3283
3317
|
[0.80.0]: https://github.com/cardene777/cdl/compare/v0.79.0...v0.80.0
|
|
3284
3318
|
[0.79.0]: https://github.com/cardene777/cdl/compare/v0.78.0...v0.79.0
|
|
3285
3319
|
[0.78.0]: https://github.com/cardene777/cdl/compare/v0.77.0...v0.78.0
|
package/dist/index.cjs
CHANGED
|
@@ -18411,11 +18411,12 @@ function runAxes(laid, diag, violations, counts, push, profile, skippedAxes, \u5
|
|
|
18411
18411
|
}
|
|
18412
18412
|
function visualValidateAll(diagrams, opts) {
|
|
18413
18413
|
\u5668\u3092\u78BA\u304B\u3081\u308B(opts?.container);
|
|
18414
|
+
const \u6642\u8A08 = perfClock();
|
|
18414
18415
|
const durations = [];
|
|
18415
18416
|
const reports = diagrams.map((d) => {
|
|
18416
|
-
const
|
|
18417
|
+
const \u6B62\u3081\u308B = \u6642\u8A08.\u6E2C\u308B();
|
|
18417
18418
|
const r = visualValidate(d, opts);
|
|
18418
|
-
durations.push(
|
|
18419
|
+
durations.push(\u6B62\u3081\u308B());
|
|
18419
18420
|
return r;
|
|
18420
18421
|
});
|
|
18421
18422
|
const fail = reports.filter((r) => !r.ok).length;
|
|
@@ -18425,7 +18426,7 @@ function visualValidateAll(diagrams, opts) {
|
|
|
18425
18426
|
totalCounts[axis] += r.counts[axis];
|
|
18426
18427
|
}
|
|
18427
18428
|
}
|
|
18428
|
-
const metaViolations = validateMetaAxes(totalCounts, diagrams, durations, reports);
|
|
18429
|
+
const metaViolations = validateMetaAxes(totalCounts, diagrams, durations, reports, \u6642\u8A08.kind);
|
|
18429
18430
|
return {
|
|
18430
18431
|
total: reports.length,
|
|
18431
18432
|
pass: reports.length - fail,
|
|
@@ -18434,12 +18435,35 @@ function visualValidateAll(diagrams, opts) {
|
|
|
18434
18435
|
totalCounts,
|
|
18435
18436
|
profile: opts?.profile ?? "production",
|
|
18436
18437
|
skippedAxes: [...SKIPPED_AXES[opts?.profile ?? "production"]],
|
|
18437
|
-
metaViolations
|
|
18438
|
+
metaViolations,
|
|
18439
|
+
perfClock: \u6642\u8A08.kind
|
|
18438
18440
|
};
|
|
18439
18441
|
}
|
|
18440
18442
|
var PERF_BUDGET_TOTAL_MS = 5e3;
|
|
18443
|
+
function perfClock() {
|
|
18444
|
+
const cpu = globalThis.process?.cpuUsage;
|
|
18445
|
+
if (typeof cpu === "function") {
|
|
18446
|
+
return {
|
|
18447
|
+
kind: "cpu",
|
|
18448
|
+
\u6E2C\u308B: () => {
|
|
18449
|
+
const \u59CB\u3081 = cpu();
|
|
18450
|
+
return () => {
|
|
18451
|
+
const \u5DEE = cpu(\u59CB\u3081);
|
|
18452
|
+
return (\u5DEE.user + \u5DEE.system) / 1e3;
|
|
18453
|
+
};
|
|
18454
|
+
}
|
|
18455
|
+
};
|
|
18456
|
+
}
|
|
18457
|
+
return {
|
|
18458
|
+
kind: "wall",
|
|
18459
|
+
\u6E2C\u308B: () => {
|
|
18460
|
+
const \u59CB\u3081 = Date.now();
|
|
18461
|
+
return () => Date.now() - \u59CB\u3081;
|
|
18462
|
+
}
|
|
18463
|
+
};
|
|
18464
|
+
}
|
|
18441
18465
|
var PERF_SLOWEST_SAMPLE = 5;
|
|
18442
|
-
function perfBudgetViolations(durations, diagrams = []) {
|
|
18466
|
+
function perfBudgetViolations(durations, diagrams = [], clock) {
|
|
18443
18467
|
const total = durations.reduce((s, d) => s + d, 0);
|
|
18444
18468
|
if (total <= PERF_BUDGET_TOTAL_MS) return [];
|
|
18445
18469
|
const \u91CD\u3044\u9806 = durations.map((ms, i) => ({ id: diagrams[i]?.id ?? "?", ms })).sort((a, b) => b.ms - a.ms);
|
|
@@ -18450,12 +18474,13 @@ function perfBudgetViolations(durations, diagrams = []) {
|
|
|
18450
18474
|
{
|
|
18451
18475
|
axis: "validate-performance-budget",
|
|
18452
18476
|
diagramId: "__meta__",
|
|
18453
|
-
detail: `visualValidateAll \u5168 ${durations.length} \u56F3\u306E\u7D2F\u8A08 ${total}ms > ${PERF_BUDGET_TOTAL_MS}ms budget (\u91CD\u3044\u9806 ${\u5185\u8A33})
|
|
18477
|
+
detail: `visualValidateAll \u5168 ${durations.length} \u56F3\u306E\u7D2F\u8A08 ${total}ms > ${PERF_BUDGET_TOTAL_MS}ms budget (\u91CD\u3044\u9806 ${\u5185\u8A33})` + // 測り方が変わったのに同じ顔で報告すると、読み手が 2 つの値を同じものとして並べる
|
|
18478
|
+
(clock === void 0 ? "" : `\u3001 \u6E2C\u308A\u65B9 ${clock === "cpu" ? "CPU \u6642\u9593" : "\u58C1\u6642\u8A08 (CPU \u6642\u9593\u304C\u8AAD\u3081\u306A\u3044)"}`),
|
|
18454
18479
|
severity: "warn"
|
|
18455
18480
|
}
|
|
18456
18481
|
];
|
|
18457
18482
|
}
|
|
18458
|
-
function validateMetaAxes(totalCounts, diagrams = [], durations = [], reports = []) {
|
|
18483
|
+
function validateMetaAxes(totalCounts, diagrams = [], durations = [], reports = [], clock) {
|
|
18459
18484
|
const out = [];
|
|
18460
18485
|
const totalErrors = reports.reduce(
|
|
18461
18486
|
(sum, r) => sum + r.violations.filter((v) => v.severity === "error").length,
|
|
@@ -18470,7 +18495,7 @@ function validateMetaAxes(totalCounts, diagrams = [], durations = [], reports =
|
|
|
18470
18495
|
severity: "warn"
|
|
18471
18496
|
});
|
|
18472
18497
|
}
|
|
18473
|
-
out.push(...perfBudgetViolations(durations, diagrams));
|
|
18498
|
+
out.push(...perfBudgetViolations(durations, diagrams, clock));
|
|
18474
18499
|
const DEAD_ALLOWLIST = [
|
|
18475
18500
|
// catalog で自然発火なしを許容する security / migration / performance / meta / dev-quality axis 群。
|
|
18476
18501
|
// 実 diagram に該当データ (XSS / migration list / oversized / broken doc) が混入するのが稀なため。
|