@legendapp/state 2.2.0-next.7 → 2.2.0-next.9
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/config/enableDirectAccess.d.ts +1 -1
- package/config/enableDirectPeek.d.ts +1 -1
- package/config/enableReactTracking.d.ts +4 -3
- package/config/enableReactTracking.js.map +1 -1
- package/config/enableReactTracking.mjs.map +1 -1
- package/config/enableReactUse.d.ts +1 -1
- package/helpers/fetch.d.ts +4 -3
- package/helpers/fetch.js.map +1 -1
- package/helpers/fetch.mjs.map +1 -1
- package/helpers/time.d.ts +2 -2
- package/history.js.map +1 -1
- package/history.mjs.map +1 -1
- package/index.d.ts +6 -1
- package/index.js +257 -207
- package/index.js.map +1 -1
- package/index.mjs +257 -208
- package/index.mjs.map +1 -1
- package/package.json +2 -10
- package/persist-plugins/firebase.js.map +1 -1
- package/persist-plugins/firebase.mjs.map +1 -1
- package/persist.d.ts +7 -5
- package/persist.js +132 -65
- package/persist.js.map +1 -1
- package/persist.mjs +133 -66
- package/persist.mjs.map +1 -1
- package/react-hooks/createObservableHook.js +1 -1
- package/react-hooks/createObservableHook.js.map +1 -1
- package/react-hooks/createObservableHook.mjs +1 -1
- package/react-hooks/createObservableHook.mjs.map +1 -1
- package/react-hooks/useFetch.d.ts +4 -3
- package/react-hooks/useFetch.js.map +1 -1
- package/react-hooks/useFetch.mjs.map +1 -1
- package/react-hooks/useObservableQuery.js.map +1 -1
- package/react-hooks/useObservableQuery.mjs.map +1 -1
- package/react.js +2 -0
- package/react.js.map +1 -1
- package/react.mjs +2 -0
- package/react.mjs.map +1 -1
- package/src/ObservableObject.d.ts +4 -3
- package/src/ObservablePrimitive.d.ts +2 -1
- package/src/activated.d.ts +3 -0
- package/src/computed.d.ts +1 -1
- package/src/config/enableDirectAccess.d.ts +1 -1
- package/src/config/enableDirectPeek.d.ts +1 -1
- package/src/config/enableReactTracking.d.ts +4 -3
- package/src/config/enableReactUse.d.ts +1 -1
- package/src/createObservable.d.ts +2 -2
- package/src/globals.d.ts +6 -3
- package/src/helpers/fetch.d.ts +4 -3
- package/src/helpers/time.d.ts +2 -2
- package/src/helpers.d.ts +3 -2
- package/src/history/trackHistory.d.ts +1 -1
- package/src/observable.d.ts +7 -12
- package/src/observableInterfaces.d.ts +30 -327
- package/src/observableTypes.d.ts +92 -0
- package/src/persistTypes.d.ts +224 -0
- package/src/proxy.d.ts +2 -1
- package/src/react/Computed.d.ts +1 -1
- package/src/react/reactInterfaces.d.ts +2 -1
- package/src/react/usePauseProvider.d.ts +3 -3
- package/src/react-hooks/useFetch.d.ts +4 -3
- package/src/trackSelector.d.ts +1 -1
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
import type { AsyncStorageStatic } from '@react-native-async-storage/async-storage';
|
|
2
|
+
import type { DatabaseReference, Query } from 'firebase/database';
|
|
3
|
+
import { ArrayValue, Change, ClassConstructor, RecordValue, RetryOptions, TypeAtPath } from './observableInterfaces';
|
|
4
|
+
import { Observable, ObservableReadable, ObservableState } from './observableTypes';
|
|
5
|
+
export interface PersistTransform<T = any> {
|
|
6
|
+
in?: (value: T) => T | Promise<T>;
|
|
7
|
+
out?: (value: T) => T | Promise<T>;
|
|
8
|
+
}
|
|
9
|
+
export interface PersistOptionsLocal<T = any> {
|
|
10
|
+
name: string;
|
|
11
|
+
transform?: PersistTransform<T>;
|
|
12
|
+
fieldTransforms?: FieldTransforms<T>;
|
|
13
|
+
readonly?: boolean;
|
|
14
|
+
mmkv?: MMKVConfiguration;
|
|
15
|
+
indexedDB?: {
|
|
16
|
+
prefixID?: string;
|
|
17
|
+
itemID?: string;
|
|
18
|
+
};
|
|
19
|
+
options?: any;
|
|
20
|
+
}
|
|
21
|
+
export type PersistOptionsRemote<T = any> = ObservablePersistenceConfigRemoteGlobalOptions & {
|
|
22
|
+
readonly?: boolean;
|
|
23
|
+
waitForGet?: Promise<any> | ObservableReadable<any>;
|
|
24
|
+
waitForSet?: Promise<any> | ObservableReadable<any>;
|
|
25
|
+
manual?: boolean;
|
|
26
|
+
fieldTransforms?: FieldTransforms<T>;
|
|
27
|
+
allowSetIfError?: boolean;
|
|
28
|
+
transform?: PersistTransform<T>;
|
|
29
|
+
firebase?: {
|
|
30
|
+
refPath: (uid: string | undefined) => string;
|
|
31
|
+
query?: (ref: DatabaseReference) => DatabaseReference | Query;
|
|
32
|
+
queryByModified?: QueryByModified<T>;
|
|
33
|
+
ignoreKeys?: string[];
|
|
34
|
+
requireAuth?: boolean;
|
|
35
|
+
mode?: 'once' | 'realtime';
|
|
36
|
+
};
|
|
37
|
+
offlineBehavior?: false | 'retry';
|
|
38
|
+
changeTimeout?: number;
|
|
39
|
+
metadataTimeout?: number;
|
|
40
|
+
retry?: RetryOptions;
|
|
41
|
+
onGetError?: (error: Error) => void;
|
|
42
|
+
onSetError?: (error: Error) => void;
|
|
43
|
+
log?: (message?: any, ...optionalParams: any[]) => void;
|
|
44
|
+
onBeforeSet?: () => void;
|
|
45
|
+
onSet?: () => void;
|
|
46
|
+
};
|
|
47
|
+
export interface ObservablePersistenceConfigLocalGlobalOptions {
|
|
48
|
+
onGetError?: (error: Error) => void;
|
|
49
|
+
onSetError?: (error: Error) => void;
|
|
50
|
+
indexedDB?: {
|
|
51
|
+
databaseName: string;
|
|
52
|
+
version: number;
|
|
53
|
+
tableNames: string[];
|
|
54
|
+
};
|
|
55
|
+
asyncStorage?: {
|
|
56
|
+
AsyncStorage: AsyncStorageStatic;
|
|
57
|
+
preload?: boolean | string[];
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
export interface ObservablePersistenceConfigRemoteGlobalOptions {
|
|
61
|
+
saveTimeout?: number;
|
|
62
|
+
dateModifiedKey?: string;
|
|
63
|
+
offlineBehavior?: false | 'retry';
|
|
64
|
+
onGetError?: (error: Error) => void;
|
|
65
|
+
onSetError?: (error: Error) => void;
|
|
66
|
+
log?: (logLevel: 'verbose' | 'warning' | 'error', message: any, ...optionalParams: any[]) => void;
|
|
67
|
+
onBeforeSet?: () => void;
|
|
68
|
+
onSet?: () => void;
|
|
69
|
+
}
|
|
70
|
+
export interface ObservablePersistenceConfig {
|
|
71
|
+
pluginLocal?: ClassConstructor<ObservablePersistLocal>;
|
|
72
|
+
pluginRemote?: ClassConstructor<ObservablePersistRemoteClass> | ObservablePersistRemoteFunctions;
|
|
73
|
+
localOptions?: ObservablePersistenceConfigLocalGlobalOptions;
|
|
74
|
+
remoteOptions?: ObservablePersistenceConfigRemoteGlobalOptions;
|
|
75
|
+
}
|
|
76
|
+
export interface PersistOptions<T = any> {
|
|
77
|
+
local?: string | PersistOptionsLocal<T>;
|
|
78
|
+
remote?: PersistOptionsRemote<T>;
|
|
79
|
+
pluginLocal?: ClassConstructor<ObservablePersistLocal>;
|
|
80
|
+
pluginRemote?: ClassConstructor<ObservablePersistRemoteClass> | ObservablePersistRemoteFunctions<T>;
|
|
81
|
+
}
|
|
82
|
+
export interface PersistMetadata {
|
|
83
|
+
id?: '__legend_metadata';
|
|
84
|
+
modified?: number;
|
|
85
|
+
pending?: any;
|
|
86
|
+
}
|
|
87
|
+
export interface ObservablePersistLocal {
|
|
88
|
+
initialize?(config: ObservablePersistenceConfigLocalGlobalOptions): void | Promise<void>;
|
|
89
|
+
loadTable?(table: string, config: PersistOptionsLocal): Promise<any> | void;
|
|
90
|
+
getTable<T = any>(table: string, config: PersistOptionsLocal): T;
|
|
91
|
+
set(table: string, changes: Change[], config: PersistOptionsLocal): Promise<any> | void;
|
|
92
|
+
deleteTable(table: string, config: PersistOptionsLocal): Promise<any> | void;
|
|
93
|
+
getMetadata(table: string, config: PersistOptionsLocal): PersistMetadata;
|
|
94
|
+
setMetadata(table: string, metadata: PersistMetadata, config: PersistOptionsLocal): Promise<any> | void;
|
|
95
|
+
deleteMetadata(table: string, config: PersistOptionsLocal): Promise<any> | void;
|
|
96
|
+
}
|
|
97
|
+
export interface ObservableOnChangeParams {
|
|
98
|
+
value: unknown;
|
|
99
|
+
path?: string[];
|
|
100
|
+
pathTypes?: TypeAtPath[];
|
|
101
|
+
mode?: 'assign' | 'set' | 'dateModified';
|
|
102
|
+
dateModified?: number | undefined;
|
|
103
|
+
}
|
|
104
|
+
export interface ObservablePersistRemoteSetParams<T> {
|
|
105
|
+
syncState: Observable<ObservablePersistState>;
|
|
106
|
+
obs: Observable<T>;
|
|
107
|
+
options: PersistOptions<T>;
|
|
108
|
+
changes: Change[];
|
|
109
|
+
value: T;
|
|
110
|
+
}
|
|
111
|
+
export interface ObservablePersistRemoteGetParams<T> {
|
|
112
|
+
state: Observable<ObservablePersistState>;
|
|
113
|
+
obs: ObservableReadable<T>;
|
|
114
|
+
options: PersistOptions<T>;
|
|
115
|
+
dateModified?: number;
|
|
116
|
+
mode?: 'assign' | 'set' | 'dateModified';
|
|
117
|
+
onGet: () => void;
|
|
118
|
+
onError: (error: Error) => void;
|
|
119
|
+
onChange: (params: ObservableOnChangeParams) => void | Promise<void>;
|
|
120
|
+
}
|
|
121
|
+
export type ObservablePersistRemoteGetFnParams<T> = Omit<ObservablePersistRemoteGetParams<T>, 'onGet'>;
|
|
122
|
+
export interface ObservablePersistRemoteClass {
|
|
123
|
+
get?<T>(params: ObservablePersistRemoteGetParams<T>): void;
|
|
124
|
+
set?<T>(params: ObservablePersistRemoteSetParams<T>): void | Promise<void | {
|
|
125
|
+
changes?: object;
|
|
126
|
+
dateModified?: number;
|
|
127
|
+
pathStrs?: string[];
|
|
128
|
+
}>;
|
|
129
|
+
}
|
|
130
|
+
export interface ObservablePersistRemoteFunctions<T = any> {
|
|
131
|
+
get?(params: ObservablePersistRemoteGetFnParams<T>): T | Promise<T>;
|
|
132
|
+
set?(params: ObservablePersistRemoteSetParams<T>): void | Promise<void | {
|
|
133
|
+
changes?: object | undefined;
|
|
134
|
+
dateModified?: number;
|
|
135
|
+
}>;
|
|
136
|
+
}
|
|
137
|
+
export interface ObservablePersistStateBase {
|
|
138
|
+
isLoadedLocal: boolean;
|
|
139
|
+
isEnabledLocal: boolean;
|
|
140
|
+
isEnabledRemote: boolean;
|
|
141
|
+
dateModified?: number;
|
|
142
|
+
syncCount?: number;
|
|
143
|
+
clearLocal: () => Promise<void>;
|
|
144
|
+
sync: () => Promise<void>;
|
|
145
|
+
getPendingChanges: () => Record<string, {
|
|
146
|
+
p: any;
|
|
147
|
+
v?: any;
|
|
148
|
+
}> | undefined;
|
|
149
|
+
}
|
|
150
|
+
export type ObservablePersistState = ObservableState & ObservablePersistStateBase;
|
|
151
|
+
export type ObservablePersistStateInternal = ObservablePersistState & {
|
|
152
|
+
refreshNum: number;
|
|
153
|
+
};
|
|
154
|
+
export interface WithPersistState {
|
|
155
|
+
state?: ObservablePersistState;
|
|
156
|
+
_state?: ObservablePersistState;
|
|
157
|
+
}
|
|
158
|
+
export interface CacheOptions<T = any> {
|
|
159
|
+
local: string | PersistOptionsLocal<T>;
|
|
160
|
+
pluginLocal?: ClassConstructor<ObservablePersistLocal, T[]>;
|
|
161
|
+
}
|
|
162
|
+
declare type ObjectKeys<T> = Pick<T, {
|
|
163
|
+
[K in keyof T]-?: K extends string ? T[K] extends Record<string, any> ? T[K] extends any[] ? never : K : never : never;
|
|
164
|
+
}[keyof T]>;
|
|
165
|
+
declare type DictKeys<T> = Pick<T, {
|
|
166
|
+
[K in keyof T]-?: K extends string ? (T[K] extends Record<string, Record<string, any>> ? K : never) : never;
|
|
167
|
+
}[keyof T]>;
|
|
168
|
+
declare type ArrayKeys<T> = Pick<T, {
|
|
169
|
+
[K in keyof T]-?: K extends string | number ? (T[K] extends any[] ? K : never) : never;
|
|
170
|
+
}[keyof T]>;
|
|
171
|
+
export declare type FieldTransforms<T> = (T extends Record<string, Record<string, any>> ? {
|
|
172
|
+
_dict: FieldTransformsInner<RecordValue<T>>;
|
|
173
|
+
} : never) | FieldTransformsInner<T>;
|
|
174
|
+
export declare type FieldTransformsInner<T> = {
|
|
175
|
+
[K in keyof T]: string;
|
|
176
|
+
} & ({
|
|
177
|
+
[K in keyof ObjectKeys<T> as `${K}_obj`]?: FieldTransforms<T[K]>;
|
|
178
|
+
} | {
|
|
179
|
+
[K in keyof DictKeys<T> as `${K}_dict`]?: FieldTransforms<RecordValue<T[K]>>;
|
|
180
|
+
}) & {
|
|
181
|
+
[K in keyof ArrayKeys<T> as `${K}_arr`]?: FieldTransforms<ArrayValue<T[K]>>;
|
|
182
|
+
} & {
|
|
183
|
+
[K in keyof ArrayKeys<T> as `${K}_val`]?: FieldTransforms<ArrayValue<T[K]>>;
|
|
184
|
+
};
|
|
185
|
+
export type QueryByModified<T> = boolean | {
|
|
186
|
+
[K in keyof T]?: QueryByModified<T[K]>;
|
|
187
|
+
} | {
|
|
188
|
+
'*'?: boolean;
|
|
189
|
+
};
|
|
190
|
+
interface MMKVConfiguration {
|
|
191
|
+
/**
|
|
192
|
+
* The MMKV instance's ID. If you want to use multiple instances, make sure to use different IDs!
|
|
193
|
+
*
|
|
194
|
+
* @example
|
|
195
|
+
* ```ts
|
|
196
|
+
* const userStorage = new MMKV({ id: `user-${userId}-storage` })
|
|
197
|
+
* const globalStorage = new MMKV({ id: 'global-app-storage' })
|
|
198
|
+
* ```
|
|
199
|
+
*
|
|
200
|
+
* @default 'mmkv.default'
|
|
201
|
+
*/
|
|
202
|
+
id: string;
|
|
203
|
+
/**
|
|
204
|
+
* The MMKV instance's root path. By default, MMKV stores file inside `$(Documents)/mmkv/`. You can customize MMKV's root directory on MMKV initialization:
|
|
205
|
+
*
|
|
206
|
+
* @example
|
|
207
|
+
* ```ts
|
|
208
|
+
* const temporaryStorage = new MMKV({ path: '/tmp/' })
|
|
209
|
+
* ```
|
|
210
|
+
*/
|
|
211
|
+
path?: string;
|
|
212
|
+
/**
|
|
213
|
+
* The MMKV instance's encryption/decryption key. By default, MMKV stores all key-values in plain text on file, relying on iOS's sandbox to make sure the file is encrypted. Should you worry about information leaking, you can choose to encrypt MMKV.
|
|
214
|
+
*
|
|
215
|
+
* Encryption keys can have a maximum length of 16 bytes.
|
|
216
|
+
*
|
|
217
|
+
* @example
|
|
218
|
+
* ```ts
|
|
219
|
+
* const secureStorage = new MMKV({ encryptionKey: 'my-encryption-key!' })
|
|
220
|
+
* ```
|
|
221
|
+
*/
|
|
222
|
+
encryptionKey?: string;
|
|
223
|
+
}
|
|
224
|
+
export {};
|
package/src/proxy.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ObservableWriteable } from './observableTypes';
|
|
2
|
+
import { ObservableProxy, ObservableProxyLink, ObservableProxyTwoWay } from './observableInterfaces';
|
|
2
3
|
export declare function proxy<T, T2 = T>(get: (key: string) => T, set: (key: string, value: T2) => void): ObservableProxyTwoWay<Record<string, T>, T2>;
|
|
3
4
|
export declare function proxy<T extends Record<string, any>>(get: <K extends keyof T>(key: K) => ObservableWriteable<T[K]>): ObservableProxyLink<T>;
|
|
4
5
|
export declare function proxy<T>(get: (key: string) => ObservableWriteable<T>): ObservableProxyLink<Record<string, T>>;
|
package/src/react/Computed.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ReactElement, ReactNode } from 'react';
|
|
2
|
-
import type { ObservableReadable } from '../
|
|
2
|
+
import type { ObservableReadable } from '../observableTypes';
|
|
3
3
|
export declare function Computed({ children }: {
|
|
4
4
|
children: ObservableReadable | (() => ReactNode);
|
|
5
5
|
}): ReactElement;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { FC, LegacyRef, ReactNode } from 'react';
|
|
2
|
-
import type { Observable
|
|
2
|
+
import type { Observable } from '../observableTypes';
|
|
3
|
+
import type { Selector } from '../observableInterfaces';
|
|
3
4
|
export type ShapeWithNew$<T> = Partial<Omit<T, 'children'>> & {
|
|
4
5
|
[K in keyof T as K extends `$${string & K}` ? K : `$${string & K}`]?: Selector<T[K]>;
|
|
5
6
|
} & {
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { ReactNode } from 'react';
|
|
2
|
-
export declare const PauseContext: import("react").Context<import("
|
|
2
|
+
export declare const PauseContext: import("react").Context<import("../observableTypes").ObservableBoolean>;
|
|
3
3
|
export declare function usePauseProvider(): {
|
|
4
4
|
PauseProvider: ({ children }: {
|
|
5
5
|
children: ReactNode;
|
|
6
|
-
}) => import("react").FunctionComponentElement<import("react").ProviderProps<import("
|
|
7
|
-
isPaused$: import("
|
|
6
|
+
}) => import("react").FunctionComponentElement<import("react").ProviderProps<import("../observableTypes").ObservableBoolean>>;
|
|
7
|
+
isPaused$: import("../observableTypes").ObservableBoolean;
|
|
8
8
|
};
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
import { Observable } from '@legendapp/state';
|
|
2
|
+
export declare function useFetch<T>(input: RequestInfo | URL, init?: RequestInit, valueType?: 'arrayBuffer' | 'blob' | 'formData' | 'json' | 'text'): Observable<{
|
|
3
|
+
data?: T;
|
|
3
4
|
error?: any;
|
|
4
|
-
errorStr?: string
|
|
5
|
+
errorStr?: string;
|
|
5
6
|
loading: boolean;
|
|
6
7
|
}>;
|
package/src/trackSelector.d.ts
CHANGED
|
@@ -2,6 +2,6 @@ import type { ListenerParams, ObservableListenerDispose, ObserveEvent, Selector
|
|
|
2
2
|
import type { ObserveOptions } from './observe';
|
|
3
3
|
export declare function trackSelector<T>(selector: Selector<T>, update: (params: ListenerParams) => void, observeEvent?: ObserveEvent<T>, observeOptions?: ObserveOptions, createResubscribe?: boolean): {
|
|
4
4
|
value: any;
|
|
5
|
-
dispose:
|
|
5
|
+
dispose: (() => void) | undefined;
|
|
6
6
|
resubscribe: ObservableListenerDispose | undefined;
|
|
7
7
|
};
|