react-native-nitro-storage 0.5.6 → 0.5.8

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.
@@ -0,0 +1,96 @@
1
+ import { StorageScope, AccessControl, BiometricLevel } from "./Storage.types";
2
+ import type { StorageChangeOperation, StorageChangeSource, StorageKeyChangeEvent } from "./storage-events";
3
+ export type Validator<T> = (value: unknown) => value is T;
4
+ export type ExpirationConfig = {
5
+ ttlMs: number;
6
+ };
7
+ export type StorageVersion = string;
8
+ export type VersionedValue<T> = {
9
+ value: T;
10
+ version: StorageVersion;
11
+ };
12
+ export type StorageMetricsEvent = {
13
+ operation: string;
14
+ scope: StorageScope;
15
+ durationMs: number;
16
+ keysCount: number;
17
+ };
18
+ export type StorageMetricsObserver = (event: StorageMetricsEvent) => void;
19
+ export type StorageEventObserverOptions = {
20
+ redactSecureValues?: boolean;
21
+ };
22
+ export type StorageExportOptions = {
23
+ includeSecureValues?: boolean;
24
+ };
25
+ export type StorageMetricSummary = {
26
+ count: number;
27
+ totalDurationMs: number;
28
+ avgDurationMs: number;
29
+ maxDurationMs: number;
30
+ };
31
+ export type StorageSelectorListener<TSelected> = (value: TSelected, previousValue: TSelected) => void;
32
+ export type StorageSelectorSubscribeOptions<TSelected> = {
33
+ isEqual?: (previousValue: TSelected, nextValue: TSelected) => boolean;
34
+ fireImmediately?: boolean;
35
+ };
36
+ export type MigrationContext = {
37
+ scope: StorageScope;
38
+ getRaw: (key: string) => string | undefined;
39
+ setRaw: (key: string, value: string) => void;
40
+ removeRaw: (key: string) => void;
41
+ };
42
+ export type Migration = (context: MigrationContext) => void;
43
+ export type KeyListenerRegistry = Map<string, Set<() => void>>;
44
+ export type RawBatchPathItem = {
45
+ _hasValidation?: boolean;
46
+ _hasExpiration?: boolean;
47
+ _isBiometric?: boolean;
48
+ _biometricLevel?: BiometricLevel;
49
+ _secureAccessControl?: AccessControl;
50
+ };
51
+ export type RollbackRecord = {
52
+ kind: "memory";
53
+ value: unknown;
54
+ } | {
55
+ kind: "raw";
56
+ value: string | undefined;
57
+ accessControl?: AccessControl;
58
+ } | {
59
+ kind: "biometric";
60
+ value: string | undefined;
61
+ level: BiometricLevel;
62
+ };
63
+ export declare function isUpdater<T>(valueOrFn: T | ((prev: T) => T)): valueOrFn is (prev: T) => T;
64
+ export declare function typedKeys<K extends string, V>(record: Record<K, V>): K[];
65
+ export declare function assertEnumInteger(value: number, min: number, max: number, label: string): void;
66
+ export declare function assertAccessControlLevel(level: number): void;
67
+ export declare function assertBiometricLevel(level: number): void;
68
+ export type NonMemoryScope = StorageScope.Disk | StorageScope.Secure;
69
+ export type PendingDiskWrite = {
70
+ key: string;
71
+ value: string | undefined;
72
+ };
73
+ export type PendingSecureWrite = {
74
+ key: string;
75
+ value: string | undefined;
76
+ accessControl?: AccessControl;
77
+ };
78
+ export declare const runMicrotask: typeof queueMicrotask;
79
+ export declare const now: () => number;
80
+ export declare function notifyKeyListeners(registry: KeyListenerRegistry, key: string): void;
81
+ export declare function notifyAllListeners(registry: KeyListenerRegistry): void;
82
+ export declare function createKeyChange(scope: StorageScope, key: string, oldValue: string | undefined, newValue: string | undefined, operation: StorageChangeOperation, source: StorageChangeSource): StorageKeyChangeEvent;
83
+ export declare const SECURE_EVENT_REDACTED_VALUE = "[secure]";
84
+ export declare function redactSecureKeyChange(event: StorageKeyChangeEvent): StorageKeyChangeEvent;
85
+ export declare function canUseRawBatchPath(item: RawBatchPathItem): boolean;
86
+ export declare function canUseSecureRawBatchPath(item: RawBatchPathItem): boolean;
87
+ export declare function defaultSerialize<T>(value: T): string;
88
+ export declare function defaultDeserialize<T>(value: string): T;
89
+ export type SecureAuthStorageConfig<K extends string = string> = Record<K, {
90
+ ttlMs?: number;
91
+ biometric?: boolean;
92
+ biometricLevel?: BiometricLevel;
93
+ accessControl?: AccessControl;
94
+ }>;
95
+ export declare function isKeychainLockedError(err: unknown): boolean;
96
+ //# sourceMappingURL=shared.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/shared.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,157 @@
1
+ import { type ExpirationConfig, type KeyListenerRegistry, type Migration, type NonMemoryScope, type SecureAuthStorageConfig, type StorageEventObserverOptions, type StorageExportOptions, type StorageMetricSummary, type StorageMetricsObserver, type StorageSelectorListener, type StorageSelectorSubscribeOptions, type StorageVersion, type Validator, type VersionedValue } from "./shared";
2
+ import { StorageScope, AccessControl, BiometricLevel } from "./Storage.types";
3
+ import type { SecureStorageMetadata } from "./storage-runtime";
4
+ import { type StorageChangeOperation, type StorageChangeSource, type StorageEventListener } from "./storage-events";
5
+ import type { StorageSetter } from "./storage-hooks";
6
+ export type TransactionContext = {
7
+ scope: StorageScope;
8
+ getRaw: (key: string) => string | undefined;
9
+ setRaw: (key: string, value: string) => void;
10
+ removeRaw: (key: string) => void;
11
+ getItem: <T>(item: Pick<StorageItem<T>, "scope" | "key" | "get">) => T;
12
+ setItem: <T>(item: Pick<StorageItem<T>, "scope" | "key" | "set">, value: T) => void;
13
+ removeItem: (item: Pick<StorageItem<unknown>, "scope" | "key" | "delete">) => void;
14
+ };
15
+ export type StorageItemConfig<T> = {
16
+ key: string;
17
+ scope: StorageScope;
18
+ defaultValue?: T;
19
+ serialize?: (value: T) => string;
20
+ deserialize?: (value: string) => T;
21
+ validate?: Validator<T>;
22
+ onValidationError?: (invalidValue: unknown) => T;
23
+ expiration?: ExpirationConfig;
24
+ onExpired?: (key: string) => void;
25
+ readCache?: boolean;
26
+ coalesceDiskWrites?: boolean;
27
+ coalesceSecureWrites?: boolean;
28
+ namespace?: string;
29
+ biometric?: boolean;
30
+ biometricLevel?: BiometricLevel;
31
+ accessControl?: AccessControl;
32
+ };
33
+ export type StorageItem<T> = {
34
+ get: () => T;
35
+ getWithVersion: () => VersionedValue<T>;
36
+ set: StorageSetter<T>;
37
+ setIfVersion: (version: StorageVersion, value: T | ((prev: T) => T)) => boolean;
38
+ delete: () => void;
39
+ has: () => boolean;
40
+ subscribe: (callback: () => void) => () => void;
41
+ subscribeSelector: <TSelected>(selector: (value: T) => TSelected, listener: StorageSelectorListener<TSelected>, options?: StorageSelectorSubscribeOptions<TSelected>) => () => void;
42
+ serialize: (value: T) => string;
43
+ deserialize: (value: string) => T;
44
+ scope: StorageScope;
45
+ key: string;
46
+ };
47
+ export type BatchReadItem<T> = Pick<StorageItem<T>, "key" | "scope" | "get" | "deserialize"> & {
48
+ _hasValidation?: boolean;
49
+ _hasExpiration?: boolean;
50
+ _readCacheEnabled?: boolean;
51
+ _isBiometric?: boolean;
52
+ _defaultValue?: unknown;
53
+ _secureAccessControl?: AccessControl;
54
+ };
55
+ export type BatchRemoveItem = Pick<StorageItem<unknown>, "key" | "scope" | "delete">;
56
+ export type BatchValues<TItems extends readonly BatchReadItem<unknown>[]> = {
57
+ [Index in keyof TItems]: TItems[Index] extends BatchReadItem<infer Value> ? Value : never;
58
+ };
59
+ export type StorageBatchSetItem<T> = {
60
+ item: StorageItem<T>;
61
+ value: T;
62
+ };
63
+ export type StorageCoreBackend = {
64
+ get(key: string, scope: StorageScope): string | undefined;
65
+ set(key: string, value: string, scope: StorageScope): void;
66
+ remove(key: string, scope: StorageScope): void;
67
+ clear(scope: StorageScope): void;
68
+ has(key: string, scope: StorageScope): boolean;
69
+ getAllKeys(scope: StorageScope): string[];
70
+ getKeysByPrefix(prefix: string, scope: StorageScope): string[];
71
+ size(scope: StorageScope): number;
72
+ setBatch(keys: string[], values: string[], scope: StorageScope): void;
73
+ getBatch(keys: string[], scope: StorageScope): (string | undefined)[];
74
+ removeBatch(keys: string[], scope: StorageScope): void;
75
+ removeByPrefix(prefix: string, scope: StorageScope): void;
76
+ setSecureAccessControl(level: AccessControl): void;
77
+ getSecureBiometric(key: string): string | undefined;
78
+ setSecureBiometricWithLevel(key: string, value: string, level: BiometricLevel): void;
79
+ deleteSecureBiometric(key: string): void;
80
+ hasSecureBiometric(key: string): boolean;
81
+ clearSecureBiometric(): void;
82
+ };
83
+ export type StorageCoreAdapter = {
84
+ backend: StorageCoreBackend;
85
+ changeSource: StorageChangeSource;
86
+ applyAccessControlOnSecureRawWrite: boolean;
87
+ flushDiskWritesOnImport: boolean;
88
+ ensureScopeSubscription(scope: NonMemoryScope): void;
89
+ maybeCleanupScopeSubscription(scope: NonMemoryScope): void;
90
+ onWillEmitChanges(scope: StorageScope, keys: readonly string[], operation: StorageChangeOperation, source: StorageChangeSource): void;
91
+ getSecureMetadataProfile(): Pick<SecureStorageMetadata, "backend" | "encrypted" | "hardwareBacked">;
92
+ };
93
+ export type StorageCoreInternals = {
94
+ getScopedListeners(scope: NonMemoryScope): KeyListenerRegistry;
95
+ cacheRawValue(scope: NonMemoryScope, key: string, value: string | undefined): void;
96
+ readCachedRawValue(scope: NonMemoryScope, key: string): string | undefined;
97
+ clearScopeRawCache(scope: NonMemoryScope): void;
98
+ clearPendingDiskWrite(key: string): void;
99
+ clearPendingSecureWrite(key: string): void;
100
+ clearAllPendingDiskWrites(): void;
101
+ clearAllPendingSecureWrites(): void;
102
+ flushDiskWrites(): void;
103
+ flushSecureWrites(): void;
104
+ emitKeyChange(scope: StorageScope, key: string, oldValue: string | undefined, newValue: string | undefined, operation: StorageChangeOperation, source: StorageChangeSource): void;
105
+ hasEventObserver(): boolean;
106
+ hasScopeEventListeners(scope: StorageScope): boolean;
107
+ measureOperation<T>(operation: string, scope: StorageScope, fn: () => T, keysCount?: number): T;
108
+ recordMetric(operation: string, scope: StorageScope, durationMs: number, keysCount?: number): void;
109
+ getSecureDefaultAccessControl(): AccessControl;
110
+ setSecureDefaultAccessControl(level: AccessControl): void;
111
+ };
112
+ export declare function createStorageCore(buildAdapter: (internals: StorageCoreInternals) => StorageCoreAdapter): {
113
+ storage: {
114
+ subscribe: (scope: StorageScope, listener: StorageEventListener) => (() => void);
115
+ subscribeKey: (scope: StorageScope, key: string, listener: StorageEventListener) => (() => void);
116
+ subscribePrefix: (scope: StorageScope, prefix: string, listener: StorageEventListener) => (() => void);
117
+ subscribeNamespace: (namespace: string, scope: StorageScope, listener: StorageEventListener) => (() => void);
118
+ setEventObserver: (observer?: StorageEventListener, options?: StorageEventObserverOptions) => void;
119
+ clear: (scope: StorageScope) => void;
120
+ clearAll: () => void;
121
+ clearNamespace: (namespace: string, scope: StorageScope) => void;
122
+ clearBiometric: () => void;
123
+ has: (key: string, scope: StorageScope) => boolean;
124
+ getAllKeys: (scope: StorageScope) => string[];
125
+ getKeysByPrefix: (prefix: string, scope: StorageScope) => string[];
126
+ getByPrefix: (prefix: string, scope: StorageScope) => Record<string, string>;
127
+ getAll: (scope: StorageScope) => Record<string, string>;
128
+ export: (scope: StorageScope, options?: StorageExportOptions) => Record<string, string>;
129
+ exportSecureUnsafe: () => Record<string, string>;
130
+ size: (scope: StorageScope) => number;
131
+ setDiskWritesAsync: (enabled: boolean) => void;
132
+ flushDiskWrites: () => void;
133
+ flushSecureWrites: () => void;
134
+ setMetricsObserver: (observer?: StorageMetricsObserver) => void;
135
+ getMetricsSnapshot: () => Record<string, StorageMetricSummary>;
136
+ resetMetrics: () => void;
137
+ getSecureMetadata: (key: string) => SecureStorageMetadata;
138
+ getAllSecureMetadata: () => SecureStorageMetadata[];
139
+ getString: (key: string, scope: StorageScope) => string | undefined;
140
+ setString: (key: string, value: string, scope: StorageScope) => void;
141
+ deleteString: (key: string, scope: StorageScope) => void;
142
+ import: (data: Record<string, string>, scope: StorageScope) => void;
143
+ };
144
+ createStorageItem: <T = undefined>(config: StorageItemConfig<T>) => StorageItem<T>;
145
+ getBatch: <const TItems extends readonly BatchReadItem<unknown>[]>(items: TItems, scope: StorageScope) => BatchValues<TItems>;
146
+ setBatch: <T>(items: readonly StorageBatchSetItem<T>[], scope: StorageScope) => void;
147
+ removeBatch: (items: readonly BatchRemoveItem[], scope: StorageScope) => void;
148
+ registerMigration: (version: number, migration: Migration) => void;
149
+ migrateToLatest: (scope?: StorageScope) => number;
150
+ runTransaction: <T>(scope: StorageScope, transaction: (context: TransactionContext) => T) => T;
151
+ createSecureAuthStorage: <K extends string>(config: SecureAuthStorageConfig<K>, options?: {
152
+ namespace?: string;
153
+ }) => Record<K, StorageItem<string>>;
154
+ internals: StorageCoreInternals;
155
+ };
156
+ export type StorageCore = ReturnType<typeof createStorageCore>;
157
+ //# sourceMappingURL=storage-core.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage-core.d.ts","sourceRoot":"","sources":["../../src/storage-core.ts"],"names":[],"mappings":"AAAA,OAAO,EAeL,KAAK,gBAAgB,EACrB,KAAK,mBAAmB,EACxB,KAAK,SAAS,EAEd,KAAK,cAAc,EAInB,KAAK,uBAAuB,EAC5B,KAAK,2BAA2B,EAChC,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,EACzB,KAAK,sBAAsB,EAC3B,KAAK,uBAAuB,EAC5B,KAAK,+BAA+B,EACpC,KAAK,cAAc,EACnB,KAAK,SAAS,EACd,KAAK,cAAc,EACpB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAW9E,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EAIL,KAAK,sBAAsB,EAC3B,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EAE1B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAErD,MAAM,MAAM,kBAAkB,GAAG;IAC/B,KAAK,EAAE,YAAY,CAAC;IACpB,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;IAC5C,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7C,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,OAAO,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,OAAO,GAAG,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;IACvE,OAAO,EAAE,CAAC,CAAC,EACT,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,OAAO,GAAG,KAAK,GAAG,KAAK,CAAC,EACnD,KAAK,EAAE,CAAC,KACL,IAAI,CAAC;IACV,UAAU,EAAE,CACV,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,KAAK,GAAG,QAAQ,CAAC,KACzD,IAAI,CAAC;CACX,CAAC;AAEF,MAAM,MAAM,iBAAiB,CAAC,CAAC,IAAI;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,YAAY,CAAC;IACpB,YAAY,CAAC,EAAE,CAAC,CAAC;IACjB,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,MAAM,CAAC;IACjC,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,CAAC,CAAC;IACnC,QAAQ,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;IACxB,iBAAiB,CAAC,EAAE,CAAC,YAAY,EAAE,OAAO,KAAK,CAAC,CAAC;IACjD,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,aAAa,CAAC,EAAE,aAAa,CAAC;CAC/B,CAAC;AAEF,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI;IAC3B,GAAG,EAAE,MAAM,CAAC,CAAC;IACb,cAAc,EAAE,MAAM,cAAc,CAAC,CAAC,CAAC,CAAC;IACxC,GAAG,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;IACtB,YAAY,EAAE,CACZ,OAAO,EAAE,cAAc,EACvB,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KACxB,OAAO,CAAC;IACb,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,GAAG,EAAE,MAAM,OAAO,CAAC;IACnB,SAAS,EAAE,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,MAAM,IAAI,CAAC;IAChD,iBAAiB,EAAE,CAAC,SAAS,EAC3B,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,SAAS,EACjC,QAAQ,EAAE,uBAAuB,CAAC,SAAS,CAAC,EAC5C,OAAO,CAAC,EAAE,+BAA+B,CAAC,SAAS,CAAC,KACjD,MAAM,IAAI,CAAC;IAChB,SAAS,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,MAAM,CAAC;IAChC,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,CAAC,CAAC;IAClC,KAAK,EAAE,YAAY,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC;CACb,CAAC;AAcF,MAAM,MAAM,aAAa,CAAC,CAAC,IAAI,IAAI,CACjC,WAAW,CAAC,CAAC,CAAC,EACd,KAAK,GAAG,OAAO,GAAG,KAAK,GAAG,aAAa,CACxC,GAAG;IACF,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,oBAAoB,CAAC,EAAE,aAAa,CAAC;CACtC,CAAC;AACF,MAAM,MAAM,eAAe,GAAG,IAAI,CAChC,WAAW,CAAC,OAAO,CAAC,EACpB,KAAK,GAAG,OAAO,GAAG,QAAQ,CAC3B,CAAC;AACF,MAAM,MAAM,WAAW,CAAC,MAAM,SAAS,SAAS,aAAa,CAAC,OAAO,CAAC,EAAE,IAAI;KACzE,KAAK,IAAI,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,aAAa,CAAC,MAAM,KAAK,CAAC,GACrE,KAAK,GACL,KAAK;CACV,CAAC;AAEF,MAAM,MAAM,mBAAmB,CAAC,CAAC,IAAI;IACnC,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;IACrB,KAAK,EAAE,CAAC,CAAC;CACV,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,GAAG,MAAM,GAAG,SAAS,CAAC;IAC1D,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,GAAG,IAAI,CAAC;IAC3D,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,GAAG,IAAI,CAAC;IAC/C,KAAK,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAAC;IACjC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC;IAC/C,UAAU,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,EAAE,CAAC;IAC1C,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,GAAG,MAAM,EAAE,CAAC;IAC/D,IAAI,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,CAAC;IAClC,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,YAAY,GAAG,IAAI,CAAC;IACtE,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,YAAY,GAAG,CAAC,MAAM,GAAG,SAAS,CAAC,EAAE,CAAC;IACtE,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,YAAY,GAAG,IAAI,CAAC;IACvD,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,GAAG,IAAI,CAAC;IAC1D,sBAAsB,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAAC;IACnD,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IACpD,2BAA2B,CACzB,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,cAAc,GACpB,IAAI,CAAC;IACR,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACzC,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IACzC,oBAAoB,IAAI,IAAI,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,OAAO,EAAE,kBAAkB,CAAC;IAC5B,YAAY,EAAE,mBAAmB,CAAC;IAClC,kCAAkC,EAAE,OAAO,CAAC;IAC5C,uBAAuB,EAAE,OAAO,CAAC;IACjC,uBAAuB,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI,CAAC;IACrD,6BAA6B,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI,CAAC;IAC3D,iBAAiB,CACf,KAAK,EAAE,YAAY,EACnB,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,SAAS,EAAE,sBAAsB,EACjC,MAAM,EAAE,mBAAmB,GAC1B,IAAI,CAAC;IACR,wBAAwB,IAAI,IAAI,CAC9B,qBAAqB,EACrB,SAAS,GAAG,WAAW,GAAG,gBAAgB,CAC3C,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,kBAAkB,CAAC,KAAK,EAAE,cAAc,GAAG,mBAAmB,CAAC;IAC/D,aAAa,CACX,KAAK,EAAE,cAAc,EACrB,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,GAAG,SAAS,GACxB,IAAI,CAAC;IACR,kBAAkB,CAAC,KAAK,EAAE,cAAc,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IAC3E,kBAAkB,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI,CAAC;IAChD,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACzC,uBAAuB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3C,yBAAyB,IAAI,IAAI,CAAC;IAClC,2BAA2B,IAAI,IAAI,CAAC;IACpC,eAAe,IAAI,IAAI,CAAC;IACxB,iBAAiB,IAAI,IAAI,CAAC;IAC1B,aAAa,CACX,KAAK,EAAE,YAAY,EACnB,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,SAAS,EAAE,sBAAsB,EACjC,MAAM,EAAE,mBAAmB,GAC1B,IAAI,CAAC;IACR,gBAAgB,IAAI,OAAO,CAAC;IAC5B,sBAAsB,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC;IACrD,gBAAgB,CAAC,CAAC,EAChB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,YAAY,EACnB,EAAE,EAAE,MAAM,CAAC,EACX,SAAS,CAAC,EAAE,MAAM,GACjB,CAAC,CAAC;IACL,YAAY,CACV,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,YAAY,EACnB,UAAU,EAAE,MAAM,EAClB,SAAS,CAAC,EAAE,MAAM,GACjB,IAAI,CAAC;IACR,6BAA6B,IAAI,aAAa,CAAC;IAC/C,6BAA6B,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAAC;CAC3D,CAAC;AAMF,wBAAgB,iBAAiB,CAC/B,YAAY,EAAE,CAAC,SAAS,EAAE,oBAAoB,KAAK,kBAAkB;;2BAse1D,YAAY,YACT,oBAAoB,KAC7B,CAAC,MAAM,IAAI,CAAC;8BAaN,YAAY,OACd,MAAM,YACD,oBAAoB,KAC7B,CAAC,MAAM,IAAI,CAAC;iCAaN,YAAY,UACX,MAAM,YACJ,oBAAoB,KAC7B,CAAC,MAAM,IAAI,CAAC;wCAiBF,MAAM,SACV,YAAY,YACT,oBAAoB,KAC7B,CAAC,MAAM,IAAI,CAAC;sCAIF,oBAAoB,YACtB,2BAA2B;uBAYvB,YAAY;;oCAmEC,MAAM,SAAS,YAAY;;mBAgF5C,MAAM,SAAS,YAAY,KAAG,OAAO;4BAe5B,YAAY,KAAG,MAAM,EAAE;kCAejB,MAAM,SAAS,YAAY,KAAG,MAAM,EAAE;8BAkBtD,MAAM,SACP,YAAY,KAClB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;wBAkCT,YAAY,KAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;wBA4B5C,YAAY,YACV,oBAAoB,KAC5B,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;kCAaD,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;sBAOhC,YAAY,KAAG,MAAM;sCAeL,OAAO;;;wCAkBL,sBAAsB;kCAG9B,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC;;iCAgBnC,MAAM,KAAG,qBAAqB;oCA4B7B,qBAAqB,EAAE;yBAYhC,MAAM,SAAS,YAAY,KAAG,MAAM,GAAG,SAAS;yBAKhD,MAAM,SAAS,MAAM,SAAS,YAAY,KAAG,IAAI;4BAK9C,MAAM,SAAS,YAAY,KAAG,IAAI;uBAKvC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,SAAS,YAAY,KAAG,IAAI;;wBAgDxC,CAAC,sBAClB,iBAAiB,CAAC,CAAC,CAAC,KAC3B,WAAW,CAAC,CAAC,CAAC;qBA0jBO,MAAM,SAAS,SAAS,aAAa,CAAC,OAAO,CAAC,EAAE,SAC/D,MAAM,SACN,YAAY,KAClB,WAAW,CAAC,MAAM,CAAC;eA+EJ,CAAC,SACV,SAAS,mBAAmB,CAAC,CAAC,CAAC,EAAE,SACjC,YAAY,KAClB,IAAI;yBAoJE,SAAS,eAAe,EAAE,SAC1B,YAAY,KAClB,IAAI;iCAuD6B,MAAM,aAAa,SAAS,KAAG,IAAI;8BAYvC,YAAY,KAAuB,MAAM;qBAiCjD,CAAC,SAChB,YAAY,eACN,CAAC,OAAO,EAAE,kBAAkB,KAAK,CAAC,KAC9C,CAAC;8BA0J6B,CAAC,SAAS,MAAM,UACvC,uBAAuB,CAAC,CAAC,CAAC,YACxB;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,KAC/B,MAAM,CAAC,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;;EA6ClC;AAED,MAAM,MAAM,WAAW,GAAG,UAAU,CAAC,OAAO,iBAAiB,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-nitro-storage",
3
- "version": "0.5.6",
3
+ "version": "0.5.8",
4
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",
@@ -50,7 +50,8 @@
50
50
  "build": "bob build",
