flexily 0.0.1 → 0.2.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/LICENSE +21 -0
- package/README.md +200 -0
- package/dist/classic/layout.d.ts +57 -0
- package/dist/classic/layout.d.ts.map +1 -0
- package/dist/classic/layout.js +1558 -0
- package/dist/classic/layout.js.map +1 -0
- package/dist/classic/node.d.ts +648 -0
- package/dist/classic/node.d.ts.map +1 -0
- package/dist/classic/node.js +1002 -0
- package/dist/classic/node.js.map +1 -0
- package/dist/constants.d.ts +58 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +70 -0
- package/dist/constants.js.map +1 -0
- package/dist/index-classic.d.ts +30 -0
- package/dist/index-classic.d.ts.map +1 -0
- package/dist/index-classic.js +57 -0
- package/dist/index-classic.js.map +1 -0
- package/dist/index.d.ts +30 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +57 -0
- package/dist/index.js.map +1 -0
- package/dist/layout-flex-lines.d.ts +77 -0
- package/dist/layout-flex-lines.d.ts.map +1 -0
- package/dist/layout-flex-lines.js +317 -0
- package/dist/layout-flex-lines.js.map +1 -0
- package/dist/layout-helpers.d.ts +48 -0
- package/dist/layout-helpers.d.ts.map +1 -0
- package/dist/layout-helpers.js +108 -0
- package/dist/layout-helpers.js.map +1 -0
- package/dist/layout-measure.d.ts +25 -0
- package/dist/layout-measure.d.ts.map +1 -0
- package/dist/layout-measure.js +231 -0
- package/dist/layout-measure.js.map +1 -0
- package/dist/layout-stats.d.ts +19 -0
- package/dist/layout-stats.d.ts.map +1 -0
- package/dist/layout-stats.js +37 -0
- package/dist/layout-stats.js.map +1 -0
- package/dist/layout-traversal.d.ts +28 -0
- package/dist/layout-traversal.d.ts.map +1 -0
- package/dist/layout-traversal.js +65 -0
- package/dist/layout-traversal.js.map +1 -0
- package/dist/layout-zero.d.ts +26 -0
- package/dist/layout-zero.d.ts.map +1 -0
- package/dist/layout-zero.js +1601 -0
- package/dist/layout-zero.js.map +1 -0
- package/dist/logger.d.ts +14 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +61 -0
- package/dist/logger.js.map +1 -0
- package/dist/node-zero.d.ts +702 -0
- package/dist/node-zero.d.ts.map +1 -0
- package/dist/node-zero.js +1268 -0
- package/dist/node-zero.js.map +1 -0
- package/dist/testing.d.ts +69 -0
- package/dist/testing.d.ts.map +1 -0
- package/dist/testing.js +179 -0
- package/dist/testing.js.map +1 -0
- package/dist/trace.d.ts +74 -0
- package/dist/trace.d.ts.map +1 -0
- package/dist/trace.js +191 -0
- package/dist/trace.js.map +1 -0
- package/dist/types.d.ts +170 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +43 -0
- package/dist/types.js.map +1 -0
- package/dist/utils.d.ts +41 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +197 -0
- package/dist/utils.js.map +1 -0
- package/package.json +58 -3
- package/src/CLAUDE.md +512 -0
- package/src/beorn-logger.d.ts +10 -0
- package/src/classic/layout.ts +1783 -0
- package/src/classic/node.ts +1121 -0
- package/src/constants.ts +81 -0
- package/src/index-classic.ts +110 -0
- package/src/index.ts +110 -0
- package/src/layout-flex-lines.ts +346 -0
- package/src/layout-helpers.ts +140 -0
- package/src/layout-measure.ts +259 -0
- package/src/layout-stats.ts +43 -0
- package/src/layout-traversal.ts +70 -0
- package/src/layout-zero.ts +1792 -0
- package/src/logger.ts +67 -0
- package/src/node-zero.ts +1412 -0
- package/src/testing.ts +209 -0
- package/src/trace.ts +252 -0
- package/src/types.ts +229 -0
- package/src/utils.ts +217 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node-zero.js","sourceRoot":"","sources":["../src/node-zero.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Flexily Testing Utilities
|
|
3
|
+
*
|
|
4
|
+
* Diagnostic helpers for verifying layout correctness, especially
|
|
5
|
+
* incremental re-layout consistency. Used by downstream consumers
|
|
6
|
+
* (silvery, km-tui) and flexily's own test suite.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```typescript
|
|
10
|
+
* import { Node, DIRECTION_LTR } from 'flexily';
|
|
11
|
+
* import { getLayout, diffLayouts, assertLayoutSanity } from 'flexily/testing';
|
|
12
|
+
*
|
|
13
|
+
* const root = Node.create();
|
|
14
|
+
* root.setWidth(80);
|
|
15
|
+
* root.calculateLayout(80, 24, DIRECTION_LTR);
|
|
16
|
+
* assertLayoutSanity(root);
|
|
17
|
+
* const layout = getLayout(root);
|
|
18
|
+
* ```
|
|
19
|
+
*/
|
|
20
|
+
import type { MeasureFunc } from "./types.js";
|
|
21
|
+
import { Node } from "./node-zero.js";
|
|
22
|
+
export interface LayoutResult {
|
|
23
|
+
left: number;
|
|
24
|
+
top: number;
|
|
25
|
+
width: number;
|
|
26
|
+
height: number;
|
|
27
|
+
children: LayoutResult[];
|
|
28
|
+
}
|
|
29
|
+
export interface BuildTreeResult {
|
|
30
|
+
root: Node;
|
|
31
|
+
dirtyTargets: Node[];
|
|
32
|
+
}
|
|
33
|
+
/** Recursively extract computed layout from a node tree. */
|
|
34
|
+
export declare function getLayout(node: Node): LayoutResult;
|
|
35
|
+
/** Format a layout tree as an indented string for debugging. */
|
|
36
|
+
export declare function formatLayout(layout: LayoutResult, indent?: number): string;
|
|
37
|
+
/**
|
|
38
|
+
* Collect node-by-node diffs between two layout trees.
|
|
39
|
+
* Returns empty array if layouts match.
|
|
40
|
+
*/
|
|
41
|
+
export declare function diffLayouts(a: LayoutResult, b: LayoutResult, path?: string): string[];
|
|
42
|
+
/**
|
|
43
|
+
* Wrapping text measure function factory.
|
|
44
|
+
* Simulates text of given width that wraps to multiple lines when constrained.
|
|
45
|
+
*/
|
|
46
|
+
export declare function textMeasure(textWidth: number): MeasureFunc;
|
|
47
|
+
/**
|
|
48
|
+
* Assert that all layout values are non-negative and width is finite.
|
|
49
|
+
* Height may be NaN for auto-height trees with unconstrained height.
|
|
50
|
+
* Throws a descriptive error on failure.
|
|
51
|
+
*/
|
|
52
|
+
export declare function assertLayoutSanity(node: Node, path?: string): void;
|
|
53
|
+
/**
|
|
54
|
+
* Differential oracle: re-layout of partially-dirty tree must match fresh layout.
|
|
55
|
+
* Throws a descriptive error with node-by-node diff on failure.
|
|
56
|
+
*/
|
|
57
|
+
export declare function expectRelayoutMatchesFresh(buildTree: () => BuildTreeResult, layoutWidth: number, layoutHeight: number): void;
|
|
58
|
+
/**
|
|
59
|
+
* Assert that laying out twice with identical constraints produces identical results.
|
|
60
|
+
* Catches non-determinism or state corruption from a single layout pass.
|
|
61
|
+
*/
|
|
62
|
+
export declare function expectIdempotent(buildTree: () => BuildTreeResult, layoutWidth: number, layoutHeight: number): void;
|
|
63
|
+
/**
|
|
64
|
+
* Assert that layout at width W, then different width W', then back to W
|
|
65
|
+
* produces the same result as fresh layout at W.
|
|
66
|
+
* Catches stale cache entries that don't update on constraint change.
|
|
67
|
+
*/
|
|
68
|
+
export declare function expectResizeRoundTrip(buildTree: () => BuildTreeResult, widths: number[]): void;
|
|
69
|
+
//# sourceMappingURL=testing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"testing.d.ts","sourceRoot":"","sources":["../src/testing.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAC7C,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAA;AAMrC,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,YAAY,EAAE,CAAA;CACzB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,IAAI,CAAA;IACV,YAAY,EAAE,IAAI,EAAE,CAAA;CACrB;AAMD,4DAA4D;AAC5D,wBAAgB,SAAS,CAAC,IAAI,EAAE,IAAI,GAAG,YAAY,CAQlD;AAED,gEAAgE;AAChE,wBAAgB,YAAY,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,SAAI,GAAG,MAAM,CAOrE;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,YAAY,EAAE,IAAI,SAAS,GAAG,MAAM,EAAE,CAiBrF;AAMD;;;GAGG;AACH,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,WAAW,CAS1D;AAMD;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,SAAS,GAAG,IAAI,CAelE;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CACxC,SAAS,EAAE,MAAM,eAAe,EAChC,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,GACnB,IAAI,CAqBN;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,eAAe,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI,CAYlH;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,eAAe,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAoB9F"}
|
package/dist/testing.js
ADDED
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Flexture Testing Utilities
|
|
3
|
+
*
|
|
4
|
+
* Diagnostic helpers for verifying layout correctness, especially
|
|
5
|
+
* incremental re-layout consistency. Used by downstream consumers
|
|
6
|
+
* (hightea, km-tui) and flexture's own test suite.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```typescript
|
|
10
|
+
* import { Node, DIRECTION_LTR } from 'flexture';
|
|
11
|
+
* import { getLayout, diffLayouts, assertLayoutSanity } from 'flexture/testing';
|
|
12
|
+
*
|
|
13
|
+
* const root = Node.create();
|
|
14
|
+
* root.setWidth(80);
|
|
15
|
+
* root.calculateLayout(80, 24, DIRECTION_LTR);
|
|
16
|
+
* assertLayoutSanity(root);
|
|
17
|
+
* const layout = getLayout(root);
|
|
18
|
+
* ```
|
|
19
|
+
*/
|
|
20
|
+
import { DIRECTION_LTR, MEASURE_MODE_AT_MOST, MEASURE_MODE_EXACTLY } from "./constants.js";
|
|
21
|
+
// ============================================================================
|
|
22
|
+
// Layout Inspection
|
|
23
|
+
// ============================================================================
|
|
24
|
+
/** Recursively extract computed layout from a node tree. */
|
|
25
|
+
export function getLayout(node) {
|
|
26
|
+
return {
|
|
27
|
+
left: node.getComputedLeft(),
|
|
28
|
+
top: node.getComputedTop(),
|
|
29
|
+
width: node.getComputedWidth(),
|
|
30
|
+
height: node.getComputedHeight(),
|
|
31
|
+
children: Array.from({ length: node.getChildCount() }, (_, i) => getLayout(node.getChild(i))),
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
/** Format a layout tree as an indented string for debugging. */
|
|
35
|
+
export function formatLayout(layout, indent = 0) {
|
|
36
|
+
const pad = " ".repeat(indent);
|
|
37
|
+
let result = `${pad}{ left: ${layout.left}, top: ${layout.top}, width: ${layout.width}, height: ${layout.height} }`;
|
|
38
|
+
if (layout.children.length > 0) {
|
|
39
|
+
result += ` [\n${layout.children.map((c) => formatLayout(c, indent + 1)).join(",\n")}\n${pad}]`;
|
|
40
|
+
}
|
|
41
|
+
return result;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Collect node-by-node diffs between two layout trees.
|
|
45
|
+
* Returns empty array if layouts match.
|
|
46
|
+
*/
|
|
47
|
+
export function diffLayouts(a, b, path = "root") {
|
|
48
|
+
const diffs = [];
|
|
49
|
+
// Use Object.is for NaN-safe comparison (NaN === NaN is false, Object.is(NaN, NaN) is true)
|
|
50
|
+
if (!Object.is(a.left, b.left))
|
|
51
|
+
diffs.push(`${path}: left ${a.left} vs ${b.left}`);
|
|
52
|
+
if (!Object.is(a.top, b.top))
|
|
53
|
+
diffs.push(`${path}: top ${a.top} vs ${b.top}`);
|
|
54
|
+
if (!Object.is(a.width, b.width))
|
|
55
|
+
diffs.push(`${path}: width ${a.width} vs ${b.width}`);
|
|
56
|
+
if (!Object.is(a.height, b.height))
|
|
57
|
+
diffs.push(`${path}: height ${a.height} vs ${b.height}`);
|
|
58
|
+
for (let i = 0; i < Math.max(a.children.length, b.children.length); i++) {
|
|
59
|
+
if (a.children[i] && b.children[i]) {
|
|
60
|
+
diffs.push(...diffLayouts(a.children[i], b.children[i], `${path}[${i}]`));
|
|
61
|
+
}
|
|
62
|
+
else if (a.children[i]) {
|
|
63
|
+
diffs.push(`${path}[${i}]: missing in incremental`);
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
diffs.push(`${path}[${i}]: missing in reference`);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
return diffs;
|
|
70
|
+
}
|
|
71
|
+
// ============================================================================
|
|
72
|
+
// Measure Functions
|
|
73
|
+
// ============================================================================
|
|
74
|
+
/**
|
|
75
|
+
* Wrapping text measure function factory.
|
|
76
|
+
* Simulates text of given width that wraps to multiple lines when constrained.
|
|
77
|
+
*/
|
|
78
|
+
export function textMeasure(textWidth) {
|
|
79
|
+
return (width, widthMode, _height, _heightMode) => {
|
|
80
|
+
if (widthMode === MEASURE_MODE_EXACTLY || widthMode === MEASURE_MODE_AT_MOST) {
|
|
81
|
+
if (width >= textWidth)
|
|
82
|
+
return { width: textWidth, height: 1 };
|
|
83
|
+
const lines = Math.ceil(textWidth / width);
|
|
84
|
+
return { width: Math.min(textWidth, width), height: lines };
|
|
85
|
+
}
|
|
86
|
+
return { width: textWidth, height: 1 };
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
// ============================================================================
|
|
90
|
+
// Assertions (throw on failure, no vitest dependency)
|
|
91
|
+
// ============================================================================
|
|
92
|
+
/**
|
|
93
|
+
* Assert that all layout values are non-negative and width is finite.
|
|
94
|
+
* Height may be NaN for auto-height trees with unconstrained height.
|
|
95
|
+
* Throws a descriptive error on failure.
|
|
96
|
+
*/
|
|
97
|
+
export function assertLayoutSanity(node, path = "root") {
|
|
98
|
+
const w = node.getComputedWidth();
|
|
99
|
+
const h = node.getComputedHeight();
|
|
100
|
+
const l = node.getComputedLeft();
|
|
101
|
+
const t = node.getComputedTop();
|
|
102
|
+
if (w < 0)
|
|
103
|
+
throw new Error(`${path}: width is negative (${w})`);
|
|
104
|
+
if (!Number.isFinite(w))
|
|
105
|
+
throw new Error(`${path}: width is not finite (${w})`);
|
|
106
|
+
if (!Number.isFinite(l))
|
|
107
|
+
throw new Error(`${path}: left is not finite (${l})`);
|
|
108
|
+
if (Number.isFinite(h) && h < 0)
|
|
109
|
+
throw new Error(`${path}: height is negative (${h})`);
|
|
110
|
+
if (Number.isFinite(t) && t < 0)
|
|
111
|
+
throw new Error(`${path}: top is negative (${t})`);
|
|
112
|
+
for (let i = 0; i < node.getChildCount(); i++) {
|
|
113
|
+
assertLayoutSanity(node.getChild(i), `${path}[${i}]`);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Differential oracle: re-layout of partially-dirty tree must match fresh layout.
|
|
118
|
+
* Throws a descriptive error with node-by-node diff on failure.
|
|
119
|
+
*/
|
|
120
|
+
export function expectRelayoutMatchesFresh(buildTree, layoutWidth, layoutHeight) {
|
|
121
|
+
// 1. Build, layout, mark dirty, re-layout
|
|
122
|
+
const { root, dirtyTargets } = buildTree();
|
|
123
|
+
root.calculateLayout(layoutWidth, layoutHeight, DIRECTION_LTR);
|
|
124
|
+
for (const t of dirtyTargets)
|
|
125
|
+
t.markDirty();
|
|
126
|
+
root.calculateLayout(layoutWidth, layoutHeight, DIRECTION_LTR);
|
|
127
|
+
const incremental = getLayout(root);
|
|
128
|
+
// 2. Build identical fresh tree, layout once
|
|
129
|
+
const fresh = buildTree();
|
|
130
|
+
fresh.root.calculateLayout(layoutWidth, layoutHeight, DIRECTION_LTR);
|
|
131
|
+
const reference = getLayout(fresh.root);
|
|
132
|
+
// 3. Must be identical — show detailed diff on failure
|
|
133
|
+
const diffs = diffLayouts(reference, incremental);
|
|
134
|
+
if (diffs.length > 0) {
|
|
135
|
+
const detail = diffs.map((d) => ` ${d}`).join("\n");
|
|
136
|
+
throw new Error(`Incremental layout differs from fresh (${diffs.length} diffs):\n${detail}\n\nFresh:\n${formatLayout(reference)}\n\nIncremental:\n${formatLayout(incremental)}`);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Assert that laying out twice with identical constraints produces identical results.
|
|
141
|
+
* Catches non-determinism or state corruption from a single layout pass.
|
|
142
|
+
*/
|
|
143
|
+
export function expectIdempotent(buildTree, layoutWidth, layoutHeight) {
|
|
144
|
+
const { root } = buildTree();
|
|
145
|
+
root.calculateLayout(layoutWidth, layoutHeight, DIRECTION_LTR);
|
|
146
|
+
const first = getLayout(root);
|
|
147
|
+
root.calculateLayout(layoutWidth, layoutHeight, DIRECTION_LTR);
|
|
148
|
+
const second = getLayout(root);
|
|
149
|
+
const diffs = diffLayouts(first, second);
|
|
150
|
+
if (diffs.length > 0) {
|
|
151
|
+
const detail = diffs.map((d) => ` ${d}`).join("\n");
|
|
152
|
+
throw new Error(`Layout not idempotent (${diffs.length} diffs after 2nd pass):\n${detail}`);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Assert that layout at width W, then different width W', then back to W
|
|
157
|
+
* produces the same result as fresh layout at W.
|
|
158
|
+
* Catches stale cache entries that don't update on constraint change.
|
|
159
|
+
*/
|
|
160
|
+
export function expectResizeRoundTrip(buildTree, widths) {
|
|
161
|
+
const { root } = buildTree();
|
|
162
|
+
for (const w of widths) {
|
|
163
|
+
root.setWidth(w);
|
|
164
|
+
root.calculateLayout(w, NaN, DIRECTION_LTR);
|
|
165
|
+
}
|
|
166
|
+
const incremental = getLayout(root);
|
|
167
|
+
// Fresh reference at final width
|
|
168
|
+
const finalWidth = widths[widths.length - 1];
|
|
169
|
+
const fresh = buildTree();
|
|
170
|
+
fresh.root.setWidth(finalWidth);
|
|
171
|
+
fresh.root.calculateLayout(finalWidth, NaN, DIRECTION_LTR);
|
|
172
|
+
const reference = getLayout(fresh.root);
|
|
173
|
+
const diffs = diffLayouts(reference, incremental);
|
|
174
|
+
if (diffs.length > 0) {
|
|
175
|
+
const detail = diffs.map((d) => ` ${d}`).join("\n");
|
|
176
|
+
throw new Error(`Resize round-trip differs (widths: ${widths.join("→")}, ${diffs.length} diffs):\n${detail}`);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
//# sourceMappingURL=testing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"testing.js","sourceRoot":"","sources":["../src/testing.ts"],"names":[],"mappings":"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"}
|
package/dist/trace.d.ts
ADDED
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Layout Trace — instrumented debug mode for fingerprint/cache tracing.
|
|
3
|
+
*
|
|
4
|
+
* Records every fingerprint check (hit/miss), cache lookup (hit/miss),
|
|
5
|
+
* measureNode save/restore, and parent size override during a layout pass.
|
|
6
|
+
* Two traces from consecutive passes can be diffed to find where they diverge.
|
|
7
|
+
*
|
|
8
|
+
* Zero-cost when disabled: the module-level `trace` getter returns undefined,
|
|
9
|
+
* and all callsites use optional chaining (`trace?.event()`).
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```typescript
|
|
13
|
+
* import { enableTrace, disableTrace, diffTraces } from 'flexily/trace';
|
|
14
|
+
*
|
|
15
|
+
* const t1 = enableTrace();
|
|
16
|
+
* root.calculateLayout(80, 24, DIRECTION_LTR);
|
|
17
|
+
* disableTrace();
|
|
18
|
+
*
|
|
19
|
+
* // Mutate tree...
|
|
20
|
+
* const t2 = enableTrace();
|
|
21
|
+
* root.calculateLayout(80, 24, DIRECTION_LTR);
|
|
22
|
+
* disableTrace();
|
|
23
|
+
*
|
|
24
|
+
* const diffs = diffTraces(t1, t2);
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
export type TraceEventType = "fingerprint_hit" | "fingerprint_miss" | "cache_hit" | "cache_miss" | "measure_cache_hit" | "measure_cache_miss" | "measure_save_restore" | "parent_override" | "layout_enter" | "layout_exit";
|
|
28
|
+
export interface TraceEvent {
|
|
29
|
+
type: TraceEventType;
|
|
30
|
+
/** Node index in tree traversal order (stable across same tree) */
|
|
31
|
+
nodeIndex: number;
|
|
32
|
+
/** Available width constraint */
|
|
33
|
+
availW: number;
|
|
34
|
+
/** Available height constraint */
|
|
35
|
+
availH: number;
|
|
36
|
+
/** Extra data depending on event type */
|
|
37
|
+
detail?: Record<string, number | string | boolean>;
|
|
38
|
+
}
|
|
39
|
+
export interface TraceDiff {
|
|
40
|
+
index: number;
|
|
41
|
+
event1: TraceEvent | undefined;
|
|
42
|
+
event2: TraceEvent | undefined;
|
|
43
|
+
reason: string;
|
|
44
|
+
}
|
|
45
|
+
export declare class LayoutTrace {
|
|
46
|
+
readonly events: TraceEvent[];
|
|
47
|
+
private _nodeCounter;
|
|
48
|
+
/** Reset node counter at start of a new layout pass */
|
|
49
|
+
resetCounter(): void;
|
|
50
|
+
/** Get next node index (call once per layoutNode entry) */
|
|
51
|
+
nextNode(): number;
|
|
52
|
+
fingerprintHit(nodeIndex: number, availW: number, availH: number): void;
|
|
53
|
+
fingerprintMiss(nodeIndex: number, availW: number, availH: number, detail?: Record<string, number | string | boolean>): void;
|
|
54
|
+
cacheHit(nodeIndex: number, availW: number, availH: number, width: number, height: number): void;
|
|
55
|
+
cacheMiss(nodeIndex: number, availW: number, availH: number): void;
|
|
56
|
+
measureCacheHit(nodeIndex: number, availW: number, availH: number, width: number, height: number): void;
|
|
57
|
+
measureCacheMiss(nodeIndex: number, availW: number, availH: number): void;
|
|
58
|
+
measureSaveRestore(nodeIndex: number, savedW: number, savedH: number, measuredW: number, measuredH: number): void;
|
|
59
|
+
parentOverride(nodeIndex: number, axis: "main" | "cross", original: number, overridden: number): void;
|
|
60
|
+
layoutEnter(nodeIndex: number, availW: number, availH: number, isDirty: boolean, childCount: number): void;
|
|
61
|
+
layoutExit(nodeIndex: number, width: number, height: number): void;
|
|
62
|
+
}
|
|
63
|
+
/** Enable tracing. Returns the trace recorder for later inspection. */
|
|
64
|
+
export declare function enableTrace(): LayoutTrace;
|
|
65
|
+
/** Disable tracing. Returns the trace that was recorded. */
|
|
66
|
+
export declare function disableTrace(): LayoutTrace | null;
|
|
67
|
+
/** Get the current trace recorder (null when tracing is disabled). */
|
|
68
|
+
export declare function getTrace(): LayoutTrace | null;
|
|
69
|
+
/**
|
|
70
|
+
* Compare two traces event-by-event.
|
|
71
|
+
* Returns divergence points — where the two passes made different decisions.
|
|
72
|
+
*/
|
|
73
|
+
export declare function diffTraces(t1: LayoutTrace, t2: LayoutTrace): TraceDiff[];
|
|
74
|
+
//# sourceMappingURL=trace.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trace.d.ts","sourceRoot":"","sources":["../src/trace.ts"],"names":[],"mappings":"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"}
|
package/dist/trace.js
ADDED
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Layout Trace — instrumented debug mode for fingerprint/cache tracing.
|
|
3
|
+
*
|
|
4
|
+
* Records every fingerprint check (hit/miss), cache lookup (hit/miss),
|
|
5
|
+
* measureNode save/restore, and parent size override during a layout pass.
|
|
6
|
+
* Two traces from consecutive passes can be diffed to find where they diverge.
|
|
7
|
+
*
|
|
8
|
+
* Zero-cost when disabled: the module-level `trace` getter returns undefined,
|
|
9
|
+
* and all callsites use optional chaining (`trace?.event()`).
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```typescript
|
|
13
|
+
* import { enableTrace, disableTrace, diffTraces } from 'flexture/trace';
|
|
14
|
+
*
|
|
15
|
+
* const t1 = enableTrace();
|
|
16
|
+
* root.calculateLayout(80, 24, DIRECTION_LTR);
|
|
17
|
+
* disableTrace();
|
|
18
|
+
*
|
|
19
|
+
* // Mutate tree...
|
|
20
|
+
* const t2 = enableTrace();
|
|
21
|
+
* root.calculateLayout(80, 24, DIRECTION_LTR);
|
|
22
|
+
* disableTrace();
|
|
23
|
+
*
|
|
24
|
+
* const diffs = diffTraces(t1, t2);
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
// =============================================================================
|
|
28
|
+
// Trace Recorder
|
|
29
|
+
// =============================================================================
|
|
30
|
+
export class LayoutTrace {
|
|
31
|
+
events = [];
|
|
32
|
+
_nodeCounter = 0;
|
|
33
|
+
/** Reset node counter at start of a new layout pass */
|
|
34
|
+
resetCounter() {
|
|
35
|
+
this._nodeCounter = 0;
|
|
36
|
+
}
|
|
37
|
+
/** Get next node index (call once per layoutNode entry) */
|
|
38
|
+
nextNode() {
|
|
39
|
+
return this._nodeCounter++;
|
|
40
|
+
}
|
|
41
|
+
fingerprintHit(nodeIndex, availW, availH) {
|
|
42
|
+
this.events.push({ type: "fingerprint_hit", nodeIndex, availW, availH });
|
|
43
|
+
}
|
|
44
|
+
fingerprintMiss(nodeIndex, availW, availH, detail) {
|
|
45
|
+
this.events.push({ type: "fingerprint_miss", nodeIndex, availW, availH, detail });
|
|
46
|
+
}
|
|
47
|
+
cacheHit(nodeIndex, availW, availH, width, height) {
|
|
48
|
+
this.events.push({
|
|
49
|
+
type: "cache_hit",
|
|
50
|
+
nodeIndex,
|
|
51
|
+
availW,
|
|
52
|
+
availH,
|
|
53
|
+
detail: { width, height },
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
cacheMiss(nodeIndex, availW, availH) {
|
|
57
|
+
this.events.push({ type: "cache_miss", nodeIndex, availW, availH });
|
|
58
|
+
}
|
|
59
|
+
measureCacheHit(nodeIndex, availW, availH, width, height) {
|
|
60
|
+
this.events.push({
|
|
61
|
+
type: "measure_cache_hit",
|
|
62
|
+
nodeIndex,
|
|
63
|
+
availW,
|
|
64
|
+
availH,
|
|
65
|
+
detail: { width, height },
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
measureCacheMiss(nodeIndex, availW, availH) {
|
|
69
|
+
this.events.push({ type: "measure_cache_miss", nodeIndex, availW, availH });
|
|
70
|
+
}
|
|
71
|
+
measureSaveRestore(nodeIndex, savedW, savedH, measuredW, measuredH) {
|
|
72
|
+
this.events.push({
|
|
73
|
+
type: "measure_save_restore",
|
|
74
|
+
nodeIndex,
|
|
75
|
+
availW: 0,
|
|
76
|
+
availH: 0,
|
|
77
|
+
detail: { savedW, savedH, measuredW, measuredH },
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
parentOverride(nodeIndex, axis, original, overridden) {
|
|
81
|
+
this.events.push({
|
|
82
|
+
type: "parent_override",
|
|
83
|
+
nodeIndex,
|
|
84
|
+
availW: 0,
|
|
85
|
+
availH: 0,
|
|
86
|
+
detail: { axis, original, overridden },
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
layoutEnter(nodeIndex, availW, availH, isDirty, childCount) {
|
|
90
|
+
this.events.push({
|
|
91
|
+
type: "layout_enter",
|
|
92
|
+
nodeIndex,
|
|
93
|
+
availW,
|
|
94
|
+
availH,
|
|
95
|
+
detail: { isDirty, childCount },
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
layoutExit(nodeIndex, width, height) {
|
|
99
|
+
this.events.push({
|
|
100
|
+
type: "layout_exit",
|
|
101
|
+
nodeIndex,
|
|
102
|
+
availW: 0,
|
|
103
|
+
availH: 0,
|
|
104
|
+
detail: { width, height },
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
// =============================================================================
|
|
109
|
+
// Module-level state (zero-cost when null)
|
|
110
|
+
// =============================================================================
|
|
111
|
+
let _trace = null;
|
|
112
|
+
/** Enable tracing. Returns the trace recorder for later inspection. */
|
|
113
|
+
export function enableTrace() {
|
|
114
|
+
_trace = new LayoutTrace();
|
|
115
|
+
return _trace;
|
|
116
|
+
}
|
|
117
|
+
/** Disable tracing. Returns the trace that was recorded. */
|
|
118
|
+
export function disableTrace() {
|
|
119
|
+
const t = _trace;
|
|
120
|
+
_trace = null;
|
|
121
|
+
return t;
|
|
122
|
+
}
|
|
123
|
+
/** Get the current trace recorder (null when tracing is disabled). */
|
|
124
|
+
export function getTrace() {
|
|
125
|
+
return _trace;
|
|
126
|
+
}
|
|
127
|
+
// =============================================================================
|
|
128
|
+
// Diff Utility
|
|
129
|
+
// =============================================================================
|
|
130
|
+
/**
|
|
131
|
+
* Compare two traces event-by-event.
|
|
132
|
+
* Returns divergence points — where the two passes made different decisions.
|
|
133
|
+
*/
|
|
134
|
+
export function diffTraces(t1, t2) {
|
|
135
|
+
const diffs = [];
|
|
136
|
+
const maxLen = Math.max(t1.events.length, t2.events.length);
|
|
137
|
+
for (let i = 0; i < maxLen; i++) {
|
|
138
|
+
const e1 = t1.events[i];
|
|
139
|
+
const e2 = t2.events[i];
|
|
140
|
+
if (!e1 || !e2) {
|
|
141
|
+
diffs.push({
|
|
142
|
+
index: i,
|
|
143
|
+
event1: e1,
|
|
144
|
+
event2: e2,
|
|
145
|
+
reason: !e1 ? "extra event in trace 2" : "extra event in trace 1",
|
|
146
|
+
});
|
|
147
|
+
continue;
|
|
148
|
+
}
|
|
149
|
+
if (e1.type !== e2.type) {
|
|
150
|
+
diffs.push({
|
|
151
|
+
index: i,
|
|
152
|
+
event1: e1,
|
|
153
|
+
event2: e2,
|
|
154
|
+
reason: `type differs: ${e1.type} vs ${e2.type}`,
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
else if (e1.nodeIndex !== e2.nodeIndex) {
|
|
158
|
+
diffs.push({
|
|
159
|
+
index: i,
|
|
160
|
+
event1: e1,
|
|
161
|
+
event2: e2,
|
|
162
|
+
reason: `nodeIndex differs: ${e1.nodeIndex} vs ${e2.nodeIndex}`,
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
else if (!Object.is(e1.availW, e2.availW) || !Object.is(e1.availH, e2.availH)) {
|
|
166
|
+
diffs.push({
|
|
167
|
+
index: i,
|
|
168
|
+
event1: e1,
|
|
169
|
+
event2: e2,
|
|
170
|
+
reason: `constraints differ: (${e1.availW},${e1.availH}) vs (${e2.availW},${e2.availH})`,
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
else if (e1.detail && e2.detail) {
|
|
174
|
+
// Compare detail fields
|
|
175
|
+
const keys = new Set([...Object.keys(e1.detail), ...Object.keys(e2.detail)]);
|
|
176
|
+
for (const key of keys) {
|
|
177
|
+
if (!Object.is(e1.detail[key], e2.detail[key])) {
|
|
178
|
+
diffs.push({
|
|
179
|
+
index: i,
|
|
180
|
+
event1: e1,
|
|
181
|
+
event2: e2,
|
|
182
|
+
reason: `detail.${key} differs: ${e1.detail[key]} vs ${e2.detail[key]}`,
|
|
183
|
+
});
|
|
184
|
+
break;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
return diffs;
|
|
190
|
+
}
|
|
191
|
+
//# sourceMappingURL=trace.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trace.js","sourceRoot":"","sources":["../src/trace.ts"],"names":[],"mappings":"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"}
|