@qiaopeng/tanstack-query-plus 0.1.0
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/dist/PersistQueryClientProvider.d.ts +22 -0
- package/dist/PersistQueryClientProvider.d.ts.map +1 -0
- package/dist/PersistQueryClientProvider.js +47 -0
- package/dist/components/LoadingFallback.d.ts +16 -0
- package/dist/components/LoadingFallback.d.ts.map +1 -0
- package/dist/components/LoadingFallback.js +27 -0
- package/dist/components/QueryErrorBoundary.d.ts +12 -0
- package/dist/components/QueryErrorBoundary.d.ts.map +1 -0
- package/dist/components/QueryErrorBoundary.js +9 -0
- package/dist/components/SuspenseWrapper.d.ts +14 -0
- package/dist/components/SuspenseWrapper.d.ts.map +1 -0
- package/dist/components/SuspenseWrapper.js +9 -0
- package/dist/components/index.d.ts +4 -0
- package/dist/components/index.d.ts.map +1 -0
- package/dist/components/index.js +3 -0
- package/dist/components/internal/ErrorBoundary.d.ts +26 -0
- package/dist/components/internal/ErrorBoundary.d.ts.map +1 -0
- package/dist/components/internal/ErrorBoundary.js +28 -0
- package/dist/core/config.d.ts +36 -0
- package/dist/core/config.d.ts.map +1 -0
- package/dist/core/config.js +213 -0
- package/dist/core/devtools.d.ts +14 -0
- package/dist/core/devtools.d.ts.map +1 -0
- package/dist/core/devtools.js +16 -0
- package/dist/core/env.d.ts +3 -0
- package/dist/core/env.d.ts.map +1 -0
- package/dist/core/env.js +2 -0
- package/dist/core/focusManager.d.ts +33 -0
- package/dist/core/focusManager.d.ts.map +1 -0
- package/dist/core/focusManager.js +122 -0
- package/dist/core/index.d.ts +6 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +5 -0
- package/dist/core/keys.d.ts +59 -0
- package/dist/core/keys.d.ts.map +1 -0
- package/dist/core/keys.js +107 -0
- package/dist/core/queryOptions.d.ts +30 -0
- package/dist/core/queryOptions.d.ts.map +1 -0
- package/dist/core/queryOptions.js +30 -0
- package/dist/features/index.d.ts +4 -0
- package/dist/features/index.d.ts.map +1 -0
- package/dist/features/index.js +3 -0
- package/dist/features/offline.d.ts +48 -0
- package/dist/features/offline.d.ts.map +1 -0
- package/dist/features/offline.js +269 -0
- package/dist/features/persistence.d.ts +36 -0
- package/dist/features/persistence.d.ts.map +1 -0
- package/dist/features/persistence.js +175 -0
- package/dist/hooks/batchQueries.d.ts +128 -0
- package/dist/hooks/batchQueries.d.ts.map +1 -0
- package/dist/hooks/batchQueries.js +301 -0
- package/dist/hooks/index.d.ts +8 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +7 -0
- package/dist/hooks/useFocusManager.d.ts +41 -0
- package/dist/hooks/useFocusManager.d.ts.map +1 -0
- package/dist/hooks/useFocusManager.js +109 -0
- package/dist/hooks/useInfiniteQuery.d.ts +58 -0
- package/dist/hooks/useInfiniteQuery.d.ts.map +1 -0
- package/dist/hooks/useInfiniteQuery.js +61 -0
- package/dist/hooks/useMutation.d.ts +34 -0
- package/dist/hooks/useMutation.d.ts.map +1 -0
- package/dist/hooks/useMutation.js +176 -0
- package/dist/hooks/usePrefetch.d.ts +54 -0
- package/dist/hooks/usePrefetch.d.ts.map +1 -0
- package/dist/hooks/usePrefetch.js +203 -0
- package/dist/hooks/useQuery.d.ts +5 -0
- package/dist/hooks/useQuery.d.ts.map +1 -0
- package/dist/hooks/useQuery.js +5 -0
- package/dist/hooks/useSuspenseQuery.d.ts +11 -0
- package/dist/hooks/useSuspenseQuery.d.ts.map +1 -0
- package/dist/hooks/useSuspenseQuery.js +19 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +7 -0
- package/dist/types/base.d.ts +54 -0
- package/dist/types/base.d.ts.map +1 -0
- package/dist/types/base.js +26 -0
- package/dist/types/index.d.ts +23 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +7 -0
- package/dist/types/infinite.d.ts +39 -0
- package/dist/types/infinite.d.ts.map +1 -0
- package/dist/types/infinite.js +1 -0
- package/dist/types/offline.d.ts +97 -0
- package/dist/types/offline.d.ts.map +1 -0
- package/dist/types/offline.js +8 -0
- package/dist/types/optimistic.d.ts +126 -0
- package/dist/types/optimistic.d.ts.map +1 -0
- package/dist/types/optimistic.js +7 -0
- package/dist/types/persistence.d.ts +9 -0
- package/dist/types/persistence.d.ts.map +1 -0
- package/dist/types/persistence.js +1 -0
- package/dist/types/selectors.d.ts +11 -0
- package/dist/types/selectors.d.ts.map +1 -0
- package/dist/types/selectors.js +1 -0
- package/dist/types/suspense.d.ts +67 -0
- package/dist/types/suspense.d.ts.map +1 -0
- package/dist/types/suspense.js +1 -0
- package/dist/utils/fieldMapper.d.ts +9 -0
- package/dist/utils/fieldMapper.d.ts.map +1 -0
- package/dist/utils/fieldMapper.js +27 -0
- package/dist/utils/index.d.ts +9 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +8 -0
- package/dist/utils/network.d.ts +9 -0
- package/dist/utils/network.d.ts.map +1 -0
- package/dist/utils/network.js +43 -0
- package/dist/utils/optimisticUtils.d.ts +34 -0
- package/dist/utils/optimisticUtils.d.ts.map +1 -0
- package/dist/utils/optimisticUtils.js +76 -0
- package/dist/utils/placeholderData.d.ts +2 -0
- package/dist/utils/placeholderData.d.ts.map +1 -0
- package/dist/utils/placeholderData.js +1 -0
- package/dist/utils/prefetchManager.d.ts +111 -0
- package/dist/utils/prefetchManager.d.ts.map +1 -0
- package/dist/utils/prefetchManager.js +246 -0
- package/dist/utils/queryKey.d.ts +24 -0
- package/dist/utils/queryKey.d.ts.map +1 -0
- package/dist/utils/queryKey.js +77 -0
- package/dist/utils/selectors.d.ts +30 -0
- package/dist/utils/selectors.d.ts.map +1 -0
- package/dist/utils/selectors.js +18 -0
- package/dist/utils/storage.d.ts +7 -0
- package/dist/utils/storage.d.ts.map +1 -0
- package/dist/utils/storage.js +84 -0
- package/package.json +70 -0
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
export interface CursorPaginatedResponse<T> {
|
|
2
|
+
items: T[];
|
|
3
|
+
cursor?: string | null;
|
|
4
|
+
hasMore?: boolean;
|
|
5
|
+
}
|
|
6
|
+
export interface OffsetPaginatedResponse<T> {
|
|
7
|
+
items: T[];
|
|
8
|
+
offset: number;
|
|
9
|
+
limit: number;
|
|
10
|
+
total: number;
|
|
11
|
+
hasMore?: boolean;
|
|
12
|
+
}
|
|
13
|
+
export interface PageNumberPaginatedResponse<T> {
|
|
14
|
+
items: T[];
|
|
15
|
+
page: number;
|
|
16
|
+
pageSize: number;
|
|
17
|
+
totalPages: number;
|
|
18
|
+
totalItems: number;
|
|
19
|
+
}
|
|
20
|
+
export interface PaginationParams {
|
|
21
|
+
cursor?: string;
|
|
22
|
+
offset?: number;
|
|
23
|
+
page?: number;
|
|
24
|
+
limit?: number;
|
|
25
|
+
pageSize?: number;
|
|
26
|
+
}
|
|
27
|
+
export interface PaginationMeta {
|
|
28
|
+
currentPage?: number;
|
|
29
|
+
totalPages?: number;
|
|
30
|
+
totalItems?: number;
|
|
31
|
+
pageSize?: number;
|
|
32
|
+
hasNextPage?: boolean;
|
|
33
|
+
hasPreviousPage?: boolean;
|
|
34
|
+
}
|
|
35
|
+
export interface PaginatedResponseWithMeta<T> {
|
|
36
|
+
items: T[];
|
|
37
|
+
meta: PaginationMeta;
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=infinite.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"infinite.d.ts","sourceRoot":"","sources":["../../src/types/infinite.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,uBAAuB,CAAC,CAAC;IAAI,KAAK,EAAE,CAAC,EAAE,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE;AACrG,MAAM,WAAW,uBAAuB,CAAC,CAAC;IAAI,KAAK,EAAE,CAAC,EAAE,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE;AAC3H,MAAM,WAAW,2BAA2B,CAAC,CAAC;IAAI,KAAK,EAAE,CAAC,EAAE,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE;AACtI,MAAM,WAAW,gBAAgB;IAAG,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE;AACxH,MAAM,WAAW,cAAc;IAAG,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAAC,eAAe,CAAC,EAAE,OAAO,CAAA;CAAE;AACvK,MAAM,WAAW,yBAAyB,CAAC,CAAC;IAAI,KAAK,EAAE,CAAC,EAAE,CAAC;IAAC,IAAI,EAAE,cAAc,CAAA;CAAE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import type { QueryKey } from "@tanstack/react-query";
|
|
2
|
+
import type { NetworkStatus, OperationResult } from "./base";
|
|
3
|
+
export interface OfflineRecoveryConfig {
|
|
4
|
+
enabled: boolean;
|
|
5
|
+
retryInterval: number;
|
|
6
|
+
maxRetries: number;
|
|
7
|
+
retryDelay: number;
|
|
8
|
+
customRetryDelay?: (attempt: number) => number;
|
|
9
|
+
networkCheckInterval: number;
|
|
10
|
+
retryOnReconnect: boolean;
|
|
11
|
+
refetchOnWindowFocus: boolean;
|
|
12
|
+
queryFilter?: (queryKey: QueryKey) => boolean;
|
|
13
|
+
checkInterval?: number;
|
|
14
|
+
refetchOnReconnect?: boolean;
|
|
15
|
+
}
|
|
16
|
+
export interface OfflineQueryInfo {
|
|
17
|
+
queryKey: QueryKey;
|
|
18
|
+
queryFn: () => Promise<unknown>;
|
|
19
|
+
failedAt: Date;
|
|
20
|
+
retryCount: number;
|
|
21
|
+
lastError?: Error;
|
|
22
|
+
isPaused: boolean;
|
|
23
|
+
metadata?: Record<string, unknown>;
|
|
24
|
+
}
|
|
25
|
+
export declare enum MutationOperationType {
|
|
26
|
+
CREATE = "create",
|
|
27
|
+
UPDATE = "update",
|
|
28
|
+
DELETE = "delete",
|
|
29
|
+
PATCH = "patch",
|
|
30
|
+
CUSTOM = "custom"
|
|
31
|
+
}
|
|
32
|
+
export interface OfflineMutationOperation {
|
|
33
|
+
id: string;
|
|
34
|
+
type: MutationOperationType;
|
|
35
|
+
mutationKey: QueryKey;
|
|
36
|
+
mutationFn: () => Promise<unknown>;
|
|
37
|
+
variables: unknown;
|
|
38
|
+
createdAt: Date;
|
|
39
|
+
retryCount: number;
|
|
40
|
+
lastError?: Error;
|
|
41
|
+
priority: number;
|
|
42
|
+
dependsOn?: string[];
|
|
43
|
+
metadata?: Record<string, unknown>;
|
|
44
|
+
}
|
|
45
|
+
export interface OfflineQueueConfig {
|
|
46
|
+
enabled: boolean;
|
|
47
|
+
maxSize: number;
|
|
48
|
+
persist: boolean;
|
|
49
|
+
storageKey: string;
|
|
50
|
+
autoExecuteInterval: number;
|
|
51
|
+
executeOnReconnect: boolean;
|
|
52
|
+
operationTimeout: number;
|
|
53
|
+
concurrency: number;
|
|
54
|
+
}
|
|
55
|
+
export interface MutationFunctionRegistry {
|
|
56
|
+
register: (key: string, fn: () => Promise<unknown>) => void;
|
|
57
|
+
get: (key: string) => (() => Promise<unknown>) | undefined;
|
|
58
|
+
unregister: (key: string) => void;
|
|
59
|
+
clear: () => void;
|
|
60
|
+
getKeys: () => string[];
|
|
61
|
+
}
|
|
62
|
+
export interface OfflineManagerConfig {
|
|
63
|
+
networkCheck: {
|
|
64
|
+
interval: number;
|
|
65
|
+
url?: string;
|
|
66
|
+
timeout: number;
|
|
67
|
+
};
|
|
68
|
+
queue: OfflineQueueConfig;
|
|
69
|
+
recovery: OfflineRecoveryConfig;
|
|
70
|
+
callbacks?: {
|
|
71
|
+
onNetworkChange?: (status: NetworkStatus) => void;
|
|
72
|
+
onQueueOperation?: (operation: OfflineMutationOperation, result: OperationResult) => void;
|
|
73
|
+
onRecoveryComplete?: (recoveredCount: number) => void;
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
export interface OfflineState {
|
|
77
|
+
isOffline: boolean;
|
|
78
|
+
networkStatus: NetworkStatus;
|
|
79
|
+
queuedOperations: number;
|
|
80
|
+
failedQueries: number;
|
|
81
|
+
lastSyncAt?: Date;
|
|
82
|
+
isRecovering: boolean;
|
|
83
|
+
}
|
|
84
|
+
export interface OfflineQueryOptions {
|
|
85
|
+
enabled?: boolean;
|
|
86
|
+
fallbackData?: unknown;
|
|
87
|
+
showStaleWhileOffline?: boolean;
|
|
88
|
+
onReconnect?: "refetch" | "keep" | "invalidate";
|
|
89
|
+
}
|
|
90
|
+
export interface OfflineMutationOptions {
|
|
91
|
+
enableQueue?: boolean;
|
|
92
|
+
priority?: number;
|
|
93
|
+
dependsOn?: string[];
|
|
94
|
+
optimisticUpdate?: (variables: unknown) => void;
|
|
95
|
+
rollback?: (variables: unknown) => void;
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=offline.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"offline.d.ts","sourceRoot":"","sources":["../../src/types/offline.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export var MutationOperationType;
|
|
2
|
+
(function (MutationOperationType) {
|
|
3
|
+
MutationOperationType["CREATE"] = "create";
|
|
4
|
+
MutationOperationType["UPDATE"] = "update";
|
|
5
|
+
MutationOperationType["DELETE"] = "delete";
|
|
6
|
+
MutationOperationType["PATCH"] = "patch";
|
|
7
|
+
MutationOperationType["CUSTOM"] = "custom";
|
|
8
|
+
})(MutationOperationType || (MutationOperationType = {}));
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import type { QueryKey } from "@tanstack/react-query";
|
|
2
|
+
import type { EntityWithId } from "./selectors";
|
|
3
|
+
export interface OptimisticUpdateConfig<TData = unknown, TVariables = unknown> {
|
|
4
|
+
queryKey: QueryKey;
|
|
5
|
+
updater: (oldData: TData | undefined, variables: TVariables) => TData | undefined;
|
|
6
|
+
rollback?: (previousData: TData, error: Error) => void;
|
|
7
|
+
enabled?: boolean;
|
|
8
|
+
}
|
|
9
|
+
export interface OptimisticContext<TData = unknown> {
|
|
10
|
+
previousData?: TData;
|
|
11
|
+
timestamp: number;
|
|
12
|
+
operationType: OptimisticOperationTypeValue;
|
|
13
|
+
}
|
|
14
|
+
export declare const OptimisticOperationType: {
|
|
15
|
+
readonly CREATE: "create";
|
|
16
|
+
readonly UPDATE: "update";
|
|
17
|
+
readonly DELETE: "delete";
|
|
18
|
+
readonly BATCH: "batch";
|
|
19
|
+
};
|
|
20
|
+
export type OptimisticOperationTypeValue = (typeof OptimisticOperationType)[keyof typeof OptimisticOperationType];
|
|
21
|
+
export interface ListOperationConfig<T extends EntityWithId> {
|
|
22
|
+
queryKey: QueryKey;
|
|
23
|
+
operation: ListOperationType;
|
|
24
|
+
onRollback?: (error: Error, context: OptimisticContext<T[]>) => void;
|
|
25
|
+
}
|
|
26
|
+
export declare enum ListOperationType {
|
|
27
|
+
ADD = "add",
|
|
28
|
+
UPDATE = "update",
|
|
29
|
+
REMOVE = "remove"
|
|
30
|
+
}
|
|
31
|
+
export interface BatchQueryResult<TData = unknown, TError = Error> {
|
|
32
|
+
data: TData | undefined;
|
|
33
|
+
isLoading: boolean;
|
|
34
|
+
isError: boolean;
|
|
35
|
+
error: TError | null;
|
|
36
|
+
status: "pending" | "error" | "success";
|
|
37
|
+
}
|
|
38
|
+
export type OptimisticUpdater<TData = unknown, TVariables = unknown> = (oldData: TData | undefined, variables: TVariables) => TData;
|
|
39
|
+
export type RollbackFunction<TData = unknown> = (previousData: TData, error: Error) => void;
|
|
40
|
+
export type ListUpdater<T extends EntityWithId> = {
|
|
41
|
+
add: (items: T[] | undefined, newItem: T) => T[];
|
|
42
|
+
update: (items: T[] | undefined, updatedItem: Partial<T> & {
|
|
43
|
+
id: T["id"];
|
|
44
|
+
}) => T[];
|
|
45
|
+
remove: (items: T[] | undefined, itemId: T["id"]) => T[];
|
|
46
|
+
};
|
|
47
|
+
export interface OptimisticGlobalConfig {
|
|
48
|
+
enabledByDefault: boolean;
|
|
49
|
+
defaultRollbackDelay: number;
|
|
50
|
+
debugMode: boolean;
|
|
51
|
+
maxRetries: number;
|
|
52
|
+
}
|
|
53
|
+
export interface BatchQueryStats {
|
|
54
|
+
total: number;
|
|
55
|
+
loading: number;
|
|
56
|
+
success: number;
|
|
57
|
+
error: number;
|
|
58
|
+
stale: number;
|
|
59
|
+
successRate: number;
|
|
60
|
+
errorRate: number;
|
|
61
|
+
}
|
|
62
|
+
export interface BatchQueryConfig<TData = unknown, TError = Error> {
|
|
63
|
+
enableStats?: boolean;
|
|
64
|
+
enableBatchOperations?: boolean;
|
|
65
|
+
autoRefreshInterval?: number;
|
|
66
|
+
onBatchSuccess?: (results: TData[]) => void;
|
|
67
|
+
onBatchError?: (errors: TError[]) => void;
|
|
68
|
+
onBatchSettled?: (results: TData[], errors: TError[]) => void;
|
|
69
|
+
retryConfig?: BatchRetryConfig;
|
|
70
|
+
enablePartialSuccess?: boolean;
|
|
71
|
+
onPartialSuccess?: (report: BatchOperationReport<TData, TError>) => void;
|
|
72
|
+
}
|
|
73
|
+
export interface BatchRetryConfig {
|
|
74
|
+
maxRetries?: number;
|
|
75
|
+
retryDelay?: number | ((attemptIndex: number) => number);
|
|
76
|
+
retryOnlyFailed?: boolean;
|
|
77
|
+
shouldRetry?: (error: Error, attemptCount: number) => boolean;
|
|
78
|
+
}
|
|
79
|
+
export interface BatchOperationReport<TData = unknown, TError = Error> {
|
|
80
|
+
total: number;
|
|
81
|
+
successful: number;
|
|
82
|
+
failed: number;
|
|
83
|
+
successResults: Array<{
|
|
84
|
+
index: number;
|
|
85
|
+
data: TData;
|
|
86
|
+
}>;
|
|
87
|
+
failureErrors: Array<{
|
|
88
|
+
index: number;
|
|
89
|
+
error: TError;
|
|
90
|
+
queryKey?: unknown[];
|
|
91
|
+
}>;
|
|
92
|
+
isPartialSuccess: boolean;
|
|
93
|
+
isFullSuccess: boolean;
|
|
94
|
+
isFullFailure: boolean;
|
|
95
|
+
duration: number;
|
|
96
|
+
retryCount?: number;
|
|
97
|
+
}
|
|
98
|
+
export interface BatchErrorAggregate<TError = Error> {
|
|
99
|
+
totalErrors: number;
|
|
100
|
+
errors: Array<{
|
|
101
|
+
index: number;
|
|
102
|
+
error: TError;
|
|
103
|
+
queryKey?: unknown[];
|
|
104
|
+
}>;
|
|
105
|
+
errorsByType: Map<string, TError[]>;
|
|
106
|
+
firstError: TError | null;
|
|
107
|
+
lastError: TError | null;
|
|
108
|
+
errorSummary: string;
|
|
109
|
+
}
|
|
110
|
+
export interface BatchQueryOperations {
|
|
111
|
+
refetchAll: () => Promise<PromiseSettledResult<unknown>[]>;
|
|
112
|
+
invalidateAll: () => Promise<PromiseSettledResult<void>[]>;
|
|
113
|
+
cancelAll: () => Promise<PromiseSettledResult<void>[]>;
|
|
114
|
+
resetAll: () => Promise<PromiseSettledResult<void>[]>;
|
|
115
|
+
removeAll: () => void;
|
|
116
|
+
retryFailed: () => Promise<BatchOperationReport>;
|
|
117
|
+
getErrorAggregate: () => BatchErrorAggregate;
|
|
118
|
+
getOperationReport: () => BatchOperationReport;
|
|
119
|
+
}
|
|
120
|
+
export interface EnhancedBatchQueryResult<TData = unknown, TCombinedResult = TData, TError = Error> {
|
|
121
|
+
data: TCombinedResult;
|
|
122
|
+
stats: BatchQueryStats;
|
|
123
|
+
operations: BatchQueryOperations;
|
|
124
|
+
config: BatchQueryConfig<TData, TError>;
|
|
125
|
+
}
|
|
126
|
+
//# sourceMappingURL=optimistic.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"optimistic.d.ts","sourceRoot":"","sources":["../../src/types/optimistic.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export const OptimisticOperationType = { CREATE: "create", UPDATE: "update", DELETE: "delete", BATCH: "batch" };
|
|
2
|
+
export var ListOperationType;
|
|
3
|
+
(function (ListOperationType) {
|
|
4
|
+
ListOperationType["ADD"] = "add";
|
|
5
|
+
ListOperationType["UPDATE"] = "update";
|
|
6
|
+
ListOperationType["REMOVE"] = "remove";
|
|
7
|
+
})(ListOperationType || (ListOperationType = {}));
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"persistence.d.ts","sourceRoot":"","sources":["../../src/types/persistence.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAAG,IAAI,EAAE,OAAO,QAAQ,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export type Selector<TInput, TOutput> = (data: TInput | undefined) => TOutput;
|
|
2
|
+
export type EntityWithId<T = string | number> = {
|
|
3
|
+
id: T;
|
|
4
|
+
[key: string]: unknown;
|
|
5
|
+
};
|
|
6
|
+
export type PaginatedData<T> = {
|
|
7
|
+
items: T[];
|
|
8
|
+
total?: number;
|
|
9
|
+
[key: string]: unknown;
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=selectors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"selectors.d.ts","sourceRoot":"","sources":["../../src/types/selectors.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,QAAQ,CAAC,MAAM,EAAE,OAAO,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,KAAK,OAAO,CAAC;AAC9E,MAAM,MAAM,YAAY,CAAC,CAAC,GAAG,MAAM,GAAG,MAAM,IAAI;IAAE,EAAE,EAAE,CAAC,CAAC;IAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,CAAC;AAClF,MAAM,MAAM,aAAa,CAAC,CAAC,IAAI;IAAE,KAAK,EAAE,CAAC,EAAE,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import type { InfiniteData, QueryKey, UseSuspenseInfiniteQueryOptions, UseSuspenseInfiniteQueryResult, UseSuspenseQueryOptions, UseSuspenseQueryResult } from "@tanstack/react-query";
|
|
2
|
+
import type { ReactNode } from "react";
|
|
3
|
+
export interface EnhancedSuspenseQueryOptions<TQueryFnData = unknown, TError = Error, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey> extends Omit<UseSuspenseQueryOptions<TQueryFnData, TError, TData, TQueryKey>, "queryKey" | "queryFn"> {
|
|
4
|
+
enableAutoRefresh?: boolean;
|
|
5
|
+
refreshInterval?: number;
|
|
6
|
+
}
|
|
7
|
+
export interface EnhancedSuspenseInfiniteQueryOptions<TQueryFnData = unknown, TError = Error, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey, TPageParam = unknown> extends Omit<UseSuspenseInfiniteQueryOptions<TQueryFnData, TError, TData, TQueryKey, TPageParam>, "queryKey" | "queryFn"> {
|
|
8
|
+
enableAutoRefresh?: boolean;
|
|
9
|
+
refreshInterval?: number;
|
|
10
|
+
}
|
|
11
|
+
export type SuspenseQueryFunction<TQueryFnData = unknown, TQueryKey extends QueryKey = QueryKey> = (context: {
|
|
12
|
+
queryKey: TQueryKey;
|
|
13
|
+
signal: AbortSignal;
|
|
14
|
+
}) => Promise<TQueryFnData>;
|
|
15
|
+
export type SuspenseInfiniteQueryFunction<TQueryFnData = unknown, TQueryKey extends QueryKey = QueryKey, TPageParam = unknown> = (context: {
|
|
16
|
+
queryKey: TQueryKey;
|
|
17
|
+
signal: AbortSignal;
|
|
18
|
+
pageParam: TPageParam;
|
|
19
|
+
}) => Promise<TQueryFnData>;
|
|
20
|
+
export type EnhancedSuspenseQueryResult<TData = unknown, TError = Error> = UseSuspenseQueryResult<TData, TError>;
|
|
21
|
+
export type EnhancedSuspenseInfiniteQueryResult<TData = unknown, TError = Error> = UseSuspenseInfiniteQueryResult<InfiniteData<TData>, TError>;
|
|
22
|
+
export interface SuspenseWrapperProps {
|
|
23
|
+
children: ReactNode;
|
|
24
|
+
fallback?: ReactNode;
|
|
25
|
+
errorFallback?: (error: Error, resetErrorBoundary: () => void) => ReactNode;
|
|
26
|
+
onError?: (error: Error, errorInfo: {
|
|
27
|
+
componentStack: string;
|
|
28
|
+
}) => void;
|
|
29
|
+
resetKeys?: Array<string | number>;
|
|
30
|
+
}
|
|
31
|
+
export interface ErrorBoundaryProps {
|
|
32
|
+
children: ReactNode;
|
|
33
|
+
fallback?: (error: Error, resetErrorBoundary: () => void) => ReactNode;
|
|
34
|
+
onError?: (error: Error, errorInfo: {
|
|
35
|
+
componentStack: string;
|
|
36
|
+
}) => void;
|
|
37
|
+
onReset?: () => void;
|
|
38
|
+
resetKeys?: Array<string | number>;
|
|
39
|
+
}
|
|
40
|
+
export interface ErrorBoundaryState {
|
|
41
|
+
hasError: boolean;
|
|
42
|
+
error?: Error;
|
|
43
|
+
}
|
|
44
|
+
export interface LoadingFallbackProps {
|
|
45
|
+
message?: string;
|
|
46
|
+
size?: "small" | "medium" | "large";
|
|
47
|
+
className?: string;
|
|
48
|
+
}
|
|
49
|
+
export interface ErrorFallbackProps {
|
|
50
|
+
error: Error;
|
|
51
|
+
resetErrorBoundary: () => void;
|
|
52
|
+
className?: string;
|
|
53
|
+
}
|
|
54
|
+
export interface SuspenseConfig {
|
|
55
|
+
defaultStaleTime?: number;
|
|
56
|
+
defaultGcTime?: number;
|
|
57
|
+
defaultRetry?: number | boolean;
|
|
58
|
+
enableDevtools?: boolean;
|
|
59
|
+
}
|
|
60
|
+
export type QueryStatus = "pending" | "error" | "success";
|
|
61
|
+
export interface QueryMetadata {
|
|
62
|
+
queryKey: QueryKey;
|
|
63
|
+
status: QueryStatus;
|
|
64
|
+
lastUpdated?: Date;
|
|
65
|
+
errorCount?: number;
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=suspense.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"suspense.d.ts","sourceRoot":"","sources":["../../src/types/suspense.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { QueryClient } from "@tanstack/react-query";
|
|
2
|
+
export interface FieldMappingConfig {
|
|
3
|
+
nameField: string;
|
|
4
|
+
configKey: string;
|
|
5
|
+
}
|
|
6
|
+
export declare function createFieldEnricher<T = any>(queryKey: any, mappings: Record<string, FieldMappingConfig>): (data: T, queryClient: QueryClient) => T;
|
|
7
|
+
export declare function createTempId(prefix?: string): string;
|
|
8
|
+
export declare function createOptimisticBase(customFields?: Record<string, any>): Record<string, any>;
|
|
9
|
+
//# sourceMappingURL=fieldMapper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fieldMapper.d.ts","sourceRoot":"","sources":["../../src/utils/fieldMapper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,MAAM,WAAW,kBAAkB;IAAG,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE;AAC5E,wBAAgB,mBAAmB,CAAC,CAAC,GAAG,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,IAC9F,MAAM,CAAC,EAAE,aAAa,WAAW,KAAG,CAAC,CAe9C;AACD,wBAAgB,YAAY,CAAC,MAAM,SAAS,GAAG,MAAM,CAAgF;AACrI,wBAAgB,oBAAoB,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAG5F"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export function createFieldEnricher(queryKey, mappings) {
|
|
2
|
+
return (data, queryClient) => {
|
|
3
|
+
const config = queryClient.getQueryData(queryKey);
|
|
4
|
+
if (!config)
|
|
5
|
+
return data;
|
|
6
|
+
const result = { ...data };
|
|
7
|
+
Object.entries(mappings).forEach(([idField, { nameField, configKey }]) => {
|
|
8
|
+
const idValue = data[idField];
|
|
9
|
+
if (idValue == null)
|
|
10
|
+
return;
|
|
11
|
+
const options = config[configKey];
|
|
12
|
+
if (!options?.length)
|
|
13
|
+
return;
|
|
14
|
+
const optionMap = new Map(options.map((item) => [String(item.value), item.label]));
|
|
15
|
+
const label = optionMap.get(String(idValue));
|
|
16
|
+
if (label) {
|
|
17
|
+
result[nameField] = label;
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
return result;
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
export function createTempId(prefix = "temp") { return `${prefix}-${Date.now()}-${Math.random().toString(36).slice(2, 9)}`; }
|
|
24
|
+
export function createOptimisticBase(customFields) {
|
|
25
|
+
const now = new Date().toISOString();
|
|
26
|
+
return { createTime: now, updateTime: now, createUser: "", updateUser: "", deleteStatus: 0, ...customFields };
|
|
27
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export { createFieldEnricher, createOptimisticBase, createTempId, type FieldMappingConfig } from "./fieldMapper.js";
|
|
2
|
+
export { getNetworkInfo, getNetworkSpeed, isFastNetwork, isSlowNetwork, type NavigatorWithConnection } from "./network.js";
|
|
3
|
+
export { batchRemoveItems, batchUpdateItems, conditionalUpdateItems, createAddItemConfig, createListOperationConfig, createRemoveItemConfig, createUpdateItemConfig, type ListOperationVariables, listUpdater, reorderItems } from "./optimisticUtils.js";
|
|
4
|
+
export { keepPreviousData } from "./placeholderData.js";
|
|
5
|
+
export { getPrefetchManager, type InteractionRecord, type NetworkSpeed, type PredictionResult, type PrefetchConfig, type PrefetchStats, type PrefetchTask, resetPrefetchManager, SmartPrefetchManager } from "./prefetchManager.js";
|
|
6
|
+
export { createQueryKeyFactory, createSimpleQueryKeyFactory, extractParamsFromKey, isQueryKeyEqual, type NormalizeConfig, normalizeQueryParams, type QueryKeyFactory, type QueryKeyFactoryConfig } from "./queryKey.js";
|
|
7
|
+
export { compose, selectById, selectByIds, selectCount, selectField, selectFields, selectFirst, selectItems, selectLast, selectMap, selectors, selectTotal, selectWhere } from "./selectors.js";
|
|
8
|
+
export { deepClone, formatBytes, getStorageUsage, isStorageAvailable } from "./storage.js";
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,YAAY,EAAE,KAAK,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACpH,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,aAAa,EAAE,aAAa,EAAE,KAAK,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAC3H,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,yBAAyB,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,KAAK,sBAAsB,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAC1P,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,KAAK,iBAAiB,EAAE,KAAK,YAAY,EAAE,KAAK,gBAAgB,EAAE,KAAK,cAAc,EAAE,KAAK,aAAa,EAAE,KAAK,YAAY,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACpO,OAAO,EAAE,qBAAqB,EAAE,2BAA2B,EAAE,oBAAoB,EAAE,eAAe,EAAE,KAAK,eAAe,EAAE,oBAAoB,EAAE,KAAK,eAAe,EAAE,KAAK,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACxN,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAChM,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { createFieldEnricher, createOptimisticBase, createTempId } from "./fieldMapper.js";
|
|
2
|
+
export { getNetworkInfo, getNetworkSpeed, isFastNetwork, isSlowNetwork } from "./network.js";
|
|
3
|
+
export { batchRemoveItems, batchUpdateItems, conditionalUpdateItems, createAddItemConfig, createListOperationConfig, createRemoveItemConfig, createUpdateItemConfig, listUpdater, reorderItems } from "./optimisticUtils.js";
|
|
4
|
+
export { keepPreviousData } from "./placeholderData.js";
|
|
5
|
+
export { getPrefetchManager, resetPrefetchManager, SmartPrefetchManager } from "./prefetchManager.js";
|
|
6
|
+
export { createQueryKeyFactory, createSimpleQueryKeyFactory, extractParamsFromKey, isQueryKeyEqual, normalizeQueryParams } from "./queryKey.js";
|
|
7
|
+
export { compose, selectById, selectByIds, selectCount, selectField, selectFields, selectFirst, selectItems, selectLast, selectMap, selectors, selectTotal, selectWhere } from "./selectors.js";
|
|
8
|
+
export { deepClone, formatBytes, getStorageUsage, isStorageAvailable } from "./storage.js";
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { NetworkInformation } from "../types/base";
|
|
2
|
+
export interface NavigatorWithConnection extends Navigator {
|
|
3
|
+
connection?: NetworkInformation;
|
|
4
|
+
}
|
|
5
|
+
export declare function isSlowNetwork(): boolean;
|
|
6
|
+
export declare function getNetworkInfo(): NetworkInformation | null;
|
|
7
|
+
export declare function isFastNetwork(): boolean;
|
|
8
|
+
export declare function getNetworkSpeed(): "fast" | "medium" | "slow" | "unknown";
|
|
9
|
+
//# sourceMappingURL=network.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"network.d.ts","sourceRoot":"","sources":["../../src/utils/network.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACxD,MAAM,WAAW,uBAAwB,SAAQ,SAAS;IAAG,UAAU,CAAC,EAAE,kBAAkB,CAAA;CAAE;AAE9F,wBAAgB,aAAa,IAAI,OAAO,CAMvC;AACD,wBAAgB,cAAc,IAAI,kBAAkB,GAAG,IAAI,CAI1D;AACD,wBAAgB,aAAa,IAAI,OAAO,CAIvC;AACD,wBAAgB,eAAe,IAAI,MAAM,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,CAUxE"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
function hasConnectionAPI(nav) { return "connection" in nav; }
|
|
2
|
+
export function isSlowNetwork() {
|
|
3
|
+
if (typeof navigator === "undefined") {
|
|
4
|
+
return false;
|
|
5
|
+
}
|
|
6
|
+
if (!hasConnectionAPI(navigator)) {
|
|
7
|
+
return false;
|
|
8
|
+
}
|
|
9
|
+
const connection = navigator.connection;
|
|
10
|
+
if (!connection) {
|
|
11
|
+
return false;
|
|
12
|
+
}
|
|
13
|
+
return connection.effectiveType === "slow-2g" || connection.effectiveType === "2g" || connection.saveData === true;
|
|
14
|
+
}
|
|
15
|
+
export function getNetworkInfo() {
|
|
16
|
+
if (typeof navigator === "undefined") {
|
|
17
|
+
return null;
|
|
18
|
+
}
|
|
19
|
+
if (!hasConnectionAPI(navigator)) {
|
|
20
|
+
return null;
|
|
21
|
+
}
|
|
22
|
+
return navigator.connection || null;
|
|
23
|
+
}
|
|
24
|
+
export function isFastNetwork() {
|
|
25
|
+
const networkInfo = getNetworkInfo();
|
|
26
|
+
if (!networkInfo) {
|
|
27
|
+
return true;
|
|
28
|
+
}
|
|
29
|
+
return networkInfo.effectiveType === "4g" && networkInfo.saveData !== true;
|
|
30
|
+
}
|
|
31
|
+
export function getNetworkSpeed() {
|
|
32
|
+
const networkInfo = getNetworkInfo();
|
|
33
|
+
if (!networkInfo || !networkInfo.effectiveType) {
|
|
34
|
+
return "unknown";
|
|
35
|
+
}
|
|
36
|
+
switch (networkInfo.effectiveType) {
|
|
37
|
+
case "4g": return "fast";
|
|
38
|
+
case "3g": return "medium";
|
|
39
|
+
case "2g":
|
|
40
|
+
case "slow-2g": return "slow";
|
|
41
|
+
default: return "unknown";
|
|
42
|
+
}
|
|
43
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { QueryKey } from "@tanstack/react-query";
|
|
2
|
+
import type { ListOperationConfig, OptimisticUpdateConfig } from "../types/optimistic";
|
|
3
|
+
import type { EntityWithId } from "../types/selectors";
|
|
4
|
+
import { ListOperationType } from "../types/optimistic.js";
|
|
5
|
+
export declare const listUpdater: {
|
|
6
|
+
add: <T extends EntityWithId>(items: T[] | undefined, newItem: T) => T[];
|
|
7
|
+
update: <T extends EntityWithId>(items: T[] | undefined, updatedItem: Partial<T> & {
|
|
8
|
+
id: T["id"];
|
|
9
|
+
}) => T[];
|
|
10
|
+
remove: <T extends EntityWithId>(items: T[] | undefined, itemId: T["id"]) => T[];
|
|
11
|
+
};
|
|
12
|
+
export declare function createAddItemConfig<T extends EntityWithId>(queryKey: QueryKey, options?: {
|
|
13
|
+
addToTop?: boolean;
|
|
14
|
+
onRollback?: (error: Error) => void;
|
|
15
|
+
}): OptimisticUpdateConfig<T[], T>;
|
|
16
|
+
export declare function createUpdateItemConfig<T extends EntityWithId>(queryKey: QueryKey, options?: {
|
|
17
|
+
onRollback?: (error: Error) => void;
|
|
18
|
+
}): OptimisticUpdateConfig<T[], Partial<T> & {
|
|
19
|
+
id: T["id"];
|
|
20
|
+
}>;
|
|
21
|
+
export declare function createRemoveItemConfig<T extends EntityWithId>(queryKey: QueryKey, options?: {
|
|
22
|
+
onRollback?: (error: Error) => void;
|
|
23
|
+
}): OptimisticUpdateConfig<T[], T["id"]>;
|
|
24
|
+
export type ListOperationVariables<T extends EntityWithId, TOperation extends ListOperationType> = TOperation extends ListOperationType.ADD ? T : TOperation extends ListOperationType.UPDATE ? Partial<T> & {
|
|
25
|
+
id: T["id"];
|
|
26
|
+
} : TOperation extends ListOperationType.REMOVE ? T["id"] : never;
|
|
27
|
+
export declare function createListOperationConfig<T extends EntityWithId, TOperation extends ListOperationType = ListOperationType>(config: ListOperationConfig<T>): OptimisticUpdateConfig<T[], ListOperationVariables<T, TOperation>>;
|
|
28
|
+
export declare function batchUpdateItems<T extends EntityWithId>(items: T[] | undefined | null, updates: Array<Partial<T> & {
|
|
29
|
+
id: T["id"];
|
|
30
|
+
}>): T[];
|
|
31
|
+
export declare function batchRemoveItems<T extends EntityWithId>(items: T[] | undefined | null, itemIds: Array<T["id"]>): T[];
|
|
32
|
+
export declare function reorderItems<T extends EntityWithId>(items: T[] | undefined | null, fromIndex: number, toIndex: number): T[];
|
|
33
|
+
export declare function conditionalUpdateItems<T extends EntityWithId>(items: T[] | undefined | null, predicate: (item: T) => boolean, updater: (item: T) => Partial<T>): T[];
|
|
34
|
+
//# sourceMappingURL=optimisticUtils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"optimisticUtils.d.ts","sourceRoot":"","sources":["../../src/utils/optimisticUtils.ts"],"names":[],"mappings":"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"}
|