@crvy/rprtr 0.1.4 → 0.2.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/CHANGELOG.md +66 -0
- package/README.md +8 -7
- package/dist/{chunk-KLGJSEKV.js → chunk-473CWZ4V.js} +539 -130
- package/dist/{chunk-WRMHUY5A.js → chunk-HAFWYUNO.js} +181 -130
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +6 -4
- package/dist/index.css +26 -0
- package/dist/index.js +300 -79
- package/dist/offline-reports.d.ts +4 -0
- package/dist/offline-reports.d.ts.map +1 -1
- package/dist/report-state.d.ts +3 -1
- package/dist/report-state.d.ts.map +1 -1
- package/dist/reporter-utils.d.ts +0 -1
- package/dist/reporter-utils.d.ts.map +1 -1
- package/dist/reporter.cjs +186 -134
- package/dist/reporter.d.ts +1 -1
- package/dist/reporter.d.ts.map +1 -1
- package/dist/reporter.js +8 -6
- package/dist/schemas/http.d.ts +44 -0
- package/dist/schemas/http.d.ts.map +1 -0
- package/dist/schemas.d.ts +25 -6
- package/dist/schemas.d.ts.map +1 -1
- package/dist/server/app.d.ts +8 -1
- package/dist/server/app.d.ts.map +1 -1
- package/dist/server/handlers.d.ts +6 -0
- package/dist/server/handlers.d.ts.map +1 -1
- package/dist/server/playwright-config.d.ts +2 -0
- package/dist/server/playwright-config.d.ts.map +1 -0
- package/dist/server/report-persistence.d.ts +27 -0
- package/dist/server/report-persistence.d.ts.map +1 -0
- package/dist/server/routes-context.d.ts +13 -0
- package/dist/server/routes-context.d.ts.map +1 -0
- package/dist/server/routes.d.ts +6 -1
- package/dist/server/routes.d.ts.map +1 -1
- package/dist/server/run-controller.d.ts +87 -0
- package/dist/server/run-controller.d.ts.map +1 -0
- package/dist/server/run-routes.d.ts +3 -0
- package/dist/server/run-routes.d.ts.map +1 -0
- package/dist/server/shutdown.d.ts +17 -0
- package/dist/server/shutdown.d.ts.map +1 -0
- package/dist/server.cjs +733 -276
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +2 -2
- package/dist/types.d.ts +6 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +6 -5
package/dist/schemas.d.ts
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
+
export * from './schemas/http.ts';
|
|
2
3
|
export declare const LocationSchema: z.ZodObject<{
|
|
3
4
|
file: z.ZodString;
|
|
4
5
|
line: z.ZodNumber;
|
|
6
|
+
column: z.ZodOptional<z.ZodNumber>;
|
|
5
7
|
}, z.core.$strip>;
|
|
6
8
|
export type Location = z.infer<typeof LocationSchema>;
|
|
7
9
|
export declare const VisualSourceSchema: z.ZodEnum<{
|
|
@@ -147,6 +149,7 @@ export declare const TestDataSchema: z.ZodObject<{
|
|
|
147
149
|
location: z.ZodOptional<z.ZodObject<{
|
|
148
150
|
file: z.ZodString;
|
|
149
151
|
line: z.ZodNumber;
|
|
152
|
+
column: z.ZodOptional<z.ZodNumber>;
|
|
150
153
|
}, z.core.$strip>>;
|
|
151
154
|
}, z.core.$strip>;
|
|
152
155
|
export type TestData = z.infer<typeof TestDataSchema>;
|
|
@@ -208,6 +211,7 @@ export declare const CrvyRprtrTestSchema: z.ZodObject<{
|
|
|
208
211
|
location: z.ZodOptional<z.ZodObject<{
|
|
209
212
|
file: z.ZodString;
|
|
210
213
|
line: z.ZodNumber;
|
|
214
|
+
column: z.ZodOptional<z.ZodNumber>;
|
|
211
215
|
}, z.core.$strip>>;
|
|
212
216
|
checked: z.ZodBoolean;
|
|
213
217
|
}, z.core.$strip>;
|
|
@@ -294,6 +298,7 @@ export declare const WebSocketMessageSchema: z.ZodDiscriminatedUnion<[z.ZodObjec
|
|
|
294
298
|
location: z.ZodOptional<z.ZodObject<{
|
|
295
299
|
file: z.ZodString;
|
|
296
300
|
line: z.ZodNumber;
|
|
301
|
+
column: z.ZodOptional<z.ZodNumber>;
|
|
297
302
|
}, z.core.$strip>>;
|
|
298
303
|
}, z.core.$strip>;
|
|
299
304
|
}, z.core.$strip>, z.ZodObject<{
|
|
@@ -356,6 +361,7 @@ export declare const WebSocketMessageSchema: z.ZodDiscriminatedUnion<[z.ZodObjec
|
|
|
356
361
|
location: z.ZodOptional<z.ZodObject<{
|
|
357
362
|
file: z.ZodString;
|
|
358
363
|
line: z.ZodNumber;
|
|
364
|
+
column: z.ZodOptional<z.ZodNumber>;
|
|
359
365
|
}, z.core.$strip>>;
|
|
360
366
|
}, z.core.$strip>;
|
|
361
367
|
}, z.core.$strip>, z.ZodObject<{
|
|
@@ -429,6 +435,7 @@ export declare const WebSocketMessageSchema: z.ZodDiscriminatedUnion<[z.ZodObjec
|
|
|
429
435
|
location: z.ZodOptional<z.ZodObject<{
|
|
430
436
|
file: z.ZodString;
|
|
431
437
|
line: z.ZodNumber;
|
|
438
|
+
column: z.ZodOptional<z.ZodNumber>;
|
|
432
439
|
}, z.core.$strip>>;
|
|
433
440
|
}, z.core.$strip>>;
|
|
434
441
|
isUpdateMode: z.ZodOptional<z.ZodBoolean>;
|
|
@@ -436,6 +443,11 @@ export declare const WebSocketMessageSchema: z.ZodDiscriminatedUnion<[z.ZodObjec
|
|
|
436
443
|
}, z.core.$strip>, z.ZodObject<{
|
|
437
444
|
type: z.ZodLiteral<"approve">;
|
|
438
445
|
data: z.ZodUnknown;
|
|
446
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
447
|
+
type: z.ZodLiteral<"run-status">;
|
|
448
|
+
data: z.ZodObject<{
|
|
449
|
+
running: z.ZodBoolean;
|
|
450
|
+
}, z.core.$strip>;
|
|
439
451
|
}, z.core.$strip>], "type">;
|
|
440
452
|
export type WebSocketMessage = z.infer<typeof WebSocketMessageSchema>;
|
|
441
453
|
export declare const TestBeginDataSchema: z.ZodObject<{
|
|
@@ -447,6 +459,7 @@ export declare const TestBeginDataSchema: z.ZodObject<{
|
|
|
447
459
|
location: z.ZodObject<{
|
|
448
460
|
file: z.ZodString;
|
|
449
461
|
line: z.ZodNumber;
|
|
462
|
+
column: z.ZodOptional<z.ZodNumber>;
|
|
450
463
|
}, z.core.$strip>;
|
|
451
464
|
}, z.core.$strip>;
|
|
452
465
|
export type TestBeginData = z.infer<typeof TestBeginDataSchema>;
|
|
@@ -491,6 +504,8 @@ export declare const RegisterDataSchema: z.ZodObject<{
|
|
|
491
504
|
playwrightTestDir: z.ZodOptional<z.ZodString>;
|
|
492
505
|
playwrightSnapshotPathTemplate: z.ZodOptional<z.ZodString>;
|
|
493
506
|
playwrightToHaveScreenshotPathTemplate: z.ZodOptional<z.ZodString>;
|
|
507
|
+
configFile: z.ZodOptional<z.ZodString>;
|
|
508
|
+
cwd: z.ZodOptional<z.ZodString>;
|
|
494
509
|
}, z.core.$strip>;
|
|
495
510
|
export type RegisterData = z.infer<typeof RegisterDataSchema>;
|
|
496
511
|
export declare const ReportDataSchema: z.ZodObject<{
|
|
@@ -553,6 +568,7 @@ export declare const ReportDataSchema: z.ZodObject<{
|
|
|
553
568
|
location: z.ZodOptional<z.ZodObject<{
|
|
554
569
|
file: z.ZodString;
|
|
555
570
|
line: z.ZodNumber;
|
|
571
|
+
column: z.ZodOptional<z.ZodNumber>;
|
|
556
572
|
}, z.core.$strip>>;
|
|
557
573
|
}, z.core.$strip>>;
|
|
558
574
|
browsers: z.ZodArray<z.ZodString>;
|
|
@@ -619,6 +635,7 @@ export declare const LoadedReportDataSchema: z.ZodObject<{
|
|
|
619
635
|
location: z.ZodOptional<z.ZodObject<{
|
|
620
636
|
file: z.ZodString;
|
|
621
637
|
line: z.ZodNumber;
|
|
638
|
+
column: z.ZodOptional<z.ZodNumber>;
|
|
622
639
|
}, z.core.$strip>>;
|
|
623
640
|
}, z.core.$strip>>>;
|
|
624
641
|
isUpdateMode: z.ZodOptional<z.ZodBoolean>;
|
|
@@ -651,12 +668,6 @@ export declare const OfflineReportSchema: z.ZodObject<{
|
|
|
651
668
|
}, z.core.$strip>>;
|
|
652
669
|
}, z.core.$strip>;
|
|
653
670
|
export type OfflineReport = z.infer<typeof OfflineReportSchema>;
|
|
654
|
-
export declare const ApproveRequestBodySchema: z.ZodObject<{
|
|
655
|
-
id: z.ZodString;
|
|
656
|
-
retry: z.ZodNumber;
|
|
657
|
-
image: z.ZodString;
|
|
658
|
-
}, z.core.$strip>;
|
|
659
|
-
export type ApproveRequestBody = z.infer<typeof ApproveRequestBodySchema>;
|
|
660
671
|
export declare const ReportApiResponseSchema: z.ZodObject<{
|
|
661
672
|
tests: z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
662
673
|
id: z.ZodString;
|
|
@@ -716,9 +727,12 @@ export declare const ReportApiResponseSchema: z.ZodObject<{
|
|
|
716
727
|
location: z.ZodOptional<z.ZodObject<{
|
|
717
728
|
file: z.ZodString;
|
|
718
729
|
line: z.ZodNumber;
|
|
730
|
+
column: z.ZodOptional<z.ZodNumber>;
|
|
719
731
|
}, z.core.$strip>>;
|
|
720
732
|
}, z.core.$strip>>;
|
|
721
733
|
isUpdateMode: z.ZodOptional<z.ZodBoolean>;
|
|
734
|
+
isRunning: z.ZodOptional<z.ZodBoolean>;
|
|
735
|
+
runEnabled: z.ZodOptional<z.ZodBoolean>;
|
|
722
736
|
}, z.core.$strip>;
|
|
723
737
|
export type ReportApiResponse = z.infer<typeof ReportApiResponseSchema>;
|
|
724
738
|
export declare const ClientBootstrapDataSchema: z.ZodObject<{
|
|
@@ -781,13 +795,18 @@ export declare const ClientBootstrapDataSchema: z.ZodObject<{
|
|
|
781
795
|
location: z.ZodOptional<z.ZodObject<{
|
|
782
796
|
file: z.ZodString;
|
|
783
797
|
line: z.ZodNumber;
|
|
798
|
+
column: z.ZodOptional<z.ZodNumber>;
|
|
784
799
|
}, z.core.$strip>>;
|
|
785
800
|
}, z.core.$strip>>;
|
|
801
|
+
isRunning: z.ZodOptional<z.ZodBoolean>;
|
|
802
|
+
runEnabled: z.ZodOptional<z.ZodBoolean>;
|
|
786
803
|
isUpdateMode: z.ZodBoolean;
|
|
787
804
|
}, z.core.$strip>;
|
|
788
805
|
liveUpdates: z.ZodBoolean;
|
|
789
806
|
approvalEnabled: z.ZodBoolean;
|
|
790
807
|
approvalMessage: z.ZodOptional<z.ZodString>;
|
|
808
|
+
runEnabled: z.ZodOptional<z.ZodBoolean>;
|
|
809
|
+
isRunning: z.ZodOptional<z.ZodBoolean>;
|
|
791
810
|
}, z.core.$strip>;
|
|
792
811
|
export type ClientBootstrapData = z.infer<typeof ClientBootstrapDataSchema>;
|
|
793
812
|
export declare const ImagesViewModeSchema: z.ZodEnum<{
|
package/dist/schemas.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../src/schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;
|
|
1
|
+
{"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../src/schemas.ts"],"names":[],"mappings":"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"}
|
package/dist/server/app.d.ts
CHANGED
|
@@ -5,6 +5,12 @@ export interface ServerOptions {
|
|
|
5
5
|
reportPath?: string;
|
|
6
6
|
/** Absolute path to the built web UI assets directory, or its parent directory */
|
|
7
7
|
staticDir?: string;
|
|
8
|
+
/**
|
|
9
|
+
* Playwright config path used to seed run support before any reporter
|
|
10
|
+
* registers. When omitted, the server discovers `playwright.config.*` in the
|
|
11
|
+
* working directory. A registering reporter always overrides this.
|
|
12
|
+
*/
|
|
13
|
+
playwrightConfig?: string;
|
|
8
14
|
configDir?: string;
|
|
9
15
|
/**
|
|
10
16
|
* Playwright's outputDir (test-results), where failure artifacts are written. Used as a root in
|
|
@@ -20,7 +26,8 @@ export interface ServerOptions {
|
|
|
20
26
|
export interface ServerApp {
|
|
21
27
|
port: number;
|
|
22
28
|
wsClients: Set<RuntimeWebSocket>;
|
|
23
|
-
|
|
29
|
+
/** Flushes pending report writes and disposes the run controller. */
|
|
30
|
+
close: () => Promise<void>;
|
|
24
31
|
handleRequest: (req: Request) => Promise<Response>;
|
|
25
32
|
handleWebSocketMessage: (message: string) => Promise<void>;
|
|
26
33
|
}
|
package/dist/server/app.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../src/server/app.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../src/server/app.ts"],"names":[],"mappings":"AA+BA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAE/C,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,kFAAkF;IAClF,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAC9B,8BAA8B,CAAC,EAAE,MAAM,CAAA;IACvC,sCAAsC,CAAC,EAAE,MAAM,CAAA;CAChD;AAUD,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,GAAG,CAAC,gBAAgB,CAAC,CAAA;IAChC,qEAAqE;IACrE,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAC1B,aAAa,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAA;IAClD,sBAAsB,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CAC3D;AAuKD,wBAAsB,eAAe,CAAC,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,SAAS,CAAC,CAgDrF"}
|
|
@@ -2,6 +2,7 @@ import type { RegisterData, TestBeginData, TestEndData } from '../schemas.ts';
|
|
|
2
2
|
import type { TestData } from '../types.ts';
|
|
3
3
|
import { type ApprovalRouting } from './artifact-routes.ts';
|
|
4
4
|
import type { RoutesContext } from './routes.ts';
|
|
5
|
+
import type { RunController } from './run-controller.ts';
|
|
5
6
|
import type { RuntimeWebSocket } from './ws.ts';
|
|
6
7
|
export interface HandlerContext {
|
|
7
8
|
reportData: {
|
|
@@ -13,9 +14,14 @@ export interface HandlerContext {
|
|
|
13
14
|
};
|
|
14
15
|
wsClients: Set<RuntimeWebSocket>;
|
|
15
16
|
currentRunIds: Set<string>;
|
|
17
|
+
isFilteredRun: boolean;
|
|
16
18
|
saveReport: () => Promise<void>;
|
|
19
|
+
/** Debounced persistence; used after in-memory mutations so a crash or
|
|
20
|
+
* interrupted run (no `run-end`) still leaves the latest state on disk. */
|
|
21
|
+
scheduleReportSave: () => void;
|
|
17
22
|
approvalRouting?: ApprovalRouting;
|
|
18
23
|
routesContext: RoutesContext;
|
|
24
|
+
runController: RunController;
|
|
19
25
|
}
|
|
20
26
|
export declare function handleTestBegin(ctx: HandlerContext, data: TestBeginData): void;
|
|
21
27
|
export declare function handleTestEnd(ctx: HandlerContext, data: TestEndData): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handlers.d.ts","sourceRoot":"","sources":["../../src/server/handlers.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC7E,OAAO,KAAK,EAA0B,QAAQ,EAAE,MAAM,aAAa,CAAA;AACnE,OAAO,EAA+B,KAAK,eAAe,EAAE,MAAM,sBAAsB,CAAA;AACxF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"handlers.d.ts","sourceRoot":"","sources":["../../src/server/handlers.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC7E,OAAO,KAAK,EAA0B,QAAQ,EAAE,MAAM,aAAa,CAAA;AACnE,OAAO,EAA+B,KAAK,eAAe,EAAE,MAAM,sBAAsB,CAAA;AACxF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAChD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAExD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAE/C,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE;QACV,SAAS,EAAE,OAAO,CAAA;QAClB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;QAC/B,QAAQ,EAAE,MAAM,EAAE,CAAA;QAClB,YAAY,EAAE,OAAO,CAAA;QACrB,aAAa,EAAE,MAAM,CAAA;KACtB,CAAA;IACD,SAAS,EAAE,GAAG,CAAC,gBAAgB,CAAC,CAAA;IAChC,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAG1B,aAAa,EAAE,OAAO,CAAA;IACtB,UAAU,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAC/B;+EAC2E;IAC3E,kBAAkB,EAAE,MAAM,IAAI,CAAA;IAC9B,eAAe,CAAC,EAAE,eAAe,CAAA;IACjC,aAAa,EAAE,aAAa,CAAA;IAC5B,aAAa,EAAE,aAAa,CAAA;CAC7B;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,cAAc,EAAE,IAAI,EAAE,aAAa,GAAG,IAAI,CAO9E;AAwBD,wBAAgB,aAAa,CAAC,GAAG,EAAE,cAAc,EAAE,IAAI,EAAE,WAAW,GAAG,IAAI,CAkB1E;AAED,wBAAsB,YAAY,CAChC,GAAG,EAAE,cAAc,EACnB,IAAI,EAAE;IAAE,MAAM,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAA;CAAE,GAChD,OAAO,CAAC,IAAI,CAAC,CAYf;AAED,wBAAgB,aAAa,IAAI,IAAI,CAIpC;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,cAAc,GAAG,IAAI,CAWpD;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,cAAc,EAAE,IAAI,EAAE,YAAY,GAAG,IAAI,CAyC5E"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"playwright-config.d.ts","sourceRoot":"","sources":["../../src/server/playwright-config.ts"],"names":[],"mappings":"AAiBA,wBAAsB,uBAAuB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CASjF"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
type TimerHandle = ReturnType<typeof setTimeout>;
|
|
2
|
+
type SetTimer = (fn: () => void, ms?: number) => TimerHandle;
|
|
3
|
+
type ClearTimer = (handle: TimerHandle | null) => void;
|
|
4
|
+
export interface DebouncedSaver {
|
|
5
|
+
/** Schedules a save after the debounce window. Re-arms on each call. */
|
|
6
|
+
schedule(): void;
|
|
7
|
+
/** Cancels any pending timer; awaits an in-flight save; saves immediately if dirty. */
|
|
8
|
+
flush(): Promise<void>;
|
|
9
|
+
/** Cancels any pending timer and clears the dirty flag without saving. */
|
|
10
|
+
cancel(): void;
|
|
11
|
+
}
|
|
12
|
+
export interface ReportPersistence {
|
|
13
|
+
/** Flushes immediately; used by run-end, approvals, child exit, and signals. */
|
|
14
|
+
saveReport: () => Promise<void>;
|
|
15
|
+
/** Debounced; used after frequent in-memory mutations (test-begin/test-end). */
|
|
16
|
+
scheduleReportSave: () => void;
|
|
17
|
+
/** Flushes any pending debounced write; used during teardown. */
|
|
18
|
+
dispose: () => Promise<void>;
|
|
19
|
+
}
|
|
20
|
+
export declare function createDebouncedSaver(save: () => Promise<void>, delayMs: number, setTimeoutFn?: SetTimer, clearTimeoutFn?: ClearTimer): DebouncedSaver;
|
|
21
|
+
/** Builds the debounced report-persistence facade shared by handlers, the run
|
|
22
|
+
* controller, and shutdown. `scheduleReportSave` coalesces frequent mutations;
|
|
23
|
+
* `saveReport` flushes immediately so an interrupted run (Ctrl+C before run-end,
|
|
24
|
+
* killed child, server restart) still lands its results on disk. */
|
|
25
|
+
export declare function createReportPersistence<T>(reportFile: string, reportData: T): ReportPersistence;
|
|
26
|
+
export {};
|
|
27
|
+
//# sourceMappingURL=report-persistence.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"report-persistence.d.ts","sourceRoot":"","sources":["../../src/server/report-persistence.ts"],"names":[],"mappings":"AAEA,KAAK,WAAW,GAAG,UAAU,CAAC,OAAO,UAAU,CAAC,CAAA;AAChD,KAAK,QAAQ,GAAG,CAAC,EAAE,EAAE,MAAM,IAAI,EAAE,EAAE,CAAC,EAAE,MAAM,KAAK,WAAW,CAAA;AAC5D,KAAK,UAAU,GAAG,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,KAAK,IAAI,CAAA;AAEtD,MAAM,WAAW,cAAc;IAC7B,wEAAwE;IACxE,QAAQ,IAAI,IAAI,CAAA;IAChB,uFAAuF;IACvF,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IACtB,0EAA0E;IAC1E,MAAM,IAAI,IAAI,CAAA;CACf;AAED,MAAM,WAAW,iBAAiB;IAChC,gFAAgF;IAChF,UAAU,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAC/B,gFAAgF;IAChF,kBAAkB,EAAE,MAAM,IAAI,CAAA;IAC9B,iEAAiE;IACjE,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAC7B;AAED,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,EACzB,OAAO,EAAE,MAAM,EACf,YAAY,GAAE,QAAyC,EACvD,cAAc,GAAE,UAEf,GACA,cAAc,CA0ChB;AAED;;;oEAGoE;AACpE,wBAAgB,uBAAuB,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,GAAG,iBAAiB,CAS/F"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { RoutesContext } from './routes.ts';
|
|
2
|
+
type ReportDataShape = RoutesContext['reportData'];
|
|
3
|
+
interface RoutesContextOptions {
|
|
4
|
+
outputDir?: string;
|
|
5
|
+
playwrightSnapshotDir?: string;
|
|
6
|
+
configDir?: string;
|
|
7
|
+
playwrightTestDir?: string;
|
|
8
|
+
playwrightSnapshotPathTemplate?: string;
|
|
9
|
+
playwrightToHaveScreenshotPathTemplate?: string;
|
|
10
|
+
}
|
|
11
|
+
export declare function createRoutesContext(reportData: ReportDataShape, staticDir: string, saveReport: () => Promise<void>, options: RoutesContextOptions): RoutesContext;
|
|
12
|
+
export {};
|
|
13
|
+
//# sourceMappingURL=routes-context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"routes-context.d.ts","sourceRoot":"","sources":["../../src/server/routes-context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAEhD,KAAK,eAAe,GAAG,aAAa,CAAC,YAAY,CAAC,CAAA;AAElD,UAAU,oBAAoB;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,8BAA8B,CAAC,EAAE,MAAM,CAAA;IACvC,sCAAsC,CAAC,EAAE,MAAM,CAAA;CAChD;AAED,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,eAAe,EAC3B,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,EAC/B,OAAO,EAAE,oBAAoB,GAC5B,aAAa,CAqBf"}
|
package/dist/server/routes.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { TestData } from '../types.ts';
|
|
2
|
+
import type { RunController } from './run-controller.ts';
|
|
2
3
|
export interface RoutesContext {
|
|
3
4
|
reportData: {
|
|
4
5
|
isRunning: boolean;
|
|
@@ -17,7 +18,11 @@ export interface RoutesContext {
|
|
|
17
18
|
playwrightSnapshotPathTemplate?: string;
|
|
18
19
|
playwrightToHaveScreenshotPathTemplate?: string;
|
|
19
20
|
};
|
|
21
|
+
runContext?: {
|
|
22
|
+
configFile: string;
|
|
23
|
+
cwd: string;
|
|
24
|
+
};
|
|
20
25
|
}
|
|
21
26
|
export { isPathWithinRoots, isWebSocketUpgradeRequest, LIVE_UPDATES_WEBSOCKET_PATH } from './utils.ts';
|
|
22
|
-
export declare function handleHttpRequest(ctx: RoutesContext, req: Request): Promise<Response>;
|
|
27
|
+
export declare function handleHttpRequest(ctx: RoutesContext, req: Request, runController: RunController): Promise<Response>;
|
|
23
28
|
//# sourceMappingURL=routes.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../src/server/routes.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../src/server/routes.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAG3C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAGxD,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE;QACV,SAAS,EAAE,OAAO,CAAA;QAClB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;QAC/B,QAAQ,EAAE,MAAM,EAAE,CAAA;QAClB,YAAY,EAAE,OAAO,CAAA;QACrB,aAAa,EAAE,MAAM,CAAA;KACtB,CAAA;IACD,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAC/B,aAAa,CAAC,EAAE,MAAM,EAAE,CAAA;IACxB,eAAe,CAAC,EAAE;QAChB,SAAS,EAAE,MAAM,CAAA;QACjB,iBAAiB,CAAC,EAAE,MAAM,CAAA;QAC1B,qBAAqB,CAAC,EAAE,MAAM,CAAA;QAC9B,8BAA8B,CAAC,EAAE,MAAM,CAAA;QACvC,sCAAsC,CAAC,EAAE,MAAM,CAAA;KAChD,CAAA;IACD,UAAU,CAAC,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAA;CACjD;AAED,OAAO,EAAE,iBAAiB,EAAE,yBAAyB,EAAE,2BAA2B,EAAE,MAAM,YAAY,CAAA;AAwMtG,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,aAAa,EAAE,GAAG,EAAE,OAAO,EAAE,aAAa,EAAE,aAAa,GAAG,OAAO,CAAC,QAAQ,CAAC,CAiDnH"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import type { RunTestDescriptor } from '../schemas.ts';
|
|
2
|
+
import type { ClientWebSocketMessage } from '../types.ts';
|
|
3
|
+
export interface RunContext {
|
|
4
|
+
configFile: string;
|
|
5
|
+
cwd: string;
|
|
6
|
+
}
|
|
7
|
+
export interface RunFilters {
|
|
8
|
+
tests?: RunTestDescriptor[];
|
|
9
|
+
}
|
|
10
|
+
export type StartResult = {
|
|
11
|
+
ok: true;
|
|
12
|
+
} | {
|
|
13
|
+
ok: false;
|
|
14
|
+
reason: 'no-config' | 'already-running' | 'no-tests';
|
|
15
|
+
};
|
|
16
|
+
export type StopResult = {
|
|
17
|
+
ok: true;
|
|
18
|
+
} | {
|
|
19
|
+
ok: false;
|
|
20
|
+
reason: 'not-running';
|
|
21
|
+
};
|
|
22
|
+
export interface ChildProcessLike {
|
|
23
|
+
on(event: 'exit', cb: (code: number | null) => void): void;
|
|
24
|
+
on(event: 'error', cb: (err: Error) => void): void;
|
|
25
|
+
kill(signal: string): void;
|
|
26
|
+
}
|
|
27
|
+
export interface SpawnLike {
|
|
28
|
+
(cmd: string, args: string[], opts: Record<string, unknown>): ChildProcessLike;
|
|
29
|
+
}
|
|
30
|
+
export interface RunControllerDeps {
|
|
31
|
+
getRunContext(): RunContext | null;
|
|
32
|
+
port: number;
|
|
33
|
+
broadcast(message: ClientWebSocketMessage): void;
|
|
34
|
+
setReportRunning(running: boolean): void;
|
|
35
|
+
/** Records whether the in-progress run is filtered, so run-end can preserve unrelated tests. */
|
|
36
|
+
setRunFiltered?(filtered: boolean): void;
|
|
37
|
+
/** Flushes pending report writes on child exit so an interrupted run still persists. */
|
|
38
|
+
saveReport?: () => Promise<void>;
|
|
39
|
+
spawn: SpawnLike;
|
|
40
|
+
timers: {
|
|
41
|
+
setTimeout: (fn: () => void, ms?: number) => unknown;
|
|
42
|
+
clearTimeout: (handle: unknown) => void;
|
|
43
|
+
};
|
|
44
|
+
resolveReporter?: (cwd: string) => string | null;
|
|
45
|
+
/** Resolves the package-manager-aware command used to launch `playwright`. Falls back to `npx`. */
|
|
46
|
+
resolveLaunch?: (cwd: string, playwrightArgs: string[]) => {
|
|
47
|
+
cmd: string;
|
|
48
|
+
args: string[];
|
|
49
|
+
};
|
|
50
|
+
/** Injectable seams for the version-gated `--test-list` path (Playwright >= 1.56). */
|
|
51
|
+
getPlaywrightVersion?: (cwd: string) => string | null;
|
|
52
|
+
writeTempFile?: (content: string) => string;
|
|
53
|
+
deleteTempFile?: (path: string) => void;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Resolves the `playwright` launch command for the project's package manager.
|
|
57
|
+
* `cwd` is reserved for future cwd-based detection (`package-manager-detector`'s
|
|
58
|
+
* `detect` is async in v1.x and cannot run in the synchronous `start()` path),
|
|
59
|
+
* so today detection uses the synchronous `getUserAgent()`, matching Creevey's
|
|
60
|
+
* spawn pattern. Falls back to `npx` when no agent is detectable.
|
|
61
|
+
*/
|
|
62
|
+
export declare function resolvePlaywrightLaunch(cwd: string, playwrightArgs: string[]): {
|
|
63
|
+
cmd: string;
|
|
64
|
+
args: string[];
|
|
65
|
+
};
|
|
66
|
+
/** `MAJOR.MINOR` threshold check using only leading digits; ignores pre-release suffixes. False for unparseable input. */
|
|
67
|
+
export declare function gteMinor(version: string, major: number, minor: number): boolean;
|
|
68
|
+
/** Builds `--test-list` lines mirroring `playwright test --list`: `[project] › file:line:column › title path`. */
|
|
69
|
+
export declare function buildTestListEntries(tests: RunTestDescriptor[]): string[];
|
|
70
|
+
export declare function resolveReporterDefault(cwd: string): string | null;
|
|
71
|
+
export declare class RunController {
|
|
72
|
+
private readonly deps;
|
|
73
|
+
private child;
|
|
74
|
+
private sigkillTimer;
|
|
75
|
+
private testListPath;
|
|
76
|
+
constructor(deps: RunControllerDeps);
|
|
77
|
+
get isRunning(): boolean;
|
|
78
|
+
private supportsTestList;
|
|
79
|
+
private cleanupTempFile;
|
|
80
|
+
start(filters: RunFilters): StartResult;
|
|
81
|
+
stop(): StopResult;
|
|
82
|
+
dispose(): void;
|
|
83
|
+
private handleChildExit;
|
|
84
|
+
}
|
|
85
|
+
export declare function createRealSpawn(): SpawnLike;
|
|
86
|
+
export declare function createRealTimers(): RunControllerDeps['timers'];
|
|
87
|
+
//# sourceMappingURL=run-controller.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-controller.d.ts","sourceRoot":"","sources":["../../src/server/run-controller.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-routes.d.ts","sourceRoot":"","sources":["../../src/server/run-routes.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAExD,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,aAAa,EAC5B,GAAG,EAAE,OAAO,GACX,OAAO,CAAC,QAAQ,CAAC,GAAG,IAAI,CAU1B"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Graceful shutdown handler for process signals (SIGINT/SIGTERM).
|
|
3
|
+
*
|
|
4
|
+
* On the first signal: flushes the report (via `close`) so the latest in-memory
|
|
5
|
+
* state lands on disk, then exits. This is the key path that prevents data loss
|
|
6
|
+
* when the user Ctrl+Cs the reporter server while a run is in progress or a
|
|
7
|
+
* debounced save is pending.
|
|
8
|
+
*
|
|
9
|
+
* On a second signal: exits immediately so a stuck flush can always be
|
|
10
|
+
* force-killed by the user.
|
|
11
|
+
*/
|
|
12
|
+
export interface ShutdownDeps {
|
|
13
|
+
close: () => Promise<void>;
|
|
14
|
+
exit: (code?: number) => void;
|
|
15
|
+
}
|
|
16
|
+
export declare function createSignalShutdown(deps: ShutdownDeps): (signal: NodeJS.Signals) => Promise<void>;
|
|
17
|
+
//# sourceMappingURL=shutdown.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shutdown.d.ts","sourceRoot":"","sources":["../../src/server/shutdown.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAC1B,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;CAC9B;AAQD,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,YAAY,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAgBlG"}
|