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,91 @@
|
|
|
1
|
+
export interface Selector<T, R> {
|
|
2
|
+
(state: T): R;
|
|
3
|
+
}
|
|
4
|
+
export interface SelectorOptions<T> {
|
|
5
|
+
equals?: (a: T, b: T) => boolean;
|
|
6
|
+
name?: string;
|
|
7
|
+
}
|
|
8
|
+
export interface Subscriber<T> {
|
|
9
|
+
notify: (value: T) => void | Promise<void>;
|
|
10
|
+
}
|
|
11
|
+
export interface SelectorAPI<T> {
|
|
12
|
+
select: () => Promise<T>;
|
|
13
|
+
subscribe: (subscriber: Subscriber<T>) => VoidFunction;
|
|
14
|
+
getId: () => string;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Интерфейс для модуля селекторов
|
|
18
|
+
* Определяет контракт для работы с селекторами, который должен реализовывать SelectorModule
|
|
19
|
+
*/
|
|
20
|
+
export interface ISelectorModule<TStore extends Record<string, any>> {
|
|
21
|
+
/**
|
|
22
|
+
* Имя связанного хранилища
|
|
23
|
+
*/
|
|
24
|
+
readonly storageName: string;
|
|
25
|
+
/**
|
|
26
|
+
* Создает простой селектор на основе функции выбора
|
|
27
|
+
*
|
|
28
|
+
* @param selector Функция, извлекающая данные из состояния
|
|
29
|
+
* @param options Опции селектора
|
|
30
|
+
* @returns API селектора
|
|
31
|
+
*
|
|
32
|
+
* @example
|
|
33
|
+
* const isActive = selectorModule.createSelector(
|
|
34
|
+
* (state) => state.user.isActive,
|
|
35
|
+
* { name: 'userIsActive' }
|
|
36
|
+
* );
|
|
37
|
+
*/
|
|
38
|
+
createSelector<T>(selector: Selector<TStore, T>, options?: SelectorOptions<T>): SelectorAPI<T>;
|
|
39
|
+
/**
|
|
40
|
+
* Создает комбинированный селектор на основе других селекторов
|
|
41
|
+
*
|
|
42
|
+
* @param dependencies Массив селекторов, от которых зависит новый селектор
|
|
43
|
+
* @param resultFn Функция, комбинирующая результаты зависимостей
|
|
44
|
+
* @param options Опции селектора
|
|
45
|
+
* @returns API селектора
|
|
46
|
+
*
|
|
47
|
+
* @example
|
|
48
|
+
* const userWithStatus = selectorModule.createSelector(
|
|
49
|
+
* [userSelector, statusSelector],
|
|
50
|
+
* (user, status) => ({ ...user, status }),
|
|
51
|
+
* { name: 'userWithStatus' }
|
|
52
|
+
* );
|
|
53
|
+
*/
|
|
54
|
+
createSelector<Deps extends unknown[], T>(dependencies: {
|
|
55
|
+
[K in keyof Deps]: SelectorAPI<Deps[K]>;
|
|
56
|
+
}, resultFn: (...args: Deps) => T, options?: SelectorOptions<T>): SelectorAPI<T>;
|
|
57
|
+
/**
|
|
58
|
+
* Освобождает ресурсы, связанные с модулем селекторов
|
|
59
|
+
*/
|
|
60
|
+
destroy(): void;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Интерфейс для фабрики селекторов
|
|
64
|
+
* Позволяет создавать набор связанных селекторов
|
|
65
|
+
*/
|
|
66
|
+
export interface ISelectorCreator<TStore extends Record<string, any>, TSelectors, TExternalSelectors = Record<string, any>> {
|
|
67
|
+
/**
|
|
68
|
+
* Создает набор селекторов
|
|
69
|
+
*
|
|
70
|
+
* @param selectorModule Модуль селекторов
|
|
71
|
+
* @param externalSelectors Внешние селекторы (опционально)
|
|
72
|
+
* @returns Объект с селекторами
|
|
73
|
+
*
|
|
74
|
+
* @example
|
|
75
|
+
* const createUserSelectors: ISelectorCreator<UserStore, UserSelectors> =
|
|
76
|
+
* (selectorModule, externalSelectors) => {
|
|
77
|
+
* const isActive = selectorModule.createSelector(
|
|
78
|
+
* (state) => state.user.isActive
|
|
79
|
+
* );
|
|
80
|
+
*
|
|
81
|
+
* return { isActive };
|
|
82
|
+
* };
|
|
83
|
+
*/
|
|
84
|
+
(selectorModule: ISelectorModule<TStore>, externalSelectors?: TExternalSelectors): TSelectors;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Тип для функции, создающей селекторы
|
|
88
|
+
* Более простая версия ISelectorCreator, если не нужен полный интерфейс
|
|
89
|
+
*/
|
|
90
|
+
export type SelectorCreatorFunction<TStore extends Record<string, any> = Record<string, any>, TSelectors = any, TExternalSelectors = Record<string, any>> = (selectorModule: ISelectorModule<TStore>, externalSelectors?: TExternalSelectors) => TSelectors;
|
|
91
|
+
//# sourceMappingURL=selector.interface.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"selector.interface.d.ts","sourceRoot":"","sources":["../../../src/core/selector/selector.interface.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,QAAQ,CAAC,CAAC,EAAE,CAAC;IAC5B,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAA;CACd;AAED,MAAM,WAAW,eAAe,CAAC,CAAC;IAChC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,OAAO,CAAA;IAChC,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,UAAU,CAAC,CAAC;IAC3B,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CAC3C;AAED,MAAM,WAAW,WAAW,CAAC,CAAC;IAC5B,MAAM,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,CAAA;IACxB,SAAS,EAAE,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,YAAY,CAAA;IACtD,KAAK,EAAE,MAAM,MAAM,CAAA;CACpB;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe,CAAC,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IACjE;;OAEG;IACH,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAE5B;;;;;;;;;;;;OAYG;IACH,cAAc,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAA;IAE9F;;;;;;;;;;;;;;OAcG;IACH,cAAc,CAAC,IAAI,SAAS,OAAO,EAAE,EAAE,CAAC,EAAE,YAAY,EAAE;SAAG,CAAC,IAAI,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KAAE,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,IAAI,KAAK,CAAC,EAAE,OAAO,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAA;IAElL;;OAEG;IACH,OAAO,IAAI,IAAI,CAAA;CAChB;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB,CAAC,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,UAAU,EAAE,kBAAkB,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IACxH;;;;;;;;;;;;;;;;OAgBG;IACH,CAAC,cAAc,EAAE,eAAe,CAAC,MAAM,CAAC,EAAE,iBAAiB,CAAC,EAAE,kBAAkB,GAAG,UAAU,CAAA;CAC9F;AAED;;;GAGG;AACH,MAAM,MAAM,uBAAuB,CAAC,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,UAAU,GAAG,GAAG,EAAE,kBAAkB,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,CAC1J,cAAc,EAAE,eAAe,CAAC,MAAM,CAAC,EACvC,iBAAiB,CAAC,EAAE,kBAAkB,KACnC,UAAU,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"selector.interface.js","sourceRoot":"","sources":["../../../src/core/selector/selector.interface.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { ILogger, IStorage } from '../storage';
|
|
2
|
+
import { ISelectorModule, Selector, SelectorAPI, SelectorOptions } from './selector.interface';
|
|
3
|
+
export declare class SelectorModule<S extends Record<string, any>> implements ISelectorModule<S> {
|
|
4
|
+
private readonly source;
|
|
5
|
+
private readonly logger?;
|
|
6
|
+
storageName: string;
|
|
7
|
+
private subscriptions;
|
|
8
|
+
private cachedState?;
|
|
9
|
+
private localSelectorCache;
|
|
10
|
+
private batchUpdateInProgress;
|
|
11
|
+
private pendingUpdates;
|
|
12
|
+
constructor(source: IStorage<S>, logger?: ILogger | undefined);
|
|
13
|
+
/**
|
|
14
|
+
* Генерирует имя для селектора на основе его типа и функции
|
|
15
|
+
*/
|
|
16
|
+
private generateName;
|
|
17
|
+
/**
|
|
18
|
+
* Обрабатывает отложенные обновления, чтобы избежать каскадных уведомлений
|
|
19
|
+
*/
|
|
20
|
+
private processPendingUpdates;
|
|
21
|
+
createSelector<T>(selector: Selector<S, T>, options?: SelectorOptions<T>): SelectorAPI<T>;
|
|
22
|
+
createSelector<Deps extends unknown[], T>(dependencies: {
|
|
23
|
+
[K in keyof Deps]: SelectorAPI<Deps[K]>;
|
|
24
|
+
}, resultFn: (...args: Deps) => T, options?: SelectorOptions<T>): SelectorAPI<T>;
|
|
25
|
+
private createSimpleSelector;
|
|
26
|
+
private createCombinedSelector;
|
|
27
|
+
destroy(): void;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=selector.module.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"selector.module.d.ts","sourceRoot":"","sources":["../../../src/core/selector/selector.module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAC9C,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,WAAW,EAAE,eAAe,EAAc,MAAM,sBAAsB,CAAA;AAuO1G,qBAAa,cAAc,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAE,YAAW,eAAe,CAAC,CAAC,CAAC;IAoBpF,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;IApB1B,WAAW,EAAE,MAAM,CAAA;IAEnB,OAAO,CAAC,aAAa,CAA+C;IACpE,OAAO,CAAC,WAAW,CAAC,CAAG;IAEvB,OAAO,CAAC,kBAAkB,CAOvB;IAGH,OAAO,CAAC,qBAAqB,CAAQ;IACrC,OAAO,CAAC,cAAc,CAAoB;gBAGvB,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,EACnB,MAAM,CAAC,EAAE,OAAO,YAAA;IAiBnC;;OAEG;IACH,OAAO,CAAC,YAAY;IAkBpB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IA0C7B,cAAc,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC;IACzF,cAAc,CAAC,IAAI,SAAS,OAAO,EAAE,EAAE,CAAC,EAAE,YAAY,EAAE;SAAG,CAAC,IAAI,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KAAE,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,IAAI,KAAK,CAAC,EAAE,OAAO,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC;IAiFlL,OAAO,CAAC,oBAAoB;IAwD5B,OAAO,CAAC,sBAAsB;IA2D9B,OAAO,IAAI,IAAI;CA8ChB"}
|
|
@@ -0,0 +1,467 @@
|
|
|
1
|
+
// Отладка: управление через параметр DEBUG
|
|
2
|
+
const DEBUG = false;
|
|
3
|
+
// Глобальный кеш селекторов (используем имя селектора как ключ)
|
|
4
|
+
const GLOBAL_SELECTOR_CACHE = new Map();
|
|
5
|
+
/**
|
|
6
|
+
* Получает короткий хеш строки для добавления уникальности к имени селектора
|
|
7
|
+
* @param str Строка для хеширования
|
|
8
|
+
* @returns Короткий хеш
|
|
9
|
+
*/
|
|
10
|
+
function getStringHash(str) {
|
|
11
|
+
let hash = 0;
|
|
12
|
+
if (str.length === 0)
|
|
13
|
+
return hash.toString(36);
|
|
14
|
+
for (let i = 0; i < str.length; i++) {
|
|
15
|
+
const char = str.charCodeAt(i);
|
|
16
|
+
hash = (hash << 5) - hash + char;
|
|
17
|
+
hash = hash & hash;
|
|
18
|
+
}
|
|
19
|
+
// Преобразуем в короткую строку в формате base36
|
|
20
|
+
return Math.abs(hash).toString(36).substring(0, 6);
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Интеллектуальное сравнение объектов по структуре
|
|
24
|
+
* Сравнивает примитивы через ===, объекты - рекурсивно по структуре
|
|
25
|
+
*/
|
|
26
|
+
function defaultEquals(a, b) {
|
|
27
|
+
// Проверяем, одинаковые ли объекты по ссылке
|
|
28
|
+
if (a === b)
|
|
29
|
+
return true;
|
|
30
|
+
// Если один из объектов null или undefined, но не оба одновременно
|
|
31
|
+
if (a == null || b == null)
|
|
32
|
+
return false;
|
|
33
|
+
// Если это не объекты или функции, значит это примитивы
|
|
34
|
+
if (typeof a !== 'object' && typeof a !== 'function' && typeof b !== 'object' && typeof b !== 'function') {
|
|
35
|
+
return a === b;
|
|
36
|
+
}
|
|
37
|
+
// Если это разные типы
|
|
38
|
+
if (typeof a !== typeof b)
|
|
39
|
+
return false;
|
|
40
|
+
// Если это даты
|
|
41
|
+
if (a instanceof Date && b instanceof Date) {
|
|
42
|
+
return a.getTime() === b.getTime();
|
|
43
|
+
}
|
|
44
|
+
// Если это массивы
|
|
45
|
+
if (Array.isArray(a) && Array.isArray(b)) {
|
|
46
|
+
if (a.length !== b.length)
|
|
47
|
+
return false;
|
|
48
|
+
for (let i = 0; i < a.length; i++) {
|
|
49
|
+
if (!defaultEquals(a[i], b[i]))
|
|
50
|
+
return false;
|
|
51
|
+
}
|
|
52
|
+
return true;
|
|
53
|
+
}
|
|
54
|
+
// Обычные объекты
|
|
55
|
+
if (typeof a === 'object' && typeof b === 'object') {
|
|
56
|
+
const keysA = Object.keys(a);
|
|
57
|
+
const keysB = Object.keys(b);
|
|
58
|
+
if (keysA.length !== keysB.length)
|
|
59
|
+
return false;
|
|
60
|
+
// Проверяем все ключи в a
|
|
61
|
+
return keysA.every((key) => {
|
|
62
|
+
if (!Object.prototype.hasOwnProperty.call(b, key))
|
|
63
|
+
return false;
|
|
64
|
+
return defaultEquals(a[key], b[key]);
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
// По умолчанию считаем объекты разными
|
|
68
|
+
return false;
|
|
69
|
+
}
|
|
70
|
+
// Мемоизирует функцию селектора для оптимизации
|
|
71
|
+
function memoizeSelector(selectorFn, equals = defaultEquals) {
|
|
72
|
+
let lastState;
|
|
73
|
+
let lastResult;
|
|
74
|
+
let hasResult = false;
|
|
75
|
+
return function memoized(state) {
|
|
76
|
+
// Если это первый вызов или состояние изменилось
|
|
77
|
+
if (!hasResult || lastState !== state) {
|
|
78
|
+
const newResult = selectorFn(state);
|
|
79
|
+
// Проверяем, изменился ли результат
|
|
80
|
+
if (!hasResult || !equals(newResult, lastResult)) {
|
|
81
|
+
lastResult = newResult;
|
|
82
|
+
}
|
|
83
|
+
lastState = state;
|
|
84
|
+
hasResult = true;
|
|
85
|
+
}
|
|
86
|
+
return lastResult;
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
class SelectorSubscription {
|
|
90
|
+
name;
|
|
91
|
+
equals;
|
|
92
|
+
logger;
|
|
93
|
+
id;
|
|
94
|
+
subscribers = new Set();
|
|
95
|
+
lastValue;
|
|
96
|
+
memoizedGetState;
|
|
97
|
+
constructor(name, getState, equals = defaultEquals, logger) {
|
|
98
|
+
this.name = name;
|
|
99
|
+
this.equals = equals;
|
|
100
|
+
this.logger = logger;
|
|
101
|
+
this.id = name;
|
|
102
|
+
// Создаем мемоизированную версию getState
|
|
103
|
+
this.memoizedGetState = this.createMemoizedGetState(getState);
|
|
104
|
+
if (DEBUG) {
|
|
105
|
+
console.log(`[${this.id}] Создан new SelectorSubscription`);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
// Создает мемоизированную версию getState с кешированием результата
|
|
109
|
+
createMemoizedGetState(getState) {
|
|
110
|
+
let lastPromise = null;
|
|
111
|
+
let isExecuting = false;
|
|
112
|
+
return async () => {
|
|
113
|
+
// Если уже выполняется запрос, возвращаем его
|
|
114
|
+
if (isExecuting && lastPromise) {
|
|
115
|
+
return lastPromise;
|
|
116
|
+
}
|
|
117
|
+
isExecuting = true;
|
|
118
|
+
try {
|
|
119
|
+
lastPromise = getState();
|
|
120
|
+
return await lastPromise;
|
|
121
|
+
}
|
|
122
|
+
finally {
|
|
123
|
+
isExecuting = false;
|
|
124
|
+
}
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
async notify() {
|
|
128
|
+
try {
|
|
129
|
+
const newValue = await this.memoizedGetState();
|
|
130
|
+
// Проверка на изменение значения с использованием функции сравнения
|
|
131
|
+
if (this.lastValue === undefined || !this.equals(newValue, this.lastValue)) {
|
|
132
|
+
if (DEBUG) {
|
|
133
|
+
console.log(`[${this.id}] Значение изменилось, notify()`, {
|
|
134
|
+
old: this.lastValue,
|
|
135
|
+
new: newValue,
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
this.lastValue = newValue;
|
|
139
|
+
const promises = Array.from(this.subscribers).map(async (subscriber) => {
|
|
140
|
+
try {
|
|
141
|
+
await subscriber.notify(newValue);
|
|
142
|
+
}
|
|
143
|
+
catch (error) {
|
|
144
|
+
this.logger?.error(`[${this.id}] Ошибка в уведомлении подписчика`, { error });
|
|
145
|
+
}
|
|
146
|
+
});
|
|
147
|
+
await Promise.all(promises);
|
|
148
|
+
}
|
|
149
|
+
else if (DEBUG) {
|
|
150
|
+
console.log(`[${this.id}] Значение не изменилось in notify(), пропуск уведомления`);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
catch (error) {
|
|
154
|
+
this.logger?.error(`[${this.id}] Ошибка в notify()`, { error });
|
|
155
|
+
throw error;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
subscribe(subscriber) {
|
|
159
|
+
if (DEBUG) {
|
|
160
|
+
console.log(`[${this.id}] Добавлено новый подписчик, всего: ${this.subscribers.size + 1}`);
|
|
161
|
+
}
|
|
162
|
+
this.subscribers.add(subscriber);
|
|
163
|
+
// Отправляем текущее значение, если оно есть
|
|
164
|
+
if (this.lastValue !== undefined) {
|
|
165
|
+
// Используем микротаск для асинхронности
|
|
166
|
+
Promise.resolve().then(() => {
|
|
167
|
+
try {
|
|
168
|
+
subscriber.notify(this.lastValue);
|
|
169
|
+
}
|
|
170
|
+
catch (error) {
|
|
171
|
+
this.logger?.error(`[${this.id}] Ошибка в первоначальном уведомлении`, { error });
|
|
172
|
+
}
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
else {
|
|
176
|
+
// Если значения нет - запрашиваем его
|
|
177
|
+
this.notify().catch((error) => {
|
|
178
|
+
this.logger?.error(`[${this.id}] Ошибка в первоначальном уведомлении`, { error });
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
return () => {
|
|
182
|
+
if (DEBUG) {
|
|
183
|
+
console.log(`[${this.id}] Подписчик удален, осталось: ${this.subscribers.size - 1}`);
|
|
184
|
+
}
|
|
185
|
+
this.subscribers.delete(subscriber);
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
cleanup() {
|
|
189
|
+
if (DEBUG) {
|
|
190
|
+
console.log(`[${this.id}] Очистка подписки, было ${this.subscribers.size} подписчиков`);
|
|
191
|
+
}
|
|
192
|
+
this.subscribers.clear();
|
|
193
|
+
this.lastValue = undefined;
|
|
194
|
+
}
|
|
195
|
+
getId() {
|
|
196
|
+
return this.id;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
export class SelectorModule {
|
|
200
|
+
source;
|
|
201
|
+
logger;
|
|
202
|
+
storageName;
|
|
203
|
+
subscriptions = new Map();
|
|
204
|
+
cachedState;
|
|
205
|
+
localSelectorCache = new Map();
|
|
206
|
+
// Флаг для батчинга обновлений
|
|
207
|
+
batchUpdateInProgress = false;
|
|
208
|
+
pendingUpdates = new Set();
|
|
209
|
+
constructor(source, logger) {
|
|
210
|
+
this.source = source;
|
|
211
|
+
this.logger = logger;
|
|
212
|
+
this.storageName = source.name;
|
|
213
|
+
if (DEBUG) {
|
|
214
|
+
console.log(`Создан SelectorModule для хранилища: ${this.storageName}`);
|
|
215
|
+
}
|
|
216
|
+
// Сразу получаем начальное состояние для кеширования
|
|
217
|
+
this.source.getState().then((state) => {
|
|
218
|
+
this.cachedState = state;
|
|
219
|
+
if (DEBUG) {
|
|
220
|
+
console.log(`Кэшированное начальное состояние для ${this.storageName}`);
|
|
221
|
+
}
|
|
222
|
+
});
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Генерирует имя для селектора на основе его типа и функции
|
|
226
|
+
*/
|
|
227
|
+
generateName(isSimpleSelector, selectorOrDeps, resultFnOrOptions) {
|
|
228
|
+
const type = isSimpleSelector ? 'simple' : 'combined';
|
|
229
|
+
let hash = '';
|
|
230
|
+
if (isSimpleSelector) {
|
|
231
|
+
// Для простого селектора генерируем хеш на основе функции селектора
|
|
232
|
+
const selectorStr = selectorOrDeps.toString();
|
|
233
|
+
hash = getStringHash(selectorStr);
|
|
234
|
+
}
|
|
235
|
+
else {
|
|
236
|
+
// Для комбинированного селектора генерируем хеш на основе ID зависимостей и функции результата
|
|
237
|
+
const depsIds = selectorOrDeps.map((s) => s.getId()).join('_');
|
|
238
|
+
const resultFnStr = resultFnOrOptions.toString();
|
|
239
|
+
hash = getStringHash(depsIds + resultFnStr);
|
|
240
|
+
}
|
|
241
|
+
return `${this.storageName}_${type}_${hash}`;
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* Обрабатывает отложенные обновления, чтобы избежать каскадных уведомлений
|
|
245
|
+
*/
|
|
246
|
+
processPendingUpdates() {
|
|
247
|
+
if (this.pendingUpdates.size === 0 || this.batchUpdateInProgress)
|
|
248
|
+
return;
|
|
249
|
+
this.batchUpdateInProgress = true;
|
|
250
|
+
// Используем setTimeout для обеспечения асинхронности и батчинга обновлений
|
|
251
|
+
setTimeout(async () => {
|
|
252
|
+
try {
|
|
253
|
+
// Копируем список селекторов для обновления
|
|
254
|
+
const subscriptionsToUpdate = Array.from(this.pendingUpdates);
|
|
255
|
+
this.pendingUpdates.clear();
|
|
256
|
+
// Обновляем состояние один раз
|
|
257
|
+
this.cachedState = await this.source.getState();
|
|
258
|
+
// Обновляем все ожидающие селекторы
|
|
259
|
+
const updatePromises = subscriptionsToUpdate.map(async (id) => {
|
|
260
|
+
const subscription = this.subscriptions.get(id);
|
|
261
|
+
if (subscription) {
|
|
262
|
+
try {
|
|
263
|
+
return await subscription.notify();
|
|
264
|
+
}
|
|
265
|
+
catch (error) {
|
|
266
|
+
this.logger?.error(`Ошибка уведомления подписчика ${id}`, { error });
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
return Promise.resolve();
|
|
270
|
+
});
|
|
271
|
+
await Promise.all(updatePromises);
|
|
272
|
+
}
|
|
273
|
+
catch (error) {
|
|
274
|
+
this.logger?.error('Ошибка обработки ожидающих обновлений', { error });
|
|
275
|
+
}
|
|
276
|
+
finally {
|
|
277
|
+
this.batchUpdateInProgress = false;
|
|
278
|
+
// Если появились новые обновления во время обработки, запускаем процесс снова
|
|
279
|
+
if (this.pendingUpdates.size > 0) {
|
|
280
|
+
this.processPendingUpdates();
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
}, 0);
|
|
284
|
+
}
|
|
285
|
+
createSelector(selectorOrDeps, resultFnOrOptions, optionsArg) {
|
|
286
|
+
// Определяем, какую перегрузку используем
|
|
287
|
+
const isSimpleSelector = !Array.isArray(selectorOrDeps);
|
|
288
|
+
// Извлекаем options
|
|
289
|
+
const options = isSimpleSelector ? resultFnOrOptions || {} : optionsArg || {};
|
|
290
|
+
// Используем предоставленное имя или генерируем новое
|
|
291
|
+
const selectorId = options.name || this.generateName(isSimpleSelector, selectorOrDeps, isSimpleSelector ? undefined : resultFnOrOptions);
|
|
292
|
+
// Проверяем локальный кеш
|
|
293
|
+
if (this.localSelectorCache.has(selectorId)) {
|
|
294
|
+
if (DEBUG) {
|
|
295
|
+
console.log(`[${this.storageName}] Reusing cached selector: ${selectorId}`);
|
|
296
|
+
}
|
|
297
|
+
return this.localSelectorCache.get(selectorId).api;
|
|
298
|
+
}
|
|
299
|
+
// Проверяем глобальный кеш
|
|
300
|
+
if (GLOBAL_SELECTOR_CACHE.has(selectorId)) {
|
|
301
|
+
const cached = GLOBAL_SELECTOR_CACHE.get(selectorId);
|
|
302
|
+
cached.refCount++;
|
|
303
|
+
if (DEBUG) {
|
|
304
|
+
console.log(`[${this.storageName}] Повторное использование глобального кэшированного селектора: ${selectorId}, refCount: ${cached.refCount}`);
|
|
305
|
+
}
|
|
306
|
+
return cached.api;
|
|
307
|
+
}
|
|
308
|
+
// Создаем новый селектор
|
|
309
|
+
let result;
|
|
310
|
+
let dependencies;
|
|
311
|
+
let unsubscribeFunctions = [];
|
|
312
|
+
if (isSimpleSelector) {
|
|
313
|
+
// Простой селектор с мемоизацией
|
|
314
|
+
const memoized = memoizeSelector(selectorOrDeps, options.equals || defaultEquals);
|
|
315
|
+
const created = this.createSimpleSelector(memoized, { ...options, name: selectorId, equals: options.equals || defaultEquals });
|
|
316
|
+
result = created.api;
|
|
317
|
+
unsubscribeFunctions = created.unsubscribeFunctions;
|
|
318
|
+
}
|
|
319
|
+
else {
|
|
320
|
+
// Комбинированный селектор
|
|
321
|
+
dependencies = selectorOrDeps;
|
|
322
|
+
const created = this.createCombinedSelector(dependencies, resultFnOrOptions, {
|
|
323
|
+
...options,
|
|
324
|
+
name: selectorId,
|
|
325
|
+
equals: options.equals || defaultEquals,
|
|
326
|
+
});
|
|
327
|
+
result = created.api;
|
|
328
|
+
unsubscribeFunctions = created.unsubscribeFunctions;
|
|
329
|
+
}
|
|
330
|
+
// Сохраняем в кеши
|
|
331
|
+
this.localSelectorCache.set(selectorId, {
|
|
332
|
+
api: result,
|
|
333
|
+
dependencies,
|
|
334
|
+
unsubscribeFunctions,
|
|
335
|
+
});
|
|
336
|
+
GLOBAL_SELECTOR_CACHE.set(selectorId, {
|
|
337
|
+
api: result,
|
|
338
|
+
refCount: 1,
|
|
339
|
+
unsubscribeFunctions,
|
|
340
|
+
});
|
|
341
|
+
if (DEBUG) {
|
|
342
|
+
console.log(`[${this.storageName}] Создан новый селектор: ${selectorId}`);
|
|
343
|
+
}
|
|
344
|
+
return result;
|
|
345
|
+
}
|
|
346
|
+
createSimpleSelector(selector, options) {
|
|
347
|
+
if (DEBUG) {
|
|
348
|
+
console.log(`[${this.storageName}] Создан простой селектор: ${options.name}`);
|
|
349
|
+
}
|
|
350
|
+
// Функция для получения данных
|
|
351
|
+
const getState = async () => {
|
|
352
|
+
// Используем кешированное состояние, если оно доступно
|
|
353
|
+
if (this.cachedState) {
|
|
354
|
+
return selector(this.cachedState);
|
|
355
|
+
}
|
|
356
|
+
// Иначе получаем его из хранилища
|
|
357
|
+
const state = await this.source.getState();
|
|
358
|
+
this.cachedState = state; // Обновляем кеш
|
|
359
|
+
return selector(state);
|
|
360
|
+
};
|
|
361
|
+
const subscription = new SelectorSubscription(options.name, getState, options.equals || defaultEquals, this.logger);
|
|
362
|
+
const id = subscription.getId();
|
|
363
|
+
this.subscriptions.set(id, subscription);
|
|
364
|
+
// Подписка на обновления хранилища с батчингом
|
|
365
|
+
const unsubscribeFromStorage = this.source.subscribeToAll(async (event) => {
|
|
366
|
+
if (event?.type === 'storage:update') {
|
|
367
|
+
if (DEBUG) {
|
|
368
|
+
console.log(`[${id}] Получено событие обновления хранилища`);
|
|
369
|
+
}
|
|
370
|
+
// Добавляем селектор в список ожидающих обновления
|
|
371
|
+
this.pendingUpdates.add(id);
|
|
372
|
+
this.processPendingUpdates();
|
|
373
|
+
}
|
|
374
|
+
});
|
|
375
|
+
const unsubscribeFunctions = [unsubscribeFromStorage];
|
|
376
|
+
return {
|
|
377
|
+
api: {
|
|
378
|
+
select: () => getState(),
|
|
379
|
+
subscribe: (subscriber) => {
|
|
380
|
+
return subscription.subscribe(subscriber);
|
|
381
|
+
},
|
|
382
|
+
getId: () => id,
|
|
383
|
+
},
|
|
384
|
+
unsubscribeFunctions,
|
|
385
|
+
};
|
|
386
|
+
}
|
|
387
|
+
createCombinedSelector(selectors, resultFn, options) {
|
|
388
|
+
// Мемоизируем функцию для более эффективного вычисления
|
|
389
|
+
const memoizedResultFn = memoizeSelector((args) => resultFn(...args), options.equals || defaultEquals);
|
|
390
|
+
const getState = async () => {
|
|
391
|
+
const values = await Promise.all(selectors.map((s) => s.select()));
|
|
392
|
+
return memoizedResultFn(values);
|
|
393
|
+
};
|
|
394
|
+
const subscription = new SelectorSubscription(options.name, getState, options.equals || defaultEquals, this.logger);
|
|
395
|
+
const id = subscription.getId();
|
|
396
|
+
this.subscriptions.set(id, subscription);
|
|
397
|
+
// Создаем подписки на зависимости с дебаунсингом
|
|
398
|
+
let debounceTimer = null;
|
|
399
|
+
const triggerUpdate = () => {
|
|
400
|
+
// Очищаем предыдущий таймер
|
|
401
|
+
if (debounceTimer !== null) {
|
|
402
|
+
clearTimeout(debounceTimer);
|
|
403
|
+
}
|
|
404
|
+
// Устанавливаем новый таймер для дебаунсинга
|
|
405
|
+
debounceTimer = setTimeout(() => {
|
|
406
|
+
debounceTimer = null;
|
|
407
|
+
// Вызываем уведомление только после завершения дебаунса
|
|
408
|
+
subscription.notify().catch((error) => this.logger?.error(`[${id}] Ошибка в объединенном уведомлении:`, { error }));
|
|
409
|
+
}, 10); // Короткая задержка для дебаунсинга
|
|
410
|
+
};
|
|
411
|
+
const unsubscribeFunctions = selectors.map((selector) => selector.subscribe({
|
|
412
|
+
notify: () => {
|
|
413
|
+
triggerUpdate();
|
|
414
|
+
},
|
|
415
|
+
}));
|
|
416
|
+
return {
|
|
417
|
+
api: {
|
|
418
|
+
select: () => getState(),
|
|
419
|
+
subscribe: (subscriber) => {
|
|
420
|
+
return subscription.subscribe(subscriber);
|
|
421
|
+
},
|
|
422
|
+
getId: () => id,
|
|
423
|
+
},
|
|
424
|
+
unsubscribeFunctions,
|
|
425
|
+
};
|
|
426
|
+
}
|
|
427
|
+
destroy() {
|
|
428
|
+
if (DEBUG) {
|
|
429
|
+
console.log(`[${this.storageName}] Началось уничтожение SelectorModule`);
|
|
430
|
+
}
|
|
431
|
+
// Очищаем все подписки
|
|
432
|
+
this.subscriptions.forEach((sub) => sub.cleanup());
|
|
433
|
+
this.subscriptions.clear();
|
|
434
|
+
// Очищаем кеш состояния
|
|
435
|
+
this.cachedState = undefined;
|
|
436
|
+
// Очищаем список ожидающих обновлений
|
|
437
|
+
this.pendingUpdates.clear();
|
|
438
|
+
// Очищаем подписки из локального кеша
|
|
439
|
+
this.localSelectorCache.forEach((cached) => {
|
|
440
|
+
cached.unsubscribeFunctions.forEach((unsub) => unsub());
|
|
441
|
+
});
|
|
442
|
+
// Собираем ключи для глобального кеша
|
|
443
|
+
const keysToCheck = new Set();
|
|
444
|
+
this.localSelectorCache.forEach((_, key) => {
|
|
445
|
+
keysToCheck.add(key);
|
|
446
|
+
});
|
|
447
|
+
this.localSelectorCache.clear();
|
|
448
|
+
// Уменьшаем счетчики ссылок в глобальном кеше
|
|
449
|
+
keysToCheck.forEach((key) => {
|
|
450
|
+
const globalCached = GLOBAL_SELECTOR_CACHE.get(key);
|
|
451
|
+
if (globalCached) {
|
|
452
|
+
globalCached.refCount--;
|
|
453
|
+
if (globalCached.refCount <= 0) {
|
|
454
|
+
globalCached.unsubscribeFunctions.forEach((unsub) => unsub());
|
|
455
|
+
GLOBAL_SELECTOR_CACHE.delete(key);
|
|
456
|
+
if (DEBUG) {
|
|
457
|
+
console.log(`[${this.storageName}] Удален селектор из глобального кэша: ${key}`);
|
|
458
|
+
}
|
|
459
|
+
}
|
|
460
|
+
}
|
|
461
|
+
});
|
|
462
|
+
if (DEBUG) {
|
|
463
|
+
console.log(`[${this.storageName}] Уничтожен`);
|
|
464
|
+
}
|
|
465
|
+
}
|
|
466
|
+
}
|
|
467
|
+
//# sourceMappingURL=selector.module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"selector.module.js","sourceRoot":"","sources":["../../../src/core/selector/selector.module.ts"],"names":[],"mappings":"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"}
|