@empiricalrun/playwright-utils 0.39.5 → 0.39.6

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 CHANGED
@@ -1,5 +1,14 @@
1
1
  # @empiricalrun/playwright-utils
2
2
 
3
+ ## 0.39.6
4
+
5
+ ### Patch Changes
6
+
7
+ - 4947d9a: feat: move failing line collection to reporter
8
+ - @empiricalrun/cua@0.2.0
9
+ - @empiricalrun/dashboard-client@0.2.0
10
+ - @empiricalrun/llm@0.25.2
11
+
3
12
  ## 0.39.5
4
13
 
5
14
  ### Patch Changes
@@ -1 +1 @@
1
- {"version":3,"file":"empirical-reporter.d.ts","sourceRoot":"","sources":["../../src/reporter/empirical-reporter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,UAAU,EACV,QAAQ,EACR,QAAQ,EACR,UAAU,EACX,MAAM,2BAA2B,CAAC;AAmBnC,cAAM,iBAAkB,YAAW,QAAQ;IACzC,OAAO,CAAC,kBAAkB,CAAyB;IACnD,OAAO,CAAC,oBAAoB,CAG1B;IACF,OAAO,CAAC,sBAAsB,CAAuB;IACrD,OAAO,CAAC,YAAY,CAAgD;IACpE,OAAO,CAAC,iBAAiB,CAAyC;IAClE,OAAO,CAAC,gBAAgB,CAAkC;IAC1D,OAAO,CAAC,SAAS,CAAyB;;IAM1C,OAAO,CAAC,6BAA6B,CAkCnC;IAEF,SAAS,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU;IAoFtC,KAAK,CAAC,MAAM,EAAE,UAAU;IA8G9B,OAAO,CAAC,gBAAgB;YAoBV,gBAAgB;YAOhB,iBAAiB;CAmChC;AAED,eAAe,iBAAiB,CAAC"}
1
+ {"version":3,"file":"empirical-reporter.d.ts","sourceRoot":"","sources":["../../src/reporter/empirical-reporter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,UAAU,EACV,QAAQ,EACR,QAAQ,EACR,UAAU,EACX,MAAM,2BAA2B,CAAC;AAoBnC,cAAM,iBAAkB,YAAW,QAAQ;IACzC,OAAO,CAAC,kBAAkB,CAAyB;IACnD,OAAO,CAAC,oBAAoB,CAG1B;IACF,OAAO,CAAC,sBAAsB,CAAuB;IACrD,OAAO,CAAC,YAAY,CAAgD;IACpE,OAAO,CAAC,iBAAiB,CAAyC;IAClE,OAAO,CAAC,gBAAgB,CAAkC;IAC1D,OAAO,CAAC,SAAS,CAAyB;;IAM1C,OAAO,CAAC,6BAA6B,CAkCnC;IAEF,SAAS,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU;IA6FtC,KAAK,CAAC,MAAM,EAAE,UAAU;IA8G9B,OAAO,CAAC,gBAAgB;YAoBV,gBAAgB;YAOhB,iBAAiB;CAmChC;AAED,eAAe,iBAAiB,CAAC"}
@@ -8,6 +8,7 @@ const path_1 = __importDefault(require("path"));
8
8
  const logger_1 = require("../logger");
9
9
  const telemetry_1 = require("../telemetry");
10
10
  const blob_utils_1 = require("./blob-utils");
11
+ const failing_line_1 = require("./failing-line");
11
12
  const uploader_1 = require("./uploader");
12
13
  const util_1 = require("./util");
13
14
  class EmpiricalReporter {
@@ -88,6 +89,10 @@ class EmpiricalReporter {
88
89
  try {
89
90
  logger_1.logger.debug(`[Empirical Reporter] Attachments for test ${test.title} are uploaded:`, successfulAttachments);
90
91
  const { suites, projectName } = (0, util_1.suitesAndProjectForTest)(test);
92
+ const errorLocation = result.error?.location;
93
+ const failingLine = errorLocation
94
+ ? (0, failing_line_1.getFailingLineFromSource)(errorLocation.file, errorLocation.line, errorLocation.column)
95
+ : undefined;
91
96
  const params = {
92
97
  test,
93
98
  suites,
@@ -95,6 +100,7 @@ class EmpiricalReporter {
95
100
  projectName,
96
101
  attachments: successfulAttachments,
97
102
  runId: process.env.TEST_RUN_GITHUB_ACTION_ID,
103
+ failingLine,
98
104
  };
99
105
  return (0, util_1.sendTestCaseUpdateToDashboard)(params);
100
106
  }
@@ -0,0 +1,2 @@
1
+ export declare function getFailingLineFromSource(filePath: string, line: number, column: number): string | undefined;
2
+ //# sourceMappingURL=failing-line.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"failing-line.d.ts","sourceRoot":"","sources":["../../src/reporter/failing-line.ts"],"names":[],"mappings":"AAmDA,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,GACb,MAAM,GAAG,SAAS,CAQpB"}
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.getFailingLineFromSource = getFailingLineFromSource;
7
+ const fs_1 = __importDefault(require("fs"));
8
+ const ts_morph_1 = require("ts-morph");
9
+ const supportedSyntaxes = [
10
+ ts_morph_1.SyntaxKind.ExpressionStatement,
11
+ ts_morph_1.SyntaxKind.VariableStatement,
12
+ ts_morph_1.SyntaxKind.ReturnStatement,
13
+ ts_morph_1.SyntaxKind.IfStatement,
14
+ ts_morph_1.SyntaxKind.ForStatement,
15
+ ts_morph_1.SyntaxKind.WhileStatement,
16
+ ts_morph_1.SyntaxKind.DoStatement,
17
+ ts_morph_1.SyntaxKind.SwitchStatement,
18
+ ts_morph_1.SyntaxKind.TryStatement,
19
+ ts_morph_1.SyntaxKind.FunctionDeclaration,
20
+ ts_morph_1.SyntaxKind.ArrowFunction,
21
+ ts_morph_1.SyntaxKind.ClassDeclaration,
22
+ ts_morph_1.SyntaxKind.Block,
23
+ ts_morph_1.SyntaxKind.ThrowStatement,
24
+ ];
25
+ function getTestStatementFromCode(code, line, column) {
26
+ const project = new ts_morph_1.Project();
27
+ const sourceFile = project.createSourceFile("temp-file.ts", `${code}`);
28
+ const position = sourceFile
29
+ .getFullText()
30
+ .split("\n")
31
+ .slice(0, line - 1)
32
+ .reduce((sum, l) => sum + l.length + 1, 0) +
33
+ (column - 1);
34
+ const nodeAtPos = sourceFile.getDescendantAtPos(position);
35
+ if (nodeAtPos) {
36
+ let statement = nodeAtPos.getFirstAncestor((ancestor) => supportedSyntaxes.includes(ancestor.getKind()));
37
+ if (!statement) {
38
+ if (supportedSyntaxes.includes(nodeAtPos.getKind())) {
39
+ statement = nodeAtPos;
40
+ }
41
+ }
42
+ if (statement) {
43
+ return statement.getText();
44
+ }
45
+ }
46
+ return "";
47
+ }
48
+ function getFailingLineFromSource(filePath, line, column) {
49
+ try {
50
+ const code = fs_1.default.readFileSync(filePath, "utf-8");
51
+ const statement = getTestStatementFromCode(code, line, column);
52
+ return statement || undefined;
53
+ }
54
+ catch {
55
+ return undefined;
56
+ }
57
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@empiricalrun/playwright-utils",
3
- "version": "0.39.5",
3
+ "version": "0.39.6",
4
4
  "publishConfig": {
5
5
  "registry": "https://registry.npmjs.org/",
6
6
  "access": "public"
@@ -32,7 +32,7 @@
32
32
  "@types/pg": "^8.11.6",
33
33
  "playwright-core": "1.57.0",
34
34
  "serve-handler": "^6.1.6",
35
- "@empiricalrun/shared-types": "0.12.0"
35
+ "@empiricalrun/shared-types": "0.12.1"
36
36
  },
37
37
  "dependencies": {
38
38
  "@babel/code-frame": "^7.24.7",
@@ -42,10 +42,11 @@
42
42
  "console-log-level": "^1.4.1",
43
43
  "puppeteer-extra-plugin-recaptcha": "^3.6.8",
44
44
  "rimraf": "^6.0.1",
45
- "@empiricalrun/dashboard-client": "^0.2.0",
45
+ "ts-morph": "^23.0.0",
46
46
  "@empiricalrun/cua": "^0.2.0",
47
+ "@empiricalrun/r2-uploader": "^0.9.1",
47
48
  "@empiricalrun/llm": "^0.25.2",
48
- "@empiricalrun/r2-uploader": "^0.9.1"
49
+ "@empiricalrun/dashboard-client": "^0.2.0"
49
50
  },
50
51
  "scripts": {
51
52
  "dev": "tsc --build --watch",
@@ -1 +1 @@
1
- {"root":["./src/email.ts","./src/index.ts","./src/kv.ts","./src/logger.ts","./src/mailosaur-client.ts","./src/playwright-extensions.ts","./src/postgres.ts","./src/telemetry.ts","./src/webhook.ts","./src/auth/google.ts","./src/auth/index.ts","./src/auth/types.ts","./src/captcha/index.ts","./src/captcha/vision.ts","./src/config/index.ts","./src/config/proxy.ts","./src/config/devices/types.ts","./src/overlay-tests/cache.spec.ts","./src/overlay-tests/click.spec.ts","./src/overlay-tests/fixtures.ts","./src/overlay-tests/patch.spec.ts","./src/reporter/blob-utils.ts","./src/reporter/empirical-reporter.ts","./src/reporter/uploader.ts","./src/reporter/util.ts","./src/test/constants.ts","./src/test/index.ts","./src/test/types.ts","./src/test/video-labels.ts","./src/test/expect/index.ts","./src/test/expect/types.ts","./src/test/expect/visual.ts","./src/test/expect/webhook.ts","./src/test/scripts/agent-capabilities.ts","./src/test/scripts/index.ts","./src/test/scripts/locator-highlights.ts","./src/test/scripts/locator-vision.ts","./src/test/scripts/mouse-pointer.ts","./src/test/scripts/types.ts","./src/test/scripts/pw-locator-patch/dismiss-overlays/cache.ts","./src/test/scripts/pw-locator-patch/dismiss-overlays/index.ts","./src/test/scripts/pw-locator-patch/dismiss-overlays/prompt.ts","./src/test/scripts/pw-locator-patch/dismiss-overlays/types.ts","./src/test/scripts/pw-locator-patch/dismiss-overlays/utils.ts","./src/test/scripts/pw-locator-patch/highlight/click.ts","./src/test/scripts/pw-locator-patch/highlight/expect.ts","./src/test/scripts/pw-locator-patch/highlight/hover.ts","./src/test/scripts/pw-locator-patch/highlight/inner-text.ts","./src/test/scripts/pw-locator-patch/highlight/input-value.ts","./src/test/scripts/pw-locator-patch/highlight/is-checked.ts","./src/test/scripts/pw-locator-patch/highlight/is-disabled.ts","./src/test/scripts/pw-locator-patch/highlight/is-editable.ts","./src/test/scripts/pw-locator-patch/highlight/text-content.ts","./src/test/scripts/pw-locator-patch/utils/index.ts","./src/test/scripts/pw-locator-patch/vision/query.ts"],"version":"5.8.3"}
1
+ {"root":["./src/email.ts","./src/index.ts","./src/kv.ts","./src/logger.ts","./src/mailosaur-client.ts","./src/playwright-extensions.ts","./src/postgres.ts","./src/telemetry.ts","./src/webhook.ts","./src/auth/google.ts","./src/auth/index.ts","./src/auth/types.ts","./src/captcha/index.ts","./src/captcha/vision.ts","./src/config/index.ts","./src/config/proxy.ts","./src/config/devices/types.ts","./src/overlay-tests/cache.spec.ts","./src/overlay-tests/click.spec.ts","./src/overlay-tests/fixtures.ts","./src/overlay-tests/patch.spec.ts","./src/reporter/blob-utils.ts","./src/reporter/empirical-reporter.ts","./src/reporter/failing-line.ts","./src/reporter/uploader.ts","./src/reporter/util.ts","./src/test/constants.ts","./src/test/index.ts","./src/test/types.ts","./src/test/video-labels.ts","./src/test/expect/index.ts","./src/test/expect/types.ts","./src/test/expect/visual.ts","./src/test/expect/webhook.ts","./src/test/scripts/agent-capabilities.ts","./src/test/scripts/index.ts","./src/test/scripts/locator-highlights.ts","./src/test/scripts/locator-vision.ts","./src/test/scripts/mouse-pointer.ts","./src/test/scripts/types.ts","./src/test/scripts/pw-locator-patch/dismiss-overlays/cache.ts","./src/test/scripts/pw-locator-patch/dismiss-overlays/index.ts","./src/test/scripts/pw-locator-patch/dismiss-overlays/prompt.ts","./src/test/scripts/pw-locator-patch/dismiss-overlays/types.ts","./src/test/scripts/pw-locator-patch/dismiss-overlays/utils.ts","./src/test/scripts/pw-locator-patch/highlight/click.ts","./src/test/scripts/pw-locator-patch/highlight/expect.ts","./src/test/scripts/pw-locator-patch/highlight/hover.ts","./src/test/scripts/pw-locator-patch/highlight/inner-text.ts","./src/test/scripts/pw-locator-patch/highlight/input-value.ts","./src/test/scripts/pw-locator-patch/highlight/is-checked.ts","./src/test/scripts/pw-locator-patch/highlight/is-disabled.ts","./src/test/scripts/pw-locator-patch/highlight/is-editable.ts","./src/test/scripts/pw-locator-patch/highlight/text-content.ts","./src/test/scripts/pw-locator-patch/utils/index.ts","./src/test/scripts/pw-locator-patch/vision/query.ts"],"version":"5.8.3"}