@testchimp/playwright 0.1.7 → 0.1.8

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,485 @@
1
+ "use strict";
2
+ /**
3
+ * Browser performance metrics for ExploreChimp local runs — mirrors scriptservice
4
+ * `helpers/watcher.ts` (PerformanceObserver pipeline + getMetricsSince / resetMetrics).
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.parseExploreChimpLongTaskThresholdMs = parseExploreChimpLongTaskThresholdMs;
8
+ exports.installExploreChimpPerfMetricsObservers = installExploreChimpPerfMetricsObservers;
9
+ exports.collectMetricsSince = collectMetricsSince;
10
+ exports.resetExploreChimpPerfMetricsBuffers = resetExploreChimpPerfMetricsBuffers;
11
+ function parseExploreChimpLongTaskThresholdMs() {
12
+ const raw = process.env.EXPLORECHIMP_LONG_TASK_THRESHOLD_MS?.trim();
13
+ if (!raw)
14
+ return 50;
15
+ const n = Number(raw);
16
+ return Number.isFinite(n) && n > 0 ? n : 50;
17
+ }
18
+ /**
19
+ * Injects observers on every new document (Playwright init script). Idempotent per document.
20
+ */
21
+ async function installExploreChimpPerfMetricsObservers(page, longTaskThresholdMs) {
22
+ await page.addInitScript(({ longTaskThresholdMs: threshold }) => {
23
+ const g = globalThis;
24
+ g.__longTaskThreshold = threshold;
25
+ if (g.__exploreChimpPerfInstalled)
26
+ return;
27
+ g.__exploreChimpPerfInstalled = true;
28
+ g.__perfMetrics = g.__perfMetrics || { entries: [], cls: 0, startTime: Date.now() };
29
+ g.__layoutShiftEntries = g.__layoutShiftEntries || [];
30
+ function observeLcp() {
31
+ try {
32
+ const lcpObserver = new PerformanceObserver((list) => {
33
+ for (const entry of list.getEntries()) {
34
+ const e = entry;
35
+ g.__perfMetrics.entries.push({
36
+ type: 'lcp',
37
+ value: e.renderTime || e.loadTime || 0,
38
+ timestamp: Date.now(),
39
+ });
40
+ }
41
+ });
42
+ lcpObserver.observe({ type: 'largest-contentful-paint', buffered: true });
43
+ }
44
+ catch {
45
+ /* LCP not supported */
46
+ }
47
+ }
48
+ function observeFcp() {
49
+ try {
50
+ const paintObserver = new PerformanceObserver((list) => {
51
+ for (const entry of list.getEntries()) {
52
+ const pe = entry;
53
+ if (pe.name === 'first-contentful-paint') {
54
+ g.__perfMetrics.entries.push({
55
+ type: 'fcp',
56
+ value: pe.startTime || 0,
57
+ timestamp: Date.now(),
58
+ });
59
+ }
60
+ }
61
+ });
62
+ paintObserver.observe({ type: 'paint', buffered: true });
63
+ }
64
+ catch {
65
+ /* paint not supported */
66
+ }
67
+ }
68
+ function observeCls() {
69
+ try {
70
+ const clsObserver = new PerformanceObserver((list) => {
71
+ for (const entry of list.getEntries()) {
72
+ const le = entry;
73
+ if (!le.hadRecentInput) {
74
+ g.__perfMetrics.cls += le.value || 0;
75
+ g.__perfMetrics.entries.push({
76
+ type: 'cls',
77
+ value: le.value || 0,
78
+ cumulative: g.__perfMetrics.cls,
79
+ timestamp: Date.now(),
80
+ });
81
+ const sources = (le.sources || []).map((source) => {
82
+ const s = source;
83
+ const node = s.node;
84
+ const currentRect = s.currentRect;
85
+ let element;
86
+ if (node && currentRect) {
87
+ const tag = node.tagName?.toLowerCase();
88
+ const role = node.getAttribute?.('role') || undefined;
89
+ const id = node.id || undefined;
90
+ const syntheticId = node.getAttribute?.('data-synthetic-id') || undefined;
91
+ const ariaLabel = node.getAttribute?.('aria-label') || undefined;
92
+ let text;
93
+ try {
94
+ const tc = node.textContent || '';
95
+ if (tc.trim())
96
+ text = tc.trim().substring(0, 100);
97
+ }
98
+ catch {
99
+ /* ignore */
100
+ }
101
+ let className;
102
+ try {
103
+ const ca = node.getAttribute?.('class') || String(node.className || '');
104
+ if (ca)
105
+ className = ca.substring(0, 100);
106
+ }
107
+ catch {
108
+ /* ignore */
109
+ }
110
+ element = { tag, role, text, id, className, syntheticId, ariaLabel };
111
+ }
112
+ const viewportWidth = window.innerWidth || 1;
113
+ const viewportHeight = window.innerHeight || 1;
114
+ const cr = currentRect || { left: 0, top: 0, width: 0, height: 0 };
115
+ const boundingBox = {
116
+ xPct: (cr.left / viewportWidth) * 100,
117
+ yPct: (cr.top / viewportHeight) * 100,
118
+ widthPct: (cr.width / viewportWidth) * 100,
119
+ heightPct: (cr.height / viewportHeight) * 100,
120
+ };
121
+ return { element, boundingBox };
122
+ });
123
+ g.__layoutShiftEntries.push({
124
+ value: le.value || 0,
125
+ cumulative: g.__perfMetrics.cls,
126
+ timestamp: Date.now(),
127
+ sources,
128
+ });
129
+ }
130
+ }
131
+ });
132
+ clsObserver.observe({ type: 'layout-shift', buffered: true });
133
+ }
134
+ catch {
135
+ /* CLS not supported */
136
+ }
137
+ }
138
+ function observeLongTasks() {
139
+ try {
140
+ const longTaskObserver = new PerformanceObserver((list) => {
141
+ for (const entry of list.getEntries()) {
142
+ const lt = entry;
143
+ const duration = lt.duration;
144
+ const th = g.__longTaskThreshold || 50;
145
+ if (duration <= th)
146
+ continue;
147
+ let bestAttribution = lt.attribution?.[0];
148
+ let scriptUrl = '';
149
+ if (lt.attribution && lt.attribution.length > 0) {
150
+ for (const attr of lt.attribution) {
151
+ if (attr.containerSrc && attr.containerSrc.trim() !== '') {
152
+ bestAttribution = attr;
153
+ scriptUrl = attr.containerSrc;
154
+ break;
155
+ }
156
+ }
157
+ if (!scriptUrl) {
158
+ for (const attr of lt.attribution) {
159
+ if (attr.containerType && attr.containerType !== 'unknown') {
160
+ bestAttribution = attr;
161
+ break;
162
+ }
163
+ }
164
+ }
165
+ }
166
+ const attributionName = bestAttribution?.name || lt.name || 'unknown';
167
+ const attributionType = bestAttribution?.entryType || (lt.name ? 'longtask' : 'unknown');
168
+ g.__perfMetrics.entries.push({
169
+ type: 'longtask',
170
+ value: duration,
171
+ timestamp: Date.now(),
172
+ name: lt.name || 'unknown',
173
+ startTime: lt.startTime || 0,
174
+ attributionName,
175
+ attributionType,
176
+ containerType: bestAttribution?.containerType || (lt.name === 'self' ? 'window' : 'unknown'),
177
+ containerSrc: scriptUrl || bestAttribution?.containerSrc || '',
178
+ containerId: bestAttribution?.containerId || '',
179
+ });
180
+ }
181
+ });
182
+ longTaskObserver.observe({ type: 'longtask', buffered: true });
183
+ }
184
+ catch {
185
+ /* longtask not supported */
186
+ }
187
+ }
188
+ function determineResourceType(initiatorType, url) {
189
+ if (initiatorType === 'script' || url.endsWith('.js'))
190
+ return 'script';
191
+ if (initiatorType === 'link' || url.endsWith('.css'))
192
+ return 'stylesheet';
193
+ if (initiatorType === 'img' || /\.(jpg|jpeg|png|gif|webp|svg)$/i.test(url))
194
+ return 'image';
195
+ if (/\.(woff|woff2|ttf|otf|eot)$/i.test(url))
196
+ return 'font';
197
+ if (initiatorType === 'xmlhttprequest' || initiatorType === 'fetch')
198
+ return 'fetch';
199
+ return 'other';
200
+ }
201
+ function buildLocatorFromElement(element) {
202
+ const testId = element.getAttribute('data-testid');
203
+ if (testId)
204
+ return `getByTestId('${testId}')`;
205
+ const id = element.id;
206
+ if (id)
207
+ return `#${id}`;
208
+ const ariaLabel = element.getAttribute('aria-label');
209
+ if (ariaLabel)
210
+ return `getByLabel('${ariaLabel}')`;
211
+ const role = element.getAttribute('role') || element.tagName.toLowerCase();
212
+ const name = ariaLabel || element.textContent?.trim() || '';
213
+ if (name)
214
+ return `getByRole('${role}', { name: '${name.substring(0, 50)}' })`;
215
+ const tag = element.tagName.toLowerCase();
216
+ const text = element.textContent?.trim();
217
+ if (text)
218
+ return `getByText('${text.substring(0, 50)}')`;
219
+ return element.tagName.toLowerCase() + (element.className ? `.${String(element.className).split(' ')[0]}` : '');
220
+ }
221
+ function observeEventTiming() {
222
+ try {
223
+ g.__interactionMetrics = g.__interactionMetrics || [];
224
+ const PerfEvtCtor = typeof PerformanceEventTiming !== 'undefined' ? PerformanceEventTiming : undefined;
225
+ const eventTimingObserver = new PerformanceObserver((list) => {
226
+ for (const entry of list.getEntries()) {
227
+ if (entry.entryType !== 'event')
228
+ continue;
229
+ if (PerfEvtCtor && !(entry instanceof PerfEvtCtor))
230
+ continue;
231
+ const eventEntry = entry;
232
+ const eventName = eventEntry.name;
233
+ if (eventName !== 'click' && eventName !== 'dblclick' && eventName !== 'change')
234
+ continue;
235
+ const target = eventEntry.target;
236
+ if (!target)
237
+ continue;
238
+ if (eventName === 'change') {
239
+ const tagName = target.tagName;
240
+ const inputType = target.type;
241
+ const isSelect = tagName === 'SELECT';
242
+ const isCheckbox = tagName === 'INPUT' && inputType === 'checkbox';
243
+ const isRadio = tagName === 'INPUT' && inputType === 'radio';
244
+ if (!isSelect && !isCheckbox && !isRadio)
245
+ continue;
246
+ }
247
+ const somId = target.getAttribute('tc-som-id');
248
+ const syntheticId = target.getAttribute('data-synthetic-id');
249
+ const elementId = somId ?? syntheticId ?? undefined;
250
+ const rect = target.getBoundingClientRect();
251
+ const viewportWidth = window.innerWidth;
252
+ const viewportHeight = window.innerHeight;
253
+ const boundingBox = {
254
+ xPct: (rect.left / viewportWidth) * 100,
255
+ yPct: (rect.top / viewportHeight) * 100,
256
+ widthPct: (rect.width / viewportWidth) * 100,
257
+ heightPct: (rect.height / viewportHeight) * 100,
258
+ };
259
+ const locator = buildLocatorFromElement(target);
260
+ const inputDelay = eventEntry.processingStart - eventEntry.startTime;
261
+ const processingDuration = eventEntry.processingEnd - eventEntry.processingStart;
262
+ const presentationDelay = eventEntry.duration - (eventEntry.processingEnd - eventEntry.startTime);
263
+ if (!g.__interactionMetrics)
264
+ g.__interactionMetrics = [];
265
+ const MAX_INTERACTION_METRICS = 200;
266
+ if (g.__interactionMetrics.length >= MAX_INTERACTION_METRICS)
267
+ g.__interactionMetrics.shift();
268
+ g.__interactionMetrics.push({
269
+ duration: eventEntry.duration,
270
+ inputDelay,
271
+ processingDuration,
272
+ presentationDelay,
273
+ eventType: eventEntry.name,
274
+ timestamp: Date.now(),
275
+ targetElementId: elementId,
276
+ targetLocator: locator,
277
+ boundingBox,
278
+ });
279
+ }
280
+ });
281
+ const eventObserverOptions = { type: 'event', buffered: true };
282
+ eventObserverOptions.durationThreshold = 80;
283
+ eventTimingObserver.observe(eventObserverOptions);
284
+ }
285
+ catch {
286
+ /* Event Timing not supported */
287
+ }
288
+ }
289
+ function observeResourceTiming() {
290
+ try {
291
+ if (g.performance.setResourceTimingBufferSize) {
292
+ g.performance.setResourceTimingBufferSize(500);
293
+ }
294
+ g.__resourceTimings = g.__resourceTimings || [];
295
+ const resourceTimingObserver = new PerformanceObserver((list) => {
296
+ for (const entry of list.getEntries()) {
297
+ if (entry.entryType !== 'resource')
298
+ continue;
299
+ const resourceEntry = entry;
300
+ const dnsLookup = Math.max(0, resourceEntry.domainLookupEnd - resourceEntry.domainLookupStart);
301
+ const tcpConnection = Math.max(0, resourceEntry.connectEnd - resourceEntry.connectStart);
302
+ const tlsNegotiation = resourceEntry.secureConnectionStart > 0
303
+ ? Math.max(0, resourceEntry.connectEnd - resourceEntry.secureConnectionStart)
304
+ : 0;
305
+ const requestTime = Math.max(0, resourceEntry.responseStart - resourceEntry.requestStart);
306
+ const responseTime = Math.max(0, resourceEntry.responseEnd - resourceEntry.responseStart);
307
+ const duration = Math.max(0, resourceEntry.responseEnd - resourceEntry.fetchStart);
308
+ const initiatorType = resourceEntry.initiatorType || 'other';
309
+ const resourceType = determineResourceType(initiatorType, resourceEntry.name);
310
+ if (!g.__resourceTimings)
311
+ g.__resourceTimings = [];
312
+ const MAX_RESOURCE_TIMINGS = 200;
313
+ if (g.__resourceTimings.length >= MAX_RESOURCE_TIMINGS)
314
+ g.__resourceTimings.shift();
315
+ g.__resourceTimings.push({
316
+ url: resourceEntry.name,
317
+ initiatorType,
318
+ duration,
319
+ dnsLookupMs: dnsLookup > 0 ? dnsLookup : undefined,
320
+ tcpConnectionMs: tcpConnection > 0 ? tcpConnection : undefined,
321
+ tlsNegotiationMs: tlsNegotiation > 0 ? tlsNegotiation : undefined,
322
+ requestTimeMs: requestTime > 0 ? requestTime : undefined,
323
+ responseTimeMs: responseTime > 0 ? responseTime : undefined,
324
+ transferSizeBytes: resourceEntry.transferSize > 0 ? resourceEntry.transferSize : undefined,
325
+ encodedSizeBytes: resourceEntry.encodedBodySize > 0 ? resourceEntry.encodedBodySize : undefined,
326
+ decodedSizeBytes: resourceEntry.decodedBodySize > 0 ? resourceEntry.decodedBodySize : undefined,
327
+ fromCache: resourceEntry.transferSize === 0 && resourceEntry.decodedBodySize > 0,
328
+ timestamp: Date.now(),
329
+ resourceType,
330
+ });
331
+ }
332
+ });
333
+ resourceTimingObserver.observe({ type: 'resource', buffered: true });
334
+ }
335
+ catch {
336
+ /* resource timing not supported */
337
+ }
338
+ }
339
+ observeLcp();
340
+ observeFcp();
341
+ observeCls();
342
+ observeLongTasks();
343
+ observeEventTiming();
344
+ observeResourceTiming();
345
+ }, { longTaskThresholdMs });
346
+ }
347
+ /** Same semantics as watcher.getMetricsSince — filters perf entries by wall-clock `since`. */
348
+ async function collectMetricsSince(page, sinceTimestamp) {
349
+ return page.evaluate((since) => {
350
+ const w = globalThis;
351
+ function fallbackFromPerformanceTimeline() {
352
+ const nav = performance.getEntriesByType('navigation')[0];
353
+ const paint = performance.getEntriesByType('paint');
354
+ const fcp = paint.find((p) => p.name === 'first-contentful-paint')?.startTime ?? 0;
355
+ const lcpEntries = performance.getEntriesByType('largest-contentful-paint');
356
+ const lastLcp = lcpEntries.length > 0 ? lcpEntries[lcpEntries.length - 1] : null;
357
+ const lcpMs = lastLcp
358
+ ? (lastLcp.renderTime ??
359
+ lastLcp.loadTime ??
360
+ 0)
361
+ : 0;
362
+ let cls = 0;
363
+ try {
364
+ const shifts = performance.getEntriesByType('layout-shift');
365
+ for (const s of shifts) {
366
+ if (!s.hadRecentInput)
367
+ cls += s.value ?? 0;
368
+ }
369
+ }
370
+ catch {
371
+ /* ignore */
372
+ }
373
+ const mem = performance.memory;
374
+ return {
375
+ lcp: lcpMs,
376
+ fcp,
377
+ cls,
378
+ collectedAt: String(Date.now()),
379
+ longTasksCount: 0,
380
+ longTasksTotalMs: 0,
381
+ memoryHeapUsedMb: mem?.usedJSHeapSize ? mem.usedJSHeapSize / (1024 * 1024) : undefined,
382
+ memoryHeapTotalMb: mem?.totalJSHeapSize ? mem.totalJSHeapSize / (1024 * 1024) : undefined,
383
+ tbt: nav ? Math.max(0, (nav.loadEventEnd - nav.fetchStart) * 0.01) : 0,
384
+ };
385
+ }
386
+ if (!w.__perfMetrics) {
387
+ return fallbackFromPerformanceTimeline();
388
+ }
389
+ const allEntries = w.__perfMetrics.entries || [];
390
+ const entries = allEntries.filter((e) => e.timestamp >= since);
391
+ const lcpEntries = entries.filter((e) => e.type === 'lcp');
392
+ const lcp = lcpEntries.length > 0 ? lcpEntries[lcpEntries.length - 1].value : undefined;
393
+ const fcpEntries = entries.filter((e) => e.type === 'fcp');
394
+ const fcp = fcpEntries.length > 0 ? fcpEntries[0].value : undefined;
395
+ const cls = w.__perfMetrics.cls;
396
+ const longTasks = entries.filter((e) => e.type === 'longtask');
397
+ const longTasksCount = longTasks.length;
398
+ const longTasksTotalMs = longTasks.reduce((sum, task) => sum + task.value, 0);
399
+ const tbt = longTasks.reduce((sum, task) => sum + Math.max(0, task.value - 50), 0);
400
+ const longTaskDetails = longTasks.map((task) => ({
401
+ name: task.name || 'unknown',
402
+ startTime: task.startTime || 0,
403
+ duration: task.value,
404
+ attributionName: task.attributionName || 'unknown',
405
+ attributionType: task.attributionType || 'unknown',
406
+ containerType: task.containerType || 'unknown',
407
+ containerSrc: task.containerSrc || '',
408
+ containerId: task.containerId || '',
409
+ }));
410
+ let memoryHeapUsedMb;
411
+ let memoryHeapTotalMb;
412
+ const perfMem = performance
413
+ .memory;
414
+ if (perfMem) {
415
+ memoryHeapUsedMb = perfMem.usedJSHeapSize / (1024 * 1024);
416
+ memoryHeapTotalMb = perfMem.totalJSHeapSize / (1024 * 1024);
417
+ }
418
+ let interactionLatencies;
419
+ if (w.__interactionMetrics && w.__interactionMetrics.length > 0) {
420
+ const filtered = w.__interactionMetrics.filter((entry) => entry.timestamp >= since);
421
+ if (filtered.length > 0)
422
+ interactionLatencies = filtered;
423
+ }
424
+ let resourceTimings;
425
+ if (w.__resourceTimings && w.__resourceTimings.length > 0) {
426
+ const filtered = w.__resourceTimings.filter((entry) => entry.timestamp >= since);
427
+ if (filtered.length > 0)
428
+ resourceTimings = filtered;
429
+ }
430
+ let layoutShiftEntries;
431
+ if (w.__layoutShiftEntries && w.__layoutShiftEntries.length > 0) {
432
+ const filtered = w.__layoutShiftEntries.filter((entry) => entry.timestamp >= since);
433
+ w.__layoutShiftEntries = w.__layoutShiftEntries.filter((entry) => entry.timestamp < since);
434
+ if (filtered.length > 0)
435
+ layoutShiftEntries = filtered;
436
+ }
437
+ const base = {
438
+ lcp,
439
+ fcp,
440
+ cls,
441
+ tbt,
442
+ longTasksCount,
443
+ longTasksTotalMs,
444
+ longTaskDetails,
445
+ memoryHeapUsedMb,
446
+ memoryHeapTotalMb,
447
+ collectedAt: Date.now(),
448
+ };
449
+ if (interactionLatencies)
450
+ base.interactionLatencies = interactionLatencies;
451
+ if (resourceTimings)
452
+ base.resourceTimings = resourceTimings;
453
+ if (layoutShiftEntries)
454
+ base.layoutShiftEntries = layoutShiftEntries;
455
+ const hasAny = lcp !== undefined ||
456
+ fcp !== undefined ||
457
+ cls !== undefined ||
458
+ tbt > 0 ||
459
+ longTasksCount > 0 ||
460
+ (interactionLatencies && interactionLatencies.length > 0) ||
461
+ (resourceTimings && resourceTimings.length > 0);
462
+ if (!hasAny) {
463
+ return fallbackFromPerformanceTimeline();
464
+ }
465
+ return base;
466
+ }, sinceTimestamp);
467
+ }
468
+ /** Clears in-page metric buffers (watcher.resetMetrics). */
469
+ async function resetExploreChimpPerfMetricsBuffers(page) {
470
+ await page.evaluate(() => {
471
+ const w = globalThis;
472
+ if (w.__perfMetrics) {
473
+ w.__perfMetrics.entries = [];
474
+ w.__perfMetrics.cls = 0;
475
+ w.__perfMetrics.startTime = Date.now();
476
+ }
477
+ if (w.__interactionMetrics)
478
+ w.__interactionMetrics = [];
479
+ if (w.__resourceTimings)
480
+ w.__resourceTimings = [];
481
+ if (w.__layoutShiftEntries)
482
+ w.__layoutShiftEntries = [];
483
+ });
484
+ }
485
+ //# sourceMappingURL=perf-metrics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"perf-metrics.js","sourceRoot":"","sources":["../../src/explorechimp/perf-metrics.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -19,12 +19,14 @@
19
19
  * });
