Add logic to delete metadata on migration
This commit is contained in:
@@ -160,6 +160,7 @@ export const GLOBAL_METADATA_KEYS: AppMetadataKeys[] = [
|
|||||||
* 1. app metadata key prefix
|
* 1. app metadata key prefix
|
||||||
* 2. app metadata values
|
* 2. app metadata values
|
||||||
* 3. app metadata keys
|
* 3. app metadata keys
|
||||||
|
* 4. app metadata keys deletion
|
||||||
*
|
*
|
||||||
* @example
|
* @example
|
||||||
* // changes:
|
* // changes:
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ export interface IMetadataMigration {
|
|||||||
newValue: string | ((oldValue: string) => string);
|
newValue: string | ((oldValue: string) => string);
|
||||||
}[];
|
}[];
|
||||||
keys?: { oldKey: string; newKey: string }[];
|
keys?: { oldKey: string; newKey: string }[];
|
||||||
|
deleteKeys?: string[];
|
||||||
}
|
}
|
||||||
|
|
||||||
export type Metadata<Keys extends string = string, Values = string> = {
|
export type Metadata<Keys extends string = string, Values = string> = {
|
||||||
|
|||||||
@@ -132,6 +132,32 @@ const applyMetadataKeyMigration = (meta: Metadata, migration: IMetadataMigration
|
|||||||
return migratedMetadata;
|
return migratedMetadata;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const applyMetadataDeleteKeysMigration = (
|
||||||
|
meta: Metadata,
|
||||||
|
migration: IMetadataMigration,
|
||||||
|
appKeyPrefix: string,
|
||||||
|
): Metadata => {
|
||||||
|
const migratedMetadata: Metadata = {};
|
||||||
|
|
||||||
|
if (!migration.deleteKeys) {
|
||||||
|
return migratedMetadata;
|
||||||
|
}
|
||||||
|
|
||||||
|
const appMetadata = getAppMetadataFrom(meta, undefined, appKeyPrefix);
|
||||||
|
|
||||||
|
migration.deleteKeys.forEach((keyToDelete) => {
|
||||||
|
Object.keys(appMetadata).forEach((key) => {
|
||||||
|
if (key.endsWith(keyToDelete)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
migratedMetadata[key] = appMetadata[key];
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
return migratedMetadata;
|
||||||
|
};
|
||||||
|
|
||||||
const getOutdatedMetadataKeys = (metadata?: Metadata): AppMetadataKeys[] => {
|
const getOutdatedMetadataKeys = (metadata?: Metadata): AppMetadataKeys[] => {
|
||||||
if (!metadata) {
|
if (!metadata) {
|
||||||
return [];
|
return [];
|
||||||
@@ -146,6 +172,11 @@ const getOutdatedMetadataKeys = (metadata?: Metadata): AppMetadataKeys[] => {
|
|||||||
return [...acc, oldPrefix];
|
return [...acc, oldPrefix];
|
||||||
}, [] as string[]);
|
}, [] as string[]);
|
||||||
|
|
||||||
|
const keyToDeleteInMigrations = METADATA_MIGRATIONS.reduce(
|
||||||
|
(acc, migration) => [...acc, ...(migration.deleteKeys ?? [])],
|
||||||
|
[] as string[],
|
||||||
|
);
|
||||||
|
|
||||||
return Object.keys(metadata).filter((key) => {
|
return Object.keys(metadata).filter((key) => {
|
||||||
const appKeyPrefixOfKey = key.split('_')[0];
|
const appKeyPrefixOfKey = key.split('_')[0];
|
||||||
|
|
||||||
@@ -159,7 +190,13 @@ const getOutdatedMetadataKeys = (metadata?: Metadata): AppMetadataKeys[] => {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
return !VALID_APP_METADATA_KEYS.includes(extractOriginalKey(key));
|
const extractedKey = extractOriginalKey(key);
|
||||||
|
|
||||||
|
if (keyToDeleteInMigrations.includes(extractedKey)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return !VALID_APP_METADATA_KEYS.includes(extractedKey);
|
||||||
}) as AppMetadataKeys[];
|
}) as AppMetadataKeys[];
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -297,8 +334,13 @@ export const applyMetadataMigrations = (
|
|||||||
migration,
|
migration,
|
||||||
appKeyPrefixForMigration,
|
appKeyPrefixForMigration,
|
||||||
);
|
);
|
||||||
|
const metadataKeysDeletedMigrated = applyMetadataDeleteKeysMigration(
|
||||||
|
metadataKeysMigrated,
|
||||||
|
migration,
|
||||||
|
appKeyPrefixForMigration,
|
||||||
|
);
|
||||||
|
|
||||||
migrationToMetadata.push([migrationId, metadataKeysMigrated]);
|
migrationToMetadata.push([migrationId, metadataKeysDeletedMigrated]);
|
||||||
});
|
});
|
||||||
|
|
||||||
const migratedMetadata = migrationToMetadata.pop()?.[1] ?? meta;
|
const migratedMetadata = migrationToMetadata.pop()?.[1] ?? meta;
|
||||||
|
|||||||
Reference in New Issue
Block a user