synapse-storage 2.1.1 → 3.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.
Files changed (233) hide show
  1. package/dist/_utils/index.js +3 -3
  2. package/dist/api/api.module.js +3 -3
  3. package/dist/api/example.js +2 -2
  4. package/dist/api/index.js +5 -5
  5. package/dist/api/utils/endpoint-headers.js +1 -1
  6. package/dist/api/utils/fetch-base-query.js +1 -1
  7. package/dist/core/index.js +2 -2
  8. package/dist/core/selector/index.js +1 -1
  9. package/dist/core/storage/adapters/base-storage.service.js +1 -1
  10. package/dist/core/storage/adapters/indexed-DB.service.js +2 -2
  11. package/dist/core/storage/adapters/indexed-DB.service.old.js +2 -2
  12. package/dist/core/storage/adapters/local-storage.service.js +2 -2
  13. package/dist/core/storage/adapters/memory-storage.service.js +2 -2
  14. package/dist/core/storage/index.js +9 -9
  15. package/dist/core/storage/middlewares/index.js +1 -1
  16. package/dist/core/storage/utils/cache.util.js +1 -1
  17. package/dist/index.js +5 -9
  18. package/dist/index.js.map +1 -1
  19. package/dist/react/hooks/index.js +2 -2
  20. package/dist/react/index.js +2 -2
  21. package/dist/react/utils/createSynapseCtx.d.ts.map +1 -1
  22. package/dist/react/utils/createSynapseCtx.js.map +1 -1
  23. package/dist/react/utils/index.js +1 -1
  24. package/dist/reactive/dispatcher/index.js +2 -2
  25. package/dist/reactive/dispatcher/middlewares/index.js +1 -1
  26. package/dist/reactive/effects/effects.module.js +1 -1
  27. package/dist/reactive/effects/index.js +1 -1
  28. package/dist/reactive/effects/utils/index.js +2 -2
  29. package/dist/reactive/index.js +2 -2
  30. package/dist/utils/index.js +1 -1
  31. package/package.json +2 -2
  32. package/dist/_examples/_example5.d.ts +0 -1
  33. package/dist/_examples/_example5.d.ts.map +0 -1
  34. package/dist/_examples/_example5.js +0 -184
  35. package/dist/_examples/_example5.js.map +0 -1
  36. package/dist/_examples/_example6.d.ts +0 -1
  37. package/dist/_examples/_example6.d.ts.map +0 -1
  38. package/dist/_examples/_example6.js +0 -168
  39. package/dist/_examples/_example6.js.map +0 -1
  40. package/dist/_examples/example1.d.ts +0 -1
  41. package/dist/_examples/example1.d.ts.map +0 -1
  42. package/dist/_examples/example1.js +0 -240
  43. package/dist/_examples/example1.js.map +0 -1
  44. package/dist/_examples/example2.d.ts +0 -1
  45. package/dist/_examples/example2.d.ts.map +0 -1
  46. package/dist/_examples/example2.js +0 -81
  47. package/dist/_examples/example2.js.map +0 -1
  48. package/dist/_examples/example3.d.ts +0 -1
  49. package/dist/_examples/example3.d.ts.map +0 -1
  50. package/dist/_examples/example3.js +0 -99
  51. package/dist/_examples/example3.js.map +0 -1
  52. package/dist/_examples/example4.d.ts +0 -1
  53. package/dist/_examples/example4.d.ts.map +0 -1
  54. package/dist/_examples/example4.js +0 -172
  55. package/dist/_examples/example4.js.map +0 -1
  56. package/dist/_examples/example5.d.ts +0 -1
  57. package/dist/_examples/example5.d.ts.map +0 -1
  58. package/dist/_examples/example5.js +0 -184
  59. package/dist/_examples/example5.js.map +0 -1
  60. package/dist/_examples/example6.d.ts +0 -1
  61. package/dist/_examples/example6.d.ts.map +0 -1
  62. package/dist/_examples/example6.js +0 -168
  63. package/dist/_examples/example6.js.map +0 -1
  64. package/dist/_examples/plugins.d.ts +0 -1
  65. package/dist/_examples/plugins.d.ts.map +0 -1
  66. package/dist/_examples/plugins.js +0 -176
  67. package/dist/_examples/plugins.js.map +0 -1
  68. package/dist/_examples/pokemons/PokemonList.d.ts +0 -5
  69. package/dist/_examples/pokemons/PokemonList.d.ts.map +0 -1
  70. package/dist/_examples/pokemons/PokemonList.js +0 -166
  71. package/dist/_examples/pokemons/PokemonList.js.map +0 -1
  72. package/dist/_examples/pokemons/api.d.ts +0 -8
  73. package/dist/_examples/pokemons/api.d.ts.map +0 -1
  74. package/dist/_examples/pokemons/api.js +0 -45
  75. package/dist/_examples/pokemons/api.js.map +0 -1
  76. package/dist/_examples/pokemons/app.config.d.ts +0 -15
  77. package/dist/_examples/pokemons/app.config.d.ts.map +0 -1
  78. package/dist/_examples/pokemons/app.config.js +0 -15
  79. package/dist/_examples/pokemons/app.config.js.map +0 -1
  80. package/dist/_examples/pokemons/dispatchers/pokemon.dispatcher.d.ts +0 -9
  81. package/dist/_examples/pokemons/dispatchers/pokemon.dispatcher.d.ts.map +0 -1
  82. package/dist/_examples/pokemons/dispatchers/pokemon.dispatcher.js +0 -122
  83. package/dist/_examples/pokemons/dispatchers/pokemon.dispatcher.js.map +0 -1
  84. package/dist/_examples/pokemons/effects/pokemon.effects.d.ts +0 -16
  85. package/dist/_examples/pokemons/effects/pokemon.effects.d.ts.map +0 -1
  86. package/dist/_examples/pokemons/effects/pokemon.effects.js +0 -39
  87. package/dist/_examples/pokemons/effects/pokemon.effects.js.map +0 -1
  88. package/dist/_examples/pokemons/middlewares/pokenon.middlewares.d.ts +0 -4
  89. package/dist/_examples/pokemons/middlewares/pokenon.middlewares.d.ts.map +0 -1
  90. package/dist/_examples/pokemons/middlewares/pokenon.middlewares.js +0 -27
  91. package/dist/_examples/pokemons/middlewares/pokenon.middlewares.js.map +0 -1
  92. package/dist/_examples/pokemons/pokemon.dispatcher.d.ts +0 -9
  93. package/dist/_examples/pokemons/pokemon.dispatcher.d.ts.map +0 -1
  94. package/dist/_examples/pokemons/pokemon.dispatcher.js +0 -122
  95. package/dist/_examples/pokemons/pokemon.dispatcher.js.map +0 -1
  96. package/dist/_examples/pokemons/pokemon.effects.d.ts +0 -5
  97. package/dist/_examples/pokemons/pokemon.effects.d.ts.map +0 -1
  98. package/dist/_examples/pokemons/pokemon.effects.js +0 -39
  99. package/dist/_examples/pokemons/pokemon.effects.js.map +0 -1
  100. package/dist/_examples/pokemons/pokemon.selectors.d.ts +0 -5
  101. package/dist/_examples/pokemons/pokemon.selectors.d.ts.map +0 -1
  102. package/dist/_examples/pokemons/pokemon.selectors.js +0 -10
  103. package/dist/_examples/pokemons/pokemon.selectors.js.map +0 -1
  104. package/dist/_examples/pokemons/pokemon.storage.d.ts +0 -3
  105. package/dist/_examples/pokemons/pokemon.storage.d.ts.map +0 -1
  106. package/dist/_examples/pokemons/pokemon.storage.js +0 -14
  107. package/dist/_examples/pokemons/pokemon.storage.js.map +0 -1
  108. package/dist/_examples/pokemons/pokemon1.selectors.d.ts +0 -5
  109. package/dist/_examples/pokemons/pokemon1.selectors.d.ts.map +0 -1
  110. package/dist/_examples/pokemons/pokemon1.selectors.js +0 -8
  111. package/dist/_examples/pokemons/pokemon1.selectors.js.map +0 -1
  112. package/dist/_examples/pokemons/pokenon.middlewares.d.ts +0 -4
  113. package/dist/_examples/pokemons/pokenon.middlewares.d.ts.map +0 -1
  114. package/dist/_examples/pokemons/pokenon.middlewares.js +0 -27
  115. package/dist/_examples/pokemons/pokenon.middlewares.js.map +0 -1
  116. package/dist/_examples/pokemons/selectors/pokemon.selectors.d.ts +0 -5
  117. package/dist/_examples/pokemons/selectors/pokemon.selectors.d.ts.map +0 -1
  118. package/dist/_examples/pokemons/selectors/pokemon.selectors.js +0 -10
  119. package/dist/_examples/pokemons/selectors/pokemon.selectors.js.map +0 -1
  120. package/dist/_examples/pokemons/selectors/pokemon1.selectors.d.ts +0 -5
  121. package/dist/_examples/pokemons/selectors/pokemon1.selectors.d.ts.map +0 -1
  122. package/dist/_examples/pokemons/selectors/pokemon1.selectors.js +0 -8
  123. package/dist/_examples/pokemons/selectors/pokemon1.selectors.js.map +0 -1
  124. package/dist/_examples/pokemons/storages/pokemon.storage.d.ts +0 -3
  125. package/dist/_examples/pokemons/storages/pokemon.storage.d.ts.map +0 -1
  126. package/dist/_examples/pokemons/storages/pokemon.storage.js +0 -14
  127. package/dist/_examples/pokemons/storages/pokemon.storage.js.map +0 -1
  128. package/dist/_examples/pokemons/store.d.ts +0 -1
  129. package/dist/_examples/pokemons/store.d.ts.map +0 -1
  130. package/dist/_examples/pokemons/store.js +0 -2
  131. package/dist/_examples/pokemons/store.js.map +0 -1
  132. package/dist/_examples/pokemons/store1.d.ts +0 -23
  133. package/dist/_examples/pokemons/store1.d.ts.map +0 -1
  134. package/dist/_examples/pokemons/store1.js +0 -35
  135. package/dist/_examples/pokemons/store1.js.map +0 -1
  136. package/dist/_examples/pokemons/store2.d.ts +0 -23
  137. package/dist/_examples/pokemons/store2.d.ts.map +0 -1
  138. package/dist/_examples/pokemons/store2.js +0 -34
  139. package/dist/_examples/pokemons/store2.js.map +0 -1
  140. package/dist/_examples/pokemons/types.d.ts +0 -26
  141. package/dist/_examples/pokemons/types.d.ts.map +0 -1
  142. package/dist/_examples/pokemons/types.js +0 -2
  143. package/dist/_examples/pokemons/types.js.map +0 -1
  144. package/dist/core/storage/adapters/idb.d.ts +0 -52
  145. package/dist/core/storage/adapters/idb.d.ts.map +0 -1
  146. package/dist/core/storage/adapters/idb.js +0 -528
  147. package/dist/core/storage/adapters/idb.js.map +0 -1
  148. package/dist/core/storage/adapters/indexed-DB.service1.d.ts +0 -38
  149. package/dist/core/storage/adapters/indexed-DB.service1.d.ts.map +0 -1
  150. package/dist/core/storage/adapters/indexed-DB.service1.js +0 -318
  151. package/dist/core/storage/adapters/indexed-DB.service1.js.map +0 -1
  152. package/dist/core/storage/adapters/indexed-DB.service2.d.ts +0 -61
  153. package/dist/core/storage/adapters/indexed-DB.service2.d.ts.map +0 -1
  154. package/dist/core/storage/adapters/indexed-DB.service2.js +0 -596
  155. package/dist/core/storage/adapters/indexed-DB.service2.js.map +0 -1
  156. package/dist/core/storage/factory/createSynapseStorage.factory.d.ts +0 -1
  157. package/dist/core/storage/factory/createSynapseStorage.factory.d.ts.map +0 -1
  158. package/dist/core/storage/factory/createSynapseStorage.factory.js +0 -2
  159. package/dist/core/storage/factory/createSynapseStorage.factory.js.map +0 -1
  160. package/dist/core/storage/factory/index.d.ts +0 -2
  161. package/dist/core/storage/factory/index.d.ts.map +0 -1
  162. package/dist/core/storage/factory/index.js +0 -2
  163. package/dist/core/storage/factory/index.js.map +0 -1
  164. package/dist/examples/_example5.d.ts +0 -1
  165. package/dist/examples/_example5.d.ts.map +0 -1
  166. package/dist/examples/_example5.js +0 -184
  167. package/dist/examples/_example5.js.map +0 -1
  168. package/dist/examples/_example6.d.ts +0 -1
  169. package/dist/examples/_example6.d.ts.map +0 -1
  170. package/dist/examples/_example6.js +0 -168
  171. package/dist/examples/_example6.js.map +0 -1
  172. package/dist/examples/plugins.d.ts +0 -1
  173. package/dist/examples/plugins.d.ts.map +0 -1
  174. package/dist/examples/plugins.js +0 -176
  175. package/dist/examples/plugins.js.map +0 -1
  176. package/dist/examples/pokemons/PokemonList.d.ts +0 -2
  177. package/dist/examples/pokemons/PokemonList.d.ts.map +0 -1
  178. package/dist/examples/pokemons/PokemonList.js +0 -110
  179. package/dist/examples/pokemons/PokemonList.js.map +0 -1
  180. package/dist/examples/pokemons/api.d.ts +0 -22
  181. package/dist/examples/pokemons/api.d.ts.map +0 -1
  182. package/dist/examples/pokemons/api.js +0 -43
  183. package/dist/examples/pokemons/api.js.map +0 -1
  184. package/dist/examples/pokemons/app.config.d.ts +0 -15
  185. package/dist/examples/pokemons/app.config.d.ts.map +0 -1
  186. package/dist/examples/pokemons/app.config.js +0 -15
  187. package/dist/examples/pokemons/app.config.js.map +0 -1
  188. package/dist/examples/pokemons/dispatchers/pokemon.dispatcher.js +0 -128
  189. package/dist/examples/pokemons/dispatchers/pokemon.dispatcher.js.map +0 -1
  190. package/dist/examples/pokemons/effects/pokemon.effects.d.ts +0 -16
  191. package/dist/examples/pokemons/effects/pokemon.effects.d.ts.map +0 -1
  192. package/dist/examples/pokemons/effects/pokemon.effects.js +0 -51
  193. package/dist/examples/pokemons/effects/pokemon.effects.js.map +0 -1
  194. package/dist/examples/pokemons/middlewares/pokenon.middlewares.d.ts +0 -4
  195. package/dist/examples/pokemons/middlewares/pokenon.middlewares.d.ts.map +0 -1
  196. package/dist/examples/pokemons/middlewares/pokenon.middlewares.js +0 -28
  197. package/dist/examples/pokemons/middlewares/pokenon.middlewares.js.map +0 -1
  198. package/dist/examples/pokemons/selectors/pokemon.selectors.d.ts +0 -13
  199. package/dist/examples/pokemons/selectors/pokemon.selectors.d.ts.map +0 -1
  200. package/dist/examples/pokemons/selectors/pokemon.selectors.js +0 -7
  201. package/dist/examples/pokemons/selectors/pokemon.selectors.js.map +0 -1
  202. package/dist/examples/pokemons/storages/pokemon.storage.d.ts +0 -5
  203. package/dist/examples/pokemons/storages/pokemon.storage.d.ts.map +0 -1
  204. package/dist/examples/pokemons/storages/pokemon.storage.js +0 -13
  205. package/dist/examples/pokemons/storages/pokemon.storage.js.map +0 -1
  206. package/dist/examples/pokemons/store.d.ts +0 -35
  207. package/dist/examples/pokemons/store.d.ts.map +0 -1
  208. package/dist/examples/pokemons/store.js +0 -21
  209. package/dist/examples/pokemons/store.js.map +0 -1
  210. package/dist/examples/pokemons/types.d.ts +0 -26
  211. package/dist/examples/pokemons/types.d.ts.map +0 -1
  212. package/dist/examples/pokemons/types.js +0 -2
  213. package/dist/examples/pokemons/types.js.map +0 -1
  214. package/dist/react/utils/createSynapse.d.ts +0 -47
  215. package/dist/react/utils/createSynapse.d.ts.map +0 -1
  216. package/dist/react/utils/createSynapse.js +0 -83
  217. package/dist/react/utils/createSynapse.js.map +0 -1
  218. package/dist/react/utils/createSynapseContext.d.ts +0 -29
  219. package/dist/react/utils/createSynapseContext.d.ts.map +0 -1
  220. package/dist/react/utils/createSynapseContext.js +0 -112
  221. package/dist/react/utils/createSynapseContext.js.map +0 -1
  222. package/dist/utils/chunk.util.d.ts +0 -8
  223. package/dist/utils/chunk.util.d.ts.map +0 -1
  224. package/dist/utils/chunk.util.js +0 -21
  225. package/dist/utils/chunk.util.js.map +0 -1
  226. package/dist/utils/deepMerge.util.d.ts +0 -2
  227. package/dist/utils/deepMerge.util.d.ts.map +0 -1
  228. package/dist/utils/deepMerge.util.js +0 -16
  229. package/dist/utils/deepMerge.util.js.map +0 -1
  230. package/dist/utils/flatMap.util.d.ts +0 -10
  231. package/dist/utils/flatMap.util.d.ts.map +0 -1
  232. package/dist/utils/flatMap.util.js +0 -23
  233. package/dist/utils/flatMap.util.js.map +0 -1
