@imput/youtubei.js
Version:
A JavaScript client for YouTube's private API, known as InnerTube. Fork of youtubei.js
228 lines (227 loc) • 8.71 kB
TypeScript
export declare class YTNode {
static readonly type: string;
readonly type: string;
constructor();
/**
* Check if the node is of the given type.
* @param types - The type to check
* @returns whether the node is of the given type
*/
is<T extends YTNode, K extends YTNodeConstructor<T>[]>(...types: K): this is InstanceType<K[number]>;
/**
* Cast to one of the given types.
* @param types - The types to cast to
* @returns The node cast to one of the given types
* @throws {ParsingError} If the node is not of the given type
*/
as<T extends YTNode, K extends YTNodeConstructor<T>[]>(...types: K): InstanceType<K[number]>;
/**
* Check for a key without asserting the type.
* @param key - The key to check
* @returns Whether the node has the key
*/
hasKey<T extends string, R = any>(key: T): this is this & {
[k in T]: R;
};
/**
* Assert that the node has the given key and return it.
* @param key - The key to check
* @returns The value of the key wrapped in a Maybe
* @throws {ParsingError} If the node does not have the key
*/
key<T extends string, R = any>(key: T): Maybe;
}
/**
* A wrapper class that provides type-safe access to a value.
*/
export declare class Maybe {
#private;
constructor(value: any);
get typeof(): "string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function";
string(): string;
isString(): boolean;
number(): number;
isNumber(): boolean;
bigint(): bigint;
isBigint(): boolean;
boolean(): boolean;
isBoolean(): boolean;
symbol(): symbol;
isSymbol(): boolean;
undefined(): undefined;
isUndefined(): boolean;
null(): null;
isNull(): boolean;
object(): object;
isObject(): boolean;
function(): Function;
isFunction(): boolean;
/**
* Get the value as an array.
* @returns the value as any[].
* @throws If the value is not an array.
*/
array(): any[];
/**
* More typesafe variant of {@link Maybe#array}.
* @returns a proxied array which returns all the values as {@link Maybe}.
* @throws {TypeError} If the value is not an array
*/
arrayOfMaybe(): Maybe[];
/**
* Check whether the value is an array.
* @returns whether the value is an array.
*/
isArray(): boolean;
/**
* Get the value as a YTNode.
* @returns the value as a YTNode.
* @throws If the value is not a YTNode.
*/
node(): YTNode;
/**
* Check if the value is a YTNode.
* @returns Whether the value is a YTNode.
*/
isNode(): boolean;
/**
* Get the value as a YTNode of the given type.
* @param types - The type(s) to cast to.
* @returns The node cast to the given type.
* @throws If the node is not of the given type.
*/
nodeOfType<T extends YTNode, K extends YTNodeConstructor<T>[]>(...types: K): InstanceType<K[number]>;
/**
* Check if the value is a YTNode of the given type.
* @param types - the type(s) to check.
* @returns Whether the value is a YTNode of the given type.
*/
isNodeOfType<T extends YTNode, K extends YTNodeConstructor<T>[]>(...types: K): boolean;
/**
* Get the value as an ObservedArray.
* @returns the value of the Maybe as a ObservedArray.
*/
observed(): ObservedArray<YTNode>;
/**
* Check if the value is an ObservedArray.
*/
isObserved(): any;
/**
* Get the value of the Maybe as a SuperParsedResult.
* @returns the value as a SuperParsedResult.
* @throws If the value is not a SuperParsedResult.
*/
parsed(): SuperParsedResult;
/**
* Is the result a SuperParsedResult?
*/
isParsed(): boolean;
/**
* @deprecated
* This call is not meant to be used outside of debugging. Please use the specific type getter instead.
*/
any(): any;
/**
* Get the node as an instance of the given class.
* @param type - The type to check.
* @returns the value as the given type.
* @throws If the node is not of the given type.
*/
instanceof<T extends object>(type: Constructor<T>): T;
/**
* Check if the node is an instance of the given class.
* @param type - The type to check.
* @returns Whether the node is an instance of the given type.
*/
isInstanceof<T extends object>(type: Constructor<T>): this is this & T;
}
export interface Constructor<T> {
new (...args: any[]): T;
}
export interface YTNodeConstructor<T extends YTNode = YTNode> {
new (data: any): T;
readonly type: string;
}
/**
* Represents a parsed response in an unknown state. Either a YTNode or a YTNode[] or null.
*/
export declare class SuperParsedResult<T extends YTNode = YTNode> {
#private;
constructor(result: T | ObservedArray<T> | null);
get is_null(): boolean;
get is_array(): boolean;
get is_node(): boolean;
array(): ObservedArray<T>;
item(): T;
}
/**
* An extended array type that includes additional utility methods for filtering and manipulating YTNode objects.
*/
export type ObservedArray<T extends YTNode = YTNode> = Array<T> & {
/**
* Returns the first object that matches the specified rule object.
* @param rule - An object containing properties to match against
* @param del_item - Optional flag to remove the matched item from the array
* @returns The first matching object or undefined if no match is found
*/
get: (rule: object, del_item?: boolean) => T | undefined;
/**
* Returns all objects that match the specified rule object.
* @param rule - An object containing properties to match against
* @param del_items - Optional flag to remove all matched items from the array
* @returns An array of all matching objects
*/
getAll: (rule: object, del_items?: boolean) => T[];
/**
* Returns the first object that satisfies the provided condition function.
* @param condition - A predicate function that tests each element
* @returns The first element that satisfies the condition or undefined if none found
*/
matchCondition: (condition: (node: T) => boolean) => T | undefined;
/**
* Removes the item at the specified index.
* @param index - The index of the item to remove
* @returns The modified array after removal
*/
remove: (index: number) => T[];
/**
* Filters the array to only include items of the specified YTNode types.
* @template R - Type extending YTNode
* @template K - Array of types (YTNodes)
* @param types - Rest parameter of YTNode constructor types to filter by
* @returns A new ObservedArray containing only items of the specified types
*/
filterType<R extends YTNode, K extends YTNodeConstructor<R>[]>(...types: K): ObservedArray<InstanceType<K[number]>>;
/**
* Returns the first item in the array that matches any of the specified YTNode types.
* @template R - Type extending YTNode
* @template K - Array of types (YTNodes)
* @param types - Rest parameter of YTNode constructor types to match against
* @returns The first matching item or undefined if none found
*/
firstOfType<R extends YTNode, K extends YTNodeConstructor<R>[]>(...types: K): InstanceType<K[number]> | undefined;
/**
* Returns the first item in the array.
* @returns The first item in the array
*/
first: () => T;
/**
* Similar to `filter` but with strict type checking. Filters the array to include only items of the specified types.
* @template R - Type extending YTNode
* @template K - Array of types (YTNodes)
* @param types - Rest parameter of YTNode constructor types to filter by
* @returns A new ObservedArray containing only items of the specified types
* @throws {ParsingError} If an item is not of the specified type
*/
as<R extends YTNode, K extends YTNodeConstructor<R>[]>(...types: K): ObservedArray<InstanceType<K[number]>>;
};
/**
* Creates an observed array that provides additional utility methods for array manipulation and filtering.
* @template T - Type extending YTNode
* @param obj - Array to be observed
*/
export declare function observe<T extends YTNode>(obj: Array<T>): ObservedArray<T>;
export declare class Memo extends Map<string, YTNode[]> {
getType<T extends YTNode, K extends YTNodeConstructor<T>[]>(types: K): ObservedArray<InstanceType<K[number]>>;
getType<T extends YTNode, K extends YTNodeConstructor<T>[]>(...types: K): ObservedArray<InstanceType<K[number]>>;
}