ngx-antd-form-builder
Version:
Simple Drag&Drop form builder using ng-zorro-antd
29 lines • 4.29 kB
JavaScript
export function cloneDeep(entity, cache = new WeakMap()) {
const referenceTypes = ['Array', 'Object', 'Map', 'Set', 'Date'];
const entityType = Object.prototype.toString.call(entity);
if (!new RegExp(referenceTypes.join('|')).test(entityType) ||
entity instanceof WeakMap ||
entity instanceof WeakSet)
return entity;
if (cache.has(entity)) {
return cache.get(entity);
}
const c = new entity.constructor();
if (entity instanceof Map) {
entity.forEach((value, key) => c.set(cloneDeep(key), cloneDeep(value)));
}
if (entity instanceof Set) {
entity.forEach((value) => c.add(cloneDeep(value)));
}
if (entity instanceof Date) {
return new Date(entity);
}
cache.set(entity, c);
return Object.assign(c, ...Object.keys(entity).map((prop) => {
// debugger;
return {
[prop]: cloneDeep(entity[prop], cache),
};
}));
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1hbnRkLWZvcm0tYnVpbGRlci9zcmMvbGliL3V0aWxzL2Z1bmMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxVQUFVLFNBQVMsQ0FBQyxNQUFNLEVBQUUsS0FBSyxHQUFHLElBQUksT0FBTyxFQUFFO0lBQ3JELE1BQU0sY0FBYyxHQUFHLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2pFLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMxRCxJQUNFLENBQUMsSUFBSSxNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7UUFDdEQsTUFBTSxZQUFZLE9BQU87UUFDekIsTUFBTSxZQUFZLE9BQU87UUFFekIsT0FBTyxNQUFNLENBQUM7SUFDaEIsSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7UUFDdEIsT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFDRCxNQUFNLENBQUMsR0FBRyxJQUFJLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUVuQyxJQUFJLE1BQU0sWUFBWSxHQUFHLEVBQUUsQ0FBQztRQUMxQixNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQzVCLENBQUMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUN4QyxDQUFDO0lBQ0osQ0FBQztJQUNELElBQUksTUFBTSxZQUFZLEdBQUcsRUFBRSxDQUFDO1FBQzFCLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBQ0QsSUFBSSxNQUFNLFlBQVksSUFBSSxFQUFFLENBQUM7UUFDM0IsT0FBTyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBQ0QsS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDckIsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUNsQixDQUFDLEVBQ0QsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1FBQ2xDLFlBQVk7UUFDWixPQUFPO1lBQ0wsQ0FBQyxJQUFJLENBQUMsRUFBRSxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssQ0FBQztTQUN2QyxDQUFDO0lBQ0osQ0FBQyxDQUFDLENBQ0gsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gY2xvbmVEZWVwKGVudGl0eSwgY2FjaGUgPSBuZXcgV2Vha01hcCgpKSB7XHJcbiAgY29uc3QgcmVmZXJlbmNlVHlwZXMgPSBbJ0FycmF5JywgJ09iamVjdCcsICdNYXAnLCAnU2V0JywgJ0RhdGUnXTtcclxuICBjb25zdCBlbnRpdHlUeXBlID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGVudGl0eSk7XHJcbiAgaWYgKFxyXG4gICAgIW5ldyBSZWdFeHAocmVmZXJlbmNlVHlwZXMuam9pbignfCcpKS50ZXN0KGVudGl0eVR5cGUpIHx8XHJcbiAgICBlbnRpdHkgaW5zdGFuY2VvZiBXZWFrTWFwIHx8XHJcbiAgICBlbnRpdHkgaW5zdGFuY2VvZiBXZWFrU2V0XHJcbiAgKVxyXG4gICAgcmV0dXJuIGVudGl0eTtcclxuICBpZiAoY2FjaGUuaGFzKGVudGl0eSkpIHtcclxuICAgIHJldHVybiBjYWNoZS5nZXQoZW50aXR5KTtcclxuICB9XHJcbiAgY29uc3QgYyA9IG5ldyBlbnRpdHkuY29uc3RydWN0b3IoKTtcclxuXHJcbiAgaWYgKGVudGl0eSBpbnN0YW5jZW9mIE1hcCkge1xyXG4gICAgZW50aXR5LmZvckVhY2goKHZhbHVlLCBrZXkpID0+XHJcbiAgICAgIGMuc2V0KGNsb25lRGVlcChrZXkpLCBjbG9uZURlZXAodmFsdWUpKVxyXG4gICAgKTtcclxuICB9XHJcbiAgaWYgKGVudGl0eSBpbnN0YW5jZW9mIFNldCkge1xyXG4gICAgZW50aXR5LmZvckVhY2goKHZhbHVlKSA9PiBjLmFkZChjbG9uZURlZXAodmFsdWUpKSk7XHJcbiAgfVxyXG4gIGlmIChlbnRpdHkgaW5zdGFuY2VvZiBEYXRlKSB7XHJcbiAgICByZXR1cm4gbmV3IERhdGUoZW50aXR5KTtcclxuICB9XHJcbiAgY2FjaGUuc2V0KGVudGl0eSwgYyk7XHJcbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oXHJcbiAgICBjLFxyXG4gICAgLi4uT2JqZWN0LmtleXMoZW50aXR5KS5tYXAoKHByb3ApID0+IHtcclxuICAgICAgLy8gZGVidWdnZXI7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgW3Byb3BdOiBjbG9uZURlZXAoZW50aXR5W3Byb3BdLCBjYWNoZSksXHJcbiAgICAgIH07XHJcbiAgICB9KVxyXG4gICk7XHJcbn0iXX0=