synapse-storage 2.1.0
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 +1038 -0
- package/dist/_examples/_example5.d.ts +1 -0
- package/dist/_examples/_example5.d.ts.map +1 -0
- package/dist/_examples/_example5.js +184 -0
- package/dist/_examples/_example5.js.map +1 -0
- package/dist/_examples/_example6.d.ts +1 -0
- package/dist/_examples/_example6.d.ts.map +1 -0
- package/dist/_examples/_example6.js +168 -0
- package/dist/_examples/_example6.js.map +1 -0
- package/dist/_examples/example1.d.ts +1 -0
- package/dist/_examples/example1.d.ts.map +1 -0
- package/dist/_examples/example1.js +240 -0
- package/dist/_examples/example1.js.map +1 -0
- package/dist/_examples/example2.d.ts +1 -0
- package/dist/_examples/example2.d.ts.map +1 -0
- package/dist/_examples/example2.js +81 -0
- package/dist/_examples/example2.js.map +1 -0
- package/dist/_examples/example3.d.ts +1 -0
- package/dist/_examples/example3.d.ts.map +1 -0
- package/dist/_examples/example3.js +99 -0
- package/dist/_examples/example3.js.map +1 -0
- package/dist/_examples/example4.d.ts +1 -0
- package/dist/_examples/example4.d.ts.map +1 -0
- package/dist/_examples/example4.js +172 -0
- package/dist/_examples/example4.js.map +1 -0
- package/dist/_examples/example5.d.ts +1 -0
- package/dist/_examples/example5.d.ts.map +1 -0
- package/dist/_examples/example5.js +184 -0
- package/dist/_examples/example5.js.map +1 -0
- package/dist/_examples/example6.d.ts +1 -0
- package/dist/_examples/example6.d.ts.map +1 -0
- package/dist/_examples/example6.js +168 -0
- package/dist/_examples/example6.js.map +1 -0
- package/dist/_examples/plugins.d.ts +1 -0
- package/dist/_examples/plugins.d.ts.map +1 -0
- package/dist/_examples/plugins.js +176 -0
- package/dist/_examples/plugins.js.map +1 -0
- package/dist/_examples/pokemons/PokemonList.d.ts +5 -0
- package/dist/_examples/pokemons/PokemonList.d.ts.map +1 -0
- package/dist/_examples/pokemons/PokemonList.js +166 -0
- package/dist/_examples/pokemons/PokemonList.js.map +1 -0
- package/dist/_examples/pokemons/api.d.ts +8 -0
- package/dist/_examples/pokemons/api.d.ts.map +1 -0
- package/dist/_examples/pokemons/api.js +45 -0
- package/dist/_examples/pokemons/api.js.map +1 -0
- package/dist/_examples/pokemons/app.config.d.ts +15 -0
- package/dist/_examples/pokemons/app.config.d.ts.map +1 -0
- package/dist/_examples/pokemons/app.config.js +15 -0
- package/dist/_examples/pokemons/app.config.js.map +1 -0
- package/dist/_examples/pokemons/dispatchers/pokemon.dispatcher.d.ts +9 -0
- package/dist/_examples/pokemons/dispatchers/pokemon.dispatcher.d.ts.map +1 -0
- package/dist/_examples/pokemons/dispatchers/pokemon.dispatcher.js +122 -0
- package/dist/_examples/pokemons/dispatchers/pokemon.dispatcher.js.map +1 -0
- package/dist/_examples/pokemons/effects/pokemon.effects.d.ts +16 -0
- package/dist/_examples/pokemons/effects/pokemon.effects.d.ts.map +1 -0
- package/dist/_examples/pokemons/effects/pokemon.effects.js +39 -0
- package/dist/_examples/pokemons/effects/pokemon.effects.js.map +1 -0
- package/dist/_examples/pokemons/middlewares/pokenon.middlewares.d.ts +4 -0
- package/dist/_examples/pokemons/middlewares/pokenon.middlewares.d.ts.map +1 -0
- package/dist/_examples/pokemons/middlewares/pokenon.middlewares.js +27 -0
- package/dist/_examples/pokemons/middlewares/pokenon.middlewares.js.map +1 -0
- package/dist/_examples/pokemons/pokemon.dispatcher.d.ts +9 -0
- package/dist/_examples/pokemons/pokemon.dispatcher.d.ts.map +1 -0
- package/dist/_examples/pokemons/pokemon.dispatcher.js +122 -0
- package/dist/_examples/pokemons/pokemon.dispatcher.js.map +1 -0
- package/dist/_examples/pokemons/pokemon.effects.d.ts +5 -0
- package/dist/_examples/pokemons/pokemon.effects.d.ts.map +1 -0
- package/dist/_examples/pokemons/pokemon.effects.js +39 -0
- package/dist/_examples/pokemons/pokemon.effects.js.map +1 -0
- package/dist/_examples/pokemons/pokemon.selectors.d.ts +5 -0
- package/dist/_examples/pokemons/pokemon.selectors.d.ts.map +1 -0
- package/dist/_examples/pokemons/pokemon.selectors.js +10 -0
- package/dist/_examples/pokemons/pokemon.selectors.js.map +1 -0
- package/dist/_examples/pokemons/pokemon.storage.d.ts +3 -0
- package/dist/_examples/pokemons/pokemon.storage.d.ts.map +1 -0
- package/dist/_examples/pokemons/pokemon.storage.js +14 -0
- package/dist/_examples/pokemons/pokemon.storage.js.map +1 -0
- package/dist/_examples/pokemons/pokemon1.selectors.d.ts +5 -0
- package/dist/_examples/pokemons/pokemon1.selectors.d.ts.map +1 -0
- package/dist/_examples/pokemons/pokemon1.selectors.js +8 -0
- package/dist/_examples/pokemons/pokemon1.selectors.js.map +1 -0
- package/dist/_examples/pokemons/pokenon.middlewares.d.ts +4 -0
- package/dist/_examples/pokemons/pokenon.middlewares.d.ts.map +1 -0
- package/dist/_examples/pokemons/pokenon.middlewares.js +27 -0
- package/dist/_examples/pokemons/pokenon.middlewares.js.map +1 -0
- package/dist/_examples/pokemons/selectors/pokemon.selectors.d.ts +5 -0
- package/dist/_examples/pokemons/selectors/pokemon.selectors.d.ts.map +1 -0
- package/dist/_examples/pokemons/selectors/pokemon.selectors.js +10 -0
- package/dist/_examples/pokemons/selectors/pokemon.selectors.js.map +1 -0
- package/dist/_examples/pokemons/selectors/pokemon1.selectors.d.ts +5 -0
- package/dist/_examples/pokemons/selectors/pokemon1.selectors.d.ts.map +1 -0
- package/dist/_examples/pokemons/selectors/pokemon1.selectors.js +8 -0
- package/dist/_examples/pokemons/selectors/pokemon1.selectors.js.map +1 -0
- package/dist/_examples/pokemons/storages/pokemon.storage.d.ts +3 -0
- package/dist/_examples/pokemons/storages/pokemon.storage.d.ts.map +1 -0
- package/dist/_examples/pokemons/storages/pokemon.storage.js +14 -0
- package/dist/_examples/pokemons/storages/pokemon.storage.js.map +1 -0
- package/dist/_examples/pokemons/store.d.ts +1 -0
- package/dist/_examples/pokemons/store.d.ts.map +1 -0
- package/dist/_examples/pokemons/store.js +2 -0
- package/dist/_examples/pokemons/store.js.map +1 -0
- package/dist/_examples/pokemons/store1.d.ts +23 -0
- package/dist/_examples/pokemons/store1.d.ts.map +1 -0
- package/dist/_examples/pokemons/store1.js +35 -0
- package/dist/_examples/pokemons/store1.js.map +1 -0
- package/dist/_examples/pokemons/store2.d.ts +23 -0
- package/dist/_examples/pokemons/store2.d.ts.map +1 -0
- package/dist/_examples/pokemons/store2.js +34 -0
- package/dist/_examples/pokemons/store2.js.map +1 -0
- package/dist/_examples/pokemons/types.d.ts +26 -0
- package/dist/_examples/pokemons/types.d.ts.map +1 -0
- package/dist/_examples/pokemons/types.js +2 -0
- package/dist/_examples/pokemons/types.js.map +1 -0
- package/dist/_utils/chunk.util.d.ts +8 -0
- package/dist/_utils/chunk.util.d.ts.map +1 -0
- package/dist/_utils/chunk.util.js +21 -0
- package/dist/_utils/chunk.util.js.map +1 -0
- package/dist/_utils/deepMerge.util.d.ts +2 -0
- package/dist/_utils/deepMerge.util.d.ts.map +1 -0
- package/dist/_utils/deepMerge.util.js +16 -0
- package/dist/_utils/deepMerge.util.js.map +1 -0
- package/dist/_utils/flatMap.util.d.ts +10 -0
- package/dist/_utils/flatMap.util.d.ts.map +1 -0
- package/dist/_utils/flatMap.util.js +23 -0
- package/dist/_utils/flatMap.util.js.map +1 -0
- package/dist/_utils/index.d.ts +4 -0
- package/dist/_utils/index.d.ts.map +1 -0
- package/dist/_utils/index.js +4 -0
- package/dist/_utils/index.js.map +1 -0
- package/dist/api/api.module.d.ts +38 -0
- package/dist/api/api.module.d.ts.map +1 -0
- package/dist/api/api.module.js +82 -0
- package/dist/api/api.module.js.map +1 -0
- package/dist/api/components/endpoint.d.ts +26 -0
- package/dist/api/components/endpoint.d.ts.map +1 -0
- package/dist/api/components/endpoint.js +253 -0
- package/dist/api/components/endpoint.js.map +1 -0
- package/dist/api/components/query-storage.d.ts +84 -0
- package/dist/api/components/query-storage.d.ts.map +1 -0
- package/dist/api/components/query-storage.js +221 -0
- package/dist/api/components/query-storage.js.map +1 -0
- package/dist/api/example.d.ts +83 -0
- package/dist/api/example.d.ts.map +1 -0
- package/dist/api/example.js +85 -0
- package/dist/api/example.js.map +1 -0
- package/dist/api/index.d.ts +4 -0
- package/dist/api/index.d.ts.map +1 -0
- package/dist/api/index.js +6 -0
- package/dist/api/index.js.map +1 -0
- package/dist/api/types/api.interface.d.ts +108 -0
- package/dist/api/types/api.interface.d.ts.map +1 -0
- package/dist/api/types/api.interface.js +19 -0
- package/dist/api/types/api.interface.js.map +1 -0
- package/dist/api/types/endpoint.interface.d.ts +116 -0
- package/dist/api/types/endpoint.interface.d.ts.map +1 -0
- package/dist/api/types/endpoint.interface.js +2 -0
- package/dist/api/types/endpoint.interface.js.map +1 -0
- package/dist/api/types/query.interface.d.ts +87 -0
- package/dist/api/types/query.interface.d.ts.map +1 -0
- package/dist/api/types/query.interface.js +2 -0
- package/dist/api/types/query.interface.js.map +1 -0
- package/dist/api/utils/api-helpers.d.ts +22 -0
- package/dist/api/utils/api-helpers.d.ts.map +1 -0
- package/dist/api/utils/api-helpers.js +44 -0
- package/dist/api/utils/api-helpers.js.map +1 -0
- package/dist/api/utils/create-header-context.d.ts +10 -0
- package/dist/api/utils/create-header-context.d.ts.map +1 -0
- package/dist/api/utils/create-header-context.js +36 -0
- package/dist/api/utils/create-header-context.js.map +1 -0
- package/dist/api/utils/endpoint-headers.d.ts +23 -0
- package/dist/api/utils/endpoint-headers.d.ts.map +1 -0
- package/dist/api/utils/endpoint-headers.js +57 -0
- package/dist/api/utils/endpoint-headers.js.map +1 -0
- package/dist/api/utils/fetch-base-query.d.ts +9 -0
- package/dist/api/utils/fetch-base-query.d.ts.map +1 -0
- package/dist/api/utils/fetch-base-query.js +181 -0
- package/dist/api/utils/fetch-base-query.js.map +1 -0
- package/dist/api/utils/file-utils.d.ts +43 -0
- package/dist/api/utils/file-utils.d.ts.map +1 -0
- package/dist/api/utils/file-utils.js +108 -0
- package/dist/api/utils/file-utils.js.map +1 -0
- package/dist/api/utils/get-cacheable-headers.d.ts +8 -0
- package/dist/api/utils/get-cacheable-headers.d.ts.map +1 -0
- package/dist/api/utils/get-cacheable-headers.js +21 -0
- package/dist/api/utils/get-cacheable-headers.js.map +1 -0
- package/dist/core/index.d.ts +3 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +3 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/selector/index.d.ts +3 -0
- package/dist/core/selector/index.d.ts.map +1 -0
- package/dist/core/selector/index.js +2 -0
- package/dist/core/selector/index.js.map +1 -0
- package/dist/core/selector/selector.interface.d.ts +91 -0
- package/dist/core/selector/selector.interface.d.ts.map +1 -0
- package/dist/core/selector/selector.interface.js +2 -0
- package/dist/core/selector/selector.interface.js.map +1 -0
- package/dist/core/selector/selector.module.d.ts +29 -0
- package/dist/core/selector/selector.module.d.ts.map +1 -0
- package/dist/core/selector/selector.module.js +467 -0
- package/dist/core/selector/selector.module.js.map +1 -0
- package/dist/core/storage/adapters/base-storage.service.d.ts +65 -0
- package/dist/core/storage/adapters/base-storage.service.d.ts.map +1 -0
- package/dist/core/storage/adapters/base-storage.service.js +660 -0
- package/dist/core/storage/adapters/base-storage.service.js.map +1 -0
- package/dist/core/storage/adapters/idb.d.ts +52 -0
- package/dist/core/storage/adapters/idb.d.ts.map +1 -0
- package/dist/core/storage/adapters/idb.js +528 -0
- package/dist/core/storage/adapters/idb.js.map +1 -0
- package/dist/core/storage/adapters/indexed-DB.service.d.ts +63 -0
- package/dist/core/storage/adapters/indexed-DB.service.d.ts.map +1 -0
- package/dist/core/storage/adapters/indexed-DB.service.js +595 -0
- package/dist/core/storage/adapters/indexed-DB.service.js.map +1 -0
- package/dist/core/storage/adapters/indexed-DB.service.old.d.ts +38 -0
- package/dist/core/storage/adapters/indexed-DB.service.old.d.ts.map +1 -0
- package/dist/core/storage/adapters/indexed-DB.service.old.js +318 -0
- package/dist/core/storage/adapters/indexed-DB.service.old.js.map +1 -0
- package/dist/core/storage/adapters/indexed-DB.service1.d.ts +38 -0
- package/dist/core/storage/adapters/indexed-DB.service1.d.ts.map +1 -0
- package/dist/core/storage/adapters/indexed-DB.service1.js +318 -0
- package/dist/core/storage/adapters/indexed-DB.service1.js.map +1 -0
- package/dist/core/storage/adapters/indexed-DB.service2.d.ts +61 -0
- package/dist/core/storage/adapters/indexed-DB.service2.d.ts.map +1 -0
- package/dist/core/storage/adapters/indexed-DB.service2.js +596 -0
- package/dist/core/storage/adapters/indexed-DB.service2.js.map +1 -0
- package/dist/core/storage/adapters/local-storage.service.d.ts +21 -0
- package/dist/core/storage/adapters/local-storage.service.d.ts.map +1 -0
- package/dist/core/storage/adapters/local-storage.service.js +99 -0
- package/dist/core/storage/adapters/local-storage.service.js.map +1 -0
- package/dist/core/storage/adapters/memory-storage.service.d.ts +22 -0
- package/dist/core/storage/adapters/memory-storage.service.d.ts.map +1 -0
- package/dist/core/storage/adapters/memory-storage.service.js +99 -0
- package/dist/core/storage/adapters/memory-storage.service.js.map +1 -0
- package/dist/core/storage/adapters/path.utils.d.ts +5 -0
- package/dist/core/storage/adapters/path.utils.d.ts.map +1 -0
- package/dist/core/storage/adapters/path.utils.js +35 -0
- package/dist/core/storage/adapters/path.utils.js.map +1 -0
- package/dist/core/storage/factory/createSynapseStorage.factory.d.ts +1 -0
- package/dist/core/storage/factory/createSynapseStorage.factory.d.ts.map +1 -0
- package/dist/core/storage/factory/createSynapseStorage.factory.js +2 -0
- package/dist/core/storage/factory/createSynapseStorage.factory.js.map +1 -0
- package/dist/core/storage/factory/index.d.ts +2 -0
- package/dist/core/storage/factory/index.d.ts.map +1 -0
- package/dist/core/storage/factory/index.js +2 -0
- package/dist/core/storage/factory/index.js.map +1 -0
- package/dist/core/storage/index.d.ts +11 -0
- package/dist/core/storage/index.d.ts.map +1 -0
- package/dist/core/storage/index.js +12 -0
- package/dist/core/storage/index.js.map +1 -0
- package/dist/core/storage/middlewares/broadcast.middleware.d.ts +9 -0
- package/dist/core/storage/middlewares/broadcast.middleware.d.ts.map +1 -0
- package/dist/core/storage/middlewares/broadcast.middleware.js +115 -0
- package/dist/core/storage/middlewares/broadcast.middleware.js.map +1 -0
- package/dist/core/storage/middlewares/index.d.ts +4 -0
- package/dist/core/storage/middlewares/index.d.ts.map +1 -0
- package/dist/core/storage/middlewares/index.js +3 -0
- package/dist/core/storage/middlewares/index.js.map +1 -0
- package/dist/core/storage/middlewares/storage-batching.middleware.d.ts +7 -0
- package/dist/core/storage/middlewares/storage-batching.middleware.d.ts.map +1 -0
- package/dist/core/storage/middlewares/storage-batching.middleware.js +36 -0
- package/dist/core/storage/middlewares/storage-batching.middleware.js.map +1 -0
- package/dist/core/storage/middlewares/storage-shallow-compare.middleware.d.ts +7 -0
- package/dist/core/storage/middlewares/storage-shallow-compare.middleware.d.ts.map +1 -0
- package/dist/core/storage/middlewares/storage-shallow-compare.middleware.js +46 -0
- package/dist/core/storage/middlewares/storage-shallow-compare.middleware.js.map +1 -0
- package/dist/core/storage/modules/plugin/plugin.interface.d.ts +201 -0
- package/dist/core/storage/modules/plugin/plugin.interface.d.ts.map +1 -0
- package/dist/core/storage/modules/plugin/plugin.interface.js +2 -0
- package/dist/core/storage/modules/plugin/plugin.interface.js.map +1 -0
- package/dist/core/storage/modules/plugin/plugin.service.d.ts +25 -0
- package/dist/core/storage/modules/plugin/plugin.service.d.ts.map +1 -0
- package/dist/core/storage/modules/plugin/plugin.service.js +186 -0
- package/dist/core/storage/modules/plugin/plugin.service.js.map +1 -0
- package/dist/core/storage/storage.interface.d.ts +70 -0
- package/dist/core/storage/storage.interface.d.ts.map +1 -0
- package/dist/core/storage/storage.interface.js +10 -0
- package/dist/core/storage/storage.interface.js.map +1 -0
- package/dist/core/storage/utils/batch.utils.d.ts +33 -0
- package/dist/core/storage/utils/batch.utils.d.ts.map +1 -0
- package/dist/core/storage/utils/batch.utils.js +88 -0
- package/dist/core/storage/utils/batch.utils.js.map +1 -0
- package/dist/core/storage/utils/broadcast.util.d.ts +48 -0
- package/dist/core/storage/utils/broadcast.util.d.ts.map +1 -0
- package/dist/core/storage/utils/broadcast.util.js +162 -0
- package/dist/core/storage/utils/broadcast.util.js.map +1 -0
- package/dist/core/storage/utils/cache.util.d.ts +33 -0
- package/dist/core/storage/utils/cache.util.d.ts.map +1 -0
- package/dist/core/storage/utils/cache.util.js +47 -0
- package/dist/core/storage/utils/cache.util.js.map +1 -0
- package/dist/core/storage/utils/middleware-module.d.ts +46 -0
- package/dist/core/storage/utils/middleware-module.d.ts.map +1 -0
- package/dist/core/storage/utils/middleware-module.js +109 -0
- package/dist/core/storage/utils/middleware-module.js.map +1 -0
- package/dist/core/storage/utils/storage-key.d.ts +11 -0
- package/dist/core/storage/utils/storage-key.d.ts.map +1 -0
- package/dist/core/storage/utils/storage-key.js +21 -0
- package/dist/core/storage/utils/storage-key.js.map +1 -0
- package/dist/core/storage/utils/storage.utils.d.ts +17 -0
- package/dist/core/storage/utils/storage.utils.d.ts.map +1 -0
- package/dist/core/storage/utils/storage.utils.js +57 -0
- package/dist/core/storage/utils/storage.utils.js.map +1 -0
- package/dist/examples/_example5.d.ts +1 -0
- package/dist/examples/_example5.d.ts.map +1 -0
- package/dist/examples/_example5.js +184 -0
- package/dist/examples/_example5.js.map +1 -0
- package/dist/examples/_example6.d.ts +1 -0
- package/dist/examples/_example6.d.ts.map +1 -0
- package/dist/examples/_example6.js +168 -0
- package/dist/examples/_example6.js.map +1 -0
- package/dist/examples/plugins.d.ts +1 -0
- package/dist/examples/plugins.d.ts.map +1 -0
- package/dist/examples/plugins.js +176 -0
- package/dist/examples/plugins.js.map +1 -0
- package/dist/examples/pokemons/PokemonList.d.ts +2 -0
- package/dist/examples/pokemons/PokemonList.d.ts.map +1 -0
- package/dist/examples/pokemons/PokemonList.js +110 -0
- package/dist/examples/pokemons/PokemonList.js.map +1 -0
- package/dist/examples/pokemons/api.d.ts +22 -0
- package/dist/examples/pokemons/api.d.ts.map +1 -0
- package/dist/examples/pokemons/api.js +43 -0
- package/dist/examples/pokemons/api.js.map +1 -0
- package/dist/examples/pokemons/app.config.d.ts +15 -0
- package/dist/examples/pokemons/app.config.d.ts.map +1 -0
- package/dist/examples/pokemons/app.config.js +15 -0
- package/dist/examples/pokemons/app.config.js.map +1 -0
- package/dist/examples/pokemons/dispatchers/pokemon.dispatcher.js +128 -0
- package/dist/examples/pokemons/dispatchers/pokemon.dispatcher.js.map +1 -0
- package/dist/examples/pokemons/effects/pokemon.effects.d.ts +16 -0
- package/dist/examples/pokemons/effects/pokemon.effects.d.ts.map +1 -0
- package/dist/examples/pokemons/effects/pokemon.effects.js +51 -0
- package/dist/examples/pokemons/effects/pokemon.effects.js.map +1 -0
- package/dist/examples/pokemons/middlewares/pokenon.middlewares.d.ts +4 -0
- package/dist/examples/pokemons/middlewares/pokenon.middlewares.d.ts.map +1 -0
- package/dist/examples/pokemons/middlewares/pokenon.middlewares.js +28 -0
- package/dist/examples/pokemons/middlewares/pokenon.middlewares.js.map +1 -0
- package/dist/examples/pokemons/selectors/pokemon.selectors.d.ts +13 -0
- package/dist/examples/pokemons/selectors/pokemon.selectors.d.ts.map +1 -0
- package/dist/examples/pokemons/selectors/pokemon.selectors.js +7 -0
- package/dist/examples/pokemons/selectors/pokemon.selectors.js.map +1 -0
- package/dist/examples/pokemons/storages/pokemon.storage.d.ts +5 -0
- package/dist/examples/pokemons/storages/pokemon.storage.d.ts.map +1 -0
- package/dist/examples/pokemons/storages/pokemon.storage.js +13 -0
- package/dist/examples/pokemons/storages/pokemon.storage.js.map +1 -0
- package/dist/examples/pokemons/store.d.ts +35 -0
- package/dist/examples/pokemons/store.d.ts.map +1 -0
- package/dist/examples/pokemons/store.js +21 -0
- package/dist/examples/pokemons/store.js.map +1 -0
- package/dist/examples/pokemons/types.d.ts +26 -0
- package/dist/examples/pokemons/types.d.ts.map +1 -0
- package/dist/examples/pokemons/types.js +2 -0
- package/dist/examples/pokemons/types.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +18 -0
- package/dist/index.js.map +1 -0
- package/dist/react/hooks/index.d.ts +3 -0
- package/dist/react/hooks/index.d.ts.map +1 -0
- package/dist/react/hooks/index.js +3 -0
- package/dist/react/hooks/index.js.map +1 -0
- package/dist/react/hooks/useSelector.d.ts +22 -0
- package/dist/react/hooks/useSelector.d.ts.map +1 -0
- package/dist/react/hooks/useSelector.js +104 -0
- package/dist/react/hooks/useSelector.js.map +1 -0
- package/dist/react/hooks/useStorageSubscribe.d.ts +12 -0
- package/dist/react/hooks/useStorageSubscribe.d.ts.map +1 -0
- package/dist/react/hooks/useStorageSubscribe.js +49 -0
- package/dist/react/hooks/useStorageSubscribe.js.map +1 -0
- package/dist/react/index.d.ts +3 -0
- package/dist/react/index.d.ts.map +1 -0
- package/dist/react/index.js +3 -0
- package/dist/react/index.js.map +1 -0
- package/dist/react/utils/createSynapse.d.ts +47 -0
- package/dist/react/utils/createSynapse.d.ts.map +1 -0
- package/dist/react/utils/createSynapse.js +83 -0
- package/dist/react/utils/createSynapse.js.map +1 -0
- package/dist/react/utils/createSynapseContext.d.ts +29 -0
- package/dist/react/utils/createSynapseContext.d.ts.map +1 -0
- package/dist/react/utils/createSynapseContext.js +112 -0
- package/dist/react/utils/createSynapseContext.js.map +1 -0
- package/dist/react/utils/createSynapseCtx.d.ts +30 -0
- package/dist/react/utils/createSynapseCtx.d.ts.map +1 -0
- package/dist/react/utils/createSynapseCtx.js +124 -0
- package/dist/react/utils/createSynapseCtx.js.map +1 -0
- package/dist/react/utils/index.d.ts +2 -0
- package/dist/react/utils/index.d.ts.map +1 -0
- package/dist/react/utils/index.js +2 -0
- package/dist/react/utils/index.js.map +1 -0
- package/dist/reactive/dispatcher/dispatcher.module.d.ts +195 -0
- package/dist/reactive/dispatcher/dispatcher.module.d.ts.map +1 -0
- package/dist/reactive/dispatcher/dispatcher.module.js +288 -0
- package/dist/reactive/dispatcher/dispatcher.module.js.map +1 -0
- package/dist/reactive/dispatcher/index.d.ts +3 -0
- package/dist/reactive/dispatcher/index.d.ts.map +1 -0
- package/dist/reactive/dispatcher/index.js +3 -0
- package/dist/reactive/dispatcher/index.js.map +1 -0
- package/dist/reactive/dispatcher/middlewares/index.d.ts +2 -0
- package/dist/reactive/dispatcher/middlewares/index.d.ts.map +1 -0
- package/dist/reactive/dispatcher/middlewares/index.js +2 -0
- package/dist/reactive/dispatcher/middlewares/index.js.map +1 -0
- package/dist/reactive/dispatcher/middlewares/logger.middleware.d.ts +31 -0
- package/dist/reactive/dispatcher/middlewares/logger.middleware.d.ts.map +1 -0
- package/dist/reactive/dispatcher/middlewares/logger.middleware.js +126 -0
- package/dist/reactive/dispatcher/middlewares/logger.middleware.js.map +1 -0
- package/dist/reactive/effects/effects.module.d.ts +140 -0
- package/dist/reactive/effects/effects.module.d.ts.map +1 -0
- package/dist/reactive/effects/effects.module.js +263 -0
- package/dist/reactive/effects/effects.module.js.map +1 -0
- package/dist/reactive/effects/index.d.ts +2 -0
- package/dist/reactive/effects/index.d.ts.map +1 -0
- package/dist/reactive/effects/index.js +2 -0
- package/dist/reactive/effects/index.js.map +1 -0
- package/dist/reactive/effects/utils/chunkRequestConsistent.d.ts +12 -0
- package/dist/reactive/effects/utils/chunkRequestConsistent.d.ts.map +1 -0
- package/dist/reactive/effects/utils/chunkRequestConsistent.js +16 -0
- package/dist/reactive/effects/utils/chunkRequestConsistent.js.map +1 -0
- package/dist/reactive/effects/utils/chunkRequestParallel.d.ts +12 -0
- package/dist/reactive/effects/utils/chunkRequestParallel.d.ts.map +1 -0
- package/dist/reactive/effects/utils/chunkRequestParallel.js +13 -0
- package/dist/reactive/effects/utils/chunkRequestParallel.js.map +1 -0
- package/dist/reactive/effects/utils/index.d.ts +3 -0
- package/dist/reactive/effects/utils/index.d.ts.map +1 -0
- package/dist/reactive/effects/utils/index.js +3 -0
- package/dist/reactive/effects/utils/index.js.map +1 -0
- package/dist/reactive/index.d.ts +3 -0
- package/dist/reactive/index.d.ts.map +1 -0
- package/dist/reactive/index.js +3 -0
- package/dist/reactive/index.js.map +1 -0
- package/dist/utils/chunk.util.d.ts +8 -0
- package/dist/utils/chunk.util.d.ts.map +1 -0
- package/dist/utils/chunk.util.js +21 -0
- package/dist/utils/chunk.util.js.map +1 -0
- package/dist/utils/createSynapse.d.ts +52 -0
- package/dist/utils/createSynapse.d.ts.map +1 -0
- package/dist/utils/createSynapse.js +87 -0
- package/dist/utils/createSynapse.js.map +1 -0
- package/dist/utils/deepMerge.util.d.ts +2 -0
- package/dist/utils/deepMerge.util.d.ts.map +1 -0
- package/dist/utils/deepMerge.util.js +16 -0
- package/dist/utils/deepMerge.util.js.map +1 -0
- package/dist/utils/flatMap.util.d.ts +10 -0
- package/dist/utils/flatMap.util.d.ts.map +1 -0
- package/dist/utils/flatMap.util.js +23 -0
- package/dist/utils/flatMap.util.js.map +1 -0
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +2 -0
- package/dist/utils/index.js.map +1 -0
- package/package.json +111 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../../src/examples/pokemons/store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAA;AAExD,OAAO,EAAE,gBAAgB,EAAE,MAAM,OAAO,CAAA;AACxC,OAAO,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAA;AAC1E,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAC1D,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAA;AACtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAA;AAEjE,MAAM,CAAC,MAAM,EACX,OAAO,EAAE,cAAc,EACvB,MAAM,EAAE,aAAa,EACrB,OAAO,EAAE,cAAc,EACvB,SAAS,EAAE,gBAAgB,GAC5B,GAAG,MAAM,aAAa,CAAC;IACtB,eAAe,EAAE,oBAAoB;IACrC,kBAAkB,EAAE,uBAAuB;IAC3C,iBAAiB,EAAE,sBAAsB;IACzC,kBAAkB,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;QACnC,WAAW,EAAE;YACX,iBAAiB,EAAE,UAAU;SAC9B;QACD,GAAG,EAAE;YACH,UAAU,EAAE,gBAAgB;SAC7B;KACF,CAAC;IACF,OAAO,EAAE,CAAC,cAAc,CAAC;CAC1B,CAAC,CAAA"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export interface Pokemon {
|
|
2
|
+
id: number;
|
|
3
|
+
name: string;
|
|
4
|
+
types: Array<{
|
|
5
|
+
type: {
|
|
6
|
+
name: string;
|
|
7
|
+
};
|
|
8
|
+
}>;
|
|
9
|
+
sprites: {
|
|
10
|
+
front_default: string;
|
|
11
|
+
other?: {
|
|
12
|
+
'official-artwork'?: {
|
|
13
|
+
front_default?: string;
|
|
14
|
+
};
|
|
15
|
+
};
|
|
16
|
+
};
|
|
17
|
+
height: number;
|
|
18
|
+
weight: number;
|
|
19
|
+
}
|
|
20
|
+
export interface PokemonState {
|
|
21
|
+
currentPokemon: Pokemon | null | undefined;
|
|
22
|
+
loading: boolean;
|
|
23
|
+
error: string | null;
|
|
24
|
+
currentId: number;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/examples/pokemons/types.ts"],"names":[],"mappings":"AACA,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE;YAAE,IAAI,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,CAAC,CAAA;IACxC,OAAO,EAAE;QACP,aAAa,EAAE,MAAM,CAAA;QACrB,KAAK,CAAC,EAAE;YACN,kBAAkB,CAAC,EAAE;gBACnB,aAAa,CAAC,EAAE,MAAM,CAAA;aACvB,CAAA;SACF,CAAA;KACF,CAAA;IACD,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;CACf;AAGD,MAAM,WAAW,YAAY;IAC3B,cAAc,EAAE,OAAO,GAAG,IAAI,GAAG,SAAS,CAAA;IAC1C,OAAO,EAAE,OAAO,CAAA;IAChB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,SAAS,EAAE,MAAM,CAAA;CAClB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/examples/pokemons/types.ts"],"names":[],"mappings":""}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Synapse - Библиотека управления состоянием и API-клиент
|
|
3
|
+
* @author Vlad Firsov
|
|
4
|
+
*/
|
|
5
|
+
export * from './api';
|
|
6
|
+
export * from './core';
|
|
7
|
+
export * from './reactive';
|
|
8
|
+
export * from './utils';
|
|
9
|
+
export * from './react';
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,cAAc,OAAO,CAAA;AACrB,cAAc,QAAQ,CAAA;AACtB,cAAc,YAAY,CAAA;AAC1B,cAAc,SAAS,CAAA;AAKvB,cAAc,SAAS,CAAA"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Synapse - Библиотека управления состоянием и API-клиент
|
|
3
|
+
* @author Vlad Firsov
|
|
4
|
+
*/
|
|
5
|
+
// Основные модули
|
|
6
|
+
export * from './api';
|
|
7
|
+
export * from './core';
|
|
8
|
+
export * from './reactive';
|
|
9
|
+
export * from './utils';
|
|
10
|
+
// React-интеграция экспортируется только если установлен React
|
|
11
|
+
// Оставляем этот экспорт, он будет работать для пользователей,
|
|
12
|
+
// которые импортируют React напрямую
|
|
13
|
+
export * from './react';
|
|
14
|
+
// Информационное сообщение для дебаггинга
|
|
15
|
+
if (process.env.NODE_ENV !== 'production') {
|
|
16
|
+
console.log('Synapse state management library loaded ✨');
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,kBAAkB;AAClB,cAAc,OAAO,CAAA;AACrB,cAAc,QAAQ,CAAA;AACtB,cAAc,YAAY,CAAA;AAC1B,cAAc,SAAS,CAAA;AAEvB,+DAA+D;AAC/D,+DAA+D;AAC/D,qCAAqC;AACrC,cAAc,SAAS,CAAA;AAEvB,0CAA0C;AAC1C,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,EAAE,CAAC;IAC1C,OAAO,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAA;AAC1D,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/react/hooks/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAA;AAC7B,cAAc,uBAAuB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/react/hooks/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAA;AAC7B,cAAc,uBAAuB,CAAA"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { SelectorAPI } from '../../core';
|
|
2
|
+
interface UseSelectorOptions<T> {
|
|
3
|
+
/** Начальное значение до загрузки данных из селектора */
|
|
4
|
+
initialValue?: T;
|
|
5
|
+
/** Функция сравнения для предотвращения лишних ререндеров */
|
|
6
|
+
equals?: (a: T, b: T) => boolean;
|
|
7
|
+
/** Включать ли статус загрузки в возвращаемый результат */
|
|
8
|
+
withLoading?: boolean;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Хук для использования селекторов в компонентах React.
|
|
12
|
+
* Обеспечивает согласованность значений между всеми экземплярами хука.
|
|
13
|
+
*/
|
|
14
|
+
export declare function useSelector<T>(selector: SelectorAPI<T>): T | undefined;
|
|
15
|
+
export declare function useSelector<T>(selector: SelectorAPI<T>, options: UseSelectorOptions<T> & {
|
|
16
|
+
withLoading?: true;
|
|
17
|
+
}): {
|
|
18
|
+
data: T | undefined;
|
|
19
|
+
isLoading: boolean;
|
|
20
|
+
};
|
|
21
|
+
export {};
|
|
22
|
+
//# sourceMappingURL=useSelector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSelector.d.ts","sourceRoot":"","sources":["../../../src/react/hooks/useSelector.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAE7C,UAAU,kBAAkB,CAAC,CAAC;IAC5B,yDAAyD;IACzD,YAAY,CAAC,EAAE,CAAC,CAAA;IAChB,6DAA6D;IAC7D,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,OAAO,CAAA;IAChC,2DAA2D;IAC3D,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB;AAeD;;;GAGG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,SAAS,CAAA;AACvE,wBAAgB,WAAW,CAAC,CAAC,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,kBAAkB,CAAC,CAAC,CAAC,GAAG;IAAE,WAAW,CAAC,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,CAAC,GAAG,SAAS,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAAA"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { useEffect, useRef, useState } from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* Глобальный реестр селекторов с активными подписками.
|
|
4
|
+
* Хранит последние значения селекторов и список callbacks для обновления всех компонентов.
|
|
5
|
+
*/
|
|
6
|
+
const SELECTOR_REGISTRY = new Map();
|
|
7
|
+
export function useSelector(selector, options) {
|
|
8
|
+
// Базовые состояния
|
|
9
|
+
const [state, setState] = useState(options?.initialValue);
|
|
10
|
+
const [isLoading, setIsLoading] = useState(!!options?.withLoading);
|
|
11
|
+
// Для предотвращения лишних ререндеров
|
|
12
|
+
const prevValueRef = useRef(options?.initialValue);
|
|
13
|
+
const equalsRef = useRef(options?.equals || ((a, b) => a === b));
|
|
14
|
+
// Получаем ID селектора с помощью метода getId()
|
|
15
|
+
const selectorId = selector.getId();
|
|
16
|
+
// Обновляем состояние компонента при изменении значения
|
|
17
|
+
const updateComponentState = (newValue) => {
|
|
18
|
+
// Сравниваем с предыдущим значением компонента
|
|
19
|
+
if (prevValueRef.current === undefined || !equalsRef.current(newValue, prevValueRef.current)) {
|
|
20
|
+
prevValueRef.current = newValue;
|
|
21
|
+
setState(newValue);
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
useEffect(() => {
|
|
25
|
+
// Создаем запись в реестре, если её ещё нет
|
|
26
|
+
if (!SELECTOR_REGISTRY.has(selectorId)) {
|
|
27
|
+
SELECTOR_REGISTRY.set(selectorId, {
|
|
28
|
+
lastValue: undefined,
|
|
29
|
+
listeners: new Set(),
|
|
30
|
+
unsubscribe: null,
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
const registry = SELECTOR_REGISTRY.get(selectorId);
|
|
34
|
+
// Добавляем текущий компонент в список слушателей
|
|
35
|
+
registry.listeners.add(updateComponentState);
|
|
36
|
+
// Если у нас уже есть значение, сразу устанавливаем его
|
|
37
|
+
if (registry.lastValue !== undefined) {
|
|
38
|
+
updateComponentState(registry.lastValue);
|
|
39
|
+
// Если был запрошен режим загрузки, сразу сбрасываем его
|
|
40
|
+
if (options?.withLoading) {
|
|
41
|
+
setIsLoading(false);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
// Запрашиваем начальное значение
|
|
46
|
+
if (options?.withLoading)
|
|
47
|
+
setIsLoading(true);
|
|
48
|
+
selector
|
|
49
|
+
.select()
|
|
50
|
+
.then((initialValue) => {
|
|
51
|
+
// Обновляем значение в реестре
|
|
52
|
+
registry.lastValue = initialValue;
|
|
53
|
+
// Уведомляем все компоненты
|
|
54
|
+
registry.listeners.forEach((listener) => listener(initialValue));
|
|
55
|
+
if (options?.withLoading)
|
|
56
|
+
setIsLoading(false);
|
|
57
|
+
})
|
|
58
|
+
.catch((error) => {
|
|
59
|
+
console.error(`useSelector: Ошибка при получении начального значения для ${selectorId}`, error);
|
|
60
|
+
if (options?.withLoading)
|
|
61
|
+
setIsLoading(false);
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
// Создаем подписку только один раз для селектора
|
|
65
|
+
if (!registry.unsubscribe) {
|
|
66
|
+
registry.unsubscribe = selector.subscribe({
|
|
67
|
+
notify: (newValue) => {
|
|
68
|
+
// Обновляем значение в реестре
|
|
69
|
+
registry.lastValue = newValue;
|
|
70
|
+
// Уведомляем все компоненты
|
|
71
|
+
registry.listeners.forEach((listener) => {
|
|
72
|
+
try {
|
|
73
|
+
listener(newValue);
|
|
74
|
+
}
|
|
75
|
+
catch (error) {
|
|
76
|
+
console.error(`useSelector: Ошибка при уведомлении слушателя для ${selectorId}`, error);
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
},
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
// При размонтировании компонента
|
|
83
|
+
return () => {
|
|
84
|
+
const registry = SELECTOR_REGISTRY.get(selectorId);
|
|
85
|
+
if (registry) {
|
|
86
|
+
// Удаляем текущий компонент из списка слушателей
|
|
87
|
+
registry.listeners.delete(updateComponentState);
|
|
88
|
+
// Если больше нет слушателей, можно очистить подписку
|
|
89
|
+
if (registry.listeners.size === 0) {
|
|
90
|
+
if (registry.unsubscribe) {
|
|
91
|
+
registry.unsubscribe();
|
|
92
|
+
}
|
|
93
|
+
SELECTOR_REGISTRY.delete(selectorId);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
};
|
|
97
|
+
}, [selector, selectorId]);
|
|
98
|
+
// Возвращаем данные в нужном формате
|
|
99
|
+
if (options?.withLoading) {
|
|
100
|
+
return { data: state, isLoading };
|
|
101
|
+
}
|
|
102
|
+
return state;
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=useSelector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSelector.js","sourceRoot":"","sources":["../../../src/react/hooks/useSelector.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { IStorage } from '../../core';
|
|
2
|
+
/**
|
|
3
|
+
* Хук для подписки на изменения в хранилище
|
|
4
|
+
*
|
|
5
|
+
* @template S - Тип состояния хранилища
|
|
6
|
+
* @template R - Тип возвращаемого значения
|
|
7
|
+
* @param storage - Экземпляр хранилища
|
|
8
|
+
* @param selector - Функция-селектор для выбора данных
|
|
9
|
+
* @returns Значение из хранилища
|
|
10
|
+
*/
|
|
11
|
+
export declare const useStorageSubscribe: <S extends Record<string, any>, R = any>(storage: IStorage<S>, selector: (state: S) => R) => R | undefined;
|
|
12
|
+
//# sourceMappingURL=useStorageSubscribe.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useStorageSubscribe.d.ts","sourceRoot":"","sources":["../../../src/react/hooks/useStorageSubscribe.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAErC;;;;;;;;GAQG;AACH,eAAO,MAAM,mBAAmB,GAAI,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,SAAS,QAAQ,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,KAAG,CAAC,GAAG,SA0CjI,CAAA"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { useEffect, useState } from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* Хук для подписки на изменения в хранилище
|
|
4
|
+
*
|
|
5
|
+
* @template S - Тип состояния хранилища
|
|
6
|
+
* @template R - Тип возвращаемого значения
|
|
7
|
+
* @param storage - Экземпляр хранилища
|
|
8
|
+
* @param selector - Функция-селектор для выбора данных
|
|
9
|
+
* @returns Значение из хранилища
|
|
10
|
+
*/
|
|
11
|
+
export const useStorageSubscribe = (storage, selector) => {
|
|
12
|
+
const [value, setValue] = useState(undefined);
|
|
13
|
+
useEffect(() => {
|
|
14
|
+
// Флаг монтирования для предотвращения обновления состояния при размонтировании
|
|
15
|
+
let isMounted = true;
|
|
16
|
+
const initializeValue = async () => {
|
|
17
|
+
try {
|
|
18
|
+
const state = await storage.getState();
|
|
19
|
+
const selectedValue = selector(state);
|
|
20
|
+
if (isMounted) {
|
|
21
|
+
setValue(selectedValue);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
catch (error) {
|
|
25
|
+
console.error('Failed to initialize storage value:', error);
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
// Инициализируем значение
|
|
29
|
+
initializeValue();
|
|
30
|
+
let unsubscribe;
|
|
31
|
+
try {
|
|
32
|
+
unsubscribe = storage.subscribe(selector, (newValue) => {
|
|
33
|
+
if (isMounted) {
|
|
34
|
+
setValue(newValue);
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
catch (error) {
|
|
39
|
+
console.error('Failed to subscribe to storage:', error);
|
|
40
|
+
unsubscribe = () => { };
|
|
41
|
+
}
|
|
42
|
+
return () => {
|
|
43
|
+
isMounted = false;
|
|
44
|
+
unsubscribe();
|
|
45
|
+
};
|
|
46
|
+
}, [storage, selector]);
|
|
47
|
+
return value;
|
|
48
|
+
};
|
|
49
|
+
//# sourceMappingURL=useStorageSubscribe.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useStorageSubscribe.js","sourceRoot":"","sources":["../../../src/react/hooks/useStorageSubscribe.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAI3C;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAyC,OAAoB,EAAE,QAAyB,EAAiB,EAAE;IAC5I,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAgB,SAAS,CAAC,CAAA;IAE5D,SAAS,CAAC,GAAG,EAAE;QACb,gFAAgF;QAChF,IAAI,SAAS,GAAG,IAAI,CAAA;QAEpB,MAAM,eAAe,GAAG,KAAK,IAAI,EAAE;YACjC,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,QAAQ,EAAE,CAAA;gBACtC,MAAM,aAAa,GAAG,QAAQ,CAAC,KAAK,CAAM,CAAA;gBAE1C,IAAI,SAAS,EAAE,CAAC;oBACd,QAAQ,CAAC,aAAa,CAAC,CAAA;gBACzB,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,qCAAqC,EAAE,KAAK,CAAC,CAAA;YAC7D,CAAC;QACH,CAAC,CAAA;QAED,0BAA0B;QAC1B,eAAe,EAAE,CAAA;QAEjB,IAAI,WAAyB,CAAA;QAC7B,IAAI,CAAC;YACH,WAAW,GAAG,OAAO,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,QAAW,EAAE,EAAE;gBACxD,IAAI,SAAS,EAAE,CAAC;oBACd,QAAQ,CAAC,QAAQ,CAAC,CAAA;gBACpB,CAAC;YACH,CAAC,CAAC,CAAA;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,KAAK,CAAC,CAAA;YACvD,WAAW,GAAG,GAAG,EAAE,GAAE,CAAC,CAAA;QACxB,CAAC;QAED,OAAO,GAAG,EAAE;YACV,SAAS,GAAG,KAAK,CAAA;YACjB,WAAW,EAAE,CAAA;QACf,CAAC,CAAA;IACH,CAAC,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAA;IAEvB,OAAO,KAAK,CAAA;AACd,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAA;AACvB,cAAc,SAAS,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAA;AACvB,cAAc,SAAS,CAAA"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { Observable } from 'rxjs';
|
|
2
|
+
import { ISelectorModule, IStorage } from '../../core';
|
|
3
|
+
import { Effect } from '../../reactive';
|
|
4
|
+
export type ExtractPromiseType<T> = T extends Promise<infer U> ? U : T;
|
|
5
|
+
export type ExtractStorageType<T> = T extends IStorage<infer U> ? U : never;
|
|
6
|
+
export type ExtractDispatchType<T> = T extends {
|
|
7
|
+
dispatch: infer D;
|
|
8
|
+
} ? D : never;
|
|
9
|
+
export type StorageCreatorFunction<T extends Record<string, any>> = () => Promise<IStorage<T>>;
|
|
10
|
+
/**
|
|
11
|
+
* Конфигурация хранилища
|
|
12
|
+
*/
|
|
13
|
+
export type CreateSynapseConfig<TStore extends Record<string, any>, TSelectors = any, TDispatcher = any, TApi extends Record<string, any> = Record<string, never>, TConfig extends Record<string, any> = Record<string, never>, TExternalSelectors extends Record<string, any> = Record<string, any>> = ({
|
|
14
|
+
storage: IStorage<TStore>;
|
|
15
|
+
createStorageFn?: undefined;
|
|
16
|
+
} | {
|
|
17
|
+
storage?: undefined;
|
|
18
|
+
createStorageFn: StorageCreatorFunction<TStore>;
|
|
19
|
+
}) & {
|
|
20
|
+
externalSelectors?: TExternalSelectors;
|
|
21
|
+
createSelectorsFn?: (selectorModule: ISelectorModule<TStore>, externalSelectors: TExternalSelectors) => TSelectors;
|
|
22
|
+
createDispatcherFn?: (storage: IStorage<TStore>) => TDispatcher;
|
|
23
|
+
createEffectConfig?: (dispatcher: TDispatcher) => {
|
|
24
|
+
dispatchers: Record<string, any>;
|
|
25
|
+
api?: TApi;
|
|
26
|
+
config?: TConfig;
|
|
27
|
+
};
|
|
28
|
+
effects?: Effect<TStore, any, TApi, TConfig>[];
|
|
29
|
+
};
|
|
30
|
+
/**
|
|
31
|
+
* Возвращаемый результат
|
|
32
|
+
*/
|
|
33
|
+
export interface SynapseStore<TStore extends Record<string, any>, TStorage extends IStorage<TStore>, TSelectors = any, TActions = any> {
|
|
34
|
+
storage: TStorage;
|
|
35
|
+
selectors: TSelectors;
|
|
36
|
+
actions: TActions;
|
|
37
|
+
state$: Observable<TStore>;
|
|
38
|
+
destroy: () => Promise<void>;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Создает хранилище Synapse
|
|
42
|
+
*
|
|
43
|
+
* @param config Конфигурация для создания хранилища
|
|
44
|
+
* @returns Promise, который разрешается в SynapseStore
|
|
45
|
+
*/
|
|
46
|
+
export declare function createSynapse<TStore extends Record<string, any>, TSelectors = any, TDispatcher = any, TApi extends Record<string, any> = Record<string, never>, TConfig extends Record<string, any> = Record<string, never>, TExternalSelectors extends Record<string, any> = Record<string, any>, TStorage extends IStorage<TStore> = IStorage<TStore>, TActions = ExtractDispatchType<TDispatcher>>(config: CreateSynapseConfig<TStore, TSelectors, TDispatcher, TApi, TConfig, TExternalSelectors>): Promise<SynapseStore<TStore, TStorage, TSelectors, TActions>>;
|
|
47
|
+
//# sourceMappingURL=createSynapse.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createSynapse.d.ts","sourceRoot":"","sources":["../../../src/react/utils/createSynapse.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { Observable } from 'rxjs';
|
|
2
|
+
import { SelectorModule } from '../../core';
|
|
3
|
+
import { EffectsModule } from '../../reactive';
|
|
4
|
+
/**
|
|
5
|
+
* Создает хранилище Synapse
|
|
6
|
+
*
|
|
7
|
+
* @param config Конфигурация для создания хранилища
|
|
8
|
+
* @returns Promise, который разрешается в SynapseStore
|
|
9
|
+
*/
|
|
10
|
+
export async function createSynapse(config) {
|
|
11
|
+
// Создаем и инициализируем хранилище
|
|
12
|
+
const storageInstance = (config.createStorageFn ? await config.createStorageFn() : config.storage);
|
|
13
|
+
// Создаем сборщики для последующей очистки
|
|
14
|
+
const cleanupCallbacks = [];
|
|
15
|
+
const result = {
|
|
16
|
+
storage: storageInstance,
|
|
17
|
+
selectors: {},
|
|
18
|
+
actions: {},
|
|
19
|
+
state$: new Observable(),
|
|
20
|
+
destroy: async () => {
|
|
21
|
+
for (const callback of cleanupCallbacks) {
|
|
22
|
+
await callback();
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
};
|
|
26
|
+
cleanupCallbacks.push(() => storageInstance.destroy());
|
|
27
|
+
let dispatcher;
|
|
28
|
+
let selectorModule;
|
|
29
|
+
let effectsModule;
|
|
30
|
+
// Создаем модуль селекторов
|
|
31
|
+
if (config.createSelectorsFn) {
|
|
32
|
+
try {
|
|
33
|
+
selectorModule = new SelectorModule(storageInstance);
|
|
34
|
+
const externalSelectors = config.externalSelectors || {};
|
|
35
|
+
result.selectors = config.createSelectorsFn(selectorModule, externalSelectors);
|
|
36
|
+
if (typeof selectorModule.destroy === 'function') {
|
|
37
|
+
cleanupCallbacks.push(() => selectorModule.destroy());
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
catch (error) {
|
|
41
|
+
console.error('Ошибка создания selectors:', error);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
// Создаем диспетчер
|
|
45
|
+
if (config.createDispatcherFn) {
|
|
46
|
+
dispatcher = config.createDispatcherFn(storageInstance);
|
|
47
|
+
// @ts-ignore
|
|
48
|
+
if (dispatcher && 'dispatch' in dispatcher) {
|
|
49
|
+
result.actions = dispatcher.dispatch;
|
|
50
|
+
if (typeof dispatcher.destroy === 'function') {
|
|
51
|
+
cleanupCallbacks.push(() => dispatcher.destroy());
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
// Создаем и настраиваем модуль эффектов
|
|
56
|
+
if (config.createEffectConfig && dispatcher) {
|
|
57
|
+
try {
|
|
58
|
+
const { dispatchers, api, config: effectConfig } = config.createEffectConfig(dispatcher);
|
|
59
|
+
// Создаем модуль эффектов
|
|
60
|
+
effectsModule = new EffectsModule(storageInstance, dispatchers, api, effectConfig);
|
|
61
|
+
// Добавляем эффекты
|
|
62
|
+
if (Array.isArray(config.effects)) {
|
|
63
|
+
config.effects.forEach((effect) => {
|
|
64
|
+
if (effectsModule)
|
|
65
|
+
effectsModule.add(effect);
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
// Запускаем модуль эффектов
|
|
69
|
+
effectsModule.start();
|
|
70
|
+
result.state$ = effectsModule.state$;
|
|
71
|
+
// Добавляем очистку эффектов
|
|
72
|
+
cleanupCallbacks.push(() => {
|
|
73
|
+
if (effectsModule)
|
|
74
|
+
effectsModule.stop();
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
catch (error) {
|
|
78
|
+
console.error('Ошибка создания модуля эффектов:', error);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return result;
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=createSynapse.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createSynapse.js","sourceRoot":"","sources":["../../../src/react/utils/createSynapse.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { ComponentType } from 'react';
|
|
2
|
+
import { IStorage } from '../../core';
|
|
3
|
+
import { createDispatcher, Dispatcher, Effect } from '../../reactive';
|
|
4
|
+
import { Observable } from 'rxjs';
|
|
5
|
+
type DispatchType<D> = D extends {
|
|
6
|
+
dispatch: infer T;
|
|
7
|
+
} ? T : never;
|
|
8
|
+
interface CreateSynapseContextConfig<TStore extends Record<string, any>, TSelectors extends object, TDispatcher extends ReturnType<typeof createDispatcher>, TEffectDispatchersDep extends Record<string, Dispatcher<any, any>>, TEffectApiDep extends Record<string, any>, TEffectConfig extends Record<string, any> = Record<string, never>> {
|
|
9
|
+
createStorageFn: () => Promise<IStorage<TStore>>;
|
|
10
|
+
createSelectorsFn: (storage: IStorage<TStore>) => TSelectors;
|
|
11
|
+
createDispatcherFn: (storage: IStorage<TStore>) => TDispatcher;
|
|
12
|
+
effects?: Effect<TStore, TEffectDispatchersDep, TEffectApiDep, TEffectConfig> | Effect<TStore, TEffectDispatchersDep, TEffectApiDep, TEffectConfig>[];
|
|
13
|
+
createEffectConfig: {
|
|
14
|
+
dispatchers: (storage: IStorage<TStore>, dispatch: DispatchType<TDispatcher>) => TEffectDispatchersDep;
|
|
15
|
+
api: TEffectApiDep;
|
|
16
|
+
config?: TEffectConfig;
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
export declare function createSynapseContext<TStore extends Record<string, any>, TSelectors extends object, TDispatcher extends ReturnType<typeof createDispatcher>, TEffectDispatchersDep extends Record<string, Dispatcher<any, any>>, TEffectApiDep extends Record<string, any>, TEffectConfig extends Record<string, any> = Record<string, never>>(config: CreateSynapseContextConfig<TStore, TSelectors, TDispatcher, TEffectDispatchersDep, TEffectApiDep, TEffectConfig>): {
|
|
20
|
+
contextSynapse: <Props extends {}>(Component: ComponentType<Props>) => ({ contextProps, ...props }: Props & {
|
|
21
|
+
contextProps?: Partial<TStore>;
|
|
22
|
+
}) => import("react/jsx-runtime").JSX.Element | null;
|
|
23
|
+
useSynapseStorage: () => IStorage<TStore>;
|
|
24
|
+
useSynapseActions: () => DispatchType<TDispatcher>;
|
|
25
|
+
useSynapseSelectors: () => TSelectors;
|
|
26
|
+
useSynapseState$: () => Observable<TStore>;
|
|
27
|
+
};
|
|
28
|
+
export {};
|
|
29
|
+
//# sourceMappingURL=createSynapseContext.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createSynapseContext.d.ts","sourceRoot":"","sources":["../../../src/react/utils/createSynapseContext.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAA0D,MAAM,OAAO,CAAC;AAC9F,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,gBAAgB,EAAiB,UAAU,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACrF,OAAO,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAGlC,KAAK,YAAY,CAAC,CAAC,IAAI,CAAC,SAAS;IAAE,QAAQ,EAAE,MAAM,CAAC,CAAA;CAAE,GAAG,CAAC,GAAG,KAAK,CAAC;AAGnE,UAAU,0BAA0B,CACpC,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAChC,UAAU,SAAS,MAAM,EACzB,WAAW,SAAS,UAAU,CAAC,OAAO,gBAAgB,CAAC,EACvD,qBAAqB,SAAS,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,EAClE,aAAa,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACzC,aAAa,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC;IAEjE,eAAe,EAAE,MAAM,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;IACjD,iBAAiB,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,KAAK,UAAU,CAAC;IAC7D,kBAAkB,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,KAAK,WAAW,CAAC;IAC/D,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,qBAAqB,EAAE,aAAa,EAAE,aAAa,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,qBAAqB,EAAE,aAAa,EAAE,aAAa,CAAC,EAAE,CAAC;IACxJ,kBAAkB,EAAE;QAClB,WAAW,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,YAAY,CAAC,WAAW,CAAC,KAAK,qBAAqB,CAAC;QACvG,GAAG,EAAE,aAAa,CAAC;QACnB,MAAM,CAAC,EAAE,aAAa,CAAC;KACxB,CAAC;CACD;AAcD,wBAAgB,oBAAoB,CACpC,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAChC,UAAU,SAAS,MAAM,EACzB,WAAW,SAAS,UAAU,CAAC,OAAO,gBAAgB,CAAC,EACvD,qBAAqB,SAAS,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,EAClE,aAAa,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACzC,aAAa,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,EACjE,MAAM,EAAE,0BAA0B,CACpC,MAAM,EACJ,UAAU,EACV,WAAW,EACX,qBAAqB,EACrB,aAAa,EACf,aAAa,CACZ;qBAsCyB,KAAK,SAAS,EAAE,aAC3B,aAAa,CAAC,KAAK,CAAC,MAEE,4BAA4B,KAAK,GAAG;QAAE,YAAY,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAA;KAAE;;;;;EAyG1G"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { createContext, useContext, useEffect, useRef, useState } from 'react';
|
|
3
|
+
import { EffectsModule } from '../../reactive';
|
|
4
|
+
export function createSynapseContext(config) {
|
|
5
|
+
// Создаем контекст
|
|
6
|
+
const SynapseContext = createContext(null);
|
|
7
|
+
// Хуки для доступа к объектам из контекста
|
|
8
|
+
const useSynapseStorage = () => {
|
|
9
|
+
const context = useContext(SynapseContext);
|
|
10
|
+
if (!context) {
|
|
11
|
+
throw new Error('useSynapseStorage must be used within a contextSynapse component');
|
|
12
|
+
}
|
|
13
|
+
return context.storage;
|
|
14
|
+
};
|
|
15
|
+
const useSynapseActions = () => {
|
|
16
|
+
const context = useContext(SynapseContext);
|
|
17
|
+
if (!context) {
|
|
18
|
+
throw new Error('useSynapseActions must be used within a contextSynapse component');
|
|
19
|
+
}
|
|
20
|
+
return context.actions;
|
|
21
|
+
};
|
|
22
|
+
const useSynapseSelectors = () => {
|
|
23
|
+
const context = useContext(SynapseContext);
|
|
24
|
+
if (!context) {
|
|
25
|
+
throw new Error('useSynapseSelectors must be used within a contextSynapse component');
|
|
26
|
+
}
|
|
27
|
+
return context.selectors;
|
|
28
|
+
};
|
|
29
|
+
const useSynapseState$ = () => {
|
|
30
|
+
const context = useContext(SynapseContext);
|
|
31
|
+
if (!context) {
|
|
32
|
+
throw new Error('useSynapseState$ must be used within a contextSynapse component');
|
|
33
|
+
}
|
|
34
|
+
return context.state$;
|
|
35
|
+
};
|
|
36
|
+
// Функция HOC для обертывания компонентов
|
|
37
|
+
function contextSynapse(Component) {
|
|
38
|
+
return function WrappedComponent({ contextProps, ...props }) {
|
|
39
|
+
const storeRef = useRef(null);
|
|
40
|
+
const [isInitialized, setIsInitialized] = useState(false);
|
|
41
|
+
const effectsModuleRef = useRef(null);
|
|
42
|
+
useEffect(() => {
|
|
43
|
+
let mounted = true;
|
|
44
|
+
const initialize = async () => {
|
|
45
|
+
// 1. Создаем хранилище
|
|
46
|
+
const storage = await config.createStorageFn();
|
|
47
|
+
// Применяем contextProps, если они есть
|
|
48
|
+
if (contextProps && Object.keys(contextProps).length > 0) {
|
|
49
|
+
await storage.update(state => {
|
|
50
|
+
Object.assign(state, contextProps);
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
// 2. Создаем селекторы
|
|
54
|
+
const selectors = config.createSelectorsFn(storage);
|
|
55
|
+
// 3. Создаем диспетчер
|
|
56
|
+
const dispatcher = config.createDispatcherFn(storage);
|
|
57
|
+
// 4. Создаем параметры для модуля эффектов
|
|
58
|
+
const dispatchers = config.createEffectConfig.dispatchers(storage,
|
|
59
|
+
//@ts-ignore
|
|
60
|
+
dispatcher.dispatch);
|
|
61
|
+
// 5. Создаем модуль эффектов
|
|
62
|
+
const effectsModule = new EffectsModule(storage, dispatchers, config.createEffectConfig.api, config.createEffectConfig.config);
|
|
63
|
+
// 6. Добавляем эффекты, если они есть
|
|
64
|
+
if (config.effects) {
|
|
65
|
+
if (Array.isArray(config.effects)) {
|
|
66
|
+
effectsModule.addEffects(config.effects);
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
effectsModule.add(config.effects);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
// 7. Запускаем эффекты
|
|
73
|
+
effectsModule.start();
|
|
74
|
+
effectsModuleRef.current = effectsModule;
|
|
75
|
+
if (mounted) {
|
|
76
|
+
// Сохраняем объекты в ref
|
|
77
|
+
storeRef.current = {
|
|
78
|
+
storage,
|
|
79
|
+
selectors,
|
|
80
|
+
//@ts-ignore
|
|
81
|
+
actions: dispatcher.dispatch,
|
|
82
|
+
state$: effectsModule.state$
|
|
83
|
+
};
|
|
84
|
+
setIsInitialized(true);
|
|
85
|
+
}
|
|
86
|
+
};
|
|
87
|
+
initialize();
|
|
88
|
+
return () => {
|
|
89
|
+
mounted = false;
|
|
90
|
+
// Очистка при размонтировании
|
|
91
|
+
if (effectsModuleRef.current) {
|
|
92
|
+
effectsModuleRef.current.stop();
|
|
93
|
+
effectsModuleRef.current = null;
|
|
94
|
+
}
|
|
95
|
+
};
|
|
96
|
+
}, []);
|
|
97
|
+
if (!isInitialized || !storeRef.current) {
|
|
98
|
+
return null;
|
|
99
|
+
}
|
|
100
|
+
return (_jsx(SynapseContext.Provider, { value: storeRef.current, children: _jsx(Component, { ...props }) }));
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
// Возвращаем только функции и хуки
|
|
104
|
+
return {
|
|
105
|
+
contextSynapse,
|
|
106
|
+
useSynapseStorage,
|
|
107
|
+
useSynapseActions,
|
|
108
|
+
useSynapseSelectors,
|
|
109
|
+
useSynapseState$,
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=createSynapseContext.js.map
|