Files
renovate/lib/config/migrations/base/abstract-migration.ts
renovate[bot] 645a28c77c build(deps): update dependency prettier to v3.8.1 (main) (#39779)
* build(deps): update dependency prettier to v3.8.1

| datasource | package  | from  | to    |
| ---------- | -------- | ----- | ----- |
| npm        | prettier | 3.6.2 | 3.8.1 |

* fixup prettier

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: secustor <sebastian@poxhofer.at>
2026-02-18 08:41:34 +00:00

73 lines
1.9 KiB
TypeScript

import { isNullOrUndefined, isString } from '@sindresorhus/is';
import type { AllConfig, RenovateConfig } from '../../types.ts';
import type { MigratableConfig, Migration } from '../types.ts';
export abstract class AbstractMigration<
T extends RenovateConfig = AllConfig,
> implements Migration {
readonly deprecated: boolean = false;
abstract readonly propertyName: string | RegExp;
private readonly originalConfig: MigratableConfig<T>;
private readonly migratedConfig: MigratableConfig<T>;
constructor(
originalConfig: MigratableConfig<T>,
migratedConfig: MigratableConfig<T>,
) {
this.originalConfig = originalConfig;
this.migratedConfig = migratedConfig;
}
abstract run(value: unknown, key: string): void;
protected get<Key extends keyof MigratableConfig<T>>(
key: Key,
): MigratableConfig<T>[Key] {
return this.migratedConfig[key] ?? this.originalConfig[key];
}
protected has<Key extends keyof T | string>(key: Key): boolean {
return key in this.originalConfig;
}
protected setSafely<Key extends keyof MigratableConfig<T>>(
key: Key,
value: MigratableConfig<T>[Key],
): void {
if (
isNullOrUndefined(this.originalConfig[key]) &&
isNullOrUndefined(this.migratedConfig[key])
) {
this.migratedConfig[key] = value;
}
}
protected setHard<Key extends keyof MigratableConfig<T>>(
key: Key,
value: MigratableConfig<T>[Key],
): void {
this.migratedConfig[key] = value;
}
protected rewrite(value: unknown): void {
if (!isString(this.propertyName)) {
throw new Error();
}
// TODO: fix types
this.setHard(
this.propertyName as keyof MigratableConfig<T>,
value as never,
);
}
protected delete(property = this.propertyName): void {
if (!isString(property)) {
throw new Error();
}
// TODO: fix types
delete this.migratedConfig[property as keyof MigratableConfig<T>];
}
}