Onde Seu Dados Está Armazenado
A camada inteira de armazenamento do aplicativo é esta interface:
// packages/common/src/storage/types.ts
export interface IStorage {
getItem(key: string): Promise<string | null>;
setItem(key: string, value: string): Promise<void>;
removeItem(key: string): Promise<void>;
}Três métodos, chaves de strings para entrada e saída. Essa é toda a superfície que o aplicativo tem para persistir algo.
Cada plataforma fornece sua própria implementação. No móvel, ela envolve AsyncStorage, que é o armazenamento padrão chave-valor no dispositivo para React Native:
// packages/common/src/storage/async-storage.ts
export class AsyncStorageAdapter implements IStorage {
getItem(key: string): Promise<string | null> {
return AsyncStorage.getItem(key);
}
setItem(key: string, value: string): Promise<void> {
return AsyncStorage.setItem(key, value);
}
removeItem(key: string): Promise<void> {
return AsyncStorage.removeItem(key);
}
}No navegador, a mesma interface é respaldada pelo armazenamento local. A camada de dados acima não sabe nem se importa com qual um recebeu.
Sobressaindo-se está uma fábrica de provedores que decide de onde os dados vêm, e a parte interessante é o ramo que não funciona:
// packages/common/src/providers/factory.ts
switch (config.type) {
case 'mock':
return new MockDataProvider();
case 'local':
return new LocalStorageProvider();
case 'api':
throw new Error('ApiProvider not implemented yet');
// ...
}O caso api é um buraco rotulado. Alguém lendo o código pode ver exatamente onde um provedor baseado em servidor se encaixaria, e também pode ver que nada preenche isso hoje. O aplicativo é lançado com local e essa é a única rota por qual um usuário viaja.
Então quando digo que seus dados estão no seu dispositivo, estou descrevendo uma arquitetura sem alternativas conectadas, não uma política que prometo cumprir.

