@sudobility/testomniac_lib 0.0.57 → 0.0.59

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,4 +1,7 @@
1
1
  export { useScanManager } from './useScanManager';
2
2
  export { useDashboardManager } from './useDashboardManager';
3
3
  export { useRunManager } from './useRunManager';
4
+ export { usePageMapData } from './usePageMapData';
5
+ export type { PageMapNode, PageMapEdge, UsePageMapDataConfig, } from './usePageMapData';
6
+ export { useEnvironmentManager } from './useEnvironmentManager';
4
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/business/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/business/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,YAAY,EACV,WAAW,EACX,WAAW,EACX,oBAAoB,GACrB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC"}
@@ -1,4 +1,6 @@
1
1
  export { useScanManager } from './useScanManager';
2
2
  export { useDashboardManager } from './useDashboardManager';
3
3
  export { useRunManager } from './useRunManager';
4
+ export { usePageMapData } from './usePageMapData';
5
+ export { useEnvironmentManager } from './useEnvironmentManager';
4
6
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/business/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/business/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAMlD,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC"}
@@ -0,0 +1,24 @@
1
+ import type { NetworkClient } from '@sudobility/types';
2
+ import type { PageResponse, TestElementResponse, TestSurfaceResponse } from '@sudobility/testomniac_types';
3
+ import type { FirebaseIdToken } from '@sudobility/testomniac_client';
4
+ interface UseEnvironmentManagerConfig {
5
+ networkClient: NetworkClient;
6
+ baseUrl: string;
7
+ envId: number;
8
+ token: FirebaseIdToken;
9
+ enabled?: boolean;
10
+ }
11
+ export declare function useEnvironmentManager(config: UseEnvironmentManagerConfig): {
12
+ pages: PageResponse[];
13
+ testElements: TestElementResponse[];
14
+ testSurfaces: TestSurfaceResponse[];
15
+ isLoading: boolean;
16
+ error: Error | null;
17
+ counts: {
18
+ pages: number;
19
+ testElements: number;
20
+ testSurfaces: number;
21
+ };
22
+ };
23
+ export {};
24
+ //# sourceMappingURL=useEnvironmentManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useEnvironmentManager.d.ts","sourceRoot":"","sources":["../../../src/business/hooks/useEnvironmentManager.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,KAAK,EACV,YAAY,EACZ,mBAAmB,EACnB,mBAAmB,EACpB,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAGrE,UAAU,2BAA2B;IACnC,aAAa,EAAE,aAAa,CAAC;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,eAAe,CAAC;IACvB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,2BAA2B;;;;;;;;;;;EA0DxE"}
@@ -0,0 +1,54 @@
1
+ import { useCallback, useEffect, useMemo, useState } from 'react';
2
+ import { TestomniacClient } from '@sudobility/testomniac_client';
3
+ export function useEnvironmentManager(config) {
4
+ const { networkClient, baseUrl, envId, token, enabled = true } = config;
5
+ const [pages, setPages] = useState([]);
6
+ const [testElements, setTestElements] = useState([]);
7
+ const [testSurfaces, setTestSurfaces] = useState([]);
8
+ const [isLoading, setIsLoading] = useState(false);
9
+ const [error, setError] = useState(null);
10
+ const client = useMemo(() => new TestomniacClient({ networkClient, baseUrl }), [networkClient, baseUrl]);
11
+ const fetchAll = useCallback(async () => {
12
+ setIsLoading(true);
13
+ setError(null);
14
+ try {
15
+ const [pagesRes, testElementsRes, testSurfacesRes] = await Promise.all([
16
+ client.getEnvironmentPages(envId, token),
17
+ client.getEnvironmentTestElements(envId, token),
18
+ client.getEnvironmentTestSurfaces(envId, token),
19
+ ]);
20
+ if (pagesRes.success && pagesRes.data)
21
+ setPages(pagesRes.data);
22
+ if (testElementsRes.success && testElementsRes.data)
23
+ setTestElements(testElementsRes.data);
24
+ if (testSurfacesRes.success && testSurfacesRes.data)
25
+ setTestSurfaces(testSurfacesRes.data);
26
+ }
27
+ catch (err) {
28
+ setError(err instanceof Error
29
+ ? err
30
+ : new Error('Failed to fetch environment data'));
31
+ }
32
+ finally {
33
+ setIsLoading(false);
34
+ }
35
+ }, [client, envId, token]);
36
+ useEffect(() => {
37
+ if (enabled) {
38
+ void fetchAll();
39
+ }
40
+ }, [enabled, fetchAll]);
41
+ return {
42
+ pages,
43
+ testElements,
44
+ testSurfaces,
45
+ isLoading,
46
+ error,
47
+ counts: {
48
+ pages: pages.length,
49
+ testElements: testElements.length,
50
+ testSurfaces: testSurfaces.length,
51
+ },
52
+ };
53
+ }
54
+ //# sourceMappingURL=useEnvironmentManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useEnvironmentManager.js","sourceRoot":"","sources":["../../../src/business/hooks/useEnvironmentManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAQlE,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAUjE,MAAM,UAAU,qBAAqB,CAAC,MAAmC;IACvE,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,EAAE,GAAG,MAAM,CAAC;IAExE,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAiB,EAAE,CAAC,CAAC;IACvD,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAwB,EAAE,CAAC,CAAC;IAC5E,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAwB,EAAE,CAAC,CAAC;IAC5E,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAClD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAe,IAAI,CAAC,CAAC;IAEvD,MAAM,MAAM,GAAG,OAAO,CACpB,GAAG,EAAE,CAAC,IAAI,gBAAgB,CAAC,EAAE,aAAa,EAAE,OAAO,EAAE,CAAC,EACtD,CAAC,aAAa,EAAE,OAAO,CAAC,CACzB,CAAC;IAEF,MAAM,QAAQ,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QACtC,YAAY,CAAC,IAAI,CAAC,CAAC;QACnB,QAAQ,CAAC,IAAI,CAAC,CAAC;QACf,IAAI,CAAC;YACH,MAAM,CAAC,QAAQ,EAAE,eAAe,EAAE,eAAe,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;gBACrE,MAAM,CAAC,mBAAmB,CAAC,KAAK,EAAE,KAAK,CAAC;gBACxC,MAAM,CAAC,0BAA0B,CAAC,KAAK,EAAE,KAAK,CAAC;gBAC/C,MAAM,CAAC,0BAA0B,CAAC,KAAK,EAAE,KAAK,CAAC;aAChD,CAAC,CAAC;YAEH,IAAI,QAAQ,CAAC,OAAO,IAAI,QAAQ,CAAC,IAAI;gBAAE,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAC/D,IAAI,eAAe,CAAC,OAAO,IAAI,eAAe,CAAC,IAAI;gBACjD,eAAe,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;YACxC,IAAI,eAAe,CAAC,OAAO,IAAI,eAAe,CAAC,IAAI;gBACjD,eAAe,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QAC1C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,QAAQ,CACN,GAAG,YAAY,KAAK;gBAClB,CAAC,CAAC,GAAG;gBACL,CAAC,CAAC,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAClD,CAAC;QACJ,CAAC;gBAAS,CAAC;YACT,YAAY,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC;IACH,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;IAE3B,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,OAAO,EAAE,CAAC;YACZ,KAAK,QAAQ,EAAE,CAAC;QAClB,CAAC;IACH,CAAC,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;IAExB,OAAO;QACL,KAAK;QACL,YAAY;QACZ,YAAY;QACZ,SAAS;QACT,KAAK;QACL,MAAM,EAAE;YACN,KAAK,EAAE,KAAK,CAAC,MAAM;YACnB,YAAY,EAAE,YAAY,CAAC,MAAM;YACjC,YAAY,EAAE,YAAY,CAAC,MAAM;SAClC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,25 @@
1
+ import type { PageResponse, TestElementResponse } from '@sudobility/testomniac_types';
2
+ export interface PageMapNode {
3
+ id: string;
4
+ relativePath: string;
5
+ routeKey: string | null;
6
+ isExternal: boolean;
7
+ testElementCount: number;
8
+ }
9
+ export interface PageMapEdge {
10
+ id: string;
11
+ sourcePageId: number | null;
12
+ targetPageId: number | null;
13
+ testElementId: number;
14
+ testType: string;
15
+ title: string;
16
+ }
17
+ export interface UsePageMapDataConfig {
18
+ pages: PageResponse[];
19
+ testElements: TestElementResponse[];
20
+ }
21
+ export declare function usePageMapData({ pages, testElements }: UsePageMapDataConfig): {
22
+ nodes: PageMapNode[];
23
+ edges: PageMapEdge[];
24
+ };
25
+ //# sourceMappingURL=usePageMapData.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usePageMapData.d.ts","sourceRoot":"","sources":["../../../src/business/hooks/usePageMapData.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,YAAY,EACZ,mBAAmB,EACpB,MAAM,8BAA8B,CAAC;AAEtC,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,UAAU,EAAE,OAAO,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,YAAY,EAAE,mBAAmB,EAAE,CAAC;CACrC;AAID,wBAAgB,cAAc,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE,oBAAoB;;;EA2C3E"}
@@ -0,0 +1,35 @@
1
+ import { useMemo } from 'react';
2
+ const MAP_TEST_TYPES = new Set(['navigation', 'interaction']);
3
+ export function usePageMapData({ pages, testElements }) {
4
+ return useMemo(() => {
5
+ const filtered = testElements.filter(el => MAP_TEST_TYPES.has(el.testType) &&
6
+ el.targetPageId != null &&
7
+ el.pageId !== el.targetPageId);
8
+ const countMap = new Map();
9
+ for (const el of filtered) {
10
+ if (el.pageId != null) {
11
+ countMap.set(el.pageId, (countMap.get(el.pageId) ?? 0) + 1);
12
+ }
13
+ if (el.targetPageId != null) {
14
+ countMap.set(el.targetPageId, (countMap.get(el.targetPageId) ?? 0) + 1);
15
+ }
16
+ }
17
+ const nodes = pages.map(page => ({
18
+ id: String(page.id),
19
+ relativePath: page.relativePath,
20
+ routeKey: page.routeKey,
21
+ isExternal: page.relativePath.startsWith('http'),
22
+ testElementCount: countMap.get(page.id) ?? 0,
23
+ }));
24
+ const edges = filtered.map(el => ({
25
+ id: String(el.id),
26
+ sourcePageId: el.testType === 'navigation' ? null : el.pageId,
27
+ targetPageId: el.targetPageId,
28
+ testElementId: el.id,
29
+ testType: el.testType,
30
+ title: el.title,
31
+ }));
32
+ return { nodes, edges };
33
+ }, [pages, testElements]);
34
+ }
35
+ //# sourceMappingURL=usePageMapData.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usePageMapData.js","sourceRoot":"","sources":["../../../src/business/hooks/usePageMapData.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AA4BhC,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC,CAAC;AAE9D,MAAM,UAAU,cAAc,CAAC,EAAE,KAAK,EAAE,YAAY,EAAwB;IAC1E,OAAO,OAAO,CAAC,GAAG,EAAE;QAGlB,MAAM,QAAQ,GAAG,YAAY,CAAC,MAAM,CAClC,EAAE,CAAC,EAAE,CACH,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC;YAC/B,EAAE,CAAC,YAAY,IAAI,IAAI;YACvB,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,YAAY,CAChC,CAAC;QAGF,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAC;QAC3C,KAAK,MAAM,EAAE,IAAI,QAAQ,EAAE,CAAC;YAC1B,IAAI,EAAE,CAAC,MAAM,IAAI,IAAI,EAAE,CAAC;gBACtB,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC9D,CAAC;YACD,IAAI,EAAE,CAAC,YAAY,IAAI,IAAI,EAAE,CAAC;gBAC5B,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC1E,CAAC;QACH,CAAC;QAGD,MAAM,KAAK,GAAkB,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC9C,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YACnB,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,MAAM,CAAC;YAChD,gBAAgB,EAAE,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC;SAC7C,CAAC,CAAC,CAAC;QAGJ,MAAM,KAAK,GAAkB,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YAC/C,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;YACjB,YAAY,EAAE,EAAE,CAAC,QAAQ,KAAK,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM;YAC7D,YAAY,EAAE,EAAE,CAAC,YAAY;YAC7B,aAAa,EAAE,EAAE,CAAC,EAAE;YACpB,QAAQ,EAAE,EAAE,CAAC,QAAQ;YACrB,KAAK,EAAE,EAAE,CAAC,KAAK;SAChB,CAAC,CAAC,CAAC;QAEJ,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;IAC1B,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC;AAC5B,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sudobility/testomniac_lib",
3
- "version": "0.0.57",
3
+ "version": "0.0.59",
4
4
  "description": "Testomniac business logic library with Zustand stores",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -42,8 +42,8 @@
42
42
  },
43
43
  "devDependencies": {
44
44
  "@eslint/js": "^9.38.0",
45
- "@sudobility/testomniac_client": "^0.0.57",
46
- "@sudobility/testomniac_types": "^0.0.45",
45
+ "@sudobility/testomniac_client": "^0.0.59",
46
+ "@sudobility/testomniac_types": "^0.0.47",
47
47
  "@sudobility/types": "^1.9.62",
48
48
  "@tanstack/react-query": "^5.90.5",
49
49
  "@testing-library/react": "^16.3.2",