{"id":16213598,"url":"https://github.com/pinqy520/mobx-persist","last_synced_at":"2025-05-16T01:05:32.624Z","repository":{"id":43041052,"uuid":"68986269","full_name":"pinqy520/mobx-persist","owner":"pinqy520","description":"persist mobx stores","archived":false,"fork":false,"pushed_at":"2020-12-19T20:29:14.000Z","size":224,"stargazers_count":560,"open_issues_count":46,"forks_count":62,"subscribers_count":10,"default_branch":"master","last_synced_at":"2025-05-09T02:11:18.834Z","etag":null,"topics":["mobx","persist","persistence","react","react-native"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pinqy520.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2016-09-23T03:43:25.000Z","updated_at":"2024-10-23T13:48:10.000Z","dependencies_parsed_at":"2022-09-09T17:01:31.882Z","dependency_job_id":null,"html_url":"https://github.com/pinqy520/mobx-persist","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pinqy520%2Fmobx-persist","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pinqy520%2Fmobx-persist/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pinqy520%2Fmobx-persist/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pinqy520%2Fmobx-persist/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pinqy520","download_url":"https://codeload.github.com/pinqy520/mobx-persist/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253481049,"owners_count":21915259,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["mobx","persist","persistence","react","react-native"],"created_at":"2024-10-10T11:06:40.444Z","updated_at":"2025-05-16T01:05:27.614Z","avatar_url":"https://github.com/pinqy520.png","language":"TypeScript","funding_links":[],"categories":["Awesome MobX"],"sub_categories":["Related projects and utilities"],"readme":"# Mobx Persist\n\n[![npm version](https://badge.fury.io/js/mobx-persist.svg)](https://badge.fury.io/js/mobx-persist)\n\n```\n$ npm install mobx-persist --save\n```\n\n## Usage\n\n``` typescript\nimport { observable } from 'mobx'\nimport { create, persist } from 'mobx-persist'\n\nclass SomeItem {\n    @persist @observable  name = 'some'\n    @persist @observable count = 0\n}\n\nclass SomeStore {\n    @persist('object') @observable         obj = { a: 1, b: 2 }\n    @persist('map')    @observable   stringMap = observable.map\u003cstring\u003e({})\n    @persist('list')   @observable     numList = [1,2,3,4]\n    @persist('object', SomeItem) @observable s = new SomeItem\n    @persist('map', SomeItem)    @observable m = observable.map\u003cSomeItem\u003e({})\n    @persist('list', SomeItem)   @observable l = []\n}\n\nconst hydrate = create({\n    storage: localForage,   // or AsyncStorage in react-native.\n                            // default: localStorage\n    jsonify: false  // if you use AsyncStorage, here shoud be true\n                    // default: true\n})\n\n// create the state\nexport const someStore = new SomeStore()\nhydrate('some', someStore).then(() =\u003e console.log('someStore has been hydrated'))\n\n```\n\nwithout decorators\n\n``` typescript\nconst data = observable({\n    title: 'no decorator',\n    someObject: {\n        a: 1,\n        b: 'b',\n    },\n    someArray: [{\n        c: 1,\n        d: 'd'\n    }]\n})\nconst schema = {\n    title: true,\n    someObject: {\n        type: 'object',\n        schema: {\n            a: true,\n            b: true\n        }\n    },\n    someArray: {\n        type: 'list',\n        schema: {\n            c: true,\n            d: true\n        }\n    }\n}\nexport const someStore = persist(schema)(data)\nhydrate('some', someStore).then(() =\u003e console.log('someStore has been hydrated'))\n```\n\nwith initial state\n\n``` typescript\nconst initialState = window.__STATE__.some || {\n    obj: { a: 2, b: 1 }\n}\nexport const someStore = new SomeStore()\n\nhydrate('some', someStore, initialState)\n    .then(() =\u003e console.log('some hydrated'))\n```\n\nre-hydration\n\n``` typescript\nconst result = hydrate('some', someStore, initialState)\nconst rehydrate = result.rehydrate\nresult.then(() =\u003e console.log('some hydrated'))\n\nsetTimeout(() =\u003e {\n    rehydrate().then(() =\u003e console.log('rehydrated'))\n}, 3000)\n```\n\n## API\n\n#### `persist(schema)(object)`\n  - arguments\n    - **schema** *string/object* Describes the type of data you are planning to persist. Not needed for JS primitive types. Options: `'object' | 'list' | 'map'` or a structured schema object.\n    - **observable** *any* The observable that you are persisting.\n  - returns a persistence-enabled version of **observable**\n\n#### `create(config)`\n  - arguments\n    - **config** *object* Describes the storage container you want your data to reside in.\n      - **storage** *[localForage](https://github.com/localForage/localForage)/AsyncStorage/localStorage* [localForage](https://github.com/localForage/localForage)-style storage API. localStorage for Web (default), AsyncStorage for React Native\n      - **jsonify** *bool* Enables serialization as JSON\n      - **debounce** *number* Debounce interval applied to storage calls (in miliseconds, default 0).\n  - returns\n    - **hydrate** *function* `hydrate(key, store, initialState?, customArgs?)`\n      - **key** *string* The key of your datastore that you want to hydrate from your persisted record.\n      - **store** *object* The store in which that key resides.\n      - **initialState** *object* Optional initial state the store is seeded with.\n      - **customArgs** *object* Optional custom arguments that are available during the deserialization process which can be used to pass in e.g. stores to model constructors during deserialization. See https://github.com/mobxjs/serializr#6-use-custom-arguments-to-inject-stores-to-models\n      - returns *IHydrateResult*\n\n#### interface `IHydrateResult`\n  extends `Promise`\n  - methods\n    - **rehydrate** *function*\n      - returns *IHydrateResult*\n\n## Examples\n\n- [Web](https://github.com/pinqy520/mobx-persist/tree/master/dev)\n- [React Native](https://github.com/pinqy520/mobx-persist/tree/master/examples/rn)\n\n\n## Dependency\n\n- [Serializr](https://github.com/mobxjs/serializr)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpinqy520%2Fmobx-persist","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpinqy520%2Fmobx-persist","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpinqy520%2Fmobx-persist/lists"}