react-native-nitro-storage 0.4.5 → 0.5.1
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/README.md +254 -945
- package/SECURITY.md +26 -0
- package/docs/api-reference.md +281 -0
- package/docs/batch-transactions-migrations.md +200 -0
- package/docs/benchmarks.md +37 -0
- package/docs/mmkv-migration.md +80 -0
- package/docs/react-hooks.md +113 -0
- package/docs/recipes.md +302 -0
- package/docs/secure-storage.md +190 -0
- package/docs/web-backends.md +141 -0
- package/lib/commonjs/index.js +265 -14
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/index.web.js +220 -11
- package/lib/commonjs/index.web.js.map +1 -1
- package/lib/commonjs/storage-events.js +117 -0
- package/lib/commonjs/storage-events.js.map +1 -0
- package/lib/commonjs/storage-runtime.js.map +1 -1
- package/lib/module/index.js +265 -14
- package/lib/module/index.js.map +1 -1
- package/lib/module/index.web.js +220 -11
- package/lib/module/index.web.js.map +1 -1
- package/lib/module/storage-events.js +112 -0
- package/lib/module/storage-events.js.map +1 -0
- package/lib/module/storage-runtime.js.map +1 -1
- package/lib/typescript/index.d.ts +19 -2
- package/lib/typescript/index.d.ts.map +1 -1
- package/lib/typescript/index.web.d.ts +19 -2
- package/lib/typescript/index.web.d.ts.map +1 -1
- package/lib/typescript/storage-events.d.ts +37 -0
- package/lib/typescript/storage-events.d.ts.map +1 -0
- package/lib/typescript/storage-runtime.d.ts +32 -0
- package/lib/typescript/storage-runtime.d.ts.map +1 -1
- package/package.json +25 -11
- package/src/index.ts +601 -14
- package/src/index.web.ts +535 -22
- package/src/storage-events.ts +184 -0
- package/src/storage-runtime.ts +35 -0
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import { StorageScope, AccessControl, BiometricLevel } from "./Storage.types";
|
|
2
2
|
import { type WebDiskStorageBackend, type WebSecureStorageBackend } from "./web-storage-backend";
|
|
3
|
-
import { type StorageCapabilities } from "./storage-runtime";
|
|
3
|
+
import { type SecureStorageMetadata, type SecurityCapabilities, type StorageCapabilities } from "./storage-runtime";
|
|
4
|
+
import { type StorageEventListener } from "./storage-events";
|
|
4
5
|
export { StorageScope, AccessControl, BiometricLevel } from "./Storage.types";
|
|
5
6
|
export { migrateFromMMKV } from "./migration";
|
|
6
|
-
export { getStorageErrorCode, type StorageCapabilities, type StorageErrorCode, } from "./storage-runtime";
|
|
7
|
+
export { getStorageErrorCode, type SecureStorageMetadata, type SecurityCapabilities, type StorageCapabilities, type StorageErrorCode, } from "./storage-runtime";
|
|
8
|
+
export type { StorageBatchChangeEvent, StorageChangeEvent, StorageChangeOperation, StorageChangeSource, StorageEventListener, StorageKeyChangeEvent, } from "./storage-events";
|
|
7
9
|
export type { WebStorageBackend, WebStorageChangeEvent, WebStorageScope, } from "./web-storage-backend";
|
|
8
10
|
export type Validator<T> = (value: unknown) => value is T;
|
|
9
11
|
export type ExpirationConfig = {
|
|
@@ -27,6 +29,11 @@ export type StorageMetricSummary = {
|
|
|
27
29
|
avgDurationMs: number;
|
|
28
30
|
maxDurationMs: number;
|
|
29
31
|
};
|
|
32
|
+
export type StorageSelectorListener<TSelected> = (value: TSelected, previousValue: TSelected) => void;
|
|
33
|
+
export type StorageSelectorSubscribeOptions<TSelected> = {
|
|
34
|
+
isEqual?: (previousValue: TSelected, nextValue: TSelected) => boolean;
|
|
35
|
+
fireImmediately?: boolean;
|
|
36
|
+
};
|
|
30
37
|
export type MigrationContext = {
|
|
31
38
|
scope: StorageScope;
|
|
32
39
|
getRaw: (key: string) => string | undefined;
|
|
@@ -71,6 +78,11 @@ export interface Storage {
|
|
|
71
78
|
clearSecureBiometric(): void;
|
|
72
79
|
}
|
|
73
80
|
export declare const storage: {
|
|
81
|
+
subscribe: (scope: StorageScope, listener: StorageEventListener) => (() => void);
|
|
82
|
+
subscribeKey: (scope: StorageScope, key: string, listener: StorageEventListener) => (() => void);
|
|
83
|
+
subscribePrefix: (scope: StorageScope, prefix: string, listener: StorageEventListener) => (() => void);
|
|
84
|
+
subscribeNamespace: (namespace: string, scope: StorageScope, listener: StorageEventListener) => (() => void);
|
|
85
|
+
setEventObserver: (observer?: StorageEventListener) => void;
|
|
74
86
|
clear: (scope: StorageScope) => void;
|
|
75
87
|
clearAll: () => void;
|
|
76
88
|
clearNamespace: (namespace: string, scope: StorageScope) => void;
|
|
@@ -80,6 +92,7 @@ export declare const storage: {
|
|
|
80
92
|
getKeysByPrefix: (prefix: string, scope: StorageScope) => string[];
|
|
81
93
|
getByPrefix: (prefix: string, scope: StorageScope) => Record<string, string>;
|
|
82
94
|
getAll: (scope: StorageScope) => Record<string, string>;
|
|
95
|
+
export: (scope: StorageScope) => Record<string, string>;
|
|
83
96
|
size: (scope: StorageScope) => number;
|
|
84
97
|
setAccessControl: (level: AccessControl) => void;
|
|
85
98
|
setSecureWritesAsync: (_enabled: boolean) => void;
|
|
@@ -91,6 +104,9 @@ export declare const storage: {
|
|
|
91
104
|
getMetricsSnapshot: () => Record<string, StorageMetricSummary>;
|
|
92
105
|
resetMetrics: () => void;
|
|
93
106
|
getCapabilities: () => StorageCapabilities;
|
|
107
|
+
getSecurityCapabilities: () => SecurityCapabilities;
|
|
108
|
+
getSecureMetadata: (key: string) => SecureStorageMetadata;
|
|
109
|
+
getAllSecureMetadata: () => SecureStorageMetadata[];
|
|
94
110
|
getString: (key: string, scope: StorageScope) => string | undefined;
|
|
95
111
|
setString: (key: string, value: string, scope: StorageScope) => void;
|
|
96
112
|
deleteString: (key: string, scope: StorageScope) => void;
|
|
@@ -127,6 +143,7 @@ export interface StorageItem<T> {
|
|
|
127
143
|
delete: () => void;
|
|
128
144
|
has: () => boolean;
|
|
129
145
|
subscribe: (callback: () => void) => () => void;
|
|
146
|
+
subscribeSelector: <TSelected>(selector: (value: T) => TSelected, listener: StorageSelectorListener<TSelected>, options?: StorageSelectorSubscribeOptions<TSelected>) => () => void;
|
|
130
147
|
serialize: (value: T) => string;
|
|
131
148
|
deserialize: (value: string) => T;
|
|
132
149
|
scope: StorageScope;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.web.d.ts","sourceRoot":"","sources":["../../src/index.web.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAa9E,OAAO,EAEL,KAAK,qBAAqB,EAC1B,KAAK,uBAAuB,EAG7B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAGL,KAAK,mBAAmB,EAEzB,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.web.d.ts","sourceRoot":"","sources":["../../src/index.web.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { StorageScope } from "./Storage.types";
|
|
2
|
+
export type StorageChangeOperation = "set" | "remove" | "clear" | "clearNamespace" | "setBatch" | "removeBatch" | "import" | "external";
|
|
3
|
+
export type StorageChangeSource = "memory" | "native" | "web" | "external";
|
|
4
|
+
export type StorageKeyChangeEvent = {
|
|
5
|
+
type: "key";
|
|
6
|
+
scope: StorageScope;
|
|
7
|
+
key: string;
|
|
8
|
+
oldValue: string | undefined;
|
|
9
|
+
newValue: string | undefined;
|
|
10
|
+
operation: StorageChangeOperation;
|
|
11
|
+
source: StorageChangeSource;
|
|
12
|
+
};
|
|
13
|
+
export type StorageBatchChangeEvent = {
|
|
14
|
+
type: "batch";
|
|
15
|
+
scope: StorageScope;
|
|
16
|
+
operation: StorageChangeOperation;
|
|
17
|
+
source: StorageChangeSource;
|
|
18
|
+
changes: StorageKeyChangeEvent[];
|
|
19
|
+
};
|
|
20
|
+
export type StorageChangeEvent = StorageKeyChangeEvent | StorageBatchChangeEvent;
|
|
21
|
+
export type StorageEventListener = (event: StorageChangeEvent) => void;
|
|
22
|
+
export declare class StorageEventRegistry {
|
|
23
|
+
private readonly scopeListeners;
|
|
24
|
+
private readonly keyListeners;
|
|
25
|
+
private readonly prefixListeners;
|
|
26
|
+
subscribe(scope: StorageScope, listener: StorageEventListener): () => void;
|
|
27
|
+
hasListeners(scope: StorageScope): boolean;
|
|
28
|
+
subscribeKey(scope: StorageScope, key: string, listener: StorageEventListener): () => void;
|
|
29
|
+
subscribePrefix(scope: StorageScope, prefix: string, listener: StorageEventListener): () => void;
|
|
30
|
+
emitKey(event: StorageKeyChangeEvent): void;
|
|
31
|
+
emitBatch(event: StorageBatchChangeEvent): void;
|
|
32
|
+
private emitToScope;
|
|
33
|
+
private emitToKey;
|
|
34
|
+
private emitToPrefixes;
|
|
35
|
+
private emitBatchToPrefixes;
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=storage-events.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage-events.d.ts","sourceRoot":"","sources":["../../src/storage-events.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,MAAM,MAAM,sBAAsB,GAC9B,KAAK,GACL,QAAQ,GACR,OAAO,GACP,gBAAgB,GAChB,UAAU,GACV,aAAa,GACb,QAAQ,GACR,UAAU,CAAC;AAEf,MAAM,MAAM,mBAAmB,GAAG,QAAQ,GAAG,QAAQ,GAAG,KAAK,GAAG,UAAU,CAAC;AAE3E,MAAM,MAAM,qBAAqB,GAAG;IAClC,IAAI,EAAE,KAAK,CAAC;IACZ,KAAK,EAAE,YAAY,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,SAAS,EAAE,sBAAsB,CAAC;IAClC,MAAM,EAAE,mBAAmB,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,YAAY,CAAC;IACpB,SAAS,EAAE,sBAAsB,CAAC;IAClC,MAAM,EAAE,mBAAmB,CAAC;IAC5B,OAAO,EAAE,qBAAqB,EAAE,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAC1B,qBAAqB,GACrB,uBAAuB,CAAC;AAE5B,MAAM,MAAM,oBAAoB,GAAG,CAAC,KAAK,EAAE,kBAAkB,KAAK,IAAI,CAAC;AA+BvE,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAAC,cAAc,CAG3B;IACJ,OAAO,CAAC,QAAQ,CAAC,YAAY,CAGzB;IACJ,OAAO,CAAC,QAAQ,CAAC,eAAe,CAG5B;IAEJ,SAAS,CAAC,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,oBAAoB,GAAG,MAAM,IAAI;IAI1E,YAAY,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO;IAQ1C,YAAY,CACV,KAAK,EAAE,YAAY,EACnB,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,oBAAoB,GAC7B,MAAM,IAAI;IA8Bb,eAAe,CACb,KAAK,EAAE,YAAY,EACnB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,oBAAoB,GAC7B,MAAM,IAAI;IAKb,OAAO,CAAC,KAAK,EAAE,qBAAqB,GAAG,IAAI;IAM3C,SAAS,CAAC,KAAK,EAAE,uBAAuB,GAAG,IAAI;IAQ/C,OAAO,CAAC,WAAW;IAMnB,OAAO,CAAC,SAAS;IASjB,OAAO,CAAC,cAAc;IAQtB,OAAO,CAAC,mBAAmB;CAU5B"}
|
|
@@ -11,6 +11,38 @@ export type StorageCapabilities = {
|
|
|
11
11
|
};
|
|
12
12
|
errorClassification: boolean;
|
|
13
13
|
};
|
|
14
|
+
export type SecurityCapabilityStatus = "available" | "unavailable" | "unknown";
|
|
15
|
+
export type SecurityCapabilities = {
|
|
16
|
+
platform: "native" | "web";
|
|
17
|
+
secureStorage: {
|
|
18
|
+
backend: string;
|
|
19
|
+
encrypted: SecurityCapabilityStatus;
|
|
20
|
+
accessControl: SecurityCapabilityStatus;
|
|
21
|
+
keychainAccessGroup: SecurityCapabilityStatus;
|
|
22
|
+
hardwareBacked: SecurityCapabilityStatus;
|
|
23
|
+
};
|
|
24
|
+
biometric: {
|
|
25
|
+
storage: SecurityCapabilityStatus;
|
|
26
|
+
prompt: SecurityCapabilityStatus;
|
|
27
|
+
biometryOnly: SecurityCapabilityStatus;
|
|
28
|
+
biometryOrPasscode: SecurityCapabilityStatus;
|
|
29
|
+
};
|
|
30
|
+
metadata: {
|
|
31
|
+
perKey: boolean;
|
|
32
|
+
listsWithoutValues: boolean;
|
|
33
|
+
persistsTimestamps: boolean;
|
|
34
|
+
};
|
|
35
|
+
};
|
|
36
|
+
export type SecureStorageMetadata = {
|
|
37
|
+
key: string;
|
|
38
|
+
exists: boolean;
|
|
39
|
+
kind: "secure" | "biometric" | "missing";
|
|
40
|
+
backend: string;
|
|
41
|
+
encrypted: SecurityCapabilityStatus;
|
|
42
|
+
hardwareBacked: SecurityCapabilityStatus;
|
|
43
|
+
biometricProtected: boolean;
|
|
44
|
+
valueExposed: false;
|
|
45
|
+
};
|
|
14
46
|
export declare function getStorageErrorCode(err: unknown): StorageErrorCode | undefined;
|
|
15
47
|
export declare function isLockedStorageErrorCode(code: StorageErrorCode | undefined): boolean;
|
|
16
48
|
//# sourceMappingURL=storage-runtime.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage-runtime.d.ts","sourceRoot":"","sources":["../../src/storage-runtime.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,gBAAgB,GACxB,iBAAiB,GACjB,yBAAyB,GACzB,iBAAiB,GACjB,oBAAoB,GACpB,uBAAuB,GACvB,aAAa,CAAC;AAElB,MAAM,MAAM,mBAAmB,GAAG;IAChC,QAAQ,EAAE,QAAQ,GAAG,KAAK,CAAC;IAC3B,OAAO,EAAE;QACP,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,cAAc,EAAE;QACd,IAAI,EAAE,OAAO,CAAC;QACd,MAAM,EAAE,OAAO,CAAC;KACjB,CAAC;IACF,mBAAmB,EAAE,OAAO,CAAC;CAC9B,CAAC;AAIF,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,OAAO,GACX,gBAAgB,GAAG,SAAS,CA0D9B;AAED,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,gBAAgB,GAAG,SAAS,GACjC,OAAO,CAMT"}
|
|
1
|
+
{"version":3,"file":"storage-runtime.d.ts","sourceRoot":"","sources":["../../src/storage-runtime.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,gBAAgB,GACxB,iBAAiB,GACjB,yBAAyB,GACzB,iBAAiB,GACjB,oBAAoB,GACpB,uBAAuB,GACvB,aAAa,CAAC;AAElB,MAAM,MAAM,mBAAmB,GAAG;IAChC,QAAQ,EAAE,QAAQ,GAAG,KAAK,CAAC;IAC3B,OAAO,EAAE;QACP,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,cAAc,EAAE;QACd,IAAI,EAAE,OAAO,CAAC;QACd,MAAM,EAAE,OAAO,CAAC;KACjB,CAAC;IACF,mBAAmB,EAAE,OAAO,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG,WAAW,GAAG,aAAa,GAAG,SAAS,CAAC;AAE/E,MAAM,MAAM,oBAAoB,GAAG;IACjC,QAAQ,EAAE,QAAQ,GAAG,KAAK,CAAC;IAC3B,aAAa,EAAE;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,wBAAwB,CAAC;QACpC,aAAa,EAAE,wBAAwB,CAAC;QACxC,mBAAmB,EAAE,wBAAwB,CAAC;QAC9C,cAAc,EAAE,wBAAwB,CAAC;KAC1C,CAAC;IACF,SAAS,EAAE;QACT,OAAO,EAAE,wBAAwB,CAAC;QAClC,MAAM,EAAE,wBAAwB,CAAC;QACjC,YAAY,EAAE,wBAAwB,CAAC;QACvC,kBAAkB,EAAE,wBAAwB,CAAC;KAC9C,CAAC;IACF,QAAQ,EAAE;QACR,MAAM,EAAE,OAAO,CAAC;QAChB,kBAAkB,EAAE,OAAO,CAAC;QAC5B,kBAAkB,EAAE,OAAO,CAAC;KAC7B,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,QAAQ,GAAG,WAAW,GAAG,SAAS,CAAC;IACzC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,wBAAwB,CAAC;IACpC,cAAc,EAAE,wBAAwB,CAAC;IACzC,kBAAkB,EAAE,OAAO,CAAC;IAC5B,YAAY,EAAE,KAAK,CAAC;CACrB,CAAC;AAIF,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,OAAO,GACX,gBAAgB,GAAG,SAAS,CA0D9B;AAED,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,gBAAgB,GAAG,SAAS,GACjC,OAAO,CAMT"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-native-nitro-storage",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "0.5.1",
|
|
4
|
+
"description": "Synchronous React Native storage powered by Nitro Modules and JSI: typed Memory, Disk, Keychain/Android Keystore secure storage, biometric auth, MMKV migration, Expo, Zustand/Jotai persistence, and web IndexedDB support.",
|
|
5
5
|
"main": "lib/commonjs/index.js",
|
|
6
6
|
"module": "lib/module/index.js",
|
|
7
7
|
"types": "lib/typescript/index.d.ts",
|
|
@@ -30,9 +30,11 @@
|
|
|
30
30
|
"cpp",
|
|
31
31
|
"android",
|
|
32
32
|
"ios",
|
|
33
|
+
"docs",
|
|
33
34
|
"nitrogen",
|
|
34
35
|
"nitro.json",
|
|
35
36
|
"*.podspec",
|
|
37
|
+
"SECURITY.md",
|
|
36
38
|
"app.plugin.js",
|
|
37
39
|
"!**/__tests__",
|
|
38
40
|
"!**/__fixtures__",
|
|
@@ -48,35 +50,47 @@
|
|
|
48
50
|
"clean": "rimraf lib nitrogen/generated",
|
|
49
51
|
"codegen": "nitrogen --logLevel=\"debug\"",
|
|
50
52
|
"lint": "bunx eslint src --max-warnings=0 --fix",
|
|
51
|
-
"format": "bunx prettier --write \"src/**/*.{ts,tsx}\" \"../../README.md\"",
|
|
52
|
-
"format:check": "bunx prettier --check \"src/**/*.{ts,tsx}\" \"../../README.md\"",
|
|
53
|
+
"format": "bunx prettier --write \"src/**/*.{ts,tsx}\" \"../../README.md\" \"../../CHANGELOG.md\" \"../../SECURITY.md\" \"../../docs/**/*.md\"",
|
|
54
|
+
"format:check": "bunx prettier --check \"src/**/*.{ts,tsx}\" \"../../README.md\" \"../../CHANGELOG.md\" \"../../SECURITY.md\" \"../../docs/**/*.md\"",
|
|
53
55
|
"typecheck": "tsc --noEmit",
|
|
54
56
|
"test:types": "tsc --noEmit -p tsconfig.types.json",
|
|
55
57
|
"test": "jest",
|
|
56
58
|
"test:coverage": "jest --coverage",
|
|
57
59
|
"benchmark": "node scripts/benchmark-check.js",
|
|
58
60
|
"test:cpp": "node scripts/test-cpp.js",
|
|
61
|
+
"test:cpp:coverage": "node scripts/test-cpp.js --coverage",
|
|
59
62
|
"check:pack": "node scripts/check-pack-contents.js",
|
|
60
63
|
"prepublishOnly": "bun run clean && bun run codegen && bun run build && bun run test:types && bun run benchmark",
|
|
61
|
-
"prepack": "node -
|
|
62
|
-
"postpack": "node -
|
|
64
|
+
"prepack": "node scripts/sync-package-docs.js prepare",
|
|
65
|
+
"postpack": "node scripts/sync-package-docs.js cleanup"
|
|
63
66
|
},
|
|
64
67
|
"keywords": [
|
|
65
68
|
"react-native",
|
|
69
|
+
"react-native-storage",
|
|
70
|
+
"react-native-secure-storage",
|
|
66
71
|
"storage",
|
|
72
|
+
"secure-storage",
|
|
73
|
+
"encrypted-storage",
|
|
74
|
+
"biometric-storage",
|
|
75
|
+
"biometrics",
|
|
76
|
+
"ios-keychain",
|
|
77
|
+
"android-keystore",
|
|
67
78
|
"nitro",
|
|
79
|
+
"nitro-modules",
|
|
68
80
|
"jsi",
|
|
81
|
+
"synchronous-storage",
|
|
69
82
|
"synchronous",
|
|
70
83
|
"state-management",
|
|
84
|
+
"react-native-mmkv",
|
|
71
85
|
"mmkv",
|
|
72
86
|
"async-storage",
|
|
87
|
+
"expo-secure-store",
|
|
73
88
|
"secure-store",
|
|
74
89
|
"keychain",
|
|
75
90
|
"persistence",
|
|
76
91
|
"zustand",
|
|
77
92
|
"jotai",
|
|
78
|
-
"
|
|
79
|
-
"react-native-storage",
|
|
93
|
+
"indexeddb",
|
|
80
94
|
"native-module",
|
|
81
95
|
"performance",
|
|
82
96
|
"fast-storage"
|
|
@@ -95,8 +109,8 @@
|
|
|
95
109
|
"registry": "https://registry.npmjs.org/"
|
|
96
110
|
},
|
|
97
111
|
"devDependencies": {
|
|
98
|
-
"@expo/config-plugins": "^55.0.
|
|
99
|
-
"@react-native/babel-preset": "^0.83.
|
|
112
|
+
"@expo/config-plugins": "^55.0.8",
|
|
113
|
+
"@react-native/babel-preset": "^0.83.6",
|
|
100
114
|
"@testing-library/react-hooks": "^8.0.1",
|
|
101
115
|
"@testing-library/react-native": "^13.3.3",
|
|
102
116
|
"@types/react": "~19.2.0",
|
|
@@ -105,7 +119,7 @@
|
|
|
105
119
|
"peerDependencies": {
|
|
106
120
|
"react": ">=18.2.0",
|
|
107
121
|
"react-native": ">=0.75.0",
|
|
108
|
-
"react-native-nitro-modules": ">=0.35.
|
|
122
|
+
"react-native-nitro-modules": ">=0.35.5"
|
|
109
123
|
},
|
|
110
124
|
"react-native-builder-bob": {
|
|
111
125
|
"source": "src",
|