synapse-storage 3.0.19 → 4.0.1
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 +28 -168
- 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 +19 -0
- package/dist/_utils/deepMerge.util.js.map +1 -0
- package/dist/_utils/error-handling.util.d.ts +50 -0
- package/dist/_utils/error-handling.util.d.ts.map +1 -0
- package/dist/_utils/error-handling.util.js +67 -0
- package/dist/_utils/error-handling.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 +6 -0
- package/dist/_utils/index.d.ts.map +1 -0
- package/dist/_utils/index.js +13 -0
- package/dist/_utils/index.js.map +1 -0
- package/dist/_utils/logger-console.util.d.ts +9 -0
- package/dist/_utils/logger-console.util.d.ts.map +1 -0
- package/dist/_utils/logger-console.util.js +14 -0
- package/dist/_utils/logger-console.util.js.map +1 -0
- package/dist/api/api.module.d.ts +46 -0
- package/dist/api/api.module.d.ts.map +1 -0
- package/dist/api/api.module.js +121 -0
- package/dist/api/api.module.js.map +1 -0
- package/dist/api/components/endpoint.d.ts +57 -0
- package/dist/api/components/endpoint.d.ts.map +1 -0
- package/dist/api/components/endpoint.js +385 -0
- package/dist/api/components/endpoint.js.map +1 -0
- package/dist/api/components/query-storage.d.ts +100 -0
- package/dist/api/components/query-storage.d.ts.map +1 -0
- package/dist/api/components/query-storage.js +293 -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 +90 -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 +11 -0
- package/dist/api/index.js.map +1 -0
- package/dist/api/types/api.interface.d.ts +126 -0
- package/dist/api/types/api.interface.d.ts.map +1 -0
- package/dist/api/types/api.interface.js +15 -0
- package/dist/api/types/api.interface.js.map +1 -0
- package/dist/api/types/endpoint.interface.d.ts +118 -0
- package/dist/api/types/endpoint.interface.d.ts.map +1 -0
- package/dist/api/types/endpoint.interface.js +6 -0
- package/dist/api/types/endpoint.interface.js.map +1 -0
- package/dist/api/types/query.interface.d.ts +85 -0
- package/dist/api/types/query.interface.d.ts.map +1 -0
- package/dist/api/types/query.interface.js +6 -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 +40 -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 +61 -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 +242 -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 +102 -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 +23 -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 +7 -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 +5 -0
- package/dist/core/selector/index.js.map +1 -0
- package/dist/{selector.interface-CA5y-kD_.d.ts → core/selector/selector.interface.d.ts} +41 -8
- package/dist/core/selector/selector.interface.d.ts.map +1 -0
- package/dist/core/selector/selector.interface.js +7 -0
- package/dist/core/selector/selector.interface.js.map +1 -0
- package/dist/core/selector/selector.module.d.ts +36 -0
- package/dist/core/selector/selector.module.d.ts.map +1 -0
- package/dist/core/selector/selector.module.js +412 -0
- package/dist/core/selector/selector.module.js.map +1 -0
- package/dist/core/storage/adapters/async-base-storage.service.d.ts +49 -0
- package/dist/core/storage/adapters/async-base-storage.service.d.ts.map +1 -0
- package/dist/core/storage/adapters/async-base-storage.service.js +505 -0
- package/dist/core/storage/adapters/async-base-storage.service.js.map +1 -0
- package/dist/core/storage/adapters/indexed-DB.service.d.ts +89 -0
- package/dist/core/storage/adapters/indexed-DB.service.d.ts.map +1 -0
- package/dist/core/storage/adapters/indexed-DB.service.js +596 -0
- package/dist/core/storage/adapters/indexed-DB.service.js.map +1 -0
- package/dist/core/storage/adapters/local-storage.service.d.ts +23 -0
- package/dist/core/storage/adapters/local-storage.service.d.ts.map +1 -0
- package/dist/core/storage/adapters/local-storage.service.js +111 -0
- package/dist/core/storage/adapters/local-storage.service.js.map +1 -0
- package/dist/core/storage/adapters/memory-storage.service.d.ts +24 -0
- package/dist/core/storage/adapters/memory-storage.service.d.ts.map +1 -0
- package/dist/core/storage/adapters/memory-storage.service.js +110 -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 +42 -0
- package/dist/core/storage/adapters/path.utils.js.map +1 -0
- package/dist/core/storage/adapters/storage-core.d.ts +61 -0
- package/dist/core/storage/adapters/storage-core.d.ts.map +1 -0
- package/dist/core/storage/adapters/storage-core.js +221 -0
- package/dist/core/storage/adapters/storage-core.js.map +1 -0
- package/dist/core/storage/adapters/sync-base-storage.service.d.ts +56 -0
- package/dist/core/storage/adapters/sync-base-storage.service.d.ts.map +1 -0
- package/dist/core/storage/adapters/sync-base-storage.service.js +481 -0
- package/dist/core/storage/adapters/sync-base-storage.service.js.map +1 -0
- package/dist/core/storage/index.d.ts +16 -0
- package/dist/core/storage/index.d.ts.map +1 -0
- package/dist/core/storage/index.js +38 -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 +197 -0
- package/dist/core/storage/middlewares/broadcast.middleware.js.map +1 -0
- package/dist/core/storage/middlewares/index.d.ts +9 -0
- package/dist/core/storage/middlewares/index.d.ts.map +1 -0
- package/dist/core/storage/middlewares/index.js +17 -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 +108 -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 +43 -0
- package/dist/core/storage/middlewares/storage-shallow-compare.middleware.js.map +1 -0
- package/dist/core/storage/middlewares/sync-broadcast.middleware.d.ts +9 -0
- package/dist/core/storage/middlewares/sync-broadcast.middleware.d.ts.map +1 -0
- package/dist/core/storage/middlewares/sync-broadcast.middleware.js +177 -0
- package/dist/core/storage/middlewares/sync-broadcast.middleware.js.map +1 -0
- package/dist/core/storage/middlewares/sync-storage-batching.middleware.d.ts +6 -0
- package/dist/core/storage/middlewares/sync-storage-batching.middleware.d.ts.map +1 -0
- package/dist/core/storage/middlewares/sync-storage-batching.middleware.js +56 -0
- package/dist/core/storage/middlewares/sync-storage-batching.middleware.js.map +1 -0
- package/dist/core/storage/middlewares/sync-storage-shallow-compare.middleware.d.ts +7 -0
- package/dist/core/storage/middlewares/sync-storage-shallow-compare.middleware.d.ts.map +1 -0
- package/dist/core/storage/middlewares/sync-storage-shallow-compare.middleware.js +39 -0
- package/dist/core/storage/middlewares/sync-storage-shallow-compare.middleware.js.map +1 -0
- package/dist/core/storage/modules/plugin/plugin.interface.d.ts +101 -0
- package/dist/core/storage/modules/plugin/plugin.interface.d.ts.map +1 -0
- package/dist/core/storage/modules/plugin/plugin.interface.js +8 -0
- package/dist/core/storage/modules/plugin/plugin.interface.js.map +1 -0
- package/dist/core/storage/modules/plugin/plugin.service.d.ts +49 -0
- package/dist/core/storage/modules/plugin/plugin.service.d.ts.map +1 -0
- package/dist/core/storage/modules/plugin/plugin.service.js +406 -0
- package/dist/core/storage/modules/plugin/plugin.service.js.map +1 -0
- package/dist/core/storage/modules/singleton/mixin.util.d.ts +6 -0
- package/dist/core/storage/modules/singleton/mixin.util.d.ts.map +1 -0
- package/dist/core/storage/modules/singleton/mixin.util.js +30 -0
- package/dist/core/storage/modules/singleton/mixin.util.js.map +1 -0
- package/dist/core/storage/modules/singleton/models.d.ts +143 -0
- package/dist/core/storage/modules/singleton/models.d.ts.map +1 -0
- package/dist/core/storage/modules/singleton/models.js +60 -0
- package/dist/core/storage/modules/singleton/models.js.map +1 -0
- package/dist/core/storage/modules/singleton/singleton.util.d.ts +36 -0
- package/dist/core/storage/modules/singleton/singleton.util.d.ts.map +1 -0
- package/dist/core/storage/modules/singleton/singleton.util.js +216 -0
- package/dist/core/storage/modules/singleton/singleton.util.js.map +1 -0
- package/dist/core/storage/storage.interface.d.ts +168 -0
- package/dist/core/storage/storage.interface.d.ts.map +1 -0
- package/dist/core/storage/storage.interface.js +23 -0
- package/dist/core/storage/storage.interface.js.map +1 -0
- package/dist/core/storage/utils/broadcast.util.d.ts +49 -0
- package/dist/core/storage/utils/broadcast.util.d.ts.map +1 -0
- package/dist/core/storage/utils/broadcast.util.js +141 -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 +54 -0
- package/dist/core/storage/utils/cache.util.js.map +1 -0
- package/dist/core/storage/utils/middleware-module.d.ts +94 -0
- package/dist/core/storage/utils/middleware-module.d.ts.map +1 -0
- package/dist/core/storage/utils/middleware-module.js +258 -0
- package/dist/core/storage/utils/middleware-module.js.map +1 -0
- package/dist/core/storage/utils/path-selector.util.d.ts +15 -0
- package/dist/core/storage/utils/path-selector.util.d.ts.map +1 -0
- package/dist/core/storage/utils/path-selector.util.js +58 -0
- package/dist/core/storage/utils/path-selector.util.js.map +1 -0
- package/dist/core/storage/utils/state-diff.util.d.ts +14 -0
- package/dist/core/storage/utils/state-diff.util.d.ts.map +1 -0
- package/dist/core/storage/utils/state-diff.util.js +88 -0
- package/dist/core/storage/utils/state-diff.util.js.map +1 -0
- package/dist/core/storage/utils/storage-factory.util.d.ts +21 -0
- package/dist/core/storage/utils/storage-factory.util.d.ts.map +1 -0
- package/dist/core/storage/utils/storage-factory.util.js +40 -0
- package/dist/core/storage/utils/storage-factory.util.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 +24 -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/index.d.ts +10 -12
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +17 -1
- package/dist/index.js.map +1 -0
- package/dist/react/hooks/index.d.ts +5 -0
- package/dist/react/hooks/index.d.ts.map +1 -0
- package/dist/react/hooks/index.js +11 -0
- package/dist/react/hooks/index.js.map +1 -0
- package/dist/react/hooks/useCreateStorage.d.ts +39 -0
- package/dist/react/hooks/useCreateStorage.d.ts.map +1 -0
- package/dist/react/hooks/useCreateStorage.js +137 -0
- package/dist/react/hooks/useCreateStorage.js.map +1 -0
- package/dist/react/hooks/useSelector.d.ts +21 -0
- package/dist/react/hooks/useSelector.d.ts.map +1 -0
- package/dist/react/hooks/useSelector.js +56 -0
- package/dist/react/hooks/useSelector.js.map +1 -0
- package/dist/react/hooks/useStorage.d.ts +39 -0
- package/dist/react/hooks/useStorage.d.ts.map +1 -0
- package/dist/react/hooks/useStorage.js +78 -0
- package/dist/react/hooks/useStorage.js.map +1 -0
- package/dist/react/hooks/useStorageSubscribe.d.ts +16 -0
- package/dist/react/hooks/useStorageSubscribe.d.ts.map +1 -0
- package/dist/react/hooks/useStorageSubscribe.js +55 -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 +7 -0
- package/dist/react/index.js.map +1 -0
- package/dist/react/utils/awaitSynapse.d.ts +34 -0
- package/dist/react/utils/awaitSynapse.d.ts.map +1 -0
- package/dist/react/utils/awaitSynapse.js +87 -0
- package/dist/react/utils/awaitSynapse.js.map +1 -0
- package/dist/react/utils/createSynapseCtx.d.ts +33 -0
- package/dist/react/utils/createSynapseCtx.d.ts.map +1 -0
- package/dist/react/utils/createSynapseCtx.js +139 -0
- package/dist/react/utils/createSynapseCtx.js.map +1 -0
- package/dist/react/utils/index.d.ts +3 -0
- package/dist/react/utils/index.d.ts.map +1 -0
- package/dist/react/utils/index.js +9 -0
- package/dist/react/utils/index.js.map +1 -0
- package/dist/reactive/dispatcher/dispatcher.module.d.ts +216 -0
- package/dist/reactive/dispatcher/dispatcher.module.d.ts.map +1 -0
- package/dist/reactive/dispatcher/dispatcher.module.js +384 -0
- package/dist/reactive/dispatcher/dispatcher.module.js.map +1 -0
- package/dist/reactive/dispatcher/index.d.ts +4 -0
- package/dist/reactive/dispatcher/index.d.ts.map +1 -0
- package/dist/reactive/dispatcher/index.js +9 -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 +5 -0
- package/dist/reactive/dispatcher/middlewares/index.js.map +1 -0
- package/dist/reactive/dispatcher/middlewares/logger.middleware.d.ts +37 -0
- package/dist/reactive/dispatcher/middlewares/logger.middleware.d.ts.map +1 -0
- package/dist/reactive/dispatcher/middlewares/logger.middleware.js +188 -0
- package/dist/reactive/dispatcher/middlewares/logger.middleware.js.map +1 -0
- package/dist/reactive/dispatcher/standalone.d.ts +112 -0
- package/dist/reactive/dispatcher/standalone.d.ts.map +1 -0
- package/dist/reactive/dispatcher/standalone.js +142 -0
- package/dist/reactive/dispatcher/standalone.js.map +1 -0
- package/dist/reactive/effects/effects.module.d.ts +225 -0
- package/dist/reactive/effects/effects.module.d.ts.map +1 -0
- package/dist/reactive/effects/effects.module.js +356 -0
- package/dist/reactive/effects/effects.module.js.map +1 -0
- package/dist/reactive/effects/index.d.ts +4 -0
- package/dist/reactive/effects/index.d.ts.map +1 -0
- package/dist/reactive/effects/index.js +11 -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 +25 -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 +22 -0
- package/dist/reactive/effects/utils/chunkRequestParallel.js.map +1 -0
- package/dist/reactive/effects/utils/fromRequest.d.ts +40 -0
- package/dist/reactive/effects/utils/fromRequest.d.ts.map +1 -0
- package/dist/reactive/effects/utils/fromRequest.js +64 -0
- package/dist/reactive/effects/utils/fromRequest.js.map +1 -0
- package/dist/reactive/effects/utils/index.d.ts +5 -0
- package/dist/reactive/effects/utils/index.d.ts.map +1 -0
- package/dist/reactive/effects/utils/index.js +11 -0
- package/dist/reactive/effects/utils/index.js.map +1 -0
- package/dist/reactive/effects/utils/toObservable.d.ts +23 -0
- package/dist/reactive/effects/utils/toObservable.d.ts.map +1 -0
- package/dist/reactive/effects/utils/toObservable.js +39 -0
- package/dist/reactive/effects/utils/toObservable.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 +7 -0
- package/dist/reactive/index.js.map +1 -0
- package/dist/utils/createEventBus.d.ts +87 -0
- package/dist/utils/createEventBus.d.ts.map +1 -0
- package/dist/utils/createEventBus.js +215 -0
- package/dist/utils/createEventBus.js.map +1 -0
- package/dist/utils/createSynapse/createSynapse.d.ts +9 -0
- package/dist/utils/createSynapse/createSynapse.d.ts.map +1 -0
- package/dist/utils/createSynapse/createSynapse.js +103 -0
- package/dist/utils/createSynapse/createSynapse.js.map +1 -0
- package/dist/utils/createSynapse/index.d.ts +3 -0
- package/dist/utils/createSynapse/index.d.ts.map +1 -0
- package/dist/utils/createSynapse/index.js +6 -0
- package/dist/utils/createSynapse/index.js.map +1 -0
- package/dist/utils/createSynapse/types.d.ts +93 -0
- package/dist/utils/createSynapse/types.d.ts.map +1 -0
- package/dist/utils/createSynapse/types.js +6 -0
- package/dist/utils/createSynapse/types.js.map +1 -0
- package/dist/utils/createSynapse/validate.d.ts +2 -0
- package/dist/utils/createSynapse/validate.d.ts.map +1 -0
- package/dist/utils/createSynapse/validate.js +76 -0
- package/dist/utils/createSynapse/validate.js.map +1 -0
- package/dist/utils/createSynapse/waitForDependencies.d.ts +3 -0
- package/dist/utils/createSynapse/waitForDependencies.d.ts.map +1 -0
- package/dist/utils/createSynapse/waitForDependencies.js +40 -0
- package/dist/utils/createSynapse/waitForDependencies.js.map +1 -0
- package/dist/utils/createSynapseAwaiter.d.ts +46 -0
- package/dist/utils/createSynapseAwaiter.d.ts.map +1 -0
- package/dist/utils/createSynapseAwaiter.js +102 -0
- package/dist/utils/createSynapseAwaiter.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 +12 -0
- package/dist/utils/index.js.map +1 -0
- package/package.json +17 -21
- package/dist/api.d.ts +0 -365
- package/dist/api.js +0 -1
- package/dist/core.d.ts +0 -106
- package/dist/core.js +0 -1
- package/dist/createSynapse-vkfKjRob.d.ts +0 -97
- package/dist/dispatcher.module-BOsMHbD5.d.ts +0 -360
- package/dist/react.d.ts +0 -119
- package/dist/react.js +0 -1
- package/dist/reactive.d.ts +0 -35
- package/dist/reactive.js +0 -1
- package/dist/storage.interface-BA_ktyDz.d.ts +0 -591
- package/dist/utils.d.ts +0 -139
- package/dist/utils.js +0 -1
package/README.md
CHANGED
|
@@ -1,191 +1,51 @@
|
|
|
1
1
|
# Synapse Storage
|
|
2
2
|
|
|
3
|
-
> **🇺🇸 English** | [🇷🇺 Русский](./docs/ru/README.md) | [📝 ChangeLog](./CHANGELOG.md)
|
|
4
|
-
|
|
5
|
-
State management toolkit + API client
|
|
6
|
-
|
|
7
3
|
[](https://badge.fury.io/js/synapse-storage)
|
|
8
4
|
[](https://bundlephobia.com/package/synapse-storage)
|
|
9
5
|
[](https://www.typescriptlang.org/)
|
|
10
6
|
[](https://rxjs.dev/)
|
|
11
7
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
- 🚀 **Framework Agnostic** - You can use Synapse with any framework or independently
|
|
15
|
-
- 💾 **Various Storage Adapters** - Memory, LocalStorage, IndexedDB
|
|
16
|
-
- 🧮 **Different Ways to Access Data** - Computed values with memoization
|
|
17
|
-
- Ability to create Redux-style computed selectors
|
|
18
|
-
- Ability to directly subscribe to specific properties in storage
|
|
19
|
-
- Ability to subscribe to reactive state
|
|
20
|
-
- 🌐 **API Client Creation** - HTTP client with caching capabilities (Similar to RTK Query)
|
|
21
|
-
- ⚛️ **React** - Several convenient hooks for React
|
|
22
|
-
- ⚡ **RxJS** - Ability to create Redux-Observable style effects
|
|
23
|
-
- ⚙️ **Custom Middleware Support** - Ability to extend storage functionality with custom middlewares
|
|
24
|
-
- 🔌 **Custom Plugin Support** - Ability to extend storage functionality with custom plugins
|
|
25
|
-
|
|
26
|
-
---
|
|
27
|
-
## Author
|
|
28
|
-
|
|
29
|
-
**Vladislav** — Senior Frontend Developer (React, TypeScript)
|
|
30
|
-
|
|
31
|
-
> ### 🔎 Currently looking for new career opportunities!
|
|
32
|
-
>
|
|
33
|
-
> [GitHub](https://github.com/Vlad92msk/) | [LinkedIn](https://www.linkedin.com/in/vlad-firsov/)
|
|
8
|
+
Framework-agnostic state management toolkit and API client for TypeScript applications.
|
|
9
|
+
Combines reactive storage, memoized selectors, Redux-Observable style effects, and a tag-based HTTP cache — all in one library.
|
|
34
10
|
|
|
35
|
-
|
|
36
|
-
*PS: Not recommended for production use yet as I develop this in my free time.
|
|
37
|
-
The library works in general, but I can provide guarantees only after full integration into my pet project - Social Network.
|
|
38
|
-
This won't happen before changing my current workplace and country of residence*
|
|
39
|
-
---
|
|
40
|
-
|
|
41
|
-
## 📦 Installation
|
|
11
|
+
## Quick Start
|
|
42
12
|
|
|
43
13
|
```bash
|
|
44
14
|
npm install synapse-storage
|
|
45
15
|
```
|
|
46
16
|
|
|
47
|
-
```bash
|
|
48
|
-
# For reactive capabilities
|
|
49
|
-
npm install rxjs
|
|
50
|
-
|
|
51
|
-
# For React integration
|
|
52
|
-
npm install react react-dom
|
|
53
|
-
|
|
54
|
-
# All at once for full functionality
|
|
55
|
-
npm install synapse-storage rxjs react react-dom
|
|
56
|
-
```
|
|
57
|
-
|
|
58
|
-
| Module | Description | Dependencies |
|
|
59
|
-
|--------|-------------|--------------|
|
|
60
|
-
| `synapse-storage/core` | base | - |
|
|
61
|
-
| `synapse-storage/react` | React | React 18+ |
|
|
62
|
-
| `synapse-storage/reactive` | RxJS | RxJS 7.8.2+ |
|
|
63
|
-
| `synapse-storage/api` | HTTP client | - |
|
|
64
|
-
| `synapse-storage/utils` | Utils | - |
|
|
65
|
-
|
|
66
|
-
> **💡 Tip:** Import only the modules you need for optimal bundle size
|
|
67
|
-
|
|
68
|
-
### tsconfig.json:
|
|
69
|
-
```json
|
|
70
|
-
{
|
|
71
|
-
"compilerOptions": {
|
|
72
|
-
"target": "ES2022",
|
|
73
|
-
"module": "ES2022",
|
|
74
|
-
"moduleResolution": "bundler"
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
```
|
|
78
|
-
|
|
79
|
-
## 📚 Documentation
|
|
80
|
-
|
|
81
|
-
- [📖 Main](./README.md)
|
|
82
|
-
- [🚀 Basic Usage](./docs/en/basic-usage.md)
|
|
83
|
-
- [🧮 Redux-style Computed Selectors](./docs/en/redux-selectors.md)
|
|
84
|
-
- [⚙️ Middlewares](./docs/en/middlewares.md)
|
|
85
|
-
- [🌐 API Client](./docs/en/api-client.md)
|
|
86
|
-
- ⚡ Reactive Approach
|
|
87
|
-
- [⚡ Creating Dispatcher](./docs/en/create-dispatcher.md)
|
|
88
|
-
- [⚡ Creating Effects](./docs/en/create-effects.md)
|
|
89
|
-
- [⚡ Creating Effects Module](./docs/en/create-effects-module.md)
|
|
90
|
-
- [🛠️ createSynapse Utility](./docs/en/create-synapse.md)
|
|
91
|
-
- [🔌 Creating Custom Plugins](./docs/en/custom-plugins.md)
|
|
92
|
-
- [⚙️ Creating Custom Middlewares](./docs/en/custom-middlewares.md)
|
|
93
|
-
- [📋 Additional](./docs/en/additional.md)
|
|
94
|
-
|
|
95
|
-
## 🎯 Examples
|
|
96
|
-
|
|
97
|
-
- [GitHub](https://github.com/Vlad92msk/synapse-examples)
|
|
98
|
-
- [YouTube](https://www.youtube.com/channel/UCGENI_i4qmBkPp98P2HvvGw)
|
|
99
|
-
|
|
100
|
-
---
|
|
101
|
-
|
|
102
|
-
## 📊 Why Synapse Storage?
|
|
103
|
-
|
|
104
|
-
**One library instead of many** - Synapse combines functionality that usually requires multiple dependencies:
|
|
105
|
-
|
|
106
|
-
| What you get | Traditional approach | Synapse Storage |
|
|
107
|
-
|--------------|---------------------|---------|
|
|
108
|
-
| **State Management** | Redux + RTK (~45KB) | ✅ |
|
|
109
|
-
| **HTTP Client + Caching** | React Query (~39KB) | ✅|
|
|
110
|
-
| **Reactive Effects** | Redux-Observable (~25KB) | ✅|
|
|
111
|
-
| **Storage Adapters** | Custom solutions | ✅|
|
|
112
|
-
| **React Integration** | Custom hooks | ✅|
|
|
113
|
-
| **Computed Selectors** | Reselect (~5KB) | ✅|
|
|
114
|
-
| **Middleware System** | Custom implementation | ✅|
|
|
115
|
-
| **Plugin Architecture** | Custom implementation | ✅|
|
|
116
|
-
|
|
117
|
-
### Bundle Size Comparison
|
|
118
|
-
|
|
119
|
-
```typescript
|
|
120
|
-
// Traditional stack
|
|
121
|
-
import { configureStore } from '@reduxjs/toolkit' // ~45KB
|
|
122
|
-
import { createApi } from '@reduxjs/toolkit/query' // included in RTK
|
|
123
|
-
import { QueryClient } from '@tanstack/react-query' // ~39KB
|
|
124
|
-
import { createEpicMiddleware } from 'redux-observable' // ~25KB
|
|
125
|
-
// Total: ~109KB + custom implementations
|
|
126
|
-
|
|
127
|
-
// Synapse Storage
|
|
128
|
-
import { createSynapse } from 'synapse-storage' // ~171KB
|
|
129
|
-
// Total: 171KB with ALL features included
|
|
130
|
-
```
|
|
131
|
-
|
|
132
|
-
### Modular Usage
|
|
133
|
-
|
|
134
|
-
Don't need everything? Import only what you use:
|
|
135
|
-
|
|
136
|
-
| Use Case | Import | Size | Comparison |
|
|
137
|
-
|-------------------|------------------------|------|---------------------------|
|
|
138
|
-
| **Basic state** | `synapse-storage/core` | ~42KB | vs Redux: 45KB |
|
|
139
|
-
| **+ HTTP client** | `+ /api` | +13KB | vs React Query: 39KB |
|
|
140
|
-
| **+ Reactive** | `+ /reactive` | +8KB | vs Redux-Observable: 25KB |
|
|
141
|
-
| **+ React hooks** | `+ /react` | +5KB | vs Custom hooks |
|
|
142
|
-
| **Full package** | all modules | ~171KB |vs 109KB stack + custom |
|
|
143
|
-
|
|
144
|
-
> **🎯 Result:** Similar or better performance with unified API and TypeScript support out of the box
|
|
145
|
-
|
|
146
|
-
## 🧩 Modular Architecture "Like a Constructor"
|
|
147
|
-
|
|
148
|
-
**Use only what you need** - each module works independently:
|
|
149
|
-
|
|
150
|
-
### 🎯 Flexible Usage Scenarios
|
|
151
|
-
|
|
152
17
|
```typescript
|
|
153
|
-
// 📦 Minimal project - storage only
|
|
154
18
|
import { MemoryStorage } from 'synapse-storage/core'
|
|
155
|
-
|
|
156
|
-
// 📦 + Add HTTP client when needed
|
|
157
|
-
import { ApiClient } from 'synapse-storage/api'
|
|
158
|
-
|
|
159
|
-
// 📦 + Add reactive effects when required
|
|
160
|
-
import { createDispatcher } from 'synapse-storage/reactive'
|
|
161
|
-
|
|
162
|
-
// 📦 + Add React hooks for UI
|
|
19
|
+
import { createSynapse } from 'synapse-storage/utils'
|
|
163
20
|
import { useSelector } from 'synapse-storage/react'
|
|
164
|
-
```
|
|
165
21
|
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
22
|
+
const synapse = createSynapse({
|
|
23
|
+
storage: new MemoryStorage({
|
|
24
|
+
name: 'counter',
|
|
25
|
+
initialState: { count: 0 },
|
|
26
|
+
}),
|
|
27
|
+
createSelectorsFn: (s) => ({
|
|
28
|
+
count: s.createSelector((state) => state.count),
|
|
29
|
+
}),
|
|
30
|
+
})
|
|
31
|
+
```
|
|
174
32
|
|
|
175
|
-
|
|
176
|
-
const useMyCustomHook = () => { /* your logic */ }
|
|
33
|
+
## Key Features
|
|
177
34
|
|
|
178
|
-
|
|
179
|
-
|
|
35
|
+
- **Sync & Async Storage** — MemoryStorage, LocalStorage (synchronous), IndexedDB (async) with unified API
|
|
36
|
+
- **Selectors** — memoized computed values with dependency tracking
|
|
37
|
+
- **Immer-like Updates** — mutate state directly inside `update()` callbacks
|
|
38
|
+
- **API Client** — HTTP client with tag-based caching and invalidation
|
|
39
|
+
- **React Integration** — hooks on `useSyncExternalStore` (Concurrent Mode safe)
|
|
40
|
+
- **RxJS Effects** — dispatchers, effects, and watchers (Redux-Observable style)
|
|
41
|
+
- **Middleware & Plugins** — extensible sync/async pipelines
|
|
42
|
+
- **EventBus** — decoupled inter-module communication with wildcards
|
|
43
|
+
- **Cross-tab Sync** — BroadcastChannel middleware for multi-tab state
|
|
180
44
|
|
|
181
|
-
|
|
45
|
+
## Documentation
|
|
182
46
|
|
|
183
|
-
|
|
184
|
-
- **📦 Optimal Bundle** - don't pay for unused functionality
|
|
185
|
-
- **🔄 Flexibility** - replace any module with your implementation
|
|
186
|
-
- **🛠️ Compatibility** - modules work independently but integrate perfectly
|
|
187
|
-
- **📈 Scalability** - from simple state to full-featured architecture
|
|
47
|
+
Full documentation, API reference, and examples available on [GitHub](https://github.com/Vlad92msk/synapse).
|
|
188
48
|
|
|
189
|
-
|
|
49
|
+
## License
|
|
190
50
|
|
|
191
|
-
|
|
51
|
+
MIT
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Разбивает массив на группы элементов указанного размера.
|
|
3
|
+
* @param array - Массив для разбиения
|
|
4
|
+
* @param size - Размер каждой группы
|
|
5
|
+
* @returns Массив групп элементов
|
|
6
|
+
*/
|
|
7
|
+
export declare function chunk<T>(array: T[], size?: number): T[][];
|
|
8
|
+
//# sourceMappingURL=chunk.util.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunk.util.d.ts","sourceRoot":"","sources":["../../src/_utils/chunk.util.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,wBAAgB,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,IAAI,GAAE,MAAU,GAAG,CAAC,EAAE,EAAE,CAe5D"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Разбивает массив на группы элементов указанного размера.
|
|
3
|
+
* @param array - Массив для разбиения
|
|
4
|
+
* @param size - Размер каждой группы
|
|
5
|
+
* @returns Массив групп элементов
|
|
6
|
+
*/ function chunk(array, size = 1) {
|
|
7
|
+
if (size <= 0) throw new Error('Size must be greater than 0');
|
|
8
|
+
if (!array || !array.length) return [];
|
|
9
|
+
const result = [];
|
|
10
|
+
const length = array.length;
|
|
11
|
+
let index = 0;
|
|
12
|
+
while(index < length){
|
|
13
|
+
result.push(array.slice(index, index + size));
|
|
14
|
+
index += size;
|
|
15
|
+
}
|
|
16
|
+
return result;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export { chunk };
|
|
20
|
+
|
|
21
|
+
//# sourceMappingURL=chunk.util.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_utils/chunk.util.js","sources":["../../src/_utils/chunk.util.ts"],"sourcesContent":["/**\n * Разбивает массив на группы элементов указанного размера.\n * @param array - Массив для разбиения\n * @param size - Размер каждой группы\n * @returns Массив групп элементов\n */\nexport function chunk<T>(array: T[], size: number = 1): T[][] {\n if (size <= 0) throw new Error('Size must be greater than 0')\n\n if (!array || !array.length) return []\n\n const result: T[][] = []\n const length = array.length\n let index = 0\n\n while (index < length) {\n result.push(array.slice(index, index + size))\n index += size\n }\n\n return result\n}\n"],"names":["chunk","array","size","Error","result","length","index"],"mappings":"AAAA;;;;;CAKC,GACM,SAASA,KAAKA,CAAIC,KAAU,EAAEC,OAAe,CAAC;IACnD,IAAIA,QAAQ,GAAG,MAAM,IAAIC,MAAM;IAE/B,IAAI,CAACF,SAAS,CAACA,MAAM,MAAM,EAAE,OAAO,EAAE;IAEtC,MAAMG,SAAgB,EAAE;IACxB,MAAMC,SAASJ,MAAM,MAAM;IAC3B,IAAIK,QAAQ;IAEZ,MAAOA,QAAQD,OAAQ;QACrBD,OAAO,IAAI,CAACH,MAAM,KAAK,CAACK,OAAOA,QAAQJ;QACvCI,SAASJ;IACX;IAEA,OAAOE;AACT"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deepMerge.util.d.ts","sourceRoot":"","sources":["../../src/_utils/deepMerge.util.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,SAAS,GAAI,QAAQ,GAAG,EAAE,QAAQ,GAAG,QAcjD,CAAA"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
const deepMerge = (target, source)=>{
|
|
2
|
+
for(const key in source){
|
|
3
|
+
if (Object.prototype.hasOwnProperty.call(source, key)) {
|
|
4
|
+
if (typeof source[key] === 'object' && source[key] !== null && !Array.isArray(source[key])) {
|
|
5
|
+
if (!target[key] || typeof target[key] !== 'object') {
|
|
6
|
+
target[key] = {};
|
|
7
|
+
}
|
|
8
|
+
deepMerge(target[key], source[key]);
|
|
9
|
+
} else {
|
|
10
|
+
target[key] = source[key];
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
return target;
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
export { deepMerge };
|
|
18
|
+
|
|
19
|
+
//# sourceMappingURL=deepMerge.util.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_utils/deepMerge.util.js","sources":["../../src/_utils/deepMerge.util.ts"],"sourcesContent":["export const deepMerge = (target: any, source: any) => {\n for (const key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n if (typeof source[key] === 'object' && source[key] !== null && !Array.isArray(source[key])) {\n if (!target[key] || typeof target[key] !== 'object') {\n target[key] = {}\n }\n deepMerge(target[key], source[key])\n } else {\n target[key] = source[key]\n }\n }\n }\n return target\n}\n"],"names":["deepMerge","target","source","key","Object","Array"],"mappings":"AAAO,MAAMA,SAASA,GAAG,CAACC,QAAaC;IACrC,IAAK,MAAMC,OAAOD,OAAQ;QACxB,IAAIE,OAAO,SAAS,CAAC,cAAc,CAAC,IAAI,CAACF,QAAQC,MAAM;YACrD,IAAI,OAAOD,MAAM,CAACC,IAAI,KAAK,YAAYD,MAAM,CAACC,IAAI,KAAK,QAAQ,CAACE,MAAM,OAAO,CAACH,MAAM,CAACC,IAAI,GAAG;gBAC1F,IAAI,CAACF,MAAM,CAACE,IAAI,IAAI,OAAOF,MAAM,CAACE,IAAI,KAAK,UAAU;oBACnDF,MAAM,CAACE,IAAI,GAAG,CAAC;gBACjB;gBACAH,SAASA,CAACC,MAAM,CAACE,IAAI,EAAED,MAAM,CAACC,IAAI;YACpC,OAAO;gBACLF,MAAM,CAACE,IAAI,GAAGD,MAAM,CAACC,IAAI;YAC3B;QACF;IACF;IACA,OAAOF;AACT,EAAC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import type { ILogger } from '../core/storage/storage.interface';
|
|
2
|
+
/**
|
|
3
|
+
* Базовый класс ошибок Synapse.
|
|
4
|
+
* Позволяет отличать ошибки библиотеки от прочих через `instanceof`.
|
|
5
|
+
*/
|
|
6
|
+
export declare class SynapseError extends Error {
|
|
7
|
+
readonly context?: string | undefined;
|
|
8
|
+
readonly cause?: unknown | undefined;
|
|
9
|
+
constructor(message: string, context?: string | undefined, cause?: unknown | undefined);
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Категории обработки ошибок в Synapse:
|
|
13
|
+
*
|
|
14
|
+
* - CRITICAL: Ошибки конфигурации/инициализации → log + throw (fail fast)
|
|
15
|
+
* - OPERATION: Ошибки CRUD-операций → log + rethrow (вызывающий код решает)
|
|
16
|
+
* - CALLBACK: Ошибки в пользовательских callback'ах → log + swallow (не крашим приложение)
|
|
17
|
+
* - CLEANUP: Ошибки при destroy/unsubscribe → log + swallow (best-effort)
|
|
18
|
+
*/
|
|
19
|
+
type LogMethod = 'error' | 'warn';
|
|
20
|
+
/**
|
|
21
|
+
* Логирует ошибку через ILogger (если есть) или через console-fallback.
|
|
22
|
+
*/
|
|
23
|
+
export declare function logError(message: string, error: unknown, logger?: ILogger | null, level?: LogMethod): void;
|
|
24
|
+
/**
|
|
25
|
+
* OPERATION pattern: логирует и пробрасывает ошибку.
|
|
26
|
+
* Для CRUD-операций (get, set, update, delete) и инициализации.
|
|
27
|
+
*/
|
|
28
|
+
export declare function handleOperationError(context: string, error: unknown, logger?: ILogger | null): never;
|
|
29
|
+
/**
|
|
30
|
+
* CALLBACK pattern: логирует и проглатывает ошибку.
|
|
31
|
+
* Для пользовательских callback'ов, подписчиков, эффектов.
|
|
32
|
+
* Ошибка в одном callback'е не должна ломать остальные.
|
|
33
|
+
*/
|
|
34
|
+
export declare function handleCallbackError(context: string, error: unknown, logger?: ILogger | null): void;
|
|
35
|
+
/**
|
|
36
|
+
* CLEANUP pattern: логирует предупреждение и продолжает.
|
|
37
|
+
* Для destroy(), unsubscribe() и прочих cleanup-операций.
|
|
38
|
+
*/
|
|
39
|
+
export declare function handleCleanupError(context: string, error: unknown, logger?: ILogger | null): void;
|
|
40
|
+
/**
|
|
41
|
+
* Обёртка для безопасного вызова callback'а (CALLBACK pattern).
|
|
42
|
+
* Возвращает результат или undefined при ошибке.
|
|
43
|
+
*/
|
|
44
|
+
export declare function safeCallback<T>(fn: () => T, context: string, logger?: ILogger | null): T | undefined;
|
|
45
|
+
/**
|
|
46
|
+
* Обёртка для promise в fire-and-forget сценариях (CLEANUP pattern).
|
|
47
|
+
*/
|
|
48
|
+
export declare function safePromise(promise: Promise<unknown>, context: string, logger?: ILogger | null): void;
|
|
49
|
+
export {};
|
|
50
|
+
//# sourceMappingURL=error-handling.util.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-handling.util.d.ts","sourceRoot":"","sources":["../../src/_utils/error-handling.util.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mCAAmC,CAAA;AAGhE;;;GAGG;AACH,qBAAa,YAAa,SAAQ,KAAK;aAGnB,OAAO,CAAC,EAAE,MAAM;aAChB,KAAK,CAAC,EAAE,OAAO;gBAF/B,OAAO,EAAE,MAAM,EACC,OAAO,CAAC,EAAE,MAAM,YAAA,EAChB,KAAK,CAAC,EAAE,OAAO,YAAA;CAKlC;AAED;;;;;;;GAOG;AAEH,KAAK,SAAS,GAAG,OAAO,GAAG,MAAM,CAAA;AAEjC;;GAEG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,IAAI,EAAE,KAAK,GAAE,SAAmB,GAAG,IAAI,CAOnH;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,IAAI,GAAG,KAAK,CAGpG;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,IAAI,GAAG,IAAI,CAElG;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,IAAI,GAAG,IAAI,CAEjG;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,IAAI,GAAG,CAAC,GAAG,SAAS,CAOpG;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,IAAI,GAAG,IAAI,CAErG"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { loggerConsole } from "./logger-console.util.js";
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Базовый класс ошибок Synapse.
|
|
7
|
+
* Позволяет отличать ошибки библиотеки от прочих через `instanceof`.
|
|
8
|
+
*/ class SynapseError extends Error {
|
|
9
|
+
context;
|
|
10
|
+
cause;
|
|
11
|
+
constructor(message, context, cause){
|
|
12
|
+
super(context ? `[${context}] ${message}` : message), this.context = context, this.cause = cause;
|
|
13
|
+
this.name = 'SynapseError';
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Логирует ошибку через ILogger (если есть) или через console-fallback.
|
|
18
|
+
*/ function logError(message, error, logger, level = 'error') {
|
|
19
|
+
const meta = {
|
|
20
|
+
error: error instanceof Error ? error.message : String(error)
|
|
21
|
+
};
|
|
22
|
+
if (logger) {
|
|
23
|
+
logger[level](message, meta);
|
|
24
|
+
} else {
|
|
25
|
+
loggerConsole[level](`[Synapse] ${message}`, error);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* OPERATION pattern: логирует и пробрасывает ошибку.
|
|
30
|
+
* Для CRUD-операций (get, set, update, delete) и инициализации.
|
|
31
|
+
*/ function handleOperationError(context, error, logger) {
|
|
32
|
+
logError(context, error, logger);
|
|
33
|
+
throw error;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* CALLBACK pattern: логирует и проглатывает ошибку.
|
|
37
|
+
* Для пользовательских callback'ов, подписчиков, эффектов.
|
|
38
|
+
* Ошибка в одном callback'е не должна ломать остальные.
|
|
39
|
+
*/ function handleCallbackError(context, error, logger) {
|
|
40
|
+
logError(context, error, logger);
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* CLEANUP pattern: логирует предупреждение и продолжает.
|
|
44
|
+
* Для destroy(), unsubscribe() и прочих cleanup-операций.
|
|
45
|
+
*/ function handleCleanupError(context, error, logger) {
|
|
46
|
+
logError(context, error, logger, 'warn');
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Обёртка для безопасного вызова callback'а (CALLBACK pattern).
|
|
50
|
+
* Возвращает результат или undefined при ошибке.
|
|
51
|
+
*/ function safeCallback(fn, context, logger) {
|
|
52
|
+
try {
|
|
53
|
+
return fn();
|
|
54
|
+
} catch (error) {
|
|
55
|
+
handleCallbackError(context, error, logger);
|
|
56
|
+
return undefined;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Обёртка для promise в fire-and-forget сценариях (CLEANUP pattern).
|
|
61
|
+
*/ function safePromise(promise, context, logger) {
|
|
62
|
+
promise.catch((error)=>handleCleanupError(context, error, logger));
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
export { SynapseError, handleCallbackError, handleCleanupError, handleOperationError, logError, safeCallback, safePromise };
|
|
66
|
+
|
|
67
|
+
//# sourceMappingURL=error-handling.util.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_utils/error-handling.util.js","sources":["../../src/_utils/error-handling.util.ts"],"sourcesContent":["import type { ILogger } from '../core/storage/storage.interface'\nimport { loggerConsole } from './logger-console.util'\n\n/**\n * Базовый класс ошибок Synapse.\n * Позволяет отличать ошибки библиотеки от прочих через `instanceof`.\n */\nexport class SynapseError extends Error {\n constructor(\n message: string,\n public readonly context?: string,\n public readonly cause?: unknown,\n ) {\n super(context ? `[${context}] ${message}` : message)\n this.name = 'SynapseError'\n }\n}\n\n/**\n * Категории обработки ошибок в Synapse:\n *\n * - CRITICAL: Ошибки конфигурации/инициализации → log + throw (fail fast)\n * - OPERATION: Ошибки CRUD-операций → log + rethrow (вызывающий код решает)\n * - CALLBACK: Ошибки в пользовательских callback'ах → log + swallow (не крашим приложение)\n * - CLEANUP: Ошибки при destroy/unsubscribe → log + swallow (best-effort)\n */\n\ntype LogMethod = 'error' | 'warn'\n\n/**\n * Логирует ошибку через ILogger (если есть) или через console-fallback.\n */\nexport function logError(message: string, error: unknown, logger?: ILogger | null, level: LogMethod = 'error'): void {\n const meta = { error: error instanceof Error ? error.message : String(error) }\n if (logger) {\n logger[level](message, meta)\n } else {\n loggerConsole[level](`[Synapse] ${message}`, error)\n }\n}\n\n/**\n * OPERATION pattern: логирует и пробрасывает ошибку.\n * Для CRUD-операций (get, set, update, delete) и инициализации.\n */\nexport function handleOperationError(context: string, error: unknown, logger?: ILogger | null): never {\n logError(context, error, logger)\n throw error\n}\n\n/**\n * CALLBACK pattern: логирует и проглатывает ошибку.\n * Для пользовательских callback'ов, подписчиков, эффектов.\n * Ошибка в одном callback'е не должна ломать остальные.\n */\nexport function handleCallbackError(context: string, error: unknown, logger?: ILogger | null): void {\n logError(context, error, logger)\n}\n\n/**\n * CLEANUP pattern: логирует предупреждение и продолжает.\n * Для destroy(), unsubscribe() и прочих cleanup-операций.\n */\nexport function handleCleanupError(context: string, error: unknown, logger?: ILogger | null): void {\n logError(context, error, logger, 'warn')\n}\n\n/**\n * Обёртка для безопасного вызова callback'а (CALLBACK pattern).\n * Возвращает результат или undefined при ошибке.\n */\nexport function safeCallback<T>(fn: () => T, context: string, logger?: ILogger | null): T | undefined {\n try {\n return fn()\n } catch (error) {\n handleCallbackError(context, error, logger)\n return undefined\n }\n}\n\n/**\n * Обёртка для promise в fire-and-forget сценариях (CLEANUP pattern).\n */\nexport function safePromise(promise: Promise<unknown>, context: string, logger?: ILogger | null): void {\n promise.catch((error) => handleCleanupError(context, error, logger))\n}\n"],"names":["loggerConsole","SynapseError","Error","message","context","cause","logError","error","logger","level","meta","String","handleOperationError","handleCallbackError","handleCleanupError","safeCallback","fn","undefined","safePromise","promise"],"mappings":";;;AACqD;AAErD;;;CAGC,GACM,MAAMC,YAAYA,SAASC;;;IAChC,YACEC,OAAe,EACCC,OAAgB,EAChBC,KAAe,CAC/B;QACA,KAAK,CAACD,UAAU,CAAC,CAAC,EAAEA,QAAQ,EAAE,EAAED,SAAS,GAAGA,eAH5BC,UAAAA,cACAC,QAAAA;QAGhB,IAAI,CAAC,IAAI,GAAG;IACd;AACF;AAaA;;CAEC,GACM,SAASC,QAAQA,CAACH,OAAe,EAAEI,KAAc,EAAEC,MAAuB,EAAEC,QAAmB,OAAO;IAC3G,MAAMC,OAAO;QAAE,OAAOH,iBAAiBL,QAAQK,MAAM,OAAO,GAAGI,OAAOJ;IAAO;IAC7E,IAAIC,QAAQ;QACVA,MAAM,CAACC,MAAM,CAACN,SAASO;IACzB,OAAO;QACLV,aAAa,CAACS,MAAM,CAAC,CAAC,UAAU,EAAEN,SAAS,EAAEI;IAC/C;AACF;AAEA;;;CAGC,GACM,SAASK,oBAAoBA,CAACR,OAAe,EAAEG,KAAc,EAAEC,MAAuB;IAC3FF,QAAQA,CAACF,SAASG,OAAOC;IACzB,MAAMD;AACR;AAEA;;;;CAIC,GACM,SAASM,mBAAmBA,CAACT,OAAe,EAAEG,KAAc,EAAEC,MAAuB;IAC1FF,QAAQA,CAACF,SAASG,OAAOC;AAC3B;AAEA;;;CAGC,GACM,SAASM,kBAAkBA,CAACV,OAAe,EAAEG,KAAc,EAAEC,MAAuB;IACzFF,QAAQA,CAACF,SAASG,OAAOC,QAAQ;AACnC;AAEA;;;CAGC,GACM,SAASO,YAAYA,CAAIC,EAAW,EAAEZ,OAAe,EAAEI,MAAuB;IACnF,IAAI;QACF,OAAOQ;IACT,EAAE,OAAOT,OAAO;QACdM,mBAAmBA,CAACT,SAASG,OAAOC;QACpC,OAAOS;IACT;AACF;AAEA;;CAEC,GACM,SAASC,WAAWA,CAACC,OAAyB,EAAEf,OAAe,EAAEI,MAAuB;IAC7FW,QAAQ,KAAK,CAAC,CAACZ,QAAUO,kBAAkBA,CAACV,SAASG,OAAOC;AAC9D"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Создает новый массив, применяя функцию к каждому элементу массива,
|
|
3
|
+
* а затем сглаживает результат на один уровень.
|
|
4
|
+
*
|
|
5
|
+
* @param array - Исходный массив
|
|
6
|
+
* @param iteratee - Функция, применяемая к каждому элементу
|
|
7
|
+
* @returns Новый сглаженный массив
|
|
8
|
+
*/
|
|
9
|
+
export declare function flatMap<T, R>(array: T[], iteratee: (value: T, index: number, array: T[]) => R | R[]): R[];
|
|
10
|
+
//# sourceMappingURL=flatMap.util.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flatMap.util.d.ts","sourceRoot":"","sources":["../../src/_utils/flatMap.util.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,wBAAgB,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,CAczG"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Создает новый массив, применяя функцию к каждому элементу массива,
|
|
3
|
+
* а затем сглаживает результат на один уровень.
|
|
4
|
+
*
|
|
5
|
+
* @param array - Исходный массив
|
|
6
|
+
* @param iteratee - Функция, применяемая к каждому элементу
|
|
7
|
+
* @returns Новый сглаженный массив
|
|
8
|
+
*/ function flatMap(array, iteratee) {
|
|
9
|
+
if (!array || !array.length) return [];
|
|
10
|
+
return array.reduce((acc, value, index)=>{
|
|
11
|
+
const mapped = iteratee(value, index, array);
|
|
12
|
+
if (Array.isArray(mapped)) {
|
|
13
|
+
acc.push(...mapped);
|
|
14
|
+
} else {
|
|
15
|
+
acc.push(mapped);
|
|
16
|
+
}
|
|
17
|
+
return acc;
|
|
18
|
+
}, []);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export { flatMap };
|
|
22
|
+
|
|
23
|
+
//# sourceMappingURL=flatMap.util.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_utils/flatMap.util.js","sources":["../../src/_utils/flatMap.util.ts"],"sourcesContent":["/**\n * Создает новый массив, применяя функцию к каждому элементу массива,\n * а затем сглаживает результат на один уровень.\n *\n * @param array - Исходный массив\n * @param iteratee - Функция, применяемая к каждому элементу\n * @returns Новый сглаженный массив\n */\nexport function flatMap<T, R>(array: T[], iteratee: (value: T, index: number, array: T[]) => R | R[]): R[] {\n if (!array || !array.length) return []\n\n return array.reduce((acc: R[], value: T, index: number) => {\n const mapped = iteratee(value, index, array)\n\n if (Array.isArray(mapped)) {\n acc.push(...mapped)\n } else {\n acc.push(mapped)\n }\n\n return acc\n }, [])\n}\n"],"names":["flatMap","array","iteratee","acc","value","index","mapped","Array"],"mappings":"AAAA;;;;;;;CAOC,GACM,SAASA,OAAOA,CAAOC,KAAU,EAAEC,QAA0D;IAClG,IAAI,CAACD,SAAS,CAACA,MAAM,MAAM,EAAE,OAAO,EAAE;IAEtC,OAAOA,MAAM,MAAM,CAAC,CAACE,KAAUC,OAAUC;QACvC,MAAMC,SAASJ,SAASE,OAAOC,OAAOJ;QAEtC,IAAIM,MAAM,OAAO,CAACD,SAAS;YACzBH,IAAI,IAAI,IAAIG;QACd,OAAO;YACLH,IAAI,IAAI,CAACG;QACX;QAEA,OAAOH;IACT,GAAG,EAAE;AACP"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/_utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAA;AAC5B,cAAc,kBAAkB,CAAA;AAChC,cAAc,uBAAuB,CAAA;AACrC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,uBAAuB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_utils/index.js","sources":["../../src/_utils/index.ts"],"sourcesContent":["export * from './chunk.util'\nexport * from './deepMerge.util'\nexport * from './error-handling.util'\nexport * from './flatMap.util'\nexport * from './logger-console.util'\n"],"names":[],"mappings":";;;;;AAA4B;AACI;AACK;AACP;AACO"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare const loggerConsole: {
|
|
2
|
+
log: (...args: any[]) => void;
|
|
3
|
+
warn: (...args: any[]) => void;
|
|
4
|
+
error: (...args: any[]) => void;
|
|
5
|
+
group: (...args: any[]) => void;
|
|
6
|
+
groupEnd: () => void;
|
|
7
|
+
groupCollapsed: (...args: any[]) => void;
|
|
8
|
+
};
|
|
9
|
+
//# sourceMappingURL=logger-console.util.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger-console.util.d.ts","sourceRoot":"","sources":["../../src/_utils/logger-console.util.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,aAAa;mBACT,GAAG,EAAE;oBACJ,GAAG,EAAE;qBACJ,GAAG,EAAE;qBACL,GAAG,EAAE;;8BAEI,GAAG,EAAE;CAChC,CAAA"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
const globalConsole = globalThis.console;
|
|
2
|
+
// Экспортируем обертку, которая использует console через globalThis
|
|
3
|
+
const loggerConsole = {
|
|
4
|
+
log: (...args)=>globalConsole.log(...args),
|
|
5
|
+
warn: (...args)=>globalConsole.warn(...args),
|
|
6
|
+
error: (...args)=>globalConsole.error(...args),
|
|
7
|
+
group: (...args)=>globalConsole.group(...args),
|
|
8
|
+
groupEnd: ()=>globalConsole.groupEnd(),
|
|
9
|
+
groupCollapsed: (...args)=>globalConsole.groupCollapsed(...args)
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
export { loggerConsole };
|
|
13
|
+
|
|
14
|
+
//# sourceMappingURL=logger-console.util.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_utils/logger-console.util.js","sources":["../../src/_utils/logger-console.util.ts"],"sourcesContent":["const globalConsole = globalThis.console\n\n// Экспортируем обертку, которая использует console через globalThis\nexport const loggerConsole = {\n log: (...args: any[]) => globalConsole.log(...args),\n warn: (...args: any[]) => globalConsole.warn(...args),\n error: (...args: any[]) => globalConsole.error(...args),\n group: (...args: any[]) => globalConsole.group(...args),\n groupEnd: () => globalConsole.groupEnd(),\n groupCollapsed: (...args: any[]) => globalConsole.groupCollapsed(...args),\n}\n"],"names":["globalConsole","globalThis","loggerConsole","args"],"mappings":"AAAA,MAAMA,aAAaA,GAAGC,WAAW,OAAO;AAExC,oEAAoE;AAC7D,MAAMC,aAAaA,GAAG;IAC3B,KAAK,CAAC,GAAGC,OAAgBH,aAAaA,CAAC,GAAG,IAAIG;IAC9C,MAAM,CAAC,GAAGA,OAAgBH,aAAaA,CAAC,IAAI,IAAIG;IAChD,OAAO,CAAC,GAAGA,OAAgBH,aAAaA,CAAC,KAAK,IAAIG;IAClD,OAAO,CAAC,GAAGA,OAAgBH,aAAaA,CAAC,KAAK,IAAIG;IAClD,UAAU,IAAMH,aAAaA,CAAC,QAAQ;IACtC,gBAAgB,CAAC,GAAGG,OAAgBH,aAAaA,CAAC,cAAc,IAAIG;AACtE,EAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { CreateApiClientOptions, ExtractParamsType, ExtractResultType } from './types/api.interface';
|
|
2
|
+
import { CreateEndpoint, Endpoint as EndpointType, EndpointConfig } from './types/endpoint.interface';
|
|
3
|
+
import { QueryOptions, QueryResult } from './types/query.interface';
|
|
4
|
+
type EndpointsResult<F> = F extends (create: any) => Promise<infer R> ? R : never;
|
|
5
|
+
type EndpointsMap<EndpointsFn> = {
|
|
6
|
+
[K in keyof EndpointsResult<EndpointsFn>]: EndpointType<ExtractParamsType<EndpointsResult<EndpointsFn>[K]>, ExtractResultType<EndpointsResult<EndpointsFn>[K]>>;
|
|
7
|
+
};
|
|
8
|
+
export declare class ApiClient<EndpointsFn extends (create: CreateEndpoint) => Promise<Record<string, EndpointConfig<any, any>>>> {
|
|
9
|
+
/** Хранилище запросов */
|
|
10
|
+
private queryStorage;
|
|
11
|
+
/** Флаг завершённой инициализации */
|
|
12
|
+
private _initialized;
|
|
13
|
+
/** Промис текущей инициализации (для дедупликации параллельных вызовов) */
|
|
14
|
+
private _initPromise;
|
|
15
|
+
private readonly cacheableHeaderKeys;
|
|
16
|
+
private readonly globalCacheConfig;
|
|
17
|
+
private readonly baseQueryConfig;
|
|
18
|
+
private readonly storageExternal;
|
|
19
|
+
private readonly globalRetryConfig;
|
|
20
|
+
private readonly createEndpoints;
|
|
21
|
+
/** Реестр эндпоинтов */
|
|
22
|
+
private endpoints;
|
|
23
|
+
constructor(options: Omit<CreateApiClientOptions, 'endpoints'> & {
|
|
24
|
+
endpoints: EndpointsFn;
|
|
25
|
+
});
|
|
26
|
+
init(): Promise<this>;
|
|
27
|
+
private _doInit;
|
|
28
|
+
private initializeEndpoints;
|
|
29
|
+
private ensureInitialized;
|
|
30
|
+
/**
|
|
31
|
+
* Получает все эндпоинты с улучшенной типизацией
|
|
32
|
+
* @returns Типизированный объект эндпоинтов
|
|
33
|
+
*/
|
|
34
|
+
getEndpoints(): EndpointsMap<EndpointsFn>;
|
|
35
|
+
/**
|
|
36
|
+
* Выполняет запрос к API с типизацией и обработкой ошибок
|
|
37
|
+
* @param endpointName Имя эндпоинта (с подсказками TypeScript)
|
|
38
|
+
* @param params Параметры запроса (с типизацией)
|
|
39
|
+
* @param options Опции запроса
|
|
40
|
+
* @returns Promise с типизированным результатом запроса
|
|
41
|
+
*/
|
|
42
|
+
request<K extends keyof EndpointsResult<EndpointsFn> & string>(endpointName: K, params: ExtractParamsType<EndpointsResult<EndpointsFn>[K]>, options?: QueryOptions): Promise<QueryResult<ExtractResultType<EndpointsResult<EndpointsFn>[K]>, Error>>;
|
|
43
|
+
destroy(): Promise<void>;
|
|
44
|
+
}
|
|
45
|
+
export {};
|
|
46
|
+
//# sourceMappingURL=api.module.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.module.d.ts","sourceRoot":"","sources":["../../src/api/api.module.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AACpG,OAAO,EAAE,cAAc,EAAE,QAAQ,IAAI,YAAY,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAA;AACrG,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAInE,KAAK,eAAe,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,GAAG,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;AAGjF,KAAK,YAAY,CAAC,WAAW,IAAI;KAC9B,CAAC,IAAI,MAAM,eAAe,CAAC,WAAW,CAAC,GAAG,YAAY,CAAC,iBAAiB,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,iBAAiB,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAChK,CAAA;AAED,qBAAa,SAAS,CAAC,WAAW,SAAS,CAAC,MAAM,EAAE,cAAc,KAAK,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;IACtH,yBAAyB;IACzB,OAAO,CAAC,YAAY,CAAe;IAEnC,qCAAqC;IACrC,OAAO,CAAC,YAAY,CAAQ;IAE5B,2EAA2E;IAC3E,OAAO,CAAC,YAAY,CAA6B;IAEjD,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAA+C;IAEnF,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAiC;IAEnE,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAqC;IAErE,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAmC;IAEnE,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAiC;IAEnE,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAa;IAE7C,wBAAwB;IACxB,OAAO,CAAC,SAAS,CAEX;gBAEM,OAAO,EAAE,IAAI,CAAC,sBAAsB,EAAE,WAAW,CAAC,GAAG;QAAE,SAAS,EAAE,WAAW,CAAA;KAAE;IAU9E,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;YAQpB,OAAO;YAgBP,mBAAmB;IAqBjC,OAAO,CAAC,iBAAiB;IAMzB;;;OAGG;IACI,YAAY,IAAI,YAAY,CAAC,WAAW,CAAC;IAKhD;;;;;;OAMG;IACU,OAAO,CAAC,CAAC,SAAS,MAAM,eAAe,CAAC,WAAW,CAAC,GAAG,MAAM,EACxE,YAAY,EAAE,CAAC,EACf,MAAM,EAAE,iBAAiB,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,EAC1D,OAAO,CAAC,EAAE,YAAY,GACrB,OAAO,CAAC,WAAW,CAAC,iBAAiB,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IAmBrE,OAAO;CAerB"}
|