synapse-storage 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1038 -0
- package/dist/_examples/_example5.d.ts +1 -0
- package/dist/_examples/_example5.d.ts.map +1 -0
- package/dist/_examples/_example5.js +184 -0
- package/dist/_examples/_example5.js.map +1 -0
- package/dist/_examples/_example6.d.ts +1 -0
- package/dist/_examples/_example6.d.ts.map +1 -0
- package/dist/_examples/_example6.js +168 -0
- package/dist/_examples/_example6.js.map +1 -0
- package/dist/_examples/example1.d.ts +1 -0
- package/dist/_examples/example1.d.ts.map +1 -0
- package/dist/_examples/example1.js +240 -0
- package/dist/_examples/example1.js.map +1 -0
- package/dist/_examples/example2.d.ts +1 -0
- package/dist/_examples/example2.d.ts.map +1 -0
- package/dist/_examples/example2.js +81 -0
- package/dist/_examples/example2.js.map +1 -0
- package/dist/_examples/example3.d.ts +1 -0
- package/dist/_examples/example3.d.ts.map +1 -0
- package/dist/_examples/example3.js +99 -0
- package/dist/_examples/example3.js.map +1 -0
- package/dist/_examples/example4.d.ts +1 -0
- package/dist/_examples/example4.d.ts.map +1 -0
- package/dist/_examples/example4.js +172 -0
- package/dist/_examples/example4.js.map +1 -0
- package/dist/_examples/example5.d.ts +1 -0
- package/dist/_examples/example5.d.ts.map +1 -0
- package/dist/_examples/example5.js +184 -0
- package/dist/_examples/example5.js.map +1 -0
- package/dist/_examples/example6.d.ts +1 -0
- package/dist/_examples/example6.d.ts.map +1 -0
- package/dist/_examples/example6.js +168 -0
- package/dist/_examples/example6.js.map +1 -0
- package/dist/_examples/plugins.d.ts +1 -0
- package/dist/_examples/plugins.d.ts.map +1 -0
- package/dist/_examples/plugins.js +176 -0
- package/dist/_examples/plugins.js.map +1 -0
- package/dist/_examples/pokemons/PokemonList.d.ts +5 -0
- package/dist/_examples/pokemons/PokemonList.d.ts.map +1 -0
- package/dist/_examples/pokemons/PokemonList.js +166 -0
- package/dist/_examples/pokemons/PokemonList.js.map +1 -0
- package/dist/_examples/pokemons/api.d.ts +8 -0
- package/dist/_examples/pokemons/api.d.ts.map +1 -0
- package/dist/_examples/pokemons/api.js +45 -0
- package/dist/_examples/pokemons/api.js.map +1 -0
- package/dist/_examples/pokemons/app.config.d.ts +15 -0
- package/dist/_examples/pokemons/app.config.d.ts.map +1 -0
- package/dist/_examples/pokemons/app.config.js +15 -0
- package/dist/_examples/pokemons/app.config.js.map +1 -0
- package/dist/_examples/pokemons/dispatchers/pokemon.dispatcher.d.ts +9 -0
- package/dist/_examples/pokemons/dispatchers/pokemon.dispatcher.d.ts.map +1 -0
- package/dist/_examples/pokemons/dispatchers/pokemon.dispatcher.js +122 -0
- package/dist/_examples/pokemons/dispatchers/pokemon.dispatcher.js.map +1 -0
- package/dist/_examples/pokemons/effects/pokemon.effects.d.ts +16 -0
- package/dist/_examples/pokemons/effects/pokemon.effects.d.ts.map +1 -0
- package/dist/_examples/pokemons/effects/pokemon.effects.js +39 -0
- package/dist/_examples/pokemons/effects/pokemon.effects.js.map +1 -0
- package/dist/_examples/pokemons/middlewares/pokenon.middlewares.d.ts +4 -0
- package/dist/_examples/pokemons/middlewares/pokenon.middlewares.d.ts.map +1 -0
- package/dist/_examples/pokemons/middlewares/pokenon.middlewares.js +27 -0
- package/dist/_examples/pokemons/middlewares/pokenon.middlewares.js.map +1 -0
- package/dist/_examples/pokemons/pokemon.dispatcher.d.ts +9 -0
- package/dist/_examples/pokemons/pokemon.dispatcher.d.ts.map +1 -0
- package/dist/_examples/pokemons/pokemon.dispatcher.js +122 -0
- package/dist/_examples/pokemons/pokemon.dispatcher.js.map +1 -0
- package/dist/_examples/pokemons/pokemon.effects.d.ts +5 -0
- package/dist/_examples/pokemons/pokemon.effects.d.ts.map +1 -0
- package/dist/_examples/pokemons/pokemon.effects.js +39 -0
- package/dist/_examples/pokemons/pokemon.effects.js.map +1 -0
- package/dist/_examples/pokemons/pokemon.selectors.d.ts +5 -0
- package/dist/_examples/pokemons/pokemon.selectors.d.ts.map +1 -0
- package/dist/_examples/pokemons/pokemon.selectors.js +10 -0
- package/dist/_examples/pokemons/pokemon.selectors.js.map +1 -0
- package/dist/_examples/pokemons/pokemon.storage.d.ts +3 -0
- package/dist/_examples/pokemons/pokemon.storage.d.ts.map +1 -0
- package/dist/_examples/pokemons/pokemon.storage.js +14 -0
- package/dist/_examples/pokemons/pokemon.storage.js.map +1 -0
- package/dist/_examples/pokemons/pokemon1.selectors.d.ts +5 -0
- package/dist/_examples/pokemons/pokemon1.selectors.d.ts.map +1 -0
- package/dist/_examples/pokemons/pokemon1.selectors.js +8 -0
- package/dist/_examples/pokemons/pokemon1.selectors.js.map +1 -0
- package/dist/_examples/pokemons/pokenon.middlewares.d.ts +4 -0
- package/dist/_examples/pokemons/pokenon.middlewares.d.ts.map +1 -0
- package/dist/_examples/pokemons/pokenon.middlewares.js +27 -0
- package/dist/_examples/pokemons/pokenon.middlewares.js.map +1 -0
- package/dist/_examples/pokemons/selectors/pokemon.selectors.d.ts +5 -0
- package/dist/_examples/pokemons/selectors/pokemon.selectors.d.ts.map +1 -0
- package/dist/_examples/pokemons/selectors/pokemon.selectors.js +10 -0
- package/dist/_examples/pokemons/selectors/pokemon.selectors.js.map +1 -0
- package/dist/_examples/pokemons/selectors/pokemon1.selectors.d.ts +5 -0
- package/dist/_examples/pokemons/selectors/pokemon1.selectors.d.ts.map +1 -0
- package/dist/_examples/pokemons/selectors/pokemon1.selectors.js +8 -0
- package/dist/_examples/pokemons/selectors/pokemon1.selectors.js.map +1 -0
- package/dist/_examples/pokemons/storages/pokemon.storage.d.ts +3 -0
- package/dist/_examples/pokemons/storages/pokemon.storage.d.ts.map +1 -0
- package/dist/_examples/pokemons/storages/pokemon.storage.js +14 -0
- package/dist/_examples/pokemons/storages/pokemon.storage.js.map +1 -0
- package/dist/_examples/pokemons/store.d.ts +1 -0
- package/dist/_examples/pokemons/store.d.ts.map +1 -0
- package/dist/_examples/pokemons/store.js +2 -0
- package/dist/_examples/pokemons/store.js.map +1 -0
- package/dist/_examples/pokemons/store1.d.ts +23 -0
- package/dist/_examples/pokemons/store1.d.ts.map +1 -0
- package/dist/_examples/pokemons/store1.js +35 -0
- package/dist/_examples/pokemons/store1.js.map +1 -0
- package/dist/_examples/pokemons/store2.d.ts +23 -0
- package/dist/_examples/pokemons/store2.d.ts.map +1 -0
- package/dist/_examples/pokemons/store2.js +34 -0
- package/dist/_examples/pokemons/store2.js.map +1 -0
- package/dist/_examples/pokemons/types.d.ts +26 -0
- package/dist/_examples/pokemons/types.d.ts.map +1 -0
- package/dist/_examples/pokemons/types.js +2 -0
- package/dist/_examples/pokemons/types.js.map +1 -0
- package/dist/_utils/chunk.util.d.ts +8 -0
- package/dist/_utils/chunk.util.d.ts.map +1 -0
- package/dist/_utils/chunk.util.js +21 -0
- package/dist/_utils/chunk.util.js.map +1 -0
- package/dist/_utils/deepMerge.util.d.ts +2 -0
- package/dist/_utils/deepMerge.util.d.ts.map +1 -0
- package/dist/_utils/deepMerge.util.js +16 -0
- package/dist/_utils/deepMerge.util.js.map +1 -0
- package/dist/_utils/flatMap.util.d.ts +10 -0
- package/dist/_utils/flatMap.util.d.ts.map +1 -0
- package/dist/_utils/flatMap.util.js +23 -0
- package/dist/_utils/flatMap.util.js.map +1 -0
- package/dist/_utils/index.d.ts +4 -0
- package/dist/_utils/index.d.ts.map +1 -0
- package/dist/_utils/index.js +4 -0
- package/dist/_utils/index.js.map +1 -0
- package/dist/api/api.module.d.ts +38 -0
- package/dist/api/api.module.d.ts.map +1 -0
- package/dist/api/api.module.js +82 -0
- package/dist/api/api.module.js.map +1 -0
- package/dist/api/components/endpoint.d.ts +26 -0
- package/dist/api/components/endpoint.d.ts.map +1 -0
- package/dist/api/components/endpoint.js +253 -0
- package/dist/api/components/endpoint.js.map +1 -0
- package/dist/api/components/query-storage.d.ts +84 -0
- package/dist/api/components/query-storage.d.ts.map +1 -0
- package/dist/api/components/query-storage.js +221 -0
- package/dist/api/components/query-storage.js.map +1 -0
- package/dist/api/example.d.ts +83 -0
- package/dist/api/example.d.ts.map +1 -0
- package/dist/api/example.js +85 -0
- package/dist/api/example.js.map +1 -0
- package/dist/api/index.d.ts +4 -0
- package/dist/api/index.d.ts.map +1 -0
- package/dist/api/index.js +6 -0
- package/dist/api/index.js.map +1 -0
- package/dist/api/types/api.interface.d.ts +108 -0
- package/dist/api/types/api.interface.d.ts.map +1 -0
- package/dist/api/types/api.interface.js +19 -0
- package/dist/api/types/api.interface.js.map +1 -0
- package/dist/api/types/endpoint.interface.d.ts +116 -0
- package/dist/api/types/endpoint.interface.d.ts.map +1 -0
- package/dist/api/types/endpoint.interface.js +2 -0
- package/dist/api/types/endpoint.interface.js.map +1 -0
- package/dist/api/types/query.interface.d.ts +87 -0
- package/dist/api/types/query.interface.d.ts.map +1 -0
- package/dist/api/types/query.interface.js +2 -0
- package/dist/api/types/query.interface.js.map +1 -0
- package/dist/api/utils/api-helpers.d.ts +22 -0
- package/dist/api/utils/api-helpers.d.ts.map +1 -0
- package/dist/api/utils/api-helpers.js +44 -0
- package/dist/api/utils/api-helpers.js.map +1 -0
- package/dist/api/utils/create-header-context.d.ts +10 -0
- package/dist/api/utils/create-header-context.d.ts.map +1 -0
- package/dist/api/utils/create-header-context.js +36 -0
- package/dist/api/utils/create-header-context.js.map +1 -0
- package/dist/api/utils/endpoint-headers.d.ts +23 -0
- package/dist/api/utils/endpoint-headers.d.ts.map +1 -0
- package/dist/api/utils/endpoint-headers.js +57 -0
- package/dist/api/utils/endpoint-headers.js.map +1 -0
- package/dist/api/utils/fetch-base-query.d.ts +9 -0
- package/dist/api/utils/fetch-base-query.d.ts.map +1 -0
- package/dist/api/utils/fetch-base-query.js +181 -0
- package/dist/api/utils/fetch-base-query.js.map +1 -0
- package/dist/api/utils/file-utils.d.ts +43 -0
- package/dist/api/utils/file-utils.d.ts.map +1 -0
- package/dist/api/utils/file-utils.js +108 -0
- package/dist/api/utils/file-utils.js.map +1 -0
- package/dist/api/utils/get-cacheable-headers.d.ts +8 -0
- package/dist/api/utils/get-cacheable-headers.d.ts.map +1 -0
- package/dist/api/utils/get-cacheable-headers.js +21 -0
- package/dist/api/utils/get-cacheable-headers.js.map +1 -0
- package/dist/core/index.d.ts +3 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +3 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/selector/index.d.ts +3 -0
- package/dist/core/selector/index.d.ts.map +1 -0
- package/dist/core/selector/index.js +2 -0
- package/dist/core/selector/index.js.map +1 -0
- package/dist/core/selector/selector.interface.d.ts +91 -0
- package/dist/core/selector/selector.interface.d.ts.map +1 -0
- package/dist/core/selector/selector.interface.js +2 -0
- package/dist/core/selector/selector.interface.js.map +1 -0
- package/dist/core/selector/selector.module.d.ts +29 -0
- package/dist/core/selector/selector.module.d.ts.map +1 -0
- package/dist/core/selector/selector.module.js +467 -0
- package/dist/core/selector/selector.module.js.map +1 -0
- package/dist/core/storage/adapters/base-storage.service.d.ts +65 -0
- package/dist/core/storage/adapters/base-storage.service.d.ts.map +1 -0
- package/dist/core/storage/adapters/base-storage.service.js +660 -0
- package/dist/core/storage/adapters/base-storage.service.js.map +1 -0
- package/dist/core/storage/adapters/idb.d.ts +52 -0
- package/dist/core/storage/adapters/idb.d.ts.map +1 -0
- package/dist/core/storage/adapters/idb.js +528 -0
- package/dist/core/storage/adapters/idb.js.map +1 -0
- package/dist/core/storage/adapters/indexed-DB.service.d.ts +63 -0
- package/dist/core/storage/adapters/indexed-DB.service.d.ts.map +1 -0
- package/dist/core/storage/adapters/indexed-DB.service.js +595 -0
- package/dist/core/storage/adapters/indexed-DB.service.js.map +1 -0
- package/dist/core/storage/adapters/indexed-DB.service.old.d.ts +38 -0
- package/dist/core/storage/adapters/indexed-DB.service.old.d.ts.map +1 -0
- package/dist/core/storage/adapters/indexed-DB.service.old.js +318 -0
- package/dist/core/storage/adapters/indexed-DB.service.old.js.map +1 -0
- package/dist/core/storage/adapters/indexed-DB.service1.d.ts +38 -0
- package/dist/core/storage/adapters/indexed-DB.service1.d.ts.map +1 -0
- package/dist/core/storage/adapters/indexed-DB.service1.js +318 -0
- package/dist/core/storage/adapters/indexed-DB.service1.js.map +1 -0
- package/dist/core/storage/adapters/indexed-DB.service2.d.ts +61 -0
- package/dist/core/storage/adapters/indexed-DB.service2.d.ts.map +1 -0
- package/dist/core/storage/adapters/indexed-DB.service2.js +596 -0
- package/dist/core/storage/adapters/indexed-DB.service2.js.map +1 -0
- package/dist/core/storage/adapters/local-storage.service.d.ts +21 -0
- package/dist/core/storage/adapters/local-storage.service.d.ts.map +1 -0
- package/dist/core/storage/adapters/local-storage.service.js +99 -0
- package/dist/core/storage/adapters/local-storage.service.js.map +1 -0
- package/dist/core/storage/adapters/memory-storage.service.d.ts +22 -0
- package/dist/core/storage/adapters/memory-storage.service.d.ts.map +1 -0
- package/dist/core/storage/adapters/memory-storage.service.js +99 -0
- package/dist/core/storage/adapters/memory-storage.service.js.map +1 -0
- package/dist/core/storage/adapters/path.utils.d.ts +5 -0
- package/dist/core/storage/adapters/path.utils.d.ts.map +1 -0
- package/dist/core/storage/adapters/path.utils.js +35 -0
- package/dist/core/storage/adapters/path.utils.js.map +1 -0
- package/dist/core/storage/factory/createSynapseStorage.factory.d.ts +1 -0
- package/dist/core/storage/factory/createSynapseStorage.factory.d.ts.map +1 -0
- package/dist/core/storage/factory/createSynapseStorage.factory.js +2 -0
- package/dist/core/storage/factory/createSynapseStorage.factory.js.map +1 -0
- package/dist/core/storage/factory/index.d.ts +2 -0
- package/dist/core/storage/factory/index.d.ts.map +1 -0
- package/dist/core/storage/factory/index.js +2 -0
- package/dist/core/storage/factory/index.js.map +1 -0
- package/dist/core/storage/index.d.ts +11 -0
- package/dist/core/storage/index.d.ts.map +1 -0
- package/dist/core/storage/index.js +12 -0
- package/dist/core/storage/index.js.map +1 -0
- package/dist/core/storage/middlewares/broadcast.middleware.d.ts +9 -0
- package/dist/core/storage/middlewares/broadcast.middleware.d.ts.map +1 -0
- package/dist/core/storage/middlewares/broadcast.middleware.js +115 -0
- package/dist/core/storage/middlewares/broadcast.middleware.js.map +1 -0
- package/dist/core/storage/middlewares/index.d.ts +4 -0
- package/dist/core/storage/middlewares/index.d.ts.map +1 -0
- package/dist/core/storage/middlewares/index.js +3 -0
- package/dist/core/storage/middlewares/index.js.map +1 -0
- package/dist/core/storage/middlewares/storage-batching.middleware.d.ts +7 -0
- package/dist/core/storage/middlewares/storage-batching.middleware.d.ts.map +1 -0
- package/dist/core/storage/middlewares/storage-batching.middleware.js +36 -0
- package/dist/core/storage/middlewares/storage-batching.middleware.js.map +1 -0
- package/dist/core/storage/middlewares/storage-shallow-compare.middleware.d.ts +7 -0
- package/dist/core/storage/middlewares/storage-shallow-compare.middleware.d.ts.map +1 -0
- package/dist/core/storage/middlewares/storage-shallow-compare.middleware.js +46 -0
- package/dist/core/storage/middlewares/storage-shallow-compare.middleware.js.map +1 -0
- package/dist/core/storage/modules/plugin/plugin.interface.d.ts +201 -0
- package/dist/core/storage/modules/plugin/plugin.interface.d.ts.map +1 -0
- package/dist/core/storage/modules/plugin/plugin.interface.js +2 -0
- package/dist/core/storage/modules/plugin/plugin.interface.js.map +1 -0
- package/dist/core/storage/modules/plugin/plugin.service.d.ts +25 -0
- package/dist/core/storage/modules/plugin/plugin.service.d.ts.map +1 -0
- package/dist/core/storage/modules/plugin/plugin.service.js +186 -0
- package/dist/core/storage/modules/plugin/plugin.service.js.map +1 -0
- package/dist/core/storage/storage.interface.d.ts +70 -0
- package/dist/core/storage/storage.interface.d.ts.map +1 -0
- package/dist/core/storage/storage.interface.js +10 -0
- package/dist/core/storage/storage.interface.js.map +1 -0
- package/dist/core/storage/utils/batch.utils.d.ts +33 -0
- package/dist/core/storage/utils/batch.utils.d.ts.map +1 -0
- package/dist/core/storage/utils/batch.utils.js +88 -0
- package/dist/core/storage/utils/batch.utils.js.map +1 -0
- package/dist/core/storage/utils/broadcast.util.d.ts +48 -0
- package/dist/core/storage/utils/broadcast.util.d.ts.map +1 -0
- package/dist/core/storage/utils/broadcast.util.js +162 -0
- package/dist/core/storage/utils/broadcast.util.js.map +1 -0
- package/dist/core/storage/utils/cache.util.d.ts +33 -0
- package/dist/core/storage/utils/cache.util.d.ts.map +1 -0
- package/dist/core/storage/utils/cache.util.js +47 -0
- package/dist/core/storage/utils/cache.util.js.map +1 -0
- package/dist/core/storage/utils/middleware-module.d.ts +46 -0
- package/dist/core/storage/utils/middleware-module.d.ts.map +1 -0
- package/dist/core/storage/utils/middleware-module.js +109 -0
- package/dist/core/storage/utils/middleware-module.js.map +1 -0
- package/dist/core/storage/utils/storage-key.d.ts +11 -0
- package/dist/core/storage/utils/storage-key.d.ts.map +1 -0
- package/dist/core/storage/utils/storage-key.js +21 -0
- package/dist/core/storage/utils/storage-key.js.map +1 -0
- package/dist/core/storage/utils/storage.utils.d.ts +17 -0
- package/dist/core/storage/utils/storage.utils.d.ts.map +1 -0
- package/dist/core/storage/utils/storage.utils.js +57 -0
- package/dist/core/storage/utils/storage.utils.js.map +1 -0
- package/dist/examples/_example5.d.ts +1 -0
- package/dist/examples/_example5.d.ts.map +1 -0
- package/dist/examples/_example5.js +184 -0
- package/dist/examples/_example5.js.map +1 -0
- package/dist/examples/_example6.d.ts +1 -0
- package/dist/examples/_example6.d.ts.map +1 -0
- package/dist/examples/_example6.js +168 -0
- package/dist/examples/_example6.js.map +1 -0
- package/dist/examples/plugins.d.ts +1 -0
- package/dist/examples/plugins.d.ts.map +1 -0
- package/dist/examples/plugins.js +176 -0
- package/dist/examples/plugins.js.map +1 -0
- package/dist/examples/pokemons/PokemonList.d.ts +2 -0
- package/dist/examples/pokemons/PokemonList.d.ts.map +1 -0
- package/dist/examples/pokemons/PokemonList.js +110 -0
- package/dist/examples/pokemons/PokemonList.js.map +1 -0
- package/dist/examples/pokemons/api.d.ts +22 -0
- package/dist/examples/pokemons/api.d.ts.map +1 -0
- package/dist/examples/pokemons/api.js +43 -0
- package/dist/examples/pokemons/api.js.map +1 -0
- package/dist/examples/pokemons/app.config.d.ts +15 -0
- package/dist/examples/pokemons/app.config.d.ts.map +1 -0
- package/dist/examples/pokemons/app.config.js +15 -0
- package/dist/examples/pokemons/app.config.js.map +1 -0
- package/dist/examples/pokemons/dispatchers/pokemon.dispatcher.js +128 -0
- package/dist/examples/pokemons/dispatchers/pokemon.dispatcher.js.map +1 -0
- package/dist/examples/pokemons/effects/pokemon.effects.d.ts +16 -0
- package/dist/examples/pokemons/effects/pokemon.effects.d.ts.map +1 -0
- package/dist/examples/pokemons/effects/pokemon.effects.js +51 -0
- package/dist/examples/pokemons/effects/pokemon.effects.js.map +1 -0
- package/dist/examples/pokemons/middlewares/pokenon.middlewares.d.ts +4 -0
- package/dist/examples/pokemons/middlewares/pokenon.middlewares.d.ts.map +1 -0
- package/dist/examples/pokemons/middlewares/pokenon.middlewares.js +28 -0
- package/dist/examples/pokemons/middlewares/pokenon.middlewares.js.map +1 -0
- package/dist/examples/pokemons/selectors/pokemon.selectors.d.ts +13 -0
- package/dist/examples/pokemons/selectors/pokemon.selectors.d.ts.map +1 -0
- package/dist/examples/pokemons/selectors/pokemon.selectors.js +7 -0
- package/dist/examples/pokemons/selectors/pokemon.selectors.js.map +1 -0
- package/dist/examples/pokemons/storages/pokemon.storage.d.ts +5 -0
- package/dist/examples/pokemons/storages/pokemon.storage.d.ts.map +1 -0
- package/dist/examples/pokemons/storages/pokemon.storage.js +13 -0
- package/dist/examples/pokemons/storages/pokemon.storage.js.map +1 -0
- package/dist/examples/pokemons/store.d.ts +35 -0
- package/dist/examples/pokemons/store.d.ts.map +1 -0
- package/dist/examples/pokemons/store.js +21 -0
- package/dist/examples/pokemons/store.js.map +1 -0
- package/dist/examples/pokemons/types.d.ts +26 -0
- package/dist/examples/pokemons/types.d.ts.map +1 -0
- package/dist/examples/pokemons/types.js +2 -0
- package/dist/examples/pokemons/types.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +18 -0
- package/dist/index.js.map +1 -0
- package/dist/react/hooks/index.d.ts +3 -0
- package/dist/react/hooks/index.d.ts.map +1 -0
- package/dist/react/hooks/index.js +3 -0
- package/dist/react/hooks/index.js.map +1 -0
- package/dist/react/hooks/useSelector.d.ts +22 -0
- package/dist/react/hooks/useSelector.d.ts.map +1 -0
- package/dist/react/hooks/useSelector.js +104 -0
- package/dist/react/hooks/useSelector.js.map +1 -0
- package/dist/react/hooks/useStorageSubscribe.d.ts +12 -0
- package/dist/react/hooks/useStorageSubscribe.d.ts.map +1 -0
- package/dist/react/hooks/useStorageSubscribe.js +49 -0
- package/dist/react/hooks/useStorageSubscribe.js.map +1 -0
- package/dist/react/index.d.ts +3 -0
- package/dist/react/index.d.ts.map +1 -0
- package/dist/react/index.js +3 -0
- package/dist/react/index.js.map +1 -0
- package/dist/react/utils/createSynapse.d.ts +47 -0
- package/dist/react/utils/createSynapse.d.ts.map +1 -0
- package/dist/react/utils/createSynapse.js +83 -0
- package/dist/react/utils/createSynapse.js.map +1 -0
- package/dist/react/utils/createSynapseContext.d.ts +29 -0
- package/dist/react/utils/createSynapseContext.d.ts.map +1 -0
- package/dist/react/utils/createSynapseContext.js +112 -0
- package/dist/react/utils/createSynapseContext.js.map +1 -0
- package/dist/react/utils/createSynapseCtx.d.ts +30 -0
- package/dist/react/utils/createSynapseCtx.d.ts.map +1 -0
- package/dist/react/utils/createSynapseCtx.js +124 -0
- package/dist/react/utils/createSynapseCtx.js.map +1 -0
- package/dist/react/utils/index.d.ts +2 -0
- package/dist/react/utils/index.d.ts.map +1 -0
- package/dist/react/utils/index.js +2 -0
- package/dist/react/utils/index.js.map +1 -0
- package/dist/reactive/dispatcher/dispatcher.module.d.ts +195 -0
- package/dist/reactive/dispatcher/dispatcher.module.d.ts.map +1 -0
- package/dist/reactive/dispatcher/dispatcher.module.js +288 -0
- package/dist/reactive/dispatcher/dispatcher.module.js.map +1 -0
- package/dist/reactive/dispatcher/index.d.ts +3 -0
- package/dist/reactive/dispatcher/index.d.ts.map +1 -0
- package/dist/reactive/dispatcher/index.js +3 -0
- package/dist/reactive/dispatcher/index.js.map +1 -0
- package/dist/reactive/dispatcher/middlewares/index.d.ts +2 -0
- package/dist/reactive/dispatcher/middlewares/index.d.ts.map +1 -0
- package/dist/reactive/dispatcher/middlewares/index.js +2 -0
- package/dist/reactive/dispatcher/middlewares/index.js.map +1 -0
- package/dist/reactive/dispatcher/middlewares/logger.middleware.d.ts +31 -0
- package/dist/reactive/dispatcher/middlewares/logger.middleware.d.ts.map +1 -0
- package/dist/reactive/dispatcher/middlewares/logger.middleware.js +126 -0
- package/dist/reactive/dispatcher/middlewares/logger.middleware.js.map +1 -0
- package/dist/reactive/effects/effects.module.d.ts +140 -0
- package/dist/reactive/effects/effects.module.d.ts.map +1 -0
- package/dist/reactive/effects/effects.module.js +263 -0
- package/dist/reactive/effects/effects.module.js.map +1 -0
- package/dist/reactive/effects/index.d.ts +2 -0
- package/dist/reactive/effects/index.d.ts.map +1 -0
- package/dist/reactive/effects/index.js +2 -0
- package/dist/reactive/effects/index.js.map +1 -0
- package/dist/reactive/effects/utils/chunkRequestConsistent.d.ts +12 -0
- package/dist/reactive/effects/utils/chunkRequestConsistent.d.ts.map +1 -0
- package/dist/reactive/effects/utils/chunkRequestConsistent.js +16 -0
- package/dist/reactive/effects/utils/chunkRequestConsistent.js.map +1 -0
- package/dist/reactive/effects/utils/chunkRequestParallel.d.ts +12 -0
- package/dist/reactive/effects/utils/chunkRequestParallel.d.ts.map +1 -0
- package/dist/reactive/effects/utils/chunkRequestParallel.js +13 -0
- package/dist/reactive/effects/utils/chunkRequestParallel.js.map +1 -0
- package/dist/reactive/effects/utils/index.d.ts +3 -0
- package/dist/reactive/effects/utils/index.d.ts.map +1 -0
- package/dist/reactive/effects/utils/index.js +3 -0
- package/dist/reactive/effects/utils/index.js.map +1 -0
- package/dist/reactive/index.d.ts +3 -0
- package/dist/reactive/index.d.ts.map +1 -0
- package/dist/reactive/index.js +3 -0
- package/dist/reactive/index.js.map +1 -0
- package/dist/utils/chunk.util.d.ts +8 -0
- package/dist/utils/chunk.util.d.ts.map +1 -0
- package/dist/utils/chunk.util.js +21 -0
- package/dist/utils/chunk.util.js.map +1 -0
- package/dist/utils/createSynapse.d.ts +52 -0
- package/dist/utils/createSynapse.d.ts.map +1 -0
- package/dist/utils/createSynapse.js +87 -0
- package/dist/utils/createSynapse.js.map +1 -0
- package/dist/utils/deepMerge.util.d.ts +2 -0
- package/dist/utils/deepMerge.util.d.ts.map +1 -0
- package/dist/utils/deepMerge.util.js +16 -0
- package/dist/utils/deepMerge.util.js.map +1 -0
- package/dist/utils/flatMap.util.d.ts +10 -0
- package/dist/utils/flatMap.util.d.ts.map +1 -0
- package/dist/utils/flatMap.util.js +23 -0
- package/dist/utils/flatMap.util.js.map +1 -0
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +2 -0
- package/dist/utils/index.js.map +1 -0
- package/package.json +111 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-helpers.js","sourceRoot":"","sources":["../../../src/api/utils/api-helpers.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,KAAK,EAAE,CAAC,OAAe,EAAE,GAAG,IAAW,EAAE,EAAE;QACzC,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,EAAE,CAAC;YAC1C,OAAO,CAAC,KAAK,CAAC,SAAS,OAAO,EAAE,EAAE,GAAG,IAAI,CAAC,CAAA;QAC5C,CAAC;IACH,CAAC;IAED,GAAG,EAAE,CAAC,OAAe,EAAE,GAAG,IAAW,EAAE,EAAE;QACvC,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,EAAE,CAAC;YAC1C,OAAO,CAAC,GAAG,CAAC,SAAS,OAAO,EAAE,EAAE,GAAG,IAAI,CAAC,CAAA;QAC1C,CAAC;IACH,CAAC;IAED,IAAI,EAAE,CAAC,OAAe,EAAE,GAAG,IAAW,EAAE,EAAE;QACxC,OAAO,CAAC,IAAI,CAAC,SAAS,OAAO,EAAE,EAAE,GAAG,IAAI,CAAC,CAAA;IAC3C,CAAC;IAED,IAAI,EAAE,CAAC,OAAe,EAAE,GAAG,IAAW,EAAE,EAAE;QACxC,OAAO,CAAC,IAAI,CAAC,SAAS,OAAO,EAAE,EAAE,GAAG,IAAI,CAAC,CAAA;IAC3C,CAAC;IAED,KAAK,EAAE,CAAC,OAAe,EAAE,GAAG,IAAW,EAAE,EAAE;QACzC,OAAO,CAAC,KAAK,CAAC,SAAS,OAAO,EAAE,EAAE,GAAG,IAAI,CAAC,CAAA;IAC5C,CAAC;CACF,CAAA;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,IAAa;IAC1C,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAA;AAC3G,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,OAAgB;IAC9C,MAAM,MAAM,GAA2B,EAAE,CAAA;IACzC,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QAC7B,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,GAAG,KAAK,CAAA;IACnC,CAAC,CAAC,CAAA;IACF,OAAO,MAAM,CAAA;AACf,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { ApiContext } from '../types/api.interface';
|
|
2
|
+
/**
|
|
3
|
+
* Создает контекст для подготовки заголовков
|
|
4
|
+
*
|
|
5
|
+
* @param context - базовый контекст
|
|
6
|
+
* @param optionContext - дополнительный контекст из опций
|
|
7
|
+
* @returns - полный контекст для подготовки заголовков
|
|
8
|
+
*/
|
|
9
|
+
export declare function createHeaderContext<RequestParams extends Record<string, any>>(context?: Partial<ApiContext>, optionContext?: Record<string, any>): ApiContext<RequestParams>;
|
|
10
|
+
//# sourceMappingURL=create-header-context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-header-context.d.ts","sourceRoot":"","sources":["../../../src/api/utils/create-header-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AAEnD;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,aAAa,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC3E,OAAO,GAAE,OAAO,CAAC,UAAU,CAAmC,EAC9D,aAAa,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAM,GACtC,UAAU,CAAC,aAAa,CAAC,CA2B3B"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Создает контекст для подготовки заголовков
|
|
3
|
+
*
|
|
4
|
+
* @param context - базовый контекст
|
|
5
|
+
* @param optionContext - дополнительный контекст из опций
|
|
6
|
+
* @returns - полный контекст для подготовки заголовков
|
|
7
|
+
*/
|
|
8
|
+
export function createHeaderContext(context = {}, optionContext = {}) {
|
|
9
|
+
return {
|
|
10
|
+
...context,
|
|
11
|
+
...optionContext,
|
|
12
|
+
getFromStorage: context.getFromStorage ||
|
|
13
|
+
((key) => {
|
|
14
|
+
try {
|
|
15
|
+
const item = localStorage.getItem(key);
|
|
16
|
+
return item ? JSON.parse(item) : undefined;
|
|
17
|
+
}
|
|
18
|
+
catch (error) {
|
|
19
|
+
console.warn(`[API] Ошибка чтения из localStorage: ${error}`);
|
|
20
|
+
return undefined;
|
|
21
|
+
}
|
|
22
|
+
}),
|
|
23
|
+
getCookie: context.getCookie ||
|
|
24
|
+
((name) => {
|
|
25
|
+
try {
|
|
26
|
+
const matches = document.cookie.match(new RegExp(`(?:^|; )${name.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g, '\\$1')}=([^;]*)`));
|
|
27
|
+
return matches ? decodeURIComponent(matches[1]) : undefined;
|
|
28
|
+
}
|
|
29
|
+
catch (error) {
|
|
30
|
+
console.warn(`[API] Ошибка чтения cookie: ${error}`);
|
|
31
|
+
return undefined;
|
|
32
|
+
}
|
|
33
|
+
}),
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=create-header-context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-header-context.js","sourceRoot":"","sources":["../../../src/api/utils/create-header-context.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,MAAM,UAAU,mBAAmB,CACjC,UAA+B,EAA+B,EAC9D,gBAAqC,EAAE;IAEvC,OAAO;QACL,GAAG,OAAO;QACV,GAAG,aAAa;QAChB,cAAc,EACZ,OAAO,CAAC,cAAc;YACtB,CAAC,CAAC,GAAW,EAAE,EAAE;gBACf,IAAI,CAAC;oBACH,MAAM,IAAI,GAAG,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;oBACtC,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;gBAC5C,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,OAAO,CAAC,IAAI,CAAC,wCAAwC,KAAK,EAAE,CAAC,CAAA;oBAC7D,OAAO,SAAS,CAAA;gBAClB,CAAC;YACH,CAAC,CAAC;QACJ,SAAS,EACP,OAAO,CAAC,SAAS;YACjB,CAAC,CAAC,IAAY,EAAE,EAAE;gBAChB,IAAI,CAAC;oBACH,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,WAAW,IAAI,CAAC,OAAO,CAAC,8BAA8B,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,CAAA;oBAC5H,OAAO,OAAO,CAAC,CAAC,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;gBAC7D,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,OAAO,CAAC,IAAI,CAAC,+BAA+B,KAAK,EAAE,CAAC,CAAA;oBACpD,OAAO,SAAS,CAAA;gBAClB,CAAC;YACH,CAAC,CAAC;KACL,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { ApiContext } from '../types/api.interface';
|
|
2
|
+
/**
|
|
3
|
+
* Тип функции для подготовки заголовков запроса
|
|
4
|
+
*/
|
|
5
|
+
export type PrepareHeadersFunction = (headers: Headers, context: ApiContext<any>) => Promise<Headers>;
|
|
6
|
+
/**
|
|
7
|
+
* Подготавливает заголовки для запроса на основе контекста и пользовательских функций
|
|
8
|
+
*
|
|
9
|
+
* @param prepareHeadersFn - функция подготовки заголовков
|
|
10
|
+
* @param context - контекст запроса
|
|
11
|
+
* @returns - подготовленные заголовки
|
|
12
|
+
*/
|
|
13
|
+
export declare function prepareRequestHeaders<RequestParams extends Record<string, any>>(prepareHeadersFn?: PrepareHeadersFunction, context?: ApiContext<RequestParams>): Promise<Headers>;
|
|
14
|
+
/**
|
|
15
|
+
* Создает комбинированную функцию для подготовки заголовков, объединяющую
|
|
16
|
+
* глобальные заголовки и заголовки эндпоинта
|
|
17
|
+
*
|
|
18
|
+
* @param globalPrepareHeaders - функция подготовки заголовков на глобальном уровне
|
|
19
|
+
* @param endpointPrepareHeaders - функция подготовки заголовков на уровне эндпоинта
|
|
20
|
+
* @returns - функция для подготовки заголовков
|
|
21
|
+
*/
|
|
22
|
+
export declare function createPrepareHeaders(globalPrepareHeaders?: PrepareHeadersFunction, endpointPrepareHeaders?: PrepareHeadersFunction): PrepareHeadersFunction;
|
|
23
|
+
//# sourceMappingURL=endpoint-headers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"endpoint-headers.d.ts","sourceRoot":"","sources":["../../../src/api/utils/endpoint-headers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AAGnD;;GAEG;AACH,MAAM,MAAM,sBAAsB,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,CAAC,GAAG,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;AAErG;;;;;;GAMG;AACH,wBAAsB,qBAAqB,CAAC,aAAa,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACnF,gBAAgB,CAAC,EAAE,sBAAsB,EACzC,OAAO,CAAC,EAAE,UAAU,CAAC,aAAa,CAAC,GAClC,OAAO,CAAC,OAAO,CAAC,CAiBlB;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,oBAAoB,CAAC,EAAE,sBAAsB,EAAE,sBAAsB,CAAC,EAAE,sBAAsB,GAAG,sBAAsB,CAwB3J"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { createHeaderContext } from './create-header-context';
|
|
2
|
+
/**
|
|
3
|
+
* Подготавливает заголовки для запроса на основе контекста и пользовательских функций
|
|
4
|
+
*
|
|
5
|
+
* @param prepareHeadersFn - функция подготовки заголовков
|
|
6
|
+
* @param context - контекст запроса
|
|
7
|
+
* @returns - подготовленные заголовки
|
|
8
|
+
*/
|
|
9
|
+
export async function prepareRequestHeaders(prepareHeadersFn, context) {
|
|
10
|
+
// Создаем заголовки
|
|
11
|
+
let headers = new Headers();
|
|
12
|
+
// Создаем контекст, если он не передан
|
|
13
|
+
const headerContext = context || createHeaderContext({}, {});
|
|
14
|
+
// Применяем функцию подготовки заголовков, если она определена
|
|
15
|
+
if (prepareHeadersFn) {
|
|
16
|
+
try {
|
|
17
|
+
headers = await Promise.resolve(prepareHeadersFn(headers, headerContext));
|
|
18
|
+
}
|
|
19
|
+
catch (error) {
|
|
20
|
+
console.warn('[API] Ошибка при подготовке заголовков', error);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
return headers;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Создает комбинированную функцию для подготовки заголовков, объединяющую
|
|
27
|
+
* глобальные заголовки и заголовки эндпоинта
|
|
28
|
+
*
|
|
29
|
+
* @param globalPrepareHeaders - функция подготовки заголовков на глобальном уровне
|
|
30
|
+
* @param endpointPrepareHeaders - функция подготовки заголовков на уровне эндпоинта
|
|
31
|
+
* @returns - функция для подготовки заголовков
|
|
32
|
+
*/
|
|
33
|
+
export function createPrepareHeaders(globalPrepareHeaders, endpointPrepareHeaders) {
|
|
34
|
+
return async (headers, context) => {
|
|
35
|
+
let processedHeaders = new Headers(headers);
|
|
36
|
+
// Применяем глобальную функцию подготовки заголовков, если она определена
|
|
37
|
+
if (globalPrepareHeaders) {
|
|
38
|
+
try {
|
|
39
|
+
processedHeaders = await Promise.resolve(globalPrepareHeaders(processedHeaders, context));
|
|
40
|
+
}
|
|
41
|
+
catch (error) {
|
|
42
|
+
console.warn('[API] Ошибка при подготовке глобальных заголовков', error);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
// Применяем функцию подготовки заголовков эндпоинта, если она определена
|
|
46
|
+
if (endpointPrepareHeaders) {
|
|
47
|
+
try {
|
|
48
|
+
processedHeaders = await Promise.resolve(endpointPrepareHeaders(processedHeaders, context));
|
|
49
|
+
}
|
|
50
|
+
catch (error) {
|
|
51
|
+
console.warn('[API] Ошибка при подготовке заголовков эндпоинта', error);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return processedHeaders;
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=endpoint-headers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"endpoint-headers.js","sourceRoot":"","sources":["../../../src/api/utils/endpoint-headers.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAA;AAO7D;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,gBAAyC,EACzC,OAAmC;IAEnC,oBAAoB;IACpB,IAAI,OAAO,GAAG,IAAI,OAAO,EAAE,CAAA;IAE3B,uCAAuC;IACvC,MAAM,aAAa,GAAG,OAAO,IAAI,mBAAmB,CAAC,EAA+B,EAAE,EAAE,CAAC,CAAA;IAEzF,+DAA+D;IAC/D,IAAI,gBAAgB,EAAE,CAAC;QACrB,IAAI,CAAC;YACH,OAAO,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,gBAAgB,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC,CAAA;QAC3E,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,wCAAwC,EAAE,KAAK,CAAC,CAAA;QAC/D,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAA;AAChB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,oBAAoB,CAAC,oBAA6C,EAAE,sBAA+C;IACjI,OAAO,KAAK,EAAE,OAAgB,EAAE,OAAwB,EAAoB,EAAE;QAC5E,IAAI,gBAAgB,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,CAAA;QAE3C,0EAA0E;QAC1E,IAAI,oBAAoB,EAAE,CAAC;YACzB,IAAI,CAAC;gBACH,gBAAgB,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,oBAAoB,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC,CAAA;YAC3F,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,IAAI,CAAC,mDAAmD,EAAE,KAAK,CAAC,CAAA;YAC1E,CAAC;QACH,CAAC;QAED,yEAAyE;QACzE,IAAI,sBAAsB,EAAE,CAAC;YAC3B,IAAI,CAAC;gBACH,gBAAgB,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,sBAAsB,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC,CAAA;YAC7F,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,IAAI,CAAC,kDAAkD,EAAE,KAAK,CAAC,CAAA;YACzE,CAAC;QACH,CAAC;QAED,OAAO,gBAAgB,CAAA;IACzB,CAAC,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { FetchBaseQueryArgs, RequestDefinition } from '../types/api.interface';
|
|
2
|
+
import { QueryOptions, QueryResult } from '../types/query.interface';
|
|
3
|
+
/**
|
|
4
|
+
* Создает базовый fetch-клиент для запросов с поддержкой файлов
|
|
5
|
+
* @param options Настройки базового клиента
|
|
6
|
+
* @returns Функция для выполнения запросов
|
|
7
|
+
*/
|
|
8
|
+
export declare function fetchBaseQuery(options: Omit<FetchBaseQueryArgs, 'prepareHeaders'>): <RequestResult, RequestParams extends Record<string, any>, E extends Error = Error>(args: RequestDefinition<RequestParams>, queryOptions: QueryOptions | undefined, headers: Headers) => Promise<QueryResult<RequestResult, E>>;
|
|
9
|
+
//# sourceMappingURL=fetch-base-query.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetch-base-query.d.ts","sourceRoot":"","sources":["../../../src/api/utils/fetch-base-query.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,kBAAkB,EAAE,iBAAiB,EAAkB,MAAM,wBAAwB,CAAA;AAC1G,OAAO,EAAsB,YAAY,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AAqFxF;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,kBAAkB,EAAE,gBAAgB,CAAC,IAGlE,aAAa,EAAE,aAAa,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,SAAS,KAAK,GAAG,KAAK,EAC7F,MAAM,iBAAiB,CAAC,aAAa,CAAC,EACtC,cAAc,YAAY,YAAK,EAC/B,SAAS,OAAO,KACf,OAAO,CAAC,WAAW,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,CAsG1C"}
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
import { ResponseFormat } from '../types/api.interface';
|
|
2
|
+
import { getFileMetadataFromHeaders, getResponseFormatForMimeType, isFileResponse } from './file-utils';
|
|
3
|
+
/**
|
|
4
|
+
* Извлекает данные из response в зависимости от формата
|
|
5
|
+
* @param response Объект Response
|
|
6
|
+
* @param format Формат ответа
|
|
7
|
+
* @returns Объект с данными или ошибкой
|
|
8
|
+
*/
|
|
9
|
+
async function getResponseData(response, format) {
|
|
10
|
+
let responseFormat = format;
|
|
11
|
+
const contentType = response.headers.get('content-type') || '';
|
|
12
|
+
// Если формат не указан, пытаемся определить его из MIME-типа
|
|
13
|
+
if (!responseFormat && contentType) {
|
|
14
|
+
// Проверка, является ли ответ файлом на основе заголовков
|
|
15
|
+
if (isFileResponse(response.headers)) {
|
|
16
|
+
responseFormat = ResponseFormat.Blob;
|
|
17
|
+
}
|
|
18
|
+
else {
|
|
19
|
+
responseFormat = getResponseFormatForMimeType(contentType);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
// Если формат всё ещё не определен, используем JSON по умолчанию
|
|
23
|
+
if (!responseFormat) {
|
|
24
|
+
responseFormat = ResponseFormat.Json;
|
|
25
|
+
}
|
|
26
|
+
try {
|
|
27
|
+
// Получение метаданных файла, если формат указывает на файл
|
|
28
|
+
let fileMetadata;
|
|
29
|
+
if (responseFormat === ResponseFormat.Blob || responseFormat === ResponseFormat.ArrayBuffer) {
|
|
30
|
+
fileMetadata = getFileMetadataFromHeaders(response.headers);
|
|
31
|
+
}
|
|
32
|
+
// Обработка данных в зависимости от формата
|
|
33
|
+
switch (responseFormat) {
|
|
34
|
+
case ResponseFormat.Json: {
|
|
35
|
+
// Пробуем получить JSON-данные
|
|
36
|
+
try {
|
|
37
|
+
const data = await response.json();
|
|
38
|
+
return response.ok ? { data: data, fileMetadata } : { error: data, fileMetadata };
|
|
39
|
+
}
|
|
40
|
+
catch (error) {
|
|
41
|
+
// Если не удалось разобрать JSON, возвращаем текст
|
|
42
|
+
const text = await response.text();
|
|
43
|
+
return response.ok ? { data: text, fileMetadata } : { error: text, fileMetadata };
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
case ResponseFormat.Text: {
|
|
47
|
+
const text = await response.text();
|
|
48
|
+
return response.ok ? { data: text, fileMetadata } : { error: text, fileMetadata };
|
|
49
|
+
}
|
|
50
|
+
case ResponseFormat.Blob: {
|
|
51
|
+
const blob = await response.blob();
|
|
52
|
+
return response.ok ? { data: blob, fileMetadata } : { error: blob, fileMetadata };
|
|
53
|
+
}
|
|
54
|
+
case ResponseFormat.ArrayBuffer: {
|
|
55
|
+
const buffer = await response.arrayBuffer();
|
|
56
|
+
return response.ok ? { data: buffer, fileMetadata } : { error: buffer, fileMetadata };
|
|
57
|
+
}
|
|
58
|
+
case ResponseFormat.FormData: {
|
|
59
|
+
const formData = await response.formData();
|
|
60
|
+
return response.ok ? { data: formData, fileMetadata } : { error: formData, fileMetadata };
|
|
61
|
+
}
|
|
62
|
+
case ResponseFormat.Raw: {
|
|
63
|
+
return response.ok ? { data: response, fileMetadata } : { error: response, fileMetadata };
|
|
64
|
+
}
|
|
65
|
+
default:
|
|
66
|
+
// Если формат неизвестен, возвращаем blob как наиболее универсальный
|
|
67
|
+
// eslint-disable-next-line no-case-declarations
|
|
68
|
+
const blob = await response.blob();
|
|
69
|
+
return response.ok ? { data: blob, fileMetadata } : { error: blob, fileMetadata };
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
catch (err) {
|
|
73
|
+
console.error(`[API] Ошибка извлечения данных из ответа (формат: ${responseFormat})`, err);
|
|
74
|
+
return response.ok ? { data: undefined } : { error: err };
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Создает базовый fetch-клиент для запросов с поддержкой файлов
|
|
79
|
+
* @param options Настройки базового клиента
|
|
80
|
+
* @returns Функция для выполнения запросов
|
|
81
|
+
*/
|
|
82
|
+
export function fetchBaseQuery(options) {
|
|
83
|
+
const { baseUrl, timeout = 30000, fetchFn = fetch, credentials = 'same-origin' } = options;
|
|
84
|
+
return async (args, queryOptions = {}, headers) => {
|
|
85
|
+
const { path, method, body, query, responseFormat: reqResponseFormat } = args;
|
|
86
|
+
const { signal, timeout: requestTimeout = timeout, responseFormat: optResponseFormat } = queryOptions;
|
|
87
|
+
// Определяем формат ответа с приоритетом от options
|
|
88
|
+
const responseFormat = optResponseFormat || reqResponseFormat;
|
|
89
|
+
// Строим URL с учетом api параметров
|
|
90
|
+
const url = new URL(path.startsWith('http') ? path : `${baseUrl}${path}`);
|
|
91
|
+
// Добавляем query-параметры в URL
|
|
92
|
+
if (query) {
|
|
93
|
+
Object.entries(query).forEach(([key, value]) => {
|
|
94
|
+
if (value !== undefined && value !== null) {
|
|
95
|
+
if (Array.isArray(value)) {
|
|
96
|
+
value.forEach((item) => url.searchParams.append(key, String(item)));
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
url.searchParams.append(key, String(value));
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
// Если body это объект, конвертируем в JSON и устанавливаем Content-Type
|
|
105
|
+
let serializedBody;
|
|
106
|
+
if (body !== undefined) {
|
|
107
|
+
if (body instanceof FormData || body instanceof Blob) {
|
|
108
|
+
serializedBody = body;
|
|
109
|
+
}
|
|
110
|
+
else if (typeof body === 'object' && body !== null) {
|
|
111
|
+
try {
|
|
112
|
+
serializedBody = JSON.stringify(body);
|
|
113
|
+
if (!headers.has('Content-Type')) {
|
|
114
|
+
headers.set('Content-Type', 'application/json');
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
catch (error) {
|
|
118
|
+
console.error('[API] Ошибка сериализации тела запроса', error);
|
|
119
|
+
serializedBody = String(body);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
serializedBody = String(body);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
// Создаем таймаут если указан
|
|
127
|
+
let timeoutId;
|
|
128
|
+
const timeoutPromise = new Promise((_, reject) => {
|
|
129
|
+
if (requestTimeout) {
|
|
130
|
+
timeoutId = window.setTimeout(() => {
|
|
131
|
+
reject(new Error(`Превышено время ожидания запроса (${requestTimeout}мс)`));
|
|
132
|
+
}, requestTimeout);
|
|
133
|
+
}
|
|
134
|
+
});
|
|
135
|
+
try {
|
|
136
|
+
// Выполняем запрос
|
|
137
|
+
const fetchPromise = fetchFn(url.toString(), {
|
|
138
|
+
method,
|
|
139
|
+
headers,
|
|
140
|
+
body: serializedBody,
|
|
141
|
+
signal,
|
|
142
|
+
credentials,
|
|
143
|
+
});
|
|
144
|
+
// Используем Promise.race для обработки таймаута
|
|
145
|
+
const response = await Promise.race([fetchPromise, timeoutPromise]);
|
|
146
|
+
// Обрабатываем ответ
|
|
147
|
+
const { data, error, fileMetadata } = await getResponseData(response, responseFormat);
|
|
148
|
+
// Формируем результат запроса
|
|
149
|
+
const result = {
|
|
150
|
+
data,
|
|
151
|
+
error,
|
|
152
|
+
ok: response.ok,
|
|
153
|
+
status: response.status,
|
|
154
|
+
statusText: response.statusText,
|
|
155
|
+
headers: response.headers,
|
|
156
|
+
fileDownloadResult: fileMetadata,
|
|
157
|
+
};
|
|
158
|
+
return result;
|
|
159
|
+
}
|
|
160
|
+
catch (err) {
|
|
161
|
+
// Обрабатываем ошибки сети или таймаута
|
|
162
|
+
const error = err;
|
|
163
|
+
console.error('[API] Ошибка выполнения запроса', error);
|
|
164
|
+
// Формируем результат с ошибкой
|
|
165
|
+
return {
|
|
166
|
+
error: error,
|
|
167
|
+
ok: false,
|
|
168
|
+
status: 0,
|
|
169
|
+
statusText: error.message,
|
|
170
|
+
headers: new Headers(),
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
finally {
|
|
174
|
+
// Очищаем таймер в любом случае
|
|
175
|
+
if (timeoutId) {
|
|
176
|
+
window.clearTimeout(timeoutId);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
//# sourceMappingURL=fetch-base-query.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetch-base-query.js","sourceRoot":"","sources":["../../../src/api/utils/fetch-base-query.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { ResponseFormat } from '../types/api.interface';
|
|
2
|
+
/**
|
|
3
|
+
* Получает формат ответа на основе MIME-типа
|
|
4
|
+
* @param contentType MIME-тип контента
|
|
5
|
+
* @returns Формат ответа
|
|
6
|
+
*/
|
|
7
|
+
export declare function getResponseFormatForMimeType(contentType: string): ResponseFormat | undefined;
|
|
8
|
+
/**
|
|
9
|
+
* Проверяет, является ли ответ файлом на основе заголовков
|
|
10
|
+
* @param headers Заголовки ответа
|
|
11
|
+
* @returns true если ответ является файлом
|
|
12
|
+
*/
|
|
13
|
+
export declare function isFileResponse(headers: Headers): boolean;
|
|
14
|
+
/**
|
|
15
|
+
* Извлекает имя файла из заголовков
|
|
16
|
+
* @param headers Заголовки ответа
|
|
17
|
+
* @returns Имя файла
|
|
18
|
+
*/
|
|
19
|
+
export declare function extractFilenameFromHeaders(headers: Headers): string | undefined;
|
|
20
|
+
/**
|
|
21
|
+
* Извлекает метаданные файла из заголовков
|
|
22
|
+
* @param headers Заголовки ответа
|
|
23
|
+
* @returns Метаданные файла
|
|
24
|
+
*/
|
|
25
|
+
export declare function getFileMetadataFromHeaders(headers: Headers): Record<string, any> | undefined;
|
|
26
|
+
/**
|
|
27
|
+
* Создает blob URL для файла
|
|
28
|
+
* @param blob Объект Blob или File
|
|
29
|
+
* @returns URL для доступа к файлу
|
|
30
|
+
*/
|
|
31
|
+
export declare function createBlobUrl(blob: Blob): string;
|
|
32
|
+
/**
|
|
33
|
+
* Освобождает blob URL
|
|
34
|
+
* @param url URL для освобождения
|
|
35
|
+
*/
|
|
36
|
+
export declare function revokeBlobUrl(url: string): void;
|
|
37
|
+
/**
|
|
38
|
+
* Скачивает файл в браузере
|
|
39
|
+
* @param blob Объект Blob или File
|
|
40
|
+
* @param filename Имя файла
|
|
41
|
+
*/
|
|
42
|
+
export declare function downloadBlob(blob: Blob, filename: string): void;
|
|
43
|
+
//# sourceMappingURL=file-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-utils.d.ts","sourceRoot":"","sources":["../../../src/api/utils/file-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAEvD;;;;GAIG;AACH,wBAAgB,4BAA4B,CAAC,WAAW,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAoB5F;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAgBxD;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAa/E;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,SAAS,CAiB5F;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAEhD;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAE/C;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAS/D"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { ResponseFormat } from '../types/api.interface';
|
|
2
|
+
/**
|
|
3
|
+
* Получает формат ответа на основе MIME-типа
|
|
4
|
+
* @param contentType MIME-тип контента
|
|
5
|
+
* @returns Формат ответа
|
|
6
|
+
*/
|
|
7
|
+
export function getResponseFormatForMimeType(contentType) {
|
|
8
|
+
const type = contentType.toLowerCase().split(';')[0].trim();
|
|
9
|
+
if (type.includes('application/json')) {
|
|
10
|
+
return ResponseFormat.Json;
|
|
11
|
+
}
|
|
12
|
+
if (type.includes('text/')) {
|
|
13
|
+
return ResponseFormat.Text;
|
|
14
|
+
}
|
|
15
|
+
if (type.includes('multipart/form-data')) {
|
|
16
|
+
return ResponseFormat.FormData;
|
|
17
|
+
}
|
|
18
|
+
if (type.includes('application/octet-stream') || type.includes('application/pdf') || type.includes('image/') || type.includes('audio/') || type.includes('video/')) {
|
|
19
|
+
return ResponseFormat.Blob;
|
|
20
|
+
}
|
|
21
|
+
return undefined;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Проверяет, является ли ответ файлом на основе заголовков
|
|
25
|
+
* @param headers Заголовки ответа
|
|
26
|
+
* @returns true если ответ является файлом
|
|
27
|
+
*/
|
|
28
|
+
export function isFileResponse(headers) {
|
|
29
|
+
const contentType = headers.get('content-type') || '';
|
|
30
|
+
const contentDisposition = headers.get('content-disposition') || '';
|
|
31
|
+
// Проверяем по типу контента
|
|
32
|
+
const isFileContentType = contentType.includes('application/octet-stream') ||
|
|
33
|
+
contentType.includes('application/pdf') ||
|
|
34
|
+
contentType.includes('image/') ||
|
|
35
|
+
contentType.includes('audio/') ||
|
|
36
|
+
contentType.includes('video/');
|
|
37
|
+
// Проверяем по заголовку content-disposition
|
|
38
|
+
const isAttachment = contentDisposition.includes('attachment') || contentDisposition.includes('filename=');
|
|
39
|
+
return isFileContentType || isAttachment;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Извлекает имя файла из заголовков
|
|
43
|
+
* @param headers Заголовки ответа
|
|
44
|
+
* @returns Имя файла
|
|
45
|
+
*/
|
|
46
|
+
export function extractFilenameFromHeaders(headers) {
|
|
47
|
+
const contentDisposition = headers.get('content-disposition');
|
|
48
|
+
if (!contentDisposition)
|
|
49
|
+
return undefined;
|
|
50
|
+
// Пытаемся извлечь имя файла из content-disposition
|
|
51
|
+
const filenameMatch = contentDisposition.match(/filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/);
|
|
52
|
+
if (filenameMatch && filenameMatch[1]) {
|
|
53
|
+
// Очищаем от кавычек
|
|
54
|
+
return filenameMatch[1].replace(/['"]/g, '').trim();
|
|
55
|
+
}
|
|
56
|
+
return undefined;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Извлекает метаданные файла из заголовков
|
|
60
|
+
* @param headers Заголовки ответа
|
|
61
|
+
* @returns Метаданные файла
|
|
62
|
+
*/
|
|
63
|
+
export function getFileMetadataFromHeaders(headers) {
|
|
64
|
+
const contentType = headers.get('content-type') || '';
|
|
65
|
+
const contentDisposition = headers.get('content-disposition') || '';
|
|
66
|
+
const contentLength = headers.get('content-length');
|
|
67
|
+
if (!isFileResponse(headers)) {
|
|
68
|
+
return undefined;
|
|
69
|
+
}
|
|
70
|
+
const filename = extractFilenameFromHeaders(headers);
|
|
71
|
+
return {
|
|
72
|
+
filename,
|
|
73
|
+
contentType,
|
|
74
|
+
contentDisposition,
|
|
75
|
+
size: contentLength ? parseInt(contentLength, 10) : undefined,
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Создает blob URL для файла
|
|
80
|
+
* @param blob Объект Blob или File
|
|
81
|
+
* @returns URL для доступа к файлу
|
|
82
|
+
*/
|
|
83
|
+
export function createBlobUrl(blob) {
|
|
84
|
+
return URL.createObjectURL(blob);
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Освобождает blob URL
|
|
88
|
+
* @param url URL для освобождения
|
|
89
|
+
*/
|
|
90
|
+
export function revokeBlobUrl(url) {
|
|
91
|
+
URL.revokeObjectURL(url);
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Скачивает файл в браузере
|
|
95
|
+
* @param blob Объект Blob или File
|
|
96
|
+
* @param filename Имя файла
|
|
97
|
+
*/
|
|
98
|
+
export function downloadBlob(blob, filename) {
|
|
99
|
+
const url = createBlobUrl(blob);
|
|
100
|
+
const link = document.createElement('a');
|
|
101
|
+
link.href = url;
|
|
102
|
+
link.download = filename;
|
|
103
|
+
document.body.appendChild(link);
|
|
104
|
+
link.click();
|
|
105
|
+
document.body.removeChild(link);
|
|
106
|
+
setTimeout(() => revokeBlobUrl(url), 100);
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=file-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-utils.js","sourceRoot":"","sources":["../../../src/api/utils/file-utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Создает объект с заголовками для кэширования на основе списка допустимых ключей
|
|
3
|
+
* @param headers Заголовки запроса
|
|
4
|
+
* @param cacheableHeaders Массив ключей заголовков, которые нужно включить в кэш
|
|
5
|
+
* @returns Объект с отфильтрованными заголовками
|
|
6
|
+
*/
|
|
7
|
+
export declare function getCacheableHeaders(headers: Headers, cacheableHeaders?: string[]): Record<string, string>;
|
|
8
|
+
//# sourceMappingURL=get-cacheable-headers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-cacheable-headers.d.ts","sourceRoot":"","sources":["../../../src/api/utils/get-cacheable-headers.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,EAAE,gBAAgB,GAAE,MAAM,EAAO,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAgB7G"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Создает объект с заголовками для кэширования на основе списка допустимых ключей
|
|
3
|
+
* @param headers Заголовки запроса
|
|
4
|
+
* @param cacheableHeaders Массив ключей заголовков, которые нужно включить в кэш
|
|
5
|
+
* @returns Объект с отфильтрованными заголовками
|
|
6
|
+
*/
|
|
7
|
+
export function getCacheableHeaders(headers, cacheableHeaders = []) {
|
|
8
|
+
const result = {};
|
|
9
|
+
if (!headers || cacheableHeaders.length === 0) {
|
|
10
|
+
return result;
|
|
11
|
+
}
|
|
12
|
+
// Проходим по всем ключам в cacheableHeaders
|
|
13
|
+
cacheableHeaders.forEach((key) => {
|
|
14
|
+
// Если заголовок существует, добавляем его в результат
|
|
15
|
+
if (headers.has(key)) {
|
|
16
|
+
result[key] = headers.get(key) || '';
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
return result;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=get-cacheable-headers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-cacheable-headers.js","sourceRoot":"","sources":["../../../src/api/utils/get-cacheable-headers.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,OAAgB,EAAE,mBAA6B,EAAE;IACnF,MAAM,MAAM,GAA2B,EAAE,CAAA;IAEzC,IAAI,CAAC,OAAO,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9C,OAAO,MAAM,CAAA;IACf,CAAC;IAED,6CAA6C;IAC7C,gBAAgB,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;QAC/B,uDAAuD;QACvD,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACrB,MAAM,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAA;QACtC,CAAC;IACH,CAAC,CAAC,CAAA;IAEF,OAAO,MAAM,CAAA;AACf,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA;AAC1B,cAAc,WAAW,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA;AAC1B,cAAc,WAAW,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/selector/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AACxE,cAAc,mBAAmB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/selector/index.ts"],"names":[],"mappings":"AACA,cAAc,mBAAmB,CAAA"}
|