@midleman/playwright-reporter 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.
Files changed (66) hide show
  1. package/README.md +373 -0
  2. package/dist/buffers.d.ts +13 -0
  3. package/dist/buffers.d.ts.map +1 -0
  4. package/dist/buffers.js +58 -0
  5. package/dist/buffers.js.map +1 -0
  6. package/dist/counts.d.ts +32 -0
  7. package/dist/counts.d.ts.map +1 -0
  8. package/dist/counts.js +66 -0
  9. package/dist/counts.js.map +1 -0
  10. package/dist/index.d.ts +7 -0
  11. package/dist/index.d.ts.map +1 -0
  12. package/dist/index.js +28 -0
  13. package/dist/index.js.map +1 -0
  14. package/dist/payload.d.ts +33 -0
  15. package/dist/payload.d.ts.map +1 -0
  16. package/dist/payload.js +87 -0
  17. package/dist/payload.js.map +1 -0
  18. package/dist/payload.test.d.ts +2 -0
  19. package/dist/payload.test.d.ts.map +1 -0
  20. package/dist/payload.test.js +198 -0
  21. package/dist/payload.test.js.map +1 -0
  22. package/dist/reporter.d.ts +47 -0
  23. package/dist/reporter.d.ts.map +1 -0
  24. package/dist/reporter.js +470 -0
  25. package/dist/reporter.js.map +1 -0
  26. package/dist/reporter.test.d.ts +2 -0
  27. package/dist/reporter.test.d.ts.map +1 -0
  28. package/dist/reporter.test.js +216 -0
  29. package/dist/reporter.test.js.map +1 -0
  30. package/dist/schemas.d.ts +485 -0
  31. package/dist/schemas.d.ts.map +1 -0
  32. package/dist/schemas.js +128 -0
  33. package/dist/schemas.js.map +1 -0
  34. package/dist/schemas.test.d.ts +2 -0
  35. package/dist/schemas.test.d.ts.map +1 -0
  36. package/dist/schemas.test.js +313 -0
  37. package/dist/schemas.test.js.map +1 -0
  38. package/dist/storage/api.d.ts +13 -0
  39. package/dist/storage/api.d.ts.map +1 -0
  40. package/dist/storage/api.js +86 -0
  41. package/dist/storage/api.js.map +1 -0
  42. package/dist/storage/api.test.d.ts +2 -0
  43. package/dist/storage/api.test.d.ts.map +1 -0
  44. package/dist/storage/api.test.js +184 -0
  45. package/dist/storage/api.test.js.map +1 -0
  46. package/dist/storage/parquet.d.ts +10 -0
  47. package/dist/storage/parquet.d.ts.map +1 -0
  48. package/dist/storage/parquet.js +157 -0
  49. package/dist/storage/parquet.js.map +1 -0
  50. package/dist/storage/s3.d.ts +35 -0
  51. package/dist/storage/s3.d.ts.map +1 -0
  52. package/dist/storage/s3.js +129 -0
  53. package/dist/storage/s3.js.map +1 -0
  54. package/dist/types.d.ts +36 -0
  55. package/dist/types.d.ts.map +1 -0
  56. package/dist/types.js +26 -0
  57. package/dist/types.js.map +1 -0
  58. package/dist/utils.d.ts +44 -0
  59. package/dist/utils.d.ts.map +1 -0
  60. package/dist/utils.js +195 -0
  61. package/dist/utils.js.map +1 -0
  62. package/dist/utils.test.d.ts +2 -0
  63. package/dist/utils.test.d.ts.map +1 -0
  64. package/dist/utils.test.js +150 -0
  65. package/dist/utils.test.js.map +1 -0
  66. package/package.json +41 -0