51
51
  "clean": "rimraf lib nitrogen/generated",
52
52
  "codegen": "nitrogen --logLevel=\"debug\"",
53
- "lint": "bunx eslint src --max-warnings=0 --fix",
53
+ "lint": "bunx eslint src --max-warnings=0",
54
+ "lint:fix": "bunx eslint src --max-warnings=0 --fix",
54
55
  "lint:check": "bunx eslint src --max-warnings=0",
55
56
  "format": "bunx prettier --write \"src/**/*.{ts,tsx}\" \"../../README.md\" \"../../CHANGELOG.md\" \"../../SECURITY.md\" \"../../docs/**/*.md\"",
56
57
  "format:check": "bunx prettier --check \"src/**/*.{ts,tsx}\" \"../../README.md\" \"../../CHANGELOG.md\" \"../../SECURITY.md\" \"../../docs/**/*.md\"",
@@ -60,7 +61,10 @@
60
61
  "test:coverage": "jest --coverage",
61
62
  "benchmark": "node scripts/benchmark-check.js",
62
63
  "test:cpp": "node scripts/test-cpp.js",
64
+ "test:cpp:asan": "node scripts/test-cpp.js --sanitize=address",
63
65
  "test:cpp:coverage": "node scripts/test-cpp.js --coverage",
