UNPKG

ewm

Version:

小程序原生插件

230 lines 7.5 kB
function copyBuffer(cur) { if (cur instanceof Buffer) { return Buffer.from(cur); } return new cur.constructor(cur.buffer.slice(), cur.byteOffset, cur.length); } export function rfdc(opts) { opts = opts || {}; if (opts.circles) return rfdcCircles(opts); return opts.proto ? cloneProto : clone; function cloneArray(a, fn) { var keys = Object.keys(a); var a2 = new Array(keys.length); for (var i = 0; i < keys.length; i++) { var k = keys[i]; var cur = a[k]; if (typeof cur !== 'object' || cur === null) { a2[k] = cur; } else if (cur instanceof Date) { a2[k] = new Date(cur); } else if (ArrayBuffer.isView(cur)) { a2[k] = copyBuffer(cur); } else { a2[k] = fn(cur); } } return a2; } function clone(o) { if (typeof o !== 'object' || o === null) return o; if (o instanceof Date) return new Date(o); if (Array.isArray(o)) return cloneArray(o, clone); if (o instanceof Map) return new Map(cloneArray(Array.from(o), clone)); if (o instanceof Set) return new Set(cloneArray(Array.from(o), clone)); var o2 = {}; for (var k in o) { if (Object.hasOwnProperty.call(o, k) === false) continue; var cur = o[k]; if (typeof cur !== 'object' || cur === null) { o2[k] = cur; } else if (cur instanceof Date) { o2[k] = new Date(cur); } else if (cur instanceof Map) { o2[k] = new Map(cloneArray(Array.from(cur), clone)); } else if (cur instanceof Set) { o2[k] = new Set(cloneArray(Array.from(cur), clone)); } else if (ArrayBuffer.isView(cur)) { o2[k] = copyBuffer(cur); } else { o2[k] = clone(cur); } } return o2; } function cloneProto(o) { if (typeof o !== 'object' || o === null) return o; if (o instanceof Date) return new Date(o); if (Array.isArray(o)) return cloneArray(o, cloneProto); if (o instanceof Map) return new Map(cloneArray(Array.from(o), cloneProto)); if (o instanceof Set) return new Set(cloneArray(Array.from(o), cloneProto)); var o2 = {}; for (var k in o) { var cur = o[k]; if (typeof cur !== 'object' || cur === null) { o2[k] = cur; } else if (cur instanceof Date) { o2[k] = new Date(cur); } else if (cur instanceof Map) { o2[k] = new Map(cloneArray(Array.from(cur), cloneProto)); } else if (cur instanceof Set) { o2[k] = new Set(cloneArray(Array.from(cur), cloneProto)); } else if (ArrayBuffer.isView(cur)) { o2[k] = copyBuffer(cur); } else { o2[k] = cloneProto(cur); } } return o2; } } function rfdcCircles(opts) { var refs = []; var refsNew = []; return opts.proto ? cloneProto : clone; function cloneArray(a, fn) { var keys = Object.keys(a); var a2 = new Array(keys.length); for (var i = 0; i < keys.length; i++) { var k = keys[i]; var cur = a[k]; if (typeof cur !== 'object' || cur === null) { a2[k] = cur; } else if (cur instanceof Date) { a2[k] = new Date(cur); } else if (ArrayBuffer.isView(cur)) { a2[k] = copyBuffer(cur); } else { var index = refs.indexOf(cur); if (index !== -1) { a2[k] = refsNew[index]; } else { a2[k] = fn(cur); } } } return a2; } function clone(o) { if (typeof o !== 'object' || o === null) return o; if (o instanceof Date) return new Date(o); if (Array.isArray(o)) return cloneArray(o, clone); if (o instanceof Map) return new Map(cloneArray(Array.from(o), clone)); if (o instanceof Set) return new Set(cloneArray(Array.from(o), clone)); var o2 = {}; refs.push(o); refsNew.push(o2); for (var k in o) { if (Object.hasOwnProperty.call(o, k) === false) continue; var cur = o[k]; if (typeof cur !== 'object' || cur === null) { o2[k] = cur; } else if (cur instanceof Date) { o2[k] = new Date(cur); } else if (cur instanceof Map) { o2[k] = new Map(cloneArray(Array.from(cur), clone)); } else if (cur instanceof Set) { o2[k] = new Set(cloneArray(Array.from(cur), clone)); } else if (ArrayBuffer.isView(cur)) { o2[k] = copyBuffer(cur); } else { var i = refs.indexOf(cur); if (i !== -1) { o2[k] = refsNew[i]; } else { o2[k] = clone(cur); } } } refs.pop(); refsNew.pop(); return o2; } function cloneProto(o) { if (typeof o !== 'object' || o === null) return o; if (o instanceof Date) return new Date(o); if (Array.isArray(o)) return cloneArray(o, cloneProto); if (o instanceof Map) return new Map(cloneArray(Array.from(o), cloneProto)); if (o instanceof Set) return new Set(cloneArray(Array.from(o), cloneProto)); var o2 = {}; refs.push(o); refsNew.push(o2); for (var k in o) { var cur = o[k]; if (typeof cur !== 'object' || cur === null) { o2[k] = cur; } else if (cur instanceof Date) { o2[k] = new Date(cur); } else if (cur instanceof Map) { o2[k] = new Map(cloneArray(Array.from(cur), cloneProto)); } else if (cur instanceof Set) { o2[k] = new Set(cloneArray(Array.from(cur), cloneProto)); } else if (ArrayBuffer.isView(cur)) { o2[k] = copyBuffer(cur); } else { var i = refs.indexOf(cur); if (i !== -1) { o2[k] = refsNew[i]; } else { o2[k] = cloneProto(cur); } } } refs.pop(); refsNew.pop(); return o2; } } //# sourceMappingURL=rfdc.js.map