@code-pushup/utils 0.108.2 → 0.110.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/package.json +2 -2
- package/src/index.d.ts +1 -0
- package/src/index.js +1 -0
- package/src/index.js.map +1 -1
- package/src/lib/performance-observer.d.ts +3 -3
- package/src/lib/performance-observer.js +1 -1
- package/src/lib/performance-observer.js.map +1 -1
- package/src/lib/profiler/constants.d.ts +5 -0
- package/src/lib/profiler/constants.js +5 -0
- package/src/lib/profiler/constants.js.map +1 -1
- package/src/lib/profiler/profiler.d.ts +6 -0
- package/src/lib/profiler/profiler.js +10 -0
- package/src/lib/profiler/profiler.js.map +1 -1
- package/src/lib/{trace-file-utils.d.ts → profiler/trace-file-utils.d.ts} +52 -2
- package/src/lib/{trace-file-utils.js → profiler/trace-file-utils.js} +120 -9
- package/src/lib/profiler/trace-file-utils.js.map +1 -0
- package/src/lib/{trace-file.type.d.ts → profiler/trace-file.type.d.ts} +6 -2
- package/src/lib/profiler/trace-file.type.js.map +1 -0
- package/src/lib/profiler/wal-json-trace.d.ts +25 -0
- package/src/lib/profiler/wal-json-trace.js +77 -0
- package/src/lib/profiler/wal-json-trace.js.map +1 -0
- package/src/lib/reports/formatting.d.ts +6 -1
- package/src/lib/reports/formatting.js +15 -1
- package/src/lib/reports/formatting.js.map +1 -1
- package/src/lib/reports/generate-md-report.js +13 -8
- package/src/lib/reports/generate-md-report.js.map +1 -1
- package/src/lib/reports/type-guards.d.ts +9 -0
- package/src/lib/reports/type-guards.js +17 -0
- package/src/lib/reports/type-guards.js.map +1 -0
- package/src/lib/reports/utils.js +14 -3
- package/src/lib/reports/utils.js.map +1 -1
- package/src/lib/wal.d.ts +236 -0
- package/src/lib/wal.js +411 -0
- package/src/lib/wal.js.map +1 -0
- package/src/lib/sink-source.type.d.ts +0 -43
- package/src/lib/sink-source.type.js +0 -2
- package/src/lib/sink-source.type.js.map +0 -1
- package/src/lib/trace-file-utils.js.map +0 -1
- package/src/lib/trace-file.type.js.map +0 -1
- /package/src/lib/{trace-file.type.js → profiler/trace-file.type.js} +0 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@code-pushup/utils",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.110.0",
|
|
4
4
|
"description": "Low-level utilities (helper functions, etc.) used by Code PushUp CLI",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"homepage": "https://github.com/code-pushup/cli/tree/main/packages/utils#readme",
|
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
"node": ">=18.2.0"
|
|
28
28
|
},
|
|
29
29
|
"dependencies": {
|
|
30
|
-
"@code-pushup/models": "0.
|
|
30
|
+
"@code-pushup/models": "0.110.0",
|
|
31
31
|
"ansis": "^3.3.0",
|
|
32
32
|
"build-md": "^0.4.2",
|
|
33
33
|
"bundle-require": "^5.1.0",
|
package/src/index.d.ts
CHANGED
|
@@ -24,6 +24,7 @@ export { generateRandomId } from './lib/random.js';
|
|
|
24
24
|
export { CODE_PUSHUP_DOMAIN, CODE_PUSHUP_UNICODE_LOGO, FOOTER_PREFIX, README_LINK, } from './lib/reports/constants.js';
|
|
25
25
|
export { listAuditsFromAllPlugins, listGroupsFromAllPlugins, } from './lib/reports/flatten-plugins.js';
|
|
26
26
|
export { formatIssueSeverities, wrapTags } from './lib/reports/formatting.js';
|
|
27
|
+
export { isFileIssue, isFileSource, isUrlSource, } from './lib/reports/type-guards.js';
|
|
27
28
|
export { generateMdReport } from './lib/reports/generate-md-report.js';
|
|
28
29
|
export { generateMdReportsDiff, generateMdReportsDiffForMonorepo, } from './lib/reports/generate-md-reports-diff.js';
|
|
29
30
|
export { loadReport } from './lib/reports/load-report.js';
|
package/src/index.js
CHANGED
|
@@ -24,6 +24,7 @@ export { generateRandomId } from './lib/random.js';
|
|
|
24
24
|
export { CODE_PUSHUP_DOMAIN, CODE_PUSHUP_UNICODE_LOGO, FOOTER_PREFIX, README_LINK, } from './lib/reports/constants.js';
|
|
25
25
|
export { listAuditsFromAllPlugins, listGroupsFromAllPlugins, } from './lib/reports/flatten-plugins.js';
|
|
26
26
|
export { formatIssueSeverities, wrapTags } from './lib/reports/formatting.js';
|
|
27
|
+
export { isFileIssue, isFileSource, isUrlSource, } from './lib/reports/type-guards.js';
|
|
27
28
|
export { generateMdReport } from './lib/reports/generate-md-report.js';
|
|
28
29
|
export { generateMdReportsDiff, generateMdReportsDiffForMonorepo, } from './lib/reports/generate-md-reports-diff.js';
|
|
29
30
|
export { loadReport } from './lib/reports/load-report.js';
|
package/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { type PerformanceEntry } from 'node:perf_hooks';
|
|
2
|
-
import type {
|
|
2
|
+
import type { AppendableSink } from './wal.js';
|
|
3
3
|
export declare const DEFAULT_FLUSH_THRESHOLD = 20;
|
|
4
4
|
export type PerformanceObserverOptions<T> = {
|
|
5
|
-
sink:
|
|
5
|
+
sink: AppendableSink<T>;
|
|
6
6
|
encode: (entry: PerformanceEntry) => T[];
|
|
7
7
|
buffered?: boolean;
|
|
8
8
|
flushThreshold?: number;
|
|
9
9
|
};
|
|
10
|
-
export declare class PerformanceObserverSink<T>
|
|
10
|
+
export declare class PerformanceObserverSink<T> {
|
|
11
11
|
#private;
|
|
12
12
|
constructor(options: PerformanceObserverOptions<T>);
|
|
13
13
|
encode(entry: PerformanceEntry): T[];
|
|
@@ -48,7 +48,7 @@ export class PerformanceObserverSink {
|
|
|
48
48
|
try {
|
|
49
49
|
fresh
|
|
50
50
|
.flatMap(entry => this.encode(entry))
|
|
51
|
-
.forEach(item => this.#sink.
|
|
51
|
+
.forEach(item => this.#sink.append(item));
|
|
52
52
|
this.#written.set(t, written + fresh.length);
|
|
53
53
|
}
|
|
54
54
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"performance-observer.js","sourceRoot":"","sources":["../../../src/lib/performance-observer.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,mBAAmB,EAEnB,WAAW,GACZ,MAAM,iBAAiB,CAAC;AAGzB,MAAM,cAAc,GAAG,CAAC,MAAM,EAAE,SAAS,CAAU,CAAC;AAEpD,MAAM,CAAC,MAAM,uBAAuB,GAAG,EAAE,CAAC;AAS1C,MAAM,OAAO,uBAAuB;
|
|
1
|
+
{"version":3,"file":"performance-observer.js","sourceRoot":"","sources":["../../../src/lib/performance-observer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1,6 @@
|
|
|
1
1
|
export declare const PROFILER_ENABLED_ENV_VAR = "CP_PROFILING";
|
|
2
|
+
export declare const PROFILER_COORDINATOR_FLAG_ENV_VAR = "CP_PROFILER_COORDINATOR";
|
|
3
|
+
export declare const PROFILER_ORIGIN_PID_ENV_VAR = "CP_PROFILER_ORIGIN_PID";
|
|
4
|
+
export declare const PROFILER_DIRECTORY_ENV_VAR = "CP_PROFILER_DIR";
|
|
5
|
+
export declare const PROFILER_BASE_NAME = "trace";
|
|
6
|
+
export declare const PROFILER_DIRECTORY = "./tmp/profiles";
|
|
@@ -1,2 +1,7 @@
|
|
|
1
1
|
export const PROFILER_ENABLED_ENV_VAR = 'CP_PROFILING';
|
|
2
|
+
export const PROFILER_COORDINATOR_FLAG_ENV_VAR = 'CP_PROFILER_COORDINATOR';
|
|
3
|
+
export const PROFILER_ORIGIN_PID_ENV_VAR = 'CP_PROFILER_ORIGIN_PID';
|
|
4
|
+
export const PROFILER_DIRECTORY_ENV_VAR = 'CP_PROFILER_DIR';
|
|
5
|
+
export const PROFILER_BASE_NAME = 'trace';
|
|
6
|
+
export const PROFILER_DIRECTORY = './tmp/profiles';
|
|
2
7
|
//# sourceMappingURL=constants.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../../src/lib/profiler/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,wBAAwB,GAAG,cAAc,CAAC"}
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../../src/lib/profiler/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,wBAAwB,GAAG,cAAc,CAAC;AACvD,MAAM,CAAC,MAAM,iCAAiC,GAAG,yBAAyB,CAAC;AAC3E,MAAM,CAAC,MAAM,2BAA2B,GAAG,wBAAwB,CAAC;AACpE,MAAM,CAAC,MAAM,0BAA0B,GAAG,iBAAiB,CAAC;AAC5D,MAAM,CAAC,MAAM,kBAAkB,GAAG,OAAO,CAAC;AAC1C,MAAM,CAAC,MAAM,kBAAkB,GAAG,gBAAgB,CAAC"}
|
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
import { type ActionTrackConfigs, type MeasureCtxOptions, type MeasureOptions } from '../user-timing-extensibility-api-utils.js';
|
|
2
2
|
import type { ActionTrackEntryPayload, DevToolsColor, EntryMeta } from '../user-timing-extensibility-api.type.js';
|
|
3
|
+
/**
|
|
4
|
+
* Generates a unique profiler ID based on performance time origin, process ID, thread ID, and instance count.
|
|
5
|
+
*/
|
|
6
|
+
export declare function getProfilerId(): string;
|
|
3
7
|
/**
|
|
4
8
|
* Configuration options for creating a Profiler instance.
|
|
5
9
|
*
|
|
@@ -41,6 +45,8 @@ export type ProfilerOptions<T extends ActionTrackConfigs = ActionTrackConfigs> =
|
|
|
41
45
|
*/
|
|
42
46
|
export declare class Profiler<T extends ActionTrackConfigs> {
|
|
43
47
|
#private;
|
|
48
|
+
static instanceCount: number;
|
|
49
|
+
readonly id: string;
|
|
44
50
|
readonly tracks: Record<keyof T, ActionTrackEntryPayload> | undefined;
|
|
45
51
|
/**
|
|
46
52
|
* Creates a new Profiler instance with the specified configuration.
|
|
@@ -1,7 +1,15 @@
|
|
|
1
1
|
import process from 'node:process';
|
|
2
|
+
import { threadId } from 'node:worker_threads';
|
|
2
3
|
import { isEnvVarEnabled } from '../env.js';
|
|
3
4
|
import { asOptions, markerPayload, measureCtx, setupTracks, } from '../user-timing-extensibility-api-utils.js';
|
|
4
5
|
import { PROFILER_ENABLED_ENV_VAR } from './constants.js';
|
|
6
|
+
/**
|
|
7
|
+
* Generates a unique profiler ID based on performance time origin, process ID, thread ID, and instance count.
|
|
8
|
+
*/
|
|
9
|
+
export function getProfilerId() {
|
|
10
|
+
// eslint-disable-next-line functional/immutable-data
|
|
11
|
+
return `${Math.round(performance.timeOrigin)}.${process.pid}.${threadId}.${++Profiler.instanceCount}`;
|
|
12
|
+
}
|
|
5
13
|
/**
|
|
6
14
|
* Performance profiler that creates structured timing measurements with Chrome DevTools Extensibility API payloads.
|
|
7
15
|
*
|
|
@@ -10,6 +18,8 @@ import { PROFILER_ENABLED_ENV_VAR } from './constants.js';
|
|
|
10
18
|
*
|
|
11
19
|
*/
|
|
12
20
|
export class Profiler {
|
|
21
|
+
static instanceCount = 0;
|
|
22
|
+
id = getProfilerId();
|
|
13
23
|
#enabled;
|
|
14
24
|
#defaults;
|
|
15
25
|
tracks;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"profiler.js","sourceRoot":"","sources":["../../../../src/lib/profiler/profiler.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAIL,SAAS,EACT,aAAa,EACb,UAAU,EACV,WAAW,GACZ,MAAM,2CAA2C,CAAC;AAMnD,OAAO,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"profiler.js","sourceRoot":"","sources":["../../../../src/lib/profiler/profiler.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAIL,SAAS,EACT,aAAa,EACb,UAAU,EACV,WAAW,GACZ,MAAM,2CAA2C,CAAC;AAMnD,OAAO,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAE1D;;GAEG;AACH,MAAM,UAAU,aAAa;IAC3B,qDAAqD;IACrD,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,OAAO,CAAC,GAAG,IAAI,QAAQ,IAAI,EAAE,QAAQ,CAAC,aAAa,EAAE,CAAC;AACxG,CAAC;AAqCD;;;;;;GAMG;AACH,MAAM,OAAO,QAAQ;IACnB,MAAM,CAAC,aAAa,GAAG,CAAC,CAAC;IAChB,EAAE,GAAG,aAAa,EAAE,CAAC;IAC9B,QAAQ,CAAU;IACT,SAAS,CAA0B;IACnC,MAAM,CAAuD;IAC7D,MAAM,CAAgC;IAE/C;;;;;;;;;;;OAWG;IACH,YAAY,OAA2B;QACrC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,QAAQ,EAAE,GAAG,OAAO,CAAC;QACzD,MAAM,QAAQ,GAAG,aAAa,CAAC;QAE/B,IAAI,CAAC,QAAQ,GAAG,OAAO,IAAI,eAAe,CAAC,wBAAwB,CAAC,CAAC;QACrE,IAAI,CAAC,SAAS,GAAG,EAAE,GAAG,QAAQ,EAAE,QAAQ,EAAE,CAAC;QAC3C,IAAI,CAAC,MAAM,GAAG,MAAM;YAClB,CAAC,CAAC,WAAW,CAAC,EAAE,GAAG,QAAQ,EAAE,QAAQ,EAAE,EAAE,MAAM,CAAC;YAChD,CAAC,CAAC,SAAS,CAAC;QACd,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC;YACvB,GAAG,QAAQ;YACX,QAAQ;YACR,MAAM;SACP,CAAC,CAAC;IACL,CAAC;IAED;;;;;;;OAOG;IACH,UAAU,CAAC,OAAgB;QACzB,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,GAAG,GAAG,OAAO,EAAE,CAAC;QACrD,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;IAC1B,CAAC;IAED;;;;;;OAMG;IACH,SAAS;QACP,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,MAAM,CAAC,IAAY,EAAE,GAAmB;QACtC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,OAAO;QACT,CAAC;QAED,WAAW,CAAC,IAAI,CACd,IAAI,EACJ,SAAS,CACP,aAAa,CAAC;YACZ,gDAAgD;YAChD,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAChE,GAAG,GAAG;SACP,CAAC,CACH,CACF,CAAC;IACJ,CAAC;IAED;;;;;;;;;;;;;;;OAeG;IACH,OAAO,CAAI,KAAa,EAAE,IAAa,EAAE,OAA2B;QAClE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,OAAO,IAAI,EAAE,CAAC;QAChB,CAAC;QAED,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAC9D,KAAK,EAAE,CAAC;QACR,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC;YACjB,OAAO,CAAC,CAAC,CAAC,CAAC;YACX,OAAO,CAAC,CAAC;QACX,CAAC;QAAC,OAAO,MAAM,EAAE,CAAC;YAChB,KAAK,CAAC,MAAM,CAAC,CAAC;YACd,MAAM,MAAM,CAAC;QACf,CAAC;IACH,CAAC;IAED;;;;;;;;;;;;;;;OAeG;IACH,KAAK,CAAC,YAAY,CAChB,KAAa,EACb,IAAsB,EACtB,OAA2B;QAE3B,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,OAAO,MAAM,IAAI,EAAE,CAAC;QACtB,CAAC;QAED,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAC9D,KAAK,EAAE,CAAC;QACR,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,MAAM,IAAI,EAAE,CAAC;YACvB,OAAO,CAAC,CAAC,CAAC,CAAC;YACX,OAAO,CAAC,CAAC;QACX,CAAC;QAAC,OAAO,MAAM,EAAE,CAAC;YAChB,KAAK,CAAC,MAAM,CAAC,CAAC;YACd,MAAM,MAAM,CAAC;QACf,CAAC;IACH,CAAC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import type { PerformanceMark, PerformanceMeasure } from 'node:perf_hooks';
|
|
2
|
-
import type {
|
|
1
|
+
import type { PerformanceEntry, PerformanceMark, PerformanceMeasure } from 'node:perf_hooks';
|
|
2
|
+
import type { UserTimingDetail } from '../user-timing-extensibility-api.type.js';
|
|
3
|
+
import type { BeginEvent, CompleteEvent, EndEvent, InstantEvent, InstantEventArgs, InstantEventTracingStartedInBrowser, SpanEventArgs, TraceEvent, TraceEventContainer, TraceEventRaw, TraceMetadata, UserTimingTraceEvent } from './trace-file.type.js';
|
|
3
4
|
/**
|
|
4
5
|
* Generates a unique ID for linking begin and end span events in Chrome traces.
|
|
5
6
|
* @returns Object with local ID string for the id2 field
|
|
@@ -121,6 +122,26 @@ export declare const measureToSpanEvents: (entry: PerformanceMeasure, opt?: {
|
|
|
121
122
|
pid?: number;
|
|
122
123
|
tid?: number;
|
|
123
124
|
}) => [BeginEvent, EndEvent];
|
|
125
|
+
/**
|
|
126
|
+
* Converts a PerformanceEntry to an array of UserTimingTraceEvents.
|
|
127
|
+
* A mark is converted to an instant event, and a measure is converted to a pair of span events.
|
|
128
|
+
* Other entry types are ignored.
|
|
129
|
+
* @param entry - Performance entry
|
|
130
|
+
* @returns UserTimingTraceEvent[]
|
|
131
|
+
*/
|
|
132
|
+
export declare function entryToTraceEvents(entry: PerformanceEntry): UserTimingTraceEvent[];
|
|
133
|
+
/**
|
|
134
|
+
* Creates trace metadata object with standard DevTools fields and custom metadata.
|
|
135
|
+
* @param startDate - Optional start date for the trace, defaults to current date
|
|
136
|
+
* @param metadata - Optional additional metadata to merge into the trace metadata
|
|
137
|
+
* @returns TraceMetadata object with source, startTime, and merged custom metadata
|
|
138
|
+
*/
|
|
139
|
+
export declare function getTraceMetadata(startDate?: Date, metadata?: Record<string, unknown>): {
|
|
140
|
+
source: string;
|
|
141
|
+
startTime: string;
|
|
142
|
+
hardwareConcurrency: number;
|
|
143
|
+
dataOrigin: string;
|
|
144
|
+
};
|
|
124
145
|
/**
|
|
125
146
|
* Creates a complete trace file container with metadata.
|
|
126
147
|
* @param opt - Trace file configuration
|
|
@@ -129,5 +150,34 @@ export declare const measureToSpanEvents: (entry: PerformanceMeasure, opt?: {
|
|
|
129
150
|
export declare const getTraceFile: (opt: {
|
|
130
151
|
traceEvents: TraceEvent[];
|
|
131
152
|
startTime?: string;
|
|
153
|
+
metadata?: Partial<TraceMetadata>;
|
|
132
154
|
}) => TraceEventContainer;
|
|
155
|
+
/**
|
|
156
|
+
* Decodes a JSON string detail property back to its original object form.
|
|
157
|
+
* @param target - Object containing a detail property as a JSON string
|
|
158
|
+
* @returns UserTimingDetail with the detail property parsed from JSON
|
|
159
|
+
*/
|
|
160
|
+
export declare function decodeDetail(target: {
|
|
161
|
+
detail: string;
|
|
162
|
+
}): UserTimingDetail;
|
|
163
|
+
/**
|
|
164
|
+
* Encodes object detail properties to JSON strings for storage/transmission.
|
|
165
|
+
* @param target - UserTimingDetail object with detail property to encode
|
|
166
|
+
* @returns UserTimingDetail with object details converted to JSON strings
|
|
167
|
+
*/
|
|
168
|
+
export declare function encodeDetail(target: UserTimingDetail): UserTimingDetail;
|
|
169
|
+
/**
|
|
170
|
+
* Decodes a raw trace event with JSON string details back to typed UserTimingTraceEvent.
|
|
171
|
+
* Parses detail properties from JSON strings to objects.
|
|
172
|
+
* @param event - Raw trace event with string-encoded details
|
|
173
|
+
* @returns UserTimingTraceEvent with parsed detail objects
|
|
174
|
+
*/
|
|
175
|
+
export declare function decodeTraceEvent({ args, ...rest }: TraceEventRaw): UserTimingTraceEvent;
|
|
176
|
+
/**
|
|
177
|
+
* Encodes a UserTimingTraceEvent to raw format with JSON string details.
|
|
178
|
+
* Converts object details to JSON strings for storage/transmission.
|
|
179
|
+
* @param event - UserTimingTraceEvent with object details
|
|
180
|
+
* @returns TraceEventRaw with string-encoded details
|
|
181
|
+
*/
|
|
182
|
+
export declare function encodeTraceEvent({ args, ...rest }: UserTimingTraceEvent): TraceEventRaw;
|
|
133
183
|
export {};
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import os from 'node:os';
|
|
2
1
|
import { threadId } from 'node:worker_threads';
|
|
3
|
-
import { defaultClock } from '
|
|
2
|
+
import { defaultClock } from '../clock-epoch.js';
|
|
4
3
|
/** Global counter for generating unique span IDs within a trace */
|
|
5
4
|
// eslint-disable-next-line functional/no-let
|
|
6
5
|
let id2Count = 0;
|
|
@@ -11,8 +10,11 @@ let id2Count = 0;
|
|
|
11
10
|
export const nextId2 = () => ({ local: `0x${++id2Count}` });
|
|
12
11
|
/**
|
|
13
12
|
* Provides default values for trace event properties.
|
|
14
|
-
* @param opt - Optional overrides for
|
|
15
|
-
* @
|
|
13
|
+
* @param opt - Optional overrides for process ID, thread ID, and timestamp
|
|
14
|
+
* @param opt.pid - Process ID override, defaults to current process PID
|
|
15
|
+
* @param opt.tid - Thread ID override, defaults to current thread ID
|
|
16
|
+
* @param opt.ts - Timestamp override in microseconds, defaults to current epoch time
|
|
17
|
+
* @returns Object containing pid, tid, and ts with defaults applied
|
|
16
18
|
*/
|
|
17
19
|
const defaults = (opt) => ({
|
|
18
20
|
pid: opt?.pid ?? process.pid,
|
|
@@ -162,6 +164,37 @@ export const measureToSpanEvents = (entry, opt) => getSpan({
|
|
|
162
164
|
tsE: defaultClock.fromEntry(entry, true),
|
|
163
165
|
args: entry.detail ? { data: { detail: entry.detail } } : undefined,
|
|
164
166
|
});
|
|
167
|
+
/**
|
|
168
|
+
* Converts a PerformanceEntry to an array of UserTimingTraceEvents.
|
|
169
|
+
* A mark is converted to an instant event, and a measure is converted to a pair of span events.
|
|
170
|
+
* Other entry types are ignored.
|
|
171
|
+
* @param entry - Performance entry
|
|
172
|
+
* @returns UserTimingTraceEvent[]
|
|
173
|
+
*/
|
|
174
|
+
export function entryToTraceEvents(entry) {
|
|
175
|
+
if (entry.entryType === 'mark') {
|
|
176
|
+
return [markToInstantEvent(entry)];
|
|
177
|
+
}
|
|
178
|
+
if (entry.entryType === 'measure') {
|
|
179
|
+
return measureToSpanEvents(entry);
|
|
180
|
+
}
|
|
181
|
+
return [];
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Creates trace metadata object with standard DevTools fields and custom metadata.
|
|
185
|
+
* @param startDate - Optional start date for the trace, defaults to current date
|
|
186
|
+
* @param metadata - Optional additional metadata to merge into the trace metadata
|
|
187
|
+
* @returns TraceMetadata object with source, startTime, and merged custom metadata
|
|
188
|
+
*/
|
|
189
|
+
export function getTraceMetadata(startDate, metadata) {
|
|
190
|
+
return {
|
|
191
|
+
source: 'DevTools',
|
|
192
|
+
startTime: startDate?.toISOString() ?? new Date().toISOString(),
|
|
193
|
+
hardwareConcurrency: 1,
|
|
194
|
+
dataOrigin: 'TraceEvents',
|
|
195
|
+
...metadata,
|
|
196
|
+
};
|
|
197
|
+
}
|
|
165
198
|
/**
|
|
166
199
|
* Creates a complete trace file container with metadata.
|
|
167
200
|
* @param opt - Trace file configuration
|
|
@@ -170,10 +203,88 @@ export const measureToSpanEvents = (entry, opt) => getSpan({
|
|
|
170
203
|
export const getTraceFile = (opt) => ({
|
|
171
204
|
traceEvents: opt.traceEvents,
|
|
172
205
|
displayTimeUnit: 'ms',
|
|
173
|
-
metadata:
|
|
174
|
-
source: 'Node.js UserTiming',
|
|
175
|
-
startTime: opt.startTime ?? new Date().toISOString(),
|
|
176
|
-
hardwareConcurrency: os.cpus().length,
|
|
177
|
-
},
|
|
206
|
+
metadata: getTraceMetadata(opt.startTime ? new Date(opt.startTime) : new Date(), opt.metadata),
|
|
178
207
|
});
|
|
208
|
+
/**
|
|
209
|
+
* Processes the detail property of an object using a custom processor function.
|
|
210
|
+
* @template T - Object type that may contain a detail property
|
|
211
|
+
* @param target - Object containing the detail property to process
|
|
212
|
+
* @param processor - Function to transform the detail value
|
|
213
|
+
* @returns New object with processed detail property, or original object if no detail
|
|
214
|
+
*/
|
|
215
|
+
function processDetail(target, processor) {
|
|
216
|
+
if (target.detail != null &&
|
|
217
|
+
(typeof target.detail === 'string' || typeof target.detail === 'object')) {
|
|
218
|
+
return { ...target, detail: processor(target.detail) };
|
|
219
|
+
}
|
|
220
|
+
return target;
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* Decodes a JSON string detail property back to its original object form.
|
|
224
|
+
* @param target - Object containing a detail property as a JSON string
|
|
225
|
+
* @returns UserTimingDetail with the detail property parsed from JSON
|
|
226
|
+
*/
|
|
227
|
+
export function decodeDetail(target) {
|
|
228
|
+
return processDetail(target, detail => typeof detail === 'string'
|
|
229
|
+
? JSON.parse(detail)
|
|
230
|
+
: detail);
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* Encodes object detail properties to JSON strings for storage/transmission.
|
|
234
|
+
* @param target - UserTimingDetail object with detail property to encode
|
|
235
|
+
* @returns UserTimingDetail with object details converted to JSON strings
|
|
236
|
+
*/
|
|
237
|
+
export function encodeDetail(target) {
|
|
238
|
+
return processDetail(target, (detail) => typeof detail === 'object'
|
|
239
|
+
? JSON.stringify(detail)
|
|
240
|
+
: detail);
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* Decodes a raw trace event with JSON string details back to typed UserTimingTraceEvent.
|
|
244
|
+
* Parses detail properties from JSON strings to objects.
|
|
245
|
+
* @param event - Raw trace event with string-encoded details
|
|
246
|
+
* @returns UserTimingTraceEvent with parsed detail objects
|
|
247
|
+
*/
|
|
248
|
+
export function decodeTraceEvent({ args, ...rest }) {
|
|
249
|
+
if (!args) {
|
|
250
|
+
return rest;
|
|
251
|
+
}
|
|
252
|
+
const processedArgs = decodeDetail(args);
|
|
253
|
+
if ('data' in args && args.data && typeof args.data === 'object') {
|
|
254
|
+
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
|
|
255
|
+
return {
|
|
256
|
+
...rest,
|
|
257
|
+
args: {
|
|
258
|
+
...processedArgs,
|
|
259
|
+
data: decodeDetail(args.data),
|
|
260
|
+
},
|
|
261
|
+
};
|
|
262
|
+
}
|
|
263
|
+
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
|
|
264
|
+
return { ...rest, args: processedArgs };
|
|
265
|
+
}
|
|
266
|
+
/**
|
|
267
|
+
* Encodes a UserTimingTraceEvent to raw format with JSON string details.
|
|
268
|
+
* Converts object details to JSON strings for storage/transmission.
|
|
269
|
+
* @param event - UserTimingTraceEvent with object details
|
|
270
|
+
* @returns TraceEventRaw with string-encoded details
|
|
271
|
+
*/
|
|
272
|
+
export function encodeTraceEvent({ args, ...rest }) {
|
|
273
|
+
if (!args) {
|
|
274
|
+
return rest;
|
|
275
|
+
}
|
|
276
|
+
const processedArgs = encodeDetail(args);
|
|
277
|
+
if ('data' in args && args.data && typeof args.data === 'object') {
|
|
278
|
+
const result = {
|
|
279
|
+
...rest,
|
|
280
|
+
args: {
|
|
281
|
+
...processedArgs,
|
|
282
|
+
data: encodeDetail(args.data),
|
|
283
|
+
},
|
|
284
|
+
};
|
|
285
|
+
return result;
|
|
286
|
+
}
|
|
287
|
+
const result = { ...rest, args: processedArgs };
|
|
288
|
+
return result;
|
|
289
|
+
}
|
|
179
290
|
//# sourceMappingURL=trace-file-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trace-file-utils.js","sourceRoot":"","sources":["../../../../src/lib/profiler/trace-file-utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { UserTimingDetail } from '
|
|
1
|
+
import type { UserTimingDetail } from '../user-timing-extensibility-api.type.js';
|
|
2
2
|
/**
|
|
3
3
|
* Arguments for instant trace events.
|
|
4
4
|
* @property {UserTimingDetail} [detail] - Optional user timing detail with DevTools payload
|
|
@@ -139,7 +139,11 @@ export type SpanEvent = BeginEvent | EndEvent;
|
|
|
139
139
|
/**
|
|
140
140
|
* Union type of all trace event types.
|
|
141
141
|
*/
|
|
142
|
-
export type
|
|
142
|
+
export type UserTimingTraceEvent = InstantEvent | SpanEvent;
|
|
143
|
+
/**
|
|
144
|
+
* All trace events including system events added during finalization.
|
|
145
|
+
*/
|
|
146
|
+
export type TraceEvent = UserTimingTraceEvent | CompleteEvent | InstantEventTracingStartedInBrowser;
|
|
143
147
|
/**
|
|
144
148
|
* Raw arguments format for trace events before processing.
|
|
145
149
|
* Either contains a detail string directly or nested in a data object.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trace-file.type.js","sourceRoot":"","sources":["../../../../src/lib/profiler/trace-file.type.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { InvalidEntry } from '../wal.js';
|
|
2
|
+
import type { UserTimingTraceEvent } from './trace-file.type.js';
|
|
3
|
+
/**
|
|
4
|
+
* Generates a complete Chrome DevTools trace file content as JSON string.
|
|
5
|
+
* Adds margin events around the trace events and includes metadata.
|
|
6
|
+
* @param events - Array of user timing trace events to include
|
|
7
|
+
* @param metadata - Optional custom metadata to include in the trace file
|
|
8
|
+
* @returns JSON string representation of the complete trace file
|
|
9
|
+
*/
|
|
10
|
+
export declare function generateTraceContent(events: UserTimingTraceEvent[], metadata?: Record<string, unknown>): string;
|
|
11
|
+
/**
|
|
12
|
+
* Creates a WAL (Write-Ahead Logging) format configuration for Chrome DevTools trace files.
|
|
13
|
+
* Automatically finalizes shards into complete trace files with proper metadata and margin events.
|
|
14
|
+
* @returns WalFormat configuration object with baseName, codec, extensions, and finalizer
|
|
15
|
+
*/
|
|
16
|
+
export declare function traceEventWalFormat(): {
|
|
17
|
+
baseName: string;
|
|
18
|
+
walExtension: string;
|
|
19
|
+
finalExtension: string;
|
|
20
|
+
codec: {
|
|
21
|
+
encode: (event: UserTimingTraceEvent) => string;
|
|
22
|
+
decode: (json: string) => UserTimingTraceEvent;
|
|
23
|
+
};
|
|
24
|
+
finalizer: (records: (UserTimingTraceEvent | InvalidEntry<string>)[], metadata?: Record<string, unknown>) => string;
|
|
25
|
+
};
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { defaultClock } from '../clock-epoch.js';
|
|
2
|
+
import { decodeTraceEvent, encodeTraceEvent, getCompleteEvent, getInstantEventTracingStartedInBrowser, getTraceFile, } from './trace-file-utils.js';
|
|
3
|
+
/** Name for the trace start margin event */
|
|
4
|
+
const TRACE_START_MARGIN_NAME = '[trace padding start]';
|
|
5
|
+
/** Name for the trace end margin event */
|
|
6
|
+
const TRACE_END_MARGIN_NAME = '[trace padding end]';
|
|
7
|
+
/** Microseconds of padding to add before/after trace events (1000ms = 1,000,000μs) */
|
|
8
|
+
const TRACE_MARGIN_US = 1_000_000;
|
|
9
|
+
/** Duration in microseconds for margin events (20ms = 20,000μs) */
|
|
10
|
+
const TRACE_MARGIN_DURATION_US = 20_000;
|
|
11
|
+
/**
|
|
12
|
+
* Generates a complete Chrome DevTools trace file content as JSON string.
|
|
13
|
+
* Adds margin events around the trace events and includes metadata.
|
|
14
|
+
* @param events - Array of user timing trace events to include
|
|
15
|
+
* @param metadata - Optional custom metadata to include in the trace file
|
|
16
|
+
* @returns JSON string representation of the complete trace file
|
|
17
|
+
*/
|
|
18
|
+
export function generateTraceContent(events, metadata) {
|
|
19
|
+
const traceContainer = getTraceFile({
|
|
20
|
+
traceEvents: events,
|
|
21
|
+
startTime: new Date().toISOString(),
|
|
22
|
+
metadata: {
|
|
23
|
+
...metadata,
|
|
24
|
+
generatedAt: new Date().toISOString(),
|
|
25
|
+
},
|
|
26
|
+
});
|
|
27
|
+
const marginUs = TRACE_MARGIN_US;
|
|
28
|
+
const marginDurUs = TRACE_MARGIN_DURATION_US;
|
|
29
|
+
const sortedEvents = [...events].sort((a, b) => a.ts - b.ts);
|
|
30
|
+
const fallbackTs = defaultClock.epochNowUs();
|
|
31
|
+
const firstTs = sortedEvents.at(0)?.ts ?? fallbackTs;
|
|
32
|
+
const lastTs = sortedEvents.at(-1)?.ts ?? fallbackTs;
|
|
33
|
+
const startTs = firstTs - marginUs;
|
|
34
|
+
const endTs = lastTs + marginUs;
|
|
35
|
+
const traceEvents = [
|
|
36
|
+
getInstantEventTracingStartedInBrowser({
|
|
37
|
+
ts: startTs,
|
|
38
|
+
url: events.length === 0 ? 'empty-trace' : 'generated-trace',
|
|
39
|
+
}),
|
|
40
|
+
getCompleteEvent({
|
|
41
|
+
name: TRACE_START_MARGIN_NAME,
|
|
42
|
+
ts: startTs,
|
|
43
|
+
dur: marginDurUs,
|
|
44
|
+
}),
|
|
45
|
+
...sortedEvents,
|
|
46
|
+
getCompleteEvent({
|
|
47
|
+
name: TRACE_END_MARGIN_NAME,
|
|
48
|
+
ts: endTs,
|
|
49
|
+
dur: marginDurUs,
|
|
50
|
+
}),
|
|
51
|
+
];
|
|
52
|
+
return JSON.stringify({ ...traceContainer, traceEvents });
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Creates a WAL (Write-Ahead Logging) format configuration for Chrome DevTools trace files.
|
|
56
|
+
* Automatically finalizes shards into complete trace files with proper metadata and margin events.
|
|
57
|
+
* @returns WalFormat configuration object with baseName, codec, extensions, and finalizer
|
|
58
|
+
*/
|
|
59
|
+
export function traceEventWalFormat() {
|
|
60
|
+
const baseName = 'trace';
|
|
61
|
+
const walExtension = '.jsonl';
|
|
62
|
+
const finalExtension = '.json';
|
|
63
|
+
return {
|
|
64
|
+
baseName,
|
|
65
|
+
walExtension,
|
|
66
|
+
finalExtension,
|
|
67
|
+
codec: {
|
|
68
|
+
encode: (event) => JSON.stringify(encodeTraceEvent(event)),
|
|
69
|
+
decode: (json) => decodeTraceEvent(JSON.parse(json)),
|
|
70
|
+
},
|
|
71
|
+
finalizer: (records, metadata) => {
|
|
72
|
+
const validRecords = records.filter((r) => !(typeof r === 'object' && r != null && '__invalid' in r));
|
|
73
|
+
return generateTraceContent(validRecords, metadata);
|
|
74
|
+
},
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=wal-json-trace.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wal-json-trace.js","sourceRoot":"","sources":["../../../../src/lib/profiler/wal-json-trace.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type HeadingLevel, type InlineText, MarkdownDocument } from 'build-md';
|
|
2
|
-
import type { AuditReport, Issue, IssueSeverity, SourceFileLocation, Table, Tree } from '@code-pushup/models';
|
|
2
|
+
import type { AuditReport, Issue, IssueSeverity, IssueSource, SourceFileLocation, Table, Tree } from '@code-pushup/models';
|
|
3
3
|
import type { MdReportOptions } from './types.js';
|
|
4
4
|
export declare function tableSection(table: Table, options?: {
|
|
5
5
|
level?: HeadingLevel;
|
|
@@ -17,6 +17,10 @@ export declare function metaDescription(audit: Pick<AuditReport, 'docsUrl' | 'de
|
|
|
17
17
|
* linkToLocalSourceInIde({ file: 'src/index.ts' }, { outputDir: '.code-pushup' }) // [`src/index.ts`](../src/index.ts)
|
|
18
18
|
*/
|
|
19
19
|
export declare function linkToLocalSourceForIde(source: SourceFileLocation, options?: Pick<MdReportOptions, 'outputDir'>): InlineText;
|
|
20
|
+
/**
|
|
21
|
+
* Link to source (handles both file and URL sources)
|
|
22
|
+
*/
|
|
23
|
+
export declare function linkToSource(source: IssueSource, options?: Pick<MdReportOptions, 'outputDir'>): InlineText;
|
|
20
24
|
export declare function formatSourceLine(position: SourceFileLocation['position']): string;
|
|
21
25
|
export declare function formatGitHubLink(file: string, position: SourceFileLocation['position']): string;
|
|
22
26
|
export declare function formatGitLabLink(file: string, position: SourceFileLocation['position']): string;
|
|
@@ -34,3 +38,4 @@ export declare function formatIssueSeverities(issues: Pick<Issue, 'severity'>[])
|
|
|
34
38
|
* from interpreting them as actual HTML.
|
|
35
39
|
*/
|
|
36
40
|
export declare function wrapTags(text: string | undefined): string;
|
|
41
|
+
export declare function formatSelectorLocation(selector: string): string;
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { MarkdownDocument, md, } from 'build-md';
|
|
2
2
|
import path from 'node:path';
|
|
3
|
-
import { pluralizeToken } from '../formatting.js';
|
|
3
|
+
import { UNICODE_ELLIPSIS, pluralizeToken } from '../formatting.js';
|
|
4
4
|
import { formatAsciiTree } from '../text-formats/ascii/tree.js';
|
|
5
5
|
import { columnsToStringArray, getColumnAlignments, rowToStringArray, } from '../text-formats/table.js';
|
|
6
6
|
import { countOccurrences, objectToEntries } from '../transform.js';
|
|
7
7
|
import { AUDIT_DETAILS_HEADING_LEVEL } from './constants.js';
|
|
8
8
|
import { getEnvironmentType, getGitHubBaseUrl, getGitLabBaseUrl, } from './environment-type.js';
|
|
9
|
+
import { isUrlSource } from './type-guards.js';
|
|
9
10
|
import { compareIssueSeverity } from './utils.js';
|
|
10
11
|
export function tableSection(table, options) {
|
|
11
12
|
if (table.rows.length === 0) {
|
|
@@ -66,6 +67,15 @@ export function linkToLocalSourceForIde(source, options) {
|
|
|
66
67
|
}
|
|
67
68
|
return md.link(formatFileLink(file, position, outputDir), md.code(file));
|
|
68
69
|
}
|
|
70
|
+
/**
|
|
71
|
+
* Link to source (handles both file and URL sources)
|
|
72
|
+
*/
|
|
73
|
+
export function linkToSource(source, options) {
|
|
74
|
+
if (isUrlSource(source)) {
|
|
75
|
+
return md.link(source.url, source.url);
|
|
76
|
+
}
|
|
77
|
+
return linkToLocalSourceForIde(source, options);
|
|
78
|
+
}
|
|
69
79
|
export function formatSourceLine(position) {
|
|
70
80
|
if (!position) {
|
|
71
81
|
return '';
|
|
@@ -139,4 +149,8 @@ export function wrapTags(text) {
|
|
|
139
149
|
}
|
|
140
150
|
return text.replace(/<[a-z][a-z\d]*[^>]*>/gi, '`$&`');
|
|
141
151
|
}
|
|
152
|
+
export function formatSelectorLocation(selector) {
|
|
153
|
+
const lastSegment = selector.split(/\s*>>?\s*/).at(-1) ?? selector;
|
|
154
|
+
return selector === lastSegment ? selector : UNICODE_ELLIPSIS + lastSegment;
|
|
155
|
+
}
|
|
142
156
|
//# sourceMappingURL=formatting.js.map
|