copy_map.js 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. exports.default = void 0;
  6. var _buffer = require("./buffer.js");
  7. var _global = require("./global.js");
  8. /**
  9. * copy ArrayBuffer
  10. *
  11. * @param {ArrayBuffer} value
  12. * @return {ArrayBuffer}
  13. */
  14. function copyArrayBuffer(value) {
  15. return value.slice(0);
  16. }
  17. /**
  18. * copy Boolean
  19. *
  20. * @param {Boolean} value
  21. * @return {Boolean}
  22. */
  23. function copyBoolean(value) {
  24. return new Boolean(value.valueOf());
  25. }
  26. /**
  27. * copy DataView
  28. *
  29. * @param {DataView} value
  30. * @return {DataView}
  31. */
  32. function copyDataView(value) {
  33. // TODO: copy ArrayBuffer?
  34. return new DataView(value.buffer);
  35. }
  36. /**
  37. * copy Buffer
  38. *
  39. * @param {Buffer} value
  40. * @return {Buffer}
  41. */
  42. function copyBuffer(value) {
  43. return (0, _buffer.copy)(value);
  44. }
  45. /**
  46. * copy Date
  47. *
  48. * @param {Date} value
  49. * @return {Date}
  50. */
  51. function copyDate(value) {
  52. return new Date(value.getTime());
  53. }
  54. /**
  55. * copy Number
  56. *
  57. * @param {Number} value
  58. * @return {Number}
  59. */
  60. function copyNumber(value) {
  61. return new Number(value);
  62. }
  63. /**
  64. * copy RegExp
  65. *
  66. * @param {RegExp} value
  67. * @return {RegExp}
  68. */
  69. function copyRegExp(value) {
  70. return new RegExp(value.source, value.flags);
  71. }
  72. /**
  73. * copy String
  74. *
  75. * @param {String} value
  76. * @return {String}
  77. */
  78. function copyString(value) {
  79. return new String(value);
  80. }
  81. /**
  82. * copy TypedArray
  83. *
  84. * @param {*} value
  85. * @return {*}
  86. */
  87. function copyTypedArray(value, type) {
  88. const typedArray = _global.globalObject[type];
  89. if (typedArray.from) {
  90. return _global.globalObject[type].from(value);
  91. }
  92. return new _global.globalObject[type](value);
  93. }
  94. /**
  95. * shallow copy
  96. *
  97. * @param {*} value
  98. * @return {*}
  99. */
  100. function shallowCopy(value) {
  101. return value;
  102. }
  103. /**
  104. * get empty Array
  105. *
  106. * @return {Array}
  107. */
  108. function getEmptyArray() {
  109. return [];
  110. }
  111. /**
  112. * get empty Map
  113. *
  114. * @return {Map}
  115. */
  116. function getEmptyMap() {
  117. return new Map();
  118. }
  119. /**
  120. * get empty Object
  121. *
  122. * @return {Object}
  123. */
  124. function getEmptyObject() {
  125. return {};
  126. }
  127. /**
  128. * get empty Set
  129. *
  130. * @return {Set}
  131. */
  132. function getEmptySet() {
  133. return new Set();
  134. }
  135. var _default = new Map([// deep copy
  136. ['ArrayBuffer', copyArrayBuffer], ['Boolean', copyBoolean], ['Buffer', copyBuffer], ['DataView', copyDataView], ['Date', copyDate], ['Number', copyNumber], ['RegExp', copyRegExp], ['String', copyString], // typed arrays
  137. // TODO: pass bound function
  138. ['Float32Array', copyTypedArray], ['Float64Array', copyTypedArray], ['Int16Array', copyTypedArray], ['Int32Array', copyTypedArray], ['Int8Array', copyTypedArray], ['Uint16Array', copyTypedArray], ['Uint32Array', copyTypedArray], ['Uint8Array', copyTypedArray], ['Uint8ClampedArray', copyTypedArray], // shallow copy
  139. ['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
  140. ['WeakMap', shallowCopy], ['WeakSet', shallowCopy], // primitives
  141. ['boolean', shallowCopy], ['null', shallowCopy], ['number', shallowCopy], ['string', shallowCopy], ['symbol', shallowCopy], ['undefined', shallowCopy], // collections
  142. // NOTE: return empty value, because recursively copy later.
  143. ['Arguments', getEmptyArray], ['Array', getEmptyArray], ['Map', getEmptyMap], ['Object', getEmptyObject], ['Set', getEmptySet] // NOTE: type-detect returns following types
  144. // 'Location'
  145. // 'Document'
  146. // 'MimeTypeArray'
  147. // 'PluginArray'
  148. // 'HTMLQuoteElement'
  149. // 'HTMLTableDataCellElement'
  150. // 'HTMLTableHeaderCellElement'
  151. // TODO: is type-detect never return 'object'?
  152. // 'object'
  153. ]);
  154. exports.default = _default;
  155. //# sourceMappingURL=copy_map.js.map