perfgraph 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.
- package/LICENSE +21 -0
- package/README.md +280 -0
- package/dist/causal/builder.d.ts +34 -0
- package/dist/causal/builder.d.ts.map +1 -0
- package/dist/causal/builder.js +132 -0
- package/dist/causal/builder.js.map +1 -0
- package/dist/causal/index.d.ts +11 -0
- package/dist/causal/index.d.ts.map +1 -0
- package/dist/causal/index.js +10 -0
- package/dist/causal/index.js.map +1 -0
- package/dist/causal/rules/js.d.ts +49 -0
- package/dist/causal/rules/js.d.ts.map +1 -0
- package/dist/causal/rules/js.js +209 -0
- package/dist/causal/rules/js.js.map +1 -0
- package/dist/causal/rules/layout.d.ts +39 -0
- package/dist/causal/rules/layout.d.ts.map +1 -0
- package/dist/causal/rules/layout.js +169 -0
- package/dist/causal/rules/layout.js.map +1 -0
- package/dist/causal/rules/lcp.d.ts +49 -0
- package/dist/causal/rules/lcp.d.ts.map +1 -0
- package/dist/causal/rules/lcp.js +250 -0
- package/dist/causal/rules/lcp.js.map +1 -0
- package/dist/causal/rules/network.d.ts +39 -0
- package/dist/causal/rules/network.d.ts.map +1 -0
- package/dist/causal/rules/network.js +140 -0
- package/dist/causal/rules/network.js.map +1 -0
- package/dist/causal/types.d.ts +142 -0
- package/dist/causal/types.d.ts.map +1 -0
- package/dist/causal/types.js +88 -0
- package/dist/causal/types.js.map +1 -0
- package/dist/cli/analyze.d.ts +33 -0
- package/dist/cli/analyze.d.ts.map +1 -0
- package/dist/cli/analyze.js +137 -0
- package/dist/cli/analyze.js.map +1 -0
- package/dist/cli/collect.d.ts +28 -0
- package/dist/cli/collect.d.ts.map +1 -0
- package/dist/cli/collect.js +125 -0
- package/dist/cli/collect.js.map +1 -0
- package/dist/cli/extract.d.ts +31 -0
- package/dist/cli/extract.d.ts.map +1 -0
- package/dist/cli/extract.js +135 -0
- package/dist/cli/extract.js.map +1 -0
- package/dist/cli/mcp.d.ts +14 -0
- package/dist/cli/mcp.d.ts.map +1 -0
- package/dist/cli/mcp.js +53 -0
- package/dist/cli/mcp.js.map +1 -0
- package/dist/cli/normalize.d.ts +58 -0
- package/dist/cli/normalize.d.ts.map +1 -0
- package/dist/cli/normalize.js +179 -0
- package/dist/cli/normalize.js.map +1 -0
- package/dist/cli/report.d.ts +33 -0
- package/dist/cli/report.d.ts.map +1 -0
- package/dist/cli/report.js +137 -0
- package/dist/cli/report.js.map +1 -0
- package/dist/cli/run.d.ts +49 -0
- package/dist/cli/run.d.ts.map +1 -0
- package/dist/cli/run.js +243 -0
- package/dist/cli/run.js.map +1 -0
- package/dist/collect/buffer-monitor.d.ts +25 -0
- package/dist/collect/buffer-monitor.d.ts.map +1 -0
- package/dist/collect/buffer-monitor.js +69 -0
- package/dist/collect/buffer-monitor.js.map +1 -0
- package/dist/collect/console.d.ts +25 -0
- package/dist/collect/console.d.ts.map +1 -0
- package/dist/collect/console.js +82 -0
- package/dist/collect/console.js.map +1 -0
- package/dist/collect/coverage.d.ts +26 -0
- package/dist/collect/coverage.d.ts.map +1 -0
- package/dist/collect/coverage.js +99 -0
- package/dist/collect/coverage.js.map +1 -0
- package/dist/collect/dom.d.ts +37 -0
- package/dist/collect/dom.d.ts.map +1 -0
- package/dist/collect/dom.js +118 -0
- package/dist/collect/dom.js.map +1 -0
- package/dist/collect/lighthouse.d.ts +41 -0
- package/dist/collect/lighthouse.d.ts.map +1 -0
- package/dist/collect/lighthouse.js +111 -0
- package/dist/collect/lighthouse.js.map +1 -0
- package/dist/collect/network.d.ts +32 -0
- package/dist/collect/network.d.ts.map +1 -0
- package/dist/collect/network.js +236 -0
- package/dist/collect/network.js.map +1 -0
- package/dist/collect/orchestrator.d.ts +23 -0
- package/dist/collect/orchestrator.d.ts.map +1 -0
- package/dist/collect/orchestrator.js +350 -0
- package/dist/collect/orchestrator.js.map +1 -0
- package/dist/collect/performance.d.ts +28 -0
- package/dist/collect/performance.d.ts.map +1 -0
- package/dist/collect/performance.js +108 -0
- package/dist/collect/performance.js.map +1 -0
- package/dist/collect/runtime.d.ts +26 -0
- package/dist/collect/runtime.d.ts.map +1 -0
- package/dist/collect/runtime.js +81 -0
- package/dist/collect/runtime.js.map +1 -0
- package/dist/collect/session.d.ts +58 -0
- package/dist/collect/session.d.ts.map +1 -0
- package/dist/collect/session.js +162 -0
- package/dist/collect/session.js.map +1 -0
- package/dist/collect/trace.d.ts +40 -0
- package/dist/collect/trace.d.ts.map +1 -0
- package/dist/collect/trace.js +127 -0
- package/dist/collect/trace.js.map +1 -0
- package/dist/collect/types.d.ts +317 -0
- package/dist/collect/types.d.ts.map +1 -0
- package/dist/collect/types.js +12 -0
- package/dist/collect/types.js.map +1 -0
- package/dist/distill/insights.d.ts +67 -0
- package/dist/distill/insights.d.ts.map +1 -0
- package/dist/distill/insights.js +317 -0
- package/dist/distill/insights.js.map +1 -0
- package/dist/distill/summaries.d.ts +71 -0
- package/dist/distill/summaries.d.ts.map +1 -0
- package/dist/distill/summaries.js +165 -0
- package/dist/distill/summaries.js.map +1 -0
- package/dist/extract/critical-path.d.ts +17 -0
- package/dist/extract/critical-path.d.ts.map +1 -0
- package/dist/extract/critical-path.js +95 -0
- package/dist/extract/critical-path.js.map +1 -0
- package/dist/extract/index.d.ts +16 -0
- package/dist/extract/index.d.ts.map +1 -0
- package/dist/extract/index.js +32 -0
- package/dist/extract/index.js.map +1 -0
- package/dist/extract/js-hotspots.d.ts +15 -0
- package/dist/extract/js-hotspots.d.ts.map +1 -0
- package/dist/extract/js-hotspots.js +22 -0
- package/dist/extract/js-hotspots.js.map +1 -0
- package/dist/extract/layout-shifts.d.ts +19 -0
- package/dist/extract/layout-shifts.d.ts.map +1 -0
- package/dist/extract/layout-shifts.js +47 -0
- package/dist/extract/layout-shifts.js.map +1 -0
- package/dist/extract/lcp-breakdown.d.ts +19 -0
- package/dist/extract/lcp-breakdown.d.ts.map +1 -0
- package/dist/extract/lcp-breakdown.js +110 -0
- package/dist/extract/lcp-breakdown.js.map +1 -0
- package/dist/extract/main-thread.d.ts +16 -0
- package/dist/extract/main-thread.d.ts.map +1 -0
- package/dist/extract/main-thread.js +41 -0
- package/dist/extract/main-thread.js.map +1 -0
- package/dist/extract/render-blocking.d.ts +16 -0
- package/dist/extract/render-blocking.d.ts.map +1 -0
- package/dist/extract/render-blocking.js +79 -0
- package/dist/extract/render-blocking.js.map +1 -0
- package/dist/extract/third-party.d.ts +15 -0
- package/dist/extract/third-party.d.ts.map +1 -0
- package/dist/extract/third-party.js +127 -0
- package/dist/extract/third-party.js.map +1 -0
- package/dist/extract/types.d.ts +183 -0
- package/dist/extract/types.d.ts.map +1 -0
- package/dist/extract/types.js +118 -0
- package/dist/extract/types.js.map +1 -0
- package/dist/index.d.ts +20 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +188 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/handlers.d.ts +72 -0
- package/dist/mcp/handlers.d.ts.map +1 -0
- package/dist/mcp/handlers.js +285 -0
- package/dist/mcp/handlers.js.map +1 -0
- package/dist/mcp/progress.d.ts +37 -0
- package/dist/mcp/progress.d.ts.map +1 -0
- package/dist/mcp/progress.js +51 -0
- package/dist/mcp/progress.js.map +1 -0
- package/dist/mcp/prompts.d.ts +57 -0
- package/dist/mcp/prompts.d.ts.map +1 -0
- package/dist/mcp/prompts.js +225 -0
- package/dist/mcp/prompts.js.map +1 -0
- package/dist/mcp/resources.d.ts +48 -0
- package/dist/mcp/resources.d.ts.map +1 -0
- package/dist/mcp/resources.js +149 -0
- package/dist/mcp/resources.js.map +1 -0
- package/dist/mcp/server.d.ts +34 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +452 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/types.d.ts +47 -0
- package/dist/mcp/types.d.ts.map +1 -0
- package/dist/mcp/types.js +67 -0
- package/dist/mcp/types.js.map +1 -0
- package/dist/normalize/clock.d.ts +40 -0
- package/dist/normalize/clock.d.ts.map +1 -0
- package/dist/normalize/clock.js +96 -0
- package/dist/normalize/clock.js.map +1 -0
- package/dist/normalize/dom-ir.d.ts +16 -0
- package/dist/normalize/dom-ir.d.ts.map +1 -0
- package/dist/normalize/dom-ir.js +48 -0
- package/dist/normalize/dom-ir.js.map +1 -0
- package/dist/normalize/index.d.ts +23 -0
- package/dist/normalize/index.d.ts.map +1 -0
- package/dist/normalize/index.js +118 -0
- package/dist/normalize/index.js.map +1 -0
- package/dist/normalize/lighthouse-insights.d.ts +27 -0
- package/dist/normalize/lighthouse-insights.d.ts.map +1 -0
- package/dist/normalize/lighthouse-insights.js +318 -0
- package/dist/normalize/lighthouse-insights.js.map +1 -0
- package/dist/normalize/lighthouse-ir.d.ts +25 -0
- package/dist/normalize/lighthouse-ir.d.ts.map +1 -0
- package/dist/normalize/lighthouse-ir.js +151 -0
- package/dist/normalize/lighthouse-ir.js.map +1 -0
- package/dist/normalize/network-ir.d.ts +23 -0
- package/dist/normalize/network-ir.d.ts.map +1 -0
- package/dist/normalize/network-ir.js +180 -0
- package/dist/normalize/network-ir.js.map +1 -0
- package/dist/normalize/runtime-ir.d.ts +18 -0
- package/dist/normalize/runtime-ir.d.ts.map +1 -0
- package/dist/normalize/runtime-ir.js +114 -0
- package/dist/normalize/runtime-ir.js.map +1 -0
- package/dist/normalize/trace-ir.d.ts +20 -0
- package/dist/normalize/trace-ir.d.ts.map +1 -0
- package/dist/normalize/trace-ir.js +224 -0
- package/dist/normalize/trace-ir.js.map +1 -0
- package/dist/normalize/types.d.ts +536 -0
- package/dist/normalize/types.d.ts.map +1 -0
- package/dist/normalize/types.js +242 -0
- package/dist/normalize/types.js.map +1 -0
- package/dist/output/manifest.d.ts +44 -0
- package/dist/output/manifest.d.ts.map +1 -0
- package/dist/output/manifest.js +232 -0
- package/dist/output/manifest.js.map +1 -0
- package/dist/output/toon.d.ts +19 -0
- package/dist/output/toon.d.ts.map +1 -0
- package/dist/output/toon.js +22 -0
- package/dist/output/toon.js.map +1 -0
- package/dist/output/writer.d.ts +31 -0
- package/dist/output/writer.d.ts.map +1 -0
- package/dist/output/writer.js +51 -0
- package/dist/output/writer.js.map +1 -0
- package/dist/report/analyzer.d.ts +29 -0
- package/dist/report/analyzer.d.ts.map +1 -0
- package/dist/report/analyzer.js +330 -0
- package/dist/report/analyzer.js.map +1 -0
- package/dist/report/index.d.ts +13 -0
- package/dist/report/index.d.ts.map +1 -0
- package/dist/report/index.js +12 -0
- package/dist/report/index.js.map +1 -0
- package/dist/report/markdown.d.ts +21 -0
- package/dist/report/markdown.d.ts.map +1 -0
- package/dist/report/markdown.js +182 -0
- package/dist/report/markdown.js.map +1 -0
- package/dist/report/remediations.d.ts +42 -0
- package/dist/report/remediations.d.ts.map +1 -0
- package/dist/report/remediations.js +179 -0
- package/dist/report/remediations.js.map +1 -0
- package/dist/report/scorer.d.ts +35 -0
- package/dist/report/scorer.d.ts.map +1 -0
- package/dist/report/scorer.js +72 -0
- package/dist/report/scorer.js.map +1 -0
- package/dist/report/types.d.ts +201 -0
- package/dist/report/types.d.ts.map +1 -0
- package/dist/report/types.js +149 -0
- package/dist/report/types.js.map +1 -0
- package/dist/shared/fs-utils.d.ts +12 -0
- package/dist/shared/fs-utils.d.ts.map +1 -0
- package/dist/shared/fs-utils.js +44 -0
- package/dist/shared/fs-utils.js.map +1 -0
- package/dist/shared/types.d.ts +69 -0
- package/dist/shared/types.d.ts.map +1 -0
- package/dist/shared/types.js +18 -0
- package/dist/shared/types.js.map +1 -0
- package/dist/shared/utils.d.ts +6 -0
- package/dist/shared/utils.d.ts.map +1 -0
- package/dist/shared/utils.js +9 -0
- package/dist/shared/utils.js.map +1 -0
- package/package.json +67 -0
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* IR (Intermediate Representation) Zod schemas and inferred TypeScript types.
|
|
3
|
+
*
|
|
4
|
+
* All IR types use relative timestamps (ms since navigationStart) for
|
|
5
|
+
* consistent downstream analysis regardless of the original clock domain.
|
|
6
|
+
*
|
|
7
|
+
* Every schema has a corresponding inferred type exported for use in
|
|
8
|
+
* function signatures and property access without manual type annotations.
|
|
9
|
+
*/
|
|
10
|
+
import { z } from 'zod';
|
|
11
|
+
// ---------------------------------------------------------------------------
|
|
12
|
+
// Performance IR
|
|
13
|
+
// ---------------------------------------------------------------------------
|
|
14
|
+
export const PerformanceNavigationSchema = z.object({
|
|
15
|
+
url: z.string(),
|
|
16
|
+
navigationStart: z.number(),
|
|
17
|
+
domContentLoaded: z.number(),
|
|
18
|
+
domContentLoadedEventEnd: z.number(),
|
|
19
|
+
loadEventStart: z.number(),
|
|
20
|
+
loadEventEnd: z.number(),
|
|
21
|
+
domInteractive: z.number(),
|
|
22
|
+
title: z.string().optional(),
|
|
23
|
+
});
|
|
24
|
+
export const CoreWebVitalsSchema = z.object({
|
|
25
|
+
fcp: z.number().optional(),
|
|
26
|
+
lcp: z.number().optional(),
|
|
27
|
+
cls: z.number().optional(),
|
|
28
|
+
tbt: z.number().optional(),
|
|
29
|
+
inp: z.number().optional(),
|
|
30
|
+
});
|
|
31
|
+
export const ThreadActivitySchema = z.object({
|
|
32
|
+
totalMs: z.number(),
|
|
33
|
+
byCategory: z.record(z.string(), z.number()),
|
|
34
|
+
});
|
|
35
|
+
export const TraceSummarySchema = z.object({
|
|
36
|
+
totalDuration: z.number(),
|
|
37
|
+
eventCount: z.number(),
|
|
38
|
+
categories: z.record(z.string(), z.number()),
|
|
39
|
+
threadActivity: ThreadActivitySchema,
|
|
40
|
+
});
|
|
41
|
+
export const PerformanceIRSchema = z.object({
|
|
42
|
+
navigation: PerformanceNavigationSchema,
|
|
43
|
+
coreWebVitals: CoreWebVitalsSchema,
|
|
44
|
+
traceSummary: TraceSummarySchema,
|
|
45
|
+
mainThreadBusyness: z.number().min(0).max(1),
|
|
46
|
+
});
|
|
47
|
+
// ---------------------------------------------------------------------------
|
|
48
|
+
// Network IR
|
|
49
|
+
// ---------------------------------------------------------------------------
|
|
50
|
+
export const NormalizedRequestTimingSchema = z.object({
|
|
51
|
+
dns: z.number().optional(),
|
|
52
|
+
connect: z.number().optional(),
|
|
53
|
+
ssl: z.number().optional(),
|
|
54
|
+
wait: z.number().optional(),
|
|
55
|
+
receive: z.number().optional(),
|
|
56
|
+
});
|
|
57
|
+
export const NormalizedRequestSchema = z.object({
|
|
58
|
+
url: z.string(),
|
|
59
|
+
method: z.string(),
|
|
60
|
+
resourceType: z.string(),
|
|
61
|
+
statusCode: z.number().int(),
|
|
62
|
+
startTime: z.number(),
|
|
63
|
+
endTime: z.number(),
|
|
64
|
+
duration: z.number(),
|
|
65
|
+
bytes: z.number(),
|
|
66
|
+
priority: z.string(),
|
|
67
|
+
initiator: z.string(),
|
|
68
|
+
initiatorUrl: z.string().optional(),
|
|
69
|
+
failed: z.boolean(),
|
|
70
|
+
timing: NormalizedRequestTimingSchema,
|
|
71
|
+
});
|
|
72
|
+
export const NormalizedRequestChainSchema = z.object({
|
|
73
|
+
url: z.string(),
|
|
74
|
+
length: z.number(),
|
|
75
|
+
});
|
|
76
|
+
export const CriticalPathTreeNodeSchema = z.lazy(() => z.object({
|
|
77
|
+
url: z.string(),
|
|
78
|
+
durationMs: z.number().optional(),
|
|
79
|
+
children: z.array(CriticalPathTreeNodeSchema).optional(),
|
|
80
|
+
}));
|
|
81
|
+
export const CriticalPathInfoSchema = z.object({
|
|
82
|
+
tree: CriticalPathTreeNodeSchema,
|
|
83
|
+
depth: z.number().int().nonnegative(),
|
|
84
|
+
urlsOnLongestPath: z.array(z.string()),
|
|
85
|
+
});
|
|
86
|
+
export const NetworkIRSummarySchema = z.object({
|
|
87
|
+
totalRequests: z.number(),
|
|
88
|
+
totalBytes: z.number(),
|
|
89
|
+
byType: z.record(z.string(), z.number()),
|
|
90
|
+
byPriority: z.record(z.string(), z.number()),
|
|
91
|
+
criticalPath: CriticalPathInfoSchema,
|
|
92
|
+
longestChain: NormalizedRequestChainSchema,
|
|
93
|
+
});
|
|
94
|
+
export const NetworkIRSchema = z.object({
|
|
95
|
+
requests: z.array(NormalizedRequestSchema),
|
|
96
|
+
summary: NetworkIRSummarySchema,
|
|
97
|
+
});
|
|
98
|
+
// ---------------------------------------------------------------------------
|
|
99
|
+
// Runtime IR
|
|
100
|
+
// ---------------------------------------------------------------------------
|
|
101
|
+
export const RuntimeIRStatsSchema = z.object({
|
|
102
|
+
totalJSHeapSize: z.number().optional(),
|
|
103
|
+
usedJSHeapSize: z.number().optional(),
|
|
104
|
+
jsHeapSizeLimit: z.number().optional(),
|
|
105
|
+
});
|
|
106
|
+
export const ExecutionContextSchema = z.object({
|
|
107
|
+
id: z.number(),
|
|
108
|
+
origin: z.string(),
|
|
109
|
+
name: z.string().optional(),
|
|
110
|
+
});
|
|
111
|
+
export const EventLoopStatsSchema = z.object({
|
|
112
|
+
totalBlockingDuration: z.number(),
|
|
113
|
+
longTasks: z.number(),
|
|
114
|
+
maxBlockingDuration: z.number(),
|
|
115
|
+
});
|
|
116
|
+
export const HydrationCostSchema = z.object({
|
|
117
|
+
bootupTime: z.number(),
|
|
118
|
+
evaluatedScripts: z.number(),
|
|
119
|
+
});
|
|
120
|
+
export const RuntimeIRSchema = z.object({
|
|
121
|
+
jsHeapStats: RuntimeIRStatsSchema.optional(),
|
|
122
|
+
executionContexts: z.array(ExecutionContextSchema),
|
|
123
|
+
eventLoopStats: EventLoopStatsSchema.optional(),
|
|
124
|
+
hydrationCost: HydrationCostSchema.optional(),
|
|
125
|
+
});
|
|
126
|
+
// ---------------------------------------------------------------------------
|
|
127
|
+
// DOM IR
|
|
128
|
+
// ---------------------------------------------------------------------------
|
|
129
|
+
export const DOMStatsSchema = z.object({
|
|
130
|
+
totalNodes: z.number(),
|
|
131
|
+
elementCount: z.number(),
|
|
132
|
+
maxDepth: z.number(),
|
|
133
|
+
maxChildren: z.number(),
|
|
134
|
+
});
|
|
135
|
+
export const TagCountSchema = z.object({
|
|
136
|
+
tag: z.string(),
|
|
137
|
+
count: z.number(),
|
|
138
|
+
});
|
|
139
|
+
export const LayoutShiftCandidatesSchema = z.object({
|
|
140
|
+
highComplexitySubtrees: z.number(),
|
|
141
|
+
deepNesting: z.number(),
|
|
142
|
+
});
|
|
143
|
+
export const DOMIRSchema = z.object({
|
|
144
|
+
stats: DOMStatsSchema,
|
|
145
|
+
tagDistribution: z.array(TagCountSchema),
|
|
146
|
+
layoutShiftCandidates: LayoutShiftCandidatesSchema,
|
|
147
|
+
});
|
|
148
|
+
// ---------------------------------------------------------------------------
|
|
149
|
+
// Lighthouse IR
|
|
150
|
+
// ---------------------------------------------------------------------------
|
|
151
|
+
export const LighthouseCategorySchema = z.object({
|
|
152
|
+
title: z.string(),
|
|
153
|
+
score: z.number().min(0).max(1),
|
|
154
|
+
});
|
|
155
|
+
export const LighthouseFailedAuditSchema = z.object({
|
|
156
|
+
id: z.string(),
|
|
157
|
+
title: z.string(),
|
|
158
|
+
description: z.string(),
|
|
159
|
+
score: z.number(),
|
|
160
|
+
numericValue: z.number().optional(),
|
|
161
|
+
});
|
|
162
|
+
export const LighthouseScoresSchema = z.object({
|
|
163
|
+
performance: z.number().min(0).max(1).optional(),
|
|
164
|
+
accessibility: z.number().min(0).max(1).optional(),
|
|
165
|
+
bestPractices: z.number().min(0).max(1).optional(),
|
|
166
|
+
seo: z.number().min(0).max(1).optional(),
|
|
167
|
+
});
|
|
168
|
+
export const RenderBlockingResourceSchema = z.object({
|
|
169
|
+
url: z.string(),
|
|
170
|
+
totalBytes: z.number().optional(),
|
|
171
|
+
wastedMs: z.number().optional(),
|
|
172
|
+
resourceType: z.string().optional(),
|
|
173
|
+
});
|
|
174
|
+
export const RenderBlockingInsightSchema = z.object({
|
|
175
|
+
fcpSavingsMs: z.number().optional(),
|
|
176
|
+
lcpSavingsMs: z.number().optional(),
|
|
177
|
+
resources: z.array(RenderBlockingResourceSchema),
|
|
178
|
+
});
|
|
179
|
+
export const LighthouseIRSchema = z.object({
|
|
180
|
+
categories: z.record(z.string(), LighthouseCategorySchema),
|
|
181
|
+
failedAudits: z.array(LighthouseFailedAuditSchema),
|
|
182
|
+
scores: LighthouseScoresSchema,
|
|
183
|
+
/** Lighthouse LCP numeric value in ms (fallback when trace lacks LCP) */
|
|
184
|
+
lcpNumericValue: z.number().optional(),
|
|
185
|
+
/** LCP element selector from lcp-breakdown-insight */
|
|
186
|
+
lcpElementSelector: z.string().optional(),
|
|
187
|
+
/** LCP element snippet from lcp-breakdown-insight */
|
|
188
|
+
lcpElementSnippet: z.string().optional(),
|
|
189
|
+
/** LCP element node label from lcp-breakdown-insight */
|
|
190
|
+
lcpElementNodeLabel: z.string().optional(),
|
|
191
|
+
/** Render-blocking resources with URL, bytes, and wasted ms */
|
|
192
|
+
renderBlockingResources: z.array(RenderBlockingResourceSchema).optional(),
|
|
193
|
+
});
|
|
194
|
+
// ---------------------------------------------------------------------------
|
|
195
|
+
// Lighthouse Insights (v13+ insight audits)
|
|
196
|
+
// ---------------------------------------------------------------------------
|
|
197
|
+
export const LCPBreakdownInsightSchema = z.object({
|
|
198
|
+
timeToFirstByte: z.number(),
|
|
199
|
+
resourceLoadDelay: z.number().optional(),
|
|
200
|
+
resourceLoadTime: z.number().optional(),
|
|
201
|
+
elementRenderDelay: z.number(),
|
|
202
|
+
lcpElementSelector: z.string().optional(),
|
|
203
|
+
lcpElementSnippet: z.string().optional(),
|
|
204
|
+
lcpElementNodeLabel: z.string().optional(),
|
|
205
|
+
source: z.enum(['trace', 'lighthouse', 'mixed']),
|
|
206
|
+
});
|
|
207
|
+
export const NetworkChainNodeSchema = z.lazy(() => z.object({
|
|
208
|
+
url: z.string(),
|
|
209
|
+
navStartToEndTime: z.number(),
|
|
210
|
+
transferSize: z.number().optional(),
|
|
211
|
+
isLongest: z.boolean().optional(),
|
|
212
|
+
children: z.record(z.string(), NetworkChainNodeSchema).optional(),
|
|
213
|
+
}));
|
|
214
|
+
export const NetworkDependencyTreeInsightSchema = z.object({
|
|
215
|
+
chains: z.record(z.string(), NetworkChainNodeSchema).optional(),
|
|
216
|
+
longestChainDuration: z.number().optional(),
|
|
217
|
+
longestChainUrls: z.array(z.string()).optional(),
|
|
218
|
+
preconnectCandidates: z.array(z.string()).optional(),
|
|
219
|
+
});
|
|
220
|
+
export const LighthouseInsightsSchema = z.object({
|
|
221
|
+
lcpBreakdown: LCPBreakdownInsightSchema.optional(),
|
|
222
|
+
renderBlocking: RenderBlockingInsightSchema.optional(),
|
|
223
|
+
networkDependencyTree: NetworkDependencyTreeInsightSchema.optional(),
|
|
224
|
+
});
|
|
225
|
+
// ---------------------------------------------------------------------------
|
|
226
|
+
// IR Bundle
|
|
227
|
+
// ---------------------------------------------------------------------------
|
|
228
|
+
export const IRMetaSchema = z.object({
|
|
229
|
+
url: z.string(),
|
|
230
|
+
fetchedAt: z.string(),
|
|
231
|
+
navigationStart: z.number(),
|
|
232
|
+
irVersion: z.literal('1.0.0'),
|
|
233
|
+
});
|
|
234
|
+
export const IRBundleSchema = z.strictObject({
|
|
235
|
+
meta: IRMetaSchema,
|
|
236
|
+
performance: PerformanceIRSchema,
|
|
237
|
+
network: NetworkIRSchema,
|
|
238
|
+
runtime: RuntimeIRSchema,
|
|
239
|
+
dom: DOMIRSchema,
|
|
240
|
+
lighthouse: LighthouseIRSchema,
|
|
241
|
+
});
|
|
242
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/normalize/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Manifest generator — scans a run directory and produces a manifest.toon
|
|
3
|
+
* listing all known artifacts with descriptions, sizes, and recommended read order.
|
|
4
|
+
*
|
|
5
|
+
* @packageDocumentation
|
|
6
|
+
*/
|
|
7
|
+
/** A single artifact entry in the manifest. */
|
|
8
|
+
export interface ManifestEntry {
|
|
9
|
+
/** File name (e.g. "report.toon") */
|
|
10
|
+
filename: string;
|
|
11
|
+
/** Human-readable description of what this artifact contains */
|
|
12
|
+
description: string;
|
|
13
|
+
/** Recommended read order — lower values should be read first */
|
|
14
|
+
readOrder?: number;
|
|
15
|
+
/** File size in bytes, if available */
|
|
16
|
+
sizeBytes?: number;
|
|
17
|
+
}
|
|
18
|
+
/** The full manifest document written as manifest.toon. */
|
|
19
|
+
export interface Manifest {
|
|
20
|
+
/** Absolute path to the run directory */
|
|
21
|
+
runDir: string;
|
|
22
|
+
/** ISO timestamp when the manifest was generated */
|
|
23
|
+
generatedAt: string;
|
|
24
|
+
/** All discovered artifacts */
|
|
25
|
+
artifacts: ManifestEntry[];
|
|
26
|
+
/** Filenames in recommended reading order (subset of artifacts) */
|
|
27
|
+
recommendedReadOrder: string[];
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Scan a PerfGraph run directory and write a manifest.toon describing all
|
|
31
|
+
* discovered artifacts.
|
|
32
|
+
*
|
|
33
|
+
* Only files listed in the known-artifacts table are included with
|
|
34
|
+
* descriptions and read-order hints; any other JSON / TOON files present in the
|
|
35
|
+
* directory are listed with their filename and size only.
|
|
36
|
+
*
|
|
37
|
+
* The manifest includes itself after writing, so the `manifest.toon` entry
|
|
38
|
+
* always carries the correct size.
|
|
39
|
+
*
|
|
40
|
+
* @param dir - Absolute or relative path to the run directory
|
|
41
|
+
* @returns Absolute path to the written manifest.toon
|
|
42
|
+
*/
|
|
43
|
+
export declare function writeManifest(dir: string): Promise<string>;
|
|
44
|
+
//# sourceMappingURL=manifest.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../src/output/manifest.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAUH,+CAA+C;AAC/C,MAAM,WAAW,aAAa;IAC5B,qCAAqC;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,gEAAgE;IAChE,WAAW,EAAE,MAAM,CAAC;IACpB,iEAAiE;IACjE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uCAAuC;IACvC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,2DAA2D;AAC3D,MAAM,WAAW,QAAQ;IACvB,yCAAyC;IACzC,MAAM,EAAE,MAAM,CAAC;IACf,oDAAoD;IACpD,WAAW,EAAE,MAAM,CAAC;IACpB,+BAA+B;IAC/B,SAAS,EAAE,aAAa,EAAE,CAAC;IAC3B,mEAAmE;IACnE,oBAAoB,EAAE,MAAM,EAAE,CAAC;CAChC;AA8HD;;;;;;;;;;;;;GAaG;AACH,wBAAsB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CA+HhE"}
|
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Manifest generator — scans a run directory and produces a manifest.toon
|
|
3
|
+
* listing all known artifacts with descriptions, sizes, and recommended read order.
|
|
4
|
+
*
|
|
5
|
+
* @packageDocumentation
|
|
6
|
+
*/
|
|
7
|
+
import { readdir, stat, writeFile } from 'node:fs/promises';
|
|
8
|
+
import { join, resolve } from 'node:path';
|
|
9
|
+
import { convertToon } from './toon.js';
|
|
10
|
+
// ---------------------------------------------------------------------------
|
|
11
|
+
// Known artifacts
|
|
12
|
+
// ---------------------------------------------------------------------------
|
|
13
|
+
/** Canonical list of known artifacts with descriptions and suggested read order. */
|
|
14
|
+
const KNOWN_ARTIFACTS = [
|
|
15
|
+
{
|
|
16
|
+
filename: 'insights.toon',
|
|
17
|
+
description: 'Agent-optimized performance summary with Lighthouse scores, LCP breakdown, render-blocking URLs, and top recommendations',
|
|
18
|
+
readOrder: 1,
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
filename: 'report.md',
|
|
22
|
+
description: 'Human-readable performance report in Markdown with score summary, issues, causal chains, and recommendations',
|
|
23
|
+
readOrder: 2,
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
filename: 'report.toon',
|
|
27
|
+
description: 'Full diagnostic report with issues sorted by severity, causal chains, and remediation text',
|
|
28
|
+
readOrder: 3,
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
filename: 'manifest.toon',
|
|
32
|
+
description: 'This file — artifact index with descriptions and sizes',
|
|
33
|
+
readOrder: 3,
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
filename: 'features.toon',
|
|
37
|
+
description: 'Raw diagnostic features: LCP breakdown, critical path, TBT, CLS, render-blocking score',
|
|
38
|
+
readOrder: 4,
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
filename: 'graph.toon',
|
|
42
|
+
description: 'Causal degradation graph — DAG of performance issues and their relationships',
|
|
43
|
+
readOrder: 5,
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
filename: 'ir.json',
|
|
47
|
+
description: 'Normalized Intermediate Representation (IRBundle) — all collected data in a validated schema',
|
|
48
|
+
readOrder: 6,
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
filename: 'lighthouse.json',
|
|
52
|
+
description: 'Full Lighthouse v13+ audit results (large — read only for deep dives)',
|
|
53
|
+
readOrder: 7,
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
filename: 'network.json',
|
|
57
|
+
description: 'Raw network request data (large — read only for deep dives)',
|
|
58
|
+
readOrder: 8,
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
filename: 'network-summary.toon',
|
|
62
|
+
description: 'Top 20 requests by duration, blocking list, initiator chain summary',
|
|
63
|
+
readOrder: 9,
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
filename: 'lighthouse-summary.toon',
|
|
67
|
+
description: 'Lighthouse categories and failed insight audits only',
|
|
68
|
+
readOrder: 10,
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
filename: 'coverage-summary.toon',
|
|
72
|
+
description: 'Unused bytes by URL, top 10 files',
|
|
73
|
+
readOrder: 11,
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
filename: 'trace.json',
|
|
77
|
+
description: 'Raw Chrome trace events (very large — read only for deep dives)',
|
|
78
|
+
readOrder: 12,
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
filename: 'performance.json',
|
|
82
|
+
description: 'Performance API metrics from the page',
|
|
83
|
+
readOrder: 13,
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
filename: 'runtime.json',
|
|
87
|
+
description: 'JS heap stats, execution contexts, event loop',
|
|
88
|
+
readOrder: 14,
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
filename: 'console.json',
|
|
92
|
+
description: 'Captured console log entries',
|
|
93
|
+
readOrder: 15,
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
filename: 'dom.json',
|
|
97
|
+
description: 'DOM snapshot and statistics',
|
|
98
|
+
readOrder: 16,
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
filename: 'warnings.json',
|
|
102
|
+
description: 'Collection warnings (missing data, incomplete traces)',
|
|
103
|
+
readOrder: 17,
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
filename: 'runs-summary.json',
|
|
107
|
+
description: 'Summary across multiple collection runs (only when --runs > 1)',
|
|
108
|
+
readOrder: 18,
|
|
109
|
+
},
|
|
110
|
+
];
|
|
111
|
+
// ---------------------------------------------------------------------------
|
|
112
|
+
// Public API
|
|
113
|
+
// ---------------------------------------------------------------------------
|
|
114
|
+
/**
|
|
115
|
+
* Scan a PerfGraph run directory and write a manifest.toon describing all
|
|
116
|
+
* discovered artifacts.
|
|
117
|
+
*
|
|
118
|
+
* Only files listed in the known-artifacts table are included with
|
|
119
|
+
* descriptions and read-order hints; any other JSON / TOON files present in the
|
|
120
|
+
* directory are listed with their filename and size only.
|
|
121
|
+
*
|
|
122
|
+
* The manifest includes itself after writing, so the `manifest.toon` entry
|
|
123
|
+
* always carries the correct size.
|
|
124
|
+
*
|
|
125
|
+
* @param dir - Absolute or relative path to the run directory
|
|
126
|
+
* @returns Absolute path to the written manifest.toon
|
|
127
|
+
*/
|
|
128
|
+
export async function writeManifest(dir) {
|
|
129
|
+
const resolvedDir = resolve(dir);
|
|
130
|
+
// -----------------------------------------------------------------------
|
|
131
|
+
// 1. Scan the directory (exclude manifest.toon since we're about to write it)
|
|
132
|
+
// -----------------------------------------------------------------------
|
|
133
|
+
const dirEntries = await readdir(resolvedDir, { withFileTypes: true });
|
|
134
|
+
const existingFiles = new Set(dirEntries
|
|
135
|
+
.filter((e) => e.isFile() && e.name !== 'manifest.toon')
|
|
136
|
+
.map((e) => e.name));
|
|
137
|
+
// -----------------------------------------------------------------------
|
|
138
|
+
// 2. Build artifact entries
|
|
139
|
+
// -----------------------------------------------------------------------
|
|
140
|
+
const artifacts = [];
|
|
141
|
+
// 2a. Known artifacts that actually exist
|
|
142
|
+
for (const known of KNOWN_ARTIFACTS) {
|
|
143
|
+
if (known.filename === 'manifest.toon')
|
|
144
|
+
continue; // handled after writing
|
|
145
|
+
if (!existingFiles.has(known.filename))
|
|
146
|
+
continue;
|
|
147
|
+
let sizeBytes;
|
|
148
|
+
try {
|
|
149
|
+
const s = await stat(join(resolvedDir, known.filename));
|
|
150
|
+
sizeBytes = s.size;
|
|
151
|
+
}
|
|
152
|
+
catch {
|
|
153
|
+
// stat failed — skip size
|
|
154
|
+
}
|
|
155
|
+
artifacts.push({
|
|
156
|
+
filename: known.filename,
|
|
157
|
+
description: known.description,
|
|
158
|
+
readOrder: known.readOrder,
|
|
159
|
+
sizeBytes,
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
// 2b. Any other JSON / TOON files not in the known list
|
|
163
|
+
for (const filename of existingFiles) {
|
|
164
|
+
if ((!filename.endsWith('.json') && !filename.endsWith('.toon')) ||
|
|
165
|
+
KNOWN_ARTIFACTS.some((a) => a.filename === filename)) {
|
|
166
|
+
continue;
|
|
167
|
+
}
|
|
168
|
+
let sizeBytes;
|
|
169
|
+
try {
|
|
170
|
+
const s = await stat(join(resolvedDir, filename));
|
|
171
|
+
sizeBytes = s.size;
|
|
172
|
+
}
|
|
173
|
+
catch {
|
|
174
|
+
// ignore
|
|
175
|
+
}
|
|
176
|
+
artifacts.push({ filename, description: '', sizeBytes });
|
|
177
|
+
}
|
|
178
|
+
// -----------------------------------------------------------------------
|
|
179
|
+
// 3. Sort — known artifacts by readOrder, unknown artifacts after
|
|
180
|
+
// -----------------------------------------------------------------------
|
|
181
|
+
artifacts.sort((a, b) => {
|
|
182
|
+
const aOrder = a.readOrder ?? 999;
|
|
183
|
+
const bOrder = b.readOrder ?? 999;
|
|
184
|
+
if (aOrder !== bOrder)
|
|
185
|
+
return aOrder - bOrder;
|
|
186
|
+
return a.filename.localeCompare(b.filename);
|
|
187
|
+
});
|
|
188
|
+
const recommendedReadOrder = artifacts
|
|
189
|
+
.filter((a) => a.readOrder !== undefined)
|
|
190
|
+
.sort((a, b) => (a.readOrder ?? 0) - (b.readOrder ?? 0))
|
|
191
|
+
.map((a) => a.filename);
|
|
192
|
+
// -----------------------------------------------------------------------
|
|
193
|
+
// 4. First write (without self-referential manifest.toon entry)
|
|
194
|
+
// -----------------------------------------------------------------------
|
|
195
|
+
const manifestPath = join(resolvedDir, 'manifest.toon');
|
|
196
|
+
await writeFile(manifestPath, await convertToon({
|
|
197
|
+
runDir: resolvedDir,
|
|
198
|
+
generatedAt: new Date().toISOString(),
|
|
199
|
+
artifacts,
|
|
200
|
+
recommendedReadOrder,
|
|
201
|
+
}), 'utf-8');
|
|
202
|
+
// -----------------------------------------------------------------------
|
|
203
|
+
// 5. Add self-referential entry and re-write with correct size
|
|
204
|
+
// -----------------------------------------------------------------------
|
|
205
|
+
const manifestStat = await stat(manifestPath);
|
|
206
|
+
artifacts.push({
|
|
207
|
+
filename: 'manifest.toon',
|
|
208
|
+
description: 'This file — artifact index with descriptions and sizes',
|
|
209
|
+
readOrder: 3,
|
|
210
|
+
sizeBytes: manifestStat.size,
|
|
211
|
+
});
|
|
212
|
+
// Re-sort with the new entry
|
|
213
|
+
artifacts.sort((a, b) => {
|
|
214
|
+
const aOrder = a.readOrder ?? 999;
|
|
215
|
+
const bOrder = b.readOrder ?? 999;
|
|
216
|
+
if (aOrder !== bOrder)
|
|
217
|
+
return aOrder - bOrder;
|
|
218
|
+
return a.filename.localeCompare(b.filename);
|
|
219
|
+
});
|
|
220
|
+
const updatedReadOrder = artifacts
|
|
221
|
+
.filter((a) => a.readOrder !== undefined)
|
|
222
|
+
.sort((a, b) => (a.readOrder ?? 0) - (b.readOrder ?? 0))
|
|
223
|
+
.map((a) => a.filename);
|
|
224
|
+
await writeFile(manifestPath, await convertToon({
|
|
225
|
+
runDir: resolvedDir,
|
|
226
|
+
generatedAt: new Date().toISOString(),
|
|
227
|
+
artifacts,
|
|
228
|
+
recommendedReadOrder: updatedReadOrder,
|
|
229
|
+
}), 'utf-8');
|
|
230
|
+
return manifestPath;
|
|
231
|
+
}
|
|
232
|
+
//# sourceMappingURL=manifest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../src/output/manifest.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TOON format converter — encodes JSON-serializable data to TOON format
|
|
3
|
+
* using @toon-format/toon for token-efficient LLM consumption.
|
|
4
|
+
*
|
|
5
|
+
* @packageDocumentation
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Encode any JSON-serializable value into TOON format string.
|
|
9
|
+
*
|
|
10
|
+
* TOON (Token-Oriented Object Notation) is a compact, human-readable,
|
|
11
|
+
* schema-aware encoding of JSON designed to minimise token usage in
|
|
12
|
+
* LLM prompts. It declares array lengths and field headers once, then
|
|
13
|
+
* streams row values.
|
|
14
|
+
*
|
|
15
|
+
* @param data - Any JSON-serializable value (object, array, primitive)
|
|
16
|
+
* @returns A TOON-formatted string
|
|
17
|
+
*/
|
|
18
|
+
export declare function convertToon(data: unknown): Promise<string>;
|
|
19
|
+
//# sourceMappingURL=toon.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toon.d.ts","sourceRoot":"","sources":["../../src/output/toon.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH;;;;;;;;;;GAUG;AACH,wBAAsB,WAAW,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAEhE"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TOON format converter — encodes JSON-serializable data to TOON format
|
|
3
|
+
* using @toon-format/toon for token-efficient LLM consumption.
|
|
4
|
+
*
|
|
5
|
+
* @packageDocumentation
|
|
6
|
+
*/
|
|
7
|
+
import { encode } from '@toon-format/toon';
|
|
8
|
+
/**
|
|
9
|
+
* Encode any JSON-serializable value into TOON format string.
|
|
10
|
+
*
|
|
11
|
+
* TOON (Token-Oriented Object Notation) is a compact, human-readable,
|
|
12
|
+
* schema-aware encoding of JSON designed to minimise token usage in
|
|
13
|
+
* LLM prompts. It declares array lengths and field headers once, then
|
|
14
|
+
* streams row values.
|
|
15
|
+
*
|
|
16
|
+
* @param data - Any JSON-serializable value (object, array, primitive)
|
|
17
|
+
* @returns A TOON-formatted string
|
|
18
|
+
*/
|
|
19
|
+
export async function convertToon(data) {
|
|
20
|
+
return encode(data);
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=toon.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toon.js","sourceRoot":"","sources":["../../src/output/toon.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE3C;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAAa;IAC7C,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC;AACtB,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Output writer — creates timestamped directories and writes JSON data.
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Create a timestamped output directory under the given base path.
|
|
6
|
+
*
|
|
7
|
+
* Directory format: `perfgraph_<hostname>_<YYYYMMDD_HHmmss>`
|
|
8
|
+
*
|
|
9
|
+
* @param basePath - Base directory for output
|
|
10
|
+
* @param url - Source URL (used to extract hostname for directory naming)
|
|
11
|
+
* @returns Absolute path to the created directory
|
|
12
|
+
*/
|
|
13
|
+
export declare function createOutputDir(basePath: string, url: string): Promise<string>;
|
|
14
|
+
/**
|
|
15
|
+
* Write a JSON-serializable value to a file inside the given directory.
|
|
16
|
+
*
|
|
17
|
+
* @param dir - Target directory
|
|
18
|
+
* @param filename - File name (e.g. "trace.json")
|
|
19
|
+
* @param data - Data to serialize as JSON
|
|
20
|
+
* @returns Full path to the written file
|
|
21
|
+
*/
|
|
22
|
+
export declare function writeJsonFile(dir: string, filename: string, data: unknown): Promise<string>;
|
|
23
|
+
/**
|
|
24
|
+
* Write a warnings file to the given directory.
|
|
25
|
+
*
|
|
26
|
+
* @param dir - Target directory
|
|
27
|
+
* @param warnings - Array of warning strings
|
|
28
|
+
* @returns Full path to the written file
|
|
29
|
+
*/
|
|
30
|
+
export declare function writeWarnings(dir: string, warnings: string[]): Promise<string>;
|
|
31
|
+
//# sourceMappingURL=writer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"writer.d.ts","sourceRoot":"","sources":["../../src/output/writer.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH;;;;;;;;GAQG;AACH,wBAAsB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CASpF;AAED;;;;;;;GAOG;AACH,wBAAsB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAIjG;AAED;;;;;;GAMG;AACH,wBAAsB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAKpF"}
|