@empline/preflight 1.1.43 → 1.1.45
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/checks/react/state-update-during-render.d.ts +3 -5
- package/dist/checks/react/state-update-during-render.d.ts.map +1 -1
- package/dist/checks/react/state-update-during-render.js +77 -144
- package/dist/checks/react/state-update-during-render.js.map +1 -1
- package/dist/checks/system/preflight-metadata-validator.d.ts.map +1 -1
- package/dist/checks/system/preflight-metadata-validator.js +97 -2
- package/dist/checks/system/preflight-metadata-validator.js.map +1 -1
- package/dist/checks/ui/layout-overflow-containment.d.ts +23 -0
- package/dist/checks/ui/layout-overflow-containment.d.ts.map +1 -0
- package/dist/checks/ui/layout-overflow-containment.js +240 -0
- package/dist/checks/ui/layout-overflow-containment.js.map +1 -0
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +19 -4
- package/dist/index.js.map +1 -1
- package/dist/runner.d.ts +1 -0
- package/dist/runner.d.ts.map +1 -1
- package/dist/runner.js +36 -0
- package/dist/runner.js.map +1 -1
- package/dist/shared/concurrency-config.d.ts +2 -0
- package/dist/shared/concurrency-config.d.ts.map +1 -1
- package/dist/shared/concurrency-config.js +2 -0
- package/dist/shared/concurrency-config.js.map +1 -1
- package/dist/shared/consolidated-check-base.d.ts +112 -0
- package/dist/shared/consolidated-check-base.d.ts.map +1 -0
- package/dist/shared/consolidated-check-base.js +247 -0
- package/dist/shared/consolidated-check-base.js.map +1 -0
- package/dist/shared/exclusions.d.ts +31 -0
- package/dist/shared/exclusions.d.ts.map +1 -1
- package/dist/shared/exclusions.js +108 -0
- package/dist/shared/exclusions.js.map +1 -1
- package/dist/shared/performance-tracker.d.ts +103 -0
- package/dist/shared/performance-tracker.d.ts.map +1 -0
- package/dist/shared/performance-tracker.js +267 -0
- package/dist/shared/performance-tracker.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Performance Tracker for Preflight Checks
|
|
3
|
+
*
|
|
4
|
+
* Tracks execution times across runs and detects performance regressions.
|
|
5
|
+
* Stores baseline metrics in .preflight-perf.json for comparison.
|
|
6
|
+
*
|
|
7
|
+
* Features:
|
|
8
|
+
* - Track check execution times
|
|
9
|
+
* - Detect significant regressions (>50% slower)
|
|
10
|
+
* - Store historical baselines
|
|
11
|
+
* - Generate performance reports
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* const tracker = new PerformanceTracker();
|
|
15
|
+
* tracker.load();
|
|
16
|
+
*
|
|
17
|
+
* // After running checks
|
|
18
|
+
* tracker.record("ui/console-log-check", 1.5);
|
|
19
|
+
* tracker.record("security/api-key-exposure", 0.8);
|
|
20
|
+
*
|
|
21
|
+
* const regressions = tracker.detectRegressions();
|
|
22
|
+
* tracker.save();
|
|
23
|
+
*/
|
|
24
|
+
export interface CheckPerformanceData {
|
|
25
|
+
/** Last recorded duration in seconds */
|
|
26
|
+
lastDuration: number;
|
|
27
|
+
/** Rolling average duration (last 5 runs) */
|
|
28
|
+
avgDuration: number;
|
|
29
|
+
/** Minimum recorded duration */
|
|
30
|
+
minDuration: number;
|
|
31
|
+
/** Maximum recorded duration */
|
|
32
|
+
maxDuration: number;
|
|
33
|
+
/** Number of times this check has run */
|
|
34
|
+
runCount: number;
|
|
35
|
+
/** Last 5 durations for rolling average */
|
|
36
|
+
history: number[];
|
|
37
|
+
/** ISO timestamp of last run */
|
|
38
|
+
lastRun: string;
|
|
39
|
+
}
|
|
40
|
+
export interface PerformanceData {
|
|
41
|
+
version: number;
|
|
42
|
+
lastUpdated: string;
|
|
43
|
+
checks: Record<string, CheckPerformanceData>;
|
|
44
|
+
}
|
|
45
|
+
export interface PerformanceRegression {
|
|
46
|
+
checkId: string;
|
|
47
|
+
currentDuration: number;
|
|
48
|
+
baselineDuration: number;
|
|
49
|
+
percentageIncrease: number;
|
|
50
|
+
severity: "warning" | "critical";
|
|
51
|
+
}
|
|
52
|
+
export declare class PerformanceTracker {
|
|
53
|
+
private data;
|
|
54
|
+
private currentRunMetrics;
|
|
55
|
+
private filePath;
|
|
56
|
+
constructor(appRoot?: string);
|
|
57
|
+
/**
|
|
58
|
+
* Load performance data from disk
|
|
59
|
+
*/
|
|
60
|
+
load(): boolean;
|
|
61
|
+
/**
|
|
62
|
+
* Save performance data to disk
|
|
63
|
+
*/
|
|
64
|
+
save(): void;
|
|
65
|
+
/**
|
|
66
|
+
* Record a check's execution time
|
|
67
|
+
*/
|
|
68
|
+
record(checkId: string, durationSec: number): void;
|
|
69
|
+
/**
|
|
70
|
+
* Detect performance regressions compared to baseline
|
|
71
|
+
*/
|
|
72
|
+
detectRegressions(): PerformanceRegression[];
|
|
73
|
+
/**
|
|
74
|
+
* Get summary statistics
|
|
75
|
+
*/
|
|
76
|
+
getSummary(): {
|
|
77
|
+
totalChecks: number;
|
|
78
|
+
avgDuration: number;
|
|
79
|
+
slowestChecks: Array<{
|
|
80
|
+
id: string;
|
|
81
|
+
duration: number;
|
|
82
|
+
}>;
|
|
83
|
+
fastestChecks: Array<{
|
|
84
|
+
id: string;
|
|
85
|
+
duration: number;
|
|
86
|
+
}>;
|
|
87
|
+
};
|
|
88
|
+
/**
|
|
89
|
+
* Print performance report
|
|
90
|
+
*/
|
|
91
|
+
printReport(verbose?: boolean): void;
|
|
92
|
+
/**
|
|
93
|
+
* Reset all performance data
|
|
94
|
+
*/
|
|
95
|
+
reset(): void;
|
|
96
|
+
/**
|
|
97
|
+
* Get baseline for a specific check
|
|
98
|
+
*/
|
|
99
|
+
getBaseline(checkId: string): CheckPerformanceData | null;
|
|
100
|
+
}
|
|
101
|
+
export declare function getPerformanceTracker(appRoot?: string): PerformanceTracker;
|
|
102
|
+
export declare function resetPerformanceTracker(): void;
|
|
103
|
+
//# sourceMappingURL=performance-tracker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"performance-tracker.d.ts","sourceRoot":"","sources":["../../src/shared/performance-tracker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAKH,MAAM,WAAW,oBAAoB;IACnC,wCAAwC;IACxC,YAAY,EAAE,MAAM,CAAC;IACrB,6CAA6C;IAC7C,WAAW,EAAE,MAAM,CAAC;IACpB,gCAAgC;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,gCAAgC;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,yCAAyC;IACzC,QAAQ,EAAE,MAAM,CAAC;IACjB,2CAA2C;IAC3C,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,gCAAgC;IAChC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;CAC9C;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,QAAQ,EAAE,SAAS,GAAG,UAAU,CAAC;CAClC;AAOD,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,IAAI,CAAkB;IAC9B,OAAO,CAAC,iBAAiB,CAAkC;IAC3D,OAAO,CAAC,QAAQ,CAAS;gBAEb,OAAO,GAAE,MAAsB;IAS3C;;OAEG;IACH,IAAI,IAAI,OAAO;IAaf;;OAEG;IACH,IAAI,IAAI,IAAI;IASZ;;OAEG;IACH,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI;IAoClD;;OAEG;IACH,iBAAiB,IAAI,qBAAqB,EAAE;IA0C5C;;OAEG;IACH,UAAU,IAAI;QACZ,WAAW,EAAE,MAAM,CAAC;QACpB,WAAW,EAAE,MAAM,CAAC;QACpB,aAAa,EAAE,KAAK,CAAC;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,QAAQ,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QACvD,aAAa,EAAE,KAAK,CAAC;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,QAAQ,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KACxD;IA6BD;;OAEG;IACH,WAAW,CAAC,OAAO,GAAE,OAAe,GAAG,IAAI;IAgC3C;;OAEG;IACH,KAAK,IAAI,IAAI;IASb;;OAEG;IACH,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,oBAAoB,GAAG,IAAI;CAG1D;AAKD,wBAAgB,qBAAqB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,kBAAkB,CAK1E;AAED,wBAAgB,uBAAuB,IAAI,IAAI,CAE9C"}
|
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Performance Tracker for Preflight Checks
|
|
4
|
+
*
|
|
5
|
+
* Tracks execution times across runs and detects performance regressions.
|
|
6
|
+
* Stores baseline metrics in .preflight-perf.json for comparison.
|
|
7
|
+
*
|
|
8
|
+
* Features:
|
|
9
|
+
* - Track check execution times
|
|
10
|
+
* - Detect significant regressions (>50% slower)
|
|
11
|
+
* - Store historical baselines
|
|
12
|
+
* - Generate performance reports
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* const tracker = new PerformanceTracker();
|
|
16
|
+
* tracker.load();
|
|
17
|
+
*
|
|
18
|
+
* // After running checks
|
|
19
|
+
* tracker.record("ui/console-log-check", 1.5);
|
|
20
|
+
* tracker.record("security/api-key-exposure", 0.8);
|
|
21
|
+
*
|
|
22
|
+
* const regressions = tracker.detectRegressions();
|
|
23
|
+
* tracker.save();
|
|
24
|
+
*/
|
|
25
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
26
|
+
if (k2 === undefined) k2 = k;
|
|
27
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
28
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
29
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
30
|
+
}
|
|
31
|
+
Object.defineProperty(o, k2, desc);
|
|
32
|
+
}) : (function(o, m, k, k2) {
|
|
33
|
+
if (k2 === undefined) k2 = k;
|
|
34
|
+
o[k2] = m[k];
|
|
35
|
+
}));
|
|
36
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
37
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
38
|
+
}) : function(o, v) {
|
|
39
|
+
o["default"] = v;
|
|
40
|
+
});
|
|
41
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
42
|
+
var ownKeys = function(o) {
|
|
43
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
44
|
+
var ar = [];
|
|
45
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
46
|
+
return ar;
|
|
47
|
+
};
|
|
48
|
+
return ownKeys(o);
|
|
49
|
+
};
|
|
50
|
+
return function (mod) {
|
|
51
|
+
if (mod && mod.__esModule) return mod;
|
|
52
|
+
var result = {};
|
|
53
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
54
|
+
__setModuleDefault(result, mod);
|
|
55
|
+
return result;
|
|
56
|
+
};
|
|
57
|
+
})();
|
|
58
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
59
|
+
exports.PerformanceTracker = void 0;
|
|
60
|
+
exports.getPerformanceTracker = getPerformanceTracker;
|
|
61
|
+
exports.resetPerformanceTracker = resetPerformanceTracker;
|
|
62
|
+
const fs = __importStar(require("node:fs"));
|
|
63
|
+
const path = __importStar(require("node:path"));
|
|
64
|
+
const PERFORMANCE_FILE = ".preflight-perf.json";
|
|
65
|
+
const HISTORY_SIZE = 5;
|
|
66
|
+
const WARNING_THRESHOLD = 0.5; // 50% slower
|
|
67
|
+
const CRITICAL_THRESHOLD = 1.0; // 100% slower (2x)
|
|
68
|
+
class PerformanceTracker {
|
|
69
|
+
data;
|
|
70
|
+
currentRunMetrics = new Map();
|
|
71
|
+
filePath;
|
|
72
|
+
constructor(appRoot = process.cwd()) {
|
|
73
|
+
this.filePath = path.join(appRoot, PERFORMANCE_FILE);
|
|
74
|
+
this.data = {
|
|
75
|
+
version: 1,
|
|
76
|
+
lastUpdated: new Date().toISOString(),
|
|
77
|
+
checks: {},
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Load performance data from disk
|
|
82
|
+
*/
|
|
83
|
+
load() {
|
|
84
|
+
try {
|
|
85
|
+
if (fs.existsSync(this.filePath)) {
|
|
86
|
+
const content = fs.readFileSync(this.filePath, "utf-8");
|
|
87
|
+
this.data = JSON.parse(content);
|
|
88
|
+
return true;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
catch {
|
|
92
|
+
// If file is corrupted, start fresh
|
|
93
|
+
}
|
|
94
|
+
return false;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Save performance data to disk
|
|
98
|
+
*/
|
|
99
|
+
save() {
|
|
100
|
+
try {
|
|
101
|
+
this.data.lastUpdated = new Date().toISOString();
|
|
102
|
+
fs.writeFileSync(this.filePath, JSON.stringify(this.data, null, 2));
|
|
103
|
+
}
|
|
104
|
+
catch {
|
|
105
|
+
// Ignore save errors - performance tracking is optional
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Record a check's execution time
|
|
110
|
+
*/
|
|
111
|
+
record(checkId, durationSec) {
|
|
112
|
+
this.currentRunMetrics.set(checkId, durationSec);
|
|
113
|
+
const existing = this.data.checks[checkId];
|
|
114
|
+
if (existing) {
|
|
115
|
+
// Update existing record
|
|
116
|
+
existing.lastDuration = durationSec;
|
|
117
|
+
existing.minDuration = Math.min(existing.minDuration, durationSec);
|
|
118
|
+
existing.maxDuration = Math.max(existing.maxDuration, durationSec);
|
|
119
|
+
existing.runCount++;
|
|
120
|
+
existing.lastRun = new Date().toISOString();
|
|
121
|
+
// Update history (keep last HISTORY_SIZE)
|
|
122
|
+
existing.history.push(durationSec);
|
|
123
|
+
if (existing.history.length > HISTORY_SIZE) {
|
|
124
|
+
existing.history.shift();
|
|
125
|
+
}
|
|
126
|
+
// Calculate rolling average
|
|
127
|
+
existing.avgDuration =
|
|
128
|
+
existing.history.reduce((a, b) => a + b, 0) / existing.history.length;
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
// Create new record
|
|
132
|
+
this.data.checks[checkId] = {
|
|
133
|
+
lastDuration: durationSec,
|
|
134
|
+
avgDuration: durationSec,
|
|
135
|
+
minDuration: durationSec,
|
|
136
|
+
maxDuration: durationSec,
|
|
137
|
+
runCount: 1,
|
|
138
|
+
history: [durationSec],
|
|
139
|
+
lastRun: new Date().toISOString(),
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Detect performance regressions compared to baseline
|
|
145
|
+
*/
|
|
146
|
+
detectRegressions() {
|
|
147
|
+
const regressions = [];
|
|
148
|
+
for (const [checkId, duration] of this.currentRunMetrics) {
|
|
149
|
+
const baseline = this.data.checks[checkId];
|
|
150
|
+
// Need at least 3 runs to establish a baseline
|
|
151
|
+
if (!baseline || baseline.runCount < 3) {
|
|
152
|
+
continue;
|
|
153
|
+
}
|
|
154
|
+
const baselineDuration = baseline.avgDuration;
|
|
155
|
+
const increase = (duration - baselineDuration) / baselineDuration;
|
|
156
|
+
if (increase >= CRITICAL_THRESHOLD) {
|
|
157
|
+
regressions.push({
|
|
158
|
+
checkId,
|
|
159
|
+
currentDuration: duration,
|
|
160
|
+
baselineDuration,
|
|
161
|
+
percentageIncrease: increase * 100,
|
|
162
|
+
severity: "critical",
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
else if (increase >= WARNING_THRESHOLD) {
|
|
166
|
+
regressions.push({
|
|
167
|
+
checkId,
|
|
168
|
+
currentDuration: duration,
|
|
169
|
+
baselineDuration,
|
|
170
|
+
percentageIncrease: increase * 100,
|
|
171
|
+
severity: "warning",
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
// Sort by severity (critical first) then by percentage
|
|
176
|
+
return regressions.sort((a, b) => {
|
|
177
|
+
if (a.severity !== b.severity) {
|
|
178
|
+
return a.severity === "critical" ? -1 : 1;
|
|
179
|
+
}
|
|
180
|
+
return b.percentageIncrease - a.percentageIncrease;
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Get summary statistics
|
|
185
|
+
*/
|
|
186
|
+
getSummary() {
|
|
187
|
+
const checks = Object.entries(this.data.checks);
|
|
188
|
+
if (checks.length === 0) {
|
|
189
|
+
return {
|
|
190
|
+
totalChecks: 0,
|
|
191
|
+
avgDuration: 0,
|
|
192
|
+
slowestChecks: [],
|
|
193
|
+
fastestChecks: [],
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
const durations = checks.map(([id, data]) => ({
|
|
197
|
+
id,
|
|
198
|
+
duration: data.avgDuration,
|
|
199
|
+
}));
|
|
200
|
+
const sorted = durations.sort((a, b) => b.duration - a.duration);
|
|
201
|
+
const totalDuration = durations.reduce((sum, d) => sum + d.duration, 0);
|
|
202
|
+
return {
|
|
203
|
+
totalChecks: checks.length,
|
|
204
|
+
avgDuration: totalDuration / checks.length,
|
|
205
|
+
slowestChecks: sorted.slice(0, 5),
|
|
206
|
+
fastestChecks: sorted.slice(-5).reverse(),
|
|
207
|
+
};
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Print performance report
|
|
211
|
+
*/
|
|
212
|
+
printReport(verbose = false) {
|
|
213
|
+
const regressions = this.detectRegressions();
|
|
214
|
+
const summary = this.getSummary();
|
|
215
|
+
console.log("\n⏱️ Performance Report");
|
|
216
|
+
console.log("─".repeat(50));
|
|
217
|
+
if (regressions.length > 0) {
|
|
218
|
+
console.log("\n🚨 Performance Regressions Detected:");
|
|
219
|
+
for (const reg of regressions) {
|
|
220
|
+
const icon = reg.severity === "critical" ? "🔴" : "🟡";
|
|
221
|
+
console.log(` ${icon} ${reg.checkId}: ${reg.currentDuration.toFixed(2)}s ` +
|
|
222
|
+
`(baseline: ${reg.baselineDuration.toFixed(2)}s, +${reg.percentageIncrease.toFixed(0)}%)`);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
if (verbose && summary.totalChecks > 0) {
|
|
226
|
+
console.log(`\n📊 Summary:`);
|
|
227
|
+
console.log(` Total tracked checks: ${summary.totalChecks}`);
|
|
228
|
+
console.log(` Average duration: ${summary.avgDuration.toFixed(2)}s`);
|
|
229
|
+
if (summary.slowestChecks.length > 0) {
|
|
230
|
+
console.log(`\n🐢 Slowest Checks:`);
|
|
231
|
+
for (const check of summary.slowestChecks) {
|
|
232
|
+
console.log(` - ${check.id}: ${check.duration.toFixed(2)}s`);
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* Reset all performance data
|
|
239
|
+
*/
|
|
240
|
+
reset() {
|
|
241
|
+
this.data = {
|
|
242
|
+
version: 1,
|
|
243
|
+
lastUpdated: new Date().toISOString(),
|
|
244
|
+
checks: {},
|
|
245
|
+
};
|
|
246
|
+
this.currentRunMetrics.clear();
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* Get baseline for a specific check
|
|
250
|
+
*/
|
|
251
|
+
getBaseline(checkId) {
|
|
252
|
+
return this.data.checks[checkId] || null;
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
exports.PerformanceTracker = PerformanceTracker;
|
|
256
|
+
// Singleton instance for easy access
|
|
257
|
+
let tracker = null;
|
|
258
|
+
function getPerformanceTracker(appRoot) {
|
|
259
|
+
if (!tracker) {
|
|
260
|
+
tracker = new PerformanceTracker(appRoot);
|
|
261
|
+
}
|
|
262
|
+
return tracker;
|
|
263
|
+
}
|
|
264
|
+
function resetPerformanceTracker() {
|
|
265
|
+
tracker = null;
|
|
266
|
+
}
|
|
267
|
+
//# sourceMappingURL=performance-tracker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"performance-tracker.js","sourceRoot":"","sources":["../../src/shared/performance-tracker.ts"],"names":[],"mappings":"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"}
|