HEX
Server: nginx/1.18.0
System: Linux test-ipsremont 5.4.0-214-generic #234-Ubuntu SMP Fri Mar 14 23:50:27 UTC 2025 x86_64
User: ips (1000)
PHP: 8.0.30
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: /var/www/iq.affiliate/node_modules/@sveltejs/kit/src/utils/streaming.js
/**
 * @returns {import('types').Deferred & { promise: Promise<any> }}}
 */
function defer() {
	let fulfil;
	let reject;

	const promise = new Promise((f, r) => {
		fulfil = f;
		reject = r;
	});

	// @ts-expect-error
	return { promise, fulfil, reject };
}

/**
 * Create an async iterator and a function to push values into it
 * @returns {{
 *   iterator: AsyncIterable<any>;
 *   push: (value: any) => void;
 *   done: () => void;
 * }}
 */
export function create_async_iterator() {
	const deferred = [defer()];

	return {
		iterator: {
			[Symbol.asyncIterator]() {
				return {
					next: async () => {
						const next = await deferred[0].promise;
						if (!next.done) deferred.shift();
						return next;
					}
				};
			}
		},
		push: (value) => {
			deferred[deferred.length - 1].fulfil({
				value,
				done: false
			});
			deferred.push(defer());
		},
		done: () => {
			deferred[deferred.length - 1].fulfil({ done: true });
		}
	};
}