concat.js 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. exports.concatToUint8Array = concatToUint8Array;
  4. exports.concat = concat;
  5. const buffer_source_js_1 = require("./buffer-source.js");
  6. function concatToUint8Array(buffers) {
  7. const views = [];
  8. let length = 0;
  9. for (const buffer of buffers) {
  10. const view = (0, buffer_source_js_1.toUint8Array)(buffer);
  11. views.push(view);
  12. length += view.byteLength;
  13. }
  14. const result = new Uint8Array(length);
  15. let offset = 0;
  16. for (const view of views) {
  17. result.set(view, offset);
  18. offset += view.byteLength;
  19. }
  20. return result;
  21. }
  22. function concat(first, second, ...rest) {
  23. let buffers;
  24. let type;
  25. if (typeof second === "function") {
  26. buffers = Array.from(first);
  27. type = second;
  28. }
  29. else if ((0, buffer_source_js_1.isBufferSource)(first)) {
  30. buffers = [first, second, ...rest].filter(buffer_source_js_1.isBufferSource);
  31. }
  32. else {
  33. buffers = Array.from(first);
  34. if (second) {
  35. buffers.push(second);
  36. }
  37. buffers.push(...rest);
  38. }
  39. const bytes = concatToUint8Array(buffers);
  40. return type ? (0, buffer_source_js_1.toView)(bytes, type) : bytes.buffer;
  41. }