deepcopy
Version:
deep copy data
189 lines (155 loc) • 3.72 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _buffer = require("./buffer.js");
var _global = require("./global.js");
/**
* copy ArrayBuffer
*
* @param {ArrayBuffer} value
* @return {ArrayBuffer}
*/
function copyArrayBuffer(value) {
return value.slice(0);
}
/**
* copy Boolean
*
* @param {Boolean} value
* @return {Boolean}
*/
function copyBoolean(value) {
return new Boolean(value.valueOf());
}
/**
* copy DataView
*
* @param {DataView} value
* @return {DataView}
*/
function copyDataView(value) {
// TODO: copy ArrayBuffer?
return new DataView(value.buffer);
}
/**
* copy Buffer
*
* @param {Buffer} value
* @return {Buffer}
*/
function copyBuffer(value) {
return (0, _buffer.copy)(value);
}
/**
* copy Date
*
* @param {Date} value
* @return {Date}
*/
function copyDate(value) {
return new Date(value.getTime());
}
/**
* copy Number
*
* @param {Number} value
* @return {Number}
*/
function copyNumber(value) {
return new Number(value);
}
/**
* copy RegExp
*
* @param {RegExp} value
* @return {RegExp}
*/
function copyRegExp(value) {
return new RegExp(value.source, value.flags);
}
/**
* copy String
*
* @param {String} value
* @return {String}
*/
function copyString(value) {
return new String(value);
}
/**
* copy TypedArray
*
* @param {*} value
* @return {*}
*/
function copyTypedArray(value, type) {
const typedArray = _global.globalObject[type];
if (typedArray.from) {
return _global.globalObject[type].from(value);
}
return new _global.globalObject[type](value);
}
/**
* shallow copy
*
* @param {*} value
* @return {*}
*/
function shallowCopy(value) {
return value;
}
/**
* get empty Array
*
* @return {Array}
*/
function getEmptyArray() {
return [];
}
/**
* get empty Map
*
* @return {Map}
*/
function getEmptyMap() {
return new Map();
}
/**
* get empty Object
*
* @return {Object}
*/
function getEmptyObject() {
return {};
}
/**
* get empty Set
*
* @return {Set}
*/
function getEmptySet() {
return new Set();
}
var _default = new Map([// deep copy
['ArrayBuffer', copyArrayBuffer], ['Boolean', copyBoolean], ['Buffer', copyBuffer], ['DataView', copyDataView], ['Date', copyDate], ['Number', copyNumber], ['RegExp', copyRegExp], ['String', copyString], // typed arrays
// TODO: pass bound function
['Float32Array', copyTypedArray], ['Float64Array', copyTypedArray], ['Int16Array', copyTypedArray], ['Int32Array', copyTypedArray], ['Int8Array', copyTypedArray], ['Uint16Array', copyTypedArray], ['Uint32Array', copyTypedArray], ['Uint8Array', copyTypedArray], ['Uint8ClampedArray', copyTypedArray], // shallow copy
['Array Iterator', shallowCopy], ['Map Iterator', shallowCopy], ['Promise', shallowCopy], ['Set Iterator', shallowCopy], ['String Iterator', shallowCopy], ['function', shallowCopy], ['global', shallowCopy], // NOTE: WeakMap and WeakSet cannot get entries
['WeakMap', shallowCopy], ['WeakSet', shallowCopy], // primitives
['boolean', shallowCopy], ['null', shallowCopy], ['number', shallowCopy], ['string', shallowCopy], ['symbol', shallowCopy], ['undefined', shallowCopy], // collections
// NOTE: return empty value, because recursively copy later.
['Arguments', getEmptyArray], ['Array', getEmptyArray], ['Map', getEmptyMap], ['Object', getEmptyObject], ['Set', getEmptySet] // NOTE: type-detect returns following types
// 'Location'
// 'Document'
// 'MimeTypeArray'
// 'PluginArray'
// 'HTMLQuoteElement'
// 'HTMLTableDataCellElement'
// 'HTMLTableHeaderCellElement'
// TODO: is type-detect never return 'object'?
// 'object'
]);
exports.default = _default;
//# sourceMappingURL=copy_map.js.map