@yartsun/chat-widget-types 1.0.3 → 1.0.6

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 (52) hide show
  1. package/README.md +214 -115
  2. package/dist/config.types.d.ts +111 -46
  3. package/dist/config.types.d.ts.map +1 -1
  4. package/dist/config.types.js +2 -66
  5. package/dist/config.types.js.map +1 -1
  6. package/dist/default-config.d.ts +3 -0
  7. package/dist/default-config.d.ts.map +1 -0
  8. package/dist/default-config.js +3 -0
  9. package/dist/default-config.js.map +1 -0
  10. package/dist/index.d.ts +6 -0
  11. package/dist/index.d.ts.map +1 -1
  12. package/dist/index.js +5 -0
  13. package/dist/index.js.map +1 -1
  14. package/dist/migration/commands.d.ts +59 -0
  15. package/dist/migration/commands.d.ts.map +1 -0
  16. package/dist/migration/commands.js +286 -0
  17. package/dist/migration/commands.js.map +1 -0
  18. package/dist/migration/examples.d.ts +198 -0
  19. package/dist/migration/examples.d.ts.map +1 -0
  20. package/dist/migration/examples.js +439 -0
  21. package/dist/migration/examples.js.map +1 -0
  22. package/dist/migration/facade.d.ts +85 -0
  23. package/dist/migration/facade.d.ts.map +1 -0
  24. package/dist/migration/facade.js +168 -0
  25. package/dist/migration/facade.js.map +1 -0
  26. package/dist/migration/migrator.d.ts +49 -0
  27. package/dist/migration/migrator.d.ts.map +1 -0
  28. package/dist/migration/migrator.js +245 -0
  29. package/dist/migration/migrator.js.map +1 -0
  30. package/dist/migration/strategies.d.ts +85 -0
  31. package/dist/migration/strategies.d.ts.map +1 -0
  32. package/dist/migration/strategies.js +217 -0
  33. package/dist/migration/strategies.js.map +1 -0
  34. package/dist/migration/types.d.ts +196 -0
  35. package/dist/migration/types.d.ts.map +1 -0
  36. package/dist/migration/types.js +5 -0
  37. package/dist/migration/types.js.map +1 -0
  38. package/dist/utils.d.ts +1 -11
  39. package/dist/utils.d.ts.map +1 -1
  40. package/dist/utils.js +3 -129
  41. package/dist/utils.js.map +1 -1
  42. package/package.json +13 -4
  43. package/src/config.types.ts +131 -121
  44. package/src/default-config.ts +6 -0
  45. package/src/index.ts +26 -0
  46. package/src/migration/commands.ts +314 -0
  47. package/src/migration/examples.ts +471 -0
  48. package/src/migration/facade.ts +196 -0
  49. package/src/migration/migrator.ts +361 -0
  50. package/src/migration/strategies.ts +249 -0
  51. package/src/migration/types.ts +182 -0
  52. package/src/utils.ts +3 -145
