// Type definitions for Sugar v2.0.6 // Project: https://sugarjs.com/ // Definitions by: Andrew Plummer declare namespace sugarjs { type SugarDefaultChainable = Array.Chainable & Date.Chainable & Function.Chainable & Number.Chainable & Object.Chainable & RegExp.Chainable & String.Chainable; type NativeConstructor = ArrayConstructor | DateConstructor | FunctionConstructor | NumberConstructor | ObjectConstructor | RegExpConstructor | StringConstructor | BooleanConstructor | ErrorConstructor; interface ExtendOptions { methods?: Array; except?: Array; namespaces?: Array; enhance?: boolean; enhanceString?: boolean; enhanceArray?: boolean; objectPrototype?: boolean; } interface Sugar { (opts?: ExtendOptions): Sugar; createNamespace(name: string): SugarNamespace; extend(opts?: ExtendOptions): Sugar; Array: Array.Constructor; Date: Date.Constructor; Function: Function.Constructor; Number: Number.Constructor; Object: Object.Constructor; RegExp: RegExp.Constructor; String: String.Constructor; } interface SugarNamespace { alias(toName: string, from: string|Function): this; alias(toName: string, fn: undefined): this; defineInstance(methods: Object): this; defineInstance(methodName: string, methodFn: Function): this; defineInstanceAndStatic(methods: Object): this; defineInstanceAndStatic(methodName: string, methodFn: Function): this; defineInstancePolyfill(methods: Object): this; defineInstancePolyfill(methodName: string, methodFn: Function): this; defineInstanceWithArguments(methods: Object): this; defineInstanceWithArguments(methodName: string, methodFn: Function): this; defineStatic(methods: Object): this; defineStatic(methodName: string, methodFn: Function): this; defineStaticPolyfill(methods: Object): this; defineStaticPolyfill(methodName: string, methodFn: Function): this; defineStaticWithArguments(methods: Object): this; defineStaticWithArguments(methodName: string, methodFn: Function): this; extend(opts?: ExtendOptions): this; } namespace Array { type Chainable = ChainableBase & Object.ChainableBase; interface ChainableBase { raw: RawValue; valueOf: () => RawValue; toString: () => string; concat(...items: (T | T[])[]): SugarDefaultChainable; concat(...items: T[][]): SugarDefaultChainable; copyWithin(target: number, start: number, end?: number): SugarDefaultChainable; every(callbackfn: (value: T, index: number, array: T[]) => boolean, thisArg?: any): SugarDefaultChainable; fill(value: T, start?: number, end?: number): SugarDefaultChainable; filter(callbackfn: (value: T, index: number, array: T[]) => any, thisArg?: any): SugarDefaultChainable; find(predicate: (value: T, index: number, obj: Array) => boolean, thisArg?: any): SugarDefaultChainable; findIndex(predicate: (value: T, index: number, obj: Array) => boolean, thisArg?: any): SugarDefaultChainable; forEach(callbackfn: (value: T, index: number, array: T[]) => void, thisArg?: any): SugarDefaultChainable; indexOf(searchElement: T, fromIndex?: number): SugarDefaultChainable; join(separator?: string): SugarDefaultChainable; lastIndexOf(searchElement: T, fromIndex?: number): SugarDefaultChainable; map(callbackfn: (value: T, index: number, array: T[]) => U, thisArg?: any): SugarDefaultChainable; pop(): SugarDefaultChainable; push(...items: T[]): SugarDefaultChainable; reduce(callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: T[]) => T, initialValue?: T): SugarDefaultChainable; reduce(callbackfn: (previousValue: U, currentValue: T, currentIndex: number, array: T[]) => U, initialValue: U): SugarDefaultChainable; reduceRight(callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: T[]) => T, initialValue?: T): SugarDefaultChainable; reduceRight(callbackfn: (previousValue: U, currentValue: T, currentIndex: number, array: T[]) => U, initialValue: U): SugarDefaultChainable; reverse(): SugarDefaultChainable; shift(): SugarDefaultChainable; slice(start?: number, end?: number): SugarDefaultChainable; some(callbackfn: (value: T, index: number, array: T[]) => boolean, thisArg?: any): SugarDefaultChainable; sort(compareFn?: (a: T, b: T) => number): SugarDefaultChainable; splice(start: number): SugarDefaultChainable; splice(start: number, deleteCount: number, ...items: T[]): SugarDefaultChainable; toLocaleString(): SugarDefaultChainable; unshift(...items: T[]): SugarDefaultChainable; } } namespace Date { type Chainable = ChainableBase & Object.ChainableBase; interface ChainableBase { raw: RawValue; valueOf: () => RawValue; toString: () => string; getDate(): SugarDefaultChainable; getDay(): SugarDefaultChainable; getFullYear(): SugarDefaultChainable; getHours(): SugarDefaultChainable; getMilliseconds(): SugarDefaultChainable; getMinutes(): SugarDefaultChainable; getMonth(): SugarDefaultChainable; getSeconds(): SugarDefaultChainable; getTime(): SugarDefaultChainable; getTimezoneOffset(): SugarDefaultChainable; getUTCDate(): SugarDefaultChainable; getUTCDay(): SugarDefaultChainable; getUTCFullYear(): SugarDefaultChainable; getUTCHours(): SugarDefaultChainable; getUTCMilliseconds(): SugarDefaultChainable; getUTCMinutes(): SugarDefaultChainable; getUTCMonth(): SugarDefaultChainable; getUTCSeconds(): SugarDefaultChainable; setDate(date: number): SugarDefaultChainable; setFullYear(year: number, month?: number, date?: number): SugarDefaultChainable; setHours(hours: number, min?: number, sec?: number, ms?: number): SugarDefaultChainable; setMilliseconds(ms: number): SugarDefaultChainable; setMinutes(min: number, sec?: number, ms?: number): SugarDefaultChainable; setMonth(month: number, date?: number): SugarDefaultChainable; setSeconds(sec: number, ms?: number): SugarDefaultChainable; setTime(time: number): SugarDefaultChainable; setUTCDate(date: number): SugarDefaultChainable; setUTCFullYear(year: number, month?: number, date?: number): SugarDefaultChainable; setUTCHours(hours: number, min?: number, sec?: number, ms?: number): SugarDefaultChainable; setUTCMilliseconds(ms: number): SugarDefaultChainable; setUTCMinutes(min: number, sec?: number, ms?: number): SugarDefaultChainable; setUTCMonth(month: number, date?: number): SugarDefaultChainable; setUTCSeconds(sec: number, ms?: number): SugarDefaultChainable; toDateString(): SugarDefaultChainable; toISOString(): SugarDefaultChainable; toJSON(key?: any): SugarDefaultChainable; toLocaleDateString(locales?: string | string[], options?: Intl.DateTimeFormatOptions): SugarDefaultChainable; toLocaleDateString(): SugarDefaultChainable; toLocaleString(): SugarDefaultChainable; toLocaleString(locales?: string | string[], options?: Intl.DateTimeFormatOptions): SugarDefaultChainable; toLocaleTimeString(): SugarDefaultChainable; toLocaleTimeString(locales?: string | string[], options?: Intl.DateTimeFormatOptions): SugarDefaultChainable; toTimeString(): SugarDefaultChainable; toUTCString(): SugarDefaultChainable; } } namespace Function { type Chainable = ChainableBase & Object.ChainableBase; interface Constructor extends SugarNamespace { (raw?: Function): Chainable; new(raw?: Function): Chainable; after(instance: Function, n: number): Function; cancel(instance: Function): Function; debounce(instance: Function, ms?: number): Function; delay(instance: Function, ms?: number, ...args: any[]): Function; every(instance: Function, ms?: number, ...args: any[]): Function; lazy(instance: Function, ms?: number, immediate?: boolean, limit?: number): Function; lock(instance: Function, n?: number): Function; memoize(instance: Function, hashFn?: string|Function, limit?: number): Function; once(instance: Function): Function; partial(instance: Function, ...args: any[]): Function; throttle(instance: Function, ms?: number): Function; } interface ChainableBase { raw: RawValue; valueOf: () => RawValue; toString: () => string; after(n: number): SugarDefaultChainable; cancel(): SugarDefaultChainable; debounce(ms?: number): SugarDefaultChainable; delay(ms?: number, ...args: any[]): SugarDefaultChainable; every(ms?: number, ...args: any[]): SugarDefaultChainable; lazy(ms?: number, immediate?: boolean, limit?: number): SugarDefaultChainable; lock(n?: number): SugarDefaultChainable; memoize(hashFn?: string|Function, limit?: number): SugarDefaultChainable; once(): SugarDefaultChainable; partial(...args: any[]): SugarDefaultChainable; throttle(ms?: number): SugarDefaultChainable; apply(thisArg: any, argArray?: any): SugarDefaultChainable; bind(thisArg: any, ...argArray: any[]): SugarDefaultChainable; call(thisArg: any, ...argArray: any[]): SugarDefaultChainable; } } namespace Number { type Chainable = ChainableBase & Object.ChainableBase; interface ChainableBase { raw: RawValue; valueOf: () => RawValue; toString: () => string; toExponential(fractionDigits?: number): SugarDefaultChainable; toFixed(fractionDigits?: number): SugarDefaultChainable; toLocaleString(locales?: string | string[], options?: Intl.NumberFormatOptions): SugarDefaultChainable; toPrecision(precision?: number): SugarDefaultChainable; } } namespace Object { type Chainable = ChainableBase; interface ChainableBase { raw: RawValue; valueOf: () => RawValue; toString: () => string; } } namespace RegExp { type Chainable = ChainableBase & Object.ChainableBase; interface ChainableBase { raw: RawValue; valueOf: () => RawValue; toString: () => string; exec(string: string): SugarDefaultChainable; test(string: string): SugarDefaultChainable; } } namespace String { type Chainable = ChainableBase & Object.ChainableBase; interface ChainableBase { raw: RawValue; valueOf: () => RawValue; toString: () => string; anchor(name: string): SugarDefaultChainable; big(): SugarDefaultChainable; blink(): SugarDefaultChainable; bold(): SugarDefaultChainable; charAt(pos: number): SugarDefaultChainable; charCodeAt(index: number): SugarDefaultChainable; codePointAt(pos: number): SugarDefaultChainable; concat(...strings: string[]): SugarDefaultChainable; endsWith(searchString: string, endPosition?: number): SugarDefaultChainable; fixed(): SugarDefaultChainable; fontcolor(color: string): SugarDefaultChainable; fontsize(size: number): SugarDefaultChainable; fontsize(size: string): SugarDefaultChainable; includes(searchString: string, position?: number): SugarDefaultChainable; indexOf(searchString: string, position?: number): SugarDefaultChainable; italics(): SugarDefaultChainable; lastIndexOf(searchString: string, position?: number): SugarDefaultChainable; link(url: string): SugarDefaultChainable; localeCompare(that: string): SugarDefaultChainable; localeCompare(that: string, locales?: string | string[], options?: Intl.CollatorOptions): SugarDefaultChainable; match(regexp: RegExp): SugarDefaultChainable; match(regexp: string): SugarDefaultChainable; normalize(form?: string): SugarDefaultChainable; normalize(form: "NFC" | "NFD" | "NFKC" | "NFKD"): SugarDefaultChainable; repeat(count: number): SugarDefaultChainable; replace(searchValue: string, replaceValue: string): SugarDefaultChainable; replace(searchValue: string, replacer: (substring: string, ...args: any[]) => string): SugarDefaultChainable; replace(searchValue: RegExp, replaceValue: string): SugarDefaultChainable; replace(searchValue: RegExp, replacer: (substring: string, ...args: any[]) => string): SugarDefaultChainable; search(regexp: RegExp): SugarDefaultChainable; search(regexp: string): SugarDefaultChainable; slice(start?: number, end?: number): SugarDefaultChainable; small(): SugarDefaultChainable; split(separator: string, limit?: number): SugarDefaultChainable; split(separator: RegExp, limit?: number): SugarDefaultChainable; startsWith(searchString: string, position?: number): SugarDefaultChainable; strike(): SugarDefaultChainable; sub(): SugarDefaultChainable; substr(from: number, length?: number): SugarDefaultChainable; substring(start: number, end?: number): SugarDefaultChainable; sup(): SugarDefaultChainable; toLocaleLowerCase(): SugarDefaultChainable; toLocaleUpperCase(): SugarDefaultChainable; toLowerCase(): SugarDefaultChainable; toUpperCase(): SugarDefaultChainable; trim(): SugarDefaultChainable; } } } declare module "sugar" { const Sugar: sugarjs.Sugar; export = Sugar; } declare var Sugar: sugarjs.Sugar;