react-native-onyx 3.0.10 → 3.0.11

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/Onyx.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import * as Logger from './Logger';
2
- import type { CollectionKeyBase, ConnectOptions, InitOptions, OnyxKey, OnyxMergeCollectionInput, OnyxMergeInput, OnyxMultiSetInput, OnyxSetInput, OnyxUpdate, SetOptions } from './types';
2
+ import type { CollectionKeyBase, ConnectOptions, InitOptions, OnyxKey, OnyxMergeCollectionInput, OnyxSetCollectionInput, OnyxMergeInput, OnyxMultiSetInput, OnyxSetInput, OnyxUpdate, SetOptions } from './types';
3
3
  import type { Connection } from './OnyxConnectionManager';
4
4
  /** Initialize the store with actions and listening for storage events */
5
5
  declare function init({ keys, initialKeyStates, evictableKeys, maxCachedKeysCount, shouldSyncMultipleInstances, enablePerformanceMetrics, enableDevTools, skippableCollectionMemberIDs, }: InitOptions): void;
@@ -110,7 +110,7 @@ declare function merge<TKey extends OnyxKey>(key: TKey, changes: OnyxMergeInput<
110
110
  * @param collectionKey e.g. `ONYXKEYS.COLLECTION.REPORT`
111
111
  * @param collection Object collection keyed by individual collection member keys and values
112
112
  */
113
- declare function mergeCollection<TKey extends CollectionKeyBase, TMap>(collectionKey: TKey, collection: OnyxMergeCollectionInput<TKey, TMap>): Promise<void>;
113
+ declare function mergeCollection<TKey extends CollectionKeyBase>(collectionKey: TKey, collection: OnyxMergeCollectionInput<TKey>): Promise<void>;
114
114
  /**
115
115
  * Clear out all the data in the store
116
116
  *
@@ -153,7 +153,7 @@ declare function update(data: OnyxUpdate[]): Promise<void>;
153
153
  * @param collectionKey e.g. `ONYXKEYS.COLLECTION.REPORT`
154
154
  * @param collection Object collection keyed by individual collection member keys and values
155
155
  */
156
- declare function setCollection<TKey extends CollectionKeyBase, TMap>(collectionKey: TKey, collection: OnyxMergeCollectionInput<TKey, TMap>): Promise<void>;
156
+ declare function setCollection<TKey extends CollectionKeyBase>(collectionKey: TKey, collection: OnyxSetCollectionInput<TKey>): Promise<void>;
157
157
  declare const Onyx: {
158
158
  METHOD: {
159
159
  readonly SET: "set";
@@ -1,6 +1,6 @@
1
1
  import type { ValueOf } from 'type-fest';
2
2
  import type Onyx from './Onyx';
3
- import type { CollectionKey, CollectionKeyBase, ConnectOptions, DeepRecord, KeyValueMapping, CallbackToStateMapping, MultiMergeReplaceNullPatches, OnyxCollection, OnyxEntry, OnyxInput, OnyxInputKeyValueMapping, OnyxKey, OnyxMergeCollectionInput, OnyxUpdate, OnyxValue, Selector } from './types';
3
+ import type { CollectionKey, CollectionKeyBase, ConnectOptions, DeepRecord, KeyValueMapping, CallbackToStateMapping, MultiMergeReplaceNullPatches, OnyxCollection, OnyxEntry, OnyxInput, OnyxInputKeyValueMapping, OnyxKey, OnyxMergeCollectionInput, OnyxUpdate, OnyxValue, Selector, OnyxSetCollectionInput } from './types';
4
4
  import type { FastMergeResult } from './utils';
5
5
  import type { DeferredTask } from './createDeferredTask';
6
6
  import type { StorageKeyValuePair } from './storage/providers/types';
@@ -234,7 +234,7 @@ declare function initializeWithDefaultKeyStates(): Promise<void>;
234
234
  /**
235
235
  * Validate the collection is not empty and has a correct type before applying mergeCollection()
236
236
  */
237
- declare function isValidNonEmptyCollectionForMerge<TKey extends CollectionKeyBase, TMap>(collection: OnyxMergeCollectionInput<TKey, TMap>): boolean;
237
+ declare function isValidNonEmptyCollectionForMerge<TKey extends CollectionKeyBase>(collection: OnyxMergeCollectionInput<TKey>): boolean;
238
238
  /**
239
239
  * Verify if all the collection keys belong to the same parent
240
240
  */
@@ -263,7 +263,7 @@ declare function updateSnapshots(data: OnyxUpdate[], mergeFn: typeof Onyx.merge)
263
263
  * @param mergeReplaceNullPatches Record where the key is a collection member key and the value is a list of
264
264
  * tuples that we'll use to replace the nested objects of that collection member record with something else.
265
265
  */
266
- declare function mergeCollectionWithPatches<TKey extends CollectionKeyBase, TMap>(collectionKey: TKey, collection: OnyxMergeCollectionInput<TKey, TMap>, mergeReplaceNullPatches?: MultiMergeReplaceNullPatches, isProcessingCollectionUpdate?: boolean): Promise<void>;
266
+ declare function mergeCollectionWithPatches<TKey extends CollectionKeyBase>(collectionKey: TKey, collection: OnyxMergeCollectionInput<TKey>, mergeReplaceNullPatches?: MultiMergeReplaceNullPatches, isProcessingCollectionUpdate?: boolean): Promise<void>;
267
267
  /**
268
268
  * Sets keys in a collection by replacing all targeted collection members with new values.
269
269
  * Any existing collection members not included in the new data will not be removed.
@@ -271,7 +271,7 @@ declare function mergeCollectionWithPatches<TKey extends CollectionKeyBase, TMap
271
271
  * @param collectionKey e.g. `ONYXKEYS.COLLECTION.REPORT`
272
272
  * @param collection Object collection keyed by individual collection member keys and values
273
273
  */
274
- declare function partialSetCollection<TKey extends CollectionKeyBase, TMap>(collectionKey: TKey, collection: OnyxMergeCollectionInput<TKey, TMap>): Promise<void>;
274
+ declare function partialSetCollection<TKey extends CollectionKeyBase>(collectionKey: TKey, collection: OnyxSetCollectionInput<TKey>): Promise<void>;
275
275
  declare function logKeyChanged(onyxMethod: Extract<OnyxMethod, 'set' | 'merge'>, key: OnyxKey, value: unknown, hasChanged: boolean): void;
276
276
  declare function logKeyRemoved(onyxMethod: Extract<OnyxMethod, 'set' | 'merge'>, key: OnyxKey): void;
277
277
  /**
package/dist/index.d.ts CHANGED
@@ -1,10 +1,10 @@
1
1
  import type { ConnectOptions, OnyxUpdate } from './Onyx';
2
2
  import Onyx from './Onyx';
3
- import type { CustomTypeOptions, KeyValueMapping, NullishDeep, OnyxCollection, OnyxEntry, OnyxKey, OnyxValue, Selector, OnyxInputValue, OnyxCollectionInputValue, OnyxInput, OnyxSetInput, OnyxMultiSetInput, OnyxMergeInput, OnyxMergeCollectionInput } from './types';
3
+ import type { CustomTypeOptions, KeyValueMapping, NullishDeep, OnyxCollection, OnyxEntry, OnyxKey, OnyxValue, Selector, OnyxInputValue, OnyxCollectionInputValue, OnyxInput, OnyxSetInput, OnyxMultiSetInput, OnyxMergeInput, OnyxMergeCollectionInput, OnyxSetCollectionInput } from './types';
4
4
  import type { FetchStatus, ResultMetadata, UseOnyxResult, UseOnyxOptions } from './useOnyx';
5
5
  import type { Connection } from './OnyxConnectionManager';
6
6
  import useOnyx from './useOnyx';
7
7
  import type { OnyxSQLiteKeyValuePair } from './storage/providers/SQLiteProvider';
8
8
  export default Onyx;
9
9
  export { useOnyx };
10
- export type { ConnectOptions, CustomTypeOptions, FetchStatus, KeyValueMapping, NullishDeep, OnyxCollection, OnyxEntry, OnyxKey, OnyxInputValue, OnyxCollectionInputValue, OnyxInput, OnyxSetInput, OnyxMultiSetInput, OnyxMergeInput, OnyxMergeCollectionInput, OnyxUpdate, OnyxValue, ResultMetadata, Selector, UseOnyxResult, Connection, UseOnyxOptions, OnyxSQLiteKeyValuePair, };
10
+ export type { ConnectOptions, CustomTypeOptions, FetchStatus, KeyValueMapping, NullishDeep, OnyxCollection, OnyxEntry, OnyxKey, OnyxInputValue, OnyxCollectionInputValue, OnyxInput, OnyxSetInput, OnyxMultiSetInput, OnyxMergeInput, OnyxMergeCollectionInput, OnyxSetCollectionInput, OnyxUpdate, OnyxValue, ResultMetadata, Selector, UseOnyxResult, Connection, UseOnyxOptions, OnyxSQLiteKeyValuePair, };
package/dist/types.d.ts CHANGED
@@ -1,5 +1,4 @@
1
1
  import type { Merge } from 'type-fest';
2
- import type { BuiltIns } from 'type-fest/source/internal';
3
2
  import type OnyxUtils from './OnyxUtils';
4
3
  import type { OnyxMethod } from './OnyxUtils';
5
4
  import type { FastMergeReplaceNullPatch } from './utils';
@@ -138,6 +137,8 @@ type KeyValueMapping = {
138
137
  type OnyxValue<TKey extends OnyxKey> = string extends TKey ? unknown : TKey extends CollectionKeyBase ? OnyxCollection<KeyValueMapping[TKey]> : OnyxEntry<KeyValueMapping[TKey]>;
139
138
  /** Utility type to extract `TOnyxValue` from `OnyxCollection<TOnyxValue>` */
140
139
  type ExtractOnyxCollectionValue<TOnyxCollection> = TOnyxCollection extends NonNullable<OnyxCollection<infer U>> ? U : never;
140
+ type Primitive = null | undefined | string | number | boolean | symbol | bigint;
141
+ type BuiltIns = Primitive | void | Date | RegExp;
141
142
  type NonTransformableTypes = BuiltIns | ((...args: any[]) => unknown) | Map<unknown, unknown> | Set<unknown> | ReadonlyMap<unknown, unknown> | ReadonlySet<unknown> | unknown[] | readonly unknown[];
142
143
  /**
143
144
  * Create a type from another type with all keys and nested keys set to optional or null.
@@ -174,8 +175,8 @@ type NullishObjectDeep<ObjectType extends object> = {
174
175
  * Also, the `TMap` type is inferred automatically in `mergeCollection()` method and represents
175
176
  * the object of collection keys/values specified in the second parameter of the method.
176
177
  */
177
- type Collection<TKey extends CollectionKeyBase, TValue, TMap = never> = {
178
- [MapK in keyof TMap]: MapK extends `${TKey}${string}` ? MapK extends `${TKey}` ? never : TValue : never;
178
+ type Collection<TKey extends CollectionKeyBase, TValue> = Record<`${TKey}${string}`, TValue> & {
179
+ [P in TKey]?: never;
179
180
  };
180
181
  /** Represents the base options used in `Onyx.connect()` method. */
181
182
  type BaseConnectOptions = {
@@ -263,44 +264,46 @@ type OnyxMergeInput<TKey extends OnyxKey> = OnyxInput<TKey>;
263
264
  /**
264
265
  * This represents the value that can be passed to `Onyx.merge` and to `Onyx.update` with the method "MERGE"
265
266
  */
266
- type OnyxMergeCollectionInput<TKey extends OnyxKey, TMap = object> = Collection<TKey, NonNullable<OnyxInput<TKey>>, TMap>;
267
+ type OnyxMergeCollectionInput<TKey extends OnyxKey> = Collection<TKey, NonNullable<OnyxInput<TKey>>>;
268
+ /**
269
+ * This represents the value that can be passed to `Onyx.setCollection` and to `Onyx.update` with the method "SET_COLLECTION"
270
+ */
271
+ type OnyxSetCollectionInput<TKey extends OnyxKey> = Collection<TKey, OnyxInput<TKey>>;
267
272
  type OnyxMethodMap = typeof OnyxUtils.METHOD;
268
- type OnyxMethodValueMap = {
269
- [OnyxUtils.METHOD.SET]: {
270
- key: OnyxKey;
271
- value: OnyxSetInput<OnyxKey>;
272
- };
273
- [OnyxUtils.METHOD.MULTI_SET]: {
274
- key: OnyxKey;
275
- value: OnyxMultiSetInput;
276
- };
277
- [OnyxUtils.METHOD.MERGE]: {
278
- key: OnyxKey;
279
- value: OnyxMergeInput<OnyxKey>;
280
- };
281
- [OnyxUtils.METHOD.CLEAR]: {
282
- key: OnyxKey;
283
- value?: undefined;
284
- };
285
- [OnyxUtils.METHOD.MERGE_COLLECTION]: {
286
- key: CollectionKeyBase;
287
- value: OnyxMergeCollectionInput<CollectionKeyBase>;
288
- };
289
- [OnyxUtils.METHOD.SET_COLLECTION]: {
290
- key: CollectionKeyBase;
291
- value: OnyxMergeCollectionInput<CollectionKeyBase>;
292
- };
293
- };
294
273
  /**
295
274
  * OnyxUpdate type includes all onyx methods used in OnyxMethodValueMap.
296
275
  * If a new method is added to OnyxUtils.METHOD constant, it must be added to OnyxMethodValueMap type.
297
276
  * Otherwise it will show static type errors.
298
277
  */
299
278
  type OnyxUpdate = {
300
- [Method in OnyxMethod]: {
301
- onyxMethod: Method;
302
- } & OnyxMethodValueMap[Method];
303
- }[OnyxMethod];
279
+ [TKey in OnyxKey]: {
280
+ onyxMethod: typeof OnyxUtils.METHOD.SET;
281
+ key: TKey;
282
+ value: OnyxSetInput<TKey>;
283
+ } | {
284
+ onyxMethod: typeof OnyxUtils.METHOD.MULTI_SET;
285
+ key: TKey;
286
+ value: OnyxMultiSetInput;
287
+ } | {
288
+ onyxMethod: typeof OnyxUtils.METHOD.MERGE;
289
+ key: TKey;
290
+ value: OnyxMergeInput<TKey>;
291
+ } | {
292
+ onyxMethod: typeof OnyxUtils.METHOD.CLEAR;
293
+ key: TKey;
294
+ value?: undefined;
295
+ };
296
+ }[OnyxKey] | {
297
+ [TKey in CollectionKeyBase]: {
298
+ onyxMethod: typeof OnyxUtils.METHOD.MERGE_COLLECTION;
299
+ key: TKey;
300
+ value: OnyxMergeCollectionInput<TKey>;
301
+ } | {
302
+ onyxMethod: typeof OnyxUtils.METHOD.SET_COLLECTION;
303
+ key: TKey;
304
+ value: OnyxSetCollectionInput<TKey>;
305
+ };
306
+ }[CollectionKeyBase];
304
307
  /**
305
308
  * Represents the options used in `Onyx.set()` method.
306
309
  */
@@ -365,4 +368,4 @@ type MixedOperationsQueue = {
365
368
  mergeReplaceNullPatches: MultiMergeReplaceNullPatches;
366
369
  set: OnyxInputKeyValueMapping;
367
370
  };
368
- export type { BaseConnectOptions, Collection, CollectionConnectCallback, CollectionConnectOptions, CollectionKey, CollectionKeyBase, ConnectOptions, CustomTypeOptions, DeepRecord, DefaultConnectCallback, DefaultConnectOptions, ExtractOnyxCollectionValue, GenericFunction, InitOptions, Key, KeyValueMapping, CallbackToStateMapping, NonNull, NonUndefined, OnyxInputKeyValueMapping, NullishDeep, OnyxCollection, OnyxEntry, OnyxKey, OnyxInputValue, OnyxCollectionInputValue, OnyxInput, OnyxSetInput, OnyxMultiSetInput, OnyxMergeInput, OnyxMergeCollectionInput, OnyxMethod, OnyxMethodMap, OnyxUpdate, OnyxValue, Selector, SetOptions, MultiMergeReplaceNullPatches, MixedOperationsQueue, };
371
+ export type { BaseConnectOptions, Collection, CollectionConnectCallback, CollectionConnectOptions, CollectionKey, CollectionKeyBase, ConnectOptions, CustomTypeOptions, DeepRecord, DefaultConnectCallback, DefaultConnectOptions, ExtractOnyxCollectionValue, GenericFunction, InitOptions, Key, KeyValueMapping, CallbackToStateMapping, NonNull, NonUndefined, OnyxInputKeyValueMapping, NullishDeep, OnyxCollection, OnyxEntry, OnyxKey, OnyxInputValue, OnyxCollectionInputValue, OnyxInput, OnyxSetInput, OnyxMultiSetInput, OnyxMergeInput, OnyxMergeCollectionInput, OnyxSetCollectionInput, OnyxMethod, OnyxMethodMap, OnyxUpdate, OnyxValue, Selector, SetOptions, MultiMergeReplaceNullPatches, MixedOperationsQueue, };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-onyx",
3
- "version": "3.0.10",
3
+ "version": "3.0.11",
4
4
  "author": "Expensify, Inc.",
5
5
  "homepage": "https://expensify.com",
6
6
  "description": "State management for React Native",
@@ -32,6 +32,7 @@
32
32
  "lint": "eslint .",
33
33
  "typecheck": "tsc --noEmit",
34
34
  "test": "jest",
35
+ "test:types": "npm run build && tsc --noEmit --project tsconfig.test.json",
35
36
  "perf-test": "npx reassure",
36
37
  "build": "tsc -p tsconfig.build.json",
37
38
  "build:watch": "nodemon --watch lib --ext js,json,ts,tsx --exec \"npm run build && npm pack\"",