UNPKG

@icecreamcake/autojs6-dts

Version:

TypeScript Declarations for AutoJs6

905 lines (819 loc) 32.8 kB
// Type definitions for AutoJs6 internal module util // // Definitions by: SuperMonster003 <https://github.com/SuperMonster003> // TypeScript Version: 4.7.4 // // Last modified: Nov 8, 2021 /// <reference path="../index.d.ts" /> /** * @Source %AutoJs6Assets%/modules/__util__.js */ declare namespace Internal { interface Util { version: Util.Version; java: Util.Java; inspect: Util.Inspect; /** * @example Use method with argument(s) to get an object with information * let str = 'love'; * let morse = util.morseCode(str); * morse.pattern; // same as morse.getPattern() * morse.code; // same as morse.getCode() * morse.vibrate(); * * @example Use method's * let str = 'love'; * util.morseCode.getPattern(str); // [100, 100, 300, ...] -- without delay * util.morseCode.getCode(str); // '·-·· --- ···- ·' * util.morseCode.vibrate(str); */ morseCode: Util.MorseCode; /** * @example Property util.versionCodes.XXX * console.log(util.versionCodes.R); * console.log(util.versionCodes.O); * console.log(util.versionCodes.O_MR1); * * @example Method util.versionCodes.toString() * console.log(util.versionCodes.toString('detail')); * * @example Method util.versionCodes.search() * console.log(util.versionCodes.search(30)); * console.log(util.versionCodes.search('R')); * console.log(util.versionCodes.search('Android 11')); * * console.log(util.versionCodes.search('oreo')); * console.log(util.versionCodes.search('pie')); * * console.log(util.versionCodes.search('cookie')); * console.log(util.versionCodes.search('snow')); * console.log(util.versionCodes.search('nougat')); * console.log(util.versionCodes.search('jelly bean')); * * console.log(util.versionCodes.search('7.1.1')); * console.log(util.versionCodes.search('7.1')); * console.log(util.versionCodes.search(7.1)); * console.log(util.versionCodes.search('8.0')); * console.log(util.versionCodes.search('8')); * console.log(util.versionCodes.search(8)); * * console.log(util.versionCodes.search('2022')); * console.log(util.versionCodes.search(2022)); * console.log(util.versionCodes.search(2011).map(o => [o.platformVersion, o.releaseName, o.releaseDate])); * * console.log(util.versionCodes.search('2022 Mar')); * console.log(util.versionCodes.search('2022 March')); * console.log(util.versionCodes.search('2022 3')); * console.log(util.versionCodes.search('2022/3')); * console.log(util.versionCodes.search('2022/3')); * console.log(util.versionCodes.search('2022/03')); * console.log(util.versionCodes.search('Mar 2022')); * console.log(util.versionCodes.search('March 2022')); * console.log(util.versionCodes.search('Mar, 2022')); * console.log(util.versionCodes.search('March, 2022')); * * console.log(util.versionCodes.search('2022 Mar 07')); * console.log(util.versionCodes.search('2022 Mar 7')); * console.log(util.versionCodes.search('2022 March 7')); * console.log(util.versionCodes.search('2022 3 7')); * console.log(util.versionCodes.search('2022/3/7')); * console.log(util.versionCodes.search('2022/3/07')); * console.log(util.versionCodes.search('2022/03/07')); * console.log(util.versionCodes.search('Mar 7 2022')); * console.log(util.versionCodes.search('March 7 2022')); * console.log(util.versionCodes.search('Mar 7, 2022')); * console.log(util.versionCodes.search('March 7, 2022')); * * console.log(util.versionCodes.search(new Date(2022, 3 - 1, 7))); */ versionCodes: Util.VersionCodes; /** * @example Source code summary (zh-CN: 源代码摘要) * exports.__assignFunctions__ = function (src, target, functions) { * for (let f of functions) { * target[f] = src[f].bind(src); * } * }; */ __assignFunctions__(src: object, target: object, functions: string[]): void; /** * @example Source code summary (zh-CN: 源代码摘要) * exports.isArray = isArray; * function isArray(ar) { * return Array.isArray(ar); * } */ isArray(arg: any): boolean; /** * @example Source code summary (zh-CN: 源代码摘要) * exports.isBoolean = isBoolean; * function isBoolean(arg) { * return typeof arg === 'boolean'; * } */ isBoolean(arg: any): boolean; /** * @example Source code summary (zh-CN: 源代码摘要) * exports.isNull = isNull; * function isNull(arg) { * return arg === null; * } */ isNull(arg: any): boolean; /** * @example Source code summary (zh-CN: 源代码摘要) * exports.isNullOrUndefined = isNullOrUndefined; * function isNullOrUndefined(arg) { * return arg == null; * } */ isNullOrUndefined(arg: any): boolean; /** * @example Source code summary (zh-CN: 源代码摘要) * exports.isNumber = isNumber; * function isNumber(arg) { * return typeof arg === 'number'; * } */ isNumber(arg: any): boolean; /** * @example Source code summary (zh-CN: 源代码摘要) * exports.isString = isString; * function isString(arg) { * return typeof arg === 'string'; * } */ isString(arg: any): boolean; /** * @example Source code summary (zh-CN: 源代码摘要) * exports.isSymbol = isSymbol; * function isSymbol(arg) { * return typeof arg === 'symbol'; * } */ isSymbol(arg: any): boolean; /** * @example Source code summary (zh-CN: 源代码摘要) * exports.isUndefined = isUndefined; * function isUndefined(arg) { * return arg === void 0; * } */ isUndefined(arg: any): boolean; /** * @example Source code summary (zh-CN: 源代码摘要) * exports.isRegExp = isRegExp; * function isRegExp(re) { * return isObject(re) && objectToString(re) === '[object RegExp]'; * } * function isObject(arg) { * return typeof arg === 'object' && arg !== null; * } * function objectToString(o) { * return Object.prototype.toString.call(o); * } */ isRegExp(arg: any): boolean; /** * @example Source code summary (zh-CN: 源代码摘要) * exports.isObject = isObject; * function isObject(arg) { * return typeof arg === 'object' && arg !== null; * } */ isObject(arg: any): boolean; /** * @example Source code summary (zh-CN: 源代码摘要) * exports.isDate = isDate; * function isDate(d) { * return isObject(d) && objectToString(d) === '[object Date]'; * } * function isObject(arg) { * return typeof arg === 'object' && arg !== null; * } * function objectToString(o) { * return Object.prototype.toString.call(o); * } */ isDate(arg: any): boolean; /** * @example Source code summary (zh-CN: 源代码摘要) * exports.isError = isError; * function isError(e) { * return isObject(e) && * (objectToString(e) === '[object Error]' || e instanceof Error); * } * function isObject(arg) { * return typeof arg === 'object' && arg !== null; * } * function objectToString(o) { * return Object.prototype.toString.call(o); * } */ isError(arg: any): boolean; /** * @example Source code summary (zh-CN: 源代码摘要) * exports.isFunction = isFunction; * function isFunction(arg) { * return typeof arg === 'function'; * } */ isFunction(arg: any): boolean; /** * @example Source code summary (zh-CN: 源代码摘要) * exports.isPrimitive = isPrimitive; * function isPrimitive(arg) { * return arg === null || * typeof arg === 'boolean' || * typeof arg === 'number' || * typeof arg === 'string' || * typeof arg === 'symbol' || // ES6 symbol * typeof arg === 'undefined'; * } */ isPrimitive(arg: any): boolean; isJavaArray(o: any): boolean; /** * @example * function Animal(name) { * this.name = name; * this.sayName = () => toastLog(this.name); * } * let a = new Animal("Milo"); * a.sayName(); * function Dog() {} * util.extend(Dog, Animal); * let b = new Animal("Oscar"); * b.sayName(); * @example Source code summary (zh-CN: 源代码摘要) * exports.extend = (function () { * let extendStatics = Object.setPrototypeOf * || {__proto__: []} instanceof Array && function (d, b) {d.__proto__ = b} * || function (d, b) {for (let p in b) if (b.hasOwnProperty(p)) d[p] = b[p]}; * return function (d, b) { * extendStatics(d, b); * function __() {this.constructor = d} * d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); * }; * })(); */ extend(subClass: Function | object, parentClass: Function | object | null): void; /** * @example * log(util.format("%s%s%d", "0x10", ": ", "0x10")); // "0x10: 16" * log(util.format("10%% is 0.1")); // "10% is 0.1" * log(util.format([1], 2, "3", {num: 4, age: 5})); // "[ 1 ] 2 '3' { num: 4, age: 5 }" * log(util.format({a: {b: {c: "d"}}})); // "{ a: { b: { c: 'd' } } }" * log(util.format({a: {b: {c: {d: {e: "f"}}}}})); // "{ a: { b: { c: [Object] } } }" * log(util.format('%s:%s', '22', '59', 'Go to bed')); // "22:59 Go to bed" * @example * let indices = [1, 2, 5]; * let items = ["A", "B", "E"]; * log(util.format("选项索引: %j, 选项内容 %j", indices, items)); * @example * let colors = { * 'bold': [1, 22], 'italic': [3, 23], 'underline': [4, 24], * 'inverse': [7, 27], 'white': [37, 39], 'grey': [90, 39], * 'black': [30, 39], 'blue': [34, 39], 'cyan': [36, 39], * 'green': [32, 39], 'magenta': [35, 39], 'red': [31, 39], 'yellow': [33, 39], * }; * let styles = { * 'special': 'cyan', 'number': 'yellow', 'boolean': 'yellow', * 'undefined': 'grey', 'null': 'bold', 'string': 'green', * 'date': 'magenta', 'regexp': 'red', * }; * let stylizeWithColor = (str, styleType) => { * let style = styles[styleType]; * return style ? '\u001b[' + colors[style][0] + 'm' + str + '\u001b[' + colors[style][1] + 'm' : str; * }; * log(util.format({inspect: (recurseTimes, ctx) => (ctx.stylize = stylizeWithColor, stylizeWithColor)})); * log(util.format({inspect: (recurseTimes, ctx) => (ctx.stylize = stylizeWithColor, 1)})); * log(util.format({inspect: (recurseTimes, ctx) => (ctx.stylize = stylizeWithColor, /regex/)})); * log(util.format({inspect: (recurseTimes, ctx) => (ctx.stylize = stylizeWithColor, true)})); * log(util.format({inspect: (recurseTimes, ctx) => (ctx.stylize = stylizeWithColor, null)})); * log(util.format({inspect: (recurseTimes, ctx) => (ctx.stylize = stylizeWithColor, "hello")})); * log(util.format({inspect: (recurseTimes, ctx) => (ctx.stylize = stylizeWithColor, new Date())})); */ format(...args: any[]): string; /** * @example * util.log("%d %s %d = %d", 1, "+", 3, 4); // e.g. "7 Aug 11:57:40 - 1 + 3 = 4" * @example Source code summary (zh-CN: 源代码摘要) * exports.log = function () { * console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments)); * }; * let months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']; * function timestamp() { * let d = new Date(); * let time = [pad(d.getHours()), * pad(d.getMinutes()), * pad(d.getSeconds())].join(':'); * return [d.getDate(), months[d.getMonth()], time].join('\x20'); * } * function pad(n) { * return n < 10 ? '0' + n.toString(10) : n.toString(10); * } */ log(...args: any[]): void; /** * @deprecated Not available for Auto.js 4.1.1 Alpha2 (marked by SuperMonster003 on Aug 7, 2020) * @example Source code summary (zh-CN: 源代码摘要) * exports.deprecate = function (fn, msg) { * // Allow for deprecating things in the process of starting up. * if (isUndefined(global.process)) { * return function () { * return exports.deprecate(fn, msg).apply(this, arguments); * }; * } * if (process.noDeprecation === true) { * return fn; * } * let warned = false; * function deprecated() { * if (!warned) { * if (process.throwDeprecation) { * throw new Error(msg); * } else if (process.traceDeprecation) { * console.trace(msg); * } else { * console.error(msg); * } * warned = true; * } * return fn.apply(this, arguments); * } * return deprecated; * }; */ deprecate(fn: Func, msg: string): Func; /** * @deprecated Not available for Auto.js 4.1.1 Alpha2 (marked by SuperMonster003 on Aug 7, 2020) * @example Source code summary (zh-CN: 源代码摘要) * let debugs = {}; * let debugEnviron; * exports.debuglog = function (set) { * if (isUndefined(debugEnviron)) * debugEnviron = process.env.NODE_DEBUG || ''; * set = set.toUpperCase(); * if (!debugs[set]) { * if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) { * let pid = process.pid; * debugs[set] = function () { * let msg = exports.format.apply(exports, arguments); * console.error('%s %d: %s', set, pid, msg); * }; * } else { * debugs[set] = function () { * }; * } * } * return debugs[set]; * }; */ debuglog(set): any; getClass(o: java.lang.Class<any> | object): java.lang.Class<any>; getClassName(o: java.lang.Class<any> | object): string; /** * Check if a given argument matches the pattern. * @example * // A param needs a string alike 'disable' but not literally. * // Which means 'Disable', 'DISABLE', 'diSaBlE', even 'disable ' (a non-break space in the end) are all acceptable. * // That way, all samples below should be truthy. * checkStringParam('disable', 'disable'); // true * checkStringParam('Disable', 'disable'); // true * checkStringParam('DISABLE', 'disable'); // true * checkStringParam('diSaBlE', 'disable'); // true * checkStringParam('disable ', 'disable'); // true * * @example * function test(state) { * // string pattern type * if (util.checkStringParam(state, 'enable')) { * enableSomething(); * } * // RegExp pattern type * if (util.checkStringParam(state, /disabled?/)) { * disableSomething(); * } * } */ checkStringParam(src: string | { toString(): string } | any, pattern: string | RegExp): boolean; /** * @example * util.assureStringStartsWith('123', '$'); // '$123' * util.assureStringStartsWith('$hello', '$'); // '$hello' */ assureStringStartsWith(s: string, start: string): string; /** * @example * util.assureStringEndsWith('123', '$'); // '123$' * util.assureStringEndsWith('hello$', '$'); // 'hello$' */ assureStringEndsWith(s: string, end: string): string; /** * @example * util.assureStringSurroundsWith('123', '+'); // '+123+' * util.assureStringSurroundsWith('hello=', '='); // '=hello=' * util.assureStringSurroundsWith('test', '^', '$'); // '^test$' */ assureStringSurroundsWith(s: string, start: string, end?: string): string; /** * @throws TypeError */ ensureType(o: any, type: 'number' | 'boolean' | 'string' | 'undefined' | 'symbol' | 'bigint' | 'object'): void; /** * @throws TypeError */ ensureStringType(...o: any[]): void; /** * @throws TypeError */ ensureNumberType(...o: any[]): void; /** * @throws TypeError */ ensureUndefinedType(...o: any[]): void; /** * @throws TypeError */ ensureBooleanType(...o: any[]): void; /** * @throws TypeError */ ensureSymbolType(...o: any[]): void; /** * @throws TypeError */ ensureBigintType(...o: any[]): void; /** * @throws TypeError */ ensureObjectType(...o: any[]): void; /** * @throws TypeError */ ensureNonNullObjectType(...o: any[]): void; /** * @throws TypeError */ ensureArrayType(...o: any[]): void; /** * Converts a function into regular form * @example * let sum = (a, b, c) => a + b + c; * console.log(util.toRegular(sum)(1, 2, 5)); // 8 * @example * let filter = () => true; * // Error: Cannot convert org.mozilla.javascript.ArrowFunction@xxx to... * console.log(textMatches(/.+/).filter(filter).exists()); * // OK and returns boolean * console.log(textMatches(/.+/).filter(util.toRegular(filter)).exists()); */ toRegular<T extends Function>(f: T): T; /** * @example * let sum = (a, b, c) => a + b + c; * console.log(util.toRegularAndCall(sum, 1, 2, 5)); // 8 */ toRegularAndCall<T>(f: (...args) => T, ...o: any[]): T; /** * @example * let sum = (a, b, c) => a + b + c; * console.log(util.toRegularAndApply(sum, [1, 2, 5])); // 8 */ toRegularAndApply<T>(f: (...args) => T, args: any[]): T; } } declare namespace Util { interface Inspect { /** * @param [value] * @param [showHidden=false] - whether to show the names of not enumerable properties or methods * @param [depth=2] - recurse times * @param [colors=false] - stylize with color or not * @example * function Animal (name) { * this.name = name; * } * let dog = new Animal("Oscar"); * dog.age = 9; * Object.defineProperties(dog, { * sex: {value: "Male"}, * hobby: {value: "Accompany", enumerable: true}, * isYoung: {get() {return () => this.age < 10}}, * }); * * // log(util.inspect(dog, false, 0, true)); * log(util.inspect(dog, { * showHidden: false, * depth: 0, * colors: true, * })); * * // log(util.inspect(dog, true, 0, true)); * log(util.inspect(dog, { * showHidden: true, * depth: 0, * colors: true, * })); * @example Source code summary (zh-CN: 源代码摘要) * exports.inspect = inspect; * // http://en.wikipedia.org/wiki/ANSI_escape_code#graphics * inspect.colors = { * 'bold': [1, 22], * 'italic': [3, 23], * 'underline': [4, 24], * 'inverse': [7, 27], * 'white': [37, 39], * 'grey': [90, 39], * 'black': [30, 39], * 'blue': [34, 39], * 'cyan': [36, 39], * 'green': [32, 39], * 'magenta': [35, 39], * 'red': [31, 39], * 'yellow': [33, 39] * }; * // Don't use 'blue' not visible on cmd.exe * inspect.styles = { * 'special': 'cyan', * 'number': 'yellow', * 'boolean': 'yellow', * 'undefined': 'grey', * 'null': 'bold', * 'string': 'green', * 'date': 'magenta', * // "name": intentionally not styling * 'regexp': 'red' * }; */ (value?: any, showHidden?: boolean, depth?: number, colors?: boolean): string; /** * Avoid using 'blue' on cmd.exe * @see http://en.wikipedia.org/wiki/ANSI_escape_code#graphics */ colors: { bold: [1, 22]; italic: [3, 23]; underline: [4, 24]; inverse: [7, 27]; white: [37, 39]; grey: [90, 39]; black: [30, 39]; blue: [34, 39]; cyan: [36, 39]; green: [32, 39]; magenta: [35, 39]; red: [31, 39]; yellow: [33, 39]; }; styles: { special: 'cyan'; number: 'yellow'; boolean: 'yellow'; undefined: 'grey'; null: 'bold'; string: 'green'; date: 'magenta'; regexp: 'red'; }; } interface Java { /** * @example * log(util.java.instanceOf(device, "java.lang.Object")); // true * log(util.java.instanceOf({getClass: () => files.getClass()}, "java.lang.Object")); // true * log(util.java.instanceOf(java.lang.Boolean.TRUE, "java.lang.Boolean")); // true * @example Source code summary (zh-CN: 源代码摘要) * let J = {}; * J.instanceOf = function (obj, clazz) { * return java.lang.Class.forName(clazz).isAssignableFrom(obj.getClass()); * }; */ instanceOf(obj: java.lang.Class<any>, clazz: java.lang.Class<any>): boolean; /** * @example * images.readPixels = function (path) { * let img = images.read(path); * let bitmap = img.getBitmap(); * let w = bitmap.getWidth(); * let h = bitmap.getHeight(); * let pixels = util.java.array("int", w * h); * bitmap.getPixels(pixels, 0, w, 0, 0, w, h); * img.recycle(); * return {data: pixels, width: w, height: h}; * }; * @example Source code summary (zh-CN: 源代码摘要) * let J = {}; * J.array = array; * function array(type) { * let clazz = typeToClass(type); * let args = arguments; * args[0] = clazz; * return java.lang.reflect.Array.newInstance.apply(null, args); * } * function typeToClass(type) { * if (typeof type !== 'string') { * return type; * } * if (type === 'string') { * return java.lang.String; * } * let types = { * "int": "Integer", * "long": "Long", * "double": "Double", * "char": "Character", * "byte": "Byte", * "float": "Float" * }; * return types[type] ? Packages["java.lang." + types[type]].TYPE : Packages[type]; * } */ array(type: Java.LangAbbr | java.lang.Class<any> | any, length: number): Array<java.lang.Integer | java.lang.Long | java.lang.Double | java.lang.Character | java.lang.Byte | java.lang.Float | java.lang.String | any>; /** * @example Source code summary (zh-CN: 源代码摘要) * let J = {}; * J.array = array; * function array(type) { * let clazz = typeToClass(type); * let args = arguments; * args[0] = clazz; * return java.lang.reflect.Array.newInstance.apply(null, args); * } * function typeToClass(type) { * if (typeof type !== 'string') { * return type; * } * if (type === 'string') { * return java.lang.String; * } * let types = { * "int": "Integer", * "long": "Long", * "double": "Double", * "char": "Character", * "byte": "Byte", * "float": "Float" * }; * return types[type] ? Packages["java.lang." + types[type]].TYPE : Packages[type]; * } */ array(type: Java.LangAbbr | java.lang.Class<any> | any, ...dimensions: number[]): Array<java.lang.Integer | java.lang.Long | java.lang.Double | java.lang.Character | java.lang.Byte | java.lang.Float | java.lang.String | any>; /** * @example * log(util.java.toJsArray(runtime.accessibilityBridge.windowRoots(), false).map((root) => { * return org.autojs.autojs.core.automator.UiObject.Companion.createRoot(root); * })); * @example Source code summary (zh-CN: 源代码摘要) * let J = {}; * J.toJsArray = function (list, nullListToEmptyArray) { * if (list === null || list === undefined) { * return nullListToEmptyArray ? [] : null; * } * let arr = Array(list.size()); * for (let i = 0; i < list.size(); i++) { * arr[i] = list.get(i); * } * return arr; * }; */ toJsArray(list?: java.util.List<any>, nullListToEmptyArray?: boolean): any[]; /** * @example * log(util.java.mapToObject(util.java.objectToMap({a: "A", b: "B"}))); * @example Source code summary (zh-CN: 源代码摘要) * let J = {}; * J.objectToMap = function (obj) { * if (obj === null || obj === undefined) { * return null; * } * let map = new java.util.HashMap(); * for (let key in obj) { * if (obj.hasOwnProperty(key)) { * map.put(key, obj[key]); * } * } * return map; * }; */ objectToMap(obj?: object): java.util.HashMap<any, any> | null; /** * @example * log(util.java.mapToObject(util.java.objectToMap({a: "A", b: "B"}))); * @example Source code summary (zh-CN: 源代码摘要) * let J = {}; * J.mapToObject = function (map) { * if (map === null || map === undefined) { * return null; * } * let iter = map.entrySet().iterator(); * let obj = {}; * while (iter.hasNext()) { * let entry = iter.next(); * obj[entry.key] = entry.value; * } * return obj; * }; */ mapToObject(map?: java.util.HashMap<any, any>): object | null; } namespace Java { type LangAbbr = 'int' | 'long' | 'double' | 'char' | 'byte' | 'float' | 'string'; } interface MorseCode { (text: string, timeUnit?: number): { pattern: string; code: string; getPattern(): string; getCode(): string; vibrate(delay?: number): void; toString(): string; }; getPattern(text: string): string; getCode(text: string): string; vibrate(text: string, delay?: number): void; } type VersionCodes = { [prop in VersionCodes.CodeName]: VersionCodes.Info; } & { toString(isInDetail?: VersionCodes.IsInDetail): string; /** * @example * util.versionCodes.search('R'); */ search(versionCode: VersionCodes.CodeName | string): VersionCodes.SearchResult; /** * @example * util.versionCodes.search('Android Oreo'); */ search(releaseName: string): VersionCodes.SearchResult; /** * @example * util.versionCodes.search('New York Cheesecake'); */ search(internalCodename: string): VersionCodes.SearchResult; /** * @example * util.versionCodes.search('7.1'); * util.versionCodes.search(7.1); */ search(platformVersion: string | number): VersionCodes.SearchResult; /** * @example * util.versionCodes.search(23); */ search(apiLevel: number): VersionCodes.SearchResult; /** * @example * util.versionCodes.search(new Date(2011, 5-1, 23)); */ search(releaseDate: Date): VersionCodes.SearchResult; /** * @example * util.versionCodes.search(2011); * util.versionCodes.search('2011'); */ search(releaseYear: number | string): VersionCodes.SearchResult; /** * @example * util.versionCodes.search('May 2011'); * util.versionCodes.search('May, 2011'); * util.versionCodes.search('2011/05'); * util.versionCodes.search('2011/5'); */ search(releaseMonth: string): VersionCodes.SearchResult; /** * @example * util.versionCodes.search('May 23 2011'); * util.versionCodes.search('May 23, 2011'); * util.versionCodes.search('2011/05/23'); * util.versionCodes.search('2011/5/23'); */ search(releaseDay: string): VersionCodes.SearchResult; /** * @example * util.versionCodes.search(1306080000000); * util.versionCodes.search(new Date(2011, 5-1, 23).getTime()); */ search(releaseTimestamp: number): VersionCodes.SearchResult; }; namespace VersionCodes { type CodeName = 'UPSIDE_DOWN_CAKE' | 'TIRAMISU' | 'S_V2' | 'S' | 'R' | 'Q' | 'P' | 'O_MR1' | 'O' | 'N_MR1' | 'N' | 'M' | 'LOLLIPOP_MR1' | 'LOLLIPOP' | 'KITKAT_WATCH' | 'KITKAT' | 'JELLY_BEAN_MR2' | 'JELLY_BEAN_MR1' | 'JELLY_BEAN' | 'ICE_CREAM_SANDWICH_MR1' | 'ICE_CREAM_SANDWICH' | 'HONEYCOMB_MR2' | 'HONEYCOMB_MR1' | 'HONEYCOMB' | 'GINGERBREAD_MR1' | 'GINGERBREAD' | 'FROYO' | 'ECLAIR_MR1' | 'ECLAIR_0_1' | 'ECLAIR' | 'DONUT' | 'CUPCAKE' | 'BASE_1_1' | 'BASE'; type Info = { versionCode: CodeName; releaseName: string; internalCodename: string; platformVersion: string; apiLevel: number; releaseDate: string; releaseTimestamp: number; }; type IsInDetail = boolean | 'in_detail' | 'detail'; type SearchResult = Info | Info[] | null; } interface Version { sdkInt: number; //// -=-= PENDING =-=- //// } }