'use strict';

var streams = require('../../_virtual/streams2.js');
var ponyfill_es2018 = require('../web-streams-polyfill/dist/ponyfill.es2018.js');

/* c8 ignore start */

var hasRequiredStreams;

function requireStreams () {
	if (hasRequiredStreams) return streams.__exports;
	hasRequiredStreams = 1;
	// 64 KiB (same size chrome slice theirs blob into Uint8array's)
	const POOL_SIZE = 65536;

	if (!globalThis.ReadableStream) {
	  // `node:stream/web` got introduced in v16.5.0 as experimental
	  // and it's preferred over the polyfilled version. So we also
	  // suppress the warning that gets emitted by NodeJS for using it.
	  try {
	    const process = require('node:process');
	    const { emitWarning } = process;
	    try {
	      process.emitWarning = () => {};
	      Object.assign(globalThis, require('node:stream/web'));
	      process.emitWarning = emitWarning;
	    } catch (error) {
	      process.emitWarning = emitWarning;
	      throw error
	    }
	  } catch (error) {
	    // fallback to polyfill implementation
	    Object.assign(globalThis, ponyfill_es2018.__require());
	  }
	}

	try {
	  // Don't use node: prefix for this, require+node: is not supported until node v14.14
	  // Only `import()` can use prefix in 12.20 and later
	  const { Blob } = require('buffer');
	  if (Blob && !Blob.prototype.stream) {
	    Blob.prototype.stream = function name (params) {
	      let position = 0;
	      const blob = this;

	      return new ReadableStream({
	        type: 'bytes',
	        async pull (ctrl) {
	          const chunk = blob.slice(position, Math.min(blob.size, position + POOL_SIZE));
	          const buffer = await chunk.arrayBuffer();
	          position += buffer.byteLength;
	          ctrl.enqueue(new Uint8Array(buffer));

	          if (position === blob.size) {
	            ctrl.close();
	          }
	        }
	      })
	    };
	  }
	} catch (error) {}
	/* c8 ignore end */
	return streams.__exports;
}

exports.__require = requireStreams;
//# sourceMappingURL=streams.js.map
