@sudobility/testomniac_lib 0.0.85 → 0.0.87

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,6 @@
1
+ export { useEntityManager } from './useEntityManager';
2
+ export { usePersistedState } from './usePersistedState';
3
+ export type { StorageAdapter } from './usePersistedState';
1
4
  export { useScanManager } from './useScanManager';
2
5
  export { useDashboardManager } from './useDashboardManager';
3
6
  export { useRunManager } from './useRunManager';
@@ -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;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;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,YAAY,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC5E,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,YAAY,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/business/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,YAAY,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,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;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,YAAY,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC5E,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,YAAY,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC"}
@@ -1,3 +1,5 @@
1
+ export { useEntityManager } from './useEntityManager';
2
+ export { usePersistedState } from './usePersistedState';
1
3
  export { useScanManager } from './useScanManager';
2
4
  export { useDashboardManager } from './useDashboardManager';
3
5
  export { useRunManager } from './useRunManager';
@@ -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;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAMlD,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/business/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD,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;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC"}
@@ -0,0 +1,16 @@
1
+ import type { NetworkClient } from '@sudobility/types';
2
+ import type { FirebaseIdToken } from '@sudobility/testomniac_client';
3
+ interface UseEntityManagerConfig {
4
+ networkClient: NetworkClient;
5
+ baseUrl: string;
6
+ token: FirebaseIdToken;
7
+ enabled?: boolean;
8
+ }
9
+ export declare function useEntityManager(config: UseEntityManagerConfig): {
10
+ entities: import("@sudobility/types").EntityWithRole[];
11
+ isLoading: boolean;
12
+ error: string | null;
13
+ refetchEntities: (options?: import("@tanstack/query-core").RefetchOptions) => Promise<import("@tanstack/query-core").QueryObserverResult<import("@sudobility/types").BaseResponse<import("@sudobility/types").EntityWithRole[]>, Error>>;
14
+ };
15
+ export {};
16
+ //# sourceMappingURL=useEntityManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useEntityManager.d.ts","sourceRoot":"","sources":["../../../src/business/hooks/useEntityManager.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAIrE,UAAU,sBAAsB;IAC9B,aAAa,EAAE,aAAa,CAAC;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,eAAe,CAAC;IACvB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAQD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,sBAAsB;;;;;EA0C9D"}
@@ -0,0 +1,41 @@
1
+ import { useEffect, useRef } from 'react';
2
+ import { QUERY_KEYS, useEntities } from '@sudobility/testomniac_client';
3
+ import { useQueryClient } from '@tanstack/react-query';
4
+ export function useEntityManager(config) {
5
+ const { networkClient, baseUrl, token, enabled = true } = config;
6
+ const queryClient = useQueryClient();
7
+ const { entities, isLoading, error, refetch } = useEntities({
8
+ networkClient,
9
+ baseUrl,
10
+ token,
11
+ enabled,
12
+ });
13
+ const retried = useRef(false);
14
+ const prevToken = useRef(token);
15
+ useEffect(() => {
16
+ if (token !== prevToken.current) {
17
+ prevToken.current = token;
18
+ retried.current = false;
19
+ queryClient.removeQueries({ queryKey: QUERY_KEYS.entities() });
20
+ }
21
+ }, [token, queryClient]);
22
+ useEffect(() => {
23
+ if (isLoading || !enabled || retried.current)
24
+ return undefined;
25
+ if (entities.length === 0 && !error) {
26
+ retried.current = true;
27
+ const timer = setTimeout(() => {
28
+ void refetch();
29
+ }, 1500);
30
+ return () => clearTimeout(timer);
31
+ }
32
+ return undefined;
33
+ }, [entities.length, isLoading, enabled, error, refetch]);
34
+ return {
35
+ entities,
36
+ isLoading,
37
+ error,
38
+ refetchEntities: refetch,
39
+ };
40
+ }
41
+ //# sourceMappingURL=useEntityManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useEntityManager.js","sourceRoot":"","sources":["../../../src/business/hooks/useEntityManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAG1C,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AACxE,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAevD,MAAM,UAAU,gBAAgB,CAAC,MAA8B;IAC7D,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,EAAE,GAAG,MAAM,CAAC;IACjE,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;IAErC,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,WAAW,CAAC;QAC1D,aAAa;QACb,OAAO;QACP,KAAK;QACL,OAAO;KACR,CAAC,CAAC;IAGH,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAI9B,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAChC,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,KAAK,KAAK,SAAS,CAAC,OAAO,EAAE,CAAC;YAChC,SAAS,CAAC,OAAO,GAAG,KAAK,CAAC;YAC1B,OAAO,CAAC,OAAO,GAAG,KAAK,CAAC;YACxB,WAAW,CAAC,aAAa,CAAC,EAAE,QAAQ,EAAE,UAAU,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QACjE,CAAC;IACH,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC;IACzB,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,SAAS,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO;YAAE,OAAO,SAAS,CAAC;QAC/D,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YACpC,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;YACvB,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC5B,KAAK,OAAO,EAAE,CAAC;YACjB,CAAC,EAAE,IAAI,CAAC,CAAC;YACT,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QACnC,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;IAE1D,OAAO;QACL,QAAQ;QACR,SAAS;QACT,KAAK;QACL,eAAe,EAAE,OAAO;KACzB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,6 @@
1
+ export interface StorageAdapter {
2
+ getItem(key: string): Promise<string | null>;
3
+ setItem(key: string, value: string): Promise<void>;
4
+ }
5
+ export declare function usePersistedState<T>(key: string, defaultValue: T, storage: StorageAdapter, validate?: (value: unknown) => value is T): [T, (value: T) => void];
6
+ //# sourceMappingURL=usePersistedState.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usePersistedState.d.ts","sourceRoot":"","sources":["../../../src/business/hooks/usePersistedState.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,cAAc;IAC7B,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC7C,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACpD;AAMD,wBAAgB,iBAAiB,CAAC,CAAC,EACjC,GAAG,EAAE,MAAM,EACX,YAAY,EAAE,CAAC,EACf,OAAO,EAAE,cAAc,EACvB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,KAAK,IAAI,CAAC,GACxC,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC,CAgCzB"}
@@ -0,0 +1,28 @@
1
+ import { useCallback, useEffect, useState } from 'react';
2
+ export function usePersistedState(key, defaultValue, storage, validate) {
3
+ const [value, setValue] = useState(defaultValue);
4
+ useEffect(() => {
5
+ let cancelled = false;
6
+ storage.getItem(key).then(raw => {
7
+ if (cancelled || raw == null)
8
+ return;
9
+ try {
10
+ const parsed = JSON.parse(raw);
11
+ if (validate ? validate(parsed) : true) {
12
+ setValue(parsed);
13
+ }
14
+ }
15
+ catch {
16
+ }
17
+ });
18
+ return () => {
19
+ cancelled = true;
20
+ };
21
+ }, [key, storage, validate]);
22
+ const set = useCallback((next) => {
23
+ setValue(next);
24
+ storage.setItem(key, JSON.stringify(next)).catch(() => { });
25
+ }, [key, storage]);
26
+ return [value, set];
27
+ }
28
+ //# sourceMappingURL=usePersistedState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usePersistedState.js","sourceRoot":"","sources":["../../../src/business/hooks/usePersistedState.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAgBzD,MAAM,UAAU,iBAAiB,CAC/B,GAAW,EACX,YAAe,EACf,OAAuB,EACvB,QAAyC;IAEzC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAI,YAAY,CAAC,CAAC;IAGpD,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;YAC9B,IAAI,SAAS,IAAI,GAAG,IAAI,IAAI;gBAAE,OAAO;YACrC,IAAI,CAAC;gBACH,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBACxC,IAAI,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;oBACvC,QAAQ,CAAC,MAAW,CAAC,CAAC;gBACxB,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;YAET,CAAC;QACH,CAAC,CAAC,CAAC;QACH,OAAO,GAAG,EAAE;YACV,SAAS,GAAG,IAAI,CAAC;QACnB,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;IAG7B,MAAM,GAAG,GAAG,WAAW,CACrB,CAAC,IAAO,EAAE,EAAE;QACV,QAAQ,CAAC,IAAI,CAAC,CAAC;QACf,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAC7D,CAAC,EACD,CAAC,GAAG,EAAE,OAAO,CAAC,CACf,CAAC;IAEF,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AACtB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sudobility/testomniac_lib",
3
- "version": "0.0.85",
3
+ "version": "0.0.87",
4
4
  "description": "Testomniac business logic library with Zustand stores",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -42,7 +42,7 @@
42
42
  },
43
43
  "devDependencies": {
44
44
  "@eslint/js": "^9.38.0",
45
- "@sudobility/testomniac_client": "^0.0.81",
45
+ "@sudobility/testomniac_client": "^0.0.82",
46
46
  "@sudobility/testomniac_types": "^0.0.62",
47
47
  "@sudobility/types": "^1.9.62",
48
48
  "@tanstack/react-query": "^5.90.5",