@@ -1,176 +0,0 @@
1
- "use strict";
2
- // import { IStoragePlugin, PluginContext, StorageKeyType } from 'synapse'
3
- //
4
- // /**
5
- // * Пример 1: LoggingPlugin
6
- // *
7
- // * Плагин для логирования операций хранилища.
8
- // * Записывает информацию о всех операциях в консоль или пользовательский логгер.
9
- // */
10
- // export class LoggingPlugin implements IStoragePlugin {
11
- // name = 'logging'
12
- //
13
- // constructor(
14
- // private options: {
15
- // logLevel?: 'info' | 'debug' | 'verbose',
16
- // customLogger?: (message: string, data?: any) => void
17
- // } = {},
18
- // ) {}
19
- //
20
- // private log(message: string, data?: any): void {
21
- // const formattedMessage = `[LoggingPlugin] ${message}`
22
- //
23
- // if (this.options.customLogger) {
24
- // this.options.customLogger(formattedMessage, data)
25
- // } else if (this.options.logLevel === 'verbose') {
26
- // console.log(formattedMessage, data)
27
- // } else if (this.options.logLevel === 'debug' || !this.options.logLevel) {
28
- // console.log(formattedMessage)
29
- // } else {
30
- // console.log(formattedMessage)
31
- // }
32
- // }
33
- //
34
- // async initialize(): Promise<void> {
35
- // this.log('Плагин инициализирован')
36
- // }
37
- //
38
- // async destroy(): Promise<void> {
39
- // this.log('Плагин уничтожен')
40
- // }
41
- //
42
- // async onBeforeSet<T>(value: T, context: PluginContext): Promise<T> {
43
- // this.log(
44
- // `Сохранение значения в хранилище ${context.storageName}`,
45
- // this.options.logLevel === 'verbose' ? value : undefined,
46
- // )
47
- // return value
48
- // }
49
- //
50
- // async onAfterSet<T>(key: StorageKeyType, value: T, context: PluginContext): Promise<T> {
51
- // this.log(
52
- // `Значение сохранено по ключу ${String(key)}`,
53
- // this.options.logLevel === 'verbose' ? value : undefined,
54
- // )
55
- // return value
56
- // }
57
- //
58
- // async onBeforeGet(key: StorageKeyType, context: PluginContext): Promise<StorageKeyType> {
59
- // this.log(`Запрос значения по ключу ${String(key)}`)
60
- // return key
61
- // }
62
- //
63
- // async onAfterGet<T>(key: StorageKeyType, value: T | undefined, context: PluginContext): Promise<T | undefined> {
64
- // if (value === undefined) {
65
- // this.log(`Значение не найдено по ключу ${String(key)}`)
66
- // } else {
67
- // this.log(
68
- // `Получено значение по ключу ${String(key)}`,
69
- // this.options.logLevel === 'verbose' ? value : undefined,
70
- // )
71
- // }
72
- // return value
73
- // }
74
- //
75
- // async onBeforeDelete(key: StorageKeyType, context: PluginContext): Promise<boolean> {
76
- // this.log(`Запрос на удаление значения по ключу ${String(key)}`)
77
- // return true
78
- // }
79
- //
80
- // async onAfterDelete(key: StorageKeyType, context: PluginContext): Promise<void> {
81
- // this.log(`Значение удалено по ключу ${String(key)}`)
82
- // }
83
- //
84
- // async onClear(context: PluginContext): Promise<void> {
85
- // this.log(`Хранилище ${context.storageName} очищено`)
86
- // }
87
- // }
88
- //
89
- // /**
90
- // * Пример 2: ValidationPlugin
91
- // *
92
- // * Плагин для валидации данных перед сохранением в хранилище.
93
- // * Позволяет устанавливать правила валидации для определенных ключей.
94
- // */
95
- // export class ValidationPlugin implements IStoragePlugin {
96
- // name = 'validation'
97
- //
98
- // private validators = new Map<string, (value: any) => { valid: boolean, message?: string }>()
99
- //
100
- // constructor(
101
- // private options: {
102
- // throwOnInvalid?: boolean;
103
- // onValidationError?: (key: string, value: any, message: string) => void;
104
- // } = { throwOnInvalid: true },
105
- // ) {}
106
- //
107
- // /**
108
- // * Добавляет правило валидации для определенного ключа
109
- // *
110
- // * @param key Ключ, для которого применяется валидация
111
- // * @param validator Функция валидации, возвращающая результат проверки
112
- // * @returns Экземпляр плагина для цепочки вызовов
113
- // */
114
- // addValidator(
115
- // key: string,
116
- // validator: (value: any) => { valid: boolean, message?: string },
117
- // ): this {
118
- // this.validators.set(key, validator)
119
- // return this
120
- // }
121
- //
122
- // /**
123
- // * Помощник для создания валидатора по JSON-схеме
124
- // *
125
- // * @param schema Объект описывающий схему данных
126
- // * @returns Функция-валидатор
127
- // */
128
- // static schemaValidator(schema: any): (value: any) => { valid: boolean, message?: string } {
129
- // return (value: any) => {
130
- // // Здесь должна быть реализация проверки по JSON-схеме
131
- // // Для примера используем упрощенную логику
132
- // if (schema.type === 'object' && typeof value !== 'object') {
133
- // return { valid: false, message: 'Value must be an object' }
134
- // }
135
- //
136
- // if (schema.type === 'array' && !Array.isArray(value)) {
137
- // return { valid: false, message: 'Value must be an array' }
138
- // }
139
- //
140
- // if (schema.required && Array.isArray(schema.required)) {
141
- // for (const prop of schema.required) {
142
- // if (value[prop] === undefined) {
143
- // return { valid: false, message: `Required property "${prop}" is missing` }
144
- // }
145
- // }
146
- // }
147
- //
148
- // return { valid: true }
149
- // }
150
- // }
151
- //
152
- // async onBeforeSet<T>(value: T, context: PluginContext): Promise<T> {
153
- // // Получаем ключ из метаданных (должен быть добавлен хранилищем)
154
- // const key = context.metadata?.key
155
- //
156
- // if (key && this.validators.has(key)) {
157
- // const validator = this.validators.get(key)!
158
- // const result = validator(value)
159
- //
160
- // if (!result.valid) {
161
- // const errorMessage = result.message || `Validation failed for key "${key}"`
162
- //
163
- // if (this.options.onValidationError) {
164
- // this.options.onValidationError(key, value, errorMessage)
165
- // }
166
- //
167
- // if (this.options.throwOnInvalid) {
168
- // throw new Error(errorMessage)
169
- // }
170
- // }
171
- // }
172
- //
173
- // return value
174
- // }
175
- // }
176
- //# sourceMappingURL=plugins.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"plugins.js","sourceRoot":"","sources":["../../src/_examples/plugins.ts"],"names":[],"mappings":"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"}
@@ -1,5 +0,0 @@
1
- /**
2
- * Упрощенный React-компонент для работы с одним покемоном
3
- */
4
- export declare function SimplePokemonViewer(): import("react/jsx-runtime").JSX.Element;
5
- //# sourceMappingURL=PokemonList.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"PokemonList.d.ts","sourceRoot":"","sources":["../../../src/_examples/pokemons/PokemonList.tsx"],"names":[],"mappings":"AAMA;;GAEG;AACH,wBAAgB,mBAAmB,4CAsQlC"}
@@ -1,166 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { useEffect, useState } from 'react';
3
- import { distinctUntilChanged, map } from 'rxjs/operators';
4
- import { useSelector, useStorageSubscribe } from 'synapse/react';
5
- import { pokemonActions, pokemonSelectors, pokemonState$, pokemonStorage } from './store1';
6
- /**
7
- * Упрощенный React-компонент для работы с одним покемоном
8
- */
9
- export function SimplePokemonViewer() {
10
- const [state, setState] = useState({
11
- currentPokemon: null,
12
- loading: true,
13
- error: null,
14
- currentId: 1,
15
- });
16
- const d = useSelector(pokemonSelectors.val1);
17
- const d1 = useStorageSubscribe(pokemonStorage, (s) => 1);
18
- // console.log('pokemonSelectors useSelector', d)
19
- console.log('d1', d1);
20
- useEffect(() => {
21
- pokemonSelectors.val1.select().then((val) => {
22
- // console.log('pokemonSelectors select', val)
23
- });
24
- const ddwe = pokemonStorage.subscribe((s) => s.currentPokemon, () => {
25
- });
26
- }, []);
27
- useEffect(() => {
28
- pokemonSelectors.val1.subscribe({
29
- notify: (s) => {
30
- // console.log('pokemonSelectors subscribe', s)
31
- },
32
- });
33
- }, []);
34
- useEffect(() => {
35
- const subscription = pokemonState$.pipe(map((state) => state.currentId), distinctUntilChanged()).subscribe((state) => {
36
- // console.log('Текущее состояние REACTIVE:', state)
37
- });
38
- return () => {
39
- subscription.unsubscribe();
40
- };
41
- }, []);
42
- useEffect(() => {
43
- // Подписываемся на изменения состояния напрямую из хранилища
44
- const unsubscribe = pokemonStorage.subscribeToAll((event) => {
45
- // Обновляем состояние при изменении
46
- pokemonStorage.getState().then((state) => {
47
- // console.log('Текущее состояние ОБЫЧНОЕ:', state)
48
- if (state)
49
- setState(state);
50
- });
51
- });
52
- // Инициируем загрузку первого покемона через действия
53
- pokemonActions.loadPokemon(1);
54
- // Отписываемся при размонтировании
55
- return () => unsubscribe();
56
- }, []);
57
- // Обработчики действий
58
- const handleNext = () => {
59
- pokemonActions.next().then((result) => {
60
- // console.log('Результат:', result) // Покажет { id: число }
61
- });
62
- };
63
- const handlePrev = () => {
64
- pokemonActions.prev();
65
- };
66
- const handleLoadById = (id) => {
67
- if (id >= 1 && id <= 151) {
68
- pokemonActions.loadPokemon(id).then((result) => {
69
- // console.log('Результат:', result) // Покажет { id: число }
70
- });
71
- }
72
- };
73
- // Стили
74
- const styles = {
75
- container: {
76
- maxWidth: '600px',
77
- margin: '0 auto',
78
- padding: '20px',
79
- fontFamily: 'Arial, sans-serif',
80
- textAlign: 'center',
81
- },
82
- title: {
83
- fontSize: '24px',
84
- fontWeight: 'bold',
85
- marginBottom: '20px',
86
- },
87
- card: {
88
- border: '1px solid #ddd',
89
- borderRadius: '8px',
90
- padding: '20px',
91
- margin: '20px 0',
92
- background: 'white',
93
- boxShadow: '0 2px 4px rgba(0,0,0,0.1)',
94
- },
95
- pokemonName: {
96
- fontSize: '20px',
97
- fontWeight: 'bold',
98
- textTransform: 'capitalize',
99
- marginTop: '10px',
100
- },
101
- pokemonImage: {
102
- width: '180px',
103
- height: '180px',
104
- },
105
- typeBadge: {
106
- display: 'inline-block',
107
- padding: '4px 8px',
108
- margin: '4px',
109
- borderRadius: '16px',
110
- fontSize: '12px',
111
- background: '#eee',
112
- },
113
- stats: {
114
- margin: '15px 0',
115
- textAlign: 'left',
116
- },
117
- controls: {
118
- display: 'flex',
119
- justifyContent: 'space-between',
120
- alignItems: 'center',
121
- margin: '20px 0',
122
- },
123
- button: {
124
- padding: '10px 20px',
125
- background: '#0077cc',
126
- color: 'white',
127
- border: 'none',
128
- borderRadius: '4px',
129
- cursor: 'pointer',
130
- fontSize: '16px',
131
- },
132
- input: {
133
- padding: '10px',
134
- fontSize: '16px',
135
- borderRadius: '4px',
136
- border: '1px solid #ddd',
137
- width: '60px',
138
- textAlign: 'center',
139
- },
140
- loader: {
141
- padding: '40px',
142
- fontSize: '18px',
143
- },
144
- error: {
145
- padding: '16px',
146
- background: '#ffebee',
147
- color: '#c62828',
148
- borderRadius: '4px',
149
- margin: '20px 0',
150
- },
151
- };
152
- // Форма ввода ID
153
- function IdInput() {
154
- const [inputId, setInputId] = useState('');
155
- const handleSubmit = (e) => {
156
- e.preventDefault();
157
- const id = parseInt(inputId, 10);
158
- if (!isNaN(id)) {
159
- handleLoadById(id);
160
- }
161
- };
162
- return (_jsxs("form", { onSubmit: handleSubmit, style: { marginTop: '20px' }, children: [_jsxs("label", { children: ["Go to Pok\u00E9mon #:", _jsx("input", { type: "number", min: "1", max: "151", value: inputId, onChange: (e) => setInputId(e.target.value), style: styles.input })] }), _jsx("button", { type: "submit", style: { ...styles.button, marginLeft: '10px' }, children: "Go" })] }));
163
- }
164
- return (_jsxs("div", { style: styles.container, children: [_jsx("h1", { style: styles.title, children: "Pok\u00E9mon Viewer" }), _jsxs("div", { style: styles.controls, children: [_jsx("button", { style: styles.button, onClick: handlePrev, children: "Previous" }), _jsxs("div", { children: ["Pok\u00E9mon #", state.currentId] }), _jsx("button", { style: styles.button, onClick: handleNext, children: "Next" })] }), state.error && (_jsx("div", { style: styles.error, children: _jsxs("p", { children: ["Error:", state.error] }) })), state.loading ? (_jsx("div", { style: styles.loader, children: _jsx("p", { children: "Loading Pok\u00E9mon..." }) })) : state.currentPokemon ? (_jsxs("div", { style: styles.card, children: [_jsx("img", { src: state.currentPokemon.sprites.other?.['official-artwork']?.front_default || state.currentPokemon.sprites.front_default, alt: state.currentPokemon.name, style: styles.pokemonImage }), _jsx("h2", { style: styles.pokemonName, children: state.currentPokemon.name }), _jsx("div", { children: state.currentPokemon.types.map(({ type }) => (_jsx("span", { style: styles.typeBadge, children: type.name }, type.name))) }), _jsxs("div", { style: styles.stats, children: [_jsxs("p", { children: [_jsx("strong", { children: "Height:" }), ' ', state.currentPokemon.height / 10, ' ', "m"] }), _jsxs("p", { children: [_jsx("strong", { children: "Weight:" }), ' ', state.currentPokemon.weight / 10, ' ', "kg"] })] })] })) : null, _jsx(IdInput, {})] }));
165
- }
166
- //# sourceMappingURL=PokemonList.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"PokemonList.js","sourceRoot":"","sources":["../../../src/_examples/pokemons/PokemonList.tsx"],"names":[],"mappings":"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"}
@@ -1,8 +0,0 @@
1
- export interface PokemonSearchParams {
2
- limit?: number;
3
- offset?: number;
4
- }
5
- export declare const api: any;
6
- export declare const pokemonApi: any;
7
- export declare const pokemonEndpoints: any;
8
- //# sourceMappingURL=api.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../../src/_examples/pokemons/api.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,mBAAmB;IAClC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,eAAO,MAAM,GAAG,KAoCd,CAAA;AAEF,eAAO,MAAM,UAAU,KAAmB,CAAA;AAK1C,eAAO,MAAM,gBAAgB,KAA4B,CAAA"}
@@ -1,45 +0,0 @@
1
- import { ApiClient, ResponseFormat } from 'synapse/api';
2
- export const api = new ApiClient({
3
- storageType: 'indexedDB',
4
- storageOptions: {
5
- name: 'pokemon-api-storage',
6
- dbName: 'pokemon-api-cache',
7
- storeName: 'requests',
8
- dbVersion: 1,
9
- },
10
- // Или boolean или объект с настройками
11
- cache: {
12
- // Время жизни кэша в миллисекундах
13
- ttl: 5 * 60 * 1000, // 5 минут
14
- // Инвалидировать кэш при ошибке
15
- invalidateOnError: true,
16
- cleanup: {
17
- // Включить периодическую очистку
18
- enabled: true,
19
- // Интервал очистки в миллисекундах
20
- interval: 10 * 60 * 1000, // 10 минут
21
- },
22
- },
23
- baseQuery: {
24
- baseUrl: 'https://pokeapi.co/api/v2',
25
- timeout: 10000,
26
- credentials: 'same-origin',
27
- },
28
- endpoints: async (create) => ({
29
- fetchPokemonById: create({
30
- request: (params) => ({
31
- path: `/pokemon/${params.id}`,
32
- method: 'GET',
33
- responseFormat: ResponseFormat.Json,
34
- }),
35
- tags: ['pokemon-details'],
36
- }),
37
- }),
38
- });
39
- // Инициализация
40
- export const pokemonApi = await api.init();
41
- // Демонтирование
42
- // await pokemonApi.destroy()
43
- // Получение эндпоинтов
44
- export const pokemonEndpoints = pokemonApi.getEndpoints();
45
- //# sourceMappingURL=api.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"api.js","sourceRoot":"","sources":["../../../src/_examples/pokemons/api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAQvD,MAAM,CAAC,MAAM,GAAG,GAAG,IAAI,SAAS,CAAC;IAC/B,WAAW,EAAE,WAAW;IACxB,cAAc,EAAE;QACd,IAAI,EAAE,qBAAqB;QAC3B,MAAM,EAAE,mBAAmB;QAC3B,SAAS,EAAE,UAAU;QACrB,SAAS,EAAE,CAAC;KACb;IACD,uCAAuC;IACvC,KAAK,EAAE;QACL,mCAAmC;QACnC,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI,EAAE,UAAU;QAC9B,iCAAiC;QACjC,iBAAiB,EAAE,IAAI;QACvB,OAAO,EAAE;YACP,iCAAiC;YACjC,OAAO,EAAE,IAAI;YACb,mCAAmC;YACnC,QAAQ,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,WAAW;SACtC;KACF;IACD,SAAS,EAAE;QACT,OAAO,EAAE,2BAA2B;QACpC,OAAO,EAAE,KAAK;QACd,WAAW,EAAE,aAAa;KAC3B;IACD,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;QAC5B,gBAAgB,EAAE,MAAM,CAA0B;YAChD,OAAO,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;gBACpB,IAAI,EAAE,YAAY,MAAM,CAAC,EAAE,EAAE;gBAC7B,MAAM,EAAE,KAAK;gBACb,cAAc,EAAE,cAAc,CAAC,IAAI;aACpC,CAAC;YACF,IAAI,EAAE,CAAC,iBAAiB,CAAC;SAC1B,CAAC;KACH,CAAC;CACH,CAAC,CAAA;AACF,gBAAgB;AAChB,MAAM,CAAC,MAAM,UAAU,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAA;AAC1C,iBAAiB;AACjB,6BAA6B;AAE7B,uBAAuB;AACvB,MAAM,CAAC,MAAM,gBAAgB,GAAG,UAAU,CAAC,YAAY,EAAE,CAAA"}
@@ -1,15 +0,0 @@
1
- export interface AppConfig {
2
- apiBaseUrl: string;
3
- apiKey: string;
4
- requestTimeoutMs: number;
5
- features: {
6
- enableNotifications: boolean;
7
- enableCache: boolean;
8
- };
9
- themeSettings: {
10
- primaryColor: string;
11
- secondaryColor: string;
12
- };
13
- }
14
- export declare const appConfig: AppConfig;
15
- //# sourceMappingURL=app.config.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"app.config.d.ts","sourceRoot":"","sources":["../../../src/_examples/pokemons/app.config.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,SAAS;IACxB,UAAU,EAAE,MAAM,CAAA;IAClB,MAAM,EAAE,MAAM,CAAA;IACd,gBAAgB,EAAE,MAAM,CAAA;IACxB,QAAQ,EAAE;QACR,mBAAmB,EAAE,OAAO,CAAA;QAC5B,WAAW,EAAE,OAAO,CAAA;KACrB,CAAA;IACD,aAAa,EAAE;QACb,YAAY,EAAE,MAAM,CAAA;QACpB,cAAc,EAAE,MAAM,CAAA;KACvB,CAAA;CACF;AAED,eAAO,MAAM,SAAS,EAAE,SAYvB,CAAA"}
@@ -1,15 +0,0 @@
1
- // Просто условный объект с конфигурацией, которую можно использовать в эффектах
2
- export const appConfig = {
3
- apiBaseUrl: 'https://pokeapi.co/api/v2',
4
- apiKey: 'your-api-key-here',
5
- requestTimeoutMs: 5000,
6
- features: {
7
- enableNotifications: true,
8
- enableCache: true,
9
- },
10
- themeSettings: {
11
- primaryColor: '#FF0000', // Pokemon Red!
12
- secondaryColor: '#FFFFFF',
13
- },
14
- };
15
- //# sourceMappingURL=app.config.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"app.config.js","sourceRoot":"","sources":["../../../src/_examples/pokemons/app.config.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAiBhF,MAAM,CAAC,MAAM,SAAS,GAAc;IAClC,UAAU,EAAE,2BAA2B;IACvC,MAAM,EAAE,mBAAmB;IAC3B,gBAAgB,EAAE,IAAI;IACtB,QAAQ,EAAE;QACR,mBAAmB,EAAE,IAAI;QACzB,WAAW,EAAE,IAAI;KAClB;IACD,aAAa,EAAE;QACb,YAAY,EAAE,SAAS,EAAE,eAAe;QACxC,cAAc,EAAE,SAAS;KAC1B;CACF,CAAA"}
@@ -1,9 +0,0 @@
1
- import { PokemonStorage } from '../storages/pokemon.storage';
2
- export interface AlertPayload {
3
- message: string;
4
- type: 'info' | 'warning' | 'error' | 'success';
5
- duration?: number;
6
- }
7
- export declare function createPokemonDispatcher(storage: PokemonStorage): any;
8
- export type PokemonDispatcher = ReturnType<typeof createPokemonDispatcher>;
9
- //# sourceMappingURL=pokemon.dispatcher.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pokemon.dispatcher.d.ts","sourceRoot":"","sources":["../../../../src/_examples/pokemons/dispatchers/pokemon.dispatcher.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAA;AAK5D,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAAA;IAC9C,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAGD,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,cAAc,OAmI9D;AAGD,MAAM,MAAM,iBAAiB,GAAG,UAAU,CAAC,OAAO,uBAAuB,CAAC,CAAC"}
@@ -1,122 +0,0 @@
1
- import { createDispatcher, loggerDispatcherMiddleware } from 'synapse/reactive';
2
- import { createPokemonAlertMiddleware } from '../middlewares/pokenon.middlewares';
3
- // Функция для создания диспетчера
4
- export function createPokemonDispatcher(storage) {
5
- // Создаем логгер middleware
6
- const loggerMiddleware = loggerDispatcherMiddleware({
7
- collapsed: true, // Сворачиваем группы в консоли для компактности
8
- colors: {
9
- title: '#3498db', // Кастомный синий цвет для заголовка
10
- },
11
- duration: true,
12
- diff: true,
13
- showFullState: true,
14
- });
15
- const alertM = createPokemonAlertMiddleware();
16
- return createDispatcher({
17
- storage,
18
- middlewares: [loggerMiddleware, alertM],
19
- }, (storage, { createWatcher, createAction }) => ({
20
- // Добавляем watcher для отслеживания текущего ID
21
- watchCurrentId: createWatcher({
22
- type: 'pokemon/currentIdChanged',
23
- selector: (state) => state.currentId,
24
- shouldTrigger: (prev, curr) => prev !== curr,
25
- meta: {
26
- description: 'Следит за изменениями ID текущего покемона',
27
- },
28
- }),
29
- // Watcher для отслеживания состояния загрузки
30
- watchLoadingState: createWatcher({
31
- type: 'pokemon/loadingStateChanged',
32
- selector: (state) => state.loading,
33
- }),
34
- // Загрузка покемона по ID
35
- loadPokemon: createAction({
36
- type: 'pokemon/loadPokemonIdl',
37
- action: async (id) => ({ id }),
38
- }),
39
- loadPokemonRequest: createAction({
40
- type: 'pokemon/loadPokemonRequest',
41
- action: async (id) => {
42
- await storage.update((state) => {
43
- state.loading = true;
44
- state.error = null;
45
- state.currentId = id;
46
- });
47
- return { id };
48
- },
49
- }),
50
- // Успешное получение данных
51
- success: createAction({
52
- type: 'pokemon/success',
53
- action: async ({ data }) => {
54
- await storage.update((state) => {
55
- state.currentPokemon = data;
56
- state.loading = false;
57
- state.error = null;
58
- });
59
- // Возвращаем данные покемона как payload
60
- return { data };
61
- },
62
- }),
63
- // Ошибка при получении данных
64
- failure: createAction({
65
- type: 'pokemon/failure',
66
- action: async (err) => {
67
- const errorMessage = err instanceof Error ? err.message : 'Unknown error';
68
- await storage.update((state) => {
69
- state.loading = false;
70
- state.error = errorMessage;
71
- });
72
- // Возвращаем ошибку как payload
73
- return { err };
74
- },
75
- }),
76
- // Перейти к следующему покемону
77
- next: createAction({
78
- type: 'pokemon/next',
79
- action: async () => {
80
- let newId = 1;
81
- await storage.update((state) => {
82
- newId = state.currentId + 1;
83
- if (newId > 151)
84
- newId = 1; // Ограничиваем первым поколением (1-151)
85
- state.currentId = newId;
86
- });
87
- return { id: newId };
88
- },
89
- }),
90
- // Перейти к предыдущему покемону
91
- prev: createAction({
92
- type: 'pokemon/prev',
93
- action: async () => {
94
- let newId = 1;
95
- await storage.update((state) => {
96
- newId = state.currentId - 1;
97
- if (newId < 1)
98
- newId = 151; // Ограничиваем первым поколением (1-151)
99
- state.currentId = newId;
100
- });
101
- console.log(`Action: Previous pokemon (ID ${newId})`);
102
- // Возвращаем новый id как payload
103
- return { id: newId };
104
- },
105
- }),
106
- showAlert: createAction({
107
- type: 'pokemon/showAlert',
108
- action: async (payload) => {
109
- // Используем глобальный alert для демонстрации
110
- alert(payload.message);
111
- // Здесь можно также обновить состояние для отображения alert в UI
112
- // например, добавить запись в массив alerts в state
113
- },
114
- meta: {
115
- description: 'Показывает оповещение пользователю',
116
- },
117
- }),
118
- }));
119
- // .use(logger)
120
- // .use(alertM)
121
- }
122
- //# sourceMappingURL=pokemon.dispatcher.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pokemon.dispatcher.js","sourceRoot":"","sources":["../../../../src/_examples/pokemons/dispatchers/pokemon.dispatcher.ts"],"names":[],"mappings":"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"}
@@ -1,16 +0,0 @@
1
- import { pokemonEndpoints } from '../api.md';
2
- import { AppConfig } from '../app.config';
3
- import { PokemonDispatcher } from '../pokemon.dispatcher';
4
- import { PokemonState } from '../types';
5
- type PokemonDispatcherType = {
6
- pokemonDispatcher: PokemonDispatcher;
7
- };
8
- type PokemonApiType = {
9
- pokemonApi: typeof pokemonEndpoints;
10
- };
11
- export declare const navigationEffect: import("../../../../dist/reactive").Effect<PokemonState, PokemonDispatcherType, PokemonApiType, AppConfig>;
12
- export declare const watchIdEffect: import("../../../../dist/reactive").Effect<PokemonState, PokemonDispatcherType, PokemonApiType, AppConfig>;
13
- export declare const loadPokemonEffect: import("../../../../dist/reactive").Effect<PokemonState, PokemonDispatcherType, PokemonApiType, AppConfig>;
14
- export declare const pokemonEffects: import("../../../../dist/reactive").Effect<PokemonState, PokemonDispatcherType, PokemonApiType, AppConfig>;
15
- export {};
16
- //# sourceMappingURL=pokemon.effects.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pokemon.effects.d.ts","sourceRoot":"","sources":["../../../../src/_examples/pokemons/effects/pokemon.effects.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAA;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AACzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AACzD,OAAO,EAAW,YAAY,EAAE,MAAM,UAAU,CAAA;AAGhD,KAAK,qBAAqB,GAAG;IAAE,iBAAiB,EAAE,iBAAiB,CAAA;CAAE,CAAA;AACrE,KAAK,cAAc,GAAG;IAAE,UAAU,EAAE,OAAO,gBAAgB,CAAA;CAAE,CAAA;AAG7D,eAAO,MAAM,gBAAgB,4GAQ5B,CAAA;AAGD,eAAO,MAAM,aAAa,4GAezB,CAAA;AAGD,eAAO,MAAM,iBAAiB,4GAgC7B,CAAA;AAGD,eAAO,MAAM,cAAc,4GAAqE,CAAA"}