20
20
  *
21
21
  * Environment Variables:
22
- * - TESTCHIMP_API_KEY (required): API key for authentication
23
- * - TESTCHIMP_PROJECT_ID (optional): Project identifier; omit when using API-key–only auth
24
- * - TESTCHIMP_API_URL (optional): API URL (default: https://api.testchimp.io)
22
+ * - TESTCHIMP_API_KEY (required for backend calls): resolves project + organization server-side
23
+ * - TESTCHIMP_PROJECT_ID (optional): only when not inferable from API key (legacy paths)
24
+ * - TESTCHIMP_BACKEND_URL (optional): Featureservice base URL (defaults used by reporter)
25
25
  * - TESTCHIMP_TESTS_FOLDER (optional): Base folder for relative path calculation
26
26
  * - TESTCHIMP_RELEASE (optional): Release/version identifier
27
27
  * - TESTCHIMP_ENV (optional): Environment name (e.g., staging, prod)
28
+ * Runtime (`@testchimp/playwright/runtime`): use `installTrueCoverage` or `installTestChimp` (same behavior).
29
+ * ExploreChimp: set `EXPLORECHIMP_ENABLED=true`, use `test('…', async ({ markScreenState }) => …)`; `TESTCHIMP_BATCH_INVOCATION_ID`, sources/regex envs as documented in the runtime module.
28
30
  */
29
31
  export { TestChimpReporter } from './testchimp-reporter';
30
32
  export { TestChimpApiClient } from './api-client';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AAGxB,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,eAAe,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AAGxB,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,eAAe,iBAAiB,CAAC"}
package/dist/index.js CHANGED
@@ -20,12 +20,14 @@
20
20
  * });
