/*
 * Copyright (c) 2017 NumberFour AG.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *   NumberFour AG - Initial API and implementation
 */
@@Global @@ProvidedByRuntime

export external public const global: Object+;

export external public function setTimeout(callback: () => void, ms: number, ...args: any[]): Timeout;
export external public function clearTimeout(timeoutId: Timeout): void;
export external public function setInterval(callback: () => void, ms: number, ...args: any[]): Timeout;
export external public function clearInterval(intervalId: Timeout): void;
export external public function setImmediate(callback: () => void, ...args: any[]): Immediate;
export external public function clearImmediate(immediateId: Immediate): void;

export external public class Timeout {
	public hasRef(): boolean;
	public ref(): Timeout;
	public refresh(): Timeout;
	public unref(): Timeout;
}

export external public class Immediate {
	public hasRef(): boolean;
	public ref(): Immediate;
	public unref(): Immediate;
}
