@fluixi/devtools 0.2.0-alpha.3 → 0.2.0-alpha.4
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/callsite.cjs +72 -0
- package/dist/callsite.mjs +51 -0
- package/dist/change-view.cjs +134 -0
- package/dist/change-view.mjs +111 -0
- package/dist/copy.cjs +63 -0
- package/dist/copy.mjs +42 -0
- package/dist/describe.cjs +55 -0
- package/dist/describe.mjs +34 -0
- package/dist/detail-panel.cjs +307 -0
- package/dist/detail-panel.mjs +284 -0
- package/dist/diff.cjs +225 -0
- package/dist/diff.mjs +202 -0
- package/dist/dom.cjs +204 -0
- package/dist/dom.mjs +183 -0
- package/dist/export.cjs +221 -0
- package/dist/export.mjs +209 -0
- package/dist/float.cjs +232 -0
- package/dist/float.mjs +211 -0
- package/dist/format.cjs +175 -0
- package/dist/format.mjs +154 -0
- package/dist/graph-view.cjs +893 -0
- package/dist/graph-view.mjs +870 -0
- package/dist/highlight.cjs +140 -0
- package/dist/highlight.mjs +119 -0
- package/dist/history.cjs +95 -0
- package/dist/history.mjs +74 -0
- package/dist/hook.cjs +1562 -0
- package/dist/hook.mjs +1553 -0
- package/dist/index.cjs +4552 -0
- package/dist/index.mjs +4544 -0
- package/dist/inspector.cjs +688 -0
- package/dist/inspector.mjs +676 -0
- package/dist/instrument.cjs +497 -0
- package/dist/instrument.mjs +487 -0
- package/dist/kind-filter.cjs +172 -0
- package/dist/kind-filter.mjs +151 -0
- package/dist/menu.cjs +141 -0
- package/dist/menu.mjs +120 -0
- package/dist/observe.cjs +1352 -0
- package/dist/observe.mjs +1345 -0
- package/dist/palette.cjs +52 -0
- package/dist/palette.mjs +31 -0
- package/dist/path.cjs +45 -0
- package/dist/path.mjs +24 -0
- package/dist/plugin.cjs +87 -0
- package/dist/plugin.mjs +66 -0
- package/dist/plugins/context.cjs +98 -0
- package/dist/plugins/context.mjs +75 -0
- package/dist/plugins/directives.cjs +98 -0
- package/dist/plugins/directives.mjs +75 -0
- package/dist/plugins/index.cjs +162 -0
- package/dist/plugins/index.mjs +140 -0
- package/dist/source.cjs +111 -0
- package/dist/source.mjs +90 -0
- package/dist/timeline.cjs +350 -0
- package/dist/timeline.mjs +327 -0
- package/dist/tree.cjs +574 -0
- package/dist/tree.mjs +551 -0
- package/dist/tsconfig.lib.tsbuildinfo +1 -1
- package/dist/value-pane.cjs +223 -0
- package/dist/value-pane.mjs +200 -0
- package/dist/wire.cjs +109 -0
- package/dist/wire.mjs +89 -0
- package/package.json +13 -6
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// src/highlight.ts
|
|
21
|
+
var highlight_exports = {};
|
|
22
|
+
__export(highlight_exports, {
|
|
23
|
+
hideHighlight: () => hideHighlight,
|
|
24
|
+
removeHighlight: () => removeHighlight,
|
|
25
|
+
showHighlight: () => showHighlight,
|
|
26
|
+
startPicking: () => startPicking
|
|
27
|
+
});
|
|
28
|
+
module.exports = __toCommonJS(highlight_exports);
|
|
29
|
+
var LAYER = "fx-highlight-layer";
|
|
30
|
+
var overlay = null;
|
|
31
|
+
function build(doc) {
|
|
32
|
+
const layer = doc.createElement("div");
|
|
33
|
+
layer.id = LAYER;
|
|
34
|
+
layer.style.cssText = "position:fixed;inset:0;z-index:2147483646;pointer-events:none;contain:strict;";
|
|
35
|
+
const label = doc.createElement("div");
|
|
36
|
+
label.style.cssText = "position:absolute;padding:1px 5px;border-radius:3px;background:#5eead4;color:#07131a;font:11px/1.5 ui-monospace,monospace;white-space:nowrap;";
|
|
37
|
+
layer.append(label);
|
|
38
|
+
doc.body.appendChild(layer);
|
|
39
|
+
return { layer, boxes: [], label };
|
|
40
|
+
}
|
|
41
|
+
function boxIn(overlay2, index) {
|
|
42
|
+
const held = overlay2.boxes[index];
|
|
43
|
+
if (held) return held;
|
|
44
|
+
const box = overlay2.layer.ownerDocument.createElement("div");
|
|
45
|
+
box.style.cssText = "position:absolute;border:1px solid #5eead4;background:rgba(94,234,212,.16);border-radius:2px;transition:none;";
|
|
46
|
+
overlay2.layer.append(box);
|
|
47
|
+
overlay2.boxes.push(box);
|
|
48
|
+
return box;
|
|
49
|
+
}
|
|
50
|
+
function showHighlight(target, text) {
|
|
51
|
+
const elements = (Array.isArray(target) ? target : [target]).filter(
|
|
52
|
+
(el) => el?.isConnected
|
|
53
|
+
);
|
|
54
|
+
const first = elements[0];
|
|
55
|
+
const doc = first?.ownerDocument;
|
|
56
|
+
if (!doc?.body) {
|
|
57
|
+
hideHighlight();
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
if (!overlay || overlay.layer.ownerDocument !== doc || !overlay.layer.isConnected) {
|
|
61
|
+
overlay = build(doc);
|
|
62
|
+
}
|
|
63
|
+
const { label, layer } = overlay;
|
|
64
|
+
layer.style.display = "";
|
|
65
|
+
let top = Infinity;
|
|
66
|
+
let left = Infinity;
|
|
67
|
+
let bottom = 0;
|
|
68
|
+
elements.forEach((element, index) => {
|
|
69
|
+
const rect = element.getBoundingClientRect();
|
|
70
|
+
const box = boxIn(overlay, index);
|
|
71
|
+
box.style.display = "";
|
|
72
|
+
box.style.left = `${rect.left}px`;
|
|
73
|
+
box.style.top = `${rect.top}px`;
|
|
74
|
+
box.style.width = `${rect.width}px`;
|
|
75
|
+
box.style.height = `${rect.height}px`;
|
|
76
|
+
top = Math.min(top, rect.top);
|
|
77
|
+
left = Math.min(left, rect.left);
|
|
78
|
+
bottom = Math.max(bottom, rect.bottom);
|
|
79
|
+
});
|
|
80
|
+
for (let i = elements.length; i < overlay.boxes.length; i++) {
|
|
81
|
+
overlay.boxes[i].style.display = "none";
|
|
82
|
+
}
|
|
83
|
+
if (!text) {
|
|
84
|
+
label.style.display = "none";
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
label.style.display = "";
|
|
88
|
+
label.textContent = text;
|
|
89
|
+
label.style.left = `${Math.max(2, left)}px`;
|
|
90
|
+
label.style.top = top >= 20 ? `${top - 18}px` : `${bottom + 4}px`;
|
|
91
|
+
}
|
|
92
|
+
function hideHighlight() {
|
|
93
|
+
if (overlay) overlay.layer.style.display = "none";
|
|
94
|
+
}
|
|
95
|
+
function removeHighlight() {
|
|
96
|
+
overlay?.layer.remove();
|
|
97
|
+
overlay = null;
|
|
98
|
+
}
|
|
99
|
+
function startPicking(options) {
|
|
100
|
+
const doc = options.document ?? globalThis.document;
|
|
101
|
+
if (!doc?.body) return () => {
|
|
102
|
+
};
|
|
103
|
+
const was = doc.body.style.cursor;
|
|
104
|
+
doc.body.style.cursor = "crosshair";
|
|
105
|
+
const under = (event) => {
|
|
106
|
+
const target = event.target;
|
|
107
|
+
return target?.closest?.(`#${LAYER}`) ? null : target;
|
|
108
|
+
};
|
|
109
|
+
const move = (event) => {
|
|
110
|
+
const element = under(event);
|
|
111
|
+
const id = options.nodeAt(element);
|
|
112
|
+
if (element && id !== void 0) showHighlight(element, options.describe?.(id, element));
|
|
113
|
+
else hideHighlight();
|
|
114
|
+
};
|
|
115
|
+
const click = (event) => {
|
|
116
|
+
event.preventDefault();
|
|
117
|
+
event.stopPropagation();
|
|
118
|
+
const target = under(event);
|
|
119
|
+
const id = options.nodeAt(target);
|
|
120
|
+
if (!options.sticky) stop();
|
|
121
|
+
if (id !== void 0) options.onPick(id, target);
|
|
122
|
+
else if (!options.sticky) options.onCancel?.();
|
|
123
|
+
};
|
|
124
|
+
const key = (event) => {
|
|
125
|
+
if (event.key !== "Escape") return;
|
|
126
|
+
stop();
|
|
127
|
+
options.onCancel?.();
|
|
128
|
+
};
|
|
129
|
+
const stop = () => {
|
|
130
|
+
doc.body.style.cursor = was;
|
|
131
|
+
doc.removeEventListener("pointermove", move, true);
|
|
132
|
+
doc.removeEventListener("click", click, true);
|
|
133
|
+
doc.removeEventListener("keydown", key, true);
|
|
134
|
+
hideHighlight();
|
|
135
|
+
};
|
|
136
|
+
doc.addEventListener("pointermove", move, true);
|
|
137
|
+
doc.addEventListener("click", click, true);
|
|
138
|
+
doc.addEventListener("keydown", key, true);
|
|
139
|
+
return stop;
|
|
140
|
+
}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
// src/highlight.ts
|
|
2
|
+
var LAYER = "fx-highlight-layer";
|
|
3
|
+
var overlay = null;
|
|
4
|
+
function build(doc) {
|
|
5
|
+
const layer = doc.createElement("div");
|
|
6
|
+
layer.id = LAYER;
|
|
7
|
+
layer.style.cssText = "position:fixed;inset:0;z-index:2147483646;pointer-events:none;contain:strict;";
|
|
8
|
+
const label = doc.createElement("div");
|
|
9
|
+
label.style.cssText = "position:absolute;padding:1px 5px;border-radius:3px;background:#5eead4;color:#07131a;font:11px/1.5 ui-monospace,monospace;white-space:nowrap;";
|
|
10
|
+
layer.append(label);
|
|
11
|
+
doc.body.appendChild(layer);
|
|
12
|
+
return { layer, boxes: [], label };
|
|
13
|
+
}
|
|
14
|
+
function boxIn(overlay2, index) {
|
|
15
|
+
const held = overlay2.boxes[index];
|
|
16
|
+
if (held) return held;
|
|
17
|
+
const box = overlay2.layer.ownerDocument.createElement("div");
|
|
18
|
+
box.style.cssText = "position:absolute;border:1px solid #5eead4;background:rgba(94,234,212,.16);border-radius:2px;transition:none;";
|
|
19
|
+
overlay2.layer.append(box);
|
|
20
|
+
overlay2.boxes.push(box);
|
|
21
|
+
return box;
|
|
22
|
+
}
|
|
23
|
+
function showHighlight(target, text) {
|
|
24
|
+
const elements = (Array.isArray(target) ? target : [target]).filter(
|
|
25
|
+
(el) => el?.isConnected
|
|
26
|
+
);
|
|
27
|
+
const first = elements[0];
|
|
28
|
+
const doc = first?.ownerDocument;
|
|
29
|
+
if (!doc?.body) {
|
|
30
|
+
hideHighlight();
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
if (!overlay || overlay.layer.ownerDocument !== doc || !overlay.layer.isConnected) {
|
|
34
|
+
overlay = build(doc);
|
|
35
|
+
}
|
|
36
|
+
const { label, layer } = overlay;
|
|
37
|
+
layer.style.display = "";
|
|
38
|
+
let top = Infinity;
|
|
39
|
+
let left = Infinity;
|
|
40
|
+
let bottom = 0;
|
|
41
|
+
elements.forEach((element, index) => {
|
|
42
|
+
const rect = element.getBoundingClientRect();
|
|
43
|
+
const box = boxIn(overlay, index);
|
|
44
|
+
box.style.display = "";
|
|
45
|
+
box.style.left = `${rect.left}px`;
|
|
46
|
+
box.style.top = `${rect.top}px`;
|
|
47
|
+
box.style.width = `${rect.width}px`;
|
|
48
|
+
box.style.height = `${rect.height}px`;
|
|
49
|
+
top = Math.min(top, rect.top);
|
|
50
|
+
left = Math.min(left, rect.left);
|
|
51
|
+
bottom = Math.max(bottom, rect.bottom);
|
|
52
|
+
});
|
|
53
|
+
for (let i = elements.length; i < overlay.boxes.length; i++) {
|
|
54
|
+
overlay.boxes[i].style.display = "none";
|
|
55
|
+
}
|
|
56
|
+
if (!text) {
|
|
57
|
+
label.style.display = "none";
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
label.style.display = "";
|
|
61
|
+
label.textContent = text;
|
|
62
|
+
label.style.left = `${Math.max(2, left)}px`;
|
|
63
|
+
label.style.top = top >= 20 ? `${top - 18}px` : `${bottom + 4}px`;
|
|
64
|
+
}
|
|
65
|
+
function hideHighlight() {
|
|
66
|
+
if (overlay) overlay.layer.style.display = "none";
|
|
67
|
+
}
|
|
68
|
+
function removeHighlight() {
|
|
69
|
+
overlay?.layer.remove();
|
|
70
|
+
overlay = null;
|
|
71
|
+
}
|
|
72
|
+
function startPicking(options) {
|
|
73
|
+
const doc = options.document ?? globalThis.document;
|
|
74
|
+
if (!doc?.body) return () => {
|
|
75
|
+
};
|
|
76
|
+
const was = doc.body.style.cursor;
|
|
77
|
+
doc.body.style.cursor = "crosshair";
|
|
78
|
+
const under = (event) => {
|
|
79
|
+
const target = event.target;
|
|
80
|
+
return target?.closest?.(`#${LAYER}`) ? null : target;
|
|
81
|
+
};
|
|
82
|
+
const move = (event) => {
|
|
83
|
+
const element = under(event);
|
|
84
|
+
const id = options.nodeAt(element);
|
|
85
|
+
if (element && id !== void 0) showHighlight(element, options.describe?.(id, element));
|
|
86
|
+
else hideHighlight();
|
|
87
|
+
};
|
|
88
|
+
const click = (event) => {
|
|
89
|
+
event.preventDefault();
|
|
90
|
+
event.stopPropagation();
|
|
91
|
+
const target = under(event);
|
|
92
|
+
const id = options.nodeAt(target);
|
|
93
|
+
if (!options.sticky) stop();
|
|
94
|
+
if (id !== void 0) options.onPick(id, target);
|
|
95
|
+
else if (!options.sticky) options.onCancel?.();
|
|
96
|
+
};
|
|
97
|
+
const key = (event) => {
|
|
98
|
+
if (event.key !== "Escape") return;
|
|
99
|
+
stop();
|
|
100
|
+
options.onCancel?.();
|
|
101
|
+
};
|
|
102
|
+
const stop = () => {
|
|
103
|
+
doc.body.style.cursor = was;
|
|
104
|
+
doc.removeEventListener("pointermove", move, true);
|
|
105
|
+
doc.removeEventListener("click", click, true);
|
|
106
|
+
doc.removeEventListener("keydown", key, true);
|
|
107
|
+
hideHighlight();
|
|
108
|
+
};
|
|
109
|
+
doc.addEventListener("pointermove", move, true);
|
|
110
|
+
doc.addEventListener("click", click, true);
|
|
111
|
+
doc.addEventListener("keydown", key, true);
|
|
112
|
+
return stop;
|
|
113
|
+
}
|
|
114
|
+
export {
|
|
115
|
+
hideHighlight,
|
|
116
|
+
removeHighlight,
|
|
117
|
+
showHighlight,
|
|
118
|
+
startPicking
|
|
119
|
+
};
|
package/dist/history.cjs
ADDED
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// src/history.ts
|
|
21
|
+
var history_exports = {};
|
|
22
|
+
__export(history_exports, {
|
|
23
|
+
createHistory: () => createHistory,
|
|
24
|
+
toCommits: () => toCommits
|
|
25
|
+
});
|
|
26
|
+
module.exports = __toCommonJS(history_exports);
|
|
27
|
+
var OFF = {
|
|
28
|
+
wrote() {
|
|
29
|
+
},
|
|
30
|
+
ran() {
|
|
31
|
+
},
|
|
32
|
+
created() {
|
|
33
|
+
},
|
|
34
|
+
disposed() {
|
|
35
|
+
},
|
|
36
|
+
take: () => [],
|
|
37
|
+
dropped: 0,
|
|
38
|
+
clear() {
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
function createHistory(limit) {
|
|
42
|
+
if (limit <= 0) return OFF;
|
|
43
|
+
let events = [];
|
|
44
|
+
let seq = 0;
|
|
45
|
+
let commit = 0;
|
|
46
|
+
let dropped = 0;
|
|
47
|
+
const push = (event) => {
|
|
48
|
+
events.push({ ...event, seq: seq++, t: Date.now(), commit });
|
|
49
|
+
if (events.length > limit) {
|
|
50
|
+
dropped += events.length - limit;
|
|
51
|
+
events = events.slice(-limit);
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
return {
|
|
55
|
+
wrote(id, by, detail) {
|
|
56
|
+
if (by === void 0) commit++;
|
|
57
|
+
push({ kind: "write", id, by, ...detail });
|
|
58
|
+
},
|
|
59
|
+
ran(id, by) {
|
|
60
|
+
push({ kind: "ran", id, by });
|
|
61
|
+
},
|
|
62
|
+
created(id, by, label) {
|
|
63
|
+
push({ kind: "created", id, by, label });
|
|
64
|
+
},
|
|
65
|
+
disposed(id, label) {
|
|
66
|
+
push({ kind: "disposed", id, label });
|
|
67
|
+
},
|
|
68
|
+
take() {
|
|
69
|
+
const taken = events;
|
|
70
|
+
events = [];
|
|
71
|
+
return taken;
|
|
72
|
+
},
|
|
73
|
+
get dropped() {
|
|
74
|
+
return dropped;
|
|
75
|
+
},
|
|
76
|
+
clear() {
|
|
77
|
+
events = [];
|
|
78
|
+
dropped = 0;
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
function toCommits(events) {
|
|
83
|
+
const byNumber = /* @__PURE__ */ new Map();
|
|
84
|
+
for (const event of events) {
|
|
85
|
+
const bucket = byNumber.get(event.commit);
|
|
86
|
+
if (bucket) bucket.push(event);
|
|
87
|
+
else byNumber.set(event.commit, [event]);
|
|
88
|
+
}
|
|
89
|
+
return [...byNumber.entries()].sort((a, b) => a[0] - b[0]).map(([commit, group]) => ({
|
|
90
|
+
commit,
|
|
91
|
+
t: group[0].t,
|
|
92
|
+
events: group,
|
|
93
|
+
cause: group.find((e) => e.kind === "write" && e.by === void 0)
|
|
94
|
+
}));
|
|
95
|
+
}
|
package/dist/history.mjs
ADDED
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
// src/history.ts
|
|
2
|
+
var OFF = {
|
|
3
|
+
wrote() {
|
|
4
|
+
},
|
|
5
|
+
ran() {
|
|
6
|
+
},
|
|
7
|
+
created() {
|
|
8
|
+
},
|
|
9
|
+
disposed() {
|
|
10
|
+
},
|
|
11
|
+
take: () => [],
|
|
12
|
+
dropped: 0,
|
|
13
|
+
clear() {
|
|
14
|
+
}
|
|
15
|
+
};
|
|
16
|
+
function createHistory(limit) {
|
|
17
|
+
if (limit <= 0) return OFF;
|
|
18
|
+
let events = [];
|
|
19
|
+
let seq = 0;
|
|
20
|
+
let commit = 0;
|
|
21
|
+
let dropped = 0;
|
|
22
|
+
const push = (event) => {
|
|
23
|
+
events.push({ ...event, seq: seq++, t: Date.now(), commit });
|
|
24
|
+
if (events.length > limit) {
|
|
25
|
+
dropped += events.length - limit;
|
|
26
|
+
events = events.slice(-limit);
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
return {
|
|
30
|
+
wrote(id, by, detail) {
|
|
31
|
+
if (by === void 0) commit++;
|
|
32
|
+
push({ kind: "write", id, by, ...detail });
|
|
33
|
+
},
|
|
34
|
+
ran(id, by) {
|
|
35
|
+
push({ kind: "ran", id, by });
|
|
36
|
+
},
|
|
37
|
+
created(id, by, label) {
|
|
38
|
+
push({ kind: "created", id, by, label });
|
|
39
|
+
},
|
|
40
|
+
disposed(id, label) {
|
|
41
|
+
push({ kind: "disposed", id, label });
|
|
42
|
+
},
|
|
43
|
+
take() {
|
|
44
|
+
const taken = events;
|
|
45
|
+
events = [];
|
|
46
|
+
return taken;
|
|
47
|
+
},
|
|
48
|
+
get dropped() {
|
|
49
|
+
return dropped;
|
|
50
|
+
},
|
|
51
|
+
clear() {
|
|
52
|
+
events = [];
|
|
53
|
+
dropped = 0;
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
function toCommits(events) {
|
|
58
|
+
const byNumber = /* @__PURE__ */ new Map();
|
|
59
|
+
for (const event of events) {
|
|
60
|
+
const bucket = byNumber.get(event.commit);
|
|
61
|
+
if (bucket) bucket.push(event);
|
|
62
|
+
else byNumber.set(event.commit, [event]);
|
|
63
|
+
}
|
|
64
|
+
return [...byNumber.entries()].sort((a, b) => a[0] - b[0]).map(([commit, group]) => ({
|
|
65
|
+
commit,
|
|
66
|
+
t: group[0].t,
|
|
67
|
+
events: group,
|
|
68
|
+
cause: group.find((e) => e.kind === "write" && e.by === void 0)
|
|
69
|
+
}));
|
|
70
|
+
}
|
|
71
|
+
export {
|
|
72
|
+
createHistory,
|
|
73
|
+
toCommits
|
|
74
|
+
};
|