21
21
  *
22
22
  * Environment Variables:
23
- * - TESTCHIMP_API_KEY (required): API key for authentication
24
- * - TESTCHIMP_PROJECT_ID (optional): Project identifier; omit when using API-key–only auth
25
- * - TESTCHIMP_API_URL (optional): API URL (default: https://api.testchimp.io)
23
+ * - TESTCHIMP_API_KEY (required for backend calls): resolves project + organization server-side
24
+ * - TESTCHIMP_PROJECT_ID (optional): only when not inferable from API key (legacy paths)
25
+ * - TESTCHIMP_BACKEND_URL (optional): Featureservice base URL (defaults used by reporter)
26
26
  * - TESTCHIMP_TESTS_FOLDER (optional): Base folder for relative path calculation
27
27
  * - TESTCHIMP_RELEASE (optional): Release/version identifier
28
28
  * - TESTCHIMP_ENV (optional): Environment name (e.g., staging, prod)
29
+ * Runtime (`@testchimp/playwright/runtime`): use `installTrueCoverage` or `installTestChimp` (same behavior).
30
+ * ExploreChimp: set `EXPLORECHIMP_ENABLED=true`, use `test('…', async ({ markScreenState }) => …)`; `TESTCHIMP_BATCH_INVOCATION_ID`, sources/regex envs as documented in the runtime module.
29
31
  */
30
32
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
31
33
  if (k2 === undefined) k2 = k;
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;;;;;;;;;;;;;;;;;AAEH,2DAAyD;AAAhD,uHAAA,iBAAiB,OAAA;AAC1B,2CAAkD;AAAzC,gHAAA,kBAAkB,OAAA;AAC3B,0CAAwB;AACxB,0CAAwB;AAExB,uDAAuD;AACvD,6DAAyD;AACzD,kBAAe,sCAAiB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;;;;;;;;;;;;;;;;;AAEH,2DAAyD;AAAhD,uHAAA,iBAAiB,OAAA;AAC1B,2CAAkD;AAAzC,gHAAA,kBAAkB,OAAA;AAC3B,0CAAwB;AACxB,0CAAwB;AAExB,uDAAuD;AACvD,6DAAyD;AACzD,kBAAe,sCAAiB,CAAC"}
package/dist/runtime.d.ts CHANGED
@@ -1,23 +1,21 @@
1
1
  /**
2
- * TrueCoverage runtime: injects CITestInfo into the browser so @testchimp/rum-js can
3
- * send the ci-test-info header on RUM ingest requests.
2
+ * TestChimp Playwright runtime: TrueCoverage CI metadata (`installTrueCoverage` / `installTestChimp`) and,
3
+ * when `EXPLORECHIMP_ENABLED`, ExploreChimp local analytics (same installs — no separate ExploreChimp install).
4
4
  *
5
- * Prefer `installTrueCoverage(mergedTest)` on the same `test` object your specs use
6
- * (e.g. `mergeTests` output from `fixtures/index.js`). The side-effect
7
- * `import '@testchimp/playwright/runtime'` still registers on the root `@playwright/test`
8
- * instance for backward compatibility.
5
+ * Prefer `installTrueCoverage(mergedTest)` (or `installTestChimp`) on the same `test` object your specs use.
6
+ * Screen/state markers: `test('…', async ({ markScreenState }) => { await markScreenState('Screen', 'state'); })`.
7
+ * The same `markScreenState` fixture records a Playwright `test.step` when ExploreChimp is off, and runs ExploreChimp analytics when it is on.
8
+ * Side-effect `import '@testchimp/playwright/runtime'` still registers on the root `@playwright/test` instance.
9
9
  */
10
+ import { isExploreChimpEnabled } from './explorechimp';
11
+ /** Bound screen/state marker from the `markScreenState` Playwright fixture. */
12
+ export type MarkScreenStateFixture = (screenName: string, stateName?: string) => Promise<void>;
10
13
  /**
11
14
  * Register TrueCoverage CI metadata injection on the given Playwright `test` object
12
- * (including `mergeTests(...)` output). Returns the same instance for chaining.
15
+ * (including `mergeTests(...)` output). When `EXPLORECHIMP_ENABLED`, also applies ExploreChimp page wiring.
13
16
  */
14
17
  export declare function installTrueCoverage(test: any): any;
15
- /**
16
- * Marks the current logical screen/state so it appears as a Playwright **step** in traces and reporters.
17
- * Call from inside a test (or hook) after the UI has reached a stable state.
18
- *
19
- * @param screenName logical screen (e.g. "Login", "Dashboard")
20
- * @param stateName optional state within the screen; defaults to `"default"`
21
- */
22
- export declare function markScreenState(screenName: string, stateName?: string): Promise<void>;
18
+ /** Same behavior as {@link installTrueCoverage} — umbrella name for TrueCoverage + ExploreChimp (via env). */
19
+ export declare const installTestChimp: typeof installTrueCoverage;
20
+ export { isExploreChimpEnabled };
23
21
  //# sourceMappingURL=runtime.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAwBH;;;GAGG;AAEH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,GAAG,GAAG,GAAG,CAyDlD;AAID;;;;;;GAMG;AACH,wBAAsB,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAgB3F"}
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAWH,OAAO,EAGL,qBAAqB,EACtB,MAAM,gBAAgB,CAAC;AAKxB,+EAA+E;AAC/E,MAAM,MAAM,sBAAsB,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAmB/F;;;GAGG;AAEH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,GAAG,GAAG,GAAG,CAsDlD;AAED,8GAA8G;AAC9G,eAAO,MAAM,gBAAgB,4BAAsB,CAAC;AAEpD,OAAO,EAAE,qBAAqB,EAAE,CAAC"}