UNPKG

@np-dev/youtubei-js

Version:

A wrapper around YouTube's private API. Supports YouTube, YouTube Music, YouTube Kids and YouTube Studio (WIP).

194 lines (193 loc) 6.43 kB
export declare class YTNode { #private; 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. */ 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 If the node does not have the key */ key<T extends string, R = any>(key: T): Maybe; } 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 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 type - The type to cast to * @returns The node casted 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 type - the type 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; } export type ObservedArray<T extends YTNode = YTNode> = Array<T> & { /** * Returns the first object to match the rule. */ get: (rule: object, del_item?: boolean) => T | undefined; /** * Returns all objects that match the rule. */ getAll: (rule: object, del_items?: boolean) => T[]; /** * Returns the first object to match the condition. */ matchCondition: (condition: (node: T) => boolean) => T | undefined; /** * Removes the item at the given index. */ remove: (index: number) => T[]; /** * Get all items of a specific type */ filterType<R extends YTNode, K extends YTNodeConstructor<R>[]>(...types: K): ObservedArray<InstanceType<K[number]>>; /** * Get the first of a specific type */ firstOfType<R extends YTNode, K extends YTNodeConstructor<R>[]>(...types: K): InstanceType<K[number]> | undefined; /** * Get the first item */ first: () => T; /** * This is similar to filter but throws if there's a type mismatch. */ as<R extends YTNode, K extends YTNodeConstructor<R>[]>(...types: K): ObservedArray<InstanceType<K[number]>>; }; /** * Creates a trap to intercept property access * and add utilities to an object. */ 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]>>; }