@@ -0,0 +1,85 @@
1
+ /**
2
+ * Фасад для удобного использования системы миграции
3
+ */
4
+ import { ConfigVersion, MigrationResult, MigrationOptions, MigrationReport, ConfigV1, ConfigV2 } from './types';
5
+ import { WidgetConfig } from '../config.types';
6
+ /** Простой API для миграции конфигураций */
7
+ export declare class MigrationFacade {
8
+ private migrator;
9
+ constructor(verbose?: boolean);
10
+ /**
11
+ * Мигрировать конфигурацию V1 в V2
12
+ */
13
+ migrateV1toV2(config: ConfigV1, options?: MigrationOptions): Promise<MigrationResult<ConfigV2>>;
14
+ /**
15
+ * Мигрировать конфигурацию в последнюю версию
16
+ */
17
+ migrateToLatest(config: any, options?: MigrationOptions): Promise<MigrationResult<WidgetConfig>>;
18
+ /**
19
+ * Автоматически определить версию и мигрировать в указанную
20
+ */
21
+ migrate(config: any, targetVersion: ConfigVersion, options?: MigrationOptions): Promise<MigrationResult>;
22
+ /**
23
+ * Предварительный просмотр миграции без её выполнения
24
+ */
25
+ preview(config: any, targetVersion: ConfigVersion, options?: MigrationOptions): Promise<MigrationReport>;
26
+ /**
27
+ * Быстрая проверка - можно ли мигрировать конфигурацию
28
+ */
29
+ canMigrate(config: any, targetVersion: ConfigVersion): Promise<boolean>;
30
+ }
31
+ /** Глобальный экземпляр фасада */
32
+ export declare const migrationFacade: MigrationFacade;
33
+ /** Утилитарные функции для быстрого использования */
34
+ /**
35
+ * Быстрая миграция V1 -> V2
36
+ */
37
+ export declare function quickMigrateV1toV2(config: ConfigV1, options?: MigrationOptions): Promise<ConfigV2 | null>;
38
+ /**
39
+ * Быстрая миграция в последнюю версию
40
+ */
41
+ export declare function quickMigrateToLatest(config: any, options?: MigrationOptions): Promise<WidgetConfig | null>;
42
+ /**
43
+ * Синхронная функция миграции V1 -> V2 (без async/await)
44
+ * Использует только стратегии без побочных эффектов
45
+ */
46
+ export declare function syncMigrateV1toV2(_config: ConfigV1): ConfigV2 | null;
47
+ /** Набор предустановленных опций миграции */
48
+ export declare const MigrationPresets: {
49
+ /** Строгий режим - останавливается на любой ошибке */
50
+ STRICT: MigrationOptions;
51
+ /** Мягкий режим - продолжает при ошибках, сохраняет неизвестные поля */
52
+ SOFT: MigrationOptions;
53
+ /** Режим отладки - подробные логи */
54
+ DEBUG: MigrationOptions;
55
+ /** Производственный режим - без логов, строгий */
56
+ PRODUCTION: MigrationOptions;
57
+ };
58
+ /** Хелперы для работы с конфигурациями */
59
+ export declare class ConfigHelpers {
60
+ /**
61
+ * Проверить является ли конфигурация V1
62
+ */
63
+ static isV1Config(config: any): config is ConfigV1;
64
+ /**
65
+ * Проверить является ли конфигурация V2
66
+ */
67
+ static isV2Config(config: any): config is ConfigV2;
68
+ /**
69
+ * Безопасно получить версию конфигурации
70
+ */
71
+ static getConfigVersion(config: any): ConfigVersion | null;
72
+ /**
73
+ * Создать резервную копию конфигурации
74
+ */
75
+ static backup(config: any): {
76
+ config: any;
77
+ timestamp: number;
78
+ version: ConfigVersion | null;
79
+ };
80
+ /**
81
+ * Валидировать основную структуру конфигурации
82
+ */
83
+ static isValidStructure(config: any): boolean;
84
+ }
85
+ //# sourceMappingURL=facade.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"facade.d.ts","sourceRoot":"","sources":["../../src/migration/facade.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,aAAa,EACb,eAAe,EACf,gBAAgB,EAChB,eAAe,EACf,QAAQ,EACR,QAAQ,EACT,MAAM,SAAS,CAAA;AAEhB,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAE9C,4CAA4C;AAC5C,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAgB;gBAEpB,OAAO,GAAE,OAAe;IAKpC;;OAEG;IACG,aAAa,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;IAIrG;;OAEG;IACG,eAAe,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;IAItG;;OAEG;IACG,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE,aAAa,EAAE,aAAa,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC;IAI9G;;OAEG;IACG,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE,aAAa,EAAE,aAAa,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC;IAI9G;;OAEG;IACG,UAAU,CAAC,MAAM,EAAE,GAAG,EAAE,aAAa,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC;CAQ9E;AAED,kCAAkC;AAClC,eAAO,MAAM,eAAe,iBAAwB,CAAA;AAEpD,qDAAqD;AAErD;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAO/G;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAOhH;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,QAAQ,GAAG,QAAQ,GAAG,IAAI,CAIpE;AAED,6CAA6C;AAC7C,eAAO,MAAM,gBAAgB;IAC3B,sDAAsD;YAKjD,gBAAgB;IAErB,wEAAwE;UAKnE,gBAAgB;IAErB,qCAAqC;WAKhC,gBAAgB;IAErB,kDAAkD;gBAK7C,gBAAgB;CACtB,CAAA;AAED,0CAA0C;AAC1C,qBAAa,aAAa;IACxB;;OAEG;IACH,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,GAAG,GAAG,MAAM,IAAI,QAAQ;IAQlD;;OAEG;IACH,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,GAAG,GAAG,MAAM,IAAI,QAAQ;IAQlD;;OAEG;IACH,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,GAAG,GAAG,aAAa,GAAG,IAAI;IAM1D;;OAEG;IACH,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,GAAG;QAAE,MAAM,EAAE,GAAG,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,aAAa,GAAG,IAAI,CAAA;KAAE;IAQ7F;;OAEG;IACH,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,GAAG,GAAG,OAAO;CAa9C"}
@@ -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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"}