@untestutils/perf 0.6.0 → 0.6.3
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/index.d.mts +3 -2
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.mjs +2 -2
- package/dist/load/artillery.d.mts +36 -5
- package/dist/load/artillery.d.ts +36 -5
- package/dist/load/artillery.d.ts.map +1 -1
- package/dist/load/artillery.mjs +125 -64
- package/dist/load/autocannon.d.mts +2 -1
- package/dist/load/autocannon.d.ts +2 -1
- package/dist/load/autocannon.d.ts.map +1 -1
- package/dist/load/autocannon.mjs +11 -63
- package/dist/load/index.d.ts.map +1 -1
- package/dist/load/index.mjs +24 -12
- package/dist/start.d.ts.map +1 -1
- package/dist/start.mjs +7 -6
- package/dist/types.d.mts +23 -0
- package/dist/types.d.ts +23 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +7 -4
package/dist/index.d.mts
CHANGED
|
@@ -5,8 +5,9 @@ export { measureBundle } from "./bundle.mjs";
|
|
|
5
5
|
export { startTarget, isPortFree } from "./start.mjs";
|
|
6
6
|
export type { StartedTarget } from "./start.mjs";
|
|
7
7
|
export { runLoadPhase } from "./load/index.mjs";
|
|
8
|
-
export {
|
|
9
|
-
export {
|
|
8
|
+
export { runArtillery, packArtilleryReport, ARTILLERY_PINNED_VERSION } from "./load/artillery.mjs";
|
|
9
|
+
export type { RunArtilleryOpts } from "./load/artillery.mjs";
|
|
10
|
+
export { runAutocannon, AUTOCANNON_PINNED_VERSION } from "./load/autocannon.mjs";
|
|
10
11
|
export { parseAutocannonJson, parseArtilleryJson } from "./load/parse.mjs";
|
|
11
12
|
export { averageTargetResults, averageBuildMetrics, averageLoadMetrics } from "./average.mjs";
|
|
12
13
|
export { checkThresholds } from "./thresholds.mjs";
|
package/dist/index.d.ts
CHANGED
|
@@ -5,8 +5,9 @@ export { measureBundle } from './bundle';
|
|
|
5
5
|
export { startTarget, isPortFree } from './start';
|
|
6
6
|
export type { StartedTarget } from './start';
|
|
7
7
|
export { runLoadPhase } from './load';
|
|
8
|
-
export {
|
|
9
|
-
export {
|
|
8
|
+
export { runArtillery, packArtilleryReport, ARTILLERY_PINNED_VERSION } from './load/artillery';
|
|
9
|
+
export type { RunArtilleryOpts } from './load/artillery';
|
|
10
|
+
export { runAutocannon, AUTOCANNON_PINNED_VERSION } from './load/autocannon';
|
|
10
11
|
export { parseAutocannonJson, parseArtilleryJson } from './load/parse';
|
|
11
12
|
export { averageTargetResults, averageBuildMetrics, averageLoadMetrics } from './average';
|
|
12
13
|
export { checkThresholds } from './thresholds';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAClD,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAClD,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAC/F,YAAY,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAC7E,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AACvE,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAC1F,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,mBAAmB,SAAS,CAAC"}
|
package/dist/index.mjs
CHANGED
|
@@ -4,8 +4,8 @@ export { measureBuild } from "./build.mjs";
|
|
|
4
4
|
export { measureBundle } from "./bundle.mjs";
|
|
5
5
|
export { startTarget, isPortFree } from "./start.mjs";
|
|
6
6
|
export { runLoadPhase } from "./load/index.mjs";
|
|
7
|
-
export {
|
|
8
|
-
export {
|
|
7
|
+
export { runArtillery, packArtilleryReport, ARTILLERY_PINNED_VERSION } from "./load/artillery.mjs";
|
|
8
|
+
export { runAutocannon, AUTOCANNON_PINNED_VERSION } from "./load/autocannon.mjs";
|
|
9
9
|
export { parseAutocannonJson, parseArtilleryJson } from "./load/parse.mjs";
|
|
10
10
|
export { averageTargetResults, averageBuildMetrics, averageLoadMetrics } from "./average.mjs";
|
|
11
11
|
export { checkThresholds } from "./thresholds.mjs";
|
|
@@ -1,10 +1,41 @@
|
|
|
1
|
-
import type { ArtilleryResult } from "../types.mjs";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
import type { ArtilleryResult, ArtilleryScript, ArtillerySummary } from "../types.mjs";
|
|
2
|
+
export type { ArtilleryScript };
|
|
3
|
+
/** Pinned private runner surface — bump only with intentional adapter rewrite. */
|
|
4
|
+
export declare const ARTILLERY_PINNED_VERSION = "2.0.34";
|
|
5
|
+
export type RunArtilleryOpts = {
|
|
5
6
|
artifactsDir: string;
|
|
6
7
|
name: string;
|
|
7
8
|
cwd?: string;
|
|
8
9
|
/** Overrides `config.target` (needed when the suite picks a free port). */
|
|
9
10
|
targetUrl?: string;
|
|
10
|
-
}
|
|
11
|
+
} & ({
|
|
12
|
+
configPath: string;
|
|
13
|
+
script?: undefined;
|
|
14
|
+
} | {
|
|
15
|
+
script: ArtilleryScript;
|
|
16
|
+
configPath?: undefined;
|
|
17
|
+
});
|
|
18
|
+
type HistogramSketch = {
|
|
19
|
+
min: number;
|
|
20
|
+
max: number;
|
|
21
|
+
count: number;
|
|
22
|
+
sum: number;
|
|
23
|
+
getValueAtQuantile: (q: number) => number;
|
|
24
|
+
};
|
|
25
|
+
type PeriodMetrics = {
|
|
26
|
+
period?: string | number;
|
|
27
|
+
counters?: Record<string, number>;
|
|
28
|
+
rates?: Record<string, number | null | undefined>;
|
|
29
|
+
histograms?: Record<string, HistogramSketch>;
|
|
30
|
+
summaries?: Record<string, ArtillerySummary>;
|
|
31
|
+
firstMetricAt?: number;
|
|
32
|
+
lastMetricAt?: number;
|
|
33
|
+
};
|
|
34
|
+
type SummarizeHistogram = (h: HistogramSketch) => ArtillerySummary;
|
|
35
|
+
/** Build ArtilleryResult from in-process runner `done` + `stats` payloads. */
|
|
36
|
+
export declare function packArtilleryReport(aggregateRaw: PeriodMetrics, intermediatesRaw: PeriodMetrics[], summarizeHistogram: SummarizeHistogram): ArtilleryResult;
|
|
37
|
+
/**
|
|
38
|
+
* Run an Artillery script in-process via the pinned private core runner
|
|
39
|
+
* (`artillery@2.0.34` `dist/lib/core/runner.js`). No CLI / spawn.
|
|
40
|
+
*/
|
|
41
|
+
export declare function runArtillery(opts: RunArtilleryOpts): Promise<ArtilleryResult>;
|
package/dist/load/artillery.d.ts
CHANGED
|
@@ -1,11 +1,42 @@
|
|
|
1
|
-
import type { ArtilleryResult } from '../types';
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
import type { ArtilleryResult, ArtilleryScript, ArtillerySummary } from '../types';
|
|
2
|
+
export type { ArtilleryScript };
|
|
3
|
+
/** Pinned private runner surface — bump only with intentional adapter rewrite. */
|
|
4
|
+
export declare const ARTILLERY_PINNED_VERSION = "2.0.34";
|
|
5
|
+
export type RunArtilleryOpts = {
|
|
5
6
|
artifactsDir: string;
|
|
6
7
|
name: string;
|
|
7
8
|
cwd?: string;
|
|
8
9
|
/** Overrides `config.target` (needed when the suite picks a free port). */
|
|
9
10
|
targetUrl?: string;
|
|
10
|
-
}
|
|
11
|
+
} & ({
|
|
12
|
+
configPath: string;
|
|
13
|
+
script?: undefined;
|
|
14
|
+
} | {
|
|
15
|
+
script: ArtilleryScript;
|
|
16
|
+
configPath?: undefined;
|
|
17
|
+
});
|
|
18
|
+
type HistogramSketch = {
|
|
19
|
+
min: number;
|
|
20
|
+
max: number;
|
|
21
|
+
count: number;
|
|
22
|
+
sum: number;
|
|
23
|
+
getValueAtQuantile: (q: number) => number;
|
|
24
|
+
};
|
|
25
|
+
type PeriodMetrics = {
|
|
26
|
+
period?: string | number;
|
|
27
|
+
counters?: Record<string, number>;
|
|
28
|
+
rates?: Record<string, number | null | undefined>;
|
|
29
|
+
histograms?: Record<string, HistogramSketch>;
|
|
30
|
+
summaries?: Record<string, ArtillerySummary>;
|
|
31
|
+
firstMetricAt?: number;
|
|
32
|
+
lastMetricAt?: number;
|
|
33
|
+
};
|
|
34
|
+
type SummarizeHistogram = (h: HistogramSketch) => ArtillerySummary;
|
|
35
|
+
/** Build ArtilleryResult from in-process runner `done` + `stats` payloads. */
|
|
36
|
+
export declare function packArtilleryReport(aggregateRaw: PeriodMetrics, intermediatesRaw: PeriodMetrics[], summarizeHistogram: SummarizeHistogram): ArtilleryResult;
|
|
37
|
+
/**
|
|
38
|
+
* Run an Artillery script in-process via the pinned private core runner
|
|
39
|
+
* (`artillery@2.0.34` `dist/lib/core/runner.js`). No CLI / spawn.
|
|
40
|
+
*/
|
|
41
|
+
export declare function runArtillery(opts: RunArtilleryOpts): Promise<ArtilleryResult>;
|
|
11
42
|
//# sourceMappingURL=artillery.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"artillery.d.ts","sourceRoot":"","sources":["../../src/load/artillery.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"artillery.d.ts","sourceRoot":"","sources":["../../src/load/artillery.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAEnF,YAAY,EAAE,eAAe,EAAE,CAAC;AAEhC,kFAAkF;AAClF,eAAO,MAAM,wBAAwB,WAAW,CAAC;AAEjD,MAAM,MAAM,gBAAgB,GAAG;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,2EAA2E;IAC3E,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,CACA;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,SAAS,CAAA;CAAE,GAC1C;IAAE,MAAM,EAAE,eAAe,CAAC;IAAC,UAAU,CAAC,EAAE,SAAS,CAAA;CAAE,CACtD,CAAC;AAEF,KAAK,eAAe,GAAG;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,kBAAkB,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;CAC3C,CAAC;AAEF,KAAK,aAAa,GAAG;IACnB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;IAClD,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAC7C,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IAC7C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAQF,KAAK,kBAAkB,GAAG,CAAC,CAAC,EAAE,eAAe,KAAK,gBAAgB,CAAC;AAgGnE,8EAA8E;AAC9E,wBAAgB,mBAAmB,CACjC,YAAY,EAAE,aAAa,EAC3B,gBAAgB,EAAE,aAAa,EAAE,EACjC,kBAAkB,EAAE,kBAAkB,GACrC,eAAe,CAsBjB;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC,CAgEnF"}
|
package/dist/load/artillery.mjs
CHANGED
|
@@ -1,77 +1,138 @@
|
|
|
1
|
-
import { spawn } from "node:child_process";
|
|
2
1
|
import { createRequire } from "node:module";
|
|
3
|
-
import {
|
|
2
|
+
import { mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
4
3
|
import { dirname, join, resolve } from "pathe";
|
|
5
|
-
|
|
4
|
+
import { pathToFileURL } from "node:url";
|
|
5
|
+
|
|
6
|
+
export const ARTILLERY_PINNED_VERSION = "2.0.34";
|
|
7
|
+
function requireArtilleryPkg() {
|
|
6
8
|
try {
|
|
7
|
-
const
|
|
8
|
-
const
|
|
9
|
-
|
|
9
|
+
const req = createRequire(import.meta.url);
|
|
10
|
+
const pkgPath = req.resolve("artillery/package.json");
|
|
11
|
+
const pkg = JSON.parse(readFileSync(pkgPath, "utf8"));
|
|
12
|
+
return {
|
|
13
|
+
root: dirname(pkgPath),
|
|
14
|
+
version: pkg.version
|
|
15
|
+
};
|
|
10
16
|
} catch {
|
|
11
|
-
|
|
17
|
+
throw new Error(`@untestutils/perf: artillery@${ARTILLERY_PINNED_VERSION} is required for load.artillery (optional peer). Install it in the project.`);
|
|
12
18
|
}
|
|
13
19
|
}
|
|
14
|
-
function
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
}
|
|
46
|
-
|
|
20
|
+
function assertPinnedVersion(version) {
|
|
21
|
+
if (version !== ARTILLERY_PINNED_VERSION) {
|
|
22
|
+
throw new Error(`@untestutils/perf: artillery@${ARTILLERY_PINNED_VERSION} required (private runner lock); found ${version}`);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
async function importArtilleryCore(root) {
|
|
26
|
+
const core = (rel) => pathToFileURL(join(root, rel)).href;
|
|
27
|
+
const [{ runner }, { summarizeHistogram }, { updateGlobalObject }, util] = await Promise.all([
|
|
28
|
+
import(core("dist/lib/core/runner.js")),
|
|
29
|
+
import(core("dist/lib/core/ssms.js")),
|
|
30
|
+
import(core("dist/lib/core/update-global-object.js")),
|
|
31
|
+
import(core("dist/lib/util.js"))
|
|
32
|
+
]);
|
|
33
|
+
return {
|
|
34
|
+
runner,
|
|
35
|
+
summarizeHistogram,
|
|
36
|
+
updateGlobalObject,
|
|
37
|
+
readScript: util.readScript,
|
|
38
|
+
parseScript: util.parseScript,
|
|
39
|
+
checkConfig: util.checkConfig
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
function applySummaries(period, summarizeHistogram) {
|
|
43
|
+
const summaries = { ...period.summaries ?? {} };
|
|
44
|
+
for (const [name, sketch] of Object.entries(period.histograms ?? {})) {
|
|
45
|
+
if (sketch && typeof sketch.getValueAtQuantile === "function") {
|
|
46
|
+
summaries[name] = summarizeHistogram(sketch);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return {
|
|
50
|
+
counters: period.counters ?? {},
|
|
51
|
+
rates: period.rates ?? {},
|
|
52
|
+
summaries,
|
|
53
|
+
|
|
54
|
+
histograms: summaries,
|
|
55
|
+
period: period.period !== undefined && period.period !== null ? String(period.period) : undefined,
|
|
56
|
+
firstMetricAt: period.firstMetricAt,
|
|
57
|
+
lastMetricAt: period.lastMetricAt
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
export function packArtilleryReport(aggregateRaw, intermediatesRaw, summarizeHistogram) {
|
|
62
|
+
const aggregate = applySummaries(aggregateRaw, summarizeHistogram);
|
|
63
|
+
return {
|
|
64
|
+
aggregate: {
|
|
65
|
+
counters: aggregate.counters,
|
|
66
|
+
rates: aggregate.rates,
|
|
67
|
+
firstMetricAt: aggregate.firstMetricAt ?? 0,
|
|
68
|
+
lastMetricAt: aggregate.lastMetricAt ?? 0,
|
|
69
|
+
summaries: aggregate.summaries,
|
|
70
|
+
histograms: aggregate.histograms
|
|
71
|
+
},
|
|
72
|
+
intermediate: intermediatesRaw.map((ix) => {
|
|
73
|
+
const packed = applySummaries(ix, summarizeHistogram);
|
|
74
|
+
return {
|
|
75
|
+
counters: packed.counters,
|
|
76
|
+
rates: packed.rates,
|
|
77
|
+
period: packed.period,
|
|
78
|
+
summaries: packed.summaries,
|
|
79
|
+
histograms: packed.histograms
|
|
80
|
+
};
|
|
81
|
+
})
|
|
82
|
+
};
|
|
47
83
|
}
|
|
48
84
|
|
|
49
85
|
export async function runArtillery(opts) {
|
|
86
|
+
const { root, version } = requireArtilleryPkg();
|
|
87
|
+
assertPinnedVersion(version);
|
|
50
88
|
mkdirSync(opts.artifactsDir, { recursive: true });
|
|
51
89
|
const outputFile = join(opts.artifactsDir, `artillery-${opts.name}.json`);
|
|
52
|
-
const
|
|
53
|
-
const
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
90
|
+
const { runner, summarizeHistogram, updateGlobalObject, readScript, parseScript, checkConfig } = await importArtilleryCore(root);
|
|
91
|
+
const target = opts.targetUrl?.replace(/\/$/, "");
|
|
92
|
+
let script;
|
|
93
|
+
if (opts.script) {
|
|
94
|
+
script = {
|
|
95
|
+
...opts.script,
|
|
96
|
+
config: {
|
|
97
|
+
...opts.script.config,
|
|
98
|
+
...target ? { target } : {}
|
|
99
|
+
}
|
|
100
|
+
};
|
|
101
|
+
} else {
|
|
102
|
+
const configPath = resolve(opts.configPath);
|
|
103
|
+
const raw = await readScript(configPath);
|
|
104
|
+
const parsed = await parseScript(raw);
|
|
105
|
+
script = await checkConfig(parsed, configPath, target ? { target } : {});
|
|
106
|
+
}
|
|
107
|
+
await updateGlobalObject({ version });
|
|
108
|
+
const intermediates = [];
|
|
109
|
+
const ee = await runner(script);
|
|
110
|
+
const aggregateRaw = await new Promise((resolvePromise, reject) => {
|
|
111
|
+
ee.on("stats", (stats) => {
|
|
112
|
+
intermediates.push(stats);
|
|
113
|
+
const line = String(stats.period ?? "");
|
|
114
|
+
if (line) console.log(` [artillery] period ${line}`);
|
|
115
|
+
});
|
|
116
|
+
ee.on("phaseStarted", (spec) => {
|
|
117
|
+
const name = spec?.name;
|
|
118
|
+
console.log(` [artillery] Phase started${name ? `: ${name}` : ""}`);
|
|
119
|
+
});
|
|
120
|
+
ee.on("done", (stats) => {
|
|
121
|
+
resolvePromise(stats);
|
|
122
|
+
});
|
|
123
|
+
ee.on("error", (err) => {
|
|
124
|
+
reject(err instanceof Error ? err : new Error(String(err)));
|
|
125
|
+
});
|
|
126
|
+
try {
|
|
127
|
+
ee.run();
|
|
128
|
+
} catch (err) {
|
|
129
|
+
reject(err);
|
|
130
|
+
}
|
|
76
131
|
});
|
|
132
|
+
try {
|
|
133
|
+
await ee.stop();
|
|
134
|
+
} catch {}
|
|
135
|
+
const result = packArtilleryReport(aggregateRaw, intermediates, summarizeHistogram);
|
|
136
|
+
writeFileSync(outputFile, JSON.stringify(result, null, 2));
|
|
137
|
+
return result;
|
|
77
138
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { AutocannonResult } from "../types.mjs";
|
|
2
|
-
|
|
2
|
+
export declare const AUTOCANNON_PINNED_VERSION = "8.0.0";
|
|
3
|
+
/** Programmatic peer only (`autocannon()`). No CLI / npx. */
|
|
3
4
|
export declare function runAutocannon(opts: {
|
|
4
5
|
url: string;
|
|
5
6
|
connections?: number;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { AutocannonResult } from '../types';
|
|
2
|
-
|
|
2
|
+
export declare const AUTOCANNON_PINNED_VERSION = "8.0.0";
|
|
3
|
+
/** Programmatic peer only (`autocannon()`). No CLI / npx. */
|
|
3
4
|
export declare function runAutocannon(opts: {
|
|
4
5
|
url: string;
|
|
5
6
|
connections?: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"autocannon.d.ts","sourceRoot":"","sources":["../../src/load/autocannon.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"autocannon.d.ts","sourceRoot":"","sources":["../../src/load/autocannon.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAEjD,eAAO,MAAM,yBAAyB,UAAU,CAAC;AAuBjD,6DAA6D;AAC7D,wBAAsB,aAAa,CAAC,IAAI,EAAE;IACxC,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;CACd,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA+B5B"}
|
package/dist/load/autocannon.mjs
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { spawn } from "node:child_process";
|
|
2
1
|
import { mkdirSync, writeFileSync } from "node:fs";
|
|
3
2
|
import { join } from "pathe";
|
|
3
|
+
export const AUTOCANNON_PINNED_VERSION = "8.0.0";
|
|
4
4
|
function normalize(raw) {
|
|
5
5
|
return {
|
|
6
6
|
requests: {
|
|
7
7
|
average: raw.requests.average,
|
|
8
8
|
mean: raw.requests.mean ?? raw.requests.average,
|
|
9
|
-
total: raw.requests.total ?? raw.
|
|
9
|
+
total: raw.requests.total ?? raw.requests.sent ?? 0
|
|
10
10
|
},
|
|
11
11
|
latency: {
|
|
12
12
|
average: raw.latency.average,
|
|
@@ -21,76 +21,24 @@ function normalize(raw) {
|
|
|
21
21
|
errors: raw.errors ?? 0
|
|
22
22
|
};
|
|
23
23
|
}
|
|
24
|
-
async function viaApi(opts) {
|
|
25
|
-
try {
|
|
26
|
-
// @ts-expect-error optional peer
|
|
27
|
-
const mod = await import("autocannon");
|
|
28
|
-
const run = mod.default ?? mod;
|
|
29
|
-
const raw = await run({
|
|
30
|
-
url: opts.url,
|
|
31
|
-
connections: opts.connections,
|
|
32
|
-
duration: opts.duration,
|
|
33
|
-
renderProgressBar: false,
|
|
34
|
-
renderResultsTable: false,
|
|
35
|
-
renderLatencyTable: false
|
|
36
|
-
});
|
|
37
|
-
return normalize(raw);
|
|
38
|
-
} catch {
|
|
39
|
-
return null;
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
function viaNpx(opts) {
|
|
43
|
-
return new Promise((resolve, reject) => {
|
|
44
|
-
const child = spawn("npx", [
|
|
45
|
-
"--yes",
|
|
46
|
-
"autocannon",
|
|
47
|
-
"-c",
|
|
48
|
-
String(opts.connections),
|
|
49
|
-
"-d",
|
|
50
|
-
String(opts.duration),
|
|
51
|
-
"-j",
|
|
52
|
-
opts.url
|
|
53
|
-
], { stdio: [
|
|
54
|
-
"ignore",
|
|
55
|
-
"pipe",
|
|
56
|
-
"pipe"
|
|
57
|
-
] });
|
|
58
|
-
let stdout = "";
|
|
59
|
-
let stderr = "";
|
|
60
|
-
child.stdout?.on("data", (c) => {
|
|
61
|
-
stdout += c.toString();
|
|
62
|
-
});
|
|
63
|
-
child.stderr?.on("data", (c) => {
|
|
64
|
-
stderr += c.toString();
|
|
65
|
-
});
|
|
66
|
-
child.on("error", reject);
|
|
67
|
-
child.on("close", (code) => {
|
|
68
|
-
if (code !== 0 && !stdout) {
|
|
69
|
-
reject(new Error(`autocannon exited ${code}: ${stderr.slice(0, 400)}`));
|
|
70
|
-
return;
|
|
71
|
-
}
|
|
72
|
-
try {
|
|
73
|
-
resolve(normalize(JSON.parse(stdout)));
|
|
74
|
-
} catch (e) {
|
|
75
|
-
reject(e);
|
|
76
|
-
}
|
|
77
|
-
});
|
|
78
|
-
});
|
|
79
|
-
}
|
|
80
24
|
|
|
81
25
|
export async function runAutocannon(opts) {
|
|
82
26
|
const connections = opts.connections ?? 10;
|
|
83
27
|
const duration = opts.durationSec ?? 10;
|
|
84
28
|
mkdirSync(opts.artifactsDir, { recursive: true });
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
}
|
|
29
|
+
let run;
|
|
30
|
+
try {
|
|
31
|
+
const mod = await import("autocannon");
|
|
32
|
+
run = mod.default;
|
|
33
|
+
} catch {
|
|
34
|
+
throw new Error(`@untestutils/perf: autocannon@${AUTOCANNON_PINNED_VERSION} is required for load.autocannon (optional peer). Install it in the project.`);
|
|
35
|
+
}
|
|
36
|
+
const raw = await run({
|
|
90
37
|
url: opts.url,
|
|
91
38
|
connections,
|
|
92
39
|
duration
|
|
93
40
|
});
|
|
41
|
+
const result = normalize(raw);
|
|
94
42
|
writeFileSync(join(opts.artifactsDir, `autocannon-${opts.name}.json`), JSON.stringify(result, null, 2));
|
|
95
43
|
return result;
|
|
96
44
|
}
|
package/dist/load/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/load/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/load/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,KAAK,EAAqC,WAAW,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAI3F,wBAAsB,YAAY,CAAC,IAAI,EAAE;IACvC,MAAM,EAAE,UAAU,CAAC;IACnB,OAAO,EAAE,aAAa,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;CACtB,GAAG,OAAO,CAAC,WAAW,CAAC,CAuEvB"}
|
package/dist/load/index.mjs
CHANGED
|
@@ -3,8 +3,7 @@ import { runAutocannon } from "./autocannon.mjs";
|
|
|
3
3
|
export async function runLoadPhase(opts) {
|
|
4
4
|
const { target, started, artifactsDir } = opts;
|
|
5
5
|
const load = target.load;
|
|
6
|
-
|
|
7
|
-
if (!load) return base;
|
|
6
|
+
if (!load) return started.takeProcessMetrics();
|
|
8
7
|
let autocannon;
|
|
9
8
|
if (load.autocannon) {
|
|
10
9
|
const ac = load.autocannon === true ? {} : load.autocannon;
|
|
@@ -18,21 +17,34 @@ export async function runLoadPhase(opts) {
|
|
|
18
17
|
});
|
|
19
18
|
}
|
|
20
19
|
let artillery;
|
|
21
|
-
if (load.artillery
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
20
|
+
if (load.artillery) {
|
|
21
|
+
if ("script" in load.artillery) {
|
|
22
|
+
console.log(" → artillery inline script");
|
|
23
|
+
artillery = await runArtillery({
|
|
24
|
+
script: load.artillery.script,
|
|
25
|
+
artifactsDir,
|
|
26
|
+
name: target.id,
|
|
27
|
+
cwd: target.root,
|
|
28
|
+
targetUrl: started.url
|
|
29
|
+
});
|
|
30
|
+
} else {
|
|
31
|
+
console.log(` → artillery ${load.artillery.config}`);
|
|
32
|
+
artillery = await runArtillery({
|
|
33
|
+
configPath: load.artillery.config,
|
|
34
|
+
artifactsDir,
|
|
35
|
+
name: target.id,
|
|
36
|
+
cwd: target.root,
|
|
37
|
+
targetUrl: started.url
|
|
38
|
+
});
|
|
39
|
+
}
|
|
30
40
|
}
|
|
41
|
+
|
|
42
|
+
const processMetrics = started.takeProcessMetrics();
|
|
31
43
|
const summary = artillery?.aggregate;
|
|
32
44
|
const durationSec = summary ? (summary.lastMetricAt - summary.firstMetricAt) / 1e3 : undefined;
|
|
33
45
|
const rt = summary?.summaries["http.response_time"];
|
|
34
46
|
return {
|
|
35
|
-
...
|
|
47
|
+
...processMetrics,
|
|
36
48
|
durationSec,
|
|
37
49
|
responseTimeAvg: rt?.mean ?? autocannon?.latency.average,
|
|
38
50
|
responseTimeMin: rt?.min ?? autocannon?.latency.min,
|
package/dist/start.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../src/start.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE1D,MAAM,MAAM,aAAa,GAAG;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,kBAAkB,EAAE,MAAM,cAAc,CAAC;CAC1C,CAAC;AAEF,2DAA2D;AAC3D,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,MAAsB,GAAG,OAAO,CAAC,OAAO,CAAC,CAQvF;AAED,wBAAsB,WAAW,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,aAAa,CAAC,
|
|
1
|
+
{"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../src/start.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE1D,MAAM,MAAM,aAAa,GAAG;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,kBAAkB,EAAE,MAAM,cAAc,CAAC;CAC1C,CAAC;AAEF,2DAA2D;AAC3D,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,MAAsB,GAAG,OAAO,CAAC,OAAO,CAAC,CAQvF;AAED,wBAAsB,WAAW,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,aAAa,CAAC,CA2F5E"}
|
package/dist/start.mjs
CHANGED
|
@@ -51,11 +51,6 @@ export async function startTarget(target) {
|
|
|
51
51
|
});
|
|
52
52
|
let monitorAcc;
|
|
53
53
|
let stopMonitor;
|
|
54
|
-
if (child.pid) {
|
|
55
|
-
const m = startProcessMonitor(child.pid);
|
|
56
|
-
monitorAcc = m.acc;
|
|
57
|
-
stopMonitor = m.stop;
|
|
58
|
-
}
|
|
59
54
|
const empty = {
|
|
60
55
|
maxMemoryMb: 0,
|
|
61
56
|
minMemoryMb: 0,
|
|
@@ -82,10 +77,16 @@ export async function startTarget(target) {
|
|
|
82
77
|
});
|
|
83
78
|
});
|
|
84
79
|
} catch (err) {
|
|
85
|
-
stopMonitor?.();
|
|
86
80
|
await killChild(child);
|
|
87
81
|
throw err;
|
|
88
82
|
}
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
if (child.pid) {
|
|
86
|
+
const m = startProcessMonitor(child.pid);
|
|
87
|
+
monitorAcc = m.acc;
|
|
88
|
+
stopMonitor = m.stop;
|
|
89
|
+
}
|
|
89
90
|
return {
|
|
90
91
|
url,
|
|
91
92
|
port,
|
package/dist/types.d.mts
CHANGED
|
@@ -48,6 +48,7 @@ export type ArtillerySummary = {
|
|
|
48
48
|
p99: number;
|
|
49
49
|
p999: number;
|
|
50
50
|
};
|
|
51
|
+
/** Artillery report JSON (same shape as CLI `--output`; filled from in-process SSMS). */
|
|
51
52
|
export type ArtilleryResult = {
|
|
52
53
|
aggregate: {
|
|
53
54
|
counters: Record<string, number | undefined>;
|
|
@@ -65,6 +66,22 @@ export type ArtilleryResult = {
|
|
|
65
66
|
histograms?: Record<string, ArtillerySummary>;
|
|
66
67
|
}>;
|
|
67
68
|
};
|
|
69
|
+
/**
|
|
70
|
+
* Inline Artillery test script.
|
|
71
|
+
* Prefer `import type { TestScript } from 'artillery'` at call sites when the
|
|
72
|
+
* optional peer is installed — assignability holds for normal scripts.
|
|
73
|
+
*/
|
|
74
|
+
export type ArtilleryScript = {
|
|
75
|
+
config?: {
|
|
76
|
+
target?: string;
|
|
77
|
+
phases?: Array<Record<string, unknown>>;
|
|
78
|
+
[key: string]: unknown;
|
|
79
|
+
};
|
|
80
|
+
scenarios?: Array<Record<string, unknown>>;
|
|
81
|
+
before?: Record<string, unknown>;
|
|
82
|
+
after?: Record<string, unknown>;
|
|
83
|
+
[key: string]: unknown;
|
|
84
|
+
};
|
|
68
85
|
export type BuildMetrics = ProcessMetrics & {
|
|
69
86
|
buildTimeSec: number;
|
|
70
87
|
bundle?: BundleSize;
|
|
@@ -112,8 +129,14 @@ export type PerfTargetLoad = {
|
|
|
112
129
|
connections?: number;
|
|
113
130
|
durationSec?: number;
|
|
114
131
|
};
|
|
132
|
+
/**
|
|
133
|
+
* Artillery load. Prefer a file path, or pass an inline script object
|
|
134
|
+
* (type as `import('artillery').TestScript` when the peer is installed).
|
|
135
|
+
*/
|
|
115
136
|
artillery?: {
|
|
116
137
|
config: string;
|
|
138
|
+
} | {
|
|
139
|
+
script: ArtilleryScript;
|
|
117
140
|
};
|
|
118
141
|
};
|
|
119
142
|
export type PerfTargetBundle = {
|
package/dist/types.d.ts
CHANGED
|
@@ -48,6 +48,7 @@ export type ArtillerySummary = {
|
|
|
48
48
|
p99: number;
|
|
49
49
|
p999: number;
|
|
50
50
|
};
|
|
51
|
+
/** Artillery report JSON (same shape as CLI `--output`; filled from in-process SSMS). */
|
|
51
52
|
export type ArtilleryResult = {
|
|
52
53
|
aggregate: {
|
|
53
54
|
counters: Record<string, number | undefined>;
|
|
@@ -65,6 +66,22 @@ export type ArtilleryResult = {
|
|
|
65
66
|
histograms?: Record<string, ArtillerySummary>;
|
|
66
67
|
}>;
|
|
67
68
|
};
|
|
69
|
+
/**
|
|
70
|
+
* Inline Artillery test script.
|
|
71
|
+
* Prefer `import type { TestScript } from 'artillery'` at call sites when the
|
|
72
|
+
* optional peer is installed — assignability holds for normal scripts.
|
|
73
|
+
*/
|
|
74
|
+
export type ArtilleryScript = {
|
|
75
|
+
config?: {
|
|
76
|
+
target?: string;
|
|
77
|
+
phases?: Array<Record<string, unknown>>;
|
|
78
|
+
[key: string]: unknown;
|
|
79
|
+
};
|
|
80
|
+
scenarios?: Array<Record<string, unknown>>;
|
|
81
|
+
before?: Record<string, unknown>;
|
|
82
|
+
after?: Record<string, unknown>;
|
|
83
|
+
[key: string]: unknown;
|
|
84
|
+
};
|
|
68
85
|
export type BuildMetrics = ProcessMetrics & {
|
|
69
86
|
buildTimeSec: number;
|
|
70
87
|
bundle?: BundleSize;
|
|
@@ -112,8 +129,14 @@ export type PerfTargetLoad = {
|
|
|
112
129
|
connections?: number;
|
|
113
130
|
durationSec?: number;
|
|
114
131
|
};
|
|
132
|
+
/**
|
|
133
|
+
* Artillery load. Prefer a file path, or pass an inline script object
|
|
134
|
+
* (type as `import('artillery').TestScript` when the peer is installed).
|
|
135
|
+
*/
|
|
115
136
|
artillery?: {
|
|
116
137
|
config: string;
|
|
138
|
+
} | {
|
|
139
|
+
script: ArtilleryScript;
|
|
117
140
|
};
|
|
118
141
|
};
|
|
119
142
|
export type PerfTargetBundle = {
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC;AAErD,MAAM,MAAM,UAAU,GAAG;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,qCAAqC;IACrC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC/B,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3D,OAAO,EAAE;QACP,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,GAAG,EAAE,MAAM,CAAC;QACZ,GAAG,EAAE,MAAM,CAAC;QACZ,GAAG,EAAE,MAAM,CAAC;QACZ,KAAK,EAAE,MAAM,CAAC;QACd,GAAG,EAAE,MAAM,CAAC;KACb,CAAC;IACF,UAAU,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAChC,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,SAAS,EAAE;QACT,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;QAC7C,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;QAC1C,aAAa,EAAE,MAAM,CAAC;QACtB,YAAY,EAAE,MAAM,CAAC;QACrB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;QAC5C,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;KAC9C,CAAC;IACF,YAAY,CAAC,EAAE,KAAK,CAAC;QACnB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACjC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;QACjD,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;QAC7C,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;KAC/C,CAAC,CAAC;CACJ,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,cAAc,GAAG;IAC1C,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,UAAU,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG,cAAc,GAAG;IACzC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,SAAS,CAAC,EAAE,eAAe,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,YAAY,CAAC;IACpB,IAAI,CAAC,EAAE,WAAW,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG;IACxC,6DAA6D;IAC7D,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;CACvC,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,2EAA2E;IAC3E,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,wEAAwE;IACxE,UAAU,CAAC,EAAE,OAAO,GAAG;QAAE,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACtE,SAAS,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@untestutils/perf",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.3",
|
|
4
4
|
"description": "Build + load performance harness for recipe/fixture targets",
|
|
5
5
|
"homepage": "https://s00d.github.io/untestutils/",
|
|
6
6
|
"license": "MIT",
|
|
@@ -29,17 +29,20 @@
|
|
|
29
29
|
},
|
|
30
30
|
"dependencies": {
|
|
31
31
|
"pathe": "^2.0.3",
|
|
32
|
-
"@untestutils/core": "0.6.
|
|
32
|
+
"@untestutils/core": "0.6.3"
|
|
33
33
|
},
|
|
34
34
|
"devDependencies": {
|
|
35
|
+
"@types/autocannon": "7.12.7",
|
|
35
36
|
"@types/node": "^26.6.1",
|
|
37
|
+
"artillery": "2.0.34",
|
|
38
|
+
"autocannon": "8.0.0",
|
|
36
39
|
"obuild": "^0.4.40",
|
|
37
40
|
"publint": "^0.3.24",
|
|
38
41
|
"typescript": "^6.0.3"
|
|
39
42
|
},
|
|
40
43
|
"peerDependencies": {
|
|
41
|
-
"artillery": "
|
|
42
|
-
"autocannon": "
|
|
44
|
+
"artillery": "2.0.34",
|
|
45
|
+
"autocannon": "8.0.0"
|
|
43
46
|
},
|
|
44
47
|
"peerDependenciesMeta": {
|
|
45
48
|
"autocannon": {
|