dripfeed 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,187 @@
1
+ import { z } from "zod";
2
+
3
+ //#region src/core/types.d.ts
4
+ interface RequestResult {
5
+ timestamp: string;
6
+ endpoint: string;
7
+ method: string;
8
+ url: string;
9
+ status: number | null;
10
+ duration_ms: number;
11
+ response_body: string | null;
12
+ error: string | null;
13
+ }
14
+ interface EndpointConfig {
15
+ name: string;
16
+ url: string;
17
+ method?: string;
18
+ headers?: Record<string, string>;
19
+ body?: unknown;
20
+ timeout?: string;
21
+ weight?: number;
22
+ }
23
+ interface ThresholdConfig {
24
+ error_rate?: string;
25
+ p50?: string;
26
+ p95?: string;
27
+ p99?: string;
28
+ max?: string;
29
+ }
30
+ interface DripfeedConfig {
31
+ interval?: string;
32
+ duration?: string;
33
+ timeout?: string;
34
+ storage?: 'sqlite' | 'json' | 'memory';
35
+ db?: string;
36
+ rotation?: 'weighted-random' | 'round-robin' | 'sequential';
37
+ headers?: Record<string, string>;
38
+ endpoints: EndpointConfig[];
39
+ thresholds?: ThresholdConfig;
40
+ }
41
+ /** Check if an HTTP status code represents a successful response */
42
+ declare const isSuccess: (status: number | null) => boolean;
43
+ interface EndpointStats {
44
+ name: string;
45
+ requests: number;
46
+ avg_ms: number;
47
+ p95_ms: number;
48
+ error_count: number;
49
+ }
50
+ interface ErrorGroup {
51
+ endpoint: string;
52
+ status: number | null;
53
+ count: number;
54
+ sample_body: string | null;
55
+ }
56
+ interface ThresholdResult {
57
+ name: string;
58
+ target: string;
59
+ actual: string;
60
+ passed: boolean;
61
+ }
62
+ interface LatencyStats {
63
+ min: number;
64
+ avg: number;
65
+ p50: number;
66
+ p95: number;
67
+ p99: number;
68
+ max: number;
69
+ }
70
+ interface SoakStats {
71
+ duration_s: number;
72
+ total_requests: number;
73
+ success_count: number;
74
+ failure_count: number;
75
+ uptime_pct: number;
76
+ latency: LatencyStats;
77
+ status_codes: Record<number, number>;
78
+ endpoints: EndpointStats[];
79
+ errors: ErrorGroup[];
80
+ thresholds?: ThresholdResult[];
81
+ }
82
+ interface SoakTestHandle {
83
+ start: () => Promise<void>;
84
+ stop: () => Promise<SoakStats>;
85
+ run: (opts?: {
86
+ duration?: string;
87
+ }) => Promise<SoakStats>;
88
+ }
89
+ //#endregion
90
+ //#region src/adapters/reporters/interface.d.ts
91
+ interface Reporter {
92
+ onRequest(result: RequestResult, counts: {
93
+ ok: number;
94
+ fail: number;
95
+ }): void;
96
+ onComplete(stats: SoakStats): void;
97
+ }
98
+ //#endregion
99
+ //#region src/adapters/reporters/console.d.ts
100
+ declare const createConsoleReporter: () => Reporter;
101
+ //#endregion
102
+ //#region src/adapters/reporters/json.d.ts
103
+ declare const createJsonReporter: (outputPath?: string) => Reporter;
104
+ //#endregion
105
+ //#region src/adapters/reporters/markdown.d.ts
106
+ declare const createMarkdownReporter: (outputPath?: string) => Reporter;
107
+ //#endregion
108
+ //#region src/adapters/storage/interface.d.ts
109
+ interface StorageAdapter {
110
+ init(): Promise<void>;
111
+ record(result: RequestResult): Promise<void>;
112
+ getAll(): Promise<RequestResult[]>;
113
+ close(): Promise<void>;
114
+ }
115
+ //#endregion
116
+ //#region src/adapters/storage/json.d.ts
117
+ declare const createJsonStorage: (filePath: string) => StorageAdapter;
118
+ //#endregion
119
+ //#region src/adapters/storage/memory.d.ts
120
+ declare const createMemoryStorage: () => StorageAdapter;
121
+ //#endregion
122
+ //#region src/adapters/storage/sqlite.d.ts
123
+ declare const createSqliteStorage: (dbPath: string) => StorageAdapter;
124
+ //#endregion
125
+ //#region src/adapters/storage/index.d.ts
126
+ declare const createStorage: (config: DripfeedConfig) => StorageAdapter;
127
+ //#endregion
128
+ //#region src/core/config.d.ts
129
+ declare const configSchema: z.ZodObject<{
130
+ interval: z.ZodDefault<z.ZodString>;
131
+ duration: z.ZodOptional<z.ZodString>;
132
+ timeout: z.ZodDefault<z.ZodString>;
133
+ storage: z.ZodDefault<z.ZodEnum<{
134
+ sqlite: "sqlite";
135
+ json: "json";
136
+ memory: "memory";
137
+ }>>;
138
+ db: z.ZodOptional<z.ZodString>;
139
+ rotation: z.ZodDefault<z.ZodEnum<{
140
+ "weighted-random": "weighted-random";
141
+ "round-robin": "round-robin";
142
+ sequential: "sequential";
143
+ }>>;
144
+ headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
145
+ endpoints: z.ZodArray<z.ZodObject<{
146
+ name: z.ZodString;
147
+ url: z.ZodString;
148
+ method: z.ZodDefault<z.ZodString>;
149
+ headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
150
+ body: z.ZodOptional<z.ZodUnknown>;
151
+ timeout: z.ZodOptional<z.ZodString>;
152
+ weight: z.ZodDefault<z.ZodNumber>;
153
+ }, z.core.$strip>>;
154
+ thresholds: z.ZodOptional<z.ZodObject<{
155
+ error_rate: z.ZodOptional<z.ZodString>;
156
+ p50: z.ZodOptional<z.ZodString>;
157
+ p95: z.ZodOptional<z.ZodString>;
158
+ p99: z.ZodOptional<z.ZodString>;
159
+ max: z.ZodOptional<z.ZodString>;
160
+ }, z.core.$strip>>;
161
+ }, z.core.$strip>;
162
+ type ParsedConfig = z.infer<typeof configSchema>;
163
+ /** Parse and validate a raw config object into a fully-typed ParsedConfig with defaults applied.
164
+ * Use this when creating a soak test programmatically without a config file. */
165
+ declare const parseConfig: (raw: unknown) => ParsedConfig;
166
+ declare const loadDripfeedConfig: (overrides?: Partial<ParsedConfig>) => Promise<ParsedConfig>;
167
+ //#endregion
168
+ //#region src/core/runner.d.ts
169
+ declare const createSoakTest: (config: ParsedConfig, reporters?: Reporter[]) => SoakTestHandle;
170
+ //#endregion
171
+ //#region src/utils/duration.d.ts
172
+ declare const parseDuration: (input: string) => number;
173
+ //#endregion
174
+ //#region src/utils/http.d.ts
175
+ declare const timedFetch: (endpoint: EndpointConfig, globalHeaders?: Record<string, string>, timeout?: string) => Promise<RequestResult>;
176
+ //#endregion
177
+ //#region src/utils/runtime.d.ts
178
+ declare const isBun: boolean;
179
+ declare const isDeno: boolean;
180
+ declare const isNode: boolean;
181
+ //#endregion
182
+ //#region src/utils/stats.d.ts
183
+ declare const percentile: (sorted: number[], p: number) => number;
184
+ declare const computeStats: (results: RequestResult[], startTime: Date, thresholds?: ThresholdConfig, endTime?: Date) => SoakStats;
185
+ //#endregion
186
+ export { type DripfeedConfig, type EndpointConfig, type EndpointStats, type ErrorGroup, type LatencyStats, type ParsedConfig, type Reporter, type RequestResult, type SoakStats, type SoakTestHandle, type StorageAdapter, type ThresholdConfig, type ThresholdResult, computeStats, configSchema, createConsoleReporter, createJsonReporter, createJsonStorage, createMarkdownReporter, createMemoryStorage, createSoakTest, createSqliteStorage, createStorage, isBun, isDeno, isNode, isSuccess, loadDripfeedConfig, parseConfig, parseDuration, percentile, timedFetch };
187
+ //# sourceMappingURL=index.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../src/core/types.ts","../src/adapters/reporters/interface.ts","../src/adapters/reporters/console.ts","../src/adapters/reporters/json.ts","../src/adapters/reporters/markdown.ts","../src/adapters/storage/interface.ts","../src/adapters/storage/json.ts","../src/adapters/storage/memory.ts","../src/adapters/storage/sqlite.ts","../src/adapters/storage/index.ts","../src/core/config.ts","../src/core/runner.ts","../src/utils/duration.ts","../src/utils/http.ts","../src/utils/runtime.ts","../src/utils/stats.ts"],"mappings":"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"}
package/dist/index.mjs ADDED
@@ -0,0 +1,2 @@
1
+ import { _ as createJsonReporter, a as parseDuration, c as parseConfig, d as isBun, f as isDeno, g as createMarkdownReporter, h as createJsonStorage, i as timedFetch, l as createStorage, m as createMemoryStorage, n as computeStats, o as configSchema, p as isNode, r as percentile, s as loadDripfeedConfig, t as createSoakTest, u as createSqliteStorage, v as createConsoleReporter, y as isSuccess } from "./runner-ByEGj869.mjs";
2
+ export { computeStats, configSchema, createConsoleReporter, createJsonReporter, createJsonStorage, createMarkdownReporter, createMemoryStorage, createSoakTest, createSqliteStorage, createStorage, isBun, isDeno, isNode, isSuccess, loadDripfeedConfig, parseConfig, parseDuration, percentile, timedFetch };