@@ -0,0 +1,87 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildResultPayload = buildResultPayload;
4
+ exports.buildRunStarted = buildRunStarted;
5
+ exports.buildRunCompleted = buildRunCompleted;
6
+ const types_1 = require("./types");
7
+ const utils_1 = require("./utils");
8
+ function buildResultPayload(runCtx, spec, project, browser, osName, test, result, status, attempt, titlePath) {
9
+ const { repoName, runId, branchName, sha, commitMessage, commitAuthor } = runCtx;
10
+ // Use Playwright's stable test.id for consistent identification across runs
11
+ const stableTestId = test.id;
12
+ // Idempotent event id without attempt to allow later attempts to replace
13
+ const eventKey = `${runId}::${spec}::${stableTestId}`;
14
+ const event = {
15
+ type: 'result.created',
16
+ repoName,
17
+ runId,
18
+ specPath: spec,
19
+ project,
20
+ browser,
21
+ os: osName,
22
+ branch: branchName,
23
+ sha,
24
+ testName: test.title,
25
+ testId: stableTestId,
26
+ status,
27
+ durationMs: result.duration,
28
+ startedAt: result.startTime ? (0, utils_1.iso)(result.startTime) : undefined,
29
+ attempt,
30
+ retries: typeof result.retry === 'number' ? result.retry : undefined,
31
+ failureMessage: result.error?.message || undefined,
32
+ eventId: (0, utils_1.b64url)(eventKey),
33
+ timestamp: (0, utils_1.iso)(),
34
+ reportUrl: (0, utils_1.buildReportUrl)(stableTestId),
35
+ commitMessage,
36
+ commitAuthor,
37
+ titlePath,
38
+ };
39
+ // Validate event against schema - throw if invalid to prevent bad data
40
+ const validation = (0, types_1.safeValidateResultEvent)(event);
41
+ if (!validation.success) {
42
+ console.error('[ParquetReporter] Invalid result event:', validation.error.message);
43
+ throw new Error(`Invalid result event: ${validation.error.message}`);
44
+ }
45
+ return validation.data;
46
+ }
47
+ function buildRunStarted(runCtx, opts) {
48
+ const event = {
49
+ type: 'run.started',
50
+ repoName: runCtx.repoName,
51
+ runId: runCtx.runId,
52
+ startedAt: opts.startedAt,
53
+ branch: opts.branch,
54
+ sha: opts.sha,
55
+ workflowName: opts.workflowName,
56
+ jobName: opts.jobName,
57
+ runUrl: opts.runUrl,
58
+ commitMessage: opts.commitMessage,
59
+ commitAuthor: opts.commitAuthor,
60
+ };
61
+ // Validate event against schema - throw if invalid to prevent bad data
62
+ const validation = (0, types_1.safeValidateRunStartedEvent)(event);
63
+ if (!validation.success) {
64
+ console.error('[ParquetReporter] Invalid RunStarted event:', validation.error.message);
65
+ throw new Error(`Invalid RunStarted event: ${validation.error.message}`);
66
+ }
67
+ return validation.data;
68
+ }
69
+ function buildRunCompleted(runCtx, opts) {
70
+ const event = {
71
+ type: 'run.completed',
72
+ repoName: runCtx.repoName,
73
+ runId: runCtx.runId,
74
+ completedAt: opts.completedAt,
75
+ status: opts.status,
76
+ durationMs: opts.durationMs,
77
+ counts: opts.counts,
78
+ };
79
+ // Validate event against schema - throw if invalid to prevent bad data
80
+ const validation = (0, types_1.safeValidateRunCompletedEvent)(event);
81
+ if (!validation.success) {
82
+ console.error('[ParquetReporter] Invalid RunCompleted event:', validation.error.message);
83
+ throw new Error(`Invalid RunCompleted event: ${validation.error.message}`);
84
+ }
85
+ return validation.data;
86
+ }
87
+ //# sourceMappingURL=payload.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"payload.js","sourceRoot":"","sources":["../src/payload.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=payload.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"payload.test.d.ts","sourceRoot":"","sources":["../src/payload.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,198 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const vitest_1 = require("vitest");
4
+ const payload_1 = require("./payload");
5
+ // Mock the utils module
6
+ vitest_1.vi.mock('./utils', () => ({
7
+ iso: (date) => date?.toISOString() ?? '2024-01-15T10:30:00.000Z',
8
+ b64url: (str) => Buffer.from(str).toString('base64url'),
9
+ buildReportUrl: (testId) => `https://example.com/report/${testId}`,
10
+ }));
11
+ (0, vitest_1.describe)('buildResultPayload', () => {
12
+ const runCtx = {
13
+ repoName: 'test-repo',
14
+ runId: 'run-123',
15
+ branchName: 'main',
16
+ sha: 'abc123def',
17
+ commitMessage: 'fix: something',
18
+ commitAuthor: 'dev@example.com',
19
+ };
20
+ const mockTest = {
21
+ id: 'test-id-123',
22
+ title: 'should work correctly',
23
+ location: { file: '/path/to/test.spec.ts', line: 10, column: 5 },
24
+ };
25
+ const mockResult = {
26
+ status: 'passed',
27
+ duration: 1500,
28
+ startTime: new Date('2024-01-15T10:30:00.000Z'),
29
+ retry: 0,
30
+ error: undefined,
31
+ };
32
+ (0, vitest_1.it)('builds valid result payload with all fields', () => {
33
+ const payload = (0, payload_1.buildResultPayload)(runCtx, 'tests/example.spec.ts', 'chromium', 'chromium', 'mac', mockTest, mockResult, 'passed', 1, ['Suite', 'Nested']);
34
+ (0, vitest_1.expect)(payload.type).toBe('result.created');
35
+ (0, vitest_1.expect)(payload.repoName).toBe('test-repo');
36
+ (0, vitest_1.expect)(payload.runId).toBe('run-123');
37
+ (0, vitest_1.expect)(payload.specPath).toBe('tests/example.spec.ts');
38
+ (0, vitest_1.expect)(payload.project).toBe('chromium');
39
+ (0, vitest_1.expect)(payload.browser).toBe('chromium');
40
+ (0, vitest_1.expect)(payload.os).toBe('mac');
41
+ (0, vitest_1.expect)(payload.testName).toBe('should work correctly');
42
+ (0, vitest_1.expect)(payload.testId).toBe('test-id-123');
43
+ (0, vitest_1.expect)(payload.status).toBe('passed');
44
+ (0, vitest_1.expect)(payload.durationMs).toBe(1500);
45
+ (0, vitest_1.expect)(payload.attempt).toBe(1);
46
+ (0, vitest_1.expect)(payload.branch).toBe('main');
47
+ (0, vitest_1.expect)(payload.sha).toBe('abc123def');
48
+ (0, vitest_1.expect)(payload.commitMessage).toBe('fix: something');
49
+ (0, vitest_1.expect)(payload.commitAuthor).toBe('dev@example.com');
50
+ (0, vitest_1.expect)(payload.titlePath).toEqual(['Suite', 'Nested']);
51
+ (0, vitest_1.expect)(payload.eventId).toBeDefined();
52
+ (0, vitest_1.expect)(payload.timestamp).toBeDefined();
53
+ });
54
+ (0, vitest_1.it)('builds valid payload with minimal context', () => {
55
+ const minimalCtx = {
56
+ repoName: 'test-repo',
57
+ runId: 'run-123',
58
+ };
59
+ const payload = (0, payload_1.buildResultPayload)(minimalCtx, 'tests/example.spec.ts', undefined, undefined, 'linux', mockTest, mockResult, 'passed', 1);
60
+ (0, vitest_1.expect)(payload.type).toBe('result.created');
61
+ (0, vitest_1.expect)(payload.repoName).toBe('test-repo');
62
+ (0, vitest_1.expect)(payload.project).toBeUndefined();
63
+ (0, vitest_1.expect)(payload.browser).toBeUndefined();
64
+ (0, vitest_1.expect)(payload.branch).toBeUndefined();
65
+ });
66
+ (0, vitest_1.it)('handles flaky status for retry passes', () => {
67
+ const payload = (0, payload_1.buildResultPayload)(runCtx, 'tests/example.spec.ts', 'chromium', 'chromium', 'mac', mockTest, mockResult, 'flaky', // status already determined as flaky
68
+ 2 // second attempt
69
+ );
70
+ (0, vitest_1.expect)(payload.status).toBe('flaky');
71
+ (0, vitest_1.expect)(payload.attempt).toBe(2);
72
+ });
73
+ (0, vitest_1.it)('includes failure message when present', () => {
74
+ const failedResult = {
75
+ ...mockResult,
76
+ status: 'failed',
77
+ error: { message: 'Expected true but got false' },
78
+ };
79
+ const payload = (0, payload_1.buildResultPayload)(runCtx, 'tests/example.spec.ts', 'chromium', 'chromium', 'mac', mockTest, failedResult, 'failed', 1);
80
+ (0, vitest_1.expect)(payload.status).toBe('failed');
81
+ (0, vitest_1.expect)(payload.failureMessage).toBe('Expected true but got false');
82
+ });
83
+ (0, vitest_1.it)('generates idempotent eventId without attempt number', () => {
84
+ const payload1 = (0, payload_1.buildResultPayload)(runCtx, 'tests/example.spec.ts', 'chromium', 'chromium', 'mac', mockTest, mockResult, 'failed', 1);
85
+ const payload2 = (0, payload_1.buildResultPayload)(runCtx, 'tests/example.spec.ts', 'chromium', 'chromium', 'mac', mockTest, mockResult, 'passed', 2);
86
+ // Same test should have same eventId regardless of attempt
87
+ (0, vitest_1.expect)(payload1.eventId).toBe(payload2.eventId);
88
+ });
89
+ (0, vitest_1.it)('throws on invalid payload', () => {
90
+ const badCtx = {
91
+ repoName: '', // empty string should fail validation
92
+ runId: 'run-123',
93
+ };
94
+ (0, vitest_1.expect)(() => (0, payload_1.buildResultPayload)(badCtx, 'tests/example.spec.ts', undefined, undefined, 'mac', mockTest, mockResult, 'passed', 1)).toThrow();
95
+ });
96
+ });
97
+ (0, vitest_1.describe)('buildRunStarted', () => {
98
+ const runCtx = {
99
+ repoName: 'test-repo',
100
+ runId: 'run-123',
101
+ };
102
+ (0, vitest_1.it)('builds valid run started event', () => {
103
+ const event = (0, payload_1.buildRunStarted)(runCtx, {
104
+ startedAt: '2024-01-15T10:30:00.000Z',
105
+ branch: 'main',
106
+ sha: 'abc123',
107
+ workflowName: 'CI',
108
+ jobName: 'test',
109
+ runUrl: 'https://github.com/org/repo/actions/runs/123',
110
+ commitMessage: 'fix: bug',
111
+ commitAuthor: 'dev@example.com',
112
+ });
113
+ (0, vitest_1.expect)(event.type).toBe('run.started');
114
+ (0, vitest_1.expect)(event.repoName).toBe('test-repo');
115
+ (0, vitest_1.expect)(event.runId).toBe('run-123');
116
+ (0, vitest_1.expect)(event.startedAt).toBe('2024-01-15T10:30:00.000Z');
117
+ (0, vitest_1.expect)(event.branch).toBe('main');
118
+ (0, vitest_1.expect)(event.sha).toBe('abc123');
119
+ (0, vitest_1.expect)(event.workflowName).toBe('CI');
120
+ (0, vitest_1.expect)(event.jobName).toBe('test');
121
+ (0, vitest_1.expect)(event.runUrl).toBe('https://github.com/org/repo/actions/runs/123');
122
+ });
123
+ (0, vitest_1.it)('builds valid event with minimal options', () => {
124
+ const event = (0, payload_1.buildRunStarted)(runCtx, {
125
+ startedAt: '2024-01-15T10:30:00.000Z',
126
+ });
127
+ (0, vitest_1.expect)(event.type).toBe('run.started');
128
+ (0, vitest_1.expect)(event.startedAt).toBe('2024-01-15T10:30:00.000Z');
129
+ (0, vitest_1.expect)(event.branch).toBeUndefined();
130
+ });
131
+ (0, vitest_1.it)('throws on invalid event', () => {
132
+ const badCtx = {
133
+ repoName: '',
134
+ runId: 'run-123',
135
+ };
136
+ (0, vitest_1.expect)(() => (0, payload_1.buildRunStarted)(badCtx, {
137
+ startedAt: '2024-01-15T10:30:00.000Z',
138
+ })).toThrow();
139
+ });
140
+ });
141
+ (0, vitest_1.describe)('buildRunCompleted', () => {
142
+ const runCtx = {
143
+ repoName: 'test-repo',
144
+ runId: 'run-123',
145
+ };
146
+ (0, vitest_1.it)('builds valid run completed event', () => {
147
+ const event = (0, payload_1.buildRunCompleted)(runCtx, {
148
+ completedAt: '2024-01-15T10:35:00.000Z',
149
+ status: 'passed',
150
+ durationMs: 300000,
151
+ counts: {
152
+ passed: 10,
153
+ failed: 0,
154
+ skipped: 2,
155
+ flaky: 1,
156
+ },
157
+ });
158
+ (0, vitest_1.expect)(event.type).toBe('run.completed');
159
+ (0, vitest_1.expect)(event.repoName).toBe('test-repo');
160
+ (0, vitest_1.expect)(event.runId).toBe('run-123');
161
+ (0, vitest_1.expect)(event.completedAt).toBe('2024-01-15T10:35:00.000Z');
162
+ (0, vitest_1.expect)(event.status).toBe('passed');
163
+ (0, vitest_1.expect)(event.durationMs).toBe(300000);
164
+ (0, vitest_1.expect)(event.counts.passed).toBe(10);
165
+ (0, vitest_1.expect)(event.counts.failed).toBe(0);
166
+ (0, vitest_1.expect)(event.counts.skipped).toBe(2);
167
+ (0, vitest_1.expect)(event.counts.flaky).toBe(1);
168
+ });
169
+ (0, vitest_1.it)('builds valid event with failed status', () => {
170
+ const event = (0, payload_1.buildRunCompleted)(runCtx, {
171
+ completedAt: '2024-01-15T10:35:00.000Z',
172
+ status: 'failed',
173
+ durationMs: 300000,
174
+ counts: {
175
+ passed: 8,
176
+ failed: 2,
177
+ skipped: 0,
178
+ flaky: 0,
179
+ },
180
+ });
181
+ (0, vitest_1.expect)(event.status).toBe('failed');
182
+ (0, vitest_1.expect)(event.counts.failed).toBe(2);
183
+ });
184
+ (0, vitest_1.it)('throws on invalid counts', () => {
185
+ (0, vitest_1.expect)(() => (0, payload_1.buildRunCompleted)(runCtx, {
186
+ completedAt: '2024-01-15T10:35:00.000Z',
187
+ status: 'passed',
188
+ durationMs: 300000,
189
+ counts: {
190
+ passed: -1, // invalid
191
+ failed: 0,
192
+ skipped: 0,
193
+ flaky: 0,
194
+ },
195
+ })).toThrow();
196
+ });
197
+ });
198
+ //# sourceMappingURL=payload.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"payload.test.js","sourceRoot":"","sources":["../src/payload.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ import type { FullConfig, FullResult, Reporter, Suite, TestCase, TestResult } from '@playwright/test/reporter';
2
+ import { ReporterOptions } from './types';
3
+ export default class ParquetReporter implements Reporter {
4
+ private mode;
5
+ private apiWriter;
6
+ private repoName;
7
+ private verbose;
8
+ private disabled;
9
+ private runId;
10
+ private startedAt;
11
+ private repoRoot;
12
+ private testDir?;
13
+ private datePartition;
14
+ private defaultProjectName?;
15
+ private projectRetries;
16
+ private branchName?;
17
+ private sha?;
18
+ private workflowName?;
19
+ private jobName?;
20
+ private runUrl?;
21
+ private commitMessage?;
22
+ private commitAuthor?;
23
+ private buffers;
24
+ private expectedTestsPerSpec;
25
+ private completedTestsPerSpec;
26
+ private countsState;
27
+ private runStartedEvent;
28
+ private flushIntervalMs;
29
+ private flushThreshold;
30
+ private flushTimer;
31
+ private flushCounter;
32
+ private pendingResults;
33
+ private flushedResults;
34
+ constructor(options: ReporterOptions);
35
+ onBegin(config: FullConfig, suite: Suite): Promise<void>;
36
+ private writeInitialRunFile;
37
+ private startFlushTimer;
38
+ private stopFlushTimer;
39
+ private flushPendingResults;
40
+ onTestEnd(test: TestCase, result: TestResult): Promise<void>;
41
+ onEnd(result: FullResult): Promise<void>;
42
+ private writeFinalFiles;
43
+ private initProjectConfig;
44
+ private analyzeTestOutcome;
45
+ private collectExpectedTests;
46
+ }
47
+ //# sourceMappingURL=reporter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reporter.d.ts","sourceRoot":"","sources":["../src/reporter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACR,UAAU,EACV,UAAU,EACV,QAAQ,EACR,KAAK,EACL,QAAQ,EACR,UAAU,EACb,MAAM,2BAA2B,CAAC;AAGnC,OAAO,EACH,eAAe,EAOlB,MAAM,SAAS,CAAC;AAiBjB,MAAM,CAAC,OAAO,OAAO,eAAgB,YAAW,QAAQ;IAEpD,OAAO,CAAC,IAAI,CAAe;IAC3B,OAAO,CAAC,SAAS,CAA0B;IAC3C,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,QAAQ,CAAkB;IAGlC,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,SAAS,CAAiB;IAClC,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,OAAO,CAAC,CAAS;IACzB,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,kBAAkB,CAAC,CAAS;IACpC,OAAO,CAAC,cAAc,CAA6B;IAGnD,OAAO,CAAC,UAAU,CAAC,CAAS;IAC5B,OAAO,CAAC,GAAG,CAAC,CAAS;IACrB,OAAO,CAAC,YAAY,CAAC,CAAS;IAC9B,OAAO,CAAC,OAAO,CAAC,CAAS;IACzB,OAAO,CAAC,MAAM,CAAC,CAAS;IACxB,OAAO,CAAC,aAAa,CAAC,CAAS;IAC/B,OAAO,CAAC,YAAY,CAAC,CAAS;IAG9B,OAAO,CAAC,OAAO,CAAsB;IACrC,OAAO,CAAC,oBAAoB,CAA6B;IACzD,OAAO,CAAC,qBAAqB,CAA6B;IAC1D,OAAO,CAAC,WAAW,CAAc;IAGjC,OAAO,CAAC,eAAe,CAAgC;IAGvD,OAAO,CAAC,eAAe,CAAgB;IACvC,OAAO,CAAC,cAAc,CAAa;IACnC,OAAO,CAAC,UAAU,CAA+B;IACjD,OAAO,CAAC,YAAY,CAAa;IACjC,OAAO,CAAC,cAAc,CAA4B;IAClD,OAAO,CAAC,cAAc,CAA4B;gBAEtC,OAAO,EAAE,eAAe;IA6H9B,OAAO,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK;YA6DhC,mBAAmB;IAWjC,OAAO,CAAC,eAAe;IAQvB,OAAO,CAAC,cAAc;YAOR,mBAAmB;IA8B3B,SAAS,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU;IAiE5C,KAAK,CAAC,MAAM,EAAE,UAAU;YAuDhB,eAAe;IA8B7B,OAAO,CAAC,iBAAiB;IAwCzB,OAAO,CAAC,kBAAkB;IA8B1B,OAAO,CAAC,oBAAoB;CA+B/B"}