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,253 @@
|
|
|
1
|
+
import { createUniqueId, headersToObject } from '../utils/api-helpers';
|
|
2
|
+
import { createHeaderContext } from '../utils/create-header-context';
|
|
3
|
+
import { createPrepareHeaders, prepareRequestHeaders } from '../utils/endpoint-headers';
|
|
4
|
+
import { fetchBaseQuery } from '../utils/fetch-base-query';
|
|
5
|
+
import { getCacheableHeaders } from '../utils/get-cacheable-headers';
|
|
6
|
+
export class EndpointClass {
|
|
7
|
+
name;
|
|
8
|
+
queryStorage;
|
|
9
|
+
configCurrentEndpoint;
|
|
10
|
+
cacheableHeaderKeys;
|
|
11
|
+
globalCacheConfig;
|
|
12
|
+
baseQueryConfig;
|
|
13
|
+
endpointSubscribers = new Set();
|
|
14
|
+
/** Сколько раз был вызван метод request */
|
|
15
|
+
fetchCounts = 0;
|
|
16
|
+
meta = {
|
|
17
|
+
cache: false,
|
|
18
|
+
invalidatesTags: [],
|
|
19
|
+
name: '',
|
|
20
|
+
tags: [],
|
|
21
|
+
};
|
|
22
|
+
queryFunction;
|
|
23
|
+
/** Массив заголовков, которые нужно включить в ключ кэширования */
|
|
24
|
+
cacheableHeaders;
|
|
25
|
+
prepareHeaders;
|
|
26
|
+
constructor(name, queryStorage, configCurrentEndpoint, cacheableHeaderKeys, globalCacheConfig, baseQueryConfig) {
|
|
27
|
+
this.name = name;
|
|
28
|
+
this.queryStorage = queryStorage;
|
|
29
|
+
this.configCurrentEndpoint = configCurrentEndpoint;
|
|
30
|
+
this.cacheableHeaderKeys = cacheableHeaderKeys;
|
|
31
|
+
this.globalCacheConfig = globalCacheConfig;
|
|
32
|
+
this.baseQueryConfig = baseQueryConfig;
|
|
33
|
+
// 1. Создаем функцию подготовки заголовков
|
|
34
|
+
this.prepareHeaders = createPrepareHeaders(baseQueryConfig.prepareHeaders, configCurrentEndpoint.prepareHeaders);
|
|
35
|
+
// 2. Создаем функцию исполнения запроса
|
|
36
|
+
this.queryFunction = fetchBaseQuery({
|
|
37
|
+
baseUrl: baseQueryConfig.baseUrl,
|
|
38
|
+
fetchFn: baseQueryConfig.fetchFn,
|
|
39
|
+
timeout: baseQueryConfig.timeout,
|
|
40
|
+
credentials: baseQueryConfig.credentials,
|
|
41
|
+
});
|
|
42
|
+
// 3. Создаем массив тех заголовков, которые нужно включить в ключ кэширования
|
|
43
|
+
this.cacheableHeaders = [...(cacheableHeaderKeys || []), ...(configCurrentEndpoint.includeCacheableHeaderKeys || [])].filter((key) => !configCurrentEndpoint.excludeCacheableHeaderKeys?.includes(key));
|
|
44
|
+
// 4. Сохраняем информацию в meta
|
|
45
|
+
this.meta.name = name;
|
|
46
|
+
this.meta.tags = configCurrentEndpoint.tags ?? this.meta.tags;
|
|
47
|
+
this.meta.invalidatesTags = configCurrentEndpoint.invalidatesTags ?? this.meta.invalidatesTags;
|
|
48
|
+
this.meta.cache = this.queryStorage.createCacheConfig(this.configCurrentEndpoint) ?? this.meta.cache;
|
|
49
|
+
}
|
|
50
|
+
request(params, options) {
|
|
51
|
+
// 1. Подготовка и инициализация
|
|
52
|
+
this.fetchCounts++;
|
|
53
|
+
const requestId = createUniqueId(this.name);
|
|
54
|
+
const controller = new AbortController();
|
|
55
|
+
const requestSubscribers = new Set();
|
|
56
|
+
const currentState = {
|
|
57
|
+
status: 'idle',
|
|
58
|
+
requestParams: params,
|
|
59
|
+
headers: {},
|
|
60
|
+
error: undefined,
|
|
61
|
+
data: undefined,
|
|
62
|
+
fromCache: false,
|
|
63
|
+
};
|
|
64
|
+
const headerContext = createHeaderContext({ requestParams: params }, options?.context || {});
|
|
65
|
+
// 2. Создаем функции для управления состоянием
|
|
66
|
+
const notifyRequestSubscribers = (newState) => {
|
|
67
|
+
Object.assign(currentState, newState);
|
|
68
|
+
requestSubscribers.forEach((cb) => {
|
|
69
|
+
cb({ ...currentState });
|
|
70
|
+
});
|
|
71
|
+
};
|
|
72
|
+
// 3. Создаем промис для метода wait()
|
|
73
|
+
const waitPromise = new Promise(async (resolve, reject) => {
|
|
74
|
+
try {
|
|
75
|
+
// Формируем заголовки
|
|
76
|
+
const headers = await prepareRequestHeaders(this.prepareHeaders, headerContext);
|
|
77
|
+
// Получаем заголовки для кэширования
|
|
78
|
+
const headersForCache = getCacheableHeaders(headers, options?.cacheableHeaderKeys ? options.cacheableHeaderKeys : this.cacheableHeaders);
|
|
79
|
+
// Проверяем включено ли кэширование
|
|
80
|
+
const shouldCache = this.queryStorage.shouldCache(this.configCurrentEndpoint, options);
|
|
81
|
+
// Формируем ключ кэша
|
|
82
|
+
const [cacheKey, cacheParams] = this.queryStorage.createCacheKey(this.name, { ...params, ...headersForCache });
|
|
83
|
+
// 4. Проверяем кэш до установки loading
|
|
84
|
+
let cachedResult;
|
|
85
|
+
if (shouldCache) {
|
|
86
|
+
cachedResult = await this.queryStorage.getCachedResult(cacheKey);
|
|
87
|
+
}
|
|
88
|
+
if (cachedResult) {
|
|
89
|
+
// Есть данные в кэше - сразу переходим к success
|
|
90
|
+
notifyRequestSubscribers({
|
|
91
|
+
fromCache: true,
|
|
92
|
+
status: 'success',
|
|
93
|
+
data: cachedResult.data,
|
|
94
|
+
error: undefined,
|
|
95
|
+
headers: cachedResult.headers,
|
|
96
|
+
requestParams: params,
|
|
97
|
+
});
|
|
98
|
+
resolve({
|
|
99
|
+
...cachedResult,
|
|
100
|
+
fromCache: true,
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
// Нет данных в кэше - устанавливаем loading и делаем запрос
|
|
105
|
+
notifyRequestSubscribers({
|
|
106
|
+
fromCache: false,
|
|
107
|
+
status: 'loading',
|
|
108
|
+
});
|
|
109
|
+
// 5. Выполняем запрос
|
|
110
|
+
const requestDefinition = this.configCurrentEndpoint.request(params, options?.context);
|
|
111
|
+
const mergedOptions = { ...options, signal: controller.signal };
|
|
112
|
+
const response = await this.queryFunction(requestDefinition, mergedOptions, headers);
|
|
113
|
+
// 6. Обрабатываем результат запроса
|
|
114
|
+
if (response.ok) {
|
|
115
|
+
const { headers, ...restResponse } = response;
|
|
116
|
+
// Сохраняем в кэш, если нужно
|
|
117
|
+
if (shouldCache) {
|
|
118
|
+
const currentCacheConfig = this.queryStorage.createCacheConfig(this.configCurrentEndpoint);
|
|
119
|
+
await this.queryStorage.setCachedResult(cacheKey, { ...restResponse, headers: headersToObject(headers) }, currentCacheConfig, cacheParams ?? {}, this.configCurrentEndpoint.tags ?? [], this.configCurrentEndpoint.invalidatesTags ?? []);
|
|
120
|
+
}
|
|
121
|
+
// Оповещаем о success
|
|
122
|
+
notifyRequestSubscribers({
|
|
123
|
+
fromCache: false,
|
|
124
|
+
status: 'success',
|
|
125
|
+
data: response.data,
|
|
126
|
+
error: undefined,
|
|
127
|
+
headers: response.headers,
|
|
128
|
+
requestParams: params,
|
|
129
|
+
});
|
|
130
|
+
// Уведомляем подписчиков эндпоинта
|
|
131
|
+
this.endpointSubscribers.forEach((cb) => {
|
|
132
|
+
const endpointState = {
|
|
133
|
+
status: 'success',
|
|
134
|
+
fetchCounts: this.fetchCounts,
|
|
135
|
+
meta: this.meta,
|
|
136
|
+
cacheableHeaders: this.cacheableHeaders,
|
|
137
|
+
error: undefined,
|
|
138
|
+
};
|
|
139
|
+
cb(endpointState);
|
|
140
|
+
});
|
|
141
|
+
resolve({
|
|
142
|
+
...response,
|
|
143
|
+
fromCache: false,
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
// Оповещаем об ошибке
|
|
148
|
+
notifyRequestSubscribers({
|
|
149
|
+
fromCache: false,
|
|
150
|
+
status: 'error',
|
|
151
|
+
data: undefined,
|
|
152
|
+
error: response.error,
|
|
153
|
+
headers: response.headers,
|
|
154
|
+
requestParams: params,
|
|
155
|
+
});
|
|
156
|
+
// Уведомляем подписчиков эндпоинта
|
|
157
|
+
this.endpointSubscribers.forEach((cb) => {
|
|
158
|
+
const endpointState = {
|
|
159
|
+
status: 'error',
|
|
160
|
+
fetchCounts: this.fetchCounts,
|
|
161
|
+
meta: this.meta,
|
|
162
|
+
cacheableHeaders: this.cacheableHeaders,
|
|
163
|
+
error: response.error,
|
|
164
|
+
};
|
|
165
|
+
cb(endpointState);
|
|
166
|
+
});
|
|
167
|
+
reject(response.error);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
catch (error) {
|
|
172
|
+
// Обрабатываем неожиданные ошибки
|
|
173
|
+
notifyRequestSubscribers({
|
|
174
|
+
fromCache: false,
|
|
175
|
+
status: 'error',
|
|
176
|
+
data: undefined,
|
|
177
|
+
error: error,
|
|
178
|
+
headers: undefined,
|
|
179
|
+
requestParams: params,
|
|
180
|
+
});
|
|
181
|
+
reject(error);
|
|
182
|
+
}
|
|
183
|
+
});
|
|
184
|
+
// 4. Возвращаем объект с методами управления запросом
|
|
185
|
+
return {
|
|
186
|
+
id: requestId,
|
|
187
|
+
subscribe(listener, options = {}) {
|
|
188
|
+
const { autoUnsubscribe = true } = options;
|
|
189
|
+
requestSubscribers.add(listener);
|
|
190
|
+
listener(currentState);
|
|
191
|
+
const unsubscribe = () => requestSubscribers.delete(listener);
|
|
192
|
+
if (autoUnsubscribe) {
|
|
193
|
+
waitPromise.finally(() => {
|
|
194
|
+
unsubscribe();
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
return unsubscribe;
|
|
198
|
+
},
|
|
199
|
+
wait: () => waitPromise,
|
|
200
|
+
waitWithCallbacks(handlers = {}) {
|
|
201
|
+
const { idle, loading, success, error } = handlers;
|
|
202
|
+
this.subscribe((state) => {
|
|
203
|
+
switch (state.status) {
|
|
204
|
+
case 'idle':
|
|
205
|
+
idle?.(state);
|
|
206
|
+
break;
|
|
207
|
+
case 'loading':
|
|
208
|
+
loading?.(state);
|
|
209
|
+
break;
|
|
210
|
+
case 'success':
|
|
211
|
+
success?.(state.data, state);
|
|
212
|
+
break;
|
|
213
|
+
case 'error':
|
|
214
|
+
error?.(state.error, state);
|
|
215
|
+
break;
|
|
216
|
+
}
|
|
217
|
+
}, { autoUnsubscribe: true });
|
|
218
|
+
return waitPromise;
|
|
219
|
+
},
|
|
220
|
+
abort: () => {
|
|
221
|
+
if (controller && !controller.signal.aborted) {
|
|
222
|
+
controller.abort();
|
|
223
|
+
}
|
|
224
|
+
},
|
|
225
|
+
then: (onfulfilled, onrejected) => waitPromise.then(onfulfilled, onrejected),
|
|
226
|
+
catch: (onrejected) => waitPromise.catch(onrejected),
|
|
227
|
+
finally: (onfinally) => waitPromise.finally(onfinally),
|
|
228
|
+
};
|
|
229
|
+
}
|
|
230
|
+
subscribe(cb) {
|
|
231
|
+
this.endpointSubscribers.add(cb);
|
|
232
|
+
// Создаем объект с текущей статистикой, соответствующий интерфейсу EndpointState
|
|
233
|
+
const currentState = {
|
|
234
|
+
status: 'idle',
|
|
235
|
+
fetchCounts: this.fetchCounts,
|
|
236
|
+
meta: this.meta,
|
|
237
|
+
cacheableHeaders: this.cacheableHeaders,
|
|
238
|
+
error: undefined,
|
|
239
|
+
};
|
|
240
|
+
// Вызываем callback с текущим состоянием
|
|
241
|
+
cb(currentState);
|
|
242
|
+
// Возвращаем функцию отписки
|
|
243
|
+
return () => this.endpointSubscribers.delete(cb);
|
|
244
|
+
}
|
|
245
|
+
reset() {
|
|
246
|
+
this.fetchCounts = 0;
|
|
247
|
+
return Promise.resolve();
|
|
248
|
+
}
|
|
249
|
+
destroy() {
|
|
250
|
+
this.endpointSubscribers.clear();
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
//# sourceMappingURL=endpoint.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"endpoint.js","sourceRoot":"","sources":["../../../src/api/components/endpoint.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { IStorage, StorageKeyType } from '../../core/storage';
|
|
2
|
+
import { CacheConfig, CreateApiClientOptions } from '../types/api.interface';
|
|
3
|
+
import { EndpointConfig } from '../types/endpoint.interface';
|
|
4
|
+
import { QueryOptions } from '../types/query.interface';
|
|
5
|
+
/**
|
|
6
|
+
* Менеджер хранилища для API
|
|
7
|
+
* Объединяет в себе функционал хранилища и управления кэшем
|
|
8
|
+
*/
|
|
9
|
+
export declare class QueryStorage {
|
|
10
|
+
private readonly storageExternal;
|
|
11
|
+
private readonly globalCacheConfig;
|
|
12
|
+
/** Экземпляр хранилища */
|
|
13
|
+
private storage;
|
|
14
|
+
private cleanupInterval;
|
|
15
|
+
/** Настройки кэша по умолчанию */
|
|
16
|
+
private defaultCacheOptions;
|
|
17
|
+
constructor(storageExternal: CreateApiClientOptions['storage'], globalCacheConfig: CreateApiClientOptions['cache']);
|
|
18
|
+
initialize(): Promise<this>;
|
|
19
|
+
private createStorage;
|
|
20
|
+
private startCleanupInterval;
|
|
21
|
+
/**
|
|
22
|
+
* Получает экземпляр хранилища
|
|
23
|
+
*/
|
|
24
|
+
getStorage(): IStorage | null;
|
|
25
|
+
/**
|
|
26
|
+
* Создает ключ кэша для запроса с учетом заголовков
|
|
27
|
+
* @param endpoint Имя эндпоинта
|
|
28
|
+
* @param params Параметры запроса (все что посчитаем нужным)
|
|
29
|
+
*/
|
|
30
|
+
createCacheKey<CacheParams extends Record<string, any>>(endpoint: string, params: CacheParams): [StorageKeyType, Record<string, any> | undefined];
|
|
31
|
+
/**
|
|
32
|
+
* Получает результат запроса из кэша
|
|
33
|
+
*/
|
|
34
|
+
getCachedResult<T>(cacheKey: StorageKeyType): Promise<T | undefined>;
|
|
35
|
+
/**
|
|
36
|
+
* Сохраняет результат запроса в кэш
|
|
37
|
+
* @param cacheKey Ключ кэша
|
|
38
|
+
* @param data Данные для кэширования
|
|
39
|
+
* @param cacheOptions Метаданные
|
|
40
|
+
* @param cacheParams Параметры которые влияли на созадние ключа
|
|
41
|
+
* @param tags Тэги эндпоинта
|
|
42
|
+
* @param invalidatesTags Тэги которые нужно инвалидировать
|
|
43
|
+
*/
|
|
44
|
+
setCachedResult<T, CacheParams extends Record<string, any>>(cacheKey: StorageKeyType, data: T, cacheOptions: Exclude<CacheConfig, boolean>, cacheParams: CacheParams, tags: string[], invalidatesTags: string[]): Promise<void>;
|
|
45
|
+
/**
|
|
46
|
+
* Проверяет, должен ли запрос быть кэширован
|
|
47
|
+
* @param endpointConfig Конфигурация эндпоинта
|
|
48
|
+
* @param options Опции запроса
|
|
49
|
+
* @returns true если запрос должен кэшироваться
|
|
50
|
+
*/
|
|
51
|
+
shouldCache(endpointConfig?: EndpointConfig, options?: QueryOptions): boolean;
|
|
52
|
+
/**
|
|
53
|
+
* Создает итоговую конфигурацию кэширования для конкретного эндпоинта
|
|
54
|
+
* Объединяет глабальный конфиг с текущим
|
|
55
|
+
* @param endpointConfig Конфигурация эндпоинта
|
|
56
|
+
*/
|
|
57
|
+
createCacheConfig(endpointConfig?: EndpointConfig): {
|
|
58
|
+
ttl?: number;
|
|
59
|
+
cleanup?: {
|
|
60
|
+
enabled: boolean;
|
|
61
|
+
interval?: number;
|
|
62
|
+
};
|
|
63
|
+
invalidateOnError?: boolean;
|
|
64
|
+
};
|
|
65
|
+
/**
|
|
66
|
+
* Инвалидирует кэш по тегам
|
|
67
|
+
* @param tags Теги для инвалидации
|
|
68
|
+
*/
|
|
69
|
+
invalidateCacheByTags(tags: string[]): Promise<void>;
|
|
70
|
+
/**
|
|
71
|
+
* Инвалидирует кэш по ключу
|
|
72
|
+
* @param cacheKey Ключ кэша
|
|
73
|
+
*/
|
|
74
|
+
invalidateCache(cacheKey: StorageKeyType): Promise<void>;
|
|
75
|
+
/**
|
|
76
|
+
* Выполняет очистку всех просроченных записей кэша
|
|
77
|
+
*/
|
|
78
|
+
cleanup(): Promise<void>;
|
|
79
|
+
/**
|
|
80
|
+
* Уничтожает хранилище и освобождает ресурсы
|
|
81
|
+
*/
|
|
82
|
+
destroy(): Promise<void>;
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=query-storage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query-storage.d.ts","sourceRoot":"","sources":["../../../src/api/components/query-storage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,QAAQ,EAA+B,cAAc,EAAe,MAAM,oBAAoB,CAAA;AAEzH,OAAO,EAAE,WAAW,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAA;AAC5E,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAA;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAEvD;;;GAGG;AACH,qBAAa,YAAY;IAiBrB,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAjBpC,0BAA0B;IAC1B,OAAO,CAAC,OAAO,CAAwB;IAEvC,OAAO,CAAC,eAAe,CAAuC;IAE9D,kCAAkC;IAClC,OAAO,CAAC,mBAAmB,CAO1B;gBAGkB,eAAe,EAAE,sBAAsB,CAAC,SAAS,CAAC,EAClD,iBAAiB,EAAE,sBAAsB,CAAC,OAAO,CAAC;IAGxD,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;YAS1B,aAAa;IAY3B,OAAO,CAAC,oBAAoB;IAiB5B;;OAEG;IACI,UAAU,IAAI,QAAQ,GAAG,IAAI;IAIpC;;;;OAIG;IACI,cAAc,CAAC,WAAW,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW;IAIpG;;OAEG;IACU,eAAe,CAAC,CAAC,EAAE,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAsBjF;;;;;;;;OAQG;IACU,eAAe,CAAC,CAAC,EAAE,WAAW,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACrE,QAAQ,EAAE,cAAc,EACxB,IAAI,EAAE,CAAC,EACP,YAAY,EAAE,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,EAC3C,WAAW,EAAE,WAAW,EACxB,IAAI,EAAE,MAAM,EAAE,EACd,eAAe,EAAE,MAAM,EAAE,GACxB,OAAO,CAAC,IAAI,CAAC;IAqBhB;;;;;OAKG;IACI,WAAW,CAAC,cAAc,CAAC,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE,YAAY;IAe1E;;;;OAIG;IACI,iBAAiB,CAAC,cAAc,CAAC,EAAE,cAAc;;;;oBAlJpB,CAAA;;;;IAuKpC;;;OAGG;IACU,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAYjE;;;OAGG;IACU,eAAe,CAAC,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAMrE;;OAEG;IACU,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAcrC;;OAEG;IACU,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAatC"}
|
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
import { CacheUtils } from '../../core/storage/utils/cache.util';
|
|
2
|
+
/**
|
|
3
|
+
* Менеджер хранилища для API
|
|
4
|
+
* Объединяет в себе функционал хранилища и управления кэшем
|
|
5
|
+
*/
|
|
6
|
+
export class QueryStorage {
|
|
7
|
+
storageExternal;
|
|
8
|
+
globalCacheConfig;
|
|
9
|
+
/** Экземпляр хранилища */
|
|
10
|
+
storage = null;
|
|
11
|
+
cleanupInterval = null;
|
|
12
|
+
/** Настройки кэша по умолчанию */
|
|
13
|
+
defaultCacheOptions = {
|
|
14
|
+
ttl: 5 * 60 * 1000, // 5 минут по умолчанию
|
|
15
|
+
cleanup: {
|
|
16
|
+
enabled: true,
|
|
17
|
+
interval: 10 * 60 * 1000, // 10 минут
|
|
18
|
+
},
|
|
19
|
+
invalidateOnError: true,
|
|
20
|
+
};
|
|
21
|
+
constructor(storageExternal, globalCacheConfig) {
|
|
22
|
+
this.storageExternal = storageExternal;
|
|
23
|
+
this.globalCacheConfig = globalCacheConfig;
|
|
24
|
+
}
|
|
25
|
+
async initialize() {
|
|
26
|
+
// 1. Создаем хранилище
|
|
27
|
+
await this.createStorage();
|
|
28
|
+
// 2. Запускаем периодическую очистку, если это указано в настройках
|
|
29
|
+
this.startCleanupInterval();
|
|
30
|
+
return this;
|
|
31
|
+
}
|
|
32
|
+
async createStorage() {
|
|
33
|
+
try {
|
|
34
|
+
const s = this.storageExternal;
|
|
35
|
+
await s.initialize();
|
|
36
|
+
this.storage = s;
|
|
37
|
+
}
|
|
38
|
+
catch (error) {
|
|
39
|
+
console.error('Ошибка инициализации хранилища', error);
|
|
40
|
+
throw error;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
startCleanupInterval() {
|
|
44
|
+
if (this.cleanupInterval) {
|
|
45
|
+
clearInterval(this.cleanupInterval);
|
|
46
|
+
this.cleanupInterval = null;
|
|
47
|
+
}
|
|
48
|
+
// Получаем настройки очистки
|
|
49
|
+
const cleanupConfig = typeof this.globalCacheConfig === 'object' ? this.globalCacheConfig.cleanup : this.defaultCacheOptions.cleanup;
|
|
50
|
+
// Запускаем интервал очистки, если он включен
|
|
51
|
+
if (cleanupConfig?.enabled && cleanupConfig.interval) {
|
|
52
|
+
this.cleanupInterval = setInterval(() => {
|
|
53
|
+
this.cleanup().catch((err) => console.error('Ошибка при очистке кэша:', err));
|
|
54
|
+
}, cleanupConfig.interval);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Получает экземпляр хранилища
|
|
59
|
+
*/
|
|
60
|
+
getStorage() {
|
|
61
|
+
return this.storage;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Создает ключ кэша для запроса с учетом заголовков
|
|
65
|
+
* @param endpoint Имя эндпоинта
|
|
66
|
+
* @param params Параметры запроса (все что посчитаем нужным)
|
|
67
|
+
*/
|
|
68
|
+
createCacheKey(endpoint, params) {
|
|
69
|
+
return CacheUtils.createApiKey(endpoint, params);
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Получает результат запроса из кэша
|
|
73
|
+
*/
|
|
74
|
+
async getCachedResult(cacheKey) {
|
|
75
|
+
if (!this.storage)
|
|
76
|
+
throw new Error('Хранилище не инициализировано');
|
|
77
|
+
const cachedEntry = await this.storage.get(cacheKey);
|
|
78
|
+
if (!cachedEntry)
|
|
79
|
+
return undefined;
|
|
80
|
+
// Проверяем срок годности кэша
|
|
81
|
+
if (CacheUtils.isExpired(cachedEntry.metadata)) {
|
|
82
|
+
await this.storage.delete(cacheKey);
|
|
83
|
+
return undefined;
|
|
84
|
+
}
|
|
85
|
+
// Обновляем метаданные кэша (счетчик доступа, время обновления)
|
|
86
|
+
const updatedEntry = {
|
|
87
|
+
...cachedEntry,
|
|
88
|
+
metadata: CacheUtils.updateMetadata(cachedEntry.metadata),
|
|
89
|
+
};
|
|
90
|
+
await this.storage.set(cacheKey, updatedEntry);
|
|
91
|
+
return cachedEntry.data;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Сохраняет результат запроса в кэш
|
|
95
|
+
* @param cacheKey Ключ кэша
|
|
96
|
+
* @param data Данные для кэширования
|
|
97
|
+
* @param cacheOptions Метаданные
|
|
98
|
+
* @param cacheParams Параметры которые влияли на созадние ключа
|
|
99
|
+
* @param tags Тэги эндпоинта
|
|
100
|
+
* @param invalidatesTags Тэги которые нужно инвалидировать
|
|
101
|
+
*/
|
|
102
|
+
async setCachedResult(cacheKey, data, cacheOptions, cacheParams, tags, invalidatesTags) {
|
|
103
|
+
if (!this.storage)
|
|
104
|
+
throw new Error('Хранилище не инициализировано');
|
|
105
|
+
// Проверяем, нужно ли инвалидировать другие кэши по тегам
|
|
106
|
+
if (invalidatesTags?.length) {
|
|
107
|
+
await this.invalidateCacheByTags(invalidatesTags);
|
|
108
|
+
}
|
|
109
|
+
// Создаем метаданные кэша
|
|
110
|
+
const cacheMetadata = CacheUtils.createMetadata(cacheOptions.ttl, tags);
|
|
111
|
+
// Создаем запись кэша
|
|
112
|
+
const cacheEntry = {
|
|
113
|
+
data,
|
|
114
|
+
metadata: cacheMetadata,
|
|
115
|
+
params: cacheParams,
|
|
116
|
+
};
|
|
117
|
+
await this.storage.set(cacheKey, cacheEntry);
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Проверяет, должен ли запрос быть кэширован
|
|
121
|
+
* @param endpointConfig Конфигурация эндпоинта
|
|
122
|
+
* @param options Опции запроса
|
|
123
|
+
* @returns true если запрос должен кэшироваться
|
|
124
|
+
*/
|
|
125
|
+
shouldCache(endpointConfig, options) {
|
|
126
|
+
// Если глобальный кэш отключен, возвращаем false
|
|
127
|
+
if (this.globalCacheConfig === false)
|
|
128
|
+
return false;
|
|
129
|
+
// Если эндпоинт явно отключает кэш, возвращаем false
|
|
130
|
+
if (endpointConfig?.cache === false)
|
|
131
|
+
return false;
|
|
132
|
+
// Если по какой то причине указали время кэша 0
|
|
133
|
+
if (typeof endpointConfig?.cache === 'object' && endpointConfig?.cache.ttl === 0)
|
|
134
|
+
return false;
|
|
135
|
+
// Если при вызове самого запроса явно указали НЕ кэшировать
|
|
136
|
+
if (options?.disableCache === true)
|
|
137
|
+
return false;
|
|
138
|
+
// Если настройки нигде не указаны - по умолчанию НЕ кэшируем
|
|
139
|
+
if (this.globalCacheConfig === undefined && endpointConfig?.cache === undefined)
|
|
140
|
+
return false;
|
|
141
|
+
return true;
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Создает итоговую конфигурацию кэширования для конкретного эндпоинта
|
|
145
|
+
* Объединяет глабальный конфиг с текущим
|
|
146
|
+
* @param endpointConfig Конфигурация эндпоинта
|
|
147
|
+
*/
|
|
148
|
+
createCacheConfig(endpointConfig) {
|
|
149
|
+
// Создаем опции по умолчанию
|
|
150
|
+
let resultConfig = this.defaultCacheOptions;
|
|
151
|
+
// Если в глобальном конфиге кэш передан как объект а не boolean - по умолчанию станет он
|
|
152
|
+
if (typeof this.globalCacheConfig === 'object') {
|
|
153
|
+
resultConfig = this.globalCacheConfig;
|
|
154
|
+
}
|
|
155
|
+
// Если в настройках эндпоинта кэш как объект - дополняем этими параметрами итоговый объект кэша
|
|
156
|
+
if (typeof endpointConfig?.cache === 'object') {
|
|
157
|
+
const endpointCache = endpointConfig.cache;
|
|
158
|
+
resultConfig = {
|
|
159
|
+
// @ts-ignore
|
|
160
|
+
...resultConfig,
|
|
161
|
+
...endpointCache,
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
return resultConfig;
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Инвалидирует кэш по тегам
|
|
168
|
+
* @param tags Теги для инвалидации
|
|
169
|
+
*/
|
|
170
|
+
async invalidateCacheByTags(tags) {
|
|
171
|
+
if (!this.storage)
|
|
172
|
+
throw new Error('Хранилище не инициализировано');
|
|
173
|
+
const keys = await this.storage.keys();
|
|
174
|
+
for (const key of keys) {
|
|
175
|
+
const cachedEntry = await this.storage.get(key);
|
|
176
|
+
if (cachedEntry && CacheUtils.hasAnyTag(cachedEntry.metadata, tags)) {
|
|
177
|
+
await this.storage.delete(key);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Инвалидирует кэш по ключу
|
|
183
|
+
* @param cacheKey Ключ кэша
|
|
184
|
+
*/
|
|
185
|
+
async invalidateCache(cacheKey) {
|
|
186
|
+
if (!this.storage)
|
|
187
|
+
throw new Error('Хранилище не инициализировано');
|
|
188
|
+
await this.storage.delete(cacheKey);
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Выполняет очистку всех просроченных записей кэша
|
|
192
|
+
*/
|
|
193
|
+
async cleanup() {
|
|
194
|
+
if (!this.storage) {
|
|
195
|
+
throw new Error('Хранилище не инициализировано');
|
|
196
|
+
}
|
|
197
|
+
const keys = await this.storage.keys();
|
|
198
|
+
for (const key of keys) {
|
|
199
|
+
const value = await this.storage.get(key);
|
|
200
|
+
if (value && CacheUtils.isExpired(value.metadata)) {
|
|
201
|
+
await this.storage.delete(key);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Уничтожает хранилище и освобождает ресурсы
|
|
207
|
+
*/
|
|
208
|
+
async destroy() {
|
|
209
|
+
// Останавливаем интервал очистки
|
|
210
|
+
if (this.cleanupInterval) {
|
|
211
|
+
window.clearInterval(this.cleanupInterval);
|
|
212
|
+
this.cleanupInterval = null;
|
|
213
|
+
}
|
|
214
|
+
// Очищаем хранилище
|
|
215
|
+
if (this.storage) {
|
|
216
|
+
await this.storage.destroy();
|
|
217
|
+
this.storage = null;
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
//# sourceMappingURL=query-storage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query-storage.js","sourceRoot":"","sources":["../../../src/api/components/query-storage.ts"],"names":[],"mappings":"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"}
|