fexios
Version:
Fetch based HTTP client with similar API to axios for browser and Node.js
79 lines (76 loc) • 2.41 kB
JavaScript
function clone(value) {
if (typeof globalThis.structuredClone === "function") {
try {
return globalThis.structuredClone(value);
} catch {
}
}
return _structuredClone(value, /* @__PURE__ */ new WeakMap());
}
function _structuredClone(value, seen) {
if (typeof value !== "object" || value === null) return value;
const cached = seen.get(value);
if (cached) return cached;
if (value instanceof Date) return new Date(value.getTime());
if (value instanceof RegExp)
return new RegExp(value.source, value.flags);
if (value instanceof URL) return new URL(value.toString());
if (value instanceof URLSearchParams)
return new URLSearchParams(value.toString());
if (value instanceof ArrayBuffer) return value.slice(0);
if (ArrayBuffer.isView(value)) {
if (value instanceof DataView) {
return new DataView(
value.buffer.slice(0),
value.byteOffset,
value.byteLength
);
}
const ta = value;
const Ctor = ta.constructor;
return new Ctor(ta.buffer.slice(0), ta.byteOffset, ta.length);
}
if (value instanceof Map) {
const out2 = /* @__PURE__ */ new Map();
seen.set(value, out2);
value.forEach((v, k) => {
out2.set(_structuredClone(k, seen), _structuredClone(v, seen));
});
return out2;
}
if (value instanceof Set) {
const out2 = /* @__PURE__ */ new Set();
seen.set(value, out2);
value.forEach((v) => out2.add(_structuredClone(v, seen)));
return out2;
}
if (Array.isArray(value)) {
const arr = new Array(value.length);
seen.set(value, arr);
for (let i = 0; i < arr.length; i++) {
arr[i] = _structuredClone(value[i], seen);
}
return arr;
}
const proto = Object.getPrototypeOf(value);
const out = Object.create(proto);
seen.set(value, out);
const descriptors = Object.getOwnPropertyDescriptors(value);
for (const key of Reflect.ownKeys(descriptors)) {
const d = descriptors[key];
if ("value" in d) {
d.value = _structuredClone(d.value, seen);
}
Object.defineProperty(out, key, d);
}
return out;
}
function isPlainObject(payload) {
if (typeof payload !== "object" || payload === null) {
return false;
}
const proto = Object.getPrototypeOf(payload);
return proto === Object.prototype || proto === null;
}
export { clone as c, isPlainObject as i };
//# sourceMappingURL=fexios.DtQgiOCE.mjs.map