66
+ "test:cpp:tsan": "node scripts/test-cpp.js --sanitize=thread",
67
+ "test:cpp:ubsan": "node scripts/test-cpp.js --sanitize=undefined",
64
68
  "check:pack": "node scripts/check-pack-contents.js",
65
69
  "prepublishOnly": "bun run clean && bun run codegen && bun run build && bun run test:types && bun run benchmark",
66
70
  "prepack": "node scripts/sync-package-docs.js prepare",
@@ -111,7 +115,7 @@
111
115
  "registry": "https://registry.npmjs.org/"
112
116
  },
113
117
  "devDependencies": {
114
- "@expo/config-plugins": "^56.0.7",
118
+ "@expo/config-plugins": "^56.0.8",
115
119
  "@react-native/babel-preset": "^0.85.3",
116
120
  "@testing-library/react-hooks": "^8.0.1",
117
121
  "@testing-library/react-native": "^13.3.3",
@@ -17,6 +17,10 @@ Pod::Spec.new do |s|
17
17
  "ios/**/*.{h,m,mm,swift}",
18
18
  "cpp/**/*.{h,hpp,c,cpp}"
19
19
  ]
20
+ s.exclude_files = [
21
+ "cpp/**/*Test.cpp",
22
+ "cpp/build/**"
23
+ ]
20
24
 
21
25
  s.pod_target_xcconfig = {
22
26
  "CLANG_CXX_LANGUAGE_STANDARD" => "c++20",