Files
NapCatQQ/.pnpm-store/v3/files/50/45f1ad4a994fba54a75e5e230e471167d3bfc5fe3cfbdb82759da63d25479a2e78a5ced728fb8a7607c7b0b3f796d3f9b60501bbc35996eb372187228d6517
TanTan e311ca3275
Build NapCat Artifacts / Windows Loader Test (push) Canceled after 0s
Build NapCat Artifacts / Type Check & Test (push) Canceled after 0s
Build NapCat Artifacts / Build NapCat.Framework (push) Canceled after 0s
Build NapCat Artifacts / Build NapCat.Shell (push) Canceled after 0s
docs: 仓库链接指向本镜像仓库
2026-11-13 09:25:58 +08:00

57 lines
1.7 KiB
Plaintext

// ------------------------------------------------------------------
// ValueGuard
// ------------------------------------------------------------------
import { IsArray, IsDate, IsMap, IsSet, IsObject, IsTypedArray, IsValueType } from '../guard/index.mjs';
// ------------------------------------------------------------------
// Clonable
// ------------------------------------------------------------------
function FromObject(value) {
const Acc = {};
for (const key of Object.getOwnPropertyNames(value)) {
Acc[key] = Clone(value[key]);
}
for (const key of Object.getOwnPropertySymbols(value)) {
Acc[key] = Clone(value[key]);
}
return Acc;
}
function FromArray(value) {
return value.map((element) => Clone(element));
}
function FromTypedArray(value) {
return value.slice();
}
function FromMap(value) {
return new Map(Clone([...value.entries()]));
}
function FromSet(value) {
return new Set(Clone([...value.entries()]));
}
function FromDate(value) {
return new Date(value.toISOString());
}
function FromValue(value) {
return value;
}
// ------------------------------------------------------------------
// Clone
// ------------------------------------------------------------------
/** Returns a clone of the given value */
export function Clone(value) {
if (IsArray(value))
return FromArray(value);
if (IsDate(value))
return FromDate(value);
if (IsTypedArray(value))
return FromTypedArray(value);
if (IsMap(value))
return FromMap(value);
if (IsSet(value))
return FromSet(value);
if (IsObject(value))
return FromObject(value);
if (IsValueType(value))
return FromValue(value);
throw new Error('ValueClone: Unable to clone value');
}