@yartsun/chat-widget-types 1.0.3 → 1.0.5
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 +214 -115
- package/dist/config.types.d.ts +111 -46
- package/dist/config.types.d.ts.map +1 -1
- package/dist/config.types.js +2 -68
- package/dist/config.types.js.map +1 -1
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -1
- package/dist/migration/commands.d.ts +59 -0
- package/dist/migration/commands.d.ts.map +1 -0
- package/dist/migration/commands.js +286 -0
- package/dist/migration/commands.js.map +1 -0
- package/dist/migration/examples.d.ts +198 -0
- package/dist/migration/examples.d.ts.map +1 -0
- package/dist/migration/examples.js +439 -0
- package/dist/migration/examples.js.map +1 -0
- package/dist/migration/facade.d.ts +85 -0
- package/dist/migration/facade.d.ts.map +1 -0
- package/dist/migration/facade.js +168 -0
- package/dist/migration/facade.js.map +1 -0
- package/dist/migration/migrator.d.ts +49 -0
- package/dist/migration/migrator.d.ts.map +1 -0
- package/dist/migration/migrator.js +245 -0
- package/dist/migration/migrator.js.map +1 -0
- package/dist/migration/strategies.d.ts +85 -0
- package/dist/migration/strategies.d.ts.map +1 -0
- package/dist/migration/strategies.js +217 -0
- package/dist/migration/strategies.js.map +1 -0
- package/dist/migration/types.d.ts +196 -0
- package/dist/migration/types.d.ts.map +1 -0
- package/dist/migration/types.js +5 -0
- package/dist/migration/types.js.map +1 -0
- package/dist/utils.d.ts +1 -11
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +3 -129
- package/dist/utils.js.map +1 -1
- package/package.json +13 -4
- package/src/config.types.ts +132 -121
- package/src/index.ts +26 -0
- package/src/migration/commands.ts +314 -0
- package/src/migration/examples.ts +471 -0
- package/src/migration/facade.ts +196 -0
- package/src/migration/migrator.ts +361 -0
- package/src/migration/strategies.ts +249 -0
- package/src/migration/types.ts +182 -0
- package/src/utils.ts +3 -145
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Фасад для удобного использования системы миграции
|
|
3
|
+
*/
|
|
4
|
+
import { ConfigMigrator, DefaultMigrationLogger } from './migrator';
|
|
5
|
+
/** Простой API для миграции конфигураций */
|
|
6
|
+
export class MigrationFacade {
|
|
7
|
+
constructor(verbose = false) {
|
|
8
|
+
const logger = new DefaultMigrationLogger(verbose);
|
|
9
|
+
this.migrator = new ConfigMigrator(logger);
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Мигрировать конфигурацию V1 в V2
|
|
13
|
+
*/
|
|
14
|
+
async migrateV1toV2(config, options) {
|
|
15
|
+
return this.migrator.migrate(config, '2.0', options);
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Мигрировать конфигурацию в последнюю версию
|
|
19
|
+
*/
|
|
20
|
+
async migrateToLatest(config, options) {
|
|
21
|
+
return this.migrator.migrate(config, '2.0', options); // пока V2 - последняя
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Автоматически определить версию и мигрировать в указанную
|
|
25
|
+
*/
|
|
26
|
+
async migrate(config, targetVersion, options) {
|
|
27
|
+
return this.migrator.migrate(config, targetVersion, options);
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Предварительный просмотр миграции без её выполнения
|
|
31
|
+
*/
|
|
32
|
+
async preview(config, targetVersion, options) {
|
|
33
|
+
return this.migrator.dryRun(config, targetVersion, options);
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Быстрая проверка - можно ли мигрировать конфигурацию
|
|
37
|
+
*/
|
|
38
|
+
async canMigrate(config, targetVersion) {
|
|
39
|
+
try {
|
|
40
|
+
const report = await this.preview(config, targetVersion);
|
|
41
|
+
return report.success;
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
return false;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
/** Глобальный экземпляр фасада */
|
|
49
|
+
export const migrationFacade = new MigrationFacade();
|
|
50
|
+
/** Утилитарные функции для быстрого использования */
|
|
51
|
+
/**
|
|
52
|
+
* Быстрая миграция V1 -> V2
|
|
53
|
+
*/
|
|
54
|
+
export async function quickMigrateV1toV2(config, options) {
|
|
55
|
+
try {
|
|
56
|
+
const result = await migrationFacade.migrateV1toV2(config, options);
|
|
57
|
+
return result.success ? result.data : null;
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
return null;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Быстрая миграция в последнюю версию
|
|
65
|
+
*/
|
|
66
|
+
export async function quickMigrateToLatest(config, options) {
|
|
67
|
+
try {
|
|
68
|
+
const result = await migrationFacade.migrateToLatest(config, options);
|
|
69
|
+
return result.success ? result.data : null;
|
|
70
|
+
}
|
|
71
|
+
catch {
|
|
72
|
+
return null;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Синхронная функция миграции V1 -> V2 (без async/await)
|
|
77
|
+
* Использует только стратегии без побочных эффектов
|
|
78
|
+
*/
|
|
79
|
+
export function syncMigrateV1toV2(_config) {
|
|
80
|
+
// Синхронная миграция пока не поддерживается, используйте async версию
|
|
81
|
+
console.warn('syncMigrateV1toV2 не поддерживается, используйте quickMigrateV1toV2');
|
|
82
|
+
return null;
|
|
83
|
+
}
|
|
84
|
+
/** Набор предустановленных опций миграции */
|
|
85
|
+
export const MigrationPresets = {
|
|
86
|
+
/** Строгий режим - останавливается на любой ошибке */
|
|
87
|
+
STRICT: {
|
|
88
|
+
strict: true,
|
|
89
|
+
preserveUnknown: false,
|
|
90
|
+
verbose: false
|
|
91
|
+
},
|
|
92
|
+
/** Мягкий режим - продолжает при ошибках, сохраняет неизвестные поля */
|
|
93
|
+
SOFT: {
|
|
94
|
+
strict: false,
|
|
95
|
+
preserveUnknown: true,
|
|
96
|
+
verbose: false
|
|
97
|
+
},
|
|
98
|
+
/** Режим отладки - подробные логи */
|
|
99
|
+
DEBUG: {
|
|
100
|
+
strict: false,
|
|
101
|
+
preserveUnknown: true,
|
|
102
|
+
verbose: true
|
|
103
|
+
},
|
|
104
|
+
/** Производственный режим - без логов, строгий */
|
|
105
|
+
PRODUCTION: {
|
|
106
|
+
strict: true,
|
|
107
|
+
preserveUnknown: false,
|
|
108
|
+
verbose: false
|
|
109
|
+
}
|
|
110
|
+
};
|
|
111
|
+
/** Хелперы для работы с конфигурациями */
|
|
112
|
+
export class ConfigHelpers {
|
|
113
|
+
/**
|
|
114
|
+
* Проверить является ли конфигурация V1
|
|
115
|
+
*/
|
|
116
|
+
static isV1Config(config) {
|
|
117
|
+
return config &&
|
|
118
|
+
config.settings &&
|
|
119
|
+
config.sections &&
|
|
120
|
+
config.settings.loader === undefined && // V1 не имеет loader
|
|
121
|
+
config.sections.inside?.aprooveButton === undefined; // V1 не имеет approve кнопок
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Проверить является ли конфигурация V2
|
|
125
|
+
*/
|
|
126
|
+
static isV2Config(config) {
|
|
127
|
+
return config &&
|
|
128
|
+
config.settings &&
|
|
129
|
+
config.sections &&
|
|
130
|
+
config.settings.loader !== undefined && // V2 имеет loader
|
|
131
|
+
config.sections.inside?.aprooveButton !== undefined; // V2 имеет approve кнопки
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Безопасно получить версию конфигурации
|
|
135
|
+
*/
|
|
136
|
+
static getConfigVersion(config) {
|
|
137
|
+
if (ConfigHelpers.isV2Config(config))
|
|
138
|
+
return '2.0';
|
|
139
|
+
if (ConfigHelpers.isV1Config(config))
|
|
140
|
+
return '1.0';
|
|
141
|
+
return null;
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Создать резервную копию конфигурации
|
|
145
|
+
*/
|
|
146
|
+
static backup(config) {
|
|
147
|
+
return {
|
|
148
|
+
config: JSON.parse(JSON.stringify(config)),
|
|
149
|
+
timestamp: Date.now(),
|
|
150
|
+
version: ConfigHelpers.getConfigVersion(config)
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Валидировать основную структуру конфигурации
|
|
155
|
+
*/
|
|
156
|
+
static isValidStructure(config) {
|
|
157
|
+
return !!(config &&
|
|
158
|
+
typeof config === 'object' &&
|
|
159
|
+
config.settings &&
|
|
160
|
+
typeof config.settings === 'object' &&
|
|
161
|
+
config.sections &&
|
|
162
|
+
typeof config.sections === 'object' &&
|
|
163
|
+
config.sections.top &&
|
|
164
|
+
config.sections.inside &&
|
|
165
|
+
config.sections.bottom);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
//# sourceMappingURL=facade.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"facade.js","sourceRoot":"","sources":["../../src/migration/facade.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Основной класс мигратора конфигураций виджета чата
|
|
3
|
+
*/
|
|
4
|
+
import { MigrationResult, MigrationOptions, MigrationReport, MigrationLogger, ConfigVersion } from './types';
|
|
5
|
+
import { WidgetConfig } from '../config.types';
|
|
6
|
+
/** Дефолтный логгер для миграции */
|
|
7
|
+
export declare class DefaultMigrationLogger implements MigrationLogger {
|
|
8
|
+
private verbose;
|
|
9
|
+
constructor(verbose?: boolean);
|
|
10
|
+
info(message: string, context?: any): void;
|
|
11
|
+
warn(message: string, context?: any): void;
|
|
12
|
+
error(message: string, context?: any): void;
|
|
13
|
+
debug(message: string, context?: any): void;
|
|
14
|
+
}
|
|
15
|
+
/** Основной класс мигратора */
|
|
16
|
+
export declare class ConfigMigrator {
|
|
17
|
+
private logger;
|
|
18
|
+
private versionDetector;
|
|
19
|
+
constructor(logger?: MigrationLogger);
|
|
20
|
+
/**
|
|
21
|
+
* Выполнить миграцию конфигурации
|
|
22
|
+
*/
|
|
23
|
+
migrate<T = WidgetConfig>(config: any, targetVersion: ConfigVersion, options?: MigrationOptions): Promise<MigrationResult<T>>;
|
|
24
|
+
/**
|
|
25
|
+
* Получить отчет о возможной миграции без её выполнения
|
|
26
|
+
*/
|
|
27
|
+
dryRun(config: any, targetVersion: ConfigVersion, _options?: MigrationOptions): Promise<MigrationReport>;
|
|
28
|
+
/**
|
|
29
|
+
* Выполнить один шаг миграции
|
|
30
|
+
*/
|
|
31
|
+
private executeStep;
|
|
32
|
+
/**
|
|
33
|
+
* Построить путь миграции между версиями
|
|
34
|
+
*/
|
|
35
|
+
private buildMigrationPath;
|
|
36
|
+
/**
|
|
37
|
+
* Создать успешный результат миграции
|
|
38
|
+
*/
|
|
39
|
+
private createSuccessResult;
|
|
40
|
+
/**
|
|
41
|
+
* Создать результат с ошибкой
|
|
42
|
+
*/
|
|
43
|
+
private createErrorResult;
|
|
44
|
+
/**
|
|
45
|
+
* Создать неудачный отчет
|
|
46
|
+
*/
|
|
47
|
+
private createFailedReport;
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=migrator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrator.d.ts","sourceRoot":"","sources":["../../src/migration/migrator.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,eAAe,EAEf,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,aAAa,EACd,MAAM,SAAS,CAAA;AAChB,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAI9C,oCAAoC;AACpC,qBAAa,sBAAuB,YAAW,eAAe;IAChD,OAAO,CAAC,OAAO;gBAAP,OAAO,GAAE,OAAe;IAE5C,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,GAAG,IAAI;IAM1C,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,GAAG,IAAI;IAI1C,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,GAAG,IAAI;IAI3C,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,GAAG,IAAI;CAK5C;AAED,+BAA+B;AAC/B,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,eAAe,CAAwB;gBAEnC,MAAM,CAAC,EAAE,eAAe;IAKpC;;OAEG;IACG,OAAO,CAAC,CAAC,GAAG,YAAY,EAC5B,MAAM,EAAE,GAAG,EACX,aAAa,EAAE,aAAa,EAC5B,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IAiF9B;;OAEG;IACG,MAAM,CACV,MAAM,EAAE,GAAG,EACX,aAAa,EAAE,aAAa,EAC5B,QAAQ,GAAE,gBAAqB,GAC9B,OAAO,CAAC,eAAe,CAAC;IAmC3B;;OAEG;YACW,WAAW;IAmFzB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IA4B1B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAoB3B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAezB;;OAEG;IACH,OAAO,CAAC,kBAAkB;CAkB3B"}
|
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Основной класс мигратора конфигураций виджета чата
|
|
3
|
+
*/
|
|
4
|
+
import { getStrategiesForMigration } from './strategies';
|
|
5
|
+
import { DefaultVersionDetector, CommandFactory } from './commands';
|
|
6
|
+
/** Дефолтный логгер для миграции */
|
|
7
|
+
export class DefaultMigrationLogger {
|
|
8
|
+
constructor(verbose = false) {
|
|
9
|
+
this.verbose = verbose;
|
|
10
|
+
}
|
|
11
|
+
info(message, context) {
|
|
12
|
+
if (this.verbose) {
|
|
13
|
+
console.log(`[INFO] ${message}`, context ? JSON.stringify(context, null, 2) : '');
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
warn(message, context) {
|
|
17
|
+
console.warn(`[WARN] ${message}`, context ? JSON.stringify(context, null, 2) : '');
|
|
18
|
+
}
|
|
19
|
+
error(message, context) {
|
|
20
|
+
console.error(`[ERROR] ${message}`, context ? JSON.stringify(context, null, 2) : '');
|
|
21
|
+
}
|
|
22
|
+
debug(message, context) {
|
|
23
|
+
if (this.verbose) {
|
|
24
|
+
console.debug(`[DEBUG] ${message}`, context ? JSON.stringify(context, null, 2) : '');
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
/** Основной класс мигратора */
|
|
29
|
+
export class ConfigMigrator {
|
|
30
|
+
constructor(logger) {
|
|
31
|
+
this.logger = logger || new DefaultMigrationLogger();
|
|
32
|
+
this.versionDetector = new DefaultVersionDetector();
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Выполнить миграцию конфигурации
|
|
36
|
+
*/
|
|
37
|
+
async migrate(config, targetVersion, options = {}) {
|
|
38
|
+
const startTime = Date.now();
|
|
39
|
+
this.logger.info(`Начинаем миграцию к версии ${targetVersion}`);
|
|
40
|
+
try {
|
|
41
|
+
// Детекция текущей версии
|
|
42
|
+
const currentVersion = this.versionDetector.detect(config);
|
|
43
|
+
if (!currentVersion) {
|
|
44
|
+
return this.createErrorResult('Не удалось определить версию исходной конфигурации', startTime);
|
|
45
|
+
}
|
|
46
|
+
this.logger.info(`Определена исходная версия: ${currentVersion}`);
|
|
47
|
+
// Проверяем, нужна ли миграция
|
|
48
|
+
if (currentVersion === targetVersion) {
|
|
49
|
+
this.logger.info('Конфигурация уже соответствует целевой версии');
|
|
50
|
+
return this.createSuccessResult(config, currentVersion, targetVersion, [], startTime);
|
|
51
|
+
}
|
|
52
|
+
// Создаем план миграции
|
|
53
|
+
const migrationPath = this.buildMigrationPath(currentVersion, targetVersion);
|
|
54
|
+
if (migrationPath.length === 0) {
|
|
55
|
+
return this.createErrorResult(`Не найден путь миграции с ${currentVersion} на ${targetVersion}`, startTime);
|
|
56
|
+
}
|
|
57
|
+
this.logger.info(`План миграции: ${migrationPath.map(step => `${step.from} -> ${step.to}`).join(' -> ')}`);
|
|
58
|
+
// Выполняем миграцию по шагам
|
|
59
|
+
let currentConfig = config;
|
|
60
|
+
const appliedStrategies = [];
|
|
61
|
+
const allWarnings = [];
|
|
62
|
+
for (const step of migrationPath) {
|
|
63
|
+
const stepResult = await this.executeStep(currentConfig, step.from, step.to, options);
|
|
64
|
+
if (!stepResult.success) {
|
|
65
|
+
return this.createErrorResult(`Ошибка на шаге ${step.from} -> ${step.to}: ${stepResult.errors.join(', ')}`, startTime, stepResult.errors);
|
|
66
|
+
}
|
|
67
|
+
currentConfig = stepResult.data;
|
|
68
|
+
appliedStrategies.push(...stepResult.appliedStrategies);
|
|
69
|
+
allWarnings.push(...stepResult.warnings);
|
|
70
|
+
}
|
|
71
|
+
// Финальная валидация
|
|
72
|
+
const validateCommand = CommandFactory.createCommand('ValidateConfig');
|
|
73
|
+
if (validateCommand) {
|
|
74
|
+
const validationResult = validateCommand.execute(currentConfig, { version: targetVersion });
|
|
75
|
+
if (!validationResult.success && options.strict) {
|
|
76
|
+
return this.createErrorResult(`Валидация не прошла: ${validationResult.errors.join(', ')}`, startTime, validationResult.errors);
|
|
77
|
+
}
|
|
78
|
+
allWarnings.push(...validationResult.warnings);
|
|
79
|
+
}
|
|
80
|
+
this.logger.info('Миграция успешно завершена');
|
|
81
|
+
return this.createSuccessResult(currentConfig, currentVersion, targetVersion, appliedStrategies, startTime, allWarnings);
|
|
82
|
+
}
|
|
83
|
+
catch (error) {
|
|
84
|
+
this.logger.error('Критическая ошибка при миграции', error);
|
|
85
|
+
return this.createErrorResult(`Критическая ошибка: ${error}`, startTime);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Получить отчет о возможной миграции без её выполнения
|
|
90
|
+
*/
|
|
91
|
+
async dryRun(config, targetVersion, _options = {}) {
|
|
92
|
+
const startTime = Date.now();
|
|
93
|
+
try {
|
|
94
|
+
const currentVersion = this.versionDetector.detect(config);
|
|
95
|
+
if (!currentVersion) {
|
|
96
|
+
return this.createFailedReport(startTime, 'unknown', targetVersion, 'Не удалось определить версию');
|
|
97
|
+
}
|
|
98
|
+
const migrationPath = this.buildMigrationPath(currentVersion, targetVersion);
|
|
99
|
+
const strategies = migrationPath.flatMap(step => getStrategiesForMigration(step.from, step.to));
|
|
100
|
+
return {
|
|
101
|
+
timestamp: new Date(),
|
|
102
|
+
fromVersion: currentVersion,
|
|
103
|
+
toVersion: targetVersion,
|
|
104
|
+
success: true,
|
|
105
|
+
duration: Date.now() - startTime,
|
|
106
|
+
appliedStrategies: strategies.map(strategy => ({
|
|
107
|
+
name: strategy.name,
|
|
108
|
+
success: true,
|
|
109
|
+
errors: [],
|
|
110
|
+
warnings: []
|
|
111
|
+
})),
|
|
112
|
+
totalErrors: 0,
|
|
113
|
+
totalWarnings: 0,
|
|
114
|
+
summary: `Будет применено ${strategies.length} стратегий для миграции с ${currentVersion} на ${targetVersion}`
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
catch (error) {
|
|
118
|
+
return this.createFailedReport(startTime, 'unknown', targetVersion, `Ошибка: ${error}`);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Выполнить один шаг миграции
|
|
123
|
+
*/
|
|
124
|
+
async executeStep(config, fromVersion, toVersion, options) {
|
|
125
|
+
const startTime = Date.now();
|
|
126
|
+
this.logger.info(`Выполняем шаг: ${fromVersion} -> ${toVersion}`);
|
|
127
|
+
// Получаем стратегии для этого шага
|
|
128
|
+
let strategies = getStrategiesForMigration(fromVersion, toVersion);
|
|
129
|
+
// Фильтруем стратегии согласно опциям
|
|
130
|
+
if (options.onlyStrategies?.length) {
|
|
131
|
+
strategies = strategies.filter(s => options.onlyStrategies.includes(s.name));
|
|
132
|
+
}
|
|
133
|
+
if (options.excludeStrategies?.length) {
|
|
134
|
+
strategies = strategies.filter(s => !options.excludeStrategies.includes(s.name));
|
|
135
|
+
}
|
|
136
|
+
if (strategies.length === 0) {
|
|
137
|
+
return this.createErrorResult(`Не найдено стратегий для миграции ${fromVersion} -> ${toVersion}`, startTime);
|
|
138
|
+
}
|
|
139
|
+
const context = {
|
|
140
|
+
fromVersion,
|
|
141
|
+
toVersion,
|
|
142
|
+
config,
|
|
143
|
+
options
|
|
144
|
+
};
|
|
145
|
+
let currentConfig = { ...config };
|
|
146
|
+
const appliedStrategies = [];
|
|
147
|
+
const allErrors = [];
|
|
148
|
+
const allWarnings = [];
|
|
149
|
+
// Применяем каждую стратегию
|
|
150
|
+
for (const strategy of strategies) {
|
|
151
|
+
this.logger.debug(`Применяем стратегию: ${strategy.name}`);
|
|
152
|
+
if (!strategy.canApply({ ...context, config: currentConfig })) {
|
|
153
|
+
this.logger.debug(`Стратегия ${strategy.name} не применима, пропускаем`);
|
|
154
|
+
continue;
|
|
155
|
+
}
|
|
156
|
+
const result = strategy.apply({ ...context, config: currentConfig });
|
|
157
|
+
if (!result.success) {
|
|
158
|
+
this.logger.error(`Стратегия ${strategy.name} завершилась с ошибкой`, result.errors);
|
|
159
|
+
allErrors.push(...result.errors);
|
|
160
|
+
if (options.strict) {
|
|
161
|
+
return this.createErrorResult(`Стратегия ${strategy.name} завершилась с ошибкой: ${result.errors.join(', ')}`, startTime, allErrors);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
else {
|
|
165
|
+
if (result.modified && result.data) {
|
|
166
|
+
currentConfig = result.data;
|
|
167
|
+
}
|
|
168
|
+
appliedStrategies.push(strategy.name);
|
|
169
|
+
allWarnings.push(...result.warnings);
|
|
170
|
+
this.logger.debug(`Стратегия ${strategy.name} успешно применена`);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
return this.createSuccessResult(currentConfig, fromVersion, toVersion, appliedStrategies, startTime, allWarnings, allErrors);
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Построить путь миграции между версиями
|
|
177
|
+
*/
|
|
178
|
+
buildMigrationPath(from, to) {
|
|
179
|
+
// Простая логика для последовательной миграции
|
|
180
|
+
// В будущем можно расширить для более сложных сценариев
|
|
181
|
+
const versions = ['1.0', '2.0', '3.0'];
|
|
182
|
+
const fromIndex = versions.indexOf(from);
|
|
183
|
+
const toIndex = versions.indexOf(to);
|
|
184
|
+
if (fromIndex === -1 || toIndex === -1) {
|
|
185
|
+
return [];
|
|
186
|
+
}
|
|
187
|
+
const path = [];
|
|
188
|
+
if (fromIndex < toIndex) {
|
|
189
|
+
// Прямая миграция (вперед)
|
|
190
|
+
for (let i = fromIndex; i < toIndex; i++) {
|
|
191
|
+
path.push({ from: versions[i], to: versions[i + 1] });
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
else if (fromIndex > toIndex) {
|
|
195
|
+
// Обратная миграция (назад) - пока не поддерживается
|
|
196
|
+
// В будущем можно добавить стратегии downgrade
|
|
197
|
+
return [];
|
|
198
|
+
}
|
|
199
|
+
return path;
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Создать успешный результат миграции
|
|
203
|
+
*/
|
|
204
|
+
createSuccessResult(data, fromVersion, toVersion, appliedStrategies, _startTime, warnings = [], errors = []) {
|
|
205
|
+
return {
|
|
206
|
+
success: true,
|
|
207
|
+
data,
|
|
208
|
+
errors,
|
|
209
|
+
warnings,
|
|
210
|
+
fromVersion,
|
|
211
|
+
toVersion,
|
|
212
|
+
appliedStrategies
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Создать результат с ошибкой
|
|
217
|
+
*/
|
|
218
|
+
createErrorResult(message, _startTime, errors = []) {
|
|
219
|
+
return {
|
|
220
|
+
success: false,
|
|
221
|
+
errors: [message, ...errors],
|
|
222
|
+
warnings: [],
|
|
223
|
+
fromVersion: 'unknown',
|
|
224
|
+
toVersion: 'unknown',
|
|
225
|
+
appliedStrategies: []
|
|
226
|
+
};
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* Создать неудачный отчет
|
|
230
|
+
*/
|
|
231
|
+
createFailedReport(_startTime, fromVersion, toVersion, message) {
|
|
232
|
+
return {
|
|
233
|
+
timestamp: new Date(),
|
|
234
|
+
fromVersion: fromVersion,
|
|
235
|
+
toVersion,
|
|
236
|
+
success: false,
|
|
237
|
+
duration: Date.now() - _startTime,
|
|
238
|
+
appliedStrategies: [],
|
|
239
|
+
totalErrors: 1,
|
|
240
|
+
totalWarnings: 0,
|
|
241
|
+
summary: message
|
|
242
|
+
};
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
//# sourceMappingURL=migrator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrator.js","sourceRoot":"","sources":["../../src/migration/migrator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Стратегии миграции конфигураций виджета чата
|
|
3
|
+
*/
|
|
4
|
+
import { MigrationStrategy, MigrationContext, MigrationStepResult } from './types';
|
|
5
|
+
/** Базовый класс для стратегий миграции */
|
|
6
|
+
export declare abstract class BaseMigrationStrategy implements MigrationStrategy {
|
|
7
|
+
abstract name: string;
|
|
8
|
+
abstract description: string;
|
|
9
|
+
abstract appliesTo: {
|
|
10
|
+
from: any;
|
|
11
|
+
to: any;
|
|
12
|
+
};
|
|
13
|
+
canApply(context: MigrationContext): boolean;
|
|
14
|
+
abstract apply(context: MigrationContext): MigrationStepResult;
|
|
15
|
+
rollback?(_context: MigrationContext): MigrationStepResult;
|
|
16
|
+
protected createSuccessResult(data: any, warnings?: string[]): MigrationStepResult;
|
|
17
|
+
protected createErrorResult(errors: string[], data?: any): MigrationStepResult;
|
|
18
|
+
}
|
|
19
|
+
/** Стратегия добавления новых полей в settings для V1->V2 */
|
|
20
|
+
export declare class AddSettingsFieldsV1toV2Strategy extends BaseMigrationStrategy {
|
|
21
|
+
name: string;
|
|
22
|
+
description: string;
|
|
23
|
+
appliesTo: {
|
|
24
|
+
from: "1.0";
|
|
25
|
+
to: "2.0";
|
|
26
|
+
};
|
|
27
|
+
apply(context: MigrationContext): MigrationStepResult;
|
|
28
|
+
}
|
|
29
|
+
/** Стратегия добавления chipStyle в top.params для V1->V2 */
|
|
30
|
+
export declare class AddChipStyleV1toV2Strategy extends BaseMigrationStrategy {
|
|
31
|
+
name: string;
|
|
32
|
+
description: string;
|
|
33
|
+
appliesTo: {
|
|
34
|
+
from: "1.0";
|
|
35
|
+
to: "2.0";
|
|
36
|
+
};
|
|
37
|
+
apply(context: MigrationContext): MigrationStepResult;
|
|
38
|
+
}
|
|
39
|
+
/** Стратегия добавления bgType для сообщений в V1->V2 */
|
|
40
|
+
export declare class AddMessageBgTypeV1toV2Strategy extends BaseMigrationStrategy {
|
|
41
|
+
name: string;
|
|
42
|
+
description: string;
|
|
43
|
+
appliesTo: {
|
|
44
|
+
from: "1.0";
|
|
45
|
+
to: "2.0";
|
|
46
|
+
};
|
|
47
|
+
apply(context: MigrationContext): MigrationStepResult;
|
|
48
|
+
}
|
|
49
|
+
/** Стратегия добавления новых кнопок approve/reject в V1->V2 */
|
|
50
|
+
export declare class AddActionButtonsV1toV2Strategy extends BaseMigrationStrategy {
|
|
51
|
+
name: string;
|
|
52
|
+
description: string;
|
|
53
|
+
appliesTo: {
|
|
54
|
+
from: "1.0";
|
|
55
|
+
to: "2.0";
|
|
56
|
+
};
|
|
57
|
+
apply(context: MigrationContext): MigrationStepResult;
|
|
58
|
+
}
|
|
59
|
+
/** Стратегия расширения inputSend для V1->V2 */
|
|
60
|
+
export declare class EnhanceInputSendV1toV2Strategy extends BaseMigrationStrategy {
|
|
61
|
+
name: string;
|
|
62
|
+
description: string;
|
|
63
|
+
appliesTo: {
|
|
64
|
+
from: "1.0";
|
|
65
|
+
to: "2.0";
|
|
66
|
+
};
|
|
67
|
+
apply(context: MigrationContext): MigrationStepResult;
|
|
68
|
+
}
|
|
69
|
+
/** Стратегия добавления warningAlert и disclaimer в V1->V2 */
|
|
70
|
+
export declare class AddBottomElementsV1toV2Strategy extends BaseMigrationStrategy {
|
|
71
|
+
name: string;
|
|
72
|
+
description: string;
|
|
73
|
+
appliesTo: {
|
|
74
|
+
from: "1.0";
|
|
75
|
+
to: "2.0";
|
|
76
|
+
};
|
|
77
|
+
apply(context: MigrationContext): MigrationStepResult;
|
|
78
|
+
}
|
|
79
|
+
/** Реестр всех стратегий миграции V1->V2 */
|
|
80
|
+
export declare const V1_TO_V2_STRATEGIES: MigrationStrategy[];
|
|
81
|
+
/** Получить все стратегии для конкретного перехода версий */
|
|
82
|
+
export declare function getStrategiesForMigration(from: string, to: string): MigrationStrategy[];
|
|
83
|
+
/** Получить все доступные стратегии */
|
|
84
|
+
export declare function getAllStrategies(): MigrationStrategy[];
|
|
85
|
+
//# sourceMappingURL=strategies.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"strategies.d.ts","sourceRoot":"","sources":["../../src/migration/strategies.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,mBAAmB,EAEpB,MAAM,SAAS,CAAA;AAEhB,2CAA2C;AAC3C,8BAAsB,qBAAsB,YAAW,iBAAiB;IACtE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,SAAS,EAAE;QAAE,IAAI,EAAE,GAAG,CAAC;QAAC,EAAE,EAAE,GAAG,CAAA;KAAE,CAAA;IAE1C,QAAQ,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO;IAK5C,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,gBAAgB,GAAG,mBAAmB;IAE9D,QAAQ,CAAC,CAAC,QAAQ,EAAE,gBAAgB,GAAG,mBAAmB;IAS1D,SAAS,CAAC,mBAAmB,CAAC,IAAI,EAAE,GAAG,EAAE,QAAQ,GAAE,MAAM,EAAO,GAAG,mBAAmB;IAUtF,SAAS,CAAC,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,mBAAmB;CAS/E;AAED,6DAA6D;AAC7D,qBAAa,+BAAgC,SAAQ,qBAAqB;IACxE,IAAI,SAA4B;IAChC,WAAW,SAAoE;IAC/E,SAAS;;;MAA+C;IAExD,KAAK,CAAC,OAAO,EAAE,gBAAgB,GAAG,mBAAmB;CAqBtD;AAED,6DAA6D;AAC7D,qBAAa,0BAA2B,SAAQ,qBAAqB;IACnE,IAAI,SAAuB;IAC3B,WAAW,SAAmD;IAC9D,SAAS;;;MAA+C;IAExD,KAAK,CAAC,OAAO,EAAE,gBAAgB,GAAG,mBAAmB;CAkBtD;AAED,yDAAyD;AACzD,qBAAa,8BAA+B,SAAQ,qBAAqB;IACvE,IAAI,SAA2B;IAC/B,WAAW,SAAqD;IAChE,SAAS;;;MAA+C;IAExD,KAAK,CAAC,OAAO,EAAE,gBAAgB,GAAG,mBAAmB;CAuBtD;AAED,gEAAgE;AAChE,qBAAa,8BAA+B,SAAQ,qBAAqB;IACvE,IAAI,SAA2B;IAC/B,WAAW,SAAkE;IAC7E,SAAS;;;MAA+C;IAExD,KAAK,CAAC,OAAO,EAAE,gBAAgB,GAAG,mBAAmB;CAiBtD;AAED,gDAAgD;AAChD,qBAAa,8BAA+B,SAAQ,qBAAqB;IACvE,IAAI,SAA2B;IAC/B,WAAW,SAA0D;IACrE,SAAS;;;MAA+C;IAExD,KAAK,CAAC,OAAO,EAAE,gBAAgB,GAAG,mBAAmB;CAoBtD;AAED,8DAA8D;AAC9D,qBAAa,+BAAgC,SAAQ,qBAAqB;IACxE,IAAI,SAA4B;IAChC,WAAW,SAAwD;IACnE,SAAS;;;MAA+C;IAExD,KAAK,CAAC,OAAO,EAAE,gBAAgB,GAAG,mBAAmB;CAkBtD;AAED,4CAA4C;AAC5C,eAAO,MAAM,mBAAmB,EAAE,iBAAiB,EAOlD,CAAA;AAED,6DAA6D;AAC7D,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,iBAAiB,EAAE,CASvF;AAED,uCAAuC;AACvC,wBAAgB,gBAAgB,IAAI,iBAAiB,EAAE,CAKtD"}
|