mentalHealth/01-Web/packages/utils/common/storage.ts

30 lines
887 B
TypeScript

import type { S } from 'ts-toolbelt';
/** 持久化存储键名的集合 */
export type StorageKeys<O extends Obj> = {
readonly [K in Extract<keyof O, string>]: `${string}-${S.Replace<Lowercase<K>, '_', '-'>}`;
};
/**
* 获取持久化存储键名的集合
*
* @export
* @template O extends Obj
* @param {Required<O>} object 持久化存储的键名枚举
* @param {string} app 项目识别码 `ENV.VITE_APP_KEY`
* @param {string} mode 运行模式 `ENV.VITE_MODE`
*/
export function getStorageKeys<O extends Obj>(object: Required<O>, app: string, mode: string) {
return Object.keys(object).reduce<StorageKeys<O>>(
(prev, curr) => {
const key = curr.toLocaleLowerCase().split('_').join('-');
return {
...prev,
[curr]: curr === 'TOKEN' ? `${app}-${key}` : `${app}-${mode}-${key}`,
};
},
{} as unknown as StorageKeys<O>,
);
}