@sudobility/testomniac_runner_service 0.1.96 → 0.1.97

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.
@@ -1,3 +1,12 @@
1
1
  import type { AnalyzerContext } from "../types";
2
- export declare function generateNavigationTestInteractions(_analyzer: any, _context: AnalyzerContext): Promise<void>;
2
+ /**
3
+ * Create direct navigation interactions for same-origin links discovered on
4
+ * the current page. These are placed in the "Direct Navigations" surface
5
+ * which runs as execution group 0 (before hover/content interactions), so
6
+ * discovered pages get short dependency chains.
7
+ *
8
+ * Navigation interactions never have a dependencyTestInteractionId — they
9
+ * navigate directly via goto.
10
+ */
11
+ export declare function generateNavigationTestInteractions(analyzer: any, context: AnalyzerContext): Promise<void>;
3
12
  //# sourceMappingURL=navigation.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"navigation.d.ts","sourceRoot":"","sources":["../../../../src/analyzer/page-analyzer/generators/navigation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAEhD,wBAAsB,kCAAkC,CACtD,SAAS,EAAE,GAAG,EACd,QAAQ,EAAE,eAAe,GACxB,OAAO,CAAC,IAAI,CAAC,CAKf"}
1
+ {"version":3,"file":"navigation.d.ts","sourceRoot":"","sources":["../../../../src/analyzer/page-analyzer/generators/navigation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAEhD;;;;;;;;GAQG;AACH,wBAAsB,kCAAkC,CACtD,QAAQ,EAAE,GAAG,EACb,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,IAAI,CAAC,CAmEf"}
@@ -1,7 +1,69 @@
1
- export async function generateNavigationTestInteractions(_analyzer, _context) {
2
- // Navigation surface is managed externally (scan bootstrap + auto-created
3
- // navigations from hover-click discovery). Do not reconcile reconciling
4
- // with desiredKeys: [] would retire auto-created navigation interactions
5
- // before the runner can execute them.
1
+ /**
2
+ * Create direct navigation interactions for same-origin links discovered on
3
+ * the current page. These are placed in the "Direct Navigations" surface
4
+ * which runs as execution group 0 (before hover/content interactions), so
5
+ * discovered pages get short dependency chains.
6
+ *
7
+ * Navigation interactions never have a dependencyTestInteractionId — they
8
+ * navigate directly via goto.
9
+ */
10
+ export async function generateNavigationTestInteractions(analyzer, context) {
11
+ const { api, runnerId, testEnvironmentId, sizeClass, uid, bundleRun } = context;
12
+ // Only generate for discovery runs that have a navigation surface
13
+ if (!context.navigationSurface || !bundleRun)
14
+ return;
15
+ const navSurfaceId = context.navigationSurface.id;
16
+ // Collect unique same-origin relative paths from actionable navigation items
17
+ const seenPaths = new Set();
18
+ seenPaths.add(context.currentPath); // skip the current page
19
+ const navPaths = [];
20
+ for (const item of context.actionableItems) {
21
+ if (item.actionKind !== "navigate" || !item.href)
22
+ continue;
23
+ const relativePath = extractRelativePath(item.href);
24
+ if (!relativePath || seenPaths.has(relativePath))
25
+ continue;
26
+ // Skip external links, anchors, and non-http
27
+ if (item.href.startsWith("mailto:") ||
28
+ item.href.startsWith("tel:") ||
29
+ item.href.startsWith("javascript:") ||
30
+ item.href === "#" ||
31
+ item.href.startsWith("#")) {
32
+ continue;
33
+ }
34
+ seenPaths.add(relativePath);
35
+ navPaths.push(relativePath);
36
+ }
37
+ if (navPaths.length === 0)
38
+ return;
39
+ // Get the open surface run for Direct Navigations
40
+ const surfaceRuns = await api.getOpenTestSurfaceRuns(bundleRun.id);
41
+ const navSurfaceRun = surfaceRuns.find((sr) => sr.testSurfaceId === navSurfaceId);
42
+ if (!navSurfaceRun)
43
+ return;
44
+ for (const path of navPaths) {
45
+ const navInteraction = analyzer.buildNavigationTestInteraction(path, sizeClass, uid);
46
+ const saved = await api.ensureTestInteraction(runnerId, navSurfaceId, navInteraction, testEnvironmentId);
47
+ try {
48
+ await api.createTestInteractionRun({
49
+ testInteractionId: saved.id,
50
+ testSurfaceRunId: navSurfaceRun.id,
51
+ });
52
+ }
53
+ catch {
54
+ // Run may already exist
55
+ }
56
+ }
57
+ // Do NOT reconcile — other navigation interactions (from hover-click
58
+ // discovery or scan bootstrap) should not be retired.
59
+ }
60
+ function extractRelativePath(href) {
61
+ try {
62
+ const url = new URL(href, "http://placeholder");
63
+ return url.pathname + url.search;
64
+ }
65
+ catch {
66
+ return null;
67
+ }
6
68
  }
7
69
  //# sourceMappingURL=navigation.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"navigation.js","sourceRoot":"","sources":["../../../../src/analyzer/page-analyzer/generators/navigation.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,KAAK,UAAU,kCAAkC,CACtD,SAAc,EACd,QAAyB;IAEzB,0EAA0E;IAC1E,0EAA0E;IAC1E,yEAAyE;IACzE,sCAAsC;AACxC,CAAC"}
1
+ {"version":3,"file":"navigation.js","sourceRoot":"","sources":["../../../../src/analyzer/page-analyzer/generators/navigation.ts"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,kCAAkC,CACtD,QAAa,EACb,OAAwB;IAExB,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,iBAAiB,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GACnE,OAAO,CAAC;IAEV,kEAAkE;IAClE,IAAI,CAAC,OAAO,CAAC,iBAAiB,IAAI,CAAC,SAAS;QAAE,OAAO;IAErD,MAAM,YAAY,GAAG,OAAO,CAAC,iBAAiB,CAAC,EAAE,CAAC;IAElD,6EAA6E;IAC7E,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;IACpC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,wBAAwB;IAE5D,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;QAC3C,IAAI,IAAI,CAAC,UAAU,KAAK,UAAU,IAAI,CAAC,IAAI,CAAC,IAAI;YAAE,SAAS;QAE3D,MAAM,YAAY,GAAG,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpD,IAAI,CAAC,YAAY,IAAI,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC;YAAE,SAAS;QAC3D,6CAA6C;QAC7C,IACE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;YAC/B,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;YAC5B,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC;YACnC,IAAI,CAAC,IAAI,KAAK,GAAG;YACjB,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EACzB,CAAC;YACD,SAAS;QACX,CAAC;QAED,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAC5B,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC9B,CAAC;IAED,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAElC,kDAAkD;IAClD,MAAM,WAAW,GAAG,MAAM,GAAG,CAAC,sBAAsB,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IACnE,MAAM,aAAa,GAAG,WAAW,CAAC,IAAI,CACpC,CAAC,EAA6B,EAAE,EAAE,CAAC,EAAE,CAAC,aAAa,KAAK,YAAY,CACrE,CAAC;IACF,IAAI,CAAC,aAAa;QAAE,OAAO;IAE3B,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;QAC5B,MAAM,cAAc,GAAG,QAAQ,CAAC,8BAA8B,CAC5D,IAAI,EACJ,SAAS,EACT,GAAG,CACJ,CAAC;QACF,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,qBAAqB,CAC3C,QAAQ,EACR,YAAY,EACZ,cAAc,EACd,iBAAiB,CAClB,CAAC;QACF,IAAI,CAAC;YACH,MAAM,GAAG,CAAC,wBAAwB,CAAC;gBACjC,iBAAiB,EAAE,KAAK,CAAC,EAAE;gBAC3B,gBAAgB,EAAE,aAAa,CAAC,EAAE;aACnC,CAAC,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACP,wBAAwB;QAC1B,CAAC;IACH,CAAC;IAED,qEAAqE;IACrE,sDAAsD;AACxD,CAAC;AAED,SAAS,mBAAmB,CAAC,IAAY;IACvC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,oBAAoB,CAAC,CAAC;QAChD,OAAO,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAC;IACnC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sudobility/testomniac_runner_service",
3
- "version": "0.1.96",
3
+ "version": "0.1.97",
4
4
  "description": "Shared scanning logic for Testomniac scanner and Chrome extension",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",