synapse-storage 2.1.0 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +32 -13
- package/dist/_utils/index.js +3 -3
- package/dist/api/api.module.js +3 -3
- package/dist/api/example.js +2 -2
- package/dist/api/index.js +5 -5
- package/dist/api/utils/endpoint-headers.js +1 -1
- package/dist/api/utils/fetch-base-query.js +1 -1
- package/dist/core/index.js +2 -2
- package/dist/core/selector/index.js +1 -1
- package/dist/core/storage/adapters/base-storage.service.js +1 -1
- package/dist/core/storage/adapters/indexed-DB.service.js +2 -2
- package/dist/core/storage/adapters/indexed-DB.service.old.js +2 -2
- package/dist/core/storage/adapters/local-storage.service.js +2 -2
- package/dist/core/storage/adapters/memory-storage.service.js +2 -2
- package/dist/core/storage/index.js +9 -9
- package/dist/core/storage/middlewares/index.js +1 -1
- package/dist/core/storage/utils/cache.util.js +1 -1
- package/dist/index.js +5 -9
- package/dist/index.js.map +1 -1
- package/dist/react/hooks/index.js +2 -2
- package/dist/react/index.js +2 -2
- package/dist/react/utils/createSynapseCtx.d.ts +23 -13
- package/dist/react/utils/createSynapseCtx.d.ts.map +1 -1
- package/dist/react/utils/createSynapseCtx.js +11 -10
- package/dist/react/utils/createSynapseCtx.js.map +1 -1
- package/dist/react/utils/index.js +1 -1
- package/dist/reactive/dispatcher/index.js +2 -2
- package/dist/reactive/dispatcher/middlewares/index.js +1 -1
- package/dist/reactive/effects/effects.module.d.ts +13 -3
- package/dist/reactive/effects/effects.module.d.ts.map +1 -1
- package/dist/reactive/effects/effects.module.js +22 -8
- package/dist/reactive/effects/effects.module.js.map +1 -1
- package/dist/reactive/effects/index.js +1 -1
- package/dist/reactive/effects/utils/index.js +2 -2
- package/dist/reactive/index.js +2 -2
- package/dist/utils/createSynapse.d.ts +58 -18
- package/dist/utils/createSynapse.d.ts.map +1 -1
- package/dist/utils/createSynapse.js +4 -12
- package/dist/utils/createSynapse.js.map +1 -1
- package/dist/utils/index.d.ts +1 -1
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -1
- package/dist/utils/index.js.map +1 -1
- package/package.json +2 -2
- package/dist/_examples/_example5.d.ts +0 -1
- package/dist/_examples/_example5.d.ts.map +0 -1
- package/dist/_examples/_example5.js +0 -184
- package/dist/_examples/_example5.js.map +0 -1
- package/dist/_examples/_example6.d.ts +0 -1
- package/dist/_examples/_example6.d.ts.map +0 -1
- package/dist/_examples/_example6.js +0 -168
- package/dist/_examples/_example6.js.map +0 -1
- package/dist/_examples/example1.d.ts +0 -1
- package/dist/_examples/example1.d.ts.map +0 -1
- package/dist/_examples/example1.js +0 -240
- package/dist/_examples/example1.js.map +0 -1
- package/dist/_examples/example2.d.ts +0 -1
- package/dist/_examples/example2.d.ts.map +0 -1
- package/dist/_examples/example2.js +0 -81
- package/dist/_examples/example2.js.map +0 -1
- package/dist/_examples/example3.d.ts +0 -1
- package/dist/_examples/example3.d.ts.map +0 -1
- package/dist/_examples/example3.js +0 -99
- package/dist/_examples/example3.js.map +0 -1
- package/dist/_examples/example4.d.ts +0 -1
- package/dist/_examples/example4.d.ts.map +0 -1
- package/dist/_examples/example4.js +0 -172
- package/dist/_examples/example4.js.map +0 -1
- package/dist/_examples/example5.d.ts +0 -1
- package/dist/_examples/example5.d.ts.map +0 -1
- package/dist/_examples/example5.js +0 -184
- package/dist/_examples/example5.js.map +0 -1
- package/dist/_examples/example6.d.ts +0 -1
- package/dist/_examples/example6.d.ts.map +0 -1
- package/dist/_examples/example6.js +0 -168
- package/dist/_examples/example6.js.map +0 -1
- package/dist/_examples/plugins.d.ts +0 -1
- package/dist/_examples/plugins.d.ts.map +0 -1
- package/dist/_examples/plugins.js +0 -176
- package/dist/_examples/plugins.js.map +0 -1
- package/dist/_examples/pokemons/PokemonList.d.ts +0 -5
- package/dist/_examples/pokemons/PokemonList.d.ts.map +0 -1
- package/dist/_examples/pokemons/PokemonList.js +0 -166
- package/dist/_examples/pokemons/PokemonList.js.map +0 -1
- package/dist/_examples/pokemons/api.d.ts +0 -8
- package/dist/_examples/pokemons/api.d.ts.map +0 -1
- package/dist/_examples/pokemons/api.js +0 -45
- package/dist/_examples/pokemons/api.js.map +0 -1
- package/dist/_examples/pokemons/app.config.d.ts +0 -15
- package/dist/_examples/pokemons/app.config.d.ts.map +0 -1
- package/dist/_examples/pokemons/app.config.js +0 -15
- package/dist/_examples/pokemons/app.config.js.map +0 -1
- package/dist/_examples/pokemons/dispatchers/pokemon.dispatcher.d.ts +0 -9
- package/dist/_examples/pokemons/dispatchers/pokemon.dispatcher.d.ts.map +0 -1
- package/dist/_examples/pokemons/dispatchers/pokemon.dispatcher.js +0 -122
- package/dist/_examples/pokemons/dispatchers/pokemon.dispatcher.js.map +0 -1
- package/dist/_examples/pokemons/effects/pokemon.effects.d.ts +0 -16
- package/dist/_examples/pokemons/effects/pokemon.effects.d.ts.map +0 -1
- package/dist/_examples/pokemons/effects/pokemon.effects.js +0 -39
- package/dist/_examples/pokemons/effects/pokemon.effects.js.map +0 -1
- package/dist/_examples/pokemons/middlewares/pokenon.middlewares.d.ts +0 -4
- package/dist/_examples/pokemons/middlewares/pokenon.middlewares.d.ts.map +0 -1
- package/dist/_examples/pokemons/middlewares/pokenon.middlewares.js +0 -27
- package/dist/_examples/pokemons/middlewares/pokenon.middlewares.js.map +0 -1
- package/dist/_examples/pokemons/pokemon.dispatcher.d.ts +0 -9
- package/dist/_examples/pokemons/pokemon.dispatcher.d.ts.map +0 -1
- package/dist/_examples/pokemons/pokemon.dispatcher.js +0 -122
- package/dist/_examples/pokemons/pokemon.dispatcher.js.map +0 -1
- package/dist/_examples/pokemons/pokemon.effects.d.ts +0 -5
- package/dist/_examples/pokemons/pokemon.effects.d.ts.map +0 -1
- package/dist/_examples/pokemons/pokemon.effects.js +0 -39
- package/dist/_examples/pokemons/pokemon.effects.js.map +0 -1
- package/dist/_examples/pokemons/pokemon.selectors.d.ts +0 -5
- package/dist/_examples/pokemons/pokemon.selectors.d.ts.map +0 -1
- package/dist/_examples/pokemons/pokemon.selectors.js +0 -10
- package/dist/_examples/pokemons/pokemon.selectors.js.map +0 -1
- package/dist/_examples/pokemons/pokemon.storage.d.ts +0 -3
- package/dist/_examples/pokemons/pokemon.storage.d.ts.map +0 -1
- package/dist/_examples/pokemons/pokemon.storage.js +0 -14
- package/dist/_examples/pokemons/pokemon.storage.js.map +0 -1
- package/dist/_examples/pokemons/pokemon1.selectors.d.ts +0 -5
- package/dist/_examples/pokemons/pokemon1.selectors.d.ts.map +0 -1
- package/dist/_examples/pokemons/pokemon1.selectors.js +0 -8
- package/dist/_examples/pokemons/pokemon1.selectors.js.map +0 -1
- package/dist/_examples/pokemons/pokenon.middlewares.d.ts +0 -4
- package/dist/_examples/pokemons/pokenon.middlewares.d.ts.map +0 -1
- package/dist/_examples/pokemons/pokenon.middlewares.js +0 -27
- package/dist/_examples/pokemons/pokenon.middlewares.js.map +0 -1
- package/dist/_examples/pokemons/selectors/pokemon.selectors.d.ts +0 -5
- package/dist/_examples/pokemons/selectors/pokemon.selectors.d.ts.map +0 -1
- package/dist/_examples/pokemons/selectors/pokemon.selectors.js +0 -10
- package/dist/_examples/pokemons/selectors/pokemon.selectors.js.map +0 -1
- package/dist/_examples/pokemons/selectors/pokemon1.selectors.d.ts +0 -5
- package/dist/_examples/pokemons/selectors/pokemon1.selectors.d.ts.map +0 -1
- package/dist/_examples/pokemons/selectors/pokemon1.selectors.js +0 -8
- package/dist/_examples/pokemons/selectors/pokemon1.selectors.js.map +0 -1
- package/dist/_examples/pokemons/storages/pokemon.storage.d.ts +0 -3
- package/dist/_examples/pokemons/storages/pokemon.storage.d.ts.map +0 -1
- package/dist/_examples/pokemons/storages/pokemon.storage.js +0 -14
- package/dist/_examples/pokemons/storages/pokemon.storage.js.map +0 -1
- package/dist/_examples/pokemons/store.d.ts +0 -1
- package/dist/_examples/pokemons/store.d.ts.map +0 -1
- package/dist/_examples/pokemons/store.js +0 -2
- package/dist/_examples/pokemons/store.js.map +0 -1
- package/dist/_examples/pokemons/store1.d.ts +0 -23
- package/dist/_examples/pokemons/store1.d.ts.map +0 -1
- package/dist/_examples/pokemons/store1.js +0 -35
- package/dist/_examples/pokemons/store1.js.map +0 -1
- package/dist/_examples/pokemons/store2.d.ts +0 -23
- package/dist/_examples/pokemons/store2.d.ts.map +0 -1
- package/dist/_examples/pokemons/store2.js +0 -34
- package/dist/_examples/pokemons/store2.js.map +0 -1
- package/dist/_examples/pokemons/types.d.ts +0 -26
- package/dist/_examples/pokemons/types.d.ts.map +0 -1
- package/dist/_examples/pokemons/types.js +0 -2
- package/dist/_examples/pokemons/types.js.map +0 -1
- package/dist/core/storage/adapters/idb.d.ts +0 -52
- package/dist/core/storage/adapters/idb.d.ts.map +0 -1
- package/dist/core/storage/adapters/idb.js +0 -528
- package/dist/core/storage/adapters/idb.js.map +0 -1
- package/dist/core/storage/adapters/indexed-DB.service1.d.ts +0 -38
- package/dist/core/storage/adapters/indexed-DB.service1.d.ts.map +0 -1
- package/dist/core/storage/adapters/indexed-DB.service1.js +0 -318
- package/dist/core/storage/adapters/indexed-DB.service1.js.map +0 -1
- package/dist/core/storage/adapters/indexed-DB.service2.d.ts +0 -61
- package/dist/core/storage/adapters/indexed-DB.service2.d.ts.map +0 -1
- package/dist/core/storage/adapters/indexed-DB.service2.js +0 -596
- package/dist/core/storage/adapters/indexed-DB.service2.js.map +0 -1
- package/dist/core/storage/factory/createSynapseStorage.factory.d.ts +0 -1
- package/dist/core/storage/factory/createSynapseStorage.factory.d.ts.map +0 -1
- package/dist/core/storage/factory/createSynapseStorage.factory.js +0 -2
- package/dist/core/storage/factory/createSynapseStorage.factory.js.map +0 -1
- package/dist/core/storage/factory/index.d.ts +0 -2
- package/dist/core/storage/factory/index.d.ts.map +0 -1
- package/dist/core/storage/factory/index.js +0 -2
- package/dist/core/storage/factory/index.js.map +0 -1
- package/dist/examples/_example5.d.ts +0 -1
- package/dist/examples/_example5.d.ts.map +0 -1
- package/dist/examples/_example5.js +0 -184
- package/dist/examples/_example5.js.map +0 -1
- package/dist/examples/_example6.d.ts +0 -1
- package/dist/examples/_example6.d.ts.map +0 -1
- package/dist/examples/_example6.js +0 -168
- package/dist/examples/_example6.js.map +0 -1
- package/dist/examples/plugins.d.ts +0 -1
- package/dist/examples/plugins.d.ts.map +0 -1
- package/dist/examples/plugins.js +0 -176
- package/dist/examples/plugins.js.map +0 -1
- package/dist/examples/pokemons/PokemonList.d.ts +0 -2
- package/dist/examples/pokemons/PokemonList.d.ts.map +0 -1
- package/dist/examples/pokemons/PokemonList.js +0 -110
- package/dist/examples/pokemons/PokemonList.js.map +0 -1
- package/dist/examples/pokemons/api.d.ts +0 -22
- package/dist/examples/pokemons/api.d.ts.map +0 -1
- package/dist/examples/pokemons/api.js +0 -43
- package/dist/examples/pokemons/api.js.map +0 -1
- package/dist/examples/pokemons/app.config.d.ts +0 -15
- package/dist/examples/pokemons/app.config.d.ts.map +0 -1
- package/dist/examples/pokemons/app.config.js +0 -15
- package/dist/examples/pokemons/app.config.js.map +0 -1
- package/dist/examples/pokemons/dispatchers/pokemon.dispatcher.js +0 -128
- package/dist/examples/pokemons/dispatchers/pokemon.dispatcher.js.map +0 -1
- package/dist/examples/pokemons/effects/pokemon.effects.d.ts +0 -16
- package/dist/examples/pokemons/effects/pokemon.effects.d.ts.map +0 -1
- package/dist/examples/pokemons/effects/pokemon.effects.js +0 -51
- package/dist/examples/pokemons/effects/pokemon.effects.js.map +0 -1
- package/dist/examples/pokemons/middlewares/pokenon.middlewares.d.ts +0 -4
- package/dist/examples/pokemons/middlewares/pokenon.middlewares.d.ts.map +0 -1
- package/dist/examples/pokemons/middlewares/pokenon.middlewares.js +0 -28
- package/dist/examples/pokemons/middlewares/pokenon.middlewares.js.map +0 -1
- package/dist/examples/pokemons/selectors/pokemon.selectors.d.ts +0 -13
- package/dist/examples/pokemons/selectors/pokemon.selectors.d.ts.map +0 -1
- package/dist/examples/pokemons/selectors/pokemon.selectors.js +0 -7
- package/dist/examples/pokemons/selectors/pokemon.selectors.js.map +0 -1
- package/dist/examples/pokemons/storages/pokemon.storage.d.ts +0 -5
- package/dist/examples/pokemons/storages/pokemon.storage.d.ts.map +0 -1
- package/dist/examples/pokemons/storages/pokemon.storage.js +0 -13
- package/dist/examples/pokemons/storages/pokemon.storage.js.map +0 -1
- package/dist/examples/pokemons/store.d.ts +0 -35
- package/dist/examples/pokemons/store.d.ts.map +0 -1
- package/dist/examples/pokemons/store.js +0 -21
- package/dist/examples/pokemons/store.js.map +0 -1
- package/dist/examples/pokemons/types.d.ts +0 -26
- package/dist/examples/pokemons/types.d.ts.map +0 -1
- package/dist/examples/pokemons/types.js +0 -2
- package/dist/examples/pokemons/types.js.map +0 -1
- package/dist/react/utils/createSynapse.d.ts +0 -47
- package/dist/react/utils/createSynapse.d.ts.map +0 -1
- package/dist/react/utils/createSynapse.js +0 -83
- package/dist/react/utils/createSynapse.js.map +0 -1
- package/dist/react/utils/createSynapseContext.d.ts +0 -29
- package/dist/react/utils/createSynapseContext.d.ts.map +0 -1
- package/dist/react/utils/createSynapseContext.js +0 -112
- package/dist/react/utils/createSynapseContext.js.map +0 -1
- package/dist/utils/chunk.util.d.ts +0 -8
- package/dist/utils/chunk.util.d.ts.map +0 -1
- package/dist/utils/chunk.util.js +0 -21
- package/dist/utils/chunk.util.js.map +0 -1
- package/dist/utils/deepMerge.util.d.ts +0 -2
- package/dist/utils/deepMerge.util.d.ts.map +0 -1
- package/dist/utils/deepMerge.util.js +0 -16
- package/dist/utils/deepMerge.util.js.map +0 -1
- package/dist/utils/flatMap.util.d.ts +0 -10
- package/dist/utils/flatMap.util.d.ts.map +0 -1
- package/dist/utils/flatMap.util.js +0 -23
- package/dist/utils/flatMap.util.js.map +0 -1
|
@@ -1,184 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
// import React, { useState } from 'react'
|
|
3
|
-
// import { MemoryStorage, StoragePluginModule, ILogger } from 'synapse'
|
|
4
|
-
// import { LoggingPlugin, ValidationPlugin } from './plugins'
|
|
5
|
-
//
|
|
6
|
-
// // Типы данных
|
|
7
|
-
// interface User {
|
|
8
|
-
// name: string;
|
|
9
|
-
// age: number;
|
|
10
|
-
// }
|
|
11
|
-
//
|
|
12
|
-
// // Создаем модуль плагинов
|
|
13
|
-
// const plugins = new StoragePluginModule(undefined, console, 'demoStorage')
|
|
14
|
-
//
|
|
15
|
-
// // Создаем стейт для ошибок, чтобы компоненты могли получить к нему доступ
|
|
16
|
-
// const validationErrors: { [key: string]: string } = {}
|
|
17
|
-
//
|
|
18
|
-
// // Добавляем логирующий плагин
|
|
19
|
-
// await plugins.add(new LoggingPlugin({ logLevel: 'debug' }))
|
|
20
|
-
//
|
|
21
|
-
// // Добавляем плагин валидации с обработчиком ошибок
|
|
22
|
-
// const validation = new ValidationPlugin({
|
|
23
|
-
// throwOnInvalid: true, // Все равно генерировать ошибку
|
|
24
|
-
// onValidationError: (key, value, message) => {
|
|
25
|
-
// // Сохраняем ошибку в общем объекте
|
|
26
|
-
// validationErrors[key] = message
|
|
27
|
-
// console.error(`Validation error for ${key}: ${message}`, value)
|
|
28
|
-
// },
|
|
29
|
-
// })
|
|
30
|
-
//
|
|
31
|
-
// // Настраиваем правила валидации
|
|
32
|
-
// validation.addValidator('user', (value) => {
|
|
33
|
-
// // Сбрасываем ошибки при каждой валидации
|
|
34
|
-
// validationErrors.user = ''
|
|
35
|
-
//
|
|
36
|
-
// if (!value || typeof value !== 'object') {
|
|
37
|
-
// return { valid: false, message: 'User must be an object' }
|
|
38
|
-
// }
|
|
39
|
-
//
|
|
40
|
-
// if (!value.name || value.name.trim() === '') {
|
|
41
|
-
// return { valid: false, message: 'User must have a name' }
|
|
42
|
-
// }
|
|
43
|
-
//
|
|
44
|
-
// if (typeof value.age !== 'number' || value.age < 10) {
|
|
45
|
-
// return { valid: false, message: 'Возраст должен быть больше 10' }
|
|
46
|
-
// }
|
|
47
|
-
//
|
|
48
|
-
// return { valid: true }
|
|
49
|
-
// })
|
|
50
|
-
//
|
|
51
|
-
// await plugins.add(validation)
|
|
52
|
-
//
|
|
53
|
-
//
|
|
54
|
-
// // Создаем хранилище с плагинами
|
|
55
|
-
// const storage = await new MemoryStorage<{user?: User}>({
|
|
56
|
-
// name: 'demoStorage',
|
|
57
|
-
// initialState: { version: '1.0.0' },
|
|
58
|
-
// }, plugins).initialize()
|
|
59
|
-
//
|
|
60
|
-
// // Компонент для демонстрации
|
|
61
|
-
// export function Example5() {
|
|
62
|
-
// const [user, setUser] = useState<User | null>(null)
|
|
63
|
-
// const [name, setName] = useState('')
|
|
64
|
-
// const [age, setAge] = useState('')
|
|
65
|
-
// const [error, setError] = useState<string | null>(null)
|
|
66
|
-
// const [fieldErrors, setFieldErrors] = useState<{name?: string, age?: string}>({})
|
|
67
|
-
//
|
|
68
|
-
// // Функция для сохранения пользователя
|
|
69
|
-
// const saveUser = async () => {
|
|
70
|
-
// try {
|
|
71
|
-
// // Сбрасываем ошибки при каждой отправке
|
|
72
|
-
// setError(null)
|
|
73
|
-
// setFieldErrors({})
|
|
74
|
-
//
|
|
75
|
-
// const userData: User = {
|
|
76
|
-
// name,
|
|
77
|
-
// age: parseInt(age, 10) || 0, // Преобразуем в число или 0, если невалидно
|
|
78
|
-
// }
|
|
79
|
-
//
|
|
80
|
-
// await storage.set('user', userData)
|
|
81
|
-
// setUser(userData)
|
|
82
|
-
// console.log('User saved successfully')
|
|
83
|
-
// } catch (err) {
|
|
84
|
-
// // Получаем сообщение ошибки
|
|
85
|
-
// const errorMessage = err instanceof Error ? err.message : String(err)
|
|
86
|
-
//
|
|
87
|
-
// // Устанавливаем общую ошибку
|
|
88
|
-
// setError(errorMessage)
|
|
89
|
-
//
|
|
90
|
-
// // Определяем, какое поле вызвало ошибку и устанавливаем ошибку для него
|
|
91
|
-
// if (errorMessage.includes('name')) {
|
|
92
|
-
// setFieldErrors((prev) => ({ ...prev, name: 'Имя обязательно' }))
|
|
93
|
-
// }
|
|
94
|
-
//
|
|
95
|
-
// if (errorMessage.includes('возраст') || errorMessage.includes('больше 10')) {
|
|
96
|
-
// setFieldErrors((prev) => ({ ...prev, age: 'Возраст должен быть больше 10' }))
|
|
97
|
-
// }
|
|
98
|
-
//
|
|
99
|
-
// console.error('Error saving user:', errorMessage)
|
|
100
|
-
// }
|
|
101
|
-
// }
|
|
102
|
-
//
|
|
103
|
-
// return (
|
|
104
|
-
// <div style={{ fontFamily: 'Arial', padding: '20px' }}>
|
|
105
|
-
// <h2>Пример с валидацией</h2>
|
|
106
|
-
//
|
|
107
|
-
// {/* Если есть общая ошибка, показываем её */}
|
|
108
|
-
// {error && (
|
|
109
|
-
// <div style={{
|
|
110
|
-
// padding: '10px',
|
|
111
|
-
// backgroundColor: '#ffebee',
|
|
112
|
-
// color: '#d32f2f',
|
|
113
|
-
// borderRadius: '4px',
|
|
114
|
-
// marginBottom: '15px',
|
|
115
|
-
// }}
|
|
116
|
-
// >
|
|
117
|
-
// {error}
|
|
118
|
-
// </div>
|
|
119
|
-
// )}
|
|
120
|
-
//
|
|
121
|
-
// <div style={{ marginBottom: '20px' }}>
|
|
122
|
-
// <div style={{ marginBottom: '10px' }}>
|
|
123
|
-
// <label style={{ display: 'block', marginBottom: '5px' }}>Имя:</label>
|
|
124
|
-
// <input
|
|
125
|
-
// type="text"
|
|
126
|
-
// value={name}
|
|
127
|
-
// onChange={(e) => setName(e.target.value)}
|
|
128
|
-
// style={{
|
|
129
|
-
// padding: '8px',
|
|
130
|
-
// width: '250px',
|
|
131
|
-
// border: fieldErrors.name ? '1px solid #d32f2f' : '1px solid #ccc',
|
|
132
|
-
// }}
|
|
133
|
-
// />
|
|
134
|
-
// {fieldErrors.name && (
|
|
135
|
-
// <div style={{ color: '#d32f2f', fontSize: '14px', marginTop: '5px' }}>
|
|
136
|
-
// {fieldErrors.name}
|
|
137
|
-
// </div>
|
|
138
|
-
// )}
|
|
139
|
-
// </div>
|
|
140
|
-
//
|
|
141
|
-
// <div style={{ marginBottom: '15px' }}>
|
|
142
|
-
// <label style={{ display: 'block', marginBottom: '5px' }}>Возраст:</label>
|
|
143
|
-
// <input
|
|
144
|
-
// type="number"
|
|
145
|
-
// value={age}
|
|
146
|
-
// onChange={(e) => setAge(e.target.value)}
|
|
147
|
-
// style={{
|
|
148
|
-
// padding: '8px',
|
|
149
|
-
// width: '250px',
|
|
150
|
-
// border: fieldErrors.age ? '1px solid #d32f2f' : '1px solid #ccc',
|
|
151
|
-
// }}
|
|
152
|
-
// />
|
|
153
|
-
// {fieldErrors.age && (
|
|
154
|
-
// <div style={{ color: '#d32f2f', fontSize: '14px', marginTop: '5px' }}>
|
|
155
|
-
// {fieldErrors.age}
|
|
156
|
-
// </div>
|
|
157
|
-
// )}
|
|
158
|
-
// </div>
|
|
159
|
-
//
|
|
160
|
-
// <button
|
|
161
|
-
// onClick={saveUser}
|
|
162
|
-
// style={{
|
|
163
|
-
// padding: '10px 15px',
|
|
164
|
-
// backgroundColor: '#4CAF50',
|
|
165
|
-
// color: 'white',
|
|
166
|
-
// border: 'none',
|
|
167
|
-
// borderRadius: '4px',
|
|
168
|
-
// cursor: 'pointer',
|
|
169
|
-
// }}
|
|
170
|
-
// >
|
|
171
|
-
// Сохранить
|
|
172
|
-
// </button>
|
|
173
|
-
// </div>
|
|
174
|
-
//
|
|
175
|
-
// <div style={{ border: '1px solid #ddd', padding: '15px', borderRadius: '4px' }}>
|
|
176
|
-
// <h3>Текущие данные:</h3>
|
|
177
|
-
// <pre style={{ backgroundColor: '#f5f5f5', padding: '10px', borderRadius: '4px' }}>
|
|
178
|
-
// {user ? JSON.stringify(user, null, 2) : 'Нет данных'}
|
|
179
|
-
// </pre>
|
|
180
|
-
// </div>
|
|
181
|
-
// </div>
|
|
182
|
-
// )
|
|
183
|
-
// }
|
|
184
|
-
//# sourceMappingURL=example5.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"example5.js","sourceRoot":"","sources":["../../src/_examples/example5.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
//# sourceMappingURL=example6.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"example6.d.ts","sourceRoot":"","sources":["../../src/_examples/example6.tsx"],"names":[],"mappings":""}
|
|
@@ -1,168 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
// import React, { useEffect, useState } from 'react'
|
|
3
|
-
// import { IndexedDBStorage, LocalStorage, MemoryStorage, SelectorModule } from 'synapse'
|
|
4
|
-
//
|
|
5
|
-
// interface Counter {
|
|
6
|
-
// value: number;
|
|
7
|
-
// lastUpdated?: Date;
|
|
8
|
-
// }
|
|
9
|
-
//
|
|
10
|
-
// // Создаем хранилища
|
|
11
|
-
// const counter1 = await new MemoryStorage<Counter>({
|
|
12
|
-
// name: 'counter1',
|
|
13
|
-
// initialState: { value: 1 },
|
|
14
|
-
// }).initialize()
|
|
15
|
-
//
|
|
16
|
-
// const counter2 = await new IndexedDBStorage<Counter>({
|
|
17
|
-
// name: 'counter2',
|
|
18
|
-
// options: {
|
|
19
|
-
// dbVersion: 2,
|
|
20
|
-
// storeName: 'counter23',
|
|
21
|
-
// dbName: 'counter23',
|
|
22
|
-
// },
|
|
23
|
-
// initialState: { value: 2 },
|
|
24
|
-
// }).initialize()
|
|
25
|
-
//
|
|
26
|
-
// const counter3 = await new LocalStorage<Counter>({
|
|
27
|
-
// name: 'counter3',
|
|
28
|
-
// initialState: { value: 3 },
|
|
29
|
-
// }).initialize()
|
|
30
|
-
//
|
|
31
|
-
// const counter1Selector = new SelectorModule<Counter>(counter1, console)
|
|
32
|
-
// const counter2Selector = new SelectorModule(counter2)
|
|
33
|
-
// const counter3Selector = new SelectorModule(counter3)
|
|
34
|
-
//
|
|
35
|
-
// const counter1ValueSelector = counter1Selector.createSelector((s) => s.value)
|
|
36
|
-
// const counter2ValueSelector = counter2Selector.createSelector((s) => s.value)
|
|
37
|
-
// const counter3ValueSelector = counter3Selector.createSelector((s) => s.value)
|
|
38
|
-
//
|
|
39
|
-
// const sum = counter3Selector.createSelector(
|
|
40
|
-
// [counter1ValueSelector, counter2ValueSelector, counter3ValueSelector],
|
|
41
|
-
// (a, b, c) => a + b + c,
|
|
42
|
-
// )
|
|
43
|
-
//
|
|
44
|
-
// sum.subscribe({
|
|
45
|
-
// notify: (value) => {
|
|
46
|
-
// console.log('sum-notify', value)
|
|
47
|
-
// },
|
|
48
|
-
// })
|
|
49
|
-
//
|
|
50
|
-
// counter1ValueSelector.subscribe({
|
|
51
|
-
// notify: (value) => {
|
|
52
|
-
// console.log('counter1ValueUnsubscribe', value)
|
|
53
|
-
// },
|
|
54
|
-
// })
|
|
55
|
-
//
|
|
56
|
-
// counter2ValueSelector.subscribe({
|
|
57
|
-
// notify: async (value) => {
|
|
58
|
-
// console.log('counter2ValueUnsubscribe', value)
|
|
59
|
-
// },
|
|
60
|
-
// })
|
|
61
|
-
//
|
|
62
|
-
// // Компонент для демонстрации работы middleware
|
|
63
|
-
//
|
|
64
|
-
// export const Example6 = React.memo(() => {
|
|
65
|
-
// const [counter1Value, setCounter1Value] = useState(0)
|
|
66
|
-
// const [counter2Value, setCounter2Value] = useState(0)
|
|
67
|
-
// const [counter3Value, setCounter3Value] = useState(0)
|
|
68
|
-
//
|
|
69
|
-
// useEffect(() => {
|
|
70
|
-
// sum.select().then((r) => {
|
|
71
|
-
// console.log('result', r)
|
|
72
|
-
// })
|
|
73
|
-
// const a = sum.select().then((r) => r)
|
|
74
|
-
// console.log('a', a)
|
|
75
|
-
// }, [])
|
|
76
|
-
//
|
|
77
|
-
// useEffect(() => {
|
|
78
|
-
// // Подписываемся на изменения counter1
|
|
79
|
-
// const unsubscribe1 = counter1.subscribe((s) => s.value, setCounter1Value)
|
|
80
|
-
// return () => {
|
|
81
|
-
// unsubscribe1()
|
|
82
|
-
// }
|
|
83
|
-
// }, [])
|
|
84
|
-
//
|
|
85
|
-
// useEffect(() => {
|
|
86
|
-
// // Подписываемся на изменения counter1
|
|
87
|
-
// const unsubscribe2 = counter2.subscribe((s) => s.value, setCounter2Value)
|
|
88
|
-
// return () => {
|
|
89
|
-
// unsubscribe2()
|
|
90
|
-
// }
|
|
91
|
-
// }, [])
|
|
92
|
-
// useEffect(() => {
|
|
93
|
-
// // Подписываемся на изменения counter1
|
|
94
|
-
// const unsubscribe3 = counter3.subscribe((s) => s.value, setCounter3Value)
|
|
95
|
-
// return () => {
|
|
96
|
-
// unsubscribe3()
|
|
97
|
-
// }
|
|
98
|
-
// }, [])
|
|
99
|
-
//
|
|
100
|
-
// // Функции для обновления счетчиков
|
|
101
|
-
// const updateCounter1 = async () => {
|
|
102
|
-
// await counter1.update((state) => {
|
|
103
|
-
// state.value++
|
|
104
|
-
// })
|
|
105
|
-
// }
|
|
106
|
-
//
|
|
107
|
-
// const updateCounter2 = async () => {
|
|
108
|
-
// await counter2.update((state) => {
|
|
109
|
-
// state.value++
|
|
110
|
-
// })
|
|
111
|
-
// }
|
|
112
|
-
//
|
|
113
|
-
// const updateCounter3 = async () => {
|
|
114
|
-
// await counter3.set('value', counter3Value + 1)
|
|
115
|
-
// }
|
|
116
|
-
//
|
|
117
|
-
// return (
|
|
118
|
-
// <div style={{ fontFamily: 'Arial', padding: '20px' }}>
|
|
119
|
-
// <h2>Middleware Testing</h2>
|
|
120
|
-
//
|
|
121
|
-
// <div style={{ display: 'flex', gap: '20px', marginBottom: '20px' }}>
|
|
122
|
-
// <div style={{ border: '1px solid #ccc', padding: '15px', borderRadius: '5px' }}>
|
|
123
|
-
// <h3>Counter 1 (Both Middlewares)</h3>
|
|
124
|
-
// <p>
|
|
125
|
-
// Value:
|
|
126
|
-
// {counter1Value}
|
|
127
|
-
// </p>
|
|
128
|
-
// <button
|
|
129
|
-
// onClick={updateCounter1}
|
|
130
|
-
// style={{ padding: '8px 15px', backgroundColor: '#4CAF50', color: 'white', border: 'none', borderRadius: '4px' }}
|
|
131
|
-
// >
|
|
132
|
-
// Increment
|
|
133
|
-
// </button>
|
|
134
|
-
// </div>
|
|
135
|
-
//
|
|
136
|
-
// <div style={{ border: '1px solid #ccc', padding: '15px', borderRadius: '5px' }}>
|
|
137
|
-
// <h3>Counter 2 (ShallowCompare)</h3>
|
|
138
|
-
// <p>
|
|
139
|
-
// Value:
|
|
140
|
-
// {counter2Value}
|
|
141
|
-
// </p>
|
|
142
|
-
// <button
|
|
143
|
-
// onClick={updateCounter2}
|
|
144
|
-
// style={{ padding: '8px 15px', backgroundColor: '#2196F3', color: 'white', border: 'none', borderRadius: '4px' }}
|
|
145
|
-
// >
|
|
146
|
-
// Update
|
|
147
|
-
// </button>
|
|
148
|
-
// <p><small>Every 3rd click tries to set the same value</small></p>
|
|
149
|
-
// </div>
|
|
150
|
-
//
|
|
151
|
-
// <div style={{ border: '1px solid #ccc', padding: '15px', borderRadius: '5px' }}>
|
|
152
|
-
// <h3>Counter 3 (Batching)</h3>
|
|
153
|
-
// <p>
|
|
154
|
-
// Value:
|
|
155
|
-
// {counter3Value}
|
|
156
|
-
// </p>
|
|
157
|
-
// <button
|
|
158
|
-
// onClick={updateCounter3}
|
|
159
|
-
// style={{ padding: '8px 15px', backgroundColor: '#FF9800', color: 'white', border: 'none', borderRadius: '4px' }}
|
|
160
|
-
// >
|
|
161
|
-
// Batch Update
|
|
162
|
-
// </button>
|
|
163
|
-
// </div>
|
|
164
|
-
// </div>
|
|
165
|
-
// </div>
|
|
166
|
-
// )
|
|
167
|
-
// })
|
|
168
|
-
//# sourceMappingURL=example6.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"example6.js","sourceRoot":"","sources":["../../src/_examples/example6.tsx"],"names":[],"mappings":";AAAA,qDAAqD;AACrD,0FAA0F;AAC1F,EAAE;AACF,sBAAsB;AACtB,mBAAmB;AACnB,wBAAwB;AACxB,IAAI;AACJ,EAAE;AACF,uBAAuB;AACvB,sDAAsD;AACtD,sBAAsB;AACtB,gCAAgC;AAChC,kBAAkB;AAClB,EAAE;AACF,yDAAyD;AACzD,sBAAsB;AACtB,eAAe;AACf,oBAAoB;AACpB,8BAA8B;AAC9B,2BAA2B;AAC3B,OAAO;AACP,gCAAgC;AAChC,kBAAkB;AAClB,EAAE;AACF,qDAAqD;AACrD,sBAAsB;AACtB,gCAAgC;AAChC,kBAAkB;AAClB,EAAE;AACF,0EAA0E;AAC1E,wDAAwD;AACxD,wDAAwD;AACxD,EAAE;AACF,gFAAgF;AAChF,gFAAgF;AAChF,gFAAgF;AAChF,EAAE;AACF,+CAA+C;AAC/C,2EAA2E;AAC3E,4BAA4B;AAC5B,IAAI;AACJ,EAAE;AACF,kBAAkB;AAClB,yBAAyB;AACzB,uCAAuC;AACvC,OAAO;AACP,KAAK;AACL,EAAE;AACF,oCAAoC;AACpC,yBAAyB;AACzB,qDAAqD;AACrD,OAAO;AACP,KAAK;AACL,EAAE;AACF,oCAAoC;AACpC,+BAA+B;AAC/B,qDAAqD;AACrD,OAAO;AACP,KAAK;AACL,EAAE;AACF,kDAAkD;AAClD,EAAE;AACF,6CAA6C;AAC7C,0DAA0D;AAC1D,0DAA0D;AAC1D,0DAA0D;AAC1D,EAAE;AACF,sBAAsB;AACtB,iCAAiC;AACjC,iCAAiC;AACjC,SAAS;AACT,4CAA4C;AAC5C,0BAA0B;AAC1B,WAAW;AACX,EAAE;AACF,sBAAsB;AACtB,6CAA6C;AAC7C,gFAAgF;AAChF,qBAAqB;AACrB,uBAAuB;AACvB,QAAQ;AACR,WAAW;AACX,EAAE;AACF,sBAAsB;AACtB,6CAA6C;AAC7C,gFAAgF;AAChF,qBAAqB;AACrB,uBAAuB;AACvB,QAAQ;AACR,WAAW;AACX,sBAAsB;AACtB,6CAA6C;AAC7C,gFAAgF;AAChF,qBAAqB;AACrB,uBAAuB;AACvB,QAAQ;AACR,WAAW;AACX,EAAE;AACF,wCAAwC;AACxC,yCAAyC;AACzC,yCAAyC;AACzC,sBAAsB;AACtB,SAAS;AACT,MAAM;AACN,EAAE;AACF,yCAAyC;AACzC,yCAAyC;AACzC,sBAAsB;AACtB,SAAS;AACT,MAAM;AACN,EAAE;AACF,yCAAyC;AACzC,qDAAqD;AACrD,MAAM;AACN,EAAE;AACF,aAAa;AACb,6DAA6D;AAC7D,oCAAoC;AACpC,EAAE;AACF,6EAA6E;AAC7E,2FAA2F;AAC3F,kDAAkD;AAClD,gBAAgB;AAChB,qBAAqB;AACrB,8BAA8B;AAC9B,iBAAiB;AACjB,oBAAoB;AACpB,uCAAuC;AACvC,+HAA+H;AAC/H,cAAc;AACd,wBAAwB;AACxB,sBAAsB;AACtB,iBAAiB;AACjB,EAAE;AACF,2FAA2F;AAC3F,gDAAgD;AAChD,gBAAgB;AAChB,qBAAqB;AACrB,8BAA8B;AAC9B,iBAAiB;AACjB,oBAAoB;AACpB,uCAAuC;AACvC,+HAA+H;AAC/H,cAAc;AACd,qBAAqB;AACrB,sBAAsB;AACtB,8EAA8E;AAC9E,iBAAiB;AACjB,EAAE;AACF,2FAA2F;AAC3F,0CAA0C;AAC1C,gBAAgB;AAChB,qBAAqB;AACrB,8BAA8B;AAC9B,iBAAiB;AACjB,oBAAoB;AACpB,uCAAuC;AACvC,+HAA+H;AAC/H,cAAc;AACd,2BAA2B;AAC3B,sBAAsB;AACtB,iBAAiB;AACjB,eAAe;AACf,aAAa;AACb,MAAM;AACN,KAAK"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
//# sourceMappingURL=plugins.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"plugins.d.ts","sourceRoot":"","sources":["../../src/_examples/plugins.ts"],"names":[],"mappings":""}
|
|
@@ -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":";AAAA,0EAA0E;AAC1E,EAAE;AACF,MAAM;AACN,6BAA6B;AAC7B,KAAK;AACL,gDAAgD;AAChD,mFAAmF;AACnF,MAAM;AACN,yDAAyD;AACzD,qBAAqB;AACrB,EAAE;AACF,iBAAiB;AACjB,yBAAyB;AACzB,iDAAiD;AACjD,6DAA6D;AAC7D,cAAc;AACd,SAAS;AACT,EAAE;AACF,qDAAqD;AACrD,4DAA4D;AAC5D,EAAE;AACF,uCAAuC;AACvC,0DAA0D;AAC1D,wDAAwD;AACxD,4CAA4C;AAC5C,gFAAgF;AAChF,sCAAsC;AACtC,eAAe;AACf,sCAAsC;AACtC,QAAQ;AACR,MAAM;AACN,EAAE;AACF,wCAAwC;AACxC,yCAAyC;AACzC,MAAM;AACN,EAAE;AACF,qCAAqC;AACrC,mCAAmC;AACnC,MAAM;AACN,EAAE;AACF,yEAAyE;AACzE,gBAAgB;AAChB,kEAAkE;AAClE,iEAAiE;AACjE,QAAQ;AACR,mBAAmB;AACnB,MAAM;AACN,EAAE;AACF,6FAA6F;AAC7F,gBAAgB;AAChB,sDAAsD;AACtD,iEAAiE;AACjE,QAAQ;AACR,mBAAmB;AACnB,MAAM;AACN,EAAE;AACF,8FAA8F;AAC9F,0DAA0D;AAC1D,iBAAiB;AACjB,MAAM;AACN,EAAE;AACF,qHAAqH;AACrH,iCAAiC;AACjC,gEAAgE;AAChE,eAAe;AACf,kBAAkB;AAClB,uDAAuD;AACvD,mEAAmE;AACnE,UAAU;AACV,QAAQ;AACR,mBAAmB;AACnB,MAAM;AACN,EAAE;AACF,0FAA0F;AAC1F,sEAAsE;AACtE,kBAAkB;AAClB,MAAM;AACN,EAAE;AACF,sFAAsF;AACtF,2DAA2D;AAC3D,MAAM;AACN,EAAE;AACF,2DAA2D;AAC3D,2DAA2D;AAC3D,MAAM;AACN,IAAI;AACJ,EAAE;AACF,MAAM;AACN,gCAAgC;AAChC,KAAK;AACL,gEAAgE;AAChE,wEAAwE;AACxE,MAAM;AACN,4DAA4D;AAC5D,wBAAwB;AACxB,EAAE;AACF,iGAAiG;AACjG,EAAE;AACF,iBAAiB;AACjB,yBAAyB;AACzB,kCAAkC;AAClC,gFAAgF;AAChF,oCAAoC;AACpC,SAAS;AACT,EAAE;AACF,QAAQ;AACR,2DAA2D;AAC3D,OAAO;AACP,2DAA2D;AAC3D,2EAA2E;AAC3E,sDAAsD;AACtD,QAAQ;AACR,kBAAkB;AAClB,mBAAmB;AACnB,uEAAuE;AACvE,cAAc;AACd,0CAA0C;AAC1C,kBAAkB;AAClB,MAAM;AACN,EAAE;AACF,QAAQ;AACR,sDAAsD;AACtD,OAAO;AACP,qDAAqD;AACrD,kCAAkC;AAClC,QAAQ;AACR,gGAAgG;AAChG,+BAA+B;AAC/B,+DAA+D;AAC/D,oDAAoD;AACpD,qEAAqE;AACrE,sEAAsE;AACtE,UAAU;AACV,EAAE;AACF,gEAAgE;AAChE,qEAAqE;AACrE,UAAU;AACV,EAAE;AACF,iEAAiE;AACjE,gDAAgD;AAChD,6CAA6C;AAC7C,yFAAyF;AACzF,cAAc;AACd,YAAY;AACZ,UAAU;AACV,EAAE;AACF,+BAA+B;AAC/B,QAAQ;AACR,MAAM;AACN,EAAE;AACF,yEAAyE;AACzE,uEAAuE;AACvE,wCAAwC;AACxC,EAAE;AACF,6CAA6C;AAC7C,oDAAoD;AACpD,wCAAwC;AACxC,EAAE;AACF,6BAA6B;AAC7B,sFAAsF;AACtF,EAAE;AACF,gDAAgD;AAChD,qEAAqE;AACrE,YAAY;AACZ,EAAE;AACF,6CAA6C;AAC7C,0CAA0C;AAC1C,YAAY;AACZ,UAAU;AACV,QAAQ;AACR,EAAE;AACF,mBAAmB;AACnB,MAAM;AACN,IAAI"}
|
|
@@ -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"}
|