30 lines
887 B
TypeScript
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>,
|
|
);
|
|
}
|