@nextscope/next 0.1.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.
@@ -0,0 +1,79 @@
1
+ import type { FlatSpanRow, InspectorDiagnosticSpan, InspectorSpan, InspectorSpanEvent, InspectorTrace, InspectorTraceSummary } from './types';
2
+ export type { FlatSpanRow, InspectorDiagnosticSpan, InspectorRequestSegment, InspectorSpan, InspectorSpanEvent, InspectorStatus, InspectorTrace, InspectorTraceSummary } from './types';
3
+ export interface SpanSearchResult {
4
+ matches: Set<string>;
5
+ visible: Set<string>;
6
+ }
7
+ export interface TimelineBar {
8
+ leftPct: number;
9
+ widthPct: number;
10
+ labelOutside: boolean;
11
+ }
12
+ export interface Tick {
13
+ valueMs: number;
14
+ leftPct: number;
15
+ label: string;
16
+ }
17
+ export interface RowWindow {
18
+ start: number;
19
+ end: number;
20
+ offsetTop: number;
21
+ totalHeight: number;
22
+ }
23
+ export interface ZoomRange {
24
+ startMs: number;
25
+ endMs: number;
26
+ }
27
+ export interface TimelineHoverTarget {
28
+ kind: 'span' | 'event';
29
+ span: InspectorSpan;
30
+ event?: InspectorSpanEvent;
31
+ offsetMs: number;
32
+ }
33
+ export interface ParsedTraceFilter {
34
+ text: string;
35
+ route: string[];
36
+ service: string[];
37
+ duration: DurationFilter[];
38
+ errors?: boolean;
39
+ }
40
+ export interface DurationFilter {
41
+ operator: '>' | '>=' | '<' | '<=' | '=';
42
+ valueMs: number;
43
+ }
44
+ export interface RouteTraceGroup {
45
+ route: string;
46
+ traces: InspectorTraceSummary[];
47
+ stats: RouteStats;
48
+ }
49
+ export interface RouteStats {
50
+ count: number;
51
+ latest: string;
52
+ slowestMs: number;
53
+ p50Ms: number;
54
+ p95Ms: number;
55
+ errorRate: number;
56
+ }
57
+ export declare function traceSelectionKey(trace: Pick<InspectorTraceSummary, 'traceId' | 'requestSegmentId'>): string;
58
+ export declare function selectVisibleTraceKey(current: string | null, traces: Pick<InspectorTraceSummary, 'traceId' | 'requestSegmentId'>[]): string | null;
59
+ export declare function focusTraceOnSegment(trace: InspectorTrace, requestSegmentId: string): InspectorTrace;
60
+ export declare function errorSpanIds(roots: InspectorSpan[]): string[];
61
+ export declare function diagnosticSpanIds(spans: InspectorDiagnosticSpan[]): string[];
62
+ export declare function flattenVisibleSpans(roots: InspectorSpan[], collapsedIds: ReadonlySet<string>, search?: SpanSearchResult, matchesOnly?: boolean): FlatSpanRow[];
63
+ export declare function deriveSpanSearch(roots: InspectorSpan[], query: string): SpanSearchResult;
64
+ export declare function searchableSpanText(span: InspectorSpan): string;
65
+ export declare function searchableTraceText(trace: InspectorTraceSummary): string;
66
+ export declare function matchesSearchText(text: string, query: string): boolean;
67
+ export declare function parseTraceFilterQuery(query: string): ParsedTraceFilter;
68
+ export declare function traceMatchesFilter(trace: InspectorTraceSummary, filter: ParsedTraceFilter): boolean;
69
+ export declare function routeTraceGroups(traces: InspectorTraceSummary[]): RouteTraceGroup[];
70
+ export declare function routeStats(traces: InspectorTraceSummary[]): RouteStats;
71
+ export declare function calculateTimelineBar(span: Pick<InspectorSpan, 'offsetMs' | 'durationMs'>, range: ZoomRange, minWidthPct?: number): TimelineBar;
72
+ export declare function computeTicks(range: ZoomRange, maxTicks?: number): Tick[];
73
+ export declare function visibleRowWindow(rowCount: number, scrollTop: number, viewportHeight: number, rowHeight: number, overscan?: number): RowWindow;
74
+ export declare function findTimelineHoverTarget(rows: FlatSpanRow[], rowIndex: number, offsetMs: number, range: ZoomRange, viewportWidth: number, snapPx?: number): TimelineHoverTarget | null;
75
+ export declare function formatAbsoluteTraceTime(startTimeUnixNano: string, offsetMs: number): string;
76
+ export declare function zoomAt(range: ZoomRange, fullDurationMs: number, anchorPct: number, scale: number): ZoomRange;
77
+ export declare function formatDuration(value: number): string;
78
+ export declare function formatOffset(value: number): string;
79
+ export declare function formatTimestamp(value: string | number | Date): string;
@@ -0,0 +1,514 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.traceSelectionKey = traceSelectionKey;
4
+ exports.selectVisibleTraceKey = selectVisibleTraceKey;
5
+ exports.focusTraceOnSegment = focusTraceOnSegment;
6
+ exports.errorSpanIds = errorSpanIds;
7
+ exports.diagnosticSpanIds = diagnosticSpanIds;
8
+ exports.flattenVisibleSpans = flattenVisibleSpans;
9
+ exports.deriveSpanSearch = deriveSpanSearch;
10
+ exports.searchableSpanText = searchableSpanText;
11
+ exports.searchableTraceText = searchableTraceText;
12
+ exports.matchesSearchText = matchesSearchText;
13
+ exports.parseTraceFilterQuery = parseTraceFilterQuery;
14
+ exports.traceMatchesFilter = traceMatchesFilter;
15
+ exports.routeTraceGroups = routeTraceGroups;
16
+ exports.routeStats = routeStats;
17
+ exports.calculateTimelineBar = calculateTimelineBar;
18
+ exports.computeTicks = computeTicks;
19
+ exports.visibleRowWindow = visibleRowWindow;
20
+ exports.findTimelineHoverTarget = findTimelineHoverTarget;
21
+ exports.formatAbsoluteTraceTime = formatAbsoluteTraceTime;
22
+ exports.zoomAt = zoomAt;
23
+ exports.formatDuration = formatDuration;
24
+ exports.formatOffset = formatOffset;
25
+ exports.formatTimestamp = formatTimestamp;
26
+ function traceSelectionKey(trace) {
27
+ return `${trace.traceId}:${trace.requestSegmentId}`;
28
+ }
29
+ function selectVisibleTraceKey(current, traces) {
30
+ if (current && traces.some((item) => traceSelectionKey(item) === current)) {
31
+ return current;
32
+ }
33
+ return traces[0] ? traceSelectionKey(traces[0]) : null;
34
+ }
35
+ function focusTraceOnSegment(trace, requestSegmentId) {
36
+ const segment = trace.requestSegments.find((item) => item.requestSegmentId === requestSegmentId);
37
+ if (!segment || segment.requestSegmentId === trace.requestSegmentId) {
38
+ return {
39
+ ...trace,
40
+ spans: segment ? rootsForSegment(trace.spans, segment.requestSegmentId) : trace.spans,
41
+ };
42
+ }
43
+ return {
44
+ ...trace,
45
+ requestSegmentId: segment.requestSegmentId,
46
+ spanCount: segment.spanCount,
47
+ rootSpan: segment.rootSpan,
48
+ timestamp: formatSegmentTimestamp(trace.startTimeUnixNano, segment.startOffsetMs),
49
+ durationMs: segment.durationMs,
50
+ durationRangeMs: {
51
+ start: segment.startOffsetMs,
52
+ end: segment.endOffsetMs,
53
+ },
54
+ statusBucket: segment.statusBucket,
55
+ requestKind: segment.requestKind,
56
+ routeLabel: segment.routeLabel,
57
+ errorSpanCount: segment.errorSpanCount,
58
+ topSlowSpans: segment.topSlowSpans,
59
+ firstError: segment.firstError,
60
+ exceptionSummary: segment.exceptionSummary,
61
+ criticalPath: segment.criticalPath,
62
+ spans: rootsForSegment(trace.spans, segment.requestSegmentId),
63
+ };
64
+ }
65
+ function errorSpanIds(roots) {
66
+ const ids = [];
67
+ visitSpans(roots, (span) => {
68
+ if (span.hasError)
69
+ ids.push(span.spanId);
70
+ });
71
+ return ids;
72
+ }
73
+ function diagnosticSpanIds(spans) {
74
+ return spans.map((span) => span.spanId);
75
+ }
76
+ function flattenVisibleSpans(roots, collapsedIds, search, matchesOnly = false) {
77
+ const rows = [];
78
+ function visit(span, depth, isLastChild, ancestorLastChild) {
79
+ if (matchesOnly && search && !search.visible.has(span.spanId)) {
80
+ return;
81
+ }
82
+ const isCollapsed = collapsedIds.has(span.spanId);
83
+ rows.push({
84
+ span,
85
+ depth,
86
+ index: rows.length,
87
+ isLastChild,
88
+ ancestorLastChild,
89
+ hasChildren: span.children.length > 0,
90
+ isCollapsed,
91
+ isSearchMatch: search?.matches.has(span.spanId) ?? false,
92
+ isSearchAncestor: search ? search.visible.has(span.spanId) && !search.matches.has(span.spanId) : false,
93
+ });
94
+ if (isCollapsed) {
95
+ return;
96
+ }
97
+ span.children.forEach((child, index) => {
98
+ visit(child, depth + 1, index === span.children.length - 1, [
99
+ ...ancestorLastChild,
100
+ isLastChild,
101
+ ]);
102
+ });
103
+ }
104
+ roots.forEach((root, index) => {
105
+ visit(root, 0, index === roots.length - 1, []);
106
+ });
107
+ return rows;
108
+ }
109
+ function deriveSpanSearch(roots, query) {
110
+ const normalizedQuery = query.trim().toLowerCase();
111
+ const matches = new Set();
112
+ const visible = new Set();
113
+ if (!normalizedQuery) {
114
+ return { matches, visible };
115
+ }
116
+ function visit(span, ancestors) {
117
+ const hit = searchableSpanText(span).includes(normalizedQuery);
118
+ if (hit) {
119
+ matches.add(span.spanId);
120
+ for (const ancestor of ancestors) {
121
+ visible.add(ancestor);
122
+ }
123
+ visible.add(span.spanId);
124
+ }
125
+ for (const child of span.children) {
126
+ visit(child, [...ancestors, span.spanId]);
127
+ }
128
+ }
129
+ for (const root of roots) {
130
+ visit(root, []);
131
+ }
132
+ return { matches, visible };
133
+ }
134
+ function searchableSpanText(span) {
135
+ return typedSearchText([
136
+ span.name,
137
+ span.spanId,
138
+ span.parentSpanId,
139
+ span.kind,
140
+ span.serviceName,
141
+ span.spanType,
142
+ span.status?.code,
143
+ span.status?.message,
144
+ span.statusCode,
145
+ span.hasError ? 'error' : undefined,
146
+ entriesForSearch(span.attributes),
147
+ entriesForSearch(span.resourceAttributes),
148
+ span.events.map(eventFields),
149
+ span.links.map(linkFields),
150
+ ]);
151
+ }
152
+ function searchableTraceText(trace) {
153
+ return typedSearchText([
154
+ trace.traceId,
155
+ trace.rootSpan.spanId,
156
+ trace.rootSpan.name,
157
+ trace.rootSpan.route,
158
+ trace.rootSpan.target,
159
+ trace.rootSpan.method,
160
+ trace.rootSpan.statusCode,
161
+ trace.rootSpan.spanType,
162
+ trace.routeLabel,
163
+ trace.statusBucket,
164
+ trace.requestKind,
165
+ trace.hasRsc ? 'rsc' : undefined,
166
+ trace.hasPrefetch ? 'prefetch' : undefined,
167
+ trace.errorSpanCount ? 'error' : undefined,
168
+ trace.segmentCount > 1 ? 'segment' : undefined,
169
+ trace.firstError ? [trace.firstError.name, trace.firstError.exceptionMessage, trace.firstError.statusMessage] : undefined,
170
+ trace.exceptionSummary ? [trace.exceptionSummary.firstMessage, trace.exceptionSummary.firstType] : undefined,
171
+ trace.topSlowSpans.map((span) => [span.name, span.serviceName]),
172
+ trace.serviceNames,
173
+ trace.rootSpan.attributes ? entriesForSearch(trace.rootSpan.attributes) : undefined,
174
+ (hasTraceDetail(trace) ? trace.spans : []).map(searchableSpanText),
175
+ ]);
176
+ }
177
+ function rootsForSegment(roots, requestSegmentId) {
178
+ const root = findSpan(roots, requestSegmentId);
179
+ return root ? [root] : roots;
180
+ }
181
+ function findSpan(spans, spanId) {
182
+ for (const span of spans) {
183
+ if (span.spanId === spanId)
184
+ return span;
185
+ const child = findSpan(span.children, spanId);
186
+ if (child)
187
+ return child;
188
+ }
189
+ return undefined;
190
+ }
191
+ function visitSpans(spans, visit) {
192
+ for (const span of spans) {
193
+ visit(span);
194
+ visitSpans(span.children, visit);
195
+ }
196
+ }
197
+ function formatSegmentTimestamp(traceStartTimeUnixNano, offsetMs) {
198
+ try {
199
+ const startMs = Number(BigInt(traceStartTimeUnixNano) / 1000000n);
200
+ return new Date(startMs + Math.max(offsetMs, 0)).toISOString();
201
+ }
202
+ catch {
203
+ return new Date().toISOString();
204
+ }
205
+ }
206
+ function hasTraceDetail(trace) {
207
+ return 'spans' in trace;
208
+ }
209
+ function matchesSearchText(text, query) {
210
+ const normalizedQuery = query.trim().toLowerCase();
211
+ return !normalizedQuery || text.includes(normalizedQuery);
212
+ }
213
+ function parseTraceFilterQuery(query) {
214
+ const fields = {
215
+ text: '',
216
+ route: [],
217
+ service: [],
218
+ duration: [],
219
+ };
220
+ const textTokens = [];
221
+ for (const token of tokenizeQuery(query)) {
222
+ const separator = token.indexOf(':');
223
+ if (separator < 1) {
224
+ textTokens.push(token);
225
+ continue;
226
+ }
227
+ const key = token.slice(0, separator).toLowerCase();
228
+ const value = token.slice(separator + 1);
229
+ if (!value) {
230
+ textTokens.push(token);
231
+ continue;
232
+ }
233
+ if (key === 'route') {
234
+ fields.route.push(value.toLowerCase());
235
+ }
236
+ else if (key === 'service') {
237
+ fields.service.push(value.toLowerCase());
238
+ }
239
+ else if (key === 'duration') {
240
+ const duration = parseDurationFilter(value);
241
+ if (duration) {
242
+ fields.duration.push(duration);
243
+ }
244
+ else {
245
+ textTokens.push(token);
246
+ }
247
+ }
248
+ else if (key === 'errors') {
249
+ const errors = parseBoolean(value);
250
+ if (errors === undefined) {
251
+ textTokens.push(token);
252
+ }
253
+ else {
254
+ fields.errors = errors;
255
+ }
256
+ }
257
+ else {
258
+ textTokens.push(token);
259
+ }
260
+ }
261
+ fields.text = textTokens.join(' ').toLowerCase();
262
+ return fields;
263
+ }
264
+ function traceMatchesFilter(trace, filter) {
265
+ return (matchesSearchText(searchableTraceText(trace), filter.text) &&
266
+ filter.route.every((route) => routeFields(trace).some((field) => field.includes(route))) &&
267
+ filter.service.every((service) => trace.serviceNames.some((name) => name.toLowerCase().includes(service))) &&
268
+ filter.duration.every((duration) => matchesDuration(trace.durationMs, duration)) &&
269
+ (filter.errors === undefined || (trace.errorSpanCount > 0) === filter.errors));
270
+ }
271
+ function routeTraceGroups(traces) {
272
+ const groups = new Map();
273
+ for (const trace of traces) {
274
+ const route = trace.routeLabel || trace.rootSpan.route || trace.rootSpan.target || trace.rootSpan.name || 'unknown';
275
+ const group = groups.get(route);
276
+ if (group) {
277
+ group.push(trace);
278
+ }
279
+ else {
280
+ groups.set(route, [trace]);
281
+ }
282
+ }
283
+ return [...groups.entries()].map(([route, groupTraces]) => ({
284
+ route,
285
+ traces: groupTraces,
286
+ stats: routeStats(groupTraces),
287
+ }));
288
+ }
289
+ function routeStats(traces) {
290
+ const sortedDurations = traces.map((trace) => trace.durationMs).sort((a, b) => a - b);
291
+ const latest = traces.reduce((current, trace) => {
292
+ return !current || Date.parse(trace.timestamp) > Date.parse(current) ? trace.timestamp : current;
293
+ }, '');
294
+ const slowestMs = sortedDurations.at(-1) ?? 0;
295
+ const errorCount = traces.filter((trace) => trace.errorSpanCount > 0).length;
296
+ return {
297
+ count: traces.length,
298
+ latest,
299
+ slowestMs,
300
+ p50Ms: percentile(sortedDurations, 0.5),
301
+ p95Ms: percentile(sortedDurations, 0.95),
302
+ errorRate: traces.length ? errorCount / traces.length : 0,
303
+ };
304
+ }
305
+ function tokenizeQuery(query) {
306
+ const tokens = [];
307
+ const pattern = /"([^"]*)"|'([^']*)'|(\S+)/g;
308
+ let match;
309
+ while ((match = pattern.exec(query)) !== null) {
310
+ tokens.push(match[1] ?? match[2] ?? match[3] ?? '');
311
+ }
312
+ return tokens.filter(Boolean);
313
+ }
314
+ function parseDurationFilter(value) {
315
+ const match = /^(>=|<=|>|<|=)?(\d+(?:\.\d+)?)(ms|s)?$/i.exec(value);
316
+ if (!match)
317
+ return undefined;
318
+ const operator = (match[1] ?? '=');
319
+ const amount = Number(match[2]);
320
+ if (!Number.isFinite(amount))
321
+ return undefined;
322
+ return {
323
+ operator,
324
+ valueMs: (match[3]?.toLowerCase() === 's' ? amount * 1000 : amount),
325
+ };
326
+ }
327
+ function parseBoolean(value) {
328
+ const normalized = value.toLowerCase();
329
+ if (['true', '1', 'yes'].includes(normalized))
330
+ return true;
331
+ if (['false', '0', 'no'].includes(normalized))
332
+ return false;
333
+ return undefined;
334
+ }
335
+ function routeFields(trace) {
336
+ return [
337
+ trace.routeLabel,
338
+ trace.rootSpan.route,
339
+ trace.rootSpan.target,
340
+ trace.rootSpan.name,
341
+ ].filter((field) => Boolean(field)).map((field) => field.toLowerCase());
342
+ }
343
+ function matchesDuration(valueMs, filter) {
344
+ if (filter.operator === '>')
345
+ return valueMs > filter.valueMs;
346
+ if (filter.operator === '>=')
347
+ return valueMs >= filter.valueMs;
348
+ if (filter.operator === '<')
349
+ return valueMs < filter.valueMs;
350
+ if (filter.operator === '<=')
351
+ return valueMs <= filter.valueMs;
352
+ return valueMs === filter.valueMs;
353
+ }
354
+ function percentile(sortedValues, rank) {
355
+ if (sortedValues.length === 0)
356
+ return 0;
357
+ const index = Math.ceil(sortedValues.length * rank) - 1;
358
+ return sortedValues[Math.min(Math.max(index, 0), sortedValues.length - 1)] ?? 0;
359
+ }
360
+ function eventFields(event) {
361
+ return [
362
+ event.name,
363
+ event.timeUnixNano,
364
+ event.offsetMs,
365
+ event.name === 'exception' ? 'exception error' : undefined,
366
+ entriesForSearch(event.attributes),
367
+ ];
368
+ }
369
+ function linkFields(link) {
370
+ return [
371
+ link.traceId,
372
+ link.spanId,
373
+ link.traceState,
374
+ entriesForSearch(link.attributes),
375
+ ];
376
+ }
377
+ function entriesForSearch(value) {
378
+ return Object.entries(value).flatMap(([key, item]) => [key, item]);
379
+ }
380
+ function typedSearchText(values) {
381
+ return values.flatMap(searchTokens).join(' ').toLowerCase();
382
+ }
383
+ function searchTokens(value) {
384
+ if (value === undefined || value === null)
385
+ return [];
386
+ if (Array.isArray(value))
387
+ return value.flatMap(searchTokens);
388
+ if (value instanceof Date)
389
+ return [value.toISOString()];
390
+ if (typeof value === 'object') {
391
+ return Object.entries(value).flatMap(([key, item]) => [key, ...searchTokens(item)]);
392
+ }
393
+ return [String(value)];
394
+ }
395
+ function calculateTimelineBar(span, range, minWidthPct = 0.35) {
396
+ const duration = Math.max(range.endMs - range.startMs, 1);
397
+ const leftPct = ((span.offsetMs - range.startMs) / duration) * 100;
398
+ const rawWidthPct = (span.durationMs / duration) * 100;
399
+ const widthPct = Math.max(rawWidthPct, minWidthPct);
400
+ return {
401
+ leftPct,
402
+ widthPct,
403
+ labelOutside: rawWidthPct < 8,
404
+ };
405
+ }
406
+ function computeTicks(range, maxTicks = 8) {
407
+ const duration = Math.max(range.endMs - range.startMs, 1);
408
+ const roughStep = duration / Math.max(maxTicks, 1);
409
+ const step = niceStep(roughStep);
410
+ const first = Math.ceil(range.startMs / step) * step;
411
+ const ticks = [];
412
+ for (let value = first; value <= range.endMs; value += step) {
413
+ ticks.push({
414
+ valueMs: value,
415
+ leftPct: ((value - range.startMs) / duration) * 100,
416
+ label: formatDuration(value),
417
+ });
418
+ }
419
+ return ticks;
420
+ }
421
+ function visibleRowWindow(rowCount, scrollTop, viewportHeight, rowHeight, overscan = 6) {
422
+ const visibleStart = Math.floor(scrollTop / rowHeight);
423
+ const visibleEnd = Math.ceil((scrollTop + viewportHeight) / rowHeight);
424
+ const start = clamp(visibleStart - overscan, 0, rowCount);
425
+ const end = clamp(visibleEnd + overscan, start, rowCount);
426
+ return {
427
+ start,
428
+ end,
429
+ offsetTop: start * rowHeight,
430
+ totalHeight: rowCount * rowHeight,
431
+ };
432
+ }
433
+ function findTimelineHoverTarget(rows, rowIndex, offsetMs, range, viewportWidth, snapPx = 8) {
434
+ const row = rows[rowIndex];
435
+ if (!row)
436
+ return null;
437
+ const thresholdMs = (Math.max(range.endMs - range.startMs, 1) / Math.max(viewportWidth, 1)) * snapPx;
438
+ const nearestEvent = row.span.events.reduce((nearest, event) => {
439
+ if (event.offsetMs < range.startMs || event.offsetMs > range.endMs)
440
+ return nearest;
441
+ if (Math.abs(event.offsetMs - offsetMs) > thresholdMs)
442
+ return nearest;
443
+ if (!nearest)
444
+ return event;
445
+ return Math.abs(event.offsetMs - offsetMs) < Math.abs(nearest.offsetMs - offsetMs) ? event : nearest;
446
+ }, null);
447
+ if (nearestEvent) {
448
+ return {
449
+ kind: 'event',
450
+ span: row.span,
451
+ event: nearestEvent,
452
+ offsetMs: nearestEvent.offsetMs,
453
+ };
454
+ }
455
+ if (offsetMs >= row.span.offsetMs - thresholdMs && offsetMs <= row.span.endOffsetMs + thresholdMs) {
456
+ return {
457
+ kind: 'span',
458
+ span: row.span,
459
+ offsetMs,
460
+ };
461
+ }
462
+ return null;
463
+ }
464
+ function formatAbsoluteTraceTime(startTimeUnixNano, offsetMs) {
465
+ try {
466
+ const startMs = Number(BigInt(startTimeUnixNano) / 1000000n);
467
+ return formatTimestamp(startMs + Math.max(offsetMs, 0));
468
+ }
469
+ catch {
470
+ return formatTimestamp(Date.now());
471
+ }
472
+ }
473
+ function zoomAt(range, fullDurationMs, anchorPct, scale) {
474
+ const duration = Math.max(range.endMs - range.startMs, 1);
475
+ const nextDuration = clamp(duration / scale, 5, Math.max(fullDurationMs, 5));
476
+ const anchorMs = range.startMs + duration * clamp(anchorPct, 0, 1);
477
+ const nextStart = clamp(anchorMs - nextDuration * anchorPct, 0, fullDurationMs - nextDuration);
478
+ return {
479
+ startMs: nextStart,
480
+ endMs: nextStart + nextDuration,
481
+ };
482
+ }
483
+ function formatDuration(value) {
484
+ if (!Number.isFinite(value))
485
+ return '0 ms';
486
+ if (Math.abs(value) < 1)
487
+ return `${value.toFixed(2)} ms`;
488
+ if (Math.abs(value) < 1000)
489
+ return `${value.toFixed(1)} ms`;
490
+ return `${(value / 1000).toFixed(2)} s`;
491
+ }
492
+ function formatOffset(value) {
493
+ return `+${formatDuration(Math.max(value, 0))}`;
494
+ }
495
+ function formatTimestamp(value) {
496
+ const date = value instanceof Date ? value : new Date(value);
497
+ return new Intl.DateTimeFormat(undefined, {
498
+ hour: '2-digit',
499
+ minute: '2-digit',
500
+ second: '2-digit',
501
+ fractionalSecondDigits: 3,
502
+ }).format(date);
503
+ }
504
+ function niceStep(value) {
505
+ const exponent = Math.floor(Math.log10(value));
506
+ const base = 10 ** exponent;
507
+ const fraction = value / base;
508
+ const niceFraction = fraction <= 1 ? 1 : fraction <= 2 ? 2 : fraction <= 5 ? 5 : 10;
509
+ return niceFraction * base;
510
+ }
511
+ function clamp(value, min, max) {
512
+ return Math.min(Math.max(value, min), max);
513
+ }
514
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/inspector/model/index.ts"],"names":[],"mappings":"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"}