Files
camila/node_modules/youtubei.js/bundle/cf-worker.js
T

40379 lines
1.4 MiB
Plaintext

/* eslint-disable */
var __defProp = Object.defineProperty;
var __typeError = (msg) => {
throw TypeError(msg);
};
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "access private method"), method);
var __privateWrapper = (obj, member, setter, getter) => ({
set _(value) {
__privateSet(obj, member, value, setter);
},
get _() {
return __privateGet(obj, member, getter);
}
});
// dist/src/utils/Utils.js
var Utils_exports = {};
__export(Utils_exports, {
ChannelError: () => ChannelError,
InnertubeError: () => InnertubeError,
MissingParamError: () => MissingParamError,
OAuth2Error: () => OAuth2Error,
ParsingError: () => ParsingError,
Platform: () => Platform,
PlayerError: () => PlayerError,
SessionError: () => SessionError,
base64ToU8: () => base64ToU8,
concatMemos: () => concatMemos,
debugFetch: () => debugFetch,
deepCompare: () => deepCompare,
escapeStringRegexp: () => escapeStringRegexp,
generateRandomString: () => generateRandomString,
generateSidAuth: () => generateSidAuth,
getCookie: () => getCookie,
getNsigProcessorFn: () => getNsigProcessorFn,
getRandomUserAgent: () => getRandomUserAgent,
getStringBetweenStrings: () => getStringBetweenStrings,
hasKeys: () => hasKeys,
isTextRun: () => isTextRun,
streamToIterable: () => streamToIterable,
throwIfMissing: () => throwIfMissing,
timeToSeconds: () => timeToSeconds,
u8ToBase64: () => u8ToBase64
});
// dist/src/parser/helpers.js
var helpers_exports = {};
__export(helpers_exports, {
Maybe: () => Maybe,
Memo: () => Memo,
SuperParsedResult: () => SuperParsedResult,
YTNode: () => YTNode,
observe: () => observe
});
// dist/src/utils/Log.js
var Log_exports = {};
__export(Log_exports, {
Level: () => Level,
debug: () => debug,
error: () => error,
info: () => info,
setLevel: () => setLevel,
warn: () => warn,
warnOnce: () => warnOnce
});
var YTJS_TAG = "YOUTUBEJS";
var Level = {
NONE: 0,
ERROR: 1,
WARNING: 2,
INFO: 3,
DEBUG: 4
};
var log_map = {
[Level.ERROR]: (...args) => console.error(...args),
[Level.WARNING]: (...args) => console.warn(...args),
[Level.INFO]: (...args) => console.info(...args),
[Level.DEBUG]: (...args) => console.debug(...args)
};
var log_level = [Level.WARNING];
var one_time_warnings_issued = /* @__PURE__ */ new Set();
function doLog(level, tag, args) {
if (!log_map[level] || !log_level.includes(level))
return;
const tags = [`[${YTJS_TAG}]`];
if (tag)
tags.push(`[${tag}]`);
log_map[level](`${tags.join("")}:`, ...args || []);
}
__name(doLog, "doLog");
var warnOnce = /* @__PURE__ */ __name((id, ...args) => {
if (one_time_warnings_issued.has(id))
return;
doLog(Level.WARNING, id, args);
one_time_warnings_issued.add(id);
}, "warnOnce");
var warn = /* @__PURE__ */ __name((tag, ...args) => doLog(Level.WARNING, tag, args), "warn");
var error = /* @__PURE__ */ __name((tag, ...args) => doLog(Level.ERROR, tag, args), "error");
var info = /* @__PURE__ */ __name((tag, ...args) => doLog(Level.INFO, tag, args), "info");
var debug = /* @__PURE__ */ __name((tag, ...args) => doLog(Level.DEBUG, tag, args), "debug");
function setLevel(...args) {
log_level = args;
}
__name(setLevel, "setLevel");
// dist/src/parser/helpers.js
var isObserved = Symbol("ObservedArray.isObserved");
var _YTNode = class _YTNode {
constructor() {
__publicField(this, "type");
this.type = this.constructor.type;
}
/**
* 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(...types) {
return types.some((type) => this.type === type.type);
}
/**
* 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(...types) {
if (!this.is(...types)) {
throw new ParsingError(`Cannot cast ${this.type} to one of ${types.map((t) => t.type).join(", ")}`);
}
return this;
}
/**
* Check for a key without asserting the type.
* @param key - The key to check
* @returns Whether the node has the key
*/
hasKey(key) {
return Reflect.has(this, key);
}
/**
* 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(key) {
if (!this.hasKey(key)) {
throw new ParsingError(`Missing key ${key}`);
}
return new Maybe(this[key]);
}
};
__name(_YTNode, "YTNode");
__publicField(_YTNode, "type", "YTNode");
var YTNode = _YTNode;
var MAYBE_TAG = "Maybe";
var _value, _Maybe_instances, checkPrimitive_fn, assertPrimitive_fn;
var _Maybe = class _Maybe {
constructor(value) {
__privateAdd(this, _Maybe_instances);
__privateAdd(this, _value);
__privateSet(this, _value, value);
}
get typeof() {
return typeof __privateGet(this, _value);
}
string() {
return __privateMethod(this, _Maybe_instances, assertPrimitive_fn).call(this, "string");
}
isString() {
return __privateMethod(this, _Maybe_instances, checkPrimitive_fn).call(this, "string");
}
number() {
return __privateMethod(this, _Maybe_instances, assertPrimitive_fn).call(this, "number");
}
isNumber() {
return __privateMethod(this, _Maybe_instances, checkPrimitive_fn).call(this, "number");
}
bigint() {
return __privateMethod(this, _Maybe_instances, assertPrimitive_fn).call(this, "bigint");
}
isBigint() {
return __privateMethod(this, _Maybe_instances, checkPrimitive_fn).call(this, "bigint");
}
boolean() {
return __privateMethod(this, _Maybe_instances, assertPrimitive_fn).call(this, "boolean");
}
isBoolean() {
return __privateMethod(this, _Maybe_instances, checkPrimitive_fn).call(this, "boolean");
}
symbol() {
return __privateMethod(this, _Maybe_instances, assertPrimitive_fn).call(this, "symbol");
}
isSymbol() {
return __privateMethod(this, _Maybe_instances, checkPrimitive_fn).call(this, "symbol");
}
undefined() {
return __privateMethod(this, _Maybe_instances, assertPrimitive_fn).call(this, "undefined");
}
isUndefined() {
return __privateMethod(this, _Maybe_instances, checkPrimitive_fn).call(this, "undefined");
}
null() {
if (__privateGet(this, _value) !== null)
throw new TypeError(`Expected null, got ${typeof __privateGet(this, _value)}`);
return __privateGet(this, _value);
}
isNull() {
return __privateGet(this, _value) === null;
}
object() {
return __privateMethod(this, _Maybe_instances, assertPrimitive_fn).call(this, "object");
}
isObject() {
return __privateMethod(this, _Maybe_instances, checkPrimitive_fn).call(this, "object");
}
// eslint-disable-next-line @typescript-eslint/no-unsafe-function-type
function() {
return __privateMethod(this, _Maybe_instances, assertPrimitive_fn).call(this, "function");
}
isFunction() {
return __privateMethod(this, _Maybe_instances, checkPrimitive_fn).call(this, "function");
}
/**
* Get the value as an array.
* @returns the value as any[].
* @throws If the value is not an array.
*/
array() {
if (!Array.isArray(__privateGet(this, _value))) {
throw new TypeError(`Expected array, got ${typeof __privateGet(this, _value)}`);
}
return __privateGet(this, _value);
}
/**
* 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() {
const arrayProps = [];
return new Proxy(this.array(), {
get(target, prop) {
if (Reflect.has(arrayProps, prop)) {
return Reflect.get(target, prop);
}
return new _Maybe(Reflect.get(target, prop));
}
});
}
/**
* Check whether the value is an array.
* @returns whether the value is an array.
*/
isArray() {
return Array.isArray(__privateGet(this, _value));
}
/**
* Get the value as a YTNode.
* @returns the value as a YTNode.
* @throws If the value is not a YTNode.
*/
node() {
if (!(__privateGet(this, _value) instanceof YTNode)) {
throw new TypeError(`Expected YTNode, got ${__privateGet(this, _value).constructor.name}`);
}
return __privateGet(this, _value);
}
/**
* Check if the value is a YTNode.
* @returns Whether the value is a YTNode.
*/
isNode() {
return __privateGet(this, _value) instanceof YTNode;
}
/**
* 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(...types) {
return this.node().as(...types);
}
/**
* 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(...types) {
return this.isNode() && this.node().is(...types);
}
/**
* Get the value as an ObservedArray.
* @returns the value of the Maybe as a ObservedArray.
*/
observed() {
if (!this.isObserved()) {
throw new TypeError(`Expected ObservedArray, got ${typeof __privateGet(this, _value)}`);
}
return __privateGet(this, _value);
}
/**
* Check if the value is an ObservedArray.
*/
isObserved() {
return __privateGet(this, _value)?.[isObserved];
}
/**
* Get the value of the Maybe as a SuperParsedResult.
* @returns the value as a SuperParsedResult.
* @throws If the value is not a SuperParsedResult.
*/
parsed() {
if (!(__privateGet(this, _value) instanceof SuperParsedResult)) {
throw new TypeError(`Expected SuperParsedResult, got ${typeof __privateGet(this, _value)}`);
}
return __privateGet(this, _value);
}
/**
* Is the result a SuperParsedResult?
*/
isParsed() {
return __privateGet(this, _value) instanceof SuperParsedResult;
}
/**
* @deprecated
* This call is not meant to be used outside of debugging. Please use the specific type getter instead.
*/
any() {
warn(MAYBE_TAG, "This call is not meant to be used outside of debugging. Please use the specific type getter instead.");
return __privateGet(this, _value);
}
/**
* 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(type) {
if (!this.isInstanceof(type)) {
throw new TypeError(`Expected instance of ${type.name}, got ${__privateGet(this, _value).constructor.name}`);
}
return __privateGet(this, _value);
}
/**
* 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(type) {
return __privateGet(this, _value) instanceof type;
}
};
_value = new WeakMap();
_Maybe_instances = new WeakSet();
checkPrimitive_fn = /* @__PURE__ */ __name(function(type) {
return typeof __privateGet(this, _value) === type;
}, "#checkPrimitive");
assertPrimitive_fn = /* @__PURE__ */ __name(function(type) {
if (!__privateMethod(this, _Maybe_instances, checkPrimitive_fn).call(this, type)) {
throw new TypeError(`Expected ${type}, got ${this.typeof}`);
}
return __privateGet(this, _value);
}, "#assertPrimitive");
__name(_Maybe, "Maybe");
var Maybe = _Maybe;
var _result;
var _SuperParsedResult = class _SuperParsedResult {
constructor(result) {
__privateAdd(this, _result);
__privateSet(this, _result, result);
}
get is_null() {
return __privateGet(this, _result) === null;
}
get is_array() {
return !this.is_null && Array.isArray(__privateGet(this, _result));
}
get is_node() {
return !this.is_array;
}
array() {
if (!this.is_array) {
throw new TypeError("Expected an array, got a node");
}
return __privateGet(this, _result);
}
item() {
if (!this.is_node) {
throw new TypeError("Expected a node, got an array");
}
return __privateGet(this, _result);
}
};
_result = new WeakMap();
__name(_SuperParsedResult, "SuperParsedResult");
var SuperParsedResult = _SuperParsedResult;
function observe(obj) {
return new Proxy(obj, {
get(target, prop) {
if (prop == "get") {
return (rule, del_item) => target.find((obj2, index) => {
const match = deepCompare(rule, obj2);
if (match && del_item) {
target.splice(index, 1);
}
return match;
});
}
if (prop == isObserved) {
return true;
}
if (prop == "getAll") {
return (rule, del_items) => target.filter((obj2, index) => {
const match = deepCompare(rule, obj2);
if (match && del_items) {
target.splice(index, 1);
}
return match;
});
}
if (prop == "matchCondition") {
return (condition) => target.find((obj2) => {
return condition(obj2);
});
}
if (prop == "filterType") {
return (...types) => {
return observe(target.filter((node) => {
return !!node.is(...types);
}));
};
}
if (prop == "firstOfType") {
return (...types) => {
return target.find((node) => {
return !!node.is(...types);
});
};
}
if (prop == "first") {
return () => target[0];
}
if (prop == "as") {
return (...types) => {
return observe(target.map((node) => {
if (node.is(...types))
return node;
throw new ParsingError(`Expected node of any type ${types.map((type) => type.type).join(", ")}, got ${node.type}`);
}));
};
}
if (prop == "remove") {
return (index) => target.splice(index, 1);
}
return Reflect.get(target, prop);
}
});
}
__name(observe, "observe");
var _Memo = class _Memo extends Map {
getType(...types) {
types = types.flat();
return observe(types.flatMap((type) => this.get(type.type) || []));
}
};
__name(_Memo, "Memo");
var Memo = _Memo;
// dist/src/parser/misc.js
var misc_exports = {};
__export(misc_exports, {
AccessibilityContext: () => AccessibilityContext,
AccessibilityData: () => AccessibilityData,
Author: () => Author,
ChildElement: () => ChildElement,
CommandContext: () => CommandContext,
EmojiRun: () => EmojiRun,
Format: () => Format,
RendererContext: () => RendererContext,
SubscriptionButton: () => SubscriptionButton,
Text: () => Text2,
TextRun: () => TextRun,
Thumbnail: () => Thumbnail,
VideoDetails: () => VideoDetails
});
// dist/src/parser/classes/misc/AccessibilityContext.js
var _AccessibilityContext = class _AccessibilityContext {
constructor(data) {
__publicField(this, "label");
this.label = data.label;
}
};
__name(_AccessibilityContext, "AccessibilityContext");
var AccessibilityContext = _AccessibilityContext;
// dist/src/parser/classes/misc/AccessibilityData.js
var _AccessibilityData = class _AccessibilityData {
constructor(data) {
__publicField(this, "accessibility_identifier");
__publicField(this, "identifier");
__publicField(this, "label");
if ("accessibilityIdentifier" in data) {
this.accessibility_identifier = data.accessibilityIdentifier;
}
if ("identifier" in data) {
this.identifier = {
accessibility_id_type: data.identifier.accessibilityIdType
};
}
if ("label" in data) {
this.label = data.label;
}
}
};
__name(_AccessibilityData, "AccessibilityData");
var AccessibilityData = _AccessibilityData;
// dist/src/utils/Constants.js
var Constants_exports = {};
__export(Constants_exports, {
CLIENTS: () => CLIENTS,
CLIENT_NAME_IDS: () => CLIENT_NAME_IDS,
INNERTUBE_HEADERS_BASE: () => INNERTUBE_HEADERS_BASE,
OAUTH: () => OAUTH,
STREAM_HEADERS: () => STREAM_HEADERS,
SUPPORTED_CLIENTS: () => SUPPORTED_CLIENTS,
URLS: () => URLS
});
var URLS = {
YT_BASE: "https://www.youtube.com",
YT_MUSIC_BASE: "https://music.youtube.com",
YT_SUGGESTIONS: "https://suggestqueries-clients6.youtube.com",
YT_UPLOAD: "https://upload.youtube.com/",
API: {
BASE: "https://youtubei.googleapis.com",
PRODUCTION_1: "https://www.youtube.com/youtubei/",
PRODUCTION_2: "https://youtubei.googleapis.com/youtubei/",
STAGING: "https://green-youtubei.sandbox.googleapis.com/youtubei/",
RELEASE: "https://release-youtubei.sandbox.googleapis.com/youtubei/",
TEST: "https://test-youtubei.sandbox.googleapis.com/youtubei/",
CAMI: "http://cami-youtubei.sandbox.googleapis.com/youtubei/",
UYTFE: "https://uytfe.sandbox.google.com/youtubei/"
},
GOOGLE_SEARCH_BASE: "https://www.google.com/"
};
var OAUTH = {
REGEX: {
TV_SCRIPT: new RegExp('<script\\s+id="base-js"\\s+src="([^"]+)"[^>]*><\\/script>'),
CLIENT_IDENTITY: new RegExp('clientId:"(?<client_id>[^"]+)",[^"]*?:"(?<client_secret>[^"]+)"')
}
};
var CLIENTS = {
IOS: {
NAME: "iOS",
VERSION: "20.11.6",
USER_AGENT: "com.google.ios.youtube/20.11.6 (iPhone10,4; U; CPU iOS 16_7_7 like Mac OS X)",
DEVICE_MODEL: "iPhone10,4",
OS_NAME: "iOS",
OS_VERSION: "16.7.7.20H330"
},
WEB: {
NAME: "WEB",
VERSION: "2.20260206.01.00",
API_KEY: "AIzaSyAO_FJ2SlqU8Q4STEHLGCilw_Y9_11qcW8",
API_VERSION: "v1",
STATIC_VISITOR_ID: "6zpwvWUNAco",
SUGG_EXP_ID: "ytzpb5_e2,ytpo.bo.lqp.elu=1,ytpo.bo.lqp.ecsc=1,ytpo.bo.lqp.mcsc=3,ytpo.bo.lqp.mec=1,ytpo.bo.lqp.rw=0.8,ytpo.bo.lqp.fw=0.2,ytpo.bo.lqp.szp=1,ytpo.bo.lqp.mz=3,ytpo.bo.lqp.al=en_us,ytpo.bo.lqp.zrm=1,ytpo.bo.lqp.er=1,ytpo.bo.ro.erl=1,ytpo.bo.ro.mlus=3,ytpo.bo.ro.erls=3,ytpo.bo.qfo.mlus=3,ytzprp.ppp.e=1,ytzprp.ppp.st=772,ytzprp.ppp.p=5"
},
MWEB: {
NAME: "MWEB",
VERSION: "2.20260205.04.01",
API_VERSION: "v1"
},
WEB_KIDS: {
NAME: "WEB_KIDS",
VERSION: "2.20260205.00.00"
},
YTMUSIC: {
NAME: "WEB_REMIX",
VERSION: "1.20250219.01.00"
},
ANDROID: {
NAME: "ANDROID",
VERSION: "21.03.36",
SDK_VERSION: 36,
USER_AGENT: "com.google.android.youtube/21.03.36(Linux; U; Android 16; en_US; SM-S908E Build/TP1A.220624.014) gzip"
},
ANDROID_VR: {
NAME: "ANDROID_VR",
VERSION: "1.65.10",
SDK_VERSION: 32,
DEVICE_MAKE: "Oculus",
DEVICE_MODEL: "Quest 3",
USER_AGENT: "com.google.android.apps.youtube.vr.oculus/1.65.10 (Linux; U; Android 12L; eureka-user Build/SQ3A.220605.009.A1) gzip"
},
YTSTUDIO_ANDROID: {
NAME: "ANDROID_CREATOR",
VERSION: "22.43.101"
},
YTMUSIC_ANDROID: {
NAME: "ANDROID_MUSIC",
VERSION: "5.34.51"
},
TV: {
NAME: "TVHTML5",
VERSION: "7.20260311.12.00",
USER_AGENT: "Mozilla/5.0 (ChromiumStylePlatform) Cobalt/Version"
},
TV_SIMPLY: {
NAME: "TVHTML5_SIMPLY",
VERSION: "1.0"
},
TV_EMBEDDED: {
NAME: "TVHTML5_SIMPLY_EMBEDDED_PLAYER",
VERSION: "2.0"
},
WEB_EMBEDDED: {
NAME: "WEB_EMBEDDED_PLAYER",
VERSION: "1.20260206.01.00",
API_KEY: "AIzaSyAO_FJ2SlqU8Q4STEHLGCilw_Y9_11qcW8",
API_VERSION: "v1",
STATIC_VISITOR_ID: "6zpwvWUNAco"
},
WEB_CREATOR: {
NAME: "WEB_CREATOR",
VERSION: "1.20241203.01.00",
API_KEY: "AIzaSyAO_FJ2SlqU8Q4STEHLGCilw_Y9_11qcW8",
API_VERSION: "v1",
STATIC_VISITOR_ID: "6zpwvWUNAco"
}
};
var CLIENT_NAME_IDS = {
iOS: "5",
WEB: "1",
MWEB: "2",
WEB_KIDS: "76",
WEB_REMIX: "67",
ANDROID: "3",
ANDROID_CREATOR: "14",
ANDROID_MUSIC: "21",
ANDROID_VR: "28",
TVHTML5: "7",
TVHTML5_SIMPLY: "74",
TVHTML5_SIMPLY_EMBEDDED_PLAYER: "85",
WEB_EMBEDDED_PLAYER: "56",
WEB_CREATOR: "62"
};
var STREAM_HEADERS = {
"accept": "*/*",
"origin": "https://www.youtube.com",
"referer": "https://www.youtube.com",
"DNT": "?1"
};
var INNERTUBE_HEADERS_BASE = {
"accept": "*/*",
"accept-encoding": "gzip, deflate",
"content-type": "application/json"
};
var SUPPORTED_CLIENTS = ["IOS", "WEB", "MWEB", "YTKIDS", "YTMUSIC", "ANDROID", "ANDROID_VR", "YTSTUDIO_ANDROID", "YTMUSIC_ANDROID", "TV", "TV_SIMPLY", "TV_EMBEDDED", "WEB_EMBEDDED", "WEB_CREATOR"];
// dist/src/parser/parser.js
var parser_exports = {};
__export(parser_exports, {
addRuntimeParser: () => addRuntimeParser,
applyCommentsMutations: () => applyCommentsMutations,
applyMutations: () => applyMutations,
getDynamicParsers: () => getDynamicParsers,
getParserByName: () => getParserByName,
hasParser: () => hasParser,
parse: () => parse,
parseActions: () => parseActions,
parseArray: () => parseArray,
parseC: () => parseC,
parseCommand: () => parseCommand,
parseCommands: () => parseCommands,
parseFormats: () => parseFormats,
parseItem: () => parseItem,
parseLC: () => parseLC,
parseRR: () => parseRR,
parseResponse: () => parseResponse,
sanitizeClassName: () => sanitizeClassName,
setParserErrorHandler: () => setParserErrorHandler,
shouldIgnore: () => shouldIgnore
});
// dist/src/parser/nodes.js
var nodes_exports = {};
__export(nodes_exports, {
AboutChannel: () => AboutChannel,
AboutChannelView: () => AboutChannelView,
AccountChannel: () => AccountChannel,
AccountItem: () => AccountItem,
AccountItemSection: () => AccountItemSection,
AccountItemSectionHeader: () => AccountItemSectionHeader,
AccountSectionList: () => AccountSectionList,
ActiveAccountHeader: () => ActiveAccountHeader,
AddBannerToLiveChatCommand: () => AddBannerToLiveChatCommand,
AddChatItemAction: () => AddChatItemAction,
AddLiveChatTickerItemAction: () => AddLiveChatTickerItemAction,
AddToPlaylist: () => AddToPlaylist,
AddToPlaylistCommand: () => AddToPlaylistCommand,
AddToPlaylistEndpoint: () => AddToPlaylistEndpoint,
AddToPlaylistServiceEndpoint: () => AddToPlaylistServiceEndpoint,
Alert: () => Alert,
AlertWithButton: () => AlertWithButton,
AnchoredSection: () => AnchoredSection,
AnimatedThumbnailOverlayView: () => AnimatedThumbnailOverlayView,
AppendContinuationItemsAction: () => AppendContinuationItemsAction,
AttributionView: () => AttributionView,
AudioOnlyPlayability: () => AudioOnlyPlayability,
AuthorCommentBadge: () => AuthorCommentBadge,
AutomixPreviewVideo: () => AutomixPreviewVideo,
AvatarStackView: () => AvatarStackView,
AvatarView: () => AvatarView,
BackgroundPromo: () => BackgroundPromo,
BackstageImage: () => BackstageImage,
BackstagePost: () => BackstagePost,
BackstagePostThread: () => BackstagePostThread,
BadgeView: () => BadgeView,
BrowseEndpoint: () => BrowseEndpoint,
BrowseFeedActions: () => BrowseFeedActions,
BrowserMediaSession: () => BrowserMediaSession,
BumperUserEduContentView: () => BumperUserEduContentView,
Button: () => Button,
ButtonCardView: () => ButtonCardView,
ButtonView: () => ButtonView,
C4TabbedHeader: () => C4TabbedHeader,
CallToActionButton: () => CallToActionButton,
Card: () => Card,
CardCollection: () => CardCollection,
CarouselHeader: () => CarouselHeader,
CarouselItem: () => CarouselItem,
CarouselItemView: () => CarouselItemView,
CarouselLockup: () => CarouselLockup,
CarouselTitleView: () => CarouselTitleView,
ChangeEngagementPanelVisibilityAction: () => ChangeEngagementPanelVisibilityAction,
Channel: () => Channel,
ChannelAboutFullMetadata: () => ChannelAboutFullMetadata,
ChannelAgeGate: () => ChannelAgeGate,
ChannelExternalLinkView: () => ChannelExternalLinkView,
ChannelFeaturedContent: () => ChannelFeaturedContent,
ChannelHeaderLinks: () => ChannelHeaderLinks,
ChannelHeaderLinksView: () => ChannelHeaderLinksView,
ChannelMetadata: () => ChannelMetadata,
ChannelMobileHeader: () => ChannelMobileHeader,
ChannelOptions: () => ChannelOptions,
ChannelOwnerEmptyState: () => ChannelOwnerEmptyState,
ChannelSubMenu: () => ChannelSubMenu,
ChannelSwitcherHeader: () => ChannelSwitcherHeader,
ChannelSwitcherPage: () => ChannelSwitcherPage,
ChannelTagline: () => ChannelTagline,
ChannelThumbnailWithLink: () => ChannelThumbnailWithLink,
ChannelVideoPlayer: () => ChannelVideoPlayer,
Chapter: () => Chapter,
ChildVideo: () => ChildVideo,
ChipBarView: () => ChipBarView,
ChipCloud: () => ChipCloud,
ChipCloudChip: () => ChipCloudChip,
ChipView: () => ChipView,
ClientSideToggleMenuItem: () => ClientSideToggleMenuItem,
ClipAdState: () => ClipAdState,
ClipCreation: () => ClipCreation,
ClipCreationScrubber: () => ClipCreationScrubber,
ClipCreationTextInput: () => ClipCreationTextInput,
ClipSection: () => ClipSection,
CollaboratorInfoCardContent: () => CollaboratorInfoCardContent,
CollageHeroImage: () => CollageHeroImage,
CollectionThumbnailView: () => CollectionThumbnailView,
CommandExecutorCommand: () => CommandExecutorCommand,
CommentActionButtons: () => CommentActionButtons,
CommentDialog: () => CommentDialog,
CommentReplies: () => CommentReplies,
CommentReplyDialog: () => CommentReplyDialog,
CommentSimplebox: () => CommentSimplebox,
CommentThread: () => CommentThread,
CommentView: () => CommentView,
CommentsEntryPointHeader: () => CommentsEntryPointHeader,
CommentsEntryPointTeaser: () => CommentsEntryPointTeaser,
CommentsHeader: () => CommentsHeader,
CommentsSimplebox: () => CommentsSimplebox,
CompactChannel: () => CompactChannel,
CompactLink: () => CompactLink,
CompactMix: () => CompactMix,
CompactMovie: () => CompactMovie,
CompactPlaylist: () => CompactPlaylist_default,
CompactStation: () => CompactStation,
CompactVideo: () => CompactVideo,
CompositeVideoPrimaryInfo: () => CompositeVideoPrimaryInfo,
ConfirmDialog: () => ConfirmDialog,
ContentMetadataView: () => ContentMetadataView,
ContentPreviewImageView: () => ContentPreviewImageView,
ContinuationCommand: () => ContinuationCommand,
ContinuationItem: () => ContinuationItem,
ConversationBar: () => ConversationBar,
CopyLink: () => CopyLink,
CreateCommentEndpoint: () => CreateCommentEndpoint,
CreatePlaylistDialog: () => CreatePlaylistDialog,
CreatePlaylistDialogFormView: () => CreatePlaylistDialogFormView,
CreatePlaylistServiceEndpoint: () => CreatePlaylistServiceEndpoint,
CreatorHeart: () => CreatorHeart,
CreatorHeartView: () => CreatorHeartView,
DecoratedAvatarView: () => DecoratedAvatarView,
DecoratedPlayerBar: () => DecoratedPlayerBar,
DefaultPromoPanel: () => DefaultPromoPanel,
DeletePlaylistEndpoint: () => DeletePlaylistEndpoint,
DescriptionPreviewView: () => DescriptionPreviewView,
DialogHeaderView: () => DialogHeaderView,
DialogView: () => DialogView,
DidYouMean: () => DidYouMean,
DimChatItemAction: () => DimChatItemAction,
DislikeButtonView: () => DislikeButtonView,
DismissableDialog: () => DismissableDialog,
DismissableDialogContentSection: () => DismissableDialogContentSection,
DownloadButton: () => DownloadButton,
Dropdown: () => Dropdown,
DropdownItem: () => DropdownItem,
DropdownView: () => DropdownView,
DynamicTextView: () => DynamicTextView,
Element: () => Element,
EmergencyOnebox: () => EmergencyOnebox,
EmojiPicker: () => EmojiPicker,
EmojiPickerCategory: () => EmojiPickerCategory,
EmojiPickerCategoryButton: () => EmojiPickerCategoryButton,
EmojiPickerUpsellCategory: () => EmojiPickerUpsellCategory,
EndScreenPlaylist: () => EndScreenPlaylist,
EndScreenVideo: () => EndScreenVideo,
Endscreen: () => Endscreen,
EndscreenElement: () => EndscreenElement,
EngagementPanelSectionList: () => EngagementPanelSectionList,
EngagementPanelTitleHeader: () => EngagementPanelTitleHeader,
EomSettingsDisclaimer: () => EomSettingsDisclaimer,
ExpandableMetadata: () => ExpandableMetadata,
ExpandableTab: () => ExpandableTab,
ExpandableVideoDescriptionBody: () => ExpandableVideoDescriptionBody,
ExpandedShelfContents: () => ExpandedShelfContents,
Factoid: () => Factoid,
FancyDismissibleDialog: () => FancyDismissibleDialog,
FeedFilterChipBar: () => FeedFilterChipBar,
FeedNudge: () => FeedNudge,
FeedTabbedHeader: () => FeedTabbedHeader,
FeedbackEndpoint: () => FeedbackEndpoint,
FlexibleActionsView: () => FlexibleActionsView,
Form: () => Form,
FormFooterView: () => FormFooterView,
FormPopup: () => FormPopup,
GameCard: () => GameCard,
GameDetails: () => GameDetails,
GetAccountsListInnertubeEndpoint: () => GetAccountsListInnertubeEndpoint,
GetKidsBlocklistPickerCommand: () => GetKidsBlocklistPickerCommand,
GetMultiPageMenuAction: () => GetMultiPageMenuAction,
Grid: () => Grid,
GridChannel: () => GridChannel,
GridHeader: () => GridHeader,
GridMix: () => GridMix,
GridMovie: () => GridMovie,
GridPlaylist: () => GridPlaylist,
GridShelfView: () => GridShelfView,
GridShow: () => GridShow,
GridVideo: () => GridVideo,
GuideCollapsibleEntry: () => GuideCollapsibleEntry,
GuideCollapsibleSectionEntry: () => GuideCollapsibleSectionEntry,
GuideDownloadsEntry: () => GuideDownloadsEntry,
GuideEntry: () => GuideEntry,
GuideSection: () => GuideSection,
GuideSubscriptionsSection: () => GuideSubscriptionsSection,
HashtagHeader: () => HashtagHeader,
HashtagTile: () => HashtagTile,
HeatMarker: () => HeatMarker,
Heatmap: () => Heatmap,
HeroPlaylistThumbnail: () => HeroPlaylistThumbnail,
HideEngagementPanelEndpoint: () => HideEngagementPanelEndpoint,
HighlightsCarousel: () => HighlightsCarousel,
HistorySuggestion: () => HistorySuggestion,
HorizontalCardList: () => HorizontalCardList,
HorizontalList: () => HorizontalList,
HorizontalMovieList: () => HorizontalMovieList,
HowThisWasMadeSectionView: () => HowThisWasMadeSectionView,
HypePointsFactoid: () => HypePointsFactoid,
IconLink: () => IconLink,
ImageBannerView: () => ImageBannerView,
IncludingResultsFor: () => IncludingResultsFor,
InfoPanelContainer: () => InfoPanelContainer,
InfoPanelContent: () => InfoPanelContent,
InfoRow: () => InfoRow,
InteractiveTabbedHeader: () => InteractiveTabbedHeader,
ItemSection: () => ItemSection,
ItemSectionHeader: () => ItemSectionHeader,
ItemSectionTab: () => ItemSectionTab,
ItemSectionTabbedHeader: () => ItemSectionTabbedHeader,
KidsBlocklistPicker: () => KidsBlocklistPicker,
KidsBlocklistPickerItem: () => KidsBlocklistPickerItem,
KidsCategoriesHeader: () => KidsCategoriesHeader,
KidsCategoryTab: () => KidsCategoryTab,
KidsHomeScreen: () => KidsHomeScreen,
LikeButton: () => LikeButton,
LikeButtonView: () => LikeButtonView,
LikeEndpoint: () => LikeEndpoint,
ListItemView: () => ListItemView,
ListView: () => ListView,
LiveChat: () => LiveChat,
LiveChatActionPanel: () => LiveChatActionPanel,
LiveChatAuthorBadge: () => LiveChatAuthorBadge,
LiveChatAutoModMessage: () => LiveChatAutoModMessage,
LiveChatBanner: () => LiveChatBanner,
LiveChatBannerChatSummary: () => LiveChatBannerChatSummary,
LiveChatBannerHeader: () => LiveChatBannerHeader,
LiveChatBannerPoll: () => LiveChatBannerPoll,
LiveChatBannerRedirect: () => LiveChatBannerRedirect,
LiveChatDialog: () => LiveChatDialog,
LiveChatHeader: () => LiveChatHeader,
LiveChatItemBumperView: () => LiveChatItemBumperView,
LiveChatItemContextMenuEndpoint: () => LiveChatItemContextMenuEndpoint,
LiveChatItemList: () => LiveChatItemList,
LiveChatMembershipItem: () => LiveChatMembershipItem,
LiveChatMessageInput: () => LiveChatMessageInput,
LiveChatModeChangeMessage: () => LiveChatModeChangeMessage,
LiveChatPaidMessage: () => LiveChatPaidMessage,
LiveChatPaidSticker: () => LiveChatPaidSticker,
LiveChatParticipant: () => LiveChatParticipant,
LiveChatParticipantsList: () => LiveChatParticipantsList,
LiveChatPlaceholderItem: () => LiveChatPlaceholderItem,
LiveChatProductItem: () => LiveChatProductItem,
LiveChatRestrictedParticipation: () => LiveChatRestrictedParticipation,
LiveChatSponsorshipsGiftPurchaseAnnouncement: () => LiveChatSponsorshipsGiftPurchaseAnnouncement,
LiveChatSponsorshipsGiftRedemptionAnnouncement: () => LiveChatSponsorshipsGiftRedemptionAnnouncement,
LiveChatSponsorshipsHeader: () => LiveChatSponsorshipsHeader,
LiveChatTextMessage: () => LiveChatTextMessage,
LiveChatTickerPaidMessageItem: () => LiveChatTickerPaidMessageItem,
LiveChatTickerPaidStickerItem: () => LiveChatTickerPaidStickerItem,
LiveChatTickerSponsorItem: () => LiveChatTickerSponsorItem,
LiveChatViewerEngagementMessage: () => LiveChatViewerEngagementMessage,
LockupMetadataView: () => LockupMetadataView,
LockupView: () => LockupView,
MacroMarkersInfoItem: () => MacroMarkersInfoItem,
MacroMarkersList: () => MacroMarkersList,
MacroMarkersListEntity: () => MacroMarkersListEntity,
MacroMarkersListItem: () => MacroMarkersListItem,
MarkChatItemAsDeletedAction: () => MarkChatItemAsDeletedAction,
MarkChatItemsByAuthorAsDeletedAction: () => MarkChatItemsByAuthorAsDeletedAction,
Menu: () => Menu,
MenuFlexibleItem: () => MenuFlexibleItem,
MenuNavigationItem: () => MenuNavigationItem,
MenuPopup: () => MenuPopup,
MenuServiceItem: () => MenuServiceItem,
MenuServiceItemDownload: () => MenuServiceItemDownload,
MenuTitle: () => MenuTitle,
MerchandiseItem: () => MerchandiseItem,
MerchandiseShelf: () => MerchandiseShelf,
Message: () => Message,
MetadataBadge: () => MetadataBadge,
MetadataRow: () => MetadataRow,
MetadataRowContainer: () => MetadataRowContainer,
MetadataRowHeader: () => MetadataRowHeader,
MetadataScreen: () => MetadataScreen,
MicroformatData: () => MicroformatData,
Mix: () => Mix,
MobileTopbar: () => MobileTopbar,
ModalWithTitleAndButton: () => ModalWithTitleAndButton,
ModifyChannelNotificationPreferenceEndpoint: () => ModifyChannelNotificationPreferenceEndpoint,
Movie: () => Movie,
MovingThumbnail: () => MovingThumbnail,
MultiMarkersPlayerBar: () => MultiMarkersPlayerBar,
MultiPageMenu: () => MultiPageMenu,
MultiPageMenuNotificationSection: () => MultiPageMenuNotificationSection,
MultiPageMenuSection: () => MultiPageMenuSection,
MusicCardShelf: () => MusicCardShelf,
MusicCardShelfHeaderBasic: () => MusicCardShelfHeaderBasic,
MusicCarouselShelf: () => MusicCarouselShelf,
MusicCarouselShelfBasicHeader: () => MusicCarouselShelfBasicHeader,
MusicDescriptionShelf: () => MusicDescriptionShelf,
MusicDetailHeader: () => MusicDetailHeader,
MusicDownloadStateBadge: () => MusicDownloadStateBadge,
MusicEditablePlaylistDetailHeader: () => MusicEditablePlaylistDetailHeader,
MusicElementHeader: () => MusicElementHeader,
MusicHeader: () => MusicHeader,
MusicImmersiveHeader: () => MusicImmersiveHeader,
MusicInlineBadge: () => MusicInlineBadge,
MusicItemThumbnailOverlay: () => MusicItemThumbnailOverlay,
MusicLargeCardItemCarousel: () => MusicLargeCardItemCarousel,
MusicMenuItemDivider: () => MusicMenuItemDivider,
MusicMultiRowListItem: () => MusicMultiRowListItem,
MusicMultiSelectMenu: () => MusicMultiSelectMenu,
MusicMultiSelectMenuItem: () => MusicMultiSelectMenuItem,
MusicNavigationButton: () => MusicNavigationButton,
MusicPlayButton: () => MusicPlayButton,
MusicPlaylistEditHeader: () => MusicPlaylistEditHeader,
MusicPlaylistShelf: () => MusicPlaylistShelf,
MusicQueue: () => MusicQueue,
MusicResponsiveHeader: () => MusicResponsiveHeader,
MusicResponsiveListItem: () => MusicResponsiveListItem,
MusicResponsiveListItemFixedColumn: () => MusicResponsiveListItemFixedColumn,
MusicResponsiveListItemFlexColumn: () => MusicResponsiveListItemFlexColumn,
MusicShelf: () => MusicShelf,
MusicSideAlignedItem: () => MusicSideAlignedItem,
MusicSortFilterButton: () => MusicSortFilterButton,
MusicTastebuilderShelf: () => MusicTasteBuilderShelf,
MusicTastebuilderShelfThumbnail: () => MusicTastebuilderShelfThumbnail,
MusicThumbnail: () => MusicThumbnail,
MusicTwoRowItem: () => MusicTwoRowItem,
MusicVisualHeader: () => MusicVisualHeader,
NavigationEndpoint: () => NavigationEndpoint,
Notification: () => Notification,
NotificationAction: () => NotificationAction,
OpenOnePickAddVideoModalCommand: () => OpenOnePickAddVideoModalCommand,
OpenPopupAction: () => OpenPopupAction,
PageHeader: () => PageHeader,
PageHeaderView: () => PageHeaderView,
PageIntroduction: () => PageIntroduction,
PanelFooterView: () => PanelFooterView,
PdgCommentChip: () => PdgCommentChip,
PdgReplyButtonView: () => PdgReplyButtonView,
PerformCommentActionEndpoint: () => PerformCommentActionEndpoint,
PivotBar: () => PivotBar,
PivotBarItem: () => PivotBarItem,
PivotButton: () => PivotButton,
PlayerAnnotationsExpanded: () => PlayerAnnotationsExpanded,
PlayerCaptchaView: () => PlayerCaptchaView,
PlayerCaptionsTracklist: () => PlayerCaptionsTracklist,
PlayerControlsOverlay: () => PlayerControlsOverlay,
PlayerErrorMessage: () => PlayerErrorMessage,
PlayerLegacyDesktopYpcOffer: () => PlayerLegacyDesktopYpcOffer,
PlayerLegacyDesktopYpcTrailer: () => PlayerLegacyDesktopYpcTrailer,
PlayerLiveStoryboardSpec: () => PlayerLiveStoryboardSpec,
PlayerMicroformat: () => PlayerMicroformat,
PlayerOverflow: () => PlayerOverflow,
PlayerOverlay: () => PlayerOverlay,
PlayerOverlayAutoplay: () => PlayerOverlayAutoplay,
PlayerOverlayVideoDetails: () => PlayerOverlayVideoDetails,
PlayerStoryboardSpec: () => PlayerStoryboardSpec,
Playlist: () => Playlist,
PlaylistAddToOption: () => PlaylistAddToOption,
PlaylistCustomThumbnail: () => PlaylistCustomThumbnail,
PlaylistEditEndpoint: () => PlaylistEditEndpoint,
PlaylistHeader: () => PlaylistHeader,
PlaylistInfoCardContent: () => PlaylistInfoCardContent,
PlaylistMetadata: () => PlaylistMetadata,
PlaylistPanel: () => PlaylistPanel,
PlaylistPanelVideo: () => PlaylistPanelVideo,
PlaylistPanelVideoWrapper: () => PlaylistPanelVideoWrapper,
PlaylistSidebar: () => PlaylistSidebar,
PlaylistSidebarPrimaryInfo: () => PlaylistSidebarPrimaryInfo,
PlaylistSidebarSecondaryInfo: () => PlaylistSidebarSecondaryInfo,
PlaylistThumbnailOverlay: () => PlaylistThumbnailOverlay,
PlaylistVideo: () => PlaylistVideo,
PlaylistVideoList: () => PlaylistVideoList,
PlaylistVideoThumbnail: () => PlaylistVideoThumbnail,
Poll: () => Poll,
PollHeader: () => PollHeader,
Post: () => Post,
PostMultiImage: () => PostMultiImage,
PrefetchWatchCommand: () => PrefetchWatchCommand,
PremiereTrailerBadge: () => PremiereTrailerBadge,
ProductList: () => ProductList,
ProductListHeader: () => ProductListHeader,
ProductListItem: () => ProductListItem,
ProfileColumn: () => ProfileColumn,
ProfileColumnStats: () => ProfileColumnStats,
ProfileColumnStatsEntry: () => ProfileColumnStatsEntry,
ProfileColumnUserInfo: () => ProfileColumnUserInfo,
Quiz: () => Quiz,
RecognitionShelf: () => RecognitionShelf,
ReelItem: () => ReelItem,
ReelPlayerHeader: () => ReelPlayerHeader,
ReelPlayerOverlay: () => ReelPlayerOverlay,
ReelShelf: () => ReelShelf,
ReelWatchEndpoint: () => ReelWatchEndpoint,
RelatedChipCloud: () => RelatedChipCloud,
RemoveBannerForLiveChatCommand: () => RemoveBannerForLiveChatCommand,
RemoveChatItemAction: () => RemoveChatItemAction,
RemoveChatItemByAuthorAction: () => RemoveChatItemByAuthorAction,
ReplaceChatItemAction: () => ReplaceChatItemAction,
ReplaceLiveChatAction: () => ReplaceLiveChatAction,
ReplayChatItemAction: () => ReplayChatItemAction,
RichGrid: () => RichGrid,
RichItem: () => RichItem,
RichListHeader: () => RichListHeader,
RichMetadata: () => RichMetadata,
RichMetadataRow: () => RichMetadataRow,
RichSection: () => RichSection,
RichShelf: () => RichShelf,
RunAttestationCommand: () => RunAttestationCommand,
SearchBox: () => SearchBox,
SearchEndpoint: () => SearchEndpoint,
SearchFilter: () => SearchFilter2,
SearchFilterGroup: () => SearchFilterGroup,
SearchFilterOptionsDialog: () => SearchFilterOptionsDialog,
SearchHeader: () => SearchHeader,
SearchRefinementCard: () => SearchRefinementCard,
SearchSubMenu: () => SearchSubMenu,
SearchSuggestion: () => SearchSuggestion,
SearchSuggestionsSection: () => SearchSuggestionsSection,
SecondarySearchContainer: () => SecondarySearchContainer,
SectionHeaderView: () => SectionHeaderView,
SectionList: () => SectionList,
SegmentedLikeDislikeButton: () => SegmentedLikeDislikeButton,
SegmentedLikeDislikeButtonView: () => SegmentedLikeDislikeButtonView,
SendFeedbackAction: () => SendFeedbackAction,
SettingBoolean: () => SettingBoolean,
SettingsCheckbox: () => SettingsCheckbox,
SettingsOptions: () => SettingsOptions,
SettingsSidebar: () => SettingsSidebar,
SettingsSwitch: () => SettingsSwitch,
ShareEndpoint: () => ShareEndpoint,
ShareEntityEndpoint: () => ShareEntityEndpoint,
ShareEntityServiceEndpoint: () => ShareEntityServiceEndpoint,
SharePanelHeader: () => SharePanelHeader,
SharePanelTitleV15: () => SharePanelTitleV15,
ShareTarget: () => ShareTarget,
SharedPost: () => SharedPost,
Shelf: () => Shelf,
ShortsLockupView: () => ShortsLockupView,
ShowCustomThumbnail: () => ShowCustomThumbnail,
ShowDialogCommand: () => ShowDialogCommand,
ShowEngagementPanelEndpoint: () => ShowEngagementPanelEndpoint,
ShowLiveChatActionPanelAction: () => ShowLiveChatActionPanelAction,
ShowLiveChatDialogAction: () => ShowLiveChatDialogAction,
ShowLiveChatTooltipCommand: () => ShowLiveChatTooltipCommand,
ShowingResultsFor: () => ShowingResultsFor,
SignalAction: () => SignalAction,
SignalServiceEndpoint: () => SignalServiceEndpoint,
SimpleCardContent: () => SimpleCardContent,
SimpleCardTeaser: () => SimpleCardTeaser,
SimpleMenuHeader: () => SimpleMenuHeader,
SimpleTextSection: () => SimpleTextSection,
SingleActionEmergencySupport: () => SingleActionEmergencySupport,
SingleColumnBrowseResults: () => SingleColumnBrowseResults,
SingleColumnMusicWatchNextResults: () => SingleColumnMusicWatchNextResults,
SingleHeroImage: () => SingleHeroImage,
SlimOwner: () => SlimOwner,
SlimVideoMetadata: () => SlimVideoMetadata,
SortFilterHeader: () => SortFilterHeader,
SortFilterSubMenu: () => SortFilterSubMenu,
SponsorCommentBadge: () => SponsorCommentBadge,
StartAt: () => StartAt,
StructuredDescriptionContent: () => StructuredDescriptionContent,
StructuredDescriptionPlaylistLockup: () => StructuredDescriptionPlaylistLockup,
SubFeedOption: () => SubFeedOption,
SubFeedSelector: () => SubFeedSelector,
SubscribeButton: () => SubscribeButton,
SubscribeButtonView: () => SubscribeButtonView,
SubscribeEndpoint: () => SubscribeEndpoint,
SubscriptionNotificationToggleButton: () => SubscriptionNotificationToggleButton,
Tab: () => Tab,
Tabbed: () => Tabbed,
TabbedSearchResults: () => TabbedSearchResults,
TextCarouselItemView: () => TextCarouselItemView,
TextFieldView: () => TextFieldView,
TextHeader: () => TextHeader,
ThirdPartyShareTargetSection: () => ThirdPartyShareTargetSection,
ThumbnailBadgeView: () => ThumbnailBadgeView,
ThumbnailBottomOverlayView: () => ThumbnailBottomOverlayView,
ThumbnailHoverOverlayToggleActionsView: () => ThumbnailHoverOverlayToggleActionsView,
ThumbnailHoverOverlayView: () => ThumbnailHoverOverlayView,
ThumbnailLandscapePortrait: () => ThumbnailLandscapePortrait,
ThumbnailOverlayBadgeView: () => ThumbnailOverlayBadgeView,
ThumbnailOverlayBottomPanel: () => ThumbnailOverlayBottomPanel,
ThumbnailOverlayEndorsement: () => ThumbnailOverlayEndorsement,
ThumbnailOverlayHoverText: () => ThumbnailOverlayHoverText,
ThumbnailOverlayInlineUnplayable: () => ThumbnailOverlayInlineUnplayable,
ThumbnailOverlayLoadingPreview: () => ThumbnailOverlayLoadingPreview,
ThumbnailOverlayNowPlaying: () => ThumbnailOverlayNowPlaying,
ThumbnailOverlayPinking: () => ThumbnailOverlayPinking,
ThumbnailOverlayPlaybackStatus: () => ThumbnailOverlayPlaybackStatus,
ThumbnailOverlayProgressBarView: () => ThumbnailOverlayProgressBarView,
ThumbnailOverlayResumePlayback: () => ThumbnailOverlayResumePlayback,
ThumbnailOverlaySidePanel: () => ThumbnailOverlaySidePanel,
ThumbnailOverlayTimeStatus: () => ThumbnailOverlayTimeStatus,
ThumbnailOverlayToggleButton: () => ThumbnailOverlayToggleButton,
ThumbnailView: () => ThumbnailView,
TimedMarkerDecoration: () => TimedMarkerDecoration,
TitleAndButtonListHeader: () => TitleAndButtonListHeader,
ToggleButton: () => ToggleButton,
ToggleButtonView: () => ToggleButtonView,
ToggleFormField: () => ToggleFormField,
ToggleMenuServiceItem: () => ToggleMenuServiceItem,
Tooltip: () => Tooltip,
TopbarMenuButton: () => TopbarMenuButton,
TopicChannelDetails: () => TopicChannelDetails,
Transcript: () => Transcript,
TranscriptFooter: () => TranscriptFooter,
TranscriptSearchBox: () => TranscriptSearchBox,
TranscriptSearchPanel: () => TranscriptSearchPanel,
TranscriptSectionHeader: () => TranscriptSectionHeader,
TranscriptSegment: () => TranscriptSegment,
TranscriptSegmentList: () => TranscriptSegmentList,
TwoColumnBrowseResults: () => TwoColumnBrowseResults,
TwoColumnSearchResults: () => TwoColumnSearchResults,
TwoColumnWatchNextResults: () => TwoColumnWatchNextResults,
UnifiedSharePanel: () => UnifiedSharePanel,
UniversalWatchCard: () => UniversalWatchCard,
UnsubscribeEndpoint: () => UnsubscribeEndpoint,
UpdateChannelSwitcherPageAction: () => UpdateChannelSwitcherPageAction,
UpdateDateTextAction: () => UpdateDateTextAction,
UpdateDescriptionAction: () => UpdateDescriptionAction,
UpdateEngagementPanelAction: () => UpdateEngagementPanelAction,
UpdateEngagementPanelContentCommand: () => UpdateEngagementPanelContentCommand,
UpdateLiveChatPollAction: () => UpdateLiveChatPollAction,
UpdateSubscribeButtonAction: () => UpdateSubscribeButtonAction,
UpdateTitleAction: () => UpdateTitleAction,
UpdateToggleButtonTextAction: () => UpdateToggleButtonTextAction,
UpdateViewershipAction: () => UpdateViewershipAction,
UploadTimeFactoid: () => UploadTimeFactoid,
UpsellDialog: () => UpsellDialog,
VerticalList: () => VerticalList,
VerticalWatchCardList: () => VerticalWatchCardList,
Video: () => Video,
VideoAttributeView: () => VideoAttributeView,
VideoAttributesSectionView: () => VideoAttributesSectionView,
VideoCard: () => VideoCard,
VideoDescriptionCourseSection: () => VideoDescriptionCourseSection,
VideoDescriptionHeader: () => VideoDescriptionHeader,
VideoDescriptionInfocardsSection: () => VideoDescriptionInfocardsSection,
VideoDescriptionMusicSection: () => VideoDescriptionMusicSection,
VideoDescriptionTranscriptSection: () => VideoDescriptionTranscriptSection,
VideoInfoCardContent: () => VideoInfoCardContent,
VideoMetadataCarouselView: () => VideoMetadataCarouselView,
VideoOwner: () => VideoOwner,
VideoPrimaryInfo: () => VideoPrimaryInfo,
VideoSecondaryInfo: () => VideoSecondaryInfo,
VideoSummaryContentView: () => VideoSummaryContentView,
VideoSummaryParagraphView: () => VideoSummaryParagraphView,
VideoViewCount: () => VideoViewCount,
ViewCountFactoid: () => ViewCountFactoid,
VoiceReplyContainerView: () => VoiceReplyContainerView,
WatchCardCompactVideo: () => WatchCardCompactVideo,
WatchCardHeroVideo: () => WatchCardHeroVideo,
WatchCardRichHeader: () => WatchCardRichHeader,
WatchCardSectionSequence: () => WatchCardSectionSequence,
WatchEndpoint: () => WatchEndpoint,
WatchNextEndScreen: () => WatchNextEndScreen,
WatchNextEndpoint: () => WatchNextEndpoint,
WatchNextTabbedResults: () => WatchNextTabbedResults,
YpcTrailer: () => YpcTrailer
});
// dist/src/utils/Cache.js
var _cache;
var _UniversalCache = class _UniversalCache {
constructor(persistent, persistent_directory) {
__privateAdd(this, _cache);
__privateSet(this, _cache, new Platform.shim.Cache(persistent, persistent_directory));
}
get cache_dir() {
return __privateGet(this, _cache).cache_dir;
}
get(key) {
return __privateGet(this, _cache).get(key);
}
set(key, value) {
return __privateGet(this, _cache).set(key, value);
}
remove(key) {
return __privateGet(this, _cache).remove(key);
}
};
_cache = new WeakMap();
__name(_UniversalCache, "UniversalCache");
var UniversalCache = _UniversalCache;
// dist/src/utils/EventEmitterLike.js
var _legacy_listeners;
var _EventEmitterLike = class _EventEmitterLike extends EventTarget {
constructor() {
super();
__privateAdd(this, _legacy_listeners, /* @__PURE__ */ new Map());
}
emit(type, ...args) {
const event = new Platform.shim.CustomEvent(type, { detail: args });
this.dispatchEvent(event);
}
on(type, listener) {
const wrapper = /* @__PURE__ */ __name((ev) => {
if (ev instanceof Platform.shim.CustomEvent) {
listener(...ev.detail);
} else {
listener(ev);
}
}, "wrapper");
__privateGet(this, _legacy_listeners).set(listener, wrapper);
this.addEventListener(type, wrapper);
}
once(type, listener) {
const wrapper = /* @__PURE__ */ __name((ev) => {
if (ev instanceof Platform.shim.CustomEvent) {
listener(...ev.detail);
} else {
listener(ev);
}
this.off(type, listener);
}, "wrapper");
__privateGet(this, _legacy_listeners).set(listener, wrapper);
this.addEventListener(type, wrapper);
}
off(type, listener) {
const wrapper = __privateGet(this, _legacy_listeners).get(listener);
if (wrapper) {
this.removeEventListener(type, wrapper);
__privateGet(this, _legacy_listeners).delete(listener);
}
}
};
_legacy_listeners = new WeakMap();
__name(_EventEmitterLike, "EventEmitterLike");
var EventEmitterLike = _EventEmitterLike;
// dist/src/utils/FormatUtils.js
var FormatUtils_exports = {};
__export(FormatUtils_exports, {
chooseFormat: () => chooseFormat,
download: () => download,
toDash: () => toDash
});
// dist/src/utils/DashUtils.js
var XML_CHARACTER_MAP = {
"&": "&amp;",
'"': "&quot;",
"'": "&apos;",
"<": "&lt;",
">": "&gt;"
};
function escapeXMLString(str) {
return str.replace(/([&"<>'])/g, (_, item) => {
return XML_CHARACTER_MAP[item];
});
}
__name(escapeXMLString, "escapeXMLString");
function normalizeTag(tag) {
return tag.charAt(0).toUpperCase() + tag.slice(1);
}
__name(normalizeTag, "normalizeTag");
function createElement(tagNameOrFunction, props, ...children) {
const normalizedChildren = children.flat();
if (typeof tagNameOrFunction === "function") {
return tagNameOrFunction({ ...props, children: normalizedChildren });
}
return {
type: normalizeTag(tagNameOrFunction),
props: {
...props,
children: normalizedChildren
}
};
}
__name(createElement, "createElement");
async function renderElementToString(element) {
if (typeof element === "string")
return escapeXMLString(element);
let dom = `<${element.type}`;
if (element.props) {
for (const key of Object.keys(element.props)) {
if (key !== "children" && element.props[key] !== void 0) {
dom += ` ${key}="${escapeXMLString(`${element.props[key]}`)}"`;
}
}
}
if (element.props.children) {
const children = await Promise.all((await Promise.all(element.props.children.flat())).flat().filter((child) => !!child).map((child) => renderElementToString(child)));
if (children.length > 0) {
dom += `>${children.join("")}</${element.type}>`;
return dom;
}
}
return `${dom}/>`;
}
__name(renderElementToString, "renderElementToString");
async function renderToString(root) {
const dom = await renderElementToString(await root);
return `<?xml version="1.0" encoding="utf-8"?>${dom}`;
}
__name(renderToString, "renderToString");
function Fragment(props) {
return props.children;
}
__name(Fragment, "Fragment");
// dist/src/parser/classes/PlayerStoryboardSpec.js
var _PlayerStoryboardSpec = class _PlayerStoryboardSpec extends YTNode {
constructor(data) {
super();
__publicField(this, "boards");
const parts = data.spec.split("|");
const url = new URL(parts.shift());
this.boards = parts.map((part, i) => {
const [thumbnail_width, thumbnail_height, thumbnail_count, columns, rows, interval, name, sigh] = part.split("#");
url.searchParams.set("sigh", sigh);
const storyboard_count = Math.ceil(parseInt(thumbnail_count, 10) / (parseInt(columns, 10) * parseInt(rows, 10)));
return {
type: "vod",
template_url: url.toString().replace("$L", i).replace("$N", name),
thumbnail_width: parseInt(thumbnail_width, 10),
thumbnail_height: parseInt(thumbnail_height, 10),
thumbnail_count: parseInt(thumbnail_count, 10),
interval: parseInt(interval, 10),
columns: parseInt(columns, 10),
rows: parseInt(rows, 10),
storyboard_count
};
});
}
};
__name(_PlayerStoryboardSpec, "PlayerStoryboardSpec");
__publicField(_PlayerStoryboardSpec, "type", "PlayerStoryboardSpec");
var PlayerStoryboardSpec = _PlayerStoryboardSpec;
// dist/package.json
var package_default = {
name: "youtubei.js",
version: "17.0.1",
description: "A JavaScript client for YouTube's private API, known as InnerTube.",
type: "module",
types: "./dist/src/platform/lib.d.ts",
typesVersions: {
"*": {
agnostic: [
"./dist/src/platform/lib.d.ts"
],
web: [
"./dist/src/platform/lib.d.ts"
],
"react-native": [
"./dist/src/platform/lib.d.ts"
],
"web.bundle": [
"./dist/src/platform/lib.d.ts"
],
"web.bundle.min": [
"./dist/src/platform/lib.d.ts"
],
"cf-worker": [
"./dist/src/platform/lib.d.ts"
]
}
},
exports: {
".": {
deno: "./dist/src/platform/deno.js",
node: {
import: "./dist/src/platform/node.js",
default: "./dist/src/platform/node.js"
},
types: "./dist/src/platform/lib.d.ts",
browser: "./dist/src/platform/web.js",
"react-native": "./dist/src/platform/react-native.js",
default: "./dist/src/platform/web.js"
},
"./package.json": "./package.json",
"./agnostic": {
types: "./dist/src/platform/lib.d.ts",
default: "./dist/src/platform/lib.js"
},
"./web": {
types: "./dist/src/platform/lib.d.ts",
default: "./dist/src/platform/web.js"
},
"./react-native": {
types: "./dist/src/platform/lib.d.ts",
default: "./dist/src/platform/react-native.js"
},
"./web.bundle": {
types: "./dist/src/platform/lib.d.ts",
default: "./bundle/browser.js"
},
"./cf-worker": {
types: "./dist/src/platform/lib.d.ts",
default: "./dist/src/platform/cf-worker.js"
}
},
author: "LuanRT <luan.lrt4@gmail.com> (https://github.com/LuanRT)",
funding: [
"https://github.com/sponsors/LuanRT"
],
contributors: [
"Wykerd (https://github.com/wykerd/)",
"MasterOfBob777 (https://github.com/MasterOfBob777)",
"patrickkfkan (https://github.com/patrickkfkan)",
"akkadaska (https://github.com/akkadaska)",
"Absidue (https://github.com/absidue)"
],
scripts: {
test: "vitest run --reporter verbose",
lint: "eslint ./src",
"lint:fix": "eslint --fix ./src",
"clean:source-maps": "rimraf ./bundle/browser.js.map ./bundle/cf-worker.js.map ./bundle/react-native.js.map",
"clean:build-output": "rimraf ./dist ./bundle/browser.js ./bundle/cf-worker.js ./bundle/react-native.js ./deno",
build: "npm run clean:build-output && npm run clean:source-maps && npm run build:parser-map && npm run build:esm && npm run bundle:browser && npm run bundle:cf-worker && npm run bundle:react-native",
"build:esm": "tspc",
"build:deno": `cpy ./src ./deno && cpy ./protos ./deno && esbuild ./src/utils/DashManifest.tsx --keep-names --format=esm --platform=neutral --target=es2020 --outfile=./deno/src/utils/DashManifest.js && cpy ./package.json ./deno && replace ".js';" ".ts';" ./deno -r && replace '.js";' '.ts";' ./deno -r && replace "'./DashManifest.ts';" "'./DashManifest.js';" ./deno -r && replace "'jintr';" "'jsr:@luanrt/jintr';" ./deno -r && replace "@bufbuild/protobuf/wire" "https://esm.sh/@bufbuild/protobuf@2.0.0/wire" ./deno -r`,
"build:proto": "rimraf ./protos/generated && node ./dev-scripts/generate-proto.mjs",
"build:parser-map": "node ./dev-scripts/gen-parser-map.mjs",
"bundle:browser": 'esbuild ./dist/src/platform/web.js --banner:js="/* eslint-disable */" --bundle --sourcemap --target=chrome70 --keep-names --format=esm --define:global=globalThis --conditions=module --outfile=./bundle/browser.js --platform=browser',
"bundle:react-native": "esbuild ./dist/src/platform/react-native.js --bundle --sourcemap --target=es2020 --keep-names --format=esm --platform=neutral --define:global=globalThis --conditions=module --outfile=./bundle/react-native.js",
"bundle:cf-worker": 'esbuild ./dist/src/platform/cf-worker.js --banner:js="/* eslint-disable */" --bundle --sourcemap --target=es2020 --keep-names --format=esm --define:global=globalThis --conditions=module --outfile=./bundle/cf-worker.js --platform=node',
"build:docs": "typedoc",
prepare: "npm run build",
watch: "tspc --watch"
},
repository: {
type: "git",
url: "git+https://github.com/LuanRT/YouTube.js.git"
},
files: [
"dist/",
"bundle/",
"package.json",
"README.md",
"LICENSE"
],
license: "MIT",
dependencies: {
"@bufbuild/protobuf": "^2.0.0",
meriyah: "^6.1.4"
},
devDependencies: {
"@eslint/js": "^9.37.0",
"@types/estree": "^1.0.6",
"@types/node": "^25.0.3",
"@typescript-eslint/eslint-plugin": "^8.46.0",
"@typescript-eslint/parser": "^8.46.0",
"cpy-cli": "^6.0.0",
esbuild: "^0.25.6",
eslint: "^9.37.0",
globals: "^17.0.0",
replace: "^1.2.2",
rimraf: "^6.0.1",
"ts-patch": "^3.0.2",
"ts-proto": "^2.2.0",
typedoc: "^0.28.14",
"typedoc-plugin-markdown": "^4.9.0",
typescript: "^5.9.3",
"typescript-eslint": "^8.46.0",
vitest: "^3.2.4"
},
bugs: {
url: "https://github.com/LuanRT/YouTube.js/issues"
},
homepage: "https://github.com/LuanRT/YouTube.js#readme",
keywords: [
"api",
"youtube",
"innertube",
"livechat",
"youtube-music",
"ytdl",
"youtube-studio",
"downloader",
"ytmusic"
]
};
// dist/src/utils/StreamingInfo.js
var TAG_ = "StreamingInfo";
function getFormatGroupings(formats, is_post_live_dvr) {
const group_info = /* @__PURE__ */ new Map();
const has_multiple_audio_tracks = formats.some((fmt) => !!fmt.audio_track);
for (const format of formats) {
if ((!format.index_range || !format.init_range) && !format.is_type_otf && !is_post_live_dvr) {
continue;
}
const mime_type = format.mime_type.split(";")[0];
const just_codec = getStringBetweenStrings(format.mime_type, 'codecs="', '"')?.split(".")[0];
const color_info = format.color_info ? Object.values(format.color_info).join("-") : "";
const audio_track_id = format.audio_track?.id || "";
const drc = format.is_drc ? "drc" : "";
const vb = format.is_vb ? "vb" : "";
const group_id = `${mime_type}-${just_codec}-${color_info}-${audio_track_id}-${drc}-${vb}`;
if (!group_info.has(group_id)) {
group_info.set(group_id, []);
}
group_info.get(group_id)?.push(format);
}
return {
groups: Array.from(group_info.values()),
has_multiple_audio_tracks
};
}
__name(getFormatGroupings, "getFormatGroupings");
function hoistCodecsIfPossible(formats, hoisted) {
if (formats.length > 1 && new Set(formats.map((format) => getStringBetweenStrings(format.mime_type, 'codecs="', '"'))).size === 1) {
hoisted.push("codecs");
return getStringBetweenStrings(formats[0].mime_type, 'codecs="', '"');
}
}
__name(hoistCodecsIfPossible, "hoistCodecsIfPossible");
function hoistNumberAttributeIfPossible(formats, property, hoisted) {
if (formats.length > 1 && new Set(formats.map((format) => format.fps)).size === 1) {
hoisted.push(property);
return Number(formats[0][property]);
}
}
__name(hoistNumberAttributeIfPossible, "hoistNumberAttributeIfPossible");
function hoistAudioChannelsIfPossible(formats, hoisted) {
if (formats.length > 1 && new Set(formats.map((format) => format.audio_channels || 2)).size === 1) {
hoisted.push("AudioChannelConfiguration");
return formats[0].audio_channels;
}
}
__name(hoistAudioChannelsIfPossible, "hoistAudioChannelsIfPossible");
async function getOTFSegmentTemplate(url, actions) {
const response = await actions.session.http.fetch_function(`${url}&rn=0&sq=0`, {
method: "GET",
headers: STREAM_HEADERS,
redirect: "follow"
});
const resolved_url = response.url.replace("&rn=0", "").replace("&sq=0", "");
const response_text = await response.text();
const segment_duration_strings = getStringBetweenStrings(response_text, "Segment-Durations-Ms:", "\r\n")?.split(",");
if (!segment_duration_strings) {
throw new InnertubeError("Failed to extract the segment durations from this OTF stream", { url });
}
const segment_durations = [];
for (const segment_duration_string of segment_duration_strings) {
const trimmed_segment_duration = segment_duration_string.trim();
if (trimmed_segment_duration.length === 0) {
continue;
}
let repeat_count;
const repeat_count_string = getStringBetweenStrings(trimmed_segment_duration, "(r=", ")");
if (repeat_count_string) {
repeat_count = parseInt(repeat_count_string);
}
segment_durations.push({
duration: parseInt(trimmed_segment_duration),
repeat_count
});
}
return {
init_url: `${resolved_url}&sq=0`,
media_url: `${resolved_url}&sq=$Number$`,
timeline: segment_durations
};
}
__name(getOTFSegmentTemplate, "getOTFSegmentTemplate");
async function getPostLiveDvrInfo(transformed_url, actions) {
const response = await actions.session.http.fetch_function(`${transformed_url}&rn=0&sq=0`, {
method: "HEAD",
headers: STREAM_HEADERS,
redirect: "follow"
});
const duration_ms = parseInt(response.headers.get("X-Head-Time-Millis") || "");
const segment_count = parseInt(response.headers.get("X-Head-Seqnum") || "");
if (isNaN(duration_ms) || isNaN(segment_count)) {
throw new InnertubeError("Failed to extract the duration or segment count for this Post Live DVR video");
}
return {
duration: duration_ms / 1e3,
segment_count
};
}
__name(getPostLiveDvrInfo, "getPostLiveDvrInfo");
async function getPostLiveDvrDuration(shared_post_live_dvr_info, format, url_transformer, actions, player, cpn) {
if (!shared_post_live_dvr_info.item) {
const url = new URL(await format.decipher(player));
url.searchParams.set("cpn", cpn || "");
const transformed_url = url_transformer(url).toString();
shared_post_live_dvr_info.item = await getPostLiveDvrInfo(transformed_url, actions);
}
return shared_post_live_dvr_info.item.duration;
}
__name(getPostLiveDvrDuration, "getPostLiveDvrDuration");
async function getSegmentInfo(format, url_transformer, actions, player, cpn, shared_post_live_dvr_info, is_sabr) {
let transformed_url = "";
if (is_sabr) {
const formatKey = `${format.itag || ""}:${format.xtags || ""}`;
transformed_url = `sabr://${format.has_video ? "video" : "audio"}?key=${formatKey}`;
} else {
const url = new URL(await format.decipher(player));
url.searchParams.set("cpn", cpn || "");
transformed_url = url_transformer(url).toString();
}
if (format.is_type_otf) {
if (!actions)
throw new InnertubeError("Unable to get segment durations for this OTF stream without an Actions instance", { format });
const info3 = {
is_oft: true,
is_post_live_dvr: false,
getSegmentTemplate() {
return getOTFSegmentTemplate(transformed_url, actions);
}
};
return info3;
}
if (shared_post_live_dvr_info) {
if (!actions) {
throw new InnertubeError("Unable to get segment count for this Post Live DVR video without an Actions instance", { format });
}
const target_duration_dec = format.target_duration_dec;
if (typeof target_duration_dec !== "number") {
throw new InnertubeError("Format is missing target_duration_dec", { format });
}
const info3 = {
is_oft: false,
is_post_live_dvr: true,
async getSegmentTemplate() {
if (!shared_post_live_dvr_info.item) {
shared_post_live_dvr_info.item = await getPostLiveDvrInfo(transformed_url, actions);
}
return {
media_url: `${transformed_url}&sq=$Number$`,
timeline: [
{
duration: target_duration_dec * 1e3,
repeat_count: shared_post_live_dvr_info.item.segment_count
}
]
};
}
};
return info3;
}
if (!format.index_range || !format.init_range)
throw new InnertubeError("Index and init ranges not available", { format });
const info2 = {
is_oft: false,
is_post_live_dvr: false,
base_url: transformed_url,
index_range: format.index_range,
init_range: format.init_range
};
return info2;
}
__name(getSegmentInfo, "getSegmentInfo");
async function getAudioRepresentation(format, hoisted, url_transformer, actions, player, cpn, shared_post_live_dvr_info, is_sabr) {
const uid_parts = [format.itag.toString()];
if (format.audio_track) {
uid_parts.push(format.audio_track.id);
}
if (format.is_drc) {
uid_parts.push("drc");
}
if (format.is_vb) {
uid_parts.push("vb");
}
const rep = {
uid: uid_parts.join("-"),
bitrate: format.bitrate,
codecs: !hoisted.includes("codecs") ? getStringBetweenStrings(format.mime_type, 'codecs="', '"') : void 0,
audio_sample_rate: !hoisted.includes("audio_sample_rate") ? format.audio_sample_rate : void 0,
channels: !hoisted.includes("AudioChannelConfiguration") ? format.audio_channels || 2 : void 0,
segment_info: await getSegmentInfo(format, url_transformer, actions, player, cpn, shared_post_live_dvr_info, is_sabr)
};
return rep;
}
__name(getAudioRepresentation, "getAudioRepresentation");
function getTrackRoles(format, has_drc_streams) {
if (!format.audio_track && !has_drc_streams) {
return;
}
const roles = [
format.is_original ? "main" : "alternate"
];
if (format.is_dubbed || format.is_auto_dubbed)
roles.push("dub");
if (format.is_descriptive)
roles.push("description");
if (format.is_drc || format.is_vb)
roles.push("enhanced-audio-intelligibility");
return roles;
}
__name(getTrackRoles, "getTrackRoles");
async function getAudioSet(formats, url_transformer, actions, player, cpn, shared_post_live_dvr_info, drc_labels, vb_labels, is_sabr) {
const first_format = formats[0];
const { audio_track } = first_format;
const hoisted = [];
const has_drc_streams = !!drc_labels;
const has_vb_streams = !!vb_labels;
let track_name;
if (audio_track) {
if (has_drc_streams && first_format.is_drc) {
track_name = drc_labels.label_drc_multiple(audio_track.display_name);
} else if (has_vb_streams && first_format.is_vb) {
track_name = vb_labels.label_vb_multiple(audio_track.display_name);
} else {
track_name = audio_track.display_name;
}
} else if (has_drc_streams || has_vb_streams) {
if (has_drc_streams && first_format.is_drc) {
track_name = drc_labels.label_drc;
} else if (has_vb_streams && first_format.is_vb) {
track_name = vb_labels.label_vb;
} else {
track_name = (drc_labels || vb_labels)?.label_original;
}
}
const set = {
mime_type: first_format.mime_type.split(";")[0],
language: first_format.language ?? void 0,
codecs: hoistCodecsIfPossible(formats, hoisted),
audio_sample_rate: hoistNumberAttributeIfPossible(formats, "audio_sample_rate", hoisted),
track_name,
track_roles: getTrackRoles(first_format, has_drc_streams),
channels: hoistAudioChannelsIfPossible(formats, hoisted),
drm_families: first_format.drm_families,
drm_track_type: first_format.drm_track_type,
representations: await Promise.all(formats.map((format) => getAudioRepresentation(format, hoisted, url_transformer, actions, player, cpn, shared_post_live_dvr_info, is_sabr)))
};
return set;
}
__name(getAudioSet, "getAudioSet");
var COLOR_PRIMARIES = {
BT709: "1",
BT2020: "9"
};
var COLOR_TRANSFER_CHARACTERISTICS = {
BT709: "1",
BT2020_10: "14",
SMPTEST2084: "16",
ARIB_STD_B67: "18"
};
var COLOR_MATRIX_COEFFICIENTS = {
BT709: "1",
BT2020_NCL: "14"
};
function getColorInfo(format) {
const color_info = format.color_info;
let primaries;
let transfer_characteristics;
let matrix_coefficients;
if (color_info) {
if (color_info.primaries) {
primaries = COLOR_PRIMARIES[color_info.primaries];
}
if (color_info.transfer_characteristics) {
transfer_characteristics = COLOR_TRANSFER_CHARACTERISTICS[color_info.transfer_characteristics];
}
if (color_info.matrix_coefficients) {
matrix_coefficients = COLOR_MATRIX_COEFFICIENTS[color_info.matrix_coefficients];
if (!matrix_coefficients) {
const url = new URL(format.url);
const anonymisedFormat = JSON.parse(JSON.stringify(format));
anonymisedFormat.url = "REDACTED";
anonymisedFormat.signature_cipher = "REDACTED";
anonymisedFormat.cipher = "REDACTED";
warn(TAG_, `Unknown matrix coefficients "${color_info.matrix_coefficients}". The DASH manifest is still usable without this.
Please report it at ${package_default.bugs.url} so we can add support for it.
InnerTube client: ${url.searchParams.get("c")}
format:`, anonymisedFormat);
}
}
} else if (getStringBetweenStrings(format.mime_type, 'codecs="', '"')?.startsWith("avc1")) {
transfer_characteristics = COLOR_TRANSFER_CHARACTERISTICS.BT709;
}
const info2 = {
primaries,
transfer_characteristics,
matrix_coefficients
};
return info2;
}
__name(getColorInfo, "getColorInfo");
async function getVideoRepresentation(format, url_transformer, hoisted, player, actions, cpn, shared_post_live_dvr_info, is_sabr) {
const rep = {
uid: format.itag.toString(),
bitrate: format.bitrate,
width: format.width,
height: format.height,
codecs: !hoisted.includes("codecs") ? getStringBetweenStrings(format.mime_type, 'codecs="', '"') : void 0,
fps: !hoisted.includes("fps") ? format.fps : void 0,
segment_info: await getSegmentInfo(format, url_transformer, actions, player, cpn, shared_post_live_dvr_info, is_sabr)
};
return rep;
}
__name(getVideoRepresentation, "getVideoRepresentation");
async function getVideoSet(formats, url_transformer, player, actions, cpn, shared_post_live_dvr_info, is_sabr) {
const first_format = formats[0];
const color_info = getColorInfo(first_format);
const hoisted = [];
const set = {
mime_type: first_format.mime_type.split(";")[0],
color_info,
codecs: hoistCodecsIfPossible(formats, hoisted),
fps: hoistNumberAttributeIfPossible(formats, "fps", hoisted),
drm_families: first_format.drm_families,
drm_track_type: first_format.drm_track_type,
representations: await Promise.all(formats.map((format) => getVideoRepresentation(format, url_transformer, hoisted, player, actions, cpn, shared_post_live_dvr_info, is_sabr)))
};
return set;
}
__name(getVideoSet, "getVideoSet");
function getStoryboardInfo(storyboards) {
const mime_info = /* @__PURE__ */ new Map();
const boards = storyboards.is(PlayerStoryboardSpec) ? storyboards.boards : [storyboards.board];
for (const storyboard of boards) {
const extension = new URL(storyboard.template_url).pathname.split(".").pop();
const mime_type = `image/${extension === "jpg" ? "jpeg" : extension}`;
if (!mime_info.has(mime_type)) {
mime_info.set(mime_type, []);
}
mime_info.get(mime_type)?.push(storyboard);
}
return mime_info;
}
__name(getStoryboardInfo, "getStoryboardInfo");
async function getStoryboardMimeType(actions, board, transform_url, probable_mime_type, shared_response) {
const url = board.template_url;
const req_url = transform_url(new URL(url.replace("$M", "0")));
const res_promise = shared_response.response ? shared_response.response : actions.session.http.fetch_function(req_url, {
method: "HEAD",
headers: STREAM_HEADERS
});
shared_response.response = res_promise;
const res = await res_promise;
return res.headers.get("Content-Type") || probable_mime_type;
}
__name(getStoryboardMimeType, "getStoryboardMimeType");
async function getStoryboardBitrate(actions, board, shared_response) {
const url = board.template_url;
const response_promises = [];
const request_limit = Math.min(board.type === "vod" ? board.storyboard_count : 5, 10);
for (let i = 0; i < request_limit; i++) {
const req_url = new URL(url.replace("$M", i.toString()));
const response_promise = i === 0 && shared_response.response ? shared_response.response : actions.session.http.fetch_function(req_url, {
method: "HEAD",
headers: STREAM_HEADERS
});
if (i === 0)
shared_response.response = response_promise;
response_promises.push(response_promise);
}
const responses = await Promise.all(response_promises);
const content_lengths = [];
for (const response of responses) {
content_lengths.push(parseInt(response.headers.get("Content-Length") || "0"));
}
return Math.ceil(Math.max(...content_lengths) / (board.rows * board.columns) * 8);
}
__name(getStoryboardBitrate, "getStoryboardBitrate");
function getImageRepresentation(duration, actions, board, transform_url, shared_response) {
const url = board.template_url;
const template_url = new URL(url.replace("$M", "$Number$"));
let template_duration;
if (board.type === "vod") {
template_duration = duration / board.storyboard_count;
} else {
template_duration = duration * board.columns * board.rows;
}
const rep = {
uid: `thumbnails_${board.thumbnail_width}x${board.thumbnail_height}`,
getBitrate() {
return getStoryboardBitrate(actions, board, shared_response);
},
sheet_width: board.thumbnail_width * board.columns,
sheet_height: board.thumbnail_height * board.rows,
thumbnail_height: board.thumbnail_height,
thumbnail_width: board.thumbnail_width,
rows: board.rows,
columns: board.columns,
template_duration: Math.round(template_duration),
template_url: transform_url(template_url).toString(),
getURL(n) {
return template_url.toString().replace("$Number$", n.toString());
}
};
return rep;
}
__name(getImageRepresentation, "getImageRepresentation");
function getImageSets(duration, actions, storyboards, transform_url) {
const mime_info = getStoryboardInfo(storyboards);
const shared_response = {};
return Array.from(mime_info.entries()).map(([type, boards]) => ({
probable_mime_type: type,
getMimeType() {
return getStoryboardMimeType(actions, boards[0], transform_url, type, shared_response);
},
representations: boards.map((board) => getImageRepresentation(duration, actions, board, transform_url, shared_response))
}));
}
__name(getImageSets, "getImageSets");
function getTextSets(caption_tracks, format, transform_url) {
const mime_type = format === "vtt" ? "text/vtt" : "application/ttml+xml";
return caption_tracks.map((caption_track) => {
const url = new URL(caption_track.base_url);
url.searchParams.set("fmt", format);
const track_roles = ["caption"];
if (url.searchParams.has("tlang")) {
track_roles.push("dub");
}
return {
mime_type,
language: caption_track.language_code,
track_name: caption_track.name.toString(),
track_roles,
representation: {
uid: `text-${caption_track.vss_id}`,
base_url: transform_url(url).toString()
}
};
});
}
__name(getTextSets, "getTextSets");
async function getStreamingInfo(streaming_data, is_post_live_dvr = false, url_transformer = (url) => url, format_filter, cpn, player, actions, storyboards, caption_tracks, options) {
if (!streaming_data)
throw new InnertubeError("Streaming data not available");
const formats = format_filter ? streaming_data.adaptive_formats.filter((fmt) => !format_filter(fmt)) : streaming_data.adaptive_formats;
let getDuration;
let shared_post_live_dvr_info;
if (is_post_live_dvr) {
shared_post_live_dvr_info = {};
if (!actions) {
throw new InnertubeError("Unable to get duration or segment count for this Post Live DVR video without an Actions instance");
}
getDuration = /* @__PURE__ */ __name(() => {
if (!shared_post_live_dvr_info) {
return Promise.resolve(0);
}
return getPostLiveDvrDuration(shared_post_live_dvr_info, formats[0], url_transformer, actions, player, cpn);
}, "getDuration");
} else {
const duration = formats[0].approx_duration_ms / 1e3;
getDuration = /* @__PURE__ */ __name(() => Promise.resolve(duration), "getDuration");
}
const { groups, has_multiple_audio_tracks } = getFormatGroupings(formats, is_post_live_dvr);
const { video_groups, audio_groups } = groups.reduce((acc, formats2) => {
if (formats2[0].has_audio) {
if (has_multiple_audio_tracks && !formats2[0].audio_track)
return acc;
acc.audio_groups.push(formats2);
return acc;
}
acc.video_groups.push(formats2);
return acc;
}, {
video_groups: [],
audio_groups: []
});
let drc_labels;
let vb_labels;
let hasDrc = false;
let hasVb = false;
for (const ag of audio_groups.flat()) {
if (hasDrc === false && ag.is_drc) {
hasDrc = true;
}
if (hasVb === false && ag.is_vb) {
hasVb = true;
}
}
if (hasDrc) {
drc_labels = {
label_original: options?.label_original || "Original",
label_drc: options?.label_drc || "Stable Volume",
label_drc_multiple: options?.label_drc_multiple || ((display_name) => `${display_name} (Stable Volume)`)
};
}
if (hasVb) {
vb_labels = {
label_original: options?.label_original || "Original",
label_vb: options?.label_vb || "Voice Boost",
label_vb_multiple: options?.label_vb_multiple || ((display_name) => `${display_name} (Voice Boost)`)
};
}
const audio_sets = await Promise.all(audio_groups.map((formats2) => getAudioSet(formats2, url_transformer, actions, player, cpn, shared_post_live_dvr_info, drc_labels, vb_labels, options?.is_sabr)));
const video_sets = await Promise.all(video_groups.map((formats2) => getVideoSet(formats2, url_transformer, player, actions, cpn, shared_post_live_dvr_info, options?.is_sabr)));
let image_sets = [];
if (storyboards && actions) {
let duration;
if (storyboards.is(PlayerStoryboardSpec)) {
duration = formats[0].approx_duration_ms / 1e3;
} else {
const target_duration_dec = formats[0].target_duration_dec;
if (target_duration_dec === void 0)
throw new InnertubeError("Format is missing target_duration_dec", { format: formats[0] });
duration = target_duration_dec;
}
image_sets = getImageSets(duration, actions, storyboards, url_transformer);
}
let text_sets = [];
if (caption_tracks && options?.captions_format) {
if (options.captions_format !== "vtt" && options.captions_format !== "ttml") {
throw new InnertubeError("Invalid captions format", options.captions_format);
}
text_sets = getTextSets(caption_tracks, options.captions_format, url_transformer);
}
const info2 = {
getDuration,
audio_sets,
video_sets,
image_sets,
text_sets
};
return info2;
}
__name(getStreamingInfo, "getStreamingInfo");
// dist/src/utils/DashManifest.js
async function OTFPostLiveDvrSegmentInfo({ info: info2 }) {
if (!info2.is_oft && !info2.is_post_live_dvr)
return null;
const template = await info2.getSegmentTemplate();
return createElement(
"segmentTemplate",
{ startNumber: template.init_url ? "1" : "0", timescale: "1000", initialization: template.init_url, media: template.media_url },
createElement("segmentTimeline", null, template.timeline.map((segment_duration) => createElement("s", { d: segment_duration.duration, r: segment_duration.repeat_count })))
);
}
__name(OTFPostLiveDvrSegmentInfo, "OTFPostLiveDvrSegmentInfo");
function SegmentInfo({ info: info2 }) {
if (info2.is_oft || info2.is_post_live_dvr) {
return createElement(OTFPostLiveDvrSegmentInfo, { info: info2 });
}
return createElement(
Fragment,
null,
createElement("baseURL", null, info2.base_url),
createElement(
"segmentBase",
{ indexRange: `${info2.index_range.start}-${info2.index_range.end}` },
createElement("initialization", { range: `${info2.init_range.start}-${info2.init_range.end}` })
)
);
}
__name(SegmentInfo, "SegmentInfo");
function getDrmSystemId(drm_family) {
switch (drm_family) {
case "WIDEVINE":
return "edef8ba9-79d6-4ace-a3c8-27dcd51d21ed";
case "PLAYREADY":
return "9a04f079-9840-4286-ab92-e65be0885f95";
default:
return null;
}
}
__name(getDrmSystemId, "getDrmSystemId");
async function DashManifest({ streamingData, isPostLiveDvr, transformURL, rejectFormat, cpn, player, actions, storyboards, captionTracks, options }) {
const { getDuration, audio_sets, video_sets, image_sets, text_sets } = await getStreamingInfo(streamingData, isPostLiveDvr, transformURL, rejectFormat, cpn, player, actions, storyboards, captionTracks, options);
return createElement(
"mPD",
{ xmlns: "urn:mpeg:dash:schema:mpd:2011", minBufferTime: "PT1.500S", profiles: "urn:mpeg:dash:profile:isoff-main:2011", type: "static", mediaPresentationDuration: `PT${await getDuration()}S`, "xmlns:xsi": "http://www.w3.org/2001/XMLSchema-instance", "xsi:schemaLocation": "urn:mpeg:dash:schema:mpd:2011 http://standards.iso.org/ittf/PubliclyAvailableStandards/MPEG-DASH_schema_files/DASH-MPD.xsd" },
createElement(
"period",
null,
audio_sets.map((set, index) => createElement(
"adaptationSet",
{ id: index, mimeType: set.mime_type, startWithSAP: "1", subsegmentAlignment: "true", lang: set.language, codecs: set.codecs, audioSamplingRate: set.audio_sample_rate, contentType: "audio" },
set.drm_families && set.drm_families.map((drm_family) => createElement("contentProtection", { schemeIdUri: `urn:uuid:${getDrmSystemId(drm_family)}` })),
set.track_roles && set.track_roles.map((role) => createElement("role", { schemeIdUri: "urn:mpeg:dash:role:2011", value: role })),
set.track_name && createElement("label", { id: index }, set.track_name),
set.channels && createElement("audioChannelConfiguration", { schemeIdUri: "urn:mpeg:dash:23003:3:audio_channel_configuration:2011", value: set.channels }),
set.representations.map((rep) => createElement(
"representation",
{ id: rep.uid, bandwidth: rep.bitrate, codecs: rep.codecs, audioSamplingRate: rep.audio_sample_rate },
rep.channels && createElement("audioChannelConfiguration", { schemeIdUri: "urn:mpeg:dash:23003:3:audio_channel_configuration:2011", value: rep.channels }),
createElement(SegmentInfo, { info: rep.segment_info })
))
)),
video_sets.map((set, index) => createElement(
"adaptationSet",
{ id: index + audio_sets.length, mimeType: set.mime_type, startWithSAP: "1", subsegmentAlignment: "true", codecs: set.codecs, maxPlayoutRate: "1", frameRate: set.fps, contentType: "video" },
set.drm_families && set.drm_families.map((drm_family) => createElement("contentProtection", { schemeIdUri: `urn:uuid:${getDrmSystemId(drm_family)}` })),
set.color_info.primaries && createElement("supplementalProperty", { schemeIdUri: "urn:mpeg:mpegB:cicp:ColourPrimaries", value: set.color_info.primaries }),
set.color_info.transfer_characteristics && createElement("supplementalProperty", { schemeIdUri: "urn:mpeg:mpegB:cicp:TransferCharacteristics", value: set.color_info.transfer_characteristics }),
set.color_info.matrix_coefficients && createElement("supplementalProperty", { schemeIdUri: "urn:mpeg:mpegB:cicp:MatrixCoefficients", value: set.color_info.matrix_coefficients }),
set.representations.map((rep) => createElement(
"representation",
{ id: rep.uid, bandwidth: rep.bitrate, width: rep.width, height: rep.height, codecs: rep.codecs, frameRate: rep.fps },
createElement(SegmentInfo, { info: rep.segment_info })
))
)),
image_sets.map(async (set, index) => {
return createElement("adaptationSet", { id: index + audio_sets.length + video_sets.length, mimeType: await set.getMimeType(), contentType: "image" }, set.representations.map(async (rep) => createElement(
"representation",
{ id: `thumbnails_${rep.thumbnail_width}x${rep.thumbnail_height}`, bandwidth: await rep.getBitrate(), width: rep.sheet_width, height: rep.sheet_height },
createElement("essentialProperty", { schemeIdUri: "http://dashif.org/thumbnail_tile", value: `${rep.columns}x${rep.rows}` }),
createElement("segmentTemplate", { media: rep.template_url, duration: rep.template_duration, startNumber: "0" })
)));
}),
text_sets.map((set, index) => {
return createElement(
"adaptationSet",
{ id: index + audio_sets.length + video_sets.length + image_sets.length, mimeType: set.mime_type, lang: set.language, contentType: "text" },
set.track_roles.map((role) => createElement("role", { schemeIdUri: "urn:mpeg:dash:role:2011", value: role })),
createElement("label", { id: index + audio_sets.length }, set.track_name),
createElement(
"representation",
{ id: set.representation.uid, bandwidth: "0" },
createElement("baseURL", null, set.representation.base_url)
)
);
})
)
);
}
__name(DashManifest, "DashManifest");
function toDash(streaming_data, is_post_live_dvr = false, url_transformer = (url) => url, format_filter, cpn, player, actions, storyboards, caption_tracks, options) {
if (!streaming_data)
throw new InnertubeError("Streaming data not available");
return renderToString(createElement(DashManifest, { streamingData: streaming_data, isPostLiveDvr: is_post_live_dvr, transformURL: url_transformer, options, rejectFormat: format_filter, cpn, player, actions, storyboards, captionTracks: caption_tracks }));
}
__name(toDash, "toDash");
// dist/src/utils/FormatUtils.js
async function download(options, actions, playability_status, streaming_data, player, cpn) {
if (playability_status?.status === "UNPLAYABLE")
throw new InnertubeError("Video is unplayable", { error_type: "UNPLAYABLE" });
if (playability_status?.status === "LOGIN_REQUIRED")
throw new InnertubeError("Video is login required", { error_type: "LOGIN_REQUIRED" });
if (!streaming_data)
throw new InnertubeError("Streaming data not available.", { error_type: "NO_STREAMING_DATA" });
const opts = {
quality: "360p",
type: "video+audio",
format: "mp4",
range: void 0,
...options
};
const format = chooseFormat(opts, streaming_data);
const format_url = await format.decipher(player);
if (opts.type === "video+audio" && !options.range) {
const response = await actions.session.http.fetch_function(`${format_url}&cpn=${cpn}`, {
method: "GET",
headers: STREAM_HEADERS,
redirect: "follow"
});
if (!response.ok)
throw new InnertubeError("The server responded with a non 2xx status code", { error_type: "FETCH_FAILED", response });
const body = response.body;
if (!body)
throw new InnertubeError("Could not get ReadableStream from fetch Response.", { error_type: "FETCH_FAILED", response });
return body;
}
const chunk_size = 1048576 * 10;
let chunk_start = options.range ? options.range.start : 0;
let chunk_end = options.range ? options.range.end : chunk_size;
let must_end = false;
let cancel;
return new Platform.shim.ReadableStream({
start() {
},
pull: /* @__PURE__ */ __name(async (controller) => {
if (must_end) {
controller.close();
return;
}
if (chunk_end >= (format.content_length ? format.content_length : 0) || options.range) {
must_end = true;
}
return new Promise(async (resolve, reject) => {
try {
cancel = new AbortController();
const response = await actions.session.http.fetch_function(`${format_url}&cpn=${cpn}&range=${chunk_start}-${chunk_end || ""}`, {
method: "GET",
headers: {
...STREAM_HEADERS
// XXX: use YouTube's range parameter instead of a Range header.
// Range: `bytes=${chunk_start}-${chunk_end}`
},
signal: cancel.signal
});
if (!response.ok)
throw new InnertubeError("The server responded with a non 2xx status code", {
error_type: "FETCH_FAILED",
response
});
const body = response.body;
if (!body)
throw new InnertubeError("Could not get ReadableStream from fetch Response.", {
error_type: "FETCH_FAILED",
response
});
for await (const chunk of streamToIterable(body)) {
controller.enqueue(chunk);
}
chunk_start = chunk_end + 1;
chunk_end += chunk_size;
resolve();
} catch (e) {
reject(e);
}
});
}, "pull"),
async cancel(reason) {
cancel.abort(reason);
}
}, {
highWaterMark: 1,
// TODO: better value?
size(chunk) {
return chunk.byteLength;
}
});
}
__name(download, "download");
function chooseFormat(options, streaming_data) {
if (!streaming_data)
throw new InnertubeError("Streaming data not available");
const formats = [
...streaming_data.formats || [],
...streaming_data.adaptive_formats || []
];
if (options.itag) {
const candidates2 = formats.filter((format) => format.itag === options.itag);
if (!candidates2.length)
throw new InnertubeError("No matching formats found", { options });
return candidates2[0];
}
const requires_audio = options.type ? options.type.includes("audio") : true;
const requires_video = options.type ? options.type.includes("video") : true;
const language = options.language || "original";
const quality = options.quality || "best";
let best_width = -1;
const is_best = ["best", "bestefficiency"].includes(quality);
const use_most_efficient = quality !== "best";
let candidates = formats.filter((format) => {
if (requires_audio && !format.has_audio)
return false;
if (requires_video && !format.has_video)
return false;
if (options.codec && !format.mime_type.includes(options.codec))
return false;
if (options.format !== "any" && !format.mime_type.includes(options.format || "mp4"))
return false;
if (!is_best && format.quality_label !== quality)
return false;
if (format.width && best_width < format.width)
best_width = format.width;
return true;
});
if (!candidates.length)
throw new InnertubeError("No matching formats found", { options });
if (is_best && requires_video)
candidates = candidates.filter((format) => format.width === best_width);
if (requires_audio && !requires_video) {
const audio_only = candidates.filter((format) => {
if (language !== "original") {
return !format.has_video && !format.has_text && format.language === language;
}
return !format.has_video && !format.has_text && format.is_original;
});
if (audio_only.length > 0) {
candidates = audio_only;
}
}
if (use_most_efficient) {
candidates.sort((a, b) => a.bitrate - b.bitrate);
} else {
candidates.sort((a, b) => b.bitrate - a.bitrate);
}
return candidates[0];
}
__name(chooseFormat, "chooseFormat");
// dist/src/utils/HTTPClient.js
var _session, _cookie, _fetch, _HTTPClient_instances, processJsonPayload_fn, setupCommonHeaders_fn, adjustContext_fn;
var _HTTPClient = class _HTTPClient {
constructor(session, cookie, fetch2) {
__privateAdd(this, _HTTPClient_instances);
__privateAdd(this, _session);
__privateAdd(this, _cookie);
__privateAdd(this, _fetch);
__privateSet(this, _session, session);
__privateSet(this, _cookie, cookie);
__privateSet(this, _fetch, fetch2 || Platform.shim.fetch);
}
get fetch_function() {
return __privateGet(this, _fetch);
}
async fetch(input, init) {
const session = __privateGet(this, _session);
const innertube_url = URLS.API.PRODUCTION_1 + session.api_version;
const baseURL = init?.baseURL || innertube_url;
const request_url = typeof input === "string" ? new URL(`${baseURL}${baseURL.endsWith("/") || input.startsWith("/") ? "" : "/"}${input}`) : input instanceof URL ? input : new URL(input.url, baseURL);
const headers = init?.headers || (input instanceof Platform.shim.Request ? input.headers : new Platform.shim.Headers()) || new Platform.shim.Headers();
const body = init?.body || (input instanceof Platform.shim.Request ? input.body : void 0);
const request_headers = new Platform.shim.Headers(headers);
__privateMethod(this, _HTTPClient_instances, setupCommonHeaders_fn).call(this, request_headers, session, request_url);
request_url.searchParams.set("prettyPrint", "false");
request_url.searchParams.set("alt", "json");
const content_type = request_headers.get("Content-Type");
let request_body = body;
let is_web_kids = false;
const is_innertube_req = baseURL === innertube_url || baseURL === URLS.YT_UPLOAD;
if (content_type === "application/json" && is_innertube_req && typeof body === "string") {
const { newBody, isWebKids: processedIsWebKids, clientVersion: processedClientVersion, clientNameId: processedClientNameId, adjustedClientName } = __privateMethod(this, _HTTPClient_instances, processJsonPayload_fn).call(this, body, session);
request_body = newBody;
is_web_kids = processedIsWebKids;
if (processedClientVersion) {
request_headers.set("X-Youtube-Client-Version", processedClientVersion);
}
if (processedClientNameId) {
request_headers.set("X-Youtube-Client-Name", processedClientNameId);
}
if (adjustedClientName === CLIENTS.ANDROID.NAME || adjustedClientName === CLIENTS.YTMUSIC_ANDROID.NAME) {
request_headers.set("User-Agent", CLIENTS.ANDROID.USER_AGENT);
request_headers.set("X-GOOG-API-FORMAT-VERSION", "2");
} else if (adjustedClientName === CLIENTS.IOS.NAME) {
request_headers.set("User-Agent", CLIENTS.IOS.USER_AGENT);
}
} else if (content_type === "application/x-protobuf") {
if (Platform.shim.server) {
request_headers.set("User-Agent", CLIENTS.ANDROID.USER_AGENT);
request_headers.set("X-GOOG-API-FORMAT-VERSION", "2");
request_headers.delete("X-Youtube-Client-Version");
}
}
if (session.logged_in && is_innertube_req && !is_web_kids) {
const oauth = session.oauth;
if (oauth.oauth2_tokens) {
if (oauth.shouldRefreshToken()) {
await oauth.refreshAccessToken();
}
request_headers.set("Authorization", `Bearer ${oauth.oauth2_tokens.access_token}`);
}
const cookie = __privateGet(this, _cookie);
if (cookie) {
const sapisid = getCookie(cookie, "SAPISID");
if (sapisid) {
request_headers.set("Authorization", await generateSidAuth(sapisid));
request_headers.set("X-Goog-Authuser", session.account_index.toString());
if (session.context.user.onBehalfOfUser)
request_headers.set("X-Goog-PageId", session.context.user.onBehalfOfUser);
}
request_headers.set("Cookie", cookie);
}
}
const request = new Platform.shim.Request(request_url, input instanceof Platform.shim.Request ? input : init);
const response = await __privateGet(this, _fetch).call(this, request, {
body: request_body,
headers: request_headers,
redirect: input instanceof Platform.shim.Request ? input.redirect : init?.redirect || "follow",
...Platform.shim.runtime !== "cf-worker" ? { credentials: "include" } : {}
});
if (response.ok) {
return response;
}
throw new InnertubeError(`Request to ${response.url} failed with status code ${response.status}`, await response.text());
}
};
_session = new WeakMap();
_cookie = new WeakMap();
_fetch = new WeakMap();
_HTTPClient_instances = new WeakSet();
processJsonPayload_fn = /* @__PURE__ */ __name(function(json_body, session) {
const parsed_payload = JSON.parse(json_body);
const adjusted_context = JSON.parse(JSON.stringify(session.context));
__privateMethod(this, _HTTPClient_instances, adjustContext_fn).call(this, adjusted_context, parsed_payload.client);
const new_payload = {
...parsed_payload,
context: adjusted_context
};
const clientVersion = new_payload.context.client.clientVersion;
const clientNameFromAdjustedContext = new_payload.context.client.clientName;
const clientNameId = CLIENT_NAME_IDS[clientNameFromAdjustedContext];
delete new_payload.client;
const isWebKids = new_payload.context.client.clientName === CLIENTS.WEB_KIDS.NAME;
return {
newBody: JSON.stringify(new_payload),
isWebKids,
clientVersion,
clientNameId,
adjustedClientName: new_payload.context.client.clientName
};
}, "#processJsonPayload");
setupCommonHeaders_fn = /* @__PURE__ */ __name(function(request_headers, session, request_url) {
request_headers.set("Accept", "*/*");
request_headers.set("Accept-Language", "*");
request_headers.set("X-Goog-Visitor-Id", session.context.client.visitorData || "");
request_headers.set("X-Youtube-Client-Version", session.context.client.clientVersion || "");
const client_name_id = CLIENT_NAME_IDS[session.context.client.clientName];
if (client_name_id) {
request_headers.set("X-Youtube-Client-Name", client_name_id);
}
if (Platform.shim.server) {
request_headers.set("User-Agent", session.user_agent || "");
request_headers.set("Origin", request_url.origin);
}
}, "#setupCommonHeaders");
adjustContext_fn = /* @__PURE__ */ __name(function(ctx, client) {
if (!client)
return;
const clientName = client.toUpperCase();
if (!SUPPORTED_CLIENTS.includes(clientName)) {
throw new InnertubeError(`Invalid client: ${client}`, {
available_innertube_clients: SUPPORTED_CLIENTS
});
}
if (clientName !== "WEB") {
delete ctx.client.configInfo;
}
if (clientName === "ANDROID" || clientName === "YTMUSIC_ANDROID" || clientName === "YTSTUDIO_ANDROID") {
ctx.client.androidSdkVersion = CLIENTS.ANDROID.SDK_VERSION;
ctx.client.userAgent = CLIENTS.ANDROID.USER_AGENT;
ctx.client.osName = "Android";
ctx.client.osVersion = "13";
ctx.client.platform = "MOBILE";
}
switch (clientName) {
case "MWEB":
ctx.client.clientVersion = CLIENTS.MWEB.VERSION;
ctx.client.clientName = CLIENTS.MWEB.NAME;
ctx.client.clientFormFactor = "SMALL_FORM_FACTOR";
ctx.client.platform = "MOBILE";
break;
case "IOS":
ctx.client.deviceMake = "Apple";
ctx.client.deviceModel = CLIENTS.IOS.DEVICE_MODEL;
ctx.client.clientVersion = CLIENTS.IOS.VERSION;
ctx.client.clientName = CLIENTS.IOS.NAME;
ctx.client.platform = "MOBILE";
ctx.client.osName = CLIENTS.IOS.OS_NAME;
ctx.client.osVersion = CLIENTS.IOS.OS_VERSION;
delete ctx.client.browserName;
delete ctx.client.browserVersion;
break;
case "YTMUSIC":
ctx.client.clientVersion = CLIENTS.YTMUSIC.VERSION;
ctx.client.clientName = CLIENTS.YTMUSIC.NAME;
break;
case "ANDROID":
ctx.client.clientVersion = CLIENTS.ANDROID.VERSION;
ctx.client.clientFormFactor = "SMALL_FORM_FACTOR";
ctx.client.clientName = CLIENTS.ANDROID.NAME;
break;
case "ANDROID_VR":
ctx.client.androidSdkVersion = 32;
ctx.client.osName = "Android";
ctx.client.osVersion = "12L";
ctx.client.platform = "MOBILE";
ctx.client.userAgent = CLIENTS.ANDROID_VR.USER_AGENT;
ctx.client.deviceMake = CLIENTS.ANDROID_VR.DEVICE_MAKE;
ctx.client.deviceModel = CLIENTS.ANDROID_VR.DEVICE_MODEL;
ctx.client.clientVersion = CLIENTS.ANDROID_VR.VERSION;
ctx.client.clientFormFactor = "SMALL_FORM_FACTOR";
ctx.client.clientName = CLIENTS.ANDROID_VR.NAME;
break;
case "YTMUSIC_ANDROID":
ctx.client.clientVersion = CLIENTS.YTMUSIC_ANDROID.VERSION;
ctx.client.clientFormFactor = "SMALL_FORM_FACTOR";
ctx.client.clientName = CLIENTS.YTMUSIC_ANDROID.NAME;
break;
case "YTSTUDIO_ANDROID":
ctx.client.clientVersion = CLIENTS.YTSTUDIO_ANDROID.VERSION;
ctx.client.clientFormFactor = "SMALL_FORM_FACTOR";
ctx.client.clientName = CLIENTS.YTSTUDIO_ANDROID.NAME;
break;
case "TV":
ctx.client.clientVersion = CLIENTS.TV.VERSION;
ctx.client.clientName = CLIENTS.TV.NAME;
ctx.client.userAgent = CLIENTS.TV.USER_AGENT;
break;
case "TV_SIMPLY":
ctx.client.clientVersion = CLIENTS.TV_SIMPLY.VERSION;
ctx.client.clientName = CLIENTS.TV_SIMPLY.NAME;
break;
case "TV_EMBEDDED":
ctx.client.clientName = CLIENTS.TV_EMBEDDED.NAME;
ctx.client.clientVersion = CLIENTS.TV_EMBEDDED.VERSION;
ctx.client.clientScreen = "EMBED";
ctx.thirdParty = { embedUrl: URLS.YT_BASE };
break;
case "YTKIDS":
ctx.client.clientVersion = CLIENTS.WEB_KIDS.VERSION;
ctx.client.clientName = CLIENTS.WEB_KIDS.NAME;
ctx.client.kidsAppInfo = {
categorySettings: {
enabledCategories: [
"approved_for_you",
"black_joy",
"camp",
"collections",
"earth",
"explore",
"favorites",
"gaming",
"halloween",
"hero",
"learning",
"move",
"music",
"reading",
"shared_by_parents",
"shows",
"soccer",
"sports",
"spotlight",
"winter"
]
},
contentSettings: {
corpusPreference: "KIDS_CORPUS_PREFERENCE_YOUNGER",
kidsNoSearchMode: "YT_KIDS_NO_SEARCH_MODE_OFF"
}
};
break;
case "WEB_EMBEDDED":
ctx.client.clientName = CLIENTS.WEB_EMBEDDED.NAME;
ctx.client.clientVersion = CLIENTS.WEB_EMBEDDED.VERSION;
ctx.client.clientScreen = "EMBED";
ctx.thirdParty = { embedUrl: URLS.GOOGLE_SEARCH_BASE };
break;
case "WEB_CREATOR":
ctx.client.clientName = CLIENTS.WEB_CREATOR.NAME;
ctx.client.clientVersion = CLIENTS.WEB_CREATOR.VERSION;
break;
default:
break;
}
}, "#adjustContext");
__name(_HTTPClient, "HTTPClient");
var HTTPClient = _HTTPClient;
// dist/src/utils/LZW.js
var LZW_exports = {};
__export(LZW_exports, {
compress: () => compress,
decompress: () => decompress
});
function compress(input) {
const output = [];
const dictionary = {};
for (let i = 0; i < 256; i++) {
dictionary[String.fromCharCode(i)] = i;
}
let current_string = "";
let dictionary_size = 256;
for (let i = 0; i < input.length; i++) {
const current_char = input[i];
const combined_string = current_string + current_char;
if (dictionary.hasOwnProperty(combined_string)) {
current_string = combined_string;
} else {
output.push(dictionary[current_string]);
dictionary[combined_string] = dictionary_size++;
current_string = current_char;
}
}
if (current_string !== "") {
output.push(dictionary[current_string]);
}
return output.map((code) => String.fromCharCode(code)).join("");
}
__name(compress, "compress");
function decompress(input) {
const dictionary = {};
const input_data = input.split("");
const output = [input_data.shift()];
const input_length = input_data.length >>> 0;
let dictionary_code = 256;
let current_char = output[0];
let current_string = current_char;
for (let i = 0; i < input_length; ++i) {
const current_code = input_data[i].charCodeAt(0);
const entry = current_code < 256 ? input_data[i] : dictionary[current_code] ? dictionary[current_code] : current_string + current_char;
output.push(entry);
current_char = entry.charAt(0);
dictionary[dictionary_code++] = current_string + current_char;
current_string = entry;
}
return output.join("");
}
__name(decompress, "decompress");
// dist/src/utils/BinarySerializer.js
var BinarySerializer_exports = {};
__export(BinarySerializer_exports, {
MAGIC_HEADER: () => MAGIC_HEADER,
VERSION: () => VERSION,
deserialize: () => deserialize,
serialize: () => serialize
});
var MAGIC_HEADER = 5849684;
var VERSION = 1;
function serialize(data) {
const json_str = JSON.stringify(data);
const compressed = compress(json_str);
const compressed_bytes = new TextEncoder().encode(compressed);
const buffer = new ArrayBuffer(12 + compressed_bytes.byteLength);
const view = new DataView(buffer);
view.setUint32(0, MAGIC_HEADER, true);
view.setUint32(4, VERSION, true);
view.setUint32(8, compressed_bytes.byteLength, true);
new Uint8Array(buffer).set(compressed_bytes, 12);
return buffer;
}
__name(serialize, "serialize");
function deserialize(buffer) {
if (buffer.byteLength < 12)
throw new Error("Invalid binary format: buffer too short");
const view = new DataView(buffer.buffer, buffer.byteOffset);
const magic = view.getUint32(0, true);
if (magic !== MAGIC_HEADER) {
throw new Error("Invalid binary format: magic header mismatch");
}
const version = view.getUint32(4, true);
if (version !== VERSION) {
throw new Error(`Unsupported binary format version: ${version}`);
}
const data_length = view.getUint32(8, true);
const compressed_data = buffer.slice(12, 12 + data_length);
const compressed = new TextDecoder().decode(compressed_data);
const json_str = decompress(compressed);
return JSON.parse(json_str);
}
__name(deserialize, "deserialize");
// dist/src/utils/ProtoUtils.js
var ProtoUtils_exports = {};
__export(ProtoUtils_exports, {
decodeVisitorData: () => decodeVisitorData,
encodeCommentActionParams: () => encodeCommentActionParams,
encodeNextParams: () => encodeNextParams,
encodeVisitorData: () => encodeVisitorData
});
// node_modules/@bufbuild/protobuf/dist/esm/wire/varint.js
function varint64read() {
let lowBits = 0;
let highBits = 0;
for (let shift = 0; shift < 28; shift += 7) {
let b = this.buf[this.pos++];
lowBits |= (b & 127) << shift;
if ((b & 128) == 0) {
this.assertBounds();
return [lowBits, highBits];
}
}
let middleByte = this.buf[this.pos++];
lowBits |= (middleByte & 15) << 28;
highBits = (middleByte & 112) >> 4;
if ((middleByte & 128) == 0) {
this.assertBounds();
return [lowBits, highBits];
}
for (let shift = 3; shift <= 31; shift += 7) {
let b = this.buf[this.pos++];
highBits |= (b & 127) << shift;
if ((b & 128) == 0) {
this.assertBounds();
return [lowBits, highBits];
}
}
throw new Error("invalid varint");
}
__name(varint64read, "varint64read");
function varint64write(lo, hi, bytes) {
for (let i = 0; i < 28; i = i + 7) {
const shift = lo >>> i;
const hasNext = !(shift >>> 7 == 0 && hi == 0);
const byte = (hasNext ? shift | 128 : shift) & 255;
bytes.push(byte);
if (!hasNext) {
return;
}
}
const splitBits = lo >>> 28 & 15 | (hi & 7) << 4;
const hasMoreBits = !(hi >> 3 == 0);
bytes.push((hasMoreBits ? splitBits | 128 : splitBits) & 255);
if (!hasMoreBits) {
return;
}
for (let i = 3; i < 31; i = i + 7) {
const shift = hi >>> i;
const hasNext = !(shift >>> 7 == 0);
const byte = (hasNext ? shift | 128 : shift) & 255;
bytes.push(byte);
if (!hasNext) {
return;
}
}
bytes.push(hi >>> 31 & 1);
}
__name(varint64write, "varint64write");
var TWO_PWR_32_DBL = 4294967296;
function int64FromString(dec) {
const minus = dec[0] === "-";
if (minus) {
dec = dec.slice(1);
}
const base = 1e6;
let lowBits = 0;
let highBits = 0;
function add1e6digit(begin, end) {
const digit1e6 = Number(dec.slice(begin, end));
highBits *= base;
lowBits = lowBits * base + digit1e6;
if (lowBits >= TWO_PWR_32_DBL) {
highBits = highBits + (lowBits / TWO_PWR_32_DBL | 0);
lowBits = lowBits % TWO_PWR_32_DBL;
}
}
__name(add1e6digit, "add1e6digit");
add1e6digit(-24, -18);
add1e6digit(-18, -12);
add1e6digit(-12, -6);
add1e6digit(-6);
return minus ? negate(lowBits, highBits) : newBits(lowBits, highBits);
}
__name(int64FromString, "int64FromString");
function int64ToString(lo, hi) {
let bits = newBits(lo, hi);
const negative = bits.hi & 2147483648;
if (negative) {
bits = negate(bits.lo, bits.hi);
}
const result = uInt64ToString(bits.lo, bits.hi);
return negative ? "-" + result : result;
}
__name(int64ToString, "int64ToString");
function uInt64ToString(lo, hi) {
({ lo, hi } = toUnsigned(lo, hi));
if (hi <= 2097151) {
return String(TWO_PWR_32_DBL * hi + lo);
}
const low = lo & 16777215;
const mid = (lo >>> 24 | hi << 8) & 16777215;
const high = hi >> 16 & 65535;
let digitA = low + mid * 6777216 + high * 6710656;
let digitB = mid + high * 8147497;
let digitC = high * 2;
const base = 1e7;
if (digitA >= base) {
digitB += Math.floor(digitA / base);
digitA %= base;
}
if (digitB >= base) {
digitC += Math.floor(digitB / base);
digitB %= base;
}
return digitC.toString() + decimalFrom1e7WithLeadingZeros(digitB) + decimalFrom1e7WithLeadingZeros(digitA);
}
__name(uInt64ToString, "uInt64ToString");
function toUnsigned(lo, hi) {
return { lo: lo >>> 0, hi: hi >>> 0 };
}
__name(toUnsigned, "toUnsigned");
function newBits(lo, hi) {
return { lo: lo | 0, hi: hi | 0 };
}
__name(newBits, "newBits");
function negate(lowBits, highBits) {
highBits = ~highBits;
if (lowBits) {
lowBits = ~lowBits + 1;
} else {
highBits += 1;
}
return newBits(lowBits, highBits);
}
__name(negate, "negate");
var decimalFrom1e7WithLeadingZeros = /* @__PURE__ */ __name((digit1e7) => {
const partial = String(digit1e7);
return "0000000".slice(partial.length) + partial;
}, "decimalFrom1e7WithLeadingZeros");
function varint32write(value, bytes) {
if (value >= 0) {
while (value > 127) {
bytes.push(value & 127 | 128);
value = value >>> 7;
}
bytes.push(value);
} else {
for (let i = 0; i < 9; i++) {
bytes.push(value & 127 | 128);
value = value >> 7;
}
bytes.push(1);
}
}
__name(varint32write, "varint32write");
function varint32read() {
let b = this.buf[this.pos++];
let result = b & 127;
if ((b & 128) == 0) {
this.assertBounds();
return result;
}
b = this.buf[this.pos++];
result |= (b & 127) << 7;
if ((b & 128) == 0) {
this.assertBounds();
return result;
}
b = this.buf[this.pos++];
result |= (b & 127) << 14;
if ((b & 128) == 0) {
this.assertBounds();
return result;
}
b = this.buf[this.pos++];
result |= (b & 127) << 21;
if ((b & 128) == 0) {
this.assertBounds();
return result;
}
b = this.buf[this.pos++];
result |= (b & 15) << 28;
for (let readBytes = 5; (b & 128) !== 0 && readBytes < 10; readBytes++)
b = this.buf[this.pos++];
if ((b & 128) != 0)
throw new Error("invalid varint");
this.assertBounds();
return result >>> 0;
}
__name(varint32read, "varint32read");
// node_modules/@bufbuild/protobuf/dist/esm/proto-int64.js
var protoInt64 = /* @__PURE__ */ makeInt64Support();
function makeInt64Support() {
const dv = new DataView(new ArrayBuffer(8));
const ok = typeof BigInt === "function" && typeof dv.getBigInt64 === "function" && typeof dv.getBigUint64 === "function" && typeof dv.setBigInt64 === "function" && typeof dv.setBigUint64 === "function" && (!!globalThis.Deno || typeof process != "object" || typeof process.env != "object" || process.env.BUF_BIGINT_DISABLE !== "1");
if (ok) {
const MIN = BigInt("-9223372036854775808");
const MAX = BigInt("9223372036854775807");
const UMIN = BigInt("0");
const UMAX = BigInt("18446744073709551615");
return {
zero: BigInt(0),
supported: true,
parse(value) {
const bi = typeof value == "bigint" ? value : BigInt(value);
if (bi > MAX || bi < MIN) {
throw new Error(`invalid int64: ${value}`);
}
return bi;
},
uParse(value) {
const bi = typeof value == "bigint" ? value : BigInt(value);
if (bi > UMAX || bi < UMIN) {
throw new Error(`invalid uint64: ${value}`);
}
return bi;
},
enc(value) {
dv.setBigInt64(0, this.parse(value), true);
return {
lo: dv.getInt32(0, true),
hi: dv.getInt32(4, true)
};
},
uEnc(value) {
dv.setBigInt64(0, this.uParse(value), true);
return {
lo: dv.getInt32(0, true),
hi: dv.getInt32(4, true)
};
},
dec(lo, hi) {
dv.setInt32(0, lo, true);
dv.setInt32(4, hi, true);
return dv.getBigInt64(0, true);
},
uDec(lo, hi) {
dv.setInt32(0, lo, true);
dv.setInt32(4, hi, true);
return dv.getBigUint64(0, true);
}
};
}
return {
zero: "0",
supported: false,
parse(value) {
if (typeof value != "string") {
value = value.toString();
}
assertInt64String(value);
return value;
},
uParse(value) {
if (typeof value != "string") {
value = value.toString();
}
assertUInt64String(value);
return value;
},
enc(value) {
if (typeof value != "string") {
value = value.toString();
}
assertInt64String(value);
return int64FromString(value);
},
uEnc(value) {
if (typeof value != "string") {
value = value.toString();
}
assertUInt64String(value);
return int64FromString(value);
},
dec(lo, hi) {
return int64ToString(lo, hi);
},
uDec(lo, hi) {
return uInt64ToString(lo, hi);
}
};
}
__name(makeInt64Support, "makeInt64Support");
function assertInt64String(value) {
if (!/^-?[0-9]+$/.test(value)) {
throw new Error("invalid int64: " + value);
}
}
__name(assertInt64String, "assertInt64String");
function assertUInt64String(value) {
if (!/^[0-9]+$/.test(value)) {
throw new Error("invalid uint64: " + value);
}
}
__name(assertUInt64String, "assertUInt64String");
// node_modules/@bufbuild/protobuf/dist/esm/wire/text-encoding.js
var symbol = Symbol.for("@bufbuild/protobuf/text-encoding");
function getTextEncoding() {
if (globalThis[symbol] == void 0) {
const te = new globalThis.TextEncoder();
const td = new globalThis.TextDecoder();
globalThis[symbol] = {
encodeUtf8(text) {
return te.encode(text);
},
decodeUtf8(bytes) {
return td.decode(bytes);
},
checkUtf8(text) {
try {
encodeURIComponent(text);
return true;
} catch (_) {
return false;
}
}
};
}
return globalThis[symbol];
}
__name(getTextEncoding, "getTextEncoding");
// node_modules/@bufbuild/protobuf/dist/esm/wire/binary-encoding.js
var WireType;
(function(WireType2) {
WireType2[WireType2["Varint"] = 0] = "Varint";
WireType2[WireType2["Bit64"] = 1] = "Bit64";
WireType2[WireType2["LengthDelimited"] = 2] = "LengthDelimited";
WireType2[WireType2["StartGroup"] = 3] = "StartGroup";
WireType2[WireType2["EndGroup"] = 4] = "EndGroup";
WireType2[WireType2["Bit32"] = 5] = "Bit32";
})(WireType || (WireType = {}));
var FLOAT32_MAX = 34028234663852886e22;
var FLOAT32_MIN = -34028234663852886e22;
var UINT32_MAX = 4294967295;
var INT32_MAX = 2147483647;
var INT32_MIN = -2147483648;
var _BinaryWriter = class _BinaryWriter {
constructor(encodeUtf8 = getTextEncoding().encodeUtf8) {
this.encodeUtf8 = encodeUtf8;
this.stack = [];
this.chunks = [];
this.buf = [];
}
/**
* Return all bytes written and reset this writer.
*/
finish() {
if (this.buf.length) {
this.chunks.push(new Uint8Array(this.buf));
this.buf = [];
}
let len = 0;
for (let i = 0; i < this.chunks.length; i++)
len += this.chunks[i].length;
let bytes = new Uint8Array(len);
let offset = 0;
for (let i = 0; i < this.chunks.length; i++) {
bytes.set(this.chunks[i], offset);
offset += this.chunks[i].length;
}
this.chunks = [];
return bytes;
}
/**
* Start a new fork for length-delimited data like a message
* or a packed repeated field.
*
* Must be joined later with `join()`.
*/
fork() {
this.stack.push({ chunks: this.chunks, buf: this.buf });
this.chunks = [];
this.buf = [];
return this;
}
/**
* Join the last fork. Write its length and bytes, then
* return to the previous state.
*/
join() {
let chunk = this.finish();
let prev = this.stack.pop();
if (!prev)
throw new Error("invalid state, fork stack empty");
this.chunks = prev.chunks;
this.buf = prev.buf;
this.uint32(chunk.byteLength);
return this.raw(chunk);
}
/**
* Writes a tag (field number and wire type).
*
* Equivalent to `uint32( (fieldNo << 3 | type) >>> 0 )`.
*
* Generated code should compute the tag ahead of time and call `uint32()`.
*/
tag(fieldNo, type) {
return this.uint32((fieldNo << 3 | type) >>> 0);
}
/**
* Write a chunk of raw bytes.
*/
raw(chunk) {
if (this.buf.length) {
this.chunks.push(new Uint8Array(this.buf));
this.buf = [];
}
this.chunks.push(chunk);
return this;
}
/**
* Write a `uint32` value, an unsigned 32 bit varint.
*/
uint32(value) {
assertUInt32(value);
while (value > 127) {
this.buf.push(value & 127 | 128);
value = value >>> 7;
}
this.buf.push(value);
return this;
}
/**
* Write a `int32` value, a signed 32 bit varint.
*/
int32(value) {
assertInt32(value);
varint32write(value, this.buf);
return this;
}
/**
* Write a `bool` value, a variant.
*/
bool(value) {
this.buf.push(value ? 1 : 0);
return this;
}
/**
* Write a `bytes` value, length-delimited arbitrary data.
*/
bytes(value) {
this.uint32(value.byteLength);
return this.raw(value);
}
/**
* Write a `string` value, length-delimited data converted to UTF-8 text.
*/
string(value) {
let chunk = this.encodeUtf8(value);
this.uint32(chunk.byteLength);
return this.raw(chunk);
}
/**
* Write a `float` value, 32-bit floating point number.
*/
float(value) {
assertFloat32(value);
let chunk = new Uint8Array(4);
new DataView(chunk.buffer).setFloat32(0, value, true);
return this.raw(chunk);
}
/**
* Write a `double` value, a 64-bit floating point number.
*/
double(value) {
let chunk = new Uint8Array(8);
new DataView(chunk.buffer).setFloat64(0, value, true);
return this.raw(chunk);
}
/**
* Write a `fixed32` value, an unsigned, fixed-length 32-bit integer.
*/
fixed32(value) {
assertUInt32(value);
let chunk = new Uint8Array(4);
new DataView(chunk.buffer).setUint32(0, value, true);
return this.raw(chunk);
}
/**
* Write a `sfixed32` value, a signed, fixed-length 32-bit integer.
*/
sfixed32(value) {
assertInt32(value);
let chunk = new Uint8Array(4);
new DataView(chunk.buffer).setInt32(0, value, true);
return this.raw(chunk);
}
/**
* Write a `sint32` value, a signed, zigzag-encoded 32-bit varint.
*/
sint32(value) {
assertInt32(value);
value = (value << 1 ^ value >> 31) >>> 0;
varint32write(value, this.buf);
return this;
}
/**
* Write a `fixed64` value, a signed, fixed-length 64-bit integer.
*/
sfixed64(value) {
let chunk = new Uint8Array(8), view = new DataView(chunk.buffer), tc = protoInt64.enc(value);
view.setInt32(0, tc.lo, true);
view.setInt32(4, tc.hi, true);
return this.raw(chunk);
}
/**
* Write a `fixed64` value, an unsigned, fixed-length 64 bit integer.
*/
fixed64(value) {
let chunk = new Uint8Array(8), view = new DataView(chunk.buffer), tc = protoInt64.uEnc(value);
view.setInt32(0, tc.lo, true);
view.setInt32(4, tc.hi, true);
return this.raw(chunk);
}
/**
* Write a `int64` value, a signed 64-bit varint.
*/
int64(value) {
let tc = protoInt64.enc(value);
varint64write(tc.lo, tc.hi, this.buf);
return this;
}
/**
* Write a `sint64` value, a signed, zig-zag-encoded 64-bit varint.
*/
sint64(value) {
const tc = protoInt64.enc(value), sign = tc.hi >> 31, lo = tc.lo << 1 ^ sign, hi = (tc.hi << 1 | tc.lo >>> 31) ^ sign;
varint64write(lo, hi, this.buf);
return this;
}
/**
* Write a `uint64` value, an unsigned 64-bit varint.
*/
uint64(value) {
const tc = protoInt64.uEnc(value);
varint64write(tc.lo, tc.hi, this.buf);
return this;
}
};
__name(_BinaryWriter, "BinaryWriter");
var BinaryWriter = _BinaryWriter;
var _BinaryReader = class _BinaryReader {
constructor(buf, decodeUtf8 = getTextEncoding().decodeUtf8) {
this.decodeUtf8 = decodeUtf8;
this.varint64 = varint64read;
this.uint32 = varint32read;
this.buf = buf;
this.len = buf.length;
this.pos = 0;
this.view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength);
}
/**
* Reads a tag - field number and wire type.
*/
tag() {
let tag = this.uint32(), fieldNo = tag >>> 3, wireType = tag & 7;
if (fieldNo <= 0 || wireType < 0 || wireType > 5)
throw new Error("illegal tag: field no " + fieldNo + " wire type " + wireType);
return [fieldNo, wireType];
}
/**
* Skip one element and return the skipped data.
*
* When skipping StartGroup, provide the tags field number to check for
* matching field number in the EndGroup tag.
*/
skip(wireType, fieldNo) {
let start = this.pos;
switch (wireType) {
case WireType.Varint:
while (this.buf[this.pos++] & 128) {
}
break;
// @ts-ignore TS7029: Fallthrough case in switch -- ignore instead of expect-error for compiler settings without noFallthroughCasesInSwitch: true
case WireType.Bit64:
this.pos += 4;
case WireType.Bit32:
this.pos += 4;
break;
case WireType.LengthDelimited:
let len = this.uint32();
this.pos += len;
break;
case WireType.StartGroup:
for (; ; ) {
const [fn, wt] = this.tag();
if (wt === WireType.EndGroup) {
if (fieldNo !== void 0 && fn !== fieldNo) {
throw new Error("invalid end group tag");
}
break;
}
this.skip(wt, fn);
}
break;
default:
throw new Error("cant skip wire type " + wireType);
}
this.assertBounds();
return this.buf.subarray(start, this.pos);
}
/**
* Throws error if position in byte array is out of range.
*/
assertBounds() {
if (this.pos > this.len)
throw new RangeError("premature EOF");
}
/**
* Read a `int32` field, a signed 32 bit varint.
*/
int32() {
return this.uint32() | 0;
}
/**
* Read a `sint32` field, a signed, zigzag-encoded 32-bit varint.
*/
sint32() {
let zze = this.uint32();
return zze >>> 1 ^ -(zze & 1);
}
/**
* Read a `int64` field, a signed 64-bit varint.
*/
int64() {
return protoInt64.dec(...this.varint64());
}
/**
* Read a `uint64` field, an unsigned 64-bit varint.
*/
uint64() {
return protoInt64.uDec(...this.varint64());
}
/**
* Read a `sint64` field, a signed, zig-zag-encoded 64-bit varint.
*/
sint64() {
let [lo, hi] = this.varint64();
let s = -(lo & 1);
lo = (lo >>> 1 | (hi & 1) << 31) ^ s;
hi = hi >>> 1 ^ s;
return protoInt64.dec(lo, hi);
}
/**
* Read a `bool` field, a variant.
*/
bool() {
let [lo, hi] = this.varint64();
return lo !== 0 || hi !== 0;
}
/**
* Read a `fixed32` field, an unsigned, fixed-length 32-bit integer.
*/
fixed32() {
return this.view.getUint32((this.pos += 4) - 4, true);
}
/**
* Read a `sfixed32` field, a signed, fixed-length 32-bit integer.
*/
sfixed32() {
return this.view.getInt32((this.pos += 4) - 4, true);
}
/**
* Read a `fixed64` field, an unsigned, fixed-length 64 bit integer.
*/
fixed64() {
return protoInt64.uDec(this.sfixed32(), this.sfixed32());
}
/**
* Read a `fixed64` field, a signed, fixed-length 64-bit integer.
*/
sfixed64() {
return protoInt64.dec(this.sfixed32(), this.sfixed32());
}
/**
* Read a `float` field, 32-bit floating point number.
*/
float() {
return this.view.getFloat32((this.pos += 4) - 4, true);
}
/**
* Read a `double` field, a 64-bit floating point number.
*/
double() {
return this.view.getFloat64((this.pos += 8) - 8, true);
}
/**
* Read a `bytes` field, length-delimited arbitrary data.
*/
bytes() {
let len = this.uint32(), start = this.pos;
this.pos += len;
this.assertBounds();
return this.buf.subarray(start, start + len);
}
/**
* Read a `string` field, length-delimited data converted to UTF-8 text.
*/
string() {
return this.decodeUtf8(this.bytes());
}
};
__name(_BinaryReader, "BinaryReader");
var BinaryReader = _BinaryReader;
function assertInt32(arg) {
if (typeof arg == "string") {
arg = Number(arg);
} else if (typeof arg != "number") {
throw new Error("invalid int32: " + typeof arg);
}
if (!Number.isInteger(arg) || arg > INT32_MAX || arg < INT32_MIN)
throw new Error("invalid int32: " + arg);
}
__name(assertInt32, "assertInt32");
function assertUInt32(arg) {
if (typeof arg == "string") {
arg = Number(arg);
} else if (typeof arg != "number") {
throw new Error("invalid uint32: " + typeof arg);
}
if (!Number.isInteger(arg) || arg > UINT32_MAX || arg < 0)
throw new Error("invalid uint32: " + arg);
}
__name(assertUInt32, "assertUInt32");
function assertFloat32(arg) {
if (typeof arg == "string") {
const o = arg;
arg = Number(arg);
if (Number.isNaN(arg) && o !== "NaN") {
throw new Error("invalid float32: " + o);
}
} else if (typeof arg != "number") {
throw new Error("invalid float32: " + typeof arg);
}
if (Number.isFinite(arg) && (arg > FLOAT32_MAX || arg < FLOAT32_MIN))
throw new Error("invalid float32: " + arg);
}
__name(assertFloat32, "assertFloat32");
// dist/protos/generated/misc/params.js
var SearchFilter_Prioritize = {
RELEVANCE: 0,
0: "RELEVANCE",
POPULARITY: 3,
3: "POPULARITY",
UNRECOGNIZED: -1,
"-1": "UNRECOGNIZED"
};
var SearchFilter_Filters_UploadDate = {
ANY_DATE: 0,
0: "ANY_DATE",
TODAY: 2,
2: "TODAY",
WEEK: 3,
3: "WEEK",
MONTH: 4,
4: "MONTH",
YEAR: 5,
5: "YEAR",
UNRECOGNIZED: -1,
"-1": "UNRECOGNIZED"
};
var SearchFilter_Filters_SearchType = {
ANY_TYPE: 0,
0: "ANY_TYPE",
VIDEO: 1,
1: "VIDEO",
CHANNEL: 2,
2: "CHANNEL",
PLAYLIST: 3,
3: "PLAYLIST",
MOVIE: 4,
4: "MOVIE",
SHORTS: 9,
9: "SHORTS",
UNRECOGNIZED: -1,
"-1": "UNRECOGNIZED"
};
var SearchFilter_Filters_Duration = {
ANY_DURATION: 0,
0: "ANY_DURATION",
OVER_TWENTY_MINS: 2,
2: "OVER_TWENTY_MINS",
UNDER_THREE_MINS: 4,
4: "UNDER_THREE_MINS",
THREE_TO_TWENTY_MINS: 5,
5: "THREE_TO_TWENTY_MINS",
UNRECOGNIZED: -1,
"-1": "UNRECOGNIZED"
};
function createBaseVisitorData() {
return { id: "", timestamp: 0 };
}
__name(createBaseVisitorData, "createBaseVisitorData");
var VisitorData = {
encode(message, writer = new BinaryWriter()) {
if (message.id !== "") {
writer.uint32(10).string(message.id);
}
if (message.timestamp !== 0) {
writer.uint32(40).int32(message.timestamp);
}
return writer;
},
decode(input, length) {
const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
const end = length === void 0 ? reader.len : reader.pos + length;
const message = createBaseVisitorData();
while (reader.pos < end) {
const tag = reader.uint32();
switch (tag >>> 3) {
case 1: {
if (tag !== 10) {
break;
}
message.id = reader.string();
continue;
}
case 5: {
if (tag !== 40) {
break;
}
message.timestamp = reader.int32();
continue;
}
}
if ((tag & 7) === 4 || tag === 0) {
break;
}
reader.skip(tag & 7);
}
return message;
}
};
function createBaseSearchFilter() {
return { prioritize: void 0, filters: void 0 };
}
__name(createBaseSearchFilter, "createBaseSearchFilter");
var SearchFilter = {
encode(message, writer = new BinaryWriter()) {
if (message.prioritize !== void 0) {
writer.uint32(8).int32(message.prioritize);
}
if (message.filters !== void 0) {
SearchFilter_Filters.encode(message.filters, writer.uint32(18).fork()).join();
}
return writer;
},
decode(input, length) {
const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
const end = length === void 0 ? reader.len : reader.pos + length;
const message = createBaseSearchFilter();
while (reader.pos < end) {
const tag = reader.uint32();
switch (tag >>> 3) {
case 1: {
if (tag !== 8) {
break;
}
message.prioritize = reader.int32();
continue;
}
case 2: {
if (tag !== 18) {
break;
}
message.filters = SearchFilter_Filters.decode(reader, reader.uint32());
continue;
}
}
if ((tag & 7) === 4 || tag === 0) {
break;
}
reader.skip(tag & 7);
}
return message;
}
};
function createBaseSearchFilter_Filters() {
return {
uploadDate: void 0,
type: void 0,
duration: void 0,
musicSearchType: void 0,
featuresHd: void 0,
featuresSubtitles: void 0,
featuresCreativeCommons: void 0,
features3d: void 0,
featuresLive: void 0,
featuresPurchased: void 0,
features4k: void 0,
features360: void 0,
featuresLocation: void 0,
featuresHdr: void 0,
featuresVr180: void 0
};
}
__name(createBaseSearchFilter_Filters, "createBaseSearchFilter_Filters");
var SearchFilter_Filters = {
encode(message, writer = new BinaryWriter()) {
if (message.uploadDate !== void 0) {
writer.uint32(8).int32(message.uploadDate);
}
if (message.type !== void 0) {
writer.uint32(16).int32(message.type);
}
if (message.duration !== void 0) {
writer.uint32(24).int32(message.duration);
}
if (message.musicSearchType !== void 0) {
SearchFilter_Filters_MusicSearchType.encode(message.musicSearchType, writer.uint32(138).fork()).join();
}
if (message.featuresHd !== void 0) {
writer.uint32(32).bool(message.featuresHd);
}
if (message.featuresSubtitles !== void 0) {
writer.uint32(40).bool(message.featuresSubtitles);
}
if (message.featuresCreativeCommons !== void 0) {
writer.uint32(48).bool(message.featuresCreativeCommons);
}
if (message.features3d !== void 0) {
writer.uint32(56).bool(message.features3d);
}
if (message.featuresLive !== void 0) {
writer.uint32(64).bool(message.featuresLive);
}
if (message.featuresPurchased !== void 0) {
writer.uint32(72).bool(message.featuresPurchased);
}
if (message.features4k !== void 0) {
writer.uint32(112).bool(message.features4k);
}
if (message.features360 !== void 0) {
writer.uint32(120).bool(message.features360);
}
if (message.featuresLocation !== void 0) {
writer.uint32(184).bool(message.featuresLocation);
}
if (message.featuresHdr !== void 0) {
writer.uint32(200).bool(message.featuresHdr);
}
if (message.featuresVr180 !== void 0) {
writer.uint32(208).bool(message.featuresVr180);
}
return writer;
},
decode(input, length) {
const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
const end = length === void 0 ? reader.len : reader.pos + length;
const message = createBaseSearchFilter_Filters();
while (reader.pos < end) {
const tag = reader.uint32();
switch (tag >>> 3) {
case 1: {
if (tag !== 8) {
break;
}
message.uploadDate = reader.int32();
continue;
}
case 2: {
if (tag !== 16) {
break;
}
message.type = reader.int32();
continue;
}
case 3: {
if (tag !== 24) {
break;
}
message.duration = reader.int32();
continue;
}
case 17: {
if (tag !== 138) {
break;
}
message.musicSearchType = SearchFilter_Filters_MusicSearchType.decode(reader, reader.uint32());
continue;
}
case 4: {
if (tag !== 32) {
break;
}
message.featuresHd = reader.bool();
continue;
}
case 5: {
if (tag !== 40) {
break;
}
message.featuresSubtitles = reader.bool();
continue;
}
case 6: {
if (tag !== 48) {
break;
}
message.featuresCreativeCommons = reader.bool();
continue;
}
case 7: {
if (tag !== 56) {
break;
}
message.features3d = reader.bool();
continue;
}
case 8: {
if (tag !== 64) {
break;
}
message.featuresLive = reader.bool();
continue;
}
case 9: {
if (tag !== 72) {
break;
}
message.featuresPurchased = reader.bool();
continue;
}
case 14: {
if (tag !== 112) {
break;
}
message.features4k = reader.bool();
continue;
}
case 15: {
if (tag !== 120) {
break;
}
message.features360 = reader.bool();
continue;
}
case 23: {
if (tag !== 184) {
break;
}
message.featuresLocation = reader.bool();
continue;
}
case 25: {
if (tag !== 200) {
break;
}
message.featuresHdr = reader.bool();
continue;
}
case 26: {
if (tag !== 208) {
break;
}
message.featuresVr180 = reader.bool();
continue;
}
}
if ((tag & 7) === 4 || tag === 0) {
break;
}
reader.skip(tag & 7);
}
return message;
}
};
function createBaseSearchFilter_Filters_MusicSearchType() {
return { song: void 0, video: void 0, album: void 0, artist: void 0, playlist: void 0 };
}
__name(createBaseSearchFilter_Filters_MusicSearchType, "createBaseSearchFilter_Filters_MusicSearchType");
var SearchFilter_Filters_MusicSearchType = {
encode(message, writer = new BinaryWriter()) {
if (message.song !== void 0) {
writer.uint32(8).bool(message.song);
}
if (message.video !== void 0) {
writer.uint32(16).bool(message.video);
}
if (message.album !== void 0) {
writer.uint32(24).bool(message.album);
}
if (message.artist !== void 0) {
writer.uint32(32).bool(message.artist);
}
if (message.playlist !== void 0) {
writer.uint32(40).bool(message.playlist);
}
return writer;
},
decode(input, length) {
const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
const end = length === void 0 ? reader.len : reader.pos + length;
const message = createBaseSearchFilter_Filters_MusicSearchType();
while (reader.pos < end) {
const tag = reader.uint32();
switch (tag >>> 3) {
case 1: {
if (tag !== 8) {
break;
}
message.song = reader.bool();
continue;
}
case 2: {
if (tag !== 16) {
break;
}
message.video = reader.bool();
continue;
}
case 3: {
if (tag !== 24) {
break;
}
message.album = reader.bool();
continue;
}
case 4: {
if (tag !== 32) {
break;
}
message.artist = reader.bool();
continue;
}
case 5: {
if (tag !== 40) {
break;
}
message.playlist = reader.bool();
continue;
}
}
if ((tag & 7) === 4 || tag === 0) {
break;
}
reader.skip(tag & 7);
}
return message;
}
};
function createBaseNotificationPreferences() {
return { channelId: "", prefId: void 0, number0: void 0, number1: void 0 };
}
__name(createBaseNotificationPreferences, "createBaseNotificationPreferences");
var NotificationPreferences = {
encode(message, writer = new BinaryWriter()) {
if (message.channelId !== "") {
writer.uint32(10).string(message.channelId);
}
if (message.prefId !== void 0) {
NotificationPreferences_Preference.encode(message.prefId, writer.uint32(18).fork()).join();
}
if (message.number0 !== void 0) {
writer.uint32(24).int32(message.number0);
}
if (message.number1 !== void 0) {
writer.uint32(32).int32(message.number1);
}
return writer;
},
decode(input, length) {
const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
const end = length === void 0 ? reader.len : reader.pos + length;
const message = createBaseNotificationPreferences();
while (reader.pos < end) {
const tag = reader.uint32();
switch (tag >>> 3) {
case 1: {
if (tag !== 10) {
break;
}
message.channelId = reader.string();
continue;
}
case 2: {
if (tag !== 18) {
break;
}
message.prefId = NotificationPreferences_Preference.decode(reader, reader.uint32());
continue;
}
case 3: {
if (tag !== 24) {
break;
}
message.number0 = reader.int32();
continue;
}
case 4: {
if (tag !== 32) {
break;
}
message.number1 = reader.int32();
continue;
}
}
if ((tag & 7) === 4 || tag === 0) {
break;
}
reader.skip(tag & 7);
}
return message;
}
};
function createBaseNotificationPreferences_Preference() {
return { index: 0 };
}
__name(createBaseNotificationPreferences_Preference, "createBaseNotificationPreferences_Preference");
var NotificationPreferences_Preference = {
encode(message, writer = new BinaryWriter()) {
if (message.index !== 0) {
writer.uint32(8).int32(message.index);
}
return writer;
},
decode(input, length) {
const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
const end = length === void 0 ? reader.len : reader.pos + length;
const message = createBaseNotificationPreferences_Preference();
while (reader.pos < end) {
const tag = reader.uint32();
switch (tag >>> 3) {
case 1: {
if (tag !== 8) {
break;
}
message.index = reader.int32();
continue;
}
}
if ((tag & 7) === 4 || tag === 0) {
break;
}
reader.skip(tag & 7);
}
return message;
}
};
function createBaseLiveMessageParams() {
return { params: void 0, number0: void 0, number1: void 0 };
}
__name(createBaseLiveMessageParams, "createBaseLiveMessageParams");
var LiveMessageParams = {
encode(message, writer = new BinaryWriter()) {
if (message.params !== void 0) {
LiveMessageParams_Params.encode(message.params, writer.uint32(10).fork()).join();
}
if (message.number0 !== void 0) {
writer.uint32(16).int32(message.number0);
}
if (message.number1 !== void 0) {
writer.uint32(24).int32(message.number1);
}
return writer;
},
decode(input, length) {
const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
const end = length === void 0 ? reader.len : reader.pos + length;
const message = createBaseLiveMessageParams();
while (reader.pos < end) {
const tag = reader.uint32();
switch (tag >>> 3) {
case 1: {
if (tag !== 10) {
break;
}
message.params = LiveMessageParams_Params.decode(reader, reader.uint32());
continue;
}
case 2: {
if (tag !== 16) {
break;
}
message.number0 = reader.int32();
continue;
}
case 3: {
if (tag !== 24) {
break;
}
message.number1 = reader.int32();
continue;
}
}
if ((tag & 7) === 4 || tag === 0) {
break;
}
reader.skip(tag & 7);
}
return message;
}
};
function createBaseLiveMessageParams_Params() {
return { ids: void 0 };
}
__name(createBaseLiveMessageParams_Params, "createBaseLiveMessageParams_Params");
var LiveMessageParams_Params = {
encode(message, writer = new BinaryWriter()) {
if (message.ids !== void 0) {
LiveMessageParams_Params_Ids.encode(message.ids, writer.uint32(42).fork()).join();
}
return writer;
},
decode(input, length) {
const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
const end = length === void 0 ? reader.len : reader.pos + length;
const message = createBaseLiveMessageParams_Params();
while (reader.pos < end) {
const tag = reader.uint32();
switch (tag >>> 3) {
case 5: {
if (tag !== 42) {
break;
}
message.ids = LiveMessageParams_Params_Ids.decode(reader, reader.uint32());
continue;
}
}
if ((tag & 7) === 4 || tag === 0) {
break;
}
reader.skip(tag & 7);
}
return message;
}
};
function createBaseLiveMessageParams_Params_Ids() {
return { channelId: "", videoId: "" };
}
__name(createBaseLiveMessageParams_Params_Ids, "createBaseLiveMessageParams_Params_Ids");
var LiveMessageParams_Params_Ids = {
encode(message, writer = new BinaryWriter()) {
if (message.channelId !== "") {
writer.uint32(10).string(message.channelId);
}
if (message.videoId !== "") {
writer.uint32(18).string(message.videoId);
}
return writer;
},
decode(input, length) {
const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
const end = length === void 0 ? reader.len : reader.pos + length;
const message = createBaseLiveMessageParams_Params_Ids();
while (reader.pos < end) {
const tag = reader.uint32();
switch (tag >>> 3) {
case 1: {
if (tag !== 10) {
break;
}
message.channelId = reader.string();
continue;
}
case 2: {
if (tag !== 18) {
break;
}
message.videoId = reader.string();
continue;
}
}
if ((tag & 7) === 4 || tag === 0) {
break;
}
reader.skip(tag & 7);
}
return message;
}
};
function createBaseGetCommentsSectionParams() {
return { ctx: void 0, unkParam: 0, params: void 0 };
}
__name(createBaseGetCommentsSectionParams, "createBaseGetCommentsSectionParams");
var GetCommentsSectionParams = {
encode(message, writer = new BinaryWriter()) {
if (message.ctx !== void 0) {
GetCommentsSectionParams_Context.encode(message.ctx, writer.uint32(18).fork()).join();
}
if (message.unkParam !== 0) {
writer.uint32(24).int32(message.unkParam);
}
if (message.params !== void 0) {
GetCommentsSectionParams_Params.encode(message.params, writer.uint32(50).fork()).join();
}
return writer;
},
decode(input, length) {
const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
const end = length === void 0 ? reader.len : reader.pos + length;
const message = createBaseGetCommentsSectionParams();
while (reader.pos < end) {
const tag = reader.uint32();
switch (tag >>> 3) {
case 2: {
if (tag !== 18) {
break;
}
message.ctx = GetCommentsSectionParams_Context.decode(reader, reader.uint32());
continue;
}
case 3: {
if (tag !== 24) {
break;
}
message.unkParam = reader.int32();
continue;
}
case 6: {
if (tag !== 50) {
break;
}
message.params = GetCommentsSectionParams_Params.decode(reader, reader.uint32());
continue;
}
}
if ((tag & 7) === 4 || tag === 0) {
break;
}
reader.skip(tag & 7);
}
return message;
}
};
function createBaseGetCommentsSectionParams_Context() {
return { videoId: "" };
}
__name(createBaseGetCommentsSectionParams_Context, "createBaseGetCommentsSectionParams_Context");
var GetCommentsSectionParams_Context = {
encode(message, writer = new BinaryWriter()) {
if (message.videoId !== "") {
writer.uint32(18).string(message.videoId);
}
return writer;
},
decode(input, length) {
const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
const end = length === void 0 ? reader.len : reader.pos + length;
const message = createBaseGetCommentsSectionParams_Context();
while (reader.pos < end) {
const tag = reader.uint32();
switch (tag >>> 3) {
case 2: {
if (tag !== 18) {
break;
}
message.videoId = reader.string();
continue;
}
}
if ((tag & 7) === 4 || tag === 0) {
break;
}
reader.skip(tag & 7);
}
return message;
}
};
function createBaseGetCommentsSectionParams_Params() {
return { unkToken: void 0, opts: void 0, repliesOpts: void 0, page: void 0, target: "" };
}
__name(createBaseGetCommentsSectionParams_Params, "createBaseGetCommentsSectionParams_Params");
var GetCommentsSectionParams_Params = {
encode(message, writer = new BinaryWriter()) {
if (message.unkToken !== void 0) {
writer.uint32(10).string(message.unkToken);
}
if (message.opts !== void 0) {
GetCommentsSectionParams_Params_Options.encode(message.opts, writer.uint32(34).fork()).join();
}
if (message.repliesOpts !== void 0) {
GetCommentsSectionParams_Params_RepliesOptions.encode(message.repliesOpts, writer.uint32(26).fork()).join();
}
if (message.page !== void 0) {
writer.uint32(40).int32(message.page);
}
if (message.target !== "") {
writer.uint32(66).string(message.target);
}
return writer;
},
decode(input, length) {
const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
const end = length === void 0 ? reader.len : reader.pos + length;
const message = createBaseGetCommentsSectionParams_Params();
while (reader.pos < end) {
const tag = reader.uint32();
switch (tag >>> 3) {
case 1: {
if (tag !== 10) {
break;
}
message.unkToken = reader.string();
continue;
}
case 4: {
if (tag !== 34) {
break;
}
message.opts = GetCommentsSectionParams_Params_Options.decode(reader, reader.uint32());
continue;
}
case 3: {
if (tag !== 26) {
break;
}
message.repliesOpts = GetCommentsSectionParams_Params_RepliesOptions.decode(reader, reader.uint32());
continue;
}
case 5: {
if (tag !== 40) {
break;
}
message.page = reader.int32();
continue;
}
case 8: {
if (tag !== 66) {
break;
}
message.target = reader.string();
continue;
}
}
if ((tag & 7) === 4 || tag === 0) {
break;
}
reader.skip(tag & 7);
}
return message;
}
};
function createBaseGetCommentsSectionParams_Params_Options() {
return { videoId: "", sortBy: 0, type: 0, commentId: void 0 };
}
__name(createBaseGetCommentsSectionParams_Params_Options, "createBaseGetCommentsSectionParams_Params_Options");
var GetCommentsSectionParams_Params_Options = {
encode(message, writer = new BinaryWriter()) {
if (message.videoId !== "") {
writer.uint32(34).string(message.videoId);
}
if (message.sortBy !== 0) {
writer.uint32(48).int32(message.sortBy);
}
if (message.type !== 0) {
writer.uint32(120).int32(message.type);
}
if (message.commentId !== void 0) {
writer.uint32(130).string(message.commentId);
}
return writer;
},
decode(input, length) {
const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
const end = length === void 0 ? reader.len : reader.pos + length;
const message = createBaseGetCommentsSectionParams_Params_Options();
while (reader.pos < end) {
const tag = reader.uint32();
switch (tag >>> 3) {
case 4: {
if (tag !== 34) {
break;
}
message.videoId = reader.string();
continue;
}
case 6: {
if (tag !== 48) {
break;
}
message.sortBy = reader.int32();
continue;
}
case 15: {
if (tag !== 120) {
break;
}
message.type = reader.int32();
continue;
}
case 16: {
if (tag !== 130) {
break;
}
message.commentId = reader.string();
continue;
}
}
if ((tag & 7) === 4 || tag === 0) {
break;
}
reader.skip(tag & 7);
}
return message;
}
};
function createBaseGetCommentsSectionParams_Params_RepliesOptions() {
return { commentId: "", unkopts: void 0, channelId: void 0, videoId: "", unkParam1: 0, unkParam2: 0 };
}
__name(createBaseGetCommentsSectionParams_Params_RepliesOptions, "createBaseGetCommentsSectionParams_Params_RepliesOptions");
var GetCommentsSectionParams_Params_RepliesOptions = {
encode(message, writer = new BinaryWriter()) {
if (message.commentId !== "") {
writer.uint32(18).string(message.commentId);
}
if (message.unkopts !== void 0) {
GetCommentsSectionParams_Params_RepliesOptions_UnkOpts.encode(message.unkopts, writer.uint32(34).fork()).join();
}
if (message.channelId !== void 0) {
writer.uint32(42).string(message.channelId);
}
if (message.videoId !== "") {
writer.uint32(50).string(message.videoId);
}
if (message.unkParam1 !== 0) {
writer.uint32(64).int32(message.unkParam1);
}
if (message.unkParam2 !== 0) {
writer.uint32(72).int32(message.unkParam2);
}
return writer;
},
decode(input, length) {
const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
const end = length === void 0 ? reader.len : reader.pos + length;
const message = createBaseGetCommentsSectionParams_Params_RepliesOptions();
while (reader.pos < end) {
const tag = reader.uint32();
switch (tag >>> 3) {
case 2: {
if (tag !== 18) {
break;
}
message.commentId = reader.string();
continue;
}
case 4: {
if (tag !== 34) {
break;
}
message.unkopts = GetCommentsSectionParams_Params_RepliesOptions_UnkOpts.decode(reader, reader.uint32());
continue;
}
case 5: {
if (tag !== 42) {
break;
}
message.channelId = reader.string();
continue;
}
case 6: {
if (tag !== 50) {
break;
}
message.videoId = reader.string();
continue;
}
case 8: {
if (tag !== 64) {
break;
}
message.unkParam1 = reader.int32();
continue;
}
case 9: {
if (tag !== 72) {
break;
}
message.unkParam2 = reader.int32();
continue;
}
}
if ((tag & 7) === 4 || tag === 0) {
break;
}
reader.skip(tag & 7);
}
return message;
}
};
function createBaseGetCommentsSectionParams_Params_RepliesOptions_UnkOpts() {
return { unkParam: 0 };
}
__name(createBaseGetCommentsSectionParams_Params_RepliesOptions_UnkOpts, "createBaseGetCommentsSectionParams_Params_RepliesOptions_UnkOpts");
var GetCommentsSectionParams_Params_RepliesOptions_UnkOpts = {
encode(message, writer = new BinaryWriter()) {
if (message.unkParam !== 0) {
writer.uint32(8).int32(message.unkParam);
}
return writer;
},
decode(input, length) {
const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
const end = length === void 0 ? reader.len : reader.pos + length;
const message = createBaseGetCommentsSectionParams_Params_RepliesOptions_UnkOpts();
while (reader.pos < end) {
const tag = reader.uint32();
switch (tag >>> 3) {
case 1: {
if (tag !== 8) {
break;
}
message.unkParam = reader.int32();
continue;
}
}
if ((tag & 7) === 4 || tag === 0) {
break;
}
reader.skip(tag & 7);
}
return message;
}
};
function createBaseCreateCommentParams() {
return { videoId: "", params: void 0, number: 0 };
}
__name(createBaseCreateCommentParams, "createBaseCreateCommentParams");
var CreateCommentParams = {
encode(message, writer = new BinaryWriter()) {
if (message.videoId !== "") {
writer.uint32(18).string(message.videoId);
}
if (message.params !== void 0) {
CreateCommentParams_Params.encode(message.params, writer.uint32(42).fork()).join();
}
if (message.number !== 0) {
writer.uint32(80).int32(message.number);
}
return writer;
},
decode(input, length) {
const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
const end = length === void 0 ? reader.len : reader.pos + length;
const message = createBaseCreateCommentParams();
while (reader.pos < end) {
const tag = reader.uint32();
switch (tag >>> 3) {
case 2: {
if (tag !== 18) {
break;
}
message.videoId = reader.string();
continue;
}
case 5: {
if (tag !== 42) {
break;
}
message.params = CreateCommentParams_Params.decode(reader, reader.uint32());
continue;
}
case 10: {
if (tag !== 80) {
break;
}
message.number = reader.int32();
continue;
}
}
if ((tag & 7) === 4 || tag === 0) {
break;
}
reader.skip(tag & 7);
}
return message;
}
};
function createBaseCreateCommentParams_Params() {
return { index: 0 };
}
__name(createBaseCreateCommentParams_Params, "createBaseCreateCommentParams_Params");
var CreateCommentParams_Params = {
encode(message, writer = new BinaryWriter()) {
if (message.index !== 0) {
writer.uint32(8).int32(message.index);
}
return writer;
},
decode(input, length) {
const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
const end = length === void 0 ? reader.len : reader.pos + length;
const message = createBaseCreateCommentParams_Params();
while (reader.pos < end) {
const tag = reader.uint32();
switch (tag >>> 3) {
case 1: {
if (tag !== 8) {
break;
}
message.index = reader.int32();
continue;
}
}
if ((tag & 7) === 4 || tag === 0) {
break;
}
reader.skip(tag & 7);
}
return message;
}
};
function createBasePeformCommentActionParams() {
return {
type: 0,
commentId: "",
videoId: "",
unkNum: void 0,
channelId: void 0,
translateCommentParams: void 0
};
}
__name(createBasePeformCommentActionParams, "createBasePeformCommentActionParams");
var PeformCommentActionParams = {
encode(message, writer = new BinaryWriter()) {
if (message.type !== 0) {
writer.uint32(8).int32(message.type);
}
if (message.commentId !== "") {
writer.uint32(26).string(message.commentId);
}
if (message.videoId !== "") {
writer.uint32(42).string(message.videoId);
}
if (message.unkNum !== void 0) {
writer.uint32(16).int32(message.unkNum);
}
if (message.channelId !== void 0) {
writer.uint32(186).string(message.channelId);
}
if (message.translateCommentParams !== void 0) {
PeformCommentActionParams_TranslateCommentParams.encode(message.translateCommentParams, writer.uint32(250).fork()).join();
}
return writer;
},
decode(input, length) {
const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
const end = length === void 0 ? reader.len : reader.pos + length;
const message = createBasePeformCommentActionParams();
while (reader.pos < end) {
const tag = reader.uint32();
switch (tag >>> 3) {
case 1: {
if (tag !== 8) {
break;
}
message.type = reader.int32();
continue;
}
case 3: {
if (tag !== 26) {
break;
}
message.commentId = reader.string();
continue;
}
case 5: {
if (tag !== 42) {
break;
}
message.videoId = reader.string();
continue;
}
case 2: {
if (tag !== 16) {
break;
}
message.unkNum = reader.int32();
continue;
}
case 23: {
if (tag !== 186) {
break;
}
message.channelId = reader.string();
continue;
}
case 31: {
if (tag !== 250) {
break;
}
message.translateCommentParams = PeformCommentActionParams_TranslateCommentParams.decode(reader, reader.uint32());
continue;
}
}
if ((tag & 7) === 4 || tag === 0) {
break;
}
reader.skip(tag & 7);
}
return message;
}
};
function createBasePeformCommentActionParams_TranslateCommentParams() {
return { params: void 0, commentId: "", targetLanguage: "" };
}
__name(createBasePeformCommentActionParams_TranslateCommentParams, "createBasePeformCommentActionParams_TranslateCommentParams");
var PeformCommentActionParams_TranslateCommentParams = {
encode(message, writer = new BinaryWriter()) {
if (message.params !== void 0) {
PeformCommentActionParams_TranslateCommentParams_Params.encode(message.params, writer.uint32(26).fork()).join();
}
if (message.commentId !== "") {
writer.uint32(18).string(message.commentId);
}
if (message.targetLanguage !== "") {
writer.uint32(34).string(message.targetLanguage);
}
return writer;
},
decode(input, length) {
const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
const end = length === void 0 ? reader.len : reader.pos + length;
const message = createBasePeformCommentActionParams_TranslateCommentParams();
while (reader.pos < end) {
const tag = reader.uint32();
switch (tag >>> 3) {
case 3: {
if (tag !== 26) {
break;
}
message.params = PeformCommentActionParams_TranslateCommentParams_Params.decode(reader, reader.uint32());
continue;
}
case 2: {
if (tag !== 18) {
break;
}
message.commentId = reader.string();
continue;
}
case 4: {
if (tag !== 34) {
break;
}
message.targetLanguage = reader.string();
continue;
}
}
if ((tag & 7) === 4 || tag === 0) {
break;
}
reader.skip(tag & 7);
}
return message;
}
};
function createBasePeformCommentActionParams_TranslateCommentParams_Params() {
return { comment: void 0 };
}
__name(createBasePeformCommentActionParams_TranslateCommentParams_Params, "createBasePeformCommentActionParams_TranslateCommentParams_Params");
var PeformCommentActionParams_TranslateCommentParams_Params = {
encode(message, writer = new BinaryWriter()) {
if (message.comment !== void 0) {
PeformCommentActionParams_TranslateCommentParams_Params_Comment.encode(message.comment, writer.uint32(10).fork()).join();
}
return writer;
},
decode(input, length) {
const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
const end = length === void 0 ? reader.len : reader.pos + length;
const message = createBasePeformCommentActionParams_TranslateCommentParams_Params();
while (reader.pos < end) {
const tag = reader.uint32();
switch (tag >>> 3) {
case 1: {
if (tag !== 10) {
break;
}
message.comment = PeformCommentActionParams_TranslateCommentParams_Params_Comment.decode(reader, reader.uint32());
continue;
}
}
if ((tag & 7) === 4 || tag === 0) {
break;
}
reader.skip(tag & 7);
}
return message;
}
};
function createBasePeformCommentActionParams_TranslateCommentParams_Params_Comment() {
return { text: "" };
}
__name(createBasePeformCommentActionParams_TranslateCommentParams_Params_Comment, "createBasePeformCommentActionParams_TranslateCommentParams_Params_Comment");
var PeformCommentActionParams_TranslateCommentParams_Params_Comment = {
encode(message, writer = new BinaryWriter()) {
if (message.text !== "") {
writer.uint32(10).string(message.text);
}
return writer;
},
decode(input, length) {
const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
const end = length === void 0 ? reader.len : reader.pos + length;
const message = createBasePeformCommentActionParams_TranslateCommentParams_Params_Comment();
while (reader.pos < end) {
const tag = reader.uint32();
switch (tag >>> 3) {
case 1: {
if (tag !== 10) {
break;
}
message.text = reader.string();
continue;
}
}
if ((tag & 7) === 4 || tag === 0) {
break;
}
reader.skip(tag & 7);
}
return message;
}
};
function createBaseHashtag() {
return { params: void 0 };
}
__name(createBaseHashtag, "createBaseHashtag");
var Hashtag = {
encode(message, writer = new BinaryWriter()) {
if (message.params !== void 0) {
Hashtag_Params.encode(message.params, writer.uint32(746).fork()).join();
}
return writer;
},
decode(input, length) {
const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
const end = length === void 0 ? reader.len : reader.pos + length;
const message = createBaseHashtag();
while (reader.pos < end) {
const tag = reader.uint32();
switch (tag >>> 3) {
case 93: {
if (tag !== 746) {
break;
}
message.params = Hashtag_Params.decode(reader, reader.uint32());
continue;
}
}
if ((tag & 7) === 4 || tag === 0) {
break;
}
reader.skip(tag & 7);
}
return message;
}
};
function createBaseHashtag_Params() {
return { hashtag: "", type: 0 };
}
__name(createBaseHashtag_Params, "createBaseHashtag_Params");
var Hashtag_Params = {
encode(message, writer = new BinaryWriter()) {
if (message.hashtag !== "") {
writer.uint32(10).string(message.hashtag);
}
if (message.type !== 0) {
writer.uint32(24).int32(message.type);
}
return writer;
},
decode(input, length) {
const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
const end = length === void 0 ? reader.len : reader.pos + length;
const message = createBaseHashtag_Params();
while (reader.pos < end) {
const tag = reader.uint32();
switch (tag >>> 3) {
case 1: {
if (tag !== 10) {
break;
}
message.hashtag = reader.string();
continue;
}
case 3: {
if (tag !== 24) {
break;
}
message.type = reader.int32();
continue;
}
}
if ((tag & 7) === 4 || tag === 0) {
break;
}
reader.skip(tag & 7);
}
return message;
}
};
function createBaseReelSequence() {
return { shortId: "", params: void 0, feature2: 0, feature3: 0 };
}
__name(createBaseReelSequence, "createBaseReelSequence");
var ReelSequence = {
encode(message, writer = new BinaryWriter()) {
if (message.shortId !== "") {
writer.uint32(10).string(message.shortId);
}
if (message.params !== void 0) {
ReelSequence_Params.encode(message.params, writer.uint32(42).fork()).join();
}
if (message.feature2 !== 0) {
writer.uint32(80).int32(message.feature2);
}
if (message.feature3 !== 0) {
writer.uint32(104).int32(message.feature3);
}
return writer;
},
decode(input, length) {
const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
const end = length === void 0 ? reader.len : reader.pos + length;
const message = createBaseReelSequence();
while (reader.pos < end) {
const tag = reader.uint32();
switch (tag >>> 3) {
case 1: {
if (tag !== 10) {
break;
}
message.shortId = reader.string();
continue;
}
case 5: {
if (tag !== 42) {
break;
}
message.params = ReelSequence_Params.decode(reader, reader.uint32());
continue;
}
case 10: {
if (tag !== 80) {
break;
}
message.feature2 = reader.int32();
continue;
}
case 13: {
if (tag !== 104) {
break;
}
message.feature3 = reader.int32();
continue;
}
}
if ((tag & 7) === 4 || tag === 0) {
break;
}
reader.skip(tag & 7);
}
return message;
}
};
function createBaseReelSequence_Params() {
return { number: 0 };
}
__name(createBaseReelSequence_Params, "createBaseReelSequence_Params");
var ReelSequence_Params = {
encode(message, writer = new BinaryWriter()) {
if (message.number !== 0) {
writer.uint32(24).int32(message.number);
}
return writer;
},
decode(input, length) {
const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
const end = length === void 0 ? reader.len : reader.pos + length;
const message = createBaseReelSequence_Params();
while (reader.pos < end) {
const tag = reader.uint32();
switch (tag >>> 3) {
case 3: {
if (tag !== 24) {
break;
}
message.number = reader.int32();
continue;
}
}
if ((tag & 7) === 4 || tag === 0) {
break;
}
reader.skip(tag & 7);
}
return message;
}
};
function createBaseNextParams() {
return { videoId: [], playlistTitle: void 0 };
}
__name(createBaseNextParams, "createBaseNextParams");
var NextParams = {
encode(message, writer = new BinaryWriter()) {
for (const v of message.videoId) {
writer.uint32(42).string(v);
}
if (message.playlistTitle !== void 0) {
writer.uint32(50).string(message.playlistTitle);
}
return writer;
},
decode(input, length) {
const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
const end = length === void 0 ? reader.len : reader.pos + length;
const message = createBaseNextParams();
while (reader.pos < end) {
const tag = reader.uint32();
switch (tag >>> 3) {
case 5: {
if (tag !== 42) {
break;
}
message.videoId.push(reader.string());
continue;
}
case 6: {
if (tag !== 50) {
break;
}
message.playlistTitle = reader.string();
continue;
}
}
if ((tag & 7) === 4 || tag === 0) {
break;
}
reader.skip(tag & 7);
}
return message;
}
};
function createBaseCommunityPostParams() {
return { f1: void 0 };
}
__name(createBaseCommunityPostParams, "createBaseCommunityPostParams");
var CommunityPostParams = {
encode(message, writer = new BinaryWriter()) {
if (message.f1 !== void 0) {
CommunityPostParams_Field1.encode(message.f1, writer.uint32(450).fork()).join();
}
return writer;
},
decode(input, length) {
const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
const end = length === void 0 ? reader.len : reader.pos + length;
const message = createBaseCommunityPostParams();
while (reader.pos < end) {
const tag = reader.uint32();
switch (tag >>> 3) {
case 56: {
if (tag !== 450) {
break;
}
message.f1 = CommunityPostParams_Field1.decode(reader, reader.uint32());
continue;
}
}
if ((tag & 7) === 4 || tag === 0) {
break;
}
reader.skip(tag & 7);
}
return message;
}
};
function createBaseCommunityPostParams_Field1() {
return { ucid1: "", postId: "", ucid2: "" };
}
__name(createBaseCommunityPostParams_Field1, "createBaseCommunityPostParams_Field1");
var CommunityPostParams_Field1 = {
encode(message, writer = new BinaryWriter()) {
if (message.ucid1 !== "") {
writer.uint32(18).string(message.ucid1);
}
if (message.postId !== "") {
writer.uint32(26).string(message.postId);
}
if (message.ucid2 !== "") {
writer.uint32(90).string(message.ucid2);
}
return writer;
},
decode(input, length) {
const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
const end = length === void 0 ? reader.len : reader.pos + length;
const message = createBaseCommunityPostParams_Field1();
while (reader.pos < end) {
const tag = reader.uint32();
switch (tag >>> 3) {
case 2: {
if (tag !== 18) {
break;
}
message.ucid1 = reader.string();
continue;
}
case 3: {
if (tag !== 26) {
break;
}
message.postId = reader.string();
continue;
}
case 11: {
if (tag !== 90) {
break;
}
message.ucid2 = reader.string();
continue;
}
}
if ((tag & 7) === 4 || tag === 0) {
break;
}
reader.skip(tag & 7);
}
return message;
}
};
function createBaseCommunityPostCommentsParamContainer() {
return { f0: void 0 };
}
__name(createBaseCommunityPostCommentsParamContainer, "createBaseCommunityPostCommentsParamContainer");
var CommunityPostCommentsParamContainer = {
encode(message, writer = new BinaryWriter()) {
if (message.f0 !== void 0) {
CommunityPostCommentsParamContainer_Container.encode(message.f0, writer.uint32(641815778).fork()).join();
}
return writer;
},
decode(input, length) {
const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
const end = length === void 0 ? reader.len : reader.pos + length;
const message = createBaseCommunityPostCommentsParamContainer();
while (reader.pos < end) {
const tag = reader.uint32();
switch (tag >>> 3) {
case 80226972: {
if (tag !== 641815778) {
break;
}
message.f0 = CommunityPostCommentsParamContainer_Container.decode(reader, reader.uint32());
continue;
}
}
if ((tag & 7) === 4 || tag === 0) {
break;
}
reader.skip(tag & 7);
}
return message;
}
};
function createBaseCommunityPostCommentsParamContainer_Container() {
return { location: "", protoData: "" };
}
__name(createBaseCommunityPostCommentsParamContainer_Container, "createBaseCommunityPostCommentsParamContainer_Container");
var CommunityPostCommentsParamContainer_Container = {
encode(message, writer = new BinaryWriter()) {
if (message.location !== "") {
writer.uint32(18).string(message.location);
}
if (message.protoData !== "") {
writer.uint32(26).string(message.protoData);
}
return writer;
},
decode(input, length) {
const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
const end = length === void 0 ? reader.len : reader.pos + length;
const message = createBaseCommunityPostCommentsParamContainer_Container();
while (reader.pos < end) {
const tag = reader.uint32();
switch (tag >>> 3) {
case 2: {
if (tag !== 18) {
break;
}
message.location = reader.string();
continue;
}
case 3: {
if (tag !== 26) {
break;
}
message.protoData = reader.string();
continue;
}
}
if ((tag & 7) === 4 || tag === 0) {
break;
}
reader.skip(tag & 7);
}
return message;
}
};
function createBaseCommunityPostCommentsParam() {
return { title: "", commentDataContainer: void 0 };
}
__name(createBaseCommunityPostCommentsParam, "createBaseCommunityPostCommentsParam");
var CommunityPostCommentsParam = {
encode(message, writer = new BinaryWriter()) {
if (message.title !== "") {
writer.uint32(18).string(message.title);
}
if (message.commentDataContainer !== void 0) {
CommunityPostCommentsParam_CommentDataContainer.encode(message.commentDataContainer, writer.uint32(426).fork()).join();
}
return writer;
},
decode(input, length) {
const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
const end = length === void 0 ? reader.len : reader.pos + length;
const message = createBaseCommunityPostCommentsParam();
while (reader.pos < end) {
const tag = reader.uint32();
switch (tag >>> 3) {
case 2: {
if (tag !== 18) {
break;
}
message.title = reader.string();
continue;
}
case 53: {
if (tag !== 426) {
break;
}
message.commentDataContainer = CommunityPostCommentsParam_CommentDataContainer.decode(reader, reader.uint32());
continue;
}
}
if ((tag & 7) === 4 || tag === 0) {
break;
}
reader.skip(tag & 7);
}
return message;
}
};
function createBaseCommunityPostCommentsParam_CommentDataContainer() {
return { commentData: void 0, f0: 0, title: "" };
}
__name(createBaseCommunityPostCommentsParam_CommentDataContainer, "createBaseCommunityPostCommentsParam_CommentDataContainer");
var CommunityPostCommentsParam_CommentDataContainer = {
encode(message, writer = new BinaryWriter()) {
if (message.commentData !== void 0) {
CommunityPostCommentsParam_CommentDataContainer_CommentData.encode(message.commentData, writer.uint32(34).fork()).join();
}
if (message.f0 !== 0) {
writer.uint32(56).int32(message.f0);
}
if (message.title !== "") {
writer.uint32(66).string(message.title);
}
return writer;
},
decode(input, length) {
const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
const end = length === void 0 ? reader.len : reader.pos + length;
const message = createBaseCommunityPostCommentsParam_CommentDataContainer();
while (reader.pos < end) {
const tag = reader.uint32();
switch (tag >>> 3) {
case 4: {
if (tag !== 34) {
break;
}
message.commentData = CommunityPostCommentsParam_CommentDataContainer_CommentData.decode(reader, reader.uint32());
continue;
}
case 7: {
if (tag !== 56) {
break;
}
message.f0 = reader.int32();
continue;
}
case 8: {
if (tag !== 66) {
break;
}
message.title = reader.string();
continue;
}
}
if ((tag & 7) === 4 || tag === 0) {
break;
}
reader.skip(tag & 7);
}
return message;
}
};
function createBaseCommunityPostCommentsParam_CommentDataContainer_CommentData() {
return { sortBy: 0, f0: 0, f1: 0, postId: "", channelId: "" };
}
__name(createBaseCommunityPostCommentsParam_CommentDataContainer_CommentData, "createBaseCommunityPostCommentsParam_CommentDataContainer_CommentData");
var CommunityPostCommentsParam_CommentDataContainer_CommentData = {
encode(message, writer = new BinaryWriter()) {
if (message.sortBy !== 0) {
writer.uint32(48).int32(message.sortBy);
}
if (message.f0 !== 0) {
writer.uint32(120).int32(message.f0);
}
if (message.f1 !== 0) {
writer.uint32(200).int32(message.f1);
}
if (message.postId !== "") {
writer.uint32(234).string(message.postId);
}
if (message.channelId !== "") {
writer.uint32(242).string(message.channelId);
}
return writer;
},
decode(input, length) {
const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
const end = length === void 0 ? reader.len : reader.pos + length;
const message = createBaseCommunityPostCommentsParam_CommentDataContainer_CommentData();
while (reader.pos < end) {
const tag = reader.uint32();
switch (tag >>> 3) {
case 6: {
if (tag !== 48) {
break;
}
message.sortBy = reader.int32();
continue;
}
case 15: {
if (tag !== 120) {
break;
}
message.f0 = reader.int32();
continue;
}
case 25: {
if (tag !== 200) {
break;
}
message.f1 = reader.int32();
continue;
}
case 29: {
if (tag !== 234) {
break;
}
message.postId = reader.string();
continue;
}
case 30: {
if (tag !== 242) {
break;
}
message.channelId = reader.string();
continue;
}
}
if ((tag & 7) === 4 || tag === 0) {
break;
}
reader.skip(tag & 7);
}
return message;
}
};
// dist/src/utils/ProtoUtils.js
function encodeVisitorData(id, timestamp) {
const writer = VisitorData.encode({ id, timestamp });
return encodeURIComponent(u8ToBase64(writer.finish()).replace(/\+/g, "-").replace(/\//g, "_"));
}
__name(encodeVisitorData, "encodeVisitorData");
function decodeVisitorData(visitor_data) {
return VisitorData.decode(base64ToU8(decodeURIComponent(visitor_data).replace(/-/g, "+").replace(/_/g, "/")));
}
__name(decodeVisitorData, "decodeVisitorData");
function encodeCommentActionParams(type, args = {}) {
const data = {
type,
commentId: args.comment_id || " ",
videoId: args.video_id || " ",
channelId: " ",
unkNum: 2
};
if (args.hasOwnProperty("text")) {
if (typeof args.target_language !== "string")
throw new Error("target_language must be a string");
if (args.comment_id)
delete data.unkNum;
data.translateCommentParams = {
params: {
comment: {
text: args.text
}
},
commentId: args.comment_id || " ",
targetLanguage: args.target_language
};
}
const writer = PeformCommentActionParams.encode(data);
return encodeURIComponent(u8ToBase64(writer.finish()));
}
__name(encodeCommentActionParams, "encodeCommentActionParams");
function encodeNextParams(video_ids, playlist_title) {
const writer = NextParams.encode({ videoId: video_ids, playlistTitle: playlist_title });
return encodeURIComponent(u8ToBase64(writer.finish()).replace(/\+/g, "-").replace(/\//g, "_"));
}
__name(encodeNextParams, "encodeNextParams");
// dist/src/utils/javascript/helpers.js
var helpers_exports2 = {};
__export(helpers_exports2, {
WALK_STOP: () => WALK_STOP,
createWrapperFunction: () => createWrapperFunction,
extractNodeSource: () => extractNodeSource,
getNodeSourceRange: () => getNodeSourceRange,
indent: () => indent,
jsBuiltIns: () => jsBuiltIns,
memberBaseName: () => memberBaseName,
memberToString: () => memberToString,
walkAst: () => walkAst
});
var WALK_STOP = Symbol("WALK_STOP");
var jsBuiltIns = /* @__PURE__ */ new Set([
"AbortController",
"AbortSignal",
"Array",
"ArrayBuffer",
"AsyncContext",
"Atomics",
"AudioContext",
"BigInt",
"BigInt64Array",
"BigUint64Array",
"Blob",
"Boolean",
"BroadcastChannel",
"Buffer",
"CanvasRenderingContext2D",
"clearImmediate",
"clearInterval",
"clearTimeout",
"confirm",
"console",
"Crypto",
"CustomEvent",
"DataView",
"Date",
"decodeURI",
"decodeURIComponent",
"document",
"Element",
"encodeURI",
"encodeURIComponent",
"Error",
"escape",
"eval",
"Event",
"EventTarget",
"fetch",
"File",
"FileReader",
"Float32Array",
"Float64Array",
"FormData",
"function",
"global",
"globalThis",
"hasOwnProperty",
"Headers",
"History",
"HTMLElement",
"HTMLCollection",
"IDBKeyRange",
"Infinity",
"Int16Array",
"Int32Array",
"Int8Array",
"Intl",
"IntersectionObserver",
"isFinite",
"isNaN",
"isPrototypeOf",
"JSON",
"location",
"log",
"Map",
"Math",
"MediaRecorder",
"MediaSource",
"MediaStream",
"MemberExpression",
"MutationObserver",
"NaN",
"navigator",
"Node",
"NodeList",
"Number",
"Object",
"OfflineAudioContext",
"parse",
"parseFloat",
"parseInt",
"Performance",
"process",
"Promise",
"prompt",
"prototype",
"Proxy",
"ReadableStream",
"Reflect",
"RegExp",
"requestAnimationFrame",
"requestIdleCallback",
"Request",
"Response",
"ResizeObserver",
"Screen",
"setImmediate",
"setInterval",
"setTimeout",
"SharedArrayBuffer",
"SharedWorker",
"SourceBuffer",
"split",
"String",
"stringify",
"structuredClone",
"SubtleCrypto",
"Symbol",
"TextDecoder",
"TextEncoder",
"this",
"toString",
"TransformStream",
"Uint16Array",
"Uint32Array",
"Uint8Array",
"Uint8ClampedArray",
"undefined",
"unescape",
"URL",
"URLSearchParams",
"valueOf",
"WeakMap",
"WeakSet",
"WebAssembly",
"WebGLRenderingContext",
"window",
"Worker",
"WritableStream",
"XMLHttpRequest",
"alert",
"arguments",
"atob",
"btoa",
"cancelAnimationFrame",
"cancelIdleCallback",
"queueMicrotask"
]);
var indent = " ";
function walkAst(root, visitor) {
if (!root || typeof root !== "object")
return;
const stack = [{ node: root, parent: null, exit: false }];
const ancestors = [];
const enter = typeof visitor === "function" ? visitor : visitor.enter ?? null;
const leave = typeof visitor === "function" ? null : visitor.leave ?? null;
let shouldStop = false;
while (!shouldStop && stack.length > 0) {
const frame = stack.pop();
const { node, parent, exit } = frame;
if (exit) {
ancestors.pop();
if (leave && leave(node, parent, ancestors) === WALK_STOP) {
shouldStop = true;
}
continue;
}
if (!node || typeof node.type !== "string")
continue;
const result = enter ? enter(node, parent, ancestors) : void 0;
if (result === WALK_STOP) {
shouldStop = true;
continue;
}
if (result === true)
continue;
stack.push({ node, parent, exit: true });
ancestors.push(node);
for (const key in node) {
if (key === "loc" || key === "range" || key === "start" || key === "end")
continue;
if (!Object.prototype.hasOwnProperty.call(node, key))
continue;
const value = node[key];
if (!value)
continue;
if (Array.isArray(value)) {
for (let i = value.length - 1; i >= 0; i--) {
const item = value[i];
if (item && typeof item.type === "string") {
stack.push({ node: item, parent: node, exit: false });
}
}
} else if (typeof value === "object" && typeof value.type === "string") {
stack.push({ node: value, parent: node, exit: false });
}
}
}
}
__name(walkAst, "walkAst");
function getNodeSourceRange(node) {
if (!node)
return null;
if (Array.isArray(node.range))
return node.range;
if (typeof node.start === "number" && typeof node.end === "number")
return [node.start, node.end];
return null;
}
__name(getNodeSourceRange, "getNodeSourceRange");
function extractNodeSource(node, source) {
const range = getNodeSourceRange(node);
return range ? source.slice(range[0], range[1]) : null;
}
__name(extractNodeSource, "extractNodeSource");
function memberToString(memberExpression, source) {
if (memberExpression.type !== "MemberExpression")
return null;
const segments = [];
let cur = memberExpression;
while (cur && cur.type === "MemberExpression") {
const member = cur;
const prop = member.property;
if (!prop)
return null;
if (member.computed) {
const propSource = extractNodeSource(prop, source);
if (!propSource)
return null;
segments.unshift(`[${propSource.trim()}]`);
} else {
if (prop.type !== "Identifier")
return null;
segments.unshift(`.${prop.name}`);
}
cur = member.object;
}
let base = null;
if (cur?.type === "Identifier") {
base = cur.name;
} else if (cur?.type === "ThisExpression") {
base = "this";
}
return base ? base + segments.join("") : null;
}
__name(memberToString, "memberToString");
function memberBaseName(memberExpression, source) {
let target = memberExpression.object;
while (target && target.type === "MemberExpression") {
const parentName = memberToString(target, source);
if (parentName)
return parentName;
target = target.object;
}
if (target?.type === "Identifier")
return target.name;
if (target?.type === "ThisExpression")
return "this";
return null;
}
__name(memberBaseName, "memberBaseName");
function createWrapperFunction(analyzer, name, node) {
if (node.type === "CallExpression" && node.callee.type === "Identifier" && analyzer.declaredVariables.has(node.callee.name)) {
return generateWrapper(name, node.callee.name, parseFunctionArguments(analyzer, node.arguments));
} else if (node.type === "VariableDeclarator" && node.init?.type === "FunctionExpression" && node.id.type === "Identifier") {
return generateWrapper(name, node.id.name, parseFunctionArguments(analyzer, node.init.params));
} else if (node.type === "NewExpression" && node.callee.type === "MemberExpression" && node.callee.object.type === "Identifier") {
const targetFunction = memberToString(node.callee, analyzer.getSource());
if (!targetFunction)
return void 0;
return generateWrapper(name, targetFunction, parseFunctionArguments(analyzer, node.arguments), true);
}
}
__name(createWrapperFunction, "createWrapperFunction");
function generateWrapper(functionName, targetFunction, args, useNew = false) {
return [
`${indent}function ${functionName}(${args.join(", ")}) {`,
`${indent}${indent}return ${useNew ? "new " : ""}${targetFunction}(${args.join(", ")});`,
`${indent}}`
].join("\n");
}
__name(generateWrapper, "generateWrapper");
function parseFunctionArguments(analyzer, args) {
const params = [];
for (const arg of args) {
if (arg.type === "Identifier" && analyzer.declaredVariables.has(arg.name)) {
params.push(arg.name);
} else if (arg.type === "Literal" && (typeof arg.value === "string" || typeof arg.value === "number")) {
params.push(JSON.stringify(arg.value));
} else if (arg.type === "UnaryExpression") {
const argSource = extractNodeSource(arg, analyzer.getSource());
if (argSource) {
params.push(argSource.trim());
}
} else if (arg.type === "AssignmentPattern" && arg.left.type === "Identifier") {
params.push(arg.left.name);
} else if (arg.type === "Identifier") {
params.push(arg.name);
} else if (!params.includes("input"))
params.push("input");
}
return params;
}
__name(parseFunctionArguments, "parseFunctionArguments");
// dist/src/utils/javascript/matchers.js
var matchers_exports = {};
__export(matchers_exports, {
nsigMatcher: () => nsigMatcher,
timestampMatcher: () => timestampMatcher
});
function nsigMatcher(node) {
if (node.type !== "VariableDeclarator")
return false;
const init = node.init;
if (!init || init.type !== "FunctionExpression")
return false;
if (init.params.length < 3)
return false;
const [url, sigName, sigValue] = init.params;
if (url.type !== "Identifier" || sigName.type !== "AssignmentPattern" || sigValue.type !== "AssignmentPattern")
return false;
const body = init.body;
const blockStatementBody = body?.body || [];
let hasUrlCtor = false;
let hasSetAlr = false;
for (const statement of blockStatementBody) {
if (statement.type !== "ExpressionStatement")
continue;
const expr = statement.expression;
if (expr.type === "AssignmentExpression" && expr.operator === "=" && expr.left.type === "Identifier" && expr.left.name === url.name) {
const right = expr.right;
if (right.type === "NewExpression" && right.callee.type === "MemberExpression") {
hasUrlCtor = true;
}
}
if (expr.type === "CallExpression" && expr.callee.type === "MemberExpression") {
const args = expr.arguments;
if (args.length === 2 && args[0].type === "Literal" && args[0].value === "alr" && args[1].type === "Literal" && args[1].value === "yes") {
hasSetAlr = true;
}
}
}
if (!hasUrlCtor || !hasSetAlr)
return false;
return node;
}
__name(nsigMatcher, "nsigMatcher");
function timestampMatcher(node) {
if (node.type !== "VariableDeclarator" || node.init?.type !== "FunctionExpression") {
return false;
}
const funcBody = node.init.body;
if (!funcBody)
return false;
let foundObject = null;
walkAst(funcBody, (innerNode) => {
if (innerNode.type === "ObjectExpression") {
for (const prop of innerNode.properties) {
if (prop.type === "Property" && prop.key.type === "Identifier" && prop.key.name === "signatureTimestamp") {
foundObject = prop;
return WALK_STOP;
}
}
}
});
return foundObject || false;
}
__name(timestampMatcher, "timestampMatcher");
// node_modules/meriyah/dist/meriyah.mjs
var unicodeLookup = ((compressed, lookup) => {
const result = new Uint32Array(69632);
let index = 0;
let subIndex = 0;
while (index < 2571) {
const inst = compressed[index++];
if (inst < 0) {
subIndex -= inst;
} else {
let code = compressed[index++];
if (inst & 2)
code = lookup[code];
if (inst & 1) {
result.fill(code, subIndex, subIndex += compressed[index++]);
} else {
result[subIndex++] = code;
}
}
}
return result;
})([-1, 2, 26, 2, 27, 2, 5, -1, 0, 77595648, 3, 44, 2, 3, 0, 14, 2, 63, 2, 64, 3, 0, 3, 0, 3168796671, 0, 4294956992, 2, 1, 2, 0, 2, 41, 3, 0, 4, 0, 4294966523, 3, 0, 4, 2, 16, 2, 65, 2, 0, 0, 4294836735, 0, 3221225471, 0, 4294901942, 2, 66, 0, 134152192, 3, 0, 2, 0, 4294951935, 3, 0, 2, 0, 2683305983, 0, 2684354047, 2, 18, 2, 0, 0, 4294961151, 3, 0, 2, 2, 19, 2, 0, 0, 608174079, 2, 0, 2, 60, 2, 7, 2, 6, 0, 4286611199, 3, 0, 2, 2, 1, 3, 0, 3, 0, 4294901711, 2, 40, 0, 4089839103, 0, 2961209759, 0, 1342439375, 0, 4294543342, 0, 3547201023, 0, 1577204103, 0, 4194240, 0, 4294688750, 2, 2, 0, 80831, 0, 4261478351, 0, 4294549486, 2, 2, 0, 2967484831, 0, 196559, 0, 3594373100, 0, 3288319768, 0, 8469959, 0, 65472, 2, 3, 0, 4093640191, 0, 660618719, 0, 65487, 0, 4294828015, 0, 4092591615, 0, 1616920031, 0, 982991, 2, 3, 2, 0, 0, 2163244511, 0, 4227923919, 0, 4236247022, 2, 71, 0, 4284449919, 0, 851904, 2, 4, 2, 12, 0, 67076095, -1, 2, 72, 0, 1073741743, 0, 4093607775, -1, 0, 50331649, 0, 3265266687, 2, 33, 0, 4294844415, 0, 4278190047, 2, 20, 2, 137, -1, 3, 0, 2, 2, 23, 2, 0, 2, 10, 2, 0, 2, 15, 2, 22, 3, 0, 10, 2, 74, 2, 0, 2, 75, 2, 76, 2, 77, 2, 0, 2, 78, 2, 0, 2, 11, 0, 261632, 2, 25, 3, 0, 2, 2, 13, 2, 4, 3, 0, 18, 2, 79, 2, 5, 3, 0, 2, 2, 80, 0, 2151677951, 2, 29, 2, 9, 0, 909311, 3, 0, 2, 0, 814743551, 2, 49, 0, 67090432, 3, 0, 2, 2, 42, 2, 0, 2, 6, 2, 0, 2, 30, 2, 8, 0, 268374015, 2, 110, 2, 51, 2, 0, 2, 81, 0, 134153215, -1, 2, 7, 2, 0, 2, 8, 0, 2684354559, 0, 67044351, 0, 3221160064, 2, 17, -1, 3, 0, 2, 2, 53, 0, 1046528, 3, 0, 3, 2, 9, 2, 0, 2, 54, 0, 4294960127, 2, 10, 2, 6, 2, 11, 0, 4294377472, 2, 12, 3, 0, 16, 2, 13, 2, 0, 2, 82, 2, 10, 2, 0, 2, 83, 2, 84, 2, 85, 0, 12288, 2, 55, 0, 1048577, 2, 86, 2, 14, -1, 2, 14, 0, 131042, 2, 87, 2, 88, 2, 89, 2, 0, 2, 34, -83, 3, 0, 7, 0, 1046559, 2, 0, 2, 15, 2, 0, 0, 2147516671, 2, 21, 3, 90, 2, 2, 0, -16, 2, 91, 0, 524222462, 2, 4, 2, 0, 0, 4269801471, 2, 4, 3, 0, 2, 2, 28, 2, 16, 3, 0, 2, 2, 17, 2, 0, -1, 2, 18, -16, 3, 0, 206, -2, 3, 0, 692, 2, 73, -1, 2, 18, 2, 10, 3, 0, 8, 2, 93, 2, 133, 2, 0, 0, 3220242431, 3, 0, 3, 2, 19, 2, 94, 2, 95, 3, 0, 2, 2, 96, 2, 0, 2, 97, 2, 46, 2, 0, 0, 4351, 2, 0, 2, 9, 3, 0, 2, 0, 67043391, 0, 3909091327, 2, 0, 2, 24, 2, 9, 2, 20, 3, 0, 2, 0, 67076097, 2, 8, 2, 0, 2, 21, 0, 67059711, 0, 4236247039, 3, 0, 2, 0, 939524103, 0, 8191999, 2, 101, 2, 102, 2, 22, 2, 23, 3, 0, 3, 0, 67057663, 3, 0, 349, 2, 103, 2, 104, 2, 7, -264, 3, 0, 11, 2, 24, 3, 0, 2, 2, 32, -1, 0, 3774349439, 2, 105, 2, 106, 3, 0, 2, 2, 19, 2, 107, 3, 0, 10, 2, 10, 2, 18, 2, 0, 2, 47, 2, 0, 2, 31, 2, 108, 2, 25, 0, 1638399, 0, 57344, 2, 109, 3, 0, 3, 2, 20, 2, 26, 2, 27, 2, 5, 2, 28, 2, 0, 2, 8, 2, 111, -1, 2, 112, 2, 113, 2, 114, -1, 3, 0, 3, 2, 12, -2, 2, 0, 2, 29, -3, 0, 536870912, -4, 2, 20, 2, 0, 2, 36, 0, 1, 2, 0, 2, 67, 2, 6, 2, 12, 2, 10, 2, 0, 2, 115, -1, 3, 0, 4, 2, 10, 2, 23, 2, 116, 2, 7, 2, 0, 2, 117, 2, 0, 2, 118, 2, 119, 2, 120, 2, 0, 2, 9, 3, 0, 9, 2, 21, 2, 30, 2, 31, 2, 121, 2, 122, -2, 2, 123, 2, 124, 2, 30, 2, 21, 2, 8, -2, 2, 125, 2, 30, 2, 32, -2, 2, 0, 2, 39, -2, 0, 4277137519, 0, 2269118463, -1, 3, 20, 2, -1, 2, 33, 2, 38, 2, 0, 3, 30, 2, 2, 35, 2, 19, -3, 3, 0, 2, 2, 34, -1, 2, 0, 2, 35, 2, 0, 2, 35, 2, 0, 2, 48, 2, 0, 0, 4294950463, 2, 37, -7, 2, 0, 0, 203775, 2, 57, 0, 4026531840, 2, 20, 2, 43, 2, 36, 2, 18, 2, 37, 2, 18, 2, 126, 2, 21, 3, 0, 2, 2, 38, 0, 2151677888, 2, 0, 2, 12, 0, 4294901764, 2, 144, 2, 0, 2, 58, 2, 56, 0, 5242879, 3, 0, 2, 0, 402644511, -1, 2, 128, 2, 39, 0, 3, -1, 2, 129, 2, 130, 2, 0, 0, 67045375, 2, 40, 0, 4226678271, 0, 3766565279, 0, 2039759, 2, 132, 2, 41, 0, 1046437, 0, 6, 3, 0, 2, 0, 3288270847, 0, 3, 3, 0, 2, 0, 67043519, -5, 2, 0, 0, 4282384383, 0, 1056964609, -1, 3, 0, 2, 0, 67043345, -1, 2, 0, 2, 42, 2, 23, 2, 50, 2, 11, 2, 61, 2, 38, -5, 2, 0, 2, 12, -3, 3, 0, 2, 0, 2147484671, 2, 134, 0, 4190109695, 2, 52, -2, 2, 135, 0, 4244635647, 0, 27, 2, 0, 2, 8, 2, 43, 2, 0, 2, 68, 2, 18, 2, 0, 2, 42, -6, 2, 0, 2, 45, 2, 59, 2, 44, 2, 45, 2, 46, 2, 47, 0, 8388351, -2, 2, 136, 0, 3028287487, 2, 48, 2, 138, 0, 33259519, 2, 49, -9, 2, 21, 0, 4294836223, 0, 3355443199, 0, 134152199, -2, 2, 69, -2, 3, 0, 28, 2, 32, -3, 3, 0, 3, 2, 17, 3, 0, 6, 2, 50, -81, 2, 18, 3, 0, 2, 2, 36, 3, 0, 33, 2, 25, 2, 30, 3, 0, 124, 2, 12, 3, 0, 18, 2, 38, -213, 2, 0, 2, 32, -54, 3, 0, 17, 2, 42, 2, 8, 2, 23, 2, 0, 2, 8, 2, 23, 2, 51, 2, 0, 2, 21, 2, 52, 2, 139, 2, 25, -13, 2, 0, 2, 53, -6, 3, 0, 2, -4, 3, 0, 2, 0, 4294936575, 2, 0, 0, 4294934783, -2, 0, 196635, 3, 0, 191, 2, 54, 3, 0, 38, 2, 30, 2, 55, 2, 34, -278, 2, 140, 3, 0, 9, 2, 141, 2, 142, 2, 56, 3, 0, 11, 2, 7, -72, 3, 0, 3, 2, 143, 0, 1677656575, -130, 2, 26, -16, 2, 0, 2, 24, 2, 38, -16, 0, 4161266656, 0, 4071, 0, 15360, -4, 2, 57, -13, 3, 0, 2, 2, 58, 2, 0, 2, 145, 2, 146, 2, 62, 2, 0, 2, 147, 2, 148, 2, 149, 3, 0, 10, 2, 150, 2, 151, 2, 22, 3, 58, 2, 3, 152, 2, 3, 59, 2, 0, 4294954999, 2, 0, -16, 2, 0, 2, 92, 2, 0, 0, 2105343, 0, 4160749584, 0, 65534, -34, 2, 8, 2, 154, -6, 0, 4194303871, 0, 4294903771, 2, 0, 2, 60, 2, 100, -3, 2, 0, 0, 1073684479, 0, 17407, -9, 2, 18, 2, 17, 2, 0, 2, 32, -14, 2, 18, 2, 32, -6, 2, 18, 2, 12, -15, 2, 155, 3, 0, 6, 0, 8323103, -1, 3, 0, 2, 2, 61, -37, 2, 62, 2, 156, 2, 157, 2, 158, 2, 159, 2, 160, -105, 2, 26, -32, 3, 0, 1335, -1, 3, 0, 129, 2, 32, 3, 0, 6, 2, 10, 3, 0, 180, 2, 161, 3, 0, 233, 2, 162, 3, 0, 18, 2, 10, -77, 3, 0, 16, 2, 10, -47, 3, 0, 154, 2, 6, 3, 0, 130, 2, 25, -22250, 3, 0, 7, 2, 25, -6130, 3, 5, 2, -1, 0, 69207040, 3, 44, 2, 3, 0, 14, 2, 63, 2, 64, -3, 0, 3168731136, 0, 4294956864, 2, 1, 2, 0, 2, 41, 3, 0, 4, 0, 4294966275, 3, 0, 4, 2, 16, 2, 65, 2, 0, 2, 34, -1, 2, 18, 2, 66, -1, 2, 0, 0, 2047, 0, 4294885376, 3, 0, 2, 0, 3145727, 0, 2617294944, 0, 4294770688, 2, 25, 2, 67, 3, 0, 2, 0, 131135, 2, 98, 0, 70256639, 0, 71303167, 0, 272, 2, 42, 2, 6, 0, 32511, 2, 0, 2, 49, -1, 2, 99, 2, 68, 0, 4278255616, 0, 4294836227, 0, 4294549473, 0, 600178175, 0, 2952806400, 0, 268632067, 0, 4294543328, 0, 57540095, 0, 1577058304, 0, 1835008, 0, 4294688736, 2, 70, 2, 69, 0, 33554435, 2, 131, 2, 70, 0, 2952790016, 0, 131075, 0, 3594373096, 0, 67094296, 2, 69, -1, 0, 4294828e3, 0, 603979263, 0, 654311424, 0, 3, 0, 4294828001, 0, 602930687, 0, 1610612736, 0, 393219, 0, 4294828016, 0, 671088639, 0, 2154840064, 0, 4227858435, 0, 4236247008, 2, 71, 2, 38, -1, 2, 4, 0, 917503, 2, 38, -1, 2, 72, 0, 537788335, 0, 4026531935, -1, 0, 1, -1, 2, 33, 2, 73, 0, 7936, -3, 2, 0, 0, 2147485695, 0, 1010761728, 0, 4292984930, 0, 16387, 2, 0, 2, 15, 2, 22, 3, 0, 10, 2, 74, 2, 0, 2, 75, 2, 76, 2, 77, 2, 0, 2, 78, 2, 0, 2, 12, -1, 2, 25, 3, 0, 2, 2, 13, 2, 4, 3, 0, 18, 2, 79, 2, 5, 3, 0, 2, 2, 80, 0, 2147745791, 3, 19, 2, 0, 122879, 2, 0, 2, 9, 0, 276824064, -2, 3, 0, 2, 2, 42, 2, 0, 0, 4294903295, 2, 0, 2, 30, 2, 8, -1, 2, 18, 2, 51, 2, 0, 2, 81, 2, 49, -1, 2, 21, 2, 0, 2, 29, -2, 0, 128, -2, 2, 28, 2, 9, 0, 8160, -1, 2, 127, 0, 4227907585, 2, 0, 2, 37, 2, 0, 2, 50, 0, 4227915776, 2, 10, 2, 6, 2, 11, -1, 0, 74440192, 3, 0, 6, -2, 3, 0, 8, 2, 13, 2, 0, 2, 82, 2, 10, 2, 0, 2, 83, 2, 84, 2, 85, -3, 2, 86, 2, 14, -3, 2, 87, 2, 88, 2, 89, 2, 0, 2, 34, -83, 3, 0, 7, 0, 817183, 2, 0, 2, 15, 2, 0, 0, 33023, 2, 21, 3, 90, 2, -17, 2, 91, 0, 524157950, 2, 4, 2, 0, 2, 92, 2, 4, 2, 0, 2, 22, 2, 28, 2, 16, 3, 0, 2, 2, 17, 2, 0, -1, 2, 18, -16, 3, 0, 206, -2, 3, 0, 692, 2, 73, -1, 2, 18, 2, 10, 3, 0, 8, 2, 93, 0, 3072, 2, 0, 0, 2147516415, 2, 10, 3, 0, 2, 2, 25, 2, 94, 2, 95, 3, 0, 2, 2, 96, 2, 0, 2, 97, 2, 46, 0, 4294965179, 0, 7, 2, 0, 2, 9, 2, 95, 2, 9, -1, 0, 1761345536, 2, 98, 0, 4294901823, 2, 38, 2, 20, 2, 99, 2, 35, 2, 100, 0, 2080440287, 2, 0, 2, 34, 2, 153, 0, 3296722943, 2, 0, 0, 1046675455, 0, 939524101, 0, 1837055, 2, 101, 2, 102, 2, 22, 2, 23, 3, 0, 3, 0, 7, 3, 0, 349, 2, 103, 2, 104, 2, 7, -264, 3, 0, 11, 2, 24, 3, 0, 2, 2, 32, -1, 0, 2700607615, 2, 105, 2, 106, 3, 0, 2, 2, 19, 2, 107, 3, 0, 10, 2, 10, 2, 18, 2, 0, 2, 47, 2, 0, 2, 31, 2, 108, -3, 2, 109, 3, 0, 3, 2, 20, -1, 3, 5, 2, 2, 110, 2, 0, 2, 8, 2, 111, -1, 2, 112, 2, 113, 2, 114, -1, 3, 0, 3, 2, 12, -2, 2, 0, 2, 29, -8, 2, 20, 2, 0, 2, 36, -1, 2, 0, 2, 67, 2, 6, 2, 30, 2, 10, 2, 0, 2, 115, -1, 3, 0, 4, 2, 10, 2, 18, 2, 116, 2, 7, 2, 0, 2, 117, 2, 0, 2, 118, 2, 119, 2, 120, 2, 0, 2, 9, 3, 0, 9, 2, 21, 2, 30, 2, 31, 2, 121, 2, 122, -2, 2, 123, 2, 124, 2, 30, 2, 21, 2, 8, -2, 2, 125, 2, 30, 2, 32, -2, 2, 0, 2, 39, -2, 0, 4277075969, 2, 30, -1, 3, 20, 2, -1, 2, 33, 2, 126, 2, 0, 3, 30, 2, 2, 35, 2, 19, -3, 3, 0, 2, 2, 34, -1, 2, 0, 2, 35, 2, 0, 2, 35, 2, 0, 2, 50, 2, 98, 0, 4294934591, 2, 37, -7, 2, 0, 0, 197631, 2, 57, -1, 2, 20, 2, 43, 2, 37, 2, 18, 0, 3, 2, 18, 2, 126, 2, 21, 2, 127, 2, 54, -1, 0, 2490368, 2, 127, 2, 25, 2, 18, 2, 34, 2, 127, 2, 38, 0, 4294901904, 0, 4718591, 2, 127, 2, 35, 0, 335544350, -1, 2, 128, 0, 2147487743, 0, 1, -1, 2, 129, 2, 130, 2, 8, -1, 2, 131, 2, 70, 0, 3758161920, 0, 3, 2, 132, 0, 12582911, 0, 655360, -1, 2, 0, 2, 29, 0, 2147485568, 0, 3, 2, 0, 2, 25, 0, 176, -5, 2, 0, 2, 17, 0, 251658240, -1, 2, 0, 2, 25, 0, 16, -1, 2, 0, 0, 16779263, -2, 2, 12, -1, 2, 38, -5, 2, 0, 2, 133, -3, 3, 0, 2, 2, 55, 2, 134, 0, 2147549183, 0, 2, -2, 2, 135, 2, 36, 0, 10, 0, 4294965249, 0, 67633151, 0, 4026597376, 2, 0, 0, 536871935, 2, 18, 2, 0, 2, 42, -6, 2, 0, 0, 1, 2, 59, 2, 17, 0, 1, 2, 46, 2, 25, -3, 2, 136, 2, 36, 2, 137, 2, 138, 0, 16778239, -10, 2, 35, 0, 4294836212, 2, 9, -3, 2, 69, -2, 3, 0, 28, 2, 32, -3, 3, 0, 3, 2, 17, 3, 0, 6, 2, 50, -81, 2, 18, 3, 0, 2, 2, 36, 3, 0, 33, 2, 25, 0, 126, 3, 0, 124, 2, 12, 3, 0, 18, 2, 38, -213, 2, 10, -55, 3, 0, 17, 2, 42, 2, 8, 2, 18, 2, 0, 2, 8, 2, 18, 2, 60, 2, 0, 2, 25, 2, 50, 2, 139, 2, 25, -13, 2, 0, 2, 73, -6, 3, 0, 2, -4, 3, 0, 2, 0, 67583, -1, 2, 107, -2, 0, 11, 3, 0, 191, 2, 54, 3, 0, 38, 2, 30, 2, 55, 2, 34, -278, 2, 140, 3, 0, 9, 2, 141, 2, 142, 2, 56, 3, 0, 11, 2, 7, -72, 3, 0, 3, 2, 143, 2, 144, -187, 3, 0, 2, 2, 58, 2, 0, 2, 145, 2, 146, 2, 62, 2, 0, 2, 147, 2, 148, 2, 149, 3, 0, 10, 2, 150, 2, 151, 2, 22, 3, 58, 2, 3, 152, 2, 3, 59, 2, 2, 153, -57, 2, 8, 2, 154, -7, 2, 18, 2, 0, 2, 60, -4, 2, 0, 0, 1065361407, 0, 16384, -9, 2, 18, 2, 60, 2, 0, 2, 133, -14, 2, 18, 2, 133, -6, 2, 18, 0, 81919, -15, 2, 155, 3, 0, 6, 2, 126, -1, 3, 0, 2, 0, 2063, -37, 2, 62, 2, 156, 2, 157, 2, 158, 2, 159, 2, 160, -138, 3, 0, 1335, -1, 3, 0, 129, 2, 32, 3, 0, 6, 2, 10, 3, 0, 180, 2, 161, 3, 0, 233, 2, 162, 3, 0, 18, 2, 10, -77, 3, 0, 16, 2, 10, -47, 3, 0, 154, 2, 6, 3, 0, 130, 2, 25, -28386], [4294967295, 4294967291, 4092460543, 4294828031, 4294967294, 134217726, 4294903807, 268435455, 2147483647, 1048575, 1073741823, 3892314111, 134217727, 1061158911, 536805376, 4294910143, 4294901759, 32767, 4294901760, 262143, 536870911, 8388607, 4160749567, 4294902783, 4294918143, 65535, 67043328, 2281701374, 4294967264, 2097151, 4194303, 255, 67108863, 4294967039, 511, 524287, 131071, 63, 127, 3238002687, 4294549487, 4290772991, 33554431, 4294901888, 4286578687, 67043329, 4294705152, 4294770687, 67043583, 1023, 15, 2047999, 67043343, 67051519, 16777215, 2147483648, 4294902e3, 28, 4292870143, 4294966783, 16383, 67047423, 4294967279, 262083, 20511, 41943039, 493567, 4294959104, 603979775, 65536, 602799615, 805044223, 4294965206, 8191, 1031749119, 4294917631, 2134769663, 4286578493, 4282253311, 4294942719, 33540095, 4294905855, 2868854591, 1608515583, 265232348, 534519807, 2147614720, 1060109444, 4093640016, 17376, 2139062143, 224, 4169138175, 4294909951, 4286578688, 4294967292, 4294965759, 535511039, 4294966272, 4294967280, 32768, 8289918, 4294934399, 4294901775, 4294965375, 1602223615, 4294967259, 4294443008, 268369920, 4292804608, 4294967232, 486341884, 4294963199, 3087007615, 1073692671, 4128527, 4279238655, 4294902015, 4160684047, 4290246655, 469499899, 4294967231, 134086655, 4294966591, 2445279231, 3670015, 31, 4294967288, 4294705151, 3221208447, 4294902271, 4294549472, 4294921215, 4095, 4285526655, 4294966527, 4294966143, 64, 4294966719, 3774873592, 1877934080, 262151, 2555904, 536807423, 67043839, 3758096383, 3959414372, 3755993023, 2080374783, 4294835295, 4294967103, 4160749565, 4294934527, 4087, 2016, 2147446655, 184024726, 2862017156, 1593309078, 268434431, 268434414, 4294901763, 4294901761]);
var isIDContinue = /* @__PURE__ */ __name((code) => (unicodeLookup[(code >>> 5) + 0] >>> code & 31 & 1) !== 0, "isIDContinue");
var isIDStart = /* @__PURE__ */ __name((code) => (unicodeLookup[(code >>> 5) + 34816] >>> code & 31 & 1) !== 0, "isIDStart");
function advanceChar(parser) {
parser.column++;
return parser.currentChar = parser.source.charCodeAt(++parser.index);
}
__name(advanceChar, "advanceChar");
function consumePossibleSurrogatePair(parser) {
const hi = parser.currentChar;
if ((hi & 64512) !== 55296)
return 0;
const lo = parser.source.charCodeAt(parser.index + 1);
if ((lo & 64512) !== 56320)
return 0;
return 65536 + ((hi & 1023) << 10) + (lo & 1023);
}
__name(consumePossibleSurrogatePair, "consumePossibleSurrogatePair");
function consumeLineFeed(parser, state) {
parser.currentChar = parser.source.charCodeAt(++parser.index);
parser.flags |= 1;
if ((state & 4) === 0) {
parser.column = 0;
parser.line++;
}
}
__name(consumeLineFeed, "consumeLineFeed");
function scanNewLine(parser) {
parser.flags |= 1;
parser.currentChar = parser.source.charCodeAt(++parser.index);
parser.column = 0;
parser.line++;
}
__name(scanNewLine, "scanNewLine");
function isExoticECMAScriptWhitespace(ch) {
return ch === 160 || ch === 65279 || ch === 133 || ch === 5760 || ch >= 8192 && ch <= 8203 || ch === 8239 || ch === 8287 || ch === 12288 || ch === 8201 || ch === 65519;
}
__name(isExoticECMAScriptWhitespace, "isExoticECMAScriptWhitespace");
function toHex(code) {
return code < 65 ? code - 48 : code - 65 + 10 & 15;
}
__name(toHex, "toHex");
function convertTokenType(t) {
switch (t) {
case 134283266:
return "NumericLiteral";
case 134283267:
return "StringLiteral";
case 86021:
case 86022:
return "BooleanLiteral";
case 86023:
return "NullLiteral";
case 65540:
return "RegularExpression";
case 67174408:
case 67174409:
case 131:
return "TemplateLiteral";
default:
if ((t & 143360) === 143360)
return "Identifier";
if ((t & 4096) === 4096)
return "Keyword";
return "Punctuator";
}
}
__name(convertTokenType, "convertTokenType");
var CharTypes = [
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
8 | 1024,
0,
0,
8 | 2048,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
8192,
0,
1 | 2,
0,
0,
8192,
0,
0,
0,
256,
0,
256 | 32768,
0,
0,
2 | 16 | 128 | 32 | 64,
2 | 16 | 128 | 32 | 64,
2 | 16 | 32 | 64,
2 | 16 | 32 | 64,
2 | 16 | 32 | 64,
2 | 16 | 32 | 64,
2 | 16 | 32 | 64,
2 | 16 | 32 | 64,
2 | 16 | 512 | 64,
2 | 16 | 512 | 64,
0,
0,
16384,
0,
0,
0,
0,
1 | 2 | 64,
1 | 2 | 64,
1 | 2 | 64,
1 | 2 | 64,
1 | 2 | 64,
1 | 2 | 64,
1 | 2,
1 | 2,
1 | 2,
1 | 2,
1 | 2,
1 | 2,
1 | 2,
1 | 2,
1 | 2,
1 | 2,
1 | 2,
1 | 2,
1 | 2,
1 | 2,
1 | 2,
1 | 2,
1 | 2,
1 | 2,
1 | 2,
1 | 2,
0,
1,
0,
0,
1 | 2 | 4096,
0,
1 | 2 | 4 | 64,
1 | 2 | 4 | 64,
1 | 2 | 4 | 64,
1 | 2 | 4 | 64,
1 | 2 | 4 | 64,
1 | 2 | 4 | 64,
1 | 2 | 4,
1 | 2 | 4,
1 | 2 | 4,
1 | 2 | 4,
1 | 2 | 4,
1 | 2 | 4,
1 | 2 | 4,
1 | 2 | 4,
1 | 2 | 4,
1 | 2 | 4,
1 | 2 | 4,
1 | 2 | 4,
1 | 2 | 4,
1 | 2 | 4,
1 | 2 | 4,
1 | 2 | 4,
1 | 2 | 4,
1 | 2 | 4,
1 | 2 | 4,
1 | 2 | 4,
16384,
0,
0,
0,
0
];
var isIdStart = [
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
1,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
0,
0,
0,
0,
1,
0,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
0,
0,
0,
0,
0
];
var isIdPart = [
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
1,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
0,
0,
0,
0,
0,
0,
0,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
0,
0,
0,
0,
1,
0,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
0,
0,
0,
0,
0
];
function isIdentifierStart(code) {
return code <= 127 ? isIdStart[code] > 0 : isIDStart(code);
}
__name(isIdentifierStart, "isIdentifierStart");
function isIdentifierPart(code) {
return code <= 127 ? isIdPart[code] > 0 : isIDContinue(code) || (code === 8204 || code === 8205);
}
__name(isIdentifierPart, "isIdentifierPart");
var CommentTypes = ["SingleLine", "MultiLine", "HTMLOpen", "HTMLClose", "HashbangComment"];
function skipHashBang(parser) {
const { source } = parser;
if (parser.currentChar === 35 && source.charCodeAt(parser.index + 1) === 33) {
advanceChar(parser);
advanceChar(parser);
skipSingleLineComment(parser, source, 0, 4, parser.tokenStart);
}
}
__name(skipHashBang, "skipHashBang");
function skipSingleHTMLComment(parser, source, state, context, type, start) {
if (context & 2)
parser.report(0);
return skipSingleLineComment(parser, source, state, type, start);
}
__name(skipSingleHTMLComment, "skipSingleHTMLComment");
function skipSingleLineComment(parser, source, state, type, start) {
const { index } = parser;
parser.tokenIndex = parser.index;
parser.tokenLine = parser.line;
parser.tokenColumn = parser.column;
while (parser.index < parser.end) {
if (CharTypes[parser.currentChar] & 8) {
const isCR = parser.currentChar === 13;
scanNewLine(parser);
if (isCR && parser.index < parser.end && parser.currentChar === 10)
parser.currentChar = source.charCodeAt(++parser.index);
break;
} else if ((parser.currentChar ^ 8232) <= 1) {
scanNewLine(parser);
break;
}
advanceChar(parser);
parser.tokenIndex = parser.index;
parser.tokenLine = parser.line;
parser.tokenColumn = parser.column;
}
if (parser.options.onComment) {
const loc = {
start: {
line: start.line,
column: start.column
},
end: {
line: parser.tokenLine,
column: parser.tokenColumn
}
};
parser.options.onComment(CommentTypes[type & 255], source.slice(index, parser.tokenIndex), start.index, parser.tokenIndex, loc);
}
return state | 1;
}
__name(skipSingleLineComment, "skipSingleLineComment");
function skipMultiLineComment(parser, source, state) {
const { index } = parser;
while (parser.index < parser.end) {
if (parser.currentChar < 43) {
let skippedOneAsterisk = false;
while (parser.currentChar === 42) {
if (!skippedOneAsterisk) {
state &= -5;
skippedOneAsterisk = true;
}
if (advanceChar(parser) === 47) {
advanceChar(parser);
if (parser.options.onComment) {
const loc = {
start: {
line: parser.tokenLine,
column: parser.tokenColumn
},
end: {
line: parser.line,
column: parser.column
}
};
parser.options.onComment(CommentTypes[1 & 255], source.slice(index, parser.index - 2), index - 2, parser.index, loc);
}
parser.tokenIndex = parser.index;
parser.tokenLine = parser.line;
parser.tokenColumn = parser.column;
return state;
}
}
if (skippedOneAsterisk) {
continue;
}
if (CharTypes[parser.currentChar] & 8) {
if (parser.currentChar === 13) {
state |= 1 | 4;
scanNewLine(parser);
} else {
consumeLineFeed(parser, state);
state = state & -5 | 1;
}
} else {
advanceChar(parser);
}
} else if ((parser.currentChar ^ 8232) <= 1) {
state = state & -5 | 1;
scanNewLine(parser);
} else {
state &= -5;
advanceChar(parser);
}
}
parser.report(18);
}
__name(skipMultiLineComment, "skipMultiLineComment");
var RegexState;
(function(RegexState2) {
RegexState2[RegexState2["Empty"] = 0] = "Empty";
RegexState2[RegexState2["Escape"] = 1] = "Escape";
RegexState2[RegexState2["Class"] = 2] = "Class";
})(RegexState || (RegexState = {}));
var RegexFlags;
(function(RegexFlags2) {
RegexFlags2[RegexFlags2["Empty"] = 0] = "Empty";
RegexFlags2[RegexFlags2["IgnoreCase"] = 1] = "IgnoreCase";
RegexFlags2[RegexFlags2["Global"] = 2] = "Global";
RegexFlags2[RegexFlags2["Multiline"] = 4] = "Multiline";
RegexFlags2[RegexFlags2["Unicode"] = 16] = "Unicode";
RegexFlags2[RegexFlags2["Sticky"] = 8] = "Sticky";
RegexFlags2[RegexFlags2["DotAll"] = 32] = "DotAll";
RegexFlags2[RegexFlags2["Indices"] = 64] = "Indices";
RegexFlags2[RegexFlags2["UnicodeSets"] = 128] = "UnicodeSets";
})(RegexFlags || (RegexFlags = {}));
function scanRegularExpression(parser) {
const bodyStart = parser.index;
let preparseState = RegexState.Empty;
loop: while (true) {
const ch = parser.currentChar;
advanceChar(parser);
if (preparseState & RegexState.Escape) {
preparseState &= ~RegexState.Escape;
} else {
switch (ch) {
case 47:
if (!preparseState)
break loop;
else
break;
case 92:
preparseState |= RegexState.Escape;
break;
case 91:
preparseState |= RegexState.Class;
break;
case 93:
preparseState &= RegexState.Escape;
break;
}
}
if (ch === 13 || ch === 10 || ch === 8232 || ch === 8233) {
parser.report(34);
}
if (parser.index >= parser.source.length) {
return parser.report(34);
}
}
const bodyEnd = parser.index - 1;
let mask = RegexFlags.Empty;
let char = parser.currentChar;
const { index: flagStart } = parser;
while (isIdentifierPart(char)) {
switch (char) {
case 103:
if (mask & RegexFlags.Global)
parser.report(36, "g");
mask |= RegexFlags.Global;
break;
case 105:
if (mask & RegexFlags.IgnoreCase)
parser.report(36, "i");
mask |= RegexFlags.IgnoreCase;
break;
case 109:
if (mask & RegexFlags.Multiline)
parser.report(36, "m");
mask |= RegexFlags.Multiline;
break;
case 117:
if (mask & RegexFlags.Unicode)
parser.report(36, "u");
if (mask & RegexFlags.UnicodeSets)
parser.report(36, "vu");
mask |= RegexFlags.Unicode;
break;
case 118:
if (mask & RegexFlags.Unicode)
parser.report(36, "uv");
if (mask & RegexFlags.UnicodeSets)
parser.report(36, "v");
mask |= RegexFlags.UnicodeSets;
break;
case 121:
if (mask & RegexFlags.Sticky)
parser.report(36, "y");
mask |= RegexFlags.Sticky;
break;
case 115:
if (mask & RegexFlags.DotAll)
parser.report(36, "s");
mask |= RegexFlags.DotAll;
break;
case 100:
if (mask & RegexFlags.Indices)
parser.report(36, "d");
mask |= RegexFlags.Indices;
break;
default:
parser.report(35);
}
char = advanceChar(parser);
}
const flags = parser.source.slice(flagStart, parser.index);
const pattern = parser.source.slice(bodyStart, bodyEnd);
parser.tokenRegExp = { pattern, flags };
if (parser.options.raw)
parser.tokenRaw = parser.source.slice(parser.tokenIndex, parser.index);
parser.tokenValue = validate(parser, pattern, flags);
return 65540;
}
__name(scanRegularExpression, "scanRegularExpression");
function validate(parser, pattern, flags) {
try {
return new RegExp(pattern, flags);
} catch {
try {
new RegExp(pattern, flags);
return null;
} catch {
parser.report(34);
}
}
}
__name(validate, "validate");
function scanString(parser, context, quote) {
const { index: start } = parser;
let ret = "";
let char = advanceChar(parser);
let marker = parser.index;
while ((CharTypes[char] & 8) === 0) {
if (char === quote) {
ret += parser.source.slice(marker, parser.index);
advanceChar(parser);
if (parser.options.raw)
parser.tokenRaw = parser.source.slice(start, parser.index);
parser.tokenValue = ret;
return 134283267;
}
if ((char & 8) === 8 && char === 92) {
ret += parser.source.slice(marker, parser.index);
char = advanceChar(parser);
if (char < 127 || char === 8232 || char === 8233) {
const code = parseEscape(parser, context, char);
if (code >= 0)
ret += String.fromCodePoint(code);
else
handleStringError(parser, code, 0);
} else {
ret += String.fromCodePoint(char);
}
marker = parser.index + 1;
} else if (char === 8232 || char === 8233) {
parser.column = -1;
parser.line++;
}
if (parser.index >= parser.end)
parser.report(16);
char = advanceChar(parser);
}
parser.report(16);
}
__name(scanString, "scanString");
function parseEscape(parser, context, first, isTemplate = 0) {
switch (first) {
case 98:
return 8;
case 102:
return 12;
case 114:
return 13;
case 110:
return 10;
case 116:
return 9;
case 118:
return 11;
case 13: {
if (parser.index < parser.end) {
const nextChar = parser.source.charCodeAt(parser.index + 1);
if (nextChar === 10) {
parser.index = parser.index + 1;
parser.currentChar = nextChar;
}
}
}
case 10:
case 8232:
case 8233:
parser.column = -1;
parser.line++;
return -1;
case 48:
case 49:
case 50:
case 51: {
let code = first - 48;
let index = parser.index + 1;
let column = parser.column + 1;
if (index < parser.end) {
const next = parser.source.charCodeAt(index);
if ((CharTypes[next] & 32) === 0) {
if (code !== 0 || CharTypes[next] & 512) {
if (context & 1 || isTemplate)
return -2;
parser.flags |= 64;
}
} else if (context & 1 || isTemplate) {
return -2;
} else {
parser.currentChar = next;
code = code << 3 | next - 48;
index++;
column++;
if (index < parser.end) {
const next2 = parser.source.charCodeAt(index);
if (CharTypes[next2] & 32) {
parser.currentChar = next2;
code = code << 3 | next2 - 48;
index++;
column++;
}
}
parser.flags |= 64;
}
parser.index = index - 1;
parser.column = column - 1;
}
return code;
}
case 52:
case 53:
case 54:
case 55: {
if (isTemplate || context & 1)
return -2;
let code = first - 48;
const index = parser.index + 1;
const column = parser.column + 1;
if (index < parser.end) {
const next = parser.source.charCodeAt(index);
if (CharTypes[next] & 32) {
code = code << 3 | next - 48;
parser.currentChar = next;
parser.index = index;
parser.column = column;
}
}
parser.flags |= 64;
return code;
}
case 120: {
const ch1 = advanceChar(parser);
if ((CharTypes[ch1] & 64) === 0)
return -4;
const hi = toHex(ch1);
const ch2 = advanceChar(parser);
if ((CharTypes[ch2] & 64) === 0)
return -4;
const lo = toHex(ch2);
return hi << 4 | lo;
}
case 117: {
const ch = advanceChar(parser);
if (parser.currentChar === 123) {
let code = 0;
while ((CharTypes[advanceChar(parser)] & 64) !== 0) {
code = code << 4 | toHex(parser.currentChar);
if (code > 1114111)
return -5;
}
if (parser.currentChar < 1 || parser.currentChar !== 125) {
return -4;
}
return code;
} else {
if ((CharTypes[ch] & 64) === 0)
return -4;
const ch2 = parser.source.charCodeAt(parser.index + 1);
if ((CharTypes[ch2] & 64) === 0)
return -4;
const ch3 = parser.source.charCodeAt(parser.index + 2);
if ((CharTypes[ch3] & 64) === 0)
return -4;
const ch4 = parser.source.charCodeAt(parser.index + 3);
if ((CharTypes[ch4] & 64) === 0)
return -4;
parser.index += 3;
parser.column += 3;
parser.currentChar = parser.source.charCodeAt(parser.index);
return toHex(ch) << 12 | toHex(ch2) << 8 | toHex(ch3) << 4 | toHex(ch4);
}
}
case 56:
case 57:
if (isTemplate || !parser.options.webcompat || context & 1)
return -3;
parser.flags |= 4096;
default:
return first;
}
}
__name(parseEscape, "parseEscape");
function handleStringError(parser, code, isTemplate) {
switch (code) {
case -1:
return;
case -2:
parser.report(isTemplate ? 2 : 1);
case -3:
parser.report(isTemplate ? 3 : 14);
case -4:
parser.report(7);
case -5:
parser.report(104);
}
}
__name(handleStringError, "handleStringError");
function scanTemplate(parser, context) {
const { index: start } = parser;
let token = 67174409;
let ret = "";
let char = advanceChar(parser);
while (char !== 96) {
if (char === 36 && parser.source.charCodeAt(parser.index + 1) === 123) {
advanceChar(parser);
token = 67174408;
break;
} else if (char === 92) {
char = advanceChar(parser);
if (char > 126) {
ret += String.fromCodePoint(char);
} else {
const { index, line, column } = parser;
const code = parseEscape(parser, context | 1, char, 1);
if (code >= 0) {
ret += String.fromCodePoint(code);
} else if (code !== -1 && context & 64) {
parser.index = index;
parser.line = line;
parser.column = column;
ret = null;
char = scanBadTemplate(parser, char);
if (char < 0)
token = 67174408;
break;
} else {
handleStringError(parser, code, 1);
}
}
} else if (parser.index < parser.end) {
if (char === 13 && parser.source.charCodeAt(parser.index) === 10) {
ret += String.fromCodePoint(char);
parser.currentChar = parser.source.charCodeAt(++parser.index);
}
if ((char & 83) < 3 && char === 10 || (char ^ 8232) <= 1) {
parser.column = -1;
parser.line++;
}
ret += String.fromCodePoint(char);
}
if (parser.index >= parser.end)
parser.report(17);
char = advanceChar(parser);
}
advanceChar(parser);
parser.tokenValue = ret;
parser.tokenRaw = parser.source.slice(start + 1, parser.index - (token === 67174409 ? 1 : 2));
return token;
}
__name(scanTemplate, "scanTemplate");
function scanBadTemplate(parser, ch) {
while (ch !== 96) {
switch (ch) {
case 36: {
const index = parser.index + 1;
if (index < parser.end && parser.source.charCodeAt(index) === 123) {
parser.index = index;
parser.column++;
return -ch;
}
break;
}
case 10:
case 8232:
case 8233:
parser.column = -1;
parser.line++;
}
if (parser.index >= parser.end)
parser.report(17);
ch = advanceChar(parser);
}
return ch;
}
__name(scanBadTemplate, "scanBadTemplate");
function scanTemplateTail(parser, context) {
if (parser.index >= parser.end)
parser.report(0);
parser.index--;
parser.column--;
return scanTemplate(parser, context);
}
__name(scanTemplateTail, "scanTemplateTail");
var errorMessages = {
[0]: "Unexpected token",
[30]: "Unexpected token: '%0'",
[1]: "Octal escape sequences are not allowed in strict mode",
[2]: "Octal escape sequences are not allowed in template strings",
[3]: "\\8 and \\9 are not allowed in template strings",
[4]: "Private identifier #%0 is not defined",
[5]: "Illegal Unicode escape sequence",
[6]: "Invalid code point %0",
[7]: "Invalid hexadecimal escape sequence",
[9]: "Octal literals are not allowed in strict mode",
[8]: "Decimal integer literals with a leading zero are forbidden in strict mode",
[10]: "Expected number in radix %0",
[151]: "Invalid left-hand side assignment to a destructible right-hand side",
[11]: "Non-number found after exponent indicator",
[12]: "Invalid BigIntLiteral",
[13]: "No identifiers allowed directly after numeric literal",
[14]: "Escapes \\8 or \\9 are not syntactically valid escapes",
[15]: "Escapes \\8 or \\9 are not allowed in strict mode",
[16]: "Unterminated string literal",
[17]: "Unterminated template literal",
[18]: "Multiline comment was not closed properly",
[19]: "The identifier contained dynamic unicode escape that was not closed",
[20]: "Illegal character '%0'",
[21]: "Missing hexadecimal digits",
[22]: "Invalid implicit octal",
[23]: "Invalid line break in string literal",
[24]: "Only unicode escapes are legal in identifier names",
[25]: "Expected '%0'",
[26]: "Invalid left-hand side in assignment",
[27]: "Invalid left-hand side in async arrow",
[28]: 'Calls to super must be in the "constructor" method of a class expression or class declaration that has a superclass',
[29]: "Member access on super must be in a method",
[31]: "Await expression not allowed in formal parameter",
[32]: "Yield expression not allowed in formal parameter",
[95]: "Unexpected token: 'escaped keyword'",
[33]: "Unary expressions as the left operand of an exponentiation expression must be disambiguated with parentheses",
[123]: "Async functions can only be declared at the top level or inside a block",
[34]: "Unterminated regular expression",
[35]: "Unexpected regular expression flag",
[36]: "Duplicate regular expression flag '%0'",
[37]: "%0 functions must have exactly %1 argument%2",
[38]: "Setter function argument must not be a rest parameter",
[39]: "%0 declaration must have a name in this context",
[40]: "Function name may not contain any reserved words or be eval or arguments in strict mode",
[41]: "The rest operator is missing an argument",
[42]: "A getter cannot be a generator",
[43]: "A setter cannot be a generator",
[44]: "A computed property name must be followed by a colon or paren",
[134]: "Object literal keys that are strings or numbers must be a method or have a colon",
[46]: "Found `* async x(){}` but this should be `async * x(){}`",
[45]: "Getters and setters can not be generators",
[47]: "'%0' can not be generator method",
[48]: "No line break is allowed after '=>'",
[49]: "The left-hand side of the arrow can only be destructed through assignment",
[50]: "The binding declaration is not destructible",
[51]: "Async arrow can not be followed by new expression",
[52]: "Classes may not have a static property named 'prototype'",
[53]: "Class constructor may not be a %0",
[54]: "Duplicate constructor method in class",
[55]: "Invalid increment/decrement operand",
[56]: "Invalid use of `new` keyword on an increment/decrement expression",
[57]: "`=>` is an invalid assignment target",
[58]: "Rest element may not have a trailing comma",
[59]: "Missing initializer in %0 declaration",
[60]: "'for-%0' loop head declarations can not have an initializer",
[61]: "Invalid left-hand side in for-%0 loop: Must have a single binding",
[62]: "Invalid shorthand property initializer",
[63]: "Property name __proto__ appears more than once in object literal",
[64]: "Let is disallowed as a lexically bound name",
[65]: "Invalid use of '%0' inside new expression",
[66]: "Illegal 'use strict' directive in function with non-simple parameter list",
[67]: 'Identifier "let" disallowed as left-hand side expression in strict mode',
[68]: "Illegal continue statement",
[69]: "Illegal break statement",
[70]: "Cannot have `let[...]` as a var name in strict mode",
[71]: "Invalid destructuring assignment target",
[72]: "Rest parameter may not have a default initializer",
[73]: "The rest argument must the be last parameter",
[74]: "Invalid rest argument",
[76]: "In strict mode code, functions can only be declared at top level or inside a block",
[77]: "In non-strict mode code, functions can only be declared at top level, inside a block, or as the body of an if statement",
[78]: "Without web compatibility enabled functions can not be declared at top level, inside a block, or as the body of an if statement",
[79]: "Class declaration can't appear in single-statement context",
[80]: "Invalid left-hand side in for-%0",
[81]: "Invalid assignment in for-%0",
[82]: "for await (... of ...) is only valid in async functions and async generators",
[83]: "The first token after the template expression should be a continuation of the template",
[85]: "`let` declaration not allowed here and `let` cannot be a regular var name in strict mode",
[84]: "`let \n [` is a restricted production at the start of a statement",
[86]: "Catch clause requires exactly one parameter, not more (and no trailing comma)",
[87]: "Catch clause parameter does not support default values",
[88]: "Missing catch or finally after try",
[89]: "More than one default clause in switch statement",
[90]: "Illegal newline after throw",
[91]: "Strict mode code may not include a with statement",
[92]: "Illegal return statement",
[93]: "The left hand side of the for-header binding declaration is not destructible",
[94]: "new.target only allowed within functions or static blocks",
[96]: "'#' not followed by identifier",
[102]: "Invalid keyword",
[101]: "Can not use 'let' as a class name",
[100]: "'A lexical declaration can't define a 'let' binding",
[99]: "Can not use `let` as variable name in strict mode",
[97]: "'%0' may not be used as an identifier in this context",
[98]: "Await is only valid in async functions",
[103]: "The %0 keyword can only be used with the module goal",
[104]: "Unicode codepoint must not be greater than 0x10FFFF",
[105]: "%0 source must be string",
[106]: "Only a identifier or string can be used to indicate alias",
[107]: "Only '*' or '{...}' can be imported after default",
[108]: "Trailing decorator may be followed by method",
[109]: "Decorators can't be used with a constructor",
[110]: "Can not use `await` as identifier in module or async func",
[111]: "Can not use `await` as identifier in module",
[112]: "HTML comments are only allowed with web compatibility (Annex B)",
[113]: "The identifier 'let' must not be in expression position in strict mode",
[114]: "Cannot assign to `eval` and `arguments` in strict mode",
[115]: "The left-hand side of a for-of loop may not start with 'let'",
[116]: "Block body arrows can not be immediately invoked without a group",
[117]: "Block body arrows can not be immediately accessed without a group",
[118]: "Unexpected strict mode reserved word",
[119]: "Unexpected eval or arguments in strict mode",
[120]: "Decorators must not be followed by a semicolon",
[121]: "Calling delete on expression not allowed in strict mode",
[122]: "Pattern can not have a tail",
[124]: "Can not have a `yield` expression on the left side of a ternary",
[125]: "An arrow function can not have a postfix update operator",
[126]: "Invalid object literal key character after generator star",
[127]: "Private fields can not be deleted",
[129]: "Classes may not have a field called constructor",
[128]: "Classes may not have a private element named constructor",
[130]: "A class field initializer or static block may not contain arguments",
[131]: "Generators can only be declared at the top level or inside a block",
[132]: "Async methods are a restricted production and cannot have a newline following it",
[133]: "Unexpected character after object literal property name",
[135]: "Invalid key token",
[136]: "Label '%0' has already been declared",
[137]: "continue statement must be nested within an iteration statement",
[138]: "Undefined label '%0'",
[139]: "Trailing comma is disallowed inside import(...) arguments",
[140]: "Invalid binding in JSON import",
[141]: "import() requires exactly one argument",
[142]: "Cannot use new with import(...)",
[143]: "... is not allowed in import()",
[144]: "Expected '=>'",
[145]: "Duplicate binding '%0'",
[146]: "Duplicate private identifier #%0",
[147]: "Cannot export a duplicate name '%0'",
[150]: "Duplicate %0 for-binding",
[148]: "Exported binding '%0' needs to refer to a top-level declared variable",
[149]: "Unexpected private field",
[153]: "Numeric separators are not allowed at the end of numeric literals",
[152]: "Only one underscore is allowed as numeric separator",
[154]: "JSX value should be either an expression or a quoted JSX text",
[155]: "Expected corresponding JSX closing tag for %0",
[156]: "Adjacent JSX elements must be wrapped in an enclosing tag",
[157]: "JSX attributes must only be assigned a non-empty 'expression'",
[158]: "'%0' has already been declared",
[159]: "'%0' shadowed a catch clause binding",
[160]: "Dot property must be an identifier",
[161]: "Encountered invalid input after spread/rest argument",
[162]: "Catch without try",
[163]: "Finally without try",
[164]: "Expected corresponding closing tag for JSX fragment",
[165]: "Coalescing and logical operators used together in the same expression must be disambiguated with parentheses",
[166]: "Invalid tagged template on optional chain",
[167]: "Invalid optional chain from super property",
[168]: "Invalid optional chain from new expression",
[169]: 'Cannot use "import.meta" outside a module',
[170]: "Leading decorators must be attached to a class declaration",
[171]: "An export name cannot include a lone surrogate, found %0",
[172]: "A string literal cannot be used as an exported binding without `from`",
[173]: "Private fields can't be accessed on super",
[174]: "The only valid meta property for import is 'import.meta'",
[175]: "'import.meta' must not contain escaped characters",
[176]: 'cannot use "await" as identifier inside an async function',
[177]: 'cannot use "await" in static blocks'
};
var _ParseError = class _ParseError extends SyntaxError {
constructor(start, end, type, ...params) {
const description = errorMessages[type].replace(/%(\d+)/g, (_, i) => params[i]);
const message = "[" + start.line + ":" + start.column + "-" + end.line + ":" + end.column + "]: " + description;
super(message);
__publicField(this, "start");
__publicField(this, "end");
__publicField(this, "range");
__publicField(this, "loc");
__publicField(this, "description");
this.start = start.index;
this.end = end.index;
this.range = [start.index, end.index];
this.loc = {
start: { line: start.line, column: start.column },
end: { line: end.line, column: end.column }
};
this.description = description;
}
};
__name(_ParseError, "ParseError");
var ParseError = _ParseError;
function scanNumber(parser, context, kind) {
let char = parser.currentChar;
let value = 0;
let digit = 9;
let atStart = kind & 64 ? 0 : 1;
let digits = 0;
let allowSeparator = 0;
if (kind & 64) {
value = "." + scanDecimalDigitsOrSeparator(parser, char);
char = parser.currentChar;
if (char === 110)
parser.report(12);
} else {
if (char === 48) {
char = advanceChar(parser);
if ((char | 32) === 120) {
kind = 8 | 128;
char = advanceChar(parser);
while (CharTypes[char] & (64 | 4096)) {
if (char === 95) {
if (!allowSeparator)
parser.report(152);
allowSeparator = 0;
char = advanceChar(parser);
continue;
}
allowSeparator = 1;
value = value * 16 + toHex(char);
digits++;
char = advanceChar(parser);
}
if (digits === 0 || !allowSeparator) {
parser.report(digits === 0 ? 21 : 153);
}
} else if ((char | 32) === 111) {
kind = 4 | 128;
char = advanceChar(parser);
while (CharTypes[char] & (32 | 4096)) {
if (char === 95) {
if (!allowSeparator) {
parser.report(152);
}
allowSeparator = 0;
char = advanceChar(parser);
continue;
}
allowSeparator = 1;
value = value * 8 + (char - 48);
digits++;
char = advanceChar(parser);
}
if (digits === 0 || !allowSeparator) {
parser.report(digits === 0 ? 0 : 153);
}
} else if ((char | 32) === 98) {
kind = 2 | 128;
char = advanceChar(parser);
while (CharTypes[char] & (128 | 4096)) {
if (char === 95) {
if (!allowSeparator) {
parser.report(152);
}
allowSeparator = 0;
char = advanceChar(parser);
continue;
}
allowSeparator = 1;
value = value * 2 + (char - 48);
digits++;
char = advanceChar(parser);
}
if (digits === 0 || !allowSeparator) {
parser.report(digits === 0 ? 0 : 153);
}
} else if (CharTypes[char] & 32) {
if (context & 1)
parser.report(1);
kind = 1;
while (CharTypes[char] & 16) {
if (CharTypes[char] & 512) {
kind = 32;
atStart = 0;
break;
}
value = value * 8 + (char - 48);
char = advanceChar(parser);
}
} else if (CharTypes[char] & 512) {
if (context & 1)
parser.report(1);
parser.flags |= 64;
kind = 32;
} else if (char === 95) {
parser.report(0);
}
}
if (kind & 48) {
if (atStart) {
while (digit >= 0 && CharTypes[char] & (16 | 4096)) {
if (char === 95) {
char = advanceChar(parser);
if (char === 95 || kind & 32) {
throw new ParseError(parser.currentLocation, { index: parser.index + 1, line: parser.line, column: parser.column }, 152);
}
allowSeparator = 1;
continue;
}
allowSeparator = 0;
value = 10 * value + (char - 48);
char = advanceChar(parser);
--digit;
}
if (allowSeparator) {
throw new ParseError(parser.currentLocation, { index: parser.index + 1, line: parser.line, column: parser.column }, 153);
}
if (digit >= 0 && !isIdentifierStart(char) && char !== 46) {
parser.tokenValue = value;
if (parser.options.raw)
parser.tokenRaw = parser.source.slice(parser.tokenIndex, parser.index);
return 134283266;
}
}
value += scanDecimalDigitsOrSeparator(parser, char);
char = parser.currentChar;
if (char === 46) {
if (advanceChar(parser) === 95)
parser.report(0);
kind = 64;
value += "." + scanDecimalDigitsOrSeparator(parser, parser.currentChar);
char = parser.currentChar;
}
}
}
const end = parser.index;
let isBigInt = 0;
if (char === 110 && kind & 128) {
isBigInt = 1;
char = advanceChar(parser);
} else {
if ((char | 32) === 101) {
char = advanceChar(parser);
if (CharTypes[char] & 256)
char = advanceChar(parser);
const { index } = parser;
if ((CharTypes[char] & 16) === 0)
parser.report(11);
value += parser.source.substring(end, index) + scanDecimalDigitsOrSeparator(parser, char);
char = parser.currentChar;
}
}
if (parser.index < parser.end && CharTypes[char] & 16 || isIdentifierStart(char)) {
parser.report(13);
}
if (isBigInt) {
parser.tokenRaw = parser.source.slice(parser.tokenIndex, parser.index);
parser.tokenValue = BigInt(parser.tokenRaw.slice(0, -1).replaceAll("_", ""));
return 134283388;
}
parser.tokenValue = kind & (1 | 2 | 8 | 4) ? value : kind & 32 ? parseFloat(parser.source.substring(parser.tokenIndex, parser.index)) : +value;
if (parser.options.raw)
parser.tokenRaw = parser.source.slice(parser.tokenIndex, parser.index);
return 134283266;
}
__name(scanNumber, "scanNumber");
function scanDecimalDigitsOrSeparator(parser, char) {
let allowSeparator = 0;
let start = parser.index;
let ret = "";
while (CharTypes[char] & (16 | 4096)) {
if (char === 95) {
const { index } = parser;
char = advanceChar(parser);
if (char === 95) {
throw new ParseError(parser.currentLocation, { index: parser.index + 1, line: parser.line, column: parser.column }, 152);
}
allowSeparator = 1;
ret += parser.source.substring(start, index);
start = parser.index;
continue;
}
allowSeparator = 0;
char = advanceChar(parser);
}
if (allowSeparator) {
throw new ParseError(parser.currentLocation, { index: parser.index + 1, line: parser.line, column: parser.column }, 153);
}
return ret + parser.source.substring(start, parser.index);
}
__name(scanDecimalDigitsOrSeparator, "scanDecimalDigitsOrSeparator");
var KeywordDescTable = [
"end of source",
"identifier",
"number",
"string",
"regular expression",
"false",
"true",
"null",
"template continuation",
"template tail",
"=>",
"(",
"{",
".",
"...",
"}",
")",
";",
",",
"[",
"]",
":",
"?",
"'",
'"',
"++",
"--",
"=",
"<<=",
">>=",
">>>=",
"**=",
"+=",
"-=",
"*=",
"/=",
"%=",
"^=",
"|=",
"&=",
"||=",
"&&=",
"??=",
"typeof",
"delete",
"void",
"!",
"~",
"+",
"-",
"in",
"instanceof",
"*",
"%",
"/",
"**",
"&&",
"||",
"===",
"!==",
"==",
"!=",
"<=",
">=",
"<",
">",
"<<",
">>",
">>>",
"&",
"|",
"^",
"var",
"let",
"const",
"break",
"case",
"catch",
"class",
"continue",
"debugger",
"default",
"do",
"else",
"export",
"extends",
"finally",
"for",
"function",
"if",
"import",
"new",
"return",
"super",
"switch",
"this",
"throw",
"try",
"while",
"with",
"implements",
"interface",
"package",
"private",
"protected",
"public",
"static",
"yield",
"as",
"async",
"await",
"constructor",
"get",
"set",
"accessor",
"from",
"of",
"enum",
"eval",
"arguments",
"escaped keyword",
"escaped future reserved keyword",
"reserved if strict",
"#",
"BigIntLiteral",
"??",
"?.",
"WhiteSpace",
"Illegal",
"LineTerminator",
"PrivateField",
"Template",
"@",
"target",
"meta",
"LineFeed",
"Escaped",
"JSXText"
];
var descKeywordTable = {
this: 86111,
function: 86104,
if: 20569,
return: 20572,
var: 86088,
else: 20563,
for: 20567,
new: 86107,
in: 8673330,
typeof: 16863275,
while: 20578,
case: 20556,
break: 20555,
try: 20577,
catch: 20557,
delete: 16863276,
throw: 86112,
switch: 86110,
continue: 20559,
default: 20561,
instanceof: 8411187,
do: 20562,
void: 16863277,
finally: 20566,
async: 209005,
await: 209006,
class: 86094,
const: 86090,
constructor: 12399,
debugger: 20560,
export: 20564,
extends: 20565,
false: 86021,
from: 209011,
get: 209008,
implements: 36964,
import: 86106,
interface: 36965,
let: 241737,
null: 86023,
of: 471156,
package: 36966,
private: 36967,
protected: 36968,
public: 36969,
set: 209009,
static: 36970,
super: 86109,
true: 86022,
with: 20579,
yield: 241771,
enum: 86133,
eval: 537079926,
as: 77932,
arguments: 537079927,
target: 209029,
meta: 209030,
accessor: 12402
};
function matchOrInsertSemicolon(parser, context) {
if ((parser.flags & 1) === 0 && (parser.getToken() & 1048576) !== 1048576) {
parser.report(30, KeywordDescTable[parser.getToken() & 255]);
}
if (!consumeOpt(parser, context, 1074790417)) {
parser.options.onInsertedSemicolon?.(parser.startIndex);
}
}
__name(matchOrInsertSemicolon, "matchOrInsertSemicolon");
function isValidStrictMode(parser, index, tokenIndex, tokenValue) {
if (index - tokenIndex < 13 && tokenValue === "use strict") {
if ((parser.getToken() & 1048576) === 1048576 || parser.flags & 1) {
return 1;
}
}
return 0;
}
__name(isValidStrictMode, "isValidStrictMode");
function optionalBit(parser, context, t) {
if (parser.getToken() !== t)
return 0;
nextToken(parser, context);
return 1;
}
__name(optionalBit, "optionalBit");
function consumeOpt(parser, context, t) {
if (parser.getToken() !== t)
return false;
nextToken(parser, context);
return true;
}
__name(consumeOpt, "consumeOpt");
function consume(parser, context, t) {
if (parser.getToken() !== t)
parser.report(25, KeywordDescTable[t & 255]);
nextToken(parser, context);
}
__name(consume, "consume");
function reinterpretToPattern(parser, node) {
switch (node.type) {
case "ArrayExpression": {
node.type = "ArrayPattern";
const { elements } = node;
for (let i = 0, n = elements.length; i < n; ++i) {
const element = elements[i];
if (element)
reinterpretToPattern(parser, element);
}
return;
}
case "ObjectExpression": {
node.type = "ObjectPattern";
const { properties } = node;
for (let i = 0, n = properties.length; i < n; ++i) {
reinterpretToPattern(parser, properties[i]);
}
return;
}
case "AssignmentExpression":
node.type = "AssignmentPattern";
if (node.operator !== "=")
parser.report(71);
delete node.operator;
reinterpretToPattern(parser, node.left);
return;
case "Property":
reinterpretToPattern(parser, node.value);
return;
case "SpreadElement":
node.type = "RestElement";
reinterpretToPattern(parser, node.argument);
}
}
__name(reinterpretToPattern, "reinterpretToPattern");
function validateBindingIdentifier(parser, context, kind, t, skipEvalArgCheck) {
if (context & 1) {
if ((t & 36864) === 36864) {
parser.report(118);
}
if (!skipEvalArgCheck && (t & 537079808) === 537079808) {
parser.report(119);
}
}
if ((t & 20480) === 20480 || t === -2147483528) {
parser.report(102);
}
if (kind & (8 | 16) && (t & 255) === (241737 & 255)) {
parser.report(100);
}
if (context & (2048 | 2) && t === 209006) {
parser.report(110);
}
if (context & (1024 | 1) && t === 241771) {
parser.report(97, "yield");
}
}
__name(validateBindingIdentifier, "validateBindingIdentifier");
function validateFunctionName(parser, context, t) {
if (context & 1) {
if ((t & 36864) === 36864) {
parser.report(118);
}
if ((t & 537079808) === 537079808) {
parser.report(119);
}
if (t === -2147483527) {
parser.report(95);
}
if (t === -2147483528) {
parser.report(95);
}
}
if ((t & 20480) === 20480) {
parser.report(102);
}
if (context & (2048 | 2) && t === 209006) {
parser.report(110);
}
if (context & (1024 | 1) && t === 241771) {
parser.report(97, "yield");
}
}
__name(validateFunctionName, "validateFunctionName");
function isStrictReservedWord(parser, context, t) {
if (t === 209006) {
if (context & (2048 | 2))
parser.report(110);
parser.destructible |= 128;
}
if (t === 241771 && context & 1024)
parser.report(97, "yield");
return (t & 20480) === 20480 || (t & 36864) === 36864 || t == -2147483527;
}
__name(isStrictReservedWord, "isStrictReservedWord");
function isPropertyWithPrivateFieldKey(expr) {
return !expr.property ? false : expr.property.type === "PrivateIdentifier";
}
__name(isPropertyWithPrivateFieldKey, "isPropertyWithPrivateFieldKey");
function isValidLabel(parser, labels, name, isIterationStatement) {
while (labels) {
if (labels["$" + name]) {
if (isIterationStatement)
parser.report(137);
return 1;
}
if (isIterationStatement && labels.loop)
isIterationStatement = 0;
labels = labels["$"];
}
return 0;
}
__name(isValidLabel, "isValidLabel");
function validateAndDeclareLabel(parser, labels, name) {
let set = labels;
while (set) {
if (set["$" + name])
parser.report(136, name);
set = set["$"];
}
labels["$" + name] = 1;
}
__name(validateAndDeclareLabel, "validateAndDeclareLabel");
function isEqualTagName(elementName) {
switch (elementName.type) {
case "JSXIdentifier":
return elementName.name;
case "JSXNamespacedName":
return elementName.namespace + ":" + elementName.name;
case "JSXMemberExpression":
return isEqualTagName(elementName.object) + "." + isEqualTagName(elementName.property);
}
}
__name(isEqualTagName, "isEqualTagName");
function isValidIdentifier(context, t) {
if (context & (1 | 1024)) {
if (context & 2 && t === 209006)
return false;
if (context & 1024 && t === 241771)
return false;
return (t & 12288) === 12288;
}
return (t & 12288) === 12288 || (t & 36864) === 36864;
}
__name(isValidIdentifier, "isValidIdentifier");
function classifyIdentifier(parser, context, t) {
if ((t & 537079808) === 537079808) {
if (context & 1)
parser.report(119);
parser.flags |= 512;
}
if (!isValidIdentifier(context, t))
parser.report(0);
}
__name(classifyIdentifier, "classifyIdentifier");
function getOwnProperty(object, key) {
return Object.hasOwn(object, key) ? object[key] : void 0;
}
__name(getOwnProperty, "getOwnProperty");
function scanIdentifier(parser, context, isValidAsKeyword) {
while (isIdPart[advanceChar(parser)])
;
parser.tokenValue = parser.source.slice(parser.tokenIndex, parser.index);
return parser.currentChar !== 92 && parser.currentChar <= 126 ? getOwnProperty(descKeywordTable, parser.tokenValue) ?? 208897 : scanIdentifierSlowCase(parser, context, 0, isValidAsKeyword);
}
__name(scanIdentifier, "scanIdentifier");
function scanUnicodeIdentifier(parser, context) {
const cookedChar = scanIdentifierUnicodeEscape(parser);
if (!isIdentifierStart(cookedChar))
parser.report(5);
parser.tokenValue = String.fromCodePoint(cookedChar);
return scanIdentifierSlowCase(parser, context, 1, CharTypes[cookedChar] & 4);
}
__name(scanUnicodeIdentifier, "scanUnicodeIdentifier");
function scanIdentifierSlowCase(parser, context, hasEscape, isValidAsKeyword) {
let start = parser.index;
while (parser.index < parser.end) {
if (parser.currentChar === 92) {
parser.tokenValue += parser.source.slice(start, parser.index);
hasEscape = 1;
const code = scanIdentifierUnicodeEscape(parser);
if (!isIdentifierPart(code))
parser.report(5);
isValidAsKeyword = isValidAsKeyword && CharTypes[code] & 4;
parser.tokenValue += String.fromCodePoint(code);
start = parser.index;
} else {
const merged = consumePossibleSurrogatePair(parser);
if (merged > 0) {
if (!isIdentifierPart(merged)) {
parser.report(20, String.fromCodePoint(merged));
}
parser.currentChar = merged;
parser.index++;
parser.column++;
} else if (!isIdentifierPart(parser.currentChar)) {
break;
}
advanceChar(parser);
}
}
if (parser.index <= parser.end) {
parser.tokenValue += parser.source.slice(start, parser.index);
}
const { length } = parser.tokenValue;
if (isValidAsKeyword && length >= 2 && length <= 11) {
const token = getOwnProperty(descKeywordTable, parser.tokenValue);
if (token === void 0)
return 208897 | (hasEscape ? -2147483648 : 0);
if (!hasEscape)
return token;
if (token === 209006) {
if ((context & (2 | 2048)) === 0) {
return token | -2147483648;
}
return -2147483528;
}
if (context & 1) {
if (token === 36970) {
return -2147483527;
}
if ((token & 36864) === 36864) {
return -2147483527;
}
if ((token & 20480) === 20480) {
if (context & 262144 && (context & 8) === 0) {
return token | -2147483648;
} else {
return -2147483528;
}
}
return 209018 | -2147483648;
}
if (context & 262144 && (context & 8) === 0 && (token & 20480) === 20480) {
return token | -2147483648;
}
if (token === 241771) {
return context & 262144 ? 209018 | -2147483648 : context & 1024 ? -2147483528 : token | -2147483648;
}
if (token === 209005) {
return 209018 | -2147483648;
}
if ((token & 36864) === 36864) {
return token | 12288 | -2147483648;
}
return -2147483528;
}
return 208897 | (hasEscape ? -2147483648 : 0);
}
__name(scanIdentifierSlowCase, "scanIdentifierSlowCase");
function scanPrivateIdentifier(parser) {
let char = advanceChar(parser);
if (char === 92)
return 130;
const merged = consumePossibleSurrogatePair(parser);
if (merged)
char = merged;
if (!isIdentifierStart(char))
parser.report(96);
return 130;
}
__name(scanPrivateIdentifier, "scanPrivateIdentifier");
function scanIdentifierUnicodeEscape(parser) {
if (parser.source.charCodeAt(parser.index + 1) !== 117) {
parser.report(5);
}
parser.currentChar = parser.source.charCodeAt(parser.index += 2);
parser.column += 2;
return scanUnicodeEscape(parser);
}
__name(scanIdentifierUnicodeEscape, "scanIdentifierUnicodeEscape");
function scanUnicodeEscape(parser) {
let codePoint = 0;
const char = parser.currentChar;
if (char === 123) {
const begin = parser.index - 2;
while (CharTypes[advanceChar(parser)] & 64) {
codePoint = codePoint << 4 | toHex(parser.currentChar);
if (codePoint > 1114111)
throw new ParseError({ index: begin, line: parser.line, column: parser.column }, parser.currentLocation, 104);
}
if (parser.currentChar !== 125) {
throw new ParseError({ index: begin, line: parser.line, column: parser.column }, parser.currentLocation, 7);
}
advanceChar(parser);
return codePoint;
}
if ((CharTypes[char] & 64) === 0)
parser.report(7);
const char2 = parser.source.charCodeAt(parser.index + 1);
if ((CharTypes[char2] & 64) === 0)
parser.report(7);
const char3 = parser.source.charCodeAt(parser.index + 2);
if ((CharTypes[char3] & 64) === 0)
parser.report(7);
const char4 = parser.source.charCodeAt(parser.index + 3);
if ((CharTypes[char4] & 64) === 0)
parser.report(7);
codePoint = toHex(char) << 12 | toHex(char2) << 8 | toHex(char3) << 4 | toHex(char4);
parser.currentChar = parser.source.charCodeAt(parser.index += 4);
parser.column += 4;
return codePoint;
}
__name(scanUnicodeEscape, "scanUnicodeEscape");
var TokenLookup = [
128,
128,
128,
128,
128,
128,
128,
128,
128,
127,
135,
127,
127,
129,
128,
128,
128,
128,
128,
128,
128,
128,
128,
128,
128,
128,
128,
128,
128,
128,
128,
128,
127,
16842798,
134283267,
130,
208897,
8391477,
8390213,
134283267,
67174411,
16,
8391476,
25233968,
18,
25233969,
67108877,
8457014,
134283266,
134283266,
134283266,
134283266,
134283266,
134283266,
134283266,
134283266,
134283266,
134283266,
21,
1074790417,
8456256,
1077936155,
8390721,
22,
132,
208897,
208897,
208897,
208897,
208897,
208897,
208897,
208897,
208897,
208897,
208897,
208897,
208897,
208897,
208897,
208897,
208897,
208897,
208897,
208897,
208897,
208897,
208897,
208897,
208897,
208897,
69271571,
136,
20,
8389959,
208897,
131,
4096,
4096,
4096,
4096,
4096,
4096,
4096,
208897,
4096,
208897,
208897,
4096,
208897,
4096,
208897,
4096,
208897,
4096,
4096,
4096,
208897,
4096,
4096,
208897,
4096,
4096,
2162700,
8389702,
1074790415,
16842799,
128
];
function nextToken(parser, context) {
parser.flags = (parser.flags | 1) ^ 1;
parser.startIndex = parser.index;
parser.startColumn = parser.column;
parser.startLine = parser.line;
parser.setToken(scanSingleToken(parser, context, 0));
}
__name(nextToken, "nextToken");
function scanSingleToken(parser, context, state) {
const isStartOfLine = parser.index === 0;
const { source } = parser;
let start = parser.currentLocation;
while (parser.index < parser.end) {
parser.tokenIndex = parser.index;
parser.tokenColumn = parser.column;
parser.tokenLine = parser.line;
let char = parser.currentChar;
if (char <= 126) {
const token = TokenLookup[char];
switch (token) {
case 67174411:
case 16:
case 2162700:
case 1074790415:
case 69271571:
case 20:
case 21:
case 1074790417:
case 18:
case 16842799:
case 132:
case 128:
advanceChar(parser);
return token;
case 208897:
return scanIdentifier(parser, context, 0);
case 4096:
return scanIdentifier(parser, context, 1);
case 134283266:
return scanNumber(parser, context, 16 | 128);
case 134283267:
return scanString(parser, context, char);
case 131:
return scanTemplate(parser, context);
case 136:
return scanUnicodeIdentifier(parser, context);
case 130:
return scanPrivateIdentifier(parser);
case 127:
advanceChar(parser);
break;
case 129:
state |= 1 | 4;
scanNewLine(parser);
break;
case 135:
consumeLineFeed(parser, state);
state = state & -5 | 1;
break;
case 8456256: {
const ch = advanceChar(parser);
if (parser.index < parser.end) {
if (ch === 60) {
if (parser.index < parser.end && advanceChar(parser) === 61) {
advanceChar(parser);
return 4194332;
}
return 8390978;
} else if (ch === 61) {
advanceChar(parser);
return 8390718;
}
if (ch === 33) {
const index = parser.index + 1;
if (index + 1 < parser.end && source.charCodeAt(index) === 45 && source.charCodeAt(index + 1) == 45) {
parser.column += 3;
parser.currentChar = source.charCodeAt(parser.index += 3);
state = skipSingleHTMLComment(parser, source, state, context, 2, parser.tokenStart);
start = parser.tokenStart;
continue;
}
return 8456256;
}
}
return 8456256;
}
case 1077936155: {
advanceChar(parser);
const ch = parser.currentChar;
if (ch === 61) {
if (advanceChar(parser) === 61) {
advanceChar(parser);
return 8390458;
}
return 8390460;
}
if (ch === 62) {
advanceChar(parser);
return 10;
}
return 1077936155;
}
case 16842798:
if (advanceChar(parser) !== 61) {
return 16842798;
}
if (advanceChar(parser) !== 61) {
return 8390461;
}
advanceChar(parser);
return 8390459;
case 8391477:
if (advanceChar(parser) !== 61)
return 8391477;
advanceChar(parser);
return 4194340;
case 8391476: {
advanceChar(parser);
if (parser.index >= parser.end)
return 8391476;
const ch = parser.currentChar;
if (ch === 61) {
advanceChar(parser);
return 4194338;
}
if (ch !== 42)
return 8391476;
if (advanceChar(parser) !== 61)
return 8391735;
advanceChar(parser);
return 4194335;
}
case 8389959:
if (advanceChar(parser) !== 61)
return 8389959;
advanceChar(parser);
return 4194341;
case 25233968: {
advanceChar(parser);
const ch = parser.currentChar;
if (ch === 43) {
advanceChar(parser);
return 33619993;
}
if (ch === 61) {
advanceChar(parser);
return 4194336;
}
return 25233968;
}
case 25233969: {
advanceChar(parser);
const ch = parser.currentChar;
if (ch === 45) {
advanceChar(parser);
if ((state & 1 || isStartOfLine) && parser.currentChar === 62) {
if (!parser.options.webcompat)
parser.report(112);
advanceChar(parser);
state = skipSingleHTMLComment(parser, source, state, context, 3, start);
start = parser.tokenStart;
continue;
}
return 33619994;
}
if (ch === 61) {
advanceChar(parser);
return 4194337;
}
return 25233969;
}
case 8457014: {
advanceChar(parser);
if (parser.index < parser.end) {
const ch = parser.currentChar;
if (ch === 47) {
advanceChar(parser);
state = skipSingleLineComment(parser, source, state, 0, parser.tokenStart);
start = parser.tokenStart;
continue;
}
if (ch === 42) {
advanceChar(parser);
state = skipMultiLineComment(parser, source, state);
start = parser.tokenStart;
continue;
}
if (context & 32) {
return scanRegularExpression(parser);
}
if (ch === 61) {
advanceChar(parser);
return 4259875;
}
}
return 8457014;
}
case 67108877: {
const next = advanceChar(parser);
if (next >= 48 && next <= 57)
return scanNumber(parser, context, 64 | 16);
if (next === 46) {
const index = parser.index + 1;
if (index < parser.end && source.charCodeAt(index) === 46) {
parser.column += 2;
parser.currentChar = source.charCodeAt(parser.index += 2);
return 14;
}
}
return 67108877;
}
case 8389702: {
advanceChar(parser);
const ch = parser.currentChar;
if (ch === 124) {
advanceChar(parser);
if (parser.currentChar === 61) {
advanceChar(parser);
return 4194344;
}
return 8913465;
}
if (ch === 61) {
advanceChar(parser);
return 4194342;
}
return 8389702;
}
case 8390721: {
advanceChar(parser);
const ch = parser.currentChar;
if (ch === 61) {
advanceChar(parser);
return 8390719;
}
if (ch !== 62)
return 8390721;
advanceChar(parser);
if (parser.index < parser.end) {
const ch2 = parser.currentChar;
if (ch2 === 62) {
if (advanceChar(parser) === 61) {
advanceChar(parser);
return 4194334;
}
return 8390980;
}
if (ch2 === 61) {
advanceChar(parser);
return 4194333;
}
}
return 8390979;
}
case 8390213: {
advanceChar(parser);
const ch = parser.currentChar;
if (ch === 38) {
advanceChar(parser);
if (parser.currentChar === 61) {
advanceChar(parser);
return 4194345;
}
return 8913720;
}
if (ch === 61) {
advanceChar(parser);
return 4194343;
}
return 8390213;
}
case 22: {
let ch = advanceChar(parser);
if (ch === 63) {
advanceChar(parser);
if (parser.currentChar === 61) {
advanceChar(parser);
return 4194346;
}
return 276824445;
}
if (ch === 46) {
const index = parser.index + 1;
if (index < parser.end) {
ch = source.charCodeAt(index);
if (!(ch >= 48 && ch <= 57)) {
advanceChar(parser);
return 67108990;
}
}
}
return 22;
}
}
} else {
if ((char ^ 8232) <= 1) {
state = state & -5 | 1;
scanNewLine(parser);
continue;
}
const merged = consumePossibleSurrogatePair(parser);
if (merged > 0)
char = merged;
if (isIDStart(char)) {
parser.tokenValue = "";
return scanIdentifierSlowCase(parser, context, 0, 0);
}
if (isExoticECMAScriptWhitespace(char)) {
advanceChar(parser);
continue;
}
parser.report(20, String.fromCodePoint(char));
}
}
return 1048576;
}
__name(scanSingleToken, "scanSingleToken");
var entities = {
AElig: "\xC6",
AMP: "&",
Aacute: "\xC1",
Abreve: "\u0102",
Acirc: "\xC2",
Acy: "\u0410",
Afr: "\u{1D504}",
Agrave: "\xC0",
Alpha: "\u0391",
Amacr: "\u0100",
And: "\u2A53",
Aogon: "\u0104",
Aopf: "\u{1D538}",
ApplyFunction: "\u2061",
Aring: "\xC5",
Ascr: "\u{1D49C}",
Assign: "\u2254",
Atilde: "\xC3",
Auml: "\xC4",
Backslash: "\u2216",
Barv: "\u2AE7",
Barwed: "\u2306",
Bcy: "\u0411",
Because: "\u2235",
Bernoullis: "\u212C",
Beta: "\u0392",
Bfr: "\u{1D505}",
Bopf: "\u{1D539}",
Breve: "\u02D8",
Bscr: "\u212C",
Bumpeq: "\u224E",
CHcy: "\u0427",
COPY: "\xA9",
Cacute: "\u0106",
Cap: "\u22D2",
CapitalDifferentialD: "\u2145",
Cayleys: "\u212D",
Ccaron: "\u010C",
Ccedil: "\xC7",
Ccirc: "\u0108",
Cconint: "\u2230",
Cdot: "\u010A",
Cedilla: "\xB8",
CenterDot: "\xB7",
Cfr: "\u212D",
Chi: "\u03A7",
CircleDot: "\u2299",
CircleMinus: "\u2296",
CirclePlus: "\u2295",
CircleTimes: "\u2297",
ClockwiseContourIntegral: "\u2232",
CloseCurlyDoubleQuote: "\u201D",
CloseCurlyQuote: "\u2019",
Colon: "\u2237",
Colone: "\u2A74",
Congruent: "\u2261",
Conint: "\u222F",
ContourIntegral: "\u222E",
Copf: "\u2102",
Coproduct: "\u2210",
CounterClockwiseContourIntegral: "\u2233",
Cross: "\u2A2F",
Cscr: "\u{1D49E}",
Cup: "\u22D3",
CupCap: "\u224D",
DD: "\u2145",
DDotrahd: "\u2911",
DJcy: "\u0402",
DScy: "\u0405",
DZcy: "\u040F",
Dagger: "\u2021",
Darr: "\u21A1",
Dashv: "\u2AE4",
Dcaron: "\u010E",
Dcy: "\u0414",
Del: "\u2207",
Delta: "\u0394",
Dfr: "\u{1D507}",
DiacriticalAcute: "\xB4",
DiacriticalDot: "\u02D9",
DiacriticalDoubleAcute: "\u02DD",
DiacriticalGrave: "`",
DiacriticalTilde: "\u02DC",
Diamond: "\u22C4",
DifferentialD: "\u2146",
Dopf: "\u{1D53B}",
Dot: "\xA8",
DotDot: "\u20DC",
DotEqual: "\u2250",
DoubleContourIntegral: "\u222F",
DoubleDot: "\xA8",
DoubleDownArrow: "\u21D3",
DoubleLeftArrow: "\u21D0",
DoubleLeftRightArrow: "\u21D4",
DoubleLeftTee: "\u2AE4",
DoubleLongLeftArrow: "\u27F8",
DoubleLongLeftRightArrow: "\u27FA",
DoubleLongRightArrow: "\u27F9",
DoubleRightArrow: "\u21D2",
DoubleRightTee: "\u22A8",
DoubleUpArrow: "\u21D1",
DoubleUpDownArrow: "\u21D5",
DoubleVerticalBar: "\u2225",
DownArrow: "\u2193",
DownArrowBar: "\u2913",
DownArrowUpArrow: "\u21F5",
DownBreve: "\u0311",
DownLeftRightVector: "\u2950",
DownLeftTeeVector: "\u295E",
DownLeftVector: "\u21BD",
DownLeftVectorBar: "\u2956",
DownRightTeeVector: "\u295F",
DownRightVector: "\u21C1",
DownRightVectorBar: "\u2957",
DownTee: "\u22A4",
DownTeeArrow: "\u21A7",
Downarrow: "\u21D3",
Dscr: "\u{1D49F}",
Dstrok: "\u0110",
ENG: "\u014A",
ETH: "\xD0",
Eacute: "\xC9",
Ecaron: "\u011A",
Ecirc: "\xCA",
Ecy: "\u042D",
Edot: "\u0116",
Efr: "\u{1D508}",
Egrave: "\xC8",
Element: "\u2208",
Emacr: "\u0112",
EmptySmallSquare: "\u25FB",
EmptyVerySmallSquare: "\u25AB",
Eogon: "\u0118",
Eopf: "\u{1D53C}",
Epsilon: "\u0395",
Equal: "\u2A75",
EqualTilde: "\u2242",
Equilibrium: "\u21CC",
Escr: "\u2130",
Esim: "\u2A73",
Eta: "\u0397",
Euml: "\xCB",
Exists: "\u2203",
ExponentialE: "\u2147",
Fcy: "\u0424",
Ffr: "\u{1D509}",
FilledSmallSquare: "\u25FC",
FilledVerySmallSquare: "\u25AA",
Fopf: "\u{1D53D}",
ForAll: "\u2200",
Fouriertrf: "\u2131",
Fscr: "\u2131",
GJcy: "\u0403",
GT: ">",
Gamma: "\u0393",
Gammad: "\u03DC",
Gbreve: "\u011E",
Gcedil: "\u0122",
Gcirc: "\u011C",
Gcy: "\u0413",
Gdot: "\u0120",
Gfr: "\u{1D50A}",
Gg: "\u22D9",
Gopf: "\u{1D53E}",
GreaterEqual: "\u2265",
GreaterEqualLess: "\u22DB",
GreaterFullEqual: "\u2267",
GreaterGreater: "\u2AA2",
GreaterLess: "\u2277",
GreaterSlantEqual: "\u2A7E",
GreaterTilde: "\u2273",
Gscr: "\u{1D4A2}",
Gt: "\u226B",
HARDcy: "\u042A",
Hacek: "\u02C7",
Hat: "^",
Hcirc: "\u0124",
Hfr: "\u210C",
HilbertSpace: "\u210B",
Hopf: "\u210D",
HorizontalLine: "\u2500",
Hscr: "\u210B",
Hstrok: "\u0126",
HumpDownHump: "\u224E",
HumpEqual: "\u224F",
IEcy: "\u0415",
IJlig: "\u0132",
IOcy: "\u0401",
Iacute: "\xCD",
Icirc: "\xCE",
Icy: "\u0418",
Idot: "\u0130",
Ifr: "\u2111",
Igrave: "\xCC",
Im: "\u2111",
Imacr: "\u012A",
ImaginaryI: "\u2148",
Implies: "\u21D2",
Int: "\u222C",
Integral: "\u222B",
Intersection: "\u22C2",
InvisibleComma: "\u2063",
InvisibleTimes: "\u2062",
Iogon: "\u012E",
Iopf: "\u{1D540}",
Iota: "\u0399",
Iscr: "\u2110",
Itilde: "\u0128",
Iukcy: "\u0406",
Iuml: "\xCF",
Jcirc: "\u0134",
Jcy: "\u0419",
Jfr: "\u{1D50D}",
Jopf: "\u{1D541}",
Jscr: "\u{1D4A5}",
Jsercy: "\u0408",
Jukcy: "\u0404",
KHcy: "\u0425",
KJcy: "\u040C",
Kappa: "\u039A",
Kcedil: "\u0136",
Kcy: "\u041A",
Kfr: "\u{1D50E}",
Kopf: "\u{1D542}",
Kscr: "\u{1D4A6}",
LJcy: "\u0409",
LT: "<",
Lacute: "\u0139",
Lambda: "\u039B",
Lang: "\u27EA",
Laplacetrf: "\u2112",
Larr: "\u219E",
Lcaron: "\u013D",
Lcedil: "\u013B",
Lcy: "\u041B",
LeftAngleBracket: "\u27E8",
LeftArrow: "\u2190",
LeftArrowBar: "\u21E4",
LeftArrowRightArrow: "\u21C6",
LeftCeiling: "\u2308",
LeftDoubleBracket: "\u27E6",
LeftDownTeeVector: "\u2961",
LeftDownVector: "\u21C3",
LeftDownVectorBar: "\u2959",
LeftFloor: "\u230A",
LeftRightArrow: "\u2194",
LeftRightVector: "\u294E",
LeftTee: "\u22A3",
LeftTeeArrow: "\u21A4",
LeftTeeVector: "\u295A",
LeftTriangle: "\u22B2",
LeftTriangleBar: "\u29CF",
LeftTriangleEqual: "\u22B4",
LeftUpDownVector: "\u2951",
LeftUpTeeVector: "\u2960",
LeftUpVector: "\u21BF",
LeftUpVectorBar: "\u2958",
LeftVector: "\u21BC",
LeftVectorBar: "\u2952",
Leftarrow: "\u21D0",
Leftrightarrow: "\u21D4",
LessEqualGreater: "\u22DA",
LessFullEqual: "\u2266",
LessGreater: "\u2276",
LessLess: "\u2AA1",
LessSlantEqual: "\u2A7D",
LessTilde: "\u2272",
Lfr: "\u{1D50F}",
Ll: "\u22D8",
Lleftarrow: "\u21DA",
Lmidot: "\u013F",
LongLeftArrow: "\u27F5",
LongLeftRightArrow: "\u27F7",
LongRightArrow: "\u27F6",
Longleftarrow: "\u27F8",
Longleftrightarrow: "\u27FA",
Longrightarrow: "\u27F9",
Lopf: "\u{1D543}",
LowerLeftArrow: "\u2199",
LowerRightArrow: "\u2198",
Lscr: "\u2112",
Lsh: "\u21B0",
Lstrok: "\u0141",
Lt: "\u226A",
Map: "\u2905",
Mcy: "\u041C",
MediumSpace: "\u205F",
Mellintrf: "\u2133",
Mfr: "\u{1D510}",
MinusPlus: "\u2213",
Mopf: "\u{1D544}",
Mscr: "\u2133",
Mu: "\u039C",
NJcy: "\u040A",
Nacute: "\u0143",
Ncaron: "\u0147",
Ncedil: "\u0145",
Ncy: "\u041D",
NegativeMediumSpace: "\u200B",
NegativeThickSpace: "\u200B",
NegativeThinSpace: "\u200B",
NegativeVeryThinSpace: "\u200B",
NestedGreaterGreater: "\u226B",
NestedLessLess: "\u226A",
NewLine: "\n",
Nfr: "\u{1D511}",
NoBreak: "\u2060",
NonBreakingSpace: "\xA0",
Nopf: "\u2115",
Not: "\u2AEC",
NotCongruent: "\u2262",
NotCupCap: "\u226D",
NotDoubleVerticalBar: "\u2226",
NotElement: "\u2209",
NotEqual: "\u2260",
NotEqualTilde: "\u2242\u0338",
NotExists: "\u2204",
NotGreater: "\u226F",
NotGreaterEqual: "\u2271",
NotGreaterFullEqual: "\u2267\u0338",
NotGreaterGreater: "\u226B\u0338",
NotGreaterLess: "\u2279",
NotGreaterSlantEqual: "\u2A7E\u0338",
NotGreaterTilde: "\u2275",
NotHumpDownHump: "\u224E\u0338",
NotHumpEqual: "\u224F\u0338",
NotLeftTriangle: "\u22EA",
NotLeftTriangleBar: "\u29CF\u0338",
NotLeftTriangleEqual: "\u22EC",
NotLess: "\u226E",
NotLessEqual: "\u2270",
NotLessGreater: "\u2278",
NotLessLess: "\u226A\u0338",
NotLessSlantEqual: "\u2A7D\u0338",
NotLessTilde: "\u2274",
NotNestedGreaterGreater: "\u2AA2\u0338",
NotNestedLessLess: "\u2AA1\u0338",
NotPrecedes: "\u2280",
NotPrecedesEqual: "\u2AAF\u0338",
NotPrecedesSlantEqual: "\u22E0",
NotReverseElement: "\u220C",
NotRightTriangle: "\u22EB",
NotRightTriangleBar: "\u29D0\u0338",
NotRightTriangleEqual: "\u22ED",
NotSquareSubset: "\u228F\u0338",
NotSquareSubsetEqual: "\u22E2",
NotSquareSuperset: "\u2290\u0338",
NotSquareSupersetEqual: "\u22E3",
NotSubset: "\u2282\u20D2",
NotSubsetEqual: "\u2288",
NotSucceeds: "\u2281",
NotSucceedsEqual: "\u2AB0\u0338",
NotSucceedsSlantEqual: "\u22E1",
NotSucceedsTilde: "\u227F\u0338",
NotSuperset: "\u2283\u20D2",
NotSupersetEqual: "\u2289",
NotTilde: "\u2241",
NotTildeEqual: "\u2244",
NotTildeFullEqual: "\u2247",
NotTildeTilde: "\u2249",
NotVerticalBar: "\u2224",
Nscr: "\u{1D4A9}",
Ntilde: "\xD1",
Nu: "\u039D",
OElig: "\u0152",
Oacute: "\xD3",
Ocirc: "\xD4",
Ocy: "\u041E",
Odblac: "\u0150",
Ofr: "\u{1D512}",
Ograve: "\xD2",
Omacr: "\u014C",
Omega: "\u03A9",
Omicron: "\u039F",
Oopf: "\u{1D546}",
OpenCurlyDoubleQuote: "\u201C",
OpenCurlyQuote: "\u2018",
Or: "\u2A54",
Oscr: "\u{1D4AA}",
Oslash: "\xD8",
Otilde: "\xD5",
Otimes: "\u2A37",
Ouml: "\xD6",
OverBar: "\u203E",
OverBrace: "\u23DE",
OverBracket: "\u23B4",
OverParenthesis: "\u23DC",
PartialD: "\u2202",
Pcy: "\u041F",
Pfr: "\u{1D513}",
Phi: "\u03A6",
Pi: "\u03A0",
PlusMinus: "\xB1",
Poincareplane: "\u210C",
Popf: "\u2119",
Pr: "\u2ABB",
Precedes: "\u227A",
PrecedesEqual: "\u2AAF",
PrecedesSlantEqual: "\u227C",
PrecedesTilde: "\u227E",
Prime: "\u2033",
Product: "\u220F",
Proportion: "\u2237",
Proportional: "\u221D",
Pscr: "\u{1D4AB}",
Psi: "\u03A8",
QUOT: '"',
Qfr: "\u{1D514}",
Qopf: "\u211A",
Qscr: "\u{1D4AC}",
RBarr: "\u2910",
REG: "\xAE",
Racute: "\u0154",
Rang: "\u27EB",
Rarr: "\u21A0",
Rarrtl: "\u2916",
Rcaron: "\u0158",
Rcedil: "\u0156",
Rcy: "\u0420",
Re: "\u211C",
ReverseElement: "\u220B",
ReverseEquilibrium: "\u21CB",
ReverseUpEquilibrium: "\u296F",
Rfr: "\u211C",
Rho: "\u03A1",
RightAngleBracket: "\u27E9",
RightArrow: "\u2192",
RightArrowBar: "\u21E5",
RightArrowLeftArrow: "\u21C4",
RightCeiling: "\u2309",
RightDoubleBracket: "\u27E7",
RightDownTeeVector: "\u295D",
RightDownVector: "\u21C2",
RightDownVectorBar: "\u2955",
RightFloor: "\u230B",
RightTee: "\u22A2",
RightTeeArrow: "\u21A6",
RightTeeVector: "\u295B",
RightTriangle: "\u22B3",
RightTriangleBar: "\u29D0",
RightTriangleEqual: "\u22B5",
RightUpDownVector: "\u294F",
RightUpTeeVector: "\u295C",
RightUpVector: "\u21BE",
RightUpVectorBar: "\u2954",
RightVector: "\u21C0",
RightVectorBar: "\u2953",
Rightarrow: "\u21D2",
Ropf: "\u211D",
RoundImplies: "\u2970",
Rrightarrow: "\u21DB",
Rscr: "\u211B",
Rsh: "\u21B1",
RuleDelayed: "\u29F4",
SHCHcy: "\u0429",
SHcy: "\u0428",
SOFTcy: "\u042C",
Sacute: "\u015A",
Sc: "\u2ABC",
Scaron: "\u0160",
Scedil: "\u015E",
Scirc: "\u015C",
Scy: "\u0421",
Sfr: "\u{1D516}",
ShortDownArrow: "\u2193",
ShortLeftArrow: "\u2190",
ShortRightArrow: "\u2192",
ShortUpArrow: "\u2191",
Sigma: "\u03A3",
SmallCircle: "\u2218",
Sopf: "\u{1D54A}",
Sqrt: "\u221A",
Square: "\u25A1",
SquareIntersection: "\u2293",
SquareSubset: "\u228F",
SquareSubsetEqual: "\u2291",
SquareSuperset: "\u2290",
SquareSupersetEqual: "\u2292",
SquareUnion: "\u2294",
Sscr: "\u{1D4AE}",
Star: "\u22C6",
Sub: "\u22D0",
Subset: "\u22D0",
SubsetEqual: "\u2286",
Succeeds: "\u227B",
SucceedsEqual: "\u2AB0",
SucceedsSlantEqual: "\u227D",
SucceedsTilde: "\u227F",
SuchThat: "\u220B",
Sum: "\u2211",
Sup: "\u22D1",
Superset: "\u2283",
SupersetEqual: "\u2287",
Supset: "\u22D1",
THORN: "\xDE",
TRADE: "\u2122",
TSHcy: "\u040B",
TScy: "\u0426",
Tab: " ",
Tau: "\u03A4",
Tcaron: "\u0164",
Tcedil: "\u0162",
Tcy: "\u0422",
Tfr: "\u{1D517}",
Therefore: "\u2234",
Theta: "\u0398",
ThickSpace: "\u205F\u200A",
ThinSpace: "\u2009",
Tilde: "\u223C",
TildeEqual: "\u2243",
TildeFullEqual: "\u2245",
TildeTilde: "\u2248",
Topf: "\u{1D54B}",
TripleDot: "\u20DB",
Tscr: "\u{1D4AF}",
Tstrok: "\u0166",
Uacute: "\xDA",
Uarr: "\u219F",
Uarrocir: "\u2949",
Ubrcy: "\u040E",
Ubreve: "\u016C",
Ucirc: "\xDB",
Ucy: "\u0423",
Udblac: "\u0170",
Ufr: "\u{1D518}",
Ugrave: "\xD9",
Umacr: "\u016A",
UnderBar: "_",
UnderBrace: "\u23DF",
UnderBracket: "\u23B5",
UnderParenthesis: "\u23DD",
Union: "\u22C3",
UnionPlus: "\u228E",
Uogon: "\u0172",
Uopf: "\u{1D54C}",
UpArrow: "\u2191",
UpArrowBar: "\u2912",
UpArrowDownArrow: "\u21C5",
UpDownArrow: "\u2195",
UpEquilibrium: "\u296E",
UpTee: "\u22A5",
UpTeeArrow: "\u21A5",
Uparrow: "\u21D1",
Updownarrow: "\u21D5",
UpperLeftArrow: "\u2196",
UpperRightArrow: "\u2197",
Upsi: "\u03D2",
Upsilon: "\u03A5",
Uring: "\u016E",
Uscr: "\u{1D4B0}",
Utilde: "\u0168",
Uuml: "\xDC",
VDash: "\u22AB",
Vbar: "\u2AEB",
Vcy: "\u0412",
Vdash: "\u22A9",
Vdashl: "\u2AE6",
Vee: "\u22C1",
Verbar: "\u2016",
Vert: "\u2016",
VerticalBar: "\u2223",
VerticalLine: "|",
VerticalSeparator: "\u2758",
VerticalTilde: "\u2240",
VeryThinSpace: "\u200A",
Vfr: "\u{1D519}",
Vopf: "\u{1D54D}",
Vscr: "\u{1D4B1}",
Vvdash: "\u22AA",
Wcirc: "\u0174",
Wedge: "\u22C0",
Wfr: "\u{1D51A}",
Wopf: "\u{1D54E}",
Wscr: "\u{1D4B2}",
Xfr: "\u{1D51B}",
Xi: "\u039E",
Xopf: "\u{1D54F}",
Xscr: "\u{1D4B3}",
YAcy: "\u042F",
YIcy: "\u0407",
YUcy: "\u042E",
Yacute: "\xDD",
Ycirc: "\u0176",
Ycy: "\u042B",
Yfr: "\u{1D51C}",
Yopf: "\u{1D550}",
Yscr: "\u{1D4B4}",
Yuml: "\u0178",
ZHcy: "\u0416",
Zacute: "\u0179",
Zcaron: "\u017D",
Zcy: "\u0417",
Zdot: "\u017B",
ZeroWidthSpace: "\u200B",
Zeta: "\u0396",
Zfr: "\u2128",
Zopf: "\u2124",
Zscr: "\u{1D4B5}",
aacute: "\xE1",
abreve: "\u0103",
ac: "\u223E",
acE: "\u223E\u0333",
acd: "\u223F",
acirc: "\xE2",
acute: "\xB4",
acy: "\u0430",
aelig: "\xE6",
af: "\u2061",
afr: "\u{1D51E}",
agrave: "\xE0",
alefsym: "\u2135",
aleph: "\u2135",
alpha: "\u03B1",
amacr: "\u0101",
amalg: "\u2A3F",
amp: "&",
and: "\u2227",
andand: "\u2A55",
andd: "\u2A5C",
andslope: "\u2A58",
andv: "\u2A5A",
ang: "\u2220",
ange: "\u29A4",
angle: "\u2220",
angmsd: "\u2221",
angmsdaa: "\u29A8",
angmsdab: "\u29A9",
angmsdac: "\u29AA",
angmsdad: "\u29AB",
angmsdae: "\u29AC",
angmsdaf: "\u29AD",
angmsdag: "\u29AE",
angmsdah: "\u29AF",
angrt: "\u221F",
angrtvb: "\u22BE",
angrtvbd: "\u299D",
angsph: "\u2222",
angst: "\xC5",
angzarr: "\u237C",
aogon: "\u0105",
aopf: "\u{1D552}",
ap: "\u2248",
apE: "\u2A70",
apacir: "\u2A6F",
ape: "\u224A",
apid: "\u224B",
apos: "'",
approx: "\u2248",
approxeq: "\u224A",
aring: "\xE5",
ascr: "\u{1D4B6}",
ast: "*",
asymp: "\u2248",
asympeq: "\u224D",
atilde: "\xE3",
auml: "\xE4",
awconint: "\u2233",
awint: "\u2A11",
bNot: "\u2AED",
backcong: "\u224C",
backepsilon: "\u03F6",
backprime: "\u2035",
backsim: "\u223D",
backsimeq: "\u22CD",
barvee: "\u22BD",
barwed: "\u2305",
barwedge: "\u2305",
bbrk: "\u23B5",
bbrktbrk: "\u23B6",
bcong: "\u224C",
bcy: "\u0431",
bdquo: "\u201E",
becaus: "\u2235",
because: "\u2235",
bemptyv: "\u29B0",
bepsi: "\u03F6",
bernou: "\u212C",
beta: "\u03B2",
beth: "\u2136",
between: "\u226C",
bfr: "\u{1D51F}",
bigcap: "\u22C2",
bigcirc: "\u25EF",
bigcup: "\u22C3",
bigodot: "\u2A00",
bigoplus: "\u2A01",
bigotimes: "\u2A02",
bigsqcup: "\u2A06",
bigstar: "\u2605",
bigtriangledown: "\u25BD",
bigtriangleup: "\u25B3",
biguplus: "\u2A04",
bigvee: "\u22C1",
bigwedge: "\u22C0",
bkarow: "\u290D",
blacklozenge: "\u29EB",
blacksquare: "\u25AA",
blacktriangle: "\u25B4",
blacktriangledown: "\u25BE",
blacktriangleleft: "\u25C2",
blacktriangleright: "\u25B8",
blank: "\u2423",
blk12: "\u2592",
blk14: "\u2591",
blk34: "\u2593",
block: "\u2588",
bne: "=\u20E5",
bnequiv: "\u2261\u20E5",
bnot: "\u2310",
bopf: "\u{1D553}",
bot: "\u22A5",
bottom: "\u22A5",
bowtie: "\u22C8",
boxDL: "\u2557",
boxDR: "\u2554",
boxDl: "\u2556",
boxDr: "\u2553",
boxH: "\u2550",
boxHD: "\u2566",
boxHU: "\u2569",
boxHd: "\u2564",
boxHu: "\u2567",
boxUL: "\u255D",
boxUR: "\u255A",
boxUl: "\u255C",
boxUr: "\u2559",
boxV: "\u2551",
boxVH: "\u256C",
boxVL: "\u2563",
boxVR: "\u2560",
boxVh: "\u256B",
boxVl: "\u2562",
boxVr: "\u255F",
boxbox: "\u29C9",
boxdL: "\u2555",
boxdR: "\u2552",
boxdl: "\u2510",
boxdr: "\u250C",
boxh: "\u2500",
boxhD: "\u2565",
boxhU: "\u2568",
boxhd: "\u252C",
boxhu: "\u2534",
boxminus: "\u229F",
boxplus: "\u229E",
boxtimes: "\u22A0",
boxuL: "\u255B",
boxuR: "\u2558",
boxul: "\u2518",
boxur: "\u2514",
boxv: "\u2502",
boxvH: "\u256A",
boxvL: "\u2561",
boxvR: "\u255E",
boxvh: "\u253C",
boxvl: "\u2524",
boxvr: "\u251C",
bprime: "\u2035",
breve: "\u02D8",
brvbar: "\xA6",
bscr: "\u{1D4B7}",
bsemi: "\u204F",
bsim: "\u223D",
bsime: "\u22CD",
bsol: "\\",
bsolb: "\u29C5",
bsolhsub: "\u27C8",
bull: "\u2022",
bullet: "\u2022",
bump: "\u224E",
bumpE: "\u2AAE",
bumpe: "\u224F",
bumpeq: "\u224F",
cacute: "\u0107",
cap: "\u2229",
capand: "\u2A44",
capbrcup: "\u2A49",
capcap: "\u2A4B",
capcup: "\u2A47",
capdot: "\u2A40",
caps: "\u2229\uFE00",
caret: "\u2041",
caron: "\u02C7",
ccaps: "\u2A4D",
ccaron: "\u010D",
ccedil: "\xE7",
ccirc: "\u0109",
ccups: "\u2A4C",
ccupssm: "\u2A50",
cdot: "\u010B",
cedil: "\xB8",
cemptyv: "\u29B2",
cent: "\xA2",
centerdot: "\xB7",
cfr: "\u{1D520}",
chcy: "\u0447",
check: "\u2713",
checkmark: "\u2713",
chi: "\u03C7",
cir: "\u25CB",
cirE: "\u29C3",
circ: "\u02C6",
circeq: "\u2257",
circlearrowleft: "\u21BA",
circlearrowright: "\u21BB",
circledR: "\xAE",
circledS: "\u24C8",
circledast: "\u229B",
circledcirc: "\u229A",
circleddash: "\u229D",
cire: "\u2257",
cirfnint: "\u2A10",
cirmid: "\u2AEF",
cirscir: "\u29C2",
clubs: "\u2663",
clubsuit: "\u2663",
colon: ":",
colone: "\u2254",
coloneq: "\u2254",
comma: ",",
commat: "@",
comp: "\u2201",
compfn: "\u2218",
complement: "\u2201",
complexes: "\u2102",
cong: "\u2245",
congdot: "\u2A6D",
conint: "\u222E",
copf: "\u{1D554}",
coprod: "\u2210",
copy: "\xA9",
copysr: "\u2117",
crarr: "\u21B5",
cross: "\u2717",
cscr: "\u{1D4B8}",
csub: "\u2ACF",
csube: "\u2AD1",
csup: "\u2AD0",
csupe: "\u2AD2",
ctdot: "\u22EF",
cudarrl: "\u2938",
cudarrr: "\u2935",
cuepr: "\u22DE",
cuesc: "\u22DF",
cularr: "\u21B6",
cularrp: "\u293D",
cup: "\u222A",
cupbrcap: "\u2A48",
cupcap: "\u2A46",
cupcup: "\u2A4A",
cupdot: "\u228D",
cupor: "\u2A45",
cups: "\u222A\uFE00",
curarr: "\u21B7",
curarrm: "\u293C",
curlyeqprec: "\u22DE",
curlyeqsucc: "\u22DF",
curlyvee: "\u22CE",
curlywedge: "\u22CF",
curren: "\xA4",
curvearrowleft: "\u21B6",
curvearrowright: "\u21B7",
cuvee: "\u22CE",
cuwed: "\u22CF",
cwconint: "\u2232",
cwint: "\u2231",
cylcty: "\u232D",
dArr: "\u21D3",
dHar: "\u2965",
dagger: "\u2020",
daleth: "\u2138",
darr: "\u2193",
dash: "\u2010",
dashv: "\u22A3",
dbkarow: "\u290F",
dblac: "\u02DD",
dcaron: "\u010F",
dcy: "\u0434",
dd: "\u2146",
ddagger: "\u2021",
ddarr: "\u21CA",
ddotseq: "\u2A77",
deg: "\xB0",
delta: "\u03B4",
demptyv: "\u29B1",
dfisht: "\u297F",
dfr: "\u{1D521}",
dharl: "\u21C3",
dharr: "\u21C2",
diam: "\u22C4",
diamond: "\u22C4",
diamondsuit: "\u2666",
diams: "\u2666",
die: "\xA8",
digamma: "\u03DD",
disin: "\u22F2",
div: "\xF7",
divide: "\xF7",
divideontimes: "\u22C7",
divonx: "\u22C7",
djcy: "\u0452",
dlcorn: "\u231E",
dlcrop: "\u230D",
dollar: "$",
dopf: "\u{1D555}",
dot: "\u02D9",
doteq: "\u2250",
doteqdot: "\u2251",
dotminus: "\u2238",
dotplus: "\u2214",
dotsquare: "\u22A1",
doublebarwedge: "\u2306",
downarrow: "\u2193",
downdownarrows: "\u21CA",
downharpoonleft: "\u21C3",
downharpoonright: "\u21C2",
drbkarow: "\u2910",
drcorn: "\u231F",
drcrop: "\u230C",
dscr: "\u{1D4B9}",
dscy: "\u0455",
dsol: "\u29F6",
dstrok: "\u0111",
dtdot: "\u22F1",
dtri: "\u25BF",
dtrif: "\u25BE",
duarr: "\u21F5",
duhar: "\u296F",
dwangle: "\u29A6",
dzcy: "\u045F",
dzigrarr: "\u27FF",
eDDot: "\u2A77",
eDot: "\u2251",
eacute: "\xE9",
easter: "\u2A6E",
ecaron: "\u011B",
ecir: "\u2256",
ecirc: "\xEA",
ecolon: "\u2255",
ecy: "\u044D",
edot: "\u0117",
ee: "\u2147",
efDot: "\u2252",
efr: "\u{1D522}",
eg: "\u2A9A",
egrave: "\xE8",
egs: "\u2A96",
egsdot: "\u2A98",
el: "\u2A99",
elinters: "\u23E7",
ell: "\u2113",
els: "\u2A95",
elsdot: "\u2A97",
emacr: "\u0113",
empty: "\u2205",
emptyset: "\u2205",
emptyv: "\u2205",
emsp13: "\u2004",
emsp14: "\u2005",
emsp: "\u2003",
eng: "\u014B",
ensp: "\u2002",
eogon: "\u0119",
eopf: "\u{1D556}",
epar: "\u22D5",
eparsl: "\u29E3",
eplus: "\u2A71",
epsi: "\u03B5",
epsilon: "\u03B5",
epsiv: "\u03F5",
eqcirc: "\u2256",
eqcolon: "\u2255",
eqsim: "\u2242",
eqslantgtr: "\u2A96",
eqslantless: "\u2A95",
equals: "=",
equest: "\u225F",
equiv: "\u2261",
equivDD: "\u2A78",
eqvparsl: "\u29E5",
erDot: "\u2253",
erarr: "\u2971",
escr: "\u212F",
esdot: "\u2250",
esim: "\u2242",
eta: "\u03B7",
eth: "\xF0",
euml: "\xEB",
euro: "\u20AC",
excl: "!",
exist: "\u2203",
expectation: "\u2130",
exponentiale: "\u2147",
fallingdotseq: "\u2252",
fcy: "\u0444",
female: "\u2640",
ffilig: "\uFB03",
fflig: "\uFB00",
ffllig: "\uFB04",
ffr: "\u{1D523}",
filig: "\uFB01",
fjlig: "fj",
flat: "\u266D",
fllig: "\uFB02",
fltns: "\u25B1",
fnof: "\u0192",
fopf: "\u{1D557}",
forall: "\u2200",
fork: "\u22D4",
forkv: "\u2AD9",
fpartint: "\u2A0D",
frac12: "\xBD",
frac13: "\u2153",
frac14: "\xBC",
frac15: "\u2155",
frac16: "\u2159",
frac18: "\u215B",
frac23: "\u2154",
frac25: "\u2156",
frac34: "\xBE",
frac35: "\u2157",
frac38: "\u215C",
frac45: "\u2158",
frac56: "\u215A",
frac58: "\u215D",
frac78: "\u215E",
frasl: "\u2044",
frown: "\u2322",
fscr: "\u{1D4BB}",
gE: "\u2267",
gEl: "\u2A8C",
gacute: "\u01F5",
gamma: "\u03B3",
gammad: "\u03DD",
gap: "\u2A86",
gbreve: "\u011F",
gcirc: "\u011D",
gcy: "\u0433",
gdot: "\u0121",
ge: "\u2265",
gel: "\u22DB",
geq: "\u2265",
geqq: "\u2267",
geqslant: "\u2A7E",
ges: "\u2A7E",
gescc: "\u2AA9",
gesdot: "\u2A80",
gesdoto: "\u2A82",
gesdotol: "\u2A84",
gesl: "\u22DB\uFE00",
gesles: "\u2A94",
gfr: "\u{1D524}",
gg: "\u226B",
ggg: "\u22D9",
gimel: "\u2137",
gjcy: "\u0453",
gl: "\u2277",
glE: "\u2A92",
gla: "\u2AA5",
glj: "\u2AA4",
gnE: "\u2269",
gnap: "\u2A8A",
gnapprox: "\u2A8A",
gne: "\u2A88",
gneq: "\u2A88",
gneqq: "\u2269",
gnsim: "\u22E7",
gopf: "\u{1D558}",
grave: "`",
gscr: "\u210A",
gsim: "\u2273",
gsime: "\u2A8E",
gsiml: "\u2A90",
gt: ">",
gtcc: "\u2AA7",
gtcir: "\u2A7A",
gtdot: "\u22D7",
gtlPar: "\u2995",
gtquest: "\u2A7C",
gtrapprox: "\u2A86",
gtrarr: "\u2978",
gtrdot: "\u22D7",
gtreqless: "\u22DB",
gtreqqless: "\u2A8C",
gtrless: "\u2277",
gtrsim: "\u2273",
gvertneqq: "\u2269\uFE00",
gvnE: "\u2269\uFE00",
hArr: "\u21D4",
hairsp: "\u200A",
half: "\xBD",
hamilt: "\u210B",
hardcy: "\u044A",
harr: "\u2194",
harrcir: "\u2948",
harrw: "\u21AD",
hbar: "\u210F",
hcirc: "\u0125",
hearts: "\u2665",
heartsuit: "\u2665",
hellip: "\u2026",
hercon: "\u22B9",
hfr: "\u{1D525}",
hksearow: "\u2925",
hkswarow: "\u2926",
hoarr: "\u21FF",
homtht: "\u223B",
hookleftarrow: "\u21A9",
hookrightarrow: "\u21AA",
hopf: "\u{1D559}",
horbar: "\u2015",
hscr: "\u{1D4BD}",
hslash: "\u210F",
hstrok: "\u0127",
hybull: "\u2043",
hyphen: "\u2010",
iacute: "\xED",
ic: "\u2063",
icirc: "\xEE",
icy: "\u0438",
iecy: "\u0435",
iexcl: "\xA1",
iff: "\u21D4",
ifr: "\u{1D526}",
igrave: "\xEC",
ii: "\u2148",
iiiint: "\u2A0C",
iiint: "\u222D",
iinfin: "\u29DC",
iiota: "\u2129",
ijlig: "\u0133",
imacr: "\u012B",
image: "\u2111",
imagline: "\u2110",
imagpart: "\u2111",
imath: "\u0131",
imof: "\u22B7",
imped: "\u01B5",
in: "\u2208",
incare: "\u2105",
infin: "\u221E",
infintie: "\u29DD",
inodot: "\u0131",
int: "\u222B",
intcal: "\u22BA",
integers: "\u2124",
intercal: "\u22BA",
intlarhk: "\u2A17",
intprod: "\u2A3C",
iocy: "\u0451",
iogon: "\u012F",
iopf: "\u{1D55A}",
iota: "\u03B9",
iprod: "\u2A3C",
iquest: "\xBF",
iscr: "\u{1D4BE}",
isin: "\u2208",
isinE: "\u22F9",
isindot: "\u22F5",
isins: "\u22F4",
isinsv: "\u22F3",
isinv: "\u2208",
it: "\u2062",
itilde: "\u0129",
iukcy: "\u0456",
iuml: "\xEF",
jcirc: "\u0135",
jcy: "\u0439",
jfr: "\u{1D527}",
jmath: "\u0237",
jopf: "\u{1D55B}",
jscr: "\u{1D4BF}",
jsercy: "\u0458",
jukcy: "\u0454",
kappa: "\u03BA",
kappav: "\u03F0",
kcedil: "\u0137",
kcy: "\u043A",
kfr: "\u{1D528}",
kgreen: "\u0138",
khcy: "\u0445",
kjcy: "\u045C",
kopf: "\u{1D55C}",
kscr: "\u{1D4C0}",
lAarr: "\u21DA",
lArr: "\u21D0",
lAtail: "\u291B",
lBarr: "\u290E",
lE: "\u2266",
lEg: "\u2A8B",
lHar: "\u2962",
lacute: "\u013A",
laemptyv: "\u29B4",
lagran: "\u2112",
lambda: "\u03BB",
lang: "\u27E8",
langd: "\u2991",
langle: "\u27E8",
lap: "\u2A85",
laquo: "\xAB",
larr: "\u2190",
larrb: "\u21E4",
larrbfs: "\u291F",
larrfs: "\u291D",
larrhk: "\u21A9",
larrlp: "\u21AB",
larrpl: "\u2939",
larrsim: "\u2973",
larrtl: "\u21A2",
lat: "\u2AAB",
latail: "\u2919",
late: "\u2AAD",
lates: "\u2AAD\uFE00",
lbarr: "\u290C",
lbbrk: "\u2772",
lbrace: "{",
lbrack: "[",
lbrke: "\u298B",
lbrksld: "\u298F",
lbrkslu: "\u298D",
lcaron: "\u013E",
lcedil: "\u013C",
lceil: "\u2308",
lcub: "{",
lcy: "\u043B",
ldca: "\u2936",
ldquo: "\u201C",
ldquor: "\u201E",
ldrdhar: "\u2967",
ldrushar: "\u294B",
ldsh: "\u21B2",
le: "\u2264",
leftarrow: "\u2190",
leftarrowtail: "\u21A2",
leftharpoondown: "\u21BD",
leftharpoonup: "\u21BC",
leftleftarrows: "\u21C7",
leftrightarrow: "\u2194",
leftrightarrows: "\u21C6",
leftrightharpoons: "\u21CB",
leftrightsquigarrow: "\u21AD",
leftthreetimes: "\u22CB",
leg: "\u22DA",
leq: "\u2264",
leqq: "\u2266",
leqslant: "\u2A7D",
les: "\u2A7D",
lescc: "\u2AA8",
lesdot: "\u2A7F",
lesdoto: "\u2A81",
lesdotor: "\u2A83",
lesg: "\u22DA\uFE00",
lesges: "\u2A93",
lessapprox: "\u2A85",
lessdot: "\u22D6",
lesseqgtr: "\u22DA",
lesseqqgtr: "\u2A8B",
lessgtr: "\u2276",
lesssim: "\u2272",
lfisht: "\u297C",
lfloor: "\u230A",
lfr: "\u{1D529}",
lg: "\u2276",
lgE: "\u2A91",
lhard: "\u21BD",
lharu: "\u21BC",
lharul: "\u296A",
lhblk: "\u2584",
ljcy: "\u0459",
ll: "\u226A",
llarr: "\u21C7",
llcorner: "\u231E",
llhard: "\u296B",
lltri: "\u25FA",
lmidot: "\u0140",
lmoust: "\u23B0",
lmoustache: "\u23B0",
lnE: "\u2268",
lnap: "\u2A89",
lnapprox: "\u2A89",
lne: "\u2A87",
lneq: "\u2A87",
lneqq: "\u2268",
lnsim: "\u22E6",
loang: "\u27EC",
loarr: "\u21FD",
lobrk: "\u27E6",
longleftarrow: "\u27F5",
longleftrightarrow: "\u27F7",
longmapsto: "\u27FC",
longrightarrow: "\u27F6",
looparrowleft: "\u21AB",
looparrowright: "\u21AC",
lopar: "\u2985",
lopf: "\u{1D55D}",
loplus: "\u2A2D",
lotimes: "\u2A34",
lowast: "\u2217",
lowbar: "_",
loz: "\u25CA",
lozenge: "\u25CA",
lozf: "\u29EB",
lpar: "(",
lparlt: "\u2993",
lrarr: "\u21C6",
lrcorner: "\u231F",
lrhar: "\u21CB",
lrhard: "\u296D",
lrm: "\u200E",
lrtri: "\u22BF",
lsaquo: "\u2039",
lscr: "\u{1D4C1}",
lsh: "\u21B0",
lsim: "\u2272",
lsime: "\u2A8D",
lsimg: "\u2A8F",
lsqb: "[",
lsquo: "\u2018",
lsquor: "\u201A",
lstrok: "\u0142",
lt: "<",
ltcc: "\u2AA6",
ltcir: "\u2A79",
ltdot: "\u22D6",
lthree: "\u22CB",
ltimes: "\u22C9",
ltlarr: "\u2976",
ltquest: "\u2A7B",
ltrPar: "\u2996",
ltri: "\u25C3",
ltrie: "\u22B4",
ltrif: "\u25C2",
lurdshar: "\u294A",
luruhar: "\u2966",
lvertneqq: "\u2268\uFE00",
lvnE: "\u2268\uFE00",
mDDot: "\u223A",
macr: "\xAF",
male: "\u2642",
malt: "\u2720",
maltese: "\u2720",
map: "\u21A6",
mapsto: "\u21A6",
mapstodown: "\u21A7",
mapstoleft: "\u21A4",
mapstoup: "\u21A5",
marker: "\u25AE",
mcomma: "\u2A29",
mcy: "\u043C",
mdash: "\u2014",
measuredangle: "\u2221",
mfr: "\u{1D52A}",
mho: "\u2127",
micro: "\xB5",
mid: "\u2223",
midast: "*",
midcir: "\u2AF0",
middot: "\xB7",
minus: "\u2212",
minusb: "\u229F",
minusd: "\u2238",
minusdu: "\u2A2A",
mlcp: "\u2ADB",
mldr: "\u2026",
mnplus: "\u2213",
models: "\u22A7",
mopf: "\u{1D55E}",
mp: "\u2213",
mscr: "\u{1D4C2}",
mstpos: "\u223E",
mu: "\u03BC",
multimap: "\u22B8",
mumap: "\u22B8",
nGg: "\u22D9\u0338",
nGt: "\u226B\u20D2",
nGtv: "\u226B\u0338",
nLeftarrow: "\u21CD",
nLeftrightarrow: "\u21CE",
nLl: "\u22D8\u0338",
nLt: "\u226A\u20D2",
nLtv: "\u226A\u0338",
nRightarrow: "\u21CF",
nVDash: "\u22AF",
nVdash: "\u22AE",
nabla: "\u2207",
nacute: "\u0144",
nang: "\u2220\u20D2",
nap: "\u2249",
napE: "\u2A70\u0338",
napid: "\u224B\u0338",
napos: "\u0149",
napprox: "\u2249",
natur: "\u266E",
natural: "\u266E",
naturals: "\u2115",
nbsp: "\xA0",
nbump: "\u224E\u0338",
nbumpe: "\u224F\u0338",
ncap: "\u2A43",
ncaron: "\u0148",
ncedil: "\u0146",
ncong: "\u2247",
ncongdot: "\u2A6D\u0338",
ncup: "\u2A42",
ncy: "\u043D",
ndash: "\u2013",
ne: "\u2260",
neArr: "\u21D7",
nearhk: "\u2924",
nearr: "\u2197",
nearrow: "\u2197",
nedot: "\u2250\u0338",
nequiv: "\u2262",
nesear: "\u2928",
nesim: "\u2242\u0338",
nexist: "\u2204",
nexists: "\u2204",
nfr: "\u{1D52B}",
ngE: "\u2267\u0338",
nge: "\u2271",
ngeq: "\u2271",
ngeqq: "\u2267\u0338",
ngeqslant: "\u2A7E\u0338",
nges: "\u2A7E\u0338",
ngsim: "\u2275",
ngt: "\u226F",
ngtr: "\u226F",
nhArr: "\u21CE",
nharr: "\u21AE",
nhpar: "\u2AF2",
ni: "\u220B",
nis: "\u22FC",
nisd: "\u22FA",
niv: "\u220B",
njcy: "\u045A",
nlArr: "\u21CD",
nlE: "\u2266\u0338",
nlarr: "\u219A",
nldr: "\u2025",
nle: "\u2270",
nleftarrow: "\u219A",
nleftrightarrow: "\u21AE",
nleq: "\u2270",
nleqq: "\u2266\u0338",
nleqslant: "\u2A7D\u0338",
nles: "\u2A7D\u0338",
nless: "\u226E",
nlsim: "\u2274",
nlt: "\u226E",
nltri: "\u22EA",
nltrie: "\u22EC",
nmid: "\u2224",
nopf: "\u{1D55F}",
not: "\xAC",
notin: "\u2209",
notinE: "\u22F9\u0338",
notindot: "\u22F5\u0338",
notinva: "\u2209",
notinvb: "\u22F7",
notinvc: "\u22F6",
notni: "\u220C",
notniva: "\u220C",
notnivb: "\u22FE",
notnivc: "\u22FD",
npar: "\u2226",
nparallel: "\u2226",
nparsl: "\u2AFD\u20E5",
npart: "\u2202\u0338",
npolint: "\u2A14",
npr: "\u2280",
nprcue: "\u22E0",
npre: "\u2AAF\u0338",
nprec: "\u2280",
npreceq: "\u2AAF\u0338",
nrArr: "\u21CF",
nrarr: "\u219B",
nrarrc: "\u2933\u0338",
nrarrw: "\u219D\u0338",
nrightarrow: "\u219B",
nrtri: "\u22EB",
nrtrie: "\u22ED",
nsc: "\u2281",
nsccue: "\u22E1",
nsce: "\u2AB0\u0338",
nscr: "\u{1D4C3}",
nshortmid: "\u2224",
nshortparallel: "\u2226",
nsim: "\u2241",
nsime: "\u2244",
nsimeq: "\u2244",
nsmid: "\u2224",
nspar: "\u2226",
nsqsube: "\u22E2",
nsqsupe: "\u22E3",
nsub: "\u2284",
nsubE: "\u2AC5\u0338",
nsube: "\u2288",
nsubset: "\u2282\u20D2",
nsubseteq: "\u2288",
nsubseteqq: "\u2AC5\u0338",
nsucc: "\u2281",
nsucceq: "\u2AB0\u0338",
nsup: "\u2285",
nsupE: "\u2AC6\u0338",
nsupe: "\u2289",
nsupset: "\u2283\u20D2",
nsupseteq: "\u2289",
nsupseteqq: "\u2AC6\u0338",
ntgl: "\u2279",
ntilde: "\xF1",
ntlg: "\u2278",
ntriangleleft: "\u22EA",
ntrianglelefteq: "\u22EC",
ntriangleright: "\u22EB",
ntrianglerighteq: "\u22ED",
nu: "\u03BD",
num: "#",
numero: "\u2116",
numsp: "\u2007",
nvDash: "\u22AD",
nvHarr: "\u2904",
nvap: "\u224D\u20D2",
nvdash: "\u22AC",
nvge: "\u2265\u20D2",
nvgt: ">\u20D2",
nvinfin: "\u29DE",
nvlArr: "\u2902",
nvle: "\u2264\u20D2",
nvlt: "<\u20D2",
nvltrie: "\u22B4\u20D2",
nvrArr: "\u2903",
nvrtrie: "\u22B5\u20D2",
nvsim: "\u223C\u20D2",
nwArr: "\u21D6",
nwarhk: "\u2923",
nwarr: "\u2196",
nwarrow: "\u2196",
nwnear: "\u2927",
oS: "\u24C8",
oacute: "\xF3",
oast: "\u229B",
ocir: "\u229A",
ocirc: "\xF4",
ocy: "\u043E",
odash: "\u229D",
odblac: "\u0151",
odiv: "\u2A38",
odot: "\u2299",
odsold: "\u29BC",
oelig: "\u0153",
ofcir: "\u29BF",
ofr: "\u{1D52C}",
ogon: "\u02DB",
ograve: "\xF2",
ogt: "\u29C1",
ohbar: "\u29B5",
ohm: "\u03A9",
oint: "\u222E",
olarr: "\u21BA",
olcir: "\u29BE",
olcross: "\u29BB",
oline: "\u203E",
olt: "\u29C0",
omacr: "\u014D",
omega: "\u03C9",
omicron: "\u03BF",
omid: "\u29B6",
ominus: "\u2296",
oopf: "\u{1D560}",
opar: "\u29B7",
operp: "\u29B9",
oplus: "\u2295",
or: "\u2228",
orarr: "\u21BB",
ord: "\u2A5D",
order: "\u2134",
orderof: "\u2134",
ordf: "\xAA",
ordm: "\xBA",
origof: "\u22B6",
oror: "\u2A56",
orslope: "\u2A57",
orv: "\u2A5B",
oscr: "\u2134",
oslash: "\xF8",
osol: "\u2298",
otilde: "\xF5",
otimes: "\u2297",
otimesas: "\u2A36",
ouml: "\xF6",
ovbar: "\u233D",
par: "\u2225",
para: "\xB6",
parallel: "\u2225",
parsim: "\u2AF3",
parsl: "\u2AFD",
part: "\u2202",
pcy: "\u043F",
percnt: "%",
period: ".",
permil: "\u2030",
perp: "\u22A5",
pertenk: "\u2031",
pfr: "\u{1D52D}",
phi: "\u03C6",
phiv: "\u03D5",
phmmat: "\u2133",
phone: "\u260E",
pi: "\u03C0",
pitchfork: "\u22D4",
piv: "\u03D6",
planck: "\u210F",
planckh: "\u210E",
plankv: "\u210F",
plus: "+",
plusacir: "\u2A23",
plusb: "\u229E",
pluscir: "\u2A22",
plusdo: "\u2214",
plusdu: "\u2A25",
pluse: "\u2A72",
plusmn: "\xB1",
plussim: "\u2A26",
plustwo: "\u2A27",
pm: "\xB1",
pointint: "\u2A15",
popf: "\u{1D561}",
pound: "\xA3",
pr: "\u227A",
prE: "\u2AB3",
prap: "\u2AB7",
prcue: "\u227C",
pre: "\u2AAF",
prec: "\u227A",
precapprox: "\u2AB7",
preccurlyeq: "\u227C",
preceq: "\u2AAF",
precnapprox: "\u2AB9",
precneqq: "\u2AB5",
precnsim: "\u22E8",
precsim: "\u227E",
prime: "\u2032",
primes: "\u2119",
prnE: "\u2AB5",
prnap: "\u2AB9",
prnsim: "\u22E8",
prod: "\u220F",
profalar: "\u232E",
profline: "\u2312",
profsurf: "\u2313",
prop: "\u221D",
propto: "\u221D",
prsim: "\u227E",
prurel: "\u22B0",
pscr: "\u{1D4C5}",
psi: "\u03C8",
puncsp: "\u2008",
qfr: "\u{1D52E}",
qint: "\u2A0C",
qopf: "\u{1D562}",
qprime: "\u2057",
qscr: "\u{1D4C6}",
quaternions: "\u210D",
quatint: "\u2A16",
quest: "?",
questeq: "\u225F",
quot: '"',
rAarr: "\u21DB",
rArr: "\u21D2",
rAtail: "\u291C",
rBarr: "\u290F",
rHar: "\u2964",
race: "\u223D\u0331",
racute: "\u0155",
radic: "\u221A",
raemptyv: "\u29B3",
rang: "\u27E9",
rangd: "\u2992",
range: "\u29A5",
rangle: "\u27E9",
raquo: "\xBB",
rarr: "\u2192",
rarrap: "\u2975",
rarrb: "\u21E5",
rarrbfs: "\u2920",
rarrc: "\u2933",
rarrfs: "\u291E",
rarrhk: "\u21AA",
rarrlp: "\u21AC",
rarrpl: "\u2945",
rarrsim: "\u2974",
rarrtl: "\u21A3",
rarrw: "\u219D",
ratail: "\u291A",
ratio: "\u2236",
rationals: "\u211A",
rbarr: "\u290D",
rbbrk: "\u2773",
rbrace: "}",
rbrack: "]",
rbrke: "\u298C",
rbrksld: "\u298E",
rbrkslu: "\u2990",
rcaron: "\u0159",
rcedil: "\u0157",
rceil: "\u2309",
rcub: "}",
rcy: "\u0440",
rdca: "\u2937",
rdldhar: "\u2969",
rdquo: "\u201D",
rdquor: "\u201D",
rdsh: "\u21B3",
real: "\u211C",
realine: "\u211B",
realpart: "\u211C",
reals: "\u211D",
rect: "\u25AD",
reg: "\xAE",
rfisht: "\u297D",
rfloor: "\u230B",
rfr: "\u{1D52F}",
rhard: "\u21C1",
rharu: "\u21C0",
rharul: "\u296C",
rho: "\u03C1",
rhov: "\u03F1",
rightarrow: "\u2192",
rightarrowtail: "\u21A3",
rightharpoondown: "\u21C1",
rightharpoonup: "\u21C0",
rightleftarrows: "\u21C4",
rightleftharpoons: "\u21CC",
rightrightarrows: "\u21C9",
rightsquigarrow: "\u219D",
rightthreetimes: "\u22CC",
ring: "\u02DA",
risingdotseq: "\u2253",
rlarr: "\u21C4",
rlhar: "\u21CC",
rlm: "\u200F",
rmoust: "\u23B1",
rmoustache: "\u23B1",
rnmid: "\u2AEE",
roang: "\u27ED",
roarr: "\u21FE",
robrk: "\u27E7",
ropar: "\u2986",
ropf: "\u{1D563}",
roplus: "\u2A2E",
rotimes: "\u2A35",
rpar: ")",
rpargt: "\u2994",
rppolint: "\u2A12",
rrarr: "\u21C9",
rsaquo: "\u203A",
rscr: "\u{1D4C7}",
rsh: "\u21B1",
rsqb: "]",
rsquo: "\u2019",
rsquor: "\u2019",
rthree: "\u22CC",
rtimes: "\u22CA",
rtri: "\u25B9",
rtrie: "\u22B5",
rtrif: "\u25B8",
rtriltri: "\u29CE",
ruluhar: "\u2968",
rx: "\u211E",
sacute: "\u015B",
sbquo: "\u201A",
sc: "\u227B",
scE: "\u2AB4",
scap: "\u2AB8",
scaron: "\u0161",
sccue: "\u227D",
sce: "\u2AB0",
scedil: "\u015F",
scirc: "\u015D",
scnE: "\u2AB6",
scnap: "\u2ABA",
scnsim: "\u22E9",
scpolint: "\u2A13",
scsim: "\u227F",
scy: "\u0441",
sdot: "\u22C5",
sdotb: "\u22A1",
sdote: "\u2A66",
seArr: "\u21D8",
searhk: "\u2925",
searr: "\u2198",
searrow: "\u2198",
sect: "\xA7",
semi: ";",
seswar: "\u2929",
setminus: "\u2216",
setmn: "\u2216",
sext: "\u2736",
sfr: "\u{1D530}",
sfrown: "\u2322",
sharp: "\u266F",
shchcy: "\u0449",
shcy: "\u0448",
shortmid: "\u2223",
shortparallel: "\u2225",
shy: "\xAD",
sigma: "\u03C3",
sigmaf: "\u03C2",
sigmav: "\u03C2",
sim: "\u223C",
simdot: "\u2A6A",
sime: "\u2243",
simeq: "\u2243",
simg: "\u2A9E",
simgE: "\u2AA0",
siml: "\u2A9D",
simlE: "\u2A9F",
simne: "\u2246",
simplus: "\u2A24",
simrarr: "\u2972",
slarr: "\u2190",
smallsetminus: "\u2216",
smashp: "\u2A33",
smeparsl: "\u29E4",
smid: "\u2223",
smile: "\u2323",
smt: "\u2AAA",
smte: "\u2AAC",
smtes: "\u2AAC\uFE00",
softcy: "\u044C",
sol: "/",
solb: "\u29C4",
solbar: "\u233F",
sopf: "\u{1D564}",
spades: "\u2660",
spadesuit: "\u2660",
spar: "\u2225",
sqcap: "\u2293",
sqcaps: "\u2293\uFE00",
sqcup: "\u2294",
sqcups: "\u2294\uFE00",
sqsub: "\u228F",
sqsube: "\u2291",
sqsubset: "\u228F",
sqsubseteq: "\u2291",
sqsup: "\u2290",
sqsupe: "\u2292",
sqsupset: "\u2290",
sqsupseteq: "\u2292",
squ: "\u25A1",
square: "\u25A1",
squarf: "\u25AA",
squf: "\u25AA",
srarr: "\u2192",
sscr: "\u{1D4C8}",
ssetmn: "\u2216",
ssmile: "\u2323",
sstarf: "\u22C6",
star: "\u2606",
starf: "\u2605",
straightepsilon: "\u03F5",
straightphi: "\u03D5",
strns: "\xAF",
sub: "\u2282",
subE: "\u2AC5",
subdot: "\u2ABD",
sube: "\u2286",
subedot: "\u2AC3",
submult: "\u2AC1",
subnE: "\u2ACB",
subne: "\u228A",
subplus: "\u2ABF",
subrarr: "\u2979",
subset: "\u2282",
subseteq: "\u2286",
subseteqq: "\u2AC5",
subsetneq: "\u228A",
subsetneqq: "\u2ACB",
subsim: "\u2AC7",
subsub: "\u2AD5",
subsup: "\u2AD3",
succ: "\u227B",
succapprox: "\u2AB8",
succcurlyeq: "\u227D",
succeq: "\u2AB0",
succnapprox: "\u2ABA",
succneqq: "\u2AB6",
succnsim: "\u22E9",
succsim: "\u227F",
sum: "\u2211",
sung: "\u266A",
sup1: "\xB9",
sup2: "\xB2",
sup3: "\xB3",
sup: "\u2283",
supE: "\u2AC6",
supdot: "\u2ABE",
supdsub: "\u2AD8",
supe: "\u2287",
supedot: "\u2AC4",
suphsol: "\u27C9",
suphsub: "\u2AD7",
suplarr: "\u297B",
supmult: "\u2AC2",
supnE: "\u2ACC",
supne: "\u228B",
supplus: "\u2AC0",
supset: "\u2283",
supseteq: "\u2287",
supseteqq: "\u2AC6",
supsetneq: "\u228B",
supsetneqq: "\u2ACC",
supsim: "\u2AC8",
supsub: "\u2AD4",
supsup: "\u2AD6",
swArr: "\u21D9",
swarhk: "\u2926",
swarr: "\u2199",
swarrow: "\u2199",
swnwar: "\u292A",
szlig: "\xDF",
target: "\u2316",
tau: "\u03C4",
tbrk: "\u23B4",
tcaron: "\u0165",
tcedil: "\u0163",
tcy: "\u0442",
tdot: "\u20DB",
telrec: "\u2315",
tfr: "\u{1D531}",
there4: "\u2234",
therefore: "\u2234",
theta: "\u03B8",
thetasym: "\u03D1",
thetav: "\u03D1",
thickapprox: "\u2248",
thicksim: "\u223C",
thinsp: "\u2009",
thkap: "\u2248",
thksim: "\u223C",
thorn: "\xFE",
tilde: "\u02DC",
times: "\xD7",
timesb: "\u22A0",
timesbar: "\u2A31",
timesd: "\u2A30",
tint: "\u222D",
toea: "\u2928",
top: "\u22A4",
topbot: "\u2336",
topcir: "\u2AF1",
topf: "\u{1D565}",
topfork: "\u2ADA",
tosa: "\u2929",
tprime: "\u2034",
trade: "\u2122",
triangle: "\u25B5",
triangledown: "\u25BF",
triangleleft: "\u25C3",
trianglelefteq: "\u22B4",
triangleq: "\u225C",
triangleright: "\u25B9",
trianglerighteq: "\u22B5",
tridot: "\u25EC",
trie: "\u225C",
triminus: "\u2A3A",
triplus: "\u2A39",
trisb: "\u29CD",
tritime: "\u2A3B",
trpezium: "\u23E2",
tscr: "\u{1D4C9}",
tscy: "\u0446",
tshcy: "\u045B",
tstrok: "\u0167",
twixt: "\u226C",
twoheadleftarrow: "\u219E",
twoheadrightarrow: "\u21A0",
uArr: "\u21D1",
uHar: "\u2963",
uacute: "\xFA",
uarr: "\u2191",
ubrcy: "\u045E",
ubreve: "\u016D",
ucirc: "\xFB",
ucy: "\u0443",
udarr: "\u21C5",
udblac: "\u0171",
udhar: "\u296E",
ufisht: "\u297E",
ufr: "\u{1D532}",
ugrave: "\xF9",
uharl: "\u21BF",
uharr: "\u21BE",
uhblk: "\u2580",
ulcorn: "\u231C",
ulcorner: "\u231C",
ulcrop: "\u230F",
ultri: "\u25F8",
umacr: "\u016B",
uml: "\xA8",
uogon: "\u0173",
uopf: "\u{1D566}",
uparrow: "\u2191",
updownarrow: "\u2195",
upharpoonleft: "\u21BF",
upharpoonright: "\u21BE",
uplus: "\u228E",
upsi: "\u03C5",
upsih: "\u03D2",
upsilon: "\u03C5",
upuparrows: "\u21C8",
urcorn: "\u231D",
urcorner: "\u231D",
urcrop: "\u230E",
uring: "\u016F",
urtri: "\u25F9",
uscr: "\u{1D4CA}",
utdot: "\u22F0",
utilde: "\u0169",
utri: "\u25B5",
utrif: "\u25B4",
uuarr: "\u21C8",
uuml: "\xFC",
uwangle: "\u29A7",
vArr: "\u21D5",
vBar: "\u2AE8",
vBarv: "\u2AE9",
vDash: "\u22A8",
vangrt: "\u299C",
varepsilon: "\u03F5",
varkappa: "\u03F0",
varnothing: "\u2205",
varphi: "\u03D5",
varpi: "\u03D6",
varpropto: "\u221D",
varr: "\u2195",
varrho: "\u03F1",
varsigma: "\u03C2",
varsubsetneq: "\u228A\uFE00",
varsubsetneqq: "\u2ACB\uFE00",
varsupsetneq: "\u228B\uFE00",
varsupsetneqq: "\u2ACC\uFE00",
vartheta: "\u03D1",
vartriangleleft: "\u22B2",
vartriangleright: "\u22B3",
vcy: "\u0432",
vdash: "\u22A2",
vee: "\u2228",
veebar: "\u22BB",
veeeq: "\u225A",
vellip: "\u22EE",
verbar: "|",
vert: "|",
vfr: "\u{1D533}",
vltri: "\u22B2",
vnsub: "\u2282\u20D2",
vnsup: "\u2283\u20D2",
vopf: "\u{1D567}",
vprop: "\u221D",
vrtri: "\u22B3",
vscr: "\u{1D4CB}",
vsubnE: "\u2ACB\uFE00",
vsubne: "\u228A\uFE00",
vsupnE: "\u2ACC\uFE00",
vsupne: "\u228B\uFE00",
vzigzag: "\u299A",
wcirc: "\u0175",
wedbar: "\u2A5F",
wedge: "\u2227",
wedgeq: "\u2259",
weierp: "\u2118",
wfr: "\u{1D534}",
wopf: "\u{1D568}",
wp: "\u2118",
wr: "\u2240",
wreath: "\u2240",
wscr: "\u{1D4CC}",
xcap: "\u22C2",
xcirc: "\u25EF",
xcup: "\u22C3",
xdtri: "\u25BD",
xfr: "\u{1D535}",
xhArr: "\u27FA",
xharr: "\u27F7",
xi: "\u03BE",
xlArr: "\u27F8",
xlarr: "\u27F5",
xmap: "\u27FC",
xnis: "\u22FB",
xodot: "\u2A00",
xopf: "\u{1D569}",
xoplus: "\u2A01",
xotime: "\u2A02",
xrArr: "\u27F9",
xrarr: "\u27F6",
xscr: "\u{1D4CD}",
xsqcup: "\u2A06",
xuplus: "\u2A04",
xutri: "\u25B3",
xvee: "\u22C1",
xwedge: "\u22C0",
yacute: "\xFD",
yacy: "\u044F",
ycirc: "\u0177",
ycy: "\u044B",
yen: "\xA5",
yfr: "\u{1D536}",
yicy: "\u0457",
yopf: "\u{1D56A}",
yscr: "\u{1D4CE}",
yucy: "\u044E",
yuml: "\xFF",
zacute: "\u017A",
zcaron: "\u017E",
zcy: "\u0437",
zdot: "\u017C",
zeetrf: "\u2128",
zeta: "\u03B6",
zfr: "\u{1D537}",
zhcy: "\u0436",
zigrarr: "\u21DD",
zopf: "\u{1D56B}",
zscr: "\u{1D4CF}",
zwj: "\u200D",
zwnj: "\u200C"
};
var decodeMap = {
"0": 65533,
"128": 8364,
"130": 8218,
"131": 402,
"132": 8222,
"133": 8230,
"134": 8224,
"135": 8225,
"136": 710,
"137": 8240,
"138": 352,
"139": 8249,
"140": 338,
"142": 381,
"145": 8216,
"146": 8217,
"147": 8220,
"148": 8221,
"149": 8226,
"150": 8211,
"151": 8212,
"152": 732,
"153": 8482,
"154": 353,
"155": 8250,
"156": 339,
"158": 382,
"159": 376
};
function decodeHTMLStrict(text) {
return text.replace(/&(?:[a-zA-Z]+|#[xX][\da-fA-F]+|#\d+);/g, (key) => {
if (key.charAt(1) === "#") {
const secondChar = key.charAt(2);
const codePoint = secondChar === "X" || secondChar === "x" ? parseInt(key.slice(3), 16) : parseInt(key.slice(2), 10);
return decodeCodePoint(codePoint);
}
return getOwnProperty(entities, key.slice(1, -1)) ?? key;
});
}
__name(decodeHTMLStrict, "decodeHTMLStrict");
function decodeCodePoint(codePoint) {
if (codePoint >= 55296 && codePoint <= 57343 || codePoint > 1114111) {
return "\uFFFD";
}
return String.fromCodePoint(getOwnProperty(decodeMap, codePoint) ?? codePoint);
}
__name(decodeCodePoint, "decodeCodePoint");
function scanJSXAttributeValue(parser, context) {
parser.startIndex = parser.tokenIndex = parser.index;
parser.startColumn = parser.tokenColumn = parser.column;
parser.startLine = parser.tokenLine = parser.line;
parser.setToken(CharTypes[parser.currentChar] & 8192 ? scanJSXString(parser) : scanSingleToken(parser, context, 0));
return parser.getToken();
}
__name(scanJSXAttributeValue, "scanJSXAttributeValue");
function scanJSXString(parser) {
const quote = parser.currentChar;
let char = advanceChar(parser);
const start = parser.index;
while (char !== quote) {
if (parser.index >= parser.end)
parser.report(16);
char = advanceChar(parser);
}
if (char !== quote)
parser.report(16);
parser.tokenValue = parser.source.slice(start, parser.index);
advanceChar(parser);
if (parser.options.raw)
parser.tokenRaw = parser.source.slice(parser.tokenIndex, parser.index);
return 134283267;
}
__name(scanJSXString, "scanJSXString");
function nextJSXToken(parser) {
parser.startIndex = parser.tokenIndex = parser.index;
parser.startColumn = parser.tokenColumn = parser.column;
parser.startLine = parser.tokenLine = parser.line;
if (parser.index >= parser.end) {
parser.setToken(1048576);
return;
}
if (parser.currentChar === 60) {
advanceChar(parser);
parser.setToken(8456256);
return;
}
if (parser.currentChar === 123) {
advanceChar(parser);
parser.setToken(2162700);
return;
}
let state = 0;
while (parser.index < parser.end) {
const type = CharTypes[parser.source.charCodeAt(parser.index)];
if (type & 1024) {
state |= 1 | 4;
scanNewLine(parser);
} else if (type & 2048) {
consumeLineFeed(parser, state);
state = state & -5 | 1;
} else {
advanceChar(parser);
}
if (CharTypes[parser.currentChar] & 16384)
break;
}
if (parser.tokenIndex === parser.index)
parser.report(0);
const raw = parser.source.slice(parser.tokenIndex, parser.index);
if (parser.options.raw)
parser.tokenRaw = raw;
parser.tokenValue = decodeHTMLStrict(raw);
parser.setToken(137);
}
__name(nextJSXToken, "nextJSXToken");
function rescanJSXIdentifier(parser) {
if ((parser.getToken() & 143360) === 143360) {
const { index } = parser;
let char = parser.currentChar;
while (CharTypes[char] & (32768 | 2)) {
char = advanceChar(parser);
}
parser.tokenValue += parser.source.slice(index, parser.index);
parser.setToken(208897, true);
}
return parser.getToken();
}
__name(rescanJSXIdentifier, "rescanJSXIdentifier");
var _Scope = class _Scope {
constructor(parser, type = 2, parent) {
__publicField(this, "parser");
__publicField(this, "type");
__publicField(this, "parent");
__publicField(this, "scopeError");
__publicField(this, "variableBindings", /* @__PURE__ */ new Map());
this.parser = parser;
this.type = type;
this.parent = parent;
}
createChildScope(type) {
return new _Scope(this.parser, type, this);
}
addVarOrBlock(context, name, kind, origin) {
if (kind & 4) {
this.addVarName(context, name, kind);
} else {
this.addBlockName(context, name, kind, origin);
}
if (origin & 64) {
this.parser.declareUnboundVariable(name);
}
}
addVarName(context, name, kind) {
const { parser } = this;
let currentScope = this;
while (currentScope && (currentScope.type & 128) === 0) {
const { variableBindings } = currentScope;
const value = variableBindings.get(name);
if (value && value & 248) {
if (parser.options.webcompat && (context & 1) === 0 && (kind & 128 && value & 68 || value & 128 && kind & 68)) ;
else {
parser.report(145, name);
}
}
if (currentScope === this) {
if (value && value & 1 && kind & 1) {
currentScope.recordScopeError(145, name);
}
}
if (value && (value & 256 || value & 512 && !parser.options.webcompat)) {
parser.report(145, name);
}
currentScope.variableBindings.set(name, kind);
currentScope = currentScope.parent;
}
}
hasVariable(name) {
return this.variableBindings.has(name);
}
addBlockName(context, name, kind, origin) {
const { parser } = this;
const value = this.variableBindings.get(name);
if (value && (value & 2) === 0) {
if (kind & 1) {
this.recordScopeError(145, name);
} else if (parser.options.webcompat && (context & 1) === 0 && origin & 2 && value === 64 && kind === 64) ;
else {
parser.report(145, name);
}
}
if (this.type & 64 && this.parent?.hasVariable(name) && (this.parent.variableBindings.get(name) & 2) === 0) {
parser.report(145, name);
}
if (this.type & 512 && value && (value & 2) === 0) {
if (kind & 1) {
this.recordScopeError(145, name);
}
}
if (this.type & 32) {
if (this.parent.variableBindings.get(name) & 768)
parser.report(159, name);
}
this.variableBindings.set(name, kind);
}
recordScopeError(type, ...params) {
this.scopeError = {
type,
params,
start: this.parser.tokenStart,
end: this.parser.currentLocation
};
}
reportScopeError() {
const { scopeError } = this;
if (!scopeError) {
return;
}
throw new ParseError(scopeError.start, scopeError.end, scopeError.type, ...scopeError.params);
}
};
__name(_Scope, "Scope");
var Scope = _Scope;
function createArrowHeadParsingScope(parser, context, value) {
const scope = parser.createScope().createChildScope(512);
scope.addBlockName(context, value, 1, 0);
return scope;
}
__name(createArrowHeadParsingScope, "createArrowHeadParsingScope");
var _PrivateScope = class _PrivateScope {
constructor(parser, parent) {
__publicField(this, "parser");
__publicField(this, "parent");
__publicField(this, "refs", /* @__PURE__ */ Object.create(null));
__publicField(this, "privateIdentifiers", /* @__PURE__ */ new Map());
this.parser = parser;
this.parent = parent;
}
addPrivateIdentifier(name, kind) {
const { privateIdentifiers } = this;
let focusKind = kind & (32 | 768);
if (!(focusKind & 768))
focusKind |= 768;
const value = privateIdentifiers.get(name);
if (this.hasPrivateIdentifier(name) && ((value & 32) !== (focusKind & 32) || value & focusKind & 768)) {
this.parser.report(146, name);
}
privateIdentifiers.set(name, this.hasPrivateIdentifier(name) ? value | focusKind : focusKind);
}
addPrivateIdentifierRef(name) {
var _a;
(_a = this.refs)[name] ?? (_a[name] = []);
this.refs[name].push(this.parser.tokenStart);
}
isPrivateIdentifierDefined(name) {
return this.hasPrivateIdentifier(name) || Boolean(this.parent?.isPrivateIdentifierDefined(name));
}
validatePrivateIdentifierRefs() {
for (const name in this.refs) {
if (!this.isPrivateIdentifierDefined(name)) {
const { index, line, column } = this.refs[name][0];
throw new ParseError({ index, line, column }, { index: index + name.length, line, column: column + name.length }, 4, name);
}
}
}
hasPrivateIdentifier(name) {
return this.privateIdentifiers.has(name);
}
};
__name(_PrivateScope, "PrivateScope");
var PrivateScope = _PrivateScope;
var _Parser = class _Parser {
constructor(source, options = {}) {
__publicField(this, "source");
__publicField(this, "options");
__publicField(this, "lastOnToken", null);
__publicField(this, "token", 1048576);
__publicField(this, "flags", 0);
__publicField(this, "index", 0);
__publicField(this, "line", 1);
__publicField(this, "column", 0);
__publicField(this, "startIndex", 0);
__publicField(this, "end", 0);
__publicField(this, "tokenIndex", 0);
__publicField(this, "startColumn", 0);
__publicField(this, "tokenColumn", 0);
__publicField(this, "tokenLine", 1);
__publicField(this, "startLine", 1);
__publicField(this, "tokenValue", "");
__publicField(this, "tokenRaw", "");
__publicField(this, "tokenRegExp");
__publicField(this, "currentChar", 0);
__publicField(this, "exportedNames", /* @__PURE__ */ new Set());
__publicField(this, "exportedBindings", /* @__PURE__ */ new Set());
__publicField(this, "assignable", 1);
__publicField(this, "destructible", 0);
__publicField(this, "leadingDecorators", { decorators: [] });
this.source = source;
this.options = options;
this.end = source.length;
this.currentChar = source.charCodeAt(0);
}
getToken() {
return this.token;
}
setToken(value, replaceLast = false) {
this.token = value;
const { onToken } = this.options;
if (onToken) {
if (value !== 1048576) {
const loc = {
start: {
line: this.tokenLine,
column: this.tokenColumn
},
end: {
line: this.line,
column: this.column
}
};
if (!replaceLast && this.lastOnToken) {
onToken(...this.lastOnToken);
}
this.lastOnToken = [convertTokenType(value), this.tokenIndex, this.index, loc];
} else {
if (this.lastOnToken) {
onToken(...this.lastOnToken);
this.lastOnToken = null;
}
}
}
return value;
}
get tokenStart() {
return {
index: this.tokenIndex,
line: this.tokenLine,
column: this.tokenColumn
};
}
get currentLocation() {
return { index: this.index, line: this.line, column: this.column };
}
finishNode(node, start, end) {
if (this.options.ranges) {
node.start = start.index;
const endIndex = end ? end.index : this.startIndex;
node.end = endIndex;
node.range = [start.index, endIndex];
}
if (this.options.loc) {
node.loc = {
start: {
line: start.line,
column: start.column
},
end: end ? { line: end.line, column: end.column } : { line: this.startLine, column: this.startColumn }
};
if (this.options.source) {
node.loc.source = this.options.source;
}
}
return node;
}
addBindingToExports(name) {
this.exportedBindings.add(name);
}
declareUnboundVariable(name) {
const { exportedNames } = this;
if (exportedNames.has(name)) {
this.report(147, name);
}
exportedNames.add(name);
}
report(type, ...params) {
throw new ParseError(this.tokenStart, this.currentLocation, type, ...params);
}
createScopeIfLexical(type, parent) {
if (this.options.lexical) {
return this.createScope(type, parent);
}
return void 0;
}
createScope(type, parent) {
return new Scope(this, type, parent);
}
createPrivateScopeIfLexical(parent) {
if (this.options.lexical) {
return new PrivateScope(this, parent);
}
return void 0;
}
};
__name(_Parser, "Parser");
var Parser = _Parser;
function pushComment(comments, options) {
return function(type, value, start, end, loc) {
const comment = {
type,
value
};
if (options.ranges) {
comment.start = start;
comment.end = end;
comment.range = [start, end];
}
if (options.loc) {
comment.loc = loc;
}
comments.push(comment);
};
}
__name(pushComment, "pushComment");
function pushToken(tokens, options) {
return function(type, start, end, loc) {
const token = {
token: type
};
if (options.ranges) {
token.start = start;
token.end = end;
token.range = [start, end];
}
if (options.loc) {
token.loc = loc;
}
tokens.push(token);
};
}
__name(pushToken, "pushToken");
function normalizeOptions(rawOptions) {
const options = { ...rawOptions };
if (options.onComment) {
options.onComment = Array.isArray(options.onComment) ? pushComment(options.onComment, options) : options.onComment;
}
if (options.onToken) {
options.onToken = Array.isArray(options.onToken) ? pushToken(options.onToken, options) : options.onToken;
}
return options;
}
__name(normalizeOptions, "normalizeOptions");
function parseSource(source, rawOptions = {}, context = 0) {
const options = normalizeOptions(rawOptions);
if (options.module)
context |= 2 | 1;
if (options.globalReturn)
context |= 4096;
if (options.impliedStrict)
context |= 1;
const parser = new Parser(source, options);
skipHashBang(parser);
const scope = parser.createScopeIfLexical();
let body = [];
let sourceType = "script";
if (context & 2) {
sourceType = "module";
body = parseModuleItemList(parser, context | 8, scope);
if (scope) {
for (const name of parser.exportedBindings) {
if (!scope.hasVariable(name))
parser.report(148, name);
}
}
} else {
body = parseStatementList(parser, context | 8, scope);
}
return parser.finishNode({
type: "Program",
sourceType,
body
}, { index: 0, line: 1, column: 0 }, parser.currentLocation);
}
__name(parseSource, "parseSource");
function parseStatementList(parser, context, scope) {
nextToken(parser, context | 32 | 262144);
const statements = [];
while (parser.getToken() === 134283267) {
const { index, tokenValue, tokenStart, tokenIndex } = parser;
const token = parser.getToken();
const expr = parseLiteral(parser, context);
if (isValidStrictMode(parser, index, tokenIndex, tokenValue)) {
context |= 1;
if (parser.flags & 64) {
throw new ParseError(parser.tokenStart, parser.currentLocation, 9);
}
if (parser.flags & 4096) {
throw new ParseError(parser.tokenStart, parser.currentLocation, 15);
}
}
statements.push(parseDirective(parser, context, expr, token, tokenStart));
}
while (parser.getToken() !== 1048576) {
statements.push(parseStatementListItem(parser, context, scope, void 0, 4, {}));
}
return statements;
}
__name(parseStatementList, "parseStatementList");
function parseModuleItemList(parser, context, scope) {
nextToken(parser, context | 32);
const statements = [];
while (parser.getToken() === 134283267) {
const { tokenStart } = parser;
const token = parser.getToken();
statements.push(parseDirective(parser, context, parseLiteral(parser, context), token, tokenStart));
}
while (parser.getToken() !== 1048576) {
statements.push(parseModuleItem(parser, context, scope));
}
return statements;
}
__name(parseModuleItemList, "parseModuleItemList");
function parseModuleItem(parser, context, scope) {
if (parser.getToken() === 132) {
Object.assign(parser.leadingDecorators, {
start: parser.tokenStart,
decorators: parseDecorators(parser, context, void 0)
});
}
let moduleItem;
switch (parser.getToken()) {
case 20564:
moduleItem = parseExportDeclaration(parser, context, scope);
break;
case 86106:
moduleItem = parseImportDeclaration(parser, context, scope);
break;
default:
moduleItem = parseStatementListItem(parser, context, scope, void 0, 4, {});
}
if (parser.leadingDecorators?.decorators.length) {
parser.report(170);
}
return moduleItem;
}
__name(parseModuleItem, "parseModuleItem");
function parseStatementListItem(parser, context, scope, privateScope, origin, labels) {
const start = parser.tokenStart;
switch (parser.getToken()) {
case 86104:
return parseFunctionDeclaration(parser, context, scope, privateScope, origin, 1, 0, 0, start);
case 132:
case 86094:
return parseClassDeclaration(parser, context, scope, privateScope, 0);
case 86090:
return parseLexicalDeclaration(parser, context, scope, privateScope, 16, 0);
case 241737:
return parseLetIdentOrVarDeclarationStatement(parser, context, scope, privateScope, origin);
case 20564:
parser.report(103, "export");
case 86106:
nextToken(parser, context);
switch (parser.getToken()) {
case 67174411:
return parseImportCallDeclaration(parser, context, privateScope, start);
case 67108877:
return parseImportMetaDeclaration(parser, context, start);
default:
parser.report(103, "import");
}
case 209005:
return parseAsyncArrowOrAsyncFunctionDeclaration(parser, context, scope, privateScope, origin, labels, 1);
default:
return parseStatement(parser, context, scope, privateScope, origin, labels, 1);
}
}
__name(parseStatementListItem, "parseStatementListItem");
function parseStatement(parser, context, scope, privateScope, origin, labels, allowFuncDecl) {
switch (parser.getToken()) {
case 86088:
return parseVariableStatement(parser, context, scope, privateScope, 0);
case 20572:
return parseReturnStatement(parser, context, privateScope);
case 20569:
return parseIfStatement(parser, context, scope, privateScope, labels);
case 20567:
return parseForStatement(parser, context, scope, privateScope, labels);
case 20562:
return parseDoWhileStatement(parser, context, scope, privateScope, labels);
case 20578:
return parseWhileStatement(parser, context, scope, privateScope, labels);
case 86110:
return parseSwitchStatement(parser, context, scope, privateScope, labels);
case 1074790417:
return parseEmptyStatement(parser, context);
case 2162700:
return parseBlock(parser, context, scope?.createChildScope(), privateScope, labels, parser.tokenStart);
case 86112:
return parseThrowStatement(parser, context, privateScope);
case 20555:
return parseBreakStatement(parser, context, labels);
case 20559:
return parseContinueStatement(parser, context, labels);
case 20577:
return parseTryStatement(parser, context, scope, privateScope, labels);
case 20579:
return parseWithStatement(parser, context, scope, privateScope, labels);
case 20560:
return parseDebuggerStatement(parser, context);
case 209005:
return parseAsyncArrowOrAsyncFunctionDeclaration(parser, context, scope, privateScope, origin, labels, 0);
case 20557:
parser.report(162);
case 20566:
parser.report(163);
case 86104:
parser.report(context & 1 ? 76 : !parser.options.webcompat ? 78 : 77);
case 86094:
parser.report(79);
default:
return parseExpressionOrLabelledStatement(parser, context, scope, privateScope, origin, labels, allowFuncDecl);
}
}
__name(parseStatement, "parseStatement");
function parseExpressionOrLabelledStatement(parser, context, scope, privateScope, origin, labels, allowFuncDecl) {
const { tokenValue, tokenStart } = parser;
const token = parser.getToken();
let expr;
switch (token) {
case 241737:
expr = parseIdentifier(parser, context);
if (context & 1)
parser.report(85);
if (parser.getToken() === 69271571)
parser.report(84);
break;
default:
expr = parsePrimaryExpression(parser, context, privateScope, 2, 0, 1, 0, 1, parser.tokenStart);
}
if (token & 143360 && parser.getToken() === 21) {
return parseLabelledStatement(parser, context, scope, privateScope, origin, labels, tokenValue, expr, token, allowFuncDecl, tokenStart);
}
expr = parseMemberOrUpdateExpression(parser, context, privateScope, expr, 0, 0, tokenStart);
expr = parseAssignmentExpression(parser, context, privateScope, 0, 0, tokenStart, expr);
if (parser.getToken() === 18) {
expr = parseSequenceExpression(parser, context, privateScope, 0, tokenStart, expr);
}
return parseExpressionStatement(parser, context, expr, tokenStart);
}
__name(parseExpressionOrLabelledStatement, "parseExpressionOrLabelledStatement");
function parseBlock(parser, context, scope, privateScope, labels, start = parser.tokenStart, type = "BlockStatement") {
const body = [];
consume(parser, context | 32, 2162700);
while (parser.getToken() !== 1074790415) {
body.push(parseStatementListItem(parser, context, scope, privateScope, 2, { $: labels }));
}
consume(parser, context | 32, 1074790415);
return parser.finishNode({
type,
body
}, start);
}
__name(parseBlock, "parseBlock");
function parseReturnStatement(parser, context, privateScope) {
if ((context & 4096) === 0)
parser.report(92);
const start = parser.tokenStart;
nextToken(parser, context | 32);
const argument = parser.flags & 1 || parser.getToken() & 1048576 ? null : parseExpressions(parser, context, privateScope, 0, 1, parser.tokenStart);
matchOrInsertSemicolon(parser, context | 32);
return parser.finishNode({
type: "ReturnStatement",
argument
}, start);
}
__name(parseReturnStatement, "parseReturnStatement");
function parseExpressionStatement(parser, context, expression, start) {
matchOrInsertSemicolon(parser, context | 32);
return parser.finishNode({
type: "ExpressionStatement",
expression
}, start);
}
__name(parseExpressionStatement, "parseExpressionStatement");
function parseLabelledStatement(parser, context, scope, privateScope, origin, labels, value, expr, token, allowFuncDecl, start) {
validateBindingIdentifier(parser, context, 0, token, 1);
validateAndDeclareLabel(parser, labels, value);
nextToken(parser, context | 32);
const body = allowFuncDecl && (context & 1) === 0 && parser.options.webcompat && parser.getToken() === 86104 ? parseFunctionDeclaration(parser, context, scope?.createChildScope(), privateScope, origin, 0, 0, 0, parser.tokenStart) : parseStatement(parser, context, scope, privateScope, origin, labels, allowFuncDecl);
return parser.finishNode({
type: "LabeledStatement",
label: expr,
body
}, start);
}
__name(parseLabelledStatement, "parseLabelledStatement");
function parseAsyncArrowOrAsyncFunctionDeclaration(parser, context, scope, privateScope, origin, labels, allowFuncDecl) {
const { tokenValue, tokenStart: start } = parser;
const token = parser.getToken();
let expr = parseIdentifier(parser, context);
if (parser.getToken() === 21) {
return parseLabelledStatement(parser, context, scope, privateScope, origin, labels, tokenValue, expr, token, 1, start);
}
const asyncNewLine = parser.flags & 1;
if (!asyncNewLine) {
if (parser.getToken() === 86104) {
if (!allowFuncDecl)
parser.report(123);
return parseFunctionDeclaration(parser, context, scope, privateScope, origin, 1, 0, 1, start);
}
if (isValidIdentifier(context, parser.getToken())) {
expr = parseAsyncArrowAfterIdent(parser, context, privateScope, 1, start);
if (parser.getToken() === 18)
expr = parseSequenceExpression(parser, context, privateScope, 0, start, expr);
return parseExpressionStatement(parser, context, expr, start);
}
}
if (parser.getToken() === 67174411) {
expr = parseAsyncArrowOrCallExpression(parser, context, privateScope, expr, 1, 1, 0, asyncNewLine, start);
} else {
if (parser.getToken() === 10) {
classifyIdentifier(parser, context, token);
if ((token & 36864) === 36864) {
parser.flags |= 256;
}
expr = parseArrowFromIdentifier(parser, context | 2048, privateScope, parser.tokenValue, expr, 0, 1, 0, start);
}
parser.assignable = 1;
}
expr = parseMemberOrUpdateExpression(parser, context, privateScope, expr, 0, 0, start);
expr = parseAssignmentExpression(parser, context, privateScope, 0, 0, start, expr);
parser.assignable = 1;
if (parser.getToken() === 18) {
expr = parseSequenceExpression(parser, context, privateScope, 0, start, expr);
}
return parseExpressionStatement(parser, context, expr, start);
}
__name(parseAsyncArrowOrAsyncFunctionDeclaration, "parseAsyncArrowOrAsyncFunctionDeclaration");
function parseDirective(parser, context, expression, token, start) {
const endIndex = parser.startIndex;
if (token !== 1074790417) {
parser.assignable = 2;
expression = parseMemberOrUpdateExpression(parser, context, void 0, expression, 0, 0, start);
if (parser.getToken() !== 1074790417) {
expression = parseAssignmentExpression(parser, context, void 0, 0, 0, start, expression);
if (parser.getToken() === 18) {
expression = parseSequenceExpression(parser, context, void 0, 0, start, expression);
}
}
matchOrInsertSemicolon(parser, context | 32);
}
const node = {
type: "ExpressionStatement",
expression
};
if (expression.type === "Literal" && typeof expression.value === "string") {
node.directive = parser.source.slice(start.index + 1, endIndex - 1);
}
return parser.finishNode(node, start);
}
__name(parseDirective, "parseDirective");
function parseEmptyStatement(parser, context) {
const start = parser.tokenStart;
nextToken(parser, context | 32);
return parser.finishNode({
type: "EmptyStatement"
}, start);
}
__name(parseEmptyStatement, "parseEmptyStatement");
function parseThrowStatement(parser, context, privateScope) {
const start = parser.tokenStart;
nextToken(parser, context | 32);
if (parser.flags & 1)
parser.report(90);
const argument = parseExpressions(parser, context, privateScope, 0, 1, parser.tokenStart);
matchOrInsertSemicolon(parser, context | 32);
return parser.finishNode({
type: "ThrowStatement",
argument
}, start);
}
__name(parseThrowStatement, "parseThrowStatement");
function parseIfStatement(parser, context, scope, privateScope, labels) {
const start = parser.tokenStart;
nextToken(parser, context);
consume(parser, context | 32, 67174411);
parser.assignable = 1;
const test = parseExpressions(parser, context, privateScope, 0, 1, parser.tokenStart);
consume(parser, context | 32, 16);
const consequent = parseConsequentOrAlternative(parser, context, scope, privateScope, labels);
let alternate = null;
if (parser.getToken() === 20563) {
nextToken(parser, context | 32);
alternate = parseConsequentOrAlternative(parser, context, scope, privateScope, labels);
}
return parser.finishNode({
type: "IfStatement",
test,
consequent,
alternate
}, start);
}
__name(parseIfStatement, "parseIfStatement");
function parseConsequentOrAlternative(parser, context, scope, privateScope, labels) {
const { tokenStart } = parser;
return context & 1 || !parser.options.webcompat || parser.getToken() !== 86104 ? parseStatement(parser, context, scope, privateScope, 0, { $: labels }, 0) : parseFunctionDeclaration(parser, context, scope?.createChildScope(), privateScope, 0, 0, 0, 0, tokenStart);
}
__name(parseConsequentOrAlternative, "parseConsequentOrAlternative");
function parseSwitchStatement(parser, context, scope, privateScope, labels) {
const start = parser.tokenStart;
nextToken(parser, context);
consume(parser, context | 32, 67174411);
const discriminant = parseExpressions(parser, context, privateScope, 0, 1, parser.tokenStart);
consume(parser, context, 16);
consume(parser, context, 2162700);
const cases = [];
let seenDefault = 0;
scope = scope?.createChildScope(8);
while (parser.getToken() !== 1074790415) {
const { tokenStart } = parser;
let test = null;
const consequent = [];
if (consumeOpt(parser, context | 32, 20556)) {
test = parseExpressions(parser, context, privateScope, 0, 1, parser.tokenStart);
} else {
consume(parser, context | 32, 20561);
if (seenDefault)
parser.report(89);
seenDefault = 1;
}
consume(parser, context | 32, 21);
while (parser.getToken() !== 20556 && parser.getToken() !== 1074790415 && parser.getToken() !== 20561) {
consequent.push(parseStatementListItem(parser, context | 4, scope, privateScope, 2, {
$: labels
}));
}
cases.push(parser.finishNode({
type: "SwitchCase",
test,
consequent
}, tokenStart));
}
consume(parser, context | 32, 1074790415);
return parser.finishNode({
type: "SwitchStatement",
discriminant,
cases
}, start);
}
__name(parseSwitchStatement, "parseSwitchStatement");
function parseWhileStatement(parser, context, scope, privateScope, labels) {
const start = parser.tokenStart;
nextToken(parser, context);
consume(parser, context | 32, 67174411);
const test = parseExpressions(parser, context, privateScope, 0, 1, parser.tokenStart);
consume(parser, context | 32, 16);
const body = parseIterationStatementBody(parser, context, scope, privateScope, labels);
return parser.finishNode({
type: "WhileStatement",
test,
body
}, start);
}
__name(parseWhileStatement, "parseWhileStatement");
function parseIterationStatementBody(parser, context, scope, privateScope, labels) {
return parseStatement(parser, (context | 131072) ^ 131072 | 128, scope, privateScope, 0, { loop: 1, $: labels }, 0);
}
__name(parseIterationStatementBody, "parseIterationStatementBody");
function parseContinueStatement(parser, context, labels) {
if ((context & 128) === 0)
parser.report(68);
const start = parser.tokenStart;
nextToken(parser, context);
let label = null;
if ((parser.flags & 1) === 0 && parser.getToken() & 143360) {
const { tokenValue } = parser;
label = parseIdentifier(parser, context | 32);
if (!isValidLabel(parser, labels, tokenValue, 1))
parser.report(138, tokenValue);
}
matchOrInsertSemicolon(parser, context | 32);
return parser.finishNode({
type: "ContinueStatement",
label
}, start);
}
__name(parseContinueStatement, "parseContinueStatement");
function parseBreakStatement(parser, context, labels) {
const start = parser.tokenStart;
nextToken(parser, context | 32);
let label = null;
if ((parser.flags & 1) === 0 && parser.getToken() & 143360) {
const { tokenValue } = parser;
label = parseIdentifier(parser, context | 32);
if (!isValidLabel(parser, labels, tokenValue, 0))
parser.report(138, tokenValue);
} else if ((context & (4 | 128)) === 0) {
parser.report(69);
}
matchOrInsertSemicolon(parser, context | 32);
return parser.finishNode({
type: "BreakStatement",
label
}, start);
}
__name(parseBreakStatement, "parseBreakStatement");
function parseWithStatement(parser, context, scope, privateScope, labels) {
const start = parser.tokenStart;
nextToken(parser, context);
if (context & 1)
parser.report(91);
consume(parser, context | 32, 67174411);
const object = parseExpressions(parser, context, privateScope, 0, 1, parser.tokenStart);
consume(parser, context | 32, 16);
const body = parseStatement(parser, context, scope, privateScope, 2, labels, 0);
return parser.finishNode({
type: "WithStatement",
object,
body
}, start);
}
__name(parseWithStatement, "parseWithStatement");
function parseDebuggerStatement(parser, context) {
const start = parser.tokenStart;
nextToken(parser, context | 32);
matchOrInsertSemicolon(parser, context | 32);
return parser.finishNode({
type: "DebuggerStatement"
}, start);
}
__name(parseDebuggerStatement, "parseDebuggerStatement");
function parseTryStatement(parser, context, scope, privateScope, labels) {
const start = parser.tokenStart;
nextToken(parser, context | 32);
const firstScope = scope?.createChildScope(16);
const block = parseBlock(parser, context, firstScope, privateScope, { $: labels });
const { tokenStart } = parser;
const handler = consumeOpt(parser, context | 32, 20557) ? parseCatchBlock(parser, context, scope, privateScope, labels, tokenStart) : null;
let finalizer = null;
if (parser.getToken() === 20566) {
nextToken(parser, context | 32);
const finalizerScope = scope?.createChildScope(4);
const block2 = parseBlock(parser, context, finalizerScope, privateScope, { $: labels });
finalizer = block2;
}
if (!handler && !finalizer) {
parser.report(88);
}
return parser.finishNode({
type: "TryStatement",
block,
handler,
finalizer
}, start);
}
__name(parseTryStatement, "parseTryStatement");
function parseCatchBlock(parser, context, scope, privateScope, labels, start) {
let param = null;
let additionalScope = scope;
if (consumeOpt(parser, context, 67174411)) {
scope = scope?.createChildScope(4);
param = parseBindingPattern(parser, context, scope, privateScope, (parser.getToken() & 2097152) === 2097152 ? 256 : 512, 0);
if (parser.getToken() === 18) {
parser.report(86);
} else if (parser.getToken() === 1077936155) {
parser.report(87);
}
consume(parser, context | 32, 16);
}
additionalScope = scope?.createChildScope(32);
const body = parseBlock(parser, context, additionalScope, privateScope, { $: labels });
return parser.finishNode({
type: "CatchClause",
param,
body
}, start);
}
__name(parseCatchBlock, "parseCatchBlock");
function parseStaticBlock(parser, context, scope, privateScope, start) {
scope = scope?.createChildScope();
const ctorContext = 512 | 4096 | 1024 | 4 | 128;
context = (context | ctorContext) ^ ctorContext | 256 | 2048 | 524288 | 65536;
return parseBlock(parser, context, scope, privateScope, {}, start, "StaticBlock");
}
__name(parseStaticBlock, "parseStaticBlock");
function parseDoWhileStatement(parser, context, scope, privateScope, labels) {
const start = parser.tokenStart;
nextToken(parser, context | 32);
const body = parseIterationStatementBody(parser, context, scope, privateScope, labels);
consume(parser, context, 20578);
consume(parser, context | 32, 67174411);
const test = parseExpressions(parser, context, privateScope, 0, 1, parser.tokenStart);
consume(parser, context | 32, 16);
consumeOpt(parser, context | 32, 1074790417);
return parser.finishNode({
type: "DoWhileStatement",
body,
test
}, start);
}
__name(parseDoWhileStatement, "parseDoWhileStatement");
function parseLetIdentOrVarDeclarationStatement(parser, context, scope, privateScope, origin) {
const { tokenValue, tokenStart } = parser;
const token = parser.getToken();
let expr = parseIdentifier(parser, context);
if (parser.getToken() & (143360 | 2097152)) {
const declarations = parseVariableDeclarationList(parser, context, scope, privateScope, 8, 0);
matchOrInsertSemicolon(parser, context | 32);
return parser.finishNode({
type: "VariableDeclaration",
kind: "let",
declarations
}, tokenStart);
}
parser.assignable = 1;
if (context & 1)
parser.report(85);
if (parser.getToken() === 21) {
return parseLabelledStatement(parser, context, scope, privateScope, origin, {}, tokenValue, expr, token, 0, tokenStart);
}
if (parser.getToken() === 10) {
let scope2 = void 0;
if (parser.options.lexical)
scope2 = createArrowHeadParsingScope(parser, context, tokenValue);
parser.flags = (parser.flags | 128) ^ 128;
expr = parseArrowFunctionExpression(parser, context, scope2, privateScope, [expr], 0, tokenStart);
} else {
expr = parseMemberOrUpdateExpression(parser, context, privateScope, expr, 0, 0, tokenStart);
expr = parseAssignmentExpression(parser, context, privateScope, 0, 0, tokenStart, expr);
}
if (parser.getToken() === 18) {
expr = parseSequenceExpression(parser, context, privateScope, 0, tokenStart, expr);
}
return parseExpressionStatement(parser, context, expr, tokenStart);
}
__name(parseLetIdentOrVarDeclarationStatement, "parseLetIdentOrVarDeclarationStatement");
function parseLexicalDeclaration(parser, context, scope, privateScope, kind, origin) {
const start = parser.tokenStart;
nextToken(parser, context);
const declarations = parseVariableDeclarationList(parser, context, scope, privateScope, kind, origin);
matchOrInsertSemicolon(parser, context | 32);
return parser.finishNode({
type: "VariableDeclaration",
kind: kind & 8 ? "let" : "const",
declarations
}, start);
}
__name(parseLexicalDeclaration, "parseLexicalDeclaration");
function parseVariableStatement(parser, context, scope, privateScope, origin) {
const start = parser.tokenStart;
nextToken(parser, context);
const declarations = parseVariableDeclarationList(parser, context, scope, privateScope, 4, origin);
matchOrInsertSemicolon(parser, context | 32);
return parser.finishNode({
type: "VariableDeclaration",
kind: "var",
declarations
}, start);
}
__name(parseVariableStatement, "parseVariableStatement");
function parseVariableDeclarationList(parser, context, scope, privateScope, kind, origin) {
let bindingCount = 1;
const list = [
parseVariableDeclaration(parser, context, scope, privateScope, kind, origin)
];
while (consumeOpt(parser, context, 18)) {
bindingCount++;
list.push(parseVariableDeclaration(parser, context, scope, privateScope, kind, origin));
}
if (bindingCount > 1 && origin & 32 && parser.getToken() & 262144) {
parser.report(61, KeywordDescTable[parser.getToken() & 255]);
}
return list;
}
__name(parseVariableDeclarationList, "parseVariableDeclarationList");
function parseVariableDeclaration(parser, context, scope, privateScope, kind, origin) {
const { tokenStart } = parser;
const token = parser.getToken();
let init = null;
const id = parseBindingPattern(parser, context, scope, privateScope, kind, origin);
if (parser.getToken() === 1077936155) {
nextToken(parser, context | 32);
init = parseExpression(parser, context, privateScope, 1, 0, parser.tokenStart);
if (origin & 32 || (token & 2097152) === 0) {
if (parser.getToken() === 471156 || parser.getToken() === 8673330 && (token & 2097152 || (kind & 4) === 0 || context & 1)) {
throw new ParseError(tokenStart, parser.currentLocation, 60, parser.getToken() === 471156 ? "of" : "in");
}
}
} else if ((kind & 16 || (token & 2097152) > 0) && (parser.getToken() & 262144) !== 262144) {
parser.report(59, kind & 16 ? "const" : "destructuring");
}
return parser.finishNode({
type: "VariableDeclarator",
id,
init
}, tokenStart);
}
__name(parseVariableDeclaration, "parseVariableDeclaration");
function parseForStatement(parser, context, scope, privateScope, labels) {
const start = parser.tokenStart;
nextToken(parser, context);
const forAwait = ((context & 2048) > 0 || (context & 2) > 0 && (context & 8) > 0) && consumeOpt(parser, context, 209006);
consume(parser, context | 32, 67174411);
scope = scope?.createChildScope(1);
let test = null;
let update = null;
let destructible = 0;
let init = null;
let isVarDecl = parser.getToken() === 86088 || parser.getToken() === 241737 || parser.getToken() === 86090;
let right;
const { tokenStart } = parser;
const token = parser.getToken();
if (isVarDecl) {
if (token === 241737) {
init = parseIdentifier(parser, context);
if (parser.getToken() & (143360 | 2097152)) {
if (parser.getToken() === 8673330) {
if (context & 1)
parser.report(67);
} else {
init = parser.finishNode({
type: "VariableDeclaration",
kind: "let",
declarations: parseVariableDeclarationList(parser, context | 131072, scope, privateScope, 8, 32)
}, tokenStart);
}
parser.assignable = 1;
} else if (context & 1) {
parser.report(67);
} else {
isVarDecl = false;
parser.assignable = 1;
init = parseMemberOrUpdateExpression(parser, context, privateScope, init, 0, 0, tokenStart);
if (parser.getToken() === 471156)
parser.report(115);
}
} else {
nextToken(parser, context);
init = parser.finishNode(token === 86088 ? {
type: "VariableDeclaration",
kind: "var",
declarations: parseVariableDeclarationList(parser, context | 131072, scope, privateScope, 4, 32)
} : {
type: "VariableDeclaration",
kind: "const",
declarations: parseVariableDeclarationList(parser, context | 131072, scope, privateScope, 16, 32)
}, tokenStart);
parser.assignable = 1;
}
} else if (token === 1074790417) {
if (forAwait)
parser.report(82);
} else if ((token & 2097152) === 2097152) {
const patternStart = parser.tokenStart;
init = token === 2162700 ? parseObjectLiteralOrPattern(parser, context, void 0, privateScope, 1, 0, 0, 2, 32) : parseArrayExpressionOrPattern(parser, context, void 0, privateScope, 1, 0, 0, 2, 32);
destructible = parser.destructible;
if (destructible & 64) {
parser.report(63);
}
parser.assignable = destructible & 16 ? 2 : 1;
init = parseMemberOrUpdateExpression(parser, context | 131072, privateScope, init, 0, 0, patternStart);
} else {
init = parseLeftHandSideExpression(parser, context | 131072, privateScope, 1, 0, 1);
}
if ((parser.getToken() & 262144) === 262144) {
if (parser.getToken() === 471156) {
if (parser.assignable & 2)
parser.report(80, forAwait ? "await" : "of");
reinterpretToPattern(parser, init);
nextToken(parser, context | 32);
right = parseExpression(parser, context, privateScope, 1, 0, parser.tokenStart);
consume(parser, context | 32, 16);
const body3 = parseIterationStatementBody(parser, context, scope, privateScope, labels);
return parser.finishNode({
type: "ForOfStatement",
left: init,
right,
body: body3,
await: forAwait
}, start);
}
if (parser.assignable & 2)
parser.report(80, "in");
reinterpretToPattern(parser, init);
nextToken(parser, context | 32);
if (forAwait)
parser.report(82);
right = parseExpressions(parser, context, privateScope, 0, 1, parser.tokenStart);
consume(parser, context | 32, 16);
const body2 = parseIterationStatementBody(parser, context, scope, privateScope, labels);
return parser.finishNode({
type: "ForInStatement",
body: body2,
left: init,
right
}, start);
}
if (forAwait)
parser.report(82);
if (!isVarDecl) {
if (destructible & 8 && parser.getToken() !== 1077936155) {
parser.report(80, "loop");
}
init = parseAssignmentExpression(parser, context | 131072, privateScope, 0, 0, tokenStart, init);
}
if (parser.getToken() === 18)
init = parseSequenceExpression(parser, context, privateScope, 0, tokenStart, init);
consume(parser, context | 32, 1074790417);
if (parser.getToken() !== 1074790417)
test = parseExpressions(parser, context, privateScope, 0, 1, parser.tokenStart);
consume(parser, context | 32, 1074790417);
if (parser.getToken() !== 16)
update = parseExpressions(parser, context, privateScope, 0, 1, parser.tokenStart);
consume(parser, context | 32, 16);
const body = parseIterationStatementBody(parser, context, scope, privateScope, labels);
return parser.finishNode({
type: "ForStatement",
init,
test,
update,
body
}, start);
}
__name(parseForStatement, "parseForStatement");
function parseRestrictedIdentifier(parser, context, scope) {
if (!isValidIdentifier(context, parser.getToken()))
parser.report(118);
if ((parser.getToken() & 537079808) === 537079808)
parser.report(119);
scope?.addBlockName(context, parser.tokenValue, 8, 0);
return parseIdentifier(parser, context);
}
__name(parseRestrictedIdentifier, "parseRestrictedIdentifier");
function parseImportDeclaration(parser, context, scope) {
const start = parser.tokenStart;
nextToken(parser, context);
let source = null;
const { tokenStart } = parser;
let specifiers = [];
if (parser.getToken() === 134283267) {
source = parseLiteral(parser, context);
} else {
if (parser.getToken() & 143360) {
const local = parseRestrictedIdentifier(parser, context, scope);
specifiers = [
parser.finishNode({
type: "ImportDefaultSpecifier",
local
}, tokenStart)
];
if (consumeOpt(parser, context, 18)) {
switch (parser.getToken()) {
case 8391476:
specifiers.push(parseImportNamespaceSpecifier(parser, context, scope));
break;
case 2162700:
parseImportSpecifierOrNamedImports(parser, context, scope, specifiers);
break;
default:
parser.report(107);
}
}
} else {
switch (parser.getToken()) {
case 8391476:
specifiers = [parseImportNamespaceSpecifier(parser, context, scope)];
break;
case 2162700:
parseImportSpecifierOrNamedImports(parser, context, scope, specifiers);
break;
case 67174411:
return parseImportCallDeclaration(parser, context, void 0, start);
case 67108877:
return parseImportMetaDeclaration(parser, context, start);
default:
parser.report(30, KeywordDescTable[parser.getToken() & 255]);
}
}
source = parseModuleSpecifier(parser, context);
}
const attributes = parseImportAttributes(parser, context);
const node = {
type: "ImportDeclaration",
specifiers,
source,
attributes
};
matchOrInsertSemicolon(parser, context | 32);
return parser.finishNode(node, start);
}
__name(parseImportDeclaration, "parseImportDeclaration");
function parseImportNamespaceSpecifier(parser, context, scope) {
const { tokenStart } = parser;
nextToken(parser, context);
consume(parser, context, 77932);
if ((parser.getToken() & 134217728) === 134217728) {
throw new ParseError(tokenStart, parser.currentLocation, 30, KeywordDescTable[parser.getToken() & 255]);
}
return parser.finishNode({
type: "ImportNamespaceSpecifier",
local: parseRestrictedIdentifier(parser, context, scope)
}, tokenStart);
}
__name(parseImportNamespaceSpecifier, "parseImportNamespaceSpecifier");
function parseModuleSpecifier(parser, context) {
consume(parser, context, 209011);
if (parser.getToken() !== 134283267)
parser.report(105, "Import");
return parseLiteral(parser, context);
}
__name(parseModuleSpecifier, "parseModuleSpecifier");
function parseImportSpecifierOrNamedImports(parser, context, scope, specifiers) {
nextToken(parser, context);
while (parser.getToken() & 143360 || parser.getToken() === 134283267) {
let { tokenValue, tokenStart } = parser;
const token = parser.getToken();
const imported = parseModuleExportName(parser, context);
let local;
if (consumeOpt(parser, context, 77932)) {
if ((parser.getToken() & 134217728) === 134217728 || parser.getToken() === 18) {
parser.report(106);
} else {
validateBindingIdentifier(parser, context, 16, parser.getToken(), 0);
}
tokenValue = parser.tokenValue;
local = parseIdentifier(parser, context);
} else if (imported.type === "Identifier") {
validateBindingIdentifier(parser, context, 16, token, 0);
local = imported;
} else {
parser.report(25, KeywordDescTable[77932 & 255]);
}
scope?.addBlockName(context, tokenValue, 8, 0);
specifiers.push(parser.finishNode({
type: "ImportSpecifier",
local,
imported
}, tokenStart));
if (parser.getToken() !== 1074790415)
consume(parser, context, 18);
}
consume(parser, context, 1074790415);
return specifiers;
}
__name(parseImportSpecifierOrNamedImports, "parseImportSpecifierOrNamedImports");
function parseImportMetaDeclaration(parser, context, start) {
let expr = parseImportMetaExpression(parser, context, parser.finishNode({
type: "Identifier",
name: "import"
}, start), start);
expr = parseMemberOrUpdateExpression(parser, context, void 0, expr, 0, 0, start);
expr = parseAssignmentExpression(parser, context, void 0, 0, 0, start, expr);
if (parser.getToken() === 18) {
expr = parseSequenceExpression(parser, context, void 0, 0, start, expr);
}
return parseExpressionStatement(parser, context, expr, start);
}
__name(parseImportMetaDeclaration, "parseImportMetaDeclaration");
function parseImportCallDeclaration(parser, context, privateScope, start) {
let expr = parseImportExpression(parser, context, privateScope, 0, start);
expr = parseMemberOrUpdateExpression(parser, context, privateScope, expr, 0, 0, start);
if (parser.getToken() === 18) {
expr = parseSequenceExpression(parser, context, privateScope, 0, start, expr);
}
return parseExpressionStatement(parser, context, expr, start);
}
__name(parseImportCallDeclaration, "parseImportCallDeclaration");
function parseExportDeclaration(parser, context, scope) {
const start = parser.leadingDecorators.decorators.length ? parser.leadingDecorators.start : parser.tokenStart;
nextToken(parser, context | 32);
const specifiers = [];
let declaration = null;
let source = null;
let attributes = [];
if (consumeOpt(parser, context | 32, 20561)) {
switch (parser.getToken()) {
case 86104: {
declaration = parseFunctionDeclaration(parser, context, scope, void 0, 4, 1, 1, 0, parser.tokenStart);
break;
}
case 132:
case 86094:
declaration = parseClassDeclaration(parser, context, scope, void 0, 1);
break;
case 209005: {
const { tokenStart } = parser;
declaration = parseIdentifier(parser, context);
const { flags } = parser;
if ((flags & 1) === 0) {
if (parser.getToken() === 86104) {
declaration = parseFunctionDeclaration(parser, context, scope, void 0, 4, 1, 1, 1, tokenStart);
} else {
if (parser.getToken() === 67174411) {
declaration = parseAsyncArrowOrCallExpression(parser, context, void 0, declaration, 1, 1, 0, flags, tokenStart);
declaration = parseMemberOrUpdateExpression(parser, context, void 0, declaration, 0, 0, tokenStart);
declaration = parseAssignmentExpression(parser, context, void 0, 0, 0, tokenStart, declaration);
} else if (parser.getToken() & 143360) {
if (scope)
scope = createArrowHeadParsingScope(parser, context, parser.tokenValue);
declaration = parseIdentifier(parser, context);
declaration = parseArrowFunctionExpression(parser, context, scope, void 0, [declaration], 1, tokenStart);
}
}
}
break;
}
default:
declaration = parseExpression(parser, context, void 0, 1, 0, parser.tokenStart);
matchOrInsertSemicolon(parser, context | 32);
}
if (scope)
parser.declareUnboundVariable("default");
return parser.finishNode({
type: "ExportDefaultDeclaration",
declaration
}, start);
}
switch (parser.getToken()) {
case 8391476: {
nextToken(parser, context);
let exported = null;
const isNamedDeclaration = consumeOpt(parser, context, 77932);
if (isNamedDeclaration) {
if (scope)
parser.declareUnboundVariable(parser.tokenValue);
exported = parseModuleExportName(parser, context);
}
consume(parser, context, 209011);
if (parser.getToken() !== 134283267)
parser.report(105, "Export");
source = parseLiteral(parser, context);
const attributes2 = parseImportAttributes(parser, context);
const node2 = {
type: "ExportAllDeclaration",
source,
exported,
attributes: attributes2
};
matchOrInsertSemicolon(parser, context | 32);
return parser.finishNode(node2, start);
}
case 2162700: {
nextToken(parser, context);
const tmpExportedNames = [];
const tmpExportedBindings = [];
let hasLiteralLocal = 0;
while (parser.getToken() & 143360 || parser.getToken() === 134283267) {
const { tokenStart, tokenValue } = parser;
const local = parseModuleExportName(parser, context);
if (local.type === "Literal") {
hasLiteralLocal = 1;
}
let exported;
if (parser.getToken() === 77932) {
nextToken(parser, context);
if ((parser.getToken() & 143360) === 0 && parser.getToken() !== 134283267) {
parser.report(106);
}
if (scope) {
tmpExportedNames.push(parser.tokenValue);
tmpExportedBindings.push(tokenValue);
}
exported = parseModuleExportName(parser, context);
} else {
if (scope) {
tmpExportedNames.push(parser.tokenValue);
tmpExportedBindings.push(parser.tokenValue);
}
exported = local;
}
specifiers.push(parser.finishNode({
type: "ExportSpecifier",
local,
exported
}, tokenStart));
if (parser.getToken() !== 1074790415)
consume(parser, context, 18);
}
consume(parser, context, 1074790415);
if (consumeOpt(parser, context, 209011)) {
if (parser.getToken() !== 134283267)
parser.report(105, "Export");
source = parseLiteral(parser, context);
attributes = parseImportAttributes(parser, context);
if (scope) {
tmpExportedNames.forEach((n) => parser.declareUnboundVariable(n));
}
} else {
if (hasLiteralLocal) {
parser.report(172);
}
if (scope) {
tmpExportedNames.forEach((n) => parser.declareUnboundVariable(n));
tmpExportedBindings.forEach((b) => parser.addBindingToExports(b));
}
}
matchOrInsertSemicolon(parser, context | 32);
break;
}
case 132:
case 86094:
declaration = parseClassDeclaration(parser, context, scope, void 0, 2);
break;
case 86104:
declaration = parseFunctionDeclaration(parser, context, scope, void 0, 4, 1, 2, 0, parser.tokenStart);
break;
case 241737:
declaration = parseLexicalDeclaration(parser, context, scope, void 0, 8, 64);
break;
case 86090:
declaration = parseLexicalDeclaration(parser, context, scope, void 0, 16, 64);
break;
case 86088:
declaration = parseVariableStatement(parser, context, scope, void 0, 64);
break;
case 209005: {
const { tokenStart } = parser;
nextToken(parser, context);
if ((parser.flags & 1) === 0 && parser.getToken() === 86104) {
declaration = parseFunctionDeclaration(parser, context, scope, void 0, 4, 1, 2, 1, tokenStart);
break;
}
}
default:
parser.report(30, KeywordDescTable[parser.getToken() & 255]);
}
const node = {
type: "ExportNamedDeclaration",
declaration,
specifiers,
source,
attributes
};
return parser.finishNode(node, start);
}
__name(parseExportDeclaration, "parseExportDeclaration");
function parseExpression(parser, context, privateScope, canAssign, inGroup, start) {
let expr = parsePrimaryExpression(parser, context, privateScope, 2, 0, canAssign, inGroup, 1, start);
expr = parseMemberOrUpdateExpression(parser, context, privateScope, expr, inGroup, 0, start);
return parseAssignmentExpression(parser, context, privateScope, inGroup, 0, start, expr);
}
__name(parseExpression, "parseExpression");
function parseSequenceExpression(parser, context, privateScope, inGroup, start, expr) {
const expressions = [expr];
while (consumeOpt(parser, context | 32, 18)) {
expressions.push(parseExpression(parser, context, privateScope, 1, inGroup, parser.tokenStart));
}
return parser.finishNode({
type: "SequenceExpression",
expressions
}, start);
}
__name(parseSequenceExpression, "parseSequenceExpression");
function parseExpressions(parser, context, privateScope, inGroup, canAssign, start) {
const expr = parseExpression(parser, context, privateScope, canAssign, inGroup, start);
return parser.getToken() === 18 ? parseSequenceExpression(parser, context, privateScope, inGroup, start, expr) : expr;
}
__name(parseExpressions, "parseExpressions");
function parseAssignmentExpression(parser, context, privateScope, inGroup, isPattern, start, left) {
const token = parser.getToken();
if ((token & 4194304) === 4194304) {
if (parser.assignable & 2)
parser.report(26);
if (!isPattern && token === 1077936155 && left.type === "ArrayExpression" || left.type === "ObjectExpression") {
reinterpretToPattern(parser, left);
}
nextToken(parser, context | 32);
const right = parseExpression(parser, context, privateScope, 1, inGroup, parser.tokenStart);
parser.assignable = 2;
return parser.finishNode(isPattern ? {
type: "AssignmentPattern",
left,
right
} : {
type: "AssignmentExpression",
left,
operator: KeywordDescTable[token & 255],
right
}, start);
}
if ((token & 8388608) === 8388608) {
left = parseBinaryExpression(parser, context, privateScope, inGroup, start, 4, token, left);
}
if (consumeOpt(parser, context | 32, 22)) {
left = parseConditionalExpression(parser, context, privateScope, left, start);
}
return left;
}
__name(parseAssignmentExpression, "parseAssignmentExpression");
function parseAssignmentExpressionOrPattern(parser, context, privateScope, inGroup, isPattern, start, left) {
const token = parser.getToken();
nextToken(parser, context | 32);
const right = parseExpression(parser, context, privateScope, 1, inGroup, parser.tokenStart);
left = parser.finishNode(isPattern ? {
type: "AssignmentPattern",
left,
right
} : {
type: "AssignmentExpression",
left,
operator: KeywordDescTable[token & 255],
right
}, start);
parser.assignable = 2;
return left;
}
__name(parseAssignmentExpressionOrPattern, "parseAssignmentExpressionOrPattern");
function parseConditionalExpression(parser, context, privateScope, test, start) {
const consequent = parseExpression(parser, (context | 131072) ^ 131072, privateScope, 1, 0, parser.tokenStart);
consume(parser, context | 32, 21);
parser.assignable = 1;
const alternate = parseExpression(parser, context, privateScope, 1, 0, parser.tokenStart);
parser.assignable = 2;
return parser.finishNode({
type: "ConditionalExpression",
test,
consequent,
alternate
}, start);
}
__name(parseConditionalExpression, "parseConditionalExpression");
function parseBinaryExpression(parser, context, privateScope, inGroup, start, minPrecedence, operator, left) {
const bit = -((context & 131072) > 0) & 8673330;
let t;
let precedence;
parser.assignable = 2;
while (parser.getToken() & 8388608) {
t = parser.getToken();
precedence = t & 3840;
if (t & 524288 && operator & 268435456 || operator & 524288 && t & 268435456) {
parser.report(165);
}
if (precedence + ((t === 8391735) << 8) - ((bit === t) << 12) <= minPrecedence)
break;
nextToken(parser, context | 32);
left = parser.finishNode({
type: t & 524288 || t & 268435456 ? "LogicalExpression" : "BinaryExpression",
left,
right: parseBinaryExpression(parser, context, privateScope, inGroup, parser.tokenStart, precedence, t, parseLeftHandSideExpression(parser, context, privateScope, 0, inGroup, 1)),
operator: KeywordDescTable[t & 255]
}, start);
}
if (parser.getToken() === 1077936155)
parser.report(26);
return left;
}
__name(parseBinaryExpression, "parseBinaryExpression");
function parseUnaryExpression(parser, context, privateScope, isLHS, inGroup) {
if (!isLHS)
parser.report(0);
const { tokenStart } = parser;
const unaryOperator = parser.getToken();
nextToken(parser, context | 32);
const arg = parseLeftHandSideExpression(parser, context, privateScope, 0, inGroup, 1);
if (parser.getToken() === 8391735)
parser.report(33);
if (context & 1 && unaryOperator === 16863276) {
if (arg.type === "Identifier") {
parser.report(121);
} else if (isPropertyWithPrivateFieldKey(arg)) {
parser.report(127);
}
}
parser.assignable = 2;
return parser.finishNode({
type: "UnaryExpression",
operator: KeywordDescTable[unaryOperator & 255],
argument: arg,
prefix: true
}, tokenStart);
}
__name(parseUnaryExpression, "parseUnaryExpression");
function parseAsyncExpression(parser, context, privateScope, inGroup, isLHS, canAssign, inNew, start) {
const token = parser.getToken();
const expr = parseIdentifier(parser, context);
const { flags } = parser;
if ((flags & 1) === 0) {
if (parser.getToken() === 86104) {
return parseFunctionExpression(parser, context, privateScope, 1, inGroup, start);
}
if (isValidIdentifier(context, parser.getToken())) {
if (!isLHS)
parser.report(0);
if ((parser.getToken() & 36864) === 36864) {
parser.flags |= 256;
}
return parseAsyncArrowAfterIdent(parser, context, privateScope, canAssign, start);
}
}
if (!inNew && parser.getToken() === 67174411) {
return parseAsyncArrowOrCallExpression(parser, context, privateScope, expr, canAssign, 1, 0, flags, start);
}
if (parser.getToken() === 10) {
classifyIdentifier(parser, context, token);
if (inNew)
parser.report(51);
if ((token & 36864) === 36864) {
parser.flags |= 256;
}
return parseArrowFromIdentifier(parser, context, privateScope, parser.tokenValue, expr, inNew, canAssign, 0, start);
}
parser.assignable = 1;
return expr;
}
__name(parseAsyncExpression, "parseAsyncExpression");
function parseYieldExpressionOrIdentifier(parser, context, privateScope, inGroup, canAssign, start) {
if (inGroup)
parser.destructible |= 256;
if (context & 1024) {
nextToken(parser, context | 32);
if (context & 8192)
parser.report(32);
if (!canAssign)
parser.report(26);
if (parser.getToken() === 22)
parser.report(124);
let argument = null;
let delegate = false;
if ((parser.flags & 1) === 0) {
delegate = consumeOpt(parser, context | 32, 8391476);
if (parser.getToken() & (12288 | 65536) || delegate) {
argument = parseExpression(parser, context, privateScope, 1, 0, parser.tokenStart);
}
} else if (parser.getToken() === 8391476) {
parser.report(30, KeywordDescTable[parser.getToken() & 255]);
}
parser.assignable = 2;
return parser.finishNode({
type: "YieldExpression",
argument,
delegate
}, start);
}
if (context & 1)
parser.report(97, "yield");
return parseIdentifierOrArrow(parser, context, privateScope);
}
__name(parseYieldExpressionOrIdentifier, "parseYieldExpressionOrIdentifier");
function parseAwaitExpressionOrIdentifier(parser, context, privateScope, inNew, inGroup, start) {
if (inGroup)
parser.destructible |= 128;
if (context & 524288)
parser.report(177);
const possibleIdentifierOrArrowFunc = parseIdentifierOrArrow(parser, context, privateScope);
const isIdentifier = possibleIdentifierOrArrowFunc.type === "ArrowFunctionExpression" || (parser.getToken() & 65536) === 0;
if (isIdentifier) {
if (context & 2048)
throw new ParseError(start, { index: parser.startIndex, line: parser.startLine, column: parser.startColumn }, 176);
if (context & 2)
throw new ParseError(start, { index: parser.startIndex, line: parser.startLine, column: parser.startColumn }, 110);
if (context & 8192 && context & 2048)
throw new ParseError(start, { index: parser.startIndex, line: parser.startLine, column: parser.startColumn }, 110);
return possibleIdentifierOrArrowFunc;
}
if (context & 8192) {
throw new ParseError(start, { index: parser.startIndex, line: parser.startLine, column: parser.startColumn }, 31);
}
if (context & 2048 || context & 2 && context & 8) {
if (inNew)
throw new ParseError(start, { index: parser.startIndex, line: parser.startLine, column: parser.startColumn }, 0);
const argument = parseLeftHandSideExpression(parser, context, privateScope, 0, 0, 1);
if (parser.getToken() === 8391735)
parser.report(33);
parser.assignable = 2;
return parser.finishNode({
type: "AwaitExpression",
argument
}, start);
}
if (context & 2)
throw new ParseError(start, { index: parser.startIndex, line: parser.startLine, column: parser.startColumn }, 98);
return possibleIdentifierOrArrowFunc;
}
__name(parseAwaitExpressionOrIdentifier, "parseAwaitExpressionOrIdentifier");
function parseFunctionBody(parser, context, scope, privateScope, origin, funcNameToken, functionScope) {
const { tokenStart } = parser;
consume(parser, context | 32, 2162700);
const body = [];
if (parser.getToken() !== 1074790415) {
while (parser.getToken() === 134283267) {
const { index, tokenStart: tokenStart2, tokenIndex, tokenValue } = parser;
const token = parser.getToken();
const expr = parseLiteral(parser, context);
if (isValidStrictMode(parser, index, tokenIndex, tokenValue)) {
context |= 1;
if (parser.flags & 128) {
throw new ParseError(tokenStart2, parser.currentLocation, 66);
}
if (parser.flags & 64) {
throw new ParseError(tokenStart2, parser.currentLocation, 9);
}
if (parser.flags & 4096) {
throw new ParseError(tokenStart2, parser.currentLocation, 15);
}
functionScope?.reportScopeError();
}
body.push(parseDirective(parser, context, expr, token, tokenStart2));
}
if (context & 1) {
if (funcNameToken) {
if ((funcNameToken & 537079808) === 537079808) {
parser.report(119);
}
if ((funcNameToken & 36864) === 36864) {
parser.report(40);
}
}
if (parser.flags & 512)
parser.report(119);
if (parser.flags & 256)
parser.report(118);
}
}
parser.flags = (parser.flags | 512 | 256 | 64 | 4096) ^ (512 | 256 | 64 | 4096);
parser.destructible = (parser.destructible | 256) ^ 256;
while (parser.getToken() !== 1074790415) {
body.push(parseStatementListItem(parser, context, scope, privateScope, 4, {}));
}
consume(parser, origin & (16 | 8) ? context | 32 : context, 1074790415);
parser.flags &= -4289;
if (parser.getToken() === 1077936155)
parser.report(26);
return parser.finishNode({
type: "BlockStatement",
body
}, tokenStart);
}
__name(parseFunctionBody, "parseFunctionBody");
function parseSuperExpression(parser, context) {
const { tokenStart } = parser;
nextToken(parser, context);
switch (parser.getToken()) {
case 67108990:
parser.report(167);
case 67174411: {
if ((context & 512) === 0)
parser.report(28);
parser.assignable = 2;
break;
}
case 69271571:
case 67108877: {
if ((context & 256) === 0)
parser.report(29);
parser.assignable = 1;
break;
}
default:
parser.report(30, "super");
}
return parser.finishNode({ type: "Super" }, tokenStart);
}
__name(parseSuperExpression, "parseSuperExpression");
function parseLeftHandSideExpression(parser, context, privateScope, canAssign, inGroup, isLHS) {
const start = parser.tokenStart;
const expression = parsePrimaryExpression(parser, context, privateScope, 2, 0, canAssign, inGroup, isLHS, start);
return parseMemberOrUpdateExpression(parser, context, privateScope, expression, inGroup, 0, start);
}
__name(parseLeftHandSideExpression, "parseLeftHandSideExpression");
function parseUpdateExpression(parser, context, expr, start) {
if (parser.assignable & 2)
parser.report(55);
const token = parser.getToken();
nextToken(parser, context);
parser.assignable = 2;
return parser.finishNode({
type: "UpdateExpression",
argument: expr,
operator: KeywordDescTable[token & 255],
prefix: false
}, start);
}
__name(parseUpdateExpression, "parseUpdateExpression");
function parseMemberOrUpdateExpression(parser, context, privateScope, expr, inGroup, inChain, start) {
if ((parser.getToken() & 33619968) === 33619968 && (parser.flags & 1) === 0) {
expr = parseUpdateExpression(parser, context, expr, start);
} else if ((parser.getToken() & 67108864) === 67108864) {
context = (context | 131072) ^ 131072;
switch (parser.getToken()) {
case 67108877: {
nextToken(parser, (context | 262144 | 8) ^ 8);
if (context & 16 && parser.getToken() === 130 && parser.tokenValue === "super") {
parser.report(173);
}
parser.assignable = 1;
const property = parsePropertyOrPrivatePropertyName(parser, context | 64, privateScope);
expr = parser.finishNode({
type: "MemberExpression",
object: expr,
computed: false,
property,
optional: false
}, start);
break;
}
case 69271571: {
let restoreHasOptionalChaining = false;
if ((parser.flags & 2048) === 2048) {
restoreHasOptionalChaining = true;
parser.flags = (parser.flags | 2048) ^ 2048;
}
nextToken(parser, context | 32);
const { tokenStart } = parser;
const property = parseExpressions(parser, context, privateScope, inGroup, 1, tokenStart);
consume(parser, context, 20);
parser.assignable = 1;
expr = parser.finishNode({
type: "MemberExpression",
object: expr,
computed: true,
property,
optional: false
}, start);
if (restoreHasOptionalChaining) {
parser.flags |= 2048;
}
break;
}
case 67174411: {
if ((parser.flags & 1024) === 1024) {
parser.flags = (parser.flags | 1024) ^ 1024;
return expr;
}
let restoreHasOptionalChaining = false;
if ((parser.flags & 2048) === 2048) {
restoreHasOptionalChaining = true;
parser.flags = (parser.flags | 2048) ^ 2048;
}
const args = parseArguments(parser, context, privateScope, inGroup);
parser.assignable = 2;
expr = parser.finishNode({
type: "CallExpression",
callee: expr,
arguments: args,
optional: false
}, start);
if (restoreHasOptionalChaining) {
parser.flags |= 2048;
}
break;
}
case 67108990: {
nextToken(parser, (context | 262144 | 8) ^ 8);
parser.flags |= 2048;
parser.assignable = 2;
expr = parseOptionalChain(parser, context, privateScope, expr, start);
break;
}
default:
if ((parser.flags & 2048) === 2048) {
parser.report(166);
}
parser.assignable = 2;
expr = parser.finishNode({
type: "TaggedTemplateExpression",
tag: expr,
quasi: parser.getToken() === 67174408 ? parseTemplate(parser, context | 64, privateScope) : parseTemplateLiteral(parser, context)
}, start);
}
expr = parseMemberOrUpdateExpression(parser, context, privateScope, expr, 0, 1, start);
}
if (inChain === 0 && (parser.flags & 2048) === 2048) {
parser.flags = (parser.flags | 2048) ^ 2048;
expr = parser.finishNode({
type: "ChainExpression",
expression: expr
}, start);
}
return expr;
}
__name(parseMemberOrUpdateExpression, "parseMemberOrUpdateExpression");
function parseOptionalChain(parser, context, privateScope, expr, start) {
let restoreHasOptionalChaining = false;
let node;
if (parser.getToken() === 69271571 || parser.getToken() === 67174411) {
if ((parser.flags & 2048) === 2048) {
restoreHasOptionalChaining = true;
parser.flags = (parser.flags | 2048) ^ 2048;
}
}
if (parser.getToken() === 69271571) {
nextToken(parser, context | 32);
const { tokenStart } = parser;
const property = parseExpressions(parser, context, privateScope, 0, 1, tokenStart);
consume(parser, context, 20);
parser.assignable = 2;
node = parser.finishNode({
type: "MemberExpression",
object: expr,
computed: true,
optional: true,
property
}, start);
} else if (parser.getToken() === 67174411) {
const args = parseArguments(parser, context, privateScope, 0);
parser.assignable = 2;
node = parser.finishNode({
type: "CallExpression",
callee: expr,
arguments: args,
optional: true
}, start);
} else {
const property = parsePropertyOrPrivatePropertyName(parser, context, privateScope);
parser.assignable = 2;
node = parser.finishNode({
type: "MemberExpression",
object: expr,
computed: false,
optional: true,
property
}, start);
}
if (restoreHasOptionalChaining) {
parser.flags |= 2048;
}
return node;
}
__name(parseOptionalChain, "parseOptionalChain");
function parsePropertyOrPrivatePropertyName(parser, context, privateScope) {
if ((parser.getToken() & 143360) === 0 && parser.getToken() !== -2147483528 && parser.getToken() !== -2147483527 && parser.getToken() !== 130) {
parser.report(160);
}
return parser.getToken() === 130 ? parsePrivateIdentifier(parser, context, privateScope, 0) : parseIdentifier(parser, context);
}
__name(parsePropertyOrPrivatePropertyName, "parsePropertyOrPrivatePropertyName");
function parseUpdateExpressionPrefixed(parser, context, privateScope, inNew, isLHS, start) {
if (inNew)
parser.report(56);
if (!isLHS)
parser.report(0);
const token = parser.getToken();
nextToken(parser, context | 32);
const arg = parseLeftHandSideExpression(parser, context, privateScope, 0, 0, 1);
if (parser.assignable & 2) {
parser.report(55);
}
parser.assignable = 2;
return parser.finishNode({
type: "UpdateExpression",
argument: arg,
operator: KeywordDescTable[token & 255],
prefix: true
}, start);
}
__name(parseUpdateExpressionPrefixed, "parseUpdateExpressionPrefixed");
function parsePrimaryExpression(parser, context, privateScope, kind, inNew, canAssign, inGroup, isLHS, start) {
if ((parser.getToken() & 143360) === 143360) {
switch (parser.getToken()) {
case 209006:
return parseAwaitExpressionOrIdentifier(parser, context, privateScope, inNew, inGroup, start);
case 241771:
return parseYieldExpressionOrIdentifier(parser, context, privateScope, inGroup, canAssign, start);
case 209005:
return parseAsyncExpression(parser, context, privateScope, inGroup, isLHS, canAssign, inNew, start);
}
const { tokenValue } = parser;
const token = parser.getToken();
const expr = parseIdentifier(parser, context | 64);
if (parser.getToken() === 10) {
if (!isLHS)
parser.report(0);
classifyIdentifier(parser, context, token);
if ((token & 36864) === 36864) {
parser.flags |= 256;
}
return parseArrowFromIdentifier(parser, context, privateScope, tokenValue, expr, inNew, canAssign, 0, start);
}
if (context & 16 && !(context & 32768) && !(context & 8192) && parser.tokenValue === "arguments")
parser.report(130);
if ((token & 255) === (241737 & 255)) {
if (context & 1)
parser.report(113);
if (kind & (8 | 16))
parser.report(100);
}
parser.assignable = context & 1 && (token & 537079808) === 537079808 ? 2 : 1;
return expr;
}
if ((parser.getToken() & 134217728) === 134217728) {
return parseLiteral(parser, context);
}
switch (parser.getToken()) {
case 33619993:
case 33619994:
return parseUpdateExpressionPrefixed(parser, context, privateScope, inNew, isLHS, start);
case 16863276:
case 16842798:
case 16842799:
case 25233968:
case 25233969:
case 16863275:
case 16863277:
return parseUnaryExpression(parser, context, privateScope, isLHS, inGroup);
case 86104:
return parseFunctionExpression(parser, context, privateScope, 0, inGroup, start);
case 2162700:
return parseObjectLiteral(parser, context, privateScope, canAssign ? 0 : 1, inGroup);
case 69271571:
return parseArrayLiteral(parser, context, privateScope, canAssign ? 0 : 1, inGroup);
case 67174411:
return parseParenthesizedExpression(parser, context | 64, privateScope, canAssign, 1, 0, start);
case 86021:
case 86022:
case 86023:
return parseNullOrTrueOrFalseLiteral(parser, context);
case 86111:
return parseThisExpression(parser, context);
case 65540:
return parseRegExpLiteral(parser, context);
case 132:
case 86094:
return parseClassExpression(parser, context, privateScope, inGroup, start);
case 86109:
return parseSuperExpression(parser, context);
case 67174409:
return parseTemplateLiteral(parser, context);
case 67174408:
return parseTemplate(parser, context, privateScope);
case 86107:
return parseNewExpression(parser, context, privateScope, inGroup);
case 134283388:
return parseBigIntLiteral(parser, context);
case 130:
return parsePrivateIdentifier(parser, context, privateScope, 0);
case 86106:
return parseImportCallOrMetaExpression(parser, context, privateScope, inNew, inGroup, start);
case 8456256:
if (parser.options.jsx)
return parseJSXRootElementOrFragment(parser, context, privateScope, 0, parser.tokenStart);
default:
if (isValidIdentifier(context, parser.getToken()))
return parseIdentifierOrArrow(parser, context, privateScope);
parser.report(30, KeywordDescTable[parser.getToken() & 255]);
}
}
__name(parsePrimaryExpression, "parsePrimaryExpression");
function parseImportCallOrMetaExpression(parser, context, privateScope, inNew, inGroup, start) {
let expr = parseIdentifier(parser, context);
if (parser.getToken() === 67108877) {
return parseImportMetaExpression(parser, context, expr, start);
}
if (inNew)
parser.report(142);
expr = parseImportExpression(parser, context, privateScope, inGroup, start);
parser.assignable = 2;
return parseMemberOrUpdateExpression(parser, context, privateScope, expr, inGroup, 0, start);
}
__name(parseImportCallOrMetaExpression, "parseImportCallOrMetaExpression");
function parseImportMetaExpression(parser, context, meta, start) {
if ((context & 2) === 0)
parser.report(169);
nextToken(parser, context);
const token = parser.getToken();
if (token !== 209030 && parser.tokenValue !== "meta") {
parser.report(174);
} else if (token & -2147483648) {
parser.report(175);
}
parser.assignable = 2;
return parser.finishNode({
type: "MetaProperty",
meta,
property: parseIdentifier(parser, context)
}, start);
}
__name(parseImportMetaExpression, "parseImportMetaExpression");
function parseImportExpression(parser, context, privateScope, inGroup, start) {
consume(parser, context | 32, 67174411);
if (parser.getToken() === 14)
parser.report(143);
const source = parseExpression(parser, context, privateScope, 1, inGroup, parser.tokenStart);
let options = null;
if (parser.getToken() === 18) {
consume(parser, context, 18);
if (parser.getToken() !== 16) {
const expContext = (context | 131072) ^ 131072;
options = parseExpression(parser, expContext, privateScope, 1, inGroup, parser.tokenStart);
}
consumeOpt(parser, context, 18);
}
const node = {
type: "ImportExpression",
source,
options
};
consume(parser, context, 16);
return parser.finishNode(node, start);
}
__name(parseImportExpression, "parseImportExpression");
function parseImportAttributes(parser, context) {
if (!consumeOpt(parser, context, 20579))
return [];
consume(parser, context, 2162700);
const attributes = [];
const keysContent = /* @__PURE__ */ new Set();
while (parser.getToken() !== 1074790415) {
const start = parser.tokenStart;
const key = parseIdentifierOrStringLiteral(parser, context);
consume(parser, context, 21);
const value = parseStringLiteral(parser, context);
const keyContent = key.type === "Literal" ? key.value : key.name;
if (keysContent.has(keyContent)) {
parser.report(145, `${keyContent}`);
}
keysContent.add(keyContent);
attributes.push(parser.finishNode({
type: "ImportAttribute",
key,
value
}, start));
if (parser.getToken() !== 1074790415) {
consume(parser, context, 18);
}
}
consume(parser, context, 1074790415);
return attributes;
}
__name(parseImportAttributes, "parseImportAttributes");
function parseStringLiteral(parser, context) {
if (parser.getToken() === 134283267) {
return parseLiteral(parser, context);
} else {
parser.report(30, KeywordDescTable[parser.getToken() & 255]);
}
}
__name(parseStringLiteral, "parseStringLiteral");
function parseIdentifierOrStringLiteral(parser, context) {
if (parser.getToken() === 134283267) {
return parseLiteral(parser, context);
} else if (parser.getToken() & 143360) {
return parseIdentifier(parser, context);
} else {
parser.report(30, KeywordDescTable[parser.getToken() & 255]);
}
}
__name(parseIdentifierOrStringLiteral, "parseIdentifierOrStringLiteral");
function validateStringWellFormed(parser, str) {
const len = str.length;
for (let i = 0; i < len; i++) {
const code = str.charCodeAt(i);
if ((code & 64512) !== 55296)
continue;
if (code > 56319 || ++i >= len || (str.charCodeAt(i) & 64512) !== 56320) {
parser.report(171, JSON.stringify(str.charAt(i--)));
}
}
}
__name(validateStringWellFormed, "validateStringWellFormed");
function parseModuleExportName(parser, context) {
if (parser.getToken() === 134283267) {
validateStringWellFormed(parser, parser.tokenValue);
return parseLiteral(parser, context);
} else if (parser.getToken() & 143360) {
return parseIdentifier(parser, context);
} else {
parser.report(30, KeywordDescTable[parser.getToken() & 255]);
}
}
__name(parseModuleExportName, "parseModuleExportName");
function parseBigIntLiteral(parser, context) {
const { tokenRaw, tokenValue, tokenStart } = parser;
nextToken(parser, context);
parser.assignable = 2;
const node = {
type: "Literal",
value: tokenValue,
bigint: String(tokenValue)
};
if (parser.options.raw) {
node.raw = tokenRaw;
}
return parser.finishNode(node, tokenStart);
}
__name(parseBigIntLiteral, "parseBigIntLiteral");
function parseTemplateLiteral(parser, context) {
parser.assignable = 2;
const { tokenValue, tokenRaw, tokenStart } = parser;
consume(parser, context, 67174409);
const quasis = [parseTemplateElement(parser, tokenValue, tokenRaw, tokenStart, true)];
return parser.finishNode({
type: "TemplateLiteral",
expressions: [],
quasis
}, tokenStart);
}
__name(parseTemplateLiteral, "parseTemplateLiteral");
function parseTemplate(parser, context, privateScope) {
context = (context | 131072) ^ 131072;
const { tokenValue, tokenRaw, tokenStart } = parser;
consume(parser, context & -65 | 32, 67174408);
const quasis = [parseTemplateElement(parser, tokenValue, tokenRaw, tokenStart, false)];
const expressions = [
parseExpressions(parser, context & -65, privateScope, 0, 1, parser.tokenStart)
];
if (parser.getToken() !== 1074790415)
parser.report(83);
while (parser.setToken(scanTemplateTail(parser, context), true) !== 67174409) {
const { tokenValue: tokenValue2, tokenRaw: tokenRaw2, tokenStart: tokenStart2 } = parser;
consume(parser, context & -65 | 32, 67174408);
quasis.push(parseTemplateElement(parser, tokenValue2, tokenRaw2, tokenStart2, false));
expressions.push(parseExpressions(parser, context, privateScope, 0, 1, parser.tokenStart));
if (parser.getToken() !== 1074790415)
parser.report(83);
}
{
const { tokenValue: tokenValue2, tokenRaw: tokenRaw2, tokenStart: tokenStart2 } = parser;
consume(parser, context, 67174409);
quasis.push(parseTemplateElement(parser, tokenValue2, tokenRaw2, tokenStart2, true));
}
return parser.finishNode({
type: "TemplateLiteral",
expressions,
quasis
}, tokenStart);
}
__name(parseTemplate, "parseTemplate");
function parseTemplateElement(parser, cooked, raw, start, tail) {
const node = parser.finishNode({
type: "TemplateElement",
value: {
cooked,
raw
},
tail
}, start);
const tailSize = tail ? 1 : 2;
if (parser.options.ranges) {
node.start += 1;
node.range[0] += 1;
node.end -= tailSize;
node.range[1] -= tailSize;
}
if (parser.options.loc) {
node.loc.start.column += 1;
node.loc.end.column -= tailSize;
}
return node;
}
__name(parseTemplateElement, "parseTemplateElement");
function parseSpreadElement(parser, context, privateScope) {
const start = parser.tokenStart;
context = (context | 131072) ^ 131072;
consume(parser, context | 32, 14);
const argument = parseExpression(parser, context, privateScope, 1, 0, parser.tokenStart);
parser.assignable = 1;
return parser.finishNode({
type: "SpreadElement",
argument
}, start);
}
__name(parseSpreadElement, "parseSpreadElement");
function parseArguments(parser, context, privateScope, inGroup) {
nextToken(parser, context | 32);
const args = [];
if (parser.getToken() === 16) {
nextToken(parser, context | 64);
return args;
}
while (parser.getToken() !== 16) {
if (parser.getToken() === 14) {
args.push(parseSpreadElement(parser, context, privateScope));
} else {
args.push(parseExpression(parser, context, privateScope, 1, inGroup, parser.tokenStart));
}
if (parser.getToken() !== 18)
break;
nextToken(parser, context | 32);
if (parser.getToken() === 16)
break;
}
consume(parser, context | 64, 16);
return args;
}
__name(parseArguments, "parseArguments");
function parseIdentifier(parser, context) {
const { tokenValue, tokenStart } = parser;
const allowRegex = tokenValue === "await" && (parser.getToken() & -2147483648) === 0;
nextToken(parser, context | (allowRegex ? 32 : 0));
return parser.finishNode({
type: "Identifier",
name: tokenValue
}, tokenStart);
}
__name(parseIdentifier, "parseIdentifier");
function parseLiteral(parser, context) {
const { tokenValue, tokenRaw, tokenStart } = parser;
if (parser.getToken() === 134283388) {
return parseBigIntLiteral(parser, context);
}
nextToken(parser, context);
parser.assignable = 2;
return parser.finishNode(parser.options.raw ? {
type: "Literal",
value: tokenValue,
raw: tokenRaw
} : {
type: "Literal",
value: tokenValue
}, tokenStart);
}
__name(parseLiteral, "parseLiteral");
function parseNullOrTrueOrFalseLiteral(parser, context) {
const start = parser.tokenStart;
const raw = KeywordDescTable[parser.getToken() & 255];
const value = parser.getToken() === 86023 ? null : raw === "true";
nextToken(parser, context);
parser.assignable = 2;
return parser.finishNode(parser.options.raw ? {
type: "Literal",
value,
raw
} : {
type: "Literal",
value
}, start);
}
__name(parseNullOrTrueOrFalseLiteral, "parseNullOrTrueOrFalseLiteral");
function parseThisExpression(parser, context) {
const { tokenStart } = parser;
nextToken(parser, context);
parser.assignable = 2;
return parser.finishNode({
type: "ThisExpression"
}, tokenStart);
}
__name(parseThisExpression, "parseThisExpression");
function parseFunctionDeclaration(parser, context, scope, privateScope, origin, allowGen, flags, isAsync, start) {
nextToken(parser, context | 32);
const isGenerator = allowGen ? optionalBit(parser, context, 8391476) : 0;
let id = null;
let funcNameToken;
let functionScope = scope ? parser.createScope() : void 0;
if (parser.getToken() === 67174411) {
if ((flags & 1) === 0)
parser.report(39, "Function");
} else {
const kind = origin & 4 && ((context & 8) === 0 || (context & 2) === 0) ? 4 : 64 | (isAsync ? 1024 : 0) | (isGenerator ? 1024 : 0);
validateFunctionName(parser, context, parser.getToken());
if (scope) {
if (kind & 4) {
scope.addVarName(context, parser.tokenValue, kind);
} else {
scope.addBlockName(context, parser.tokenValue, kind, origin);
}
functionScope = functionScope?.createChildScope(128);
if (flags) {
if (flags & 2) {
parser.declareUnboundVariable(parser.tokenValue);
}
}
}
funcNameToken = parser.getToken();
if (parser.getToken() & 143360) {
id = parseIdentifier(parser, context);
} else {
parser.report(30, KeywordDescTable[parser.getToken() & 255]);
}
}
{
const modifierFlags2 = 256 | 512 | 1024 | 2048 | 8192 | 16384;
context = (context | modifierFlags2) ^ modifierFlags2 | 65536 | (isAsync ? 2048 : 0) | (isGenerator ? 1024 : 0) | (isGenerator ? 0 : 262144);
}
functionScope = functionScope?.createChildScope(256);
const params = parseFormalParametersOrFormalList(parser, (context | 8192) & -524289, functionScope, privateScope, 0, 1);
const modifierFlags = 8 | 4 | 128 | 524288;
const body = parseFunctionBody(parser, (context | modifierFlags) ^ modifierFlags | 32768 | 4096, functionScope?.createChildScope(64), privateScope, 8, funcNameToken, functionScope);
return parser.finishNode({
type: "FunctionDeclaration",
id,
params,
body,
async: isAsync === 1,
generator: isGenerator === 1
}, start);
}
__name(parseFunctionDeclaration, "parseFunctionDeclaration");
function parseFunctionExpression(parser, context, privateScope, isAsync, inGroup, start) {
nextToken(parser, context | 32);
const isGenerator = optionalBit(parser, context, 8391476);
const generatorAndAsyncFlags = (isAsync ? 2048 : 0) | (isGenerator ? 1024 : 0);
let id = null;
let funcNameToken;
let scope = parser.createScopeIfLexical();
const modifierFlags = 256 | 512 | 1024 | 2048 | 8192 | 16384 | 524288;
if (parser.getToken() & 143360) {
validateFunctionName(parser, (context | modifierFlags) ^ modifierFlags | generatorAndAsyncFlags, parser.getToken());
scope = scope?.createChildScope(128);
funcNameToken = parser.getToken();
id = parseIdentifier(parser, context);
}
context = (context | modifierFlags) ^ modifierFlags | 65536 | generatorAndAsyncFlags | (isGenerator ? 0 : 262144);
scope = scope?.createChildScope(256);
const params = parseFormalParametersOrFormalList(parser, (context | 8192) & -524289, scope, privateScope, inGroup, 1);
const body = parseFunctionBody(parser, context & -131229 | 32768 | 4096, scope?.createChildScope(64), privateScope, 0, funcNameToken, scope);
parser.assignable = 2;
return parser.finishNode({
type: "FunctionExpression",
id,
params,
body,
async: isAsync === 1,
generator: isGenerator === 1
}, start);
}
__name(parseFunctionExpression, "parseFunctionExpression");
function parseArrayLiteral(parser, context, privateScope, skipInitializer, inGroup) {
const expr = parseArrayExpressionOrPattern(parser, context, void 0, privateScope, skipInitializer, inGroup, 0, 2, 0);
if (parser.destructible & 64) {
parser.report(63);
}
if (parser.destructible & 8) {
parser.report(62);
}
return expr;
}
__name(parseArrayLiteral, "parseArrayLiteral");
function parseArrayExpressionOrPattern(parser, context, scope, privateScope, skipInitializer, inGroup, isPattern, kind, origin) {
const { tokenStart: start } = parser;
nextToken(parser, context | 32);
const elements = [];
let destructible = 0;
context = (context | 131072) ^ 131072;
while (parser.getToken() !== 20) {
if (consumeOpt(parser, context | 32, 18)) {
elements.push(null);
} else {
let left;
const { tokenStart, tokenValue } = parser;
const token = parser.getToken();
if (token & 143360) {
left = parsePrimaryExpression(parser, context, privateScope, kind, 0, 1, inGroup, 1, tokenStart);
if (parser.getToken() === 1077936155) {
if (parser.assignable & 2)
parser.report(26);
nextToken(parser, context | 32);
scope?.addVarOrBlock(context, tokenValue, kind, origin);
const right = parseExpression(parser, context, privateScope, 1, inGroup, parser.tokenStart);
left = parser.finishNode(isPattern ? {
type: "AssignmentPattern",
left,
right
} : {
type: "AssignmentExpression",
operator: "=",
left,
right
}, tokenStart);
destructible |= parser.destructible & 256 ? 256 : 0 | parser.destructible & 128 ? 128 : 0;
} else if (parser.getToken() === 18 || parser.getToken() === 20) {
if (parser.assignable & 2) {
destructible |= 16;
} else {
scope?.addVarOrBlock(context, tokenValue, kind, origin);
}
destructible |= parser.destructible & 256 ? 256 : 0 | parser.destructible & 128 ? 128 : 0;
} else {
destructible |= kind & 1 ? 32 : (kind & 2) === 0 ? 16 : 0;
left = parseMemberOrUpdateExpression(parser, context, privateScope, left, inGroup, 0, tokenStart);
if (parser.getToken() !== 18 && parser.getToken() !== 20) {
if (parser.getToken() !== 1077936155)
destructible |= 16;
left = parseAssignmentExpression(parser, context, privateScope, inGroup, isPattern, tokenStart, left);
} else if (parser.getToken() !== 1077936155) {
destructible |= parser.assignable & 2 ? 16 : 32;
}
}
} else if (token & 2097152) {
left = parser.getToken() === 2162700 ? parseObjectLiteralOrPattern(parser, context, scope, privateScope, 0, inGroup, isPattern, kind, origin) : parseArrayExpressionOrPattern(parser, context, scope, privateScope, 0, inGroup, isPattern, kind, origin);
destructible |= parser.destructible;
parser.assignable = parser.destructible & 16 ? 2 : 1;
if (parser.getToken() === 18 || parser.getToken() === 20) {
if (parser.assignable & 2) {
destructible |= 16;
}
} else if (parser.destructible & 8) {
parser.report(71);
} else {
left = parseMemberOrUpdateExpression(parser, context, privateScope, left, inGroup, 0, tokenStart);
destructible = parser.assignable & 2 ? 16 : 0;
if (parser.getToken() !== 18 && parser.getToken() !== 20) {
left = parseAssignmentExpression(parser, context, privateScope, inGroup, isPattern, tokenStart, left);
} else if (parser.getToken() !== 1077936155) {
destructible |= parser.assignable & 2 ? 16 : 32;
}
}
} else if (token === 14) {
left = parseSpreadOrRestElement(parser, context, scope, privateScope, 20, kind, origin, 0, inGroup, isPattern);
destructible |= parser.destructible;
if (parser.getToken() !== 18 && parser.getToken() !== 20)
parser.report(30, KeywordDescTable[parser.getToken() & 255]);
} else {
left = parseLeftHandSideExpression(parser, context, privateScope, 1, 0, 1);
if (parser.getToken() !== 18 && parser.getToken() !== 20) {
left = parseAssignmentExpression(parser, context, privateScope, inGroup, isPattern, tokenStart, left);
if ((kind & (2 | 1)) === 0 && token === 67174411)
destructible |= 16;
} else if (parser.assignable & 2) {
destructible |= 16;
} else if (token === 67174411) {
destructible |= parser.assignable & 1 && kind & (2 | 1) ? 32 : 16;
}
}
elements.push(left);
if (consumeOpt(parser, context | 32, 18)) {
if (parser.getToken() === 20)
break;
} else
break;
}
}
consume(parser, context, 20);
const node = parser.finishNode({
type: isPattern ? "ArrayPattern" : "ArrayExpression",
elements
}, start);
if (!skipInitializer && parser.getToken() & 4194304) {
return parseArrayOrObjectAssignmentPattern(parser, context, privateScope, destructible, inGroup, isPattern, start, node);
}
parser.destructible = destructible;
return node;
}
__name(parseArrayExpressionOrPattern, "parseArrayExpressionOrPattern");
function parseArrayOrObjectAssignmentPattern(parser, context, privateScope, destructible, inGroup, isPattern, start, node) {
if (parser.getToken() !== 1077936155)
parser.report(26);
nextToken(parser, context | 32);
if (destructible & 16)
parser.report(26);
if (!isPattern)
reinterpretToPattern(parser, node);
const { tokenStart } = parser;
const right = parseExpression(parser, context, privateScope, 1, inGroup, tokenStart);
parser.destructible = (destructible | 64 | 8) ^ (8 | 64) | (parser.destructible & 128 ? 128 : 0) | (parser.destructible & 256 ? 256 : 0);
return parser.finishNode(isPattern ? {
type: "AssignmentPattern",
left: node,
right
} : {
type: "AssignmentExpression",
left: node,
operator: "=",
right
}, start);
}
__name(parseArrayOrObjectAssignmentPattern, "parseArrayOrObjectAssignmentPattern");
function parseSpreadOrRestElement(parser, context, scope, privateScope, closingToken, kind, origin, isAsync, inGroup, isPattern) {
const { tokenStart: start } = parser;
nextToken(parser, context | 32);
let argument = null;
let destructible = 0;
const { tokenValue, tokenStart } = parser;
let token = parser.getToken();
if (token & 143360) {
parser.assignable = 1;
argument = parsePrimaryExpression(parser, context, privateScope, kind, 0, 1, inGroup, 1, tokenStart);
token = parser.getToken();
argument = parseMemberOrUpdateExpression(parser, context, privateScope, argument, inGroup, 0, tokenStart);
if (parser.getToken() !== 18 && parser.getToken() !== closingToken) {
if (parser.assignable & 2 && parser.getToken() === 1077936155)
parser.report(71);
destructible |= 16;
argument = parseAssignmentExpression(parser, context, privateScope, inGroup, isPattern, tokenStart, argument);
}
if (parser.assignable & 2) {
destructible |= 16;
} else if (token === closingToken || token === 18) {
scope?.addVarOrBlock(context, tokenValue, kind, origin);
} else {
destructible |= 32;
}
destructible |= parser.destructible & 128 ? 128 : 0;
} else if (token === closingToken) {
parser.report(41);
} else if (token & 2097152) {
argument = parser.getToken() === 2162700 ? parseObjectLiteralOrPattern(parser, context, scope, privateScope, 1, inGroup, isPattern, kind, origin) : parseArrayExpressionOrPattern(parser, context, scope, privateScope, 1, inGroup, isPattern, kind, origin);
token = parser.getToken();
if (token !== 1077936155 && token !== closingToken && token !== 18) {
if (parser.destructible & 8)
parser.report(71);
argument = parseMemberOrUpdateExpression(parser, context, privateScope, argument, inGroup, 0, tokenStart);
destructible |= parser.assignable & 2 ? 16 : 0;
if ((parser.getToken() & 4194304) === 4194304) {
if (parser.getToken() !== 1077936155)
destructible |= 16;
argument = parseAssignmentExpression(parser, context, privateScope, inGroup, isPattern, tokenStart, argument);
} else {
if ((parser.getToken() & 8388608) === 8388608) {
argument = parseBinaryExpression(parser, context, privateScope, 1, tokenStart, 4, token, argument);
}
if (consumeOpt(parser, context | 32, 22)) {
argument = parseConditionalExpression(parser, context, privateScope, argument, tokenStart);
}
destructible |= parser.assignable & 2 ? 16 : 32;
}
} else {
destructible |= closingToken === 1074790415 && token !== 1077936155 ? 16 : parser.destructible;
}
} else {
destructible |= 32;
argument = parseLeftHandSideExpression(parser, context, privateScope, 1, inGroup, 1);
const { tokenStart: tokenStart2 } = parser;
const token2 = parser.getToken();
if (token2 === 1077936155) {
if (parser.assignable & 2)
parser.report(26);
argument = parseAssignmentExpression(parser, context, privateScope, inGroup, isPattern, tokenStart2, argument);
destructible |= 16;
} else {
if (token2 === 18) {
destructible |= 16;
} else if (token2 !== closingToken) {
argument = parseAssignmentExpression(parser, context, privateScope, inGroup, isPattern, tokenStart2, argument);
}
destructible |= parser.assignable & 1 ? 32 : 16;
}
parser.destructible = destructible;
if (parser.getToken() !== closingToken && parser.getToken() !== 18)
parser.report(161);
return parser.finishNode({
type: isPattern ? "RestElement" : "SpreadElement",
argument
}, start);
}
if (parser.getToken() !== closingToken) {
if (kind & 1)
destructible |= isAsync ? 16 : 32;
if (consumeOpt(parser, context | 32, 1077936155)) {
if (destructible & 16)
parser.report(26);
reinterpretToPattern(parser, argument);
const right = parseExpression(parser, context, privateScope, 1, inGroup, parser.tokenStart);
argument = parser.finishNode(isPattern ? {
type: "AssignmentPattern",
left: argument,
right
} : {
type: "AssignmentExpression",
left: argument,
operator: "=",
right
}, tokenStart);
destructible = 16;
} else {
destructible |= 16;
}
}
parser.destructible = destructible;
return parser.finishNode({
type: isPattern ? "RestElement" : "SpreadElement",
argument
}, start);
}
__name(parseSpreadOrRestElement, "parseSpreadOrRestElement");
function parseMethodDefinition(parser, context, privateScope, kind, inGroup, start) {
const modifierFlags = 1024 | 2048 | 8192 | ((kind & 64) === 0 ? 512 | 16384 : 0);
context = (context | modifierFlags) ^ modifierFlags | (kind & 8 ? 1024 : 0) | (kind & 16 ? 2048 : 0) | (kind & 64 ? 16384 : 0) | 256 | 32768 | 65536;
let scope = parser.createScopeIfLexical(256);
const params = parseMethodFormals(parser, (context | 8192) & -524289, scope, privateScope, kind, 1, inGroup);
scope = scope?.createChildScope(64);
const body = parseFunctionBody(parser, context & -655373 | 32768 | 4096, scope, privateScope, 0, void 0, scope?.parent);
return parser.finishNode({
type: "FunctionExpression",
params,
body,
async: (kind & 16) > 0,
generator: (kind & 8) > 0,
id: null
}, start);
}
__name(parseMethodDefinition, "parseMethodDefinition");
function parseObjectLiteral(parser, context, privateScope, skipInitializer, inGroup) {
const expr = parseObjectLiteralOrPattern(parser, context, void 0, privateScope, skipInitializer, inGroup, 0, 2, 0);
if (parser.destructible & 64) {
parser.report(63);
}
if (parser.destructible & 8) {
parser.report(62);
}
return expr;
}
__name(parseObjectLiteral, "parseObjectLiteral");
function parseObjectLiteralOrPattern(parser, context, scope, privateScope, skipInitializer, inGroup, isPattern, kind, origin) {
const { tokenStart: start } = parser;
nextToken(parser, context);
const properties = [];
let destructible = 0;
let prototypeCount = 0;
context = (context | 131072) ^ 131072;
while (parser.getToken() !== 1074790415) {
const { tokenValue, tokenStart } = parser;
const token = parser.getToken();
if (token === 14) {
properties.push(parseSpreadOrRestElement(parser, context, scope, privateScope, 1074790415, kind, origin, 0, inGroup, isPattern));
} else {
let state = 0;
let key = null;
let value;
if (parser.getToken() & 143360 || parser.getToken() === -2147483528 || parser.getToken() === -2147483527) {
if (parser.getToken() === -2147483527)
destructible |= 16;
key = parseIdentifier(parser, context);
if (parser.getToken() === 18 || parser.getToken() === 1074790415 || parser.getToken() === 1077936155) {
state |= 4;
if (context & 1 && (token & 537079808) === 537079808) {
destructible |= 16;
} else {
validateBindingIdentifier(parser, context, kind, token, 0);
}
scope?.addVarOrBlock(context, tokenValue, kind, origin);
if (consumeOpt(parser, context | 32, 1077936155)) {
destructible |= 8;
const right = parseExpression(parser, context, privateScope, 1, inGroup, parser.tokenStart);
destructible |= parser.destructible & 256 ? 256 : 0 | parser.destructible & 128 ? 128 : 0;
value = parser.finishNode({
type: "AssignmentPattern",
left: parser.options.uniqueKeyInPattern ? Object.assign({}, key) : key,
right
}, tokenStart);
} else {
destructible |= (token === 209006 ? 128 : 0) | (token === -2147483528 ? 16 : 0);
value = parser.options.uniqueKeyInPattern ? Object.assign({}, key) : key;
}
} else if (consumeOpt(parser, context | 32, 21)) {
const { tokenStart: tokenStart2 } = parser;
if (tokenValue === "__proto__")
prototypeCount++;
if (parser.getToken() & 143360) {
const tokenAfterColon = parser.getToken();
const valueAfterColon = parser.tokenValue;
value = parsePrimaryExpression(parser, context, privateScope, kind, 0, 1, inGroup, 1, tokenStart2);
const token2 = parser.getToken();
value = parseMemberOrUpdateExpression(parser, context, privateScope, value, inGroup, 0, tokenStart2);
if (parser.getToken() === 18 || parser.getToken() === 1074790415) {
if (token2 === 1077936155 || token2 === 1074790415 || token2 === 18) {
destructible |= parser.destructible & 128 ? 128 : 0;
if (parser.assignable & 2) {
destructible |= 16;
} else if ((tokenAfterColon & 143360) === 143360) {
scope?.addVarOrBlock(context, valueAfterColon, kind, origin);
}
} else {
destructible |= parser.assignable & 1 ? 32 : 16;
}
} else if ((parser.getToken() & 4194304) === 4194304) {
if (parser.assignable & 2) {
destructible |= 16;
} else if (token2 !== 1077936155) {
destructible |= 32;
} else {
scope?.addVarOrBlock(context, valueAfterColon, kind, origin);
}
value = parseAssignmentExpression(parser, context, privateScope, inGroup, isPattern, tokenStart2, value);
} else {
destructible |= 16;
if ((parser.getToken() & 8388608) === 8388608) {
value = parseBinaryExpression(parser, context, privateScope, 1, tokenStart2, 4, token2, value);
}
if (consumeOpt(parser, context | 32, 22)) {
value = parseConditionalExpression(parser, context, privateScope, value, tokenStart2);
}
}
} else if ((parser.getToken() & 2097152) === 2097152) {
value = parser.getToken() === 69271571 ? parseArrayExpressionOrPattern(parser, context, scope, privateScope, 0, inGroup, isPattern, kind, origin) : parseObjectLiteralOrPattern(parser, context, scope, privateScope, 0, inGroup, isPattern, kind, origin);
destructible = parser.destructible;
parser.assignable = destructible & 16 ? 2 : 1;
if (parser.getToken() === 18 || parser.getToken() === 1074790415) {
if (parser.assignable & 2)
destructible |= 16;
} else if (parser.destructible & 8) {
parser.report(71);
} else {
value = parseMemberOrUpdateExpression(parser, context, privateScope, value, inGroup, 0, tokenStart2);
destructible = parser.assignable & 2 ? 16 : 0;
if ((parser.getToken() & 4194304) === 4194304) {
value = parseAssignmentExpressionOrPattern(parser, context, privateScope, inGroup, isPattern, tokenStart2, value);
} else {
if ((parser.getToken() & 8388608) === 8388608) {
value = parseBinaryExpression(parser, context, privateScope, 1, tokenStart2, 4, token, value);
}
if (consumeOpt(parser, context | 32, 22)) {
value = parseConditionalExpression(parser, context, privateScope, value, tokenStart2);
}
destructible |= parser.assignable & 2 ? 16 : 32;
}
}
} else {
value = parseLeftHandSideExpression(parser, context, privateScope, 1, inGroup, 1);
destructible |= parser.assignable & 1 ? 32 : 16;
if (parser.getToken() === 18 || parser.getToken() === 1074790415) {
if (parser.assignable & 2)
destructible |= 16;
} else {
value = parseMemberOrUpdateExpression(parser, context, privateScope, value, inGroup, 0, tokenStart2);
destructible = parser.assignable & 2 ? 16 : 0;
if (parser.getToken() !== 18 && token !== 1074790415) {
if (parser.getToken() !== 1077936155)
destructible |= 16;
value = parseAssignmentExpression(parser, context, privateScope, inGroup, isPattern, tokenStart2, value);
}
}
}
} else if (parser.getToken() === 69271571) {
destructible |= 16;
if (token === 209005)
state |= 16;
state |= (token === 209008 ? 256 : token === 209009 ? 512 : 1) | 2;
key = parseComputedPropertyName(parser, context, privateScope, inGroup);
destructible |= parser.assignable;
value = parseMethodDefinition(parser, context, privateScope, state, inGroup, parser.tokenStart);
} else if (parser.getToken() & 143360) {
destructible |= 16;
if (token === -2147483528)
parser.report(95);
if (token === 209005) {
if (parser.flags & 1)
parser.report(132);
state |= 16 | 1;
} else if (token === 209008) {
state |= 256;
} else if (token === 209009) {
state |= 512;
} else {
parser.report(0);
}
key = parseIdentifier(parser, context);
value = parseMethodDefinition(parser, context, privateScope, state, inGroup, parser.tokenStart);
} else if (parser.getToken() === 67174411) {
destructible |= 16;
state |= 1;
value = parseMethodDefinition(parser, context, privateScope, state, inGroup, parser.tokenStart);
} else if (parser.getToken() === 8391476) {
destructible |= 16;
if (token === 209008) {
parser.report(42);
} else if (token === 209009) {
parser.report(43);
} else if (token !== 209005) {
parser.report(30, KeywordDescTable[8391476 & 255]);
}
nextToken(parser, context);
state |= 8 | 1 | (token === 209005 ? 16 : 0);
if (parser.getToken() & 143360) {
key = parseIdentifier(parser, context);
} else if ((parser.getToken() & 134217728) === 134217728) {
key = parseLiteral(parser, context);
} else if (parser.getToken() === 69271571) {
state |= 2;
key = parseComputedPropertyName(parser, context, privateScope, inGroup);
destructible |= parser.assignable;
} else {
parser.report(30, KeywordDescTable[parser.getToken() & 255]);
}
value = parseMethodDefinition(parser, context, privateScope, state, inGroup, parser.tokenStart);
} else if ((parser.getToken() & 134217728) === 134217728) {
if (token === 209005)
state |= 16;
state |= token === 209008 ? 256 : token === 209009 ? 512 : 1;
destructible |= 16;
key = parseLiteral(parser, context);
value = parseMethodDefinition(parser, context, privateScope, state, inGroup, parser.tokenStart);
} else {
parser.report(133);
}
} else if ((parser.getToken() & 134217728) === 134217728) {
key = parseLiteral(parser, context);
if (parser.getToken() === 21) {
consume(parser, context | 32, 21);
const { tokenStart: tokenStart2 } = parser;
if (tokenValue === "__proto__")
prototypeCount++;
if (parser.getToken() & 143360) {
value = parsePrimaryExpression(parser, context, privateScope, kind, 0, 1, inGroup, 1, tokenStart2);
const { tokenValue: valueAfterColon } = parser;
const token2 = parser.getToken();
value = parseMemberOrUpdateExpression(parser, context, privateScope, value, inGroup, 0, tokenStart2);
if (parser.getToken() === 18 || parser.getToken() === 1074790415) {
if (token2 === 1077936155 || token2 === 1074790415 || token2 === 18) {
if (parser.assignable & 2) {
destructible |= 16;
} else {
scope?.addVarOrBlock(context, valueAfterColon, kind, origin);
}
} else {
destructible |= parser.assignable & 1 ? 32 : 16;
}
} else if (parser.getToken() === 1077936155) {
if (parser.assignable & 2)
destructible |= 16;
value = parseAssignmentExpression(parser, context, privateScope, inGroup, isPattern, tokenStart2, value);
} else {
destructible |= 16;
value = parseAssignmentExpression(parser, context, privateScope, inGroup, isPattern, tokenStart2, value);
}
} else if ((parser.getToken() & 2097152) === 2097152) {
value = parser.getToken() === 69271571 ? parseArrayExpressionOrPattern(parser, context, scope, privateScope, 0, inGroup, isPattern, kind, origin) : parseObjectLiteralOrPattern(parser, context, scope, privateScope, 0, inGroup, isPattern, kind, origin);
destructible = parser.destructible;
parser.assignable = destructible & 16 ? 2 : 1;
if (parser.getToken() === 18 || parser.getToken() === 1074790415) {
if (parser.assignable & 2) {
destructible |= 16;
}
} else if ((parser.destructible & 8) !== 8) {
value = parseMemberOrUpdateExpression(parser, context, privateScope, value, inGroup, 0, tokenStart2);
destructible = parser.assignable & 2 ? 16 : 0;
if ((parser.getToken() & 4194304) === 4194304) {
value = parseAssignmentExpressionOrPattern(parser, context, privateScope, inGroup, isPattern, tokenStart2, value);
} else {
if ((parser.getToken() & 8388608) === 8388608) {
value = parseBinaryExpression(parser, context, privateScope, 1, tokenStart2, 4, token, value);
}
if (consumeOpt(parser, context | 32, 22)) {
value = parseConditionalExpression(parser, context, privateScope, value, tokenStart2);
}
destructible |= parser.assignable & 2 ? 16 : 32;
}
}
} else {
value = parseLeftHandSideExpression(parser, context, privateScope, 1, 0, 1);
destructible |= parser.assignable & 1 ? 32 : 16;
if (parser.getToken() === 18 || parser.getToken() === 1074790415) {
if (parser.assignable & 2) {
destructible |= 16;
}
} else {
value = parseMemberOrUpdateExpression(parser, context, privateScope, value, inGroup, 0, tokenStart2);
destructible = parser.assignable & 1 ? 0 : 16;
if (parser.getToken() !== 18 && parser.getToken() !== 1074790415) {
if (parser.getToken() !== 1077936155)
destructible |= 16;
value = parseAssignmentExpression(parser, context, privateScope, inGroup, isPattern, tokenStart2, value);
}
}
}
} else if (parser.getToken() === 67174411) {
state |= 1;
value = parseMethodDefinition(parser, context, privateScope, state, inGroup, parser.tokenStart);
destructible = parser.assignable | 16;
} else {
parser.report(134);
}
} else if (parser.getToken() === 69271571) {
key = parseComputedPropertyName(parser, context, privateScope, inGroup);
destructible |= parser.destructible & 256 ? 256 : 0;
state |= 2;
if (parser.getToken() === 21) {
nextToken(parser, context | 32);
const { tokenStart: tokenStart2, tokenValue: tokenValue2 } = parser;
const tokenAfterColon = parser.getToken();
if (parser.getToken() & 143360) {
value = parsePrimaryExpression(parser, context, privateScope, kind, 0, 1, inGroup, 1, tokenStart2);
const token2 = parser.getToken();
value = parseMemberOrUpdateExpression(parser, context, privateScope, value, inGroup, 0, tokenStart2);
if ((parser.getToken() & 4194304) === 4194304) {
destructible |= parser.assignable & 2 ? 16 : token2 === 1077936155 ? 0 : 32;
value = parseAssignmentExpressionOrPattern(parser, context, privateScope, inGroup, isPattern, tokenStart2, value);
} else if (parser.getToken() === 18 || parser.getToken() === 1074790415) {
if (token2 === 1077936155 || token2 === 1074790415 || token2 === 18) {
if (parser.assignable & 2) {
destructible |= 16;
} else if ((tokenAfterColon & 143360) === 143360) {
scope?.addVarOrBlock(context, tokenValue2, kind, origin);
}
} else {
destructible |= parser.assignable & 1 ? 32 : 16;
}
} else {
destructible |= 16;
value = parseAssignmentExpression(parser, context, privateScope, inGroup, isPattern, tokenStart2, value);
}
} else if ((parser.getToken() & 2097152) === 2097152) {
value = parser.getToken() === 69271571 ? parseArrayExpressionOrPattern(parser, context, scope, privateScope, 0, inGroup, isPattern, kind, origin) : parseObjectLiteralOrPattern(parser, context, scope, privateScope, 0, inGroup, isPattern, kind, origin);
destructible = parser.destructible;
parser.assignable = destructible & 16 ? 2 : 1;
if (parser.getToken() === 18 || parser.getToken() === 1074790415) {
if (parser.assignable & 2)
destructible |= 16;
} else if (destructible & 8) {
parser.report(62);
} else {
value = parseMemberOrUpdateExpression(parser, context, privateScope, value, inGroup, 0, tokenStart2);
destructible = parser.assignable & 2 ? destructible | 16 : 0;
if ((parser.getToken() & 4194304) === 4194304) {
if (parser.getToken() !== 1077936155)
destructible |= 16;
value = parseAssignmentExpressionOrPattern(parser, context, privateScope, inGroup, isPattern, tokenStart2, value);
} else {
if ((parser.getToken() & 8388608) === 8388608) {
value = parseBinaryExpression(parser, context, privateScope, 1, tokenStart2, 4, token, value);
}
if (consumeOpt(parser, context | 32, 22)) {
value = parseConditionalExpression(parser, context, privateScope, value, tokenStart2);
}
destructible |= parser.assignable & 2 ? 16 : 32;
}
}
} else {
value = parseLeftHandSideExpression(parser, context, privateScope, 1, 0, 1);
destructible |= parser.assignable & 1 ? 32 : 16;
if (parser.getToken() === 18 || parser.getToken() === 1074790415) {
if (parser.assignable & 2)
destructible |= 16;
} else {
value = parseMemberOrUpdateExpression(parser, context, privateScope, value, inGroup, 0, tokenStart2);
destructible = parser.assignable & 1 ? 0 : 16;
if (parser.getToken() !== 18 && parser.getToken() !== 1074790415) {
if (parser.getToken() !== 1077936155)
destructible |= 16;
value = parseAssignmentExpression(parser, context, privateScope, inGroup, isPattern, tokenStart2, value);
}
}
}
} else if (parser.getToken() === 67174411) {
state |= 1;
value = parseMethodDefinition(parser, context, privateScope, state, inGroup, parser.tokenStart);
destructible = 16;
} else {
parser.report(44);
}
} else if (token === 8391476) {
consume(parser, context | 32, 8391476);
state |= 8;
if (parser.getToken() & 143360) {
const token2 = parser.getToken();
key = parseIdentifier(parser, context);
state |= 1;
if (parser.getToken() === 67174411) {
destructible |= 16;
value = parseMethodDefinition(parser, context, privateScope, state, inGroup, parser.tokenStart);
} else {
throw new ParseError(parser.tokenStart, parser.currentLocation, token2 === 209005 ? 46 : token2 === 209008 || parser.getToken() === 209009 ? 45 : 47, KeywordDescTable[token2 & 255]);
}
} else if ((parser.getToken() & 134217728) === 134217728) {
destructible |= 16;
key = parseLiteral(parser, context);
state |= 1;
value = parseMethodDefinition(parser, context, privateScope, state, inGroup, parser.tokenStart);
} else if (parser.getToken() === 69271571) {
destructible |= 16;
state |= 2 | 1;
key = parseComputedPropertyName(parser, context, privateScope, inGroup);
value = parseMethodDefinition(parser, context, privateScope, state, inGroup, parser.tokenStart);
} else {
parser.report(126);
}
} else {
parser.report(30, KeywordDescTable[token & 255]);
}
destructible |= parser.destructible & 128 ? 128 : 0;
parser.destructible = destructible;
properties.push(parser.finishNode({
type: "Property",
key,
value,
kind: !(state & 768) ? "init" : state & 512 ? "set" : "get",
computed: (state & 2) > 0,
method: (state & 1) > 0,
shorthand: (state & 4) > 0
}, tokenStart));
}
destructible |= parser.destructible;
if (parser.getToken() !== 18)
break;
nextToken(parser, context);
}
consume(parser, context, 1074790415);
if (prototypeCount > 1)
destructible |= 64;
const node = parser.finishNode({
type: isPattern ? "ObjectPattern" : "ObjectExpression",
properties
}, start);
if (!skipInitializer && parser.getToken() & 4194304) {
return parseArrayOrObjectAssignmentPattern(parser, context, privateScope, destructible, inGroup, isPattern, start, node);
}
parser.destructible = destructible;
return node;
}
__name(parseObjectLiteralOrPattern, "parseObjectLiteralOrPattern");
function parseMethodFormals(parser, context, scope, privateScope, kind, type, inGroup) {
consume(parser, context, 67174411);
const params = [];
parser.flags = (parser.flags | 128) ^ 128;
if (parser.getToken() === 16) {
if (kind & 512) {
parser.report(37, "Setter", "one", "");
}
nextToken(parser, context);
return params;
}
if (kind & 256) {
parser.report(37, "Getter", "no", "s");
}
if (kind & 512 && parser.getToken() === 14) {
parser.report(38);
}
context = (context | 131072) ^ 131072;
let setterArgs = 0;
let isNonSimpleParameterList = 0;
while (parser.getToken() !== 18) {
let left = null;
const { tokenStart } = parser;
if (parser.getToken() & 143360) {
if ((context & 1) === 0) {
if ((parser.getToken() & 36864) === 36864) {
parser.flags |= 256;
}
if ((parser.getToken() & 537079808) === 537079808) {
parser.flags |= 512;
}
}
left = parseAndClassifyIdentifier(parser, context, scope, kind | 1, 0);
} else {
if (parser.getToken() === 2162700) {
left = parseObjectLiteralOrPattern(parser, context, scope, privateScope, 1, inGroup, 1, type, 0);
} else if (parser.getToken() === 69271571) {
left = parseArrayExpressionOrPattern(parser, context, scope, privateScope, 1, inGroup, 1, type, 0);
} else if (parser.getToken() === 14) {
left = parseSpreadOrRestElement(parser, context, scope, privateScope, 16, type, 0, 0, inGroup, 1);
}
isNonSimpleParameterList = 1;
if (parser.destructible & (32 | 16))
parser.report(50);
}
if (parser.getToken() === 1077936155) {
nextToken(parser, context | 32);
isNonSimpleParameterList = 1;
const right = parseExpression(parser, context, privateScope, 1, 0, parser.tokenStart);
left = parser.finishNode({
type: "AssignmentPattern",
left,
right
}, tokenStart);
}
setterArgs++;
params.push(left);
if (!consumeOpt(parser, context, 18))
break;
if (parser.getToken() === 16) {
break;
}
}
if (kind & 512 && setterArgs !== 1) {
parser.report(37, "Setter", "one", "");
}
scope?.reportScopeError();
if (isNonSimpleParameterList)
parser.flags |= 128;
consume(parser, context, 16);
return params;
}
__name(parseMethodFormals, "parseMethodFormals");
function parseComputedPropertyName(parser, context, privateScope, inGroup) {
nextToken(parser, context | 32);
const key = parseExpression(parser, (context | 131072) ^ 131072, privateScope, 1, inGroup, parser.tokenStart);
consume(parser, context, 20);
return key;
}
__name(parseComputedPropertyName, "parseComputedPropertyName");
function parseParenthesizedExpression(parser, context, privateScope, canAssign, kind, origin, start) {
parser.flags = (parser.flags | 128) ^ 128;
const parenthesesStart = parser.tokenStart;
nextToken(parser, context | 32 | 262144);
const scope = parser.createScopeIfLexical()?.createChildScope(512);
context = (context | 131072) ^ 131072;
if (consumeOpt(parser, context, 16)) {
return parseParenthesizedArrow(parser, context, scope, privateScope, [], canAssign, 0, start);
}
let destructible = 0;
parser.destructible &= -385;
let expr;
let expressions = [];
let isSequence = 0;
let isNonSimpleParameterList = 0;
let hasStrictReserved = 0;
const tokenAfterParenthesesStart = parser.tokenStart;
parser.assignable = 1;
while (parser.getToken() !== 16) {
const { tokenStart } = parser;
const token = parser.getToken();
if (token & 143360) {
scope?.addBlockName(context, parser.tokenValue, 1, 0);
if ((token & 537079808) === 537079808) {
isNonSimpleParameterList = 1;
} else if ((token & 36864) === 36864) {
hasStrictReserved = 1;
}
expr = parsePrimaryExpression(parser, context, privateScope, kind, 0, 1, 1, 1, tokenStart);
if (parser.getToken() === 16 || parser.getToken() === 18) {
if (parser.assignable & 2) {
destructible |= 16;
isNonSimpleParameterList = 1;
}
} else {
if (parser.getToken() === 1077936155) {
isNonSimpleParameterList = 1;
} else {
destructible |= 16;
}
expr = parseMemberOrUpdateExpression(parser, context, privateScope, expr, 1, 0, tokenStart);
if (parser.getToken() !== 16 && parser.getToken() !== 18) {
expr = parseAssignmentExpression(parser, context, privateScope, 1, 0, tokenStart, expr);
}
}
} else if ((token & 2097152) === 2097152) {
expr = token === 2162700 ? parseObjectLiteralOrPattern(parser, context | 262144, scope, privateScope, 0, 1, 0, kind, origin) : parseArrayExpressionOrPattern(parser, context | 262144, scope, privateScope, 0, 1, 0, kind, origin);
destructible |= parser.destructible;
isNonSimpleParameterList = 1;
parser.assignable = 2;
if (parser.getToken() !== 16 && parser.getToken() !== 18) {
if (destructible & 8)
parser.report(122);
expr = parseMemberOrUpdateExpression(parser, context, privateScope, expr, 0, 0, tokenStart);
destructible |= 16;
if (parser.getToken() !== 16 && parser.getToken() !== 18) {
expr = parseAssignmentExpression(parser, context, privateScope, 0, 0, tokenStart, expr);
}
}
} else if (token === 14) {
expr = parseSpreadOrRestElement(parser, context, scope, privateScope, 16, kind, origin, 0, 1, 0);
if (parser.destructible & 16)
parser.report(74);
isNonSimpleParameterList = 1;
if (isSequence && (parser.getToken() === 16 || parser.getToken() === 18)) {
expressions.push(expr);
}
destructible |= 8;
break;
} else {
destructible |= 16;
expr = parseExpression(parser, context, privateScope, 1, 1, tokenStart);
if (isSequence && (parser.getToken() === 16 || parser.getToken() === 18)) {
expressions.push(expr);
}
if (parser.getToken() === 18) {
if (!isSequence) {
isSequence = 1;
expressions = [expr];
}
}
if (isSequence) {
while (consumeOpt(parser, context | 32, 18)) {
expressions.push(parseExpression(parser, context, privateScope, 1, 1, parser.tokenStart));
}
parser.assignable = 2;
expr = parser.finishNode({
type: "SequenceExpression",
expressions
}, tokenAfterParenthesesStart);
}
consume(parser, context, 16);
parser.destructible = destructible;
return parser.options.preserveParens ? parser.finishNode({
type: "ParenthesizedExpression",
expression: expr
}, parenthesesStart) : expr;
}
if (isSequence && (parser.getToken() === 16 || parser.getToken() === 18)) {
expressions.push(expr);
}
if (!consumeOpt(parser, context | 32, 18))
break;
if (!isSequence) {
isSequence = 1;
expressions = [expr];
}
if (parser.getToken() === 16) {
destructible |= 8;
break;
}
}
if (isSequence) {
parser.assignable = 2;
expr = parser.finishNode({
type: "SequenceExpression",
expressions
}, tokenAfterParenthesesStart);
}
consume(parser, context, 16);
if (destructible & 16 && destructible & 8)
parser.report(151);
destructible |= parser.destructible & 256 ? 256 : 0 | parser.destructible & 128 ? 128 : 0;
if (parser.getToken() === 10) {
if (destructible & (32 | 16))
parser.report(49);
if (context & (2048 | 2) && destructible & 128)
parser.report(31);
if (context & (1 | 1024) && destructible & 256) {
parser.report(32);
}
if (isNonSimpleParameterList)
parser.flags |= 128;
if (hasStrictReserved)
parser.flags |= 256;
return parseParenthesizedArrow(parser, context, scope, privateScope, isSequence ? expressions : [expr], canAssign, 0, start);
}
if (destructible & 64) {
parser.report(63);
}
if (destructible & 8) {
parser.report(144);
}
parser.destructible = (parser.destructible | 256) ^ 256 | destructible;
return parser.options.preserveParens ? parser.finishNode({
type: "ParenthesizedExpression",
expression: expr
}, parenthesesStart) : expr;
}
__name(parseParenthesizedExpression, "parseParenthesizedExpression");
function parseIdentifierOrArrow(parser, context, privateScope) {
const { tokenStart: start } = parser;
const { tokenValue } = parser;
let isNonSimpleParameterList = 0;
let hasStrictReserved = 0;
if ((parser.getToken() & 537079808) === 537079808) {
isNonSimpleParameterList = 1;
} else if ((parser.getToken() & 36864) === 36864) {
hasStrictReserved = 1;
}
const expr = parseIdentifier(parser, context);
parser.assignable = 1;
if (parser.getToken() === 10) {
const scope = parser.options.lexical ? createArrowHeadParsingScope(parser, context, tokenValue) : void 0;
if (isNonSimpleParameterList)
parser.flags |= 128;
if (hasStrictReserved)
parser.flags |= 256;
return parseArrowFunctionExpression(parser, context, scope, privateScope, [expr], 0, start);
}
return expr;
}
__name(parseIdentifierOrArrow, "parseIdentifierOrArrow");
function parseArrowFromIdentifier(parser, context, privateScope, value, expr, inNew, canAssign, isAsync, start) {
if (!canAssign)
parser.report(57);
if (inNew)
parser.report(51);
parser.flags &= -129;
const scope = parser.options.lexical ? createArrowHeadParsingScope(parser, context, value) : void 0;
return parseArrowFunctionExpression(parser, context, scope, privateScope, [expr], isAsync, start);
}
__name(parseArrowFromIdentifier, "parseArrowFromIdentifier");
function parseParenthesizedArrow(parser, context, scope, privateScope, params, canAssign, isAsync, start) {
if (!canAssign)
parser.report(57);
for (let i = 0; i < params.length; ++i)
reinterpretToPattern(parser, params[i]);
return parseArrowFunctionExpression(parser, context, scope, privateScope, params, isAsync, start);
}
__name(parseParenthesizedArrow, "parseParenthesizedArrow");
function parseArrowFunctionExpression(parser, context, scope, privateScope, params, isAsync, start) {
if (parser.flags & 1)
parser.report(48);
consume(parser, context | 32, 10);
const modifierFlags = 1024 | 2048 | 8192 | 524288;
context = (context | modifierFlags) ^ modifierFlags | (isAsync ? 2048 : 0);
const expression = parser.getToken() !== 2162700;
let body;
scope?.reportScopeError();
if (expression) {
parser.flags = (parser.flags | 512 | 256 | 64 | 4096) ^ (512 | 256 | 64 | 4096);
body = parseExpression(parser, context, privateScope, 1, 0, parser.tokenStart);
} else {
scope = scope?.createChildScope(64);
const modifierFlags2 = 4 | 131072 | 8;
body = parseFunctionBody(parser, (context | modifierFlags2) ^ modifierFlags2 | 4096, scope, privateScope, 16, void 0, void 0);
switch (parser.getToken()) {
case 69271571:
if ((parser.flags & 1) === 0) {
parser.report(116);
}
break;
case 67108877:
case 67174409:
case 22:
parser.report(117);
case 67174411:
if ((parser.flags & 1) === 0) {
parser.report(116);
}
parser.flags |= 1024;
break;
}
if ((parser.getToken() & 8388608) === 8388608 && (parser.flags & 1) === 0)
parser.report(30, KeywordDescTable[parser.getToken() & 255]);
if ((parser.getToken() & 33619968) === 33619968)
parser.report(125);
}
parser.assignable = 2;
return parser.finishNode({
type: "ArrowFunctionExpression",
params,
body,
async: isAsync === 1,
expression,
generator: false
}, start);
}
__name(parseArrowFunctionExpression, "parseArrowFunctionExpression");
function parseFormalParametersOrFormalList(parser, context, scope, privateScope, inGroup, kind) {
consume(parser, context, 67174411);
parser.flags = (parser.flags | 128) ^ 128;
const params = [];
if (consumeOpt(parser, context, 16))
return params;
context = (context | 131072) ^ 131072;
let isNonSimpleParameterList = 0;
while (parser.getToken() !== 18) {
let left;
const { tokenStart } = parser;
const token = parser.getToken();
if (token & 143360) {
if ((context & 1) === 0) {
if ((token & 36864) === 36864) {
parser.flags |= 256;
}
if ((token & 537079808) === 537079808) {
parser.flags |= 512;
}
}
left = parseAndClassifyIdentifier(parser, context, scope, kind | 1, 0);
} else {
if (token === 2162700) {
left = parseObjectLiteralOrPattern(parser, context, scope, privateScope, 1, inGroup, 1, kind, 0);
} else if (token === 69271571) {
left = parseArrayExpressionOrPattern(parser, context, scope, privateScope, 1, inGroup, 1, kind, 0);
} else if (token === 14) {
left = parseSpreadOrRestElement(parser, context, scope, privateScope, 16, kind, 0, 0, inGroup, 1);
} else {
parser.report(30, KeywordDescTable[token & 255]);
}
isNonSimpleParameterList = 1;
if (parser.destructible & (32 | 16)) {
parser.report(50);
}
}
if (parser.getToken() === 1077936155) {
nextToken(parser, context | 32);
isNonSimpleParameterList = 1;
const right = parseExpression(parser, context, privateScope, 1, inGroup, parser.tokenStart);
left = parser.finishNode({
type: "AssignmentPattern",
left,
right
}, tokenStart);
}
params.push(left);
if (!consumeOpt(parser, context, 18))
break;
if (parser.getToken() === 16) {
break;
}
}
if (isNonSimpleParameterList)
parser.flags |= 128;
if (isNonSimpleParameterList || context & 1) {
scope?.reportScopeError();
}
consume(parser, context, 16);
return params;
}
__name(parseFormalParametersOrFormalList, "parseFormalParametersOrFormalList");
function parseMemberExpressionNoCall(parser, context, privateScope, expr, inGroup, start) {
const token = parser.getToken();
if (token & 67108864) {
if (token === 67108877) {
nextToken(parser, context | 262144);
parser.assignable = 1;
const property = parsePropertyOrPrivatePropertyName(parser, context, privateScope);
return parseMemberExpressionNoCall(parser, context, privateScope, parser.finishNode({
type: "MemberExpression",
object: expr,
computed: false,
property,
optional: false
}, start), 0, start);
} else if (token === 69271571) {
nextToken(parser, context | 32);
const { tokenStart } = parser;
const property = parseExpressions(parser, context, privateScope, inGroup, 1, tokenStart);
consume(parser, context, 20);
parser.assignable = 1;
return parseMemberExpressionNoCall(parser, context, privateScope, parser.finishNode({
type: "MemberExpression",
object: expr,
computed: true,
property,
optional: false
}, start), 0, start);
} else if (token === 67174408 || token === 67174409) {
parser.assignable = 2;
return parseMemberExpressionNoCall(parser, context, privateScope, parser.finishNode({
type: "TaggedTemplateExpression",
tag: expr,
quasi: parser.getToken() === 67174408 ? parseTemplate(parser, context | 64, privateScope) : parseTemplateLiteral(parser, context | 64)
}, start), 0, start);
}
}
return expr;
}
__name(parseMemberExpressionNoCall, "parseMemberExpressionNoCall");
function parseNewExpression(parser, context, privateScope, inGroup) {
const { tokenStart: start } = parser;
const id = parseIdentifier(parser, context | 32);
const { tokenStart } = parser;
if (consumeOpt(parser, context, 67108877)) {
if (context & 65536 && parser.getToken() === 209029) {
parser.assignable = 2;
return parseMetaProperty(parser, context, id, start);
}
parser.report(94);
}
parser.assignable = 2;
if ((parser.getToken() & 16842752) === 16842752) {
parser.report(65, KeywordDescTable[parser.getToken() & 255]);
}
const expr = parsePrimaryExpression(parser, context, privateScope, 2, 1, 0, inGroup, 1, tokenStart);
context = (context | 131072) ^ 131072;
if (parser.getToken() === 67108990)
parser.report(168);
const callee = parseMemberExpressionNoCall(parser, context, privateScope, expr, inGroup, tokenStart);
parser.assignable = 2;
return parser.finishNode({
type: "NewExpression",
callee,
arguments: parser.getToken() === 67174411 ? parseArguments(parser, context, privateScope, inGroup) : []
}, start);
}
__name(parseNewExpression, "parseNewExpression");
function parseMetaProperty(parser, context, meta, start) {
const property = parseIdentifier(parser, context);
return parser.finishNode({
type: "MetaProperty",
meta,
property
}, start);
}
__name(parseMetaProperty, "parseMetaProperty");
function parseAsyncArrowAfterIdent(parser, context, privateScope, canAssign, start) {
if (parser.getToken() === 209006)
parser.report(31);
if (context & (1 | 1024) && parser.getToken() === 241771) {
parser.report(32);
}
classifyIdentifier(parser, context, parser.getToken());
if ((parser.getToken() & 36864) === 36864) {
parser.flags |= 256;
}
return parseArrowFromIdentifier(parser, context & -524289 | 2048, privateScope, parser.tokenValue, parseIdentifier(parser, context), 0, canAssign, 1, start);
}
__name(parseAsyncArrowAfterIdent, "parseAsyncArrowAfterIdent");
function parseAsyncArrowOrCallExpression(parser, context, privateScope, callee, canAssign, kind, origin, flags, start) {
nextToken(parser, context | 32);
const scope = parser.createScopeIfLexical()?.createChildScope(512);
context = (context | 131072) ^ 131072;
if (consumeOpt(parser, context, 16)) {
if (parser.getToken() === 10) {
if (flags & 1)
parser.report(48);
return parseParenthesizedArrow(parser, context, scope, privateScope, [], canAssign, 1, start);
}
return parser.finishNode({
type: "CallExpression",
callee,
arguments: [],
optional: false
}, start);
}
let destructible = 0;
let expr = null;
let isNonSimpleParameterList = 0;
parser.destructible = (parser.destructible | 256 | 128) ^ (256 | 128);
const params = [];
while (parser.getToken() !== 16) {
const { tokenStart } = parser;
const token = parser.getToken();
if (token & 143360) {
scope?.addBlockName(context, parser.tokenValue, kind, 0);
if ((token & 537079808) === 537079808) {
parser.flags |= 512;
} else if ((token & 36864) === 36864) {
parser.flags |= 256;
}
expr = parsePrimaryExpression(parser, context, privateScope, kind, 0, 1, 1, 1, tokenStart);
if (parser.getToken() === 16 || parser.getToken() === 18) {
if (parser.assignable & 2) {
destructible |= 16;
isNonSimpleParameterList = 1;
}
} else {
if (parser.getToken() === 1077936155) {
isNonSimpleParameterList = 1;
} else {
destructible |= 16;
}
expr = parseMemberOrUpdateExpression(parser, context, privateScope, expr, 1, 0, tokenStart);
if (parser.getToken() !== 16 && parser.getToken() !== 18) {
expr = parseAssignmentExpression(parser, context, privateScope, 1, 0, tokenStart, expr);
}
}
} else if (token & 2097152) {
expr = token === 2162700 ? parseObjectLiteralOrPattern(parser, context, scope, privateScope, 0, 1, 0, kind, origin) : parseArrayExpressionOrPattern(parser, context, scope, privateScope, 0, 1, 0, kind, origin);
destructible |= parser.destructible;
isNonSimpleParameterList = 1;
if (parser.getToken() !== 16 && parser.getToken() !== 18) {
if (destructible & 8)
parser.report(122);
expr = parseMemberOrUpdateExpression(parser, context, privateScope, expr, 0, 0, tokenStart);
destructible |= 16;
if ((parser.getToken() & 8388608) === 8388608) {
expr = parseBinaryExpression(parser, context, privateScope, 1, start, 4, token, expr);
}
if (consumeOpt(parser, context | 32, 22)) {
expr = parseConditionalExpression(parser, context, privateScope, expr, start);
}
}
} else if (token === 14) {
expr = parseSpreadOrRestElement(parser, context, scope, privateScope, 16, kind, origin, 1, 1, 0);
destructible |= (parser.getToken() === 16 ? 0 : 16) | parser.destructible;
isNonSimpleParameterList = 1;
} else {
expr = parseExpression(parser, context, privateScope, 1, 0, tokenStart);
destructible = parser.assignable;
params.push(expr);
while (consumeOpt(parser, context | 32, 18)) {
params.push(parseExpression(parser, context, privateScope, 1, 0, tokenStart));
}
destructible |= parser.assignable;
consume(parser, context, 16);
parser.destructible = destructible | 16;
parser.assignable = 2;
return parser.finishNode({
type: "CallExpression",
callee,
arguments: params,
optional: false
}, start);
}
params.push(expr);
if (!consumeOpt(parser, context | 32, 18))
break;
}
consume(parser, context, 16);
destructible |= parser.destructible & 256 ? 256 : 0 | parser.destructible & 128 ? 128 : 0;
if (parser.getToken() === 10) {
if (destructible & (32 | 16))
parser.report(27);
if (parser.flags & 1 || flags & 1)
parser.report(48);
if (destructible & 128)
parser.report(31);
if (context & (1 | 1024) && destructible & 256)
parser.report(32);
if (isNonSimpleParameterList)
parser.flags |= 128;
return parseParenthesizedArrow(parser, context | 2048, scope, privateScope, params, canAssign, 1, start);
}
if (destructible & 64) {
parser.report(63);
}
if (destructible & 8) {
parser.report(62);
}
parser.assignable = 2;
return parser.finishNode({
type: "CallExpression",
callee,
arguments: params,
optional: false
}, start);
}
__name(parseAsyncArrowOrCallExpression, "parseAsyncArrowOrCallExpression");
function parseRegExpLiteral(parser, context) {
const { tokenRaw, tokenRegExp, tokenValue, tokenStart } = parser;
nextToken(parser, context);
parser.assignable = 2;
const node = {
type: "Literal",
value: tokenValue,
regex: tokenRegExp
};
if (parser.options.raw) {
node.raw = tokenRaw;
}
return parser.finishNode(node, tokenStart);
}
__name(parseRegExpLiteral, "parseRegExpLiteral");
function parseClassDeclaration(parser, context, scope, privateScope, flags) {
let start;
let decorators;
if (parser.leadingDecorators.decorators.length) {
if (parser.getToken() === 132) {
parser.report(30, "@");
}
start = parser.leadingDecorators.start;
decorators = [...parser.leadingDecorators.decorators];
parser.leadingDecorators.decorators.length = 0;
} else {
start = parser.tokenStart;
decorators = parseDecorators(parser, context, privateScope);
}
context = (context | 16384 | 1) ^ 16384;
nextToken(parser, context);
let id = null;
let superClass = null;
const { tokenValue } = parser;
if (parser.getToken() & 4096 && parser.getToken() !== 20565) {
if (isStrictReservedWord(parser, context, parser.getToken())) {
parser.report(118);
}
if ((parser.getToken() & 537079808) === 537079808) {
parser.report(119);
}
if (scope) {
scope.addBlockName(context, tokenValue, 32, 0);
if (flags) {
if (flags & 2) {
parser.declareUnboundVariable(tokenValue);
}
}
}
id = parseIdentifier(parser, context);
} else {
if ((flags & 1) === 0)
parser.report(39, "Class");
}
let inheritedContext = context;
if (consumeOpt(parser, context | 32, 20565)) {
superClass = parseLeftHandSideExpression(parser, context, privateScope, 0, 0, 0);
inheritedContext |= 512;
} else {
inheritedContext = (inheritedContext | 512) ^ 512;
}
const body = parseClassBody(parser, inheritedContext, context, scope, privateScope, 2, 8, 0);
return parser.finishNode({
type: "ClassDeclaration",
id,
superClass,
body,
...parser.options.next ? { decorators } : null
}, start);
}
__name(parseClassDeclaration, "parseClassDeclaration");
function parseClassExpression(parser, context, privateScope, inGroup, start) {
let id = null;
let superClass = null;
const decorators = parseDecorators(parser, context, privateScope);
context = (context | 1 | 16384) ^ 16384;
nextToken(parser, context);
if (parser.getToken() & 4096 && parser.getToken() !== 20565) {
if (isStrictReservedWord(parser, context, parser.getToken()))
parser.report(118);
if ((parser.getToken() & 537079808) === 537079808) {
parser.report(119);
}
id = parseIdentifier(parser, context);
}
let inheritedContext = context;
if (consumeOpt(parser, context | 32, 20565)) {
superClass = parseLeftHandSideExpression(parser, context, privateScope, 0, inGroup, 0);
inheritedContext |= 512;
} else {
inheritedContext = (inheritedContext | 512) ^ 512;
}
const body = parseClassBody(parser, inheritedContext, context, void 0, privateScope, 2, 0, inGroup);
parser.assignable = 2;
return parser.finishNode({
type: "ClassExpression",
id,
superClass,
body,
...parser.options.next ? { decorators } : null
}, start);
}
__name(parseClassExpression, "parseClassExpression");
function parseDecorators(parser, context, privateScope) {
const list = [];
if (parser.options.next) {
while (parser.getToken() === 132) {
list.push(parseDecoratorList(parser, context, privateScope));
}
}
return list;
}
__name(parseDecorators, "parseDecorators");
function parseDecoratorList(parser, context, privateScope) {
const start = parser.tokenStart;
nextToken(parser, context | 32);
let expression = parsePrimaryExpression(parser, context, privateScope, 2, 0, 1, 0, 1, start);
expression = parseMemberOrUpdateExpression(parser, context, privateScope, expression, 0, 0, parser.tokenStart);
return parser.finishNode({
type: "Decorator",
expression
}, start);
}
__name(parseDecoratorList, "parseDecoratorList");
function parseClassBody(parser, context, inheritedContext, scope, parentScope, kind, origin, inGroup) {
const { tokenStart } = parser;
const privateScope = parser.createPrivateScopeIfLexical(parentScope);
consume(parser, context | 32, 2162700);
const modifierFlags = 131072 | 524288;
context = (context | modifierFlags) ^ modifierFlags;
const hasConstr = parser.flags & 32;
parser.flags = (parser.flags | 32) ^ 32;
const body = [];
while (parser.getToken() !== 1074790415) {
const decoratorStart = parser.tokenStart;
const decorators = parseDecorators(parser, context, privateScope);
if (decorators.length > 0 && parser.tokenValue === "constructor") {
parser.report(109);
}
if (parser.getToken() === 1074790415)
parser.report(108);
if (consumeOpt(parser, context, 1074790417)) {
if (decorators.length > 0)
parser.report(120);
continue;
}
body.push(parseClassElementList(parser, context, scope, privateScope, inheritedContext, kind, decorators, 0, inGroup, decorators.length > 0 ? decoratorStart : parser.tokenStart));
}
consume(parser, origin & 8 ? context | 32 : context, 1074790415);
privateScope?.validatePrivateIdentifierRefs();
parser.flags = parser.flags & -33 | hasConstr;
return parser.finishNode({
type: "ClassBody",
body
}, tokenStart);
}
__name(parseClassBody, "parseClassBody");
function parseClassElementList(parser, context, scope, privateScope, inheritedContext, type, decorators, isStatic, inGroup, start) {
let kind = isStatic ? 32 : 0;
let key = null;
const token = parser.getToken();
if (token & (143360 | 36864) || token === -2147483528) {
key = parseIdentifier(parser, context);
switch (token) {
case 36970:
if (!isStatic && parser.getToken() !== 67174411 && (parser.getToken() & 1048576) !== 1048576 && parser.getToken() !== 1077936155) {
return parseClassElementList(parser, context, scope, privateScope, inheritedContext, type, decorators, 1, inGroup, start);
}
break;
case 209005:
if (parser.getToken() !== 67174411 && (parser.flags & 1) === 0) {
if ((parser.getToken() & 1073741824) === 1073741824) {
return parsePropertyDefinition(parser, context, privateScope, key, kind, decorators, start);
}
kind |= 16 | (optionalBit(parser, context, 8391476) ? 8 : 0);
}
break;
case 209008:
if (parser.getToken() !== 67174411) {
if ((parser.getToken() & 1073741824) === 1073741824) {
return parsePropertyDefinition(parser, context, privateScope, key, kind, decorators, start);
}
kind |= 256;
}
break;
case 209009:
if (parser.getToken() !== 67174411) {
if ((parser.getToken() & 1073741824) === 1073741824) {
return parsePropertyDefinition(parser, context, privateScope, key, kind, decorators, start);
}
kind |= 512;
}
break;
case 12402:
if (parser.getToken() !== 67174411 && (parser.flags & 1) === 0) {
if ((parser.getToken() & 1073741824) === 1073741824) {
return parsePropertyDefinition(parser, context, privateScope, key, kind, decorators, start);
}
if (parser.options.next)
kind |= 1024;
}
break;
}
} else if (token === 69271571) {
kind |= 2;
key = parseComputedPropertyName(parser, inheritedContext, privateScope, inGroup);
} else if ((token & 134217728) === 134217728) {
key = parseLiteral(parser, context);
} else if (token === 8391476) {
kind |= 8;
nextToken(parser, context);
} else if (parser.getToken() === 130) {
kind |= 8192;
key = parsePrivateIdentifier(parser, context | 16, privateScope, 768);
} else if ((parser.getToken() & 1073741824) === 1073741824) {
kind |= 128;
} else if (isStatic && token === 2162700) {
return parseStaticBlock(parser, context | 16, scope, privateScope, start);
} else if (token === -2147483527) {
key = parseIdentifier(parser, context);
if (parser.getToken() !== 67174411)
parser.report(30, KeywordDescTable[parser.getToken() & 255]);
} else {
parser.report(30, KeywordDescTable[parser.getToken() & 255]);
}
if (kind & (8 | 16 | 768 | 1024)) {
if (parser.getToken() & 143360 || parser.getToken() === -2147483528 || parser.getToken() === -2147483527) {
key = parseIdentifier(parser, context);
} else if ((parser.getToken() & 134217728) === 134217728) {
key = parseLiteral(parser, context);
} else if (parser.getToken() === 69271571) {
kind |= 2;
key = parseComputedPropertyName(parser, context, privateScope, 0);
} else if (parser.getToken() === 130) {
kind |= 8192;
key = parsePrivateIdentifier(parser, context, privateScope, kind);
} else
parser.report(135);
}
if ((kind & 2) === 0) {
if (parser.tokenValue === "constructor") {
if ((parser.getToken() & 1073741824) === 1073741824) {
parser.report(129);
} else if ((kind & 32) === 0 && parser.getToken() === 67174411) {
if (kind & (768 | 16 | 128 | 8)) {
parser.report(53, "accessor");
} else if ((context & 512) === 0) {
if (parser.flags & 32)
parser.report(54);
else
parser.flags |= 32;
}
}
kind |= 64;
} else if ((kind & 8192) === 0 && kind & 32 && parser.tokenValue === "prototype") {
parser.report(52);
}
}
if (kind & 1024 || parser.getToken() !== 67174411 && (kind & 768) === 0) {
return parsePropertyDefinition(parser, context, privateScope, key, kind, decorators, start);
}
const value = parseMethodDefinition(parser, context | 16, privateScope, kind, inGroup, parser.tokenStart);
return parser.finishNode({
type: "MethodDefinition",
kind: (kind & 32) === 0 && kind & 64 ? "constructor" : kind & 256 ? "get" : kind & 512 ? "set" : "method",
static: (kind & 32) > 0,
computed: (kind & 2) > 0,
key,
value,
...parser.options.next ? { decorators } : null
}, start);
}
__name(parseClassElementList, "parseClassElementList");
function parsePrivateIdentifier(parser, context, privateScope, kind) {
const { tokenStart } = parser;
nextToken(parser, context);
const { tokenValue } = parser;
if (tokenValue === "constructor")
parser.report(128);
if (parser.options.lexical) {
if (!privateScope)
parser.report(4, tokenValue);
if (kind) {
privateScope.addPrivateIdentifier(tokenValue, kind);
} else {
privateScope.addPrivateIdentifierRef(tokenValue);
}
}
nextToken(parser, context);
return parser.finishNode({
type: "PrivateIdentifier",
name: tokenValue
}, tokenStart);
}
__name(parsePrivateIdentifier, "parsePrivateIdentifier");
function parsePropertyDefinition(parser, context, privateScope, key, state, decorators, start) {
let value = null;
if (state & 8)
parser.report(0);
if (parser.getToken() === 1077936155) {
nextToken(parser, context | 32);
const { tokenStart } = parser;
if (parser.getToken() === 537079927)
parser.report(119);
const modifierFlags = 1024 | 2048 | 8192 | ((state & 64) === 0 ? 512 | 16384 : 0);
context = (context | modifierFlags) ^ modifierFlags | (state & 8 ? 1024 : 0) | (state & 16 ? 2048 : 0) | (state & 64 ? 16384 : 0) | 256 | 65536;
value = parsePrimaryExpression(parser, context | 16, privateScope, 2, 0, 1, 0, 1, tokenStart);
if ((parser.getToken() & 1073741824) !== 1073741824 || (parser.getToken() & 4194304) === 4194304) {
value = parseMemberOrUpdateExpression(parser, context | 16, privateScope, value, 0, 0, tokenStart);
value = parseAssignmentExpression(parser, context | 16, privateScope, 0, 0, tokenStart, value);
}
}
matchOrInsertSemicolon(parser, context);
return parser.finishNode({
type: state & 1024 ? "AccessorProperty" : "PropertyDefinition",
key,
value,
static: (state & 32) > 0,
computed: (state & 2) > 0,
...parser.options.next ? { decorators } : null
}, start);
}
__name(parsePropertyDefinition, "parsePropertyDefinition");
function parseBindingPattern(parser, context, scope, privateScope, type, origin) {
if (parser.getToken() & 143360 || (context & 1) === 0 && parser.getToken() === -2147483527)
return parseAndClassifyIdentifier(parser, context, scope, type, origin);
if ((parser.getToken() & 2097152) !== 2097152)
parser.report(30, KeywordDescTable[parser.getToken() & 255]);
const left = parser.getToken() === 69271571 ? parseArrayExpressionOrPattern(parser, context, scope, privateScope, 1, 0, 1, type, origin) : parseObjectLiteralOrPattern(parser, context, scope, privateScope, 1, 0, 1, type, origin);
if (parser.destructible & 16)
parser.report(50);
if (parser.destructible & 32)
parser.report(50);
return left;
}
__name(parseBindingPattern, "parseBindingPattern");
function parseAndClassifyIdentifier(parser, context, scope, kind, origin) {
const token = parser.getToken();
if (context & 1) {
if ((token & 537079808) === 537079808) {
parser.report(119);
} else if ((token & 36864) === 36864 || token === -2147483527) {
parser.report(118);
}
}
if ((token & 20480) === 20480) {
parser.report(102);
}
if (token === 241771) {
if (context & 1024)
parser.report(32);
if (context & 2)
parser.report(111);
}
if ((token & 255) === (241737 & 255)) {
if (kind & (8 | 16))
parser.report(100);
}
if (token === 209006) {
if (context & 2048)
parser.report(176);
if (context & 2)
parser.report(110);
}
const { tokenValue, tokenStart: start } = parser;
nextToken(parser, context);
scope?.addVarOrBlock(context, tokenValue, kind, origin);
return parser.finishNode({
type: "Identifier",
name: tokenValue
}, start);
}
__name(parseAndClassifyIdentifier, "parseAndClassifyIdentifier");
function parseJSXRootElementOrFragment(parser, context, privateScope, inJSXChild, start) {
if (!inJSXChild)
consume(parser, context, 8456256);
if (parser.getToken() === 8390721) {
const openingFragment = parseJSXOpeningFragment(parser, start);
const [children2, closingFragment] = parseJSXChildrenAndClosingFragment(parser, context, privateScope, inJSXChild);
return parser.finishNode({
type: "JSXFragment",
openingFragment,
children: children2,
closingFragment
}, start);
}
if (parser.getToken() === 8457014)
parser.report(30, KeywordDescTable[parser.getToken() & 255]);
let closingElement = null;
let children = [];
const openingElement = parseJSXOpeningElementOrSelfCloseElement(parser, context, privateScope, inJSXChild, start);
if (!openingElement.selfClosing) {
[children, closingElement] = parseJSXChildrenAndClosingElement(parser, context, privateScope, inJSXChild);
const close = isEqualTagName(closingElement.name);
if (isEqualTagName(openingElement.name) !== close)
parser.report(155, close);
}
return parser.finishNode({
type: "JSXElement",
children,
openingElement,
closingElement
}, start);
}
__name(parseJSXRootElementOrFragment, "parseJSXRootElementOrFragment");
function parseJSXOpeningFragment(parser, start) {
nextJSXToken(parser);
return parser.finishNode({
type: "JSXOpeningFragment"
}, start);
}
__name(parseJSXOpeningFragment, "parseJSXOpeningFragment");
function parseJSXClosingElement(parser, context, inJSXChild, start) {
consume(parser, context, 8457014);
const name = parseJSXElementName(parser, context);
if (parser.getToken() !== 8390721) {
parser.report(25, KeywordDescTable[8390721 & 255]);
}
if (inJSXChild) {
nextJSXToken(parser);
} else {
nextToken(parser, context);
}
return parser.finishNode({
type: "JSXClosingElement",
name
}, start);
}
__name(parseJSXClosingElement, "parseJSXClosingElement");
function parseJSXClosingFragment(parser, context, inJSXChild, start) {
consume(parser, context, 8457014);
if (parser.getToken() !== 8390721) {
parser.report(25, KeywordDescTable[8390721 & 255]);
}
if (inJSXChild) {
nextJSXToken(parser);
} else {
nextToken(parser, context);
}
return parser.finishNode({
type: "JSXClosingFragment"
}, start);
}
__name(parseJSXClosingFragment, "parseJSXClosingFragment");
function parseJSXChildrenAndClosingElement(parser, context, privateScope, inJSXChild) {
const children = [];
while (true) {
const child = parseJSXChildOrClosingElement(parser, context, privateScope, inJSXChild);
if (child.type === "JSXClosingElement") {
return [children, child];
}
children.push(child);
}
}
__name(parseJSXChildrenAndClosingElement, "parseJSXChildrenAndClosingElement");
function parseJSXChildrenAndClosingFragment(parser, context, privateScope, inJSXChild) {
const children = [];
while (true) {
const child = parseJSXChildOrClosingFragment(parser, context, privateScope, inJSXChild);
if (child.type === "JSXClosingFragment") {
return [children, child];
}
children.push(child);
}
}
__name(parseJSXChildrenAndClosingFragment, "parseJSXChildrenAndClosingFragment");
function parseJSXChildOrClosingElement(parser, context, privateScope, inJSXChild) {
if (parser.getToken() === 137)
return parseJSXText(parser, context);
if (parser.getToken() === 2162700)
return parseJSXExpressionContainer(parser, context, privateScope, 1, 0);
if (parser.getToken() === 8456256) {
const { tokenStart } = parser;
nextToken(parser, context);
if (parser.getToken() === 8457014)
return parseJSXClosingElement(parser, context, inJSXChild, tokenStart);
return parseJSXRootElementOrFragment(parser, context, privateScope, 1, tokenStart);
}
parser.report(0);
}
__name(parseJSXChildOrClosingElement, "parseJSXChildOrClosingElement");
function parseJSXChildOrClosingFragment(parser, context, privateScope, inJSXChild) {
if (parser.getToken() === 137)
return parseJSXText(parser, context);
if (parser.getToken() === 2162700)
return parseJSXExpressionContainer(parser, context, privateScope, 1, 0);
if (parser.getToken() === 8456256) {
const { tokenStart } = parser;
nextToken(parser, context);
if (parser.getToken() === 8457014)
return parseJSXClosingFragment(parser, context, inJSXChild, tokenStart);
return parseJSXRootElementOrFragment(parser, context, privateScope, 1, tokenStart);
}
parser.report(0);
}
__name(parseJSXChildOrClosingFragment, "parseJSXChildOrClosingFragment");
function parseJSXText(parser, context) {
const start = parser.tokenStart;
nextToken(parser, context);
const node = {
type: "JSXText",
value: parser.tokenValue
};
if (parser.options.raw) {
node.raw = parser.tokenRaw;
}
return parser.finishNode(node, start);
}
__name(parseJSXText, "parseJSXText");
function parseJSXOpeningElementOrSelfCloseElement(parser, context, privateScope, inJSXChild, start) {
if ((parser.getToken() & 143360) !== 143360 && (parser.getToken() & 4096) !== 4096)
parser.report(0);
const tagName = parseJSXElementName(parser, context);
const attributes = parseJSXAttributes(parser, context, privateScope);
const selfClosing = parser.getToken() === 8457014;
if (selfClosing)
consume(parser, context, 8457014);
if (parser.getToken() !== 8390721) {
parser.report(25, KeywordDescTable[8390721 & 255]);
}
if (inJSXChild || !selfClosing) {
nextJSXToken(parser);
} else {
nextToken(parser, context);
}
return parser.finishNode({
type: "JSXOpeningElement",
name: tagName,
attributes,
selfClosing
}, start);
}
__name(parseJSXOpeningElementOrSelfCloseElement, "parseJSXOpeningElementOrSelfCloseElement");
function parseJSXElementName(parser, context) {
const { tokenStart } = parser;
rescanJSXIdentifier(parser);
let key = parseJSXIdentifier(parser, context);
if (parser.getToken() === 21)
return parseJSXNamespacedName(parser, context, key, tokenStart);
while (consumeOpt(parser, context, 67108877)) {
rescanJSXIdentifier(parser);
key = parseJSXMemberExpression(parser, context, key, tokenStart);
}
return key;
}
__name(parseJSXElementName, "parseJSXElementName");
function parseJSXMemberExpression(parser, context, object, start) {
const property = parseJSXIdentifier(parser, context);
return parser.finishNode({
type: "JSXMemberExpression",
object,
property
}, start);
}
__name(parseJSXMemberExpression, "parseJSXMemberExpression");
function parseJSXAttributes(parser, context, privateScope) {
const attributes = [];
while (parser.getToken() !== 8457014 && parser.getToken() !== 8390721 && parser.getToken() !== 1048576) {
attributes.push(parseJsxAttribute(parser, context, privateScope));
}
return attributes;
}
__name(parseJSXAttributes, "parseJSXAttributes");
function parseJSXSpreadAttribute(parser, context, privateScope) {
const start = parser.tokenStart;
nextToken(parser, context);
consume(parser, context, 14);
const expression = parseExpression(parser, context, privateScope, 1, 0, parser.tokenStart);
consume(parser, context, 1074790415);
return parser.finishNode({
type: "JSXSpreadAttribute",
argument: expression
}, start);
}
__name(parseJSXSpreadAttribute, "parseJSXSpreadAttribute");
function parseJsxAttribute(parser, context, privateScope) {
const { tokenStart } = parser;
if (parser.getToken() === 2162700)
return parseJSXSpreadAttribute(parser, context, privateScope);
rescanJSXIdentifier(parser);
let value = null;
let name = parseJSXIdentifier(parser, context);
if (parser.getToken() === 21) {
name = parseJSXNamespacedName(parser, context, name, tokenStart);
}
if (parser.getToken() === 1077936155) {
const token = scanJSXAttributeValue(parser, context);
switch (token) {
case 134283267:
value = parseLiteral(parser, context);
break;
case 8456256:
value = parseJSXRootElementOrFragment(parser, context, privateScope, 0, parser.tokenStart);
break;
case 2162700:
value = parseJSXExpressionContainer(parser, context, privateScope, 0, 1);
break;
default:
parser.report(154);
}
}
return parser.finishNode({
type: "JSXAttribute",
value,
name
}, tokenStart);
}
__name(parseJsxAttribute, "parseJsxAttribute");
function parseJSXNamespacedName(parser, context, namespace, start) {
consume(parser, context, 21);
const name = parseJSXIdentifier(parser, context);
return parser.finishNode({
type: "JSXNamespacedName",
namespace,
name
}, start);
}
__name(parseJSXNamespacedName, "parseJSXNamespacedName");
function parseJSXExpressionContainer(parser, context, privateScope, inJSXChild, isAttr) {
const { tokenStart: start } = parser;
nextToken(parser, context | 32);
const { tokenStart } = parser;
if (parser.getToken() === 14)
return parseJSXSpreadChild(parser, context, privateScope, start);
let expression = null;
if (parser.getToken() === 1074790415) {
if (isAttr)
parser.report(157);
expression = parseJSXEmptyExpression(parser, {
index: parser.startIndex,
line: parser.startLine,
column: parser.startColumn
});
} else {
expression = parseExpression(parser, context, privateScope, 1, 0, tokenStart);
}
if (parser.getToken() !== 1074790415) {
parser.report(25, KeywordDescTable[1074790415 & 255]);
}
if (inJSXChild) {
nextJSXToken(parser);
} else {
nextToken(parser, context);
}
return parser.finishNode({
type: "JSXExpressionContainer",
expression
}, start);
}
__name(parseJSXExpressionContainer, "parseJSXExpressionContainer");
function parseJSXSpreadChild(parser, context, privateScope, start) {
consume(parser, context, 14);
const expression = parseExpression(parser, context, privateScope, 1, 0, parser.tokenStart);
consume(parser, context, 1074790415);
return parser.finishNode({
type: "JSXSpreadChild",
expression
}, start);
}
__name(parseJSXSpreadChild, "parseJSXSpreadChild");
function parseJSXEmptyExpression(parser, start) {
return parser.finishNode({
type: "JSXEmptyExpression"
}, start, parser.tokenStart);
}
__name(parseJSXEmptyExpression, "parseJSXEmptyExpression");
function parseJSXIdentifier(parser, context) {
const start = parser.tokenStart;
if (!(parser.getToken() & 143360)) {
parser.report(30, KeywordDescTable[parser.getToken() & 255]);
}
const { tokenValue } = parser;
nextToken(parser, context);
return parser.finishNode({
type: "JSXIdentifier",
name: tokenValue
}, start);
}
__name(parseJSXIdentifier, "parseJSXIdentifier");
function parseScript(source, options) {
return parseSource(source, options);
}
__name(parseScript, "parseScript");
// dist/src/utils/javascript/JsAnalyzer.js
var _JsAnalyzer = class _JsAnalyzer {
/**
* Creates a new instance over the provided source.
* @param code JavaScript source to parse and inspect.
* @param options Optional traversal settings.
*/
constructor(code, options = {}) {
__publicField(this, "source");
__publicField(this, "programAst");
__publicField(this, "hasExtractions");
__publicField(this, "extractionStates");
__publicField(this, "dependentsTracker", /* @__PURE__ */ new Map());
__publicField(this, "pendingPrototypeAliasBinding", null);
__publicField(this, "iifeParamName", null);
__publicField(this, "declaredVariables", /* @__PURE__ */ new Map());
this.source = code;
const extractionConfigs = options.extractions ? Array.isArray(options.extractions) ? options.extractions : [options.extractions] : [];
this.extractionStates = extractionConfigs.map((config) => ({
config: { collectDependencies: true, stopWhenReady: true, ...config },
dependencies: /* @__PURE__ */ new Set(),
dependents: /* @__PURE__ */ new Set(),
ready: false
}));
this.hasExtractions = this.extractionStates.length > 0;
this.programAst = parseScript(code, {
ranges: true,
loc: false,
module: false
});
this.analyzeAst();
}
/**
* Walks the AST to collect declarations and resolve initial targets.
*/
analyzeAst() {
let iifeBody;
for (const statement of this.programAst.body) {
if (statement.type === "ExpressionStatement" && statement.expression.type === "CallExpression") {
const callExpr = statement.expression;
if (callExpr.callee.type === "FunctionExpression") {
const funcExpr = callExpr.callee;
const firstParam = funcExpr.params.length > 0 ? funcExpr.params[0] : null;
if (!this.iifeParamName && firstParam?.type === "Identifier") {
this.iifeParamName = firstParam.name;
}
if (funcExpr.body?.type === "BlockStatement") {
iifeBody = funcExpr.body;
break;
}
}
}
}
if (!iifeBody)
return;
for (const currentNode of iifeBody.body) {
switch (currentNode.type) {
case "ExpressionStatement": {
const assignment = currentNode.expression;
if (assignment.type !== "AssignmentExpression")
continue;
const left = assignment.left;
const right = assignment.right;
if (right.type === "MemberExpression" && !right.computed && right.property.type === "Identifier" && right.property.name === "prototype") {
const prototypeSourceExpr = memberToString(right, this.source);
const aliasTargetExpr = left.type === "Identifier" ? left.name : memberToString(left, this.source);
if (prototypeSourceExpr) {
const prototypeOwnerMeta = this.declaredVariables.get(prototypeSourceExpr.replace(".prototype", ""));
if (aliasTargetExpr && prototypeOwnerMeta) {
const aliasedPrototypeMembers = /* @__PURE__ */ new Set();
const aliasExpr = `${aliasTargetExpr}.`;
this.pendingPrototypeAliasBinding = [aliasExpr, prototypeOwnerMeta];
prototypeOwnerMeta.prototypeAliases.set(aliasExpr, aliasedPrototypeMembers);
}
}
}
if (left.type === "Identifier") {
const existingVariable = this.declaredVariables.get(left.name);
if (!existingVariable)
continue;
existingVariable.node.init = right;
if (this.needsDependencyAnalysis(right)) {
existingVariable.dependencies = this.findDependencies(assignment.right, left.name);
}
if (this.onMatch(existingVariable.node, existingVariable))
return;
} else if (assignment.left.type === "MemberExpression") {
const memberName = memberToString(assignment.left, this.source);
const activeAliasExpr = this.pendingPrototypeAliasBinding?.[0];
if (activeAliasExpr && (memberName?.includes(activeAliasExpr) || memberName === activeAliasExpr.slice(0, -1))) {
const aliasOwnerMeta = this.declaredVariables.get(this.pendingPrototypeAliasBinding?.[1].name || "");
if (aliasOwnerMeta) {
const existingAliasedMembers = aliasOwnerMeta.prototypeAliases.get(activeAliasExpr);
const aliasedMemberMeta = {
name: memberName,
node: currentNode,
dependents: this.dependentsTracker.get(memberName) || /* @__PURE__ */ new Set(),
predeclared: false,
prototypeAliases: /* @__PURE__ */ new Map(),
dependencies: this.findDependencies(right, memberName)
};
if (existingAliasedMembers) {
existingAliasedMembers.add(aliasedMemberMeta);
} else {
aliasOwnerMeta.prototypeAliases.set(activeAliasExpr, /* @__PURE__ */ new Set([aliasedMemberMeta]));
}
}
} else {
this.pendingPrototypeAliasBinding = null;
}
if (!memberName || this.declaredVariables.has(memberName))
continue;
const metadata = {
name: memberName,
node: currentNode,
dependents: this.dependentsTracker.get(memberName) || /* @__PURE__ */ new Set(),
predeclared: false,
prototypeAliases: /* @__PURE__ */ new Map(),
dependencies: this.findDependencies(right, memberName)
};
const baseName = memberBaseName(assignment.left, this.source);
if (baseName && baseName !== memberName && !baseName.startsWith("this.")) {
metadata.dependencies.add(baseName.replace(".prototype", ""));
}
if (this.dependentsTracker.has(memberName)) {
this.dependentsTracker.delete(memberName);
}
this.declaredVariables.set(memberName, metadata);
if (this.onMatch(currentNode, metadata))
return;
}
break;
}
case "VariableDeclaration": {
this.pendingPrototypeAliasBinding = null;
for (const declaration of currentNode.declarations) {
if (declaration.id.type !== "Identifier")
continue;
const metadata = {
name: declaration.id.name,
node: declaration,
dependents: this.dependentsTracker.get(declaration.id.name) || /* @__PURE__ */ new Set(),
prototypeAliases: /* @__PURE__ */ new Map(),
dependencies: /* @__PURE__ */ new Set(),
predeclared: false
};
const init = declaration.init;
if (!init && currentNode.kind === "var") {
metadata.predeclared = true;
} else if (init && this.needsDependencyAnalysis(init)) {
metadata.dependencies = this.findDependencies(init, metadata.name);
}
if (this.dependentsTracker.has(metadata.name)) {
this.dependentsTracker.delete(metadata.name);
}
this.declaredVariables.set(metadata.name, metadata);
if (this.onMatch(declaration, metadata))
return;
}
break;
}
}
}
}
/**
* Quick check if node type requires dependency analysis
*/
needsDependencyAnalysis(node) {
if (!node)
return false;
switch (node.type) {
case "FunctionExpression":
case "ArrowFunctionExpression":
case "ArrayExpression":
case "LogicalExpression":
case "CallExpression":
case "NewExpression":
case "MemberExpression":
case "BinaryExpression":
case "ConditionalExpression":
case "ObjectExpression":
case "SequenceExpression":
case "ClassExpression":
case "Identifier":
return true;
default:
return false;
}
}
/**
* Records a match, attaches metadata, and updates readiness state.
* @returns True when traversal can stop as a result of the match.
*/
onMatch(node, metadata) {
if (!this.hasExtractions)
return false;
let matched = false;
let result = false;
for (const state of this.extractionStates) {
if (!state.node) {
if (node.type === "VariableDeclarator" && !node.init)
continue;
result = state.config.match(node);
if (!result)
continue;
state.node = node;
matched = true;
if (metadata) {
state.metadata = metadata;
state.dependents = metadata.dependents;
state.dependencies = metadata.dependencies;
if (typeof result !== "boolean")
state.matchContext = result;
}
this.refreshExtractionState(state);
} else if (state.node !== node) {
this.refreshExtractionState(state);
if (this.shouldStopTraversal()) {
return true;
}
}
}
if (!matched)
return false;
return this.shouldStopTraversal();
}
/**
* Refreshes the readiness state of an extraction target based on its dependencies
* and/or configuration.
* @param state - State to refresh.
*/
refreshExtractionState(state) {
if (!state.node) {
state.ready = false;
return;
}
if (state.config.collectDependencies === false) {
state.ready = true;
return;
}
if (!state.metadata) {
state.ready = false;
return;
}
state.ready = this.areDependenciesResolved(state.dependencies);
}
/**
* Determines whether traversal should stop based on extraction states and configuration.
*/
shouldStopTraversal() {
if (!this.hasExtractions)
return false;
let hasStoppingTarget = false;
for (const state of this.extractionStates) {
if (state.config.stopWhenReady === false)
continue;
hasStoppingTarget = true;
if (!state.node)
return false;
if (!state.ready)
return false;
}
return hasStoppingTarget;
}
/**
* Checks if every dependency resolves to a declaration or built-in symbol.
* @param dependencies - Dependencies to validate.
* @param seen - Tracks recursively visited identifiers.
*/
areDependenciesResolved(dependencies, seen = /* @__PURE__ */ new Set()) {
if (!dependencies || dependencies.size === 0)
return true;
for (const dependency of dependencies) {
if (!dependency)
continue;
if (jsBuiltIns.has(dependency))
continue;
if (dependency === this.iifeParamName)
continue;
if (seen.has(dependency))
continue;
const depMeta = this.declaredVariables.get(dependency);
if (!depMeta)
return false;
seen.add(dependency);
if (!this.areDependenciesResolved(depMeta.dependencies, seen)) {
return false;
}
}
return true;
}
/**
* Collects free identifier dependencies reachable from the provided AST node.
* @param rootNode - AST node to search for dependencies.
* @param identifierName - Name of the identifier represented by `rootNode`, used for tracking dependents.
*/
findDependencies(rootNode, identifierName) {
const dependencies = /* @__PURE__ */ new Set();
if (!rootNode)
return dependencies;
const scopeStack = [
{
names: /* @__PURE__ */ new Set(),
type: "block"
}
];
const currentScope = /* @__PURE__ */ __name(() => scopeStack[scopeStack.length - 1], "currentScope");
const isInScope = /* @__PURE__ */ __name((name) => {
for (let i = scopeStack.length - 1; i >= 0; i--) {
if (scopeStack[i].names.has(name))
return true;
}
return false;
}, "isInScope");
const rootIdentifierName = "id" in rootNode && rootNode?.id?.type === "Identifier" ? rootNode.id.name : void 0;
const collectBindingIdentifiers = /* @__PURE__ */ __name((pattern, target) => {
if (!pattern)
return;
switch (pattern.type) {
case "Identifier":
target.add(pattern.name);
break;
case "ObjectPattern":
for (const prop of pattern.properties) {
if (prop.type === "RestElement") {
collectBindingIdentifiers(prop.argument, target);
} else if (prop.type === "Property") {
collectBindingIdentifiers(prop.value, target);
}
}
break;
case "ArrayPattern":
for (const el of pattern.elements) {
if (el)
collectBindingIdentifiers(el, target);
}
break;
case "RestElement":
collectBindingIdentifiers(pattern.argument, target);
break;
case "AssignmentPattern":
collectBindingIdentifiers(pattern.left, target);
break;
}
}, "collectBindingIdentifiers");
const collectParams = /* @__PURE__ */ __name((fnNode, target) => {
if (!fnNode?.params)
return;
for (const p of fnNode.params)
collectBindingIdentifiers(p, target);
}, "collectParams");
walkAst(rootNode, {
enter: /* @__PURE__ */ __name((n, parent) => {
switch (n.type) {
// Note for anybody debugging this in the future:
// *DO NOT* add MethodDefinition here.
// MethodDefinition.value is a FunctionExpression, so it is already handled...
case "FunctionDeclaration":
case "FunctionExpression":
case "ArrowFunctionExpression": {
const isDecl = n.type === "FunctionDeclaration";
const fnName = "id" in n ? n.id?.name : void 0;
if (isDecl && fnName) {
currentScope().names.add(fnName);
}
const fnScope = { names: /* @__PURE__ */ new Set(), type: "function" };
if (n.type === "FunctionExpression" && fnName) {
fnScope.names.add(fnName);
}
collectParams(n, fnScope.names);
scopeStack.push(fnScope);
break;
}
case "BlockStatement": {
scopeStack.push({ names: /* @__PURE__ */ new Set(), type: "block" });
break;
}
case "CatchClause": {
const s = /* @__PURE__ */ new Set();
if (n.param)
collectBindingIdentifiers(n.param, s);
scopeStack.push({ names: s, type: "block" });
break;
}
case "VariableDeclaration": {
const targetScope = n.kind === "var" ? scopeStack.findLast((s) => s.type === "function") ?? currentScope() : currentScope();
for (const d of n.declarations) {
collectBindingIdentifiers(d.id, targetScope.names);
}
break;
}
case "ClassDeclaration": {
if (n.id?.name) {
currentScope().names.add(n.id.name);
}
break;
}
case "LabeledStatement": {
if (n.label?.type === "Identifier")
currentScope().names.add(n.label.name);
break;
}
case "Identifier": {
if (n.name === rootIdentifierName)
return;
if (parent?.type === "Property" && parent.key === n && !parent.computed)
return;
if (parent?.type === "MethodDefinition" && parent.key === n && !parent.computed)
return;
if (parent?.type === "MemberExpression" && parent.property === n && !parent.computed) {
if (parent.object.type === "ThisExpression")
return;
const full = memberToString(parent, this.source);
if (!full)
return;
const declaredVariable2 = this.declaredVariables.get(full);
if (declaredVariable2) {
declaredVariable2.dependents.add(identifierName);
dependencies.add(full);
} else if (parent.object.type === "Identifier") {
const baseName = parent.object.name;
const declaredBaseVariable = this.declaredVariables.get(baseName);
if ((declaredBaseVariable || baseName === this.iifeParamName) && !isInScope(baseName) && !jsBuiltIns.has(baseName)) {
declaredBaseVariable?.dependents.add(identifierName);
dependencies.add(full);
const existingTracker = this.dependentsTracker.get(full);
if (existingTracker) {
existingTracker.add(identifierName);
} else {
this.dependentsTracker.set(full, /* @__PURE__ */ new Set([identifierName]));
}
}
}
return;
}
if (parent?.type === "MetaProperty") {
return;
}
if (isInScope(n.name) || jsBuiltIns.has(n.name))
return;
dependencies.add(n.name);
const declaredVariable = this.declaredVariables.get(n.name);
if (declaredVariable) {
declaredVariable.dependents.add(identifierName);
} else {
const existing = this.dependentsTracker.get(n.name);
if (existing) {
existing.add(identifierName);
} else {
this.dependentsTracker.set(n.name, /* @__PURE__ */ new Set([identifierName]));
}
}
break;
}
case "ForStatement":
case "ForInStatement":
case "ForOfStatement": {
scopeStack.push({ names: /* @__PURE__ */ new Set(), type: "block" });
break;
}
}
}, "enter"),
leave: /* @__PURE__ */ __name((n) => {
switch (n.type) {
case "FunctionDeclaration":
case "FunctionExpression":
case "ArrowFunctionExpression":
case "BlockStatement":
case "CatchClause":
case "ForStatement":
case "ForInStatement":
case "ForOfStatement":
if (scopeStack.length > 1)
scopeStack.pop();
break;
}
}, "leave")
});
return dependencies;
}
/**
* Returns the current set of matched extractions.
*/
getExtractedMatches() {
return this.extractionStates.filter((state) => !!state.node);
}
/**
* Returns the raw, original source.
*/
getSource() {
return this.source;
}
};
__name(_JsAnalyzer, "JsAnalyzer");
var JsAnalyzer = _JsAnalyzer;
// dist/src/utils/javascript/JsExtractor.js
var _JsExtractor = class _JsExtractor {
constructor(analyzer) {
__publicField(this, "analyzer");
this.analyzer = analyzer;
}
/**
* Checks if all provided arguments are safe initializers.
* @param args - The arguments to check.
* @param mode - The side effect mode to use ('strict' or 'loose').
*/
areSafeArgs(args, mode = "strict") {
return (args ?? []).every((arg) => {
if (!arg)
return false;
if (arg.type === "SpreadElement")
return false;
return this.isSafeInitializer(arg, mode);
});
}
/**
* Determines if a given AST node is a safe initializer without side effects.
* @param node - The AST node to evaluate.
* @param mode - The side effect mode to use ('strict' or 'loose').
*/
isSafeInitializer(node, mode = "strict") {
if (!node)
return true;
switch (node.type) {
case "ClassExpression":
return true;
case "Literal": {
const literal = node;
return typeof literal.value === "string" || typeof literal.value === "number" || typeof literal.value === "boolean" || literal.value === null || Boolean(literal.regex);
}
case "TemplateLiteral": {
return node.expressions.every((expr) => this.isSafeInitializer(expr, mode));
}
case "ArrayExpression": {
return node.elements.every((elem) => {
if (!elem)
return true;
if (elem.type === "SpreadElement")
return false;
return this.isSafeInitializer(elem, mode);
});
}
case "ObjectExpression": {
return node.properties.every((prop) => {
if (prop.type !== "Property")
return false;
if (prop.computed)
return false;
if (prop.kind !== "init")
return false;
const value = prop.value;
if (!value)
return false;
return value.type === "FunctionExpression" || value.type === "ArrowFunctionExpression" || value.type === "Literal";
});
}
case "CallExpression": {
if (node.callee.type === "Identifier" && jsBuiltIns.has(node.callee.name)) {
return this.areSafeArgs(node.arguments, mode);
} else if (node.callee.type === "MemberExpression") {
if (!this.isSafeInitializer(node.callee.object, mode))
return false;
if (mode === "strict") {
const propertyName = node.callee.property.type === "Identifier" ? node.callee.property.name : "";
if (node.callee.computed || !jsBuiltIns.has(propertyName)) {
return false;
}
}
return this.areSafeArgs(node.arguments, mode);
}
return false;
}
case "NewExpression": {
if (node.callee.type === "Identifier") {
if (jsBuiltIns.has(node.callee.name)) {
return this.areSafeArgs(node.arguments, mode);
}
if (mode === "loose") {
return this.areSafeArgs(node.arguments, mode);
}
}
return false;
}
case "UnaryExpression": {
return this.isSafeInitializer(node.argument, mode);
}
case "FunctionExpression":
case "ArrowFunctionExpression":
case "Identifier": {
return true;
}
case "MemberExpression": {
if (mode === "loose") {
if (node.computed && !this.isSafeInitializer(node.property, mode)) {
return false;
}
return this.isSafeInitializer(node.object, mode);
}
if (!node.computed && node.property.type === "Identifier" && node.property.name === "prototype") {
return true;
}
return false;
}
case "LogicalExpression":
case "BinaryExpression": {
return this.isSafeInitializer(node.left, mode) && this.isSafeInitializer(node.right, mode);
}
case "ConditionalExpression": {
if (mode === "loose") {
return this.isSafeInitializer(node.test, mode) && this.isSafeInitializer(node.consequent, mode) && this.isSafeInitializer(node.alternate, mode);
}
return false;
}
case "SequenceExpression": {
if (mode === "loose") {
return node.expressions.every((expr) => this.isSafeInitializer(expr, mode));
}
return false;
}
case "AssignmentExpression": {
if (node.left.type === "MemberExpression" && !node.left.computed) {
const object = node.left.object;
if (object.type === "Identifier" && this.analyzer.declaredVariables.get(object.name)?.node.init !== void 0) {
return this.isSafeInitializer(node.right, mode);
}
} else if (node.left.type === "Identifier") {
if (this.analyzer.declaredVariables.has(node.left.name)) {
return this.isSafeInitializer(node.right, mode);
}
}
return false;
}
// @todo: check for more?
default:
return false;
}
}
/**
* Provides a fallback initializer string based on the type of the initializer node.
* @TODO: Check more cases.
* @param init - The initializer expression to evaluate.
*/
getInitializerFallback(init) {
switch (init?.type) {
case "ObjectExpression":
case "NewExpression":
case "MemberExpression":
case "LogicalExpression":
return "{}";
case "ArrayExpression":
return "[]";
default:
return "undefined";
}
}
/**
* Renders an AST node to JavaScript source code, with special handling for variable declarators.
* @param node - The ESTree node to render.
* @param preDeclared - Whether the variable has been previously declared.
* @param options - Configuration options for the emitter.
*/
renderNode(node, preDeclared, options = {}) {
const source = this.analyzer.getSource();
const declaredVariables = this.analyzer.declaredVariables;
const sideEffectPolicy = options.disallowSideEffectInitializers;
const sideEffectMode = typeof sideEffectPolicy === "object" && sideEffectPolicy !== null ? sideEffectPolicy.mode ?? "strict" : "strict";
const canDisallow = Boolean(sideEffectPolicy);
const assignmentTarget = node.type === "AssignmentExpression" ? node : node.type === "ExpressionStatement" && node.expression.type === "AssignmentExpression" ? node.expression : null;
const init = assignmentTarget && assignmentTarget.operator === "=" ? assignmentTarget.right : node.type === "VariableDeclarator" ? node.init : null;
const forceRemove = canDisallow && init && !this.isSafeInitializer(init, sideEffectMode);
const initializerFallback = this.getInitializerFallback(init);
let initSource = initializerFallback;
if (!forceRemove && init) {
if (!preDeclared && init.type === "Identifier" && !declaredVariables.has(init.name)) {
initSource = initializerFallback;
} else {
const left = assignmentTarget?.left;
const isPrototypeAlias = init?.type === "MemberExpression" && !init.computed && init.property.type === "Identifier" && init.property.name === "prototype";
if (!isPrototypeAlias && left?.type === "MemberExpression" && init) {
if (canDisallow && left.object.type === "Identifier" && init.type !== "FunctionExpression" && init.type !== "ArrowFunctionExpression" && init.type !== "LogicalExpression" && init.type !== "ClassExpression") {
return `${indent}// Skipped ${memberToString(left, source)} assignment.`;
}
}
initSource = extractNodeSource(init, source)?.trim().replace(/;\s*$/, "") || "undefined // [JsExtractor] Failed to extract initializer source.";
}
}
if (!forceRemove && init && init.type === "SequenceExpression" && !initSource.startsWith("(")) {
initSource = `(${initSource})`;
}
const idName = node.type === "VariableDeclarator" && node.id.type === "Identifier" ? node.id.name : assignmentTarget && assignmentTarget.left.type === "Identifier" ? assignmentTarget.left.name : assignmentTarget?.type === "AssignmentExpression" ? memberToString(assignmentTarget.left, source)?.trim() : "unknown";
const assignmentExpression = `${idName} = ${initSource};`;
if (node.type === "VariableDeclarator" && node.init && !preDeclared) {
return `${indent}var ${assignmentExpression}`;
}
return `${indent}${assignmentExpression}`;
}
/**
* Processes extracted matches from the analyzer, handles dependencies, predeclares
* variables as needed, and generates an IIFE-wrapped output string containing the
* code snippets and exported variables.
* @param config - Configuration options for the emitter.
*/
buildScript(config) {
const { maxDepth = Infinity, forceVarPredeclaration = false, exportRawValues = false, rawValueOnly: skipEmitFor = [] } = config;
const extractions = this.analyzer.getExtractedMatches();
const seen = new Set(extractions.map((e) => e.metadata?.name || ""));
const snippets = [];
const predeclaredVarSet = /* @__PURE__ */ new Set();
const exported = /* @__PURE__ */ new Map();
const exportedRawValues = {};
function registerPredeclaredVar(name) {
if (!name || name.includes("."))
return;
predeclaredVarSet.add(name);
}
__name(registerPredeclaredVar, "registerPredeclaredVar");
const visit = /* @__PURE__ */ __name((metadata, depth = 0, whitelistedDep) => {
if (!metadata || depth > maxDepth)
return;
for (const dependency of metadata.dependencies) {
if (whitelistedDep && whitelistedDep !== dependency) {
if (!seen.has(whitelistedDep))
continue;
whitelistedDep = void 0;
}
if (seen.has(dependency))
continue;
seen.add(dependency);
const dependencyMetadata = this.analyzer.declaredVariables.get(dependency);
if (!dependencyMetadata)
continue;
const shouldPredeclare = forceVarPredeclaration || dependencyMetadata.predeclared;
if (shouldPredeclare) {
registerPredeclaredVar(dependency);
}
visit(dependencyMetadata, depth + 1, whitelistedDep);
snippets.push(this.renderNode(dependencyMetadata.node, shouldPredeclare, config));
if (dependencyMetadata.prototypeAliases.size > 0) {
for (const [, aliasMembers] of dependencyMetadata.prototypeAliases) {
for (const member of aliasMembers) {
visit(member, depth);
snippets.push(this.renderNode(member.node, shouldPredeclare, config));
}
}
}
}
}, "visit");
for (const extraction of extractions) {
const fname = extraction.config.friendlyName;
const shouldSkip = fname && skipEmitFor.includes(fname);
if (extraction.metadata) {
if (!shouldSkip)
snippets.push(`${indent}//#region --- start [${fname || "Unknown"}] ---`);
const shouldPredeclare = (forceVarPredeclaration || extraction.metadata.predeclared) && !shouldSkip;
const onlyProcessMatchContext = extraction.config.onlyProcessMatchContext;
if (shouldPredeclare) {
registerPredeclaredVar(extraction.metadata.name);
}
if (extraction.config.collectDependencies && !shouldSkip) {
let whitelistedDep;
const matchContextNode = extraction.matchContext;
if (matchContextNode?.type === "NewExpression" && onlyProcessMatchContext) {
if (matchContextNode.callee.type === "Identifier") {
whitelistedDep = matchContextNode.callee.name;
} else if (matchContextNode.callee.type === "MemberExpression") {
whitelistedDep = memberToString(matchContextNode.callee, this.analyzer.getSource()) || void 0;
}
}
visit(extraction.metadata, void 0, whitelistedDep);
}
if (extraction.matchContext && fname) {
exported.set(fname, extraction.matchContext);
if (exportRawValues) {
const ctx = extraction.matchContext;
const src = this.analyzer.getSource();
let rawValue = null;
if (ctx.type === "Property") {
rawValue = extractNodeSource(ctx.value, src);
} else if (ctx.type === "Identifier") {
rawValue = ctx.name;
} else {
rawValue = extractNodeSource(ctx, src);
}
exportedRawValues[fname] = rawValue;
}
}
if (!shouldSkip) {
if (!onlyProcessMatchContext) {
snippets.push(this.renderNode(extraction.metadata.node, shouldPredeclare, config));
}
snippets.push(`${indent}//#endregion --- end [${fname || "Unknown"}] ---
`);
}
}
}
const output = [];
output.push("const __jsExtractorGlobal = typeof globalThis !== 'undefined' ? globalThis :");
output.push(`${indent}typeof self !== 'undefined' ? self :`);
output.push(`${indent}typeof window !== 'undefined' ? window :`);
output.push(`${indent}typeof global !== 'undefined' ? global : {};
`);
output.push(`const exportedVars = (function(${this.analyzer.iifeParamName}) {`);
output.push(`${indent}const window = typeof __jsExtractorGlobal.window !== 'undefined' ? __jsExtractorGlobal.window : Object.create(null);`);
output.push(`${indent}const document = typeof __jsExtractorGlobal.document !== 'undefined' ? __jsExtractorGlobal.document : {};`);
output.push(`${indent}const self = typeof __jsExtractorGlobal.self !== 'undefined' ? __jsExtractorGlobal.self : window;
`);
if (predeclaredVarSet.size > 0) {
output.push(`${indent}var ${Array.from(predeclaredVarSet).join(", ")};
`);
}
output.push(snippets.join("\n"));
const exportedVars = [];
for (const [friendlyName, node] of exported) {
let currentFunctionNode = null;
if (node.type === "Identifier") {
const decl = this.analyzer.declaredVariables.get(node.name);
if (decl?.node?.type === "VariableDeclarator" && decl.node.init?.type === "FunctionExpression") {
currentFunctionNode = decl.node;
}
} else if (node.type === "CallExpression" || node.type === "NewExpression" || node.type === "VariableDeclarator") {
currentFunctionNode = node;
}
if (currentFunctionNode) {
const wrapper = createWrapperFunction(this.analyzer, friendlyName, currentFunctionNode);
if (wrapper) {
output.push(`${wrapper}
`);
exportedVars.push(friendlyName);
}
}
}
if (exportRawValues) {
const rawJson = JSON.stringify(exportedRawValues, null, indent.length);
const rawJsonLines = rawJson.split("\n");
const formattedRawJson = `${rawJsonLines[0]}
${rawJsonLines.slice(1).map((line) => indent + line).join("\n")}`;
output.push(`${indent}const rawValues = ${formattedRawJson};
`);
exportedVars.push("rawValues");
}
output.push(`${indent}return { ${exportedVars.join(", ")} };`);
output.push("})({});\n");
return {
output: output.join("\n"),
exported: exportedVars,
exportedRawValues: exportRawValues ? exportedRawValues : void 0
};
}
};
__name(_JsExtractor, "JsExtractor");
var JsExtractor = _JsExtractor;
// dist/src/parser/classes/actions/OpenPopupAction.js
var _OpenPopupAction = class _OpenPopupAction extends YTNode {
constructor(data) {
super();
__publicField(this, "popup");
__publicField(this, "popup_type");
this.popup = parser_exports.parseItem(data.popup);
this.popup_type = data.popupType;
}
};
__name(_OpenPopupAction, "OpenPopupAction");
__publicField(_OpenPopupAction, "type", "OpenPopupAction");
var OpenPopupAction = _OpenPopupAction;
// dist/src/parser/classes/Button.js
var _Button = class _Button extends YTNode {
constructor(data) {
super();
__publicField(this, "text");
__publicField(this, "label");
__publicField(this, "tooltip");
__publicField(this, "style");
__publicField(this, "size");
__publicField(this, "icon_type");
__publicField(this, "is_disabled");
__publicField(this, "target_id");
__publicField(this, "endpoint");
__publicField(this, "accessibility");
if (Reflect.has(data, "text"))
this.text = new Text2(data.text).toString();
if (Reflect.has(data, "accessibility") && Reflect.has(data.accessibility, "label")) {
this.label = data.accessibility.label;
}
if ("accessibilityData" in data && "accessibilityData" in data.accessibilityData) {
this.accessibility = {
accessibility_data: new AccessibilityData(data.accessibilityData.accessibilityData)
};
}
if (Reflect.has(data, "tooltip"))
this.tooltip = data.tooltip;
if (Reflect.has(data, "style"))
this.style = data.style;
if (Reflect.has(data, "size"))
this.size = data.size;
if (Reflect.has(data, "icon") && Reflect.has(data.icon, "iconType"))
this.icon_type = data.icon.iconType;
if (Reflect.has(data, "isDisabled"))
this.is_disabled = data.isDisabled;
if (Reflect.has(data, "targetId"))
this.target_id = data.targetId;
this.endpoint = new NavigationEndpoint(data.navigationEndpoint || data.serviceEndpoint || data.command);
}
};
__name(_Button, "Button");
__publicField(_Button, "type", "Button");
var Button = _Button;
// dist/src/parser/classes/DropdownItem.js
var _DropdownItem = class _DropdownItem extends YTNode {
constructor(data) {
super();
__publicField(this, "label");
__publicField(this, "selected");
__publicField(this, "value");
__publicField(this, "icon_type");
__publicField(this, "description");
__publicField(this, "endpoint");
this.label = new Text2(data.label).toString();
this.selected = !!data.isSelected;
if (Reflect.has(data, "int32Value")) {
this.value = data.int32Value;
} else if (data.stringValue) {
this.value = data.stringValue;
}
if (Reflect.has(data, "onSelectCommand")) {
this.endpoint = new NavigationEndpoint(data.onSelectCommand);
}
if (Reflect.has(data, "icon")) {
this.icon_type = data.icon?.iconType;
}
if (Reflect.has(data, "descriptionText")) {
this.description = new Text2(data.descriptionText);
}
}
};
__name(_DropdownItem, "DropdownItem");
__publicField(_DropdownItem, "type", "DropdownItem");
var DropdownItem = _DropdownItem;
// dist/src/parser/classes/Dropdown.js
var _Dropdown = class _Dropdown extends YTNode {
constructor(data) {
super();
__publicField(this, "label");
__publicField(this, "entries");
this.label = data.label || "";
this.entries = parser_exports.parseArray(data.entries, DropdownItem);
}
};
__name(_Dropdown, "Dropdown");
__publicField(_Dropdown, "type", "Dropdown");
var Dropdown = _Dropdown;
// dist/src/parser/classes/CreatePlaylistDialog.js
var _CreatePlaylistDialog = class _CreatePlaylistDialog extends YTNode {
constructor(data) {
super();
__publicField(this, "title");
__publicField(this, "title_placeholder");
__publicField(this, "privacy_option");
__publicField(this, "cancel_button");
__publicField(this, "create_button");
this.title = new Text2(data.dialogTitle).toString();
this.title_placeholder = data.titlePlaceholder || "";
this.privacy_option = parser_exports.parseItem(data.privacyOption, Dropdown);
this.create_button = parser_exports.parseItem(data.cancelButton, Button);
this.cancel_button = parser_exports.parseItem(data.cancelButton, Button);
}
};
__name(_CreatePlaylistDialog, "CreatePlaylistDialog");
__publicField(_CreatePlaylistDialog, "type", "CreatePlaylistDialog");
var CreatePlaylistDialog = _CreatePlaylistDialog;
// dist/src/parser/classes/commands/CommandExecutorCommand.js
var _CommandExecutorCommand = class _CommandExecutorCommand extends YTNode {
constructor(data) {
super();
__publicField(this, "commands");
this.commands = parser_exports.parseCommands(data.commands);
}
};
__name(_CommandExecutorCommand, "CommandExecutorCommand");
__publicField(_CommandExecutorCommand, "type", "CommandExecutorCommand");
var CommandExecutorCommand = _CommandExecutorCommand;
// dist/src/parser/classes/NavigationEndpoint.js
var _NavigationEndpoint = class _NavigationEndpoint extends YTNode {
constructor(data) {
super();
__publicField(this, "name");
__publicField(this, "payload");
__publicField(this, "dialog");
__publicField(this, "modal");
__publicField(this, "open_popup");
__publicField(this, "next_endpoint");
__publicField(this, "metadata");
__publicField(this, "command");
__publicField(this, "commands");
if (data) {
if (data.serialCommand || data.parallelCommand) {
const raw_command = data.serialCommand || data.parallelCommand;
this.commands = raw_command.commands.map((command) => new _NavigationEndpoint(command));
}
if (data.innertubeCommand || data.command || data.performOnceCommand) {
data = data.innertubeCommand || data.command || data.performOnceCommand;
}
}
this.command = parser_exports.parseCommand(data);
if (Reflect.has(data || {}, "openPopupAction"))
this.open_popup = new OpenPopupAction(data.openPopupAction);
this.name = Object.keys(data || {}).find((item) => item.endsWith("Endpoint") || item.endsWith("Command"));
this.payload = this.name ? Reflect.get(data, this.name) : {};
if (Reflect.has(this.payload, "dialog") || Reflect.has(this.payload, "content")) {
this.dialog = parser_exports.parseItem(this.payload.dialog || this.payload.content);
}
if (Reflect.has(this.payload, "modal")) {
this.modal = parser_exports.parseItem(this.payload.modal);
}
if (Reflect.has(this.payload, "nextEndpoint")) {
this.next_endpoint = new _NavigationEndpoint(this.payload.nextEndpoint);
}
if (data?.serviceEndpoint) {
data = data.serviceEndpoint;
}
this.metadata = {};
if (data?.commandMetadata?.webCommandMetadata?.url) {
this.metadata.url = data.commandMetadata.webCommandMetadata.url;
}
if (data?.commandMetadata?.webCommandMetadata?.webPageType) {
this.metadata.page_type = data.commandMetadata.webCommandMetadata.webPageType;
}
if (data?.commandMetadata?.webCommandMetadata?.apiUrl) {
this.metadata.api_url = data.commandMetadata.webCommandMetadata.apiUrl.replace("/youtubei/v1/", "");
} else if (this.name) {
this.metadata.api_url = this.getPath(this.name);
}
if (data?.commandMetadata?.webCommandMetadata?.sendPost) {
this.metadata.send_post = data.commandMetadata.webCommandMetadata.sendPost;
}
if (data?.createPlaylistEndpoint) {
if (data?.createPlaylistEndpoint.createPlaylistDialog) {
this.dialog = parser_exports.parseItem(data?.createPlaylistEndpoint.createPlaylistDialog, CreatePlaylistDialog);
}
}
}
/**
* Sometimes InnerTube does not return an API url, in that case the library should set it based on the name of the payload object.
* @deprecated This should be removed in the future.
*/
getPath(name) {
switch (name) {
case "browseEndpoint":
return "/browse";
case "watchEndpoint":
case "reelWatchEndpoint":
return "/player";
case "searchEndpoint":
return "/search";
case "watchPlaylistEndpoint":
return "/next";
case "liveChatItemContextMenuEndpoint":
return "/live_chat/get_item_context_menu";
}
}
call(actions, args) {
if (!actions)
throw new Error("An API caller must be provided");
if (this.command) {
let command = this.command;
if (command.is(CommandExecutorCommand)) {
command = command.commands.at(-1);
}
return actions.execute(command.getApiPath(), { ...command.buildRequest(), ...args });
}
if (!this.metadata.api_url)
throw new Error("Expected an api_url, but none was found.");
return actions.execute(this.metadata.api_url, { ...this.payload, ...args });
}
toURL() {
if (!this.metadata.url)
return void 0;
if (!this.metadata.page_type)
return void 0;
return this.metadata.page_type === "WEB_PAGE_TYPE_UNKNOWN" ? this.metadata.url : `https://www.youtube.com${this.metadata.url}`;
}
};
__name(_NavigationEndpoint, "NavigationEndpoint");
__publicField(_NavigationEndpoint, "type", "NavigationEndpoint");
var NavigationEndpoint = _NavigationEndpoint;
// dist/src/parser/classes/misc/Thumbnail.js
var _Thumbnail = class _Thumbnail {
constructor(data) {
__publicField(this, "url");
__publicField(this, "width");
__publicField(this, "height");
this.url = data.url;
this.width = data.width;
this.height = data.height;
}
/**
* Get thumbnails from response object.
*/
static fromResponse(data) {
if (!data)
return [];
let thumbnail_data;
if (data.thumbnails) {
thumbnail_data = data.thumbnails;
} else if (data.sources) {
thumbnail_data = data.sources;
}
if (thumbnail_data) {
return thumbnail_data.map((x) => new _Thumbnail(x)).sort((a, b) => b.width - a.width);
}
return [];
}
};
__name(_Thumbnail, "Thumbnail");
var Thumbnail = _Thumbnail;
// dist/src/parser/classes/misc/EmojiRun.js
var _EmojiRun = class _EmojiRun {
constructor(data) {
__publicField(this, "text");
__publicField(this, "emoji");
this.text = data.emoji?.emojiId || data.emoji?.shortcuts?.[0] || data.text || "";
this.emoji = {
emoji_id: data.emoji.emojiId,
shortcuts: data.emoji?.shortcuts || [],
search_terms: data.emoji?.searchTerms || [],
image: Thumbnail.fromResponse(data.emoji.image),
is_custom: !!data.emoji?.isCustomEmoji
};
}
toString() {
return this.text;
}
toHTML() {
const escaped_text = escape(this.text);
return `<img src="${this.emoji.image[0].url}" alt="${escaped_text}" title="${escaped_text}" style="display: inline-block; vertical-align: text-top; height: var(--yt-emoji-size, 1rem); width: var(--yt-emoji-size, 1rem);" loading="lazy" crossorigin="anonymous" />`;
}
};
__name(_EmojiRun, "EmojiRun");
var EmojiRun = _EmojiRun;
// dist/src/parser/classes/misc/TextRun.js
var _TextRun = class _TextRun {
constructor(data) {
__publicField(this, "text");
__publicField(this, "text_color");
__publicField(this, "endpoint");
__publicField(this, "bold");
__publicField(this, "bracket");
__publicField(this, "dark_mode_text_color");
__publicField(this, "deemphasize");
__publicField(this, "italics");
__publicField(this, "strikethrough");
__publicField(this, "error_underline");
__publicField(this, "underline");
__publicField(this, "font_face");
__publicField(this, "attachment");
this.text = data.text;
this.bold = Boolean(data.bold);
this.bracket = Boolean(data.bracket);
this.italics = Boolean(data.italics);
this.strikethrough = Boolean(data.strikethrough);
this.error_underline = Boolean(data.error_underline);
this.underline = Boolean(data.underline);
this.deemphasize = Boolean(data.deemphasize);
if ("textColor" in data) {
this.text_color = data.textColor;
}
if ("navigationEndpoint" in data) {
this.endpoint = new NavigationEndpoint(data.navigationEndpoint);
}
if ("darkModeTextColor" in data) {
this.dark_mode_text_color = data.darkModeTextColor;
}
if ("fontFace" in data) {
this.font_face = data.fontFace;
}
this.attachment = data.attachment;
}
toString() {
return this.text;
}
toHTML() {
const tags = [];
if (this.bold)
tags.push("b");
if (this.italics)
tags.push("i");
if (this.strikethrough)
tags.push("s");
if (this.deemphasize)
tags.push("small");
if (this.underline)
tags.push("u");
if (this.error_underline)
tags.push("u");
if (!this.text?.length)
return "";
const escaped_text = escape(this.text);
const styled_text = tags.map((tag) => `<${tag}>`).join("") + escaped_text + tags.map((tag) => `</${tag}>`).join("");
const wrapped_text = `<span style="white-space: pre-wrap;">${styled_text}</span>`;
if (this.attachment) {
if (this.attachment.element.type.imageType.image.sources.length) {
if (this.endpoint) {
const { url } = this.attachment.element.type.imageType.image.sources[0];
let image_el = "";
if (url) {
image_el = `<img src="${url}" style="vertical-align: middle; height: ${this.attachment.element.properties.layoutProperties.height.value}px; width: ${this.attachment.element.properties.layoutProperties.width.value}px;" alt="">`;
}
const nav_url = this.endpoint.toURL();
if (nav_url)
return `<a href="${nav_url}" class="yt-ch-link">${image_el}${wrapped_text}</a>`;
}
}
}
if (this.endpoint) {
const url = this.endpoint.toURL();
if (url)
return `<a href="${url}">${wrapped_text}</a>`;
}
return wrapped_text;
}
};
__name(_TextRun, "TextRun");
var TextRun = _TextRun;
// dist/src/parser/classes/misc/Text.js
function escape(text) {
return text.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;").replace(/'/g, "&#039;");
}
__name(escape, "escape");
var TAG = "Text";
var _Text = class _Text {
constructor(data) {
/**
* The plain text content.
*/
__publicField(this, "text");
/**
* Individual text segments with their formatting.
*/
__publicField(this, "runs");
/**
* Navigation endpoint associated with this text.
*/
__publicField(this, "endpoint");
/**
* Accessibility data associated with this text.
*/
__publicField(this, "accessibility");
/**
* Indicates if the text is right-to-left.
*/
__publicField(this, "rtl");
if (this.isRunsData(data)) {
this.runs = data.runs.map((run) => run.emoji ? new EmojiRun(run) : new TextRun(run));
this.text = this.runs.map((run) => run.text).join("");
} else {
this.text = data?.simpleText;
}
if (this.isObject(data) && "accessibility" in data && "accessibilityData" in data.accessibility) {
this.accessibility = {
accessibility_data: new AccessibilityData(data.accessibility.accessibilityData)
};
}
this.rtl = !!data?.rtl;
this.parseEndpoint(data);
}
isRunsData(data) {
return this.isObject(data) && Reflect.has(data, "runs") && Array.isArray(data.runs);
}
parseEndpoint(data) {
if (!this.isObject(data))
return;
if ("navigationEndpoint" in data) {
this.endpoint = new NavigationEndpoint(data.navigationEndpoint);
} else if ("titleNavigationEndpoint" in data) {
this.endpoint = new NavigationEndpoint(data.titleNavigationEndpoint);
} else if (this.runs?.[0]?.endpoint) {
this.endpoint = (this.runs?.[0]).endpoint;
}
}
isObject(data) {
return typeof data === "object" && data !== null;
}
static fromAttributed(data) {
const { content, commandRuns: command_runs, attachmentRuns: attachment_runs } = data;
const runs = [
{
text: content,
startIndex: 0
}
];
const style_runs = data.styleRuns?.map((run) => ({
...run,
startIndex: run.startIndex ?? 0,
length: run.length ?? content.length
}));
if (style_runs?.length)
this.processStyleRuns(runs, style_runs, data);
if (command_runs?.length)
this.processCommandRuns(runs, command_runs, data);
if (attachment_runs?.length)
this.processAttachmentRuns(runs, attachment_runs, data);
return new _Text({ runs });
}
static processStyleRuns(runs, style_runs, data) {
for (const style_run of style_runs) {
if (style_run.italic || style_run.strikethrough === "LINE_STYLE_SINGLE" || style_run.weightLabel === "FONT_WEIGHT_MEDIUM" || style_run.weightLabel === "FONT_WEIGHT_BOLD") {
const matching_run = findMatchingRun(runs, style_run);
if (!matching_run) {
Log_exports.warn(TAG, "Unable to find matching run for style run. Skipping...", {
style_run,
input_data: data,
// For performance reasons, web browser consoles only expand an object, when the user clicks on it,
// So if we log the original runs object, it might have changed by the time the user looks at it.
// Deep clone, so that we log the exact state of the runs at this point.
parsed_runs: JSON.parse(JSON.stringify(runs))
});
continue;
}
insertSubRun(runs, matching_run, style_run, {
bold: style_run.weightLabel === "FONT_WEIGHT_MEDIUM" || style_run.weightLabel === "FONT_WEIGHT_BOLD",
italics: style_run.italic,
strikethrough: style_run.strikethrough === "LINE_STYLE_SINGLE"
});
} else {
Log_exports.debug(TAG, "Skipping style run as it is doesn't have any information that we parse.", {
style_run,
input_data: data
});
}
}
}
static processCommandRuns(runs, command_runs, data) {
for (const command_run of command_runs) {
if (command_run.onTap) {
const matching_run = findMatchingRun(runs, command_run);
if (!matching_run) {
Log_exports.warn(TAG, "Unable to find matching run for command run. Skipping...", {
command_run,
input_data: data,
// For performance reasons, web browser consoles only expand an object, when the user clicks on it,
// So if we log the original runs object, it might have changed by the time the user looks at it.
// Deep clone, so that we log the exact state of the runs at this point.
parsed_runs: JSON.parse(JSON.stringify(runs))
});
continue;
}
insertSubRun(runs, matching_run, command_run, {
navigationEndpoint: command_run.onTap
});
} else {
Log_exports.debug(TAG, 'Skipping command run as it is missing the "doTap" property.', {
command_run,
input_data: data
});
}
}
}
static processAttachmentRuns(runs, attachment_runs, data) {
for (const attachment_run of attachment_runs) {
const matching_run = findMatchingRun(runs, attachment_run);
if (!matching_run) {
Log_exports.warn(TAG, "Unable to find matching run for attachment run. Skipping...", {
attachment_run,
input_data: data,
// For performance reasons, web browser consoles only expand an object, when the user clicks on it,
// So if we log the original runs object, it might have changed by the time the user looks at it.
// Deep clone, so that we log the exact state of the runs at this point.
parsed_runs: JSON.parse(JSON.stringify(runs))
});
continue;
}
if (attachment_run.length === 0) {
matching_run.attachment = attachment_run;
} else {
const offset_start_index = attachment_run.startIndex - matching_run.startIndex;
const text = matching_run.text.substring(offset_start_index, offset_start_index + attachment_run.length);
const is_custom_emoji = /^:[^:]+:$/.test(text);
if (attachment_run.element?.type?.imageType?.image && (is_custom_emoji || /^(?:\p{Emoji}|\u200d)+$/u.test(text))) {
const emoji = {
image: attachment_run.element.type.imageType.image,
isCustomEmoji: is_custom_emoji,
shortcuts: is_custom_emoji ? [text] : void 0
};
insertSubRun(runs, matching_run, attachment_run, { emoji });
} else {
insertSubRun(runs, matching_run, attachment_run, {
attachment: attachment_run
});
}
}
}
}
/**
* Converts the text to HTML.
* @returns The HTML.
*/
toHTML() {
return this.runs ? this.runs.map((run) => run.toHTML()).join("") : this.text;
}
/**
* Checks if the text is empty.
* @returns Whether the text is empty.
*/
isEmpty() {
return this.text === void 0;
}
/**
* Converts the text to a string.
* @returns The text.
*/
toString() {
return this.text || "N/A";
}
};
__name(_Text, "Text");
var Text2 = _Text;
function findMatchingRun(runs, response_run) {
return runs.find((run) => {
return run.startIndex <= response_run.startIndex && response_run.startIndex + response_run.length <= run.startIndex + run.text.length;
});
}
__name(findMatchingRun, "findMatchingRun");
function insertSubRun(runs, original_run, response_run, properties_to_add) {
const replace_index = runs.indexOf(original_run);
const replacement_runs = [];
const offset_start_index = response_run.startIndex - original_run.startIndex;
if (response_run.startIndex > original_run.startIndex) {
replacement_runs.push({
...original_run,
text: original_run.text.substring(0, offset_start_index)
});
}
replacement_runs.push({
...original_run,
text: original_run.text.substring(offset_start_index, offset_start_index + response_run.length),
startIndex: response_run.startIndex,
...properties_to_add
});
if (response_run.startIndex + response_run.length < original_run.startIndex + original_run.text.length) {
replacement_runs.push({
...original_run,
text: original_run.text.substring(offset_start_index + response_run.length),
startIndex: response_run.startIndex + response_run.length
});
}
runs.splice(replace_index, 1, ...replacement_runs);
}
__name(insertSubRun, "insertSubRun");
// dist/src/parser/classes/ChannelExternalLinkView.js
var _ChannelExternalLinkView = class _ChannelExternalLinkView extends YTNode {
constructor(data) {
super();
__publicField(this, "title");
__publicField(this, "link");
__publicField(this, "favicon");
this.title = Text2.fromAttributed(data.title);
this.link = Text2.fromAttributed(data.link);
this.favicon = Thumbnail.fromResponse(data.favicon);
}
};
__name(_ChannelExternalLinkView, "ChannelExternalLinkView");
__publicField(_ChannelExternalLinkView, "type", "ChannelExternalLinkView");
var ChannelExternalLinkView = _ChannelExternalLinkView;
// dist/src/parser/classes/AboutChannelView.js
var _AboutChannelView = class _AboutChannelView extends YTNode {
constructor(data) {
super();
__publicField(this, "description");
__publicField(this, "description_label");
__publicField(this, "country");
__publicField(this, "custom_links_label");
__publicField(this, "subscriber_count");
__publicField(this, "view_count");
__publicField(this, "joined_date");
__publicField(this, "canonical_channel_url");
__publicField(this, "channel_id");
__publicField(this, "additional_info_label");
__publicField(this, "custom_url_on_tap");
__publicField(this, "video_count");
__publicField(this, "sign_in_for_business_email");
__publicField(this, "links");
if (Reflect.has(data, "description")) {
this.description = data.description;
}
if (Reflect.has(data, "descriptionLabel")) {
this.description_label = Text2.fromAttributed(data.descriptionLabel);
}
if (Reflect.has(data, "country")) {
this.country = data.country;
}
if (Reflect.has(data, "customLinksLabel")) {
this.custom_links_label = Text2.fromAttributed(data.customLinksLabel);
}
if (Reflect.has(data, "subscriberCountText")) {
this.subscriber_count = data.subscriberCountText;
}
if (Reflect.has(data, "viewCountText")) {
this.view_count = data.viewCountText;
}
if (Reflect.has(data, "joinedDateText")) {
this.joined_date = Text2.fromAttributed(data.joinedDateText);
}
if (Reflect.has(data, "canonicalChannelUrl")) {
this.canonical_channel_url = data.canonicalChannelUrl;
}
if (Reflect.has(data, "channelId")) {
this.channel_id = data.channelId;
}
if (Reflect.has(data, "additionalInfoLabel")) {
this.additional_info_label = Text2.fromAttributed(data.additionalInfoLabel);
}
if (Reflect.has(data, "customUrlOnTap")) {
this.custom_url_on_tap = new NavigationEndpoint(data.customUrlOnTap);
}
if (Reflect.has(data, "videoCountText")) {
this.video_count = data.videoCountText;
}
if (Reflect.has(data, "signInForBusinessEmail")) {
this.sign_in_for_business_email = Text2.fromAttributed(data.signInForBusinessEmail);
}
if (Reflect.has(data, "links")) {
this.links = parser_exports.parseArray(data.links, ChannelExternalLinkView);
} else {
this.links = [];
}
}
};
__name(_AboutChannelView, "AboutChannelView");
__publicField(_AboutChannelView, "type", "AboutChannelView");
var AboutChannelView = _AboutChannelView;
// dist/src/parser/classes/AboutChannel.js
var _AboutChannel = class _AboutChannel extends YTNode {
constructor(data) {
super();
__publicField(this, "metadata");
__publicField(this, "share_channel");
this.metadata = parser_exports.parseItem(data.metadata, AboutChannelView);
this.share_channel = parser_exports.parseItem(data.shareChannel, Button);
}
};
__name(_AboutChannel, "AboutChannel");
__publicField(_AboutChannel, "type", "AboutChannel");
var AboutChannel = _AboutChannel;
// dist/src/parser/classes/AccountChannel.js
var _AccountChannel = class _AccountChannel extends YTNode {
constructor(data) {
super();
__publicField(this, "title");
__publicField(this, "endpoint");
this.title = new Text2(data.title);
this.endpoint = new NavigationEndpoint(data.navigationEndpoint);
}
};
__name(_AccountChannel, "AccountChannel");
__publicField(_AccountChannel, "type", "AccountChannel");
var AccountChannel = _AccountChannel;
// dist/src/parser/classes/AccountItem.js
var _AccountItem = class _AccountItem extends YTNode {
constructor(data) {
super();
__publicField(this, "account_name");
__publicField(this, "account_photo");
__publicField(this, "is_selected");
__publicField(this, "is_disabled");
__publicField(this, "has_channel");
__publicField(this, "endpoint");
__publicField(this, "account_byline");
__publicField(this, "channel_handle");
this.account_name = new Text2(data.accountName);
this.account_photo = Thumbnail.fromResponse(data.accountPhoto);
this.is_selected = !!data.isSelected;
this.is_disabled = !!data.isDisabled;
this.has_channel = !!data.hasChannel;
this.endpoint = new NavigationEndpoint(data.serviceEndpoint);
this.account_byline = new Text2(data.accountByline);
this.channel_handle = new Text2(data.channelHandle);
}
};
__name(_AccountItem, "AccountItem");
__publicField(_AccountItem, "type", "AccountItem");
var AccountItem = _AccountItem;
// dist/src/parser/classes/AccountItemSectionHeader.js
var _AccountItemSectionHeader = class _AccountItemSectionHeader extends YTNode {
constructor(data) {
super();
__publicField(this, "title");
this.title = new Text2(data.title);
}
};
__name(_AccountItemSectionHeader, "AccountItemSectionHeader");
__publicField(_AccountItemSectionHeader, "type", "AccountItemSectionHeader");
var AccountItemSectionHeader = _AccountItemSectionHeader;
// dist/src/parser/classes/CompactLink.js
var _CompactLink = class _CompactLink extends YTNode {
constructor(data) {
super();
__publicField(this, "title");
__publicField(this, "subtitle");
__publicField(this, "endpoint");
__publicField(this, "style");
__publicField(this, "icon_type");
__publicField(this, "secondary_icon_type");
this.title = new Text2(data.title).toString();
if ("subtitle" in data)
this.subtitle = new Text2(data.subtitle);
if ("icon" in data && "iconType" in data.icon)
this.icon_type = data.icon.iconType;
if ("secondaryIcon" in data && "iconType" in data.secondaryIcon)
this.secondary_icon_type = data.secondaryIcon.iconType;
this.endpoint = new NavigationEndpoint(data.navigationEndpoint || data.serviceEndpoint);
this.style = data.style;
}
};
__name(_CompactLink, "CompactLink");
__publicField(_CompactLink, "type", "CompactLink");
var CompactLink = _CompactLink;
// dist/src/parser/classes/AccountItemSection.js
var _AccountItemSection = class _AccountItemSection extends YTNode {
constructor(data) {
super();
__publicField(this, "contents");
__publicField(this, "header");
this.contents = parser_exports.parseArray(data.contents, [AccountItem, CompactLink]);
this.header = parser_exports.parseItem(data.header, AccountItemSectionHeader);
}
};
__name(_AccountItemSection, "AccountItemSection");
__publicField(_AccountItemSection, "type", "AccountItemSection");
var AccountItemSection = _AccountItemSection;
// dist/src/parser/classes/AccountSectionList.js
var _AccountSectionList = class _AccountSectionList extends YTNode {
constructor(data) {
super();
__publicField(this, "contents");
__publicField(this, "footers");
this.contents = parser_exports.parseArray(data.contents, AccountItemSection);
this.footers = parser_exports.parseArray(data.footers, AccountChannel);
}
};
__name(_AccountSectionList, "AccountSectionList");
__publicField(_AccountSectionList, "type", "AccountSectionList");
var AccountSectionList = _AccountSectionList;
// dist/src/parser/classes/actions/AppendContinuationItemsAction.js
var _AppendContinuationItemsAction = class _AppendContinuationItemsAction extends YTNode {
constructor(data) {
super();
__publicField(this, "contents");
__publicField(this, "target");
this.contents = parser_exports.parseArray(data.continuationItems);
this.target = data.target;
}
};
__name(_AppendContinuationItemsAction, "AppendContinuationItemsAction");
__publicField(_AppendContinuationItemsAction, "type", "AppendContinuationItemsAction");
var AppendContinuationItemsAction = _AppendContinuationItemsAction;
// dist/src/parser/classes/actions/ChangeEngagementPanelVisibilityAction.js
var _ChangeEngagementPanelVisibilityAction = class _ChangeEngagementPanelVisibilityAction extends YTNode {
constructor(data) {
super();
__publicField(this, "target_id");
__publicField(this, "visibility");
this.target_id = data.targetId;
this.visibility = data.visibility;
}
};
__name(_ChangeEngagementPanelVisibilityAction, "ChangeEngagementPanelVisibilityAction");
__publicField(_ChangeEngagementPanelVisibilityAction, "type", "ChangeEngagementPanelVisibilityAction");
var ChangeEngagementPanelVisibilityAction = _ChangeEngagementPanelVisibilityAction;
// dist/src/parser/classes/menus/MultiPageMenu.js
var _MultiPageMenu = class _MultiPageMenu extends YTNode {
constructor(data) {
super();
__publicField(this, "header");
__publicField(this, "sections");
__publicField(this, "style");
this.header = parser_exports.parseItem(data.header);
this.sections = parser_exports.parseArray(data.sections);
this.style = data.style;
}
};
__name(_MultiPageMenu, "MultiPageMenu");
__publicField(_MultiPageMenu, "type", "MultiPageMenu");
var MultiPageMenu = _MultiPageMenu;
// dist/src/parser/classes/actions/GetMultiPageMenuAction.js
var _GetMultiPageMenuAction = class _GetMultiPageMenuAction extends YTNode {
constructor(data) {
super();
__publicField(this, "menu");
this.menu = parser_exports.parseItem(data.menu, MultiPageMenu);
}
};
__name(_GetMultiPageMenuAction, "GetMultiPageMenuAction");
__publicField(_GetMultiPageMenuAction, "type", "GetMultiPageMenuAction");
var GetMultiPageMenuAction = _GetMultiPageMenuAction;
// dist/src/parser/classes/actions/SendFeedbackAction.js
var _SendFeedbackAction = class _SendFeedbackAction extends YTNode {
constructor(data) {
super();
__publicField(this, "bucket");
this.bucket = data.bucket;
}
};
__name(_SendFeedbackAction, "SendFeedbackAction");
__publicField(_SendFeedbackAction, "type", "SendFeedbackAction");
var SendFeedbackAction = _SendFeedbackAction;
// dist/src/parser/classes/actions/SignalAction.js
var _SignalAction = class _SignalAction extends YTNode {
constructor(data) {
super();
__publicField(this, "signal");
this.signal = data.signal;
}
};
__name(_SignalAction, "SignalAction");
__publicField(_SignalAction, "type", "SignalAction");
var SignalAction = _SignalAction;
// dist/src/parser/classes/ChannelSwitcherPage.js
var _ChannelSwitcherPage = class _ChannelSwitcherPage extends YTNode {
constructor(data) {
super();
__publicField(this, "header");
__publicField(this, "contents");
this.header = parser_exports.parseItem(data.header);
this.contents = parser_exports.parse(data.contents, true);
}
};
__name(_ChannelSwitcherPage, "ChannelSwitcherPage");
__publicField(_ChannelSwitcherPage, "type", "ChannelSwitcherPage");
var ChannelSwitcherPage = _ChannelSwitcherPage;
// dist/src/parser/classes/actions/UpdateChannelSwitcherPageAction.js
var _UpdateChannelSwitcherPageAction = class _UpdateChannelSwitcherPageAction extends YTNode {
constructor(data) {
super();
__publicField(this, "header");
__publicField(this, "contents");
const page = parser_exports.parseItem(data.page, ChannelSwitcherPage);
if (page) {
this.header = page.header;
this.contents = page.contents;
}
}
};
__name(_UpdateChannelSwitcherPageAction, "UpdateChannelSwitcherPageAction");
__publicField(_UpdateChannelSwitcherPageAction, "type", "UpdateChannelSwitcherPageAction");
var UpdateChannelSwitcherPageAction = _UpdateChannelSwitcherPageAction;
// dist/src/parser/classes/SortFilterSubMenu.js
var _SortFilterSubMenu = class _SortFilterSubMenu extends YTNode {
constructor(data) {
super();
__publicField(this, "title");
__publicField(this, "icon_type");
__publicField(this, "tooltip");
__publicField(this, "sub_menu_items");
__publicField(this, "accessibility");
if ("title" in data) {
this.title = data.title;
}
if ("icon" in data) {
this.icon_type = data.icon.iconType;
}
if ("tooltip" in data) {
this.tooltip = data.tooltip;
}
if ("subMenuItems" in data) {
this.sub_menu_items = data.subMenuItems.map((item) => ({
title: item.title,
selected: item.selected,
continuation: item.continuation?.reloadContinuationData?.continuation,
endpoint: new NavigationEndpoint(item.serviceEndpoint || item.navigationEndpoint),
subtitle: item.subtitle || null
}));
}
if ("accessibility" in data && "accessibilityData" in data.accessibility) {
this.accessibility = {
accessibility_data: new AccessibilityData(data.accessibility.accessibilityData)
};
}
}
get label() {
return this.accessibility?.accessibility_data?.label;
}
};
__name(_SortFilterSubMenu, "SortFilterSubMenu");
__publicField(_SortFilterSubMenu, "type", "SortFilterSubMenu");
var SortFilterSubMenu = _SortFilterSubMenu;
// dist/src/parser/classes/TranscriptFooter.js
var _TranscriptFooter = class _TranscriptFooter extends YTNode {
constructor(data) {
super();
__publicField(this, "language_menu");
this.language_menu = parser_exports.parseItem(data.languageMenu, SortFilterSubMenu);
}
};
__name(_TranscriptFooter, "TranscriptFooter");
__publicField(_TranscriptFooter, "type", "TranscriptFooter");
var TranscriptFooter = _TranscriptFooter;
// dist/src/parser/classes/TranscriptSearchBox.js
var _TranscriptSearchBox = class _TranscriptSearchBox extends YTNode {
constructor(data) {
super();
__publicField(this, "formatted_placeholder");
__publicField(this, "clear_button");
__publicField(this, "endpoint");
__publicField(this, "search_button");
this.formatted_placeholder = new Text2(data.formattedPlaceholder);
this.clear_button = parser_exports.parseItem(data.clearButton, Button);
this.endpoint = new NavigationEndpoint(data.onTextChangeCommand);
this.search_button = parser_exports.parseItem(data.searchButton, Button);
}
};
__name(_TranscriptSearchBox, "TranscriptSearchBox");
__publicField(_TranscriptSearchBox, "type", "TranscriptSearchBox");
var TranscriptSearchBox = _TranscriptSearchBox;
// dist/src/parser/classes/TranscriptSectionHeader.js
var _TranscriptSectionHeader = class _TranscriptSectionHeader extends YTNode {
constructor(data) {
super();
__publicField(this, "start_ms");
__publicField(this, "end_ms");
__publicField(this, "snippet");
this.start_ms = data.startMs;
this.end_ms = data.endMs;
this.snippet = new Text2(data.snippet);
}
};
__name(_TranscriptSectionHeader, "TranscriptSectionHeader");
__publicField(_TranscriptSectionHeader, "type", "TranscriptSectionHeader");
var TranscriptSectionHeader = _TranscriptSectionHeader;
// dist/src/parser/classes/TranscriptSegment.js
var _TranscriptSegment = class _TranscriptSegment extends YTNode {
constructor(data) {
super();
__publicField(this, "start_ms");
__publicField(this, "end_ms");
__publicField(this, "snippet");
__publicField(this, "start_time_text");
__publicField(this, "target_id");
this.start_ms = data.startMs;
this.end_ms = data.endMs;
this.snippet = new Text2(data.snippet);
this.start_time_text = new Text2(data.startTimeText);
this.target_id = data.targetId;
}
};
__name(_TranscriptSegment, "TranscriptSegment");
__publicField(_TranscriptSegment, "type", "TranscriptSegment");
var TranscriptSegment = _TranscriptSegment;
// dist/src/parser/classes/TranscriptSegmentList.js
var _TranscriptSegmentList = class _TranscriptSegmentList extends YTNode {
constructor(data) {
super();
__publicField(this, "initial_segments");
__publicField(this, "no_result_label");
__publicField(this, "retry_label");
__publicField(this, "touch_captions_enabled");
this.initial_segments = parser_exports.parseArray(data.initialSegments, [TranscriptSegment, TranscriptSectionHeader]);
this.no_result_label = new Text2(data.noResultLabel);
this.retry_label = new Text2(data.retryLabel);
this.touch_captions_enabled = data.touchCaptionsEnabled;
}
};
__name(_TranscriptSegmentList, "TranscriptSegmentList");
__publicField(_TranscriptSegmentList, "type", "TranscriptSegmentList");
var TranscriptSegmentList = _TranscriptSegmentList;
// dist/src/parser/classes/TranscriptSearchPanel.js
var _TranscriptSearchPanel = class _TranscriptSearchPanel extends YTNode {
constructor(data) {
super();
__publicField(this, "header");
__publicField(this, "body");
__publicField(this, "footer");
__publicField(this, "target_id");
this.header = parser_exports.parseItem(data.header, TranscriptSearchBox);
this.body = parser_exports.parseItem(data.body, TranscriptSegmentList);
this.footer = parser_exports.parseItem(data.footer, TranscriptFooter);
this.target_id = data.targetId;
}
};
__name(_TranscriptSearchPanel, "TranscriptSearchPanel");
__publicField(_TranscriptSearchPanel, "type", "TranscriptSearchPanel");
var TranscriptSearchPanel = _TranscriptSearchPanel;
// dist/src/parser/classes/Transcript.js
var _Transcript = class _Transcript extends YTNode {
constructor(data) {
super();
__publicField(this, "content");
this.content = parser_exports.parseItem(data.content, TranscriptSearchPanel);
}
};
__name(_Transcript, "Transcript");
__publicField(_Transcript, "type", "Transcript");
var Transcript = _Transcript;
// dist/src/parser/classes/actions/UpdateEngagementPanelAction.js
var _UpdateEngagementPanelAction = class _UpdateEngagementPanelAction extends YTNode {
constructor(data) {
super();
__publicField(this, "target_id");
__publicField(this, "content");
this.target_id = data.targetId;
this.content = parser_exports.parseItem(data.content, Transcript);
}
};
__name(_UpdateEngagementPanelAction, "UpdateEngagementPanelAction");
__publicField(_UpdateEngagementPanelAction, "type", "UpdateEngagementPanelAction");
var UpdateEngagementPanelAction = _UpdateEngagementPanelAction;
// dist/src/parser/classes/actions/UpdateSubscribeButtonAction.js
var _UpdateSubscribeButtonAction = class _UpdateSubscribeButtonAction extends YTNode {
constructor(data) {
super();
__publicField(this, "channel_id");
__publicField(this, "subscribed");
this.channel_id = data.channelId;
this.subscribed = data.subscribed;
}
};
__name(_UpdateSubscribeButtonAction, "UpdateSubscribeButtonAction");
__publicField(_UpdateSubscribeButtonAction, "type", "UpdateSubscribeButtonAction");
var UpdateSubscribeButtonAction = _UpdateSubscribeButtonAction;
// dist/src/parser/classes/ActiveAccountHeader.js
var _ActiveAccountHeader = class _ActiveAccountHeader extends YTNode {
constructor(data) {
super();
__publicField(this, "account_name");
__publicField(this, "account_photo");
__publicField(this, "endpoint");
__publicField(this, "manage_account_title");
__publicField(this, "channel_handle");
this.account_name = new Text2(data.accountName);
this.account_photo = Thumbnail.fromResponse(data.accountPhoto);
this.endpoint = new NavigationEndpoint(data.serviceEndpoint);
this.manage_account_title = new Text2(data.manageAccountTitle);
this.channel_handle = new Text2(data.channelHandle);
}
};
__name(_ActiveAccountHeader, "ActiveAccountHeader");
__publicField(_ActiveAccountHeader, "type", "ActiveAccountHeader");
var ActiveAccountHeader = _ActiveAccountHeader;
// dist/src/parser/classes/MenuTitle.js
var _MenuTitle = class _MenuTitle extends YTNode {
constructor(data) {
super();
__publicField(this, "title");
this.title = new Text2(data.title);
}
};
__name(_MenuTitle, "MenuTitle");
__publicField(_MenuTitle, "type", "MenuTitle");
var MenuTitle = _MenuTitle;
// dist/src/parser/classes/PlaylistAddToOption.js
var _PlaylistAddToOption = class _PlaylistAddToOption extends YTNode {
constructor(data) {
super();
__publicField(this, "add_to_playlist_service_endpoint");
__publicField(this, "contains_selected_videos");
__publicField(this, "playlist_id");
__publicField(this, "privacy");
__publicField(this, "privacy_icon");
__publicField(this, "remove_from_playlist_service_endpoint");
__publicField(this, "title");
this.add_to_playlist_service_endpoint = new NavigationEndpoint(data.addToPlaylistServiceEndpoint);
this.contains_selected_videos = data.containsSelectedVideos;
this.playlist_id = data.playlistId;
this.privacy = data.privacy;
this.privacy_icon = { icon_type: data.privacyIcon?.iconType || null };
this.remove_from_playlist_service_endpoint = new NavigationEndpoint(data.removeFromPlaylistServiceEndpoint);
this.title = new Text2(data.title);
}
};
__name(_PlaylistAddToOption, "PlaylistAddToOption");
__publicField(_PlaylistAddToOption, "type", "PlaylistAddToOption");
var PlaylistAddToOption = _PlaylistAddToOption;
// dist/src/parser/classes/AddToPlaylist.js
var _AddToPlaylist = class _AddToPlaylist extends YTNode {
constructor(data) {
super();
__publicField(this, "actions");
__publicField(this, "playlists");
this.actions = parser_exports.parseArray(data.actions, [MenuTitle, Button]);
this.playlists = parser_exports.parseArray(data.playlists, PlaylistAddToOption);
}
};
__name(_AddToPlaylist, "AddToPlaylist");
__publicField(_AddToPlaylist, "type", "AddToPlaylist");
var AddToPlaylist = _AddToPlaylist;
// dist/src/parser/classes/Alert.js
var _Alert = class _Alert extends YTNode {
constructor(data) {
super();
__publicField(this, "text");
__publicField(this, "alert_type");
this.text = new Text2(data.text);
this.alert_type = data.type;
}
};
__name(_Alert, "Alert");
__publicField(_Alert, "type", "Alert");
var Alert = _Alert;
// dist/src/parser/classes/AlertWithButton.js
var _AlertWithButton = class _AlertWithButton extends YTNode {
constructor(data) {
super();
__publicField(this, "text");
__publicField(this, "alert_type");
__publicField(this, "dismiss_button");
this.text = new Text2(data.text);
this.alert_type = data.type;
this.dismiss_button = parser_exports.parseItem(data.dismissButton, Button);
}
};
__name(_AlertWithButton, "AlertWithButton");
__publicField(_AlertWithButton, "type", "AlertWithButton");
var AlertWithButton = _AlertWithButton;
// dist/src/parser/classes/AnimatedThumbnailOverlayView.js
var _AnimatedThumbnailOverlayView = class _AnimatedThumbnailOverlayView extends YTNode {
constructor(data) {
super();
__publicField(this, "thumbnail");
this.thumbnail = Thumbnail.fromResponse(data.thumbnail);
}
};
__name(_AnimatedThumbnailOverlayView, "AnimatedThumbnailOverlayView");
__publicField(_AnimatedThumbnailOverlayView, "type", "AnimatedThumbnailOverlayView");
var AnimatedThumbnailOverlayView = _AnimatedThumbnailOverlayView;
// dist/src/parser/classes/AttributionView.js
var _AttributionView = class _AttributionView extends YTNode {
constructor(data) {
super();
__publicField(this, "text");
__publicField(this, "suffix");
this.text = Text2.fromAttributed(data.text);
this.suffix = Text2.fromAttributed(data.suffix);
}
};
__name(_AttributionView, "AttributionView");
__publicField(_AttributionView, "type", "AttributionView");
var AttributionView = _AttributionView;
// dist/src/parser/classes/AudioOnlyPlayability.js
var _AudioOnlyPlayability = class _AudioOnlyPlayability extends YTNode {
constructor(data) {
super();
__publicField(this, "audio_only_availability");
this.audio_only_availability = data.audioOnlyAvailability;
}
};
__name(_AudioOnlyPlayability, "AudioOnlyPlayability");
__publicField(_AudioOnlyPlayability, "type", "AudioOnlyPlayability");
var AudioOnlyPlayability = _AudioOnlyPlayability;
// dist/src/parser/classes/AutomixPreviewVideo.js
var _AutomixPreviewVideo = class _AutomixPreviewVideo extends YTNode {
constructor(data) {
super();
__publicField(this, "playlist_video");
if (data?.content?.automixPlaylistVideoRenderer?.navigationEndpoint) {
this.playlist_video = {
endpoint: new NavigationEndpoint(data.content.automixPlaylistVideoRenderer.navigationEndpoint)
};
}
}
};
__name(_AutomixPreviewVideo, "AutomixPreviewVideo");
__publicField(_AutomixPreviewVideo, "type", "AutomixPreviewVideo");
var AutomixPreviewVideo = _AutomixPreviewVideo;
// dist/src/parser/classes/AvatarView.js
var _AvatarView = class _AvatarView extends YTNode {
constructor(data) {
super();
__publicField(this, "image");
__publicField(this, "image_processor");
__publicField(this, "avatar_image_size");
this.image = Thumbnail.fromResponse(data.image);
this.avatar_image_size = data.avatarImageSize;
if (data.image.processor) {
this.image_processor = {
border_image_processor: {
circular: data.image.processor.borderImageProcessor.circular
}
};
}
}
};
__name(_AvatarView, "AvatarView");
__publicField(_AvatarView, "type", "AvatarView");
var AvatarView = _AvatarView;
// dist/src/parser/classes/misc/CommandContext.js
var _CommandContext = class _CommandContext {
constructor(data) {
__publicField(this, "on_focus");
__publicField(this, "on_hidden");
__publicField(this, "on_touch_end");
__publicField(this, "on_touch_move");
__publicField(this, "on_long_press");
__publicField(this, "on_tap");
__publicField(this, "on_touch_start");
__publicField(this, "on_visible");
__publicField(this, "on_first_visible");
__publicField(this, "on_hover");
if ("onFocus" in data)
this.on_focus = new NavigationEndpoint(data.onFocus);
if ("onHidden" in data)
this.on_hidden = new NavigationEndpoint(data.onHidden);
if ("onTouchEnd" in data)
this.on_touch_end = new NavigationEndpoint(data.onTouchEnd);
if ("onTouchMove" in data)
this.on_touch_move = new NavigationEndpoint(data.onTouchMove);
if ("onLongPress" in data)
this.on_long_press = new NavigationEndpoint(data.onLongPress);
if ("onTap" in data)
this.on_tap = new NavigationEndpoint(data.onTap);
if ("onTouchStart" in data)
this.on_touch_start = new NavigationEndpoint(data.onTouchStart);
if ("onVisible" in data)
this.on_visible = new NavigationEndpoint(data.onVisible);
if ("onFirstVisible" in data)
this.on_first_visible = new NavigationEndpoint(data.onFirstVisible);
if ("onHover" in data)
this.on_hover = new NavigationEndpoint(data.onHover);
}
};
__name(_CommandContext, "CommandContext");
var CommandContext = _CommandContext;
// dist/src/parser/classes/misc/RendererContext.js
var _RendererContext = class _RendererContext {
constructor(data) {
__publicField(this, "command_context");
__publicField(this, "accessibility_context");
if (!data)
return;
if ("commandContext" in data) {
this.command_context = new CommandContext(data.commandContext);
}
if ("accessibilityContext" in data) {
this.accessibility_context = new AccessibilityContext(data.accessibilityContext);
}
}
};
__name(_RendererContext, "RendererContext");
var RendererContext = _RendererContext;
// dist/src/parser/classes/AvatarStackView.js
var _AvatarStackView = class _AvatarStackView extends YTNode {
constructor(data) {
super();
__publicField(this, "avatars");
__publicField(this, "text");
__publicField(this, "renderer_context");
this.avatars = parser_exports.parseArray(data.avatars, AvatarView);
if (Reflect.has(data, "text"))
this.text = Text2.fromAttributed(data.text);
this.renderer_context = new RendererContext(data.rendererContext);
}
};
__name(_AvatarStackView, "AvatarStackView");
__publicField(_AvatarStackView, "type", "AvatarStackView");
var AvatarStackView = _AvatarStackView;
// dist/src/parser/classes/ButtonView.js
var _ButtonView = class _ButtonView extends YTNode {
constructor(data) {
super();
__publicField(this, "secondary_icon_image");
__publicField(this, "icon_name");
__publicField(this, "enable_icon_button");
__publicField(this, "tooltip");
__publicField(this, "icon_image_flip_for_rtl");
__publicField(this, "button_size");
__publicField(this, "icon_position");
__publicField(this, "is_full_width");
__publicField(this, "state");
__publicField(this, "on_disabled_tap");
__publicField(this, "custom_border_color");
__publicField(this, "on_tap");
__publicField(this, "style");
__publicField(this, "icon_image");
__publicField(this, "custom_dark_theme_border_color");
__publicField(this, "title");
__publicField(this, "target_id");
__publicField(this, "enable_full_width_margins");
__publicField(this, "custom_font_color");
__publicField(this, "button_type");
__publicField(this, "enabled");
__publicField(this, "accessibility_id");
__publicField(this, "custom_background_color");
__publicField(this, "on_long_press");
__publicField(this, "title_formatted");
__publicField(this, "on_visible");
__publicField(this, "icon_trailing");
__publicField(this, "accessibility_text");
if ("secondaryIconImage" in data)
this.secondary_icon_image = Thumbnail.fromResponse(data.secondaryIconImage);
if ("iconName" in data)
this.icon_name = data.iconName;
if ("enableIconButton" in data)
this.enable_icon_button = data.enableIconButton;
if ("tooltip" in data)
this.tooltip = data.tooltip;
if ("iconImageFlipForRtl" in data)
this.icon_image_flip_for_rtl = data.iconImageFlipForRtl;
if ("buttonSize" in data)
this.button_size = data.buttonSize;
if ("iconPosition" in data)
this.icon_position = data.iconPosition;
if ("isFullWidth" in data)
this.is_full_width = data.isFullWidth;
if ("state" in data)
this.state = data.state;
if ("onDisabledTap" in data)
this.on_disabled_tap = new NavigationEndpoint(data.onDisabledTap);
if ("customBorderColor" in data)
this.custom_border_color = data.customBorderColor;
if ("onTap" in data)
this.on_tap = new NavigationEndpoint(data.onTap);
if ("style" in data)
this.style = data.style;
if ("iconImage" in data)
this.icon_image = data.iconImage;
if ("customDarkThemeBorderColor" in data)
this.custom_dark_theme_border_color = data.customDarkThemeBorderColor;
if ("title" in data)
this.title = data.title;
if ("targetId" in data)
this.target_id = data.targetId;
if ("enableFullWidthMargins" in data)
this.enable_full_width_margins = data.enableFullWidthMargins;
if ("customFontColor" in data)
this.custom_font_color = data.customFontColor;
if ("type" in data)
this.button_type = data.type;
if ("enabled" in data)
this.enabled = data.enabled;
if ("accessibilityId" in data)
this.accessibility_id = data.accessibilityId;
if ("customBackgroundColor" in data)
this.custom_background_color = data.customBackgroundColor;
if ("onLongPress" in data)
this.on_long_press = new NavigationEndpoint(data.onLongPress);
if ("titleFormatted" in data)
this.title_formatted = data.titleFormatted;
if ("onVisible" in data)
this.on_visible = data.onVisible;
if ("iconTrailing" in data)
this.icon_trailing = data.iconTrailing;
if ("accessibilityText" in data)
this.accessibility_text = data.accessibilityText;
}
};
__name(_ButtonView, "ButtonView");
__publicField(_ButtonView, "type", "ButtonView");
var ButtonView = _ButtonView;
// dist/src/parser/classes/BackgroundPromo.js
var _BackgroundPromo = class _BackgroundPromo extends YTNode {
constructor(data) {
super();
__publicField(this, "body_text");
__publicField(this, "cta_button");
__publicField(this, "icon_type");
__publicField(this, "title");
this.body_text = new Text2(data.bodyText);
this.cta_button = parser_exports.parseItem(data.ctaButton, [Button, ButtonView]);
if (Reflect.has(data, "icon"))
this.icon_type = data.icon.iconType;
this.title = new Text2(data.title);
}
};
__name(_BackgroundPromo, "BackgroundPromo");
__publicField(_BackgroundPromo, "type", "BackgroundPromo");
var BackgroundPromo = _BackgroundPromo;
// dist/src/parser/classes/BackstageImage.js
var _BackstageImage = class _BackstageImage extends YTNode {
constructor(data) {
super();
__publicField(this, "image");
__publicField(this, "endpoint");
this.image = Thumbnail.fromResponse(data.image);
this.endpoint = new NavigationEndpoint(data.command);
}
};
__name(_BackstageImage, "BackstageImage");
__publicField(_BackstageImage, "type", "BackstageImage");
var BackstageImage = _BackstageImage;
// dist/src/parser/classes/ToggleButton.js
var _ToggleButton = class _ToggleButton extends YTNode {
constructor(data) {
super();
__publicField(this, "text");
__publicField(this, "toggled_text");
__publicField(this, "tooltip");
__publicField(this, "toggled_tooltip");
__publicField(this, "is_toggled");
__publicField(this, "is_disabled");
__publicField(this, "icon_type");
__publicField(this, "like_count");
__publicField(this, "short_like_count");
__publicField(this, "endpoint");
__publicField(this, "toggled_endpoint");
__publicField(this, "button_id");
__publicField(this, "target_id");
this.text = new Text2(data.defaultText);
this.toggled_text = new Text2(data.toggledText);
this.tooltip = data.defaultTooltip;
this.toggled_tooltip = data.toggledTooltip;
this.is_toggled = data.isToggled;
this.is_disabled = data.isDisabled;
this.icon_type = data.defaultIcon?.iconType;
const acc_label = data?.defaultText?.accessibility?.accessibilityData?.label || data?.accessibilityData?.accessibilityData?.label || data?.accessibility?.label;
if (this.icon_type == "LIKE") {
this.like_count = parseInt(acc_label.replace(/\D/g, ""));
this.short_like_count = new Text2(data.defaultText).toString();
}
this.endpoint = data.defaultServiceEndpoint?.commandExecutorCommand?.commands ? new NavigationEndpoint(data.defaultServiceEndpoint.commandExecutorCommand.commands.pop()) : new NavigationEndpoint(data.defaultServiceEndpoint);
this.toggled_endpoint = new NavigationEndpoint(data.toggledServiceEndpoint);
if (Reflect.has(data, "toggleButtonSupportedData") && Reflect.has(data.toggleButtonSupportedData, "toggleButtonIdData")) {
this.button_id = data.toggleButtonSupportedData.toggleButtonIdData.id;
}
if (Reflect.has(data, "targetId")) {
this.target_id = data.targetId;
}
}
};
__name(_ToggleButton, "ToggleButton");
__publicField(_ToggleButton, "type", "ToggleButton");
var ToggleButton = _ToggleButton;
// dist/src/parser/classes/comments/CreatorHeart.js
var _CreatorHeart = class _CreatorHeart extends YTNode {
constructor(data) {
super();
__publicField(this, "creator_thumbnail");
__publicField(this, "heart_icon_type");
__publicField(this, "heart_color");
__publicField(this, "hearted_tooltip");
__publicField(this, "is_hearted");
__publicField(this, "is_enabled");
__publicField(this, "kennedy_heart_color_string");
this.creator_thumbnail = Thumbnail.fromResponse(data.creatorThumbnail);
if (Reflect.has(data, "heartIcon") && Reflect.has(data.heartIcon, "iconType")) {
this.heart_icon_type = data.heartIcon.iconType;
}
this.heart_color = {
basic_color_palette_data: {
foreground_title_color: data.heartColor?.basicColorPaletteData?.foregroundTitleColor
}
};
this.hearted_tooltip = data.heartedTooltip;
this.is_hearted = data.isHearted;
this.is_enabled = data.isEnabled;
this.kennedy_heart_color_string = data.kennedyHeartColorString;
}
};
__name(_CreatorHeart, "CreatorHeart");
__publicField(_CreatorHeart, "type", "CreatorHeart");
var CreatorHeart = _CreatorHeart;
// dist/src/parser/classes/comments/CommentActionButtons.js
var _CommentActionButtons = class _CommentActionButtons extends YTNode {
constructor(data) {
super();
__publicField(this, "like_button");
__publicField(this, "dislike_button");
__publicField(this, "reply_button");
__publicField(this, "creator_heart");
this.like_button = parser_exports.parseItem(data.likeButton, ToggleButton);
this.dislike_button = parser_exports.parseItem(data.dislikeButton, ToggleButton);
this.reply_button = parser_exports.parseItem(data.replyButton, Button);
this.creator_heart = parser_exports.parseItem(data.creatorHeart, CreatorHeart);
}
};
__name(_CommentActionButtons, "CommentActionButtons");
__publicField(_CommentActionButtons, "type", "CommentActionButtons");
var CommentActionButtons = _CommentActionButtons;
// dist/src/parser/classes/ToggleButtonView.js
var _ToggleButtonView = class _ToggleButtonView extends YTNode {
constructor(data) {
super();
__publicField(this, "default_button");
__publicField(this, "toggled_button");
__publicField(this, "is_toggling_disabled");
__publicField(this, "identifier");
__publicField(this, "is_toggled");
this.default_button = parser_exports.parseItem(data.defaultButtonViewModel, ButtonView);
this.toggled_button = parser_exports.parseItem(data.toggledButtonViewModel, ButtonView);
this.is_toggling_disabled = data.isTogglingDisabled;
this.identifier = data.identifier;
if (Reflect.has(data, "isToggled")) {
this.is_toggled = data.isToggled;
}
}
};
__name(_ToggleButtonView, "ToggleButtonView");
__publicField(_ToggleButtonView, "type", "ToggleButtonView");
var ToggleButtonView = _ToggleButtonView;
// dist/src/parser/classes/LikeButtonView.js
var _LikeButtonView = class _LikeButtonView extends YTNode {
constructor(data) {
super();
__publicField(this, "toggle_button");
__publicField(this, "like_status_entity_key");
__publicField(this, "like_status_entity");
this.toggle_button = parser_exports.parseItem(data.toggleButtonViewModel, ToggleButtonView);
this.like_status_entity_key = data.likeStatusEntityKey;
this.like_status_entity = {
key: data.likeStatusEntity.key,
like_status: data.likeStatusEntity.likeStatus
};
}
};
__name(_LikeButtonView, "LikeButtonView");
__publicField(_LikeButtonView, "type", "LikeButtonView");
var LikeButtonView = _LikeButtonView;
// dist/src/parser/classes/DislikeButtonView.js
var _DislikeButtonView = class _DislikeButtonView extends YTNode {
constructor(data) {
super();
__publicField(this, "toggle_button");
__publicField(this, "dislike_entity_key");
this.toggle_button = parser_exports.parseItem(data.toggleButtonViewModel, ToggleButtonView);
this.dislike_entity_key = data.dislikeEntityKey;
}
};
__name(_DislikeButtonView, "DislikeButtonView");
__publicField(_DislikeButtonView, "type", "DislikeButtonView");
var DislikeButtonView = _DislikeButtonView;
// dist/src/parser/classes/SegmentedLikeDislikeButtonView.js
var _SegmentedLikeDislikeButtonView = class _SegmentedLikeDislikeButtonView extends YTNode {
constructor(data) {
super();
__publicField(this, "like_button");
__publicField(this, "dislike_button");
__publicField(this, "icon_type");
__publicField(this, "like_count_entity");
__publicField(this, "dynamic_like_count_update_data");
__publicField(this, "like_count");
__publicField(this, "short_like_count");
this.like_button = parser_exports.parseItem(data.likeButtonViewModel, LikeButtonView);
this.dislike_button = parser_exports.parseItem(data.dislikeButtonViewModel, DislikeButtonView);
this.icon_type = data.iconType;
if (this.like_button && this.like_button.toggle_button) {
const toggle_button = this.like_button.toggle_button;
if (toggle_button.default_button) {
this.short_like_count = toggle_button.default_button.title;
if (toggle_button.default_button.accessibility_text)
this.like_count = parseInt(toggle_button.default_button.accessibility_text.replace(/\D/g, ""));
} else if (toggle_button.toggled_button) {
this.short_like_count = toggle_button.toggled_button.title;
if (toggle_button.toggled_button.accessibility_text)
this.like_count = parseInt(toggle_button.toggled_button.accessibility_text.replace(/\D/g, ""));
}
}
this.like_count_entity = {
key: data.likeCountEntity.key
};
this.dynamic_like_count_update_data = {
update_status_key: data.dynamicLikeCountUpdateData.updateStatusKey,
placeholder_like_count_values_key: data.dynamicLikeCountUpdateData.placeholderLikeCountValuesKey,
update_delay_loop_id: data.dynamicLikeCountUpdateData.updateDelayLoopId,
update_delay_sec: data.dynamicLikeCountUpdateData.updateDelaySec
};
}
};
__name(_SegmentedLikeDislikeButtonView, "SegmentedLikeDislikeButtonView");
__publicField(_SegmentedLikeDislikeButtonView, "type", "SegmentedLikeDislikeButtonView");
var SegmentedLikeDislikeButtonView = _SegmentedLikeDislikeButtonView;
// dist/src/parser/classes/menus/MenuServiceItem.js
var _MenuServiceItem = class _MenuServiceItem extends Button {
constructor(data) {
super(data);
}
};
__name(_MenuServiceItem, "MenuServiceItem");
__publicField(_MenuServiceItem, "type", "MenuServiceItem");
var MenuServiceItem = _MenuServiceItem;
// dist/src/parser/classes/DownloadButton.js
var _DownloadButton = class _DownloadButton extends YTNode {
constructor(data) {
super();
__publicField(this, "style");
__publicField(this, "size");
// TODO: check this
__publicField(this, "endpoint");
__publicField(this, "target_id");
this.style = data.style;
this.size = data.size;
this.endpoint = new NavigationEndpoint(data.command);
this.target_id = data.targetId;
}
};
__name(_DownloadButton, "DownloadButton");
__publicField(_DownloadButton, "type", "DownloadButton");
var DownloadButton = _DownloadButton;
// dist/src/parser/classes/menus/MenuServiceItemDownload.js
var _MenuServiceItemDownload = class _MenuServiceItemDownload extends YTNode {
constructor(data) {
super();
__publicField(this, "has_separator");
__publicField(this, "endpoint");
this.has_separator = !!data.hasSeparator;
this.endpoint = new NavigationEndpoint(data.navigationEndpoint || data.serviceEndpoint);
}
};
__name(_MenuServiceItemDownload, "MenuServiceItemDownload");
__publicField(_MenuServiceItemDownload, "type", "MenuServiceItemDownload");
var MenuServiceItemDownload = _MenuServiceItemDownload;
// dist/src/parser/classes/SubscribeButtonView.js
var _SubscribeButtonView_instances, parseButtonContent_fn;
var _SubscribeButtonView = class _SubscribeButtonView extends YTNode {
constructor(data) {
super();
__privateAdd(this, _SubscribeButtonView_instances);
__publicField(this, "subscribe_button_content");
__publicField(this, "unsubscribe_button_content");
__publicField(this, "disable_notification_bell");
__publicField(this, "button_style");
__publicField(this, "is_signed_out");
__publicField(this, "background_style");
__publicField(this, "disable_subscribe_button");
__publicField(this, "on_show_subscription_options");
__publicField(this, "channel_id");
__publicField(this, "enable_subscribe_button_post_click_animation");
__publicField(this, "bell_accessibility_data");
this.subscribe_button_content = __privateMethod(this, _SubscribeButtonView_instances, parseButtonContent_fn).call(this, data.subscribeButtonContent);
this.unsubscribe_button_content = __privateMethod(this, _SubscribeButtonView_instances, parseButtonContent_fn).call(this, data.unsubscribeButtonContent);
this.disable_notification_bell = data.disableNotificationBell;
if ("buttonStyle" in data) {
this.button_style = {
unsubscribed_state_style: data.buttonStyle?.unsubscribedStateStyle,
subscribed_state_style: data.buttonStyle?.subscribedStateStyle
};
}
this.is_signed_out = data.isSignedOut;
this.background_style = data.backgroundStyle;
this.disable_subscribe_button = data.disableSubscribeButton;
if ("onShowSubscriptionOptions" in data) {
this.on_show_subscription_options = new NavigationEndpoint(data.onShowSubscriptionOptions);
}
this.channel_id = data.channelId;
this.enable_subscribe_button_post_click_animation = data.enableSubscribeButtonPostClickAnimation;
if ("bellAccessibilityData" in data) {
this.bell_accessibility_data = {
off_label: data.bellAccessibilityData?.offLabel,
all_label: data.bellAccessibilityData?.allLabel,
occasional_label: data.bellAccessibilityData?.occasionalLabel,
disabled_label: data.bellAccessibilityData?.disabledLabel
};
}
}
};
_SubscribeButtonView_instances = new WeakSet();
parseButtonContent_fn = /* @__PURE__ */ __name(function(data) {
return {
button_text: data.buttonText,
accessibility_text: data.accessibilityText,
image_name: data.imageName,
subscribe_state_subscribed: data.subscribeState.subscribed,
endpoint: new NavigationEndpoint(data.onTapCommand)
};
}, "#parseButtonContent");
__name(_SubscribeButtonView, "SubscribeButtonView");
__publicField(_SubscribeButtonView, "type", "SubscribeButtonView");
var SubscribeButtonView = _SubscribeButtonView;
// dist/src/parser/classes/ListItemView.js
var _ListItemView = class _ListItemView extends YTNode {
constructor(data) {
super();
__publicField(this, "title");
__publicField(this, "subtitle");
__publicField(this, "leading_accessory");
__publicField(this, "renderer_context");
__publicField(this, "trailing_buttons");
if ("title" in data) {
this.title = Text2.fromAttributed(data.title);
}
if ("subtitle" in data) {
this.subtitle = Text2.fromAttributed(data.subtitle);
}
this.leading_accessory = parser_exports.parseItem(data.leadingAccessory, AvatarView);
if ("rendererContext" in data) {
this.renderer_context = new RendererContext(data.rendererContext);
}
this.trailing_buttons = parser_exports.parseArray(data.trailingButtons?.buttons, SubscribeButtonView);
}
};
__name(_ListItemView, "ListItemView");
__publicField(_ListItemView, "type", "ListItemView");
var ListItemView = _ListItemView;
// dist/src/parser/classes/menus/MenuFlexibleItem.js
var _MenuFlexibleItem = class _MenuFlexibleItem extends YTNode {
constructor(data) {
super();
__publicField(this, "menu_item");
__publicField(this, "top_level_button");
this.menu_item = parser_exports.parseItem(data.menuItem, [ListItemView, MenuServiceItem, MenuServiceItemDownload]);
this.top_level_button = parser_exports.parseItem(data.topLevelButton, [DownloadButton, ButtonView, Button]);
}
};
__name(_MenuFlexibleItem, "MenuFlexibleItem");
__publicField(_MenuFlexibleItem, "type", "MenuFlexibleItem");
var MenuFlexibleItem = _MenuFlexibleItem;
// dist/src/parser/classes/LikeButton.js
var _LikeButton = class _LikeButton extends YTNode {
constructor(data) {
super();
__publicField(this, "target");
__publicField(this, "like_status");
__publicField(this, "likes_allowed");
__publicField(this, "endpoints");
this.target = {
video_id: data.target.videoId
};
this.like_status = data.likeStatus;
this.likes_allowed = data.likesAllowed;
if (Reflect.has(data, "serviceEndpoints")) {
this.endpoints = data.serviceEndpoints.map((endpoint) => new NavigationEndpoint(endpoint));
}
}
};
__name(_LikeButton, "LikeButton");
__publicField(_LikeButton, "type", "LikeButton");
var LikeButton = _LikeButton;
// dist/src/parser/classes/FlexibleActionsView.js
var _FlexibleActionsView = class _FlexibleActionsView extends YTNode {
constructor(data) {
super();
__publicField(this, "actions_rows");
__publicField(this, "style");
this.actions_rows = data.actionsRows.map((row) => ({
actions: parser_exports.parseArray(row.actions, [ButtonView, ToggleButtonView, SubscribeButtonView])
}));
this.style = data.style;
}
};
__name(_FlexibleActionsView, "FlexibleActionsView");
__publicField(_FlexibleActionsView, "type", "FlexibleActionsView");
var FlexibleActionsView = _FlexibleActionsView;
// dist/src/parser/classes/menus/Menu.js
var _Menu = class _Menu extends YTNode {
constructor(data) {
super();
__publicField(this, "items");
__publicField(this, "flexible_items");
__publicField(this, "top_level_buttons");
__publicField(this, "accessibility");
this.items = parser_exports.parseArray(data.items);
this.flexible_items = parser_exports.parseArray(data.flexibleItems, MenuFlexibleItem);
this.top_level_buttons = parser_exports.parseArray(data.topLevelButtons, [ToggleButton, LikeButton, Button, ButtonView, SegmentedLikeDislikeButtonView, FlexibleActionsView]);
if ("accessibility" in data && "accessibilityData" in data.accessibility) {
this.accessibility = {
accessibility_data: new AccessibilityData(data.accessibility.accessibilityData)
};
}
}
get label() {
return this.accessibility?.accessibility_data?.label;
}
// XXX: alias for consistency
get contents() {
return this.items;
}
};
__name(_Menu, "Menu");
__publicField(_Menu, "type", "Menu");
var Menu = _Menu;
// dist/src/parser/classes/BackstagePost.js
var _BackstagePost = class _BackstagePost extends YTNode {
constructor(data) {
super();
__publicField(this, "id");
__publicField(this, "author");
__publicField(this, "content");
__publicField(this, "published");
__publicField(this, "poll_status");
__publicField(this, "vote_status");
__publicField(this, "vote_count");
__publicField(this, "menu");
__publicField(this, "action_buttons");
__publicField(this, "vote_button");
__publicField(this, "surface");
__publicField(this, "endpoint");
__publicField(this, "attachment");
this.id = data.postId;
this.author = new Author({
...data.authorText,
navigationEndpoint: data.authorEndpoint
}, null, data.authorThumbnail);
this.content = new Text2(data.contentText);
this.published = new Text2(data.publishedTimeText);
if (Reflect.has(data, "pollStatus")) {
this.poll_status = data.pollStatus;
}
if (Reflect.has(data, "voteStatus")) {
this.vote_status = data.voteStatus;
}
if (Reflect.has(data, "voteCount")) {
this.vote_count = new Text2(data.voteCount);
}
if (Reflect.has(data, "actionMenu")) {
this.menu = parser_exports.parseItem(data.actionMenu, Menu);
}
if (Reflect.has(data, "actionButtons")) {
this.action_buttons = parser_exports.parseItem(data.actionButtons, CommentActionButtons);
}
if (Reflect.has(data, "voteButton")) {
this.vote_button = parser_exports.parseItem(data.voteButton, Button);
}
if (Reflect.has(data, "navigationEndpoint")) {
this.endpoint = new NavigationEndpoint(data.navigationEndpoint);
}
if (Reflect.has(data, "backstageAttachment")) {
this.attachment = parser_exports.parseItem(data.backstageAttachment);
}
this.surface = data.surface;
}
};
__name(_BackstagePost, "BackstagePost");
__publicField(_BackstagePost, "type", "BackstagePost");
var BackstagePost = _BackstagePost;
// dist/src/parser/classes/BackstagePostThread.js
var _BackstagePostThread = class _BackstagePostThread extends YTNode {
constructor(data) {
super();
__publicField(this, "post");
this.post = parser_exports.parseItem(data.post);
}
};
__name(_BackstagePostThread, "BackstagePostThread");
__publicField(_BackstagePostThread, "type", "BackstagePostThread");
var BackstagePostThread = _BackstagePostThread;
// dist/src/parser/classes/BadgeView.js
var _BadgeView = class _BadgeView extends YTNode {
constructor(data) {
super();
__publicField(this, "text");
__publicField(this, "style");
__publicField(this, "accessibility_label");
this.text = data.badgeText;
this.style = data.badgeStyle;
this.accessibility_label = data.accessibilityLabel;
}
};
__name(_BadgeView, "BadgeView");
var BadgeView = _BadgeView;
// dist/src/parser/classes/SubFeedOption.js
var _SubFeedOption = class _SubFeedOption extends YTNode {
constructor(data) {
super();
__publicField(this, "name");
__publicField(this, "is_selected");
__publicField(this, "endpoint");
this.name = new Text2(data.name);
this.is_selected = data.isSelected;
this.endpoint = new NavigationEndpoint(data.navigationEndpoint);
}
};
__name(_SubFeedOption, "SubFeedOption");
__publicField(_SubFeedOption, "type", "SubFeedOption");
var SubFeedOption = _SubFeedOption;
// dist/src/parser/classes/SubFeedSelector.js
var _SubFeedSelector = class _SubFeedSelector extends YTNode {
constructor(data) {
super();
__publicField(this, "title");
__publicField(this, "options");
this.title = new Text2(data.title);
this.options = parser_exports.parseArray(data.options, SubFeedOption);
}
};
__name(_SubFeedSelector, "SubFeedSelector");
__publicField(_SubFeedSelector, "type", "SubFeedSelector");
var SubFeedSelector = _SubFeedSelector;
// dist/src/parser/classes/EomSettingsDisclaimer.js
var _EomSettingsDisclaimer = class _EomSettingsDisclaimer extends YTNode {
constructor(data) {
super();
__publicField(this, "disclaimer");
__publicField(this, "info_icon");
__publicField(this, "usage_scenario");
this.disclaimer = new Text2(data.disclaimer);
this.info_icon = {
icon_type: data.infoIcon.iconType
};
this.usage_scenario = data.usageScenario;
}
};
__name(_EomSettingsDisclaimer, "EomSettingsDisclaimer");
__publicField(_EomSettingsDisclaimer, "type", "EomSettingsDisclaimer");
var EomSettingsDisclaimer = _EomSettingsDisclaimer;
// dist/src/parser/classes/SearchBox.js
var _SearchBox = class _SearchBox extends YTNode {
constructor(data) {
super();
__publicField(this, "endpoint");
__publicField(this, "search_button");
__publicField(this, "clear_button");
__publicField(this, "placeholder_text");
this.endpoint = new NavigationEndpoint(data.endpoint);
this.search_button = parser_exports.parseItem(data.searchButton, Button);
this.clear_button = parser_exports.parseItem(data.clearButton, Button);
this.placeholder_text = new Text2(data.placeholderText);
}
};
__name(_SearchBox, "SearchBox");
__publicField(_SearchBox, "type", "SearchBox");
var SearchBox = _SearchBox;
// dist/src/parser/classes/BrowseFeedActions.js
var _BrowseFeedActions = class _BrowseFeedActions extends YTNode {
constructor(data) {
super();
__publicField(this, "contents");
this.contents = parser_exports.parseArray(data.contents, [SubFeedSelector, EomSettingsDisclaimer, ToggleButton, CompactLink, SearchBox, Button]);
}
};
__name(_BrowseFeedActions, "BrowseFeedActions");
__publicField(_BrowseFeedActions, "type", "BrowseFeedActions");
var BrowseFeedActions = _BrowseFeedActions;
// dist/src/parser/classes/BrowserMediaSession.js
var _BrowserMediaSession = class _BrowserMediaSession extends YTNode {
constructor(data) {
super();
__publicField(this, "album");
__publicField(this, "thumbnails");
this.album = new Text2(data.album);
this.thumbnails = Thumbnail.fromResponse(data.thumbnailDetails);
}
};
__name(_BrowserMediaSession, "BrowserMediaSession");
__publicField(_BrowserMediaSession, "type", "BrowserMediaSession");
var BrowserMediaSession = _BrowserMediaSession;
// dist/src/parser/classes/ButtonCardView.js
var _ButtonCardView = class _ButtonCardView extends YTNode {
constructor(data) {
super();
__publicField(this, "title");
__publicField(this, "icon_name");
__publicField(this, "renderer_context");
this.title = data.title;
this.icon_name = data.image.sources[0].clientResource.imageName;
this.renderer_context = new RendererContext(data.rendererContext);
}
};
__name(_ButtonCardView, "ButtonCardView");
__publicField(_ButtonCardView, "type", "ButtonCardView");
var ButtonCardView = _ButtonCardView;
// dist/src/parser/classes/ChannelHeaderLinks.js
var _HeaderLink = class _HeaderLink extends YTNode {
constructor(data) {
super();
__publicField(this, "endpoint");
__publicField(this, "icon");
__publicField(this, "title");
this.endpoint = new NavigationEndpoint(data.navigationEndpoint);
this.icon = Thumbnail.fromResponse(data.icon);
this.title = new Text2(data.title);
}
};
__name(_HeaderLink, "HeaderLink");
__publicField(_HeaderLink, "type", "HeaderLink");
var HeaderLink = _HeaderLink;
var _ChannelHeaderLinks = class _ChannelHeaderLinks extends YTNode {
constructor(data) {
super();
__publicField(this, "primary");
__publicField(this, "secondary");
this.primary = observe(data.primaryLinks?.map((link) => new HeaderLink(link)) || []);
this.secondary = observe(data.secondaryLinks?.map((link) => new HeaderLink(link)) || []);
}
};
__name(_ChannelHeaderLinks, "ChannelHeaderLinks");
__publicField(_ChannelHeaderLinks, "type", "ChannelHeaderLinks");
var ChannelHeaderLinks = _ChannelHeaderLinks;
// dist/src/parser/classes/ChannelHeaderLinksView.js
var _ChannelHeaderLinksView = class _ChannelHeaderLinksView extends YTNode {
constructor(data) {
super();
__publicField(this, "first_link");
__publicField(this, "more");
if (Reflect.has(data, "firstLink")) {
this.first_link = Text2.fromAttributed(data.firstLink);
}
if (Reflect.has(data, "more")) {
this.more = Text2.fromAttributed(data.more);
}
}
};
__name(_ChannelHeaderLinksView, "ChannelHeaderLinksView");
__publicField(_ChannelHeaderLinksView, "type", "ChannelHeaderLinksView");
var ChannelHeaderLinksView = _ChannelHeaderLinksView;
// dist/src/parser/classes/ClipCreationTextInput.js
var _ClipCreationTextInput = class _ClipCreationTextInput extends YTNode {
constructor(data) {
super();
__publicField(this, "placeholder_text");
__publicField(this, "max_character_limit");
this.placeholder_text = new Text2(data.placeholderText);
this.max_character_limit = data.maxCharacterLimit;
}
};
__name(_ClipCreationTextInput, "ClipCreationTextInput");
__publicField(_ClipCreationTextInput, "type", "ClipCreationTextInput");
var ClipCreationTextInput = _ClipCreationTextInput;
// dist/src/parser/classes/ClipCreationScrubber.js
var _ClipCreationScrubber = class _ClipCreationScrubber extends YTNode {
constructor(data) {
super();
__publicField(this, "length_template");
__publicField(this, "max_length_ms");
__publicField(this, "min_length_ms");
__publicField(this, "default_length_ms");
__publicField(this, "window_size_ms");
__publicField(this, "start_label");
__publicField(this, "end_label");
__publicField(this, "duration_label");
this.length_template = data.lengthTemplate;
this.max_length_ms = data.maxLengthMs;
this.min_length_ms = data.minLengthMs;
this.default_length_ms = data.defaultLengthMs;
this.window_size_ms = data.windowSizeMs;
this.start_label = data.startAccessibility?.accessibilityData?.label;
this.end_label = data.endAccessibility?.accessibilityData?.label;
this.duration_label = data.durationAccessibility?.accessibilityData?.label;
}
};
__name(_ClipCreationScrubber, "ClipCreationScrubber");
__publicField(_ClipCreationScrubber, "type", "ClipCreationScrubber");
var ClipCreationScrubber = _ClipCreationScrubber;
// dist/src/parser/classes/ClipAdState.js
var _ClipAdState = class _ClipAdState extends YTNode {
constructor(data) {
super();
__publicField(this, "title");
__publicField(this, "body");
this.title = new Text2(data.title);
this.body = new Text2(data.body);
}
};
__name(_ClipAdState, "ClipAdState");
__publicField(_ClipAdState, "type", "ClipAdState");
var ClipAdState = _ClipAdState;
// dist/src/parser/classes/ClipCreation.js
var _ClipCreation = class _ClipCreation extends YTNode {
constructor(data) {
super();
__publicField(this, "user_avatar");
__publicField(this, "title_input");
__publicField(this, "scrubber");
__publicField(this, "save_button");
__publicField(this, "display_name");
__publicField(this, "publicity_label");
__publicField(this, "cancel_button");
__publicField(this, "ad_state_overlay");
__publicField(this, "external_video_id");
__publicField(this, "publicity_label_icon");
this.user_avatar = Thumbnail.fromResponse(data.userAvatar);
this.title_input = parser_exports.parseItem(data.titleInput, [ClipCreationTextInput]);
this.scrubber = parser_exports.parseItem(data.scrubber, [ClipCreationScrubber]);
this.save_button = parser_exports.parseItem(data.saveButton, [Button]);
this.display_name = new Text2(data.displayName);
this.publicity_label = data.publicityLabel;
this.cancel_button = parser_exports.parseItem(data.cancelButton, [Button]);
this.ad_state_overlay = parser_exports.parseItem(data.adStateOverlay, [ClipAdState]);
this.external_video_id = data.externalVideoId;
this.publicity_label_icon = data.publicityLabelIcon;
}
};
__name(_ClipCreation, "ClipCreation");
__publicField(_ClipCreation, "type", "ClipCreation");
var ClipCreation = _ClipCreation;
// dist/src/parser/classes/ClipSection.js
var _ClipSection = class _ClipSection extends YTNode {
constructor(data) {
super();
__publicField(this, "contents");
this.contents = parser_exports.parse(data.contents, true, [ClipCreation]);
}
};
__name(_ClipSection, "ClipSection");
__publicField(_ClipSection, "type", "ClipSection");
var ClipSection = _ClipSection;
// dist/src/parser/classes/ContinuationItem.js
var _ContinuationItem = class _ContinuationItem extends YTNode {
constructor(data) {
super();
__publicField(this, "trigger");
__publicField(this, "button");
__publicField(this, "endpoint");
this.trigger = data.trigger;
if (Reflect.has(data, "button")) {
this.button = parser_exports.parseItem(data.button, Button);
}
this.endpoint = new NavigationEndpoint(data.continuationEndpoint);
}
};
__name(_ContinuationItem, "ContinuationItem");
__publicField(_ContinuationItem, "type", "ContinuationItem");
var ContinuationItem = _ContinuationItem;
// dist/src/parser/classes/EngagementPanelTitleHeader.js
var _EngagementPanelTitleHeader = class _EngagementPanelTitleHeader extends YTNode {
constructor(data) {
super();
__publicField(this, "title");
__publicField(this, "visibility_button");
__publicField(this, "contextual_info");
__publicField(this, "menu");
this.title = new Text2(data.title);
this.contextual_info = data.contextualInfo ? new Text2(data.contextualInfo) : void 0;
this.visibility_button = parser_exports.parseItem(data.visibilityButton, Button);
this.menu = parser_exports.parseItem(data.menu);
}
};
__name(_EngagementPanelTitleHeader, "EngagementPanelTitleHeader");
__publicField(_EngagementPanelTitleHeader, "type", "EngagementPanelTitleHeader");
var EngagementPanelTitleHeader = _EngagementPanelTitleHeader;
// dist/src/parser/classes/MacroMarkersInfoItem.js
var _MacroMarkersInfoItem = class _MacroMarkersInfoItem extends YTNode {
constructor(data) {
super();
__publicField(this, "info_text");
__publicField(this, "menu");
this.info_text = new Text2(data.infoText);
this.menu = parser_exports.parseItem(data.menu, Menu);
}
};
__name(_MacroMarkersInfoItem, "MacroMarkersInfoItem");
__publicField(_MacroMarkersInfoItem, "type", "MacroMarkersInfoItem");
var MacroMarkersInfoItem = _MacroMarkersInfoItem;
// dist/src/parser/classes/MacroMarkersListItem.js
var _MacroMarkersListItem = class _MacroMarkersListItem extends YTNode {
constructor(data) {
super();
__publicField(this, "title");
__publicField(this, "time_description");
__publicField(this, "thumbnail");
__publicField(this, "on_tap_endpoint");
__publicField(this, "layout");
__publicField(this, "is_highlighted");
this.title = new Text2(data.title);
this.time_description = new Text2(data.timeDescription);
this.thumbnail = Thumbnail.fromResponse(data.thumbnail);
this.on_tap_endpoint = new NavigationEndpoint(data.onTap);
this.layout = data.layout;
this.is_highlighted = !!data.isHighlighted;
}
};
__name(_MacroMarkersListItem, "MacroMarkersListItem");
__publicField(_MacroMarkersListItem, "type", "MacroMarkersListItem");
var MacroMarkersListItem = _MacroMarkersListItem;
// dist/src/parser/classes/MacroMarkersList.js
var _MacroMarkersList = class _MacroMarkersList extends YTNode {
constructor(data) {
super();
__publicField(this, "contents");
__publicField(this, "sync_button_label");
this.contents = parser_exports.parseArray(data.contents, [MacroMarkersInfoItem, MacroMarkersListItem]);
this.sync_button_label = new Text2(data.syncButtonLabel);
}
};
__name(_MacroMarkersList, "MacroMarkersList");
__publicField(_MacroMarkersList, "type", "MacroMarkersList");
var MacroMarkersList = _MacroMarkersList;
// dist/src/parser/classes/ProductList.js
var _ProductList = class _ProductList extends YTNode {
constructor(data) {
super();
__publicField(this, "contents");
this.contents = parser_exports.parseArray(data.contents);
}
};
__name(_ProductList, "ProductList");
__publicField(_ProductList, "type", "ProductList");
var ProductList = _ProductList;
// dist/src/parser/classes/SectionList.js
var _SectionList = class _SectionList extends YTNode {
constructor(data) {
super();
__publicField(this, "contents");
__publicField(this, "target_id");
__publicField(this, "continuation");
__publicField(this, "header");
__publicField(this, "sub_menu");
this.contents = parser_exports.parseArray(data.contents);
if (Reflect.has(data, "targetId")) {
this.target_id = data.targetId;
}
if (Reflect.has(data, "continuations")) {
if (Reflect.has(data.continuations[0], "nextContinuationData")) {
this.continuation = data.continuations[0].nextContinuationData.continuation;
} else if (Reflect.has(data.continuations[0], "reloadContinuationData")) {
this.continuation = data.continuations[0].reloadContinuationData.continuation;
}
}
if (Reflect.has(data, "header")) {
this.header = parser_exports.parseItem(data.header);
}
if (Reflect.has(data, "subMenu")) {
this.sub_menu = parser_exports.parseItem(data.subMenu);
}
}
};
__name(_SectionList, "SectionList");
__publicField(_SectionList, "type", "SectionList");
var SectionList = _SectionList;
// dist/src/parser/classes/ExpandableVideoDescriptionBody.js
var _ExpandableVideoDescriptionBody = class _ExpandableVideoDescriptionBody extends YTNode {
constructor(data) {
super();
__publicField(this, "show_more_text");
__publicField(this, "show_less_text");
__publicField(this, "attributed_description_body_text");
this.show_more_text = new Text2(data.showMoreText);
this.show_less_text = new Text2(data.showLessText);
if (Reflect.has(data, "attributedDescriptionBodyText")) {
this.attributed_description_body_text = Text2.fromAttributed(data.attributedDescriptionBodyText);
}
}
};
__name(_ExpandableVideoDescriptionBody, "ExpandableVideoDescriptionBody");
__publicField(_ExpandableVideoDescriptionBody, "type", "ExpandableVideoDescriptionBody");
var ExpandableVideoDescriptionBody = _ExpandableVideoDescriptionBody;
// dist/src/parser/classes/SearchRefinementCard.js
var _SearchRefinementCard = class _SearchRefinementCard extends YTNode {
constructor(data) {
super();
__publicField(this, "thumbnails");
__publicField(this, "endpoint");
__publicField(this, "query");
this.thumbnails = Thumbnail.fromResponse(data.thumbnail);
this.endpoint = new NavigationEndpoint(data.searchEndpoint);
this.query = new Text2(data.query).toString();
}
};
__name(_SearchRefinementCard, "SearchRefinementCard");
__publicField(_SearchRefinementCard, "type", "SearchRefinementCard");
var SearchRefinementCard = _SearchRefinementCard;
// dist/src/parser/classes/GameCard.js
var _GameCard = class _GameCard extends YTNode {
constructor(data) {
super();
__publicField(this, "game");
this.game = parser_exports.parseItem(data.game);
}
};
__name(_GameCard, "GameCard");
__publicField(_GameCard, "type", "GameCard");
var GameCard = _GameCard;
// dist/src/parser/classes/HorizontalList.js
var _HorizontalList = class _HorizontalList extends YTNode {
constructor(data) {
super();
__publicField(this, "visible_item_count");
__publicField(this, "items");
this.visible_item_count = data.visibleItemCount;
this.items = parser_exports.parseArray(data.items);
}
// XXX: Alias for consistency.
get contents() {
return this.items;
}
};
__name(_HorizontalList, "HorizontalList");
__publicField(_HorizontalList, "type", "HorizontalList");
var HorizontalList = _HorizontalList;
// dist/src/parser/classes/VideoSummaryParagraphView.js
var _VideoSummaryParagraphView = class _VideoSummaryParagraphView extends YTNode {
constructor(data) {
super();
__publicField(this, "text");
this.text = Text2.fromAttributed(data.text);
}
};
__name(_VideoSummaryParagraphView, "VideoSummaryParagraphView");
__publicField(_VideoSummaryParagraphView, "type", "VideoSummaryParagraphView");
var VideoSummaryParagraphView = _VideoSummaryParagraphView;
// dist/src/parser/classes/VideoSummaryContentView.js
var _VideoSummaryContentView = class _VideoSummaryContentView extends YTNode {
constructor(data) {
super();
__publicField(this, "dislike_button_view");
__publicField(this, "like_button_view");
__publicField(this, "paragraphs");
if ("dislikeButtonViewModel" in data) {
this.dislike_button_view = parser_exports.parseItem(data.dislikeButtonViewModel, DislikeButtonView);
}
if ("likeButtonViewModel" in data) {
this.like_button_view = parser_exports.parseItem(data.likeButtonViewModel, LikeButtonView);
}
this.paragraphs = parser_exports.parseArray(data.paragraphs, VideoSummaryParagraphView);
}
};
__name(_VideoSummaryContentView, "VideoSummaryContentView");
__publicField(_VideoSummaryContentView, "type", "VideoSummaryContentView");
var VideoSummaryContentView = _VideoSummaryContentView;
// dist/src/parser/classes/ExpandableMetadata.js
var _ExpandableMetadata = class _ExpandableMetadata extends YTNode {
constructor(data) {
super();
__publicField(this, "header");
__publicField(this, "expanded_content");
__publicField(this, "expand_button");
__publicField(this, "collapse_button");
if (Reflect.has(data, "header")) {
this.header = {
collapsed_title: new Text2(data.header.collapsedTitle),
collapsed_thumbnail: Thumbnail.fromResponse(data.header.collapsedThumbnail),
collapsed_label: new Text2(data.header.collapsedLabel),
expanded_title: new Text2(data.header.expandedTitle)
};
}
this.expanded_content = parser_exports.parseItem(data.expandedContent, [VideoSummaryContentView, HorizontalCardList, HorizontalList]);
this.expand_button = parser_exports.parseItem(data.expandButton, Button);
this.collapse_button = parser_exports.parseItem(data.collapseButton, Button);
}
};
__name(_ExpandableMetadata, "ExpandableMetadata");
__publicField(_ExpandableMetadata, "type", "ExpandableMetadata");
var ExpandableMetadata = _ExpandableMetadata;
// dist/src/parser/classes/MetadataBadge.js
var _MetadataBadge = class _MetadataBadge extends YTNode {
constructor(data) {
super();
__publicField(this, "icon_type");
__publicField(this, "style");
__publicField(this, "label");
__publicField(this, "tooltip");
if (Reflect.has(data, "icon")) {
this.icon_type = data.icon.iconType;
}
if (Reflect.has(data, "style")) {
this.style = data.style;
}
if (Reflect.has(data, "label")) {
this.label = data.label;
}
if (Reflect.has(data, "tooltip") || Reflect.has(data, "iconTooltip")) {
this.tooltip = data.tooltip || data.iconTooltip;
}
}
};
__name(_MetadataBadge, "MetadataBadge");
__publicField(_MetadataBadge, "type", "MetadataBadge");
var MetadataBadge = _MetadataBadge;
// dist/src/parser/classes/ThumbnailOverlayTimeStatus.js
var _ThumbnailOverlayTimeStatus = class _ThumbnailOverlayTimeStatus extends YTNode {
constructor(data) {
super();
__publicField(this, "text");
__publicField(this, "style");
this.text = new Text2(data.text).toString();
this.style = data.style;
}
};
__name(_ThumbnailOverlayTimeStatus, "ThumbnailOverlayTimeStatus");
__publicField(_ThumbnailOverlayTimeStatus, "type", "ThumbnailOverlayTimeStatus");
var ThumbnailOverlayTimeStatus = _ThumbnailOverlayTimeStatus;
// dist/src/parser/classes/Video.js
var _Video = class _Video extends YTNode {
constructor(data) {
super();
__publicField(this, "video_id");
__publicField(this, "title");
__publicField(this, "untranslated_title");
__publicField(this, "description_snippet");
__publicField(this, "snippets");
__publicField(this, "expandable_metadata");
__publicField(this, "additional_metadatas");
__publicField(this, "thumbnails");
__publicField(this, "thumbnail_overlays");
__publicField(this, "rich_thumbnail");
__publicField(this, "author");
__publicField(this, "badges");
__publicField(this, "endpoint");
__publicField(this, "published");
__publicField(this, "view_count");
__publicField(this, "short_view_count");
__publicField(this, "upcoming");
__publicField(this, "length_text");
__publicField(this, "show_action_menu");
__publicField(this, "is_watched");
__publicField(this, "menu");
__publicField(this, "byline_text");
__publicField(this, "search_video_result_entity_key");
__publicField(this, "service_endpoints");
__publicField(this, "service_endpoint");
__publicField(this, "style");
this.title = new Text2(data.title);
this.video_id = data.videoId;
this.expandable_metadata = parser_exports.parseItem(data.expandableMetadata, ExpandableMetadata);
if ("untranslatedTitle" in data)
this.untranslated_title = new Text2(data.untranslatedTitle);
if ("descriptionSnippet" in data)
this.description_snippet = new Text2(data.descriptionSnippet);
if ("detailedMetadataSnippets" in data) {
this.snippets = data.detailedMetadataSnippets.map((snippet) => ({
text: new Text2(snippet.snippetText),
hover_text: new Text2(snippet.snippetHoverText)
}));
}
if ("additionalMetadatas" in data)
this.additional_metadatas = data.additionalMetadatas.map((meta) => new Text2(meta));
this.thumbnails = Thumbnail.fromResponse(data.thumbnail);
this.thumbnail_overlays = parser_exports.parseArray(data.thumbnailOverlays);
if ("richThumbnail" in data)
this.rich_thumbnail = parser_exports.parseItem(data.richThumbnail);
this.author = new Author(data.ownerText, data.ownerBadges, data.channelThumbnailSupportedRenderers?.channelThumbnailWithLinkRenderer?.thumbnail);
this.badges = parser_exports.parseArray(data.badges, MetadataBadge);
if ("navigationEndpoint" in data)
this.endpoint = new NavigationEndpoint(data.navigationEndpoint);
if ("publishedTimeText" in data)
this.published = new Text2(data.publishedTimeText);
if ("viewCountText" in data)
this.view_count = new Text2(data.viewCountText);
if ("shortViewCountText" in data)
this.short_view_count = new Text2(data.shortViewCountText);
if ("upcomingEventData" in data)
this.upcoming = new Date(Number(`${data.upcomingEventData.startTime}000`));
this.show_action_menu = !!data.showActionMenu;
this.is_watched = !!data.isWatched;
this.menu = parser_exports.parseItem(data.menu, Menu);
if ("searchVideoResultEntityKey" in data)
this.search_video_result_entity_key = data.searchVideoResultEntityKey;
if ("bylineText" in data)
this.byline_text = new Text2(data.bylineText);
if ("lengthText" in data)
this.length_text = new Text2(data.lengthText);
if ("serviceEndpoints" in data)
this.service_endpoints = data.serviceEndpoints.map((endpoint) => new NavigationEndpoint(endpoint));
if ("serviceEndpoint" in data)
this.service_endpoint = new NavigationEndpoint(data.serviceEndpoint);
if ("style" in data)
this.style = data.style;
}
/**
* @deprecated Use {@linkcode video_id} instead.
*/
get id() {
return this.video_id;
}
get description() {
if (this.snippets)
return this.snippets.map((snip) => snip.text.toString()).join("");
return this.description_snippet?.toString() || "";
}
get is_live() {
return this.badges.some((badge) => {
if (badge.style === "BADGE_STYLE_TYPE_LIVE_NOW" || badge.label === "LIVE")
return true;
}) || this.thumbnail_overlays.firstOfType(ThumbnailOverlayTimeStatus)?.style === "LIVE";
}
get is_upcoming() {
return this.upcoming && this.upcoming > /* @__PURE__ */ new Date();
}
get is_premiere() {
return this.badges.some((badge) => badge.label === "PREMIERE");
}
get is_4k() {
return this.badges.some((badge) => badge.label === "4K");
}
get has_captions() {
return this.badges.some((badge) => badge.label === "CC");
}
get best_thumbnail() {
return this.thumbnails[0];
}
get duration() {
const overlay_time_status = this.thumbnail_overlays.firstOfType(ThumbnailOverlayTimeStatus);
const length_text = this.length_text?.toString() || overlay_time_status?.text.toString();
return {
text: length_text,
seconds: length_text ? timeToSeconds(length_text) : 0
};
}
};
__name(_Video, "Video");
__publicField(_Video, "type", "Video");
var Video = _Video;
// dist/src/parser/classes/VideoCard.js
var _VideoCard = class _VideoCard extends Video {
constructor(data) {
super(data);
__publicField(this, "metadata_text");
if (Reflect.has(data, "metadataText")) {
this.metadata_text = new Text2(data.metadataText);
if (this.metadata_text.text) {
this.short_view_count = new Text2({ simpleText: this.metadata_text.text.split("\xB7")[0]?.trim() });
this.published = new Text2({ simpleText: this.metadata_text.text.split("\xB7")[1]?.trim() });
}
}
if (Reflect.has(data, "bylineText")) {
this.author = new Author(data.bylineText, data.ownerBadges, data.channelThumbnailSupportedRenderers?.channelThumbnailWithLinkRenderer?.thumbnail);
}
}
};
__name(_VideoCard, "VideoCard");
__publicField(_VideoCard, "type", "VideoCard");
var VideoCard = _VideoCard;
// dist/src/parser/classes/ContentPreviewImageView.js
var _ContentPreviewImageView = class _ContentPreviewImageView extends YTNode {
constructor(data) {
super();
__publicField(this, "image");
__publicField(this, "style");
this.image = Thumbnail.fromResponse(data.image);
this.style = data.style;
}
};
__name(_ContentPreviewImageView, "ContentPreviewImageView");
__publicField(_ContentPreviewImageView, "type", "ContentPreviewImageView");
var ContentPreviewImageView = _ContentPreviewImageView;
// dist/src/parser/classes/VideoAttributeView.js
var _VideoAttributeView = class _VideoAttributeView extends YTNode {
constructor(data) {
super();
__publicField(this, "image");
__publicField(this, "image_style");
__publicField(this, "title");
__publicField(this, "subtitle");
__publicField(this, "secondary_subtitle");
__publicField(this, "orientation");
__publicField(this, "sizing_rule");
__publicField(this, "overflow_menu_on_tap");
__publicField(this, "overflow_menu_a11y_label");
if (data.image?.sources) {
this.image = Thumbnail.fromResponse(data.image);
} else {
this.image = parser_exports.parseItem(data.image, ContentPreviewImageView);
}
this.image_style = data.imageStyle;
this.title = data.title;
this.subtitle = data.subtitle;
if (Reflect.has(data, "secondarySubtitle")) {
this.secondary_subtitle = {
content: data.secondarySubtitle.content
};
}
this.orientation = data.orientation;
this.sizing_rule = data.sizingRule;
this.overflow_menu_on_tap = new NavigationEndpoint(data.overflowMenuOnTap);
this.overflow_menu_a11y_label = data.overflowMenuA11yLabel;
}
};
__name(_VideoAttributeView, "VideoAttributeView");
__publicField(_VideoAttributeView, "type", "VideoAttributeView");
var VideoAttributeView = _VideoAttributeView;
// dist/src/parser/classes/HorizontalCardList.js
var _HorizontalCardList = class _HorizontalCardList extends YTNode {
constructor(data) {
super();
__publicField(this, "cards");
__publicField(this, "header");
__publicField(this, "previous_button");
__publicField(this, "next_button");
this.cards = parser_exports.parseArray(data.cards, [VideoAttributeView, SearchRefinementCard, MacroMarkersListItem, GameCard, VideoCard]);
this.header = parser_exports.parseItem(data.header);
this.previous_button = parser_exports.parseItem(data.previousButton, Button);
this.next_button = parser_exports.parseItem(data.nextButton, Button);
}
};
__name(_HorizontalCardList, "HorizontalCardList");
__publicField(_HorizontalCardList, "type", "HorizontalCardList");
var HorizontalCardList = _HorizontalCardList;
// dist/src/parser/classes/Factoid.js
var _Factoid = class _Factoid extends YTNode {
constructor(data) {
super();
__publicField(this, "label");
__publicField(this, "value");
__publicField(this, "accessibility_text");
this.label = new Text2(data.label);
this.value = new Text2(data.value);
this.accessibility_text = data.accessibilityText;
}
};
__name(_Factoid, "Factoid");
__publicField(_Factoid, "type", "Factoid");
var Factoid = _Factoid;
// dist/src/parser/classes/UploadTimeFactoid.js
var _UploadTimeFactoid = class _UploadTimeFactoid extends YTNode {
constructor(data) {
super();
__publicField(this, "factoid");
this.factoid = parser_exports.parseItem(data.factoid, Factoid);
}
};
__name(_UploadTimeFactoid, "UploadTimeFactoid");
__publicField(_UploadTimeFactoid, "type", "UploadTimeFactoid");
var UploadTimeFactoid = _UploadTimeFactoid;
// dist/src/parser/classes/ViewCountFactoid.js
var _ViewCountFactoid = class _ViewCountFactoid extends YTNode {
constructor(data) {
super();
__publicField(this, "view_count_entity_key");
__publicField(this, "factoid");
__publicField(this, "view_count_type");
this.view_count_entity_key = data.viewCountEntityKey;
this.factoid = parser_exports.parseItem(data.factoid, [Factoid]);
this.view_count_type = data.viewCountType;
}
};
__name(_ViewCountFactoid, "ViewCountFactoid");
__publicField(_ViewCountFactoid, "type", "ViewCountFactoid");
var ViewCountFactoid = _ViewCountFactoid;
// dist/src/parser/classes/HypePointsFactoid.js
var _HypePointsFactoid = class _HypePointsFactoid extends YTNode {
constructor(data) {
super();
__publicField(this, "factoid");
this.factoid = parser_exports.parseItem(data.factoid, Factoid);
}
};
__name(_HypePointsFactoid, "HypePointsFactoid");
__publicField(_HypePointsFactoid, "type", "HypePointsFactoid");
var HypePointsFactoid = _HypePointsFactoid;
// dist/src/parser/classes/VideoDescriptionHeader.js
var _VideoDescriptionHeader = class _VideoDescriptionHeader extends YTNode {
constructor(data) {
super();
__publicField(this, "channel");
__publicField(this, "channel_navigation_endpoint");
__publicField(this, "channel_thumbnail");
__publicField(this, "factoids");
__publicField(this, "publish_date");
__publicField(this, "title");
__publicField(this, "views");
this.title = new Text2(data.title);
this.channel = new Text2(data.channel);
this.channel_navigation_endpoint = new NavigationEndpoint(data.channelNavigationEndpoint);
this.channel_thumbnail = Thumbnail.fromResponse(data.channelThumbnail);
this.publish_date = new Text2(data.publishDate);
this.views = new Text2(data.views);
this.factoids = parser_exports.parseArray(data.factoid, [Factoid, HypePointsFactoid, ViewCountFactoid, UploadTimeFactoid]);
}
};
__name(_VideoDescriptionHeader, "VideoDescriptionHeader");
__publicField(_VideoDescriptionHeader, "type", "VideoDescriptionHeader");
var VideoDescriptionHeader = _VideoDescriptionHeader;
// dist/src/parser/classes/VideoDescriptionInfocardsSection.js
var _VideoDescriptionInfocardsSection = class _VideoDescriptionInfocardsSection extends YTNode {
constructor(data) {
super();
__publicField(this, "section_title");
__publicField(this, "creator_videos_button");
__publicField(this, "creator_about_button");
__publicField(this, "section_subtitle");
__publicField(this, "channel_avatar");
__publicField(this, "channel_endpoint");
this.section_title = new Text2(data.sectionTitle);
this.creator_videos_button = parser_exports.parseItem(data.creatorVideosButton, Button);
this.creator_about_button = parser_exports.parseItem(data.creatorAboutButton, Button);
this.section_subtitle = new Text2(data.sectionSubtitle);
this.channel_avatar = Thumbnail.fromResponse(data.channelAvatar);
this.channel_endpoint = new NavigationEndpoint(data.channelEndpoint);
}
};
__name(_VideoDescriptionInfocardsSection, "VideoDescriptionInfocardsSection");
__publicField(_VideoDescriptionInfocardsSection, "type", "VideoDescriptionInfocardsSection");
var VideoDescriptionInfocardsSection = _VideoDescriptionInfocardsSection;
// dist/src/parser/classes/InfoRow.js
var _InfoRow = class _InfoRow extends YTNode {
constructor(data) {
super();
__publicField(this, "title");
__publicField(this, "default_metadata");
__publicField(this, "expanded_metadata");
__publicField(this, "info_row_expand_status_key");
this.title = new Text2(data.title);
if (Reflect.has(data, "defaultMetadata")) {
this.default_metadata = new Text2(data.defaultMetadata);
}
if (Reflect.has(data, "expandedMetadata")) {
this.expanded_metadata = new Text2(data.expandedMetadata);
}
if (Reflect.has(data, "infoRowExpandStatusKey")) {
this.info_row_expand_status_key = data.infoRowExpandStatusKey;
}
}
};
__name(_InfoRow, "InfoRow");
__publicField(_InfoRow, "type", "InfoRow");
var InfoRow = _InfoRow;
// dist/src/parser/classes/CompactVideo.js
var _CompactVideo = class _CompactVideo extends YTNode {
constructor(data) {
super();
__publicField(this, "video_id");
__publicField(this, "thumbnails");
__publicField(this, "rich_thumbnail");
__publicField(this, "title");
__publicField(this, "author");
__publicField(this, "view_count");
__publicField(this, "short_view_count");
__publicField(this, "short_byline_text");
__publicField(this, "long_byline_text");
__publicField(this, "published");
__publicField(this, "badges");
__publicField(this, "thumbnail_overlays");
__publicField(this, "endpoint");
__publicField(this, "menu");
__publicField(this, "length_text");
__publicField(this, "is_watched");
__publicField(this, "service_endpoints");
__publicField(this, "service_endpoint");
__publicField(this, "style");
this.video_id = data.videoId;
this.thumbnails = Thumbnail.fromResponse(data.thumbnail);
this.title = new Text2(data.title);
this.author = new Author(data.longBylineText, data.ownerBadges, data.channelThumbnail);
this.is_watched = !!data.isWatched;
this.thumbnail_overlays = parser_exports.parseArray(data.thumbnailOverlays);
this.menu = parser_exports.parseItem(data.menu, Menu);
this.badges = parser_exports.parseArray(data.badges, MetadataBadge);
if ("publishedTimeText" in data)
this.published = new Text2(data.publishedTimeText);
if ("shortBylineText" in data)
this.view_count = new Text2(data.viewCountText);
if ("shortViewCountText" in data)
this.short_view_count = new Text2(data.shortViewCountText);
if ("richThumbnail" in data)
this.rich_thumbnail = parser_exports.parseItem(data.richThumbnail);
if ("shortBylineText" in data)
this.short_byline_text = new Text2(data.shortBylineText);
if ("longBylineText" in data)
this.long_byline_text = new Text2(data.longBylineText);
if ("lengthText" in data)
this.length_text = new Text2(data.lengthText);
if ("serviceEndpoints" in data)
this.service_endpoints = data.serviceEndpoints.map((endpoint) => new NavigationEndpoint(endpoint));
if ("serviceEndpoint" in data)
this.service_endpoint = new NavigationEndpoint(data.serviceEndpoint);
if ("navigationEndpoint" in data)
this.endpoint = new NavigationEndpoint(data.navigationEndpoint);
if ("style" in data)
this.style = data.style;
}
/**
* @deprecated Use {@linkcode video_id} instead.
*/
get id() {
return this.video_id;
}
get duration() {
const overlay_time_status = this.thumbnail_overlays.firstOfType(ThumbnailOverlayTimeStatus);
const length_text = this.length_text?.toString() || overlay_time_status?.text.toString();
return {
text: length_text,
seconds: length_text ? timeToSeconds(length_text) : 0
};
}
get best_thumbnail() {
return this.thumbnails[0];
}
get is_fundraiser() {
return this.badges.some((badge) => badge.label === "Fundraiser");
}
get is_live() {
return this.badges.some((badge) => {
if (badge.style === "BADGE_STYLE_TYPE_LIVE_NOW" || badge.label === "LIVE")
return true;
});
}
get is_new() {
return this.badges.some((badge) => badge.label === "New");
}
get is_premiere() {
return this.badges.some((badge) => badge.style === "PREMIERE");
}
};
__name(_CompactVideo, "CompactVideo");
__publicField(_CompactVideo, "type", "CompactVideo");
var CompactVideo = _CompactVideo;
// dist/src/parser/classes/CarouselLockup.js
var _CarouselLockup = class _CarouselLockup extends YTNode {
constructor(data) {
super();
__publicField(this, "info_rows");
__publicField(this, "video_lockup");
this.info_rows = parser_exports.parseArray(data.infoRows, InfoRow);
this.video_lockup = parser_exports.parseItem(data.videoLockup, CompactVideo);
}
};
__name(_CarouselLockup, "CarouselLockup");
__publicField(_CarouselLockup, "type", "CarouselLockup");
var CarouselLockup = _CarouselLockup;
// dist/src/parser/classes/VideoDescriptionMusicSection.js
var _VideoDescriptionMusicSection = class _VideoDescriptionMusicSection extends YTNode {
constructor(data) {
super();
__publicField(this, "carousel_lockups");
__publicField(this, "section_title");
this.carousel_lockups = parser_exports.parseArray(data.carouselLockups, CarouselLockup);
this.section_title = new Text2(data.sectionTitle);
}
};
__name(_VideoDescriptionMusicSection, "VideoDescriptionMusicSection");
__publicField(_VideoDescriptionMusicSection, "type", "VideoDescriptionMusicSection");
var VideoDescriptionMusicSection = _VideoDescriptionMusicSection;
// dist/src/parser/classes/VideoDescriptionTranscriptSection.js
var _VideoDescriptionTranscriptSection = class _VideoDescriptionTranscriptSection extends YTNode {
constructor(data) {
super();
__publicField(this, "section_title");
__publicField(this, "sub_header_text");
__publicField(this, "primary_button");
this.section_title = new Text2(data.sectionTitle);
this.sub_header_text = new Text2(data.subHeaderText);
this.primary_button = parser_exports.parseItem(data.primaryButton, Button);
}
};
__name(_VideoDescriptionTranscriptSection, "VideoDescriptionTranscriptSection");
__publicField(_VideoDescriptionTranscriptSection, "type", "VideoDescriptionTranscriptSection");
var VideoDescriptionTranscriptSection = _VideoDescriptionTranscriptSection;
// dist/src/parser/classes/StructuredDescriptionPlaylistLockup.js
var _StructuredDescriptionPlaylistLockup = class _StructuredDescriptionPlaylistLockup extends YTNode {
constructor(data) {
super();
__publicField(this, "thumbnail");
__publicField(this, "title");
__publicField(this, "short_byline_text");
__publicField(this, "video_count_short_text");
__publicField(this, "endpoint");
__publicField(this, "thumbnail_width");
__publicField(this, "aspect_ratio");
__publicField(this, "max_lines_title");
__publicField(this, "max_lines_short_byline_text");
__publicField(this, "overlay_position");
this.thumbnail = Thumbnail.fromResponse(data.thumbnail);
this.title = new Text2(data.title);
this.short_byline_text = new Text2(data.shortBylineText);
this.video_count_short_text = new Text2(data.videoCountShortText);
this.endpoint = new NavigationEndpoint(data.navigationEndpoint);
this.thumbnail_width = data.thumbnailWidth;
this.aspect_ratio = data.aspectRatio;
this.max_lines_title = data.maxLinesTitle;
this.max_lines_short_byline_text = data.maxLinesShortBylineText;
this.overlay_position = data.overlayPosition;
}
};
__name(_StructuredDescriptionPlaylistLockup, "StructuredDescriptionPlaylistLockup");
__publicField(_StructuredDescriptionPlaylistLockup, "type", "StructuredDescriptionPlaylistLockup");
var StructuredDescriptionPlaylistLockup = _StructuredDescriptionPlaylistLockup;
// dist/src/parser/classes/VideoDescriptionCourseSection.js
var _VideoDescriptionCourseSection = class _VideoDescriptionCourseSection extends YTNode {
constructor(data) {
super();
__publicField(this, "section_title");
__publicField(this, "media_lockups");
this.section_title = new Text2(data.sectionTitle);
this.media_lockups = parser_exports.parseArray(data.mediaLockups, [StructuredDescriptionPlaylistLockup]);
}
};
__name(_VideoDescriptionCourseSection, "VideoDescriptionCourseSection");
__publicField(_VideoDescriptionCourseSection, "type", "VideoDescriptionCourseSection");
var VideoDescriptionCourseSection = _VideoDescriptionCourseSection;
// dist/src/parser/classes/VideoAttributesSectionView.js
var _VideoAttributesSectionView = class _VideoAttributesSectionView extends YTNode {
constructor(data) {
super();
__publicField(this, "header_title");
__publicField(this, "header_subtitle");
__publicField(this, "video_attributes");
__publicField(this, "previous_button");
__publicField(this, "next_button");
this.header_title = data.headerTitle;
this.header_subtitle = data.headerSubtitle;
this.video_attributes = parser_exports.parseArray(data.videoAttributeViewModels, VideoAttributeView);
this.previous_button = parser_exports.parseItem(data.previousButton, ButtonView);
this.next_button = parser_exports.parseItem(data.nextButton, ButtonView);
}
};
__name(_VideoAttributesSectionView, "VideoAttributesSectionView");
__publicField(_VideoAttributesSectionView, "type", "VideoAttributesSectionView");
var VideoAttributesSectionView = _VideoAttributesSectionView;
// dist/src/parser/classes/HowThisWasMadeSectionView.js
var _HowThisWasMadeSectionView = class _HowThisWasMadeSectionView extends YTNode {
constructor(data) {
super();
__publicField(this, "section_title");
__publicField(this, "body_text");
__publicField(this, "body_header");
if (Reflect.has(data, "sectionText"))
this.section_title = Text2.fromAttributed(data.sectionText);
if (Reflect.has(data, "bodyText"))
this.body_text = Text2.fromAttributed(data.bodyText);
if (Reflect.has(data, "bodyHeader"))
this.body_header = Text2.fromAttributed(data.bodyHeader);
}
};
__name(_HowThisWasMadeSectionView, "HowThisWasMadeSectionView");
__publicField(_HowThisWasMadeSectionView, "type", "HowThisWasMadeSectionView");
var HowThisWasMadeSectionView = _HowThisWasMadeSectionView;
// dist/src/parser/classes/ReelShelf.js
var _ReelShelf = class _ReelShelf extends YTNode {
constructor(data) {
super();
__publicField(this, "title");
__publicField(this, "items");
__publicField(this, "endpoint");
this.title = new Text2(data.title);
this.items = parser_exports.parseArray(data.items);
if (Reflect.has(data, "endpoint")) {
this.endpoint = new NavigationEndpoint(data.endpoint);
}
}
// XXX: Alias for consistency.
get contents() {
return this.items;
}
};
__name(_ReelShelf, "ReelShelf");
__publicField(_ReelShelf, "type", "ReelShelf");
var ReelShelf = _ReelShelf;
// dist/src/parser/classes/MerchandiseShelf.js
var _MerchandiseShelf = class _MerchandiseShelf extends YTNode {
constructor(data) {
super();
__publicField(this, "title");
__publicField(this, "menu");
__publicField(this, "items");
this.title = data.title;
this.menu = parser_exports.parseItem(data.actionButton);
this.items = parser_exports.parseArray(data.items);
}
// XXX: Alias for consistency.
get contents() {
return this.items;
}
};
__name(_MerchandiseShelf, "MerchandiseShelf");
__publicField(_MerchandiseShelf, "type", "MerchandiseShelf");
var MerchandiseShelf = _MerchandiseShelf;
// dist/src/parser/classes/StructuredDescriptionContent.js
var _StructuredDescriptionContent = class _StructuredDescriptionContent extends YTNode {
constructor(data) {
super();
__publicField(this, "items");
this.items = parser_exports.parseArray(data.items, [
VideoDescriptionHeader,
ExpandableVideoDescriptionBody,
VideoDescriptionMusicSection,
VideoDescriptionInfocardsSection,
VideoDescriptionCourseSection,
VideoDescriptionTranscriptSection,
VideoDescriptionTranscriptSection,
HorizontalCardList,
ReelShelf,
VideoAttributesSectionView,
HowThisWasMadeSectionView,
ExpandableMetadata,
MerchandiseShelf
]);
}
};
__name(_StructuredDescriptionContent, "StructuredDescriptionContent");
__publicField(_StructuredDescriptionContent, "type", "StructuredDescriptionContent");
var StructuredDescriptionContent = _StructuredDescriptionContent;
// dist/src/parser/classes/EngagementPanelSectionList.js
var _EngagementPanelSectionList = class _EngagementPanelSectionList extends YTNode {
constructor(data) {
super();
__publicField(this, "header");
__publicField(this, "content");
__publicField(this, "target_id");
__publicField(this, "panel_identifier");
__publicField(this, "identifier");
__publicField(this, "visibility");
this.header = parser_exports.parseItem(data.header, EngagementPanelTitleHeader);
this.content = parser_exports.parseItem(data.content, [VideoAttributeView, SectionList, ContinuationItem, ClipSection, StructuredDescriptionContent, MacroMarkersList, ProductList]);
this.panel_identifier = data.panelIdentifier;
this.identifier = data.identifier ? {
surface: data.identifier.surface,
tag: data.identifier.tag
} : void 0;
this.target_id = data.targetId;
this.visibility = data.visibility;
}
};
__name(_EngagementPanelSectionList, "EngagementPanelSectionList");
__publicField(_EngagementPanelSectionList, "type", "EngagementPanelSectionList");
var EngagementPanelSectionList = _EngagementPanelSectionList;
// dist/src/parser/classes/ChannelTagline.js
var _ChannelTagline = class _ChannelTagline extends YTNode {
constructor(data) {
super();
__publicField(this, "content");
__publicField(this, "max_lines");
__publicField(this, "more_endpoint");
__publicField(this, "more_icon_type");
__publicField(this, "more_label");
__publicField(this, "target_id");
this.content = data.content;
this.max_lines = data.maxLines;
this.more_endpoint = data.moreEndpoint.showEngagementPanelEndpoint ? {
show_engagement_panel_endpoint: {
engagement_panel: parser_exports.parseItem(data.moreEndpoint.showEngagementPanelEndpoint.engagementPanel, EngagementPanelSectionList),
engagement_panel_popup_type: data.moreEndpoint.showEngagementPanelEndpoint.engagementPanelPresentationConfigs.engagementPanelPopupPresentationConfig.popupType,
identifier: {
surface: data.moreEndpoint.showEngagementPanelEndpoint.identifier.surface,
tag: data.moreEndpoint.showEngagementPanelEndpoint.identifier.tag
}
}
} : new NavigationEndpoint(data.moreEndpoint);
this.more_icon_type = data.moreIcon.iconType;
this.more_label = data.moreLabel;
this.target_id = data.targetId;
}
};
__name(_ChannelTagline, "ChannelTagline");
__publicField(_ChannelTagline, "type", "ChannelTagline");
var ChannelTagline = _ChannelTagline;
// dist/src/parser/classes/SubscriptionNotificationToggleButton.js
var _SubscriptionNotificationToggleButton = class _SubscriptionNotificationToggleButton extends YTNode {
constructor(data) {
super();
__publicField(this, "states");
__publicField(this, "current_state_id");
__publicField(this, "target_id");
this.states = data.states.map((data2) => ({
id: data2.stateId,
next_id: data2.nextStateId,
state: parser_exports.parse(data2.state)
}));
this.current_state_id = data.currentStateId;
this.target_id = data.targetId;
}
};
__name(_SubscriptionNotificationToggleButton, "SubscriptionNotificationToggleButton");
__publicField(_SubscriptionNotificationToggleButton, "type", "SubscriptionNotificationToggleButton");
var SubscriptionNotificationToggleButton = _SubscriptionNotificationToggleButton;
// dist/src/parser/classes/SubscribeButton.js
var _SubscribeButton = class _SubscribeButton extends YTNode {
constructor(data) {
super();
__publicField(this, "button_text");
__publicField(this, "subscribed");
__publicField(this, "enabled");
__publicField(this, "item_type");
__publicField(this, "channel_id");
__publicField(this, "show_preferences");
__publicField(this, "subscribed_text");
__publicField(this, "unsubscribed_text");
__publicField(this, "unsubscribe_text");
__publicField(this, "notification_preference_button");
__publicField(this, "service_endpoints");
__publicField(this, "on_subscribe_endpoints");
__publicField(this, "on_unsubscribe_endpoints");
__publicField(this, "subscribed_entity_key");
__publicField(this, "target_id");
__publicField(this, "subscribe_accessibility_label");
__publicField(this, "unsubscribe_accessibility_label");
this.button_text = new Text2(data.buttonText);
this.subscribed = data.subscribed;
this.enabled = data.enabled;
this.item_type = data.type;
this.channel_id = data.channelId;
this.show_preferences = data.showPreferences;
if (Reflect.has(data, "subscribedButtonText"))
this.subscribed_text = new Text2(data.subscribedButtonText);
if (Reflect.has(data, "unsubscribedButtonText"))
this.unsubscribed_text = new Text2(data.unsubscribedButtonText);
if (Reflect.has(data, "unsubscribeButtonText"))
this.unsubscribe_text = new Text2(data.unsubscribeButtonText);
this.notification_preference_button = parser_exports.parseItem(data.notificationPreferenceButton, SubscriptionNotificationToggleButton);
if (Reflect.has(data, "serviceEndpoints"))
this.service_endpoints = data.serviceEndpoints.map((endpoint) => new NavigationEndpoint(endpoint));
if (Reflect.has(data, "onSubscribeEndpoints"))
this.on_subscribe_endpoints = data.onSubscribeEndpoints.map((endpoint) => new NavigationEndpoint(endpoint));
if (Reflect.has(data, "onUnsubscribeEndpoints"))
this.on_unsubscribe_endpoints = data.onUnsubscribeEndpoints.map((endpoint) => new NavigationEndpoint(endpoint));
if (Reflect.has(data, "subscribedEntityKey"))
this.subscribed_entity_key = data.subscribedEntityKey;
if (Reflect.has(data, "targetId"))
this.target_id = data.targetId;
if (Reflect.has(data, "subscribeAccessibility"))
this.subscribe_accessibility_label = data.subscribeAccessibility.accessibilityData?.label;
if (Reflect.has(data, "unsubscribeAccessibility"))
this.unsubscribe_accessibility_label = data.unsubscribeAccessibility.accessibilityData?.label;
}
};
__name(_SubscribeButton, "SubscribeButton");
__publicField(_SubscribeButton, "type", "SubscribeButton");
var SubscribeButton = _SubscribeButton;
// dist/src/parser/classes/C4TabbedHeader.js
var _C4TabbedHeader = class _C4TabbedHeader extends YTNode {
constructor(data) {
super();
__publicField(this, "author");
__publicField(this, "banner");
__publicField(this, "tv_banner");
__publicField(this, "mobile_banner");
__publicField(this, "subscribers");
__publicField(this, "videos_count");
__publicField(this, "sponsor_button");
__publicField(this, "subscribe_button");
__publicField(this, "header_links");
__publicField(this, "channel_handle");
__publicField(this, "channel_id");
__publicField(this, "tagline");
this.author = new Author({
simpleText: data.title,
navigationEndpoint: data.navigationEndpoint
}, data.badges, data.avatar);
if (Reflect.has(data, "banner")) {
this.banner = Thumbnail.fromResponse(data.banner);
}
if (Reflect.has(data, "tv_banner")) {
this.tv_banner = Thumbnail.fromResponse(data.tvBanner);
}
if (Reflect.has(data, "mobile_banner")) {
this.mobile_banner = Thumbnail.fromResponse(data.mobileBanner);
}
if (Reflect.has(data, "subscriberCountText")) {
this.subscribers = new Text2(data.subscriberCountText);
}
if (Reflect.has(data, "videosCountText")) {
this.videos_count = new Text2(data.videosCountText);
}
if (Reflect.has(data, "sponsorButton")) {
this.sponsor_button = parser_exports.parseItem(data.sponsorButton, Button);
}
if (Reflect.has(data, "subscribeButton")) {
this.subscribe_button = parser_exports.parseItem(data.subscribeButton, [SubscribeButton, Button]);
}
if (Reflect.has(data, "headerLinks")) {
this.header_links = parser_exports.parseItem(data.headerLinks, [ChannelHeaderLinks, ChannelHeaderLinksView]);
}
if (Reflect.has(data, "channelHandleText")) {
this.channel_handle = new Text2(data.channelHandleText);
}
if (Reflect.has(data, "channelId")) {
this.channel_id = data.channelId;
}
if (Reflect.has(data, "tagline")) {
this.tagline = parser_exports.parseItem(data.tagline, ChannelTagline);
}
}
};
__name(_C4TabbedHeader, "C4TabbedHeader");
__publicField(_C4TabbedHeader, "type", "C4TabbedHeader");
var C4TabbedHeader = _C4TabbedHeader;
// dist/src/parser/classes/CallToActionButton.js
var _CallToActionButton = class _CallToActionButton extends YTNode {
constructor(data) {
super();
__publicField(this, "label");
__publicField(this, "icon_type");
__publicField(this, "style");
this.label = new Text2(data.label);
this.icon_type = data.icon.iconType;
this.style = data.style;
}
};
__name(_CallToActionButton, "CallToActionButton");
__publicField(_CallToActionButton, "type", "CallToActionButton");
var CallToActionButton = _CallToActionButton;
// dist/src/parser/classes/Card.js
var _Card = class _Card extends YTNode {
constructor(data) {
super();
__publicField(this, "teaser");
__publicField(this, "content");
__publicField(this, "card_id");
__publicField(this, "feature");
__publicField(this, "cue_ranges");
this.teaser = parser_exports.parseItem(data.teaser);
this.content = parser_exports.parseItem(data.content);
if (Reflect.has(data, "cardId")) {
this.card_id = data.cardId;
}
if (Reflect.has(data, "feature")) {
this.feature = data.feature;
}
this.cue_ranges = data.cueRanges.map((cr) => ({
start_card_active_ms: cr.startCardActiveMs,
end_card_active_ms: cr.endCardActiveMs,
teaser_duration_ms: cr.teaserDurationMs,
icon_after_teaser_ms: cr.iconAfterTeaserMs
}));
}
};
__name(_Card, "Card");
__publicField(_Card, "type", "Card");
var Card = _Card;
// dist/src/parser/classes/CardCollection.js
var _CardCollection = class _CardCollection extends YTNode {
constructor(data) {
super();
__publicField(this, "cards");
__publicField(this, "header");
__publicField(this, "allow_teaser_dismiss");
this.cards = parser_exports.parseArray(data.cards);
this.header = new Text2(data.headerText);
this.allow_teaser_dismiss = data.allowTeaserDismiss;
}
};
__name(_CardCollection, "CardCollection");
__publicField(_CardCollection, "type", "CardCollection");
var CardCollection = _CardCollection;
// dist/src/parser/classes/CarouselHeader.js
var _CarouselHeader = class _CarouselHeader extends YTNode {
constructor(data) {
super();
__publicField(this, "contents");
this.contents = parser_exports.parseArray(data.contents);
}
};
__name(_CarouselHeader, "CarouselHeader");
__publicField(_CarouselHeader, "type", "CarouselHeader");
var CarouselHeader = _CarouselHeader;
// dist/src/parser/classes/CarouselItem.js
var _CarouselItem = class _CarouselItem extends YTNode {
constructor(data) {
super();
__publicField(this, "items");
__publicField(this, "background_color");
__publicField(this, "layout_style");
__publicField(this, "pagination_thumbnails");
__publicField(this, "paginator_alignment");
this.items = parser_exports.parseArray(data.carouselItems);
this.background_color = data.backgroundColor;
this.layout_style = data.layoutStyle;
this.pagination_thumbnails = Thumbnail.fromResponse(data.paginationThumbnails);
this.paginator_alignment = data.paginatorAlignment;
}
// XXX: For consistency.
get contents() {
return this.items;
}
};
__name(_CarouselItem, "CarouselItem");
__publicField(_CarouselItem, "type", "CarouselItem");
var CarouselItem = _CarouselItem;
// dist/src/parser/classes/TextCarouselItemView.js
var _TextCarouselItemView = class _TextCarouselItemView extends YTNode {
constructor(data) {
super();
__publicField(this, "icon_name");
__publicField(this, "text");
__publicField(this, "on_tap_endpoint");
__publicField(this, "button");
this.icon_name = data.iconName;
this.text = Text2.fromAttributed(data.text);
this.on_tap_endpoint = new NavigationEndpoint(data.onTap);
this.button = parser_exports.parseItem(data.button, ButtonView);
}
};
__name(_TextCarouselItemView, "TextCarouselItemView");
__publicField(_TextCarouselItemView, "type", "TextCarouselItemView");
var TextCarouselItemView = _TextCarouselItemView;
// dist/src/parser/classes/CarouselItemView.js
var _CarouselItemView = class _CarouselItemView extends YTNode {
constructor(data) {
super();
__publicField(this, "item_type");
__publicField(this, "carousel_item");
this.item_type = data.itemType;
this.carousel_item = parser_exports.parseItem(data.carouselItem, TextCarouselItemView);
}
};
__name(_CarouselItemView, "CarouselItemView");
__publicField(_CarouselItemView, "type", "CarouselItemView");
var CarouselItemView = _CarouselItemView;
// dist/src/parser/classes/CarouselTitleView.js
var _CarouselTitleView = class _CarouselTitleView extends YTNode {
constructor(data) {
super();
__publicField(this, "title");
__publicField(this, "previous_button");
__publicField(this, "next_button");
this.title = data.title;
this.previous_button = parser_exports.parseItem(data.previousButton, ButtonView);
this.next_button = parser_exports.parseItem(data.nextButton, ButtonView);
}
};
__name(_CarouselTitleView, "CarouselTitleView");
__publicField(_CarouselTitleView, "type", "CarouselTitleView");
var CarouselTitleView = _CarouselTitleView;
// dist/src/parser/classes/Channel.js
var _Channel = class _Channel extends YTNode {
constructor(data) {
super();
__publicField(this, "id");
__publicField(this, "author");
__publicField(this, "subscriber_count");
__publicField(this, "video_count");
__publicField(this, "long_byline");
__publicField(this, "short_byline");
__publicField(this, "endpoint");
__publicField(this, "subscribe_button");
__publicField(this, "description_snippet");
this.id = data.channelId;
this.author = new Author({
...data.title,
navigationEndpoint: data.navigationEndpoint
}, data.ownerBadges, data.thumbnail);
this.subscriber_count = new Text2(data.subscriberCountText);
this.video_count = new Text2(data.videoCountText);
this.long_byline = new Text2(data.longBylineText);
this.short_byline = new Text2(data.shortBylineText);
this.endpoint = new NavigationEndpoint(data.navigationEndpoint);
this.subscribe_button = parser_exports.parseItem(data.subscribeButton, [SubscribeButton, Button]);
this.description_snippet = new Text2(data.descriptionSnippet);
}
};
__name(_Channel, "Channel");
__publicField(_Channel, "type", "Channel");
var Channel = _Channel;
// dist/src/parser/classes/ChannelAboutFullMetadata.js
var _ChannelAboutFullMetadata = class _ChannelAboutFullMetadata extends YTNode {
constructor(data) {
super();
__publicField(this, "id");
__publicField(this, "name");
__publicField(this, "avatar");
__publicField(this, "canonical_channel_url");
__publicField(this, "primary_links");
__publicField(this, "view_count");
__publicField(this, "joined_date");
__publicField(this, "description");
__publicField(this, "email_reveal");
__publicField(this, "can_reveal_email");
__publicField(this, "country");
__publicField(this, "buttons");
this.id = data.channelId;
this.name = new Text2(data.title);
this.avatar = Thumbnail.fromResponse(data.avatar);
this.canonical_channel_url = data.canonicalChannelUrl;
this.primary_links = data.primaryLinks?.map((link) => ({
endpoint: new NavigationEndpoint(link.navigationEndpoint),
icon: Thumbnail.fromResponse(link.icon),
title: new Text2(link.title)
})) ?? [];
this.view_count = new Text2(data.viewCountText);
this.joined_date = new Text2(data.joinedDateText);
this.description = new Text2(data.description);
this.email_reveal = new NavigationEndpoint(data.onBusinessEmailRevealClickCommand);
this.can_reveal_email = !data.signInForBusinessEmail;
this.country = new Text2(data.country);
this.buttons = parser_exports.parseArray(data.actionButtons, Button);
}
};
__name(_ChannelAboutFullMetadata, "ChannelAboutFullMetadata");
__publicField(_ChannelAboutFullMetadata, "type", "ChannelAboutFullMetadata");
var ChannelAboutFullMetadata = _ChannelAboutFullMetadata;
// dist/src/parser/classes/ChannelAgeGate.js
var _ChannelAgeGate = class _ChannelAgeGate extends YTNode {
constructor(data) {
super();
__publicField(this, "channel_title");
__publicField(this, "avatar");
__publicField(this, "header");
__publicField(this, "main_text");
__publicField(this, "sign_in_button");
__publicField(this, "secondary_text");
this.channel_title = data.channelTitle;
this.avatar = Thumbnail.fromResponse(data.avatar);
this.header = new Text2(data.header);
this.main_text = new Text2(data.mainText);
this.sign_in_button = parser_exports.parseItem(data.signInButton, Button);
this.secondary_text = new Text2(data.secondaryText);
}
};
__name(_ChannelAgeGate, "ChannelAgeGate");
__publicField(_ChannelAgeGate, "type", "ChannelAgeGate");
var ChannelAgeGate = _ChannelAgeGate;
// dist/src/parser/classes/ChannelFeaturedContent.js
var _ChannelFeaturedContent = class _ChannelFeaturedContent extends YTNode {
constructor(data) {
super();
__publicField(this, "title");
__publicField(this, "items");
this.title = new Text2(data.title);
this.items = parser_exports.parseArray(data.items);
}
};
__name(_ChannelFeaturedContent, "ChannelFeaturedContent");
__publicField(_ChannelFeaturedContent, "type", "ChannelFeaturedContent");
var ChannelFeaturedContent = _ChannelFeaturedContent;
// dist/src/parser/classes/ChannelMetadata.js
var _ChannelMetadata = class _ChannelMetadata extends YTNode {
constructor(data) {
super();
__publicField(this, "title");
__publicField(this, "description");
__publicField(this, "url");
__publicField(this, "rss_url");
__publicField(this, "vanity_channel_url");
__publicField(this, "external_id");
__publicField(this, "is_family_safe");
__publicField(this, "keywords");
__publicField(this, "avatar");
__publicField(this, "music_artist_name");
__publicField(this, "available_countries");
__publicField(this, "android_deep_link");
__publicField(this, "android_appindexing_link");
__publicField(this, "ios_appindexing_link");
this.title = data.title;
this.description = data.description;
this.url = data.channelUrl;
this.rss_url = data.rssUrl;
this.vanity_channel_url = data.vanityChannelUrl;
this.external_id = data.externalId;
this.is_family_safe = data.isFamilySafe;
this.keywords = data.keywords;
this.avatar = Thumbnail.fromResponse(data.avatar);
this.music_artist_name = typeof data.musicArtistName === "string" && data.musicArtistName.length > 0 ? data.musicArtistName : void 0;
this.available_countries = data.availableCountryCodes;
this.android_deep_link = data.androidDeepLink;
this.android_appindexing_link = data.androidAppindexingLink;
this.ios_appindexing_link = data.iosAppindexingLink;
}
};
__name(_ChannelMetadata, "ChannelMetadata");
__publicField(_ChannelMetadata, "type", "ChannelMetadata");
var ChannelMetadata = _ChannelMetadata;
// dist/src/parser/classes/ChannelMobileHeader.js
var _ChannelMobileHeader = class _ChannelMobileHeader extends YTNode {
constructor(data) {
super();
__publicField(this, "title");
this.title = new Text2(data.title);
}
};
__name(_ChannelMobileHeader, "ChannelMobileHeader");
__publicField(_ChannelMobileHeader, "type", "ChannelMobileHeader");
var ChannelMobileHeader = _ChannelMobileHeader;
// dist/src/parser/classes/ChannelOptions.js
var _ChannelOptions = class _ChannelOptions extends YTNode {
constructor(data) {
super();
__publicField(this, "avatar");
__publicField(this, "endpoint");
__publicField(this, "name");
__publicField(this, "links");
this.avatar = Thumbnail.fromResponse(data.avatar);
this.endpoint = new NavigationEndpoint(data.avatarEndpoint);
this.name = data.name;
this.links = data.links.map((link) => new Text2(link));
}
};
__name(_ChannelOptions, "ChannelOptions");
__publicField(_ChannelOptions, "type", "ChannelOptions");
var ChannelOptions = _ChannelOptions;
// dist/src/parser/classes/ChannelOwnerEmptyState.js
var _ChannelOwnerEmptyState = class _ChannelOwnerEmptyState extends YTNode {
constructor(data) {
super();
__publicField(this, "illustration");
__publicField(this, "description");
this.illustration = Thumbnail.fromResponse(data.illustration);
this.description = new Text2(data.description);
}
};
__name(_ChannelOwnerEmptyState, "ChannelOwnerEmptyState");
__publicField(_ChannelOwnerEmptyState, "type", "ChannelOwnerEmptyState");
var ChannelOwnerEmptyState = _ChannelOwnerEmptyState;
// dist/src/parser/classes/ChannelSubMenu.js
var _ChannelSubMenu = class _ChannelSubMenu extends YTNode {
constructor(data) {
super();
__publicField(this, "content_type_sub_menu_items");
__publicField(this, "sort_setting");
this.content_type_sub_menu_items = data.sortSetting?.sortFilterSubMenuRenderer?.subMenuItems?.map((item) => ({
endpoint: new NavigationEndpoint(item.navigationEndpoint || item.endpoint),
selected: item.selected,
title: item.title
})) || [];
this.sort_setting = parser_exports.parseItem(data.sortSetting);
}
};
__name(_ChannelSubMenu, "ChannelSubMenu");
__publicField(_ChannelSubMenu, "type", "ChannelSubMenu");
var ChannelSubMenu = _ChannelSubMenu;
// dist/src/parser/classes/ChannelSwitcherHeader.js
var _ChannelSwitcherHeader = class _ChannelSwitcherHeader extends YTNode {
constructor(data) {
super();
__publicField(this, "title");
__publicField(this, "button");
this.title = new Text2(data.title).toString();
if (Reflect.has(data, "button")) {
this.button = parser_exports.parseItem(data.button, Button);
}
}
};
__name(_ChannelSwitcherHeader, "ChannelSwitcherHeader");
__publicField(_ChannelSwitcherHeader, "type", "ChannelSwitcherHeader");
var ChannelSwitcherHeader = _ChannelSwitcherHeader;
// dist/src/parser/classes/ChannelThumbnailWithLink.js
var _ChannelThumbnailWithLink = class _ChannelThumbnailWithLink extends YTNode {
constructor(data) {
super();
__publicField(this, "thumbnails");
__publicField(this, "endpoint");
__publicField(this, "accessibility");
this.thumbnails = Thumbnail.fromResponse(data.thumbnail);
this.endpoint = new NavigationEndpoint(data.navigationEndpoint);
if ("accessibility" in data && "accessibilityData" in data.accessibility) {
this.accessibility = {
accessibility_data: new AccessibilityData(data.accessibility.accessibilityData)
};
}
}
get label() {
return this.accessibility?.accessibility_data?.label;
}
};
__name(_ChannelThumbnailWithLink, "ChannelThumbnailWithLink");
__publicField(_ChannelThumbnailWithLink, "type", "ChannelThumbnailWithLink");
var ChannelThumbnailWithLink = _ChannelThumbnailWithLink;
// dist/src/parser/classes/ChannelVideoPlayer.js
var _ChannelVideoPlayer = class _ChannelVideoPlayer extends YTNode {
constructor(data) {
super();
__publicField(this, "id");
__publicField(this, "title");
__publicField(this, "description");
__publicField(this, "view_count");
__publicField(this, "published_time");
this.id = data.videoId;
this.title = new Text2(data.title);
this.description = new Text2(data.description);
this.view_count = new Text2(data.viewCountText);
this.published_time = new Text2(data.publishedTimeText);
}
};
__name(_ChannelVideoPlayer, "ChannelVideoPlayer");
__publicField(_ChannelVideoPlayer, "type", "ChannelVideoPlayer");
var ChannelVideoPlayer = _ChannelVideoPlayer;
// dist/src/parser/classes/Chapter.js
var _Chapter = class _Chapter extends YTNode {
constructor(data) {
super();
__publicField(this, "title");
__publicField(this, "time_range_start_millis");
__publicField(this, "thumbnail");
this.title = new Text2(data.title);
this.time_range_start_millis = data.timeRangeStartMillis;
this.thumbnail = Thumbnail.fromResponse(data.thumbnail);
}
};
__name(_Chapter, "Chapter");
__publicField(_Chapter, "type", "Chapter");
var Chapter = _Chapter;
// dist/src/parser/classes/ChildVideo.js
var _ChildVideo = class _ChildVideo extends YTNode {
constructor(data) {
super();
__publicField(this, "id");
__publicField(this, "title");
__publicField(this, "duration");
__publicField(this, "endpoint");
this.id = data.videoId;
this.title = new Text2(data.title);
this.duration = {
text: data.lengthText.simpleText,
seconds: timeToSeconds(data.lengthText.simpleText)
};
this.endpoint = new NavigationEndpoint(data.navigationEndpoint);
}
};
__name(_ChildVideo, "ChildVideo");
__publicField(_ChildVideo, "type", "ChildVideo");
var ChildVideo = _ChildVideo;
// dist/src/parser/classes/ChipView.js
var _ChipView = class _ChipView extends YTNode {
constructor(data) {
super();
__publicField(this, "text");
__publicField(this, "display_type");
__publicField(this, "endpoint");
__publicField(this, "chip_entity_key");
this.text = data.text;
this.display_type = data.displayType;
this.endpoint = new NavigationEndpoint(data.tapCommand);
this.chip_entity_key = data.chipEntityKey;
}
};
__name(_ChipView, "ChipView");
__publicField(_ChipView, "type", "ChipView");
var ChipView = _ChipView;
// dist/src/parser/classes/ChipBarView.js
var _ChipBarView = class _ChipBarView extends YTNode {
constructor(data) {
super();
__publicField(this, "chips");
this.chips = parser_exports.parseArray(data.chips, ChipView);
}
};
__name(_ChipBarView, "ChipBarView");
__publicField(_ChipBarView, "type", "ChipBarView");
var ChipBarView = _ChipBarView;
// dist/src/parser/classes/ChipCloudChip.js
var _ChipCloudChip = class _ChipCloudChip extends YTNode {
constructor(data) {
super();
__publicField(this, "is_selected");
__publicField(this, "endpoint");
__publicField(this, "text");
this.is_selected = data.isSelected;
if (Reflect.has(data, "navigationEndpoint")) {
this.endpoint = new NavigationEndpoint(data.navigationEndpoint);
}
this.text = new Text2(data.text).toString();
}
};
__name(_ChipCloudChip, "ChipCloudChip");
__publicField(_ChipCloudChip, "type", "ChipCloudChip");
var ChipCloudChip = _ChipCloudChip;
// dist/src/parser/classes/ChipCloud.js
var _ChipCloud = class _ChipCloud extends YTNode {
constructor(data) {
super();
__publicField(this, "chips");
__publicField(this, "next_button");
__publicField(this, "previous_button");
__publicField(this, "horizontal_scrollable");
this.chips = parser_exports.parseArray(data.chips, ChipCloudChip);
this.next_button = parser_exports.parseItem(data.nextButton, Button);
this.previous_button = parser_exports.parseItem(data.previousButton, Button);
this.horizontal_scrollable = data.horizontalScrollable;
}
};
__name(_ChipCloud, "ChipCloud");
__publicField(_ChipCloud, "type", "ChipCloud");
var ChipCloud = _ChipCloud;
// dist/src/parser/classes/ClientSideToggleMenuItem.js
var _ClientSideToggleMenuItem = class _ClientSideToggleMenuItem extends YTNode {
constructor(data) {
super();
__publicField(this, "text");
__publicField(this, "icon_type");
__publicField(this, "toggled_text");
__publicField(this, "toggled_icon_type");
__publicField(this, "is_toggled");
__publicField(this, "menu_item_identifier");
__publicField(this, "endpoint");
__publicField(this, "logging_directives");
this.text = new Text2(data.defaultText);
this.icon_type = data.defaultIcon.iconType;
this.toggled_text = new Text2(data.toggledText);
this.toggled_icon_type = data.toggledIcon.iconType;
if (Reflect.has(data, "isToggled")) {
this.is_toggled = data.isToggled;
}
this.menu_item_identifier = data.menuItemIdentifier;
this.endpoint = new NavigationEndpoint(data.command);
if (Reflect.has(data, "loggingDirectives")) {
this.logging_directives = {
visibility: {
types: data.loggingDirectives.visibility.types
},
enable_displaylogger_experiment: data.loggingDirectives.enableDisplayloggerExperiment
};
}
}
};
__name(_ClientSideToggleMenuItem, "ClientSideToggleMenuItem");
__publicField(_ClientSideToggleMenuItem, "type", "ClientSideToggleMenuItem");
var ClientSideToggleMenuItem = _ClientSideToggleMenuItem;
// dist/src/parser/classes/CollaboratorInfoCardContent.js
var _CollaboratorInfoCardContent = class _CollaboratorInfoCardContent extends YTNode {
constructor(data) {
super();
__publicField(this, "channel_avatar");
__publicField(this, "custom_text");
__publicField(this, "channel_name");
__publicField(this, "subscriber_count");
__publicField(this, "endpoint");
this.channel_avatar = Thumbnail.fromResponse(data.channelAvatar);
this.custom_text = new Text2(data.customText);
this.channel_name = new Text2(data.channelName);
this.subscriber_count = new Text2(data.subscriberCountText);
this.endpoint = new NavigationEndpoint(data.endpoint);
}
};
__name(_CollaboratorInfoCardContent, "CollaboratorInfoCardContent");
__publicField(_CollaboratorInfoCardContent, "type", "CollaboratorInfoCardContent");
var CollaboratorInfoCardContent = _CollaboratorInfoCardContent;
// dist/src/parser/classes/CollageHeroImage.js
var _CollageHeroImage = class _CollageHeroImage extends YTNode {
constructor(data) {
super();
__publicField(this, "left");
__publicField(this, "top_right");
__publicField(this, "bottom_right");
__publicField(this, "endpoint");
this.left = Thumbnail.fromResponse(data.leftThumbnail);
this.top_right = Thumbnail.fromResponse(data.topRightThumbnail);
this.bottom_right = Thumbnail.fromResponse(data.bottomRightThumbnail);
this.endpoint = new NavigationEndpoint(data.navigationEndpoint);
}
};
__name(_CollageHeroImage, "CollageHeroImage");
__publicField(_CollageHeroImage, "type", "CollageHeroImage");
var CollageHeroImage = _CollageHeroImage;
// dist/src/parser/classes/ThumbnailHoverOverlayView.js
var _ThumbnailHoverOverlayView = class _ThumbnailHoverOverlayView extends YTNode {
constructor(data) {
super();
__publicField(this, "icon_name");
__publicField(this, "text");
__publicField(this, "style");
this.icon_name = data.icon.sources[0].clientResource.imageName;
this.text = Text2.fromAttributed(data.text);
this.style = data.style;
}
};
__name(_ThumbnailHoverOverlayView, "ThumbnailHoverOverlayView");
__publicField(_ThumbnailHoverOverlayView, "type", "ThumbnailHoverOverlayView");
var ThumbnailHoverOverlayView = _ThumbnailHoverOverlayView;
// dist/src/parser/classes/ThumbnailBadgeView.js
var _ThumbnailBadgeView = class _ThumbnailBadgeView extends YTNode {
constructor(data) {
super();
__publicField(this, "icon_name");
__publicField(this, "text");
__publicField(this, "badge_style");
__publicField(this, "background_color");
this.text = data.text;
this.badge_style = data.badgeStyle;
if (data.backgroundColor) {
this.background_color = {
light_theme: data.backgroundColor.lightTheme,
dark_theme: data.backgroundColor.darkTheme
};
}
if (data.iconName) {
this.icon_name = data.icon.sources[0].clientResource.imageName;
}
}
};
__name(_ThumbnailBadgeView, "ThumbnailBadgeView");
__publicField(_ThumbnailBadgeView, "type", "ThumbnailBadgeView");
var ThumbnailBadgeView = _ThumbnailBadgeView;
// dist/src/parser/classes/ThumbnailOverlayBadgeView.js
var _ThumbnailOverlayBadgeView = class _ThumbnailOverlayBadgeView extends YTNode {
constructor(data) {
super();
__publicField(this, "badges");
__publicField(this, "position");
this.badges = parser_exports.parseArray(data.thumbnailBadges, ThumbnailBadgeView);
this.position = data.position;
}
};
__name(_ThumbnailOverlayBadgeView, "ThumbnailOverlayBadgeView");
__publicField(_ThumbnailOverlayBadgeView, "type", "ThumbnailOverlayBadgeView");
var ThumbnailOverlayBadgeView = _ThumbnailOverlayBadgeView;
// dist/src/parser/classes/ThumbnailHoverOverlayToggleActionsView.js
var _ThumbnailHoverOverlayToggleActionsView = class _ThumbnailHoverOverlayToggleActionsView extends YTNode {
constructor(data) {
super();
__publicField(this, "buttons");
this.buttons = parser_exports.parseArray(data.buttons, ToggleButtonView);
}
};
__name(_ThumbnailHoverOverlayToggleActionsView, "ThumbnailHoverOverlayToggleActionsView");
__publicField(_ThumbnailHoverOverlayToggleActionsView, "type", "ThumbnailHoverOverlayToggleActionsView");
var ThumbnailHoverOverlayToggleActionsView = _ThumbnailHoverOverlayToggleActionsView;
// dist/src/parser/classes/ThumbnailOverlayProgressBarView.js
var _ThumbnailOverlayProgressBarView = class _ThumbnailOverlayProgressBarView extends YTNode {
constructor(data) {
super();
__publicField(this, "start_percent");
this.start_percent = data.startPercent;
}
};
__name(_ThumbnailOverlayProgressBarView, "ThumbnailOverlayProgressBarView");
__publicField(_ThumbnailOverlayProgressBarView, "type", "ThumbnailOverlayProgressBarView");
var ThumbnailOverlayProgressBarView = _ThumbnailOverlayProgressBarView;
// dist/src/parser/classes/ThumbnailBottomOverlayView.js
var _ThumbnailBottomOverlayView = class _ThumbnailBottomOverlayView extends YTNode {
constructor(data) {
super();
__publicField(this, "progress_bar");
__publicField(this, "badges");
this.progress_bar = parser_exports.parseItem(data.progressBar, ThumbnailOverlayProgressBarView);
this.badges = parser_exports.parseArray(data.badges, ThumbnailBadgeView);
}
};
__name(_ThumbnailBottomOverlayView, "ThumbnailBottomOverlayView");
__publicField(_ThumbnailBottomOverlayView, "type", "ThumbnailBottomOverlayView");
var ThumbnailBottomOverlayView = _ThumbnailBottomOverlayView;
// dist/src/parser/classes/ThumbnailView.js
var _ThumbnailView = class _ThumbnailView extends YTNode {
constructor(data) {
super();
__publicField(this, "image");
__publicField(this, "overlays");
__publicField(this, "background_color");
this.image = Thumbnail.fromResponse(data.image);
this.overlays = parser_exports.parseArray(data.overlays, [
ThumbnailHoverOverlayToggleActionsView,
ThumbnailBottomOverlayView,
ThumbnailOverlayBadgeView,
ThumbnailHoverOverlayView,
AnimatedThumbnailOverlayView
]);
if ("backgroundColor" in data) {
this.background_color = {
light_theme: data.backgroundColor.lightTheme,
dark_theme: data.backgroundColor.darkTheme
};
}
}
};
__name(_ThumbnailView, "ThumbnailView");
__publicField(_ThumbnailView, "type", "ThumbnailView");
var ThumbnailView = _ThumbnailView;
// dist/src/parser/classes/CollectionThumbnailView.js
var _CollectionThumbnailView = class _CollectionThumbnailView extends YTNode {
constructor(data) {
super();
__publicField(this, "primary_thumbnail");
__publicField(this, "stack_color");
this.primary_thumbnail = parser_exports.parseItem(data.primaryThumbnail, ThumbnailView);
if ("stackColor" in data) {
this.stack_color = {
light_theme: data.stackColor?.lightTheme,
dark_theme: data.stackColor?.darkTheme
};
}
}
};
__name(_CollectionThumbnailView, "CollectionThumbnailView");
__publicField(_CollectionThumbnailView, "type", "CollectionThumbnailView");
var CollectionThumbnailView = _CollectionThumbnailView;
// dist/src/parser/classes/commands/AddToPlaylistCommand.js
var _AddToPlaylistCommand = class _AddToPlaylistCommand extends YTNode {
constructor(data) {
super();
__publicField(this, "open_miniplayer");
__publicField(this, "video_id");
__publicField(this, "list_type");
__publicField(this, "endpoint");
__publicField(this, "video_ids");
this.open_miniplayer = data.openMiniplayer;
this.video_id = data.videoId;
this.list_type = data.listType;
this.endpoint = new NavigationEndpoint(data.onCreateListCommand);
this.video_ids = data.videoIds;
}
};
__name(_AddToPlaylistCommand, "AddToPlaylistCommand");
__publicField(_AddToPlaylistCommand, "type", "AddToPlaylistCommand");
var AddToPlaylistCommand = _AddToPlaylistCommand;
// dist/src/parser/classes/commands/ContinuationCommand.js
var _data;
var _ContinuationCommand = class _ContinuationCommand extends YTNode {
constructor(data) {
super();
__privateAdd(this, _data);
__privateSet(this, _data, data);
}
getApiPath() {
switch (__privateGet(this, _data).request) {
case "CONTINUATION_REQUEST_TYPE_WATCH_NEXT":
return "next";
case "CONTINUATION_REQUEST_TYPE_BROWSE":
return "browse";
case "CONTINUATION_REQUEST_TYPE_SEARCH":
return "search";
case "CONTINUATION_REQUEST_TYPE_ACCOUNTS_LIST":
return "account/accounts_list";
case "CONTINUATION_REQUEST_TYPE_COMMENTS_NOTIFICATION_MENU":
return "notification/get_notification_menu";
case "CONTINUATION_REQUEST_TYPE_COMMENT_REPLIES":
return "comment/get_comment_replies";
case "CONTINUATION_REQUEST_TYPE_REEL_WATCH_SEQUENCE":
return "reel/reel_watch_sequence";
case "CONTINUATION_REQUEST_TYPE_GET_PANEL":
return "get_panel";
default:
return "";
}
}
buildRequest() {
const request = {};
if (__privateGet(this, _data).formData)
request.formData = __privateGet(this, _data).formData;
if (__privateGet(this, _data).token)
request.continuation = __privateGet(this, _data).token;
if (__privateGet(this, _data).request === "CONTINUATION_REQUEST_TYPE_COMMENTS_NOTIFICATION_MENU") {
request.notificationsMenuRequestType = "NOTIFICATIONS_MENU_REQUEST_TYPE_COMMENTS";
if (__privateGet(this, _data).token) {
request.fetchCommentsParams = {
continuation: __privateGet(this, _data).token
};
delete request.continuation;
}
}
return request;
}
};
_data = new WeakMap();
__name(_ContinuationCommand, "ContinuationCommand");
__publicField(_ContinuationCommand, "type", "ContinuationCommand");
var ContinuationCommand = _ContinuationCommand;
// dist/src/parser/classes/commands/GetKidsBlocklistPickerCommand.js
var API_PATH = "kids/get_kids_blocklist_picker";
var _data2;
var _GetKidsBlocklistPickerCommand = class _GetKidsBlocklistPickerCommand extends YTNode {
constructor(data) {
super();
__privateAdd(this, _data2);
__privateSet(this, _data2, data);
}
getApiPath() {
return API_PATH;
}
buildRequest() {
const request = {};
if (__privateGet(this, _data2).blockedForKidsContent)
request.blockedForKidsContent = __privateGet(this, _data2).blockedForKidsContent;
return request;
}
};
_data2 = new WeakMap();
__name(_GetKidsBlocklistPickerCommand, "GetKidsBlocklistPickerCommand");
__publicField(_GetKidsBlocklistPickerCommand, "type", "GetKidsBlocklistPickerCommand");
var GetKidsBlocklistPickerCommand = _GetKidsBlocklistPickerCommand;
// dist/src/parser/classes/commands/RunAttestationCommand.js
var _RunAttestationCommand = class _RunAttestationCommand extends YTNode {
constructor(data) {
super();
__publicField(this, "engagement_type");
__publicField(this, "ids");
this.engagement_type = data.engagementType;
if (Reflect.has(data, "ids")) {
this.ids = data.ids.map((id) => ({
encrypted_video_id: id.encryptedVideoId,
external_channel_id: id.externalChannelId,
comment_id: id.commentId,
external_owner_id: id.externalOwnerId,
artist_id: id.artistId,
playlist_id: id.playlistId,
external_post_id: id.externalPostId,
share_id: id.shareId
}));
}
}
};
__name(_RunAttestationCommand, "RunAttestationCommand");
__publicField(_RunAttestationCommand, "type", "RunAttestationCommand");
var RunAttestationCommand = _RunAttestationCommand;
// dist/src/parser/classes/commands/ShowDialogCommand.js
var _ShowDialogCommand = class _ShowDialogCommand extends YTNode {
constructor(data) {
super();
__publicField(this, "inline_content");
__publicField(this, "remove_default_padding");
this.inline_content = parser_exports.parseItem(data.panelLoadingStrategy?.inlineContent);
this.remove_default_padding = !!data.removeDefaultPadding;
}
};
__name(_ShowDialogCommand, "ShowDialogCommand");
__publicField(_ShowDialogCommand, "type", "ShowDialogCommand");
var ShowDialogCommand = _ShowDialogCommand;
// dist/src/parser/classes/commands/UpdateEngagementPanelContentCommand.js
var _UpdateEngagementPanelContentCommand = class _UpdateEngagementPanelContentCommand extends YTNode {
constructor(data) {
super();
__publicField(this, "content_source_panel_identifier");
__publicField(this, "target_panel_identifier");
this.content_source_panel_identifier = data.contentSourcePanelIdentifier;
this.target_panel_identifier = data.targetPanelIdentifier;
}
};
__name(_UpdateEngagementPanelContentCommand, "UpdateEngagementPanelContentCommand");
__publicField(_UpdateEngagementPanelContentCommand, "type", "UpdateEngagementPanelContentCommand");
var UpdateEngagementPanelContentCommand = _UpdateEngagementPanelContentCommand;
// dist/src/parser/classes/comments/AuthorCommentBadge.js
var _data3;
var _AuthorCommentBadge = class _AuthorCommentBadge extends YTNode {
constructor(data) {
super();
__privateAdd(this, _data3);
__publicField(this, "icon_type");
__publicField(this, "tooltip");
__publicField(this, "style");
if (Reflect.has(data, "icon") && Reflect.has(data.icon, "iconType")) {
this.icon_type = data.icon.iconType;
}
this.tooltip = data.iconTooltip;
if (this.tooltip === "Verified") {
this.style = "BADGE_STYLE_TYPE_VERIFIED";
data.style = "BADGE_STYLE_TYPE_VERIFIED";
}
__privateSet(this, _data3, data);
}
get orig_badge() {
return __privateGet(this, _data3);
}
};
_data3 = new WeakMap();
__name(_AuthorCommentBadge, "AuthorCommentBadge");
__publicField(_AuthorCommentBadge, "type", "AuthorCommentBadge");
var AuthorCommentBadge = _AuthorCommentBadge;
// dist/src/parser/classes/comments/EmojiPicker.js
var _EmojiPicker = class _EmojiPicker extends YTNode {
constructor(data) {
super();
__publicField(this, "id");
__publicField(this, "categories");
__publicField(this, "category_buttons");
__publicField(this, "search_placeholder");
__publicField(this, "search_no_results");
__publicField(this, "pick_skin_tone");
__publicField(this, "clear_search_label");
__publicField(this, "skin_tone_generic_label");
__publicField(this, "skin_tone_light_label");
__publicField(this, "skin_tone_medium_light_label");
__publicField(this, "skin_tone_medium_label");
__publicField(this, "skin_tone_medium_dark_label");
__publicField(this, "skin_tone_dark_label");
this.id = data.id;
this.categories = parser_exports.parseArray(data.categories);
this.category_buttons = parser_exports.parseArray(data.categoryButtons);
this.search_placeholder = new Text2(data.searchPlaceholderText);
this.search_no_results = new Text2(data.searchNoResultsText);
this.pick_skin_tone = new Text2(data.pickSkinToneText);
this.clear_search_label = data.clearSearchLabel;
this.skin_tone_generic_label = data.skinToneGenericLabel;
this.skin_tone_light_label = data.skinToneLightLabel;
this.skin_tone_medium_light_label = data.skinToneMediumLightLabel;
this.skin_tone_medium_label = data.skinToneMediumLabel;
this.skin_tone_medium_dark_label = data.skinToneMediumDarkLabel;
this.skin_tone_dark_label = data.skinToneDarkLabel;
}
};
__name(_EmojiPicker, "EmojiPicker");
__publicField(_EmojiPicker, "type", "EmojiPicker");
var EmojiPicker = _EmojiPicker;
// dist/src/parser/classes/comments/CommentDialog.js
var _CommentDialog = class _CommentDialog extends YTNode {
constructor(data) {
super();
__publicField(this, "editable_text");
__publicField(this, "author_thumbnail");
__publicField(this, "submit_button");
__publicField(this, "cancel_button");
__publicField(this, "placeholder");
__publicField(this, "emoji_button");
__publicField(this, "emoji_picker");
this.editable_text = new Text2(data.editableText);
this.author_thumbnail = Thumbnail.fromResponse(data.authorThumbnail);
this.submit_button = parser_exports.parseItem(data.submitButton, Button);
this.cancel_button = parser_exports.parseItem(data.cancelButton, Button);
this.placeholder = new Text2(data.placeholderText);
this.emoji_button = parser_exports.parseItem(data.emojiButton, Button);
this.emoji_picker = parser_exports.parseItem(data.emojiPicker, EmojiPicker);
}
};
__name(_CommentDialog, "CommentDialog");
__publicField(_CommentDialog, "type", "CommentDialog");
var CommentDialog = _CommentDialog;
// dist/src/parser/classes/comments/CommentReplies.js
var _CommentReplies = class _CommentReplies extends YTNode {
constructor(data) {
super();
__publicField(this, "contents");
__publicField(this, "view_replies");
__publicField(this, "hide_replies");
__publicField(this, "view_replies_creator_thumbnail");
__publicField(this, "has_channel_owner_replied");
this.contents = parser_exports.parseArray(data.contents);
this.view_replies = parser_exports.parseItem(data.viewReplies, Button);
this.hide_replies = parser_exports.parseItem(data.hideReplies, Button);
this.view_replies_creator_thumbnail = Thumbnail.fromResponse(data.viewRepliesCreatorThumbnail);
this.has_channel_owner_replied = !!data.viewRepliesCreatorThumbnail;
}
};
__name(_CommentReplies, "CommentReplies");
__publicField(_CommentReplies, "type", "CommentReplies");
var CommentReplies = _CommentReplies;
// dist/src/parser/classes/comments/CommentReplyDialog.js
var _CommentReplyDialog = class _CommentReplyDialog extends YTNode {
constructor(data) {
super();
__publicField(this, "reply_button");
__publicField(this, "cancel_button");
__publicField(this, "author_thumbnail");
__publicField(this, "placeholder");
__publicField(this, "error_message");
this.reply_button = parser_exports.parseItem(data.replyButton, Button);
this.cancel_button = parser_exports.parseItem(data.cancelButton, Button);
this.author_thumbnail = Thumbnail.fromResponse(data.authorThumbnail);
this.placeholder = new Text2(data.placeholderText);
this.error_message = new Text2(data.errorMessage);
}
};
__name(_CommentReplyDialog, "CommentReplyDialog");
__publicField(_CommentReplyDialog, "type", "CommentReplyDialog");
var CommentReplyDialog = _CommentReplyDialog;
// dist/src/parser/classes/comments/CommentsSimplebox.js
var _CommentsSimplebox = class _CommentsSimplebox extends YTNode {
constructor(data) {
super();
__publicField(this, "simplebox_avatar");
__publicField(this, "simplebox_placeholder");
this.simplebox_avatar = Thumbnail.fromResponse(data.simpleboxAvatar);
this.simplebox_placeholder = new Text2(data.simpleboxPlaceholder);
}
};
__name(_CommentsSimplebox, "CommentsSimplebox");
__publicField(_CommentsSimplebox, "type", "CommentsSimplebox");
var CommentsSimplebox = _CommentsSimplebox;
// dist/src/parser/classes/comments/CommentsEntryPointTeaser.js
var _CommentsEntryPointTeaser = class _CommentsEntryPointTeaser extends YTNode {
constructor(data) {
super();
__publicField(this, "teaser_avatar");
__publicField(this, "teaser_content");
if (Reflect.has(data, "teaserAvatar")) {
this.teaser_avatar = Thumbnail.fromResponse(data.teaserAvatar);
}
if (Reflect.has(data, "teaserContent")) {
this.teaser_content = new Text2(data.teaserContent);
}
}
};
__name(_CommentsEntryPointTeaser, "CommentsEntryPointTeaser");
__publicField(_CommentsEntryPointTeaser, "type", "CommentsEntryPointTeaser");
var CommentsEntryPointTeaser = _CommentsEntryPointTeaser;
// dist/src/parser/classes/comments/CommentsEntryPointHeader.js
var _CommentsEntryPointHeader = class _CommentsEntryPointHeader extends YTNode {
constructor(data) {
super();
__publicField(this, "header");
__publicField(this, "comment_count");
__publicField(this, "teaser_avatar");
__publicField(this, "teaser_content");
__publicField(this, "content_renderer");
__publicField(this, "simplebox_placeholder");
if (Reflect.has(data, "headerText")) {
this.header = new Text2(data.headerText);
}
if (Reflect.has(data, "commentCount")) {
this.comment_count = new Text2(data.commentCount);
}
if (Reflect.has(data, "teaserAvatar") || Reflect.has(data, "simpleboxAvatar")) {
this.teaser_avatar = Thumbnail.fromResponse(data.teaserAvatar || data.simpleboxAvatar);
}
if (Reflect.has(data, "teaserContent")) {
this.teaser_content = new Text2(data.teaserContent);
}
if (Reflect.has(data, "contentRenderer")) {
this.content_renderer = parser_exports.parseItem(data.contentRenderer, [CommentsEntryPointTeaser, CommentsSimplebox]);
}
if (Reflect.has(data, "simpleboxPlaceholder")) {
this.simplebox_placeholder = new Text2(data.simpleboxPlaceholder);
}
}
};
__name(_CommentsEntryPointHeader, "CommentsEntryPointHeader");
__publicField(_CommentsEntryPointHeader, "type", "CommentsEntryPointHeader");
var CommentsEntryPointHeader = _CommentsEntryPointHeader;
// dist/src/parser/classes/comments/CommentsHeader.js
var _CommentsHeader = class _CommentsHeader extends YTNode {
constructor(data) {
super();
__publicField(this, "title");
__publicField(this, "count");
__publicField(this, "comments_count");
__publicField(this, "create_renderer");
__publicField(this, "sort_menu");
__publicField(this, "custom_emojis");
this.title = new Text2(data.titleText);
this.count = new Text2(data.countText);
this.comments_count = new Text2(data.commentsCount);
this.create_renderer = parser_exports.parseItem(data.createRenderer);
this.sort_menu = parser_exports.parseItem(data.sortMenu, SortFilterSubMenu);
if (Reflect.has(data, "customEmojis")) {
this.custom_emojis = data.customEmojis.map((emoji) => ({
emoji_id: emoji.emojiId,
shortcuts: emoji.shortcuts,
search_terms: emoji.searchTerms,
image: Thumbnail.fromResponse(emoji.image),
is_custom_emoji: emoji.isCustomEmoji
}));
}
}
};
__name(_CommentsHeader, "CommentsHeader");
__publicField(_CommentsHeader, "type", "CommentsHeader");
var CommentsHeader = _CommentsHeader;
// dist/src/parser/classes/comments/CommentSimplebox.js
var _CommentSimplebox = class _CommentSimplebox extends YTNode {
constructor(data) {
super();
__publicField(this, "submit_button");
__publicField(this, "cancel_button");
__publicField(this, "author_thumbnail");
__publicField(this, "placeholder");
__publicField(this, "avatar_size");
this.submit_button = parser_exports.parseItem(data.submitButton, Button);
this.cancel_button = parser_exports.parseItem(data.cancelButton, Button);
this.author_thumbnail = Thumbnail.fromResponse(data.authorThumbnail);
this.placeholder = new Text2(data.placeholderText);
this.avatar_size = data.avatarSize;
}
};
__name(_CommentSimplebox, "CommentSimplebox");
__publicField(_CommentSimplebox, "type", "CommentSimplebox");
var CommentSimplebox = _CommentSimplebox;
// dist/src/parser/classes/comments/VoiceReplyContainerView.js
var _VoiceReplyContainerView = class _VoiceReplyContainerView extends YTNode {
constructor(data) {
super();
__publicField(this, "voice_reply_unavailable_text");
__publicField(this, "transcript_text");
this.voice_reply_unavailable_text = Text2.fromAttributed(data.voiceReplyUnavailableText);
this.transcript_text = Text2.fromAttributed(data.transcriptText);
}
};
__name(_VoiceReplyContainerView, "VoiceReplyContainerView");
__publicField(_VoiceReplyContainerView, "type", "VoiceReplyContainerView");
var VoiceReplyContainerView = _VoiceReplyContainerView;
// dist/src/parser/classes/comments/CommentView.js
var _actions;
var _CommentView = class _CommentView extends YTNode {
constructor(data) {
super();
__privateAdd(this, _actions);
__publicField(this, "like_command");
__publicField(this, "dislike_command");
__publicField(this, "unlike_command");
__publicField(this, "undislike_command");
__publicField(this, "reply_command");
__publicField(this, "prepare_account_command");
__publicField(this, "comment_id");
__publicField(this, "is_pinned");
__publicField(this, "keys");
__publicField(this, "content");
__publicField(this, "published_time");
__publicField(this, "author_is_channel_owner");
__publicField(this, "creator_thumbnail_url");
__publicField(this, "like_button_a11y");
__publicField(this, "like_count");
__publicField(this, "like_count_liked");
__publicField(this, "like_count_a11y");
__publicField(this, "like_active_tooltip");
__publicField(this, "like_inactive_tooltip");
__publicField(this, "dislike_active_tooltip");
__publicField(this, "dislike_inactive_tooltip");
__publicField(this, "heart_active_tooltip");
__publicField(this, "reply_count");
__publicField(this, "reply_count_a11y");
__publicField(this, "is_member");
__publicField(this, "member_badge");
__publicField(this, "author");
__publicField(this, "is_liked");
__publicField(this, "is_disliked");
__publicField(this, "is_hearted");
__publicField(this, "voice_reply_container");
this.comment_id = data.commentId;
this.is_pinned = !!data.pinnedText;
this.keys = {
comment: data.commentKey,
comment_surface: data.commentSurfaceKey,
toolbar_state: data.toolbarStateKey,
toolbar_surface: data.toolbarSurfaceKey,
shared: data.sharedKey
};
}
applyMutations(comment, toolbar_state, toolbar_surface, comment_surface) {
if (comment) {
this.content = Text2.fromAttributed(comment.properties.content);
this.published_time = comment.properties.publishedTime;
this.author_is_channel_owner = !!comment.author.isCreator;
this.creator_thumbnail_url = comment.toolbar.creatorThumbnailUrl;
this.like_count = comment.toolbar.likeCountNotliked ? comment.toolbar.likeCountNotliked : "0";
this.like_count_liked = comment.toolbar.likeCountLiked ? comment.toolbar.likeCountLiked : "0";
this.like_count_a11y = comment.toolbar.likeCountA11y;
this.like_active_tooltip = comment.toolbar.likeActiveTooltip;
this.like_inactive_tooltip = comment.toolbar.likeInactiveTooltip;
this.dislike_active_tooltip = comment.toolbar.dislikeActiveTooltip;
this.dislike_inactive_tooltip = comment.toolbar.dislikeInactiveTooltip;
this.like_button_a11y = comment.toolbar.likeButtonA11y;
this.heart_active_tooltip = comment.toolbar.heartActiveTooltip;
this.reply_count_a11y = comment.toolbar.replyCountA11y;
this.reply_count = comment.toolbar.replyCount ? comment.toolbar.replyCount : "0";
this.is_member = !!comment.author.sponsorBadgeUrl;
if (Reflect.has(comment.author, "sponsorBadgeUrl")) {
this.member_badge = {
url: comment.author.sponsorBadgeUrl,
a11y: comment.author.A11y
};
}
this.author = new Author({
simpleText: comment.author.displayName,
navigationEndpoint: comment.avatar.endpoint
}, comment.author, comment.avatar.image, comment.author.channelId);
}
if (toolbar_state) {
this.is_hearted = toolbar_state.heartState === "TOOLBAR_HEART_STATE_HEARTED";
this.is_liked = toolbar_state.likeState === "TOOLBAR_LIKE_STATE_LIKED";
this.is_disliked = toolbar_state.likeState === "TOOLBAR_LIKE_STATE_DISLIKED";
}
if (toolbar_surface) {
if ("prepareAccountCommand" in toolbar_surface) {
this.prepare_account_command = new NavigationEndpoint(toolbar_surface.prepareAccountCommand);
} else {
this.like_command = new NavigationEndpoint(toolbar_surface.likeCommand);
this.dislike_command = new NavigationEndpoint(toolbar_surface.dislikeCommand);
this.unlike_command = new NavigationEndpoint(toolbar_surface.unlikeCommand);
this.undislike_command = new NavigationEndpoint(toolbar_surface.undislikeCommand);
this.reply_command = new NavigationEndpoint(toolbar_surface.replyCommand);
}
}
if (comment_surface) {
if ("voiceReplyContainerViewModel" in comment_surface) {
this.voice_reply_container = parser_exports.parseItem(comment_surface.voiceReplyContainerViewModel, VoiceReplyContainerView);
}
}
}
/**
* Likes the comment.
* @returns A promise that resolves to the API response.
* @throws If the Actions instance is not set for this comment or if the like command is not found.
*/
async like() {
if (!__privateGet(this, _actions))
throw new InnertubeError("Actions instance not set for this comment.");
if (!this.like_command)
throw new InnertubeError("Like command not found.");
if (this.is_liked)
throw new InnertubeError("This comment is already liked.", { comment_id: this.comment_id });
return this.like_command.call(__privateGet(this, _actions));
}
/**
* Dislikes the comment.
* @returns A promise that resolves to the API response.
* @throws If the Actions instance is not set for this comment or if the dislike command is not found.
*/
async dislike() {
if (!__privateGet(this, _actions))
throw new InnertubeError("Actions instance not set for this comment.");
if (!this.dislike_command)
throw new InnertubeError("Dislike command not found.");
if (this.is_disliked)
throw new InnertubeError("This comment is already disliked.", { comment_id: this.comment_id });
return this.dislike_command.call(__privateGet(this, _actions));
}
/**
* Unlikes the comment.
* @returns A promise that resolves to the API response.
* @throws If the Actions instance is not set for this comment or if the unlike command is not found.
*/
async unlike() {
if (!__privateGet(this, _actions))
throw new InnertubeError("Actions instance not set for this comment.");
if (!this.unlike_command)
throw new InnertubeError("Unlike command not found.");
if (!this.is_liked)
throw new InnertubeError("This comment is not liked.", { comment_id: this.comment_id });
return this.unlike_command.call(__privateGet(this, _actions));
}
/**
* Undislikes the comment.
* @returns A promise that resolves to the API response.
* @throws If the Actions instance is not set for this comment or if the undislike command is not found.
*/
async undislike() {
if (!__privateGet(this, _actions))
throw new InnertubeError("Actions instance not set for this comment.");
if (!this.undislike_command)
throw new InnertubeError("Undislike command not found.");
if (!this.is_disliked)
throw new InnertubeError("This comment is not disliked.", { comment_id: this.comment_id });
return this.undislike_command.call(__privateGet(this, _actions));
}
/**
* Replies to the comment.
* @param comment_text - The text of the reply.
* @returns A promise that resolves to the API response.
* @throws If the Actions instance is not set for this comment or if the reply command is not found.
*/
async reply(comment_text) {
if (!__privateGet(this, _actions))
throw new InnertubeError("Actions instance not set for this comment.");
if (!this.reply_command)
throw new InnertubeError("Reply command not found.");
const dialog = this.reply_command.dialog?.as(CommentReplyDialog);
if (!dialog)
throw new InnertubeError("Reply dialog not found.");
const reply_button = dialog.reply_button;
if (!reply_button)
throw new InnertubeError("Reply button not found in the dialog.");
if (!reply_button.endpoint)
throw new InnertubeError("Reply button endpoint not found.");
return reply_button.endpoint.call(__privateGet(this, _actions), { commentText: comment_text });
}
/**
* Translates the comment to the specified target language.
* @param target_language - The target language to translate the comment to, e.g. 'en', 'ja'.
* @returns Resolves to an ApiResponse object with the translated content, if available.
* @throws if the Actions instance is not set for this comment or if the comment content is not found.
*/
async translate(target_language) {
if (!__privateGet(this, _actions))
throw new InnertubeError("Actions instance not set for this comment.");
if (!this.content)
throw new InnertubeError("Comment content not found.", { comment_id: this.comment_id });
const text = this.content.toString().replace(/[^\p{L}\p{N}\p{P}\p{Z}]/gu, "");
const payload = { text, target_language };
const action = encodeCommentActionParams(22, payload);
const response = await __privateGet(this, _actions).execute("comment/perform_comment_action", { action });
const mutations = response.data.frameworkUpdates?.entityBatchUpdate?.mutations;
const content = mutations?.[0]?.payload?.commentEntityPayload?.translatedContent?.content;
return { ...response, content };
}
setActions(actions) {
__privateSet(this, _actions, actions);
}
};
_actions = new WeakMap();
__name(_CommentView, "CommentView");
__publicField(_CommentView, "type", "CommentView");
var CommentView = _CommentView;
// dist/src/parser/classes/comments/CommentThread.js
var _actions2, _continuation, _CommentThread_instances, getPatchedReplies_fn;
var _CommentThread = class _CommentThread extends YTNode {
constructor(data) {
super();
__privateAdd(this, _CommentThread_instances);
__publicField(this, "comment");
__publicField(this, "replies");
__publicField(this, "comment_replies_data");
__publicField(this, "is_moderated_elq_comment");
__publicField(this, "has_replies");
__privateAdd(this, _actions2);
__privateAdd(this, _continuation);
this.comment = parser_exports.parseItem(data.commentViewModel, CommentView);
this.comment_replies_data = parser_exports.parseItem(data.replies, CommentReplies);
this.is_moderated_elq_comment = data.isModeratedElqComment;
this.has_replies = !!this.comment_replies_data;
}
get has_continuation() {
if (!this.replies)
throw new InnertubeError("Cannot determine if there is a continuation because this thread's replies have not been loaded.");
return !!__privateGet(this, _continuation);
}
/**
* Retrieves replies to this comment thread.
*/
async getReplies() {
if (!__privateGet(this, _actions2))
throw new InnertubeError("Actions instance not set for this thread.");
if (!this.comment_replies_data)
throw new InnertubeError("This comment has no replies.", this);
const continuation = this.comment_replies_data.contents?.firstOfType(ContinuationItem);
if (!continuation)
throw new InnertubeError("Replies continuation not found.");
const response = await continuation.endpoint.call(__privateGet(this, _actions2), { parse: true });
if (!response.on_response_received_endpoints_memo)
throw new InnertubeError("Unexpected response.", response);
this.replies = __privateMethod(this, _CommentThread_instances, getPatchedReplies_fn).call(this, response.on_response_received_endpoints_memo);
__privateSet(this, _continuation, response.on_response_received_endpoints_memo.getType(ContinuationItem)[0]);
return this;
}
/**
* Retrieves next batch of replies.
*/
async getContinuation() {
if (!this.replies)
throw new InnertubeError("Cannot retrieve continuation because this thread's replies have not been loaded.");
if (!__privateGet(this, _continuation))
throw new InnertubeError("Continuation not found.");
if (!__privateGet(this, _actions2))
throw new InnertubeError("Actions instance not set for this thread.");
const load_more_button = __privateGet(this, _continuation).button?.as(Button);
if (!load_more_button)
throw new InnertubeError('"Load more" button not found.');
const response = await load_more_button.endpoint.call(__privateGet(this, _actions2), { parse: true });
if (!response.on_response_received_endpoints_memo)
throw new InnertubeError("Unexpected response.", response);
this.replies = __privateMethod(this, _CommentThread_instances, getPatchedReplies_fn).call(this, response.on_response_received_endpoints_memo);
__privateSet(this, _continuation, response.on_response_received_endpoints_memo.getType(ContinuationItem)[0]);
return this;
}
setActions(actions) {
__privateSet(this, _actions2, actions);
}
};
_actions2 = new WeakMap();
_continuation = new WeakMap();
_CommentThread_instances = new WeakSet();
getPatchedReplies_fn = /* @__PURE__ */ __name(function(data) {
return observe(data.getType(CommentView).map((comment) => {
comment.setActions(__privateGet(this, _actions2));
return comment;
}));
}, "#getPatchedReplies");
__name(_CommentThread, "CommentThread");
__publicField(_CommentThread, "type", "CommentThread");
var CommentThread = _CommentThread;
// dist/src/parser/classes/comments/PdgCommentChip.js
var _PdgCommentChip = class _PdgCommentChip extends YTNode {
constructor(data) {
super();
__publicField(this, "text");
__publicField(this, "color_pallette");
__publicField(this, "icon_type");
this.text = new Text2(data.chipText);
this.color_pallette = {
background_color: data.chipColorPalette?.backgroundColor,
foreground_title_color: data.chipColorPalette?.foregroundTitleColor
};
if (Reflect.has(data, "chipIcon") && Reflect.has(data.chipIcon, "iconType")) {
this.icon_type = data.chipIcon.iconType;
}
}
};
__name(_PdgCommentChip, "PdgCommentChip");
__publicField(_PdgCommentChip, "type", "PdgCommentChip");
var PdgCommentChip = _PdgCommentChip;
// dist/src/parser/classes/comments/SponsorCommentBadge.js
var _SponsorCommentBadge = class _SponsorCommentBadge extends YTNode {
constructor(data) {
super();
__publicField(this, "custom_badge");
__publicField(this, "tooltip");
this.custom_badge = Thumbnail.fromResponse(data.customBadge);
this.tooltip = data.tooltip;
}
};
__name(_SponsorCommentBadge, "SponsorCommentBadge");
__publicField(_SponsorCommentBadge, "type", "SponsorCommentBadge");
var SponsorCommentBadge = _SponsorCommentBadge;
// dist/src/parser/classes/CompactChannel.js
var _CompactChannel = class _CompactChannel extends YTNode {
constructor(data) {
super();
__publicField(this, "title");
__publicField(this, "channel_id");
__publicField(this, "thumbnail");
__publicField(this, "display_name");
__publicField(this, "video_count");
__publicField(this, "subscriber_count");
__publicField(this, "endpoint");
__publicField(this, "tv_banner");
__publicField(this, "menu");
this.title = new Text2(data.title);
this.channel_id = data.channelId;
this.thumbnail = Thumbnail.fromResponse(data.thumbnail);
this.display_name = new Text2(data.displayName);
this.video_count = new Text2(data.videoCountText);
this.subscriber_count = new Text2(data.subscriberCountText);
this.endpoint = new NavigationEndpoint(data.navigationEndpoint);
this.tv_banner = Thumbnail.fromResponse(data.tvBanner);
this.menu = parser_exports.parseItem(data.menu, Menu);
}
};
__name(_CompactChannel, "CompactChannel");
__publicField(_CompactChannel, "type", "CompactChannel");
var CompactChannel = _CompactChannel;
// dist/src/parser/classes/PlaylistCustomThumbnail.js
var _PlaylistCustomThumbnail = class _PlaylistCustomThumbnail extends YTNode {
constructor(data) {
super();
__publicField(this, "thumbnail");
this.thumbnail = Thumbnail.fromResponse(data.thumbnail);
}
};
__name(_PlaylistCustomThumbnail, "PlaylistCustomThumbnail");
__publicField(_PlaylistCustomThumbnail, "type", "PlaylistCustomThumbnail");
var PlaylistCustomThumbnail = _PlaylistCustomThumbnail;
// dist/src/parser/classes/PlaylistVideoThumbnail.js
var _PlaylistVideoThumbnail = class _PlaylistVideoThumbnail extends YTNode {
constructor(data) {
super();
__publicField(this, "thumbnail");
this.thumbnail = Thumbnail.fromResponse(data.thumbnail);
}
};
__name(_PlaylistVideoThumbnail, "PlaylistVideoThumbnail");
__publicField(_PlaylistVideoThumbnail, "type", "PlaylistVideoThumbnail");
var PlaylistVideoThumbnail = _PlaylistVideoThumbnail;
// dist/src/parser/classes/Playlist.js
var _Playlist = class _Playlist extends YTNode {
constructor(data) {
super();
__publicField(this, "id");
__publicField(this, "title");
__publicField(this, "author");
__publicField(this, "thumbnails");
__publicField(this, "thumbnail_renderer");
__publicField(this, "video_count");
__publicField(this, "video_count_short");
__publicField(this, "first_videos");
__publicField(this, "share_url");
__publicField(this, "menu");
__publicField(this, "badges");
__publicField(this, "endpoint");
__publicField(this, "thumbnail_overlays");
__publicField(this, "view_playlist");
this.id = data.playlistId;
this.title = new Text2(data.title);
this.author = data.shortBylineText?.simpleText ? new Text2(data.shortBylineText) : new Author(data.longBylineText, data.ownerBadges, null);
this.thumbnails = Thumbnail.fromResponse(data.thumbnail || { thumbnails: data.thumbnails.map((th) => th.thumbnails).flat(1) });
this.video_count = new Text2(data.thumbnailText);
this.video_count_short = new Text2(data.videoCountShortText);
this.first_videos = parser_exports.parseArray(data.videos);
this.share_url = data.shareUrl || null;
this.menu = parser_exports.parseItem(data.menu);
this.badges = parser_exports.parseArray(data.ownerBadges);
this.endpoint = new NavigationEndpoint(data.navigationEndpoint);
this.thumbnail_overlays = parser_exports.parseArray(data.thumbnailOverlays);
if (Reflect.has(data, "thumbnailRenderer")) {
this.thumbnail_renderer = parser_exports.parseItem(data.thumbnailRenderer, [PlaylistVideoThumbnail, PlaylistCustomThumbnail]) || void 0;
}
if (Reflect.has(data, "viewPlaylistText")) {
this.view_playlist = new Text2(data.viewPlaylistText);
}
}
};
__name(_Playlist, "Playlist");
__publicField(_Playlist, "type", "Playlist");
var Playlist = _Playlist;
// dist/src/parser/classes/CompactMix.js
var _CompactMix = class _CompactMix extends Playlist {
constructor(data) {
super(data);
}
};
__name(_CompactMix, "CompactMix");
__publicField(_CompactMix, "type", "CompactMix");
var CompactMix = _CompactMix;
// dist/src/parser/classes/CompactMovie.js
var _CompactMovie = class _CompactMovie extends YTNode {
constructor(data) {
super();
__publicField(this, "id");
__publicField(this, "title");
__publicField(this, "top_metadata_items");
__publicField(this, "thumbnails");
__publicField(this, "thumbnail_overlays");
__publicField(this, "author");
__publicField(this, "duration");
__publicField(this, "endpoint");
__publicField(this, "badges");
__publicField(this, "use_vertical_poster");
__publicField(this, "menu");
const overlay_time_status = data.thumbnailOverlays.find((overlay) => overlay.thumbnailOverlayTimeStatusRenderer)?.thumbnailOverlayTimeStatusRenderer.text || "N/A";
this.id = data.videoId;
this.title = new Text2(data.title);
this.top_metadata_items = new Text2(data.topMetadataItems);
this.thumbnails = Thumbnail.fromResponse(data.thumbnail);
this.thumbnail_overlays = parser_exports.parseArray(data.thumbnailOverlays);
this.author = new Author(data.shortBylineText);
const durationText = data.lengthText ? new Text2(data.lengthText).toString() : new Text2(overlay_time_status).toString();
this.duration = {
text: durationText,
seconds: timeToSeconds(durationText)
};
this.endpoint = new NavigationEndpoint(data.navigationEndpoint);
this.badges = parser_exports.parseArray(data.badges);
this.use_vertical_poster = data.useVerticalPoster;
this.menu = parser_exports.parseItem(data.menu, Menu);
}
};
__name(_CompactMovie, "CompactMovie");
__publicField(_CompactMovie, "type", "CompactMovie");
var CompactMovie = _CompactMovie;
// dist/src/parser/classes/CompactPlaylist.js
var _CompactPlaylist = class _CompactPlaylist extends Playlist {
constructor(data) {
super(data);
}
};
__name(_CompactPlaylist, "CompactPlaylist");
__publicField(_CompactPlaylist, "type", "CompactPlaylist");
var CompactPlaylist = _CompactPlaylist;
var CompactPlaylist_default = CompactPlaylist;
// dist/src/parser/classes/CompactStation.js
var _CompactStation = class _CompactStation extends YTNode {
constructor(data) {
super();
__publicField(this, "title");
__publicField(this, "description");
__publicField(this, "video_count");
__publicField(this, "endpoint");
__publicField(this, "thumbnail");
this.title = new Text2(data.title);
this.description = new Text2(data.description);
this.video_count = new Text2(data.videoCountText);
this.endpoint = new NavigationEndpoint(data.navigationEndpoint);
this.thumbnail = Thumbnail.fromResponse(data.thumbnail);
}
};
__name(_CompactStation, "CompactStation");
__publicField(_CompactStation, "type", "CompactStation");
var CompactStation = _CompactStation;
// dist/src/parser/classes/CompositeVideoPrimaryInfo.js
var _CompositeVideoPrimaryInfo = class _CompositeVideoPrimaryInfo extends YTNode {
constructor(_data23) {
super();
}
};
__name(_CompositeVideoPrimaryInfo, "CompositeVideoPrimaryInfo");
__publicField(_CompositeVideoPrimaryInfo, "type", "CompositeVideoPrimaryInfo");
var CompositeVideoPrimaryInfo = _CompositeVideoPrimaryInfo;
// dist/src/parser/classes/ConfirmDialog.js
var _ConfirmDialog = class _ConfirmDialog extends YTNode {
constructor(data) {
super();
__publicField(this, "title");
__publicField(this, "confirm_button");
__publicField(this, "cancel_button");
__publicField(this, "dialog_messages");
this.title = new Text2(data.title);
this.confirm_button = parser_exports.parseItem(data.confirmButton, Button);
this.cancel_button = parser_exports.parseItem(data.cancelButton, Button);
this.dialog_messages = data.dialogMessages.map((txt) => new Text2(txt));
}
};
__name(_ConfirmDialog, "ConfirmDialog");
__publicField(_ConfirmDialog, "type", "ConfirmDialog");
var ConfirmDialog = _ConfirmDialog;
// dist/src/parser/classes/ContentMetadataView.js
var _ContentMetadataView = class _ContentMetadataView extends YTNode {
constructor(data) {
super();
__publicField(this, "metadata_rows");
__publicField(this, "delimiter");
this.metadata_rows = data.metadataRows?.map((row) => ({
metadata_parts: row.metadataParts?.map((part) => ({
text: part.text ? Text2.fromAttributed(part.text) : null,
avatar_stack: parser_exports.parseItem(part.avatarStack, AvatarStackView),
enable_truncation: data.enableTruncation
})),
badges: parser_exports.parseArray(row.badges, BadgeView)
})) || [];
this.delimiter = data.delimiter;
}
};
__name(_ContentMetadataView, "ContentMetadataView");
__publicField(_ContentMetadataView, "type", "ContentMetadataView");
var ContentMetadataView = _ContentMetadataView;
// dist/src/parser/classes/Message.js
var _Message = class _Message extends YTNode {
constructor(data) {
super();
__publicField(this, "text");
this.text = new Text2(data.text);
}
};
__name(_Message, "Message");
__publicField(_Message, "type", "Message");
var Message = _Message;
// dist/src/parser/classes/ConversationBar.js
var _ConversationBar = class _ConversationBar extends YTNode {
constructor(data) {
super();
__publicField(this, "availability_message");
this.availability_message = parser_exports.parseItem(data.availabilityMessage, Message);
}
};
__name(_ConversationBar, "ConversationBar");
__publicField(_ConversationBar, "type", "ConversationBar");
var ConversationBar = _ConversationBar;
// dist/src/parser/classes/CopyLink.js
var _CopyLink = class _CopyLink extends YTNode {
constructor(data) {
super();
__publicField(this, "copy_button");
__publicField(this, "short_url");
__publicField(this, "style");
this.copy_button = parser_exports.parseItem(data.copyButton, Button);
this.short_url = data.shortUrl;
this.style = data.style;
}
};
__name(_CopyLink, "CopyLink");
__publicField(_CopyLink, "type", "CopyLink");
var CopyLink = _CopyLink;
// dist/src/parser/classes/DropdownView.js
var _DropdownView = class _DropdownView extends YTNode {
constructor(data) {
super();
__publicField(this, "label");
__publicField(this, "placeholder_text");
__publicField(this, "disabled");
__publicField(this, "options");
__publicField(this, "dropdown_type");
__publicField(this, "id");
this.label = new Text2(data.label);
this.placeholder_text = new Text2(data.placeholderText);
this.disabled = !!data.disabled;
this.dropdown_type = data.type;
this.id = data.id;
if (Reflect.has(data, "options")) {
this.options = data.options.map((option) => ({
title: new Text2(option.title),
subtitle: new Text2(option.subtitle),
leading_image: Thumbnail.fromResponse(option.leadingImage),
value: { privacy_status_value: option.value?.privacyStatusValue },
on_tap: new NavigationEndpoint(option.onTap),
is_selected: !!option.isSelected
}));
}
}
};
__name(_DropdownView, "DropdownView");
__publicField(_DropdownView, "type", "DropdownView");
var DropdownView = _DropdownView;
// dist/src/parser/classes/TextFieldView.js
var _TextFieldView = class _TextFieldView extends YTNode {
constructor(data) {
super();
__publicField(this, "display_properties");
__publicField(this, "content_properties");
__publicField(this, "initial_state");
__publicField(this, "form_field_metadata");
if (Reflect.has(data, "displayProperties")) {
this.display_properties = {
isMultiline: !!data.displayProperties.isMultiline,
disableNewLines: !!data.displayProperties.disableNewLines
};
}
if (Reflect.has(data, "contentProperties")) {
this.content_properties = {
labelText: data.contentProperties.labelText,
placeholderText: data.contentProperties.placeholderText,
maxCharacterCount: data.contentProperties.maxCharacterCount
};
}
if (Reflect.has(data, "initialState")) {
this.initial_state = {
isFocused: !!data.initialState.isFocused
};
}
if (Reflect.has(data, "formFieldMetadata")) {
this.form_field_metadata = {
formId: data.formFieldMetadata.formId,
fieldId: data.formFieldMetadata.fieldId
};
}
}
};
__name(_TextFieldView, "TextFieldView");
__publicField(_TextFieldView, "type", "TextFieldView");
var TextFieldView = _TextFieldView;
// dist/src/parser/classes/CreatePlaylistDialogFormView.js
var _CreatePlaylistDialogFormView = class _CreatePlaylistDialogFormView extends YTNode {
constructor(data) {
super();
__publicField(this, "playlist_title");
__publicField(this, "playlist_visibility");
__publicField(this, "disable_playlist_collaborate");
__publicField(this, "create_playlist_params_collaboration_enabled");
__publicField(this, "create_playlist_params_collaboration_disabled");
__publicField(this, "video_ids");
this.playlist_title = parser_exports.parseItem(data.playlistTitle, TextFieldView);
this.playlist_visibility = parser_exports.parseItem(data.playlistVisibility, DropdownView);
this.disable_playlist_collaborate = !!data.disablePlaylistCollaborate;
this.create_playlist_params_collaboration_enabled = data.createPlaylistParamsCollaborationEnabled;
this.create_playlist_params_collaboration_disabled = data.createPlaylistParamsCollaborationDisabled;
this.video_ids = data.videoIds;
}
};
__name(_CreatePlaylistDialogFormView, "CreatePlaylistDialogFormView");
__publicField(_CreatePlaylistDialogFormView, "type", "CreatePlaylistDialogFormView");
var CreatePlaylistDialogFormView = _CreatePlaylistDialogFormView;
// dist/src/parser/classes/DecoratedAvatarView.js
var _DecoratedAvatarView = class _DecoratedAvatarView extends YTNode {
constructor(data) {
super();
__publicField(this, "avatar");
__publicField(this, "a11y_label");
__publicField(this, "renderer_context");
this.avatar = parser_exports.parseItem(data.avatar, AvatarView);
this.a11y_label = data.a11yLabel;
this.renderer_context = new RendererContext(data.rendererContext);
}
};
__name(_DecoratedAvatarView, "DecoratedAvatarView");
__publicField(_DecoratedAvatarView, "type", "DecoratedAvatarView");
var DecoratedAvatarView = _DecoratedAvatarView;
// dist/src/parser/classes/HeatMarker.js
var _HeatMarker = class _HeatMarker extends YTNode {
constructor(data) {
super();
__publicField(this, "time_range_start_millis");
__publicField(this, "marker_duration_millis");
__publicField(this, "heat_marker_intensity_score_normalized");
this.time_range_start_millis = Number.parseInt(data.startMillis, 10);
this.marker_duration_millis = Number.parseInt(data.durationMillis, 10);
this.heat_marker_intensity_score_normalized = data.intensityScoreNormalized;
}
};
__name(_HeatMarker, "HeatMarker");
__publicField(_HeatMarker, "type", "HeatMarker");
var HeatMarker = _HeatMarker;
// dist/src/parser/classes/TimedMarkerDecoration.js
var _TimedMarkerDecoration = class _TimedMarkerDecoration extends YTNode {
constructor(data) {
super();
__publicField(this, "visible_time_range_start_millis");
__publicField(this, "visible_time_range_end_millis");
__publicField(this, "decoration_time_millis");
__publicField(this, "label");
__publicField(this, "icon");
this.visible_time_range_start_millis = data.visibleTimeRangeStartMillis;
this.visible_time_range_end_millis = data.visibleTimeRangeEndMillis;
this.decoration_time_millis = data.decorationTimeMillis;
this.label = new Text2(data.label);
this.icon = data.icon;
}
};
__name(_TimedMarkerDecoration, "TimedMarkerDecoration");
__publicField(_TimedMarkerDecoration, "type", "TimedMarkerDecoration");
var TimedMarkerDecoration = _TimedMarkerDecoration;
// dist/src/parser/classes/Heatmap.js
var _Heatmap = class _Heatmap extends YTNode {
constructor(data) {
super();
__publicField(this, "max_height_dp");
__publicField(this, "min_height_dp");
__publicField(this, "show_hide_animation_duration_millis");
__publicField(this, "heat_markers");
__publicField(this, "heat_markers_decorations");
this.max_height_dp = data.maxHeightDp;
this.min_height_dp = data.minHeightDp;
this.show_hide_animation_duration_millis = data.showHideAnimationDurationMillis;
this.heat_markers = parser_exports.parseArray(data.heatMarkers, HeatMarker);
this.heat_markers_decorations = parser_exports.parseArray(data.heatMarkersDecorations, TimedMarkerDecoration);
}
};
__name(_Heatmap, "Heatmap");
__publicField(_Heatmap, "type", "Heatmap");
var Heatmap = _Heatmap;
// dist/src/parser/classes/MultiMarkersPlayerBar.js
var _Marker = class _Marker extends YTNode {
constructor(data) {
super();
__publicField(this, "marker_key");
__publicField(this, "value");
this.marker_key = data.key;
this.value = {};
if (Reflect.has(data, "value")) {
if (Reflect.has(data.value, "heatmap")) {
this.value.heatmap = parser_exports.parseItem(data.value.heatmap, Heatmap);
}
if (Reflect.has(data.value, "chapters")) {
this.value.chapters = parser_exports.parseArray(data.value.chapters, Chapter);
}
}
}
};
__name(_Marker, "Marker");
__publicField(_Marker, "type", "Marker");
var Marker = _Marker;
var _MultiMarkersPlayerBar = class _MultiMarkersPlayerBar extends YTNode {
constructor(data) {
super();
__publicField(this, "markers_map");
this.markers_map = observe(data.markersMap?.map((marker) => new Marker(marker)) || []);
}
};
__name(_MultiMarkersPlayerBar, "MultiMarkersPlayerBar");
__publicField(_MultiMarkersPlayerBar, "type", "MultiMarkersPlayerBar");
var MultiMarkersPlayerBar = _MultiMarkersPlayerBar;
// dist/src/parser/classes/DecoratedPlayerBar.js
var _DecoratedPlayerBar = class _DecoratedPlayerBar extends YTNode {
constructor(data) {
super();
__publicField(this, "player_bar");
__publicField(this, "player_bar_action_button");
this.player_bar = parser_exports.parseItem(data.playerBar, MultiMarkersPlayerBar);
this.player_bar_action_button = parser_exports.parseItem(data.playerBarActionButton, Button);
}
};
__name(_DecoratedPlayerBar, "DecoratedPlayerBar");
__publicField(_DecoratedPlayerBar, "type", "DecoratedPlayerBar");
var DecoratedPlayerBar = _DecoratedPlayerBar;
// dist/src/parser/classes/DefaultPromoPanel.js
var _DefaultPromoPanel = class _DefaultPromoPanel extends YTNode {
constructor(data) {
super();
__publicField(this, "title");
__publicField(this, "description");
__publicField(this, "endpoint");
__publicField(this, "large_form_factor_background_thumbnail");
__publicField(this, "small_form_factor_background_thumbnail");
__publicField(this, "scrim_color_values");
__publicField(this, "min_panel_display_duration_ms");
__publicField(this, "min_video_play_duration_ms");
__publicField(this, "scrim_duration");
__publicField(this, "metadata_order");
__publicField(this, "panel_layout");
this.title = new Text2(data.title);
this.description = new Text2(data.description);
this.endpoint = new NavigationEndpoint(data.navigationEndpoint);
this.large_form_factor_background_thumbnail = parser_exports.parseItem(data.largeFormFactorBackgroundThumbnail);
this.small_form_factor_background_thumbnail = parser_exports.parseItem(data.smallFormFactorBackgroundThumbnail);
this.scrim_color_values = data.scrimColorValues;
this.min_panel_display_duration_ms = data.minPanelDisplayDurationMs;
this.min_video_play_duration_ms = data.minVideoPlayDurationMs;
this.scrim_duration = data.scrimDuration;
this.metadata_order = data.metadataOrder;
this.panel_layout = data.panelLayout;
}
};
__name(_DefaultPromoPanel, "DefaultPromoPanel");
__publicField(_DefaultPromoPanel, "type", "DefaultPromoPanel");
var DefaultPromoPanel = _DefaultPromoPanel;
// dist/src/parser/classes/DescriptionPreviewView.js
var _DescriptionPreviewView = class _DescriptionPreviewView extends YTNode {
constructor(data) {
super();
__publicField(this, "description");
__publicField(this, "max_lines");
__publicField(this, "truncation_text");
__publicField(this, "always_show_truncation_text");
__publicField(this, "more_endpoint");
__publicField(this, "renderer_context");
if ("description" in data)
this.description = Text2.fromAttributed(data.description);
if ("maxLines" in data)
this.max_lines = parseInt(data.maxLines);
if ("truncationText" in data)
this.truncation_text = Text2.fromAttributed(data.truncationText);
this.always_show_truncation_text = !!data.alwaysShowTruncationText;
if (data.rendererContext.commandContext?.onTap?.innertubeCommand?.showEngagementPanelEndpoint) {
const endpoint = data.rendererContext.commandContext?.onTap?.innertubeCommand?.showEngagementPanelEndpoint;
this.more_endpoint = {
show_engagement_panel_endpoint: {
engagement_panel: parser_exports.parseItem(endpoint.engagementPanel, EngagementPanelSectionList),
engagement_panel_popup_type: endpoint.engagementPanelPresentationConfigs.engagementPanelPopupPresentationConfig.popupType,
identifier: {
surface: endpoint.identifier.surface,
tag: endpoint.identifier.tag
}
}
};
}
this.renderer_context = new RendererContext(data.rendererContext);
}
};
__name(_DescriptionPreviewView, "DescriptionPreviewView");
__publicField(_DescriptionPreviewView, "type", "DescriptionPreviewView");
var DescriptionPreviewView = _DescriptionPreviewView;
// dist/src/parser/classes/DialogHeaderView.js
var _DialogHeaderView = class _DialogHeaderView extends YTNode {
constructor(data) {
super();
__publicField(this, "headline");
this.headline = Text2.fromAttributed(data.headline);
}
};
__name(_DialogHeaderView, "DialogHeaderView");
__publicField(_DialogHeaderView, "type", "DialogHeaderView");
var DialogHeaderView = _DialogHeaderView;
// dist/src/parser/classes/PanelFooterView.js
var _PanelFooterView = class _PanelFooterView extends YTNode {
constructor(data) {
super();
__publicField(this, "primary_button");
__publicField(this, "secondary_button");
__publicField(this, "should_hide_divider");
this.primary_button = parser_exports.parseItem(data.primaryButton, ButtonView);
this.secondary_button = parser_exports.parseItem(data.secondaryButton, ButtonView);
this.should_hide_divider = !!data.shouldHideDivider;
}
};
__name(_PanelFooterView, "PanelFooterView");
__publicField(_PanelFooterView, "type", "PanelFooterView");
var PanelFooterView = _PanelFooterView;
// dist/src/parser/classes/FormFooterView.js
var _FormFooterView = class _FormFooterView extends YTNode {
constructor(data) {
super();
__publicField(this, "panel_footer");
__publicField(this, "form_id");
__publicField(this, "container_type");
this.panel_footer = parser_exports.parseItem(data.panelFooter, PanelFooterView);
this.form_id = data.formId;
this.container_type = data.containerType;
}
};
__name(_FormFooterView, "FormFooterView");
__publicField(_FormFooterView, "type", "FormFooterView");
var FormFooterView = _FormFooterView;
// dist/src/parser/classes/ListView.js
var _ListView = class _ListView extends YTNode {
constructor(data) {
super();
__publicField(this, "items");
this.items = parser_exports.parseArray(data.listItems, ListItemView);
}
};
__name(_ListView, "ListView");
__publicField(_ListView, "type", "ListView");
var ListView = _ListView;
// dist/src/parser/classes/DialogView.js
var _DialogView = class _DialogView extends YTNode {
constructor(data) {
super();
__publicField(this, "header");
__publicField(this, "footer");
__publicField(this, "custom_content");
this.header = parser_exports.parseItem(data.header, DialogHeaderView);
this.footer = parser_exports.parseItem(data.footer, [FormFooterView, PanelFooterView]);
this.custom_content = parser_exports.parseItem(data.customContent, [CreatePlaylistDialogFormView, ListView]);
}
};
__name(_DialogView, "DialogView");
__publicField(_DialogView, "type", "DialogView");
var DialogView = _DialogView;
// dist/src/parser/classes/DidYouMean.js
var _DidYouMean = class _DidYouMean extends YTNode {
constructor(data) {
super();
__publicField(this, "text");
__publicField(this, "corrected_query");
__publicField(this, "endpoint");
this.text = new Text2(data.didYouMean).toString();
this.corrected_query = new Text2(data.correctedQuery);
this.endpoint = new NavigationEndpoint(data.navigationEndpoint || data.correctedQueryEndpoint);
}
};
__name(_DidYouMean, "DidYouMean");
__publicField(_DidYouMean, "type", "DidYouMean");
var DidYouMean = _DidYouMean;
// dist/src/parser/classes/DismissableDialogContentSection.js
var _DismissableDialogContentSection = class _DismissableDialogContentSection extends YTNode {
constructor(data) {
super();
__publicField(this, "title");
__publicField(this, "subtitle");
this.title = new Text2(data.title);
this.subtitle = new Text2(data.subtitle);
}
};
__name(_DismissableDialogContentSection, "DismissableDialogContentSection");
__publicField(_DismissableDialogContentSection, "type", "DismissableDialogContentSection");
var DismissableDialogContentSection = _DismissableDialogContentSection;
// dist/src/parser/classes/DismissableDialog.js
var _DismissableDialog = class _DismissableDialog extends YTNode {
constructor(data) {
super();
__publicField(this, "title");
__publicField(this, "sections");
__publicField(this, "metadata");
__publicField(this, "display_style");
this.title = data.title;
this.sections = parser_exports.parseArray(data.sections, DismissableDialogContentSection);
this.metadata = parser_exports.parseItem(data.metadata);
this.display_style = data.displayStyle;
}
};
__name(_DismissableDialog, "DismissableDialog");
__publicField(_DismissableDialog, "type", "DismissableDialog");
var DismissableDialog = _DismissableDialog;
// dist/src/parser/classes/DynamicTextView.js
var _DynamicTextView = class _DynamicTextView extends YTNode {
constructor(data) {
super();
__publicField(this, "text");
__publicField(this, "max_lines");
this.text = Text2.fromAttributed(data.text);
this.max_lines = parseInt(data.maxLines);
}
};
__name(_DynamicTextView, "DynamicTextView");
__publicField(_DynamicTextView, "type", "DynamicTextView");
var DynamicTextView = _DynamicTextView;
// dist/src/parser/classes/misc/ChildElement.js
var _ChildElement = class _ChildElement extends YTNode {
constructor(data) {
super();
__publicField(this, "text");
__publicField(this, "properties");
__publicField(this, "child_elements");
if (Reflect.has(data, "type") && Reflect.has(data.type, "textType")) {
this.text = data.type.textType.text?.content;
}
this.properties = data.properties;
if (Reflect.has(data, "childElements")) {
this.child_elements = data.childElements.map((el) => new _ChildElement(el));
}
}
};
__name(_ChildElement, "ChildElement");
__publicField(_ChildElement, "type", "ChildElement");
var ChildElement = _ChildElement;
// dist/src/parser/classes/Element.js
var _Element = class _Element extends YTNode {
constructor(data) {
super();
__publicField(this, "model");
__publicField(this, "child_elements");
if (Reflect.has(data, "elementRenderer")) {
return parser_exports.parseItem(data, _Element);
}
const type = data.newElement.type.componentType;
this.model = parser_exports.parseItem(type?.model);
if (Reflect.has(data, "newElement") && Reflect.has(data.newElement, "childElements")) {
this.child_elements = observe(data.newElement.childElements?.map((el) => new ChildElement(el)) || []);
}
}
};
__name(_Element, "Element");
__publicField(_Element, "type", "Element");
var Element = _Element;
// dist/src/parser/classes/EmergencyOnebox.js
var _EmergencyOnebox = class _EmergencyOnebox extends YTNode {
constructor(data) {
super();
__publicField(this, "title");
__publicField(this, "first_option");
__publicField(this, "menu");
this.title = new Text2(data.title);
this.first_option = parser_exports.parseItem(data.firstOption);
this.menu = parser_exports.parseItem(data.menu, Menu);
}
};
__name(_EmergencyOnebox, "EmergencyOnebox");
__publicField(_EmergencyOnebox, "type", "EmergencyOnebox");
var EmergencyOnebox = _EmergencyOnebox;
// dist/src/parser/classes/EmojiPickerCategory.js
var _EmojiPickerCategory = class _EmojiPickerCategory extends YTNode {
constructor(data) {
super();
__publicField(this, "category_id");
__publicField(this, "title");
__publicField(this, "emoji_ids");
__publicField(this, "image_loading_lazy");
__publicField(this, "category_type");
this.category_id = data.categoryId;
this.title = new Text2(data.title);
this.emoji_ids = data.emojiIds;
this.image_loading_lazy = !!data.imageLoadingLazy;
this.category_type = data.categoryType;
}
};
__name(_EmojiPickerCategory, "EmojiPickerCategory");
__publicField(_EmojiPickerCategory, "type", "EmojiPickerCategory");
var EmojiPickerCategory = _EmojiPickerCategory;
// dist/src/parser/classes/EmojiPickerCategoryButton.js
var _EmojiPickerCategoryButton = class _EmojiPickerCategoryButton extends YTNode {
constructor(data) {
super();
__publicField(this, "category_id");
__publicField(this, "icon_type");
__publicField(this, "tooltip");
this.category_id = data.categoryId;
if (Reflect.has(data, "icon")) {
this.icon_type = data.icon?.iconType;
}
this.tooltip = data.tooltip;
}
};
__name(_EmojiPickerCategoryButton, "EmojiPickerCategoryButton");
__publicField(_EmojiPickerCategoryButton, "type", "EmojiPickerCategoryButton");
var EmojiPickerCategoryButton = _EmojiPickerCategoryButton;
// dist/src/parser/classes/EmojiPickerUpsellCategory.js
var _EmojiPickerUpsellCategory = class _EmojiPickerUpsellCategory extends YTNode {
constructor(data) {
super();
__publicField(this, "category_id");
__publicField(this, "title");
__publicField(this, "upsell");
__publicField(this, "emoji_tooltip");
__publicField(this, "endpoint");
__publicField(this, "emoji_ids");
this.category_id = data.categoryId;
this.title = new Text2(data.title);
this.upsell = new Text2(data.upsell);
this.emoji_tooltip = data.emojiTooltip;
this.endpoint = new NavigationEndpoint(data.command);
this.emoji_ids = data.emojiIds;
}
};
__name(_EmojiPickerUpsellCategory, "EmojiPickerUpsellCategory");
__publicField(_EmojiPickerUpsellCategory, "type", "EmojiPickerUpsellCategory");
var EmojiPickerUpsellCategory = _EmojiPickerUpsellCategory;
// dist/src/parser/classes/endpoints/AddToPlaylistServiceEndpoint.js
var API_PATH2 = "playlist/get_add_to_playlist";
var _data4;
var _AddToPlaylistServiceEndpoint = class _AddToPlaylistServiceEndpoint extends YTNode {
constructor(data) {
super();
__privateAdd(this, _data4);
__privateSet(this, _data4, data);
}
getApiPath() {
return API_PATH2;
}
buildRequest() {
const request = {};
request.videoIds = __privateGet(this, _data4).videoIds ? __privateGet(this, _data4).videoIds : [__privateGet(this, _data4).videoId];
if (__privateGet(this, _data4).playlistId)
request.playlistId = __privateGet(this, _data4).playlistId;
if (__privateGet(this, _data4).params)
request.params = __privateGet(this, _data4).params;
request.excludeWatchLater = !!__privateGet(this, _data4).excludeWatchLater;
return request;
}
};
_data4 = new WeakMap();
__name(_AddToPlaylistServiceEndpoint, "AddToPlaylistServiceEndpoint");
__publicField(_AddToPlaylistServiceEndpoint, "type", "AddToPlaylistServiceEndpoint");
var AddToPlaylistServiceEndpoint = _AddToPlaylistServiceEndpoint;
// dist/src/parser/classes/endpoints/AddToPlaylistEndpoint.js
var _AddToPlaylistEndpoint = class _AddToPlaylistEndpoint extends AddToPlaylistServiceEndpoint {
constructor(data) {
super(data);
}
};
__name(_AddToPlaylistEndpoint, "AddToPlaylistEndpoint");
__publicField(_AddToPlaylistEndpoint, "type", "AddToPlaylistEndpoint");
var AddToPlaylistEndpoint = _AddToPlaylistEndpoint;
// dist/src/parser/classes/endpoints/BrowseEndpoint.js
var API_PATH3 = "browse";
var _data5;
var _BrowseEndpoint = class _BrowseEndpoint extends YTNode {
constructor(data) {
super();
__privateAdd(this, _data5);
__privateSet(this, _data5, data);
}
getApiPath() {
return API_PATH3;
}
buildRequest() {
const request = {};
if (__privateGet(this, _data5).browseId)
request.browseId = __privateGet(this, _data5).browseId;
if (__privateGet(this, _data5).params)
request.params = __privateGet(this, _data5).params;
if (__privateGet(this, _data5).query)
request.query = __privateGet(this, _data5).query;
if (__privateGet(this, _data5).browseId === "FEsubscriptions") {
request.subscriptionSettingsState = __privateGet(this, _data5).subscriptionSettingsState || "MY_SUBS_SETTINGS_STATE_LAYOUT_FORMAT_LIST";
}
if (__privateGet(this, _data5).browseId === "SPaccount_playback") {
request.formData = __privateGet(this, _data5).formData || {
accountSettingsFormData: {
flagCaptionsDefaultOff: false,
flagAutoCaptionsDefaultOn: false,
flagDisableInlinePreview: false,
flagAudioDescriptionDefaultOn: false
}
};
}
if (__privateGet(this, _data5).browseId === "FEwhat_to_watch") {
if (__privateGet(this, _data5).browseRequestSupportedMetadata)
request.browseRequestSupportedMetadata = __privateGet(this, _data5).browseRequestSupportedMetadata;
if (__privateGet(this, _data5).inlineSettingStatus)
request.inlineSettingStatus = __privateGet(this, _data5).inlineSettingStatus;
}
return request;
}
};
_data5 = new WeakMap();
__name(_BrowseEndpoint, "BrowseEndpoint");
__publicField(_BrowseEndpoint, "type", "BrowseEndpoint");
var BrowseEndpoint = _BrowseEndpoint;
// dist/src/parser/classes/endpoints/CreateCommentEndpoint.js
var API_PATH4 = "comment/create_comment";
var _data6;
var _CreateCommentEndpoint = class _CreateCommentEndpoint extends YTNode {
constructor(data) {
super();
__privateAdd(this, _data6);
__privateSet(this, _data6, data);
}
getApiPath() {
return API_PATH4;
}
buildRequest() {
const request = {};
if (__privateGet(this, _data6).createCommentParams)
request.createCommentParams = __privateGet(this, _data6).createCommentParams;
if (__privateGet(this, _data6).commentText)
request.commentText = __privateGet(this, _data6).commentText;
if (__privateGet(this, _data6).attachedVideoId)
request.videoAttachment = { videoId: __privateGet(this, _data6).attachedVideoId };
else if (__privateGet(this, _data6).pollOptions)
request.pollAttachment = { choices: __privateGet(this, _data6).pollOptions };
else if (__privateGet(this, _data6).imageBlobId)
request.imageAttachment = { encryptedBlobId: __privateGet(this, _data6).imageBlobId };
else if (__privateGet(this, _data6).sharedPostId)
request.sharedPostAttachment = { postId: __privateGet(this, _data6).sharedPostId };
if (__privateGet(this, _data6).accessRestrictions && typeof __privateGet(this, _data6).accessRestrictions === "number") {
const restriction = __privateGet(this, _data6).accessRestrictions === 1 ? "RESTRICTION_TYPE_EVERYONE" : "RESTRICTION_TYPE_SPONSORS_ONLY";
request.accessRestrictions = { restriction };
}
if (__privateGet(this, _data6).botguardResponse)
request.botguardResponse = __privateGet(this, _data6).botguardResponse;
return request;
}
};
_data6 = new WeakMap();
__name(_CreateCommentEndpoint, "CreateCommentEndpoint");
__publicField(_CreateCommentEndpoint, "type", "CreateCommentEndpoint");
var CreateCommentEndpoint = _CreateCommentEndpoint;
// dist/src/parser/classes/endpoints/CreatePlaylistServiceEndpoint.js
var API_PATH5 = "playlist/create";
var _data7;
var _CreatePlaylistServiceEndpoint = class _CreatePlaylistServiceEndpoint extends YTNode {
constructor(data) {
super();
__privateAdd(this, _data7);
__privateSet(this, _data7, data);
}
getApiPath() {
return API_PATH5;
}
buildRequest() {
const request = {};
if (__privateGet(this, _data7).title)
request.title = __privateGet(this, _data7).title;
if (__privateGet(this, _data7).privacyStatus)
request.privacyStatus = __privateGet(this, _data7).privacyStatus;
if (__privateGet(this, _data7).description)
request.description = __privateGet(this, _data7).description;
if (__privateGet(this, _data7).videoIds)
request.videoIds = __privateGet(this, _data7).videoIds;
if (__privateGet(this, _data7).params)
request.params = __privateGet(this, _data7).params;
if (__privateGet(this, _data7).sourcePlaylistId)
request.sourcePlaylistId = __privateGet(this, _data7).sourcePlaylistId;
return request;
}
};
_data7 = new WeakMap();
__name(_CreatePlaylistServiceEndpoint, "CreatePlaylistServiceEndpoint");
__publicField(_CreatePlaylistServiceEndpoint, "type", "CreatePlaylistServiceEndpoint");
var CreatePlaylistServiceEndpoint = _CreatePlaylistServiceEndpoint;
// dist/src/parser/classes/endpoints/DeletePlaylistEndpoint.js
var API_PATH6 = "playlist/delete";
var _data8;
var _DeletePlaylistEndpoint = class _DeletePlaylistEndpoint extends YTNode {
constructor(data) {
super();
__privateAdd(this, _data8);
__privateSet(this, _data8, data);
}
getApiPath() {
return API_PATH6;
}
buildRequest() {
const request = {};
if (__privateGet(this, _data8).playlistId)
request.playlistId = __privateGet(this, _data8).sourcePlaylistId;
return request;
}
};
_data8 = new WeakMap();
__name(_DeletePlaylistEndpoint, "DeletePlaylistEndpoint");
__publicField(_DeletePlaylistEndpoint, "type", "DeletePlaylistEndpoint");
var DeletePlaylistEndpoint = _DeletePlaylistEndpoint;
// dist/src/parser/classes/endpoints/FeedbackEndpoint.js
var API_PATH7 = "feedback";
var _data9;
var _FeedbackEndpoint = class _FeedbackEndpoint extends YTNode {
constructor(data) {
super();
__privateAdd(this, _data9);
__privateSet(this, _data9, data);
}
getApiPath() {
return API_PATH7;
}
buildRequest() {
const request = {};
if (__privateGet(this, _data9).feedbackToken)
request.feedbackTokens = [__privateGet(this, _data9).feedbackToken];
if (__privateGet(this, _data9).cpn)
request.feedbackContext = { cpn: __privateGet(this, _data9).cpn };
request.isFeedbackTokenUnencrypted = !!__privateGet(this, _data9).isFeedbackTokenUnencrypted;
request.shouldMerge = !!__privateGet(this, _data9).shouldMerge;
return request;
}
};
_data9 = new WeakMap();
__name(_FeedbackEndpoint, "FeedbackEndpoint");
__publicField(_FeedbackEndpoint, "type", "FeedbackEndpoint");
var FeedbackEndpoint = _FeedbackEndpoint;
// dist/src/parser/classes/endpoints/GetAccountsListInnertubeEndpoint.js
var API_PATH8 = "account/accounts_list";
var _data10;
var _GetAccountsListInnertubeEndpoint = class _GetAccountsListInnertubeEndpoint extends YTNode {
constructor(data) {
super();
__privateAdd(this, _data10);
__privateSet(this, _data10, data);
}
getApiPath() {
return API_PATH8;
}
buildRequest() {
const request = {};
if (__privateGet(this, _data10).requestType) {
request.requestType = __privateGet(this, _data10).requestType;
if (__privateGet(this, _data10).requestType === "ACCOUNTS_LIST_REQUEST_TYPE_CHANNEL_SWITCHER" || __privateGet(this, _data10).requestType === "ACCOUNTS_LIST_REQUEST_TYPE_IDENTITY_PROMPT") {
if (__privateGet(this, _data10).nextUrl)
request.nextNavendpoint = {
urlEndpoint: {
url: __privateGet(this, _data10).nextUrl
}
};
}
}
if (__privateGet(this, _data10).channelSwitcherQuery)
request.channelSwitcherQuery = __privateGet(this, _data10).channelSwitcherQuery;
if (__privateGet(this, _data10).triggerChannelCreation)
request.triggerChannelCreation = __privateGet(this, _data10).triggerChannelCreation;
if (__privateGet(this, _data10).contentOwnerConfig && __privateGet(this, _data10).contentOwnerConfig.externalContentOwnerId)
request.contentOwnerConfig = __privateGet(this, _data10).contentOwnerConfig;
if (__privateGet(this, _data10).obfuscatedSelectedGaiaId)
request.obfuscatedSelectedGaiaId = __privateGet(this, _data10).obfuscatedSelectedGaiaId;
if (__privateGet(this, _data10).selectedSerializedDelegationContext)
request.selectedSerializedDelegationContext = __privateGet(this, _data10).selectedSerializedDelegationContext;
if (__privateGet(this, _data10).callCircumstance)
request.callCircumstance = __privateGet(this, _data10).callCircumstance;
return request;
}
};
_data10 = new WeakMap();
__name(_GetAccountsListInnertubeEndpoint, "GetAccountsListInnertubeEndpoint");
__publicField(_GetAccountsListInnertubeEndpoint, "type", "GetAccountsListInnertubeEndpoint");
var GetAccountsListInnertubeEndpoint = _GetAccountsListInnertubeEndpoint;
// dist/src/parser/classes/endpoints/HideEngagementPanelEndpoint.js
var _HideEngagementPanelEndpoint = class _HideEngagementPanelEndpoint extends YTNode {
constructor(data) {
super();
__publicField(this, "panel_identifier");
this.panel_identifier = data.panelIdentifier;
}
};
__name(_HideEngagementPanelEndpoint, "HideEngagementPanelEndpoint");
__publicField(_HideEngagementPanelEndpoint, "type", "HideEngagementPanelEndpoint");
var HideEngagementPanelEndpoint = _HideEngagementPanelEndpoint;
// dist/src/parser/classes/endpoints/LikeEndpoint.js
var LIKE_API_PATH = "like/like";
var DISLIKE_API_PATH = "like/dislike";
var REMOVE_LIKE_API_PATH = "like/removelike";
var _data11;
var _LikeEndpoint = class _LikeEndpoint extends YTNode {
constructor(data) {
super();
__privateAdd(this, _data11);
__privateSet(this, _data11, data);
}
getApiPath() {
return __privateGet(this, _data11).status === "DISLIKE" ? DISLIKE_API_PATH : __privateGet(this, _data11).status === "INDIFFERENT" ? REMOVE_LIKE_API_PATH : LIKE_API_PATH;
}
buildRequest() {
const request = {};
if (__privateGet(this, _data11).target)
request.target = __privateGet(this, _data11).target;
const params = this.getParams();
if (params)
request.params = params;
return request;
}
getParams() {
switch (__privateGet(this, _data11).status) {
case "LIKE":
return __privateGet(this, _data11).likeParams;
case "DISLIKE":
return __privateGet(this, _data11).dislikeParams;
case "INDIFFERENT":
return __privateGet(this, _data11).removeLikeParams;
default:
return void 0;
}
}
};
_data11 = new WeakMap();
__name(_LikeEndpoint, "LikeEndpoint");
__publicField(_LikeEndpoint, "type", "LikeEndpoint");
var LikeEndpoint = _LikeEndpoint;
// dist/src/parser/classes/endpoints/LiveChatItemContextMenuEndpoint.js
var API_PATH9 = "live_chat/get_item_context_menu";
var _data12;
var _LiveChatItemContextMenuEndpoint = class _LiveChatItemContextMenuEndpoint extends YTNode {
constructor(data) {
super();
__privateAdd(this, _data12);
__privateSet(this, _data12, data);
}
getApiPath() {
return API_PATH9;
}
buildRequest() {
const request = {};
if (__privateGet(this, _data12).params)
request.params = __privateGet(this, _data12).params;
return request;
}
};
_data12 = new WeakMap();
__name(_LiveChatItemContextMenuEndpoint, "LiveChatItemContextMenuEndpoint");
__publicField(_LiveChatItemContextMenuEndpoint, "type", "LiveChatItemContextMenuEndpoint");
var LiveChatItemContextMenuEndpoint = _LiveChatItemContextMenuEndpoint;
// dist/src/parser/classes/endpoints/ModifyChannelNotificationPreferenceEndpoint.js
var API_PATH10 = "notification/modify_channel_preference";
var _data13;
var _ModifyChannelNotificationPreferenceEndpoint = class _ModifyChannelNotificationPreferenceEndpoint extends YTNode {
constructor(data) {
super();
__privateAdd(this, _data13);
__privateSet(this, _data13, data);
}
getApiPath() {
return API_PATH10;
}
buildRequest() {
const request = {};
if (__privateGet(this, _data13).params)
request.params = __privateGet(this, _data13).params;
if (__privateGet(this, _data13).secondaryParams)
request.secondaryParams = __privateGet(this, _data13).secondaryParams;
return request;
}
};
_data13 = new WeakMap();
__name(_ModifyChannelNotificationPreferenceEndpoint, "ModifyChannelNotificationPreferenceEndpoint");
__publicField(_ModifyChannelNotificationPreferenceEndpoint, "type", "ModifyChannelNotificationPreferenceEndpoint");
var ModifyChannelNotificationPreferenceEndpoint = _ModifyChannelNotificationPreferenceEndpoint;
// dist/src/parser/classes/endpoints/PerformCommentActionEndpoint.js
var API_PATH11 = "comment/perform_comment_action";
var _data14;
var _PerformCommentActionEndpoint = class _PerformCommentActionEndpoint extends YTNode {
constructor(data) {
super();
__privateAdd(this, _data14);
__privateSet(this, _data14, data);
}
getApiPath() {
return API_PATH11;
}
buildRequest() {
const request = {};
if (__privateGet(this, _data14).actions)
request.actions = __privateGet(this, _data14).actions;
if (__privateGet(this, _data14).action)
request.actions = [__privateGet(this, _data14).action];
return request;
}
};
_data14 = new WeakMap();
__name(_PerformCommentActionEndpoint, "PerformCommentActionEndpoint");
__publicField(_PerformCommentActionEndpoint, "type", "PerformCommentActionEndpoint");
var PerformCommentActionEndpoint = _PerformCommentActionEndpoint;
// dist/src/parser/classes/endpoints/PlaylistEditEndpoint.js
var API_PATH12 = "browse/edit_playlist";
var _data15;
var _PlaylistEditEndpoint = class _PlaylistEditEndpoint extends YTNode {
constructor(data) {
super();
__privateAdd(this, _data15);
__privateSet(this, _data15, data);
}
getApiPath() {
return API_PATH12;
}
buildRequest() {
const request = {};
if (__privateGet(this, _data15).actions)
request.actions = __privateGet(this, _data15).actions;
if (__privateGet(this, _data15).playlistId)
request.playlistId = __privateGet(this, _data15).playlistId;
if (__privateGet(this, _data15).params)
request.params = __privateGet(this, _data15).params;
return request;
}
};
_data15 = new WeakMap();
__name(_PlaylistEditEndpoint, "PlaylistEditEndpoint");
__publicField(_PlaylistEditEndpoint, "type", "PlaylistEditEndpoint");
var PlaylistEditEndpoint = _PlaylistEditEndpoint;
// dist/src/parser/classes/endpoints/WatchEndpoint.js
var API_PATH13 = "player";
var _data16;
var _WatchEndpoint = class _WatchEndpoint extends YTNode {
constructor(data) {
super();
__privateAdd(this, _data16);
__privateSet(this, _data16, data);
}
getApiPath() {
return API_PATH13;
}
buildRequest() {
const request = {};
if (__privateGet(this, _data16).videoId)
request.videoId = __privateGet(this, _data16).videoId;
if (__privateGet(this, _data16).playlistId)
request.playlistId = __privateGet(this, _data16).playlistId;
if (__privateGet(this, _data16).index !== void 0 || __privateGet(this, _data16).playlistIndex !== void 0)
request.playlistIndex = __privateGet(this, _data16).index || __privateGet(this, _data16).playlistIndex;
if (__privateGet(this, _data16).playerParams || __privateGet(this, _data16).params)
request.params = __privateGet(this, _data16).playerParams || __privateGet(this, _data16).params;
if (__privateGet(this, _data16).startTimeSeconds)
request.startTimeSecs = __privateGet(this, _data16).startTimeSeconds;
if (__privateGet(this, _data16).overrideMutedAtStart)
request.overrideMutedAtStart = __privateGet(this, _data16).overrideMutedAtStart;
request.racyCheckOk = !!__privateGet(this, _data16).racyCheckOk;
request.contentCheckOk = !!__privateGet(this, _data16).contentCheckOk;
return request;
}
};
_data16 = new WeakMap();
__name(_WatchEndpoint, "WatchEndpoint");
__publicField(_WatchEndpoint, "type", "WatchEndpoint");
var WatchEndpoint = _WatchEndpoint;
// dist/src/parser/classes/endpoints/PrefetchWatchCommand.js
var _PrefetchWatchCommand = class _PrefetchWatchCommand extends WatchEndpoint {
constructor(data) {
super(data);
}
};
__name(_PrefetchWatchCommand, "PrefetchWatchCommand");
__publicField(_PrefetchWatchCommand, "type", "PrefetchWatchCommand");
var PrefetchWatchCommand = _PrefetchWatchCommand;
// dist/src/parser/classes/endpoints/ReelWatchEndpoint.js
var API_PATH14 = "reel/reel_item_watch";
var _data17;
var _ReelWatchEndpoint = class _ReelWatchEndpoint extends YTNode {
constructor(data) {
super();
__privateAdd(this, _data17);
__privateSet(this, _data17, data);
}
getApiPath() {
return API_PATH14;
}
buildRequest() {
const request = {};
if (__privateGet(this, _data17).videoId) {
request.playerRequest = {
videoId: __privateGet(this, _data17).videoId
};
}
if (request.playerRequest) {
if (__privateGet(this, _data17).playerParams)
request.playerRequest.params = __privateGet(this, _data17).playerParams;
if (__privateGet(this, _data17).racyCheckOk)
request.playerRequest.racyCheckOk = !!__privateGet(this, _data17).racyCheckOk;
if (__privateGet(this, _data17).contentCheckOk)
request.playerRequest.contentCheckOk = !!__privateGet(this, _data17).contentCheckOk;
}
if (__privateGet(this, _data17).params)
request.params = __privateGet(this, _data17).params;
if (__privateGet(this, _data17).inputType)
request.inputType = __privateGet(this, _data17).inputType;
request.disablePlayerResponse = !!__privateGet(this, _data17).disablePlayerResponse;
return request;
}
};
_data17 = new WeakMap();
__name(_ReelWatchEndpoint, "ReelWatchEndpoint");
__publicField(_ReelWatchEndpoint, "type", "ReelWatchEndpoint");
var ReelWatchEndpoint = _ReelWatchEndpoint;
// dist/src/parser/classes/endpoints/SearchEndpoint.js
var API_PATH15 = "search";
var _data18;
var _SearchEndpoint = class _SearchEndpoint extends YTNode {
constructor(data) {
super();
__privateAdd(this, _data18);
__privateSet(this, _data18, data);
}
getApiPath() {
return API_PATH15;
}
buildRequest() {
const request = {};
if (__privateGet(this, _data18).query)
request.query = __privateGet(this, _data18).query;
if (__privateGet(this, _data18).params)
request.params = __privateGet(this, _data18).params;
if (__privateGet(this, _data18).webSearchboxStatsUrl)
request.webSearchboxStatsUrl = __privateGet(this, _data18).webSearchboxStatsUrl;
if (__privateGet(this, _data18).suggestStats)
request.suggestStats = __privateGet(this, _data18).suggestStats;
return request;
}
};
_data18 = new WeakMap();
__name(_SearchEndpoint, "SearchEndpoint");
__publicField(_SearchEndpoint, "type", "SearchEndpoint");
var SearchEndpoint = _SearchEndpoint;
// dist/src/parser/classes/endpoints/ShareEntityServiceEndpoint.js
var API_PATH16 = "share/get_share_panel";
var _data19;
var _ShareEntityServiceEndpoint = class _ShareEntityServiceEndpoint extends YTNode {
constructor(data) {
super();
__privateAdd(this, _data19);
__privateSet(this, _data19, data);
}
getApiPath() {
return API_PATH16;
}
buildRequest() {
const request = {};
if (__privateGet(this, _data19).serializedShareEntity)
request.serializedSharedEntity = __privateGet(this, _data19).serializedShareEntity;
if (__privateGet(this, _data19).clientParams)
request.clientParams = __privateGet(this, _data19).clientParams;
return request;
}
};
_data19 = new WeakMap();
__name(_ShareEntityServiceEndpoint, "ShareEntityServiceEndpoint");
__publicField(_ShareEntityServiceEndpoint, "type", "ShareEntityServiceEndpoint");
var ShareEntityServiceEndpoint = _ShareEntityServiceEndpoint;
// dist/src/parser/classes/endpoints/ShareEndpoint.js
var _ShareEndpoint = class _ShareEndpoint extends ShareEntityServiceEndpoint {
constructor(data) {
super(data);
}
};
__name(_ShareEndpoint, "ShareEndpoint");
__publicField(_ShareEndpoint, "type", "ShareEndpoint");
var ShareEndpoint = _ShareEndpoint;
// dist/src/parser/classes/endpoints/ShareEntityEndpoint.js
var _ShareEntityEndpoint = class _ShareEntityEndpoint extends ShareEntityServiceEndpoint {
constructor(data) {
super(data);
}
};
__name(_ShareEntityEndpoint, "ShareEntityEndpoint");
__publicField(_ShareEntityEndpoint, "type", "ShareEntityEndpoint");
var ShareEntityEndpoint = _ShareEntityEndpoint;
// dist/src/parser/classes/endpoints/ShowEngagementPanelEndpoint.js
var _ShowEngagementPanelEndpoint = class _ShowEngagementPanelEndpoint extends YTNode {
constructor(data) {
super();
__publicField(this, "panel_identifier");
__publicField(this, "source_panel_identifier");
this.panel_identifier = data.panelIdentifier;
this.source_panel_identifier = data.sourcePanelIdentifier;
}
};
__name(_ShowEngagementPanelEndpoint, "ShowEngagementPanelEndpoint");
__publicField(_ShowEngagementPanelEndpoint, "type", "ShowEngagementPanelEndpoint");
var ShowEngagementPanelEndpoint = _ShowEngagementPanelEndpoint;
// dist/src/parser/classes/endpoints/SignalServiceEndpoint.js
var _SignalServiceEndpoint = class _SignalServiceEndpoint extends YTNode {
constructor(data) {
super();
__publicField(this, "actions");
__publicField(this, "signal");
if (Array.isArray(data.actions)) {
this.actions = parser_exports.parseArray(data.actions.map((action) => {
delete action.clickTrackingParams;
return action;
}));
}
this.signal = data.signal;
}
};
__name(_SignalServiceEndpoint, "SignalServiceEndpoint");
__publicField(_SignalServiceEndpoint, "type", "SignalServiceEndpoint");
var SignalServiceEndpoint = _SignalServiceEndpoint;
// dist/src/parser/classes/endpoints/SubscribeEndpoint.js
var API_PATH17 = "subscription/subscribe";
var _data20;
var _SubscribeEndpoint = class _SubscribeEndpoint extends YTNode {
constructor(data) {
super();
__privateAdd(this, _data20);
__privateSet(this, _data20, data);
}
getApiPath() {
return API_PATH17;
}
buildRequest() {
const request = {};
if (__privateGet(this, _data20).channelIds)
request.channelIds = __privateGet(this, _data20).channelIds;
if (__privateGet(this, _data20).siloName)
request.siloName = __privateGet(this, _data20).siloName;
if (__privateGet(this, _data20).params)
request.params = __privateGet(this, _data20).params;
if (__privateGet(this, _data20).botguardResponse)
request.botguardResponse = __privateGet(this, _data20).botguardResponse;
if (__privateGet(this, _data20).feature)
request.clientFeature = __privateGet(this, _data20).feature;
return request;
}
};
_data20 = new WeakMap();
__name(_SubscribeEndpoint, "SubscribeEndpoint");
__publicField(_SubscribeEndpoint, "type", "SubscribeEndpoint");
var SubscribeEndpoint = _SubscribeEndpoint;
// dist/src/parser/classes/endpoints/UnsubscribeEndpoint.js
var API_PATH18 = "subscription/unsubscribe";
var _data21;
var _UnsubscribeEndpoint = class _UnsubscribeEndpoint extends YTNode {
constructor(data) {
super();
__privateAdd(this, _data21);
__privateSet(this, _data21, data);
}
getApiPath() {
return API_PATH18;
}
buildRequest() {
const request = {};
if (__privateGet(this, _data21).channelIds)
request.channelIds = __privateGet(this, _data21).channelIds;
if (__privateGet(this, _data21).siloName)
request.siloName = __privateGet(this, _data21).siloName;
if (__privateGet(this, _data21).params)
request.params = __privateGet(this, _data21).params;
return request;
}
};
_data21 = new WeakMap();
__name(_UnsubscribeEndpoint, "UnsubscribeEndpoint");
__publicField(_UnsubscribeEndpoint, "type", "UnsubscribeEndpoint");
var UnsubscribeEndpoint = _UnsubscribeEndpoint;
// dist/src/parser/classes/endpoints/WatchNextEndpoint.js
var API_PATH19 = "next";
var _data22;
var _WatchNextEndpoint = class _WatchNextEndpoint extends YTNode {
constructor(data) {
super();
__privateAdd(this, _data22);
__privateSet(this, _data22, data);
}
getApiPath() {
return API_PATH19;
}
buildRequest() {
const request = {};
if (__privateGet(this, _data22).videoId)
request.videoId = __privateGet(this, _data22).videoId;
if (__privateGet(this, _data22).playlistId)
request.playlistId = __privateGet(this, _data22).playlistId;
if (__privateGet(this, _data22).index !== void 0 || __privateGet(this, _data22).playlistIndex !== void 0)
request.playlistIndex = __privateGet(this, _data22).index || __privateGet(this, _data22).playlistIndex;
if (__privateGet(this, _data22).playerParams || __privateGet(this, _data22).params)
request.params = __privateGet(this, _data22).playerParams || __privateGet(this, _data22).params;
request.racyCheckOk = !!__privateGet(this, _data22).racyCheckOk;
request.contentCheckOk = !!__privateGet(this, _data22).contentCheckOk;
return request;
}
};
_data22 = new WeakMap();
__name(_WatchNextEndpoint, "WatchNextEndpoint");
__publicField(_WatchNextEndpoint, "type", "WatchNextEndpoint");
var WatchNextEndpoint = _WatchNextEndpoint;
// dist/src/parser/classes/Endscreen.js
var _Endscreen = class _Endscreen extends YTNode {
constructor(data) {
super();
__publicField(this, "elements");
__publicField(this, "start_ms");
this.elements = parser_exports.parseArray(data.elements);
this.start_ms = data.startMs;
}
};
__name(_Endscreen, "Endscreen");
__publicField(_Endscreen, "type", "Endscreen");
var Endscreen = _Endscreen;
// dist/src/parser/classes/EndscreenElement.js
var _EndscreenElement = class _EndscreenElement extends YTNode {
constructor(data) {
super();
__publicField(this, "style");
__publicField(this, "title");
__publicField(this, "endpoint");
__publicField(this, "image");
__publicField(this, "icon");
__publicField(this, "metadata");
__publicField(this, "call_to_action");
__publicField(this, "hovercard_button");
__publicField(this, "is_subscribe");
__publicField(this, "playlist_length");
__publicField(this, "thumbnail_overlays");
__publicField(this, "left");
__publicField(this, "top");
__publicField(this, "width");
__publicField(this, "aspect_ratio");
__publicField(this, "start_ms");
__publicField(this, "end_ms");
__publicField(this, "id");
this.style = data.style;
this.title = new Text2(data.title);
this.endpoint = new NavigationEndpoint(data.endpoint);
if (Reflect.has(data, "image")) {
this.image = Thumbnail.fromResponse(data.image);
}
if (Reflect.has(data, "icon")) {
this.icon = Thumbnail.fromResponse(data.icon);
}
if (Reflect.has(data, "metadata")) {
this.metadata = new Text2(data.metadata);
}
if (Reflect.has(data, "callToAction")) {
this.call_to_action = new Text2(data.callToAction);
}
if (Reflect.has(data, "hovercardButton")) {
this.hovercard_button = parser_exports.parseItem(data.hovercardButton);
}
if (Reflect.has(data, "isSubscribe")) {
this.is_subscribe = !!data.isSubscribe;
}
if (Reflect.has(data, "playlistLength")) {
this.playlist_length = new Text2(data.playlistLength);
}
if (Reflect.has(data, "thumbnailOverlays")) {
this.thumbnail_overlays = parser_exports.parseArray(data.thumbnailOverlays);
}
this.left = parseFloat(data.left);
this.width = parseFloat(data.width);
this.top = parseFloat(data.top);
this.aspect_ratio = parseFloat(data.aspectRatio);
this.start_ms = parseFloat(data.startMs);
this.end_ms = parseFloat(data.endMs);
this.id = data.id;
}
};
__name(_EndscreenElement, "EndscreenElement");
__publicField(_EndscreenElement, "type", "EndscreenElement");
var EndscreenElement = _EndscreenElement;
// dist/src/parser/classes/EndScreenPlaylist.js
var _EndScreenPlaylist = class _EndScreenPlaylist extends YTNode {
constructor(data) {
super();
__publicField(this, "id");
__publicField(this, "title");
__publicField(this, "author");
__publicField(this, "endpoint");
__publicField(this, "thumbnails");
__publicField(this, "video_count");
this.id = data.playlistId;
this.title = new Text2(data.title);
this.author = new Text2(data.longBylineText);
this.endpoint = new NavigationEndpoint(data.navigationEndpoint);
this.thumbnails = Thumbnail.fromResponse(data.thumbnail);
this.video_count = new Text2(data.videoCountText);
}
};
__name(_EndScreenPlaylist, "EndScreenPlaylist");
__publicField(_EndScreenPlaylist, "type", "EndScreenPlaylist");
var EndScreenPlaylist = _EndScreenPlaylist;
// dist/src/parser/classes/EndScreenVideo.js
var _EndScreenVideo = class _EndScreenVideo extends YTNode {
constructor(data) {
super();
__publicField(this, "id");
__publicField(this, "title");
__publicField(this, "thumbnails");
__publicField(this, "thumbnail_overlays");
__publicField(this, "author");
__publicField(this, "endpoint");
__publicField(this, "short_view_count");
__publicField(this, "badges");
__publicField(this, "duration");
this.id = data.videoId;
this.title = new Text2(data.title);
this.thumbnails = Thumbnail.fromResponse(data.thumbnail);
this.thumbnail_overlays = parser_exports.parseArray(data.thumbnailOverlays);
this.author = new Author(data.shortBylineText, data.ownerBadges);
this.endpoint = new NavigationEndpoint(data.navigationEndpoint);
this.short_view_count = new Text2(data.shortViewCountText);
this.badges = parser_exports.parseArray(data.badges);
this.duration = {
text: new Text2(data.lengthText).toString(),
seconds: data.lengthInSeconds
};
}
};
__name(_EndScreenVideo, "EndScreenVideo");
__publicField(_EndScreenVideo, "type", "EndScreenVideo");
var EndScreenVideo = _EndScreenVideo;
// dist/src/parser/classes/ExpandableTab.js
var _ExpandableTab = class _ExpandableTab extends YTNode {
constructor(data) {
super();
__publicField(this, "title");
__publicField(this, "endpoint");
__publicField(this, "selected");
__publicField(this, "content");
this.title = data.title;
this.endpoint = new NavigationEndpoint(data.endpoint);
this.selected = data.selected;
this.content = parser_exports.parseItem(data.content);
}
};
__name(_ExpandableTab, "ExpandableTab");
__publicField(_ExpandableTab, "type", "ExpandableTab");
var ExpandableTab = _ExpandableTab;
// dist/src/parser/classes/ExpandedShelfContents.js
var _ExpandedShelfContents = class _ExpandedShelfContents extends YTNode {
constructor(data) {
super();
__publicField(this, "items");
this.items = parser_exports.parseArray(data.items);
}
// XXX: Alias for consistency.
get contents() {
return this.items;
}
};
__name(_ExpandedShelfContents, "ExpandedShelfContents");
__publicField(_ExpandedShelfContents, "type", "ExpandedShelfContents");
var ExpandedShelfContents = _ExpandedShelfContents;
// dist/src/parser/classes/FancyDismissibleDialog.js
var _FancyDismissibleDialog = class _FancyDismissibleDialog extends YTNode {
constructor(data) {
super();
__publicField(this, "dialog_message");
__publicField(this, "confirm_label");
this.dialog_message = new Text2(data.dialogMessage);
this.confirm_label = new Text2(data.confirmLabel);
}
};
__name(_FancyDismissibleDialog, "FancyDismissibleDialog");
__publicField(_FancyDismissibleDialog, "type", "FancyDismissibleDialog");
var FancyDismissibleDialog = _FancyDismissibleDialog;
// dist/src/parser/classes/FeedFilterChipBar.js
var _FeedFilterChipBar = class _FeedFilterChipBar extends YTNode {
constructor(data) {
super();
__publicField(this, "contents");
this.contents = parser_exports.parseArray(data.contents, ChipCloudChip);
}
};
__name(_FeedFilterChipBar, "FeedFilterChipBar");
__publicField(_FeedFilterChipBar, "type", "FeedFilterChipBar");
var FeedFilterChipBar = _FeedFilterChipBar;
// dist/src/parser/classes/FeedNudge.js
var _FeedNudge = class _FeedNudge extends YTNode {
constructor(data) {
super();
__publicField(this, "title");
__publicField(this, "subtitle");
__publicField(this, "endpoint");
__publicField(this, "apply_modernized_style");
__publicField(this, "trim_style");
__publicField(this, "background_style");
this.title = new Text2(data.title);
this.subtitle = new Text2(data.subtitle);
this.endpoint = new NavigationEndpoint(data.impressionEndpoint);
this.apply_modernized_style = data.applyModernizedStyle;
this.trim_style = data.trimStyle;
this.background_style = data.backgroundStyle;
}
};
__name(_FeedNudge, "FeedNudge");
__publicField(_FeedNudge, "type", "FeedNudge");
var FeedNudge = _FeedNudge;
// dist/src/parser/classes/FeedTabbedHeader.js
var _FeedTabbedHeader = class _FeedTabbedHeader extends YTNode {
constructor(data) {
super();
__publicField(this, "title");
this.title = new Text2(data.title);
}
};
__name(_FeedTabbedHeader, "FeedTabbedHeader");
__publicField(_FeedTabbedHeader, "type", "FeedTabbedHeader");
var FeedTabbedHeader = _FeedTabbedHeader;
// dist/src/parser/classes/ToggleFormField.js
var _ToggleFormField = class _ToggleFormField extends YTNode {
constructor(data) {
super();
__publicField(this, "label");
__publicField(this, "toggled");
__publicField(this, "toggle_on_action");
__publicField(this, "toggle_off_action");
this.label = new Text(data.label);
this.toggled = data.toggled;
if ("toggleOnAction" in data)
this.toggle_on_action = new NavigationEndpoint(data.toggleOnAction);
if ("toggleOffAction" in data)
this.toggle_off_action = new NavigationEndpoint(data.toggleOffAction);
}
};
__name(_ToggleFormField, "ToggleFormField");
__publicField(_ToggleFormField, "type", "ToggleFormField");
var ToggleFormField = _ToggleFormField;
// dist/src/parser/classes/Form.js
var _Form = class _Form extends YTNode {
constructor(data) {
super();
__publicField(this, "fields");
this.fields = parser_exports.parseArray(data.fields, ToggleFormField);
}
};
__name(_Form, "Form");
__publicField(_Form, "type", "Form");
var Form = _Form;
// dist/src/parser/classes/FormPopup.js
var _FormPopup = class _FormPopup extends YTNode {
constructor(data) {
super();
__publicField(this, "title");
__publicField(this, "form");
__publicField(this, "buttons");
this.title = new Text2(data.title);
this.form = parser_exports.parseItem(data.form, Form);
this.buttons = parser_exports.parseArray(data.buttons, Button);
}
};
__name(_FormPopup, "FormPopup");
__publicField(_FormPopup, "type", "FormPopup");
var FormPopup = _FormPopup;
// dist/src/parser/classes/GameDetails.js
var _GameDetails = class _GameDetails extends YTNode {
constructor(data) {
super();
__publicField(this, "title");
__publicField(this, "box_art");
__publicField(this, "box_art_overlay_text");
__publicField(this, "endpoint");
__publicField(this, "is_official_box_art");
this.title = new Text2(data.title);
this.box_art = Thumbnail.fromResponse(data.boxArt);
this.box_art_overlay_text = new Text2(data.boxArtOverlayText);
this.endpoint = new NavigationEndpoint(data.endpoint);
this.is_official_box_art = !!data.isOfficialBoxArt;
}
};
__name(_GameDetails, "GameDetails");
__publicField(_GameDetails, "type", "GameDetails");
var GameDetails = _GameDetails;
// dist/src/parser/classes/Grid.js
var _Grid = class _Grid extends YTNode {
constructor(data) {
super();
__publicField(this, "items");
__publicField(this, "is_collapsible");
__publicField(this, "visible_row_count");
__publicField(this, "target_id");
__publicField(this, "continuation");
__publicField(this, "header");
this.items = parser_exports.parseArray(data.items);
if (Reflect.has(data, "header")) {
this.header = parser_exports.parseItem(data.header);
}
if (Reflect.has(data, "isCollapsible")) {
this.is_collapsible = data.isCollapsible;
}
if (Reflect.has(data, "visibleRowCount")) {
this.visible_row_count = data.visibleRowCount;
}
if (Reflect.has(data, "targetId")) {
this.target_id = data.targetId;
}
this.continuation = data.continuations?.[0]?.nextContinuationData?.continuation || null;
}
// XXX: Alias for consistency.
get contents() {
return this.items;
}
};
__name(_Grid, "Grid");
__publicField(_Grid, "type", "Grid");
var Grid = _Grid;
// dist/src/parser/classes/GridChannel.js
var _GridChannel = class _GridChannel extends YTNode {
constructor(data) {
super();
__publicField(this, "id");
__publicField(this, "author");
__publicField(this, "subscribers");
__publicField(this, "video_count");
__publicField(this, "endpoint");
__publicField(this, "subscribe_button");
this.id = data.channelId;
this.author = new Author({
...data.title,
navigationEndpoint: data.navigationEndpoint
}, data.ownerBadges, data.thumbnail);
this.subscribers = new Text2(data.subscriberCountText);
this.video_count = new Text2(data.videoCountText);
this.endpoint = new NavigationEndpoint(data.navigationEndpoint);
this.subscribe_button = parser_exports.parseItem(data.subscribeButton);
}
};
__name(_GridChannel, "GridChannel");
__publicField(_GridChannel, "type", "GridChannel");
var GridChannel = _GridChannel;
// dist/src/parser/classes/GridHeader.js
var _GridHeader = class _GridHeader extends YTNode {
constructor(data) {
super();
__publicField(this, "title");
this.title = new Text2(data.title);
}
};
__name(_GridHeader, "GridHeader");
__publicField(_GridHeader, "type", "GridHeader");
var GridHeader = _GridHeader;
// dist/src/parser/classes/GridMix.js
var _GridMix = class _GridMix extends YTNode {
constructor(data) {
super();
__publicField(this, "id");
__publicField(this, "title");
__publicField(this, "author");
__publicField(this, "thumbnails");
__publicField(this, "video_count");
__publicField(this, "video_count_short");
__publicField(this, "endpoint");
__publicField(this, "secondary_endpoint");
__publicField(this, "thumbnail_overlays");
this.id = data.playlistId;
this.title = new Text2(data.title);
this.author = data.shortBylineText?.simpleText ? new Text2(data.shortBylineText) : data.longBylineText?.simpleText ? new Text2(data.longBylineText) : null;
this.thumbnails = Thumbnail.fromResponse(data.thumbnail);
this.video_count = new Text2(data.videoCountText);
this.video_count_short = new Text2(data.videoCountShortText);
this.endpoint = new NavigationEndpoint(data.navigationEndpoint);
this.secondary_endpoint = new NavigationEndpoint(data.secondaryNavigationEndpoint);
this.thumbnail_overlays = parser_exports.parseArray(data.thumbnailOverlays);
}
};
__name(_GridMix, "GridMix");
__publicField(_GridMix, "type", "GridMix");
var GridMix = _GridMix;
// dist/src/parser/classes/GridMovie.js
var _GridMovie = class _GridMovie extends YTNode {
constructor(data) {
super();
__publicField(this, "id");
__publicField(this, "title");
__publicField(this, "thumbnails");
__publicField(this, "duration");
__publicField(this, "endpoint");
__publicField(this, "badges");
__publicField(this, "metadata");
__publicField(this, "thumbnail_overlays");
const length_alt = data.thumbnailOverlays.find((overlay) => overlay.hasOwnProperty("thumbnailOverlayTimeStatusRenderer"))?.thumbnailOverlayTimeStatusRenderer;
this.id = data.videoId;
this.title = new Text2(data.title);
this.thumbnails = Thumbnail.fromResponse(data.thumbnail);
this.duration = data.lengthText ? new Text2(data.lengthText) : length_alt?.text ? new Text2(length_alt.text) : null;
this.endpoint = new NavigationEndpoint(data.navigationEndpoint);
this.badges = parser_exports.parseArray(data.badges, MetadataBadge);
this.metadata = new Text2(data.metadata);
this.thumbnail_overlays = parser_exports.parseArray(data.thumbnailOverlays);
}
};
__name(_GridMovie, "GridMovie");
__publicField(_GridMovie, "type", "GridMovie");
var GridMovie = _GridMovie;
// dist/src/parser/classes/GridPlaylist.js
var _GridPlaylist = class _GridPlaylist extends YTNode {
constructor(data) {
super();
__publicField(this, "id");
__publicField(this, "title");
__publicField(this, "author");
__publicField(this, "badges");
__publicField(this, "endpoint");
__publicField(this, "view_playlist");
__publicField(this, "thumbnails");
__publicField(this, "thumbnail_renderer");
__publicField(this, "sidebar_thumbnails");
__publicField(this, "video_count");
__publicField(this, "video_count_short");
this.id = data.playlistId;
this.title = new Text2(data.title);
if (Reflect.has(data, "shortBylineText")) {
this.author = new Author(data.shortBylineText, data.ownerBadges);
}
this.badges = parser_exports.parseArray(data.ownerBadges);
this.endpoint = new NavigationEndpoint(data.navigationEndpoint);
this.view_playlist = new Text2(data.viewPlaylistText);
this.thumbnails = Thumbnail.fromResponse(data.thumbnail);
this.thumbnail_renderer = parser_exports.parseItem(data.thumbnailRenderer);
this.sidebar_thumbnails = [].concat(...data.sidebarThumbnails?.map((thumbnail) => Thumbnail.fromResponse(thumbnail)) || []) || null;
this.video_count = new Text2(data.thumbnailText);
this.video_count_short = new Text2(data.videoCountShortText);
}
};
__name(_GridPlaylist, "GridPlaylist");
__publicField(_GridPlaylist, "type", "GridPlaylist");
var GridPlaylist = _GridPlaylist;
// dist/src/parser/classes/GridShelfView.js
var _GridShelfView = class _GridShelfView extends YTNode {
constructor(data) {
super();
__publicField(this, "contents");
__publicField(this, "header");
__publicField(this, "content_aspect_ratio");
__publicField(this, "enable_vertical_expansion");
__publicField(this, "show_more_button");
__publicField(this, "show_less_button");
__publicField(this, "min_collapsed_item_count");
this.contents = parser_exports.parseArray(data.contents);
this.header = parser_exports.parseItem(data.header);
this.content_aspect_ratio = data.contentAspectRatio;
this.enable_vertical_expansion = data.enableVerticalExpansion;
this.show_more_button = parser_exports.parseItem(data.showMoreButton, ButtonView);
this.show_less_button = parser_exports.parseItem(data.showLessButton, ButtonView);
this.min_collapsed_item_count = data.minCollapsedItemCount;
}
};
__name(_GridShelfView, "GridShelfView");
__publicField(_GridShelfView, "type", "GridShelfView");
var GridShelfView = _GridShelfView;
// dist/src/parser/classes/ShowCustomThumbnail.js
var _ShowCustomThumbnail = class _ShowCustomThumbnail extends YTNode {
constructor(data) {
super();
__publicField(this, "thumbnail");
this.thumbnail = Thumbnail.fromResponse(data.thumbnail);
}
};
__name(_ShowCustomThumbnail, "ShowCustomThumbnail");
__publicField(_ShowCustomThumbnail, "type", "ShowCustomThumbnail");
var ShowCustomThumbnail = _ShowCustomThumbnail;
// dist/src/parser/classes/ThumbnailOverlayBottomPanel.js
var _ThumbnailOverlayBottomPanel = class _ThumbnailOverlayBottomPanel extends YTNode {
constructor(data) {
super();
__publicField(this, "text");
__publicField(this, "icon_type");
if (Reflect.has(data, "text")) {
this.text = new Text2(data.text);
}
if (Reflect.has(data, "icon") && Reflect.has(data.icon, "iconType")) {
this.icon_type = data.icon.iconType;
}
}
};
__name(_ThumbnailOverlayBottomPanel, "ThumbnailOverlayBottomPanel");
__publicField(_ThumbnailOverlayBottomPanel, "type", "ThumbnailOverlayBottomPanel");
var ThumbnailOverlayBottomPanel = _ThumbnailOverlayBottomPanel;
// dist/src/parser/classes/GridShow.js
var _GridShow = class _GridShow extends YTNode {
constructor(data) {
super();
__publicField(this, "title");
__publicField(this, "thumbnail_renderer");
__publicField(this, "endpoint");
__publicField(this, "long_byline_text");
__publicField(this, "thumbnail_overlays");
__publicField(this, "author");
this.title = new Text2(data.title);
this.thumbnail_renderer = parseItem(data.thumbnailRenderer, ShowCustomThumbnail);
this.endpoint = new NavigationEndpoint(data.navigationEndpoint);
this.long_byline_text = new Text2(data.longBylineText);
this.thumbnail_overlays = parseArray(data.thumbnailOverlays, ThumbnailOverlayBottomPanel);
this.author = new Author(data.shortBylineText, void 0);
}
};
__name(_GridShow, "GridShow");
__publicField(_GridShow, "type", "GridShow");
var GridShow = _GridShow;
// dist/src/parser/classes/GridVideo.js
var _GridVideo = class _GridVideo extends YTNode {
constructor(data) {
super();
__publicField(this, "video_id");
__publicField(this, "title");
__publicField(this, "thumbnails");
__publicField(this, "thumbnail_overlays");
__publicField(this, "rich_thumbnail");
__publicField(this, "published");
__publicField(this, "duration");
__publicField(this, "author");
__publicField(this, "views");
__publicField(this, "short_view_count");
__publicField(this, "endpoint");
__publicField(this, "menu");
__publicField(this, "buttons");
__publicField(this, "upcoming");
__publicField(this, "upcoming_text");
__publicField(this, "is_reminder_set");
const length_alt = data.thumbnailOverlays.find((overlay) => overlay.hasOwnProperty("thumbnailOverlayTimeStatusRenderer"))?.thumbnailOverlayTimeStatusRenderer;
this.video_id = data.videoId;
this.title = new Text2(data.title);
this.thumbnails = Thumbnail.fromResponse(data.thumbnail);
this.thumbnail_overlays = parser_exports.parseArray(data.thumbnailOverlays);
this.rich_thumbnail = parser_exports.parseItem(data.richThumbnail);
this.published = new Text2(data.publishedTimeText);
this.duration = data.lengthText ? new Text2(data.lengthText) : length_alt?.text ? new Text2(length_alt.text) : null;
this.author = data.shortBylineText && new Author(data.shortBylineText, data.ownerBadges);
this.views = new Text2(data.viewCountText);
this.short_view_count = new Text2(data.shortViewCountText);
this.endpoint = new NavigationEndpoint(data.navigationEndpoint);
this.menu = parser_exports.parseItem(data.menu, Menu);
if (Reflect.has(data, "buttons")) {
this.buttons = parser_exports.parseArray(data.buttons);
}
if (Reflect.has(data, "upcomingEventData")) {
this.upcoming = new Date(Number(`${data.upcomingEventData.startTime}000`));
this.upcoming_text = new Text2(data.upcomingEventData.upcomingEventText);
this.is_reminder_set = !!data.upcomingEventData?.isReminderSet;
}
}
/**
* @deprecated Use {@linkcode video_id} instead.
*/
get id() {
return this.video_id;
}
get is_upcoming() {
return Boolean(this.upcoming && this.upcoming > /* @__PURE__ */ new Date());
}
};
__name(_GridVideo, "GridVideo");
__publicField(_GridVideo, "type", "GridVideo");
var GridVideo = _GridVideo;
// dist/src/parser/classes/GuideEntry.js
var _GuideEntry = class _GuideEntry extends YTNode {
constructor(data) {
super();
__publicField(this, "title");
__publicField(this, "endpoint");
__publicField(this, "icon_type");
__publicField(this, "thumbnails");
__publicField(this, "badges");
__publicField(this, "is_primary");
this.title = new Text2(data.formattedTitle);
this.endpoint = new NavigationEndpoint(data.navigationEndpoint || data.serviceEndpoint);
if (Reflect.has(data, "icon") && Reflect.has(data.icon, "iconType")) {
this.icon_type = data.icon.iconType;
}
if (Reflect.has(data, "thumbnail")) {
this.thumbnails = Thumbnail.fromResponse(data.thumbnail);
}
if (Reflect.has(data, "badges")) {
this.badges = data.badges;
}
this.is_primary = !!data.isPrimary;
}
};
__name(_GuideEntry, "GuideEntry");
__publicField(_GuideEntry, "type", "GuideEntry");
var GuideEntry = _GuideEntry;
// dist/src/parser/classes/GuideCollapsibleEntry.js
var _GuideCollapsibleEntry = class _GuideCollapsibleEntry extends YTNode {
constructor(data) {
super();
__publicField(this, "expander_item");
__publicField(this, "collapser_item");
__publicField(this, "expandable_items");
this.expander_item = parseItem(data.expanderItem, GuideEntry);
this.collapser_item = parseItem(data.collapserItem, GuideEntry);
this.expandable_items = parseArray(data.expandableItems);
}
};
__name(_GuideCollapsibleEntry, "GuideCollapsibleEntry");
__publicField(_GuideCollapsibleEntry, "type", "GuideCollapsibleEntry");
var GuideCollapsibleEntry = _GuideCollapsibleEntry;
// dist/src/parser/classes/GuideCollapsibleSectionEntry.js
var _GuideCollapsibleSectionEntry = class _GuideCollapsibleSectionEntry extends YTNode {
constructor(data) {
super();
__publicField(this, "header_entry");
__publicField(this, "expander_icon");
__publicField(this, "collapser_icon");
__publicField(this, "section_items");
this.header_entry = parseItem(data.headerEntry);
this.expander_icon = data.expanderIcon.iconType;
this.collapser_icon = data.collapserIcon.iconType;
this.section_items = parseArray(data.sectionItems);
}
};
__name(_GuideCollapsibleSectionEntry, "GuideCollapsibleSectionEntry");
__publicField(_GuideCollapsibleSectionEntry, "type", "GuideCollapsibleSectionEntry");
var GuideCollapsibleSectionEntry = _GuideCollapsibleSectionEntry;
// dist/src/parser/classes/GuideDownloadsEntry.js
var _GuideDownloadsEntry = class _GuideDownloadsEntry extends GuideEntry {
constructor(data) {
super(data.entryRenderer.guideEntryRenderer);
__publicField(this, "always_show");
this.always_show = !!data.alwaysShow;
}
};
__name(_GuideDownloadsEntry, "GuideDownloadsEntry");
__publicField(_GuideDownloadsEntry, "type", "GuideDownloadsEntry");
var GuideDownloadsEntry = _GuideDownloadsEntry;
// dist/src/parser/classes/GuideSection.js
var _GuideSection = class _GuideSection extends YTNode {
constructor(data) {
super();
__publicField(this, "title");
__publicField(this, "items");
if (Reflect.has(data, "formattedTitle")) {
this.title = new Text2(data.formattedTitle);
}
this.items = parseArray(data.items);
}
};
__name(_GuideSection, "GuideSection");
__publicField(_GuideSection, "type", "GuideSection");
var GuideSection = _GuideSection;
// dist/src/parser/classes/GuideSubscriptionsSection.js
var _GuideSubscriptionsSection = class _GuideSubscriptionsSection extends GuideSection {
};
__name(_GuideSubscriptionsSection, "GuideSubscriptionsSection");
__publicField(_GuideSubscriptionsSection, "type", "GuideSubscriptionsSection");
var GuideSubscriptionsSection = _GuideSubscriptionsSection;
// dist/src/parser/classes/HashtagHeader.js
var _HashtagHeader = class _HashtagHeader extends YTNode {
constructor(data) {
super();
__publicField(this, "hashtag");
__publicField(this, "hashtag_info");
this.hashtag = new Text2(data.hashtag);
this.hashtag_info = new Text2(data.hashtagInfoText);
}
};
__name(_HashtagHeader, "HashtagHeader");
__publicField(_HashtagHeader, "type", "HashtagHeader");
var HashtagHeader = _HashtagHeader;
// dist/src/parser/classes/HashtagTile.js
var _HashtagTile = class _HashtagTile extends YTNode {
constructor(data) {
super();
__publicField(this, "hashtag");
__publicField(this, "hashtag_info_text");
__publicField(this, "hashtag_thumbnail");
__publicField(this, "endpoint");
__publicField(this, "hashtag_background_color");
__publicField(this, "hashtag_video_count");
__publicField(this, "hashtag_channel_count");
this.hashtag = new Text2(data.hashtag);
this.hashtag_info_text = new Text2(data.hashtagInfoText);
this.hashtag_thumbnail = Thumbnail.fromResponse(data.hashtagThumbnail);
this.endpoint = new NavigationEndpoint(data.onTapCommand);
this.hashtag_background_color = data.hashtagBackgroundColor;
this.hashtag_video_count = new Text2(data.hashtagVideoCount);
this.hashtag_channel_count = new Text2(data.hashtagChannelCount);
}
};
__name(_HashtagTile, "HashtagTile");
__publicField(_HashtagTile, "type", "HashtagTile");
var HashtagTile = _HashtagTile;
// dist/src/parser/classes/HeroPlaylistThumbnail.js
var _HeroPlaylistThumbnail = class _HeroPlaylistThumbnail extends YTNode {
constructor(data) {
super();
__publicField(this, "thumbnails");
__publicField(this, "on_tap_endpoint");
this.thumbnails = Thumbnail.fromResponse(data.thumbnail);
this.on_tap_endpoint = new NavigationEndpoint(data.onTap);
}
};
__name(_HeroPlaylistThumbnail, "HeroPlaylistThumbnail");
__publicField(_HeroPlaylistThumbnail, "type", "HeroPlaylistThumbnail");
var HeroPlaylistThumbnail = _HeroPlaylistThumbnail;
// dist/src/parser/classes/HighlightsCarousel.js
var _Panel = class _Panel extends YTNode {
constructor(data) {
super();
__publicField(this, "thumbnail");
__publicField(this, "background_image");
__publicField(this, "strapline");
__publicField(this, "title");
__publicField(this, "description");
__publicField(this, "text_on_tap_endpoint");
__publicField(this, "cta");
if (data.thumbnail) {
this.thumbnail = {
image: Thumbnail.fromResponse(data.thumbnail.image),
endpoint: new NavigationEndpoint(data.thumbnail.onTap),
on_long_press_endpoint: new NavigationEndpoint(data.thumbnail.onLongPress),
content_mode: data.thumbnail.contentMode,
crop_options: data.thumbnail.cropOptions
};
}
this.background_image = {
image: Thumbnail.fromResponse(data.backgroundImage.image),
gradient_image: Thumbnail.fromResponse(data.backgroundImage.gradientImage)
};
this.strapline = data.strapline;
this.title = data.title;
this.description = data.description;
this.cta = {
icon_name: data.cta.iconName,
title: data.cta.title,
endpoint: new NavigationEndpoint(data.cta.onTap),
accessibility_text: data.cta.accessibilityText,
state: data.cta.state
};
this.text_on_tap_endpoint = new NavigationEndpoint(data.textOnTap);
}
};
__name(_Panel, "Panel");
__publicField(_Panel, "type", "Panel");
var Panel = _Panel;
var _HighlightsCarousel = class _HighlightsCarousel extends YTNode {
constructor(data) {
super();
__publicField(this, "panels");
this.panels = observe(data.highlightsCarousel.panels.map((el) => new Panel(el)));
}
};
__name(_HighlightsCarousel, "HighlightsCarousel");
__publicField(_HighlightsCarousel, "type", "HighlightsCarousel");
var HighlightsCarousel = _HighlightsCarousel;
// dist/src/parser/classes/SearchSuggestion.js
var _SearchSuggestion = class _SearchSuggestion extends YTNode {
constructor(data) {
super();
__publicField(this, "suggestion");
__publicField(this, "endpoint");
__publicField(this, "icon_type");
__publicField(this, "service_endpoint");
this.suggestion = new Text2(data.suggestion);
this.endpoint = new NavigationEndpoint(data.navigationEndpoint);
if (Reflect.has(data, "icon")) {
this.icon_type = data.icon.iconType;
}
if (Reflect.has(data, "serviceEndpoint")) {
this.service_endpoint = new NavigationEndpoint(data.serviceEndpoint);
}
}
};
__name(_SearchSuggestion, "SearchSuggestion");
__publicField(_SearchSuggestion, "type", "SearchSuggestion");
var SearchSuggestion = _SearchSuggestion;
// dist/src/parser/classes/HistorySuggestion.js
var _HistorySuggestion = class _HistorySuggestion extends SearchSuggestion {
constructor(data) {
super(data);
}
};
__name(_HistorySuggestion, "HistorySuggestion");
__publicField(_HistorySuggestion, "type", "HistorySuggestion");
var HistorySuggestion = _HistorySuggestion;
// dist/src/parser/classes/HorizontalMovieList.js
var _HorizontalMovieList = class _HorizontalMovieList extends YTNode {
constructor(data) {
super();
__publicField(this, "items");
__publicField(this, "previous_button");
__publicField(this, "next_button");
this.items = parser_exports.parseArray(data.items);
this.previous_button = parser_exports.parseItem(data.previousButton, Button);
this.next_button = parser_exports.parseItem(data.nextButton, Button);
}
// XXX: Alias for consistency.
get contents() {
return this.items;
}
};
__name(_HorizontalMovieList, "HorizontalMovieList");
__publicField(_HorizontalMovieList, "type", "HorizontalMovieList");
var HorizontalMovieList = _HorizontalMovieList;
// dist/src/parser/classes/IconLink.js
var _IconLink = class _IconLink extends YTNode {
constructor(data) {
super();
__publicField(this, "icon_type");
__publicField(this, "tooltip");
__publicField(this, "endpoint");
this.icon_type = data.icon?.iconType;
if (Reflect.has(data, "tooltip")) {
this.tooltip = new Text2(data.tooltip).toString();
}
this.endpoint = new NavigationEndpoint(data.navigationEndpoint);
}
};
__name(_IconLink, "IconLink");
__publicField(_IconLink, "type", "IconLink");
var IconLink = _IconLink;
// dist/src/parser/classes/ImageBannerView.js
var _ImageBannerView = class _ImageBannerView extends YTNode {
constructor(data) {
super();
__publicField(this, "image");
__publicField(this, "style");
this.image = Thumbnail.fromResponse(data.image);
this.style = data.style;
}
};
__name(_ImageBannerView, "ImageBannerView");
__publicField(_ImageBannerView, "type", "ImageBannerView");
var ImageBannerView = _ImageBannerView;
// dist/src/parser/classes/IncludingResultsFor.js
var _IncludingResultsFor = class _IncludingResultsFor extends YTNode {
constructor(data) {
super();
__publicField(this, "including_results_for");
__publicField(this, "corrected_query");
__publicField(this, "corrected_query_endpoint");
__publicField(this, "search_only_for");
__publicField(this, "original_query");
__publicField(this, "original_query_endpoint");
this.including_results_for = new Text2(data.includingResultsFor);
this.corrected_query = new Text2(data.correctedQuery);
this.corrected_query_endpoint = new NavigationEndpoint(data.correctedQueryEndpoint);
this.search_only_for = Reflect.has(data, "searchOnlyFor") ? new Text2(data.searchOnlyFor) : void 0;
this.original_query = Reflect.has(data, "originalQuery") ? new Text2(data.originalQuery) : void 0;
this.original_query_endpoint = Reflect.has(data, "originalQueryEndpoint") ? new NavigationEndpoint(data.originalQueryEndpoint) : void 0;
}
};
__name(_IncludingResultsFor, "IncludingResultsFor");
__publicField(_IncludingResultsFor, "type", "IncludingResultsFor");
var IncludingResultsFor = _IncludingResultsFor;
// dist/src/parser/classes/InfoPanelContent.js
var _InfoPanelContent = class _InfoPanelContent extends YTNode {
constructor(data) {
super();
__publicField(this, "title");
__publicField(this, "source");
__publicField(this, "paragraphs");
__publicField(this, "attributed_paragraphs");
__publicField(this, "thumbnail");
__publicField(this, "source_endpoint");
__publicField(this, "truncate_paragraphs");
__publicField(this, "background");
__publicField(this, "inline_link_icon_type");
this.title = new Text2(data.title);
this.source = new Text2(data.source);
if (Reflect.has(data, "paragraphs"))
this.paragraphs = data.paragraphs.map((p) => new Text2(p));
if (Reflect.has(data, "attributedParagraphs"))
this.attributed_paragraphs = data.attributedParagraphs.map((p) => Text2.fromAttributed(p));
this.thumbnail = Thumbnail.fromResponse(data.thumbnail);
this.source_endpoint = new NavigationEndpoint(data.sourceEndpoint);
this.truncate_paragraphs = !!data.truncateParagraphs;
this.background = data.background;
if (Reflect.has(data, "inlineLinkIcon") && Reflect.has(data.inlineLinkIcon, "iconType")) {
this.inline_link_icon_type = data.inlineLinkIcon.iconType;
}
}
};
__name(_InfoPanelContent, "InfoPanelContent");
__publicField(_InfoPanelContent, "type", "InfoPanelContent");
var InfoPanelContent = _InfoPanelContent;
// dist/src/parser/classes/InfoPanelContainer.js
var _InfoPanelContainer = class _InfoPanelContainer extends YTNode {
constructor(data) {
super();
__publicField(this, "title");
__publicField(this, "menu");
__publicField(this, "content");
__publicField(this, "header_endpoint");
__publicField(this, "background");
__publicField(this, "title_style");
__publicField(this, "icon_type");
this.title = new Text2(data.title);
this.menu = parser_exports.parseItem(data.menu, Menu);
this.content = parser_exports.parseItem(data.content, InfoPanelContent);
if (data.headerEndpoint)
this.header_endpoint = new NavigationEndpoint(data.headerEndpoint);
this.background = data.background;
this.title_style = data.titleStyle;
if (Reflect.has(data, "icon")) {
this.icon_type = data.icon?.iconType;
}
}
};
__name(_InfoPanelContainer, "InfoPanelContainer");
__publicField(_InfoPanelContainer, "type", "InfoPanelContainer");
var InfoPanelContainer = _InfoPanelContainer;
// dist/src/parser/classes/InteractiveTabbedHeader.js
var _InteractiveTabbedHeader = class _InteractiveTabbedHeader extends YTNode {
constructor(data) {
super();
__publicField(this, "header_type");
__publicField(this, "title");
__publicField(this, "description");
__publicField(this, "metadata");
__publicField(this, "badges");
__publicField(this, "box_art");
__publicField(this, "banner");
__publicField(this, "buttons");
__publicField(this, "auto_generated");
this.header_type = data.type;
this.title = new Text2(data.title);
this.description = new Text2(data.description);
this.metadata = new Text2(data.metadata);
this.badges = parser_exports.parseArray(data.badges, MetadataBadge);
this.box_art = Thumbnail.fromResponse(data.boxArt);
this.banner = Thumbnail.fromResponse(data.banner);
this.buttons = parser_exports.parseArray(data.buttons, [SubscribeButton, Button]);
this.auto_generated = new Text2(data.autoGenerated);
}
};
__name(_InteractiveTabbedHeader, "InteractiveTabbedHeader");
__publicField(_InteractiveTabbedHeader, "type", "InteractiveTabbedHeader");
var InteractiveTabbedHeader = _InteractiveTabbedHeader;
// dist/src/parser/classes/ItemSectionHeader.js
var _ItemSectionHeader = class _ItemSectionHeader extends YTNode {
constructor(data) {
super();
__publicField(this, "title");
this.title = new Text2(data.title);
}
};
__name(_ItemSectionHeader, "ItemSectionHeader");
__publicField(_ItemSectionHeader, "type", "ItemSectionHeader");
var ItemSectionHeader = _ItemSectionHeader;
// dist/src/parser/classes/ItemSectionTab.js
var _ItemSectionTab = class _ItemSectionTab extends YTNode {
constructor(data) {
super();
__publicField(this, "title");
__publicField(this, "selected");
__publicField(this, "endpoint");
this.title = new Text2(data.title);
this.selected = !!data.selected;
this.endpoint = new NavigationEndpoint(data.endpoint);
}
};
__name(_ItemSectionTab, "ItemSectionTab");
__publicField(_ItemSectionTab, "type", "Tab");
var ItemSectionTab = _ItemSectionTab;
// dist/src/parser/classes/ItemSectionTabbedHeader.js
var _ItemSectionTabbedHeader = class _ItemSectionTabbedHeader extends YTNode {
constructor(data) {
super();
__publicField(this, "title");
__publicField(this, "tabs");
__publicField(this, "end_items");
this.title = new Text2(data.title);
this.tabs = parser_exports.parseArray(data.tabs, ItemSectionTab);
if (Reflect.has(data, "endItems")) {
this.end_items = parser_exports.parseArray(data.endItems);
}
}
};
__name(_ItemSectionTabbedHeader, "ItemSectionTabbedHeader");
__publicField(_ItemSectionTabbedHeader, "type", "ItemSectionTabbedHeader");
var ItemSectionTabbedHeader = _ItemSectionTabbedHeader;
// dist/src/parser/classes/SortFilterHeader.js
var _SortFilterHeader = class _SortFilterHeader extends YTNode {
constructor(data) {
super();
__publicField(this, "filter_menu");
this.filter_menu = parser_exports.parseItem(data.filterMenu, nodes_exports.SortFilterSubMenu);
}
};
__name(_SortFilterHeader, "SortFilterHeader");
__publicField(_SortFilterHeader, "type", "SortFilterHeader");
var SortFilterHeader = _SortFilterHeader;
// dist/src/parser/classes/ItemSection.js
var _ItemSection = class _ItemSection extends YTNode {
constructor(data) {
super();
__publicField(this, "header");
__publicField(this, "contents");
__publicField(this, "target_id");
__publicField(this, "continuation");
this.header = parser_exports.parseItem(data.header, [CommentsHeader, ItemSectionHeader, ItemSectionTabbedHeader, SortFilterHeader, FeedFilterChipBar]);
this.contents = parser_exports.parseArray(data.contents);
if (data.targetId || data.sectionIdentifier) {
this.target_id = data.targetId || data.sectionIdentifier;
}
if (data.continuations) {
this.continuation = data.continuations?.at(0)?.nextContinuationData?.continuation;
}
}
};
__name(_ItemSection, "ItemSection");
__publicField(_ItemSection, "type", "ItemSection");
var ItemSection = _ItemSection;
// dist/src/parser/classes/LiveChat.js
var _LiveChat = class _LiveChat extends YTNode {
constructor(data) {
super();
__publicField(this, "header");
__publicField(this, "initial_display_state");
__publicField(this, "continuation");
__publicField(this, "client_messages");
__publicField(this, "is_replay");
this.header = parser_exports.parseItem(data.header);
this.initial_display_state = data.initialDisplayState;
this.continuation = data.continuations[0]?.reloadContinuationData?.continuation;
this.client_messages = {
reconnect_message: new Text2(data.clientMessages.reconnectMessage),
unable_to_reconnect_message: new Text2(data.clientMessages.unableToReconnectMessage),
fatal_error: new Text2(data.clientMessages.fatalError),
reconnected_message: new Text2(data.clientMessages.reconnectedMessage),
generic_error: new Text2(data.clientMessages.genericError)
};
this.is_replay = !!data.isReplay;
}
};
__name(_LiveChat, "LiveChat");
__publicField(_LiveChat, "type", "LiveChat");
var LiveChat = _LiveChat;
// dist/src/parser/classes/livechat/items/LiveChatBannerHeader.js
var _LiveChatBannerHeader = class _LiveChatBannerHeader extends YTNode {
constructor(data) {
super();
__publicField(this, "text");
__publicField(this, "icon_type");
__publicField(this, "context_menu_button");
this.text = new Text2(data.text);
if (Reflect.has(data, "icon") && Reflect.has(data.icon, "iconType")) {
this.icon_type = data.icon.iconType;
}
this.context_menu_button = parser_exports.parseItem(data.contextMenuButton, Button);
}
};
__name(_LiveChatBannerHeader, "LiveChatBannerHeader");
__publicField(_LiveChatBannerHeader, "type", "LiveChatBannerHeader");
var LiveChatBannerHeader = _LiveChatBannerHeader;
// dist/src/parser/classes/livechat/items/LiveChatBanner.js
var _LiveChatBanner = class _LiveChatBanner extends YTNode {
constructor(data) {
super();
__publicField(this, "header");
__publicField(this, "contents");
__publicField(this, "action_id");
__publicField(this, "viewer_is_creator");
__publicField(this, "target_id");
__publicField(this, "is_stackable");
__publicField(this, "background_type");
__publicField(this, "banner_type");
__publicField(this, "banner_properties_is_ephemeral");
__publicField(this, "banner_properties_auto_collapse_delay_seconds");
this.header = parser_exports.parseItem(data.header, LiveChatBannerHeader);
this.contents = parser_exports.parseItem(data.contents);
this.action_id = data.actionId;
if (Reflect.has(data, "viewerIsCreator")) {
this.viewer_is_creator = data.viewerIsCreator;
}
this.target_id = data.targetId;
this.is_stackable = data.isStackable;
if (Reflect.has(data, "backgroundType")) {
this.background_type = data.backgroundType;
}
this.banner_type = data.bannerType;
if (Reflect.has(data, "bannerProperties") && Reflect.has(data.bannerProperties, "isEphemeral")) {
this.banner_properties_is_ephemeral = Boolean(data.bannerProperties.isEphemeral);
}
if (Reflect.has(data, "bannerProperties") && Reflect.has(data.bannerProperties, "autoCollapseDelay") && Reflect.has(data.bannerProperties.autoCollapseDelay, "seconds")) {
this.banner_properties_auto_collapse_delay_seconds = data.bannerProperties.autoCollapseDelay.seconds;
}
}
};
__name(_LiveChatBanner, "LiveChatBanner");
__publicField(_LiveChatBanner, "type", "LiveChatBanner");
var LiveChatBanner = _LiveChatBanner;
// dist/src/parser/classes/livechat/AddBannerToLiveChatCommand.js
var _AddBannerToLiveChatCommand = class _AddBannerToLiveChatCommand extends YTNode {
constructor(data) {
super();
__publicField(this, "banner");
this.banner = parser_exports.parseItem(data.bannerRenderer, LiveChatBanner);
}
};
__name(_AddBannerToLiveChatCommand, "AddBannerToLiveChatCommand");
__publicField(_AddBannerToLiveChatCommand, "type", "AddBannerToLiveChatCommand");
var AddBannerToLiveChatCommand = _AddBannerToLiveChatCommand;
// dist/src/parser/classes/livechat/AddChatItemAction.js
var _AddChatItemAction = class _AddChatItemAction extends YTNode {
constructor(data) {
super();
__publicField(this, "item");
__publicField(this, "client_id");
this.item = parser_exports.parseItem(data.item);
if (Reflect.has(data, "clientId")) {
this.client_id = data.clientId;
}
}
};
__name(_AddChatItemAction, "AddChatItemAction");
__publicField(_AddChatItemAction, "type", "AddChatItemAction");
var AddChatItemAction = _AddChatItemAction;
// dist/src/parser/classes/livechat/AddLiveChatTickerItemAction.js
var _AddLiveChatTickerItemAction = class _AddLiveChatTickerItemAction extends YTNode {
// TODO: check this assumption.
constructor(data) {
super();
__publicField(this, "item");
__publicField(this, "duration_sec");
this.item = parser_exports.parseItem(data.item);
this.duration_sec = data.durationSec;
}
};
__name(_AddLiveChatTickerItemAction, "AddLiveChatTickerItemAction");
__publicField(_AddLiveChatTickerItemAction, "type", "AddLiveChatTickerItemAction");
var AddLiveChatTickerItemAction = _AddLiveChatTickerItemAction;
// dist/src/parser/classes/livechat/DimChatItemAction.js
var _DimChatItemAction = class _DimChatItemAction extends YTNode {
constructor(data) {
super();
__publicField(this, "client_assigned_id");
this.client_assigned_id = data.clientAssignedId;
}
};
__name(_DimChatItemAction, "DimChatItemAction");
__publicField(_DimChatItemAction, "type", "DimChatItemAction");
var DimChatItemAction = _DimChatItemAction;
// dist/src/parser/classes/livechat/items/BumperUserEduContentView.js
var _BumperUserEduContentView = class _BumperUserEduContentView extends YTNode {
constructor(data) {
super();
__publicField(this, "text");
__publicField(this, "image_name");
__publicField(this, "image_color");
this.text = Text2.fromAttributed(data.text);
this.image_name = data.image.sources[0].clientResource.imageName;
this.image_color = data.image.sources[0].clientResource.imageColor;
}
};
__name(_BumperUserEduContentView, "BumperUserEduContentView");
__publicField(_BumperUserEduContentView, "type", "BumperUserEduContentView");
var BumperUserEduContentView = _BumperUserEduContentView;
// dist/src/parser/classes/livechat/items/CreatorHeartView.js
var _CreatorHeartView = class _CreatorHeartView extends YTNode {
constructor(data) {
super();
__publicField(this, "creator_thumbnail");
__publicField(this, "hearted_icon_name");
__publicField(this, "unhearted_icon_name");
__publicField(this, "unhearted_icon_processor");
__publicField(this, "hearted_hover_text");
__publicField(this, "hearted_accessibility_label");
__publicField(this, "unhearted_accessibility_label");
__publicField(this, "engagement_state_key");
this.creator_thumbnail = Thumbnail.fromResponse(data.creatorThumbnail);
this.hearted_icon_name = data.heartedIcon.sources[0].clientResource.imageName;
this.unhearted_icon_name = data.unheartedIcon.sources[0].clientResource.imageName;
this.unhearted_icon_processor = {
border_image_processor: {
image_tint: {
color: data.unheartedIcon.processor.borderImageProcessor.imageTint.color
}
}
};
this.hearted_hover_text = data.heartedHoverText;
this.hearted_accessibility_label = data.heartedAccessibilityLabel;
this.unhearted_accessibility_label = data.unheartedAccessibilityLabel;
this.engagement_state_key = data.engagementStateKey;
}
};
__name(_CreatorHeartView, "CreatorHeartView");
__publicField(_CreatorHeartView, "type", "CreatorHeartView");
var CreatorHeartView = _CreatorHeartView;
// dist/src/parser/classes/livechat/items/LiveChatAutoModMessage.js
var _LiveChatAutoModMessage = class _LiveChatAutoModMessage extends YTNode {
constructor(data) {
super();
__publicField(this, "menu_endpoint");
__publicField(this, "moderation_buttons");
__publicField(this, "auto_moderated_item");
__publicField(this, "header_text");
__publicField(this, "timestamp");
__publicField(this, "id");
this.menu_endpoint = new NavigationEndpoint(data.contextMenuEndpoint);
this.moderation_buttons = parser_exports.parseArray(data.moderationButtons, Button);
this.auto_moderated_item = parser_exports.parseItem(data.autoModeratedItem);
this.header_text = new Text2(data.headerText);
this.timestamp = Math.floor(parseInt(data.timestampUsec) / 1e3);
this.id = data.id;
}
};
__name(_LiveChatAutoModMessage, "LiveChatAutoModMessage");
__publicField(_LiveChatAutoModMessage, "type", "LiveChatAutoModMessage");
var LiveChatAutoModMessage = _LiveChatAutoModMessage;
// dist/src/parser/classes/livechat/items/LiveChatBannerChatSummary.js
var _LiveChatBannerChatSummary = class _LiveChatBannerChatSummary extends YTNode {
constructor(data) {
super();
__publicField(this, "id");
__publicField(this, "chat_summary");
__publicField(this, "icon_type");
__publicField(this, "like_feedback_button");
__publicField(this, "dislike_feedback_button");
this.id = data.liveChatSummaryId;
this.chat_summary = new Text2(data.chatSummary);
this.icon_type = data.icon.iconType;
this.like_feedback_button = parser_exports.parseItem(data.likeFeedbackButton, ToggleButtonView);
this.dislike_feedback_button = parser_exports.parseItem(data.dislikeFeedbackButton, ToggleButtonView);
}
};
__name(_LiveChatBannerChatSummary, "LiveChatBannerChatSummary");
__publicField(_LiveChatBannerChatSummary, "type", "LiveChatBannerChatSummary");
var LiveChatBannerChatSummary = _LiveChatBannerChatSummary;
// dist/src/parser/classes/livechat/items/LiveChatBannerPoll.js
var _LiveChatBannerPoll = class _LiveChatBannerPoll extends YTNode {
constructor(data) {
super();
__publicField(this, "poll_question");
__publicField(this, "author_photo");
__publicField(this, "choices");
__publicField(this, "collapsed_state_entity_key");
__publicField(this, "live_chat_poll_state_entity_key");
__publicField(this, "context_menu_button");
this.poll_question = new Text2(data.pollQuestion);
this.author_photo = Thumbnail.fromResponse(data.authorPhoto);
this.choices = data.pollChoices.map((choice) => ({
option_id: choice.pollOptionId,
text: new Text2(choice.text).toString()
// XXX: This toString should probably not be used here.
}));
this.collapsed_state_entity_key = data.collapsedStateEntityKey;
this.live_chat_poll_state_entity_key = data.liveChatPollStateEntityKey;
this.context_menu_button = parser_exports.parseItem(data.contextMenuButton, Button);
}
};
__name(_LiveChatBannerPoll, "LiveChatBannerPoll");
__publicField(_LiveChatBannerPoll, "type", "LiveChatBannerPoll");
var LiveChatBannerPoll = _LiveChatBannerPoll;
// dist/src/parser/classes/livechat/items/LiveChatBannerRedirect.js
var _LiveChatBannerRedirect = class _LiveChatBannerRedirect extends YTNode {
constructor(data) {
super();
__publicField(this, "banner_message");
__publicField(this, "author_photo");
__publicField(this, "inline_action_button");
__publicField(this, "context_menu_button");
this.banner_message = new Text2(data.bannerMessage);
this.author_photo = Thumbnail.fromResponse(data.authorPhoto);
this.inline_action_button = parser_exports.parseItem(data.inlineActionButton, Button);
this.context_menu_button = parser_exports.parseItem(data.contextMenuButton, Button);
}
};
__name(_LiveChatBannerRedirect, "LiveChatBannerRedirect");
__publicField(_LiveChatBannerRedirect, "type", "LiveChatBannerRedirect");
var LiveChatBannerRedirect = _LiveChatBannerRedirect;
// dist/src/parser/classes/livechat/items/LiveChatItemBumperView.js
var _LiveChatItemBumperView = class _LiveChatItemBumperView extends YTNode {
constructor(data) {
super();
__publicField(this, "content");
this.content = parser_exports.parseItem(data.content, BumperUserEduContentView);
}
};
__name(_LiveChatItemBumperView, "LiveChatItemBumperView");
__publicField(_LiveChatItemBumperView, "type", "LiveChatItemBumperView");
var LiveChatItemBumperView = _LiveChatItemBumperView;
// dist/src/parser/classes/livechat/items/LiveChatMembershipItem.js
var _LiveChatMembershipItem = class _LiveChatMembershipItem extends YTNode {
constructor(data) {
super();
__publicField(this, "id");
__publicField(this, "timestamp");
__publicField(this, "timestamp_usec");
__publicField(this, "timestamp_text");
__publicField(this, "header_primary_text");
__publicField(this, "header_subtext");
__publicField(this, "message");
__publicField(this, "author");
__publicField(this, "menu_endpoint");
__publicField(this, "context_menu_accessibility_label");
this.id = data.id;
this.timestamp = Math.floor(parseInt(data.timestampUsec) / 1e3);
this.timestamp_usec = data.timestampUsec;
if (Reflect.has(data, "timestampText")) {
this.timestamp_text = new Text2(data.timestampText);
}
if (Reflect.has(data, "headerPrimaryText")) {
this.header_primary_text = new Text2(data.headerPrimaryText);
}
this.header_subtext = new Text2(data.headerSubtext);
if (Reflect.has(data, "message")) {
this.message = new Text2(data.message);
}
this.author = new Author(data.authorName, data.authorBadges, data.authorPhoto, data.authorExternalChannelId);
this.menu_endpoint = new NavigationEndpoint(data.contextMenuEndpoint);
this.context_menu_accessibility_label = data.contextMenuAccessibility.accessibilityData.label;
}
};
__name(_LiveChatMembershipItem, "LiveChatMembershipItem");
__publicField(_LiveChatMembershipItem, "type", "LiveChatMembershipItem");
var LiveChatMembershipItem = _LiveChatMembershipItem;
// dist/src/parser/classes/livechat/items/LiveChatModeChangeMessage.js
var _LiveChatModeChangeMessage = class _LiveChatModeChangeMessage extends YTNode {
constructor(data) {
super();
__publicField(this, "id");
__publicField(this, "icon_type");
__publicField(this, "text");
__publicField(this, "subtext");
__publicField(this, "timestamp");
__publicField(this, "timestamp_usec");
__publicField(this, "timestamp_text");
this.id = data.id;
this.icon_type = data.icon.iconType;
this.text = new Text2(data.text);
this.subtext = new Text2(data.subtext);
this.timestamp = Math.floor(parseInt(data.timestampUsec) / 1e3);
this.timestamp_usec = data.timestampUsec;
this.timestamp_text = new Text2(data.timestampText);
}
};
__name(_LiveChatModeChangeMessage, "LiveChatModeChangeMessage");
__publicField(_LiveChatModeChangeMessage, "type", "LiveChatModeChangeMessage");
var LiveChatModeChangeMessage = _LiveChatModeChangeMessage;
// dist/src/parser/classes/livechat/items/PdgReplyButtonView.js
var _PdgReplyButtonView = class _PdgReplyButtonView extends YTNode {
constructor(data) {
super();
__publicField(this, "reply_button");
__publicField(this, "reply_count_entity_key");
__publicField(this, "reply_count_placeholder");
this.reply_button = parser_exports.parseItem(data.replyButton, ButtonView);
this.reply_count_entity_key = data.replyCountEntityKey;
this.reply_count_placeholder = Text2.fromAttributed(data.replyCountPlaceholder);
}
};
__name(_PdgReplyButtonView, "PdgReplyButtonView");
__publicField(_PdgReplyButtonView, "type", "PdgReplyButtonView");
var PdgReplyButtonView = _PdgReplyButtonView;
// dist/src/parser/classes/livechat/items/LiveChatPaidMessage.js
var _LiveChatPaidMessage = class _LiveChatPaidMessage extends YTNode {
constructor(data) {
super();
__publicField(this, "id");
__publicField(this, "message");
__publicField(this, "author");
__publicField(this, "author_name_text_color");
__publicField(this, "header_background_color");
__publicField(this, "header_text_color");
__publicField(this, "body_background_color");
__publicField(this, "body_text_color");
__publicField(this, "purchase_amount");
__publicField(this, "menu_endpoint");
__publicField(this, "context_menu_accessibility_label");
__publicField(this, "timestamp");
__publicField(this, "timestamp_usec");
__publicField(this, "timestamp_text");
__publicField(this, "timestamp_color");
__publicField(this, "header_overlay_image");
__publicField(this, "text_input_background_color");
__publicField(this, "lower_bumper");
__publicField(this, "creator_heart_button");
__publicField(this, "is_v2_style");
__publicField(this, "reply_button");
this.id = data.id;
this.message = new Text2(data.message);
this.author = new Author(data.authorName, data.authorBadges, data.authorPhoto, data.authorExternalChannelId);
this.author_name_text_color = data.authorNameTextColor;
this.header_background_color = data.headerBackgroundColor;
this.header_text_color = data.headerTextColor;
this.body_background_color = data.bodyBackgroundColor;
this.body_text_color = data.bodyTextColor;
this.purchase_amount = new Text2(data.purchaseAmountText).toString();
this.menu_endpoint = new NavigationEndpoint(data.contextMenuEndpoint);
this.context_menu_accessibility_label = data.contextMenuAccessibility.accessibilityData.label;
this.timestamp = Math.floor(parseInt(data.timestampUsec) / 1e3);
this.timestamp_usec = data.timestampUsec;
if (Reflect.has(data, "timestampText")) {
this.timestamp_text = new Text2(data.timestampText).toString();
}
this.timestamp_color = data.timestampColor;
if (Reflect.has(data, "headerOverlayImage")) {
this.header_overlay_image = Thumbnail.fromResponse(data.headerOverlayImage);
}
this.text_input_background_color = data.textInputBackgroundColor;
this.lower_bumper = parser_exports.parseItem(data.lowerBumper, LiveChatItemBumperView);
this.creator_heart_button = parser_exports.parseItem(data.creatorHeartButton, CreatorHeartView);
this.is_v2_style = data.isV2Style;
this.reply_button = parser_exports.parseItem(data.replyButton, PdgReplyButtonView);
}
};
__name(_LiveChatPaidMessage, "LiveChatPaidMessage");
__publicField(_LiveChatPaidMessage, "type", "LiveChatPaidMessage");
var LiveChatPaidMessage = _LiveChatPaidMessage;
// dist/src/parser/classes/livechat/items/LiveChatPaidSticker.js
var _LiveChatPaidSticker = class _LiveChatPaidSticker extends YTNode {
constructor(data) {
super();
__publicField(this, "id");
__publicField(this, "author");
__publicField(this, "money_chip_background_color");
__publicField(this, "money_chip_text_color");
__publicField(this, "background_color");
__publicField(this, "author_name_text_color");
__publicField(this, "sticker");
__publicField(this, "sticker_accessibility_label");
__publicField(this, "sticker_display_width");
__publicField(this, "sticker_display_height");
__publicField(this, "purchase_amount");
__publicField(this, "menu_endpoint");
__publicField(this, "context_menu");
__publicField(this, "context_menu_accessibility_label");
__publicField(this, "timestamp");
__publicField(this, "timestamp_usec");
__publicField(this, "is_v2_style");
this.id = data.id;
this.author = new Author(data.authorName, data.authorBadges, data.authorPhoto, data.authorExternalChannelId);
this.money_chip_background_color = data.moneyChipBackgroundColor;
this.money_chip_text_color = data.moneyChipTextColor;
this.background_color = data.backgroundColor;
this.author_name_text_color = data.authorNameTextColor;
this.sticker = Thumbnail.fromResponse(data.sticker);
this.sticker_accessibility_label = data.sticker.accessibility.accessibilityData.label;
this.sticker_display_width = data.stickerDisplayWidth;
this.sticker_display_height = data.stickerDisplayHeight;
this.purchase_amount = new Text2(data.purchaseAmountText).toString();
this.menu_endpoint = new NavigationEndpoint(data.contextMenuEndpoint);
this.context_menu = this.menu_endpoint;
this.context_menu_accessibility_label = data.contextMenuAccessibility.accessibilityData.label;
this.timestamp = Math.floor(parseInt(data.timestampUsec) / 1e3);
this.timestamp_usec = data.timestampUsec;
this.is_v2_style = data.isV2Style;
}
};
__name(_LiveChatPaidSticker, "LiveChatPaidSticker");
__publicField(_LiveChatPaidSticker, "type", "LiveChatPaidSticker");
var LiveChatPaidSticker = _LiveChatPaidSticker;
// dist/src/parser/classes/livechat/items/LiveChatPlaceholderItem.js
var _LiveChatPlaceholderItem = class _LiveChatPlaceholderItem extends YTNode {
constructor(data) {
super();
__publicField(this, "id");
__publicField(this, "timestamp");
this.id = data.id;
this.timestamp = Math.floor(parseInt(data.timestampUsec) / 1e3);
}
};
__name(_LiveChatPlaceholderItem, "LiveChatPlaceholderItem");
__publicField(_LiveChatPlaceholderItem, "type", "LiveChatPlaceholderItem");
var LiveChatPlaceholderItem = _LiveChatPlaceholderItem;
// dist/src/parser/classes/livechat/items/LiveChatProductItem.js
var _LiveChatProductItem = class _LiveChatProductItem extends YTNode {
constructor(data) {
super();
__publicField(this, "title");
__publicField(this, "accessibility_title");
__publicField(this, "thumbnail");
__publicField(this, "price");
__publicField(this, "vendor_name");
__publicField(this, "from_vendor_text");
__publicField(this, "information_button");
__publicField(this, "endpoint");
__publicField(this, "creator_message");
__publicField(this, "creator_name");
__publicField(this, "author_photo");
__publicField(this, "information_dialog");
__publicField(this, "is_verified");
__publicField(this, "creator_custom_message");
this.title = data.title;
this.accessibility_title = data.accessibilityTitle;
this.thumbnail = Thumbnail.fromResponse(data.thumbnail);
this.price = data.price;
this.vendor_name = data.vendorName;
this.from_vendor_text = data.fromVendorText;
this.information_button = parser_exports.parseItem(data.informationButton);
this.endpoint = new NavigationEndpoint(data.onClickCommand);
this.creator_message = data.creatorMessage;
this.creator_name = data.creatorName;
this.author_photo = Thumbnail.fromResponse(data.authorPhoto);
this.information_dialog = parser_exports.parseItem(data.informationDialog);
this.is_verified = data.isVerified;
this.creator_custom_message = new Text2(data.creatorCustomMessage);
}
};
__name(_LiveChatProductItem, "LiveChatProductItem");
__publicField(_LiveChatProductItem, "type", "LiveChatProductItem");
var LiveChatProductItem = _LiveChatProductItem;
// dist/src/parser/classes/livechat/items/LiveChatRestrictedParticipation.js
var _LiveChatRestrictedParticipation = class _LiveChatRestrictedParticipation extends YTNode {
constructor(data) {
super();
__publicField(this, "message");
__publicField(this, "icon_type");
this.message = new Text2(data.message);
if (Reflect.has(data, "icon") && Reflect.has(data.icon, "iconType")) {
this.icon_type = data.icon.iconType;
}
}
};
__name(_LiveChatRestrictedParticipation, "LiveChatRestrictedParticipation");
__publicField(_LiveChatRestrictedParticipation, "type", "LiveChatRestrictedParticipation");
var LiveChatRestrictedParticipation = _LiveChatRestrictedParticipation;
// dist/src/parser/classes/LiveChatAuthorBadge.js
var _LiveChatAuthorBadge = class _LiveChatAuthorBadge extends MetadataBadge {
constructor(data) {
super(data);
__publicField(this, "custom_thumbnail");
this.custom_thumbnail = Thumbnail.fromResponse(data.customThumbnail);
}
};
__name(_LiveChatAuthorBadge, "LiveChatAuthorBadge");
__publicField(_LiveChatAuthorBadge, "type", "LiveChatAuthorBadge");
var LiveChatAuthorBadge = _LiveChatAuthorBadge;
// dist/src/parser/classes/livechat/items/LiveChatSponsorshipsHeader.js
var _LiveChatSponsorshipsHeader = class _LiveChatSponsorshipsHeader extends YTNode {
constructor(data) {
super();
__publicField(this, "author_name");
__publicField(this, "author_photo");
__publicField(this, "author_badges");
__publicField(this, "primary_text");
__publicField(this, "menu_endpoint");
__publicField(this, "context_menu_accessibility_label");
__publicField(this, "image");
this.author_name = new Text2(data.authorName);
this.author_photo = Thumbnail.fromResponse(data.authorPhoto);
this.author_badges = parser_exports.parseArray(data.authorBadges, LiveChatAuthorBadge);
this.primary_text = new Text2(data.primaryText);
this.menu_endpoint = new NavigationEndpoint(data.contextMenuEndpoint);
this.context_menu_accessibility_label = data.contextMenuAccessibility.accessibilityData.label;
this.image = Thumbnail.fromResponse(data.image);
}
};
__name(_LiveChatSponsorshipsHeader, "LiveChatSponsorshipsHeader");
__publicField(_LiveChatSponsorshipsHeader, "type", "LiveChatSponsorshipsHeader");
var LiveChatSponsorshipsHeader = _LiveChatSponsorshipsHeader;
// dist/src/parser/classes/livechat/items/LiveChatSponsorshipsGiftPurchaseAnnouncement.js
var _LiveChatSponsorshipsGiftPurchaseAnnouncement = class _LiveChatSponsorshipsGiftPurchaseAnnouncement extends YTNode {
constructor(data) {
super();
__publicField(this, "id");
__publicField(this, "timestamp_usec");
__publicField(this, "author_external_channel_id");
__publicField(this, "header");
this.id = data.id;
this.timestamp_usec = data.timestampUsec;
this.author_external_channel_id = data.authorExternalChannelId;
this.header = parser_exports.parseItem(data.header, LiveChatSponsorshipsHeader);
}
};
__name(_LiveChatSponsorshipsGiftPurchaseAnnouncement, "LiveChatSponsorshipsGiftPurchaseAnnouncement");
__publicField(_LiveChatSponsorshipsGiftPurchaseAnnouncement, "type", "LiveChatSponsorshipsGiftPurchaseAnnouncement");
var LiveChatSponsorshipsGiftPurchaseAnnouncement = _LiveChatSponsorshipsGiftPurchaseAnnouncement;
// dist/src/parser/classes/livechat/items/LiveChatSponsorshipsGiftRedemptionAnnouncement.js
var _LiveChatSponsorshipsGiftRedemptionAnnouncement = class _LiveChatSponsorshipsGiftRedemptionAnnouncement extends YTNode {
constructor(data) {
super();
__publicField(this, "id");
__publicField(this, "timestamp_usec");
__publicField(this, "timestamp_text");
__publicField(this, "author");
__publicField(this, "message");
__publicField(this, "menu_endpoint");
__publicField(this, "context_menu_accessibility_label");
this.id = data.id;
this.timestamp_usec = data.timestampUsec;
this.timestamp_text = new Text2(data.timestampText);
this.author = new Author(data.authorName, data.authorBadges, data.authorPhoto, data.authorExternalChannelId);
this.message = new Text2(data.message);
this.menu_endpoint = new NavigationEndpoint(data.contextMenuEndpoint);
this.context_menu_accessibility_label = data.contextMenuAccessibility.accessibilityData.label;
}
};
__name(_LiveChatSponsorshipsGiftRedemptionAnnouncement, "LiveChatSponsorshipsGiftRedemptionAnnouncement");
__publicField(_LiveChatSponsorshipsGiftRedemptionAnnouncement, "type", "LiveChatSponsorshipsGiftRedemptionAnnouncement");
var LiveChatSponsorshipsGiftRedemptionAnnouncement = _LiveChatSponsorshipsGiftRedemptionAnnouncement;
// dist/src/parser/classes/livechat/items/LiveChatTextMessage.js
var _LiveChatTextMessage = class _LiveChatTextMessage extends YTNode {
constructor(data) {
super();
__publicField(this, "id");
__publicField(this, "message");
__publicField(this, "inline_action_buttons");
__publicField(this, "timestamp");
__publicField(this, "timestamp_usec");
__publicField(this, "timestamp_text");
__publicField(this, "author");
__publicField(this, "menu_endpoint");
__publicField(this, "context_menu_accessibility_label");
__publicField(this, "before_content_buttons");
this.id = data.id;
this.message = new Text2(data.message);
this.inline_action_buttons = parser_exports.parseArray(data.inlineActionButtons, Button);
this.timestamp = Math.floor(parseInt(data.timestampUsec) / 1e3);
this.timestamp_usec = data.timestampUsec;
if (Reflect.has(data, "timestampText")) {
this.timestamp_text = new Text2(data.timestampText).toString();
}
this.author = new Author(data.authorName, data.authorBadges, data.authorPhoto, data.authorExternalChannelId);
if (Reflect.has(data, "contextMenuEndpoint")) {
this.menu_endpoint = new NavigationEndpoint(data.contextMenuEndpoint);
}
if (Reflect.has(data, "contextMenuAccessibility") && Reflect.has(data.contextMenuAccessibility, "accessibilityData") && Reflect.has(data.contextMenuAccessibility.accessibilityData, "label")) {
this.context_menu_accessibility_label = data.contextMenuAccessibility.accessibilityData.label;
}
this.before_content_buttons = parser_exports.parseArray(data.beforeContentButtons, ButtonView);
}
};
__name(_LiveChatTextMessage, "LiveChatTextMessage");
__publicField(_LiveChatTextMessage, "type", "LiveChatTextMessage");
var LiveChatTextMessage = _LiveChatTextMessage;
// dist/src/parser/classes/livechat/items/LiveChatTickerPaidMessageItem.js
var _LiveChatTickerPaidMessageItem = class _LiveChatTickerPaidMessageItem extends YTNode {
constructor(data) {
super();
__publicField(this, "id");
__publicField(this, "author");
__publicField(this, "amount");
__publicField(this, "amount_text_color");
__publicField(this, "start_background_color");
__publicField(this, "end_background_color");
__publicField(this, "duration_sec");
__publicField(this, "full_duration_sec");
__publicField(this, "show_item");
__publicField(this, "show_item_endpoint");
__publicField(this, "animation_origin");
__publicField(this, "open_engagement_panel_command");
this.id = data.id;
this.author = new Author(data.authorName || data.authorUsername, data.authorBadges, data.authorPhoto, data.authorExternalChannelId);
if (Reflect.has(data, "amount")) {
this.amount = new Text2(data.amount);
}
this.amount_text_color = data.amountTextColor;
this.start_background_color = data.startBackgroundColor;
this.end_background_color = data.endBackgroundColor;
this.duration_sec = data.durationSec;
this.full_duration_sec = data.fullDurationSec;
this.show_item = parser_exports.parseItem(data.showItemEndpoint?.showLiveChatItemEndpoint?.renderer);
this.show_item_endpoint = new NavigationEndpoint(data.showItemEndpoint);
this.animation_origin = data.animationOrigin;
this.open_engagement_panel_command = new NavigationEndpoint(data.openEngagementPanelCommand);
}
};
__name(_LiveChatTickerPaidMessageItem, "LiveChatTickerPaidMessageItem");
__publicField(_LiveChatTickerPaidMessageItem, "type", "LiveChatTickerPaidMessageItem");
var LiveChatTickerPaidMessageItem = _LiveChatTickerPaidMessageItem;
// dist/src/parser/classes/livechat/items/LiveChatTickerPaidStickerItem.js
var _LiveChatTickerPaidStickerItem = class _LiveChatTickerPaidStickerItem extends YTNode {
constructor(data) {
super();
__publicField(this, "id");
__publicField(this, "author_external_channel_id");
__publicField(this, "author_photo");
__publicField(this, "start_background_color");
__publicField(this, "end_background_color");
__publicField(this, "duration_sec");
__publicField(this, "full_duration_sec");
__publicField(this, "show_item");
__publicField(this, "show_item_endpoint");
__publicField(this, "ticker_thumbnails");
this.id = data.id;
this.author_external_channel_id = data.authorExternalChannelId;
this.author_photo = Thumbnail.fromResponse(data.authorPhoto);
this.start_background_color = data.startBackgroundColor;
this.end_background_color = data.endBackgroundColor;
this.duration_sec = data.durationSec;
this.full_duration_sec = data.fullDurationSec;
this.show_item = parser_exports.parseItem(data.showItemEndpoint?.showLiveChatItemEndpoint?.renderer);
this.show_item_endpoint = new NavigationEndpoint(data.showItemEndpoint);
this.ticker_thumbnails = data.tickerThumbnails.map((item) => ({
thumbnails: Thumbnail.fromResponse(item),
label: item?.accessibility?.accessibilityData?.label
}));
}
};
__name(_LiveChatTickerPaidStickerItem, "LiveChatTickerPaidStickerItem");
__publicField(_LiveChatTickerPaidStickerItem, "type", "LiveChatTickerPaidStickerItem");
var LiveChatTickerPaidStickerItem = _LiveChatTickerPaidStickerItem;
// dist/src/parser/classes/livechat/items/LiveChatTickerSponsorItem.js
var _LiveChatTickerSponsorItem = class _LiveChatTickerSponsorItem extends YTNode {
constructor(data) {
super();
__publicField(this, "id");
__publicField(this, "detail");
__publicField(this, "author");
__publicField(this, "duration_sec");
this.id = data.id;
this.detail = new Text2(data.detailText);
this.author = new Author(data.authorName, data.authorBadges, data.sponsorPhoto, data.authorExternalChannelId);
this.duration_sec = data.durationSec;
}
};
__name(_LiveChatTickerSponsorItem, "LiveChatTickerSponsorItem");
__publicField(_LiveChatTickerSponsorItem, "type", "LiveChatTickerSponsorItem");
var LiveChatTickerSponsorItem = _LiveChatTickerSponsorItem;
// dist/src/parser/classes/livechat/items/LiveChatViewerEngagementMessage.js
var _LiveChatViewerEngagementMessage = class _LiveChatViewerEngagementMessage extends YTNode {
constructor(data) {
super();
__publicField(this, "id");
__publicField(this, "timestamp");
__publicField(this, "timestamp_usec");
__publicField(this, "icon_type");
__publicField(this, "message");
__publicField(this, "action_button");
__publicField(this, "menu_endpoint");
__publicField(this, "context_menu_accessibility_label");
this.id = data.id;
if (Reflect.has(data, "timestampUsec")) {
this.timestamp = Math.floor(parseInt(data.timestampUsec) / 1e3);
this.timestamp_usec = data.timestampUsec;
}
if (Reflect.has(data, "icon") && Reflect.has(data.icon, "iconType")) {
this.icon_type = data.icon.iconType;
}
this.message = new Text2(data.message);
this.action_button = parser_exports.parseItem(data.actionButton);
if (Reflect.has(data, "contextMenuEndpoint")) {
this.menu_endpoint = new NavigationEndpoint(data.contextMenuEndpoint);
}
if (Reflect.has(data, "contextMenuAccessibility") && Reflect.has(data.contextMenuAccessibility, "accessibilityData") && Reflect.has(data.contextMenuAccessibility.accessibilityData, "label")) {
this.context_menu_accessibility_label = data.contextMenuAccessibility.accessibilityData.label;
}
}
};
__name(_LiveChatViewerEngagementMessage, "LiveChatViewerEngagementMessage");
__publicField(_LiveChatViewerEngagementMessage, "type", "LiveChatViewerEngagementMessage");
var LiveChatViewerEngagementMessage = _LiveChatViewerEngagementMessage;
// dist/src/parser/classes/livechat/items/PollHeader.js
var _PollHeader = class _PollHeader extends YTNode {
constructor(data) {
super();
__publicField(this, "poll_question");
__publicField(this, "thumbnails");
__publicField(this, "metadata");
__publicField(this, "live_chat_poll_type");
__publicField(this, "context_menu_button");
this.poll_question = new Text2(data.pollQuestion);
this.thumbnails = Thumbnail.fromResponse(data.thumbnail);
this.metadata = new Text2(data.metadataText);
this.live_chat_poll_type = data.liveChatPollType;
this.context_menu_button = parser_exports.parseItem(data.contextMenuButton, Button);
}
};
__name(_PollHeader, "PollHeader");
__publicField(_PollHeader, "type", "PollHeader");
var PollHeader = _PollHeader;
// dist/src/parser/classes/livechat/LiveChatActionPanel.js
var _LiveChatActionPanel = class _LiveChatActionPanel extends YTNode {
constructor(data) {
super();
__publicField(this, "id");
__publicField(this, "contents");
__publicField(this, "target_id");
this.id = data.id;
this.contents = parser_exports.parse(data.contents);
this.target_id = data.targetId;
}
};
__name(_LiveChatActionPanel, "LiveChatActionPanel");
__publicField(_LiveChatActionPanel, "type", "LiveChatActionPanel");
var LiveChatActionPanel = _LiveChatActionPanel;
// dist/src/parser/classes/livechat/MarkChatItemAsDeletedAction.js
var _MarkChatItemAsDeletedAction = class _MarkChatItemAsDeletedAction extends YTNode {
constructor(data) {
super();
__publicField(this, "deleted_state_message");
__publicField(this, "target_item_id");
this.deleted_state_message = new Text2(data.deletedStateMessage);
this.target_item_id = data.targetItemId;
}
};
__name(_MarkChatItemAsDeletedAction, "MarkChatItemAsDeletedAction");
__publicField(_MarkChatItemAsDeletedAction, "type", "MarkChatItemAsDeletedAction");
var MarkChatItemAsDeletedAction = _MarkChatItemAsDeletedAction;
// dist/src/parser/classes/livechat/MarkChatItemsByAuthorAsDeletedAction.js
var _MarkChatItemsByAuthorAsDeletedAction = class _MarkChatItemsByAuthorAsDeletedAction extends YTNode {
constructor(data) {
super();
__publicField(this, "deleted_state_message");
__publicField(this, "external_channel_id");
this.deleted_state_message = new Text2(data.deletedStateMessage);
this.external_channel_id = data.externalChannelId;
}
};
__name(_MarkChatItemsByAuthorAsDeletedAction, "MarkChatItemsByAuthorAsDeletedAction");
__publicField(_MarkChatItemsByAuthorAsDeletedAction, "type", "MarkChatItemsByAuthorAsDeletedAction");
var MarkChatItemsByAuthorAsDeletedAction = _MarkChatItemsByAuthorAsDeletedAction;
// dist/src/parser/classes/livechat/RemoveBannerForLiveChatCommand.js
var _RemoveBannerForLiveChatCommand = class _RemoveBannerForLiveChatCommand extends YTNode {
constructor(data) {
super();
__publicField(this, "target_action_id");
this.target_action_id = data.targetActionId;
}
};
__name(_RemoveBannerForLiveChatCommand, "RemoveBannerForLiveChatCommand");
__publicField(_RemoveBannerForLiveChatCommand, "type", "RemoveBannerForLiveChatCommand");
var RemoveBannerForLiveChatCommand = _RemoveBannerForLiveChatCommand;
// dist/src/parser/classes/livechat/RemoveChatItemAction.js
var _RemoveChatItemAction = class _RemoveChatItemAction extends YTNode {
constructor(data) {
super();
__publicField(this, "target_item_id");
this.target_item_id = data.targetItemId;
}
};
__name(_RemoveChatItemAction, "RemoveChatItemAction");
__publicField(_RemoveChatItemAction, "type", "RemoveChatItemAction");
var RemoveChatItemAction = _RemoveChatItemAction;
// dist/src/parser/classes/livechat/RemoveChatItemByAuthorAction.js
var _RemoveChatItemByAuthorAction = class _RemoveChatItemByAuthorAction extends YTNode {
constructor(data) {
super();
__publicField(this, "external_channel_id");
this.external_channel_id = data.externalChannelId;
}
};
__name(_RemoveChatItemByAuthorAction, "RemoveChatItemByAuthorAction");
__publicField(_RemoveChatItemByAuthorAction, "type", "RemoveChatItemByAuthorAction");
var RemoveChatItemByAuthorAction = _RemoveChatItemByAuthorAction;
// dist/src/parser/classes/livechat/ReplaceChatItemAction.js
var _ReplaceChatItemAction = class _ReplaceChatItemAction extends YTNode {
constructor(data) {
super();
__publicField(this, "target_item_id");
__publicField(this, "replacement_item");
this.target_item_id = data.targetItemId;
this.replacement_item = parser_exports.parseItem(data.replacementItem);
}
};
__name(_ReplaceChatItemAction, "ReplaceChatItemAction");
__publicField(_ReplaceChatItemAction, "type", "ReplaceChatItemAction");
var ReplaceChatItemAction = _ReplaceChatItemAction;
// dist/src/parser/classes/livechat/ReplaceLiveChatAction.js
var _ReplaceLiveChatAction = class _ReplaceLiveChatAction extends YTNode {
constructor(data) {
super();
__publicField(this, "to_replace");
__publicField(this, "replacement");
this.to_replace = data.toReplace;
this.replacement = parser_exports.parseItem(data.replacement);
}
};
__name(_ReplaceLiveChatAction, "ReplaceLiveChatAction");
__publicField(_ReplaceLiveChatAction, "type", "ReplaceLiveChatAction");
var ReplaceLiveChatAction = _ReplaceLiveChatAction;
// dist/src/parser/classes/livechat/ReplayChatItemAction.js
var _ReplayChatItemAction = class _ReplayChatItemAction extends YTNode {
constructor(data) {
super();
__publicField(this, "actions");
__publicField(this, "video_offset_time_msec");
this.actions = parser_exports.parseArray(data.actions?.map((action) => {
delete action.clickTrackingParams;
return action;
}));
this.video_offset_time_msec = data.videoOffsetTimeMsec;
}
};
__name(_ReplayChatItemAction, "ReplayChatItemAction");
__publicField(_ReplayChatItemAction, "type", "ReplayChatItemAction");
var ReplayChatItemAction = _ReplayChatItemAction;
// dist/src/parser/classes/livechat/ShowLiveChatActionPanelAction.js
var _ShowLiveChatActionPanelAction = class _ShowLiveChatActionPanelAction extends YTNode {
constructor(data) {
super();
__publicField(this, "panel_to_show");
this.panel_to_show = parser_exports.parseItem(data.panelToShow, LiveChatActionPanel);
}
};
__name(_ShowLiveChatActionPanelAction, "ShowLiveChatActionPanelAction");
__publicField(_ShowLiveChatActionPanelAction, "type", "ShowLiveChatActionPanelAction");
var ShowLiveChatActionPanelAction = _ShowLiveChatActionPanelAction;
// dist/src/parser/classes/livechat/ShowLiveChatDialogAction.js
var _ShowLiveChatDialogAction = class _ShowLiveChatDialogAction extends YTNode {
constructor(data) {
super();
__publicField(this, "dialog");
this.dialog = parser_exports.parseItem(data.dialog);
}
};
__name(_ShowLiveChatDialogAction, "ShowLiveChatDialogAction");
__publicField(_ShowLiveChatDialogAction, "type", "ShowLiveChatDialogAction");
var ShowLiveChatDialogAction = _ShowLiveChatDialogAction;
// dist/src/parser/classes/livechat/ShowLiveChatTooltipCommand.js
var _ShowLiveChatTooltipCommand = class _ShowLiveChatTooltipCommand extends YTNode {
constructor(data) {
super();
__publicField(this, "tooltip");
this.tooltip = parser_exports.parseItem(data.tooltip);
}
};
__name(_ShowLiveChatTooltipCommand, "ShowLiveChatTooltipCommand");
__publicField(_ShowLiveChatTooltipCommand, "type", "ShowLiveChatTooltipCommand");
var ShowLiveChatTooltipCommand = _ShowLiveChatTooltipCommand;
// dist/src/parser/classes/livechat/UpdateDateTextAction.js
var _UpdateDateTextAction = class _UpdateDateTextAction extends YTNode {
constructor(data) {
super();
__publicField(this, "date_text");
this.date_text = new Text2(data.dateText).toString();
}
};
__name(_UpdateDateTextAction, "UpdateDateTextAction");
__publicField(_UpdateDateTextAction, "type", "UpdateDateTextAction");
var UpdateDateTextAction = _UpdateDateTextAction;
// dist/src/parser/classes/livechat/UpdateDescriptionAction.js
var _UpdateDescriptionAction = class _UpdateDescriptionAction extends YTNode {
constructor(data) {
super();
__publicField(this, "description");
this.description = new Text2(data.description);
}
};
__name(_UpdateDescriptionAction, "UpdateDescriptionAction");
__publicField(_UpdateDescriptionAction, "type", "UpdateDescriptionAction");
var UpdateDescriptionAction = _UpdateDescriptionAction;
// dist/src/parser/classes/livechat/UpdateLiveChatPollAction.js
var _UpdateLiveChatPollAction = class _UpdateLiveChatPollAction extends YTNode {
constructor(data) {
super();
__publicField(this, "poll_to_update");
this.poll_to_update = parser_exports.parseItem(data.pollToUpdate);
}
};
__name(_UpdateLiveChatPollAction, "UpdateLiveChatPollAction");
__publicField(_UpdateLiveChatPollAction, "type", "UpdateLiveChatPollAction");
var UpdateLiveChatPollAction = _UpdateLiveChatPollAction;
// dist/src/parser/classes/livechat/UpdateTitleAction.js
var _UpdateTitleAction = class _UpdateTitleAction extends YTNode {
constructor(data) {
super();
__publicField(this, "title");
this.title = new Text2(data.title);
}
};
__name(_UpdateTitleAction, "UpdateTitleAction");
__publicField(_UpdateTitleAction, "type", "UpdateTitleAction");
var UpdateTitleAction = _UpdateTitleAction;
// dist/src/parser/classes/livechat/UpdateToggleButtonTextAction.js
var _UpdateToggleButtonTextAction = class _UpdateToggleButtonTextAction extends YTNode {
constructor(data) {
super();
__publicField(this, "default_text");
__publicField(this, "toggled_text");
__publicField(this, "button_id");
this.default_text = new Text2(data.defaultText).toString();
this.toggled_text = new Text2(data.toggledText).toString();
this.button_id = data.buttonId;
}
};
__name(_UpdateToggleButtonTextAction, "UpdateToggleButtonTextAction");
__publicField(_UpdateToggleButtonTextAction, "type", "UpdateToggleButtonTextAction");
var UpdateToggleButtonTextAction = _UpdateToggleButtonTextAction;
// dist/src/parser/classes/VideoViewCount.js
var _VideoViewCount = class _VideoViewCount extends YTNode {
constructor(data) {
super();
__publicField(this, "original_view_count");
__publicField(this, "unlabeled_view_count_value");
__publicField(this, "short_view_count");
__publicField(this, "extra_short_view_count");
__publicField(this, "view_count");
__publicField(this, "is_live");
if ("originalViewCount" in data) {
this.original_view_count = parseInt(data.originalViewCount);
}
if ("unlabeledViewCountValue" in data) {
this.unlabeled_view_count_value = new Text2(data.unlabeledViewCountValue);
}
if ("shortViewCount" in data) {
this.short_view_count = new Text2(data.shortViewCount);
}
if ("extraShortViewCount" in data) {
this.extra_short_view_count = new Text2(data.extraShortViewCount);
}
if ("viewCount" in data) {
this.view_count = new Text2(data.viewCount);
}
this.is_live = !!data.isLive;
}
};
__name(_VideoViewCount, "VideoViewCount");
__publicField(_VideoViewCount, "type", "VideoViewCount");
var VideoViewCount = _VideoViewCount;
// dist/src/parser/classes/livechat/UpdateViewershipAction.js
var _UpdateViewershipAction = class _UpdateViewershipAction extends YTNode {
constructor(data) {
super();
__publicField(this, "view_count_node");
this.view_count_node = parser_exports.parseItem(data.viewCount, VideoViewCount);
}
/**
* @deprecated Use `view_count_node.view_count` instead.
*/
get view_count() {
return this.view_count_node?.view_count;
}
/**
* @deprecated Use `view_count_node.extra_short_view_count` instead.
*/
get extra_short_view_count() {
return this.view_count_node?.extra_short_view_count;
}
/**
* @deprecated Use `view_count_node.short_view_count` instead.
*/
get short_view_count() {
return this.view_count_node?.short_view_count;
}
/**
* @deprecated Use `view_count_node.original_view_count` instead.
*/
get original_view_count() {
return this.view_count_node?.original_view_count;
}
/**
* @deprecated Use `view_count_node.unlabeled_view_count_value` instead.
*/
get unlabeled_view_count_value() {
return this.view_count_node?.unlabeled_view_count_value;
}
/**
* @deprecated Use `view_count_node.is_live` instead.
*/
get is_live() {
return this.view_count_node?.is_live;
}
};
__name(_UpdateViewershipAction, "UpdateViewershipAction");
__publicField(_UpdateViewershipAction, "type", "UpdateViewershipAction");
var UpdateViewershipAction = _UpdateViewershipAction;
// dist/src/parser/classes/LiveChatDialog.js
var _LiveChatDialog = class _LiveChatDialog extends YTNode {
constructor(data) {
super();
__publicField(this, "confirm_button");
__publicField(this, "dialog_messages");
this.confirm_button = parser_exports.parseItem(data.confirmButton, Button);
this.dialog_messages = data.dialogMessages.map((el) => new Text2(el));
}
};
__name(_LiveChatDialog, "LiveChatDialog");
__publicField(_LiveChatDialog, "type", "LiveChatDialog");
var LiveChatDialog = _LiveChatDialog;
// dist/src/parser/classes/LiveChatHeader.js
var _LiveChatHeader = class _LiveChatHeader extends YTNode {
constructor(data) {
super();
__publicField(this, "overflow_menu");
__publicField(this, "collapse_button");
__publicField(this, "view_selector");
this.overflow_menu = parser_exports.parseItem(data.overflowMenu, Menu);
this.collapse_button = parser_exports.parseItem(data.collapseButton, Button);
this.view_selector = parser_exports.parseItem(data.viewSelector, SortFilterSubMenu);
}
};
__name(_LiveChatHeader, "LiveChatHeader");
__publicField(_LiveChatHeader, "type", "LiveChatHeader");
var LiveChatHeader = _LiveChatHeader;
// dist/src/parser/classes/LiveChatItemList.js
var _LiveChatItemList = class _LiveChatItemList extends YTNode {
constructor(data) {
super();
__publicField(this, "max_items_to_display");
__publicField(this, "more_comments_below_button");
this.max_items_to_display = data.maxItemsToDisplay;
this.more_comments_below_button = parser_exports.parseItem(data.moreCommentsBelowButton, Button);
}
};
__name(_LiveChatItemList, "LiveChatItemList");
__publicField(_LiveChatItemList, "type", "LiveChatItemList");
var LiveChatItemList = _LiveChatItemList;
// dist/src/parser/classes/LiveChatMessageInput.js
var _LiveChatMessageInput = class _LiveChatMessageInput extends YTNode {
constructor(data) {
super();
__publicField(this, "author_name");
__publicField(this, "author_photo");
__publicField(this, "send_button");
__publicField(this, "target_id");
this.author_name = new Text2(data.authorName);
this.author_photo = Thumbnail.fromResponse(data.authorPhoto);
this.send_button = parser_exports.parseItem(data.sendButton, Button);
this.target_id = data.targetId;
}
};
__name(_LiveChatMessageInput, "LiveChatMessageInput");
__publicField(_LiveChatMessageInput, "type", "LiveChatMessageInput");
var LiveChatMessageInput = _LiveChatMessageInput;
// dist/src/parser/classes/LiveChatParticipant.js
var _LiveChatParticipant = class _LiveChatParticipant extends YTNode {
constructor(data) {
super();
__publicField(this, "name");
__publicField(this, "photo");
__publicField(this, "badges");
this.name = new Text2(data.authorName);
this.photo = Thumbnail.fromResponse(data.authorPhoto);
this.badges = parser_exports.parseArray(data.authorBadges);
}
};
__name(_LiveChatParticipant, "LiveChatParticipant");
__publicField(_LiveChatParticipant, "type", "LiveChatParticipant");
var LiveChatParticipant = _LiveChatParticipant;
// dist/src/parser/classes/LiveChatParticipantsList.js
var _LiveChatParticipantsList = class _LiveChatParticipantsList extends YTNode {
constructor(data) {
super();
__publicField(this, "title");
__publicField(this, "participants");
this.title = new Text2(data.title);
this.participants = parser_exports.parseArray(data.participants, LiveChatParticipant);
}
};
__name(_LiveChatParticipantsList, "LiveChatParticipantsList");
__publicField(_LiveChatParticipantsList, "type", "LiveChatParticipantsList");
var LiveChatParticipantsList = _LiveChatParticipantsList;
// dist/src/parser/classes/LockupMetadataView.js
var _LockupMetadataView = class _LockupMetadataView extends YTNode {
constructor(data) {
super();
__publicField(this, "title");
__publicField(this, "metadata");
__publicField(this, "image");
__publicField(this, "menu_button");
this.title = Text2.fromAttributed(data.title);
this.metadata = parser_exports.parseItem(data.metadata, ContentMetadataView);
this.image = parser_exports.parseItem(data.image, [DecoratedAvatarView, AvatarStackView]);
this.menu_button = parser_exports.parseItem(data.menuButton, ButtonView);
}
};
__name(_LockupMetadataView, "LockupMetadataView");
__publicField(_LockupMetadataView, "type", "LockupMetadataView");
var LockupMetadataView = _LockupMetadataView;
// dist/src/parser/classes/LockupView.js
var _LockupView = class _LockupView extends YTNode {
constructor(data) {
super();
__publicField(this, "content_image");
__publicField(this, "metadata");
__publicField(this, "content_id");
__publicField(this, "content_type");
__publicField(this, "renderer_context");
this.content_image = parser_exports.parseItem(data.contentImage, [CollectionThumbnailView, ThumbnailView]);
this.metadata = parser_exports.parseItem(data.metadata, LockupMetadataView);
this.content_id = data.contentId;
this.content_type = data.contentType.replace("LOCKUP_CONTENT_TYPE_", "");
this.renderer_context = new RendererContext(data.rendererContext);
}
};
__name(_LockupView, "LockupView");
__publicField(_LockupView, "type", "LockupView");
var LockupView = _LockupView;
// dist/src/parser/classes/MacroMarkersListEntity.js
var _MacroMarkersListEntity = class _MacroMarkersListEntity extends YTNode {
constructor(data) {
super();
__publicField(this, "marker_entity_key");
__publicField(this, "external_video_id");
/** The type of markers in this entity (e.g., 'MARKER_TYPE_HEATMAP') */
__publicField(this, "marker_type");
__publicField(this, "markers");
__publicField(this, "max_height_dp");
__publicField(this, "min_height_dp");
__publicField(this, "show_hide_animation_duration_millis");
__publicField(this, "timed_marker_decorations");
// Store raw API data for use in toHeatmap
__publicField(this, "raw_api_markers");
__publicField(this, "raw_api_decorations");
this.marker_entity_key = data.key;
this.external_video_id = data.externalVideoId;
this.marker_type = data.markersList?.markerType || "";
this.raw_api_markers = data.markersList?.markers || [];
this.raw_api_decorations = data.markersList?.markersDecoration?.timedMarkerDecorations || [];
this.markers = observe(this.raw_api_markers.map((marker) => new HeatMarker(marker)));
const heatmapMetadata = data.markersList?.markersMetadata?.heatmapMetadata;
this.max_height_dp = heatmapMetadata?.maxHeightDp || 40;
this.min_height_dp = heatmapMetadata?.minHeightDp || 4;
this.show_hide_animation_duration_millis = heatmapMetadata?.showHideAnimationDurationMillis || 200;
this.timed_marker_decorations = observe(this.raw_api_decorations.map((decoration) => new TimedMarkerDecoration(decoration)));
}
/**
* Checks if this MacroMarkersListEntity represents heatmap data.
* Only heatmap markers can be converted to Heatmap objects.
*/
isHeatmap() {
return this.marker_type === "MARKER_TYPE_HEATMAP";
}
/**
* Converts this MacroMarkersListEntity to a Heatmap object
* for compatibility with existing code. Only works for heatmap markers.
* @returns Heatmap object if this entity contains heatmap data, null otherwise
*/
toHeatmap() {
if (!this.isHeatmap()) {
return null;
}
const wrappedHeatMarkers = this.raw_api_markers.map((marker) => ({ HeatMarker: marker }));
const wrappedDecorations = this.raw_api_decorations.map((decoration) => ({ TimedMarkerDecoration: decoration }));
const heatmapRawPayload = {
maxHeightDp: this.max_height_dp,
minHeightDp: this.min_height_dp,
showHideAnimationDurationMillis: this.show_hide_animation_duration_millis,
heatMarkers: wrappedHeatMarkers,
heatMarkersDecorations: wrappedDecorations
};
return parseItem({ Heatmap: heatmapRawPayload }, Heatmap);
}
};
__name(_MacroMarkersListEntity, "MacroMarkersListEntity");
__publicField(_MacroMarkersListEntity, "type", "MacroMarkersListEntity");
var MacroMarkersListEntity = _MacroMarkersListEntity;
// dist/src/parser/classes/menus/MenuNavigationItem.js
var _MenuNavigationItem = class _MenuNavigationItem extends Button {
constructor(data) {
super(data);
}
};
__name(_MenuNavigationItem, "MenuNavigationItem");
__publicField(_MenuNavigationItem, "type", "MenuNavigationItem");
var MenuNavigationItem = _MenuNavigationItem;
// dist/src/parser/classes/menus/MenuPopup.js
var _MenuPopup = class _MenuPopup extends YTNode {
constructor(data) {
super();
__publicField(this, "items");
this.items = parser_exports.parseArray(data.items, [MenuNavigationItem, MenuServiceItem]);
}
};
__name(_MenuPopup, "MenuPopup");
__publicField(_MenuPopup, "type", "MenuPopup");
var MenuPopup = _MenuPopup;
// dist/src/parser/classes/Notification.js
var _Notification = class _Notification extends YTNode {
constructor(data) {
super();
__publicField(this, "thumbnails");
__publicField(this, "video_thumbnails");
__publicField(this, "short_message");
__publicField(this, "sent_time");
__publicField(this, "notification_id");
__publicField(this, "endpoint");
__publicField(this, "record_click_endpoint");
__publicField(this, "menu");
__publicField(this, "read");
this.thumbnails = Thumbnail.fromResponse(data.thumbnail);
this.video_thumbnails = Thumbnail.fromResponse(data.videoThumbnail);
this.short_message = new Text2(data.shortMessage);
this.sent_time = new Text2(data.sentTimeText);
this.notification_id = data.notificationId;
this.endpoint = new NavigationEndpoint(data.navigationEndpoint);
this.record_click_endpoint = new NavigationEndpoint(data.recordClickEndpoint);
this.menu = parser_exports.parseItem(data.contextualMenu);
this.read = data.read;
}
};
__name(_Notification, "Notification");
__publicField(_Notification, "type", "Notification");
var Notification = _Notification;
// dist/src/parser/classes/menus/MultiPageMenuNotificationSection.js
var _MultiPageMenuNotificationSection = class _MultiPageMenuNotificationSection extends YTNode {
constructor(data) {
super();
__publicField(this, "notification_section_title");
__publicField(this, "items");
if ("notificationSectionTitle" in data) {
this.notification_section_title = new Text2(data.notificationSectionTitle);
}
this.items = parser_exports.parseArray(data.items, [Notification, Message, ContinuationItem]);
}
// XXX: Alias for consistency.
get contents() {
return this.items;
}
};
__name(_MultiPageMenuNotificationSection, "MultiPageMenuNotificationSection");
__publicField(_MultiPageMenuNotificationSection, "type", "MultiPageMenuNotificationSection");
var MultiPageMenuNotificationSection = _MultiPageMenuNotificationSection;
// dist/src/parser/classes/menus/MusicMenuItemDivider.js
var _MusicMenuItemDivider = class _MusicMenuItemDivider extends YTNode {
constructor(_data23) {
super();
}
};
__name(_MusicMenuItemDivider, "MusicMenuItemDivider");
__publicField(_MusicMenuItemDivider, "type", "MusicMenuItemDivider");
var MusicMenuItemDivider = _MusicMenuItemDivider;
// dist/src/parser/classes/menus/MusicMultiSelectMenuItem.js
var _MusicMultiSelectMenuItem = class _MusicMultiSelectMenuItem extends YTNode {
constructor(data) {
super();
__publicField(this, "title");
__publicField(this, "form_item_entity_key");
__publicField(this, "selected_icon_type");
__publicField(this, "endpoint");
__publicField(this, "selected");
this.title = new Text2(data.title).toString();
this.form_item_entity_key = data.formItemEntityKey;
if (Reflect.has(data, "selectedIcon")) {
this.selected_icon_type = data.selectedIcon.iconType;
}
if (Reflect.has(data, "selectedCommand")) {
this.endpoint = new NavigationEndpoint(data.selectedCommand);
}
this.selected = !!this.endpoint;
}
};
__name(_MusicMultiSelectMenuItem, "MusicMultiSelectMenuItem");
__publicField(_MusicMultiSelectMenuItem, "type", "MusicMultiSelectMenuItem");
var MusicMultiSelectMenuItem = _MusicMultiSelectMenuItem;
// dist/src/parser/classes/menus/MusicMultiSelectMenu.js
var _MusicMultiSelectMenu = class _MusicMultiSelectMenu extends YTNode {
constructor(data) {
super();
__publicField(this, "title");
__publicField(this, "options");
if (Reflect.has(data, "title") && Reflect.has(data.title, "musicMenuTitleRenderer")) {
this.title = new Text2(data.title.musicMenuTitleRenderer?.primaryText);
}
this.options = parser_exports.parseArray(data.options, [MusicMultiSelectMenuItem, MusicMenuItemDivider]);
}
};
__name(_MusicMultiSelectMenu, "MusicMultiSelectMenu");
__publicField(_MusicMultiSelectMenu, "type", "MusicMultiSelectMenu");
var MusicMultiSelectMenu = _MusicMultiSelectMenu;
// dist/src/parser/classes/menus/SimpleMenuHeader.js
var _SimpleMenuHeader = class _SimpleMenuHeader extends YTNode {
constructor(data) {
super();
__publicField(this, "title");
__publicField(this, "buttons");
this.title = new Text2(data.title);
this.buttons = parser_exports.parseArray(data.buttons, Button);
}
};
__name(_SimpleMenuHeader, "SimpleMenuHeader");
__publicField(_SimpleMenuHeader, "type", "SimpleMenuHeader");
var SimpleMenuHeader = _SimpleMenuHeader;
// dist/src/parser/classes/MerchandiseItem.js
var _MerchandiseItem = class _MerchandiseItem extends YTNode {
constructor(data) {
super();
__publicField(this, "title");
__publicField(this, "description");
__publicField(this, "thumbnails");
__publicField(this, "price");
__publicField(this, "vendor_name");
__publicField(this, "button_text");
__publicField(this, "button_accessibility_text");
__publicField(this, "from_vendor_text");
__publicField(this, "additional_fees_text");
__publicField(this, "region_format");
__publicField(this, "endpoint");
this.title = data.title;
this.description = data.description;
this.thumbnails = Thumbnail.fromResponse(data.thumbnail);
this.price = data.price;
this.vendor_name = data.vendorName;
this.button_text = data.buttonText;
this.button_accessibility_text = data.buttonAccessibilityText;
this.from_vendor_text = data.fromVendorText;
this.additional_fees_text = data.additionalFeesText;
this.region_format = data.regionFormat;
this.endpoint = new NavigationEndpoint(data.buttonCommand);
}
};
__name(_MerchandiseItem, "MerchandiseItem");
__publicField(_MerchandiseItem, "type", "MerchandiseItem");
var MerchandiseItem = _MerchandiseItem;
// dist/src/parser/classes/MetadataRow.js
var _MetadataRow = class _MetadataRow extends YTNode {
constructor(data) {
super();
__publicField(this, "title");
__publicField(this, "contents");
this.title = new Text2(data.title);
this.contents = data.contents.map((content) => new Text2(content));
}
};
__name(_MetadataRow, "MetadataRow");
__publicField(_MetadataRow, "type", "MetadataRow");
var MetadataRow = _MetadataRow;
// dist/src/parser/classes/MetadataRowContainer.js
var _MetadataRowContainer = class _MetadataRowContainer extends YTNode {
constructor(data) {
super();
__publicField(this, "rows");
__publicField(this, "collapsed_item_count");
this.rows = parser_exports.parseArray(data.rows);
this.collapsed_item_count = data.collapsedItemCount;
}
};
__name(_MetadataRowContainer, "MetadataRowContainer");
__publicField(_MetadataRowContainer, "type", "MetadataRowContainer");
var MetadataRowContainer = _MetadataRowContainer;
// dist/src/parser/classes/MetadataRowHeader.js
var _MetadataRowHeader = class _MetadataRowHeader extends YTNode {
constructor(data) {
super();
__publicField(this, "content");
__publicField(this, "has_divider_line");
this.content = new Text2(data.content);
this.has_divider_line = data.hasDividerLine;
}
};
__name(_MetadataRowHeader, "MetadataRowHeader");
__publicField(_MetadataRowHeader, "type", "MetadataRowHeader");
var MetadataRowHeader = _MetadataRowHeader;
// dist/src/parser/classes/MetadataScreen.js
var _MetadataScreen = class _MetadataScreen extends YTNode {
constructor(data) {
super();
__publicField(this, "section_list");
this.section_list = parser_exports.parseItem(data);
}
};
__name(_MetadataScreen, "MetadataScreen");
__publicField(_MetadataScreen, "type", "MetadataScreen");
var MetadataScreen = _MetadataScreen;
// dist/src/parser/classes/MicroformatData.js
var _MicroformatData = class _MicroformatData extends YTNode {
constructor(data) {
super();
__publicField(this, "url_canonical");
__publicField(this, "title");
__publicField(this, "description");
__publicField(this, "thumbnail");
__publicField(this, "site_name");
__publicField(this, "app_name");
__publicField(this, "android_package");
__publicField(this, "ios_app_store_id");
__publicField(this, "ios_app_arguments");
__publicField(this, "og_type");
__publicField(this, "url_applinks_web");
__publicField(this, "url_applinks_ios");
__publicField(this, "url_applinks_android");
__publicField(this, "url_twitter_ios");
__publicField(this, "url_twitter_android");
__publicField(this, "twitter_card_type");
__publicField(this, "twitter_site_handle");
__publicField(this, "schema_dot_org_type");
__publicField(this, "noindex");
__publicField(this, "is_unlisted");
__publicField(this, "is_family_safe");
__publicField(this, "tags");
__publicField(this, "available_countries");
this.url_canonical = data.urlCanonical;
this.title = data.title;
this.description = data.description;
this.thumbnail = Thumbnail.fromResponse(data.thumbnail);
this.site_name = data.siteName;
this.app_name = data.appName;
this.android_package = data.androidPackage;
this.ios_app_store_id = data.iosAppStoreId;
this.ios_app_arguments = data.iosAppArguments;
this.og_type = data.ogType;
this.url_applinks_web = data.urlApplinksWeb;
this.url_applinks_ios = data.urlApplinksIos;
this.url_applinks_android = data.urlApplinksAndroid;
this.url_twitter_ios = data.urlTwitterIos;
this.url_twitter_android = data.urlTwitterAndroid;
this.twitter_card_type = data.twitterCardType;
this.twitter_site_handle = data.twitterSiteHandle;
this.schema_dot_org_type = data.schemaDotOrgType;
this.noindex = data.noindex;
this.is_unlisted = data.unlisted;
this.is_family_safe = data.familySafe;
this.tags = data.tags;
this.available_countries = data.availableCountries;
}
};
__name(_MicroformatData, "MicroformatData");
__publicField(_MicroformatData, "type", "MicroformatData");
var MicroformatData = _MicroformatData;
// dist/src/parser/classes/Mix.js
var _Mix = class _Mix extends Playlist {
constructor(data) {
super(data);
}
};
__name(_Mix, "Mix");
__publicField(_Mix, "type", "Mix");
var Mix = _Mix;
// dist/src/parser/classes/ModalWithTitleAndButton.js
var _ModalWithTitleAndButton = class _ModalWithTitleAndButton extends YTNode {
constructor(data) {
super();
__publicField(this, "title");
__publicField(this, "content");
__publicField(this, "button");
this.title = new Text2(data.title);
this.content = new Text2(data.content);
this.button = parser_exports.parseItem(data.button, Button);
}
};
__name(_ModalWithTitleAndButton, "ModalWithTitleAndButton");
__publicField(_ModalWithTitleAndButton, "type", "ModalWithTitleAndButton");
var ModalWithTitleAndButton = _ModalWithTitleAndButton;
// dist/src/parser/classes/Movie.js
var _Movie = class _Movie extends YTNode {
constructor(data) {
super();
__publicField(this, "id");
__publicField(this, "title");
__publicField(this, "description_snippet");
__publicField(this, "top_metadata_items");
__publicField(this, "thumbnails");
__publicField(this, "thumbnail_overlays");
__publicField(this, "author");
__publicField(this, "duration");
__publicField(this, "endpoint");
__publicField(this, "badges");
__publicField(this, "use_vertical_poster");
__publicField(this, "show_action_menu");
__publicField(this, "menu");
const overlay_time_status = data.thumbnailOverlays.find((overlay) => overlay.thumbnailOverlayTimeStatusRenderer)?.thumbnailOverlayTimeStatusRenderer.text || "N/A";
this.id = data.videoId;
this.title = new Text2(data.title);
if (Reflect.has(data, "descriptionSnippet")) {
this.description_snippet = new Text2(data.descriptionSnippet);
}
this.top_metadata_items = new Text2(data.topMetadataItems);
this.thumbnails = Thumbnail.fromResponse(data.thumbnail);
this.thumbnail_overlays = parser_exports.parseArray(data.thumbnailOverlays);
this.author = new Author(data.longBylineText, data.ownerBadges, data.channelThumbnailSupportedRenderers?.channelThumbnailWithLinkRenderer?.thumbnail);
this.duration = {
text: data.lengthText ? new Text2(data.lengthText).toString() : new Text2(overlay_time_status).toString(),
seconds: timeToSeconds(data.lengthText ? new Text2(data.lengthText).toString() : new Text2(overlay_time_status).toString())
};
this.endpoint = new NavigationEndpoint(data.navigationEndpoint);
this.badges = parser_exports.parseArray(data.badges);
this.use_vertical_poster = data.useVerticalPoster;
this.show_action_menu = data.showActionMenu;
this.menu = parser_exports.parseItem(data.menu, Menu);
}
};
__name(_Movie, "Movie");
__publicField(_Movie, "type", "Movie");
var Movie = _Movie;
// dist/src/parser/classes/MovingThumbnail.js
var _MovingThumbnail = class _MovingThumbnail extends YTNode {
constructor(data) {
super();
return data.movingThumbnailDetails?.thumbnails.map((thumbnail) => new Thumbnail(thumbnail)).sort((a, b) => b.width - a.width);
}
};
__name(_MovingThumbnail, "MovingThumbnail");
__publicField(_MovingThumbnail, "type", "MovingThumbnail");
var MovingThumbnail = _MovingThumbnail;
// dist/src/parser/classes/MusicCardShelfHeaderBasic.js
var _MusicCardShelfHeaderBasic = class _MusicCardShelfHeaderBasic extends YTNode {
constructor(data) {
super();
__publicField(this, "title");
this.title = new Text2(data.title);
}
};
__name(_MusicCardShelfHeaderBasic, "MusicCardShelfHeaderBasic");
__publicField(_MusicCardShelfHeaderBasic, "type", "MusicCardShelfHeaderBasic");
var MusicCardShelfHeaderBasic = _MusicCardShelfHeaderBasic;
// dist/src/parser/classes/MusicInlineBadge.js
var _MusicInlineBadge = class _MusicInlineBadge extends YTNode {
constructor(data) {
super();
__publicField(this, "icon_type");
__publicField(this, "accessibility");
this.icon_type = data.icon.iconType;
if ("accessibilityData" in data && "accessibilityData" in data.accessibilityData) {
this.accessibility = {
accessibility_data: new AccessibilityData(data.accessibilityData.accessibilityData)
};
}
}
get label() {
return this.accessibility?.accessibility_data?.label;
}
};
__name(_MusicInlineBadge, "MusicInlineBadge");
__publicField(_MusicInlineBadge, "type", "MusicInlineBadge");
var MusicInlineBadge = _MusicInlineBadge;
// dist/src/parser/classes/MusicPlayButton.js
var _MusicPlayButton = class _MusicPlayButton extends YTNode {
constructor(data) {
super();
__publicField(this, "endpoint");
__publicField(this, "play_icon_type");
__publicField(this, "pause_icon_type");
__publicField(this, "icon_color");
__publicField(this, "accessibility_play_data");
__publicField(this, "accessibility_pause_data");
this.endpoint = new NavigationEndpoint(data.playNavigationEndpoint);
this.play_icon_type = data.playIcon.iconType;
this.pause_icon_type = data.pauseIcon.iconType;
if ("accessibilityPlayData" in data && "accessibilityData" in data.accessibilityPlayData) {
this.accessibility_play_data = {
accessibility_data: new AccessibilityData(data.accessibilityPlayData.accessibilityData)
};
}
if ("accessibilityPauseData" in data && "accessibilityData" in data.accessibilityPauseData) {
this.accessibility_pause_data = {
accessibility_data: new AccessibilityData(data.accessibilityPauseData.accessibilityData)
};
}
this.icon_color = data.iconColor;
}
get play_label() {
return this.accessibility_play_data?.accessibility_data?.label;
}
get pause_label() {
return this.accessibility_pause_data?.accessibility_data?.label;
}
};
__name(_MusicPlayButton, "MusicPlayButton");
__publicField(_MusicPlayButton, "type", "MusicPlayButton");
var MusicPlayButton = _MusicPlayButton;
// dist/src/parser/classes/MusicItemThumbnailOverlay.js
var _MusicItemThumbnailOverlay = class _MusicItemThumbnailOverlay extends YTNode {
constructor(data) {
super();
__publicField(this, "content");
__publicField(this, "content_position");
__publicField(this, "display_style");
this.content = parser_exports.parseItem(data.content, MusicPlayButton);
this.content_position = data.contentPosition;
this.display_style = data.displayStyle;
}
};
__name(_MusicItemThumbnailOverlay, "MusicItemThumbnailOverlay");
__publicField(_MusicItemThumbnailOverlay, "type", "MusicItemThumbnailOverlay");
var MusicItemThumbnailOverlay = _MusicItemThumbnailOverlay;
// dist/src/parser/classes/MusicThumbnail.js
var _MusicThumbnail = class _MusicThumbnail extends YTNode {
constructor(data) {
super();
__publicField(this, "contents");
this.contents = Thumbnail.fromResponse(data.thumbnail);
}
};
__name(_MusicThumbnail, "MusicThumbnail");
__publicField(_MusicThumbnail, "type", "MusicThumbnail");
var MusicThumbnail = _MusicThumbnail;
// dist/src/parser/classes/MusicCardShelf.js
var _MusicCardShelf = class _MusicCardShelf extends YTNode {
constructor(data) {
super();
__publicField(this, "thumbnail");
__publicField(this, "title");
__publicField(this, "subtitle");
__publicField(this, "buttons");
__publicField(this, "menu");
__publicField(this, "on_tap");
__publicField(this, "header");
__publicField(this, "end_icon_type");
__publicField(this, "subtitle_badges");
__publicField(this, "thumbnail_overlay");
__publicField(this, "contents");
this.thumbnail = parser_exports.parseItem(data.thumbnail, MusicThumbnail);
this.title = new Text2(data.title);
this.subtitle = new Text2(data.subtitle);
this.buttons = parser_exports.parseArray(data.buttons, Button);
this.menu = parser_exports.parseItem(data.menu, Menu);
this.on_tap = new NavigationEndpoint(data.onTap);
this.header = parser_exports.parseItem(data.header, MusicCardShelfHeaderBasic);
if (Reflect.has(data, "endIcon") && Reflect.has(data.endIcon, "iconType")) {
this.end_icon_type = data.endIcon.iconType;
}
this.subtitle_badges = parser_exports.parseArray(data.subtitleBadges, MusicInlineBadge);
this.thumbnail_overlay = parser_exports.parseItem(data.thumbnailOverlay, MusicItemThumbnailOverlay);
if (Reflect.has(data, "contents")) {
this.contents = parser_exports.parseArray(data.contents);
}
}
};
__name(_MusicCardShelf, "MusicCardShelf");
__publicField(_MusicCardShelf, "type", "MusicCardShelf");
var MusicCardShelf = _MusicCardShelf;
// dist/src/parser/classes/MusicCarouselShelfBasicHeader.js
var _MusicCarouselShelfBasicHeader = class _MusicCarouselShelfBasicHeader extends YTNode {
constructor(data) {
super();
__publicField(this, "title");
__publicField(this, "strapline");
__publicField(this, "thumbnail");
__publicField(this, "more_content");
__publicField(this, "end_icons");
this.title = new Text2(data.title);
if (Reflect.has(data, "strapline")) {
this.strapline = new Text2(data.strapline);
}
if (Reflect.has(data, "thumbnail")) {
this.thumbnail = parser_exports.parseItem(data.thumbnail, MusicThumbnail);
}
if (Reflect.has(data, "moreContentButton")) {
this.more_content = parser_exports.parseItem(data.moreContentButton, Button);
}
if (Reflect.has(data, "endIcons")) {
this.end_icons = parser_exports.parseArray(data.endIcons, IconLink);
}
}
};
__name(_MusicCarouselShelfBasicHeader, "MusicCarouselShelfBasicHeader");
__publicField(_MusicCarouselShelfBasicHeader, "type", "MusicCarouselShelfBasicHeader");
var MusicCarouselShelfBasicHeader = _MusicCarouselShelfBasicHeader;
// dist/src/parser/classes/MusicMultiRowListItem.js
var _MusicMultiRowListItem = class _MusicMultiRowListItem extends YTNode {
constructor(data) {
super();
__publicField(this, "thumbnail");
__publicField(this, "overlay");
__publicField(this, "on_tap");
__publicField(this, "menu");
__publicField(this, "subtitle");
__publicField(this, "title");
__publicField(this, "second_title");
__publicField(this, "description");
__publicField(this, "display_style");
this.thumbnail = parser_exports.parseItem(data.thumbnail, MusicThumbnail);
this.overlay = parser_exports.parseItem(data.overlay, MusicItemThumbnailOverlay);
this.on_tap = new NavigationEndpoint(data.onTap);
this.menu = parser_exports.parseItem(data.menu, Menu);
this.subtitle = new Text2(data.subtitle);
this.title = new Text2(data.title);
if (Reflect.has(data, "secondTitle")) {
this.second_title = new Text2(data.secondTitle);
}
if (Reflect.has(data, "description")) {
this.description = new Text2(data.description);
}
if (Reflect.has(data, "displayStyle")) {
this.display_style = data.displayStyle;
}
}
};
__name(_MusicMultiRowListItem, "MusicMultiRowListItem");
__publicField(_MusicMultiRowListItem, "type", "MusicMultiRowListItem");
var MusicMultiRowListItem = _MusicMultiRowListItem;
// dist/src/parser/classes/MusicNavigationButton.js
var _MusicNavigationButton = class _MusicNavigationButton extends YTNode {
constructor(data) {
super();
__publicField(this, "button_text");
__publicField(this, "endpoint");
this.button_text = new Text2(data.buttonText).toString();
this.endpoint = new NavigationEndpoint(data.clickCommand);
}
};
__name(_MusicNavigationButton, "MusicNavigationButton");
__publicField(_MusicNavigationButton, "type", "MusicNavigationButton");
var MusicNavigationButton = _MusicNavigationButton;
// dist/src/parser/classes/MusicResponsiveListItemFixedColumn.js
var _MusicResponsiveListItemFixedColumn = class _MusicResponsiveListItemFixedColumn extends YTNode {
constructor(data) {
super();
__publicField(this, "title");
__publicField(this, "display_priority");
this.title = new Text2(data.text);
this.display_priority = data.displayPriority;
}
};
__name(_MusicResponsiveListItemFixedColumn, "MusicResponsiveListItemFixedColumn");
__publicField(_MusicResponsiveListItemFixedColumn, "type", "musicResponsiveListItemFlexColumnRenderer");
var MusicResponsiveListItemFixedColumn = _MusicResponsiveListItemFixedColumn;
// dist/src/parser/classes/MusicResponsiveListItemFlexColumn.js
var _MusicResponsiveListItemFlexColumn = class _MusicResponsiveListItemFlexColumn extends YTNode {
constructor(data) {
super();
__publicField(this, "title");
__publicField(this, "display_priority");
this.title = new Text2(data.text);
this.display_priority = data.displayPriority;
}
};
__name(_MusicResponsiveListItemFlexColumn, "MusicResponsiveListItemFlexColumn");
__publicField(_MusicResponsiveListItemFlexColumn, "type", "MusicResponsiveListItemFlexColumn");
var MusicResponsiveListItemFlexColumn = _MusicResponsiveListItemFlexColumn;
// dist/src/parser/classes/MusicResponsiveListItem.js
var _MusicResponsiveListItem_instances, parseOther_fn, parseVideoOrSong_fn, parseSong_fn, parseVideo_fn, parseArtist_fn, parseLibraryArtist_fn, parseNonMusicTrack_fn, parsePodcastShow_fn, parseAlbum_fn, parsePlaylist_fn;
var _MusicResponsiveListItem = class _MusicResponsiveListItem extends YTNode {
constructor(data) {
super();
__privateAdd(this, _MusicResponsiveListItem_instances);
__publicField(this, "flex_columns");
__publicField(this, "fixed_columns");
__publicField(this, "endpoint");
__publicField(this, "item_type");
__publicField(this, "index");
__publicField(this, "thumbnail");
__publicField(this, "badges");
__publicField(this, "menu");
__publicField(this, "overlay");
__publicField(this, "id");
__publicField(this, "title");
__publicField(this, "duration");
__publicField(this, "album");
__publicField(this, "artists");
__publicField(this, "views");
__publicField(this, "authors");
__publicField(this, "name");
__publicField(this, "subtitle");
__publicField(this, "subscribers");
__publicField(this, "song_count");
// TODO: these might be replaceable with Author class
__publicField(this, "author");
__publicField(this, "item_count");
__publicField(this, "year");
this.flex_columns = parser_exports.parseArray(data.flexColumns, MusicResponsiveListItemFlexColumn);
this.fixed_columns = parser_exports.parseArray(data.fixedColumns, MusicResponsiveListItemFixedColumn);
const playlist_item_data = {
video_id: data?.playlistItemData?.videoId || null,
playlist_set_video_id: data?.playlistItemData?.playlistSetVideoId || null
};
if (Reflect.has(data, "navigationEndpoint")) {
this.endpoint = new NavigationEndpoint(data.navigationEndpoint);
}
let page_type = this.endpoint?.payload?.browseEndpointContextSupportedConfigs?.browseEndpointContextMusicConfig?.pageType;
if (!page_type) {
const is_non_music_track = this.flex_columns.find((col) => col.title.endpoint?.payload?.browseEndpointContextSupportedConfigs?.browseEndpointContextMusicConfig?.pageType === "MUSIC_PAGE_TYPE_NON_MUSIC_AUDIO_TRACK_PAGE");
if (is_non_music_track) {
page_type = "MUSIC_PAGE_TYPE_NON_MUSIC_AUDIO_TRACK_PAGE";
}
}
switch (page_type) {
case "MUSIC_PAGE_TYPE_ALBUM":
this.item_type = "album";
__privateMethod(this, _MusicResponsiveListItem_instances, parseAlbum_fn).call(this);
break;
case "MUSIC_PAGE_TYPE_PLAYLIST":
this.item_type = "playlist";
__privateMethod(this, _MusicResponsiveListItem_instances, parsePlaylist_fn).call(this);
break;
case "MUSIC_PAGE_TYPE_ARTIST":
case "MUSIC_PAGE_TYPE_USER_CHANNEL":
this.item_type = "artist";
__privateMethod(this, _MusicResponsiveListItem_instances, parseArtist_fn).call(this);
break;
case "MUSIC_PAGE_TYPE_LIBRARY_ARTIST":
this.item_type = "library_artist";
__privateMethod(this, _MusicResponsiveListItem_instances, parseLibraryArtist_fn).call(this);
break;
case "MUSIC_PAGE_TYPE_NON_MUSIC_AUDIO_TRACK_PAGE":
this.item_type = "non_music_track";
__privateMethod(this, _MusicResponsiveListItem_instances, parseNonMusicTrack_fn).call(this, playlist_item_data);
break;
case "MUSIC_PAGE_TYPE_PODCAST_SHOW_DETAIL_PAGE":
this.item_type = "podcast_show";
__privateMethod(this, _MusicResponsiveListItem_instances, parsePodcastShow_fn).call(this);
break;
default:
if (this.flex_columns[1]) {
__privateMethod(this, _MusicResponsiveListItem_instances, parseVideoOrSong_fn).call(this, playlist_item_data);
} else {
__privateMethod(this, _MusicResponsiveListItem_instances, parseOther_fn).call(this);
}
}
if (Reflect.has(data, "index")) {
this.index = new Text2(data.index);
}
if (Reflect.has(data, "thumbnail")) {
this.thumbnail = parser_exports.parseItem(data.thumbnail, MusicThumbnail);
}
if (Reflect.has(data, "badges")) {
this.badges = parser_exports.parseArray(data.badges);
}
if (Reflect.has(data, "menu")) {
this.menu = parser_exports.parseItem(data.menu, Menu);
}
if (Reflect.has(data, "overlay")) {
this.overlay = parser_exports.parseItem(data.overlay, MusicItemThumbnailOverlay);
}
}
get thumbnails() {
return this.thumbnail?.contents || [];
}
};
_MusicResponsiveListItem_instances = new WeakSet();
parseOther_fn = /* @__PURE__ */ __name(function() {
this.title = this.flex_columns[0].title.toString();
if (this.endpoint) {
this.item_type = "endpoint";
} else {
this.item_type = "unknown";
}
}, "#parseOther");
parseVideoOrSong_fn = /* @__PURE__ */ __name(function(playlist_item_data) {
const music_video_type = this.flex_columns.at(0)?.title.runs?.at(0)?.endpoint?.payload?.watchEndpointMusicSupportedConfigs?.watchEndpointMusicConfig?.musicVideoType;
switch (music_video_type) {
case "MUSIC_VIDEO_TYPE_UGC":
case "MUSIC_VIDEO_TYPE_OMV":
this.item_type = "video";
__privateMethod(this, _MusicResponsiveListItem_instances, parseVideo_fn).call(this, playlist_item_data);
break;
case "MUSIC_VIDEO_TYPE_ATV":
this.item_type = "song";
__privateMethod(this, _MusicResponsiveListItem_instances, parseSong_fn).call(this, playlist_item_data);
break;
default:
__privateMethod(this, _MusicResponsiveListItem_instances, parseOther_fn).call(this);
}
}, "#parseVideoOrSong");
parseSong_fn = /* @__PURE__ */ __name(function(playlist_item_data) {
this.id = playlist_item_data.video_id || this.endpoint?.payload?.videoId;
this.title = this.flex_columns[0].title.toString();
const duration_text = this.flex_columns.at(1)?.title.runs?.find((run) => /^\d+$/.test(run.text.replace(/:/g, "")))?.text || this.fixed_columns[0]?.title?.toString();
if (duration_text) {
this.duration = {
text: duration_text,
seconds: timeToSeconds(duration_text)
};
}
const album_run = this.flex_columns.at(1)?.title.runs?.find((run) => isTextRun(run) && run.endpoint && run.endpoint.payload.browseId.startsWith("MPR")) || this.flex_columns.at(2)?.title.runs?.find((run) => isTextRun(run) && run.endpoint && run.endpoint.payload.browseId.startsWith("MPR"));
if (album_run && isTextRun(album_run)) {
this.album = {
id: album_run.endpoint?.payload?.browseId,
name: album_run.text,
endpoint: album_run.endpoint
};
}
const artist_runs = this.flex_columns.at(1)?.title.runs?.filter((run) => isTextRun(run) && run.endpoint && run.endpoint.payload.browseId.startsWith("UC"));
if (artist_runs) {
this.artists = artist_runs.map((run) => ({
name: run.text,
channel_id: isTextRun(run) ? run.endpoint?.payload?.browseId : void 0,
endpoint: isTextRun(run) ? run.endpoint : void 0
}));
}
}, "#parseSong");
parseVideo_fn = /* @__PURE__ */ __name(function(playlist_item_data) {
this.id = playlist_item_data.video_id;
this.title = this.flex_columns[0].title.toString();
this.views = this.flex_columns.at(1)?.title.runs?.find((run) => run.text.match(/(.*?) views/))?.toString();
const author_runs = this.flex_columns.at(1)?.title.runs?.filter((run) => isTextRun(run) && run.endpoint && run.endpoint.payload.browseId.startsWith("UC"));
if (author_runs) {
this.authors = author_runs.map((run) => {
return {
name: run.text,
channel_id: isTextRun(run) ? run.endpoint?.payload?.browseId : void 0,
endpoint: isTextRun(run) ? run.endpoint : void 0
};
});
}
const duration_text = this.flex_columns[1].title.runs?.find((run) => /^\d+$/.test(run.text.replace(/:/g, "")))?.text || this.fixed_columns[0]?.title.runs?.find((run) => /^\d+$/.test(run.text.replace(/:/g, "")))?.text;
if (duration_text) {
this.duration = {
text: duration_text,
seconds: timeToSeconds(duration_text)
};
}
}, "#parseVideo");
parseArtist_fn = /* @__PURE__ */ __name(function() {
this.id = this.endpoint?.payload?.browseId;
this.name = this.flex_columns[0].title.toString();
this.subtitle = this.flex_columns.at(1)?.title;
this.subscribers = this.subtitle?.runs?.find((run) => /^(\d*\.)?\d+[M|K]? subscribers?$/i.test(run.text))?.text || "";
}, "#parseArtist");
parseLibraryArtist_fn = /* @__PURE__ */ __name(function() {
this.name = this.flex_columns[0].title.toString();
this.subtitle = this.flex_columns.at(1)?.title;
this.song_count = this.subtitle?.runs?.find((run) => /^\d+(,\d+)? songs?$/i.test(run.text))?.text || "";
}, "#parseLibraryArtist");
parseNonMusicTrack_fn = /* @__PURE__ */ __name(function(playlist_item_data) {
this.id = playlist_item_data.video_id || this.endpoint?.payload?.videoId;
this.title = this.flex_columns[0].title.toString();
}, "#parseNonMusicTrack");
parsePodcastShow_fn = /* @__PURE__ */ __name(function() {
this.id = this.endpoint?.payload?.browseId;
this.title = this.flex_columns[0].title.toString();
}, "#parsePodcastShow");
parseAlbum_fn = /* @__PURE__ */ __name(function() {
this.id = this.endpoint?.payload?.browseId;
this.title = this.flex_columns[0].title.toString();
const author_run = this.flex_columns.at(1)?.title.runs?.find((run) => isTextRun(run) && run.endpoint && run.endpoint.payload.browseId.startsWith("UC"));
if (author_run && isTextRun(author_run)) {
this.author = {
name: author_run.text,
channel_id: author_run.endpoint?.payload?.browseId,
endpoint: author_run.endpoint
};
}
this.year = this.flex_columns.at(1)?.title.runs?.find((run) => /^[12][0-9]{3}$/.test(run.text))?.text;
}, "#parseAlbum");
parsePlaylist_fn = /* @__PURE__ */ __name(function() {
this.id = this.endpoint?.payload?.browseId;
this.title = this.flex_columns[0].title.toString();
const item_count_run = this.flex_columns.at(1)?.title.runs?.find((run) => run.text.match(/\d+ (song|songs)/));
this.item_count = item_count_run ? item_count_run.text : void 0;
const author_run = this.flex_columns.at(1)?.title.runs?.find((run) => isTextRun(run) && run.endpoint && run.endpoint.payload.browseId.startsWith("UC"));
if (author_run && isTextRun(author_run)) {
this.author = {
name: author_run.text,
channel_id: author_run.endpoint?.payload?.browseId,
endpoint: author_run.endpoint
};
}
}, "#parsePlaylist");
__name(_MusicResponsiveListItem, "MusicResponsiveListItem");
__publicField(_MusicResponsiveListItem, "type", "MusicResponsiveListItem");
var MusicResponsiveListItem = _MusicResponsiveListItem;
// dist/src/parser/classes/MusicTwoRowItem.js
var _MusicTwoRowItem = class _MusicTwoRowItem extends YTNode {
constructor(data) {
super();
__publicField(this, "title");
__publicField(this, "endpoint");
__publicField(this, "id");
__publicField(this, "subtitle");
__publicField(this, "badges");
__publicField(this, "item_type");
__publicField(this, "subscribers");
__publicField(this, "item_count");
__publicField(this, "year");
__publicField(this, "views");
__publicField(this, "artists");
__publicField(this, "author");
__publicField(this, "thumbnail");
__publicField(this, "thumbnail_overlay");
__publicField(this, "menu");
this.title = new Text2(data.title);
this.endpoint = new NavigationEndpoint(data.navigationEndpoint);
this.id = this.endpoint?.payload?.browseId || this.endpoint?.payload?.videoId;
this.subtitle = new Text2(data.subtitle);
this.badges = parser_exports.parse(data.subtitleBadges);
const page_type = this.endpoint?.payload?.browseEndpointContextSupportedConfigs?.browseEndpointContextMusicConfig?.pageType;
switch (page_type) {
case "MUSIC_PAGE_TYPE_ARTIST":
this.item_type = "artist";
break;
case "MUSIC_PAGE_TYPE_PLAYLIST":
this.item_type = "playlist";
break;
case "MUSIC_PAGE_TYPE_ALBUM":
this.item_type = "album";
break;
default:
if (this.endpoint?.metadata?.api_url === "/next") {
this.item_type = "endpoint";
} else if (this.subtitle.runs?.[0]) {
if (this.subtitle.runs[0].text !== "Song") {
this.item_type = "video";
} else {
this.item_type = "song";
}
} else if (this.endpoint) {
this.item_type = "endpoint";
} else {
this.item_type = "unknown";
}
break;
}
if (this.item_type == "artist") {
this.subscribers = this.subtitle.runs?.find((run) => /^(\d*\.)?\d+[M|K]? subscribers?$/i.test(run.text))?.text || "";
} else if (this.item_type == "playlist") {
const item_count_run = this.subtitle.runs?.find((run) => run.text.match(/\d+ songs|song/));
this.item_count = item_count_run ? item_count_run.text : null;
} else if (this.item_type == "album") {
const artists = this.subtitle.runs?.filter((run) => run.endpoint?.payload?.browseId.startsWith("UC"));
if (artists) {
this.artists = artists.map((artist) => ({
name: artist.text,
channel_id: artist.endpoint?.payload?.browseId,
endpoint: artist.endpoint
}));
}
this.year = this.subtitle.runs?.slice(-1)[0].text;
if (isNaN(Number(this.year)))
delete this.year;
} else if (this.item_type == "video") {
this.views = this?.subtitle.runs?.find((run) => run?.text.match(/(.*?) views/))?.text || "N/A";
const author = this.subtitle.runs?.find((run) => run.endpoint?.payload?.browseId?.startsWith("UC"));
if (author) {
this.author = {
name: author?.text,
channel_id: author?.endpoint?.payload?.browseId,
endpoint: author?.endpoint
};
}
} else if (this.item_type == "song") {
const artists = this.subtitle.runs?.filter((run) => run.endpoint?.payload?.browseId.startsWith("UC"));
if (artists) {
this.artists = artists.map((artist) => ({
name: artist?.text,
channel_id: artist?.endpoint?.payload?.browseId,
endpoint: artist?.endpoint
}));
}
}
this.thumbnail = Thumbnail.fromResponse(data.thumbnailRenderer.musicThumbnailRenderer.thumbnail);
this.thumbnail_overlay = parser_exports.parseItem(data.thumbnailOverlay, MusicItemThumbnailOverlay);
this.menu = parser_exports.parseItem(data.menu, Menu);
}
};
__name(_MusicTwoRowItem, "MusicTwoRowItem");
__publicField(_MusicTwoRowItem, "type", "MusicTwoRowItem");
var MusicTwoRowItem = _MusicTwoRowItem;
// dist/src/parser/classes/MusicCarouselShelf.js
var _MusicCarouselShelf = class _MusicCarouselShelf extends YTNode {
constructor(data) {
super();
__publicField(this, "header");
__publicField(this, "contents");
__publicField(this, "num_items_per_column");
this.header = parser_exports.parseItem(data.header, MusicCarouselShelfBasicHeader);
this.contents = parser_exports.parseArray(data.contents, [MusicTwoRowItem, MusicResponsiveListItem, MusicMultiRowListItem, MusicNavigationButton]);
if (Reflect.has(data, "numItemsPerColumn")) {
this.num_items_per_column = parseInt(data.numItemsPerColumn);
}
}
};
__name(_MusicCarouselShelf, "MusicCarouselShelf");
__publicField(_MusicCarouselShelf, "type", "MusicCarouselShelf");
var MusicCarouselShelf = _MusicCarouselShelf;
// dist/src/parser/classes/MusicDescriptionShelf.js
var _MusicDescriptionShelf = class _MusicDescriptionShelf extends YTNode {
constructor(data) {
super();
__publicField(this, "description");
__publicField(this, "max_collapsed_lines");
__publicField(this, "max_expanded_lines");
__publicField(this, "footer");
this.description = new Text2(data.description);
if (Reflect.has(data, "maxCollapsedLines")) {
this.max_collapsed_lines = data.maxCollapsedLines;
}
if (Reflect.has(data, "maxExpandedLines")) {
this.max_expanded_lines = data.maxExpandedLines;
}
this.footer = new Text2(data.footer);
}
};
__name(_MusicDescriptionShelf, "MusicDescriptionShelf");
__publicField(_MusicDescriptionShelf, "type", "MusicDescriptionShelf");
var MusicDescriptionShelf = _MusicDescriptionShelf;
// dist/src/parser/classes/MusicDetailHeader.js
var _MusicDetailHeader = class _MusicDetailHeader extends YTNode {
constructor(data) {
super();
__publicField(this, "title");
__publicField(this, "description");
__publicField(this, "subtitle");
__publicField(this, "second_subtitle");
__publicField(this, "year");
__publicField(this, "song_count");
__publicField(this, "total_duration");
__publicField(this, "thumbnails");
__publicField(this, "badges");
__publicField(this, "author");
__publicField(this, "menu");
this.title = new Text2(data.title);
this.description = new Text2(data.description);
this.subtitle = new Text2(data.subtitle);
this.second_subtitle = new Text2(data.secondSubtitle);
this.year = this.subtitle.runs?.find((run) => /^[12][0-9]{3}$/.test(run.text))?.text || "";
this.song_count = this.second_subtitle.runs?.[0]?.text || "";
this.total_duration = this.second_subtitle.runs?.[2]?.text || "";
this.thumbnails = Thumbnail.fromResponse(data.thumbnail.croppedSquareThumbnailRenderer.thumbnail);
this.badges = parser_exports.parseArray(data.subtitleBadges);
const author = this.subtitle.runs?.find((run) => run?.endpoint?.payload?.browseId.startsWith("UC"));
if (author) {
this.author = {
name: author.text,
channel_id: author.endpoint?.payload?.browseId,
endpoint: author.endpoint
};
}
this.menu = parser_exports.parseItem(data.menu);
}
};
__name(_MusicDetailHeader, "MusicDetailHeader");
__publicField(_MusicDetailHeader, "type", "MusicDetailHeader");
var MusicDetailHeader = _MusicDetailHeader;
// dist/src/parser/classes/MusicDownloadStateBadge.js
var _MusicDownloadStateBadge = class _MusicDownloadStateBadge extends YTNode {
constructor(data) {
super();
__publicField(this, "playlist_id");
__publicField(this, "supported_download_states");
this.playlist_id = data.playlistId;
this.supported_download_states = data.supportedDownloadStates;
}
};
__name(_MusicDownloadStateBadge, "MusicDownloadStateBadge");
__publicField(_MusicDownloadStateBadge, "type", "MusicDownloadStateBadge");
var MusicDownloadStateBadge = _MusicDownloadStateBadge;
// dist/src/parser/classes/MusicEditablePlaylistDetailHeader.js
var _MusicEditablePlaylistDetailHeader = class _MusicEditablePlaylistDetailHeader extends YTNode {
constructor(data) {
super();
__publicField(this, "header");
__publicField(this, "edit_header");
__publicField(this, "playlist_id");
this.header = parser_exports.parseItem(data.header);
this.edit_header = parser_exports.parseItem(data.editHeader);
this.playlist_id = data.playlistId;
}
};
__name(_MusicEditablePlaylistDetailHeader, "MusicEditablePlaylistDetailHeader");
__publicField(_MusicEditablePlaylistDetailHeader, "type", "MusicEditablePlaylistDetailHeader");
var MusicEditablePlaylistDetailHeader = _MusicEditablePlaylistDetailHeader;
// dist/src/parser/classes/MusicElementHeader.js
var _MusicElementHeader = class _MusicElementHeader extends YTNode {
constructor(data) {
super();
__publicField(this, "element");
this.element = Reflect.has(data, "elementRenderer") ? parser_exports.parseItem(data, Element) : null;
}
};
__name(_MusicElementHeader, "MusicElementHeader");
__publicField(_MusicElementHeader, "type", "MusicElementHeader");
var MusicElementHeader = _MusicElementHeader;
// dist/src/parser/classes/MusicHeader.js
var _MusicHeader = class _MusicHeader extends YTNode {
constructor(data) {
super();
__publicField(this, "header");
__publicField(this, "title");
if (Reflect.has(data, "header")) {
this.header = parser_exports.parseItem(data.header);
}
if (Reflect.has(data, "title")) {
this.title = new Text2(data.title);
}
}
};
__name(_MusicHeader, "MusicHeader");
__publicField(_MusicHeader, "type", "MusicHeader");
var MusicHeader = _MusicHeader;
// dist/src/parser/classes/MusicImmersiveHeader.js
var _MusicImmersiveHeader = class _MusicImmersiveHeader extends YTNode {
constructor(data) {
super();
__publicField(this, "title");
__publicField(this, "menu");
__publicField(this, "more_button");
__publicField(this, "play_button");
__publicField(this, "share_endpoint");
__publicField(this, "start_radio_button");
__publicField(this, "subscription_button");
__publicField(this, "description");
__publicField(this, "thumbnail");
this.title = new Text2(data.title);
this.menu = parser_exports.parseItem(data.menu, Menu);
this.more_button = parser_exports.parseItem(data.moreButton, ToggleButton);
this.play_button = parser_exports.parseItem(data.playButton, Button);
if ("shareEndpoint" in data)
this.share_endpoint = new NavigationEndpoint(data.shareEndpoint);
this.start_radio_button = parser_exports.parseItem(data.startRadioButton, Button);
this.subscription_button = parser_exports.parseItem(data.subscriptionButton, SubscribeButton);
this.description = new Text2(data.description);
this.thumbnail = parser_exports.parseItem(data.thumbnail, MusicThumbnail);
}
};
__name(_MusicImmersiveHeader, "MusicImmersiveHeader");
__publicField(_MusicImmersiveHeader, "type", "MusicImmersiveHeader");
var MusicImmersiveHeader = _MusicImmersiveHeader;
// dist/src/parser/classes/MusicLargeCardItemCarousel.js
var _ActionButton = class _ActionButton {
constructor(data) {
__publicField(this, "icon_name");
__publicField(this, "endpoint");
__publicField(this, "a11y_text");
__publicField(this, "style");
this.icon_name = data.iconName;
this.endpoint = new NavigationEndpoint(data.onTap);
this.a11y_text = data.a11yText;
this.style = data.style;
}
};
__name(_ActionButton, "ActionButton");
__publicField(_ActionButton, "type", "ActionButton");
var ActionButton = _ActionButton;
var _Panel2 = class _Panel2 {
constructor(data) {
__publicField(this, "image");
__publicField(this, "content_mode");
__publicField(this, "crop_options");
__publicField(this, "image_aspect_ratio");
__publicField(this, "caption");
__publicField(this, "action_buttons");
this.image = Thumbnail.fromResponse(data.image.image);
this.content_mode = data.image.contentMode;
this.crop_options = data.image.cropOptions;
this.image_aspect_ratio = data.imageAspectRatio;
this.caption = data.caption;
this.action_buttons = data.actionButtons.map((el) => new ActionButton(el));
}
};
__name(_Panel2, "Panel");
__publicField(_Panel2, "type", "Panel");
var Panel2 = _Panel2;
var _MusicLargeCardItemCarousel = class _MusicLargeCardItemCarousel extends YTNode {
constructor(data) {
super();
__publicField(this, "panels");
__publicField(this, "header");
this.header = data.shelf.header;
this.panels = data.shelf.panels.map((el) => new Panel2(el));
}
};
__name(_MusicLargeCardItemCarousel, "MusicLargeCardItemCarousel");
__publicField(_MusicLargeCardItemCarousel, "type", "MusicLargeCardItemCarousel");
var MusicLargeCardItemCarousel = _MusicLargeCardItemCarousel;
// dist/src/parser/classes/MusicPlaylistEditHeader.js
var _MusicPlaylistEditHeader = class _MusicPlaylistEditHeader extends YTNode {
constructor(data) {
super();
__publicField(this, "title");
__publicField(this, "edit_title");
__publicField(this, "edit_description");
__publicField(this, "privacy");
__publicField(this, "playlist_id");
__publicField(this, "endpoint");
__publicField(this, "privacy_dropdown");
this.title = new Text2(data.title);
this.edit_title = new Text2(data.editTitle);
this.edit_description = new Text2(data.editDescription);
this.privacy = data.privacy;
this.playlist_id = data.playlistId;
this.endpoint = new NavigationEndpoint(data.collaborationSettingsCommand);
this.privacy_dropdown = parser_exports.parseItem(data.privacyDropdown, Dropdown);
}
};
__name(_MusicPlaylistEditHeader, "MusicPlaylistEditHeader");
__publicField(_MusicPlaylistEditHeader, "type", "MusicPlaylistEditHeader");
var MusicPlaylistEditHeader = _MusicPlaylistEditHeader;
// dist/src/parser/classes/MusicPlaylistShelf.js
var _MusicPlaylistShelf = class _MusicPlaylistShelf extends YTNode {
constructor(data) {
super();
__publicField(this, "playlist_id");
__publicField(this, "contents");
__publicField(this, "collapsed_item_count");
__publicField(this, "continuation");
this.playlist_id = data.playlistId;
this.contents = parser_exports.parseArray(data.contents, [MusicResponsiveListItem, ContinuationItem]);
this.collapsed_item_count = data.collapsedItemCount;
this.continuation = data.continuations?.[0]?.nextContinuationData?.continuation || null;
}
};
__name(_MusicPlaylistShelf, "MusicPlaylistShelf");
__publicField(_MusicPlaylistShelf, "type", "MusicPlaylistShelf");
var MusicPlaylistShelf = _MusicPlaylistShelf;
// dist/src/parser/classes/PlaylistPanelVideo.js
var _PlaylistPanelVideo = class _PlaylistPanelVideo extends YTNode {
constructor(data) {
super();
__publicField(this, "title");
__publicField(this, "thumbnail");
__publicField(this, "endpoint");
__publicField(this, "selected");
__publicField(this, "video_id");
__publicField(this, "duration");
__publicField(this, "author");
__publicField(this, "album");
__publicField(this, "artists");
__publicField(this, "badges");
__publicField(this, "menu");
__publicField(this, "set_video_id");
this.title = new Text2(data.title);
this.thumbnail = Thumbnail.fromResponse(data.thumbnail);
this.endpoint = new NavigationEndpoint(data.navigationEndpoint);
this.selected = data.selected;
this.video_id = data.videoId;
this.duration = {
text: new Text2(data.lengthText).toString(),
seconds: timeToSeconds(new Text2(data.lengthText).toString())
};
const album = new Text2(data.longBylineText).runs?.find((run) => run.endpoint?.payload?.browseId?.startsWith("MPR"));
const artists = new Text2(data.longBylineText).runs?.filter((run) => run.endpoint?.payload?.browseId?.startsWith("UC"));
this.author = new Text2(data.shortBylineText).toString();
if (album) {
this.album = {
id: album.endpoint?.payload?.browseId,
name: album.text,
year: new Text2(data.longBylineText).runs?.slice(-1)[0].text,
endpoint: album.endpoint
};
}
if (artists) {
this.artists = artists.map((artist) => ({
name: artist.text,
channel_id: artist.endpoint?.payload?.browseId,
endpoint: artist.endpoint
}));
}
this.badges = parser_exports.parseArray(data.badges);
this.menu = parser_exports.parseItem(data.menu);
this.set_video_id = data.playlistSetVideoId;
}
};
__name(_PlaylistPanelVideo, "PlaylistPanelVideo");
__publicField(_PlaylistPanelVideo, "type", "PlaylistPanelVideo");
var PlaylistPanelVideo = _PlaylistPanelVideo;
// dist/src/parser/classes/PlaylistPanelVideoWrapper.js
var _PlaylistPanelVideoWrapper = class _PlaylistPanelVideoWrapper extends YTNode {
constructor(data) {
super();
__publicField(this, "primary");
__publicField(this, "counterpart");
this.primary = parser_exports.parseItem(data.primaryRenderer, PlaylistPanelVideo);
if (Reflect.has(data, "counterpart")) {
this.counterpart = observe(data.counterpart.map((item) => parser_exports.parseItem(item.counterpartRenderer, PlaylistPanelVideo)) || []);
}
}
};
__name(_PlaylistPanelVideoWrapper, "PlaylistPanelVideoWrapper");
__publicField(_PlaylistPanelVideoWrapper, "type", "PlaylistPanelVideoWrapper");
var PlaylistPanelVideoWrapper = _PlaylistPanelVideoWrapper;
// dist/src/parser/classes/PlaylistPanel.js
var _PlaylistPanel = class _PlaylistPanel extends YTNode {
constructor(data) {
super();
__publicField(this, "title");
__publicField(this, "title_text");
__publicField(this, "contents");
__publicField(this, "playlist_id");
__publicField(this, "is_infinite");
__publicField(this, "continuation");
__publicField(this, "is_editable");
__publicField(this, "preview_description");
__publicField(this, "num_items_to_show");
this.title = data.title;
this.title_text = new Text2(data.titleText);
this.contents = parser_exports.parseArray(data.contents, [PlaylistPanelVideoWrapper, PlaylistPanelVideo, AutomixPreviewVideo]);
this.playlist_id = data.playlistId;
this.is_infinite = data.isInfinite;
this.continuation = data.continuations?.[0]?.nextRadioContinuationData?.continuation || data.continuations?.[0]?.nextContinuationData?.continuation;
this.is_editable = data.isEditable;
this.preview_description = data.previewDescription;
this.num_items_to_show = data.numItemsToShow;
}
};
__name(_PlaylistPanel, "PlaylistPanel");
__publicField(_PlaylistPanel, "type", "PlaylistPanel");
var PlaylistPanel = _PlaylistPanel;
// dist/src/parser/classes/MusicQueue.js
var _MusicQueue = class _MusicQueue extends YTNode {
constructor(data) {
super();
__publicField(this, "content");
this.content = parser_exports.parseItem(data.content, PlaylistPanel);
}
};
__name(_MusicQueue, "MusicQueue");
__publicField(_MusicQueue, "type", "MusicQueue");
var MusicQueue = _MusicQueue;
// dist/src/parser/classes/MusicResponsiveHeader.js
var _MusicResponsiveHeader = class _MusicResponsiveHeader extends YTNode {
constructor(data) {
super();
__publicField(this, "thumbnail");
__publicField(this, "buttons");
__publicField(this, "title");
__publicField(this, "subtitle");
__publicField(this, "strapline_text_one");
__publicField(this, "strapline_thumbnail");
__publicField(this, "second_subtitle");
__publicField(this, "subtitle_badge");
__publicField(this, "description");
this.thumbnail = parser_exports.parseItem(data.thumbnail, MusicThumbnail);
this.buttons = parser_exports.parseArray(data.buttons, [DownloadButton, ToggleButton, MusicPlayButton, Button, Menu]);
this.title = new Text2(data.title);
this.subtitle = new Text2(data.subtitle);
this.strapline_text_one = new Text2(data.straplineTextOne);
this.strapline_thumbnail = parser_exports.parseItem(data.straplineThumbnail, MusicThumbnail);
this.second_subtitle = new Text2(data.secondSubtitle);
if (Reflect.has(data, "subtitleBadge")) {
this.subtitle_badge = parser_exports.parseArray(data.subtitleBadge, MusicInlineBadge);
}
if (Reflect.has(data, "description")) {
this.description = parser_exports.parseItem(data.description, MusicDescriptionShelf);
}
}
};
__name(_MusicResponsiveHeader, "MusicResponsiveHeader");
__publicField(_MusicResponsiveHeader, "type", "MusicResponsiveHeader");
var MusicResponsiveHeader = _MusicResponsiveHeader;
// dist/src/parser/classes/MusicShelf.js
var _MusicShelf = class _MusicShelf extends YTNode {
constructor(data) {
super();
__publicField(this, "title");
__publicField(this, "contents");
__publicField(this, "endpoint");
__publicField(this, "continuation");
__publicField(this, "bottom_text");
__publicField(this, "bottom_button");
__publicField(this, "subheaders");
this.title = new Text2(data.title);
this.contents = parser_exports.parseArray(data.contents, MusicResponsiveListItem);
if (Reflect.has(data, "bottomEndpoint")) {
this.endpoint = new NavigationEndpoint(data.bottomEndpoint);
}
if (Reflect.has(data, "continuations")) {
this.continuation = data.continuations?.[0].nextContinuationData?.continuation || data.continuations?.[0].reloadContinuationData?.continuation;
}
if (Reflect.has(data, "bottomText")) {
this.bottom_text = new Text2(data.bottomText);
}
if (Reflect.has(data, "bottomButton")) {
this.bottom_button = parser_exports.parseItem(data.bottomButton, Button);
}
if (Reflect.has(data, "subheaders")) {
this.subheaders = parser_exports.parseArray(data.subheaders);
}
}
};
__name(_MusicShelf, "MusicShelf");
__publicField(_MusicShelf, "type", "MusicShelf");
var MusicShelf = _MusicShelf;
// dist/src/parser/classes/MusicSideAlignedItem.js
var _MusicSideAlignedItem = class _MusicSideAlignedItem extends YTNode {
constructor(data) {
super();
__publicField(this, "start_items");
__publicField(this, "end_items");
if (Reflect.has(data, "startItems")) {
this.start_items = parser_exports.parseArray(data.startItems);
}
if (Reflect.has(data, "endItems")) {
this.end_items = parser_exports.parseArray(data.endItems);
}
}
};
__name(_MusicSideAlignedItem, "MusicSideAlignedItem");
__publicField(_MusicSideAlignedItem, "type", "MusicSideAlignedItem");
var MusicSideAlignedItem = _MusicSideAlignedItem;
// dist/src/parser/classes/MusicSortFilterButton.js
var _MusicSortFilterButton = class _MusicSortFilterButton extends YTNode {
constructor(data) {
super();
__publicField(this, "title");
__publicField(this, "icon_type");
__publicField(this, "menu");
this.title = new Text2(data.title).toString();
if (Reflect.has(data, "icon")) {
this.icon_type = data.icon.iconType;
}
this.menu = parser_exports.parseItem(data.menu, MusicMultiSelectMenu);
}
};
__name(_MusicSortFilterButton, "MusicSortFilterButton");
__publicField(_MusicSortFilterButton, "type", "MusicSortFilterButton");
var MusicSortFilterButton = _MusicSortFilterButton;
// dist/src/parser/classes/MusicTastebuilderShelfThumbnail.js
var _MusicTastebuilderShelfThumbnail = class _MusicTastebuilderShelfThumbnail extends YTNode {
constructor(data) {
super();
__publicField(this, "thumbnail");
this.thumbnail = Thumbnail.fromResponse(data.thumbnail);
}
};
__name(_MusicTastebuilderShelfThumbnail, "MusicTastebuilderShelfThumbnail");
__publicField(_MusicTastebuilderShelfThumbnail, "type", "MusicTastebuilderShelfThumbnail");
var MusicTastebuilderShelfThumbnail = _MusicTastebuilderShelfThumbnail;
// dist/src/parser/classes/MusicTastebuilderShelf.js
var _MusicTasteBuilderShelf = class _MusicTasteBuilderShelf extends YTNode {
constructor(data) {
super();
__publicField(this, "thumbnail");
__publicField(this, "primary_text");
__publicField(this, "secondary_text");
__publicField(this, "action_button");
__publicField(this, "is_visible");
this.thumbnail = parser_exports.parseItem(data.thumbnail, MusicTastebuilderShelfThumbnail);
this.primary_text = new Text2(data.primaryText);
this.secondary_text = new Text2(data.secondaryText);
this.action_button = parser_exports.parseItem(data.actionButton, Button);
this.is_visible = data.isVisible;
}
};
__name(_MusicTasteBuilderShelf, "MusicTasteBuilderShelf");
__publicField(_MusicTasteBuilderShelf, "type", "MusicTasteBuilderShelf");
var MusicTasteBuilderShelf = _MusicTasteBuilderShelf;
// dist/src/parser/classes/MusicVisualHeader.js
var _MusicVisualHeader = class _MusicVisualHeader extends YTNode {
constructor(data) {
super();
__publicField(this, "title");
__publicField(this, "thumbnail");
__publicField(this, "menu");
__publicField(this, "foreground_thumbnail");
this.title = new Text2(data.title);
this.thumbnail = data.thumbnail ? Thumbnail.fromResponse(data.thumbnail.musicThumbnailRenderer?.thumbnail) : [];
this.menu = parser_exports.parseItem(data.menu, Menu);
this.foreground_thumbnail = data.foregroundThumbnail ? Thumbnail.fromResponse(data.foregroundThumbnail.musicThumbnailRenderer?.thumbnail) : [];
}
};
__name(_MusicVisualHeader, "MusicVisualHeader");
__publicField(_MusicVisualHeader, "type", "MusicVisualHeader");
var MusicVisualHeader = _MusicVisualHeader;
// dist/src/parser/classes/mweb/MobileTopbar.js
var _MobileTopbar = class _MobileTopbar extends YTNode {
constructor(data) {
super();
__publicField(this, "placeholder_text");
__publicField(this, "buttons");
__publicField(this, "logo_type");
this.placeholder_text = new Text2(data.placeholderText);
this.buttons = parser_exports.parseArray(data.buttons);
if (Reflect.has(data, "logo") && Reflect.has(data.logo, "iconType"))
this.logo_type = data.logo.iconType;
}
};
__name(_MobileTopbar, "MobileTopbar");
__publicField(_MobileTopbar, "type", "MobileTopbar");
var MobileTopbar = _MobileTopbar;
// dist/src/parser/classes/mweb/MultiPageMenuSection.js
var _MultiPageMenuSection = class _MultiPageMenuSection extends YTNode {
constructor(data) {
super();
__publicField(this, "items");
this.items = parser_exports.parseArray(data.items);
}
};
__name(_MultiPageMenuSection, "MultiPageMenuSection");
__publicField(_MultiPageMenuSection, "type", "MultiPageMenuSection");
var MultiPageMenuSection = _MultiPageMenuSection;
// dist/src/parser/classes/mweb/PivotBar.js
var _PivotBar = class _PivotBar extends YTNode {
constructor(data) {
super();
__publicField(this, "items");
this.items = parser_exports.parseArray(data.items);
}
};
__name(_PivotBar, "PivotBar");
__publicField(_PivotBar, "type", "PivotBar");
var PivotBar = _PivotBar;
// dist/src/parser/classes/mweb/PivotBarItem.js
var _PivotBarItem = class _PivotBarItem extends YTNode {
constructor(data) {
super();
__publicField(this, "pivot_identifier");
__publicField(this, "endpoint");
__publicField(this, "title");
__publicField(this, "accessibility_label");
__publicField(this, "icon_type");
__publicField(this, "accessibility");
this.pivot_identifier = data.pivotIdentifier;
this.endpoint = new NavigationEndpoint(data.navigationEndpoint);
this.title = new Text(data.title);
if ("accessibility" in data && "accessibilityData" in data.accessibility) {
this.accessibility = {
accessibility_data: new AccessibilityData(data.accessibility.accessibilityData)
};
}
if (Reflect.has(data, "icon") && Reflect.has(data.icon, "iconType"))
this.icon_type = data.icon.iconType;
}
get label() {
return this.accessibility?.accessibility_data?.label;
}
};
__name(_PivotBarItem, "PivotBarItem");
__publicField(_PivotBarItem, "type", "PivotBarItem");
var PivotBarItem = _PivotBarItem;
// dist/src/parser/classes/mweb/TopbarMenuButton.js
var _TopbarMenuButton = class _TopbarMenuButton extends YTNode {
constructor(data) {
super();
__publicField(this, "icon_type");
__publicField(this, "menu_renderer");
__publicField(this, "target_id");
if (Reflect.has(data, "icon") && Reflect.has(data.icon, "iconType"))
this.icon_type = data.icon.iconType;
this.menu_renderer = parser_exports.parseItem(data.menuRenderer);
this.target_id = data.targetId;
}
};
__name(_TopbarMenuButton, "TopbarMenuButton");
__publicField(_TopbarMenuButton, "type", "TopbarMenuButton");
var TopbarMenuButton = _TopbarMenuButton;
// dist/src/parser/classes/NotificationAction.js
var _NotificationAction = class _NotificationAction extends YTNode {
constructor(data) {
super();
__publicField(this, "response_text");
this.response_text = new Text2(data.responseText);
}
};
__name(_NotificationAction, "NotificationAction");
__publicField(_NotificationAction, "type", "NotificationAction");
var NotificationAction = _NotificationAction;
// dist/src/parser/classes/OpenOnePickAddVideoModalCommand.js
var _OpenOnePickAddVideoModalCommand = class _OpenOnePickAddVideoModalCommand extends YTNode {
constructor(data) {
super();
__publicField(this, "list_id");
__publicField(this, "modal_title");
__publicField(this, "select_button_label");
this.list_id = data.listId;
this.modal_title = data.modalTitle;
this.select_button_label = data.selectButtonLabel;
}
};
__name(_OpenOnePickAddVideoModalCommand, "OpenOnePickAddVideoModalCommand");
__publicField(_OpenOnePickAddVideoModalCommand, "type", "OpenOnePickAddVideoModalCommand");
var OpenOnePickAddVideoModalCommand = _OpenOnePickAddVideoModalCommand;
// dist/src/parser/classes/PageHeaderView.js
var _PageHeaderView = class _PageHeaderView extends YTNode {
constructor(data) {
super();
__publicField(this, "title");
__publicField(this, "image");
__publicField(this, "animated_image");
__publicField(this, "hero_image");
__publicField(this, "metadata");
__publicField(this, "actions");
__publicField(this, "description");
__publicField(this, "attributation");
__publicField(this, "banner");
this.title = parser_exports.parseItem(data.title, DynamicTextView);
this.image = parser_exports.parseItem(data.image, [ContentPreviewImageView, DecoratedAvatarView]);
this.animated_image = parser_exports.parseItem(data.animatedImage, ContentPreviewImageView);
this.hero_image = parser_exports.parseItem(data.heroImage, ContentPreviewImageView);
this.metadata = parser_exports.parseItem(data.metadata, ContentMetadataView);
this.actions = parser_exports.parseItem(data.actions, FlexibleActionsView);
this.description = parser_exports.parseItem(data.description, DescriptionPreviewView);
this.attributation = parser_exports.parseItem(data.attributation, AttributionView);
this.banner = parser_exports.parseItem(data.banner, ImageBannerView);
}
};
__name(_PageHeaderView, "PageHeaderView");
__publicField(_PageHeaderView, "type", "PageHeaderView");
var PageHeaderView = _PageHeaderView;
// dist/src/parser/classes/PageHeader.js
var _PageHeader = class _PageHeader extends YTNode {
constructor(data) {
super();
__publicField(this, "page_title");
__publicField(this, "content");
this.page_title = data.pageTitle;
this.content = parser_exports.parseItem(data.content, PageHeaderView);
}
};
__name(_PageHeader, "PageHeader");
__publicField(_PageHeader, "type", "PageHeader");
var PageHeader = _PageHeader;
// dist/src/parser/classes/PageIntroduction.js
var _PageIntroduction = class _PageIntroduction extends YTNode {
constructor(data) {
super();
__publicField(this, "header_text");
__publicField(this, "body_text");
__publicField(this, "page_title");
__publicField(this, "header_icon_type");
this.header_text = new Text2(data.headerText).toString();
this.body_text = new Text2(data.bodyText).toString();
this.page_title = new Text2(data.pageTitle).toString();
this.header_icon_type = data.headerIcon.iconType;
}
};
__name(_PageIntroduction, "PageIntroduction");
__publicField(_PageIntroduction, "type", "PageIntroduction");
var PageIntroduction = _PageIntroduction;
// dist/src/parser/classes/PivotButton.js
var _PivotButton = class _PivotButton extends YTNode {
constructor(data) {
super();
__publicField(this, "thumbnail");
__publicField(this, "endpoint");
__publicField(this, "content_description");
__publicField(this, "target_id");
__publicField(this, "sound_attribution_title");
__publicField(this, "waveform_animation_style");
__publicField(this, "background_animation_style");
this.thumbnail = Thumbnail.fromResponse(data.thumbnail);
this.endpoint = new NavigationEndpoint(data.onClickCommand);
this.content_description = new Text2(data.contentDescription);
this.target_id = data.targetId;
this.sound_attribution_title = new Text2(data.soundAttributionTitle);
this.waveform_animation_style = data.waveformAnimationStyle;
this.background_animation_style = data.backgroundAnimationStyle;
}
};
__name(_PivotButton, "PivotButton");
__publicField(_PivotButton, "type", "PivotButton");
var PivotButton = _PivotButton;
// dist/src/parser/classes/PlayerAnnotationsExpanded.js
var _PlayerAnnotationsExpanded = class _PlayerAnnotationsExpanded extends YTNode {
constructor(data) {
super();
__publicField(this, "featured_channel");
__publicField(this, "allow_swipe_dismiss");
__publicField(this, "annotation_id");
if (Reflect.has(data, "featuredChannel")) {
this.featured_channel = {
start_time_ms: data.featuredChannel.startTimeMs,
end_time_ms: data.featuredChannel.endTimeMs,
watermark: Thumbnail.fromResponse(data.featuredChannel.watermark),
channel_name: data.featuredChannel.channelName,
endpoint: new NavigationEndpoint(data.featuredChannel.navigationEndpoint),
subscribe_button: parser_exports.parseItem(data.featuredChannel.subscribeButton)
};
}
this.allow_swipe_dismiss = data.allowSwipeDismiss;
this.annotation_id = data.annotationId;
}
};
__name(_PlayerAnnotationsExpanded, "PlayerAnnotationsExpanded");
__publicField(_PlayerAnnotationsExpanded, "type", "PlayerAnnotationsExpanded");
var PlayerAnnotationsExpanded = _PlayerAnnotationsExpanded;
// dist/src/parser/classes/PlayerCaptchaView.js
var _PlayerCaptchaView = class _PlayerCaptchaView extends YTNode {
constructor(data) {
super();
__publicField(this, "captcha_loading_message");
__publicField(this, "challenge_reason");
__publicField(this, "captcha_successful_message");
__publicField(this, "captcha_cookie_set_failure_message");
__publicField(this, "captcha_failed_message");
if ("captchaLoadingMessage" in data) {
this.captcha_loading_message = Text2.fromAttributed(data.captchaLoadingMessage);
}
if ("challengeReason" in data) {
this.challenge_reason = Text2.fromAttributed(data.challengeReason);
}
if ("captchaSuccessfulMessage" in data) {
this.captcha_successful_message = Text2.fromAttributed(data.captchaSuccessfulMessage);
}
if ("captchaCookieSetFailureMessage" in data) {
this.captcha_cookie_set_failure_message = Text2.fromAttributed(data.captchaCookieSetFailureMessage);
}
if ("captchaFailedMessage" in data) {
this.captcha_failed_message = Text2.fromAttributed(data.captchaFailedMessage);
}
}
};
__name(_PlayerCaptchaView, "PlayerCaptchaView");
__publicField(_PlayerCaptchaView, "type", "PlayerCaptchaView");
var PlayerCaptchaView = _PlayerCaptchaView;
// dist/src/parser/classes/PlayerCaptionsTracklist.js
var _PlayerCaptionsTracklist = class _PlayerCaptionsTracklist extends YTNode {
constructor(data) {
super();
__publicField(this, "caption_tracks");
__publicField(this, "audio_tracks");
__publicField(this, "default_audio_track_index");
__publicField(this, "translation_languages");
if (Reflect.has(data, "captionTracks")) {
this.caption_tracks = data.captionTracks.map((ct) => ({
base_url: ct.baseUrl,
name: new Text2(ct.name),
vss_id: ct.vssId,
language_code: ct.languageCode,
kind: ct.kind,
is_translatable: ct.isTranslatable
}));
}
if (Reflect.has(data, "audioTracks")) {
this.audio_tracks = data.audioTracks.map((at) => ({
audio_track_id: at.audioTrackId,
captions_initial_state: at.captionsInitialState,
default_caption_track_index: at.defaultCaptionTrackIndex,
has_default_track: at.hasDefaultTrack,
visibility: at.visibility,
caption_track_indices: at.captionTrackIndices
}));
}
if (Reflect.has(data, "defaultAudioTrackIndex")) {
this.default_audio_track_index = data.defaultAudioTrackIndex;
}
if (Reflect.has(data, "translationLanguages")) {
this.translation_languages = data.translationLanguages.map((tl) => ({
language_code: tl.languageCode,
language_name: new Text2(tl.languageName)
}));
}
}
};
__name(_PlayerCaptionsTracklist, "PlayerCaptionsTracklist");
__publicField(_PlayerCaptionsTracklist, "type", "PlayerCaptionsTracklist");
var PlayerCaptionsTracklist = _PlayerCaptionsTracklist;
// dist/src/parser/classes/PlayerOverflow.js
var _PlayerOverflow = class _PlayerOverflow extends YTNode {
constructor(data) {
super();
__publicField(this, "endpoint");
__publicField(this, "enable_listen_first");
this.endpoint = new NavigationEndpoint(data.endpoint);
this.enable_listen_first = data.enableListenFirst;
}
};
__name(_PlayerOverflow, "PlayerOverflow");
__publicField(_PlayerOverflow, "type", "PlayerOverflow");
var PlayerOverflow = _PlayerOverflow;
// dist/src/parser/classes/PlayerControlsOverlay.js
var _PlayerControlsOverlay = class _PlayerControlsOverlay extends YTNode {
constructor(data) {
super();
__publicField(this, "overflow");
this.overflow = parser_exports.parseItem(data.overflow, PlayerOverflow);
}
};
__name(_PlayerControlsOverlay, "PlayerControlsOverlay");
__publicField(_PlayerControlsOverlay, "type", "PlayerControlsOverlay");
var PlayerControlsOverlay = _PlayerControlsOverlay;
// dist/src/parser/classes/PlayerErrorMessage.js
var _PlayerErrorMessage = class _PlayerErrorMessage extends YTNode {
constructor(data) {
super();
__publicField(this, "subreason");
__publicField(this, "reason");
__publicField(this, "proceed_button");
__publicField(this, "thumbnails");
__publicField(this, "icon_type");
this.subreason = new Text2(data.subreason);
this.reason = new Text2(data.reason);
this.proceed_button = parser_exports.parseItem(data.proceedButton, Button);
this.thumbnails = Thumbnail.fromResponse(data.thumbnail);
if (Reflect.has(data, "icon")) {
this.icon_type = data.icon.iconType;
}
}
};
__name(_PlayerErrorMessage, "PlayerErrorMessage");
__publicField(_PlayerErrorMessage, "type", "PlayerErrorMessage");
var PlayerErrorMessage = _PlayerErrorMessage;
// dist/src/parser/classes/PlayerLegacyDesktopYpcOffer.js
var _PlayerLegacyDesktopYpcOffer = class _PlayerLegacyDesktopYpcOffer extends YTNode {
constructor(data) {
super();
__publicField(this, "title");
__publicField(this, "thumbnail");
__publicField(this, "offer_description");
__publicField(this, "offer_id");
this.title = data.itemTitle;
this.thumbnail = data.itemThumbnail;
this.offer_description = data.offerDescription;
this.offer_id = data.offerId;
}
};
__name(_PlayerLegacyDesktopYpcOffer, "PlayerLegacyDesktopYpcOffer");
__publicField(_PlayerLegacyDesktopYpcOffer, "type", "PlayerLegacyDesktopYpcOffer");
var PlayerLegacyDesktopYpcOffer = _PlayerLegacyDesktopYpcOffer;
// dist/src/parser/classes/YpcTrailer.js
var _YpcTrailer = class _YpcTrailer extends YTNode {
constructor(data) {
super();
__publicField(this, "video_message");
__publicField(this, "player_response");
this.video_message = data.fullVideoMessage;
this.player_response = data.unserializedPlayerResponse;
}
};
__name(_YpcTrailer, "YpcTrailer");
__publicField(_YpcTrailer, "type", "YpcTrailer");
var YpcTrailer = _YpcTrailer;
// dist/src/parser/classes/PlayerLegacyDesktopYpcTrailer.js
var _PlayerLegacyDesktopYpcTrailer = class _PlayerLegacyDesktopYpcTrailer extends YTNode {
constructor(data) {
super();
__publicField(this, "video_id");
__publicField(this, "title");
__publicField(this, "thumbnail");
__publicField(this, "offer_headline");
__publicField(this, "offer_description");
__publicField(this, "offer_id");
__publicField(this, "offer_button_text");
__publicField(this, "video_message");
__publicField(this, "trailer");
this.video_id = data.trailerVideoId;
this.title = data.itemTitle;
this.thumbnail = data.itemThumbnail;
this.offer_headline = data.offerHeadline;
this.offer_description = data.offerDescription;
this.offer_id = data.offerId;
this.offer_button_text = data.offerButtonText;
this.video_message = data.fullVideoMessage;
this.trailer = parser_exports.parseItem(data.ypcTrailer, YpcTrailer);
}
};
__name(_PlayerLegacyDesktopYpcTrailer, "PlayerLegacyDesktopYpcTrailer");
__publicField(_PlayerLegacyDesktopYpcTrailer, "type", "PlayerLegacyDesktopYpcTrailer");
var PlayerLegacyDesktopYpcTrailer = _PlayerLegacyDesktopYpcTrailer;
// dist/src/parser/classes/PlayerLiveStoryboardSpec.js
var _PlayerLiveStoryboardSpec = class _PlayerLiveStoryboardSpec extends YTNode {
constructor(data) {
super();
__publicField(this, "board");
const [template_url, thumbnail_width, thumbnail_height, columns, rows] = data.spec.split("#");
this.board = {
type: "live",
template_url,
thumbnail_width: parseInt(thumbnail_width, 10),
thumbnail_height: parseInt(thumbnail_height, 10),
columns: parseInt(columns, 10),
rows: parseInt(rows, 10)
};
}
};
__name(_PlayerLiveStoryboardSpec, "PlayerLiveStoryboardSpec");
__publicField(_PlayerLiveStoryboardSpec, "type", "PlayerLiveStoryboardSpec");
var PlayerLiveStoryboardSpec = _PlayerLiveStoryboardSpec;
// dist/src/parser/classes/PlayerMicroformat.js
var _PlayerMicroformat = class _PlayerMicroformat extends YTNode {
constructor(data) {
super();
__publicField(this, "title");
__publicField(this, "description");
__publicField(this, "thumbnails");
__publicField(this, "embed");
__publicField(this, "length_seconds");
__publicField(this, "channel");
__publicField(this, "is_family_safe");
__publicField(this, "is_unlisted");
__publicField(this, "has_ypc_metadata");
__publicField(this, "view_count");
__publicField(this, "category");
__publicField(this, "publish_date");
__publicField(this, "upload_date");
__publicField(this, "available_countries");
__publicField(this, "start_timestamp");
__publicField(this, "end_timestamp");
this.title = new Text2(data.title);
this.description = new Text2(data.description);
this.thumbnails = Thumbnail.fromResponse(data.thumbnail);
if (Reflect.has(data, "embed")) {
this.embed = {
iframe_url: data.embed.iframeUrl,
flash_url: data.embed.flashUrl,
flash_secure_url: data.embed.flashSecureUrl,
width: data.embed.width,
height: data.embed.height
};
}
this.length_seconds = parseInt(data.lengthSeconds);
this.channel = {
id: data.externalChannelId,
name: data.ownerChannelName,
url: data.ownerProfileUrl
};
this.is_family_safe = !!data.isFamilySafe;
this.is_unlisted = !!data.isUnlisted;
this.has_ypc_metadata = !!data.hasYpcMetadata;
this.view_count = parseInt(data.viewCount);
this.category = data.category;
this.publish_date = data.publishDate;
this.upload_date = data.uploadDate;
this.available_countries = data.availableCountries;
this.start_timestamp = data.liveBroadcastDetails?.startTimestamp ? new Date(data.liveBroadcastDetails.startTimestamp) : null;
this.end_timestamp = data.liveBroadcastDetails?.endTimestamp ? new Date(data.liveBroadcastDetails.endTimestamp) : null;
}
};
__name(_PlayerMicroformat, "PlayerMicroformat");
__publicField(_PlayerMicroformat, "type", "PlayerMicroformat");
var PlayerMicroformat = _PlayerMicroformat;
// dist/src/parser/classes/PlayerOverlayAutoplay.js
var _PlayerOverlayAutoplay = class _PlayerOverlayAutoplay extends YTNode {
constructor(data) {
super();
__publicField(this, "title");
__publicField(this, "video_id");
__publicField(this, "video_title");
__publicField(this, "short_view_count");
// @TODO: Find out what these are.
__publicField(this, "prefer_immediate_redirect");
__publicField(this, "count_down_secs_for_fullscreen");
__publicField(this, "published");
__publicField(this, "background");
__publicField(this, "thumbnail_overlays");
__publicField(this, "author");
__publicField(this, "cancel_button");
__publicField(this, "next_button");
__publicField(this, "close_button");
this.title = new Text2(data.title);
this.video_id = data.videoId;
this.video_title = new Text2(data.videoTitle);
this.short_view_count = new Text2(data.shortViewCountText);
this.prefer_immediate_redirect = data.preferImmediateRedirect;
this.count_down_secs_for_fullscreen = data.countDownSecsForFullscreen;
this.published = new Text2(data.publishedTimeText);
this.background = Thumbnail.fromResponse(data.background);
this.thumbnail_overlays = parser_exports.parseArray(data.thumbnailOverlays);
this.author = new Author(data.byline);
this.cancel_button = parser_exports.parseItem(data.cancelButton, Button);
this.next_button = parser_exports.parseItem(data.nextButton, Button);
this.close_button = parser_exports.parseItem(data.closeButton, Button);
}
};
__name(_PlayerOverlayAutoplay, "PlayerOverlayAutoplay");
__publicField(_PlayerOverlayAutoplay, "type", "PlayerOverlayAutoplay");
var PlayerOverlayAutoplay = _PlayerOverlayAutoplay;
// dist/src/parser/classes/PlayerOverlayVideoDetails.js
var _PlayerOverlayVideoDetails = class _PlayerOverlayVideoDetails extends YTNode {
constructor(data) {
super();
__publicField(this, "title");
__publicField(this, "subtitle");
this.title = new Text2(data.title);
this.subtitle = new Text2(data.subtitle);
}
};
__name(_PlayerOverlayVideoDetails, "PlayerOverlayVideoDetails");
__publicField(_PlayerOverlayVideoDetails, "type", "PlayerOverlayVideoDetails");
var PlayerOverlayVideoDetails = _PlayerOverlayVideoDetails;
// dist/src/parser/classes/WatchNextEndScreen.js
var _WatchNextEndScreen = class _WatchNextEndScreen extends YTNode {
constructor(data) {
super();
__publicField(this, "results");
__publicField(this, "title");
this.results = parser_exports.parseArray(data.results, [EndScreenVideo, EndScreenPlaylist]);
this.title = new Text2(data.title).toString();
}
};
__name(_WatchNextEndScreen, "WatchNextEndScreen");
__publicField(_WatchNextEndScreen, "type", "WatchNextEndScreen");
var WatchNextEndScreen = _WatchNextEndScreen;
// dist/src/parser/classes/PlayerOverlay.js
var _PlayerOverlay = class _PlayerOverlay extends YTNode {
constructor(data) {
super();
__publicField(this, "end_screen");
__publicField(this, "autoplay");
__publicField(this, "share_button");
__publicField(this, "add_to_menu");
__publicField(this, "fullscreen_engagement");
__publicField(this, "actions");
__publicField(this, "browser_media_session");
__publicField(this, "decorated_player_bar");
__publicField(this, "video_details");
this.end_screen = parser_exports.parseItem(data.endScreen, WatchNextEndScreen);
this.autoplay = parser_exports.parseItem(data.autoplay, PlayerOverlayAutoplay);
this.share_button = parser_exports.parseItem(data.shareButton, Button);
this.add_to_menu = parser_exports.parseItem(data.addToMenu, Menu);
this.fullscreen_engagement = parser_exports.parseItem(data.fullscreenEngagement);
this.actions = parser_exports.parseArray(data.actions);
this.browser_media_session = parser_exports.parseItem(data.browserMediaSession);
this.decorated_player_bar = parser_exports.parseItem(data.decoratedPlayerBarRenderer, DecoratedPlayerBar);
this.video_details = parser_exports.parseItem(data.videoDetails, PlayerOverlayVideoDetails);
}
};
__name(_PlayerOverlay, "PlayerOverlay");
__publicField(_PlayerOverlay, "type", "PlayerOverlay");
var PlayerOverlay = _PlayerOverlay;
// dist/src/parser/classes/PlaylistHeader.js
var _PlaylistHeader = class _PlaylistHeader extends YTNode {
constructor(data) {
super();
__publicField(this, "id");
__publicField(this, "title");
__publicField(this, "subtitle");
__publicField(this, "stats");
__publicField(this, "brief_stats");
__publicField(this, "author");
__publicField(this, "description");
__publicField(this, "num_videos");
__publicField(this, "view_count");
__publicField(this, "can_share");
__publicField(this, "can_delete");
__publicField(this, "is_editable");
__publicField(this, "privacy");
__publicField(this, "save_button");
__publicField(this, "shuffle_play_button");
__publicField(this, "menu");
__publicField(this, "banner");
this.id = data.playlistId;
this.title = new Text2(data.title);
this.subtitle = data.subtitle ? new Text2(data.subtitle) : null;
this.stats = data.stats.map((stat) => new Text2(stat));
this.brief_stats = data.briefStats.map((stat) => new Text2(stat));
this.author = data.ownerText || data.ownerEndpoint ? new Author({ ...data.ownerText, navigationEndpoint: data.ownerEndpoint }, data.ownerBadges, null) : null;
this.description = new Text2(data.descriptionText);
this.num_videos = new Text2(data.numVideosText);
this.view_count = new Text2(data.viewCountText);
this.can_share = data.shareData.canShare;
this.can_delete = data.editableDetails.canDelete;
this.is_editable = data.isEditable;
this.privacy = data.privacy;
this.save_button = parser_exports.parseItem(data.saveButton);
this.shuffle_play_button = parser_exports.parseItem(data.shufflePlayButton);
this.menu = parser_exports.parseItem(data.moreActionsMenu);
this.banner = parser_exports.parseItem(data.playlistHeaderBanner);
}
};
__name(_PlaylistHeader, "PlaylistHeader");
__publicField(_PlaylistHeader, "type", "PlaylistHeader");
var PlaylistHeader = _PlaylistHeader;
// dist/src/parser/classes/PlaylistInfoCardContent.js
var _PlaylistInfoCardContent = class _PlaylistInfoCardContent extends YTNode {
constructor(data) {
super();
__publicField(this, "title");
__publicField(this, "thumbnails");
__publicField(this, "video_count");
__publicField(this, "channel_name");
__publicField(this, "endpoint");
this.title = new Text2(data.playlistTitle);
this.thumbnails = Thumbnail.fromResponse(data.thumbnail);
this.video_count = new Text2(data.playlistVideoCount);
this.channel_name = new Text2(data.channelName);
this.endpoint = new NavigationEndpoint(data.action);
}
};
__name(_PlaylistInfoCardContent, "PlaylistInfoCardContent");
__publicField(_PlaylistInfoCardContent, "type", "PlaylistInfoCardContent");
var PlaylistInfoCardContent = _PlaylistInfoCardContent;
// dist/src/parser/classes/PlaylistMetadata.js
var _PlaylistMetadata = class _PlaylistMetadata extends YTNode {
constructor(data) {
super();
__publicField(this, "title");
__publicField(this, "description");
this.title = data.title;
this.description = data.description || null;
}
};
__name(_PlaylistMetadata, "PlaylistMetadata");
__publicField(_PlaylistMetadata, "type", "PlaylistMetadata");
var PlaylistMetadata = _PlaylistMetadata;
// dist/src/parser/classes/PlaylistSidebar.js
var _PlaylistSidebar = class _PlaylistSidebar extends YTNode {
constructor(data) {
super();
__publicField(this, "items");
this.items = parser_exports.parseArray(data.items);
}
// XXX: alias for consistency
get contents() {
return this.items;
}
};
__name(_PlaylistSidebar, "PlaylistSidebar");
__publicField(_PlaylistSidebar, "type", "PlaylistSidebar");
var PlaylistSidebar = _PlaylistSidebar;
// dist/src/parser/classes/PlaylistSidebarPrimaryInfo.js
var _PlaylistSidebarPrimaryInfo = class _PlaylistSidebarPrimaryInfo extends YTNode {
constructor(data) {
super();
__publicField(this, "stats");
__publicField(this, "thumbnail_renderer");
__publicField(this, "title");
__publicField(this, "menu");
__publicField(this, "endpoint");
__publicField(this, "description");
this.stats = data.stats.map((stat) => new Text2(stat));
this.thumbnail_renderer = parser_exports.parseItem(data.thumbnailRenderer);
this.title = new Text2(data.title);
this.menu = parser_exports.parseItem(data.menu);
this.endpoint = new NavigationEndpoint(data.navigationEndpoint);
this.description = new Text2(data.description);
}
};
__name(_PlaylistSidebarPrimaryInfo, "PlaylistSidebarPrimaryInfo");
__publicField(_PlaylistSidebarPrimaryInfo, "type", "PlaylistSidebarPrimaryInfo");
var PlaylistSidebarPrimaryInfo = _PlaylistSidebarPrimaryInfo;
// dist/src/parser/classes/PlaylistSidebarSecondaryInfo.js
var _PlaylistSidebarSecondaryInfo = class _PlaylistSidebarSecondaryInfo extends YTNode {
constructor(data) {
super();
__publicField(this, "owner");
__publicField(this, "button");
this.owner = parser_exports.parseItem(data.videoOwner);
this.button = parser_exports.parseItem(data.button);
}
};
__name(_PlaylistSidebarSecondaryInfo, "PlaylistSidebarSecondaryInfo");
__publicField(_PlaylistSidebarSecondaryInfo, "type", "PlaylistSidebarSecondaryInfo");
var PlaylistSidebarSecondaryInfo = _PlaylistSidebarSecondaryInfo;
// dist/src/parser/classes/PlaylistThumbnailOverlay.js
var _PlaylistThumbnailOverlay = class _PlaylistThumbnailOverlay extends YTNode {
constructor(data) {
super();
__publicField(this, "icon_type");
__publicField(this, "text");
if (Reflect.has(data, "icon"))
this.icon_type = data.icon.iconType;
this.text = new Text2(data.text);
}
};
__name(_PlaylistThumbnailOverlay, "PlaylistThumbnailOverlay");
__publicField(_PlaylistThumbnailOverlay, "type", "PlaylistThumbnailOverlay");
var PlaylistThumbnailOverlay = _PlaylistThumbnailOverlay;
// dist/src/parser/classes/PlaylistVideo.js
var _PlaylistVideo = class _PlaylistVideo extends YTNode {
constructor(data) {
super();
__publicField(this, "id");
__publicField(this, "index");
__publicField(this, "title");
__publicField(this, "author");
__publicField(this, "thumbnails");
__publicField(this, "thumbnail_overlays");
__publicField(this, "set_video_id");
__publicField(this, "endpoint");
__publicField(this, "is_playable");
__publicField(this, "menu");
__publicField(this, "upcoming");
__publicField(this, "video_info");
__publicField(this, "accessibility_label");
__publicField(this, "style");
__publicField(this, "duration");
this.id = data.videoId;
this.index = new Text2(data.index);
this.title = new Text2(data.title);
this.author = new Author(data.shortBylineText);
this.thumbnails = Thumbnail.fromResponse(data.thumbnail);
this.thumbnail_overlays = parser_exports.parseArray(data.thumbnailOverlays);
this.set_video_id = data?.setVideoId;
this.endpoint = new NavigationEndpoint(data.navigationEndpoint);
this.is_playable = data.isPlayable;
this.menu = parser_exports.parseItem(data.menu, Menu);
this.video_info = new Text2(data.videoInfo);
this.accessibility_label = data.title.accessibility.accessibilityData.label;
if (Reflect.has(data, "style")) {
this.style = data.style;
}
const upcoming = data.upcomingEventData && Number(`${data.upcomingEventData.startTime}000`);
if (upcoming) {
this.upcoming = new Date(upcoming);
}
this.duration = {
text: new Text2(data.lengthText).toString(),
seconds: parseInt(data.lengthSeconds)
};
}
get is_live() {
return this.thumbnail_overlays.firstOfType(ThumbnailOverlayTimeStatus)?.style === "LIVE";
}
get is_upcoming() {
return this.thumbnail_overlays.firstOfType(ThumbnailOverlayTimeStatus)?.style === "UPCOMING";
}
};
__name(_PlaylistVideo, "PlaylistVideo");
__publicField(_PlaylistVideo, "type", "PlaylistVideo");
var PlaylistVideo = _PlaylistVideo;
// dist/src/parser/classes/PlaylistVideoList.js
var _PlaylistVideoList = class _PlaylistVideoList extends YTNode {
constructor(data) {
super();
__publicField(this, "id");
__publicField(this, "is_editable");
__publicField(this, "can_reorder");
__publicField(this, "videos");
this.id = data.playlistId;
this.is_editable = data.isEditable;
this.can_reorder = data.canReorder;
this.videos = parser_exports.parseArray(data.contents);
}
};
__name(_PlaylistVideoList, "PlaylistVideoList");
__publicField(_PlaylistVideoList, "type", "PlaylistVideoList");
var PlaylistVideoList = _PlaylistVideoList;
// dist/src/parser/classes/Poll.js
var _Poll = class _Poll extends YTNode {
constructor(data) {
super();
__publicField(this, "choices");
__publicField(this, "poll_type");
__publicField(this, "total_votes");
__publicField(this, "live_chat_poll_id");
this.choices = data.choices.map((choice) => ({
text: new Text2(choice.text),
select_endpoint: choice.selectServiceEndpoint ? new NavigationEndpoint(choice.selectServiceEndpoint) : null,
deselect_endpoint: choice.deselectServiceEndpoint ? new NavigationEndpoint(choice.deselectServiceEndpoint) : null,
vote_ratio_if_selected: choice?.voteRatioIfSelected || null,
vote_percentage_if_selected: new Text2(choice.votePercentageIfSelected),
vote_ratio_if_not_selected: choice?.voteRatioIfSelected || null,
vote_percentage_if_not_selected: new Text2(choice.votePercentageIfSelected),
image: choice.image ? Thumbnail.fromResponse(choice.image) : null
}));
if (Reflect.has(data, "type"))
this.poll_type = data.type;
if (Reflect.has(data, "totalVotes"))
this.total_votes = new Text2(data.totalVotes);
if (Reflect.has(data, "liveChatPollId"))
this.live_chat_poll_id = data.liveChatPollId;
}
};
__name(_Poll, "Poll");
__publicField(_Poll, "type", "Poll");
var Poll = _Poll;
// dist/src/parser/classes/Post.js
var _Post = class _Post extends BackstagePost {
constructor(data) {
super(data);
}
};
__name(_Post, "Post");
__publicField(_Post, "type", "Post");
var Post = _Post;
// dist/src/parser/classes/PostMultiImage.js
var _PostMultiImage = class _PostMultiImage extends YTNode {
constructor(data) {
super();
__publicField(this, "images");
this.images = parser_exports.parseArray(data.images, BackstageImage);
}
};
__name(_PostMultiImage, "PostMultiImage");
__publicField(_PostMultiImage, "type", "PostMultiImage");
var PostMultiImage = _PostMultiImage;
// dist/src/parser/classes/PremiereTrailerBadge.js
var _PremiereTrailerBadge = class _PremiereTrailerBadge extends YTNode {
constructor(data) {
super();
__publicField(this, "label");
this.label = new Text2(data.label);
}
};
__name(_PremiereTrailerBadge, "PremiereTrailerBadge");
__publicField(_PremiereTrailerBadge, "type", "PremiereTrailerBadge");
var PremiereTrailerBadge = _PremiereTrailerBadge;
// dist/src/parser/classes/ProductListHeader.js
var _ProductListHeader = class _ProductListHeader extends YTNode {
constructor(data) {
super();
__publicField(this, "title");
__publicField(this, "suppress_padding_disclaimer");
this.title = new Text2(data.title);
this.suppress_padding_disclaimer = !!data.suppressPaddingDisclaimer;
}
};
__name(_ProductListHeader, "ProductListHeader");
__publicField(_ProductListHeader, "type", "ProductListHeader");
var ProductListHeader = _ProductListHeader;
// dist/src/parser/classes/ProductListItem.js
var _ProductListItem = class _ProductListItem extends YTNode {
constructor(data) {
super();
__publicField(this, "title");
__publicField(this, "accessibility_title");
__publicField(this, "thumbnail");
__publicField(this, "price");
__publicField(this, "endpoint");
__publicField(this, "merchant_name");
__publicField(this, "stay_in_app");
__publicField(this, "view_button");
this.title = new Text2(data.title);
this.accessibility_title = data.accessibilityTitle;
this.thumbnail = Thumbnail.fromResponse(data.thumbnail);
this.price = data.price;
this.endpoint = new NavigationEndpoint(data.onClickCommand);
this.merchant_name = data.merchantName;
this.stay_in_app = !!data.stayInApp;
this.view_button = parser_exports.parseItem(data.viewButton, Button);
}
};
__name(_ProductListItem, "ProductListItem");
__publicField(_ProductListItem, "type", "ProductListItem");
var ProductListItem = _ProductListItem;
// dist/src/parser/classes/ProfileColumn.js
var _ProfileColumn = class _ProfileColumn extends YTNode {
constructor(data) {
super();
__publicField(this, "items");
this.items = parser_exports.parseArray(data.items);
}
// XXX: Alias for consistency.
get contents() {
return this.items;
}
};
__name(_ProfileColumn, "ProfileColumn");
__publicField(_ProfileColumn, "type", "ProfileColumn");
var ProfileColumn = _ProfileColumn;
// dist/src/parser/classes/ProfileColumnStats.js
var _ProfileColumnStats = class _ProfileColumnStats extends YTNode {
constructor(data) {
super();
__publicField(this, "items");
this.items = parser_exports.parseArray(data.items);
}
// XXX: Alias for consistency.
get contents() {
return this.items;
}
};
__name(_ProfileColumnStats, "ProfileColumnStats");
__publicField(_ProfileColumnStats, "type", "ProfileColumnStats");
var ProfileColumnStats = _ProfileColumnStats;
// dist/src/parser/classes/ProfileColumnStatsEntry.js
var _ProfileColumnStatsEntry = class _ProfileColumnStatsEntry extends YTNode {
constructor(data) {
super();
__publicField(this, "label");
__publicField(this, "value");
this.label = new Text2(data.label);
this.value = new Text2(data.value);
}
};
__name(_ProfileColumnStatsEntry, "ProfileColumnStatsEntry");
__publicField(_ProfileColumnStatsEntry, "type", "ProfileColumnStatsEntry");
var ProfileColumnStatsEntry = _ProfileColumnStatsEntry;
// dist/src/parser/classes/ProfileColumnUserInfo.js
var _ProfileColumnUserInfo = class _ProfileColumnUserInfo extends YTNode {
constructor(data) {
super();
__publicField(this, "title");
__publicField(this, "thumbnails");
this.title = new Text2(data.title);
this.thumbnails = Thumbnail.fromResponse(data.thumbnail);
}
};
__name(_ProfileColumnUserInfo, "ProfileColumnUserInfo");
__publicField(_ProfileColumnUserInfo, "type", "ProfileColumnUserInfo");
var ProfileColumnUserInfo = _ProfileColumnUserInfo;
// dist/src/parser/classes/Quiz.js
var _Quiz = class _Quiz extends YTNode {
constructor(data) {
super();
__publicField(this, "choices");
__publicField(this, "total_votes");
this.choices = data.choices.map((choice) => ({
text: new Text2(choice.text),
is_correct: choice.isCorrect
}));
this.total_votes = new Text2(data.totalVotes);
}
};
__name(_Quiz, "Quiz");
__publicField(_Quiz, "type", "Quiz");
var Quiz = _Quiz;
// dist/src/parser/classes/RecognitionShelf.js
var _RecognitionShelf = class _RecognitionShelf extends YTNode {
constructor(data) {
super();
__publicField(this, "title");
__publicField(this, "subtitle");
__publicField(this, "avatars");
__publicField(this, "button");
__publicField(this, "surface");
this.title = new Text2(data.title);
this.subtitle = new Text2(data.subtitle);
this.avatars = data.avatars.map((avatar) => new Thumbnail(avatar));
this.button = parser_exports.parseItem(data.button, Button);
this.surface = data.surface;
}
};
__name(_RecognitionShelf, "RecognitionShelf");
__publicField(_RecognitionShelf, "type", "RecognitionShelf");
var RecognitionShelf = _RecognitionShelf;
// dist/src/parser/classes/ReelItem.js
var _ReelItem = class _ReelItem extends YTNode {
constructor(data) {
super();
__publicField(this, "id");
__publicField(this, "title");
__publicField(this, "thumbnails");
__publicField(this, "views");
__publicField(this, "endpoint");
__publicField(this, "accessibility");
this.id = data.videoId;
this.title = new Text2(data.headline);
this.thumbnails = Thumbnail.fromResponse(data.thumbnail);
this.views = new Text2(data.viewCountText);
this.endpoint = new NavigationEndpoint(data.navigationEndpoint);
if ("accessibility" in data && "accessibilityData" in data.accessibility) {
this.accessibility = {
accessibility_data: new AccessibilityData(data.accessibility.accessibilityData)
};
}
}
get label() {
return this.accessibility?.accessibility_data?.label;
}
};
__name(_ReelItem, "ReelItem");
__publicField(_ReelItem, "type", "ReelItem");
var ReelItem = _ReelItem;
// dist/src/parser/classes/ReelPlayerHeader.js
var _ReelPlayerHeader = class _ReelPlayerHeader extends YTNode {
constructor(data) {
super();
__publicField(this, "reel_title_text");
__publicField(this, "timestamp_text");
__publicField(this, "channel_title_text");
__publicField(this, "channel_thumbnail");
__publicField(this, "author");
this.reel_title_text = new Text2(data.reelTitleText);
this.timestamp_text = new Text2(data.timestampText);
this.channel_title_text = new Text2(data.channelTitleText);
this.channel_thumbnail = Thumbnail.fromResponse(data.channelThumbnail);
this.author = new Author(data.channelNavigationEndpoint, void 0);
}
};
__name(_ReelPlayerHeader, "ReelPlayerHeader");
__publicField(_ReelPlayerHeader, "type", "ReelPlayerHeader");
var ReelPlayerHeader = _ReelPlayerHeader;
// dist/src/parser/classes/ReelPlayerOverlay.js
var _ReelPlayerOverlay = class _ReelPlayerOverlay extends YTNode {
constructor(data) {
super();
__publicField(this, "like_button");
__publicField(this, "reel_player_header_supported_renderers");
__publicField(this, "menu");
__publicField(this, "next_item_button");
__publicField(this, "prev_item_button");
__publicField(this, "subscribe_button_renderer");
__publicField(this, "style");
__publicField(this, "view_comments_button");
__publicField(this, "share_button");
__publicField(this, "pivot_button");
__publicField(this, "info_panel");
this.like_button = parser_exports.parseItem(data.likeButton, LikeButton);
this.reel_player_header_supported_renderers = parser_exports.parseItem(data.reelPlayerHeaderSupportedRenderers, ReelPlayerHeader);
this.menu = parser_exports.parseItem(data.menu, Menu);
this.next_item_button = parser_exports.parseItem(data.nextItemButton, Button);
this.prev_item_button = parser_exports.parseItem(data.prevItemButton, Button);
this.subscribe_button_renderer = parser_exports.parseItem(data.subscribeButtonRenderer, [Button, SubscribeButton]);
this.style = data.style;
this.view_comments_button = parser_exports.parseItem(data.viewCommentsButton, Button);
this.share_button = parser_exports.parseItem(data.shareButton, Button);
this.pivot_button = parser_exports.parseItem(data.pivotButton, PivotButton);
this.info_panel = parser_exports.parseItem(data.infoPanel, InfoPanelContainer);
}
};
__name(_ReelPlayerOverlay, "ReelPlayerOverlay");
__publicField(_ReelPlayerOverlay, "type", "ReelPlayerOverlay");
var ReelPlayerOverlay = _ReelPlayerOverlay;
// dist/src/parser/classes/RelatedChipCloud.js
var _RelatedChipCloud = class _RelatedChipCloud extends YTNode {
constructor(data) {
super();
__publicField(this, "content");
this.content = parser_exports.parseItem(data.content);
}
};
__name(_RelatedChipCloud, "RelatedChipCloud");
__publicField(_RelatedChipCloud, "type", "RelatedChipCloud");
var RelatedChipCloud = _RelatedChipCloud;
// dist/src/parser/classes/RichGrid.js
var _RichGrid = class _RichGrid extends YTNode {
constructor(data) {
super();
__publicField(this, "header");
__publicField(this, "contents");
__publicField(this, "target_id");
this.header = parser_exports.parseItem(data.header);
this.contents = parser_exports.parseArray(data.contents);
if (Reflect.has(data, "targetId"))
this.target_id = data.targetId;
}
};
__name(_RichGrid, "RichGrid");
__publicField(_RichGrid, "type", "RichGrid");
var RichGrid = _RichGrid;
// dist/src/parser/classes/RichItem.js
var _RichItem = class _RichItem extends YTNode {
constructor(data) {
super();
__publicField(this, "content");
this.content = parser_exports.parseItem(data.content);
}
};
__name(_RichItem, "RichItem");
__publicField(_RichItem, "type", "RichItem");
var RichItem = _RichItem;
// dist/src/parser/classes/RichListHeader.js
var _RichListHeader = class _RichListHeader extends YTNode {
constructor(data) {
super();
__publicField(this, "title");
__publicField(this, "subtitle");
__publicField(this, "title_style");
__publicField(this, "icon_type");
this.title = new Text2(data.title);
this.subtitle = new Text2(data.subtitle);
if (Reflect.has(data, "titleStyle")) {
this.title_style = data.titleStyle.style;
}
if (Reflect.has(data, "icon")) {
this.icon_type = data.icon.iconType;
}
}
};
__name(_RichListHeader, "RichListHeader");
__publicField(_RichListHeader, "type", "RichListHeader");
var RichListHeader = _RichListHeader;
// dist/src/parser/classes/RichMetadata.js
var _RichMetadata = class _RichMetadata extends YTNode {
constructor(data) {
super();
__publicField(this, "thumbnail");
__publicField(this, "title");
__publicField(this, "subtitle");
__publicField(this, "call_to_action");
__publicField(this, "icon_type");
__publicField(this, "endpoint");
this.thumbnail = Thumbnail.fromResponse(data.thumbnail);
this.title = new Text2(data.title);
this.subtitle = new Text2(data.subtitle);
this.call_to_action = new Text2(data.callToAction);
if (Reflect.has(data, "callToActionIcon")) {
this.icon_type = data.callToActionIcon.iconType;
}
this.endpoint = new NavigationEndpoint(data.endpoint);
}
};
__name(_RichMetadata, "RichMetadata");
__publicField(_RichMetadata, "type", "RichMetadata");
var RichMetadata = _RichMetadata;
// dist/src/parser/classes/RichMetadataRow.js
var _RichMetadataRow = class _RichMetadataRow extends YTNode {
constructor(data) {
super();
__publicField(this, "contents");
this.contents = parser_exports.parseArray(data.contents);
}
};
__name(_RichMetadataRow, "RichMetadataRow");
__publicField(_RichMetadataRow, "type", "RichMetadataRow");
var RichMetadataRow = _RichMetadataRow;
// dist/src/parser/classes/RichSection.js
var _RichSection = class _RichSection extends YTNode {
constructor(data) {
super();
__publicField(this, "content");
__publicField(this, "full_bleed");
__publicField(this, "target_id");
this.content = parser_exports.parseItem(data.content);
this.full_bleed = !!data.fullBleed;
if ("targetId" in data) {
this.target_id = data.targetId;
}
}
};
__name(_RichSection, "RichSection");
__publicField(_RichSection, "type", "RichSection");
var RichSection = _RichSection;
// dist/src/parser/classes/RichShelf.js
var _RichShelf = class _RichShelf extends YTNode {
constructor(data) {
super();
__publicField(this, "title");
__publicField(this, "contents");
__publicField(this, "endpoint");
__publicField(this, "subtitle");
__publicField(this, "is_expanded");
__publicField(this, "is_bottom_divider_hidden");
__publicField(this, "is_top_divider_hidden");
__publicField(this, "layout_sizing");
__publicField(this, "icon_type");
__publicField(this, "menu");
__publicField(this, "next_button");
__publicField(this, "previous_button");
this.title = new Text2(data.title);
this.contents = parser_exports.parseArray(data.contents);
this.is_expanded = !!data.is_expanded;
this.is_bottom_divider_hidden = !!data.isBottomDividerHidden;
this.is_top_divider_hidden = !!data.isTopDividerHidden;
if ("endpoint" in data) {
this.endpoint = new NavigationEndpoint(data.endpoint);
}
if ("subtitle" in data) {
this.subtitle = new Text2(data.subtitle);
}
if ("layoutSizing" in data) {
this.layout_sizing = data.layoutSizing;
}
if ("icon" in data) {
this.icon_type = data.icon.iconType;
}
this.menu = parser_exports.parseItem(data.menu);
this.next_button = parser_exports.parseItem(data.nextButton);
this.previous_button = parser_exports.parseItem(data.previousButton);
}
};
__name(_RichShelf, "RichShelf");
__publicField(_RichShelf, "type", "RichShelf");
var RichShelf = _RichShelf;
// dist/src/parser/classes/SearchFilter.js
var _SearchFilter = class _SearchFilter extends YTNode {
constructor(data) {
super();
__publicField(this, "label");
__publicField(this, "endpoint");
__publicField(this, "tooltip");
__publicField(this, "status");
this.label = new Text2(data.label);
this.endpoint = new NavigationEndpoint(data.endpoint || data.navigationEndpoint);
this.tooltip = data.tooltip;
if (Reflect.has(data, "status")) {
this.status = data.status;
}
}
get disabled() {
return this.status === "FILTER_STATUS_DISABLED";
}
get selected() {
return this.status === "FILTER_STATUS_SELECTED";
}
};
__name(_SearchFilter, "SearchFilter");
__publicField(_SearchFilter, "type", "SearchFilter");
var SearchFilter2 = _SearchFilter;
// dist/src/parser/classes/SearchFilterGroup.js
var _SearchFilterGroup = class _SearchFilterGroup extends YTNode {
constructor(data) {
super();
__publicField(this, "title");
__publicField(this, "filters");
this.title = new Text2(data.title);
this.filters = parser_exports.parseArray(data.filters, SearchFilter2);
}
};
__name(_SearchFilterGroup, "SearchFilterGroup");
__publicField(_SearchFilterGroup, "type", "SearchFilterGroup");
var SearchFilterGroup = _SearchFilterGroup;
// dist/src/parser/classes/SearchFilterOptionsDialog.js
var _SearchFilterOptionsDialog = class _SearchFilterOptionsDialog extends YTNode {
constructor(data) {
super();
__publicField(this, "title");
__publicField(this, "groups");
this.title = new Text2(data.title);
this.groups = parser_exports.parseArray(data.groups, SearchFilterGroup);
}
};
__name(_SearchFilterOptionsDialog, "SearchFilterOptionsDialog");
__publicField(_SearchFilterOptionsDialog, "type", "SearchFilterOptionsDialog");
var SearchFilterOptionsDialog = _SearchFilterOptionsDialog;
// dist/src/parser/classes/SearchHeader.js
var _SearchHeader = class _SearchHeader extends YTNode {
constructor(data) {
super();
__publicField(this, "chip_bar");
__publicField(this, "search_filter_button");
this.chip_bar = parser_exports.parseItem(data.chipBar, ChipCloud);
this.search_filter_button = parser_exports.parseItem(data.searchFilterButton, Button);
}
};
__name(_SearchHeader, "SearchHeader");
__publicField(_SearchHeader, "type", "SearchHeader");
var SearchHeader = _SearchHeader;
// dist/src/parser/classes/SearchSubMenu.js
var _SearchSubMenu = class _SearchSubMenu extends YTNode {
constructor(data) {
super();
__publicField(this, "title");
__publicField(this, "groups");
__publicField(this, "button");
if (Reflect.has(data, "title"))
this.title = new Text2(data.title);
if (Reflect.has(data, "groups"))
this.groups = parser_exports.parseArray(data.groups, SearchFilterGroup);
if (Reflect.has(data, "button"))
this.button = parser_exports.parseItem(data.button, ToggleButton);
}
};
__name(_SearchSubMenu, "SearchSubMenu");
__publicField(_SearchSubMenu, "type", "SearchSubMenu");
var SearchSubMenu = _SearchSubMenu;
// dist/src/parser/classes/SearchSuggestionsSection.js
var _SearchSuggestionsSection = class _SearchSuggestionsSection extends YTNode {
constructor(data) {
super();
__publicField(this, "contents");
this.contents = parser_exports.parseArray(data.contents);
}
};
__name(_SearchSuggestionsSection, "SearchSuggestionsSection");
__publicField(_SearchSuggestionsSection, "type", "SearchSuggestionsSection");
var SearchSuggestionsSection = _SearchSuggestionsSection;
// dist/src/parser/classes/UniversalWatchCard.js
var _UniversalWatchCard = class _UniversalWatchCard extends YTNode {
constructor(data) {
super();
__publicField(this, "header");
__publicField(this, "call_to_action");
__publicField(this, "sections");
__publicField(this, "collapsed_label");
this.header = parser_exports.parseItem(data.header);
this.call_to_action = parser_exports.parseItem(data.callToAction);
this.sections = parser_exports.parseArray(data.sections);
if (Reflect.has(data, "collapsedLabel")) {
this.collapsed_label = new Text2(data.collapsedLabel);
}
}
};
__name(_UniversalWatchCard, "UniversalWatchCard");
__publicField(_UniversalWatchCard, "type", "UniversalWatchCard");
var UniversalWatchCard = _UniversalWatchCard;
// dist/src/parser/classes/SecondarySearchContainer.js
var _SecondarySearchContainer = class _SecondarySearchContainer extends YTNode {
constructor(data) {
super();
__publicField(this, "target_id");
__publicField(this, "contents");
this.contents = parser_exports.parseArray(data.contents, [UniversalWatchCard]);
}
};
__name(_SecondarySearchContainer, "SecondarySearchContainer");
__publicField(_SecondarySearchContainer, "type", "SecondarySearchContainer");
var SecondarySearchContainer = _SecondarySearchContainer;
// dist/src/parser/classes/SectionHeaderView.js
var _SectionHeaderView = class _SectionHeaderView extends YTNode {
constructor(data) {
super();
__publicField(this, "headline");
this.headline = Text2.fromAttributed(data.headline);
}
};
__name(_SectionHeaderView, "SectionHeaderView");
__publicField(_SectionHeaderView, "type", "SectionHeaderView");
var SectionHeaderView = _SectionHeaderView;
// dist/src/parser/classes/SegmentedLikeDislikeButton.js
var _SegmentedLikeDislikeButton = class _SegmentedLikeDislikeButton extends YTNode {
constructor(data) {
super();
__publicField(this, "like_button");
__publicField(this, "dislike_button");
this.like_button = parser_exports.parseItem(data.likeButton, [ToggleButton, Button]);
this.dislike_button = parser_exports.parseItem(data.dislikeButton, [ToggleButton, Button]);
}
};
__name(_SegmentedLikeDislikeButton, "SegmentedLikeDislikeButton");
__publicField(_SegmentedLikeDislikeButton, "type", "SegmentedLikeDislikeButton");
var SegmentedLikeDislikeButton = _SegmentedLikeDislikeButton;
// dist/src/parser/classes/SettingBoolean.js
var _SettingBoolean = class _SettingBoolean extends YTNode {
constructor(data) {
super();
__publicField(this, "title");
__publicField(this, "summary");
__publicField(this, "enable_endpoint");
__publicField(this, "disable_endpoint");
__publicField(this, "item_id");
if (Reflect.has(data, "title")) {
this.title = new Text2(data.title);
}
if (Reflect.has(data, "summary")) {
this.summary = new Text2(data.summary);
}
if (Reflect.has(data, "enableServiceEndpoint")) {
this.enable_endpoint = new NavigationEndpoint(data.enableServiceEndpoint);
}
if (Reflect.has(data, "disableServiceEndpoint")) {
this.disable_endpoint = new NavigationEndpoint(data.disableServiceEndpoint);
}
this.item_id = data.itemId;
}
};
__name(_SettingBoolean, "SettingBoolean");
__publicField(_SettingBoolean, "type", "SettingBoolean");
var SettingBoolean = _SettingBoolean;
// dist/src/parser/classes/SettingsCheckbox.js
var _SettingsCheckbox = class _SettingsCheckbox extends YTNode {
constructor(data) {
super();
__publicField(this, "title");
__publicField(this, "help_text");
__publicField(this, "enabled");
__publicField(this, "disabled");
__publicField(this, "id");
this.title = new Text2(data.title);
this.help_text = new Text2(data.helpText);
this.enabled = data.enabled;
this.disabled = data.disabled;
this.id = data.id;
}
};
__name(_SettingsCheckbox, "SettingsCheckbox");
__publicField(_SettingsCheckbox, "type", "SettingsCheckbox");
var SettingsCheckbox = _SettingsCheckbox;
// dist/src/parser/classes/SettingsSwitch.js
var _SettingsSwitch = class _SettingsSwitch extends YTNode {
constructor(data) {
super();
__publicField(this, "title");
__publicField(this, "subtitle");
__publicField(this, "enabled");
__publicField(this, "enable_endpoint");
__publicField(this, "disable_endpoint");
this.title = new Text2(data.title);
this.subtitle = new Text2(data.subtitle);
this.enabled = data.enabled;
this.enable_endpoint = new NavigationEndpoint(data.enableServiceEndpoint);
this.disable_endpoint = new NavigationEndpoint(data.disableServiceEndpoint);
}
};
__name(_SettingsSwitch, "SettingsSwitch");
__publicField(_SettingsSwitch, "type", "SettingsSwitch");
var SettingsSwitch = _SettingsSwitch;
// dist/src/parser/classes/SettingsOptions.js
var _SettingsOptions = class _SettingsOptions extends YTNode {
constructor(data) {
super();
__publicField(this, "title");
__publicField(this, "text");
__publicField(this, "options");
this.title = new Text2(data.title);
if (Reflect.has(data, "text")) {
this.text = new Text2(data.text).toString();
}
if (Reflect.has(data, "options")) {
this.options = parser_exports.parseArray(data.options, [
SettingsSwitch,
Dropdown,
CopyLink,
SettingsCheckbox,
ChannelOptions
]);
}
}
};
__name(_SettingsOptions, "SettingsOptions");
__publicField(_SettingsOptions, "type", "SettingsOptions");
var SettingsOptions = _SettingsOptions;
// dist/src/parser/classes/SettingsSidebar.js
var _SettingsSidebar = class _SettingsSidebar extends YTNode {
constructor(data) {
super();
__publicField(this, "title");
__publicField(this, "items");
this.title = new Text2(data.title);
this.items = parser_exports.parseArray(data.items, CompactLink);
}
// XXX: Alias for consistency.
get contents() {
return this.items;
}
};
__name(_SettingsSidebar, "SettingsSidebar");
__publicField(_SettingsSidebar, "type", "SettingsSidebar");
var SettingsSidebar = _SettingsSidebar;
// dist/src/parser/classes/SharedPost.js
var _SharedPost = class _SharedPost extends YTNode {
constructor(data) {
super();
__publicField(this, "thumbnail");
__publicField(this, "content");
__publicField(this, "published");
__publicField(this, "menu");
__publicField(this, "original_post");
__publicField(this, "id");
__publicField(this, "endpoint");
__publicField(this, "expand_button");
__publicField(this, "author");
this.thumbnail = Thumbnail.fromResponse(data.thumbnail);
this.content = new Text2(data.content);
this.published = new Text2(data.publishedTimeText);
this.menu = parser_exports.parseItem(data.actionMenu, Menu);
this.original_post = parser_exports.parseItem(data.originalPost, [BackstagePost, Post]);
this.id = data.postId;
this.endpoint = new NavigationEndpoint(data.navigationEndpoint);
this.expand_button = parser_exports.parseItem(data.expandButton, Button);
this.author = new Author(data.displayName, void 0);
}
};
__name(_SharedPost, "SharedPost");
__publicField(_SharedPost, "type", "SharedPost");
var SharedPost = _SharedPost;
// dist/src/parser/classes/SharePanelHeader.js
var _SharePanelHeader = class _SharePanelHeader extends YTNode {
constructor(data) {
super();
__publicField(this, "title");
this.title = parser_exports.parseItem(data.title);
}
};
__name(_SharePanelHeader, "SharePanelHeader");
__publicField(_SharePanelHeader, "type", "SharePanelHeader");
var SharePanelHeader = _SharePanelHeader;
// dist/src/parser/classes/SharePanelTitleV15.js
var _SharePanelTitleV15 = class _SharePanelTitleV15 extends YTNode {
constructor(data) {
super();
__publicField(this, "title");
this.title = new Text2(data.title);
}
};
__name(_SharePanelTitleV15, "SharePanelTitleV15");
__publicField(_SharePanelTitleV15, "type", "SharePanelTitleV15");
var SharePanelTitleV15 = _SharePanelTitleV15;
// dist/src/parser/classes/ShareTarget.js
var _ShareTarget = class _ShareTarget extends YTNode {
constructor(data) {
super();
__publicField(this, "endpoint");
__publicField(this, "service_name");
__publicField(this, "target_id");
__publicField(this, "title");
if (Reflect.has(data, "serviceEndpoint"))
this.endpoint = new NavigationEndpoint(data.serviceEndpoint);
else if (Reflect.has(data, "navigationEndpoint"))
this.endpoint = new NavigationEndpoint(data.navigationEndpoint);
this.service_name = data.serviceName;
this.target_id = data.targetId;
this.title = new Text2(data.title);
}
};
__name(_ShareTarget, "ShareTarget");
__publicField(_ShareTarget, "type", "ShareTarget");
var ShareTarget = _ShareTarget;
// dist/src/parser/classes/Shelf.js
var _Shelf = class _Shelf extends YTNode {
constructor(data) {
super();
__publicField(this, "title");
__publicField(this, "endpoint");
__publicField(this, "content");
__publicField(this, "icon_type");
__publicField(this, "menu");
__publicField(this, "play_all_button");
__publicField(this, "subtitle");
this.title = new Text2(data.title);
if (Reflect.has(data, "endpoint")) {
this.endpoint = new NavigationEndpoint(data.endpoint);
}
this.content = parser_exports.parseItem(data.content);
if (Reflect.has(data, "icon")) {
this.icon_type = data.icon.iconType;
}
if (Reflect.has(data, "menu")) {
this.menu = parser_exports.parseItem(data.menu);
}
if (Reflect.has(data, "playAllButton")) {
this.play_all_button = parser_exports.parseItem(data.playAllButton, Button);
}
if (Reflect.has(data, "subtitle")) {
this.subtitle = new Text2(data.subtitle);
}
}
};
__name(_Shelf, "Shelf");
__publicField(_Shelf, "type", "Shelf");
var Shelf = _Shelf;
// dist/src/parser/classes/ShortsLockupView.js
var _ShortsLockupView = class _ShortsLockupView extends YTNode {
constructor(data) {
super();
__publicField(this, "entity_id");
__publicField(this, "accessibility_text");
__publicField(this, "thumbnail");
__publicField(this, "on_tap_endpoint");
__publicField(this, "menu_on_tap");
__publicField(this, "index_in_collection");
__publicField(this, "menu_on_tap_a11y_label");
__publicField(this, "overlay_metadata");
__publicField(this, "inline_player_data");
__publicField(this, "badge");
this.entity_id = data.entityId;
this.accessibility_text = data.accessibilityText;
this.thumbnail = Thumbnail.fromResponse(data.thumbnail);
this.on_tap_endpoint = new NavigationEndpoint(data.onTap);
this.menu_on_tap = new NavigationEndpoint(data.menuOnTap);
this.index_in_collection = data.indexInCollection;
this.menu_on_tap_a11y_label = data.menuOnTapA11yLabel;
this.overlay_metadata = {
primary_text: data.overlayMetadata.primaryText ? Text2.fromAttributed(data.overlayMetadata.primaryText) : void 0,
secondary_text: data.overlayMetadata.secondaryText ? Text2.fromAttributed(data.overlayMetadata.secondaryText) : void 0
};
if (data.inlinePlayerData?.onVisible) {
this.inline_player_data = new NavigationEndpoint(data.inlinePlayerData.onVisible);
}
if (data.badge) {
this.badge = parser_exports.parseItem(data.badge, BadgeView);
}
}
};
__name(_ShortsLockupView, "ShortsLockupView");
__publicField(_ShortsLockupView, "type", "ShortsLockupView");
var ShortsLockupView = _ShortsLockupView;
// dist/src/parser/classes/ShowingResultsFor.js
var _ShowingResultsFor = class _ShowingResultsFor extends YTNode {
constructor(data) {
super();
__publicField(this, "corrected_query");
__publicField(this, "original_query");
__publicField(this, "corrected_query_endpoint");
__publicField(this, "original_query_endpoint");
__publicField(this, "search_instead_for");
__publicField(this, "showing_results_for");
this.corrected_query = new Text2(data.correctedQuery);
this.original_query = new Text2(data.originalQuery);
this.corrected_query_endpoint = new NavigationEndpoint(data.correctedQueryEndpoint);
this.original_query_endpoint = new NavigationEndpoint(data.originalQueryEndpoint);
this.search_instead_for = new Text2(data.searchInsteadFor);
this.showing_results_for = new Text2(data.showingResultsFor);
}
};
__name(_ShowingResultsFor, "ShowingResultsFor");
__publicField(_ShowingResultsFor, "type", "ShowingResultsFor");
var ShowingResultsFor = _ShowingResultsFor;
// dist/src/parser/classes/SimpleCardContent.js
var _SimpleCardContent = class _SimpleCardContent extends YTNode {
constructor(data) {
super();
__publicField(this, "image");
__publicField(this, "title");
__publicField(this, "display_domain");
__publicField(this, "show_link_icon");
__publicField(this, "call_to_action");
__publicField(this, "endpoint");
this.image = Thumbnail.fromResponse(data.image);
this.title = new Text2(data.title);
this.display_domain = new Text2(data.displayDomain);
this.show_link_icon = data.showLinkIcon;
this.call_to_action = new Text2(data.callToAction);
this.endpoint = new NavigationEndpoint(data.command);
}
};
__name(_SimpleCardContent, "SimpleCardContent");
__publicField(_SimpleCardContent, "type", "SimpleCardContent");
var SimpleCardContent = _SimpleCardContent;
// dist/src/parser/classes/SimpleCardTeaser.js
var _SimpleCardTeaser = class _SimpleCardTeaser extends YTNode {
// @TODO: or string?
constructor(data) {
super();
__publicField(this, "message");
__publicField(this, "prominent");
this.message = new Text2(data.message);
this.prominent = data.prominent;
}
};
__name(_SimpleCardTeaser, "SimpleCardTeaser");
__publicField(_SimpleCardTeaser, "type", "SimpleCardTeaser");
var SimpleCardTeaser = _SimpleCardTeaser;
// dist/src/parser/classes/SimpleTextSection.js
var _SimpleTextSection = class _SimpleTextSection extends YTNode {
constructor(data) {
super();
__publicField(this, "lines");
__publicField(this, "style");
this.lines = data.lines.map((line) => new Text2(line));
this.style = data.layoutStyle;
}
};
__name(_SimpleTextSection, "SimpleTextSection");
__publicField(_SimpleTextSection, "type", "SimpleTextSection");
var SimpleTextSection = _SimpleTextSection;
// dist/src/parser/classes/SingleActionEmergencySupport.js
var _SingleActionEmergencySupport = class _SingleActionEmergencySupport extends YTNode {
constructor(data) {
super();
__publicField(this, "action_text");
__publicField(this, "nav_text");
__publicField(this, "details");
__publicField(this, "icon_type");
__publicField(this, "endpoint");
this.action_text = new Text2(data.actionText);
this.nav_text = new Text2(data.navigationText);
this.details = new Text2(data.detailsText);
this.icon_type = data.icon.iconType;
this.endpoint = new NavigationEndpoint(data.navigationEndpoint);
}
};
__name(_SingleActionEmergencySupport, "SingleActionEmergencySupport");
__publicField(_SingleActionEmergencySupport, "type", "SingleActionEmergencySupport");
var SingleActionEmergencySupport = _SingleActionEmergencySupport;
// dist/src/parser/classes/Tab.js
var _Tab = class _Tab extends YTNode {
constructor(data) {
super();
__publicField(this, "title");
__publicField(this, "selected");
__publicField(this, "endpoint");
__publicField(this, "content");
this.title = data.title || "N/A";
this.selected = !!data.selected;
this.endpoint = new NavigationEndpoint(data.endpoint);
this.content = parser_exports.parseItem(data.content, [SectionList, MusicQueue, RichGrid]);
}
};
__name(_Tab, "Tab");
__publicField(_Tab, "type", "Tab");
var Tab = _Tab;
// dist/src/parser/classes/SingleColumnBrowseResults.js
var _SingleColumnBrowseResults = class _SingleColumnBrowseResults extends YTNode {
constructor(data) {
super();
__publicField(this, "tabs");
this.tabs = parser_exports.parseArray(data.tabs, Tab);
}
};
__name(_SingleColumnBrowseResults, "SingleColumnBrowseResults");
__publicField(_SingleColumnBrowseResults, "type", "SingleColumnBrowseResults");
var SingleColumnBrowseResults = _SingleColumnBrowseResults;
// dist/src/parser/classes/SingleColumnMusicWatchNextResults.js
var _SingleColumnMusicWatchNextResults = class _SingleColumnMusicWatchNextResults extends YTNode {
constructor(data) {
super();
__publicField(this, "contents");
this.contents = parser_exports.parse(data);
}
};
__name(_SingleColumnMusicWatchNextResults, "SingleColumnMusicWatchNextResults");
__publicField(_SingleColumnMusicWatchNextResults, "type", "SingleColumnMusicWatchNextResults");
var SingleColumnMusicWatchNextResults = _SingleColumnMusicWatchNextResults;
// dist/src/parser/classes/SingleHeroImage.js
var _SingleHeroImage = class _SingleHeroImage extends YTNode {
constructor(data) {
super();
__publicField(this, "thumbnails");
__publicField(this, "style");
this.thumbnails = Thumbnail.fromResponse(data.thumbnail);
this.style = data.style;
}
};
__name(_SingleHeroImage, "SingleHeroImage");
__publicField(_SingleHeroImage, "type", "SingleHeroImage");
var SingleHeroImage = _SingleHeroImage;
// dist/src/parser/classes/SlimOwner.js
var _SlimOwner = class _SlimOwner extends YTNode {
constructor(data) {
super();
__publicField(this, "thumbnail");
__publicField(this, "title");
__publicField(this, "endpoint");
__publicField(this, "subscribe_button");
this.thumbnail = Thumbnail.fromResponse(data.thumbnail);
this.title = new Text2(data.title);
this.endpoint = new NavigationEndpoint(data.navigationEndpoint);
this.subscribe_button = parser_exports.parseItem(data.subscribeButton, SubscribeButton);
}
};
__name(_SlimOwner, "SlimOwner");
__publicField(_SlimOwner, "type", "SlimOwner");
var SlimOwner = _SlimOwner;
// dist/src/parser/classes/SlimVideoMetadata.js
var _SlimVideoMetadata = class _SlimVideoMetadata extends YTNode {
constructor(data) {
super();
__publicField(this, "title");
__publicField(this, "collapsed_subtitle");
__publicField(this, "expanded_subtitle");
__publicField(this, "owner");
__publicField(this, "description");
__publicField(this, "video_id");
__publicField(this, "date");
this.title = new Text2(data.title);
this.collapsed_subtitle = new Text2(data.collapsedSubtitle);
this.expanded_subtitle = new Text2(data.expandedSubtitle);
this.owner = parser_exports.parseItem(data.owner);
this.description = new Text2(data.description);
this.video_id = data.videoId;
this.date = new Text2(data.dateText);
}
};
__name(_SlimVideoMetadata, "SlimVideoMetadata");
__publicField(_SlimVideoMetadata, "type", "SlimVideoMetadata");
var SlimVideoMetadata = _SlimVideoMetadata;
// dist/src/parser/classes/StartAt.js
var _StartAt = class _StartAt extends YTNode {
constructor(data) {
super();
__publicField(this, "start_at_option_label");
this.start_at_option_label = new Text2(data.startAtOptionLabel);
}
};
__name(_StartAt, "StartAt");
__publicField(_StartAt, "type", "StartAt");
var StartAt = _StartAt;
// dist/src/parser/classes/Tabbed.js
var _Tabbed = class _Tabbed extends YTNode {
constructor(data) {
super();
__publicField(this, "contents");
this.contents = parser_exports.parse(data);
}
};
__name(_Tabbed, "Tabbed");
__publicField(_Tabbed, "type", "Tabbed");
var Tabbed = _Tabbed;
// dist/src/parser/classes/TabbedSearchResults.js
var _TabbedSearchResults = class _TabbedSearchResults extends YTNode {
constructor(data) {
super();
__publicField(this, "tabs");
this.tabs = parser_exports.parseArray(data.tabs, Tab);
}
};
__name(_TabbedSearchResults, "TabbedSearchResults");
__publicField(_TabbedSearchResults, "type", "TabbedSearchResults");
var TabbedSearchResults = _TabbedSearchResults;
// dist/src/parser/classes/TextHeader.js
var _TextHeader = class _TextHeader extends YTNode {
constructor(data) {
super();
__publicField(this, "title");
__publicField(this, "style");
this.title = new Text2(data.title);
this.style = data.style;
}
};
__name(_TextHeader, "TextHeader");
__publicField(_TextHeader, "type", "TextHeader");
var TextHeader = _TextHeader;
// dist/src/parser/classes/ThirdPartyShareTargetSection.js
var _ThirdPartyShareTargetSection = class _ThirdPartyShareTargetSection extends YTNode {
constructor(data) {
super();
__publicField(this, "share_targets");
this.share_targets = parser_exports.parseArray(data.shareTargets, ShareTarget);
}
};
__name(_ThirdPartyShareTargetSection, "ThirdPartyShareTargetSection");
__publicField(_ThirdPartyShareTargetSection, "type", "ThirdPartyShareTargetSection");
var ThirdPartyShareTargetSection = _ThirdPartyShareTargetSection;
// dist/src/parser/classes/ThumbnailLandscapePortrait.js
var _ThumbnailLandscapePortrait = class _ThumbnailLandscapePortrait extends YTNode {
constructor(data) {
super();
__publicField(this, "landscape");
__publicField(this, "portrait");
this.landscape = Thumbnail.fromResponse(data.landscape);
this.portrait = Thumbnail.fromResponse(data.portrait);
}
};
__name(_ThumbnailLandscapePortrait, "ThumbnailLandscapePortrait");
__publicField(_ThumbnailLandscapePortrait, "type", "ThumbnailLandscapePortrait");
var ThumbnailLandscapePortrait = _ThumbnailLandscapePortrait;
// dist/src/parser/classes/ThumbnailOverlayEndorsement.js
var _ThumbnailOverlayEndorsement = class _ThumbnailOverlayEndorsement extends YTNode {
constructor(data) {
super();
__publicField(this, "text");
this.text = new Text2(data.text).toString();
}
};
__name(_ThumbnailOverlayEndorsement, "ThumbnailOverlayEndorsement");
__publicField(_ThumbnailOverlayEndorsement, "type", "ThumbnailOverlayEndorsement");
var ThumbnailOverlayEndorsement = _ThumbnailOverlayEndorsement;
// dist/src/parser/classes/ThumbnailOverlayHoverText.js
var _ThumbnailOverlayHoverText = class _ThumbnailOverlayHoverText extends YTNode {
constructor(data) {
super();
__publicField(this, "text");
__publicField(this, "icon_type");
this.text = new Text2(data.text);
this.icon_type = data.icon.iconType;
}
};
__name(_ThumbnailOverlayHoverText, "ThumbnailOverlayHoverText");
__publicField(_ThumbnailOverlayHoverText, "type", "ThumbnailOverlayHoverText");
var ThumbnailOverlayHoverText = _ThumbnailOverlayHoverText;
// dist/src/parser/classes/ThumbnailOverlayInlineUnplayable.js
var _ThumbnailOverlayInlineUnplayable = class _ThumbnailOverlayInlineUnplayable extends YTNode {
constructor(data) {
super();
__publicField(this, "text");
__publicField(this, "icon_type");
this.text = new Text2(data.text).toString();
this.icon_type = data.icon.iconType;
}
};
__name(_ThumbnailOverlayInlineUnplayable, "ThumbnailOverlayInlineUnplayable");
__publicField(_ThumbnailOverlayInlineUnplayable, "type", "ThumbnailOverlayInlineUnplayable");
var ThumbnailOverlayInlineUnplayable = _ThumbnailOverlayInlineUnplayable;
// dist/src/parser/classes/ThumbnailOverlayLoadingPreview.js
var _ThumbnailOverlayLoadingPreview = class _ThumbnailOverlayLoadingPreview extends YTNode {
constructor(data) {
super();
__publicField(this, "text");
this.text = new Text2(data.text);
}
};
__name(_ThumbnailOverlayLoadingPreview, "ThumbnailOverlayLoadingPreview");
__publicField(_ThumbnailOverlayLoadingPreview, "type", "ThumbnailOverlayLoadingPreview");
var ThumbnailOverlayLoadingPreview = _ThumbnailOverlayLoadingPreview;
// dist/src/parser/classes/ThumbnailOverlayNowPlaying.js
var _ThumbnailOverlayNowPlaying = class _ThumbnailOverlayNowPlaying extends YTNode {
constructor(data) {
super();
__publicField(this, "text");
this.text = new Text2(data.text).toString();
}
};
__name(_ThumbnailOverlayNowPlaying, "ThumbnailOverlayNowPlaying");
__publicField(_ThumbnailOverlayNowPlaying, "type", "ThumbnailOverlayNowPlaying");
var ThumbnailOverlayNowPlaying = _ThumbnailOverlayNowPlaying;
// dist/src/parser/classes/ThumbnailOverlayPinking.js
var _ThumbnailOverlayPinking = class _ThumbnailOverlayPinking extends YTNode {
constructor(data) {
super();
__publicField(this, "hack");
this.hack = data.hack;
}
};
__name(_ThumbnailOverlayPinking, "ThumbnailOverlayPinking");
__publicField(_ThumbnailOverlayPinking, "type", "ThumbnailOverlayPinking");
var ThumbnailOverlayPinking = _ThumbnailOverlayPinking;
// dist/src/parser/classes/ThumbnailOverlayPlaybackStatus.js
var _ThumbnailOverlayPlaybackStatus = class _ThumbnailOverlayPlaybackStatus extends YTNode {
constructor(data) {
super();
__publicField(this, "texts");
this.texts = data.texts.map((text) => new Text2(text));
}
};
__name(_ThumbnailOverlayPlaybackStatus, "ThumbnailOverlayPlaybackStatus");
__publicField(_ThumbnailOverlayPlaybackStatus, "type", "ThumbnailOverlayPlaybackStatus");
var ThumbnailOverlayPlaybackStatus = _ThumbnailOverlayPlaybackStatus;
// dist/src/parser/classes/ThumbnailOverlayResumePlayback.js
var _ThumbnailOverlayResumePlayback = class _ThumbnailOverlayResumePlayback extends YTNode {
constructor(data) {
super();
__publicField(this, "percent_duration_watched");
this.percent_duration_watched = data.percentDurationWatched;
}
};
__name(_ThumbnailOverlayResumePlayback, "ThumbnailOverlayResumePlayback");
__publicField(_ThumbnailOverlayResumePlayback, "type", "ThumbnailOverlayResumePlayback");
var ThumbnailOverlayResumePlayback = _ThumbnailOverlayResumePlayback;
// dist/src/parser/classes/ThumbnailOverlaySidePanel.js
var _ThumbnailOverlaySidePanel = class _ThumbnailOverlaySidePanel extends YTNode {
constructor(data) {
super();
__publicField(this, "text");
__publicField(this, "icon_type");
this.text = new Text2(data.text);
this.icon_type = data.icon.iconType;
}
};
__name(_ThumbnailOverlaySidePanel, "ThumbnailOverlaySidePanel");
__publicField(_ThumbnailOverlaySidePanel, "type", "ThumbnailOverlaySidePanel");
var ThumbnailOverlaySidePanel = _ThumbnailOverlaySidePanel;
// dist/src/parser/classes/ThumbnailOverlayToggleButton.js
var _ThumbnailOverlayToggleButton = class _ThumbnailOverlayToggleButton extends YTNode {
constructor(data) {
super();
__publicField(this, "is_toggled");
__publicField(this, "icon_type");
__publicField(this, "tooltip");
__publicField(this, "toggled_endpoint");
__publicField(this, "untoggled_endpoint");
if (Reflect.has(data, "isToggled")) {
this.is_toggled = data.isToggled;
}
this.icon_type = {
toggled: data.toggledIcon.iconType,
untoggled: data.untoggledIcon.iconType
};
this.tooltip = {
toggled: data.toggledTooltip,
untoggled: data.untoggledTooltip
};
if (data.toggledServiceEndpoint)
this.toggled_endpoint = new NavigationEndpoint(data.toggledServiceEndpoint);
if (data.untoggledServiceEndpoint)
this.untoggled_endpoint = new NavigationEndpoint(data.untoggledServiceEndpoint);
}
};
__name(_ThumbnailOverlayToggleButton, "ThumbnailOverlayToggleButton");
__publicField(_ThumbnailOverlayToggleButton, "type", "ThumbnailOverlayToggleButton");
var ThumbnailOverlayToggleButton = _ThumbnailOverlayToggleButton;
// dist/src/parser/classes/TitleAndButtonListHeader.js
var _TitleAndButtonListHeader = class _TitleAndButtonListHeader extends YTNode {
constructor(data) {
super();
__publicField(this, "title");
this.title = new Text2(data.title);
}
};
__name(_TitleAndButtonListHeader, "TitleAndButtonListHeader");
__publicField(_TitleAndButtonListHeader, "type", "TitleAndButtonListHeader");
var TitleAndButtonListHeader = _TitleAndButtonListHeader;
// dist/src/parser/classes/ToggleMenuServiceItem.js
var _ToggleMenuServiceItem = class _ToggleMenuServiceItem extends YTNode {
constructor(data) {
super();
__publicField(this, "text");
__publicField(this, "toggled_text");
__publicField(this, "icon_type");
__publicField(this, "toggled_icon_type");
__publicField(this, "default_endpoint");
__publicField(this, "toggled_endpoint");
this.text = new Text2(data.defaultText);
this.toggled_text = new Text2(data.toggledText);
this.icon_type = data.defaultIcon.iconType;
this.toggled_icon_type = data.toggledIcon.iconType;
this.default_endpoint = new NavigationEndpoint(data.defaultServiceEndpoint);
this.toggled_endpoint = new NavigationEndpoint(data.toggledServiceEndpoint);
}
};
__name(_ToggleMenuServiceItem, "ToggleMenuServiceItem");
__publicField(_ToggleMenuServiceItem, "type", "ToggleMenuServiceItem");
var ToggleMenuServiceItem = _ToggleMenuServiceItem;
// dist/src/parser/classes/Tooltip.js
var _Tooltip = class _Tooltip extends YTNode {
constructor(data) {
super();
__publicField(this, "promo_config");
__publicField(this, "target_id");
__publicField(this, "details");
__publicField(this, "suggested_position");
__publicField(this, "dismiss_stratedy");
__publicField(this, "dwell_time_ms");
this.promo_config = {
promo_id: data.promoConfig.promoId,
impression_endpoints: data.promoConfig.impressionEndpoints.map((endpoint) => new NavigationEndpoint(endpoint)),
accept: new NavigationEndpoint(data.promoConfig.acceptCommand),
dismiss: new NavigationEndpoint(data.promoConfig.dismissCommand)
};
this.target_id = data.targetId;
this.details = new Text2(data.detailsText);
this.suggested_position = data.suggestedPosition.type;
this.dismiss_stratedy = data.dismissStrategy.type;
this.dwell_time_ms = parseInt(data.dwellTimeMs);
}
};
__name(_Tooltip, "Tooltip");
__publicField(_Tooltip, "type", "Tooltip");
var Tooltip = _Tooltip;
// dist/src/parser/classes/TopicChannelDetails.js
var _TopicChannelDetails = class _TopicChannelDetails extends YTNode {
constructor(data) {
super();
__publicField(this, "title");
__publicField(this, "avatar");
__publicField(this, "subtitle");
__publicField(this, "subscribe_button");
__publicField(this, "endpoint");
this.title = new Text2(data.title);
this.avatar = Thumbnail.fromResponse(data.thumbnail ?? data.avatar);
this.subtitle = new Text2(data.subtitle);
this.subscribe_button = parser_exports.parseItem(data.subscribeButton, SubscribeButton);
this.endpoint = new NavigationEndpoint(data.navigationEndpoint);
}
};
__name(_TopicChannelDetails, "TopicChannelDetails");
__publicField(_TopicChannelDetails, "type", "TopicChannelDetails");
var TopicChannelDetails = _TopicChannelDetails;
// dist/src/parser/classes/TwoColumnBrowseResults.js
var _TwoColumnBrowseResults = class _TwoColumnBrowseResults extends YTNode {
constructor(data) {
super();
__publicField(this, "tabs");
__publicField(this, "secondary_contents");
this.tabs = parser_exports.parseArray(data.tabs, [Tab, ExpandableTab]);
this.secondary_contents = parser_exports.parseItem(data.secondaryContents, [SectionList, BrowseFeedActions, ProfileColumn]);
}
};
__name(_TwoColumnBrowseResults, "TwoColumnBrowseResults");
__publicField(_TwoColumnBrowseResults, "type", "TwoColumnBrowseResults");
var TwoColumnBrowseResults = _TwoColumnBrowseResults;
// dist/src/parser/classes/TwoColumnSearchResults.js
var _TwoColumnSearchResults = class _TwoColumnSearchResults extends YTNode {
constructor(data) {
super();
__publicField(this, "header");
__publicField(this, "primary_contents");
__publicField(this, "secondary_contents");
__publicField(this, "target_id");
this.header = parser_exports.parseItem(data.header);
this.primary_contents = parser_exports.parseItem(data.primaryContents, [RichGrid, SectionList]);
this.secondary_contents = parser_exports.parseItem(data.secondaryContents, [SecondarySearchContainer]);
if ("targetId" in data) {
this.target_id = data.targetId;
}
}
};
__name(_TwoColumnSearchResults, "TwoColumnSearchResults");
__publicField(_TwoColumnSearchResults, "type", "TwoColumnSearchResults");
var TwoColumnSearchResults = _TwoColumnSearchResults;
// dist/src/parser/classes/TwoColumnWatchNextResults.js
var _TwoColumnWatchNextResults_instances, parseAutoplaySet_fn;
var _TwoColumnWatchNextResults = class _TwoColumnWatchNextResults extends YTNode {
constructor(data) {
super();
__privateAdd(this, _TwoColumnWatchNextResults_instances);
__publicField(this, "results");
__publicField(this, "secondary_results");
__publicField(this, "conversation_bar");
__publicField(this, "playlist");
__publicField(this, "autoplay");
this.results = parser_exports.parseArray(data.results?.results.contents);
this.secondary_results = parser_exports.parseArray(data.secondaryResults?.secondaryResults.results);
this.conversation_bar = parser_exports.parseItem(data?.conversationBar);
const playlistData = data.playlist?.playlist;
if (playlistData) {
this.playlist = {
id: playlistData.playlistId,
title: playlistData.title,
author: playlistData.shortBylineText?.simpleText ? new Text2(playlistData.shortBylineText) : new Author(playlistData.longBylineText),
contents: parser_exports.parseArray(playlistData.contents),
current_index: playlistData.currentIndex,
is_infinite: !!playlistData.isInfinite,
menu: parser_exports.parseItem(playlistData.menu, Menu)
};
}
const autoplayData = data.autoplay?.autoplay;
if (autoplayData) {
this.autoplay = {
sets: autoplayData.sets.map((set) => __privateMethod(this, _TwoColumnWatchNextResults_instances, parseAutoplaySet_fn).call(this, set))
};
if (autoplayData.modifiedSets) {
this.autoplay.modified_sets = autoplayData.modifiedSets.map((set) => __privateMethod(this, _TwoColumnWatchNextResults_instances, parseAutoplaySet_fn).call(this, set));
}
if (autoplayData.countDownSecs) {
this.autoplay.count_down_secs = autoplayData.countDownSecs;
}
}
}
};
_TwoColumnWatchNextResults_instances = new WeakSet();
parseAutoplaySet_fn = /* @__PURE__ */ __name(function(data) {
const result = {
autoplay_video: new NavigationEndpoint(data.autoplayVideo)
};
if (data.nextButtonVideo) {
result.next_button_video = new NavigationEndpoint(data.nextButtonVideo);
}
return result;
}, "#parseAutoplaySet");
__name(_TwoColumnWatchNextResults, "TwoColumnWatchNextResults");
__publicField(_TwoColumnWatchNextResults, "type", "TwoColumnWatchNextResults");
var TwoColumnWatchNextResults = _TwoColumnWatchNextResults;
// dist/src/parser/classes/UnifiedSharePanel.js
var _UnifiedSharePanel = class _UnifiedSharePanel extends YTNode {
constructor(data) {
super();
__publicField(this, "third_party_network_section");
__publicField(this, "header");
__publicField(this, "share_panel_version");
__publicField(this, "show_loading_spinner");
if (data.contents) {
const contents = data.contents.find((content) => content.thirdPartyNetworkSection);
if (contents) {
this.third_party_network_section = {
share_target_container: parser_exports.parseItem(contents.thirdPartyNetworkSection.shareTargetContainer, ThirdPartyShareTargetSection),
copy_link_container: parser_exports.parseItem(contents.thirdPartyNetworkSection.copyLinkContainer, CopyLink),
start_at_container: parser_exports.parseItem(contents.thirdPartyNetworkSection.startAtContainer, StartAt)
};
}
}
this.header = parser_exports.parseItem(data.header, SharePanelHeader);
this.share_panel_version = data.sharePanelVersion;
if (Reflect.has(data, "showLoadingSpinner"))
this.show_loading_spinner = data.showLoadingSpinner;
}
};
__name(_UnifiedSharePanel, "UnifiedSharePanel");
__publicField(_UnifiedSharePanel, "type", "UnifiedSharePanel");
var UnifiedSharePanel = _UnifiedSharePanel;
// dist/src/parser/classes/UpsellDialog.js
var _UpsellDialog = class _UpsellDialog extends YTNode {
constructor(data) {
super();
__publicField(this, "message_title");
__publicField(this, "message_text");
__publicField(this, "action_button");
__publicField(this, "dismiss_button");
__publicField(this, "is_visible");
this.message_title = new Text2(data.dialogMessageTitle);
this.message_text = new Text2(data.dialogMessageText);
this.action_button = parser_exports.parseItem(data.actionButton, Button);
this.dismiss_button = parser_exports.parseItem(data.dismissButton, Button);
this.is_visible = data.isVisible;
}
};
__name(_UpsellDialog, "UpsellDialog");
__publicField(_UpsellDialog, "type", "UpsellDialog");
var UpsellDialog = _UpsellDialog;
// dist/src/parser/classes/VerticalList.js
var _VerticalList = class _VerticalList extends YTNode {
constructor(data) {
super();
__publicField(this, "items");
__publicField(this, "collapsed_item_count");
// Number?
__publicField(this, "collapsed_state_button_text");
this.items = parser_exports.parseArray(data.items);
this.collapsed_item_count = data.collapsedItemCount;
this.collapsed_state_button_text = new Text2(data.collapsedStateButtonText);
}
// XXX: Alias for consistency.
get contents() {
return this.items;
}
};
__name(_VerticalList, "VerticalList");
__publicField(_VerticalList, "type", "VerticalList");
var VerticalList = _VerticalList;
// dist/src/parser/classes/VerticalWatchCardList.js
var _VerticalWatchCardList = class _VerticalWatchCardList extends YTNode {
constructor(data) {
super();
__publicField(this, "items");
__publicField(this, "view_all_text");
__publicField(this, "view_all_endpoint");
this.items = parser_exports.parseArray(data.items);
this.view_all_text = new Text2(data.viewAllText);
this.view_all_endpoint = new NavigationEndpoint(data.viewAllEndpoint);
}
// XXX: Alias for consistency.
get contents() {
return this.items;
}
};
__name(_VerticalWatchCardList, "VerticalWatchCardList");
__publicField(_VerticalWatchCardList, "type", "VerticalWatchCardList");
var VerticalWatchCardList = _VerticalWatchCardList;
// dist/src/parser/classes/VideoInfoCardContent.js
var _VideoInfoCardContent = class _VideoInfoCardContent extends YTNode {
constructor(data) {
super();
__publicField(this, "title");
__publicField(this, "channel_name");
__publicField(this, "view_count");
__publicField(this, "video_thumbnails");
__publicField(this, "duration");
__publicField(this, "endpoint");
this.title = new Text2(data.videoTitle);
this.channel_name = new Text2(data.channelName);
this.view_count = new Text2(data.viewCountText);
this.video_thumbnails = Thumbnail.fromResponse(data.videoThumbnail);
this.duration = new Text2(data.lengthString);
this.endpoint = new NavigationEndpoint(data.action);
}
};
__name(_VideoInfoCardContent, "VideoInfoCardContent");
__publicField(_VideoInfoCardContent, "type", "VideoInfoCardContent");
var VideoInfoCardContent = _VideoInfoCardContent;
// dist/src/parser/classes/VideoMetadataCarouselView.js
var _VideoMetadataCarouselView = class _VideoMetadataCarouselView extends YTNode {
constructor(data) {
super();
__publicField(this, "carousel_titles");
__publicField(this, "carousel_items");
this.carousel_titles = parser_exports.parse(data.carouselTitles, true, CarouselTitleView);
this.carousel_items = parser_exports.parse(data.carouselItems, true, CarouselItemView);
}
};
__name(_VideoMetadataCarouselView, "VideoMetadataCarouselView");
__publicField(_VideoMetadataCarouselView, "type", "VideoMetadataCarouselView");
var VideoMetadataCarouselView = _VideoMetadataCarouselView;
// dist/src/parser/classes/misc/SubscriptionButton.js
var _SubscriptionButton = class _SubscriptionButton {
constructor(data) {
__publicField(this, "text");
__publicField(this, "subscribed");
__publicField(this, "subscription_type");
this.text = new Text2(data.text);
this.subscribed = data.isSubscribed;
if ("subscriptionType" in data)
this.subscription_type = data.subscriptionType;
}
};
__name(_SubscriptionButton, "SubscriptionButton");
__publicField(_SubscriptionButton, "type", "SubscriptionButton");
var SubscriptionButton = _SubscriptionButton;
// dist/src/parser/classes/VideoOwner.js
var _VideoOwner = class _VideoOwner extends YTNode {
constructor(data) {
super();
__publicField(this, "subscription_button");
__publicField(this, "subscriber_count");
__publicField(this, "author");
if ("subscriptionButton" in data)
this.subscription_button = new SubscriptionButton(data.subscriptionButton);
this.subscriber_count = new Text2(data.subscriberCountText);
this.author = new Author({
...data.title,
navigationEndpoint: data.navigationEndpoint
}, data.badges, data.thumbnail);
}
};
__name(_VideoOwner, "VideoOwner");
__publicField(_VideoOwner, "type", "VideoOwner");
var VideoOwner = _VideoOwner;
// dist/src/parser/classes/VideoPrimaryInfo.js
var _VideoPrimaryInfo = class _VideoPrimaryInfo extends YTNode {
constructor(data) {
super();
__publicField(this, "title");
__publicField(this, "super_title_link");
__publicField(this, "station_name");
__publicField(this, "view_count");
__publicField(this, "badges");
__publicField(this, "published");
__publicField(this, "relative_date");
__publicField(this, "menu");
this.title = new Text2(data.title);
if ("superTitleLink" in data)
this.super_title_link = new Text2(data.superTitleLink);
if ("stationName" in data)
this.station_name = new Text2(data.stationName);
this.view_count = parser_exports.parseItem(data.viewCount, VideoViewCount);
this.badges = parser_exports.parseArray(data.badges, MetadataBadge);
this.published = new Text2(data.dateText);
this.relative_date = new Text2(data.relativeDateText);
this.menu = parser_exports.parseItem(data.videoActions, Menu);
}
};
__name(_VideoPrimaryInfo, "VideoPrimaryInfo");
__publicField(_VideoPrimaryInfo, "type", "VideoPrimaryInfo");
var VideoPrimaryInfo = _VideoPrimaryInfo;
// dist/src/parser/classes/VideoSecondaryInfo.js
var _VideoSecondaryInfo = class _VideoSecondaryInfo extends YTNode {
constructor(data) {
super();
__publicField(this, "owner");
__publicField(this, "description");
__publicField(this, "description_placeholder");
__publicField(this, "subscribe_button");
__publicField(this, "metadata");
__publicField(this, "show_more_text");
__publicField(this, "show_less_text");
__publicField(this, "default_expanded");
__publicField(this, "description_collapsed_lines");
this.owner = parser_exports.parseItem(data.owner, VideoOwner);
this.description = new Text2(data.description);
if ("attributedDescription" in data)
this.description = Text2.fromAttributed(data.attributedDescription);
if ("descriptionPlaceholder" in data)
this.description_placeholder = new Text2(data.descriptionPlaceholder);
this.subscribe_button = parser_exports.parseItem(data.subscribeButton, [SubscribeButton, Button]);
this.metadata = parser_exports.parseItem(data.metadataRowContainer, MetadataRowContainer);
this.show_more_text = new Text2(data.showMoreText);
this.show_less_text = new Text2(data.showLessText);
this.default_expanded = data.defaultExpanded;
this.description_collapsed_lines = data.descriptionCollapsedLines;
}
};
__name(_VideoSecondaryInfo, "VideoSecondaryInfo");
__publicField(_VideoSecondaryInfo, "type", "VideoSecondaryInfo");
var VideoSecondaryInfo = _VideoSecondaryInfo;
// dist/src/parser/classes/WatchCardCompactVideo.js
var _WatchCardCompactVideo = class _WatchCardCompactVideo extends YTNode {
constructor(data) {
super();
__publicField(this, "title");
__publicField(this, "subtitle");
__publicField(this, "duration");
__publicField(this, "style");
this.title = new Text2(data.title);
this.subtitle = new Text2(data.subtitle);
this.duration = {
text: new Text2(data.lengthText).toString(),
seconds: timeToSeconds(data.lengthText.simpleText)
};
this.style = data.style;
}
};
__name(_WatchCardCompactVideo, "WatchCardCompactVideo");
__publicField(_WatchCardCompactVideo, "type", "WatchCardCompactVideo");
var WatchCardCompactVideo = _WatchCardCompactVideo;
// dist/src/parser/classes/WatchCardHeroVideo.js
var _WatchCardHeroVideo = class _WatchCardHeroVideo extends YTNode {
constructor(data) {
super();
__publicField(this, "endpoint");
__publicField(this, "call_to_action_button");
__publicField(this, "hero_image");
__publicField(this, "label");
this.endpoint = new NavigationEndpoint(data.navigationEndpoint);
this.call_to_action_button = parser_exports.parseItem(data.callToActionButton);
this.hero_image = parser_exports.parseItem(data.heroImage);
this.label = data.lengthText?.accessibility.accessibilityData.label || "";
}
};
__name(_WatchCardHeroVideo, "WatchCardHeroVideo");
__publicField(_WatchCardHeroVideo, "type", "WatchCardHeroVideo");
var WatchCardHeroVideo = _WatchCardHeroVideo;
// dist/src/parser/classes/WatchCardRichHeader.js
var _WatchCardRichHeader = class _WatchCardRichHeader extends YTNode {
constructor(data) {
super();
__publicField(this, "title");
__publicField(this, "title_endpoint");
__publicField(this, "subtitle");
__publicField(this, "author");
__publicField(this, "style");
this.title = new Text2(data.title);
this.title_endpoint = new NavigationEndpoint(data.titleNavigationEndpoint);
this.subtitle = new Text2(data.subtitle);
this.author = new Author(data, data.titleBadge ? [data.titleBadge] : null, data.avatar);
this.author.name = this.title.toString();
this.style = data.style;
}
};
__name(_WatchCardRichHeader, "WatchCardRichHeader");
__publicField(_WatchCardRichHeader, "type", "WatchCardRichHeader");
var WatchCardRichHeader = _WatchCardRichHeader;
// dist/src/parser/classes/WatchCardSectionSequence.js
var _WatchCardSectionSequence = class _WatchCardSectionSequence extends YTNode {
constructor(data) {
super();
__publicField(this, "lists");
this.lists = parser_exports.parseArray(data.lists);
}
};
__name(_WatchCardSectionSequence, "WatchCardSectionSequence");
__publicField(_WatchCardSectionSequence, "type", "WatchCardSectionSequence");
var WatchCardSectionSequence = _WatchCardSectionSequence;
// dist/src/parser/classes/WatchNextTabbedResults.js
var _WatchNextTabbedResults = class _WatchNextTabbedResults extends TwoColumnBrowseResults {
constructor(data) {
super(data);
}
};
__name(_WatchNextTabbedResults, "WatchNextTabbedResults");
__publicField(_WatchNextTabbedResults, "type", "WatchNextTabbedResults");
var WatchNextTabbedResults = _WatchNextTabbedResults;
// dist/src/parser/classes/ytkids/AnchoredSection.js
var _AnchoredSection = class _AnchoredSection extends YTNode {
constructor(data) {
super();
__publicField(this, "title");
__publicField(this, "content");
__publicField(this, "endpoint");
__publicField(this, "category_assets");
__publicField(this, "category_type");
this.title = data.title;
this.content = parser_exports.parseItem(data.content, SectionList);
this.endpoint = new NavigationEndpoint(data.navigationEndpoint);
this.category_assets = {
asset_key: data.categoryAssets?.assetKey,
background_color: data.categoryAssets?.backgroundColor
};
this.category_type = data.categoryType;
}
};
__name(_AnchoredSection, "AnchoredSection");
__publicField(_AnchoredSection, "type", "AnchoredSection");
var AnchoredSection = _AnchoredSection;
// dist/src/parser/classes/ytkids/KidsBlocklistPickerItem.js
var _actions3;
var _KidsBlocklistPickerItem = class _KidsBlocklistPickerItem extends YTNode {
constructor(data) {
super();
__privateAdd(this, _actions3);
__publicField(this, "child_display_name");
__publicField(this, "child_account_description");
__publicField(this, "avatar");
__publicField(this, "block_button");
__publicField(this, "blocked_entity_key");
this.child_display_name = new Text2(data.childDisplayName);
this.child_account_description = new Text2(data.childAccountDescription);
this.avatar = Thumbnail.fromResponse(data.avatar);
this.block_button = parser_exports.parseItem(data.blockButton, [ToggleButton]);
this.blocked_entity_key = data.blockedEntityKey;
}
async blockChannel() {
if (!__privateGet(this, _actions3))
throw new InnertubeError("An active caller must be provide to perform this operation.");
const button = this.block_button;
if (!button)
throw new InnertubeError("Block button was not found.", { child_display_name: this.child_display_name });
if (button.is_toggled)
throw new InnertubeError("This channel is already blocked.", { child_display_name: this.child_display_name });
const response = await button.endpoint.call(__privateGet(this, _actions3), { parse: false });
return response;
}
setActions(actions) {
__privateSet(this, _actions3, actions);
}
};
_actions3 = new WeakMap();
__name(_KidsBlocklistPickerItem, "KidsBlocklistPickerItem");
__publicField(_KidsBlocklistPickerItem, "type", "KidsBlocklistPickerItem");
var KidsBlocklistPickerItem = _KidsBlocklistPickerItem;
// dist/src/parser/classes/ytkids/KidsBlocklistPicker.js
var _KidsBlocklistPicker = class _KidsBlocklistPicker extends YTNode {
constructor(data) {
super();
__publicField(this, "title");
__publicField(this, "child_rows");
__publicField(this, "done_button");
__publicField(this, "successful_toast_action_message");
this.title = new Text2(data.title);
this.child_rows = parser_exports.parse(data.childRows, true, [KidsBlocklistPickerItem]);
this.done_button = parser_exports.parseItem(data.doneButton, [Button]);
this.successful_toast_action_message = new Text2(data.successfulToastActionMessage);
}
};
__name(_KidsBlocklistPicker, "KidsBlocklistPicker");
__publicField(_KidsBlocklistPicker, "type", "KidsBlocklistPicker");
var KidsBlocklistPicker = _KidsBlocklistPicker;
// dist/src/parser/classes/ytkids/KidsCategoryTab.js
var _KidsCategoryTab = class _KidsCategoryTab extends YTNode {
constructor(data) {
super();
__publicField(this, "title");
__publicField(this, "category_assets");
__publicField(this, "category_type");
__publicField(this, "endpoint");
this.title = new Text2(data.title);
this.category_assets = {
asset_key: data.categoryAssets?.assetKey,
background_color: data.categoryAssets?.backgroundColor
};
this.category_type = data.categoryType;
this.endpoint = new NavigationEndpoint(data.endpoint);
}
};
__name(_KidsCategoryTab, "KidsCategoryTab");
__publicField(_KidsCategoryTab, "type", "KidsCategoryTab");
var KidsCategoryTab = _KidsCategoryTab;
// dist/src/parser/classes/ytkids/KidsCategoriesHeader.js
var _KidsCategoriesHeader = class _KidsCategoriesHeader extends YTNode {
constructor(data) {
super();
__publicField(this, "category_tabs");
__publicField(this, "privacy_button");
this.category_tabs = parser_exports.parseArray(data.categoryTabs, KidsCategoryTab);
this.privacy_button = parser_exports.parseItem(data.privacyButtonRenderer, Button);
}
};
__name(_KidsCategoriesHeader, "KidsCategoriesHeader");
__publicField(_KidsCategoriesHeader, "type", "kidsCategoriesHeader");
var KidsCategoriesHeader = _KidsCategoriesHeader;
// dist/src/parser/classes/ytkids/KidsHomeScreen.js
var _KidsHomeScreen = class _KidsHomeScreen extends YTNode {
constructor(data) {
super();
__publicField(this, "anchors");
this.anchors = parser_exports.parseArray(data.anchors, AnchoredSection);
}
};
__name(_KidsHomeScreen, "KidsHomeScreen");
__publicField(_KidsHomeScreen, "type", "kidsHomeScreen");
var KidsHomeScreen = _KidsHomeScreen;
// dist/src/parser/generator.js
var generator_exports = {};
__export(generator_exports, {
camelToSnake: () => camelToSnake,
createRuntimeClass: () => createRuntimeClass,
generateRuntimeClass: () => generateRuntimeClass,
generateTypescriptClass: () => generateTypescriptClass,
inferType: () => inferType,
introspect: () => introspect,
isArrayType: () => isArrayType,
isIgnoredKey: () => isIgnoredKey,
isMiscType: () => isMiscType,
isRenderer: () => isRenderer,
isRendererList: () => isRendererList,
mergeKeyInfo: () => mergeKeyInfo,
parse: () => parse2,
toParser: () => toParser,
toTypeDeclaration: () => toTypeDeclaration
});
var IGNORED_KEYS = /* @__PURE__ */ new Set([
"trackingParams",
"accessibility",
"accessibilityData"
]);
var RENDERER_EXAMPLES = {};
function camelToSnake(str) {
return str.replace(/[A-Z]/g, (letter) => `_${letter.toLowerCase()}`);
}
__name(camelToSnake, "camelToSnake");
function inferType(key, value) {
let return_value = false;
if (typeof value === "object" && value != null) {
if (return_value = isRenderer(value)) {
RENDERER_EXAMPLES[return_value] = Reflect.get(value, Reflect.ownKeys(value)[0]);
return {
type: "renderer",
renderers: [return_value],
optional: false
};
}
if (return_value = isRendererList(value)) {
for (const [key2, value2] of Object.entries(return_value)) {
RENDERER_EXAMPLES[key2] = value2;
}
return {
type: "array",
array_type: "renderer",
renderers: Object.keys(return_value),
optional: false
};
}
if (return_value = isMiscType(key, value)) {
return return_value;
}
if (return_value = isArrayType(value)) {
return return_value;
}
}
const primitive_type = typeof value;
if (primitive_type === "object")
return {
type: "object",
keys: Object.entries(value).map(([key2, value2]) => [key2, inferType(key2, value2)]),
optional: false
};
return {
type: "primitive",
typeof: [primitive_type],
optional: false
};
}
__name(inferType, "inferType");
function isRendererList(value) {
const arr = Array.isArray(value);
if (arr && value.length === 0)
return false;
const is_list = arr && value.every((item) => isRenderer(item));
return is_list ? Object.fromEntries(value.map((item) => {
const key = Reflect.ownKeys(item)[0].toString();
return [sanitizeClassName(key), item[key]];
})) : false;
}
__name(isRendererList, "isRendererList");
function isMiscType(key, value) {
if (typeof value === "object" && value !== null) {
if (key.endsWith("Endpoint") || key.endsWith("Command") || key === "endpoint") {
return {
type: "misc",
endpoint: new NavigationEndpoint(value),
optional: false,
misc_type: "NavigationEndpoint"
};
}
if (Reflect.has(value, "simpleText") || Reflect.has(value, "runs")) {
const textNode = new Text2(value);
return {
type: "misc",
misc_type: "Text",
optional: false,
endpoint: textNode.endpoint,
text: textNode.toString()
};
}
if (Reflect.has(value, "thumbnails") && Array.isArray(Reflect.get(value, "thumbnails"))) {
return {
type: "misc",
misc_type: "Thumbnail",
optional: false
};
}
}
return false;
}
__name(isMiscType, "isMiscType");
function isRenderer(value) {
const is_object = typeof value === "object";
if (!is_object)
return false;
const keys = Reflect.ownKeys(value);
if (keys.length === 1) {
const first_key = keys[0].toString();
if (first_key.endsWith("Renderer") || first_key.endsWith("Model")) {
return sanitizeClassName(first_key);
}
}
return false;
}
__name(isRenderer, "isRenderer");
function isArrayType(value) {
if (!Array.isArray(value))
return false;
if (value.length === 0)
return {
type: "array",
array_type: "primitive",
items: {
type: "primitive",
typeof: ["never"],
optional: false
},
optional: false
};
const array_entry_types = value.map((item) => typeof item);
const all_same_type = array_entry_types.every((type2) => type2 === array_entry_types[0]);
if (!all_same_type)
return {
type: "array",
array_type: "primitive",
items: {
type: "primitive",
typeof: ["unknown"],
optional: false
},
optional: false
};
const type = array_entry_types[0];
if (type !== "object")
return {
type: "array",
array_type: "primitive",
items: {
type: "primitive",
typeof: [type],
optional: false
},
optional: false
};
let key_type = [];
for (let i = 0; i < value.length; i++) {
const current_keys = Object.entries(value[i]).map(([key, value2]) => [key, inferType(key, value2)]);
if (i === 0) {
key_type = current_keys;
continue;
}
key_type = mergeKeyInfo(key_type, current_keys).resolved_key_info;
}
return {
type: "array",
array_type: "object",
items: {
type: "object",
keys: key_type,
optional: false
},
optional: false
};
}
__name(isArrayType, "isArrayType");
function introspectKeysFirstPass(classdata) {
if (typeof classdata !== "object" || classdata === null) {
throw new InnertubeError("Generator: Cannot introspect non-object", {
classdata
});
}
const keys = Reflect.ownKeys(classdata).filter((key) => !isIgnoredKey(key)).filter((key) => typeof key === "string");
return keys.map((key) => {
const value = Reflect.get(classdata, key);
const inferred_type = inferType(key, value);
return [key, inferred_type];
});
}
__name(introspectKeysFirstPass, "introspectKeysFirstPass");
function introspectKeysSecondPass(key_info) {
const channel_nav = key_info.filter(([, value]) => {
if (value.type !== "misc")
return false;
if (!(value.misc_type === "NavigationEndpoint" || value.misc_type === "Text"))
return false;
return value.endpoint?.metadata.page_type === "WEB_PAGE_TYPE_CHANNEL";
});
const most_probable_match = channel_nav.sort(([, a], [, b]) => {
if (a.type !== "misc" || b.type !== "misc")
return 0;
if (a.misc_type !== "Text" || b.misc_type !== "Text")
return 0;
return b.text.length - a.text.length;
});
const excluded_keys = /* @__PURE__ */ new Set();
const canonical_channel_nave = most_probable_match[0];
let author;
if (canonical_channel_nave) {
excluded_keys.add(canonical_channel_nave[0]);
const keys = key_info.map(([key]) => key);
const badges = keys.filter((key) => key.endsWith("Badges") || key === "badges");
const likely_badges = badges.filter((key) => key.startsWith("owner") || key.startsWith("author"));
const canonical_badges = likely_badges[0] ?? badges[0];
const badge_key_info = key_info.find(([key]) => key === canonical_badges);
const is_badges = badge_key_info ? badge_key_info[1].type === "array" && badge_key_info[1].array_type === "renderer" && Reflect.has(badge_key_info[1].renderers, "MetadataBadge") : false;
if (is_badges && canonical_badges)
excluded_keys.add(canonical_badges);
author = {
type: "misc",
misc_type: "Author",
optional: false,
params: [
canonical_channel_nave[0],
is_badges ? canonical_badges : void 0
]
};
}
if (author) {
key_info.push(["author", author]);
}
return key_info.filter(([key]) => !excluded_keys.has(key));
}
__name(introspectKeysSecondPass, "introspectKeysSecondPass");
function introspect2(classdata) {
const key_info = introspectKeysFirstPass(classdata);
return introspectKeysSecondPass(key_info);
}
__name(introspect2, "introspect2");
function introspect(classdata) {
const key_info = introspect2(classdata);
const dependencies = /* @__PURE__ */ new Map();
for (const [, value] of key_info) {
if (value.type === "renderer" || value.type === "array" && value.array_type === "renderer")
for (const renderer of value.renderers) {
const example = RENDERER_EXAMPLES[renderer];
if (example)
dependencies.set(renderer, example);
}
}
const unimplemented_dependencies = Array.from(dependencies).filter(([classname]) => !hasParser(classname));
return {
key_info,
unimplemented_dependencies
};
}
__name(introspect, "introspect");
function isIgnoredKey(key) {
return typeof key === "string" && IGNORED_KEYS.has(key);
}
__name(isIgnoredKey, "isIgnoredKey");
function createRuntimeClass(classname, key_info, logger) {
var _a, _key_info;
logger({
error_type: "class_not_found",
classname,
key_info
});
const node = (_a = class extends YTNode {
static set key_info(key_info2) {
__privateSet(this, _key_info, new Map(key_info2));
}
static get key_info() {
return [...__privateGet(this, _key_info).entries()];
}
constructor(data) {
super();
const { key_info: key_info2, unimplemented_dependencies } = introspect(data);
const { resolved_key_info, changed_keys } = mergeKeyInfo(node.key_info, key_info2);
const did_change = changed_keys.length > 0;
if (did_change) {
node.key_info = resolved_key_info;
logger({
error_type: "class_changed",
classname,
key_info: node.key_info,
changed_keys
});
}
for (const [name, data2] of unimplemented_dependencies)
generateRuntimeClass(name, data2, logger);
for (const [key, value] of key_info2) {
let snake_key = camelToSnake(key);
if (value.type === "misc" && value.misc_type === "NavigationEndpoint")
snake_key = "endpoint";
Reflect.set(this, snake_key, parse2(key, value, data));
}
}
}, _key_info = new WeakMap(), __name(_a, "node"), __publicField(_a, "type", classname), __privateAdd(_a, _key_info, /* @__PURE__ */ new Map()), _a);
node.key_info = key_info;
Object.defineProperty(node, "name", { value: classname, writable: false });
return node;
}
__name(createRuntimeClass, "createRuntimeClass");
function generateRuntimeClass(classname, classdata, logger) {
const { key_info, unimplemented_dependencies } = introspect(classdata);
const JITNode = createRuntimeClass(classname, key_info, logger);
addRuntimeParser(classname, JITNode);
for (const [name, data] of unimplemented_dependencies)
generateRuntimeClass(name, data, logger);
return JITNode;
}
__name(generateRuntimeClass, "generateRuntimeClass");
function generateTypescriptClass(classname, key_info) {
const props = [];
const constructor_lines = [
"super();"
];
for (const [key, value] of key_info) {
let snake_key = camelToSnake(key);
if (value.type === "misc" && value.misc_type === "NavigationEndpoint")
snake_key = "endpoint";
props.push(`${snake_key}${value.optional ? "?" : ""}: ${toTypeDeclaration(value)};`);
constructor_lines.push(`this.${snake_key} = ${toParser(key, value)};`);
}
return `class ${classname} extends YTNode {
static type = '${classname}';
${props.join("\n ")}
constructor(data: RawNode) {
${constructor_lines.join("\n ")}
}
}
`;
}
__name(generateTypescriptClass, "generateTypescriptClass");
function toTypeDeclarationObject(indentation, keys) {
return `{
${keys.map(([key, value]) => `${" ".repeat((indentation + 2) * 2)}${camelToSnake(key)}${value.optional ? "?" : ""}: ${toTypeDeclaration(value, indentation + 1)}`).join(",\n")}
${" ".repeat((indentation + 1) * 2)}}`;
}
__name(toTypeDeclarationObject, "toTypeDeclarationObject");
function toTypeDeclaration(inference_type, indentation = 0) {
switch (inference_type.type) {
case "renderer": {
return `${inference_type.renderers.map((type) => `YTNodes.${type}`).join(" | ")} | null`;
}
case "array": {
switch (inference_type.array_type) {
case "renderer":
return `ObservedArray<${inference_type.renderers.map((type) => `YTNodes.${type}`).join(" | ")}> | null`;
case "primitive": {
const items_list = inference_type.items.typeof;
if (inference_type.items.optional && !items_list.includes("undefined"))
items_list.push("undefined");
const items = items_list.length === 1 ? `${items_list[0]}` : `(${items_list.join(" | ")})`;
return `${items}[]`;
}
case "object":
return `${toTypeDeclarationObject(indentation, inference_type.items.keys)}[]`;
default:
throw new Error("Unreachable code reached! Switch missing case!");
}
}
case "object": {
return toTypeDeclarationObject(indentation, inference_type.keys);
}
case "misc": {
switch (inference_type.misc_type) {
case "Thumbnail":
return "Thumbnail[]";
default:
return inference_type.misc_type;
}
}
case "primitive": {
return inference_type.typeof.join(" | ");
}
}
}
__name(toTypeDeclaration, "toTypeDeclaration");
function toParserObject(indentation, keys, key_path, key) {
const new_keypath = [...key_path, key];
return `{
${keys.map(([key2, value]) => `${" ".repeat((indentation + 2) * 2)}${camelToSnake(key2)}: ${toParser(key2, value, new_keypath, indentation + 1)}`).join(",\n")}
${" ".repeat((indentation + 1) * 2)}}`;
}
__name(toParserObject, "toParserObject");
function toParser(key, inference_type, key_path = ["data"], indentation = 1) {
let parser = "undefined";
switch (inference_type.type) {
case "renderer":
{
parser = `Parser.parseItem(${key_path.join(".")}.${key}, ${toParserValidTypes(inference_type.renderers)})`;
}
break;
case "array":
{
switch (inference_type.array_type) {
case "renderer":
parser = `Parser.parse(${key_path.join(".")}.${key}, true, ${toParserValidTypes(inference_type.renderers)})`;
break;
case "object":
parser = `${key_path.join(".")}.${key}.map((item: any) => (${toParserObject(indentation, inference_type.items.keys, [], "item")}))`;
break;
case "primitive":
parser = `${key_path.join(".")}.${key}`;
break;
default:
throw new Error("Unreachable code reached! Switch missing case!");
}
}
break;
case "object":
{
parser = toParserObject(indentation, inference_type.keys, key_path, key);
}
break;
case "misc":
switch (inference_type.misc_type) {
case "Thumbnail":
parser = `Thumbnail.fromResponse(${key_path.join(".")}.${key})`;
break;
case "Author": {
const author_parser = `new Author(${key_path.join(".")}.${inference_type.params[0]}, ${inference_type.params[1] ? `${key_path.join(".")}.${inference_type.params[1]}` : "undefined"})`;
if (inference_type.optional)
return `Reflect.has(${key_path.join(".")}, '${inference_type.params[0]}') ? ${author_parser} : undefined`;
return author_parser;
}
default:
parser = `new ${inference_type.misc_type}(${key_path.join(".")}.${key})`;
break;
}
if (parser === "undefined")
throw new Error("Unreachable code reached! Switch missing case!");
break;
case "primitive":
parser = `${key_path.join(".")}.${key}`;
break;
}
if (inference_type.optional)
return `Reflect.has(${key_path.join(".")}, '${key}') ? ${parser} : undefined`;
return parser;
}
__name(toParser, "toParser");
function toParserValidTypes(types) {
if (types.length === 1) {
return `YTNodes.${types[0]}`;
}
return `[ ${types.map((type) => `YTNodes.${type}`).join(", ")} ]`;
}
__name(toParserValidTypes, "toParserValidTypes");
function accessDataFromKeyPath(root, key_path) {
let data = root;
for (const key of key_path)
data = data[key];
return data;
}
__name(accessDataFromKeyPath, "accessDataFromKeyPath");
function hasDataFromKeyPath(root, key_path) {
let data = root;
for (const key of key_path)
if (!Reflect.has(data, key))
return false;
else
data = data[key];
return true;
}
__name(hasDataFromKeyPath, "hasDataFromKeyPath");
function parseObject(key, data, key_path, keys, should_optional) {
const obj = {};
const new_key_path = [...key_path, key];
for (const [key2, value] of keys) {
obj[key2] = should_optional ? parse2(key2, value, data, new_key_path) : void 0;
}
return obj;
}
__name(parseObject, "parseObject");
function parse2(key, inference_type, data, key_path = ["data"]) {
const should_optional = !inference_type.optional || hasDataFromKeyPath({ data }, [...key_path, key]);
switch (inference_type.type) {
case "renderer": {
return should_optional ? parseItem(accessDataFromKeyPath({ data }, [...key_path, key]), inference_type.renderers.map((type) => getParserByName(type))) : void 0;
}
case "array": {
switch (inference_type.array_type) {
case "renderer":
return should_optional ? parse(accessDataFromKeyPath({ data }, [...key_path, key]), true, inference_type.renderers.map((type) => getParserByName(type))) : void 0;
case "object":
return should_optional ? accessDataFromKeyPath({ data }, [...key_path, key]).map((_, idx) => {
return parseObject(`${idx}`, data, [...key_path, key], inference_type.items.keys, should_optional);
}) : void 0;
case "primitive":
return should_optional ? accessDataFromKeyPath({ data }, [...key_path, key]) : void 0;
default:
throw new Error("Unreachable code reached! Switch missing case!");
}
}
case "object": {
return parseObject(key, data, key_path, inference_type.keys, should_optional);
}
case "misc":
switch (inference_type.misc_type) {
case "NavigationEndpoint":
return should_optional ? new NavigationEndpoint(accessDataFromKeyPath({ data }, [...key_path, key])) : void 0;
case "Text":
return should_optional ? new Text2(accessDataFromKeyPath({ data }, [...key_path, key])) : void 0;
case "Thumbnail":
return should_optional ? Thumbnail.fromResponse(accessDataFromKeyPath({ data }, [...key_path, key])) : void 0;
case "Author": {
const author_should_optional = !inference_type.optional || hasDataFromKeyPath({ data }, [...key_path, inference_type.params[0]]);
return author_should_optional ? new Author(accessDataFromKeyPath({ data }, [...key_path, inference_type.params[0]]), inference_type.params[1] ? accessDataFromKeyPath({ data }, [...key_path, inference_type.params[1]]) : void 0) : void 0;
}
default:
throw new Error("Unreachable code reached! Switch missing case!");
}
case "primitive":
return accessDataFromKeyPath({ data }, [...key_path, key]);
}
}
__name(parse2, "parse");
function mergeKeyInfo(key_info, new_key_info) {
const changed_keys = /* @__PURE__ */ new Map();
const current_keys = new Set(key_info.map(([key]) => key));
const new_keys = new Set(new_key_info.map(([key]) => key));
const added_keys = new_key_info.filter(([key]) => !current_keys.has(key));
const removed_keys = key_info.filter(([key]) => !new_keys.has(key));
const common_keys = key_info.filter(([key]) => new_keys.has(key));
const new_key_map = new Map(new_key_info);
for (const [key, type] of common_keys) {
const new_type = new_key_map.get(key);
if (!new_type)
continue;
if (type.type !== new_type.type) {
changed_keys.set(key, {
type: "primitive",
typeof: ["unknown"],
optional: true
});
continue;
}
switch (type.type) {
case "object":
{
if (new_type.type !== "object")
continue;
const { resolved_key_info: resolved_key_info2 } = mergeKeyInfo(type.keys, new_type.keys);
const resolved_key = {
type: "object",
keys: resolved_key_info2,
optional: type.optional || new_type.optional
};
const did_change = JSON.stringify(resolved_key) !== JSON.stringify(type);
if (did_change)
changed_keys.set(key, resolved_key);
}
break;
case "renderer":
{
if (new_type.type !== "renderer")
continue;
const union_map = {
...type.renderers,
...new_type.renderers
};
const either_optional = type.optional || new_type.optional;
const resolved_key = {
type: "renderer",
renderers: union_map,
optional: either_optional
};
const did_change = JSON.stringify({
...resolved_key,
renderers: Object.keys(resolved_key.renderers)
}) !== JSON.stringify({
...type,
renderers: Object.keys(type.renderers)
});
if (did_change)
changed_keys.set(key, resolved_key);
}
break;
case "array": {
if (new_type.type !== "array")
continue;
switch (type.array_type) {
case "renderer":
{
if (new_type.array_type !== "renderer") {
changed_keys.set(key, {
type: "array",
array_type: "primitive",
items: {
type: "primitive",
typeof: ["unknown"],
optional: true
},
optional: true
});
continue;
}
const union_map = {
...type.renderers,
...new_type.renderers
};
const either_optional = type.optional || new_type.optional;
const resolved_key = {
type: "array",
array_type: "renderer",
renderers: union_map,
optional: either_optional
};
const did_change = JSON.stringify({
...resolved_key,
renderers: Object.keys(resolved_key.renderers)
}) !== JSON.stringify({
...type,
renderers: Object.keys(type.renderers)
});
if (did_change)
changed_keys.set(key, resolved_key);
}
break;
case "object":
{
if (new_type.array_type === "primitive" && new_type.items.typeof.length == 1 && new_type.items.typeof[0] === "never") {
continue;
}
if (new_type.array_type !== "object") {
changed_keys.set(key, {
type: "array",
array_type: "primitive",
items: {
type: "primitive",
typeof: ["unknown"],
optional: true
},
optional: true
});
continue;
}
const { resolved_key_info: resolved_key_info2 } = mergeKeyInfo(type.items.keys, new_type.items.keys);
const resolved_key = {
type: "array",
array_type: "object",
items: {
type: "object",
keys: resolved_key_info2,
optional: type.items.optional || new_type.items.optional
},
optional: type.optional || new_type.optional
};
const did_change = JSON.stringify(resolved_key) !== JSON.stringify(type);
if (did_change)
changed_keys.set(key, resolved_key);
}
break;
case "primitive":
{
if (type.items.typeof.includes("never") && new_type.array_type === "object") {
changed_keys.set(key, new_type);
continue;
}
if (new_type.array_type !== "primitive") {
changed_keys.set(key, {
type: "array",
array_type: "primitive",
items: {
type: "primitive",
typeof: ["unknown"],
optional: true
},
optional: true
});
continue;
}
const key_types = /* @__PURE__ */ new Set([...new_type.items.typeof, ...type.items.typeof]);
if (key_types.size > 1 && key_types.has("never"))
key_types.delete("never");
const resolved_key = {
type: "array",
array_type: "primitive",
items: {
type: "primitive",
typeof: Array.from(key_types),
optional: type.items.optional || new_type.items.optional
},
optional: type.optional || new_type.optional
};
const did_change = JSON.stringify(resolved_key) !== JSON.stringify(type);
if (did_change)
changed_keys.set(key, resolved_key);
}
break;
default:
throw new Error("Unreachable code reached! Switch missing case!");
}
break;
}
case "misc":
{
if (new_type.type !== "misc")
continue;
if (type.misc_type !== new_type.misc_type) {
changed_keys.set(key, {
type: "primitive",
typeof: ["unknown"],
optional: true
});
}
switch (type.misc_type) {
case "Author":
{
if (new_type.misc_type !== "Author")
break;
const had_optional_param = type.params[1] || new_type.params[1];
const either_optional = type.optional || new_type.optional;
const resolved_key = {
type: "misc",
misc_type: "Author",
optional: either_optional,
params: [new_type.params[0], had_optional_param]
};
const did_change = JSON.stringify(resolved_key) !== JSON.stringify(type);
if (did_change)
changed_keys.set(key, resolved_key);
}
break;
}
}
break;
case "primitive":
{
if (new_type.type !== "primitive")
continue;
const resolved_key = {
type: "primitive",
typeof: Array.from(/* @__PURE__ */ new Set([...new_type.typeof, ...type.typeof])),
optional: type.optional || new_type.optional
};
const did_change = JSON.stringify(resolved_key) !== JSON.stringify(type);
if (did_change)
changed_keys.set(key, resolved_key);
}
break;
}
}
for (const [key, type] of added_keys) {
changed_keys.set(key, {
...type,
optional: true
});
}
for (const [key, type] of removed_keys) {
changed_keys.set(key, {
...type,
optional: true
});
}
const unchanged_keys = key_info.filter(([key]) => !changed_keys.has(key));
const resolved_key_info_map = new Map([...unchanged_keys, ...changed_keys]);
const resolved_key_info = [...resolved_key_info_map.entries()];
return {
resolved_key_info,
changed_keys: [...changed_keys.entries()]
};
}
__name(mergeKeyInfo, "mergeKeyInfo");
// dist/src/parser/continuations.js
var _ItemSectionContinuation = class _ItemSectionContinuation extends YTNode {
constructor(data) {
super();
__publicField(this, "contents");
__publicField(this, "continuation");
this.contents = parseArray(data.contents);
if (Array.isArray(data.continuations)) {
this.continuation = data.continuations?.at(0)?.nextContinuationData?.continuation;
}
}
};
__name(_ItemSectionContinuation, "ItemSectionContinuation");
__publicField(_ItemSectionContinuation, "type", "itemSectionContinuation");
var ItemSectionContinuation = _ItemSectionContinuation;
var _NavigateAction = class _NavigateAction extends YTNode {
constructor(data) {
super();
__publicField(this, "endpoint");
this.endpoint = new NavigationEndpoint(data.endpoint);
}
};
__name(_NavigateAction, "NavigateAction");
__publicField(_NavigateAction, "type", "navigateAction");
var NavigateAction = _NavigateAction;
var _ShowMiniplayerCommand = class _ShowMiniplayerCommand extends YTNode {
constructor(data) {
super();
__publicField(this, "miniplayer_command");
__publicField(this, "show_premium_branding");
this.miniplayer_command = new NavigationEndpoint(data.miniplayerCommand);
this.show_premium_branding = data.showPremiumBranding;
}
};
__name(_ShowMiniplayerCommand, "ShowMiniplayerCommand");
__publicField(_ShowMiniplayerCommand, "type", "showMiniplayerCommand");
var ShowMiniplayerCommand = _ShowMiniplayerCommand;
var _ReloadContinuationItemsCommand = class _ReloadContinuationItemsCommand extends YTNode {
constructor(data) {
super();
__publicField(this, "target_id");
__publicField(this, "contents");
__publicField(this, "slot");
this.target_id = data.targetId;
this.contents = parse(data.continuationItems, true);
this.slot = data?.slot;
}
};
__name(_ReloadContinuationItemsCommand, "ReloadContinuationItemsCommand");
__publicField(_ReloadContinuationItemsCommand, "type", "reloadContinuationItemsCommand");
var ReloadContinuationItemsCommand = _ReloadContinuationItemsCommand;
var _SectionListContinuation = class _SectionListContinuation extends YTNode {
constructor(data) {
super();
__publicField(this, "continuation");
__publicField(this, "contents");
this.contents = parse(data.contents, true);
this.continuation = data.continuations?.[0]?.nextContinuationData?.continuation || data.continuations?.[0]?.reloadContinuationData?.continuation || null;
}
};
__name(_SectionListContinuation, "SectionListContinuation");
__publicField(_SectionListContinuation, "type", "sectionListContinuation");
var SectionListContinuation = _SectionListContinuation;
var _MusicPlaylistShelfContinuation = class _MusicPlaylistShelfContinuation extends YTNode {
constructor(data) {
super();
__publicField(this, "continuation");
__publicField(this, "contents");
this.contents = parse(data.contents, true);
this.continuation = data.continuations?.[0].nextContinuationData.continuation || null;
}
};
__name(_MusicPlaylistShelfContinuation, "MusicPlaylistShelfContinuation");
__publicField(_MusicPlaylistShelfContinuation, "type", "musicPlaylistShelfContinuation");
var MusicPlaylistShelfContinuation = _MusicPlaylistShelfContinuation;
var _MusicShelfContinuation = class _MusicShelfContinuation extends YTNode {
constructor(data) {
super();
__publicField(this, "continuation");
__publicField(this, "contents");
this.contents = parseArray(data.contents);
this.continuation = data.continuations?.[0].nextContinuationData?.continuation || data.continuations?.[0].reloadContinuationData?.continuation || null;
}
};
__name(_MusicShelfContinuation, "MusicShelfContinuation");
__publicField(_MusicShelfContinuation, "type", "musicShelfContinuation");
var MusicShelfContinuation = _MusicShelfContinuation;
var _GridContinuation = class _GridContinuation extends YTNode {
constructor(data) {
super();
__publicField(this, "continuation");
__publicField(this, "items");
this.items = parse(data.items, true);
this.continuation = data.continuations?.[0].nextContinuationData.continuation || null;
}
get contents() {
return this.items;
}
};
__name(_GridContinuation, "GridContinuation");
__publicField(_GridContinuation, "type", "gridContinuation");
var GridContinuation = _GridContinuation;
var _PlaylistPanelContinuation = class _PlaylistPanelContinuation extends YTNode {
constructor(data) {
super();
__publicField(this, "continuation");
__publicField(this, "contents");
this.contents = parseArray(data.contents);
this.continuation = data.continuations?.[0]?.nextContinuationData?.continuation || data.continuations?.[0]?.nextRadioContinuationData?.continuation || null;
}
};
__name(_PlaylistPanelContinuation, "PlaylistPanelContinuation");
__publicField(_PlaylistPanelContinuation, "type", "playlistPanelContinuation");
var PlaylistPanelContinuation = _PlaylistPanelContinuation;
var _Continuation = class _Continuation extends YTNode {
constructor(data) {
super();
__publicField(this, "continuation_type");
__publicField(this, "timeout_ms");
__publicField(this, "time_until_last_message_ms");
__publicField(this, "token");
this.continuation_type = data.type;
this.timeout_ms = data.continuation?.timeoutMs;
this.time_until_last_message_ms = data.continuation?.timeUntilLastMessageMsec;
this.token = data.continuation?.continuation;
}
};
__name(_Continuation, "Continuation");
__publicField(_Continuation, "type", "continuation");
var Continuation = _Continuation;
var _LiveChatContinuation = class _LiveChatContinuation extends YTNode {
constructor(data) {
super();
__publicField(this, "actions");
__publicField(this, "action_panel");
__publicField(this, "item_list");
__publicField(this, "header");
__publicField(this, "participants_list");
__publicField(this, "popout_message");
__publicField(this, "emojis");
__publicField(this, "continuation");
__publicField(this, "viewer_name");
this.actions = parse(data.actions?.map((action) => {
delete action.clickTrackingParams;
return action;
}), true) || observe([]);
this.action_panel = parseItem(data.actionPanel);
this.item_list = parseItem(data.itemList, LiveChatItemList);
this.header = parseItem(data.header, LiveChatHeader);
this.participants_list = parseItem(data.participantsList, LiveChatParticipantsList);
this.popout_message = parseItem(data.popoutMessage, Message);
this.emojis = data.emojis?.map((emoji) => ({
emoji_id: emoji.emojiId,
shortcuts: emoji.shortcuts,
search_terms: emoji.searchTerms,
image: Thumbnail.fromResponse(emoji.image),
is_custom_emoji: emoji.isCustomEmoji
})) || [];
let continuation, type;
if (data.continuations?.[0].timedContinuationData) {
type = "timed";
continuation = data.continuations?.[0].timedContinuationData;
} else if (data.continuations?.[0].invalidationContinuationData) {
type = "invalidation";
continuation = data.continuations?.[0].invalidationContinuationData;
} else if (data.continuations?.[0].liveChatReplayContinuationData) {
type = "replay";
continuation = data.continuations?.[0].liveChatReplayContinuationData;
}
this.continuation = new Continuation({ continuation, type });
this.viewer_name = data.viewerName;
}
};
__name(_LiveChatContinuation, "LiveChatContinuation");
__publicField(_LiveChatContinuation, "type", "liveChatContinuation");
var LiveChatContinuation = _LiveChatContinuation;
var _ContinuationCommand2 = class _ContinuationCommand2 extends YTNode {
constructor(data) {
super();
__publicField(this, "request");
__publicField(this, "token");
this.request = data.request;
this.token = data.token;
}
};
__name(_ContinuationCommand2, "ContinuationCommand");
__publicField(_ContinuationCommand2, "type", "ContinuationCommand");
var ContinuationCommand2 = _ContinuationCommand2;
// dist/protos/generated/misc/common.js
function createBaseKeyValuePair() {
return { key: void 0, value: void 0 };
}
__name(createBaseKeyValuePair, "createBaseKeyValuePair");
var KeyValuePair = {
encode(message, writer = new BinaryWriter()) {
if (message.key !== void 0) {
writer.uint32(10).string(message.key);
}
if (message.value !== void 0) {
writer.uint32(18).string(message.value);
}
return writer;
},
decode(input, length) {
const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
const end = length === void 0 ? reader.len : reader.pos + length;
const message = createBaseKeyValuePair();
while (reader.pos < end) {
const tag = reader.uint32();
switch (tag >>> 3) {
case 1: {
if (tag !== 10) {
break;
}
message.key = reader.string();
continue;
}
case 2: {
if (tag !== 18) {
break;
}
message.value = reader.string();
continue;
}
}
if ((tag & 7) === 4 || tag === 0) {
break;
}
reader.skip(tag & 7);
}
return message;
}
};
function createBaseFormatXTags() {
return { xtags: [] };
}
__name(createBaseFormatXTags, "createBaseFormatXTags");
var FormatXTags = {
encode(message, writer = new BinaryWriter()) {
for (const v of message.xtags) {
KeyValuePair.encode(v, writer.uint32(10).fork()).join();
}
return writer;
},
decode(input, length) {
const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
const end = length === void 0 ? reader.len : reader.pos + length;
const message = createBaseFormatXTags();
while (reader.pos < end) {
const tag = reader.uint32();
switch (tag >>> 3) {
case 1: {
if (tag !== 10) {
break;
}
message.xtags.push(KeyValuePair.decode(reader, reader.uint32()));
continue;
}
}
if ((tag & 7) === 4 || tag === 0) {
break;
}
reader.skip(tag & 7);
}
return message;
}
};
// dist/src/parser/classes/misc/Format.js
var _this_response_nsig_cache;
var _Format = class _Format {
constructor(data, this_response_nsig_cache) {
__privateAdd(this, _this_response_nsig_cache);
__publicField(this, "itag");
__publicField(this, "url");
__publicField(this, "width");
__publicField(this, "height");
__publicField(this, "last_modified");
__publicField(this, "last_modified_ms");
__publicField(this, "content_length");
__publicField(this, "quality");
__publicField(this, "xtags");
__publicField(this, "drm_families");
__publicField(this, "fps");
__publicField(this, "quality_label");
__publicField(this, "projection_type");
__publicField(this, "average_bitrate");
__publicField(this, "bitrate");
__publicField(this, "spatial_audio_type");
__publicField(this, "target_duration_dec");
__publicField(this, "fair_play_key_uri");
__publicField(this, "stereo_layout");
__publicField(this, "max_dvr_duration_sec");
__publicField(this, "high_replication");
__publicField(this, "audio_quality");
__publicField(this, "approx_duration_ms");
__publicField(this, "audio_sample_rate");
__publicField(this, "audio_channels");
__publicField(this, "loudness_db");
__publicField(this, "signature_cipher");
__publicField(this, "is_drc");
__publicField(this, "is_vb");
__publicField(this, "is_sr");
__publicField(this, "drm_track_type");
__publicField(this, "distinct_params");
__publicField(this, "track_absolute_loudness_lkfs");
__publicField(this, "mime_type");
__publicField(this, "is_type_otf");
__publicField(this, "init_range");
__publicField(this, "index_range");
__publicField(this, "cipher");
__publicField(this, "audio_track");
__publicField(this, "has_audio");
__publicField(this, "has_video");
__publicField(this, "has_text");
__publicField(this, "language");
__publicField(this, "is_dubbed");
__publicField(this, "is_auto_dubbed");
__publicField(this, "is_descriptive");
__publicField(this, "is_secondary");
__publicField(this, "is_original");
__publicField(this, "color_info");
__publicField(this, "caption_track");
if (this_response_nsig_cache)
__privateSet(this, _this_response_nsig_cache, this_response_nsig_cache);
this.itag = data.itag;
this.mime_type = data.mimeType;
this.is_type_otf = data.type === "FORMAT_STREAM_TYPE_OTF";
this.bitrate = data.bitrate;
this.average_bitrate = data.averageBitrate;
if (Reflect.has(data, "width") && Reflect.has(data, "height")) {
this.width = parseInt(data.width);
this.height = parseInt(data.height);
}
if (Reflect.has(data, "projectionType"))
this.projection_type = data.projectionType;
if (Reflect.has(data, "stereoLayout"))
this.stereo_layout = data.stereoLayout?.replace("STEREO_LAYOUT_", "");
if (Reflect.has(data, "initRange"))
this.init_range = {
start: parseInt(data.initRange.start),
end: parseInt(data.initRange.end)
};
if (Reflect.has(data, "indexRange"))
this.index_range = {
start: parseInt(data.indexRange.start),
end: parseInt(data.indexRange.end)
};
this.last_modified = new Date(Math.floor(parseInt(data.lastModified) / 1e3));
this.last_modified_ms = data.lastModified;
if (Reflect.has(data, "contentLength"))
this.content_length = parseInt(data.contentLength);
if (Reflect.has(data, "quality"))
this.quality = data.quality;
if (Reflect.has(data, "qualityLabel"))
this.quality_label = data.qualityLabel;
if (Reflect.has(data, "fps"))
this.fps = data.fps;
if (Reflect.has(data, "url"))
this.url = data.url;
if (Reflect.has(data, "cipher"))
this.cipher = data.cipher;
if (Reflect.has(data, "signatureCipher"))
this.signature_cipher = data.signatureCipher;
if (Reflect.has(data, "audioQuality"))
this.audio_quality = data.audioQuality;
this.approx_duration_ms = parseInt(data.approxDurationMs);
if (Reflect.has(data, "audioSampleRate"))
this.audio_sample_rate = parseInt(data.audioSampleRate);
if (Reflect.has(data, "audioChannels"))
this.audio_channels = data.audioChannels;
if (Reflect.has(data, "loudnessDb"))
this.loudness_db = data.loudnessDb;
if (Reflect.has(data, "spatialAudioType"))
this.spatial_audio_type = data.spatialAudioType?.replace("SPATIAL_AUDIO_TYPE_", "");
if (Reflect.has(data, "maxDvrDurationSec"))
this.max_dvr_duration_sec = data.maxDvrDurationSec;
if (Reflect.has(data, "targetDurationSec"))
this.target_duration_dec = data.targetDurationSec;
this.has_audio = !!data.audioBitrate || !!data.audioQuality;
this.has_video = !!data.qualityLabel;
this.has_text = !!data.captionTrack;
if (Reflect.has(data, "xtags"))
this.xtags = data.xtags;
if (Reflect.has(data, "fairPlayKeyUri"))
this.fair_play_key_uri = data.fairPlayKeyUri;
if (Reflect.has(data, "drmFamilies"))
this.drm_families = data.drmFamilies;
if (Reflect.has(data, "drmTrackType"))
this.drm_track_type = data.drmTrackType;
if (Reflect.has(data, "distinctParams"))
this.distinct_params = data.distinctParams;
if (Reflect.has(data, "trackAbsoluteLoudnessLkfs"))
this.track_absolute_loudness_lkfs = data.trackAbsoluteLoudnessLkfs;
if (Reflect.has(data, "highReplication"))
this.high_replication = data.highReplication;
if (Reflect.has(data, "colorInfo"))
this.color_info = {
primaries: data.colorInfo.primaries?.replace("COLOR_PRIMARIES_", ""),
transfer_characteristics: data.colorInfo.transferCharacteristics?.replace("COLOR_TRANSFER_CHARACTERISTICS_", ""),
matrix_coefficients: data.colorInfo.matrixCoefficients?.replace("COLOR_MATRIX_COEFFICIENTS_", "")
};
if (Reflect.has(data, "audioTrack"))
this.audio_track = {
audio_is_default: data.audioTrack.audioIsDefault,
display_name: data.audioTrack.displayName,
id: data.audioTrack.id
};
if (Reflect.has(data, "captionTrack"))
this.caption_track = {
display_name: data.captionTrack.displayName,
vss_id: data.captionTrack.vssId,
language_code: data.captionTrack.languageCode,
kind: data.captionTrack.kind,
id: data.captionTrack.id
};
const xtags = this.xtags ? FormatXTags.decode(base64ToU8(decodeURIComponent(this.xtags).replace(/-/g, "+").replace(/_/g, "/"))).xtags : [];
if (this.has_audio || this.has_text) {
this.language = xtags.find((tag) => tag.key === "lang")?.value || null;
if (this.has_audio) {
this.is_drc = !!data.isDrc || xtags.some((tag) => tag.key === "drc" && tag.value === "1");
this.is_vb = !!data.isVb || xtags.some((tag) => tag.key === "vb" && tag.value === "1");
const audio_content = xtags.find((tag) => tag.key === "acont")?.value;
this.is_dubbed = audio_content === "dubbed";
this.is_descriptive = audio_content === "descriptive";
this.is_secondary = audio_content === "secondary";
this.is_auto_dubbed = audio_content === "dubbed-auto";
this.is_original = audio_content === "original" || !this.is_dubbed && !this.is_descriptive && !this.is_secondary && !this.is_auto_dubbed && !this.is_drc;
}
if (this.has_text && !this.language && this.caption_track) {
this.language = this.caption_track.language_code;
}
}
if (this.has_video) {
this.is_sr = xtags.some((tag) => tag.key === "sr" && tag.value === "1");
}
}
/**
* Deciphers the URL using the provided player instance.
* @param player - An optional instance of the Player class used to decipher the URL.
* @returns The deciphered URL as a string. If no player is provided, returns the original URL or an empty string.
*/
async decipher(player) {
if (!player)
return this.url || "";
return player.decipher(this.url, this.signature_cipher, this.cipher, __privateGet(this, _this_response_nsig_cache));
}
};
_this_response_nsig_cache = new WeakMap();
__name(_Format, "Format");
var Format = _Format;
// dist/src/parser/classes/misc/VideoDetails.js
var _VideoDetails = class _VideoDetails {
constructor(data) {
__publicField(this, "id");
__publicField(this, "channel_id");
__publicField(this, "title");
__publicField(this, "duration");
__publicField(this, "keywords");
__publicField(this, "is_owner_viewing");
__publicField(this, "short_description");
__publicField(this, "thumbnail");
__publicField(this, "allow_ratings");
__publicField(this, "view_count");
__publicField(this, "author");
__publicField(this, "is_private");
__publicField(this, "is_live");
__publicField(this, "is_live_content");
__publicField(this, "is_live_dvr_enabled");
__publicField(this, "is_upcoming");
__publicField(this, "is_crawlable");
__publicField(this, "is_post_live_dvr");
__publicField(this, "is_low_latency_live_stream");
__publicField(this, "live_chunk_readahead");
this.id = data.videoId;
this.channel_id = data.channelId;
this.title = data.title;
this.duration = parseInt(data.lengthSeconds);
this.keywords = data.keywords;
this.is_owner_viewing = !!data.isOwnerViewing;
this.short_description = data.shortDescription;
this.thumbnail = Thumbnail.fromResponse(data.thumbnail);
this.allow_ratings = !!data.allowRatings;
this.view_count = parseInt(data.viewCount);
this.author = data.author;
this.is_private = !!data.isPrivate;
this.is_live = !!data.isLive;
this.is_live_content = !!data.isLiveContent;
this.is_live_dvr_enabled = !!data.isLiveDvrEnabled;
this.is_low_latency_live_stream = !!data.isLowLatencyLiveStream;
this.is_upcoming = !!data.isUpcoming;
this.is_post_live_dvr = !!data.isPostLiveDvr;
this.is_crawlable = !!data.isCrawlable;
this.live_chunk_readahead = data.liveChunkReadahead;
}
};
__name(_VideoDetails, "VideoDetails");
var VideoDetails = _VideoDetails;
// dist/src/parser/parser.js
var TAG2 = "Parser";
var IGNORED_LIST = /* @__PURE__ */ new Set([
"AdSlot",
"DisplayAd",
"SearchPyv",
"MealbarPromo",
"PrimetimePromo",
"PromotedSparklesWeb",
"CompactPromotedVideo",
"BrandVideoShelf",
"BrandVideoSingleton",
"StatementBanner",
"GuideSigninPromo",
"AdsEngagementPanelContent",
"MiniGameCardView",
"GenAiFeedbackFormView"
]);
var RUNTIME_NODES = new Map(Object.entries(nodes_exports));
var DYNAMIC_NODES = /* @__PURE__ */ new Map();
var MEMO = null;
var ERROR_HANDLER = /* @__PURE__ */ __name(({ classname, ...context }) => {
switch (context.error_type) {
case "parse":
if (context.error instanceof Error) {
Log_exports.warn(TAG2, new InnertubeError(`Something went wrong at ${classname}!
This is a bug, please report it at ${package_default.bugs.url}`, {
stack: context.error.stack,
classdata: JSON.stringify(context.classdata, null, 2)
}));
}
break;
case "typecheck":
Log_exports.warn(TAG2, new ParsingError(`Type mismatch, got ${classname} expected ${Array.isArray(context.expected) ? context.expected.join(" | ") : context.expected}.`, context.classdata));
break;
case "mutation_data_missing":
Log_exports.warn(TAG2, new InnertubeError(`Mutation data required for processing ${classname}, but none found.
This is a bug, please report it at ${package_default.bugs.url}`));
break;
case "mutation_data_invalid":
Log_exports.warn(TAG2, new InnertubeError(`Mutation data missing or invalid for ${context.failed} out of ${context.total} MusicMultiSelectMenuItems. The titles of the failed items are: ${context.titles.join(", ")}.
This is a bug, please report it at ${package_default.bugs.url}`));
break;
case "class_not_found":
Log_exports.warn(TAG2, new InnertubeError(`${classname} not found!
This is a bug, want to help us fix it? Follow the instructions at ${package_default.homepage.split("#", 1)[0]}/blob/main/docs/updating-the-parser.md or report it at ${package_default.bugs.url}!
Introspected and JIT generated this class in the meantime:
${generateTypescriptClass(classname, context.key_info)}`));
break;
case "class_changed":
Log_exports.warn(TAG2, `${classname} changed!
The following keys where altered: ${context.changed_keys.map(([key]) => camelToSnake(key)).join(", ")}
The class has changed to:
${generateTypescriptClass(classname, context.key_info)}`);
break;
default:
Log_exports.warn(TAG2, "Unreachable code reached at ParserErrorHandler");
break;
}
}, "ERROR_HANDLER");
function setParserErrorHandler(handler) {
ERROR_HANDLER = handler;
}
__name(setParserErrorHandler, "setParserErrorHandler");
function _clearMemo() {
MEMO = null;
}
__name(_clearMemo, "_clearMemo");
function _createMemo() {
MEMO = new Memo();
}
__name(_createMemo, "_createMemo");
function _addToMemo(classname, result) {
if (!MEMO)
return;
const list = MEMO.get(classname);
if (!list)
return MEMO.set(classname, [result]);
list.push(result);
}
__name(_addToMemo, "_addToMemo");
function _getMemo() {
if (!MEMO)
throw new Error("Parser#getMemo() called before Parser#createMemo()");
return MEMO;
}
__name(_getMemo, "_getMemo");
function shouldIgnore(classname) {
return IGNORED_LIST.has(classname);
}
__name(shouldIgnore, "shouldIgnore");
function sanitizeClassName(input) {
return (input.charAt(0).toUpperCase() + input.slice(1)).replace(/Renderer|Model/g, "").replace(/Radio/g, "Mix").trim();
}
__name(sanitizeClassName, "sanitizeClassName");
function getParserByName(classname) {
const ParserConstructor = RUNTIME_NODES.get(classname);
if (!ParserConstructor) {
const error2 = new Error(`Module not found: ${classname}`);
error2.code = "MODULE_NOT_FOUND";
throw error2;
}
return ParserConstructor;
}
__name(getParserByName, "getParserByName");
function hasParser(classname) {
return RUNTIME_NODES.has(classname);
}
__name(hasParser, "hasParser");
function addRuntimeParser(classname, ParserConstructor) {
RUNTIME_NODES.set(classname, ParserConstructor);
DYNAMIC_NODES.set(classname, ParserConstructor);
}
__name(addRuntimeParser, "addRuntimeParser");
function getDynamicParsers() {
return Object.fromEntries(DYNAMIC_NODES);
}
__name(getDynamicParsers, "getDynamicParsers");
function parseResponse(data) {
const parsed_data = {};
_createMemo();
const contents = parse(data.contents);
const contents_memo = _getMemo();
if (contents) {
parsed_data.contents = contents;
parsed_data.contents_memo = contents_memo;
}
_clearMemo();
_createMemo();
const on_response_received_actions = data.onResponseReceivedActions ? parseRR(data.onResponseReceivedActions) : null;
const on_response_received_actions_memo = _getMemo();
if (on_response_received_actions) {
parsed_data.on_response_received_actions = on_response_received_actions;
parsed_data.on_response_received_actions_memo = on_response_received_actions_memo;
}
_clearMemo();
_createMemo();
const on_response_received_endpoints = data.onResponseReceivedEndpoints ? parseRR(data.onResponseReceivedEndpoints) : null;
const on_response_received_endpoints_memo = _getMemo();
if (on_response_received_endpoints) {
parsed_data.on_response_received_endpoints = on_response_received_endpoints;
parsed_data.on_response_received_endpoints_memo = on_response_received_endpoints_memo;
}
_clearMemo();
_createMemo();
const on_response_received_commands = data.onResponseReceivedCommands ? parseRR(data.onResponseReceivedCommands) : null;
const on_response_received_commands_memo = _getMemo();
if (on_response_received_commands) {
parsed_data.on_response_received_commands = on_response_received_commands;
parsed_data.on_response_received_commands_memo = on_response_received_commands_memo;
}
_clearMemo();
_createMemo();
const continuation_contents = data.continuationContents ? parseLC(data.continuationContents) : null;
const continuation_contents_memo = _getMemo();
if (continuation_contents) {
parsed_data.continuation_contents = continuation_contents;
parsed_data.continuation_contents_memo = continuation_contents_memo;
}
_clearMemo();
_createMemo();
const actions = data.actions ? parseActions(data.actions) : null;
const actions_memo = _getMemo();
if (actions) {
parsed_data.actions = actions;
parsed_data.actions_memo = actions_memo;
}
_clearMemo();
_createMemo();
const live_chat_item_context_menu_supported_renderers = data.liveChatItemContextMenuSupportedRenderers ? parseItem(data.liveChatItemContextMenuSupportedRenderers) : null;
const live_chat_item_context_menu_supported_renderers_memo = _getMemo();
if (live_chat_item_context_menu_supported_renderers) {
parsed_data.live_chat_item_context_menu_supported_renderers = live_chat_item_context_menu_supported_renderers;
parsed_data.live_chat_item_context_menu_supported_renderers_memo = live_chat_item_context_menu_supported_renderers_memo;
}
_clearMemo();
_createMemo();
const header = data.header ? parse(data.header) : null;
const header_memo = _getMemo();
if (header) {
parsed_data.header = header;
parsed_data.header_memo = header_memo;
}
_clearMemo();
_createMemo();
const sidebar = data.sidebar ? parseItem(data.sidebar) : null;
const sidebar_memo = _getMemo();
if (sidebar) {
parsed_data.sidebar = sidebar;
parsed_data.sidebar_memo = sidebar_memo;
}
_clearMemo();
_createMemo();
const items = parse(data.items);
if (items) {
parsed_data.items = items;
parsed_data.items_memo = _getMemo();
}
_clearMemo();
applyMutations(contents_memo, data.frameworkUpdates?.entityBatchUpdate?.mutations);
if (on_response_received_endpoints_memo) {
applyCommentsMutations(on_response_received_endpoints_memo, data.frameworkUpdates?.entityBatchUpdate?.mutations);
}
const continuation = data.continuation ? parseC(data.continuation) : null;
if (continuation) {
parsed_data.continuation = continuation;
}
const continuation_endpoint = data.continuationEndpoint ? parseLC(data.continuationEndpoint) : null;
if (continuation_endpoint) {
parsed_data.continuation_endpoint = continuation_endpoint;
}
const metadata = parse(data.metadata);
if (metadata) {
parsed_data.metadata = metadata;
}
const microformat = parseItem(data.microformat);
if (microformat) {
parsed_data.microformat = microformat;
}
const overlay = parseItem(data.overlay);
if (overlay) {
parsed_data.overlay = overlay;
}
const alerts = parseArray(data.alerts, [Alert, AlertWithButton]);
if (alerts.length) {
parsed_data.alerts = alerts;
}
const refinements = data.refinements;
if (refinements) {
parsed_data.refinements = refinements;
}
const estimated_results = data.estimatedResults ? parseInt(data.estimatedResults) : null;
if (estimated_results) {
parsed_data.estimated_results = estimated_results;
}
const player_overlays = parse(data.playerOverlays);
if (player_overlays) {
parsed_data.player_overlays = player_overlays;
}
const background = parseItem(data.background, MusicThumbnail);
if (background) {
parsed_data.background = background;
}
const playback_tracking = data.playbackTracking ? {
videostats_watchtime_url: data.playbackTracking.videostatsWatchtimeUrl.baseUrl,
videostats_playback_url: data.playbackTracking.videostatsPlaybackUrl.baseUrl
} : null;
if (playback_tracking) {
parsed_data.playback_tracking = playback_tracking;
}
const playability_status = data.playabilityStatus ? {
status: data.playabilityStatus.status,
reason: data.playabilityStatus.reason || "",
embeddable: !!data.playabilityStatus.playableInEmbed || false,
audio_only_playability: parseItem(data.playabilityStatus.audioOnlyPlayability, AudioOnlyPlayability),
error_screen: parseItem(data.playabilityStatus.errorScreen)
} : null;
if (playability_status) {
parsed_data.playability_status = playability_status;
}
if (data.streamingData) {
const this_response_nsig_cache = /* @__PURE__ */ new Map();
parsed_data.streaming_data = {
expires: new Date(Date.now() + parseInt(data.streamingData.expiresInSeconds) * 1e3),
formats: parseFormats(data.streamingData.formats, this_response_nsig_cache),
adaptive_formats: parseFormats(data.streamingData.adaptiveFormats, this_response_nsig_cache),
dash_manifest_url: data.streamingData.dashManifestUrl,
hls_manifest_url: data.streamingData.hlsManifestUrl,
server_abr_streaming_url: data.streamingData.serverAbrStreamingUrl
};
}
if (data.playerConfig) {
parsed_data.player_config = {
audio_config: {
loudness_db: data.playerConfig.audioConfig?.loudnessDb,
perceptual_loudness_db: data.playerConfig.audioConfig?.perceptualLoudnessDb,
enable_per_format_loudness: data.playerConfig.audioConfig?.enablePerFormatLoudness
},
stream_selection_config: {
max_bitrate: data.playerConfig.streamSelectionConfig?.maxBitrate || "0"
},
media_common_config: {
dynamic_readahead_config: {
max_read_ahead_media_time_ms: data.playerConfig.mediaCommonConfig?.dynamicReadaheadConfig?.maxReadAheadMediaTimeMs || 0,
min_read_ahead_media_time_ms: data.playerConfig.mediaCommonConfig?.dynamicReadaheadConfig?.minReadAheadMediaTimeMs || 0,
read_ahead_growth_rate_ms: data.playerConfig.mediaCommonConfig?.dynamicReadaheadConfig?.readAheadGrowthRateMs || 0
},
media_ustreamer_request_config: {
video_playback_ustreamer_config: data.playerConfig.mediaCommonConfig?.mediaUstreamerRequestConfig?.videoPlaybackUstreamerConfig
}
}
};
}
const current_video_endpoint = data.currentVideoEndpoint ? new NavigationEndpoint(data.currentVideoEndpoint) : null;
if (current_video_endpoint) {
parsed_data.current_video_endpoint = current_video_endpoint;
}
const endpoint = data.endpoint ? new NavigationEndpoint(data.endpoint) : null;
if (endpoint) {
parsed_data.endpoint = endpoint;
}
const captions = parseItem(data.captions, PlayerCaptionsTracklist);
if (captions) {
parsed_data.captions = captions;
}
const video_details = data.videoDetails ? new VideoDetails(data.videoDetails) : null;
if (video_details) {
parsed_data.video_details = video_details;
}
const annotations = parseArray(data.annotations, PlayerAnnotationsExpanded);
if (annotations.length) {
parsed_data.annotations = annotations;
}
const storyboards = parseItem(data.storyboards, [PlayerStoryboardSpec, PlayerLiveStoryboardSpec]);
if (storyboards) {
parsed_data.storyboards = storyboards;
}
const endscreen = parseItem(data.endscreen, Endscreen);
if (endscreen) {
parsed_data.endscreen = endscreen;
}
const cards = parseItem(data.cards, CardCollection);
if (cards) {
parsed_data.cards = cards;
}
const engagement_panels = parseArray(data.engagementPanels, EngagementPanelSectionList);
if (engagement_panels.length) {
parsed_data.engagement_panels = engagement_panels;
}
if (data.bgChallenge) {
const interpreter_url = {
private_do_not_access_or_else_trusted_resource_url_wrapped_value: data.bgChallenge.interpreterUrl.privateDoNotAccessOrElseTrustedResourceUrlWrappedValue,
private_do_not_access_or_else_safe_script_wrapped_value: data.bgChallenge.interpreterUrl.privateDoNotAccessOrElseSafeScriptWrappedValue
};
parsed_data.bg_challenge = {
interpreter_url,
interpreter_hash: data.bgChallenge.interpreterHash,
program: data.bgChallenge.program,
global_name: data.bgChallenge.globalName,
client_experiments_state_blob: data.bgChallenge.clientExperimentsStateBlob
};
}
if (data.challenge) {
parsed_data.challenge = data.challenge;
}
if (data.playerResponse) {
parsed_data.player_response = parseResponse(data.playerResponse);
}
if (data.watchNextResponse) {
parsed_data.watch_next_response = parseResponse(data.watchNextResponse);
}
if (data.cpnInfo) {
parsed_data.cpn_info = {
cpn: data.cpnInfo.cpn,
cpn_source: data.cpnInfo.cpnSource
};
}
if (data.entries) {
parsed_data.entries = data.entries.map((entry) => new NavigationEndpoint(entry));
}
if (data.targetId) {
parsed_data.target_id = data.targetId;
}
return parsed_data;
}
__name(parseResponse, "parseResponse");
function parseItem(data, validTypes) {
if (!data)
return null;
const keys = Object.keys(data);
if (!keys.length)
return null;
const classname = sanitizeClassName(keys[0]);
if (!shouldIgnore(classname)) {
try {
const has_target_class = hasParser(classname);
const TargetClass = has_target_class ? getParserByName(classname) : generateRuntimeClass(classname, data[keys[0]], ERROR_HANDLER);
if (validTypes) {
if (Array.isArray(validTypes)) {
if (!validTypes.some((type) => type.type === TargetClass.type)) {
ERROR_HANDLER({
classdata: data[keys[0]],
classname,
error_type: "typecheck",
expected: validTypes.map((type) => type.type)
});
return null;
}
} else if (TargetClass.type !== validTypes.type) {
ERROR_HANDLER({
classdata: data[keys[0]],
classname,
error_type: "typecheck",
expected: validTypes.type
});
return null;
}
}
const result = new TargetClass(data[keys[0]]);
_addToMemo(classname, result);
return result;
} catch (err) {
ERROR_HANDLER({
classname,
classdata: data[keys[0]],
error: err,
error_type: "parse"
});
return null;
}
}
return null;
}
__name(parseItem, "parseItem");
function parseArray(data, validTypes) {
if (Array.isArray(data)) {
const results = [];
for (const item of data) {
const result = parseItem(item, validTypes);
if (result) {
results.push(result);
}
}
return observe(results);
} else if (!data) {
return observe([]);
}
throw new ParsingError("Expected array but got a single item");
}
__name(parseArray, "parseArray");
function parse(data, requireArray, validTypes) {
if (!data)
return null;
if (Array.isArray(data)) {
const results = [];
for (const item of data) {
const result = parseItem(item, validTypes);
if (result) {
results.push(result);
}
}
const res = observe(results);
return requireArray ? res : new SuperParsedResult(res);
} else if (requireArray) {
throw new ParsingError("Expected array but got a single item");
}
return new SuperParsedResult(parseItem(data, validTypes));
}
__name(parse, "parse");
var command_regexp = /Command$/;
var endpoint_regexp = /Endpoint$/;
var action_regexp = /Action$/;
function parseCommand(data) {
let keys = [];
try {
keys = Object.keys(data);
} catch {
}
for (const key of keys) {
const value = data[key];
if (command_regexp.test(key) || endpoint_regexp.test(key) || action_regexp.test(key)) {
const classname = sanitizeClassName(key);
if (shouldIgnore(classname))
return void 0;
try {
const has_target_class = hasParser(classname);
if (has_target_class)
return new (getParserByName(classname))(value);
} catch (error2) {
ERROR_HANDLER({
error: error2,
classname,
classdata: value,
error_type: "parse"
});
}
}
}
}
__name(parseCommand, "parseCommand");
function parseCommands(commands) {
if (Array.isArray(commands)) {
const results = [];
for (const item of commands) {
const result = parseCommand(item);
if (result) {
results.push(result);
}
}
return observe(results);
} else if (!commands)
return observe([]);
throw new ParsingError("Expected array but got a single item");
}
__name(parseCommands, "parseCommands");
function parseC(data) {
if (data.timedContinuationData)
return new Continuation({ continuation: data.timedContinuationData, type: "timed" });
return null;
}
__name(parseC, "parseC");
function parseLC(data) {
if (data.itemSectionContinuation)
return new ItemSectionContinuation(data.itemSectionContinuation);
if (data.sectionListContinuation)
return new SectionListContinuation(data.sectionListContinuation);
if (data.liveChatContinuation)
return new LiveChatContinuation(data.liveChatContinuation);
if (data.musicPlaylistShelfContinuation)
return new MusicPlaylistShelfContinuation(data.musicPlaylistShelfContinuation);
if (data.musicShelfContinuation)
return new MusicShelfContinuation(data.musicShelfContinuation);
if (data.gridContinuation)
return new GridContinuation(data.gridContinuation);
if (data.playlistPanelContinuation)
return new PlaylistPanelContinuation(data.playlistPanelContinuation);
if (data.continuationCommand)
return new ContinuationCommand2(data.continuationCommand);
return null;
}
__name(parseLC, "parseLC");
function parseRR(actions) {
return observe(actions.map((action) => {
if (action.navigateAction)
return new NavigateAction(action.navigateAction);
else if (action.showMiniplayerCommand)
return new ShowMiniplayerCommand(action.showMiniplayerCommand);
else if (action.reloadContinuationItemsCommand)
return new ReloadContinuationItemsCommand(action.reloadContinuationItemsCommand);
else if (action.appendContinuationItemsAction)
return new AppendContinuationItemsAction(action.appendContinuationItemsAction);
else if (action.openPopupAction)
return new OpenPopupAction(action.openPopupAction);
}).filter((item) => item));
}
__name(parseRR, "parseRR");
function parseActions(data) {
if (Array.isArray(data)) {
return parse(data.map((action) => {
delete action.clickTrackingParams;
return action;
}));
}
return new SuperParsedResult(parseItem(data));
}
__name(parseActions, "parseActions");
function parseFormats(formats, this_response_nsig_cache) {
return formats?.map((format) => new Format(format, this_response_nsig_cache)) || [];
}
__name(parseFormats, "parseFormats");
function applyMutations(memo, mutations) {
const music_multi_select_menu_items = memo.getType(MusicMultiSelectMenuItem);
if (music_multi_select_menu_items.length > 0 && !mutations) {
ERROR_HANDLER({
error_type: "mutation_data_missing",
classname: "MusicMultiSelectMenuItem"
});
} else {
const missing_or_invalid_mutations = [];
for (const menu_item of music_multi_select_menu_items) {
const mutation = mutations.find((mutation2) => mutation2.payload?.musicFormBooleanChoice?.id === menu_item.form_item_entity_key);
const choice = mutation?.payload.musicFormBooleanChoice;
if (choice?.selected !== void 0 && choice?.opaqueToken) {
menu_item.selected = choice.selected;
} else {
missing_or_invalid_mutations.push(`'${menu_item.title}'`);
}
}
if (missing_or_invalid_mutations.length > 0) {
ERROR_HANDLER({
error_type: "mutation_data_invalid",
classname: "MusicMultiSelectMenuItem",
total: music_multi_select_menu_items.length,
failed: missing_or_invalid_mutations.length,
titles: missing_or_invalid_mutations
});
}
}
if (mutations) {
const heat_map_mutations = mutations.filter((mutation) => mutation.payload?.macroMarkersListEntity && mutation.payload.macroMarkersListEntity.markersList?.markerType === "MARKER_TYPE_HEATMAP");
for (const mutation of heat_map_mutations) {
const macro_markers_entity = new MacroMarkersListEntity(mutation.payload.macroMarkersListEntity);
const list = memo.get("MacroMarkersListEntity");
if (!list) {
memo.set("MacroMarkersListEntity", [macro_markers_entity]);
} else {
list.push(macro_markers_entity);
}
}
}
}
__name(applyMutations, "applyMutations");
function applyCommentsMutations(memo, mutations) {
const comment_view_items = memo.getType(CommentView);
if (comment_view_items.length > 0) {
if (!mutations) {
ERROR_HANDLER({
error_type: "mutation_data_missing",
classname: "CommentView"
});
}
for (const comment_view of comment_view_items) {
const comment_mutation = mutations.find((mutation) => mutation.payload?.commentEntityPayload?.key === comment_view.keys.comment)?.payload?.commentEntityPayload;
const toolbar_state_mutation = mutations.find((mutation) => mutation.payload?.engagementToolbarStateEntityPayload?.key === comment_view.keys.toolbar_state)?.payload?.engagementToolbarStateEntityPayload;
const engagement_toolbar = mutations.find((mutation) => mutation.entityKey === comment_view.keys.toolbar_surface)?.payload?.engagementToolbarSurfaceEntityPayload;
const comment_surface_mutation = mutations.find((mutation) => mutation.payload?.commentSurfaceEntityPayload?.key === comment_view.keys.comment_surface)?.payload?.commentSurfaceEntityPayload;
comment_view.applyMutations(comment_mutation, toolbar_state_mutation, engagement_toolbar, comment_surface_mutation);
}
}
}
__name(applyCommentsMutations, "applyCommentsMutations");
// dist/src/parser/youtube/index.js
var youtube_exports = {};
__export(youtube_exports, {
AccountInfo: () => AccountInfo,
Channel: () => Channel2,
ChannelListContinuation: () => ChannelListContinuation,
Comments: () => Comments,
FilteredChannelList: () => FilteredChannelList,
Guide: () => Guide,
HashtagFeed: () => HashtagFeed,
History: () => History,
HomeFeed: () => HomeFeed,
ItemMenu: () => ItemMenu,
Library: () => Library,
LiveChat: () => LiveChat2,
NotificationsMenu: () => NotificationsMenu,
Playlist: () => Playlist2,
Search: () => Search,
Settings: () => Settings,
SmoothedQueue: () => SmoothedQueue,
TranscriptInfo: () => TranscriptInfo,
VideoInfo: () => VideoInfo
});
// dist/src/parser/youtube/AccountInfo.js
var _page;
var _AccountInfo = class _AccountInfo {
constructor(response) {
__privateAdd(this, _page);
__publicField(this, "contents");
__privateSet(this, _page, parser_exports.parseResponse(response.data));
if (!__privateGet(this, _page).contents)
throw new InnertubeError("Page contents not found");
const account_section_list = __privateGet(this, _page).contents.array().as(AccountSectionList)[0];
if (!account_section_list)
throw new InnertubeError("Account section list not found");
this.contents = account_section_list.contents[0];
}
get page() {
return __privateGet(this, _page);
}
};
_page = new WeakMap();
__name(_AccountInfo, "AccountInfo");
var AccountInfo = _AccountInfo;
// dist/src/core/mixins/Feed.js
var _page2, _actions4, _memo, _continuation2, _Feed_instances, isParsed_fn, getBodyContinuations_fn;
var _Feed = class _Feed {
constructor(actions, response, already_parsed = false) {
__privateAdd(this, _Feed_instances);
__privateAdd(this, _page2);
__privateAdd(this, _actions4);
__privateAdd(this, _memo);
__privateAdd(this, _continuation2);
if (__privateMethod(this, _Feed_instances, isParsed_fn).call(this, response) || already_parsed) {
__privateSet(this, _page2, response);
} else {
__privateSet(this, _page2, parser_exports.parseResponse(response.data));
}
const memo = concatMemos(...[
__privateGet(this, _page2).contents_memo,
__privateGet(this, _page2).continuation_contents_memo,
__privateGet(this, _page2).on_response_received_commands_memo,
__privateGet(this, _page2).on_response_received_endpoints_memo,
__privateGet(this, _page2).on_response_received_actions_memo,
__privateGet(this, _page2).sidebar_memo,
__privateGet(this, _page2).header_memo
]);
if (!memo)
throw new InnertubeError("No memo found in feed");
__privateSet(this, _memo, memo);
__privateSet(this, _actions4, actions);
}
/**
* Get all videos on a given page via memo
*/
static getVideosFromMemo(memo) {
return memo.getType(Video, GridVideo, ReelItem, ShortsLockupView, CompactVideo, PlaylistVideo, PlaylistPanelVideo, WatchCardCompactVideo);
}
/**
* Get all playlists on a given page via memo
*/
static getPlaylistsFromMemo(memo) {
const playlists = memo.getType(Playlist, GridPlaylist);
const lockup_views = memo.getType(LockupView).filter((lockup) => {
return ["PLAYLIST", "ALBUM", "PODCAST"].includes(lockup.content_type);
});
if (lockup_views.length > 0) {
playlists.push(...lockup_views);
}
return playlists;
}
/**
* Get all the videos in the feed
*/
get videos() {
return _Feed.getVideosFromMemo(__privateGet(this, _memo));
}
/**
* Get all the community posts in the feed
*/
get posts() {
return __privateGet(this, _memo).getType(BackstagePost, Post, SharedPost);
}
/**
* Get all the channels in the feed
*/
get channels() {
return __privateGet(this, _memo).getType(Channel, GridChannel);
}
/**
* Get all playlists in the feed
*/
get playlists() {
return _Feed.getPlaylistsFromMemo(__privateGet(this, _memo));
}
get memo() {
return __privateGet(this, _memo);
}
/**
* Returns contents from the page.
*/
get page_contents() {
const tab_content = __privateGet(this, _memo).getType(Tab)?.[0].content;
const reload_continuation_items = __privateGet(this, _memo).getType(ReloadContinuationItemsCommand)[0];
const append_continuation_items = __privateGet(this, _memo).getType(AppendContinuationItemsAction)[0];
return tab_content || reload_continuation_items || append_continuation_items;
}
/**
* Returns all segments/sections from the page.
*/
get shelves() {
return __privateGet(this, _memo).getType(Shelf, RichShelf, ReelShelf);
}
/**
* Finds shelf by title.
*/
getShelf(title) {
return this.shelves.find((shelf) => shelf.title.toString() === title);
}
/**
* Returns secondary contents from the page.
*/
get secondary_contents() {
if (!__privateGet(this, _page2).contents?.is_node)
return null;
const node = __privateGet(this, _page2).contents?.item();
if (!node.is(TwoColumnBrowseResults, TwoColumnSearchResults))
return null;
return node.secondary_contents;
}
get actions() {
return __privateGet(this, _actions4);
}
/**
* Get the original page data
*/
get page() {
return __privateGet(this, _page2);
}
/**
* Checks if the feed has continuation.
*/
get has_continuation() {
return __privateMethod(this, _Feed_instances, getBodyContinuations_fn).call(this).length > 0;
}
/**
* Retrieves continuation data as it is.
*/
async getContinuationData() {
if (__privateGet(this, _continuation2)) {
if (__privateGet(this, _continuation2).length === 0)
throw new InnertubeError("There are no continuations.");
return await __privateGet(this, _continuation2)[0].endpoint.call(__privateGet(this, _actions4), { parse: true });
}
__privateSet(this, _continuation2, __privateMethod(this, _Feed_instances, getBodyContinuations_fn).call(this));
if (__privateGet(this, _continuation2))
return this.getContinuationData();
}
/**
* Retrieves next batch of contents and returns a new {@link Feed} object.
*/
async getContinuation() {
const continuation_data = await this.getContinuationData();
if (!continuation_data)
throw new InnertubeError("Could not get continuation data");
return new _Feed(this.actions, continuation_data, true);
}
};
_page2 = new WeakMap();
_actions4 = new WeakMap();
_memo = new WeakMap();
_continuation2 = new WeakMap();
_Feed_instances = new WeakSet();
isParsed_fn = /* @__PURE__ */ __name(function(response) {
return !("data" in response);
}, "#isParsed");
getBodyContinuations_fn = /* @__PURE__ */ __name(function() {
if (__privateGet(this, _page2).header_memo) {
const header_continuations = __privateGet(this, _page2).header_memo.getType(ContinuationItem);
return __privateGet(this, _memo).getType(ContinuationItem).filter((continuation) => !header_continuations.includes(continuation));
}
return __privateGet(this, _memo).getType(ContinuationItem);
}, "#getBodyContinuations");
__name(_Feed, "Feed");
var Feed = _Feed;
// dist/src/core/mixins/FilterableFeed.js
var _chips;
var _FilterableFeed = class _FilterableFeed extends Feed {
constructor(actions, data, already_parsed = false) {
super(actions, data, already_parsed);
__privateAdd(this, _chips);
}
/**
* Returns the filter chips.
*/
get filter_chips() {
if (__privateGet(this, _chips))
return __privateGet(this, _chips) || [];
if (this.memo.getType(FeedFilterChipBar)?.length > 1)
throw new InnertubeError("There are too many feed filter chipbars, you'll need to find the correct one yourself in this.page");
if (this.memo.getType(FeedFilterChipBar)?.length === 0)
throw new InnertubeError("There are no feed filter chipbars");
__privateSet(this, _chips, this.memo.getType(ChipCloudChip));
return __privateGet(this, _chips) || [];
}
/**
* Returns available filters.
*/
get filters() {
return this.filter_chips.map((chip) => chip.text.toString()) || [];
}
/**
* Applies given filter and returns a new {@link Feed} object.
*/
async getFilteredFeed(filter) {
let target_filter;
if (typeof filter === "string") {
if (!this.filters.includes(filter))
throw new InnertubeError("Filter not found", { available_filters: this.filters });
target_filter = this.filter_chips.find((chip) => chip.text.toString() === filter);
} else if (filter.type === "ChipCloudChip") {
target_filter = filter;
} else {
throw new InnertubeError("Invalid filter");
}
if (!target_filter)
throw new InnertubeError("Filter not found");
if (target_filter.is_selected)
return this;
const response = await target_filter.endpoint?.call(this.actions, { parse: true });
if (!response)
throw new InnertubeError("Failed to get filtered feed");
return new Feed(this.actions, response, true);
}
};
_chips = new WeakMap();
__name(_FilterableFeed, "FilterableFeed");
var FilterableFeed = _FilterableFeed;
// dist/src/core/mixins/index.js
var mixins_exports = {};
__export(mixins_exports, {
Feed: () => Feed,
FilterableFeed: () => FilterableFeed,
MediaInfo: () => MediaInfo,
TabbedFeed: () => TabbedFeed
});
// dist/src/core/mixins/MediaInfo.js
var _page3, _actions5, _cpn, _playback_tracking;
var _MediaInfo = class _MediaInfo {
constructor(data, actions, cpn) {
__privateAdd(this, _page3);
__privateAdd(this, _actions5);
__privateAdd(this, _cpn);
__privateAdd(this, _playback_tracking);
__publicField(this, "basic_info");
__publicField(this, "annotations");
__publicField(this, "storyboards");
__publicField(this, "endscreen");
__publicField(this, "captions");
__publicField(this, "cards");
__publicField(this, "streaming_data");
__publicField(this, "playability_status");
__publicField(this, "player_config");
__privateSet(this, _actions5, actions);
const info2 = parser_exports.parseResponse(data[0].data.playerResponse ? data[0].data.playerResponse : data[0].data);
const next = data[1]?.data ? parser_exports.parseResponse(data[1].data) : void 0;
__privateSet(this, _page3, [info2, next]);
__privateSet(this, _cpn, cpn);
if (info2.playability_status?.status === "ERROR")
throw new InnertubeError("This video is unavailable", info2.playability_status);
if (info2.microformat && !info2.microformat?.is(PlayerMicroformat, MicroformatData))
throw new InnertubeError("Unsupported microformat", info2.microformat);
this.basic_info = {
...info2.video_details,
/**
* Microformat is a bit redundant, so only
* a few things there are interesting to us.
*/
...{
embed: info2.microformat?.is(PlayerMicroformat) ? info2.microformat?.embed : null,
channel: info2.microformat?.is(PlayerMicroformat) ? info2.microformat?.channel : null,
is_unlisted: info2.microformat?.is_unlisted,
is_family_safe: info2.microformat?.is_family_safe,
category: info2.microformat?.is(PlayerMicroformat) ? info2.microformat?.category : null,
has_ypc_metadata: info2.microformat?.is(PlayerMicroformat) ? info2.microformat?.has_ypc_metadata : null,
start_timestamp: info2.microformat?.is(PlayerMicroformat) ? info2.microformat.start_timestamp : null,
end_timestamp: info2.microformat?.is(PlayerMicroformat) ? info2.microformat.end_timestamp : null,
view_count: info2.microformat?.is(PlayerMicroformat) && isNaN(info2.video_details?.view_count) ? info2.microformat.view_count : info2.video_details?.view_count,
url_canonical: info2.microformat?.is(MicroformatData) ? info2.microformat?.url_canonical : null,
tags: info2.microformat?.is(MicroformatData) ? info2.microformat?.tags : null
},
like_count: void 0,
is_liked: void 0,
is_disliked: void 0
};
this.annotations = info2.annotations;
this.storyboards = info2.storyboards;
this.endscreen = info2.endscreen;
this.captions = info2.captions;
this.cards = info2.cards;
this.streaming_data = info2.streaming_data;
this.playability_status = info2.playability_status;
this.player_config = info2.player_config;
__privateSet(this, _playback_tracking, info2.playback_tracking);
}
/**
* Generates a DASH manifest from the streaming data.
* @param options
* @returns DASH manifest
*/
async toDash(options = {}) {
const player_response = __privateGet(this, _page3)[0];
const manifest_options = options.manifest_options || {};
if (player_response.video_details && player_response.video_details.is_live) {
throw new InnertubeError("Generating DASH manifests for live videos is not supported. Please use the DASH and HLS manifests provided by YouTube in `streaming_data.dash_manifest_url` and `streaming_data.hls_manifest_url` instead.");
}
let storyboards;
let captions;
if (manifest_options.include_thumbnails && player_response.storyboards) {
storyboards = player_response.storyboards;
}
if (typeof manifest_options.captions_format === "string" && player_response.captions?.caption_tracks) {
captions = player_response.captions.caption_tracks;
}
return FormatUtils_exports.toDash(this.streaming_data, this.page[0].video_details?.is_post_live_dvr, options.url_transformer, options.format_filter, __privateGet(this, _cpn), __privateGet(this, _actions5).session.player, __privateGet(this, _actions5), storyboards, captions, manifest_options);
}
/**
* Get a cleaned up representation of the adaptive_formats
*/
getStreamingInfo(url_transformer, format_filter) {
return getStreamingInfo(this.streaming_data, this.page[0].video_details?.is_post_live_dvr, url_transformer, format_filter, this.cpn, __privateGet(this, _actions5).session.player, __privateGet(this, _actions5), __privateGet(this, _page3)[0].storyboards ? __privateGet(this, _page3)[0].storyboards : void 0);
}
/**
* Selects the format that best matches the given options.
* @param options - Options
*/
chooseFormat(options) {
return FormatUtils_exports.chooseFormat(options, this.streaming_data);
}
/**
* Downloads the video.
* @param options - Download options.
*/
async download(options = {}) {
const player_response = __privateGet(this, _page3)[0];
if (player_response.video_details && (player_response.video_details.is_live || player_response.video_details.is_post_live_dvr)) {
throw new InnertubeError("Downloading is not supported for live and Post-Live-DVR videos, as they are split up into 5 second segments that are individual files, which require using a tool such as ffmpeg to stitch them together, so they cannot be returned in a single stream.");
}
return FormatUtils_exports.download(options, __privateGet(this, _actions5), this.playability_status, this.streaming_data, __privateGet(this, _actions5).session.player, this.cpn);
}
/**
* Retrieves the video's transcript.
*/
async getTranscript() {
const next_response = this.page[1];
if (!next_response)
throw new InnertubeError("Cannot get transcript from basic video info.");
if (!next_response.engagement_panels)
throw new InnertubeError("Engagement panels not found. Video likely has no transcript.");
const transcript_panel = next_response.engagement_panels.find((panel) => {
return panel.panel_identifier === "engagement-panel-searchable-transcript";
});
if (!transcript_panel)
throw new InnertubeError("Transcript panel not found. Video likely has no transcript.");
const transcript_continuation = transcript_panel.content?.as(ContinuationItem);
if (!transcript_continuation)
throw new InnertubeError("Transcript continuation not found.");
const response = await transcript_continuation.endpoint.call(this.actions);
return new TranscriptInfo(this.actions, response);
}
async addToWatchHistory(client_name, client_version, replacement = "https://www.") {
if (!__privateGet(this, _playback_tracking))
throw new InnertubeError("Playback tracking not available");
const url_params = {
cpn: __privateGet(this, _cpn),
fmt: 251,
rtn: 0,
rt: 0
};
const url = __privateGet(this, _playback_tracking).videostats_playback_url.replace("https://s.", replacement);
return await __privateGet(this, _actions5).stats(url, {
client_name: client_name || Constants_exports.CLIENTS.WEB.NAME,
client_version: client_version || Constants_exports.CLIENTS.WEB.VERSION
}, url_params);
}
async updateWatchTime(startTime, client_name = Constants_exports.CLIENTS.WEB.NAME, client_version = Constants_exports.CLIENTS.WEB.VERSION, replacement = "https://www.") {
if (!__privateGet(this, _playback_tracking))
throw new InnertubeError("Playback tracking not available");
const url_params = {
cpn: __privateGet(this, _cpn),
st: startTime.toFixed(3),
et: startTime.toFixed(3),
cmt: startTime.toFixed(3),
final: "1"
};
const url = __privateGet(this, _playback_tracking).videostats_watchtime_url.replace("https://s.", replacement);
return await __privateGet(this, _actions5).stats(url, {
client_name,
client_version
}, url_params);
}
get actions() {
return __privateGet(this, _actions5);
}
/**
* Content Playback Nonce.
*/
get cpn() {
return __privateGet(this, _cpn);
}
/**
* Parsed InnerTube response.
*/
get page() {
return __privateGet(this, _page3);
}
};
_page3 = new WeakMap();
_actions5 = new WeakMap();
_cpn = new WeakMap();
_playback_tracking = new WeakMap();
__name(_MediaInfo, "MediaInfo");
var MediaInfo = _MediaInfo;
// dist/src/core/mixins/TabbedFeed.js
var _actions6, _tabs;
var _TabbedFeed = class _TabbedFeed extends Feed {
constructor(actions, data, already_parsed = false) {
super(actions, data, already_parsed);
__privateAdd(this, _actions6);
__privateAdd(this, _tabs);
__privateSet(this, _actions6, actions);
__privateSet(this, _tabs, this.page.contents_memo?.getType(Tab));
}
get tabs() {
return __privateGet(this, _tabs)?.map((tab) => tab.title.toString()) ?? [];
}
async getTabByName(title) {
const tab = __privateGet(this, _tabs)?.find((tab2) => tab2.title.toLowerCase() === title.toLowerCase());
if (!tab)
throw new InnertubeError(`Tab "${title}" not found`);
if (tab.selected)
return this;
const response = await tab.endpoint.call(__privateGet(this, _actions6));
return new _TabbedFeed(__privateGet(this, _actions6), response, false);
}
async getTabByURL(url) {
const tab = __privateGet(this, _tabs)?.find((tab2) => tab2.endpoint.metadata.url?.split("/").pop() === url);
if (!tab)
throw new InnertubeError(`Tab "${url}" not found`);
if (tab.selected)
return this;
const response = await tab.endpoint.call(__privateGet(this, _actions6));
return new _TabbedFeed(__privateGet(this, _actions6), response, false);
}
hasTabWithURL(url) {
return __privateGet(this, _tabs)?.some((tab) => tab.endpoint.metadata.url?.split("/").pop() === url) ?? false;
}
get title() {
return this.page.contents_memo?.getType(Tab)?.find((tab) => tab.selected)?.title.toString();
}
};
_actions6 = new WeakMap();
_tabs = new WeakMap();
__name(_TabbedFeed, "TabbedFeed");
var TabbedFeed = _TabbedFeed;
// dist/src/parser/youtube/Channel.js
var _Channel2 = class _Channel2 extends TabbedFeed {
constructor(actions, data, already_parsed = false) {
super(actions, data, already_parsed);
__publicField(this, "header");
__publicField(this, "metadata");
__publicField(this, "subscribe_button");
__publicField(this, "current_tab");
this.header = this.page.header?.item()?.as(C4TabbedHeader, CarouselHeader, InteractiveTabbedHeader, PageHeader);
const metadata = this.page.metadata?.item().as(ChannelMetadata);
const microformat = this.page.microformat?.as(MicroformatData);
if (this.page.alerts) {
const alert = this.page.alerts[0];
if (alert?.alert_type === "ERROR") {
throw new ChannelError(alert.text.toString());
}
}
if (!metadata && !this.page.contents)
throw new InnertubeError("Invalid channel", this);
this.metadata = { ...metadata, ...microformat || {} };
this.subscribe_button = this.page.header_memo?.getType(SubscribeButton)[0];
if (this.page.contents)
this.current_tab = this.page.contents.item().as(TwoColumnBrowseResults).tabs.find((tab) => tab.selected);
}
/**
* Applies given filter to the list. Use {@link filters} to get available filters.
* @param filter - The filter to apply
*/
async applyFilter(filter) {
let target_filter;
const filter_chipbar = this.memo.getType(FeedFilterChipBar)[0];
if (typeof filter === "string") {
target_filter = filter_chipbar?.contents.find((chip) => chip.text === filter);
if (!target_filter)
throw new InnertubeError(`Filter ${filter} not found`, { available_filters: this.filters });
} else {
target_filter = filter;
}
if (!target_filter.endpoint)
throw new InnertubeError("Invalid filter", filter);
const page = await target_filter.endpoint.call(this.actions, { parse: true });
if (!page)
throw new InnertubeError("No page returned", { filter: target_filter });
return new FilteredChannelList(this.actions, page, true);
}
/**
* Applies given sort filter to the list. Use {@link sort_filters} to get available filters.
* @param sort - The sort filter to apply
*/
async applySort(sort) {
const sort_filter_sub_menu = this.memo.getType(SortFilterSubMenu)[0];
if (!sort_filter_sub_menu || !sort_filter_sub_menu.sub_menu_items)
throw new InnertubeError("No sort filter sub menu found");
const target_sort = sort_filter_sub_menu.sub_menu_items.find((item) => item.title === sort);
if (!target_sort)
throw new InnertubeError(`Sort filter ${sort} not found`, { available_sort_filters: this.sort_filters });
if (target_sort.selected)
return this;
const page = await target_sort.endpoint.call(this.actions, { parse: true });
return new _Channel2(this.actions, page, true);
}
/**
* Applies given content type filter to the list. Use {@link content_type_filters} to get available filters.
* @param content_type_filter - The content type filter to apply
*/
async applyContentTypeFilter(content_type_filter) {
const sub_menu = this.current_tab?.content?.as(SectionList).sub_menu?.as(ChannelSubMenu);
if (!sub_menu)
throw new InnertubeError("Sub menu not found");
const item = sub_menu.content_type_sub_menu_items.find((item2) => item2.title === content_type_filter);
if (!item)
throw new InnertubeError(`Sub menu item ${content_type_filter} not found`, { available_filters: this.content_type_filters });
if (item.selected)
return this;
const page = await item.endpoint.call(this.actions, { parse: true });
return new _Channel2(this.actions, page, true);
}
get filters() {
return this.memo.getType(FeedFilterChipBar)?.[0]?.contents.filterType(ChipCloudChip).map((chip) => chip.text) || [];
}
get sort_filters() {
const sort_filter_sub_menu = this.memo.getType(SortFilterSubMenu)[0];
return sort_filter_sub_menu?.sub_menu_items?.map((item) => item.title) || [];
}
get content_type_filters() {
const sub_menu = this.current_tab?.content?.as(SectionList).sub_menu?.as(ChannelSubMenu);
return sub_menu?.content_type_sub_menu_items.map((item) => item.title) || [];
}
async getHome() {
const tab = await this.getTabByURL("featured");
return new _Channel2(this.actions, tab.page, true);
}
async getVideos() {
const tab = await this.getTabByURL("videos");
return new _Channel2(this.actions, tab.page, true);
}
async getShorts() {
const tab = await this.getTabByURL("shorts");
return new _Channel2(this.actions, tab.page, true);
}
async getLiveStreams() {
const tab = await this.getTabByURL("streams");
return new _Channel2(this.actions, tab.page, true);
}
async getReleases() {
const tab = await this.getTabByURL("releases");
return new _Channel2(this.actions, tab.page, true);
}
async getPodcasts() {
const tab = await this.getTabByURL("podcasts");
return new _Channel2(this.actions, tab.page, true);
}
async getCourses() {
const tab = await this.getTabByURL("courses");
return new _Channel2(this.actions, tab.page, true);
}
async getPlaylists() {
const tab = await this.getTabByURL("playlists");
return new _Channel2(this.actions, tab.page, true);
}
async getCommunity() {
const tab = await this.getTabByURL("posts");
return new _Channel2(this.actions, tab.page, true);
}
/**
* Retrieves the about page.
* Note that this does not return a new {@link Channel} object.
*/
async getAbout() {
if (this.hasTabWithURL("about")) {
const tab = await this.getTabByURL("about");
return tab.memo.getType(ChannelAboutFullMetadata)[0];
}
const tagline = this.header?.is(C4TabbedHeader) && this.header.tagline;
if (tagline || this.header?.is(PageHeader) && this.header.content?.description) {
if (tagline && tagline.more_endpoint instanceof NavigationEndpoint) {
const response2 = await tagline.more_endpoint.call(this.actions);
const tab = new TabbedFeed(this.actions, response2, false);
return tab.memo.getType(ChannelAboutFullMetadata)[0];
}
const endpoint = this.page.header_memo?.getType(ContinuationItem)[0]?.endpoint;
if (!endpoint) {
throw new InnertubeError("Failed to extract continuation to get channel about");
}
const response = await endpoint.call(this.actions, { parse: true });
if (!response.on_response_received_endpoints_memo) {
throw new InnertubeError("Unexpected response while fetching channel about", { response });
}
return response.on_response_received_endpoints_memo.getType(AboutChannel)[0];
}
throw new InnertubeError("About not found");
}
/**
* Searches within the channel.
*/
async search(query) {
const tab = this.memo.getType(ExpandableTab)?.[0];
if (!tab)
throw new InnertubeError("Search tab not found", this);
const page = await tab.endpoint.call(this.actions, { query, parse: true });
return new _Channel2(this.actions, page, true);
}
get has_home() {
return this.hasTabWithURL("featured");
}
get has_videos() {
return this.hasTabWithURL("videos");
}
get has_shorts() {
return this.hasTabWithURL("shorts");
}
get has_live_streams() {
return this.hasTabWithURL("streams");
}
get has_releases() {
return this.hasTabWithURL("releases");
}
get has_podcasts() {
return this.hasTabWithURL("podcasts");
}
get has_courses() {
return this.hasTabWithURL("courses");
}
get has_playlists() {
return this.hasTabWithURL("playlists");
}
get has_community() {
return this.hasTabWithURL("posts");
}
get has_about() {
return this.hasTabWithURL("about") || !!(this.header?.is(C4TabbedHeader) && this.header.tagline?.more_endpoint) || !!(this.header?.is(PageHeader) && this.header.content?.description?.more_endpoint);
}
get has_search() {
return this.memo.getType(ExpandableTab)?.length > 0;
}
async getContinuation() {
const page = await super.getContinuationData();
if (!page)
throw new InnertubeError("Could not get continuation data");
return new ChannelListContinuation(this.actions, page, true);
}
};
__name(_Channel2, "Channel");
var Channel2 = _Channel2;
var _ChannelListContinuation = class _ChannelListContinuation extends Feed {
constructor(actions, data, already_parsed = false) {
super(actions, data, already_parsed);
__publicField(this, "contents");
this.contents = this.page.on_response_received_actions?.[0] || this.page.on_response_received_endpoints?.[0];
}
async getContinuation() {
const page = await super.getContinuationData();
if (!page)
throw new InnertubeError("Could not get continuation data");
return new _ChannelListContinuation(this.actions, page, true);
}
};
__name(_ChannelListContinuation, "ChannelListContinuation");
var ChannelListContinuation = _ChannelListContinuation;
var _FilteredChannelList = class _FilteredChannelList extends FilterableFeed {
constructor(actions, data, already_parsed = false) {
super(actions, data, already_parsed);
__publicField(this, "applied_filter");
__publicField(this, "contents");
this.applied_filter = this.memo.getType(ChipCloudChip).find((chip) => chip.is_selected);
if (this.page.on_response_received_actions && this.page.on_response_received_actions.length > 1) {
this.page.on_response_received_actions.shift();
}
this.contents = this.page.on_response_received_actions?.[0];
}
/**
* Applies given filter to the list.
* @param filter - The filter to apply
*/
async applyFilter(filter) {
const feed = await super.getFilteredFeed(filter);
return new _FilteredChannelList(this.actions, feed.page, true);
}
async getContinuation() {
const page = await super.getContinuationData();
if (!page?.on_response_received_actions_memo)
throw new InnertubeError("Unexpected continuation data", page);
page.on_response_received_actions_memo.set("FeedFilterChipBar", this.memo.getType(FeedFilterChipBar));
page.on_response_received_actions_memo.set("ChipCloudChip", this.memo.getType(ChipCloudChip));
return new _FilteredChannelList(this.actions, page, true);
}
};
__name(_FilteredChannelList, "FilteredChannelList");
var FilteredChannelList = _FilteredChannelList;
// dist/src/parser/youtube/Comments.js
var _page4, _actions7, _continuation3;
var _Comments = class _Comments {
constructor(actions, data, already_parsed = false) {
__privateAdd(this, _page4);
__privateAdd(this, _actions7);
__privateAdd(this, _continuation3);
__publicField(this, "header");
__publicField(this, "contents");
__privateSet(this, _page4, already_parsed ? data : parser_exports.parseResponse(data));
__privateSet(this, _actions7, actions);
const contents = __privateGet(this, _page4).on_response_received_endpoints;
if (!contents)
throw new InnertubeError("Comments page did not have any content.");
const header_node = contents.at(0)?.as(AppendContinuationItemsAction, ReloadContinuationItemsCommand);
const body_node = contents.at(1)?.as(AppendContinuationItemsAction, ReloadContinuationItemsCommand);
this.header = header_node?.contents?.firstOfType(CommentsHeader);
const threads = body_node?.contents?.filterType(CommentThread) || [];
this.contents = observe(threads.map((thread) => {
if (thread.comment)
thread.comment.setActions(__privateGet(this, _actions7));
thread.setActions(__privateGet(this, _actions7));
return thread;
}));
__privateSet(this, _continuation3, body_node?.contents?.firstOfType(ContinuationItem));
}
/**
* Applies given sort option to the comments.
* @param sort - Sort type.
*/
async applySort(sort) {
if (!this.header)
throw new InnertubeError("Page header is missing. Cannot apply sort option.");
let button;
if (sort === "TOP_COMMENTS") {
button = this.header.sort_menu?.sub_menu_items?.at(0);
} else if (sort === "NEWEST_FIRST") {
button = this.header.sort_menu?.sub_menu_items?.at(1);
}
if (!button)
throw new InnertubeError("Could not find target button.");
if (button.selected)
return this;
const response = await button.endpoint.call(__privateGet(this, _actions7), { parse: true });
return new _Comments(__privateGet(this, _actions7), response, true);
}
/**
* Creates a top-level comment.
* @param text - Comment text.
*/
async createComment(text) {
if (!this.header)
throw new InnertubeError("Page header is missing. Cannot create comment.");
const button = this.header.create_renderer?.as(CommentSimplebox).submit_button;
if (!button)
throw new InnertubeError("Could not find target button. You are probably not logged in.");
if (!button.endpoint)
throw new InnertubeError("Button does not have an endpoint.");
return await button.endpoint.call(__privateGet(this, _actions7), { commentText: text });
}
/**
* Retrieves next batch of comments.
*/
async getContinuation() {
if (!__privateGet(this, _continuation3))
throw new InnertubeError("Continuation not found");
const data = await __privateGet(this, _continuation3).endpoint.call(__privateGet(this, _actions7), { parse: true });
const page = Object.assign({}, __privateGet(this, _page4));
if (!page.on_response_received_endpoints || !data.on_response_received_endpoints)
throw new InnertubeError("Invalid reponse format, missing on_response_received_endpoints.");
page.on_response_received_endpoints.pop();
page.on_response_received_endpoints.push(data.on_response_received_endpoints[0]);
return new _Comments(__privateGet(this, _actions7), page, true);
}
get has_continuation() {
return !!__privateGet(this, _continuation3);
}
get page() {
return __privateGet(this, _page4);
}
};
_page4 = new WeakMap();
_actions7 = new WeakMap();
_continuation3 = new WeakMap();
__name(_Comments, "Comments");
var Comments = _Comments;
// dist/src/parser/youtube/Guide.js
var _page5;
var _Guide = class _Guide {
constructor(data) {
__privateAdd(this, _page5);
__publicField(this, "contents");
__privateSet(this, _page5, parser_exports.parseResponse(data));
if (__privateGet(this, _page5).items)
this.contents = __privateGet(this, _page5).items.array().as(GuideSection, GuideSubscriptionsSection);
}
get page() {
return __privateGet(this, _page5);
}
};
_page5 = new WeakMap();
__name(_Guide, "Guide");
var Guide = _Guide;
// dist/src/parser/youtube/History.js
var _History = class _History extends Feed {
constructor(actions, data, already_parsed = false) {
super(actions, data, already_parsed);
__publicField(this, "sections");
__publicField(this, "feed_actions");
this.sections = this.memo.getType(ItemSection);
this.feed_actions = this.memo.getType(BrowseFeedActions)[0];
}
/**
* Retrieves next batch of contents.
*/
async getContinuation() {
const response = await this.getContinuationData();
if (!response)
throw new Error("No continuation data found");
return new _History(this.actions, response, true);
}
/**
* Removes a video from watch history.
*/
async removeVideo(video_id, pages_to_load = 1) {
let pagesToLoad = pages_to_load;
while (pagesToLoad > 0) {
let feedbackToken;
for (const section of this.sections) {
for (const content of section.contents) {
if (content.is(Video)) {
if (content.video_id === video_id && content.menu) {
feedbackToken = content.menu.top_level_buttons[0].as(Button).endpoint.payload.feedbackToken;
break;
}
} else if (content.is(LockupView)) {
if (content.content_id === video_id) {
const listItems = content.metadata?.menu_button?.on_tap?.payload.panelLoadingStrategy.inlineContent.sheetViewModel.content.listViewModel.listItems;
const listItem = listItems.find((video) => video.listItemViewModel?.title.content === "Remove from watch history");
feedbackToken = listItem.listItemViewModel.rendererContext.commandContext.onTap.innertubeCommand.feedbackEndpoint.feedbackToken;
break;
}
}
}
if (feedbackToken) {
break;
}
}
if (feedbackToken) {
const body = { feedbackTokens: [feedbackToken] };
const response = await this.actions.execute("/feedback", body);
const data = response.data;
if (!data.feedbackResponses[0].isProcessed) {
throw new Error("Failed to remove video from watch history");
}
return true;
}
if (--pagesToLoad > 0) {
try {
Object.assign(this, await this.getContinuation());
} catch {
throw new Error("Unable to find video in watch history");
}
} else {
throw new Error("Unable to find video in watch history");
}
}
return false;
}
};
__name(_History, "History");
var History = _History;
// dist/src/parser/youtube/HomeFeed.js
var _HomeFeed = class _HomeFeed extends FilterableFeed {
constructor(actions, data, already_parsed = false) {
super(actions, data, already_parsed);
__publicField(this, "contents");
__publicField(this, "header");
this.header = this.memo.getType(FeedTabbedHeader)[0];
this.contents = this.memo.getType(RichGrid)[0] || this.page.on_response_received_actions?.[0];
}
/**
* Applies given filter to the feed. Use {@link filters} to get available filters.
* @param filter - Filter to apply.
*/
async applyFilter(filter) {
const feed = await super.getFilteredFeed(filter);
return new _HomeFeed(this.actions, feed.page, true);
}
/**
* Retrieves next batch of contents.
*/
async getContinuation() {
const feed = await super.getContinuation();
feed.page.header = this.page.header;
if (this.header)
feed.page.header_memo?.set(this.header.type, [this.header]);
return new _HomeFeed(this.actions, feed.page, true);
}
};
__name(_HomeFeed, "HomeFeed");
var HomeFeed = _HomeFeed;
// dist/src/parser/youtube/HashtagFeed.js
var _HashtagFeed = class _HashtagFeed extends FilterableFeed {
constructor(actions, response) {
super(actions, response);
__publicField(this, "header");
__publicField(this, "contents");
if (!this.page.contents_memo)
throw new InnertubeError("Unexpected response", this.page);
const tab = this.page.contents_memo.getType(Tab)[0];
if (!tab.content)
throw new InnertubeError("Content tab has no content", tab);
if (this.page.header) {
this.header = this.page.header.item().as(HashtagHeader, PageHeader);
}
this.contents = tab.content.as(RichGrid);
}
/**
* Applies given filter and returns a new {@link HashtagFeed} object. Use {@link HashtagFeed.filters} to get available filters.
* @param filter - Filter to apply.
*/
async applyFilter(filter) {
const response = await super.getFilteredFeed(filter);
return new _HashtagFeed(this.actions, response.page);
}
};
__name(_HashtagFeed, "HashtagFeed");
var HashtagFeed = _HashtagFeed;
// dist/src/parser/youtube/ItemMenu.js
var _page6, _actions8, _items;
var _ItemMenu = class _ItemMenu {
constructor(data, actions) {
__privateAdd(this, _page6);
__privateAdd(this, _actions8);
__privateAdd(this, _items);
__privateSet(this, _page6, data);
__privateSet(this, _actions8, actions);
const menu = data?.live_chat_item_context_menu_supported_renderers;
if (!menu || !menu.is(Menu))
throw new InnertubeError('Response did not have a "live_chat_item_context_menu_supported_renderers" property. The call may have failed.');
__privateSet(this, _items, menu.as(Menu).items);
}
async selectItem(item) {
let endpoint;
if (item instanceof Button) {
if (!item.endpoint)
throw new InnertubeError("Item does not have an endpoint.");
endpoint = item.endpoint;
} else {
const button = __privateGet(this, _items).find((button2) => {
if (!button2.is(MenuServiceItem)) {
return false;
}
const menuServiceItem = button2.as(MenuServiceItem);
return menuServiceItem.icon_type === item;
});
if (!button || !button.is(MenuServiceItem))
throw new InnertubeError(`Button "${item}" not found.`);
endpoint = button.endpoint;
}
if (!endpoint)
throw new InnertubeError("Target button does not have an endpoint.");
return await endpoint.call(__privateGet(this, _actions8), { parse: true });
}
items() {
return __privateGet(this, _items);
}
page() {
return __privateGet(this, _page6);
}
};
_page6 = new WeakMap();
_actions8 = new WeakMap();
_items = new WeakMap();
__name(_ItemMenu, "ItemMenu");
var ItemMenu = _ItemMenu;
// dist/src/parser/youtube/Playlist.js
var _Playlist_instances, getStat_fn;
var _Playlist2 = class _Playlist2 extends Feed {
constructor(actions, data, already_parsed = false) {
super(actions, data, already_parsed);
__privateAdd(this, _Playlist_instances);
__publicField(this, "info");
__publicField(this, "menu");
__publicField(this, "endpoint");
__publicField(this, "messages");
const header = this.memo.getType(PlaylistHeader)[0];
const primary_info = this.memo.getType(PlaylistSidebarPrimaryInfo)[0];
const secondary_info = this.memo.getType(PlaylistSidebarSecondaryInfo)[0];
const video_list = this.memo.getType(PlaylistVideoList)[0];
const alert = this.page.alerts?.firstOfType(Alert);
if (alert && alert.alert_type === "ERROR")
throw new InnertubeError(alert.text.toString(), alert);
if (!primary_info && !secondary_info && Object.keys(this.page).length === 0)
throw new InnertubeError("Got empty continuation response. This is likely the end of the playlist.");
this.info = {
...this.page.metadata?.item().as(PlaylistMetadata),
...{
subtitle: header ? header.subtitle : null,
author: secondary_info?.owner?.as(VideoOwner).author ?? header?.author,
thumbnails: primary_info?.thumbnail_renderer?.as(PlaylistVideoThumbnail, PlaylistCustomThumbnail).thumbnail,
total_items: __privateMethod(this, _Playlist_instances, getStat_fn).call(this, 0, primary_info),
views: __privateMethod(this, _Playlist_instances, getStat_fn).call(this, 1, primary_info),
last_updated: __privateMethod(this, _Playlist_instances, getStat_fn).call(this, 2, primary_info),
can_share: header?.can_share,
can_delete: header?.can_delete,
can_reorder: video_list?.can_reorder,
is_editable: video_list?.is_editable,
privacy: header?.privacy
}
};
this.menu = primary_info?.menu;
this.endpoint = primary_info?.endpoint;
this.messages = this.memo.getType(Message);
}
get items() {
return observe(this.videos.as(PlaylistVideo, ReelItem, ShortsLockupView).filter((video) => video.style !== "PLAYLIST_VIDEO_RENDERER_STYLE_RECOMMENDED_VIDEO"));
}
get has_continuation() {
const section_list = this.memo.getType(SectionList)[0];
if (!section_list)
return super.has_continuation;
return !!this.memo.getType(ContinuationItem).find((node) => !section_list.contents.includes(node));
}
async getContinuationData() {
const section_list = this.memo.getType(SectionList)[0];
if (!section_list)
return await super.getContinuationData();
const playlist_contents_continuation = this.memo.getType(ContinuationItem).find((node) => !section_list.contents.includes(node));
if (!playlist_contents_continuation)
throw new InnertubeError("There are no continuations.");
return await playlist_contents_continuation.endpoint.call(this.actions, { parse: true });
}
async getContinuation() {
const page = await this.getContinuationData();
if (!page)
throw new InnertubeError("Could not get continuation data");
return new _Playlist2(this.actions, page, true);
}
};
_Playlist_instances = new WeakSet();
getStat_fn = /* @__PURE__ */ __name(function(index, primary_info) {
if (!primary_info || !primary_info.stats)
return "N/A";
return primary_info.stats[index]?.toString() || "N/A";
}, "#getStat");
__name(_Playlist2, "Playlist");
var Playlist2 = _Playlist2;
// dist/src/parser/youtube/Library.js
var _Library_instances, getAll_fn;
var _Library = class _Library extends Feed {
constructor(actions, data) {
super(actions, data);
__privateAdd(this, _Library_instances);
__publicField(this, "header");
__publicField(this, "sections");
if (!this.page.contents_memo)
throw new InnertubeError("Page contents not found");
this.header = this.memo.getType(PageHeader)[0];
const shelves = this.page.contents_memo.getType(Shelf);
this.sections = shelves.map((shelf) => ({
type: shelf.icon_type,
title: shelf.title,
contents: shelf.content?.key("items").array() || [],
getAll: /* @__PURE__ */ __name(() => __privateMethod(this, _Library_instances, getAll_fn).call(this, shelf), "getAll")
}));
}
get history() {
return this.sections.find((section) => section.type === "WATCH_HISTORY");
}
get watch_later() {
return this.sections.find((section) => section.type === "WATCH_LATER");
}
get liked_videos() {
return this.sections.find((section) => section.type === "LIKE");
}
get playlists_section() {
return this.sections.find((section) => section.type === "PLAYLISTS");
}
get clips() {
return this.sections.find((section) => section.type === "CONTENT_CUT");
}
};
_Library_instances = new WeakSet();
getAll_fn = /* @__PURE__ */ __name(async function(shelf) {
if (!shelf.menu?.as(Menu).top_level_buttons)
throw new InnertubeError(`The ${shelf.title.text} shelf doesn't have more items`);
const button = shelf.menu.as(Menu).top_level_buttons.firstOfType(Button);
if (!button)
throw new InnertubeError("Did not find target button.");
const page = await button.as(Button).endpoint.call(this.actions, { parse: true });
switch (shelf.icon_type) {
case "LIKE":
case "WATCH_LATER":
return new Playlist2(this.actions, page, true);
case "WATCH_HISTORY":
return new History(this.actions, page, true);
case "CONTENT_CUT":
return new Feed(this.actions, page, true);
default:
throw new InnertubeError("Target shelf not implemented.");
}
}, "#getAll");
__name(_Library, "Library");
var Library = _Library;
// dist/src/parser/youtube/SmoothedQueue.js
function flattenQueue(queue) {
const nodes = [];
for (const group of queue) {
if (Array.isArray(group)) {
for (const node of group) {
nodes.push(node);
}
} else {
nodes.push(group);
}
}
return nodes;
}
__name(flattenQueue, "flattenQueue");
var _DelayQueue = class _DelayQueue {
constructor() {
__publicField(this, "front");
__publicField(this, "back");
this.front = [];
this.back = [];
}
isEmpty() {
return !this.front.length && !this.back.length;
}
clear() {
this.front = [];
this.back = [];
}
getValues() {
return this.front.concat(this.back.reverse());
}
};
__name(_DelayQueue, "DelayQueue");
var DelayQueue = _DelayQueue;
var _last_update_time, _estimated_update_interval, _callback, _action_queue, _next_update_id, _poll_response_delay_queue;
var _SmoothedQueue = class _SmoothedQueue {
constructor() {
__privateAdd(this, _last_update_time);
__privateAdd(this, _estimated_update_interval);
__privateAdd(this, _callback);
__privateAdd(this, _action_queue);
__privateAdd(this, _next_update_id);
__privateAdd(this, _poll_response_delay_queue);
__privateSet(this, _last_update_time, null);
__privateSet(this, _estimated_update_interval, null);
__privateSet(this, _callback, null);
__privateSet(this, _action_queue, []);
__privateSet(this, _next_update_id, null);
__privateSet(this, _poll_response_delay_queue, new DelayQueue());
}
enqueueActionGroup(group) {
if (__privateGet(this, _last_update_time) !== null) {
const delay = Date.now() - __privateGet(this, _last_update_time);
__privateGet(this, _poll_response_delay_queue).back.push(delay);
if (5 < __privateGet(this, _poll_response_delay_queue).front.length + __privateGet(this, _poll_response_delay_queue).back.length) {
if (!__privateGet(this, _poll_response_delay_queue).front.length) {
__privateGet(this, _poll_response_delay_queue).front = __privateGet(this, _poll_response_delay_queue).back;
__privateGet(this, _poll_response_delay_queue).front.reverse();
__privateGet(this, _poll_response_delay_queue).back = [];
}
__privateGet(this, _poll_response_delay_queue).front.pop();
}
__privateSet(this, _estimated_update_interval, Math.max(...__privateGet(this, _poll_response_delay_queue).getValues()));
}
__privateSet(this, _last_update_time, Date.now());
__privateGet(this, _action_queue).push(group);
if (__privateGet(this, _next_update_id) === null) {
__privateSet(this, _next_update_id, setTimeout(this.emitSmoothedActions.bind(this)));
}
}
emitSmoothedActions() {
__privateSet(this, _next_update_id, null);
if (__privateGet(this, _action_queue).length) {
let delay = 1e4;
if (__privateGet(this, _estimated_update_interval) !== null && __privateGet(this, _last_update_time) !== null) {
delay = __privateGet(this, _estimated_update_interval) - Date.now() + __privateGet(this, _last_update_time);
}
delay = __privateGet(this, _action_queue).length < delay / 80 ? 1 : Math.ceil(__privateGet(this, _action_queue).length / (delay / 80));
const actions = flattenQueue(__privateGet(this, _action_queue).splice(0, delay));
if (__privateGet(this, _callback)) {
__privateGet(this, _callback).call(this, actions);
}
if (__privateGet(this, _action_queue) !== null) {
if (delay == 1) {
delay = __privateGet(this, _estimated_update_interval) / __privateGet(this, _action_queue).length;
delay *= Math.random() + 0.5;
delay = Math.min(1e3, delay);
delay = Math.max(80, delay);
} else {
delay = 80;
}
__privateSet(this, _next_update_id, setTimeout(this.emitSmoothedActions.bind(this), delay));
}
}
}
clear() {
if (__privateGet(this, _next_update_id) !== null) {
clearTimeout(__privateGet(this, _next_update_id));
__privateSet(this, _next_update_id, null);
}
__privateSet(this, _action_queue, []);
}
set callback(cb) {
__privateSet(this, _callback, cb);
}
get callback() {
return __privateGet(this, _callback);
}
get action_queue() {
return __privateGet(this, _action_queue);
}
get estimated_update_interval() {
return __privateGet(this, _estimated_update_interval);
}
get last_update_time() {
return __privateGet(this, _last_update_time);
}
get next_update_id() {
return __privateGet(this, _next_update_id);
}
get poll_response_delay_queue() {
return __privateGet(this, _poll_response_delay_queue);
}
};
_last_update_time = new WeakMap();
_estimated_update_interval = new WeakMap();
_callback = new WeakMap();
_action_queue = new WeakMap();
_next_update_id = new WeakMap();
_poll_response_delay_queue = new WeakMap();
__name(_SmoothedQueue, "SmoothedQueue");
var SmoothedQueue = _SmoothedQueue;
// dist/src/parser/youtube/LiveChat.js
var _actions9, _video_id, _channel_id, _continuation4, _mcontinuation, _retry_count, _LiveChat_instances, pollLivechat_fn, emitSmoothedActions_fn, pollMetadata_fn, wait_fn;
var _LiveChat2 = class _LiveChat2 extends EventEmitterLike {
constructor(video_info) {
super();
__privateAdd(this, _LiveChat_instances);
__privateAdd(this, _actions9);
__privateAdd(this, _video_id);
__privateAdd(this, _channel_id);
__privateAdd(this, _continuation4);
__privateAdd(this, _mcontinuation);
__privateAdd(this, _retry_count, 0);
__publicField(this, "smoothed_queue");
__publicField(this, "initial_info");
__publicField(this, "metadata");
__publicField(this, "running", false);
__publicField(this, "is_replay", false);
__privateSet(this, _video_id, video_info.basic_info.id);
__privateSet(this, _channel_id, video_info.basic_info.channel_id);
__privateSet(this, _actions9, video_info.actions);
__privateSet(this, _continuation4, video_info.livechat?.continuation);
this.is_replay = video_info.livechat?.is_replay || false;
this.smoothed_queue = new SmoothedQueue();
this.smoothed_queue.callback = async (actions) => {
if (!actions.length) {
await __privateMethod(this, _LiveChat_instances, wait_fn).call(this, 2e3);
} else if (actions.length < 10) {
await __privateMethod(this, _LiveChat_instances, emitSmoothedActions_fn).call(this, actions);
} else if (this.is_replay) {
__privateMethod(this, _LiveChat_instances, emitSmoothedActions_fn).call(this, actions);
await __privateMethod(this, _LiveChat_instances, wait_fn).call(this, 2e3);
} else {
__privateMethod(this, _LiveChat_instances, emitSmoothedActions_fn).call(this, actions);
}
if (this.running) {
__privateMethod(this, _LiveChat_instances, pollLivechat_fn).call(this);
}
};
}
on(type, listener) {
super.on(type, listener);
}
once(type, listener) {
super.once(type, listener);
}
start() {
if (!this.running) {
this.running = true;
__privateMethod(this, _LiveChat_instances, pollLivechat_fn).call(this);
__privateMethod(this, _LiveChat_instances, pollMetadata_fn).call(this);
}
}
stop() {
this.smoothed_queue.clear();
this.running = false;
}
/**
* Sends a message.
* @param text - Text to send.
*/
async sendMessage(text) {
const writer = LiveMessageParams.encode({
params: {
ids: {
videoId: __privateGet(this, _video_id),
channelId: __privateGet(this, _channel_id)
}
},
number0: 1,
number1: 4
});
const params = btoa(encodeURIComponent(u8ToBase64(writer.finish())));
const response = await __privateGet(this, _actions9).execute("/live_chat/send_message", {
richMessage: { textSegments: [{ text }] },
clientMessageId: Platform.shim.uuidv4(),
client: "WEB",
parse: true,
params
});
if (!response.actions)
throw new InnertubeError("Unexpected response from send_message", response);
return response.actions.array().as(AddChatItemAction, RunAttestationCommand);
}
/**
* Applies given filter to the live chat.
* @param filter - Filter to apply.
*/
applyFilter(filter) {
if (!this.initial_info)
throw new InnertubeError("Cannot apply filter before initial info is retrieved.");
const menu_items = this.initial_info?.header?.view_selector?.sub_menu_items;
if (filter === "TOP_CHAT") {
if (menu_items?.at(0)?.selected)
return;
__privateSet(this, _continuation4, menu_items?.at(0)?.continuation);
} else {
if (menu_items?.at(1)?.selected)
return;
__privateSet(this, _continuation4, menu_items?.at(1)?.continuation);
}
}
/**
* Retrieves given chat item's menu.
*/
async getItemMenu(item) {
if (!item.hasKey("menu_endpoint") || !item.key("menu_endpoint").isInstanceof(NavigationEndpoint))
throw new InnertubeError("This item does not have a menu.", item);
const response = await item.key("menu_endpoint").instanceof(NavigationEndpoint).call(__privateGet(this, _actions9), { parse: true });
if (!response)
throw new InnertubeError("Could not retrieve item menu.", item);
return new ItemMenu(response, __privateGet(this, _actions9));
}
/**
* Equivalent to "clicking" a button.
*/
async selectButton(button) {
return await button.endpoint.call(__privateGet(this, _actions9), { parse: true });
}
};
_actions9 = new WeakMap();
_video_id = new WeakMap();
_channel_id = new WeakMap();
_continuation4 = new WeakMap();
_mcontinuation = new WeakMap();
_retry_count = new WeakMap();
_LiveChat_instances = new WeakSet();
pollLivechat_fn = /* @__PURE__ */ __name(function() {
(async () => {
try {
const response = await __privateGet(this, _actions9).execute(this.is_replay ? "live_chat/get_live_chat_replay" : "live_chat/get_live_chat", { continuation: __privateGet(this, _continuation4), parse: true });
const contents = response.continuation_contents;
if (!contents) {
this.emit("error", new InnertubeError("Unexpected live chat incremental continuation response", response));
this.emit("end");
this.stop();
}
if (!(contents instanceof LiveChatContinuation)) {
this.stop();
this.emit("end");
return;
}
__privateSet(this, _continuation4, contents.continuation.token);
if (contents.header) {
this.initial_info = contents;
this.emit("start", contents);
if (this.running)
__privateMethod(this, _LiveChat_instances, pollLivechat_fn).call(this);
} else {
this.smoothed_queue.enqueueActionGroup(contents.actions);
}
__privateSet(this, _retry_count, 0);
} catch (err) {
this.emit("error", err);
if (__privateWrapper(this, _retry_count)._++ < 10) {
await __privateMethod(this, _LiveChat_instances, wait_fn).call(this, 2e3);
__privateMethod(this, _LiveChat_instances, pollLivechat_fn).call(this);
} else {
this.emit("error", new InnertubeError("Reached retry limit for incremental continuation requests", err));
this.emit("end");
this.stop();
}
}
})();
}, "#pollLivechat");
emitSmoothedActions_fn = /* @__PURE__ */ __name(async function(action_queue) {
const base = 1e4;
let delay = action_queue.length < base / 80 ? 1 : Math.ceil(action_queue.length / (base / 80));
const emit_delay_ms = delay == 1 ? (delay = base / action_queue.length, delay *= Math.random() + 0.5, delay = Math.min(1e3, delay), delay = Math.max(80, delay)) : delay = 80;
for (const action of action_queue) {
await __privateMethod(this, _LiveChat_instances, wait_fn).call(this, emit_delay_ms);
this.emit("chat-update", action);
}
}, "#emitSmoothedActions");
pollMetadata_fn = /* @__PURE__ */ __name(function() {
(async () => {
try {
const payload = { videoId: __privateGet(this, _video_id) };
if (__privateGet(this, _mcontinuation)) {
payload.continuation = __privateGet(this, _mcontinuation);
}
const response = await __privateGet(this, _actions9).execute("/updated_metadata", payload);
const data = parser_exports.parseResponse(response.data);
__privateSet(this, _mcontinuation, data.continuation?.token);
this.metadata = {
title: data.actions?.array().firstOfType(UpdateTitleAction) || this.metadata?.title,
description: data.actions?.array().firstOfType(UpdateDescriptionAction) || this.metadata?.description,
views: data.actions?.array().firstOfType(UpdateViewershipAction) || this.metadata?.views,
likes: data.actions?.array().firstOfType(UpdateToggleButtonTextAction) || this.metadata?.likes,
date: data.actions?.array().firstOfType(UpdateDateTextAction) || this.metadata?.date
};
this.emit("metadata-update", this.metadata);
await __privateMethod(this, _LiveChat_instances, wait_fn).call(this, 5e3);
if (this.running)
__privateMethod(this, _LiveChat_instances, pollMetadata_fn).call(this);
} catch {
await __privateMethod(this, _LiveChat_instances, wait_fn).call(this, 2e3);
if (this.running)
__privateMethod(this, _LiveChat_instances, pollMetadata_fn).call(this);
}
})();
}, "#pollMetadata");
wait_fn = /* @__PURE__ */ __name(async function(ms) {
return new Promise((resolve) => setTimeout(() => resolve(), ms));
}, "#wait");
__name(_LiveChat2, "LiveChat");
var LiveChat2 = _LiveChat2;
// dist/src/parser/youtube/NotificationsMenu.js
var _page7, _actions10;
var _NotificationsMenu = class _NotificationsMenu {
constructor(actions, response) {
__privateAdd(this, _page7);
__privateAdd(this, _actions10);
__publicField(this, "header");
__publicField(this, "contents");
__privateSet(this, _actions10, actions);
__privateSet(this, _page7, parser_exports.parseResponse(response.data));
if (!__privateGet(this, _page7).actions_memo)
throw new InnertubeError("Page actions not found");
this.header = __privateGet(this, _page7).actions_memo.getType(SimpleMenuHeader)[0];
this.contents = __privateGet(this, _page7).actions_memo.getType(Notification);
}
async getContinuation() {
const continuation = __privateGet(this, _page7).actions_memo?.getType(ContinuationItem)[0];
if (!continuation)
throw new InnertubeError("Continuation not found");
const response = await continuation.endpoint.call(__privateGet(this, _actions10), { parse: false });
return new _NotificationsMenu(__privateGet(this, _actions10), response);
}
get page() {
return __privateGet(this, _page7);
}
};
_page7 = new WeakMap();
_actions10 = new WeakMap();
__name(_NotificationsMenu, "NotificationsMenu");
var NotificationsMenu = _NotificationsMenu;
// dist/src/parser/youtube/Search.js
var _Search = class _Search extends Feed {
constructor(actions, data, already_parsed = false) {
super(actions, data, already_parsed);
__publicField(this, "header");
__publicField(this, "results");
__publicField(this, "refinements");
__publicField(this, "estimated_results");
__publicField(this, "sub_menu");
__publicField(this, "watch_card");
__publicField(this, "refinement_cards");
const contents = this.page.contents_memo?.getType(SectionList)[0].contents || this.page.on_response_received_commands?.[0].as(AppendContinuationItemsAction, ReloadContinuationItemsCommand).contents;
if (!contents)
throw new InnertubeError("No contents found in search response");
if (this.page.header)
this.header = this.page.header.item().as(SearchHeader);
this.results = observe(contents.filterType(ItemSection).flatMap((section) => section.contents));
this.refinements = this.page.refinements || [];
this.estimated_results = this.page.estimated_results || 0;
if (this.page.contents_memo) {
this.sub_menu = this.page.contents_memo.getType(SearchSubMenu)[0];
this.watch_card = this.page.contents_memo.getType(UniversalWatchCard)[0];
}
this.refinement_cards = this.results?.firstOfType(HorizontalCardList);
}
/**
* Applies given refinement card and returns a new {@link Search} object. Use {@link refinement_card_queries} to get a list of available refinement cards.
*/
async selectRefinementCard(card) {
let target_card;
if (typeof card === "string") {
if (!this.refinement_cards)
throw new InnertubeError("No refinement cards found.");
target_card = this.refinement_cards?.cards.find((refinement_card) => {
return refinement_card.is(SearchRefinementCard) && refinement_card.query === card;
});
if (!target_card)
throw new InnertubeError(`Refinement card "${card}" not found`, { available_cards: this.refinement_card_queries });
} else if (card.type === "SearchRefinementCard") {
target_card = card;
} else {
throw new InnertubeError("Invalid refinement card!");
}
const page = await target_card.endpoint.call(this.actions, { parse: true });
return new _Search(this.actions, page, true);
}
/**
* Returns a list of refinement card queries.
*/
get refinement_card_queries() {
return this.refinement_cards?.cards.as(SearchRefinementCard).map((card) => card.query) || [];
}
/**
* Retrieves next batch of search results.
*/
async getContinuation() {
const response = await this.getContinuationData();
if (!response)
throw new InnertubeError("Could not get continuation data");
return new _Search(this.actions, response, true);
}
};
__name(_Search, "Search");
var Search = _Search;
// dist/src/parser/youtube/Settings.js
var _page8, _actions11;
var _Settings = class _Settings {
constructor(actions, response) {
__privateAdd(this, _page8);
__privateAdd(this, _actions11);
__publicField(this, "sidebar");
__publicField(this, "introduction");
__publicField(this, "sections");
__privateSet(this, _actions11, actions);
__privateSet(this, _page8, parser_exports.parseResponse(response.data));
this.sidebar = __privateGet(this, _page8).sidebar?.as(SettingsSidebar);
if (!__privateGet(this, _page8).contents)
throw new InnertubeError("Page contents not found");
const tab = __privateGet(this, _page8).contents.item().as(TwoColumnBrowseResults).tabs.find((tab2) => tab2.selected);
if (!tab)
throw new InnertubeError("Target tab not found");
const contents = tab.content?.as(SectionList).contents.as(ItemSection);
this.introduction = contents?.shift()?.contents?.firstOfType(PageIntroduction);
this.sections = contents?.map((el) => ({
title: el.header?.is(CommentsHeader, ItemSectionHeader, ItemSectionTabbedHeader) ? el.header.title.toString() : null,
contents: el.contents
}));
}
/**
* Selects an item from the sidebar menu. Use {@link sidebar_items} to see available items.
*/
async selectSidebarItem(target_item) {
if (!this.sidebar)
throw new InnertubeError("Sidebar not available");
let item;
if (typeof target_item === "string") {
item = this.sidebar.items.find((link) => link.title === target_item);
if (!item)
throw new InnertubeError(`Item "${target_item}" not found`, { available_items: this.sidebar_items });
} else if (target_item?.is(CompactLink)) {
item = target_item;
} else {
throw new InnertubeError("Invalid item", { target_item });
}
const response = await item.endpoint.call(__privateGet(this, _actions11), { parse: false });
return new _Settings(__privateGet(this, _actions11), response);
}
/**
* Finds a setting by name and returns it. Use {@link setting_options} to see available options.
*/
getSettingOption(name) {
if (!this.sections)
throw new InnertubeError("Sections not available");
for (const section of this.sections) {
if (!section.contents)
continue;
for (const el of section.contents) {
const options = el.as(SettingsOptions).options;
if (options) {
for (const option of options) {
if (option.is(SettingsSwitch) && option.title?.toString() === name)
return option;
}
}
}
}
throw new InnertubeError(`Option "${name}" not found`, { available_options: this.setting_options });
}
/**
* Returns settings available in the page.
*/
get setting_options() {
if (!this.sections)
throw new InnertubeError("Sections not available");
let options = [];
for (const section of this.sections) {
if (!section.contents)
continue;
for (const el of section.contents) {
if (el.as(SettingsOptions).options)
options = options.concat(el.as(SettingsOptions).options);
}
}
return options.map((opt) => opt.title?.toString()).filter((el) => el);
}
/**
* Returns options available in the sidebar.
*/
get sidebar_items() {
if (!this.sidebar)
throw new InnertubeError("Sidebar not available");
return this.sidebar.items.map((item) => item.title.toString());
}
get page() {
return __privateGet(this, _page8);
}
};
_page8 = new WeakMap();
_actions11 = new WeakMap();
__name(_Settings, "Settings");
var Settings = _Settings;
// dist/src/parser/youtube/VideoInfo.js
var _watch_next_continuation;
var _VideoInfo = class _VideoInfo extends MediaInfo {
constructor(data, actions, cpn) {
super(data, actions, cpn);
__publicField(this, "primary_info");
__publicField(this, "secondary_info");
__publicField(this, "playlist");
__publicField(this, "game_info");
__publicField(this, "merchandise");
__publicField(this, "related_chip_cloud");
__publicField(this, "watch_next_feed");
__publicField(this, "player_overlays");
__publicField(this, "comments_entry_point_header");
__publicField(this, "livechat");
__publicField(this, "autoplay");
__publicField(this, "heat_map");
__privateAdd(this, _watch_next_continuation);
const [info2, next] = this.page;
if (this.streaming_data) {
const default_audio_track = this.streaming_data.adaptive_formats.find((format) => format.audio_track?.audio_is_default);
if (default_audio_track) {
this.streaming_data.formats.forEach((format) => format.language = default_audio_track.language);
} else if (this.captions?.caption_tracks && this.captions?.caption_tracks.length > 0) {
const auto_generated_caption_track = this.captions.caption_tracks.find((caption) => caption.kind === "asr");
const language_code = auto_generated_caption_track?.language_code;
this.streaming_data.adaptive_formats.forEach((format) => {
if (format.has_audio) {
format.language = language_code;
}
});
this.streaming_data.formats.forEach((format) => format.language = language_code);
}
}
const two_col = next?.contents?.item().as(TwoColumnWatchNextResults);
const results = two_col?.results;
const secondary_results = two_col?.secondary_results;
if (results && secondary_results) {
if (info2.microformat?.is(PlayerMicroformat) && info2.microformat?.category === "Gaming") {
const row = results.firstOfType(VideoSecondaryInfo)?.metadata?.rows?.firstOfType(RichMetadataRow);
if (row?.is(RichMetadataRow)) {
this.game_info = {
title: row?.contents?.firstOfType(RichMetadata)?.title,
release_year: row?.contents?.firstOfType(RichMetadata)?.subtitle
};
}
}
this.primary_info = results.firstOfType(VideoPrimaryInfo);
this.secondary_info = results.firstOfType(VideoSecondaryInfo);
this.merchandise = results.firstOfType(MerchandiseShelf);
this.related_chip_cloud = secondary_results.firstOfType(RelatedChipCloud)?.content.as(ChipCloud);
if (two_col?.playlist) {
this.playlist = two_col.playlist;
}
this.watch_next_feed = secondary_results.firstOfType(ItemSection)?.contents || secondary_results;
if (this.watch_next_feed && Array.isArray(this.watch_next_feed) && this.watch_next_feed.at(-1)?.is(ContinuationItem))
__privateSet(this, _watch_next_continuation, this.watch_next_feed.pop()?.as(ContinuationItem));
this.player_overlays = next?.player_overlays?.item().as(PlayerOverlay);
if (two_col?.autoplay) {
this.autoplay = two_col.autoplay;
}
const segmented_like_dislike_button = this.primary_info?.menu?.top_level_buttons.firstOfType(SegmentedLikeDislikeButton);
if (segmented_like_dislike_button?.like_button?.is(ToggleButton) && segmented_like_dislike_button?.dislike_button?.is(ToggleButton)) {
this.basic_info.like_count = segmented_like_dislike_button?.like_button?.like_count;
this.basic_info.is_liked = segmented_like_dislike_button?.like_button?.is_toggled;
this.basic_info.is_disliked = segmented_like_dislike_button?.dislike_button?.is_toggled;
}
const segmented_like_dislike_button_view = this.primary_info?.menu?.top_level_buttons.firstOfType(SegmentedLikeDislikeButtonView);
if (segmented_like_dislike_button_view) {
this.basic_info.like_count = segmented_like_dislike_button_view.like_count;
if (segmented_like_dislike_button_view.like_button) {
const like_status = segmented_like_dislike_button_view.like_button.like_status_entity.like_status;
this.basic_info.is_liked = like_status === "LIKE";
this.basic_info.is_disliked = like_status === "DISLIKE";
}
}
const comments_entry_point = results.find((node) => {
return node.is(ItemSection) && node.target_id === "comments-entry-point";
});
this.comments_entry_point_header = comments_entry_point?.contents?.firstOfType(CommentsEntryPointHeader);
this.livechat = next?.contents_memo?.getType(LiveChat)[0];
const macro_markers_list_for_heatmap = this.page[1]?.contents_memo?.getType(MacroMarkersListEntity);
let calculated_heat_map = null;
if (macro_markers_list_for_heatmap) {
const heatmap_markers_entity = macro_markers_list_for_heatmap.find((markers) => markers.isHeatmap());
if (heatmap_markers_entity) {
try {
calculated_heat_map = heatmap_markers_entity.toHeatmap();
} catch {
}
}
}
this.heat_map = calculated_heat_map;
}
}
/**
* Applies given filter to the watch next feed. Use {@link filters} to get available filters.
* @param target_filter - Filter to apply.
*/
async selectFilter(target_filter) {
if (!this.related_chip_cloud)
throw new InnertubeError("Chip cloud not found, cannot apply filter");
let cloud_chip;
if (typeof target_filter === "string") {
const filter = this.related_chip_cloud?.chips?.find((chip) => chip.text === target_filter);
if (!filter)
throw new InnertubeError("Invalid filter", { available_filters: this.filters });
cloud_chip = filter;
} else if (target_filter?.is(ChipCloudChip)) {
cloud_chip = target_filter;
} else {
throw new InnertubeError("Invalid cloud chip", target_filter);
}
if (cloud_chip.is_selected)
return this;
const response = await cloud_chip.endpoint?.call(this.actions, { parse: true });
const data = response?.on_response_received_endpoints?.find((endpoint) => {
return endpoint.is(ReloadContinuationItemsCommand) && endpoint.target_id === "watch-next-feed";
});
this.watch_next_feed = data?.contents;
return this;
}
/**
* Adds video to the watch history.
*/
async addToWatchHistory() {
return super.addToWatchHistory();
}
/**
* Updates watch time for the video.
*/
async updateWatchTime(startTime) {
return super.updateWatchTime(startTime);
}
/**
* Retrieves watch next feed continuation.
*/
async getWatchNextContinuation() {
if (!__privateGet(this, _watch_next_continuation))
throw new InnertubeError("Watch next feed continuation not found");
const response = await __privateGet(this, _watch_next_continuation)?.endpoint.call(this.actions, { parse: true });
const data = response?.on_response_received_endpoints?.firstOfType(AppendContinuationItemsAction);
if (!data)
throw new InnertubeError("AppendContinuationItemsAction not found");
this.watch_next_feed = data?.contents;
if (this.watch_next_feed?.at(-1)?.is(ContinuationItem)) {
__privateSet(this, _watch_next_continuation, this.watch_next_feed.pop()?.as(ContinuationItem));
} else {
__privateSet(this, _watch_next_continuation, void 0);
}
return this;
}
/**
* Likes the video.
*/
async like() {
const segmented_like_dislike_button_view = this.primary_info?.menu?.top_level_buttons.firstOfType(SegmentedLikeDislikeButtonView);
if (segmented_like_dislike_button_view) {
const button2 = segmented_like_dislike_button_view?.like_button?.toggle_button;
if (!button2 || !button2.default_button || !segmented_like_dislike_button_view.like_button)
throw new InnertubeError("Like button not found", { video_id: this.basic_info.id });
const like_status = segmented_like_dislike_button_view.like_button.like_status_entity.like_status;
if (like_status === "LIKE")
throw new InnertubeError("This video is already liked", { video_id: this.basic_info.id });
if (!button2.default_button.on_tap)
throw new InnertubeError("onTap command not found", { video_id: this.basic_info.id });
const endpoint = new NavigationEndpoint(button2.default_button.on_tap.payload.commands.find((cmd) => cmd.innertubeCommand));
return await endpoint.call(this.actions);
}
const segmented_like_dislike_button = this.primary_info?.menu?.top_level_buttons.firstOfType(SegmentedLikeDislikeButton);
const button = segmented_like_dislike_button?.like_button;
if (!button)
throw new InnertubeError("Like button not found", { video_id: this.basic_info.id });
if (!button.is(ToggleButton))
throw new InnertubeError("Like button is not a toggle button. This action is likely disabled for this video.", { video_id: this.basic_info.id });
if (button.is_toggled)
throw new InnertubeError("This video is already liked", { video_id: this.basic_info.id });
return await button.endpoint.call(this.actions);
}
/**
* Dislikes the video.
*/
async dislike() {
const segmented_like_dislike_button_view = this.primary_info?.menu?.top_level_buttons.firstOfType(SegmentedLikeDislikeButtonView);
if (segmented_like_dislike_button_view) {
const button2 = segmented_like_dislike_button_view?.dislike_button?.toggle_button;
if (!button2 || !button2.default_button || !segmented_like_dislike_button_view.dislike_button || !segmented_like_dislike_button_view.like_button)
throw new InnertubeError("Dislike button not found", { video_id: this.basic_info.id });
const like_status = segmented_like_dislike_button_view.like_button.like_status_entity.like_status;
if (like_status === "DISLIKE")
throw new InnertubeError("This video is already disliked", { video_id: this.basic_info.id });
if (!button2.default_button.on_tap)
throw new InnertubeError("onTap command not found", { video_id: this.basic_info.id });
const endpoint = new NavigationEndpoint(button2.default_button.on_tap.payload.commands.find((cmd) => cmd.innertubeCommand));
return await endpoint.call(this.actions);
}
const segmented_like_dislike_button = this.primary_info?.menu?.top_level_buttons.firstOfType(SegmentedLikeDislikeButton);
const button = segmented_like_dislike_button?.dislike_button;
if (!button)
throw new InnertubeError("Dislike button not found", { video_id: this.basic_info.id });
if (!button.is(ToggleButton))
throw new InnertubeError("Dislike button is not a toggle button. This action is likely disabled for this video.", { video_id: this.basic_info.id });
if (button.is_toggled)
throw new InnertubeError("This video is already disliked", { video_id: this.basic_info.id });
return await button.endpoint.call(this.actions);
}
/**
* Removes like/dislike.
*/
async removeRating() {
let button;
const segmented_like_dislike_button_view = this.primary_info?.menu?.top_level_buttons.firstOfType(SegmentedLikeDislikeButtonView);
if (segmented_like_dislike_button_view) {
const toggle_button = segmented_like_dislike_button_view?.like_button?.toggle_button;
if (!toggle_button || !toggle_button.default_button || !segmented_like_dislike_button_view.like_button)
throw new InnertubeError("Like button not found", { video_id: this.basic_info.id });
const like_status = segmented_like_dislike_button_view.like_button.like_status_entity.like_status;
if (like_status === "LIKE") {
button = segmented_like_dislike_button_view?.like_button?.toggle_button;
} else if (like_status === "DISLIKE") {
button = segmented_like_dislike_button_view?.dislike_button?.toggle_button;
} else {
throw new InnertubeError("This video is not liked/disliked", { video_id: this.basic_info.id });
}
if (!button || !button.toggled_button)
throw new InnertubeError("Like/Dislike button not found", { video_id: this.basic_info.id });
if (!button.toggled_button.on_tap)
throw new InnertubeError("onTap command not found", { video_id: this.basic_info.id });
const endpoint = new NavigationEndpoint(button.toggled_button.on_tap.payload.commands.find((cmd) => cmd.innertubeCommand));
return await endpoint.call(this.actions);
}
const segmented_like_dislike_button = this.primary_info?.menu?.top_level_buttons.firstOfType(SegmentedLikeDislikeButton);
const like_button = segmented_like_dislike_button?.like_button;
const dislike_button = segmented_like_dislike_button?.dislike_button;
if (!like_button?.is(ToggleButton) || !dislike_button?.is(ToggleButton))
throw new InnertubeError("Like/Dislike button is not a toggle button. This action is likely disabled for this video.", { video_id: this.basic_info.id });
if (like_button?.is_toggled) {
button = like_button;
} else if (dislike_button?.is_toggled) {
button = dislike_button;
}
if (!button)
throw new InnertubeError("This video is not liked/disliked", { video_id: this.basic_info.id });
return await button.toggled_endpoint.call(this.actions);
}
/**
* Retrieves Live Chat if available.
*/
getLiveChat() {
if (!this.livechat)
throw new InnertubeError("Live Chat is not available", { video_id: this.basic_info.id });
return new LiveChat2(this);
}
/**
* Retrieves trailer info if available (typically for non-purchased movies or films).
* @returns `VideoInfo` for the trailer, or `null` if none.
*/
getTrailerInfo() {
if (this.has_trailer && this.playability_status?.error_screen) {
let player_response;
if (this.playability_status.error_screen.is(PlayerLegacyDesktopYpcTrailer)) {
player_response = this.playability_status.error_screen.trailer?.player_response;
} else if (this.playability_status.error_screen.is(YpcTrailer)) {
player_response = this.playability_status.error_screen.player_response;
}
if (player_response) {
return new _VideoInfo([{ data: player_response }], this.actions, this.cpn);
}
}
return null;
}
/**
* Watch next feed filters.
*/
get filters() {
return this.related_chip_cloud?.chips?.map((chip) => chip.text?.toString()) || [];
}
/**
* Checks if continuation is available for the watch next feed.
*/
get wn_has_continuation() {
return !!__privateGet(this, _watch_next_continuation);
}
/**
* Gets the endpoint of the autoplay video
*/
get autoplay_video_endpoint() {
return this.autoplay?.sets?.[0]?.autoplay_video || null;
}
/**
* Checks if trailer is available.
*/
get has_trailer() {
return !!this.playability_status?.error_screen?.is(PlayerLegacyDesktopYpcTrailer, YpcTrailer);
}
/**
* Get songs used in the video.
*/
get music_tracks() {
const description_content = this.page[1]?.engagement_panels?.filter((panel) => panel.content?.is(StructuredDescriptionContent));
if (description_content !== void 0 && description_content.length > 0) {
const music_section = description_content[0].content?.as(StructuredDescriptionContent)?.items?.filterType(VideoDescriptionMusicSection);
if (music_section !== void 0 && music_section.length > 0) {
return music_section[0].carousel_lockups?.map((lookup) => {
let song;
let artist;
let album;
let license;
let videoId;
let channelId;
song = lookup.video_lockup?.title?.toString();
videoId = lookup.video_lockup?.endpoint?.payload.videoId;
for (let i = 0; i < lookup.info_rows.length; i++) {
const info_row = lookup.info_rows[i];
if (info_row.info_row_expand_status_key === void 0) {
if (song === void 0) {
song = info_row.default_metadata?.toString() || info_row.expanded_metadata?.toString();
if (videoId === void 0) {
const endpoint = info_row.default_metadata?.endpoint || info_row.expanded_metadata?.endpoint;
videoId = endpoint?.payload?.videoId;
}
} else {
album = info_row.default_metadata?.toString() || info_row.expanded_metadata?.toString();
}
} else {
if (info_row.info_row_expand_status_key?.indexOf("structured-description-music-section-artists-row-state-id") !== -1) {
artist = info_row.default_metadata?.toString() || info_row.expanded_metadata?.toString();
if (channelId === void 0) {
const endpoint = info_row.default_metadata?.endpoint || info_row.expanded_metadata?.endpoint;
channelId = endpoint?.payload?.browseId;
}
}
if (info_row.info_row_expand_status_key?.indexOf("structured-description-music-section-licenses-row-state-id") !== -1) {
license = info_row.default_metadata?.toString() || info_row.expanded_metadata?.toString();
}
}
}
return { song, artist, album, license, videoId, channelId };
});
}
}
return [];
}
};
_watch_next_continuation = new WeakMap();
__name(_VideoInfo, "VideoInfo");
var VideoInfo = _VideoInfo;
// dist/src/parser/youtube/TranscriptInfo.js
var _page9, _actions12;
var _TranscriptInfo = class _TranscriptInfo {
constructor(actions, response) {
__privateAdd(this, _page9);
__privateAdd(this, _actions12);
__publicField(this, "transcript");
__privateSet(this, _page9, parser_exports.parseResponse(response.data));
__privateSet(this, _actions12, actions);
if (!__privateGet(this, _page9).actions_memo)
throw new Error("Page actions not found");
this.transcript = __privateGet(this, _page9).actions_memo.getType(Transcript)[0];
}
/**
* Selects a language from the language menu and returns the updated transcript.
* @param language - Language to select.
*/
async selectLanguage(language) {
const target_menu_item = this.transcript.content?.footer?.language_menu?.sub_menu_items?.find((item) => item.title.toString() === language);
if (!target_menu_item)
throw new Error(`Language not found: ${language}`);
if (target_menu_item.selected)
return this;
const response = await __privateGet(this, _actions12).execute("/get_transcript", {
params: target_menu_item.continuation
});
return new _TranscriptInfo(__privateGet(this, _actions12), response);
}
/**
* Returns available languages.
*/
get languages() {
return this.transcript.content?.footer?.language_menu?.sub_menu_items?.map((item) => item.title.toString()) || [];
}
/**
* Returns the currently selected language.
*/
get selectedLanguage() {
return this.transcript.content?.footer?.language_menu?.sub_menu_items?.find((item) => item.selected)?.title.toString() || "";
}
get page() {
return __privateGet(this, _page9);
}
};
_page9 = new WeakMap();
_actions12 = new WeakMap();
__name(_TranscriptInfo, "TranscriptInfo");
var TranscriptInfo = _TranscriptInfo;
// dist/src/parser/ytmusic/index.js
var ytmusic_exports = {};
__export(ytmusic_exports, {
Album: () => Album,
Artist: () => Artist,
Explore: () => Explore,
HomeFeed: () => HomeFeed2,
Library: () => Library2,
LibraryContinuation: () => LibraryContinuation,
Playlist: () => Playlist3,
Recap: () => Recap,
Search: () => Search2,
TrackInfo: () => TrackInfo_default
});
// dist/src/parser/ytmusic/Album.js
var _page10;
var _Album = class _Album {
constructor(response) {
__privateAdd(this, _page10);
__publicField(this, "header");
__publicField(this, "contents");
__publicField(this, "sections");
__publicField(this, "background");
__publicField(this, "url");
__privateSet(this, _page10, parser_exports.parseResponse(response.data));
if (!__privateGet(this, _page10).contents_memo)
throw new Error("No contents found in the response");
this.header = __privateGet(this, _page10).contents_memo.getType(MusicDetailHeader, MusicResponsiveHeader)?.[0];
this.contents = __privateGet(this, _page10).contents_memo.getType(MusicShelf)?.[0].contents || observe([]);
this.sections = __privateGet(this, _page10).contents_memo.getType(MusicCarouselShelf) || observe([]);
this.background = __privateGet(this, _page10).background;
this.url = __privateGet(this, _page10).microformat?.as(MicroformatData).url_canonical;
}
get page() {
return __privateGet(this, _page10);
}
};
_page10 = new WeakMap();
__name(_Album, "Album");
var Album = _Album;
// dist/src/parser/ytmusic/Artist.js
var _page11, _actions13;
var _Artist = class _Artist {
constructor(response, actions) {
__privateAdd(this, _page11);
__privateAdd(this, _actions13);
__publicField(this, "header");
__publicField(this, "sections");
__privateSet(this, _page11, parser_exports.parseResponse(response.data));
__privateSet(this, _actions13, actions);
this.header = this.page.header?.item().as(MusicImmersiveHeader, MusicVisualHeader, MusicHeader);
const music_shelf = __privateGet(this, _page11).contents_memo?.getType(MusicShelf) || [];
const music_carousel_shelf = __privateGet(this, _page11).contents_memo?.getType(MusicCarouselShelf) || [];
this.sections = observe([...music_shelf, ...music_carousel_shelf]);
}
async getAllSongs() {
const music_shelves = this.sections.filter((section) => section.type === "MusicShelf");
if (!music_shelves.length)
throw new InnertubeError("Could not find any node of type MusicShelf.");
const shelf = music_shelves.find((shelf2) => shelf2.title?.text === "Top songs");
if (!shelf)
throw new InnertubeError("Could not find target shelf (Top songs).");
if (!shelf.endpoint)
throw new InnertubeError("Target shelf (Top songs) did not have an endpoint.");
const page = await shelf.endpoint.call(__privateGet(this, _actions13), { client: "YTMUSIC", parse: true });
return page.contents_memo?.getType(MusicPlaylistShelf)?.[0];
}
get page() {
return __privateGet(this, _page11);
}
};
_page11 = new WeakMap();
_actions13 = new WeakMap();
__name(_Artist, "Artist");
var Artist = _Artist;
// dist/src/parser/ytmusic/Explore.js
var _page12;
var _Explore = class _Explore {
constructor(response) {
__privateAdd(this, _page12);
__publicField(this, "top_buttons");
__publicField(this, "sections");
__privateSet(this, _page12, parser_exports.parseResponse(response.data));
const tab = __privateGet(this, _page12).contents?.item().as(SingleColumnBrowseResults).tabs.find((tab2) => tab2.selected);
if (!tab)
throw new InnertubeError("Could not find target tab.");
const section_list = tab.content?.as(SectionList);
if (!section_list)
throw new InnertubeError("Target tab did not have any content.");
this.top_buttons = section_list.contents.firstOfType(Grid)?.items.as(MusicNavigationButton) || [];
this.sections = section_list.contents.filterType(MusicCarouselShelf);
}
get page() {
return __privateGet(this, _page12);
}
};
_page12 = new WeakMap();
__name(_Explore, "Explore");
var Explore = _Explore;
// dist/src/parser/ytmusic/HomeFeed.js
var _page13, _actions14, _continuation5;
var _HomeFeed2 = class _HomeFeed2 {
constructor(response, actions) {
__privateAdd(this, _page13);
__privateAdd(this, _actions14);
__privateAdd(this, _continuation5);
__publicField(this, "sections");
__publicField(this, "header");
__privateSet(this, _actions14, actions);
__privateSet(this, _page13, parser_exports.parseResponse(response.data));
const tab = __privateGet(this, _page13).contents?.item().as(SingleColumnBrowseResults).tabs.find((tab2) => tab2.selected);
if (!tab)
throw new InnertubeError("Could not find Home tab.");
if (tab.content === null) {
if (!__privateGet(this, _page13).continuation_contents)
throw new InnertubeError("Continuation did not have any content.");
__privateSet(this, _continuation5, __privateGet(this, _page13).continuation_contents.as(SectionListContinuation).continuation);
this.sections = __privateGet(this, _page13).continuation_contents.as(SectionListContinuation).contents?.as(MusicCarouselShelf);
return;
}
this.header = tab.content?.as(SectionList).header?.as(ChipCloud);
__privateSet(this, _continuation5, tab.content?.as(SectionList).continuation);
this.sections = tab.content?.as(SectionList).contents.as(MusicCarouselShelf, MusicTasteBuilderShelf);
}
/**
* Retrieves home feed continuation.
*/
async getContinuation() {
if (!__privateGet(this, _continuation5))
throw new InnertubeError("Continuation not found.");
const response = await __privateGet(this, _actions14).execute("/browse", {
client: "YTMUSIC",
continuation: __privateGet(this, _continuation5)
});
return new _HomeFeed2(response, __privateGet(this, _actions14));
}
async applyFilter(target_filter) {
let cloud_chip;
if (typeof target_filter === "string") {
cloud_chip = this.header?.chips?.as(ChipCloudChip).find((chip) => chip.text === target_filter);
if (!cloud_chip)
throw new InnertubeError("Could not find filter with given name.", { available_filters: this.filters });
} else if (target_filter?.is(ChipCloudChip)) {
cloud_chip = target_filter;
}
if (!cloud_chip)
throw new InnertubeError("Invalid filter", { available_filters: this.filters });
if (cloud_chip?.is_selected)
return this;
if (!cloud_chip.endpoint)
throw new InnertubeError("Selected filter does not have an endpoint.");
const response = await cloud_chip.endpoint.call(__privateGet(this, _actions14), { client: "YTMUSIC" });
return new _HomeFeed2(response, __privateGet(this, _actions14));
}
get filters() {
return this.header?.chips?.as(ChipCloudChip).map((chip) => chip.text) || [];
}
get has_continuation() {
return !!__privateGet(this, _continuation5);
}
get page() {
return __privateGet(this, _page13);
}
};
_page13 = new WeakMap();
_actions14 = new WeakMap();
_continuation5 = new WeakMap();
__name(_HomeFeed2, "HomeFeed");
var HomeFeed2 = _HomeFeed2;
// dist/src/parser/ytmusic/Library.js
var _page14, _actions15, _continuation6;
var _Library2 = class _Library2 {
constructor(response, actions) {
__privateAdd(this, _page14);
__privateAdd(this, _actions15);
__privateAdd(this, _continuation6);
__publicField(this, "header");
__publicField(this, "contents");
__privateSet(this, _page14, parser_exports.parseResponse(response.data));
__privateSet(this, _actions15, actions);
const section_list = __privateGet(this, _page14).contents_memo?.getType(SectionList)[0];
this.header = section_list?.header?.as(MusicSideAlignedItem);
this.contents = section_list?.contents?.as(Grid, MusicShelf);
__privateSet(this, _continuation6, this.contents?.find((list) => list.continuation)?.continuation);
}
/**
* Applies given sort option to the library items.
*/
async applySort(sort_by) {
let target_item;
if (typeof sort_by === "string") {
const button = __privateGet(this, _page14).contents_memo?.getType(MusicSortFilterButton)[0];
const options = button?.menu?.options.filter((item) => item instanceof MusicMultiSelectMenuItem);
target_item = options?.find((item) => item.title === sort_by);
if (!target_item)
throw new InnertubeError(`Sort option "${sort_by}" not found`, { available_filters: options.map((item) => item.title) });
} else {
target_item = sort_by;
}
if (!target_item.endpoint)
throw new InnertubeError("Invalid sort option");
if (target_item.selected)
return this;
const cmd = target_item.endpoint.payload?.commands?.find((cmd2) => cmd2.browseSectionListReloadEndpoint)?.browseSectionListReloadEndpoint;
if (!cmd)
throw new InnertubeError("Failed to find sort option command");
const response = await __privateGet(this, _actions15).execute("/browse", {
client: "YTMUSIC",
continuation: cmd.continuation.reloadContinuationData.continuation,
parse: true
});
const previously_selected_item = __privateGet(this, _page14).contents_memo?.getType(MusicMultiSelectMenuItem)?.find((item) => item.selected);
if (previously_selected_item)
previously_selected_item.selected = false;
target_item.selected = true;
this.contents = response.continuation_contents?.as(SectionListContinuation).contents?.as(Grid, MusicShelf);
return this;
}
/**
* Applies given filter to the library.
*/
async applyFilter(filter) {
let target_chip;
const chip_cloud = __privateGet(this, _page14).contents_memo?.getType(ChipCloud)[0];
if (typeof filter === "string") {
target_chip = chip_cloud?.chips.find((chip) => chip.text === filter);
if (!target_chip)
throw new InnertubeError(`Filter "${filter}" not found`, { available_filters: this.filters });
} else {
target_chip = filter;
}
if (!target_chip.endpoint)
throw new InnertubeError("Invalid filter", filter);
const target_cmd = new NavigationEndpoint(target_chip.endpoint.payload?.commands?.[0]);
const response = await target_cmd.call(__privateGet(this, _actions15), { client: "YTMUSIC" });
return new _Library2(response, __privateGet(this, _actions15));
}
/**
* Retrieves continuation of the library items.
*/
async getContinuation() {
if (!__privateGet(this, _continuation6))
throw new InnertubeError("No continuation available");
const page = await __privateGet(this, _actions15).execute("/browse", {
client: "YTMUSIC",
continuation: __privateGet(this, _continuation6)
});
return new LibraryContinuation(page, __privateGet(this, _actions15));
}
get has_continuation() {
return !!__privateGet(this, _continuation6);
}
get sort_options() {
const button = __privateGet(this, _page14).contents_memo?.getType(MusicSortFilterButton)[0];
const options = button?.menu?.options.filter((item) => item instanceof MusicMultiSelectMenuItem);
return options.map((item) => item.title);
}
get filters() {
return __privateGet(this, _page14).contents_memo?.getType(ChipCloud)?.[0].chips.map((chip) => chip.text) || [];
}
get page() {
return __privateGet(this, _page14);
}
};
_page14 = new WeakMap();
_actions15 = new WeakMap();
_continuation6 = new WeakMap();
__name(_Library2, "Library");
var Library2 = _Library2;
var _page15, _actions16, _continuation7;
var _LibraryContinuation = class _LibraryContinuation {
constructor(response, actions) {
__privateAdd(this, _page15);
__privateAdd(this, _actions16);
__privateAdd(this, _continuation7);
__publicField(this, "contents");
__privateSet(this, _page15, parser_exports.parseResponse(response.data));
__privateSet(this, _actions16, actions);
if (!__privateGet(this, _page15).continuation_contents)
throw new InnertubeError("No continuation contents found");
this.contents = __privateGet(this, _page15).continuation_contents.as(MusicShelfContinuation, GridContinuation);
__privateSet(this, _continuation7, this.contents.continuation || null);
}
async getContinuation() {
if (!__privateGet(this, _continuation7))
throw new InnertubeError("No continuation available");
const response = await __privateGet(this, _actions16).execute("/browse", {
client: "YTMUSIC",
continuation: __privateGet(this, _continuation7)
});
return new _LibraryContinuation(response, __privateGet(this, _actions16));
}
get has_continuation() {
return !!__privateGet(this, _continuation7);
}
get page() {
return __privateGet(this, _page15);
}
};
_page15 = new WeakMap();
_actions16 = new WeakMap();
_continuation7 = new WeakMap();
__name(_LibraryContinuation, "LibraryContinuation");
var LibraryContinuation = _LibraryContinuation;
// dist/src/parser/ytmusic/Playlist.js
var _page16, _actions17, _continuation8, _last_fetched_suggestions, _suggestions_continuation, _Playlist_instances2, fetchSuggestions_fn;
var _Playlist3 = class _Playlist3 {
constructor(response, actions) {
__privateAdd(this, _Playlist_instances2);
__privateAdd(this, _page16);
__privateAdd(this, _actions17);
__privateAdd(this, _continuation8);
__publicField(this, "header");
__publicField(this, "contents");
__publicField(this, "background");
__privateAdd(this, _last_fetched_suggestions);
__privateAdd(this, _suggestions_continuation);
__privateSet(this, _actions17, actions);
__privateSet(this, _page16, parser_exports.parseResponse(response.data));
__privateSet(this, _last_fetched_suggestions, null);
__privateSet(this, _suggestions_continuation, null);
if (__privateGet(this, _page16).continuation_contents) {
const data = __privateGet(this, _page16).continuation_contents?.as(MusicPlaylistShelfContinuation);
if (!data.contents)
throw new InnertubeError("No contents found in the response");
this.contents = data.contents.as(MusicResponsiveListItem, ContinuationItem);
const continuation_item = this.contents.firstOfType(ContinuationItem);
__privateSet(this, _continuation8, data.continuation || continuation_item);
} else if (__privateGet(this, _page16).contents_memo) {
this.header = __privateGet(this, _page16).contents_memo.getType(MusicResponsiveHeader, MusicEditablePlaylistDetailHeader, MusicDetailHeader)?.[0];
this.contents = __privateGet(this, _page16).contents_memo.getType(MusicPlaylistShelf)?.[0]?.contents.as(MusicResponsiveListItem, ContinuationItem) || observe([]);
this.background = __privateGet(this, _page16).background;
const continuation_item = this.contents.firstOfType(ContinuationItem);
__privateSet(this, _continuation8, __privateGet(this, _page16).contents_memo.getType(MusicPlaylistShelf)?.[0]?.continuation || continuation_item);
} else if (__privateGet(this, _page16).on_response_received_actions) {
const append_continuation_action = __privateGet(this, _page16).on_response_received_actions.firstOfType(AppendContinuationItemsAction);
this.contents = append_continuation_action?.contents?.as(MusicResponsiveListItem, ContinuationItem);
__privateSet(this, _continuation8, this.contents?.firstOfType(ContinuationItem));
}
}
/**
* Retrieves playlist items continuation.
*/
async getContinuation() {
if (!__privateGet(this, _continuation8))
throw new InnertubeError("Continuation not found.");
let response;
if (typeof __privateGet(this, _continuation8) === "string") {
response = await __privateGet(this, _actions17).execute("/browse", {
client: "YTMUSIC",
continuation: __privateGet(this, _continuation8)
});
} else {
response = await __privateGet(this, _continuation8).endpoint.call(__privateGet(this, _actions17), { client: "YTMUSIC" });
}
return new _Playlist3(response, __privateGet(this, _actions17));
}
/**
* Retrieves related playlists
*/
async getRelated() {
const target_section_list = __privateGet(this, _page16).contents_memo?.getType(SectionList).find((section_list) => section_list.continuation);
if (!target_section_list)
throw new InnertubeError('Could not find "Related" section.');
let section_continuation = target_section_list.continuation;
while (section_continuation) {
const data = await __privateGet(this, _actions17).execute("/browse", {
client: "YTMUSIC",
continuation: section_continuation,
parse: true
});
const section_list = data.continuation_contents?.as(SectionListContinuation);
const sections = section_list?.contents?.as(MusicCarouselShelf, MusicShelf);
const related = sections?.find((section) => section.is(MusicCarouselShelf))?.as(MusicCarouselShelf);
if (related)
return related;
section_continuation = section_list?.continuation;
}
throw new InnertubeError("Could not fetch related playlists.");
}
async getSuggestions(refresh = true) {
const require_fetch = refresh || !__privateGet(this, _last_fetched_suggestions);
const fetch_promise = require_fetch ? __privateMethod(this, _Playlist_instances2, fetchSuggestions_fn).call(this) : Promise.resolve(null);
const fetch_result = await fetch_promise;
if (fetch_result) {
__privateSet(this, _last_fetched_suggestions, fetch_result.items);
__privateSet(this, _suggestions_continuation, fetch_result.continuation);
}
return fetch_result?.items || __privateGet(this, _last_fetched_suggestions) || observe([]);
}
get page() {
return __privateGet(this, _page16);
}
get items() {
return this.contents || observe([]);
}
get has_continuation() {
return !!__privateGet(this, _continuation8);
}
};
_page16 = new WeakMap();
_actions17 = new WeakMap();
_continuation8 = new WeakMap();
_last_fetched_suggestions = new WeakMap();
_suggestions_continuation = new WeakMap();
_Playlist_instances2 = new WeakSet();
fetchSuggestions_fn = /* @__PURE__ */ __name(async function() {
const target_section_list = __privateGet(this, _page16).contents_memo?.getType(SectionList).find((section_list) => section_list.continuation);
const continuation = __privateGet(this, _suggestions_continuation) || target_section_list?.continuation;
if (continuation) {
const page = await __privateGet(this, _actions17).execute("/browse", {
client: "YTMUSIC",
continuation,
parse: true
});
const section_list = page.continuation_contents?.as(SectionListContinuation);
const sections = section_list?.contents?.as(MusicCarouselShelf, MusicShelf);
const suggestions = sections?.find((section) => section.is(MusicShelf))?.as(MusicShelf);
return {
items: suggestions?.contents || observe([]),
continuation: suggestions?.continuation || null
};
}
return {
items: observe([]),
continuation: null
};
}, "#fetchSuggestions");
__name(_Playlist3, "Playlist");
var Playlist3 = _Playlist3;
// dist/src/parser/ytmusic/Recap.js
var _page17, _actions18;
var _Recap = class _Recap {
constructor(response, actions) {
__privateAdd(this, _page17);
__privateAdd(this, _actions18);
__publicField(this, "header");
__publicField(this, "sections");
__privateSet(this, _page17, parser_exports.parseResponse(response.data));
__privateSet(this, _actions18, actions);
const header = __privateGet(this, _page17).header?.item();
this.header = header?.is(MusicElementHeader) ? __privateGet(this, _page17).header?.item().as(MusicElementHeader).element?.model?.as(HighlightsCarousel) : __privateGet(this, _page17).header?.item().as(MusicHeader);
const tab = __privateGet(this, _page17).contents?.item().as(SingleColumnBrowseResults).tabs.firstOfType(Tab);
if (!tab)
throw new InnertubeError("Target tab not found");
this.sections = tab.content?.as(SectionList).contents.as(ItemSection, MusicCarouselShelf, Message);
}
/**
* Retrieves recap playlist.
*/
async getPlaylist() {
if (!this.header)
throw new InnertubeError("Header not found");
if (!this.header.is(HighlightsCarousel))
throw new InnertubeError("Recap playlist not available, check back later.");
const endpoint = this.header.panels[0].text_on_tap_endpoint;
const response = await endpoint.call(__privateGet(this, _actions18), { client: "YTMUSIC" });
return new Playlist3(response, __privateGet(this, _actions18));
}
get page() {
return __privateGet(this, _page17);
}
};
_page17 = new WeakMap();
_actions18 = new WeakMap();
__name(_Recap, "Recap");
var Recap = _Recap;
// dist/src/parser/ytmusic/Search.js
var _page18, _actions19, _continuation9;
var _Search2 = class _Search2 {
constructor(response, actions, is_filtered) {
__privateAdd(this, _page18);
__privateAdd(this, _actions19);
__privateAdd(this, _continuation9);
__publicField(this, "header");
__publicField(this, "contents");
__privateSet(this, _actions19, actions);
__privateSet(this, _page18, parser_exports.parseResponse(response.data));
if (!__privateGet(this, _page18).contents || !__privateGet(this, _page18).contents_memo)
throw new InnertubeError("Response did not contain any contents.");
const tab = __privateGet(this, _page18).contents.item().as(TabbedSearchResults).tabs.find((tab2) => tab2.selected);
if (!tab)
throw new InnertubeError("Could not find target tab.");
const tab_content = tab.content?.as(SectionList);
if (!tab_content)
throw new InnertubeError("Target tab did not have any content.");
this.header = tab_content.header?.as(ChipCloud);
this.contents = tab_content.contents.as(MusicShelf, MusicCardShelf, ItemSection);
if (is_filtered) {
__privateSet(this, _continuation9, this.contents.firstOfType(MusicShelf)?.continuation);
}
}
/**
* Loads more items for the given shelf.
*/
async getMore(shelf) {
if (!shelf || !shelf.endpoint)
throw new InnertubeError("Cannot retrieve more items for this shelf because it does not have an endpoint.");
const response = await shelf.endpoint.call(__privateGet(this, _actions19), { client: "YTMUSIC" });
if (!response)
throw new InnertubeError("Endpoint did not return any data");
return new _Search2(response, __privateGet(this, _actions19), true);
}
/**
* Retrieves search continuation. Only available for filtered searches and shelf continuations.
*/
async getContinuation() {
if (!__privateGet(this, _continuation9))
throw new InnertubeError("Continuation not found.");
const response = await __privateGet(this, _actions19).execute("/search", {
continuation: __privateGet(this, _continuation9),
client: "YTMUSIC"
});
return new SearchContinuation(__privateGet(this, _actions19), response);
}
/**
* Applies given filter to the search.
*/
async applyFilter(target_filter) {
let cloud_chip;
if (typeof target_filter === "string") {
cloud_chip = this.header?.chips?.as(ChipCloudChip).find((chip) => chip.text === target_filter);
if (!cloud_chip)
throw new InnertubeError("Could not find filter with given name.", { available_filters: this.filters });
} else if (target_filter?.is(ChipCloudChip)) {
cloud_chip = target_filter;
}
if (!cloud_chip)
throw new InnertubeError("Invalid filter", { available_filters: this.filters });
if (cloud_chip?.is_selected)
return this;
if (!cloud_chip.endpoint)
throw new InnertubeError("Selected filter does not have an endpoint.");
const response = await cloud_chip.endpoint.call(__privateGet(this, _actions19), { client: "YTMUSIC" });
return new _Search2(response, __privateGet(this, _actions19), true);
}
get filters() {
return this.header?.chips?.as(ChipCloudChip).map((chip) => chip.text) || [];
}
get has_continuation() {
return !!__privateGet(this, _continuation9);
}
get did_you_mean() {
return __privateGet(this, _page18).contents_memo?.getType(DidYouMean)[0];
}
get showing_results_for() {
return __privateGet(this, _page18).contents_memo?.getType(ShowingResultsFor)[0];
}
get message() {
return __privateGet(this, _page18).contents_memo?.getType(Message)[0];
}
get songs() {
return this.contents?.filterType(MusicShelf).find((section) => section.title.toString() === "Songs");
}
get videos() {
return this.contents?.filterType(MusicShelf).find((section) => section.title.toString() === "Videos");
}
get albums() {
return this.contents?.filterType(MusicShelf).find((section) => section.title.toString() === "Albums");
}
get artists() {
return this.contents?.filterType(MusicShelf).find((section) => section.title.toString() === "Artists");
}
get playlists() {
return this.contents?.filterType(MusicShelf).find((section) => section.title.toString() === "Community playlists");
}
get page() {
return __privateGet(this, _page18);
}
};
_page18 = new WeakMap();
_actions19 = new WeakMap();
_continuation9 = new WeakMap();
__name(_Search2, "Search");
var Search2 = _Search2;
var _actions20, _page19;
var _SearchContinuation = class _SearchContinuation {
constructor(actions, response) {
__privateAdd(this, _actions20);
__privateAdd(this, _page19);
__publicField(this, "header");
__publicField(this, "contents");
__privateSet(this, _actions20, actions);
__privateSet(this, _page19, parser_exports.parseResponse(response.data));
this.header = __privateGet(this, _page19).header?.item().as(MusicHeader);
this.contents = __privateGet(this, _page19).continuation_contents?.as(MusicShelfContinuation);
}
async getContinuation() {
if (!this.contents?.continuation)
throw new InnertubeError("Continuation not found.");
const response = await __privateGet(this, _actions20).execute("/search", {
continuation: this.contents.continuation,
client: "YTMUSIC"
});
return new _SearchContinuation(__privateGet(this, _actions20), response);
}
get has_continuation() {
return !!this.contents?.continuation;
}
get page() {
return __privateGet(this, _page19);
}
};
_actions20 = new WeakMap();
_page19 = new WeakMap();
__name(_SearchContinuation, "SearchContinuation");
var SearchContinuation = _SearchContinuation;
// dist/src/parser/ytmusic/TrackInfo.js
var _TrackInfo = class _TrackInfo extends MediaInfo {
constructor(data, actions, cpn) {
super(data, actions, cpn);
__publicField(this, "tabs");
__publicField(this, "current_video_endpoint");
__publicField(this, "player_overlays");
const next = this.page[1];
if (next) {
const tabbed_results = next.contents_memo?.getType(WatchNextTabbedResults)?.[0];
this.tabs = tabbed_results?.tabs.as(Tab);
this.current_video_endpoint = next.current_video_endpoint;
this.player_overlays = next.player_overlays?.item().as(PlayerOverlay);
}
}
/**
* Retrieves contents of the given tab.
*/
async getTab(title_or_page_type) {
if (!this.tabs)
throw new InnertubeError("Could not find any tab");
const target_tab = this.tabs.find((tab) => tab.title === title_or_page_type) || this.tabs.find((tab) => tab.endpoint.payload.browseEndpointContextSupportedConfigs?.browseEndpointContextMusicConfig?.pageType === title_or_page_type) || this.tabs?.[0];
if (!target_tab)
throw new InnertubeError(`Tab "${title_or_page_type}" not found`, { available_tabs: this.available_tabs });
if (target_tab.content)
return target_tab.content;
const page = await target_tab.endpoint.call(this.actions, { client: "YTMUSIC", parse: true });
if (page.contents?.item().type === "Message")
return page.contents.item().as(Message);
if (!page.contents)
throw new InnertubeError("Page contents was empty", page);
return page.contents.item().as(SectionList).contents;
}
/**
* Retrieves up next.
*/
async getUpNext(automix = true) {
const music_queue = await this.getTab("Up next");
if (!music_queue || !music_queue.content)
throw new InnertubeError("Music queue was empty, the video id is probably invalid.", music_queue);
const playlist_panel = music_queue.content.as(PlaylistPanel);
if (!playlist_panel.playlist_id && automix) {
const automix_preview_video = playlist_panel.contents.firstOfType(AutomixPreviewVideo);
if (!automix_preview_video)
throw new InnertubeError("Automix item not found");
const page = await automix_preview_video.playlist_video?.endpoint.call(this.actions, {
videoId: this.basic_info.id,
client: "YTMUSIC",
parse: true
});
if (!page || !page.contents_memo)
throw new InnertubeError("Could not fetch automix");
return page.contents_memo.getType(PlaylistPanel)?.[0];
}
return playlist_panel;
}
/**
* Retrieves up next continuation relative to current TrackInfo.
*/
async getUpNextContinuation(playlistPanel) {
if (!this.current_video_endpoint)
throw new InnertubeError("Current Video Endpoint was not defined.", this.current_video_endpoint);
if (playlistPanel instanceof PlaylistPanel && playlistPanel.playlist_id !== this.current_video_endpoint.payload.playlistId) {
throw new InnertubeError("PlaylistId from TrackInfo does not match with PlaylistPanel");
}
const watch_next_endpoint = new NavigationEndpoint({ watchNextEndpoint: { ...this.current_video_endpoint.payload, continuation: playlistPanel.continuation } });
const response = await watch_next_endpoint.call(this.actions, { ...this.current_video_endpoint.payload, continuation: playlistPanel.continuation, client: "YTMUSIC", parse: true });
const playlistCont = response.continuation_contents?.as(PlaylistPanelContinuation);
if (!playlistCont)
throw new InnertubeError("No PlaylistPanel Continuation available.", response);
return playlistCont;
}
/**
* Retrieves related content.
*/
async getRelated() {
return await this.getTab("MUSIC_PAGE_TYPE_TRACK_RELATED");
}
/**
* Retrieves lyrics.
*/
async getLyrics() {
const tab = await this.getTab("MUSIC_PAGE_TYPE_TRACK_LYRICS");
return tab.firstOfType(MusicDescriptionShelf);
}
/**
* Adds the song to the watch history.
*/
async addToWatchHistory() {
return super.addToWatchHistory(Constants_exports.CLIENTS.YTMUSIC.NAME, Constants_exports.CLIENTS.YTMUSIC.VERSION, "https://music.");
}
/**
* Updates the watch time of the song.
*/
async updateWatchTime(startTime) {
return super.updateWatchTime(startTime, Constants_exports.CLIENTS.YTMUSIC.NAME, Constants_exports.CLIENTS.YTMUSIC.VERSION, "https://music.");
}
get available_tabs() {
return this.tabs ? this.tabs.map((tab) => tab.title) : [];
}
};
__name(_TrackInfo, "TrackInfo");
var TrackInfo = _TrackInfo;
var TrackInfo_default = TrackInfo;
// dist/src/parser/ytkids/index.js
var ytkids_exports = {};
__export(ytkids_exports, {
Channel: () => Channel3,
HomeFeed: () => HomeFeed3,
Search: () => Search3,
VideoInfo: () => VideoInfo2
});
// dist/src/parser/ytkids/Channel.js
var _Channel3 = class _Channel3 extends Feed {
constructor(actions, data, already_parsed = false) {
super(actions, data, already_parsed);
__publicField(this, "header");
__publicField(this, "contents");
this.header = this.page.header?.item().as(C4TabbedHeader);
this.contents = this.memo.getType(ItemSection)[0] || this.page.continuation_contents?.as(ItemSectionContinuation);
}
/**
* Retrieves next batch of content.
*/
async getContinuation() {
if (!this.contents)
throw new Error("No continuation available.");
const continuation_request = new NavigationEndpoint({
continuationCommand: {
token: this.contents.continuation,
request: "CONTINUATION_REQUEST_TYPE_BROWSE"
}
});
const continuation_response = await continuation_request.call(this.actions, { client: "YTKIDS" });
return new _Channel3(this.actions, continuation_response);
}
get has_continuation() {
return !!this.contents?.continuation;
}
};
__name(_Channel3, "Channel");
var Channel3 = _Channel3;
// dist/src/parser/ytkids/HomeFeed.js
var _HomeFeed3 = class _HomeFeed3 extends Feed {
constructor(actions, data, already_parsed = false) {
super(actions, data, already_parsed);
__publicField(this, "header");
__publicField(this, "contents");
this.header = this.page.header?.item().as(KidsCategoriesHeader);
this.contents = this.page.contents?.item().as(KidsHomeScreen);
}
/**
* Retrieves the contents of the given category tab. Use {@link HomeFeed.categories} to get a list of available categories.
* @param tab - The tab to select
*/
async selectCategoryTab(tab) {
let target_tab;
if (typeof tab === "string") {
target_tab = this.header?.category_tabs.find((t) => t.title.toString() === tab);
} else if (tab?.is(KidsCategoryTab)) {
target_tab = tab;
}
if (!target_tab)
throw new InnertubeError(`Tab "${tab}" not found`);
const page = await target_tab.endpoint.call(this.actions, { client: "YTKIDS", parse: true });
page.header = this.page.header;
page.header_memo = this.page.header_memo;
return new _HomeFeed3(this.actions, page, true);
}
get categories() {
return this.header?.category_tabs.map((tab) => tab.title.toString()) || [];
}
};
__name(_HomeFeed3, "HomeFeed");
var HomeFeed3 = _HomeFeed3;
// dist/src/parser/ytkids/Search.js
var _Search3 = class _Search3 extends Feed {
constructor(actions, data) {
super(actions, data);
__publicField(this, "estimated_results");
__publicField(this, "contents");
this.estimated_results = this.page.estimated_results;
const item_section = this.memo.getType(ItemSection)[0];
if (!item_section)
throw new InnertubeError("No item section found in search response.");
this.contents = item_section.contents;
}
};
__name(_Search3, "Search");
var Search3 = _Search3;
// dist/src/parser/ytkids/VideoInfo.js
var _VideoInfo2 = class _VideoInfo2 extends MediaInfo {
constructor(data, actions, cpn) {
super(data, actions, cpn);
__publicField(this, "slim_video_metadata");
__publicField(this, "watch_next_feed");
__publicField(this, "current_video_endpoint");
__publicField(this, "player_overlays");
const next = this.page[1];
const two_col = next?.contents?.item().as(TwoColumnWatchNextResults);
const results = two_col?.results;
const secondary_results = two_col?.secondary_results;
if (results && secondary_results) {
this.slim_video_metadata = results.firstOfType(ItemSection)?.contents?.firstOfType(SlimVideoMetadata);
this.watch_next_feed = secondary_results.firstOfType(ItemSection)?.contents || secondary_results;
this.current_video_endpoint = next?.current_video_endpoint;
this.player_overlays = next?.player_overlays?.item().as(PlayerOverlay);
}
}
};
__name(_VideoInfo2, "VideoInfo");
var VideoInfo2 = _VideoInfo2;
// dist/src/parser/ytshorts/index.js
var ytshorts_exports = {};
__export(ytshorts_exports, {
ShortFormVideoInfo: () => ShortFormVideoInfo
});
// dist/src/parser/ytshorts/ShortFormVideoInfo.js
var _watch_next_continuation2;
var _ShortFormVideoInfo = class _ShortFormVideoInfo extends MediaInfo {
constructor(data, actions, cpn, reel_watch_sequence_response) {
super(data, actions, cpn);
__privateAdd(this, _watch_next_continuation2);
__publicField(this, "watch_next_feed");
__publicField(this, "current_video_endpoint");
__publicField(this, "player_overlays");
if (reel_watch_sequence_response) {
const reel_watch_sequence = parser_exports.parseResponse(reel_watch_sequence_response.data);
if (reel_watch_sequence.entries)
this.watch_next_feed = reel_watch_sequence.entries;
if (reel_watch_sequence.continuation_endpoint)
__privateSet(this, _watch_next_continuation2, reel_watch_sequence.continuation_endpoint?.as(ContinuationCommand2));
}
}
async getWatchNextContinuation() {
if (!__privateGet(this, _watch_next_continuation2))
throw new InnertubeError("Continuation not found");
const response = await this.actions.execute("/reel/reel_watch_sequence", {
sequenceParams: __privateGet(this, _watch_next_continuation2).token,
parse: true
});
if (response.entries)
this.watch_next_feed = response.entries;
__privateSet(this, _watch_next_continuation2, response.continuation_endpoint?.as(ContinuationCommand2));
return this;
}
/**
* Checks if continuation is available for the watch next feed.
*/
get wn_has_continuation() {
return !!__privateGet(this, _watch_next_continuation2);
}
};
_watch_next_continuation2 = new WeakMap();
__name(_ShortFormVideoInfo, "ShortFormVideoInfo");
var ShortFormVideoInfo = _ShortFormVideoInfo;
// dist/src/parser/classes/misc/Author.js
var _Author = class _Author {
constructor(item, badges, thumbs, id) {
__publicField(this, "id");
__publicField(this, "name");
__publicField(this, "thumbnails");
__publicField(this, "endpoint");
__publicField(this, "badges");
__publicField(this, "is_moderator");
__publicField(this, "is_verified");
__publicField(this, "is_verified_artist");
__publicField(this, "url");
const nav_text = new Text2(item);
this.id = id || nav_text?.runs?.[0]?.endpoint?.payload?.browseId || nav_text?.endpoint?.payload?.browseId || "N/A";
this.name = nav_text?.text || "N/A";
this.thumbnails = thumbs ? Thumbnail.fromResponse(thumbs) : [];
this.endpoint = nav_text?.runs?.[0]?.endpoint || nav_text?.endpoint;
if (badges) {
if (Array.isArray(badges)) {
this.badges = parser_exports.parseArray(badges);
this.is_moderator = this.badges?.some((badge) => badge.icon_type == "MODERATOR");
this.is_verified = this.badges?.some((badge) => badge.style == "BADGE_STYLE_TYPE_VERIFIED");
this.is_verified_artist = this.badges?.some((badge) => badge.style == "BADGE_STYLE_TYPE_VERIFIED_ARTIST");
} else {
this.badges = observe([]);
this.is_verified = !!badges.isVerified;
this.is_verified_artist = !!badges.isArtist;
}
} else {
this.badges = observe([]);
}
this.url = nav_text?.runs?.[0]?.endpoint?.metadata?.api_url === "/browse" && `${URLS.YT_BASE}${nav_text?.runs?.[0]?.endpoint?.payload?.canonicalBaseUrl || `/u/${nav_text?.runs?.[0]?.endpoint?.payload?.browseId}`}` || `${URLS.YT_BASE}${nav_text?.endpoint?.payload?.canonicalBaseUrl || `/u/${nav_text?.endpoint?.payload?.browseId}`}`;
}
get best_thumbnail() {
return this.thumbnails[0];
}
};
__name(_Author, "Author");
var Author = _Author;
// dist/src/utils/user-agents.js
var user_agents_default = {
"desktop": [
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.0 Safari/537.36 Edg/141.0.0.0",
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6.1 Safari/605.1.15",
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.0 Safari/537.36 Edg/141.0.0.0",
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36 OPR/121.0.0.0",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36",
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.0 Safari/537.36",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/139.0.0.0 Safari/537.36",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.6 Safari/605.1.15",
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36",
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/139.0.0.0 Safari/537.36",
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36",
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36",
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36",
"Mozilla/5.0 (X11; CrOS x86_64 14541.0.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36",
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36 OPR/121.0.0.0",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.0.1 Safari/605.1.15",
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36 OPR/122.0.0.0",
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.0 Safari/537.36 Edg/141.0.0.0",
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36"
],
"mobile": [
"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Mobile Safari/537.36",
"Mozilla/5.0 (iPhone; CPU iPhone OS 18_6_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.6 Mobile/15E148 Safari/604.1",
"Mozilla/5.0 (iPhone; CPU iPhone OS 15_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.6 Mobile/15E148 Safari/604.1",
"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.0 Mobile Safari/537.36",
"Mozilla/5.0 (iPhone; CPU iPhone OS 18_6_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.6 Mobile/15E148 Safari/604.1",
"Mozilla/5.0 (iPhone; CPU iPhone OS 16_6_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1",
"Mozilla/5.0 (iPhone; CPU iPhone OS 18_6_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.6 Mobile/15E148 Safari/604.1",
"Mozilla/5.0 (iPhone; CPU iPhone OS 18_6_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) GSA/388.0.811331708 Mobile/15E148 Safari/604.1",
"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.0 Mobile Safari/537.36",
"Mozilla/5.0 (iPhone; CPU iPhone OS 18_6_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.6 Mobile/15E148 Safari/604.1",
"Mozilla/5.0 (iPhone; CPU iPhone OS 18_7_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) GSA/388.0.811331708 Mobile/15E148 Safari/604.1",
"Mozilla/5.0 (iPhone; CPU iPhone OS 18_6_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.6 Mobile/15E148 Safari/604.1",
"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Mobile Safari/537.36",
"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Mobile Safari/537.36",
"Mozilla/5.0 (iPhone; CPU iPhone OS 18_6_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.6 Mobile/15E148 Safari/604.1",
"Mozilla/5.0 (iPhone; CPU iPhone OS 18_6_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.6 Mobile/15E148 Safari/604.1",
"Mozilla/5.0 (iPhone; CPU iPhone OS 18_6_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.6 Mobile/15E148 Safari/604.1",
"Mozilla/5.0 (iPhone; CPU iPhone OS 18_6_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.6 Mobile/15E148 Safari/604.1",
"Mozilla/5.0 (iPhone; CPU iPhone OS 18_6_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) GSA/388.0.811331708 Mobile/15E148 Safari/604.1",
"Mozilla/5.0 (iPhone; CPU iPhone OS 18_6_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.6 Mobile/15E148 Safari/604.1",
"Mozilla/5.0 (iPhone; CPU iPhone OS 18_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.0.1 Mobile/15E148 Safari/604.1",
"Mozilla/5.0 (iPhone; CPU iPhone OS 18_6_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.6 Mobile/15E148 Safari/604.1",
"Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1",
"Mozilla/5.0 (iPhone; CPU iPhone OS 18_6_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.6 Mobile/15E148 Safari/604.1",
"Mozilla/5.0 (iPhone; CPU iPhone OS 18_6_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) GSA/388.0.811331708 Mobile/15E148 Safari/604.1",
"Mozilla/5.0 (iPhone; CPU iPhone OS 18_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.0.1 Mobile/15E148 Safari/604.1"
]
};
// dist/src/utils/Utils.js
var TAG_2 = "Utils";
var shim;
var _Platform = class _Platform {
static load(platform) {
shim = platform;
}
static get shim() {
if (!shim) {
throw new Error("Platform is not loaded");
}
return shim;
}
};
__name(_Platform, "Platform");
var Platform = _Platform;
var _InnertubeError = class _InnertubeError extends Error {
constructor(message, info2) {
super(message);
__publicField(this, "date");
__publicField(this, "version");
__publicField(this, "info");
if (info2) {
this.info = info2;
}
this.date = /* @__PURE__ */ new Date();
this.version = package_default.version;
}
};
__name(_InnertubeError, "InnertubeError");
var InnertubeError = _InnertubeError;
var _ParsingError = class _ParsingError extends InnertubeError {
};
__name(_ParsingError, "ParsingError");
var ParsingError = _ParsingError;
var _MissingParamError = class _MissingParamError extends InnertubeError {
};
__name(_MissingParamError, "MissingParamError");
var MissingParamError = _MissingParamError;
var _OAuth2Error = class _OAuth2Error extends InnertubeError {
};
__name(_OAuth2Error, "OAuth2Error");
var OAuth2Error = _OAuth2Error;
var _PlayerError = class _PlayerError extends Error {
};
__name(_PlayerError, "PlayerError");
var PlayerError = _PlayerError;
var _SessionError = class _SessionError extends Error {
};
__name(_SessionError, "SessionError");
var SessionError = _SessionError;
var _ChannelError = class _ChannelError extends Error {
};
__name(_ChannelError, "ChannelError");
var ChannelError = _ChannelError;
function deepCompare(obj1, obj2) {
const keys = Reflect.ownKeys(obj1);
return keys.some((key) => {
const is_text = obj2[key] instanceof Text2;
if (!is_text && typeof obj2[key] === "object") {
return JSON.stringify(obj1[key]) === JSON.stringify(obj2[key]);
}
return obj1[key] === (is_text ? obj2[key].toString() : obj2[key]);
});
}
__name(deepCompare, "deepCompare");
function getStringBetweenStrings(data, start_string, end_string) {
const regex = new RegExp(`${escapeStringRegexp(start_string)}(.*?)${escapeStringRegexp(end_string)}`, "s");
const match = data.match(regex);
return match ? match[1] : void 0;
}
__name(getStringBetweenStrings, "getStringBetweenStrings");
function escapeStringRegexp(input) {
return input.replace(/[|\\{}()[\]^$+*?.]/g, "\\$&").replace(/-/g, "\\x2d");
}
__name(escapeStringRegexp, "escapeStringRegexp");
function getRandomUserAgent(type) {
const available_agents = user_agents_default[type];
const random_index = Math.floor(Math.random() * available_agents.length);
return available_agents[random_index];
}
__name(getRandomUserAgent, "getRandomUserAgent");
async function generateSidAuth(sid) {
const youtube = "https://www.youtube.com";
const timestamp = Math.floor((/* @__PURE__ */ new Date()).getTime() / 1e3);
const input = [timestamp, sid, youtube].join(" ");
const gen_hash = await Platform.shim.sha1Hash(input);
return ["SAPISIDHASH", [timestamp, gen_hash].join("_")].join(" ");
}
__name(generateSidAuth, "generateSidAuth");
function generateRandomString(length) {
const result = [];
const alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_";
for (let i = 0; i < length; i++) {
result.push(alphabet.charAt(Math.floor(Math.random() * alphabet.length)));
}
return result.join("");
}
__name(generateRandomString, "generateRandomString");
function timeToSeconds(time) {
const params = time.split(":").map((param) => parseInt(param.replace(/\D/g, "")));
switch (params.length) {
case 1:
return params[0];
case 2:
return params[0] * 60 + params[1];
case 3:
return params[0] * 3600 + params[1] * 60 + params[2];
default:
throw new Error("Invalid time string");
}
}
__name(timeToSeconds, "timeToSeconds");
function concatMemos(...iterables) {
const memo = new Memo();
for (const iterable of iterables) {
if (!iterable)
continue;
for (const item of iterable) {
const memo_item = memo.get(item[0]);
if (memo_item) {
memo.set(item[0], [...memo_item, ...item[1]]);
continue;
}
memo.set(...item);
}
}
return memo;
}
__name(concatMemos, "concatMemos");
function throwIfMissing(params) {
for (const [key, value] of Object.entries(params)) {
if (!value)
throw new MissingParamError(`${key} is missing`);
}
}
__name(throwIfMissing, "throwIfMissing");
function hasKeys(params, ...keys) {
for (const key of keys) {
if (!Reflect.has(params, key) || params[key] === void 0)
return false;
}
return true;
}
__name(hasKeys, "hasKeys");
async function* streamToIterable(stream) {
const reader = stream.getReader();
try {
while (true) {
const { done, value } = await reader.read();
if (done) {
return;
}
yield value;
}
} finally {
reader.releaseLock();
}
}
__name(streamToIterable, "streamToIterable");
var debugFetch = /* @__PURE__ */ __name((input, init) => {
const url = typeof input === "string" ? new URL(input) : input instanceof URL ? input : new URL(input.url);
const headers = init?.headers ? new Headers(init.headers) : input instanceof Request ? input.headers : new Headers();
const arr_headers = [...headers];
const body_contents = init?.body ? typeof init.body === "string" ? headers.get("content-type") === "application/json" ? JSON.stringify(JSON.parse(init.body), null, 2) : (
// Body is string and json
init.body
) : (
// Body is string
" <binary>"
) : (
// Body is not string
" (none)"
);
const headers_serialized = arr_headers.length > 0 ? `${arr_headers.map(([key, value]) => ` ${key}: ${value}`).join("\n")}` : " (none)";
warn(TAG_2, `Fetch:
url: ${url.toString()}
method: ${init?.method || "GET"}
headers:
${headers_serialized}
' +
' body:
${body_contents}`);
return Platform.shim.fetch(input, init);
}, "debugFetch");
function u8ToBase64(u8) {
return btoa(String.fromCharCode.apply(null, Array.from(u8)));
}
__name(u8ToBase64, "u8ToBase64");
function base64ToU8(base64) {
const standard_base64 = base64.replace(/-/g, "+").replace(/_/g, "/");
const padded_base64 = standard_base64.padEnd(standard_base64.length + (4 - standard_base64.length % 4) % 4, "=");
return new Uint8Array(atob(padded_base64).split("").map((char) => char.charCodeAt(0)));
}
__name(base64ToU8, "base64ToU8");
function isTextRun(run) {
return !("emoji" in run);
}
__name(isTextRun, "isTextRun");
function getCookie(cookies, name, matchWholeName = false) {
const regex = matchWholeName ? `(^|\\s?)\\b${name}\\b=([^;]+)` : `(^|s?)${name}=([^;]+)`;
const match = cookies.match(new RegExp(regex));
return match ? match[2] : void 0;
}
__name(getCookie, "getCookie");
function getNsigProcessorFn(n, sp, s) {
return `function process(n = "", sp = "", s = "") {
const mockStreamingURL = "https://ytjs.googlevideo.com/videoplayback?expire=1234567890&"+"n="+encodeURIComponent(n);
const urlCtorFunction = exportedVars.nsigFunction || (() => { throw new Error('No n/sig decipher function extracted') });
const urlCtor = urlCtorFunction(mockStreamingURL, sp, s);
const proto = Object.getPrototypeOf(urlCtor);
const properties = Object.getOwnPropertyNames(proto);
const methodBlacklist = ['constructor', 'clone', 'set', 'get'];
for (const prop of properties) {
if (methodBlacklist.includes(prop))
continue;
if (typeof urlCtor[prop] === 'function')
urlCtor[prop]();
}
const sigResult = urlCtor.get(sp);
const nResult = urlCtor.get('n');
return {
sig: sigResult ? decodeURIComponent(sigResult) : undefined,
n: nResult ? decodeURIComponent(nResult) : undefined
};
}
return process("${n || ""}", "${sp || ""}", "${s || ""}");`;
}
__name(getNsigProcessorFn, "getNsigProcessorFn");
// dist/src/platform/jsruntime/default.js
function evaluate(_data23, _env) {
throw new Error("To decipher URLs, you must provide your own JavaScript evaluator. See https://ytjs.dev/guide/getting-started.html#providing-a-custom-javascript-interpreter for more details.");
}
__name(evaluate, "evaluate");
// dist/src/platform/polyfills/web-crypto.js
async function sha1Hash(str) {
const byteToHex = [
"00",
"01",
"02",
"03",
"04",
"05",
"06",
"07",
"08",
"09",
"0a",
"0b",
"0c",
"0d",
"0e",
"0f",
"10",
"11",
"12",
"13",
"14",
"15",
"16",
"17",
"18",
"19",
"1a",
"1b",
"1c",
"1d",
"1e",
"1f",
"20",
"21",
"22",
"23",
"24",
"25",
"26",
"27",
"28",
"29",
"2a",
"2b",
"2c",
"2d",
"2e",
"2f",
"30",
"31",
"32",
"33",
"34",
"35",
"36",
"37",
"38",
"39",
"3a",
"3b",
"3c",
"3d",
"3e",
"3f",
"40",
"41",
"42",
"43",
"44",
"45",
"46",
"47",
"48",
"49",
"4a",
"4b",
"4c",
"4d",
"4e",
"4f",
"50",
"51",
"52",
"53",
"54",
"55",
"56",
"57",
"58",
"59",
"5a",
"5b",
"5c",
"5d",
"5e",
"5f",
"60",
"61",
"62",
"63",
"64",
"65",
"66",
"67",
"68",
"69",
"6a",
"6b",
"6c",
"6d",
"6e",
"6f",
"70",
"71",
"72",
"73",
"74",
"75",
"76",
"77",
"78",
"79",
"7a",
"7b",
"7c",
"7d",
"7e",
"7f",
"80",
"81",
"82",
"83",
"84",
"85",
"86",
"87",
"88",
"89",
"8a",
"8b",
"8c",
"8d",
"8e",
"8f",
"90",
"91",
"92",
"93",
"94",
"95",
"96",
"97",
"98",
"99",
"9a",
"9b",
"9c",
"9d",
"9e",
"9f",
"a0",
"a1",
"a2",
"a3",
"a4",
"a5",
"a6",
"a7",
"a8",
"a9",
"aa",
"ab",
"ac",
"ad",
"ae",
"af",
"b0",
"b1",
"b2",
"b3",
"b4",
"b5",
"b6",
"b7",
"b8",
"b9",
"ba",
"bb",
"bc",
"bd",
"be",
"bf",
"c0",
"c1",
"c2",
"c3",
"c4",
"c5",
"c6",
"c7",
"c8",
"c9",
"ca",
"cb",
"cc",
"cd",
"ce",
"cf",
"d0",
"d1",
"d2",
"d3",
"d4",
"d5",
"d6",
"d7",
"d8",
"d9",
"da",
"db",
"dc",
"dd",
"de",
"df",
"e0",
"e1",
"e2",
"e3",
"e4",
"e5",
"e6",
"e7",
"e8",
"e9",
"ea",
"eb",
"ec",
"ed",
"ee",
"ef",
"f0",
"f1",
"f2",
"f3",
"f4",
"f5",
"f6",
"f7",
"f8",
"f9",
"fa",
"fb",
"fc",
"fd",
"fe",
"ff"
];
function hex(arrayBuffer) {
const buff = new Uint8Array(arrayBuffer);
const hexOctets = [];
for (let i = 0; i < buff.length; ++i)
hexOctets.push(byteToHex[buff[i]]);
return hexOctets.join("");
}
__name(hex, "hex");
return hex(await crypto.subtle.digest("SHA-1", new TextEncoder().encode(str)));
}
__name(sha1Hash, "sha1Hash");
// dist/src/core/Actions.js
var _Actions_instances, isBrowse_fn, needsLogin_fn;
var _Actions = class _Actions {
constructor(session) {
__privateAdd(this, _Actions_instances);
__publicField(this, "session");
this.session = session;
}
/**
* Makes calls to the playback tracking API.
* @param url - The URL to call.
* @param client - The client to use.
* @param params - Call parameters.
*/
async stats(url, client, params) {
const s_url = new URL(url);
s_url.searchParams.set("ver", "2");
s_url.searchParams.set("c", client.client_name.toLowerCase());
s_url.searchParams.set("cbrver", client.client_version);
s_url.searchParams.set("cver", client.client_version);
for (const key of Object.keys(params)) {
s_url.searchParams.set(key, params[key]);
}
return await this.session.http.fetch(s_url);
}
async execute(endpoint, args) {
let data;
if (args && !args.protobuf) {
data = { ...args };
if (Reflect.has(data, "browseId") && !args.skip_auth_check) {
if (__privateMethod(this, _Actions_instances, needsLogin_fn).call(this, data.browseId) && !this.session.logged_in)
throw new InnertubeError("You must be signed in to perform this operation.");
}
if (Reflect.has(data, "skip_auth_check"))
delete data.skip_auth_check;
if (Reflect.has(data, "override_endpoint"))
delete data.override_endpoint;
if (Reflect.has(data, "parse"))
delete data.parse;
if (Reflect.has(data, "request"))
delete data.request;
if (Reflect.has(data, "clientActions"))
delete data.clientActions;
if (Reflect.has(data, "settingItemIdForClient"))
delete data.settingItemIdForClient;
if (Reflect.has(data, "action")) {
data.actions = [data.action];
delete data.action;
}
if (Reflect.has(data, "boolValue")) {
data.newValue = { boolValue: data.boolValue };
delete data.boolValue;
}
if (Reflect.has(data, "token")) {
data.continuation = data.token;
delete data.token;
}
if (data?.client === "YTMUSIC") {
data.isAudioOnly = true;
}
} else if (args) {
data = args.serialized_data;
}
const target_endpoint = Reflect.has(args || {}, "override_endpoint") ? args?.override_endpoint : endpoint;
const response = await this.session.http.fetch(target_endpoint, {
method: "POST",
body: args?.protobuf ? data : JSON.stringify(data || {}),
headers: {
"Content-Type": args?.protobuf ? "application/x-protobuf" : "application/json"
}
});
if (args?.parse) {
let parsed_response = parser_exports.parseResponse(await response.json());
if (__privateMethod(this, _Actions_instances, isBrowse_fn).call(this, parsed_response) && parsed_response.on_response_received_actions?.[0]?.type === "navigateAction") {
const navigate_action = parsed_response.on_response_received_actions.firstOfType(NavigateAction);
if (navigate_action) {
parsed_response = await navigate_action.endpoint.call(this, { parse: true });
}
}
return parsed_response;
}
return {
success: response.ok,
status_code: response.status,
data: await response.json()
};
}
};
_Actions_instances = new WeakSet();
isBrowse_fn = /* @__PURE__ */ __name(function(response) {
return "on_response_received_actions" in response;
}, "#isBrowse");
needsLogin_fn = /* @__PURE__ */ __name(function(id) {
return [
"FElibrary",
"FEhistory",
"FEsubscriptions",
"FEchannels",
"FEplaylist_aggregation",
"FEmusic_listening_review",
"FEmusic_library_landing",
"SPaccount_overview",
"SPaccount_notifications",
"SPaccount_privacy",
"SPtime_watched"
].includes(id);
}, "#needsLogin");
__name(_Actions, "Actions");
var Actions = _Actions;
// dist/src/core/OAuth2.js
var TAG3 = "OAuth2";
var _session2, _OAuth2_instances, loadFromCache_fn, http_get;
var _OAuth2 = class _OAuth2 {
constructor(session) {
__privateAdd(this, _OAuth2_instances);
__privateAdd(this, _session2);
__publicField(this, "YTTV_URL");
__publicField(this, "AUTH_SERVER_CODE_URL");
__publicField(this, "AUTH_SERVER_TOKEN_URL");
__publicField(this, "AUTH_SERVER_REVOKE_TOKEN_URL");
__publicField(this, "client_id");
__publicField(this, "oauth2_tokens");
__privateSet(this, _session2, session);
this.YTTV_URL = new URL("/tv", Constants_exports.URLS.YT_BASE);
this.AUTH_SERVER_CODE_URL = new URL("/o/oauth2/device/code", Constants_exports.URLS.YT_BASE);
this.AUTH_SERVER_TOKEN_URL = new URL("/o/oauth2/token", Constants_exports.URLS.YT_BASE);
this.AUTH_SERVER_REVOKE_TOKEN_URL = new URL("/o/oauth2/revoke", Constants_exports.URLS.YT_BASE);
}
async init(tokens) {
if (tokens) {
this.setTokens(tokens);
if (this.shouldRefreshToken()) {
await this.refreshAccessToken();
}
__privateGet(this, _session2).emit("auth", { credentials: this.oauth2_tokens });
return;
}
const loaded_from_cache = await __privateMethod(this, _OAuth2_instances, loadFromCache_fn).call(this);
if (loaded_from_cache) {
Log_exports.info(TAG3, "Loaded OAuth2 tokens from cache.", this.oauth2_tokens);
return;
}
if (!this.client_id)
this.client_id = await this.getClientID();
const device_and_user_code = await this.getDeviceAndUserCode();
__privateGet(this, _session2).emit("auth-pending", device_and_user_code);
this.pollForAccessToken(device_and_user_code);
}
setTokens(tokens) {
const tokensMod = tokens;
if (tokensMod.expires_in) {
tokensMod.expiry_date = new Date(Date.now() + tokensMod.expires_in * 1e3).toISOString();
delete tokensMod.expires_in;
}
if (!this.validateTokens(tokensMod))
throw new OAuth2Error("Invalid tokens provided.");
this.oauth2_tokens = tokensMod;
if (tokensMod.client) {
Log_exports.info(TAG3, "Using provided client id and secret.");
this.client_id = tokensMod.client;
}
}
async cacheCredentials() {
const encoder = new TextEncoder();
const data = encoder.encode(JSON.stringify(this.oauth2_tokens));
await __privateGet(this, _session2).cache?.set("youtubei_oauth_credentials", data.buffer);
}
async removeCache() {
await __privateGet(this, _session2).cache?.remove("youtubei_oauth_credentials");
}
pollForAccessToken(device_and_user_code) {
if (!this.client_id)
throw new OAuth2Error("Client ID is missing.");
const { device_code, interval } = device_and_user_code;
const { client_id, client_secret } = this.client_id;
const payload = {
client_id,
client_secret,
code: device_code,
grant_type: "http://oauth.net/grant_type/device/1.0"
};
const connInterval = setInterval(async () => {
const response = await __privateGet(this, _OAuth2_instances, http_get).fetch_function(this.AUTH_SERVER_TOKEN_URL, {
body: JSON.stringify(payload),
method: "POST",
headers: {
"Content-Type": "application/json"
}
});
const response_data = await response.json();
if (response_data.error) {
switch (response_data.error) {
case "access_denied":
__privateGet(this, _session2).emit("auth-error", new OAuth2Error("Access was denied.", response_data));
clearInterval(connInterval);
break;
case "expired_token":
__privateGet(this, _session2).emit("auth-error", new OAuth2Error("The device code has expired.", response_data));
clearInterval(connInterval);
break;
case "authorization_pending":
case "slow_down":
Log_exports.info(TAG3, "Polling for access token...");
break;
default:
__privateGet(this, _session2).emit("auth-error", new OAuth2Error("Server returned an unexpected error.", response_data));
clearInterval(connInterval);
break;
}
return;
}
this.setTokens(response_data);
__privateGet(this, _session2).emit("auth", { credentials: this.oauth2_tokens });
clearInterval(connInterval);
}, interval * 1e3);
}
async revokeCredentials() {
if (!this.oauth2_tokens)
throw new OAuth2Error("Access token not found");
await this.removeCache();
const url = this.AUTH_SERVER_REVOKE_TOKEN_URL;
url.searchParams.set("token", this.oauth2_tokens.access_token);
return __privateGet(this, _session2).http.fetch_function(url, { method: "POST" });
}
async refreshAccessToken() {
if (!this.client_id)
this.client_id = await this.getClientID();
if (!this.oauth2_tokens)
throw new OAuth2Error("No tokens available to refresh.");
const { client_id, client_secret } = this.client_id;
const { refresh_token } = this.oauth2_tokens;
const payload = {
client_id,
client_secret,
refresh_token,
grant_type: "refresh_token"
};
const response = await __privateGet(this, _OAuth2_instances, http_get).fetch_function(this.AUTH_SERVER_TOKEN_URL, {
body: JSON.stringify(payload),
method: "POST",
headers: {
"Content-Type": "application/json"
}
});
if (!response.ok)
throw new OAuth2Error(`Failed to refresh access token: ${response.status}`);
const response_data = await response.json();
if (response_data.error_code)
throw new OAuth2Error("Authorization server returned an error", response_data);
this.oauth2_tokens.access_token = response_data.access_token;
this.oauth2_tokens.expiry_date = new Date(Date.now() + response_data.expires_in * 1e3).toISOString();
__privateGet(this, _session2).emit("update-credentials", { credentials: this.oauth2_tokens });
}
async getDeviceAndUserCode() {
if (!this.client_id)
throw new OAuth2Error("Client ID is missing.");
const { client_id } = this.client_id;
const payload = {
client_id,
scope: "http://gdata.youtube.com https://www.googleapis.com/auth/youtube-paid-content",
device_id: Platform.shim.uuidv4(),
device_model: "ytlr::"
};
const response = await __privateGet(this, _OAuth2_instances, http_get).fetch_function(this.AUTH_SERVER_CODE_URL, {
body: JSON.stringify(payload),
method: "POST",
headers: {
"Content-Type": "application/json"
}
});
if (!response.ok)
throw new OAuth2Error(`Failed to get device/user code: ${response.status}`);
const response_data = await response.json();
if (response_data.error_code)
throw new OAuth2Error("Authorization server returned an error", response_data);
return response_data;
}
async getClientID() {
const yttv_response = await __privateGet(this, _OAuth2_instances, http_get).fetch_function(this.YTTV_URL, {
headers: {
"User-Agent": "Mozilla/5.0 (ChromiumStylePlatform) Cobalt/Version",
"Referer": "https://www.youtube.com/tv",
"Accept-Language": "en-US"
}
});
if (!yttv_response.ok)
throw new OAuth2Error(`Failed to get client ID: ${yttv_response.status}`);
const yttv_response_data = await yttv_response.text();
let script_url_body;
if ((script_url_body = Constants_exports.OAUTH.REGEX.TV_SCRIPT.exec(yttv_response_data)) !== null) {
Log_exports.info(TAG3, `Got YouTubeTV script URL (${script_url_body[1]})`);
const script_response = await __privateGet(this, _OAuth2_instances, http_get).fetch(script_url_body[1], { baseURL: Constants_exports.URLS.YT_BASE });
if (!script_response.ok)
throw new OAuth2Error(`TV script request failed with status code ${script_response.status}`);
const script_response_data = await script_response.text();
const client_identity = script_response_data.match(Constants_exports.OAUTH.REGEX.CLIENT_IDENTITY);
if (!client_identity || !client_identity.groups)
throw new OAuth2Error("Could not obtain client ID.");
const { client_id, client_secret } = client_identity.groups;
Log_exports.info(TAG3, `Client identity retrieved (clientId=${client_id}, clientSecret=${client_secret}).`);
return {
client_id,
client_secret
};
}
throw new OAuth2Error("Could not obtain script URL.");
}
shouldRefreshToken() {
if (!this.oauth2_tokens)
return false;
return Date.now() > new Date(this.oauth2_tokens.expiry_date).getTime();
}
validateTokens(tokens) {
return !(!tokens.access_token || !tokens.refresh_token || !tokens.expiry_date);
}
};
_session2 = new WeakMap();
_OAuth2_instances = new WeakSet();
loadFromCache_fn = /* @__PURE__ */ __name(async function() {
const data = await __privateGet(this, _session2).cache?.get("youtubei_oauth_credentials");
if (!data)
return false;
const decoder = new TextDecoder();
const credentials = JSON.parse(decoder.decode(data));
this.setTokens(credentials);
__privateGet(this, _session2).emit("auth", { credentials });
return true;
}, "#loadFromCache");
http_get = /* @__PURE__ */ __name(function() {
return __privateGet(this, _session2).http;
}, "#http");
__name(_OAuth2, "OAuth2");
var OAuth2 = _OAuth2;
// dist/src/core/Player.js
var TAG4 = "Player";
var _Player = class _Player {
constructor(player_id, signature_timestamp, data) {
__publicField(this, "player_id");
__publicField(this, "signature_timestamp");
__publicField(this, "data");
__publicField(this, "po_token");
this.player_id = player_id;
this.signature_timestamp = signature_timestamp;
this.data = data;
}
static async create(cache, fetch2 = Platform.shim.fetch, po_token, player_id) {
if (!player_id) {
const url = new URL("/iframe_api", Constants_exports.URLS.YT_BASE);
const res = await fetch2(url);
if (!res.ok)
throw new PlayerError(`Failed to get player id: ${res.status} (${res.statusText})`);
const js = await res.text();
player_id = getStringBetweenStrings(js, "player\\/", "\\/");
}
Log_exports.info(TAG4, `Using player id (${player_id}). Checking for cached players..`);
if (!player_id)
throw new PlayerError("Failed to get player id");
if (cache) {
const cached_player = await _Player.fromCache(cache, player_id);
if (cached_player) {
Log_exports.info(TAG4, "Found up-to-date player data in cache.");
cached_player.po_token = po_token;
return cached_player;
}
}
const player_url = new URL(`/s/player/${player_id}/player_es6.vflset/en_US/base.js`, Constants_exports.URLS.YT_BASE);
Log_exports.info(TAG4, `Could not find any cached player. Will download a new player from ${player_url}.`);
const player_res = await fetch2(player_url, {
headers: {
"user-agent": getRandomUserAgent("desktop")
}
});
if (!player_res.ok) {
throw new PlayerError(`Failed to get player data: ${player_res.status}`);
}
const player_js = await player_res.text();
const nsigFunctionName = "nsigFunction";
const timestampVarName = "signatureTimestampVar";
const extractions = [
{ friendlyName: nsigFunctionName, match: nsigMatcher },
{ friendlyName: timestampVarName, match: timestampMatcher, collectDependencies: false }
];
const jsAnalyzer = new JsAnalyzer(player_js, { extractions });
const jsExtractor = new JsExtractor(jsAnalyzer);
const result = jsExtractor.buildScript({
disallowSideEffectInitializers: true,
exportRawValues: true,
rawValueOnly: [timestampVarName]
});
if (result.exportedRawValues && !(timestampVarName in result.exportedRawValues)) {
Log_exports.warn(TAG4, "Failed to extract signature timestamp.");
}
if (!result.exported.includes(nsigFunctionName)) {
Log_exports.warn(TAG4, "Failed to extract n/sig decipher function.");
}
const signatureTimestamp = result.exportedRawValues?.[timestampVarName];
const player = await _Player.fromSource(player_id, {
cache,
signature_timestamp: parseInt(signatureTimestamp) || 0,
data: result
});
player.po_token = po_token;
return player;
}
async decipher(url, signature_cipher, cipher, this_response_nsig_cache) {
url = url || signature_cipher || cipher;
if (!url)
throw new PlayerError("No valid URL to decipher");
const args = new URLSearchParams(url);
const url_components = new URL(args.get("url") || url);
const n = url_components.searchParams.get("n");
const s = args.get("s");
const sp = args.get("sp");
if (this.data && (signature_cipher || cipher || n)) {
const eval_args = {};
if (signature_cipher || cipher) {
eval_args.sig = s;
eval_args.sp = sp;
}
if (n) {
if (this_response_nsig_cache?.has(n)) {
const nsig = this_response_nsig_cache.get(n);
url_components.searchParams.set("n", nsig);
} else {
eval_args.n = n;
}
}
if (Object.keys(eval_args).length > 0) {
const data = { ...this.data };
data.output = `${data.output}
${getNsigProcessorFn(eval_args.n, eval_args.sp, eval_args.sig)}`;
const result2 = await Platform.shim.eval(data, eval_args);
if (typeof result2 !== "object" || result2 === null) {
throw new PlayerError("Got invalid result from player script evaluation.");
}
if (typeof eval_args.sig === "string") {
const signatureResult = result2.sig;
Log_exports.info(TAG4, `Transformed signature from ${s} to ${signatureResult}.`);
if (typeof signatureResult !== "string")
throw new PlayerError("Got invalid signature from player script evaluation.");
if (sp) {
url_components.searchParams.set(sp, signatureResult);
} else {
url_components.searchParams.set("signature", signatureResult);
}
}
if (typeof eval_args.n === "string") {
const nResult = result2.n;
Log_exports.info(TAG4, `Transformed n from ${n} to ${nResult}.`);
if (typeof nResult !== "string")
throw new PlayerError("Failed to decipher nsig");
if (nResult.startsWith("enhanced_except_")) {
Log_exports.warn(TAG4, `Decipher script returned an error (n=${n}):`, nResult);
} else if (this_response_nsig_cache) {
this_response_nsig_cache.set(n, nResult);
}
url_components.searchParams.set("n", nResult);
}
}
}
if (url_components.searchParams.get("sabr") !== "1" && this.po_token)
url_components.searchParams.set("pot", this.po_token);
const client = url_components.searchParams.get("c");
switch (client) {
case "WEB":
url_components.searchParams.set("cver", Constants_exports.CLIENTS.WEB.VERSION);
break;
case "MWEB":
url_components.searchParams.set("cver", Constants_exports.CLIENTS.MWEB.VERSION);
break;
case "WEB_REMIX":
url_components.searchParams.set("cver", Constants_exports.CLIENTS.YTMUSIC.VERSION);
break;
case "WEB_KIDS":
url_components.searchParams.set("cver", Constants_exports.CLIENTS.WEB_KIDS.VERSION);
break;
case "TVHTML5":
url_components.searchParams.set("cver", Constants_exports.CLIENTS.TV.VERSION);
break;
case "TVHTML5_SIMPLY":
url_components.searchParams.set("cver", Constants_exports.CLIENTS.TV_SIMPLY.VERSION);
break;
case "TVHTML5_SIMPLY_EMBEDDED_PLAYER":
url_components.searchParams.set("cver", Constants_exports.CLIENTS.TV_EMBEDDED.VERSION);
break;
case "WEB_EMBEDDED_PLAYER":
url_components.searchParams.set("cver", Constants_exports.CLIENTS.WEB_EMBEDDED.VERSION);
break;
}
const result = url_components.toString();
Log_exports.info(TAG4, `Deciphered URL: ${result}`);
return url_components.toString();
}
static async fromCache(cache, player_id) {
const buffer = await cache.get(player_id);
if (!buffer)
return null;
try {
const deserializedCache = BinarySerializer_exports.deserialize(new Uint8Array(buffer));
if (deserializedCache.libraryVersion !== package_default.version) {
Log_exports.warn(TAG4, `Cached player data is from a different library version (${deserializedCache.libraryVersion}). Ignoring it.`);
return null;
}
return new _Player(deserializedCache.playerId, deserializedCache.signatureTimestamp, deserializedCache.data);
} catch (e) {
Log_exports.error(TAG4, "Failed to deserialize player data from cache:", e);
return null;
}
}
static async fromSource(player_id, options) {
const player = new _Player(player_id, options.signature_timestamp, options.data);
await player.cache(options.cache);
return player;
}
async cache(cache) {
if (!cache || !this.data)
return;
const buffer = BinarySerializer_exports.serialize({
playerId: this.player_id,
signatureTimestamp: this.signature_timestamp,
libraryVersion: package_default.version,
data: this.data
});
await cache.set(this.player_id, buffer);
}
get url() {
return new URL(`/s/player/${this.player_id}/player_ias.vflset/en_US/base.js`, Constants_exports.URLS.YT_BASE).toString();
}
static get LIBRARY_VERSION() {
return 14;
}
};
__name(_Player, "Player");
var Player = _Player;
// dist/src/core/Session.js
var ClientType = {
WEB: "WEB",
MWEB: "MWEB",
KIDS: "WEB_KIDS",
MUSIC: "WEB_REMIX",
IOS: "iOS",
ANDROID: "ANDROID",
ANDROID_VR: "ANDROID_VR",
ANDROID_MUSIC: "ANDROID_MUSIC",
ANDROID_CREATOR: "ANDROID_CREATOR",
TV: "TVHTML5",
TV_SIMPLY: "TVHTML5_SIMPLY",
TV_EMBEDDED: "TVHTML5_SIMPLY_EMBEDDED_PLAYER",
WEB_EMBEDDED: "WEB_EMBEDDED_PLAYER",
WEB_CREATOR: "WEB_CREATOR"
};
var TAG5 = "Session";
var _Session_static, storeSession_fn, getSessionData_fn, buildContext_fn, getVisitorID_fn;
var _Session = class _Session extends EventEmitterLike {
constructor(context, api_key, api_version, account_index, config_data, player, cookie, fetch2, cache, po_token) {
super();
__publicField(this, "context");
__publicField(this, "api_key");
__publicField(this, "api_version");
__publicField(this, "account_index");
__publicField(this, "config_data");
__publicField(this, "player");
__publicField(this, "cookie");
__publicField(this, "cache");
__publicField(this, "po_token");
__publicField(this, "oauth");
__publicField(this, "http");
__publicField(this, "logged_in");
__publicField(this, "actions");
__publicField(this, "user_agent");
this.context = context;
this.api_key = api_key;
this.api_version = api_version;
this.account_index = account_index;
this.config_data = config_data;
this.player = player;
this.cookie = cookie;
this.cache = cache;
this.po_token = po_token;
this.http = new HTTPClient(this, cookie, fetch2);
this.actions = new Actions(this);
this.oauth = new OAuth2(this);
this.logged_in = !!cookie;
this.user_agent = context.client.userAgent;
}
on(type, listener) {
super.on(type, listener);
}
once(type, listener) {
super.once(type, listener);
}
static async create(options = {}) {
const { context, api_key, api_version, account_index, config_data } = await _Session.getSessionData(options.lang, options.location, options.account_index, options.visitor_data, options.user_agent, options.enable_safety_mode, options.generate_session_locally, options.fail_fast, options.device_category, options.client_type, options.timezone, options.fetch, options.on_behalf_of_user, options.cache, options.enable_session_cache, options.po_token, options.retrieve_innertube_config);
return new _Session(context, api_key, api_version, account_index, config_data, options.retrieve_player === false ? void 0 : await Player.create(options.cache, options.fetch, options.po_token, options.player_id), options.cookie, options.fetch, options.cache, options.po_token);
}
/**
* Retrieves session data from cache.
* @param cache - A valid cache implementation.
* @param session_args - User provided session arguments.
*/
static async fromCache(cache, session_args) {
const buffer = await cache.get("innertube_session_data");
if (!buffer)
return null;
try {
const session_data = BinarySerializer_exports.deserialize(new Uint8Array(buffer));
if (session_data.library_version !== parseInt(package_default.version.split(".", 1)[0])) {
Log_exports.warn(TAG5, `Cached session data is from a different library version (${session_data.library_version}). Regenerating session data.`);
return null;
}
if (session_args.visitor_data) {
session_data.context.client.visitorData = session_args.visitor_data;
}
if (session_args.lang)
session_data.context.client.hl = session_args.lang;
if (session_args.location)
session_data.context.client.gl = session_args.location;
if (session_args.on_behalf_of_user)
session_data.context.user.onBehalfOfUser = session_args.on_behalf_of_user;
if (session_args.user_agent)
session_data.context.client.userAgent = session_args.user_agent;
if (session_args.client_name) {
const client = Object.values(CLIENTS).find((c) => c.NAME === session_args.client_name);
if (client) {
session_data.context.client.clientName = client.NAME;
session_data.context.client.clientVersion = client.VERSION;
} else
Log_exports.warn(TAG5, `Unknown client name: ${session_args.client_name}.`);
}
session_data.context.client.timeZone = session_args.time_zone;
session_data.context.client.platform = session_args.device_category.toUpperCase();
session_data.context.user.enableSafetyMode = session_args.enable_safety_mode;
return session_data;
} catch (error2) {
Log_exports.error(TAG5, "Failed to deserialize session data from cache.", error2);
return null;
}
}
static async getSessionData(lang = "", location = "", account_index = 0, visitor_data = "", user_agent = getRandomUserAgent("desktop"), enable_safety_mode = false, generate_session_locally = false, fail_fast = false, device_category = "desktop", client_name = ClientType.WEB, tz = Intl.DateTimeFormat().resolvedOptions().timeZone, fetch2 = Platform.shim.fetch, on_behalf_of_user, cache, enable_session_cache = true, po_token, retrieve_innertube_config = true) {
const session_args = {
lang,
location,
time_zone: tz,
user_agent,
device_category,
client_name,
enable_safety_mode,
visitor_data,
on_behalf_of_user,
po_token
};
let session_data;
if (cache && enable_session_cache) {
const cached_session_data = await this.fromCache(cache, session_args);
if (cached_session_data) {
Log_exports.info(TAG5, "Found session data in cache.");
session_data = cached_session_data;
}
}
if (!session_data) {
Log_exports.info(TAG5, "Generating session data.");
let api_key = CLIENTS.WEB.API_KEY;
let api_version = CLIENTS.WEB.API_VERSION;
let context_data = {
hl: lang || "en",
gl: location || "US",
remote_host: "",
user_agent,
visitor_data: visitor_data || ProtoUtils_exports.encodeVisitorData(generateRandomString(11), Math.floor(Date.now() / 1e3)),
client_name,
client_version: Object.values(CLIENTS).find((v) => v.NAME === client_name)?.VERSION ?? CLIENTS.WEB.VERSION,
device_category: device_category.toUpperCase(),
os_name: "Windows",
os_version: "10.0",
time_zone: tz,
browser_name: "Chrome",
browser_version: "125.0.0.0",
device_make: "",
device_model: "",
enable_safety_mode
};
if (!generate_session_locally) {
try {
const sw_session_data = await __privateMethod(this, _Session_static, getSessionData_fn).call(this, session_args, fetch2);
api_key = sw_session_data.api_key;
api_version = sw_session_data.api_version;
context_data = sw_session_data.context_data;
} catch (error2) {
if (fail_fast)
throw error2;
Log_exports.error(TAG5, "Failed to retrieve session data from server. Session data generated locally will be used instead.", error2);
}
}
if (on_behalf_of_user) {
context_data.on_behalf_of_user = on_behalf_of_user;
}
session_data = {
api_key,
api_version,
context: __privateMethod(this, _Session_static, buildContext_fn).call(this, context_data)
};
if (retrieve_innertube_config) {
try {
Log_exports.info(TAG5, "Retrieving InnerTube config data.");
const config_headers = {
"Accept-Language": lang,
"Accept": "*/*",
"Referer": URLS.YT_BASE,
"X-Goog-Visitor-Id": context_data.visitor_data,
"X-Origin": URLS.YT_BASE,
"X-Youtube-Client-Version": context_data.client_version
};
if (Platform.shim.server) {
config_headers["User-Agent"] = user_agent;
config_headers["Origin"] = URLS.YT_BASE;
}
const config = await fetch2(`${URLS.API.PRODUCTION_1}v1/config?prettyPrint=false`, {
headers: config_headers,
method: "POST",
body: JSON.stringify({ context: session_data.context })
});
const configJson = await config.json();
const coldConfigData = configJson.responseContext?.globalConfigGroup?.rawColdConfigGroup?.configData;
const coldHashData = configJson.responseContext?.globalConfigGroup?.coldHashData;
const hotHashData = configJson.responseContext?.globalConfigGroup?.hotHashData;
session_data.config_data = configJson.configData;
session_data.context.client.configInfo = {
...session_data.context.client.configInfo,
coldConfigData,
coldHashData,
hotHashData
};
} catch (error2) {
Log_exports.error(TAG5, "Failed to retrieve config data.", error2);
}
}
if (enable_session_cache)
await __privateMethod(this, _Session_static, storeSession_fn).call(this, session_data, cache);
}
Log_exports.debug(TAG5, "Session data:", session_data);
return { ...session_data, account_index };
}
async signIn(credentials) {
return new Promise(async (resolve, reject) => {
const error_handler = /* @__PURE__ */ __name((err) => reject(err), "error_handler");
this.once("auth-error", error_handler);
this.once("auth", () => {
this.off("auth-error", error_handler);
this.logged_in = true;
resolve();
});
try {
await this.oauth.init(credentials);
} catch (err) {
reject(err);
}
});
}
/**
* Signs out of the current account and revokes the credentials.
*/
async signOut() {
if (!this.logged_in)
throw new InnertubeError("You must be signed in to perform this operation.");
const response = await this.oauth.revokeCredentials();
this.logged_in = false;
return response;
}
get client_version() {
return this.context.client.clientVersion;
}
get client_name() {
return this.context.client.clientName;
}
get lang() {
return this.context.client.hl;
}
};
_Session_static = new WeakSet();
storeSession_fn = /* @__PURE__ */ __name(async function(session_data, cache) {
if (!cache)
return;
Log_exports.info(TAG5, "Compressing and caching session data.");
const buffer = BinarySerializer_exports.serialize({
...session_data,
library_version: parseInt(package_default.version)
});
await cache.set("innertube_session_data", buffer);
}, "#storeSession");
getSessionData_fn = /* @__PURE__ */ __name(async function(options, fetch2 = Platform.shim.fetch) {
let visitor_id = generateRandomString(11);
if (options.visitor_data)
visitor_id = __privateMethod(this, _Session_static, getVisitorID_fn).call(this, options.visitor_data);
const url = new URL("/sw.js_data", URLS.YT_BASE);
const res = await fetch2(url, {
headers: {
"Accept-Language": options.lang || "en-US",
"User-Agent": options.user_agent,
"Accept": "*/*",
"Referer": `${URLS.YT_BASE}/sw.js`,
"Cookie": `PREF=tz=${options.time_zone.replace("/", ".")};VISITOR_INFO1_LIVE=${visitor_id};`
}
});
if (!res.ok)
throw new SessionError(`Failed to retrieve session data: ${res.status}`);
const text = await res.text();
if (!text.startsWith(")]}'"))
throw new SessionError("Invalid JSPB response");
const data = JSON.parse(text.replace(/^\)\]\}'/, ""));
const ytcfg = data[0][2];
const api_version = CLIENTS.WEB.API_VERSION;
const [[device_info], api_key] = ytcfg;
const config_info = device_info[61];
const app_install_data = config_info[config_info.length - 1];
const context_info = {
hl: options.lang || device_info[0],
gl: options.location || device_info[1],
remote_host: device_info[3],
visitor_data: options.visitor_data || device_info[13],
user_agent: options.user_agent,
client_name: options.client_name,
client_version: options.client_name === "WEB" ? device_info[16] : Object.values(CLIENTS).find((c) => c.NAME === options.client_name)?.VERSION || device_info[16],
os_name: device_info[17],
os_version: device_info[18],
time_zone: device_info[79] || options.time_zone,
device_category: options.device_category,
browser_name: device_info[86],
browser_version: device_info[87],
device_make: device_info[11],
device_model: device_info[12],
app_install_data,
device_experiment_id: device_info[103],
rollout_token: device_info[107],
enable_safety_mode: options.enable_safety_mode
};
return { context_data: context_info, api_key, api_version };
}, "#getSessionData");
buildContext_fn = /* @__PURE__ */ __name(function(args) {
const context = {
client: {
hl: args.hl || "en",
gl: args.gl || "US",
remoteHost: args.remote_host,
screenDensityFloat: 1,
screenHeightPoints: 1440,
screenPixelDensity: 1,
screenWidthPoints: 2560,
visitorData: args.visitor_data,
clientName: args.client_name,
clientVersion: args.client_version,
osName: args.os_name,
osVersion: args.os_version,
userAgent: args.user_agent,
platform: args.device_category.toUpperCase(),
clientFormFactor: "UNKNOWN_FORM_FACTOR",
userInterfaceTheme: "USER_INTERFACE_THEME_LIGHT",
timeZone: args.time_zone,
originalUrl: URLS.YT_BASE,
deviceMake: args.device_make,
deviceModel: args.device_model,
browserName: args.browser_name,
browserVersion: args.browser_version,
utcOffsetMinutes: -Math.floor((/* @__PURE__ */ new Date()).getTimezoneOffset()),
memoryTotalKbytes: "8000000",
rolloutToken: args.rollout_token,
deviceExperimentId: args.device_experiment_id,
mainAppWebInfo: {
graftUrl: URLS.YT_BASE,
pwaInstallabilityStatus: "PWA_INSTALLABILITY_STATUS_UNKNOWN",
webDisplayMode: "WEB_DISPLAY_MODE_BROWSER",
isWebNativeShareAvailable: true
}
},
user: {
enableSafetyMode: args.enable_safety_mode,
lockedSafetyMode: false
},
request: {
useSsl: true,
internalExperimentFlags: []
}
};
if (args.app_install_data)
context.client.configInfo = { appInstallData: args.app_install_data };
if (args.on_behalf_of_user)
context.user.onBehalfOfUser = args.on_behalf_of_user;
return context;
}, "#buildContext");
getVisitorID_fn = /* @__PURE__ */ __name(function(visitor_data) {
const decoded_visitor_data = ProtoUtils_exports.decodeVisitorData(visitor_data);
return decoded_visitor_data.id;
}, "#getVisitorID");
__privateAdd(_Session, _Session_static);
__name(_Session, "Session");
var Session = _Session;
// dist/src/core/clients/index.js
var clients_exports = {};
__export(clients_exports, {
Kids: () => Kids,
Music: () => Music,
Studio: () => Studio
});
// dist/src/core/clients/Kids.js
var _session3;
var _Kids = class _Kids {
constructor(session) {
__privateAdd(this, _session3);
__privateSet(this, _session3, session);
}
async search(query) {
const search_endpoint = new NavigationEndpoint({ searchEndpoint: { query } });
const response = await search_endpoint.call(__privateGet(this, _session3).actions, { client: "YTKIDS" });
return new Search3(__privateGet(this, _session3).actions, response);
}
async getInfo(video_id, options) {
const payload = { videoId: video_id };
const watch_endpoint = new NavigationEndpoint({ watchEndpoint: payload });
const watch_next_endpoint = new NavigationEndpoint({ watchNextEndpoint: payload });
const session = __privateGet(this, _session3);
const extra_payload = {
playbackContext: {
contentPlaybackContext: {
vis: 0,
splay: false,
lactMilliseconds: "-1",
signatureTimestamp: session.player?.signature_timestamp
}
},
client: "YTKIDS"
};
if (options?.po_token) {
extra_payload.serviceIntegrityDimensions = {
poToken: options.po_token
};
} else if (session.po_token) {
extra_payload.serviceIntegrityDimensions = {
poToken: session.po_token
};
}
const watch_response = watch_endpoint.call(session.actions, extra_payload);
const watch_next_response = watch_next_endpoint.call(session.actions, { client: "YTKIDS" });
const response = await Promise.all([watch_response, watch_next_response]);
const cpn = generateRandomString(16);
return new VideoInfo2(response, session.actions, cpn);
}
async getChannel(channel_id) {
const browse_endpoint = new NavigationEndpoint({ browseEndpoint: { browseId: channel_id } });
const response = await browse_endpoint.call(__privateGet(this, _session3).actions, { client: "YTKIDS" });
return new Channel3(__privateGet(this, _session3).actions, response);
}
async getHomeFeed() {
const browse_endpoint = new NavigationEndpoint({ browseEndpoint: { browseId: "FEkids_home" } });
const response = await browse_endpoint.call(__privateGet(this, _session3).actions, { client: "YTKIDS" });
return new HomeFeed3(__privateGet(this, _session3).actions, response);
}
/**
* Retrieves the list of supervised accounts that the signed-in user has
* access to, and blocks the given channel for each of them.
* @param channel_id - The channel id to block.
* @returns A list of API responses.
*/
async blockChannel(channel_id) {
const session = __privateGet(this, _session3);
if (!session.logged_in)
throw new InnertubeError("You must be signed in to perform this operation.");
const kids_blocklist_picker_command = new NavigationEndpoint({
getKidsBlocklistPickerCommand: {
blockedForKidsContent: {
external_channel_id: channel_id
}
}
});
const response = await kids_blocklist_picker_command.call(session.actions, { client: "YTKIDS" });
const popup = response.data.command.confirmDialogEndpoint;
const popup_fragment = { contents: popup.content, engagementPanels: [] };
const kid_picker = parser_exports.parseResponse(popup_fragment);
const kids = kid_picker.contents_memo?.getType(KidsBlocklistPickerItem);
if (!kids)
throw new InnertubeError("Could not find any kids profiles or supervised accounts.");
const responses = [];
for (const kid of kids) {
if (!kid.block_button?.is_toggled) {
kid.setActions(session.actions);
responses.push(await kid.blockChannel());
}
}
return responses;
}
};
_session3 = new WeakMap();
__name(_Kids, "Kids");
var Kids = _Kids;
// dist/src/core/clients/Music.js
var _session4, _actions21, _Music_instances, fetchInfoFromVideoId_fn, fetchInfoFromEndpoint_fn;
var _Music = class _Music {
constructor(session) {
__privateAdd(this, _Music_instances);
__privateAdd(this, _session4);
__privateAdd(this, _actions21);
__privateSet(this, _session4, session);
__privateSet(this, _actions21, session.actions);
}
/**
* Retrieves track info. Passing a list item of type MusicTwoRowItem automatically starts a radio.
* @param target - Video id or a list item.
* @param options - Options for fetching video info.
*/
getInfo(target, options) {
if (target instanceof MusicTwoRowItem) {
return __privateMethod(this, _Music_instances, fetchInfoFromEndpoint_fn).call(this, target.endpoint, options);
} else if (target instanceof MusicResponsiveListItem) {
return __privateMethod(this, _Music_instances, fetchInfoFromEndpoint_fn).call(this, target.overlay?.content?.endpoint ?? target.endpoint, options);
} else if (target instanceof NavigationEndpoint) {
return __privateMethod(this, _Music_instances, fetchInfoFromEndpoint_fn).call(this, target, options);
}
return __privateMethod(this, _Music_instances, fetchInfoFromVideoId_fn).call(this, target, options);
}
async search(query, filters = {}) {
throwIfMissing({ query });
let params;
if (filters.type && filters.type !== "all") {
const writer = SearchFilter.encode({
filters: {
musicSearchType: {
[filters.type]: true
}
}
});
params = encodeURIComponent(u8ToBase64(writer.finish()));
}
const search_endpoint = new NavigationEndpoint({ searchEndpoint: { query, params } });
const response = await search_endpoint.call(__privateGet(this, _actions21), { client: "YTMUSIC" });
return new Search2(response, __privateGet(this, _actions21), Reflect.has(filters, "type") && filters.type !== "all");
}
async getHomeFeed() {
const browse_endpoint = new NavigationEndpoint({ browseEndpoint: { browseId: "FEmusic_home" } });
const response = await browse_endpoint.call(__privateGet(this, _actions21), { client: "YTMUSIC" });
return new HomeFeed2(response, __privateGet(this, _actions21));
}
async getExplore() {
const browse_endpoint = new NavigationEndpoint({ browseEndpoint: { browseId: "FEmusic_explore" } });
const response = await browse_endpoint.call(__privateGet(this, _actions21), { client: "YTMUSIC" });
return new Explore(response);
}
async getLibrary() {
const browse_endpoint = new NavigationEndpoint({ browseEndpoint: { browseId: "FEmusic_library_landing" } });
const response = await browse_endpoint.call(__privateGet(this, _actions21), { client: "YTMUSIC" });
return new Library2(response, __privateGet(this, _actions21));
}
async getArtist(artist_id) {
if (!artist_id || !artist_id.startsWith("UC") && !artist_id.startsWith("FEmusic_library_privately_owned_artist"))
throw new InnertubeError("Invalid artist id", artist_id);
const browse_endpoint = new NavigationEndpoint({ browseEndpoint: { browseId: artist_id } });
const response = await browse_endpoint.call(__privateGet(this, _actions21), { client: "YTMUSIC" });
return new Artist(response, __privateGet(this, _actions21));
}
async getAlbum(album_id) {
if (!album_id || !album_id.startsWith("MPR") && !album_id.startsWith("FEmusic_library_privately_owned_release"))
throw new InnertubeError("Invalid album id", album_id);
const browse_endpoint = new NavigationEndpoint({ browseEndpoint: { browseId: album_id } });
const response = await browse_endpoint.call(__privateGet(this, _actions21), { client: "YTMUSIC" });
return new Album(response);
}
async getPlaylist(playlist_id) {
if (!playlist_id.startsWith("VL"))
playlist_id = `VL${playlist_id}`;
const browse_endpoint = new NavigationEndpoint({ browseEndpoint: { browseId: playlist_id } });
const response = await browse_endpoint.call(__privateGet(this, _actions21), { client: "YTMUSIC" });
return new Playlist3(response, __privateGet(this, _actions21));
}
async getUpNext(video_id, automix = true) {
throwIfMissing({ video_id });
const watch_next_endpoint = new NavigationEndpoint({ watchNextEndpoint: { videoId: video_id } });
const response = await watch_next_endpoint.call(__privateGet(this, _actions21), { client: "YTMUSIC", parse: true });
const tabs = response.contents_memo?.getType(Tab);
const tab = tabs?.[0];
if (!tab)
throw new InnertubeError("Could not find target tab.");
const music_queue = tab.content?.as(MusicQueue);
if (!music_queue || !music_queue.content)
throw new InnertubeError("Music queue was empty, the given id is probably invalid.", music_queue);
const playlist_panel = music_queue.content.as(PlaylistPanel);
if (!playlist_panel.playlist_id && automix) {
const automix_preview_video = playlist_panel.contents.firstOfType(AutomixPreviewVideo);
if (!automix_preview_video)
throw new InnertubeError("Automix item not found");
const page = await automix_preview_video.playlist_video?.endpoint.call(__privateGet(this, _actions21), {
videoId: video_id,
client: "YTMUSIC",
parse: true
});
if (!page || !page.contents_memo)
throw new InnertubeError("Could not fetch automix");
return page.contents_memo.getType(PlaylistPanel)[0];
}
return playlist_panel;
}
async getRelated(video_id) {
throwIfMissing({ video_id });
const watch_next_endpoint = new NavigationEndpoint({ watchNextEndpoint: { videoId: video_id } });
const response = await watch_next_endpoint.call(__privateGet(this, _actions21), { client: "YTMUSIC", parse: true });
const tabs = response.contents_memo?.getType(Tab);
const tab = tabs?.find((tab2) => tab2.endpoint.payload.browseEndpointContextSupportedConfigs?.browseEndpointContextMusicConfig?.pageType === "MUSIC_PAGE_TYPE_TRACK_RELATED");
if (!tab)
throw new InnertubeError("Could not find target tab.");
const page = await tab.endpoint.call(__privateGet(this, _actions21), { client: "YTMUSIC", parse: true });
if (!page.contents)
throw new InnertubeError("Unexpected response", page);
return page.contents.item().as(SectionList, Message);
}
async getLyrics(video_id) {
throwIfMissing({ video_id });
const watch_next_endpoint = new NavigationEndpoint({ watchNextEndpoint: { videoId: video_id } });
const response = await watch_next_endpoint.call(__privateGet(this, _actions21), { client: "YTMUSIC", parse: true });
const tabs = response.contents_memo?.getType(Tab);
const tab = tabs?.find((tab2) => tab2.endpoint.payload.browseEndpointContextSupportedConfigs?.browseEndpointContextMusicConfig?.pageType === "MUSIC_PAGE_TYPE_TRACK_LYRICS");
if (!tab)
throw new InnertubeError("Could not find target tab.");
const page = await tab.endpoint.call(__privateGet(this, _actions21), { client: "YTMUSIC", parse: true });
if (!page.contents)
throw new InnertubeError("Unexpected response", page);
if (page.contents.item().type === "Message")
throw new InnertubeError(page.contents.item().as(Message).text.toString(), video_id);
const section_list = page.contents.item().as(SectionList).contents;
return section_list.firstOfType(MusicDescriptionShelf);
}
async getRecap() {
const browse_endpoint = new NavigationEndpoint({ browseEndpoint: { browseId: "FEmusic_listening_review" } });
const response = await browse_endpoint.call(__privateGet(this, _actions21), { client: "YTMUSIC" });
return new Recap(response, __privateGet(this, _actions21));
}
async getSearchSuggestions(input) {
const response = await __privateGet(this, _actions21).execute("/music/get_search_suggestions", {
input,
client: "YTMUSIC",
parse: true
});
if (!response.contents_memo)
return [];
return response.contents_memo.getType(SearchSuggestionsSection);
}
};
_session4 = new WeakMap();
_actions21 = new WeakMap();
_Music_instances = new WeakSet();
fetchInfoFromVideoId_fn = /* @__PURE__ */ __name(async function(video_id, options) {
const payload = { videoId: video_id, racyCheckOk: true, contentCheckOk: true };
const watch_endpoint = new NavigationEndpoint({ watchEndpoint: payload });
const watch_next_endpoint = new NavigationEndpoint({ watchNextEndpoint: payload });
const extra_payload = {
playbackContext: {
contentPlaybackContext: {
vis: 0,
splay: false,
lactMilliseconds: "-1",
signatureTimestamp: __privateGet(this, _session4).player?.signature_timestamp
}
},
client: "YTMUSIC"
};
if (options?.po_token) {
extra_payload.serviceIntegrityDimensions = {
poToken: options.po_token
};
} else if (__privateGet(this, _session4).po_token) {
extra_payload.serviceIntegrityDimensions = {
poToken: __privateGet(this, _session4).po_token
};
}
const watch_response = watch_endpoint.call(__privateGet(this, _actions21), extra_payload);
const watch_next_response = watch_next_endpoint.call(__privateGet(this, _actions21), { client: "YTMUSIC" });
const response = await Promise.all([watch_response, watch_next_response]);
const cpn = generateRandomString(16);
return new TrackInfo_default(response, __privateGet(this, _actions21), cpn);
}, "#fetchInfoFromVideoId");
fetchInfoFromEndpoint_fn = /* @__PURE__ */ __name(async function(endpoint, options) {
if (!endpoint)
throw new Error("This item does not have an endpoint.");
const extra_payload = {
playbackContext: {
contentPlaybackContext: {
vis: 0,
splay: false,
lactMilliseconds: "-1",
signatureTimestamp: __privateGet(this, _session4).player?.signature_timestamp
}
},
client: "YTMUSIC"
};
if (options?.po_token) {
extra_payload.serviceIntegrityDimensions = {
poToken: options.po_token
};
} else if (__privateGet(this, _session4).po_token) {
extra_payload.serviceIntegrityDimensions = {
poToken: __privateGet(this, _session4).po_token
};
}
const player_response = endpoint.call(__privateGet(this, _actions21), extra_payload);
const next_response = endpoint.call(__privateGet(this, _actions21), {
client: "YTMUSIC",
enablePersistentPlaylistPanel: true,
override_endpoint: "/next"
});
const cpn = generateRandomString(16);
const response = await Promise.all([player_response, next_response]);
return new TrackInfo_default(response, __privateGet(this, _actions21), cpn);
}, "#fetchInfoFromEndpoint");
__name(_Music, "Music");
var Music = _Music;
// dist/protos/generated/youtube/api/pfiinnertube/capability_info.js
function createBaseCapabilityInfo() {
return { profile: void 0, supportedCapabilities: [], disabledCapabilities: [], snapshot: void 0 };
}
__name(createBaseCapabilityInfo, "createBaseCapabilityInfo");
var CapabilityInfo = {
encode(message, writer = new BinaryWriter()) {
if (message.profile !== void 0) {
writer.uint32(10).string(message.profile);
}
for (const v of message.supportedCapabilities) {
InnerTubeCapability.encode(v, writer.uint32(18).fork()).join();
}
for (const v of message.disabledCapabilities) {
InnerTubeCapability.encode(v, writer.uint32(26).fork()).join();
}
if (message.snapshot !== void 0) {
writer.uint32(42).string(message.snapshot);
}
return writer;
},
decode(input, length) {
const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
const end = length === void 0 ? reader.len : reader.pos + length;
const message = createBaseCapabilityInfo();
while (reader.pos < end) {
const tag = reader.uint32();
switch (tag >>> 3) {
case 1: {
if (tag !== 10) {
break;
}
message.profile = reader.string();
continue;
}
case 2: {
if (tag !== 18) {
break;
}
message.supportedCapabilities.push(InnerTubeCapability.decode(reader, reader.uint32()));
continue;
}
case 3: {
if (tag !== 26) {
break;
}
message.disabledCapabilities.push(InnerTubeCapability.decode(reader, reader.uint32()));
continue;
}
case 5: {
if (tag !== 42) {
break;
}
message.snapshot = reader.string();
continue;
}
}
if ((tag & 7) === 4 || tag === 0) {
break;
}
reader.skip(tag & 7);
}
return message;
}
};
function createBaseInnerTubeCapability() {
return { capability: void 0, features: void 0, experimentFlags: void 0 };
}
__name(createBaseInnerTubeCapability, "createBaseInnerTubeCapability");
var InnerTubeCapability = {
encode(message, writer = new BinaryWriter()) {
if (message.capability !== void 0) {
writer.uint32(8).uint32(message.capability);
}
if (message.features !== void 0) {
writer.uint32(16).uint32(message.features);
}
if (message.experimentFlags !== void 0) {
writer.uint32(50).string(message.experimentFlags);
}
return writer;
},
decode(input, length) {
const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
const end = length === void 0 ? reader.len : reader.pos + length;
const message = createBaseInnerTubeCapability();
while (reader.pos < end) {
const tag = reader.uint32();
switch (tag >>> 3) {
case 1: {
if (tag !== 8) {
break;
}
message.capability = reader.uint32();
continue;
}
case 2: {
if (tag !== 16) {
break;
}
message.features = reader.uint32();
continue;
}
case 6: {
if (tag !== 50) {
break;
}
message.experimentFlags = reader.string();
continue;
}
}
if ((tag & 7) === 4 || tag === 0) {
break;
}
reader.skip(tag & 7);
}
return message;
}
};
// dist/protos/generated/youtube/api/pfiinnertube/client_info.js
function createBaseClientInfo() {
return {
hl: void 0,
gl: void 0,
remoteHost: void 0,
deviceId: void 0,
debugDeviceIdOverride: void 0,
carrierGeo: void 0,
crackedHl: void 0,
deviceMake: void 0,
deviceModel: void 0,
visitorData: void 0,
userAgent: void 0,
clientName: void 0,
clientVersion: void 0,
osName: void 0,
osVersion: void 0,
projectId: void 0,
acceptLanguage: void 0,
acceptRegion: void 0,
originalUrl: void 0,
rawDeviceId: void 0,
configData: void 0,
spacecastToken: void 0,
internalGeo: void 0,
screenWidthPoints: void 0,
screenHeightPoints: void 0,
screenWidthInches: void 0,
screenHeightInches: void 0,
screenPixelDensity: void 0,
platform: void 0,
spacecastClientInfo: void 0,
clientFormFactor: void 0,
forwardedFor: void 0,
mobileDataPlanInfo: void 0,
gmscoreVersionCode: void 0,
webpSupport: void 0,
cameraType: void 0,
experimentsToken: void 0,
windowWidthPoints: void 0,
windowHeightPoints: void 0,
configInfo: void 0,
unpluggedLocationInfo: void 0,
androidSdkVersion: void 0,
screenDensityFloat: void 0,
firstTimeSignInExperimentIds: void 0,
utcOffsetMinutes: void 0,
animatedWebpSupport: void 0,
kidsAppInfo: void 0,
musicAppInfo: void 0,
tvAppInfo: void 0,
internalGeoIp: void 0,
unpluggedAppInfo: void 0,
locationInfo: void 0,
contentSizeCategory: void 0,
fontScale: void 0,
userInterfaceTheme: void 0,
timeZone: void 0,
homeGroupInfo: void 0,
emlTemplateContext: void 0,
coldAppBundleConfigData: void 0,
browserName: void 0,
browserVersion: void 0,
locationPlayabilityToken: void 0,
chipset: void 0,
firmwareVersion: void 0,
memoryTotalKbytes: void 0,
mainAppWebInfo: void 0,
notificationPermissionInfo: void 0,
deviceBrand: void 0,
glDeviceInfo: void 0
};
}
__name(createBaseClientInfo, "createBaseClientInfo");
var ClientInfo = {
encode(message, writer = new BinaryWriter()) {
if (message.hl !== void 0) {
writer.uint32(10).string(message.hl);
}
if (message.gl !== void 0) {
writer.uint32(18).string(message.gl);
}
if (message.remoteHost !== void 0) {
writer.uint32(34).string(message.remoteHost);
}
if (message.deviceId !== void 0) {
writer.uint32(50).string(message.deviceId);
}
if (message.debugDeviceIdOverride !== void 0) {
writer.uint32(66).string(message.debugDeviceIdOverride);
}
if (message.carrierGeo !== void 0) {
writer.uint32(82).string(message.carrierGeo);
}
if (message.crackedHl !== void 0) {
writer.uint32(88).bool(message.crackedHl);
}
if (message.deviceMake !== void 0) {
writer.uint32(98).string(message.deviceMake);
}
if (message.deviceModel !== void 0) {
writer.uint32(106).string(message.deviceModel);
}
if (message.visitorData !== void 0) {
writer.uint32(114).string(message.visitorData);
}
if (message.userAgent !== void 0) {
writer.uint32(122).string(message.userAgent);
}
if (message.clientName !== void 0) {
writer.uint32(128).int32(message.clientName);
}
if (message.clientVersion !== void 0) {
writer.uint32(138).string(message.clientVersion);
}
if (message.osName !== void 0) {
writer.uint32(146).string(message.osName);
}
if (message.osVersion !== void 0) {
writer.uint32(154).string(message.osVersion);
}
if (message.projectId !== void 0) {
writer.uint32(162).string(message.projectId);
}
if (message.acceptLanguage !== void 0) {
writer.uint32(170).string(message.acceptLanguage);
}
if (message.acceptRegion !== void 0) {
writer.uint32(178).string(message.acceptRegion);
}
if (message.originalUrl !== void 0) {
writer.uint32(186).string(message.originalUrl);
}
if (message.rawDeviceId !== void 0) {
writer.uint32(202).string(message.rawDeviceId);
}
if (message.configData !== void 0) {
writer.uint32(218).string(message.configData);
}
if (message.spacecastToken !== void 0) {
writer.uint32(250).string(message.spacecastToken);
}
if (message.internalGeo !== void 0) {
writer.uint32(274).string(message.internalGeo);
}
if (message.screenWidthPoints !== void 0) {
writer.uint32(296).int32(message.screenWidthPoints);
}
if (message.screenHeightPoints !== void 0) {
writer.uint32(304).int32(message.screenHeightPoints);
}
if (message.screenWidthInches !== void 0) {
writer.uint32(317).float(message.screenWidthInches);
}
if (message.screenHeightInches !== void 0) {
writer.uint32(325).float(message.screenHeightInches);
}
if (message.screenPixelDensity !== void 0) {
writer.uint32(328).int32(message.screenPixelDensity);
}
if (message.platform !== void 0) {
writer.uint32(336).int32(message.platform);
}
if (message.spacecastClientInfo !== void 0) {
ClientInfo_SpacecastClientInfo.encode(message.spacecastClientInfo, writer.uint32(362).fork()).join();
}
if (message.clientFormFactor !== void 0) {
writer.uint32(368).int32(message.clientFormFactor);
}
if (message.forwardedFor !== void 0) {
writer.uint32(386).string(message.forwardedFor);
}
if (message.mobileDataPlanInfo !== void 0) {
ClientInfo_MobileDataPlanInfo.encode(message.mobileDataPlanInfo, writer.uint32(394).fork()).join();
}
if (message.gmscoreVersionCode !== void 0) {
writer.uint32(400).int32(message.gmscoreVersionCode);
}
if (message.webpSupport !== void 0) {
writer.uint32(408).bool(message.webpSupport);
}
if (message.cameraType !== void 0) {
writer.uint32(416).int32(message.cameraType);
}
if (message.experimentsToken !== void 0) {
writer.uint32(434).string(message.experimentsToken);
}
if (message.windowWidthPoints !== void 0) {
writer.uint32(440).int32(message.windowWidthPoints);
}
if (message.windowHeightPoints !== void 0) {
writer.uint32(448).int32(message.windowHeightPoints);
}
if (message.configInfo !== void 0) {
ClientInfo_ConfigGroupsClientInfo.encode(message.configInfo, writer.uint32(498).fork()).join();
}
if (message.unpluggedLocationInfo !== void 0) {
ClientInfo_UnpluggedLocationInfo.encode(message.unpluggedLocationInfo, writer.uint32(506).fork()).join();
}
if (message.androidSdkVersion !== void 0) {
writer.uint32(512).int32(message.androidSdkVersion);
}
if (message.screenDensityFloat !== void 0) {
writer.uint32(525).float(message.screenDensityFloat);
}
if (message.firstTimeSignInExperimentIds !== void 0) {
writer.uint32(528).int32(message.firstTimeSignInExperimentIds);
}
if (message.utcOffsetMinutes !== void 0) {
writer.uint32(536).int32(message.utcOffsetMinutes);
}
if (message.animatedWebpSupport !== void 0) {
writer.uint32(544).bool(message.animatedWebpSupport);
}
if (message.kidsAppInfo !== void 0) {
ClientInfo_KidsAppInfo.encode(message.kidsAppInfo, writer.uint32(554).fork()).join();
}
if (message.musicAppInfo !== void 0) {
ClientInfo_MusicAppInfo.encode(message.musicAppInfo, writer.uint32(562).fork()).join();
}
if (message.tvAppInfo !== void 0) {
ClientInfo_TvAppInfo.encode(message.tvAppInfo, writer.uint32(570).fork()).join();
}
if (message.internalGeoIp !== void 0) {
writer.uint32(578).string(message.internalGeoIp);
}
if (message.unpluggedAppInfo !== void 0) {
ClientInfo_UnpluggedAppInfo.encode(message.unpluggedAppInfo, writer.uint32(586).fork()).join();
}
if (message.locationInfo !== void 0) {
ClientInfo_LocationInfo.encode(message.locationInfo, writer.uint32(594).fork()).join();
}
if (message.contentSizeCategory !== void 0) {
writer.uint32(610).string(message.contentSizeCategory);
}
if (message.fontScale !== void 0) {
writer.uint32(621).float(message.fontScale);
}
if (message.userInterfaceTheme !== void 0) {
writer.uint32(624).int32(message.userInterfaceTheme);
}
if (message.timeZone !== void 0) {
writer.uint32(642).string(message.timeZone);
}
if (message.homeGroupInfo !== void 0) {
ClientInfo_HomeGroupInfo.encode(message.homeGroupInfo, writer.uint32(650).fork()).join();
}
if (message.emlTemplateContext !== void 0) {
writer.uint32(674).bytes(message.emlTemplateContext);
}
if (message.coldAppBundleConfigData !== void 0) {
writer.uint32(682).bytes(message.coldAppBundleConfigData);
}
if (message.browserName !== void 0) {
writer.uint32(698).string(message.browserName);
}
if (message.browserVersion !== void 0) {
writer.uint32(706).string(message.browserVersion);
}
if (message.locationPlayabilityToken !== void 0) {
writer.uint32(714).string(message.locationPlayabilityToken);
}
if (message.chipset !== void 0) {
writer.uint32(738).string(message.chipset);
}
if (message.firmwareVersion !== void 0) {
writer.uint32(746).string(message.firmwareVersion);
}
if (message.memoryTotalKbytes !== void 0) {
writer.uint32(760).int64(message.memoryTotalKbytes);
}
if (message.mainAppWebInfo !== void 0) {
ClientInfo_MainAppWebInfo.encode(message.mainAppWebInfo, writer.uint32(770).fork()).join();
}
if (message.notificationPermissionInfo !== void 0) {
ClientInfo_NotificationPermissionInfo.encode(message.notificationPermissionInfo, writer.uint32(778).fork()).join();
}
if (message.deviceBrand !== void 0) {
writer.uint32(786).string(message.deviceBrand);
}
if (message.glDeviceInfo !== void 0) {
ClientInfo_GLDeviceInfo.encode(message.glDeviceInfo, writer.uint32(818).fork()).join();
}
return writer;
},
decode(input, length) {
const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
const end = length === void 0 ? reader.len : reader.pos + length;
const message = createBaseClientInfo();
while (reader.pos < end) {
const tag = reader.uint32();
switch (tag >>> 3) {
case 1: {
if (tag !== 10) {
break;
}
message.hl = reader.string();
continue;
}
case 2: {
if (tag !== 18) {
break;
}
message.gl = reader.string();
continue;
}
case 4: {
if (tag !== 34) {
break;
}
message.remoteHost = reader.string();
continue;
}
case 6: {
if (tag !== 50) {
break;
}
message.deviceId = reader.string();
continue;
}
case 8: {
if (tag !== 66) {
break;
}
message.debugDeviceIdOverride = reader.string();
continue;
}
case 10: {
if (tag !== 82) {
break;
}
message.carrierGeo = reader.string();
continue;
}
case 11: {
if (tag !== 88) {
break;
}
message.crackedHl = reader.bool();
continue;
}
case 12: {
if (tag !== 98) {
break;
}
message.deviceMake = reader.string();
continue;
}
case 13: {
if (tag !== 106) {
break;
}
message.deviceModel = reader.string();
continue;
}
case 14: {
if (tag !== 114) {
break;
}
message.visitorData = reader.string();
continue;
}
case 15: {
if (tag !== 122) {
break;
}
message.userAgent = reader.string();
continue;
}
case 16: {
if (tag !== 128) {
break;
}
message.clientName = reader.int32();
continue;
}
case 17: {
if (tag !== 138) {
break;
}
message.clientVersion = reader.string();
continue;
}
case 18: {
if (tag !== 146) {
break;
}
message.osName = reader.string();
continue;
}
case 19: {
if (tag !== 154) {
break;
}
message.osVersion = reader.string();
continue;
}
case 20: {
if (tag !== 162) {
break;
}
message.projectId = reader.string();
continue;
}
case 21: {
if (tag !== 170) {
break;
}
message.acceptLanguage = reader.string();
continue;
}
case 22: {
if (tag !== 178) {
break;
}
message.acceptRegion = reader.string();
continue;
}
case 23: {
if (tag !== 186) {
break;
}
message.originalUrl = reader.string();
continue;
}
case 25: {
if (tag !== 202) {
break;
}
message.rawDeviceId = reader.string();
continue;
}
case 27: {
if (tag !== 218) {
break;
}
message.configData = reader.string();
continue;
}
case 31: {
if (tag !== 250) {
break;
}
message.spacecastToken = reader.string();
continue;
}
case 34: {
if (tag !== 274) {
break;
}
message.internalGeo = reader.string();
continue;
}
case 37: {
if (tag !== 296) {
break;
}
message.screenWidthPoints = reader.int32();
continue;
}
case 38: {
if (tag !== 304) {
break;
}
message.screenHeightPoints = reader.int32();
continue;
}
case 39: {
if (tag !== 317) {
break;
}
message.screenWidthInches = reader.float();
continue;
}
case 40: {
if (tag !== 325) {
break;
}
message.screenHeightInches = reader.float();
continue;
}
case 41: {
if (tag !== 328) {
break;
}
message.screenPixelDensity = reader.int32();
continue;
}
case 42: {
if (tag !== 336) {
break;
}
message.platform = reader.int32();
continue;
}
case 45: {
if (tag !== 362) {
break;
}
message.spacecastClientInfo = ClientInfo_SpacecastClientInfo.decode(reader, reader.uint32());
continue;
}
case 46: {
if (tag !== 368) {
break;
}
message.clientFormFactor = reader.int32();
continue;
}
case 48: {
if (tag !== 386) {
break;
}
message.forwardedFor = reader.string();
continue;
}
case 49: {
if (tag !== 394) {
break;
}
message.mobileDataPlanInfo = ClientInfo_MobileDataPlanInfo.decode(reader, reader.uint32());
continue;
}
case 50: {
if (tag !== 400) {
break;
}
message.gmscoreVersionCode = reader.int32();
continue;
}
case 51: {
if (tag !== 408) {
break;
}
message.webpSupport = reader.bool();
continue;
}
case 52: {
if (tag !== 416) {
break;
}
message.cameraType = reader.int32();
continue;
}
case 54: {
if (tag !== 434) {
break;
}
message.experimentsToken = reader.string();
continue;
}
case 55: {
if (tag !== 440) {
break;
}
message.windowWidthPoints = reader.int32();
continue;
}
case 56: {
if (tag !== 448) {
break;
}
message.windowHeightPoints = reader.int32();
continue;
}
case 62: {
if (tag !== 498) {
break;
}
message.configInfo = ClientInfo_ConfigGroupsClientInfo.decode(reader, reader.uint32());
continue;
}
case 63: {
if (tag !== 506) {
break;
}
message.unpluggedLocationInfo = ClientInfo_UnpluggedLocationInfo.decode(reader, reader.uint32());
continue;
}
case 64: {
if (tag !== 512) {
break;
}
message.androidSdkVersion = reader.int32();
continue;
}
case 65: {
if (tag !== 525) {
break;
}
message.screenDensityFloat = reader.float();
continue;
}
case 66: {
if (tag !== 528) {
break;
}
message.firstTimeSignInExperimentIds = reader.int32();
continue;
}
case 67: {
if (tag !== 536) {
break;
}
message.utcOffsetMinutes = reader.int32();
continue;
}
case 68: {
if (tag !== 544) {
break;
}
message.animatedWebpSupport = reader.bool();
continue;
}
case 69: {
if (tag !== 554) {
break;
}
message.kidsAppInfo = ClientInfo_KidsAppInfo.decode(reader, reader.uint32());
continue;
}
case 70: {
if (tag !== 562) {
break;
}
message.musicAppInfo = ClientInfo_MusicAppInfo.decode(reader, reader.uint32());
continue;
}
case 71: {
if (tag !== 570) {
break;
}
message.tvAppInfo = ClientInfo_TvAppInfo.decode(reader, reader.uint32());
continue;
}
case 72: {
if (tag !== 578) {
break;
}
message.internalGeoIp = reader.string();
continue;
}
case 73: {
if (tag !== 586) {
break;
}
message.unpluggedAppInfo = ClientInfo_UnpluggedAppInfo.decode(reader, reader.uint32());
continue;
}
case 74: {
if (tag !== 594) {
break;
}
message.locationInfo = ClientInfo_LocationInfo.decode(reader, reader.uint32());
continue;
}
case 76: {
if (tag !== 610) {
break;
}
message.contentSizeCategory = reader.string();
continue;
}
case 77: {
if (tag !== 621) {
break;
}
message.fontScale = reader.float();
continue;
}
case 78: {
if (tag !== 624) {
break;
}
message.userInterfaceTheme = reader.int32();
continue;
}
case 80: {
if (tag !== 642) {
break;
}
message.timeZone = reader.string();
continue;
}
case 81: {
if (tag !== 650) {
break;
}
message.homeGroupInfo = ClientInfo_HomeGroupInfo.decode(reader, reader.uint32());
continue;
}
case 84: {
if (tag !== 674) {
break;
}
message.emlTemplateContext = reader.bytes();
continue;
}
case 85: {
if (tag !== 682) {
break;
}
message.coldAppBundleConfigData = reader.bytes();
continue;
}
case 87: {
if (tag !== 698) {
break;
}
message.browserName = reader.string();
continue;
}
case 88: {
if (tag !== 706) {
break;
}
message.browserVersion = reader.string();
continue;
}
case 89: {
if (tag !== 714) {
break;
}
message.locationPlayabilityToken = reader.string();
continue;
}
case 92: {
if (tag !== 738) {
break;
}
message.chipset = reader.string();
continue;
}
case 93: {
if (tag !== 746) {
break;
}
message.firmwareVersion = reader.string();
continue;
}
case 95: {
if (tag !== 760) {
break;
}
message.memoryTotalKbytes = longToNumber(reader.int64());
continue;
}
case 96: {
if (tag !== 770) {
break;
}
message.mainAppWebInfo = ClientInfo_MainAppWebInfo.decode(reader, reader.uint32());
continue;
}
case 97: {
if (tag !== 778) {
break;
}
message.notificationPermissionInfo = ClientInfo_NotificationPermissionInfo.decode(reader, reader.uint32());
continue;
}
case 98: {
if (tag !== 786) {
break;
}
message.deviceBrand = reader.string();
continue;
}
case 102: {
if (tag !== 818) {
break;
}
message.glDeviceInfo = ClientInfo_GLDeviceInfo.decode(reader, reader.uint32());
continue;
}
}
if ((tag & 7) === 4 || tag === 0) {
break;
}
reader.skip(tag & 7);
}
return message;
}
};
function createBaseClientInfo_MainAppWebInfo() {
return {
graftUrl: void 0,
pwaInstallabilityStatus: void 0,
webDisplayMode: void 0,
isWebNativeShareAvailable: void 0,
storeDigitalGoodsApiSupportStatus: void 0
};
}
__name(createBaseClientInfo_MainAppWebInfo, "createBaseClientInfo_MainAppWebInfo");
var ClientInfo_MainAppWebInfo = {
encode(message, writer = new BinaryWriter()) {
if (message.graftUrl !== void 0) {
writer.uint32(10).string(message.graftUrl);
}
if (message.pwaInstallabilityStatus !== void 0) {
writer.uint32(16).int32(message.pwaInstallabilityStatus);
}
if (message.webDisplayMode !== void 0) {
writer.uint32(24).int32(message.webDisplayMode);
}
if (message.isWebNativeShareAvailable !== void 0) {
writer.uint32(32).bool(message.isWebNativeShareAvailable);
}
if (message.storeDigitalGoodsApiSupportStatus !== void 0) {
writer.uint32(40).int32(message.storeDigitalGoodsApiSupportStatus);
}
return writer;
},
decode(input, length) {
const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
const end = length === void 0 ? reader.len : reader.pos + length;
const message = createBaseClientInfo_MainAppWebInfo();
while (reader.pos < end) {
const tag = reader.uint32();
switch (tag >>> 3) {
case 1: {
if (tag !== 10) {
break;
}
message.graftUrl = reader.string();
continue;
}
case 2: {
if (tag !== 16) {
break;
}
message.pwaInstallabilityStatus = reader.int32();
continue;
}
case 3: {
if (tag !== 24) {
break;
}
message.webDisplayMode = reader.int32();
continue;
}
case 4: {
if (tag !== 32) {
break;
}
message.isWebNativeShareAvailable = reader.bool();
continue;
}
case 5: {
if (tag !== 40) {
break;
}
message.storeDigitalGoodsApiSupportStatus = reader.int32();
continue;
}
}
if ((tag & 7) === 4 || tag === 0) {
break;
}
reader.skip(tag & 7);
}
return message;
}
};
function createBaseClientInfo_NotificationPermissionInfo() {
return { notificationsSetting: void 0, lastDeviceOptInChangeTimeAgoSec: void 0 };
}
__name(createBaseClientInfo_NotificationPermissionInfo, "createBaseClientInfo_NotificationPermissionInfo");
var ClientInfo_NotificationPermissionInfo = {
encode(message, writer = new BinaryWriter()) {
if (message.notificationsSetting !== void 0) {
writer.uint32(8).int32(message.notificationsSetting);
}
if (message.lastDeviceOptInChangeTimeAgoSec !== void 0) {
writer.uint32(16).int64(message.lastDeviceOptInChangeTimeAgoSec);
}
return writer;
},
decode(input, length) {
const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
const end = length === void 0 ? reader.len : reader.pos + length;
const message = createBaseClientInfo_NotificationPermissionInfo();
while (reader.pos < end) {
const tag = reader.uint32();
switch (tag >>> 3) {
case 1: {
if (tag !== 8) {
break;
}
message.notificationsSetting = reader.int32();
continue;
}
case 2: {
if (tag !== 16) {
break;
}
message.lastDeviceOptInChangeTimeAgoSec = longToNumber(reader.int64());
continue;
}
}
if ((tag & 7) === 4 || tag === 0) {
break;
}
reader.skip(tag & 7);
}
return message;
}
};
function createBaseClientInfo_GLDeviceInfo() {
return { glRenderer: void 0, glEsVersionMajor: void 0, glEsVersionMinor: void 0 };
}
__name(createBaseClientInfo_GLDeviceInfo, "createBaseClientInfo_GLDeviceInfo");
var ClientInfo_GLDeviceInfo = {
encode(message, writer = new BinaryWriter()) {
if (message.glRenderer !== void 0) {
writer.uint32(10).string(message.glRenderer);
}
if (message.glEsVersionMajor !== void 0) {
writer.uint32(16).int32(message.glEsVersionMajor);
}
if (message.glEsVersionMinor !== void 0) {
writer.uint32(24).int32(message.glEsVersionMinor);
}
return writer;
},
decode(input, length) {
const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
const end = length === void 0 ? reader.len : reader.pos + length;
const message = createBaseClientInfo_GLDeviceInfo();
while (reader.pos < end) {
const tag = reader.uint32();
switch (tag >>> 3) {
case 1: {
if (tag !== 10) {
break;
}
message.glRenderer = reader.string();
continue;
}
case 2: {
if (tag !== 16) {
break;
}
message.glEsVersionMajor = reader.int32();
continue;
}
case 3: {
if (tag !== 24) {
break;
}
message.glEsVersionMinor = reader.int32();
continue;
}
}
if ((tag & 7) === 4 || tag === 0) {
break;
}
reader.skip(tag & 7);
}
return message;
}
};
function createBaseClientInfo_SpacecastClientInfo() {
return { appliances: void 0, interactionLevel: void 0 };
}
__name(createBaseClientInfo_SpacecastClientInfo, "createBaseClientInfo_SpacecastClientInfo");
var ClientInfo_SpacecastClientInfo = {
encode(message, writer = new BinaryWriter()) {
if (message.appliances !== void 0) {
ClientInfo_SpacecastClientInfo_SpacecastAppliance.encode(message.appliances, writer.uint32(10).fork()).join();
}
if (message.interactionLevel !== void 0) {
writer.uint32(16).int32(message.interactionLevel);
}
return writer;
},
decode(input, length) {
const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
const end = length === void 0 ? reader.len : reader.pos + length;
const message = createBaseClientInfo_SpacecastClientInfo();
while (reader.pos < end) {
const tag = reader.uint32();
switch (tag >>> 3) {
case 1: {
if (tag !== 10) {
break;
}
message.appliances = ClientInfo_SpacecastClientInfo_SpacecastAppliance.decode(reader, reader.uint32());
continue;
}
case 2: {
if (tag !== 16) {
break;
}
message.interactionLevel = reader.int32();
continue;
}
}
if ((tag & 7) === 4 || tag === 0) {
break;
}
reader.skip(tag & 7);
}
return message;
}
};
function createBaseClientInfo_SpacecastClientInfo_SpacecastAppliance() {
return {
contentProfileToken: void 0,
status: void 0,
hostname: void 0,
active: void 0,
deviceId: void 0
};
}
__name(createBaseClientInfo_SpacecastClientInfo_SpacecastAppliance, "createBaseClientInfo_SpacecastClientInfo_SpacecastAppliance");
var ClientInfo_SpacecastClientInfo_SpacecastAppliance = {
encode(message, writer = new BinaryWriter()) {
if (message.contentProfileToken !== void 0) {
writer.uint32(10).bytes(message.contentProfileToken);
}
if (message.status !== void 0) {
writer.uint32(16).int32(message.status);
}
if (message.hostname !== void 0) {
writer.uint32(26).string(message.hostname);
}
if (message.active !== void 0) {
writer.uint32(32).bool(message.active);
}
if (message.deviceId !== void 0) {
writer.uint32(42).string(message.deviceId);
}
return writer;
},
decode(input, length) {
const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
const end = length === void 0 ? reader.len : reader.pos + length;
const message = createBaseClientInfo_SpacecastClientInfo_SpacecastAppliance();
while (reader.pos < end) {
const tag = reader.uint32();
switch (tag >>> 3) {
case 1: {
if (tag !== 10) {
break;
}
message.contentProfileToken = reader.bytes();
continue;
}
case 2: {
if (tag !== 16) {
break;
}
message.status = reader.int32();
continue;
}
case 3: {
if (tag !== 26) {
break;
}
message.hostname = reader.string();
continue;
}
case 4: {
if (tag !== 32) {
break;
}
message.active = reader.bool();
continue;
}
case 5: {
if (tag !== 42) {
break;
}
message.deviceId = reader.string();
continue;
}
}
if ((tag & 7) === 4 || tag === 0) {
break;
}
reader.skip(tag & 7);
}
return message;
}
};
function createBaseClientInfo_MobileDataPlanInfo() {
return {
cpid: void 0,
serializedDataPlanStatus: void 0,
dataSavingQualityPickerEnabled: void 0,
mccmnc: void 0
};
}
__name(createBaseClientInfo_MobileDataPlanInfo, "createBaseClientInfo_MobileDataPlanInfo");
var ClientInfo_MobileDataPlanInfo = {
encode(message, writer = new BinaryWriter()) {
if (message.cpid !== void 0) {
writer.uint32(394).string(message.cpid);
}
if (message.serializedDataPlanStatus !== void 0) {
writer.uint32(402).string(message.serializedDataPlanStatus);
}
if (message.dataSavingQualityPickerEnabled !== void 0) {
writer.uint32(416).bool(message.dataSavingQualityPickerEnabled);
}
if (message.mccmnc !== void 0) {
writer.uint32(426).string(message.mccmnc);
}
return writer;
},
decode(input, length) {
const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
const end = length === void 0 ? reader.len : reader.pos + length;
const message = createBaseClientInfo_MobileDataPlanInfo();
while (reader.pos < end) {
const tag = reader.uint32();
switch (tag >>> 3) {
case 49: {
if (tag !== 394) {
break;
}
message.cpid = reader.string();
continue;
}
case 50: {
if (tag !== 402) {
break;
}
message.serializedDataPlanStatus = reader.string();
continue;
}
case 52: {
if (tag !== 416) {
break;
}
message.dataSavingQualityPickerEnabled = reader.bool();
continue;
}
case 53: {
if (tag !== 426) {
break;
}
message.mccmnc = reader.string();
continue;
}
}
if ((tag & 7) === 4 || tag === 0) {
break;
}
reader.skip(tag & 7);
}
return message;
}
};
function createBaseClientInfo_ConfigGroupsClientInfo() {
return { coldConfigData: void 0, coldHashData: void 0, hotHashData: void 0, appInstallData: void 0 };
}
__name(createBaseClientInfo_ConfigGroupsClientInfo, "createBaseClientInfo_ConfigGroupsClientInfo");
var ClientInfo_ConfigGroupsClientInfo = {
encode(message, writer = new BinaryWriter()) {
if (message.coldConfigData !== void 0) {
writer.uint32(10).string(message.coldConfigData);
}
if (message.coldHashData !== void 0) {
writer.uint32(26).string(message.coldHashData);
}
if (message.hotHashData !== void 0) {
writer.uint32(42).string(message.hotHashData);
}
if (message.appInstallData !== void 0) {
writer.uint32(50).string(message.appInstallData);
}
return writer;
},
decode(input, length) {
const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
const end = length === void 0 ? reader.len : reader.pos + length;
const message = createBaseClientInfo_ConfigGroupsClientInfo();
while (reader.pos < end) {
const tag = reader.uint32();
switch (tag >>> 3) {
case 1: {
if (tag !== 10) {
break;
}
message.coldConfigData = reader.string();
continue;
}
case 3: {
if (tag !== 26) {
break;
}
message.coldHashData = reader.string();
continue;
}
case 5: {
if (tag !== 42) {
break;
}
message.hotHashData = reader.string();
continue;
}
case 6: {
if (tag !== 50) {
break;
}
message.appInstallData = reader.string();
continue;
}
}
if ((tag & 7) === 4 || tag === 0) {
break;
}
reader.skip(tag & 7);
}
return message;
}
};
function createBaseClientInfo_UnpluggedLocationInfo() {
return {
latitudeE7: void 0,
longitudeE7: void 0,
localTimestampMs: void 0,
ipAddress: void 0,
timezone: void 0,
prefer24HourTime: void 0,
locationRadiusMeters: void 0,
isInitialLoad: void 0,
browserPermissionGranted: void 0,
clientPermissionState: void 0,
locationOverrideToken: void 0
};
}
__name(createBaseClientInfo_UnpluggedLocationInfo, "createBaseClientInfo_UnpluggedLocationInfo");
var ClientInfo_UnpluggedLocationInfo = {
encode(message, writer = new BinaryWriter()) {
if (message.latitudeE7 !== void 0) {
writer.uint32(8).int32(message.latitudeE7);
}
if (message.longitudeE7 !== void 0) {
writer.uint32(16).int32(message.longitudeE7);
}
if (message.localTimestampMs !== void 0) {
writer.uint32(24).int64(message.localTimestampMs);
}
if (message.ipAddress !== void 0) {
writer.uint32(34).string(message.ipAddress);
}
if (message.timezone !== void 0) {
writer.uint32(42).string(message.timezone);
}
if (message.prefer24HourTime !== void 0) {
writer.uint32(48).bool(message.prefer24HourTime);
}
if (message.locationRadiusMeters !== void 0) {
writer.uint32(56).int32(message.locationRadiusMeters);
}
if (message.isInitialLoad !== void 0) {
writer.uint32(64).bool(message.isInitialLoad);
}
if (message.browserPermissionGranted !== void 0) {
writer.uint32(72).bool(message.browserPermissionGranted);
}
if (message.clientPermissionState !== void 0) {
writer.uint32(80).int32(message.clientPermissionState);
}
if (message.locationOverrideToken !== void 0) {
writer.uint32(90).string(message.locationOverrideToken);
}
return writer;
},
decode(input, length) {
const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
const end = length === void 0 ? reader.len : reader.pos + length;
const message = createBaseClientInfo_UnpluggedLocationInfo();
while (reader.pos < end) {
const tag = reader.uint32();
switch (tag >>> 3) {
case 1: {
if (tag !== 8) {
break;
}
message.latitudeE7 = reader.int32();
continue;
}
case 2: {
if (tag !== 16) {
break;
}
message.longitudeE7 = reader.int32();
continue;
}
case 3: {
if (tag !== 24) {
break;
}
message.localTimestampMs = longToNumber(reader.int64());
continue;
}
case 4: {
if (tag !== 34) {
break;
}
message.ipAddress = reader.string();
continue;
}
case 5: {
if (tag !== 42) {
break;
}
message.timezone = reader.string();
continue;
}
case 6: {
if (tag !== 48) {
break;
}
message.prefer24HourTime = reader.bool();
continue;
}
case 7: {
if (tag !== 56) {
break;
}
message.locationRadiusMeters = reader.int32();
continue;
}
case 8: {
if (tag !== 64) {
break;
}
message.isInitialLoad = reader.bool();
continue;
}
case 9: {
if (tag !== 72) {
break;
}
message.browserPermissionGranted = reader.bool();
continue;
}
case 10: {
if (tag !== 80) {
break;
}
message.clientPermissionState = reader.int32();
continue;
}
case 11: {
if (tag !== 90) {
break;
}
message.locationOverrideToken = reader.string();
continue;
}
}
if ((tag & 7) === 4 || tag === 0) {
break;
}
reader.skip(tag & 7);
}
return message;
}
};
function createBaseClientInfo_KidsAppInfo() {
return {
contentSettings: void 0,
parentCurationMode: void 0,
categorySettings: void 0,
userEducationSettings: void 0
};
}
__name(createBaseClientInfo_KidsAppInfo, "createBaseClientInfo_KidsAppInfo");
var ClientInfo_KidsAppInfo = {
encode(message, writer = new BinaryWriter()) {
if (message.contentSettings !== void 0) {
ClientInfo_KidsAppInfo_KidsContentSettings.encode(message.contentSettings, writer.uint32(10).fork()).join();
}
if (message.parentCurationMode !== void 0) {
writer.uint32(16).int32(message.parentCurationMode);
}
if (message.categorySettings !== void 0) {
ClientInfo_KidsAppInfo_KidsCategorySettings.encode(message.categorySettings, writer.uint32(26).fork()).join();
}
if (message.userEducationSettings !== void 0) {
ClientInfo_KidsAppInfo_KidsUserEducationSettings.encode(message.userEducationSettings, writer.uint32(34).fork()).join();
}
return writer;
},
decode(input, length) {
const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
const end = length === void 0 ? reader.len : reader.pos + length;
const message = createBaseClientInfo_KidsAppInfo();
while (reader.pos < end) {
const tag = reader.uint32();
switch (tag >>> 3) {
case 1: {
if (tag !== 10) {
break;
}
message.contentSettings = ClientInfo_KidsAppInfo_KidsContentSettings.decode(reader, reader.uint32());
continue;
}
case 2: {
if (tag !== 16) {
break;
}
message.parentCurationMode = reader.int32();
continue;
}
case 3: {
if (tag !== 26) {
break;
}
message.categorySettings = ClientInfo_KidsAppInfo_KidsCategorySettings.decode(reader, reader.uint32());
continue;
}
case 4: {
if (tag !== 34) {
break;
}
message.userEducationSettings = ClientInfo_KidsAppInfo_KidsUserEducationSettings.decode(reader, reader.uint32());
continue;
}
}
if ((tag & 7) === 4 || tag === 0) {
break;
}
reader.skip(tag & 7);
}
return message;
}
};
function createBaseClientInfo_KidsAppInfo_KidsContentSettings() {
return { kidsNoSearchMode: void 0, ageUpMode: void 0, contentDensity: void 0 };
}
__name(createBaseClientInfo_KidsAppInfo_KidsContentSettings, "createBaseClientInfo_KidsAppInfo_KidsContentSettings");
var ClientInfo_KidsAppInfo_KidsContentSettings = {
encode(message, writer = new BinaryWriter()) {
if (message.kidsNoSearchMode !== void 0) {
writer.uint32(8).int32(message.kidsNoSearchMode);
}
if (message.ageUpMode !== void 0) {
writer.uint32(16).int32(message.ageUpMode);
}
if (message.contentDensity !== void 0) {
writer.uint32(24).int32(message.contentDensity);
}
return writer;
},
decode(input, length) {
const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
const end = length === void 0 ? reader.len : reader.pos + length;
const message = createBaseClientInfo_KidsAppInfo_KidsContentSettings();
while (reader.pos < end) {
const tag = reader.uint32();
switch (tag >>> 3) {
case 1: {
if (tag !== 8) {
break;
}
message.kidsNoSearchMode = reader.int32();
continue;
}
case 2: {
if (tag !== 16) {
break;
}
message.ageUpMode = reader.int32();
continue;
}
case 3: {
if (tag !== 24) {
break;
}
message.contentDensity = reader.int32();
continue;
}
}
if ((tag & 7) === 4 || tag === 0) {
break;
}
reader.skip(tag & 7);
}
return message;
}
};
function createBaseClientInfo_KidsAppInfo_KidsCategorySettings() {
return { enabledCategories: void 0 };
}
__name(createBaseClientInfo_KidsAppInfo_KidsCategorySettings, "createBaseClientInfo_KidsAppInfo_KidsCategorySettings");
var ClientInfo_KidsAppInfo_KidsCategorySettings = {
encode(message, writer = new BinaryWriter()) {
if (message.enabledCategories !== void 0) {
writer.uint32(10).string(message.enabledCategories);
}
return writer;
},
decode(input, length) {
const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
const end = length === void 0 ? reader.len : reader.pos + length;
const message = createBaseClientInfo_KidsAppInfo_KidsCategorySettings();
while (reader.pos < end) {
const tag = reader.uint32();
switch (tag >>> 3) {
case 1: {
if (tag !== 10) {
break;
}
message.enabledCategories = reader.string();
continue;
}
}
if ((tag & 7) === 4 || tag === 0) {
break;
}
reader.skip(tag & 7);
}
return message;
}
};
function createBaseClientInfo_KidsAppInfo_KidsUserEducationSettings() {
return {
hasSeenHomeChipBarUserEducation: void 0,
hasSeenHomePivotBarUserEducation: void 0,
hasSeenParentMuirUserEducation: void 0
};
}
__name(createBaseClientInfo_KidsAppInfo_KidsUserEducationSettings, "createBaseClientInfo_KidsAppInfo_KidsUserEducationSettings");
var ClientInfo_KidsAppInfo_KidsUserEducationSettings = {
encode(message, writer = new BinaryWriter()) {
if (message.hasSeenHomeChipBarUserEducation !== void 0) {
writer.uint32(8).bool(message.hasSeenHomeChipBarUserEducation);
}
if (message.hasSeenHomePivotBarUserEducation !== void 0) {
writer.uint32(16).bool(message.hasSeenHomePivotBarUserEducation);
}
if (message.hasSeenParentMuirUserEducation !== void 0) {
writer.uint32(24).bool(message.hasSeenParentMuirUserEducation);
}
return writer;
},
decode(input, length) {
const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
const end = length === void 0 ? reader.len : reader.pos + length;
const message = createBaseClientInfo_KidsAppInfo_KidsUserEducationSettings();
while (reader.pos < end) {
const tag = reader.uint32();
switch (tag >>> 3) {
case 1: {
if (tag !== 8) {
break;
}
message.hasSeenHomeChipBarUserEducation = reader.bool();
continue;
}
case 2: {
if (tag !== 16) {
break;
}
message.hasSeenHomePivotBarUserEducation = reader.bool();
continue;
}
case 3: {
if (tag !== 24) {
break;
}
message.hasSeenParentMuirUserEducation = reader.bool();
continue;
}
}
if ((tag & 7) === 4 || tag === 0) {
break;
}
reader.skip(tag & 7);
}
return message;
}
};
function createBaseClientInfo_MusicAppInfo() {
return {
playBackMode: void 0,
musicLocationMasterSwitch: void 0,
musicActivityMasterSwitch: void 0,
offlineMixtapeEnabled: void 0,
autoOfflineEnabled: void 0,
iosBackgroundRefreshStatus: void 0,
smartDownloadsSongLimit: void 0,
transitionedFromMixtapeToSmartDownloads: void 0,
pwaInstallabilityStatus: void 0,
webDisplayMode: void 0,
musicTier: void 0,
storeDigitalGoodsApiSupportStatus: void 0,
smartDownloadsTimeSinceLastOptOutSec: void 0
};
}
__name(createBaseClientInfo_MusicAppInfo, "createBaseClientInfo_MusicAppInfo");
var ClientInfo_MusicAppInfo = {
encode(message, writer = new BinaryWriter()) {
if (message.playBackMode !== void 0) {
writer.uint32(8).int32(message.playBackMode);
}
if (message.musicLocationMasterSwitch !== void 0) {
writer.uint32(16).int32(message.musicLocationMasterSwitch);
}
if (message.musicActivityMasterSwitch !== void 0) {
writer.uint32(24).int32(message.musicActivityMasterSwitch);
}
if (message.offlineMixtapeEnabled !== void 0) {
writer.uint32(32).bool(message.offlineMixtapeEnabled);
}
if (message.autoOfflineEnabled !== void 0) {
writer.uint32(40).bool(message.autoOfflineEnabled);
}
if (message.iosBackgroundRefreshStatus !== void 0) {
writer.uint32(48).int32(message.iosBackgroundRefreshStatus);
}
if (message.smartDownloadsSongLimit !== void 0) {
writer.uint32(56).int32(message.smartDownloadsSongLimit);
}
if (message.transitionedFromMixtapeToSmartDownloads !== void 0) {
writer.uint32(64).bool(message.transitionedFromMixtapeToSmartDownloads);
}
if (message.pwaInstallabilityStatus !== void 0) {
writer.uint32(72).int32(message.pwaInstallabilityStatus);
}
if (message.webDisplayMode !== void 0) {
writer.uint32(80).int32(message.webDisplayMode);
}
if (message.musicTier !== void 0) {
writer.uint32(88).int32(message.musicTier);
}
if (message.storeDigitalGoodsApiSupportStatus !== void 0) {
writer.uint32(96).int32(message.storeDigitalGoodsApiSupportStatus);
}
if (message.smartDownloadsTimeSinceLastOptOutSec !== void 0) {
writer.uint32(104).int64(message.smartDownloadsTimeSinceLastOptOutSec);
}
return writer;
},
decode(input, length) {
const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
const end = length === void 0 ? reader.len : reader.pos + length;
const message = createBaseClientInfo_MusicAppInfo();
while (reader.pos < end) {
const tag = reader.uint32();
switch (tag >>> 3) {
case 1: {
if (tag !== 8) {
break;
}
message.playBackMode = reader.int32();
continue;
}
case 2: {
if (tag !== 16) {
break;
}
message.musicLocationMasterSwitch = reader.int32();
continue;
}
case 3: {
if (tag !== 24) {
break;
}
message.musicActivityMasterSwitch = reader.int32();
continue;
}
case 4: {
if (tag !== 32) {
break;
}
message.offlineMixtapeEnabled = reader.bool();
continue;
}
case 5: {
if (tag !== 40) {
break;
}
message.autoOfflineEnabled = reader.bool();
continue;
}
case 6: {
if (tag !== 48) {
break;
}
message.iosBackgroundRefreshStatus = reader.int32();
continue;
}
case 7: {
if (tag !== 56) {
break;
}
message.smartDownloadsSongLimit = reader.int32();
continue;
}
case 8: {
if (tag !== 64) {
break;
}
message.transitionedFromMixtapeToSmartDownloads = reader.bool();
continue;
}
case 9: {
if (tag !== 72) {
break;
}
message.pwaInstallabilityStatus = reader.int32();
continue;
}
case 10: {
if (tag !== 80) {
break;
}
message.webDisplayMode = reader.int32();
continue;
}
case 11: {
if (tag !== 88) {
break;
}
message.musicTier = reader.int32();
continue;
}
case 12: {
if (tag !== 96) {
break;
}
message.storeDigitalGoodsApiSupportStatus = reader.int32();
continue;
}
case 13: {
if (tag !== 104) {
break;
}
message.smartDownloadsTimeSinceLastOptOutSec = longToNumber(reader.int64());
continue;
}
}
if ((tag & 7) === 4 || tag === 0) {
break;
}
reader.skip(tag & 7);
}
return message;
}
};
function createBaseClientInfo_TvAppInfo() {
return {
mdxImpactedSessionsServerEvents: void 0,
enablePrivacyFilter: void 0,
zylonLeftNav: void 0,
certificationScope: void 0,
livingRoomPoTokenId: void 0,
jsEngineString: void 0,
voiceCapability: void 0,
systemIntegrator: void 0,
androidBuildFingerprint: void 0,
cobaltAppVersion: void 0,
cobaltStarboardVersion: void 0,
useStartPlaybackPreviewCommand: void 0,
shouldShowPersistentSigninOnHome: void 0,
androidPlayServicesVersion: void 0
};
}
__name(createBaseClientInfo_TvAppInfo, "createBaseClientInfo_TvAppInfo");
var ClientInfo_TvAppInfo = {
encode(message, writer = new BinaryWriter()) {
if (message.mdxImpactedSessionsServerEvents !== void 0) {
writer.uint32(26).string(message.mdxImpactedSessionsServerEvents);
}
if (message.enablePrivacyFilter !== void 0) {
writer.uint32(48).bool(message.enablePrivacyFilter);
}
if (message.zylonLeftNav !== void 0) {
writer.uint32(56).bool(message.zylonLeftNav);
}
if (message.certificationScope !== void 0) {
writer.uint32(74).string(message.certificationScope);
}
if (message.livingRoomPoTokenId !== void 0) {
writer.uint32(82).string(message.livingRoomPoTokenId);
}
if (message.jsEngineString !== void 0) {
writer.uint32(98).string(message.jsEngineString);
}
if (message.voiceCapability !== void 0) {
ClientInfo_TvAppInfo_VoiceCapability.encode(message.voiceCapability, writer.uint32(106).fork()).join();
}
if (message.systemIntegrator !== void 0) {
writer.uint32(114).string(message.systemIntegrator);
}
if (message.androidBuildFingerprint !== void 0) {
writer.uint32(146).string(message.androidBuildFingerprint);
}
if (message.cobaltAppVersion !== void 0) {
writer.uint32(154).string(message.cobaltAppVersion);
}
if (message.cobaltStarboardVersion !== void 0) {
writer.uint32(162).string(message.cobaltStarboardVersion);
}
if (message.useStartPlaybackPreviewCommand !== void 0) {
writer.uint32(176).bool(message.useStartPlaybackPreviewCommand);
}
if (message.shouldShowPersistentSigninOnHome !== void 0) {
writer.uint32(184).bool(message.shouldShowPersistentSigninOnHome);
}
if (message.androidPlayServicesVersion !== void 0) {
writer.uint32(194).string(message.androidPlayServicesVersion);
}
return writer;
},
decode(input, length) {
const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
const end = length === void 0 ? reader.len : reader.pos + length;
const message = createBaseClientInfo_TvAppInfo();
while (reader.pos < end) {
const tag = reader.uint32();
switch (tag >>> 3) {
case 3: {
if (tag !== 26) {
break;
}
message.mdxImpactedSessionsServerEvents = reader.string();
continue;
}
case 6: {
if (tag !== 48) {
break;
}
message.enablePrivacyFilter = reader.bool();
continue;
}
case 7: {
if (tag !== 56) {
break;
}
message.zylonLeftNav = reader.bool();
continue;
}
case 9: {
if (tag !== 74) {
break;
}
message.certificationScope = reader.string();
continue;
}
case 10: {
if (tag !== 82) {
break;
}
message.livingRoomPoTokenId = reader.string();
continue;
}
case 12: {
if (tag !== 98) {
break;
}
message.jsEngineString = reader.string();
continue;
}
case 13: {
if (tag !== 106) {
break;
}
message.voiceCapability = ClientInfo_TvAppInfo_VoiceCapability.decode(reader, reader.uint32());
continue;
}
case 14: {
if (tag !== 114) {
break;
}
message.systemIntegrator = reader.string();
continue;
}
case 18: {
if (tag !== 146) {
break;
}
message.androidBuildFingerprint = reader.string();
continue;
}
case 19: {
if (tag !== 154) {
break;
}
message.cobaltAppVersion = reader.string();
continue;
}
case 20: {
if (tag !== 162) {
break;
}
message.cobaltStarboardVersion = reader.string();
continue;
}
case 22: {
if (tag !== 176) {
break;
}
message.useStartPlaybackPreviewCommand = reader.bool();
continue;
}
case 23: {
if (tag !== 184) {
break;
}
message.shouldShowPersistentSigninOnHome = reader.bool();
continue;
}
case 24: {
if (tag !== 194) {
break;
}
message.androidPlayServicesVersion = reader.string();
continue;
}
}
if ((tag & 7) === 4 || tag === 0) {
break;
}
reader.skip(tag & 7);
}
return message;
}
};
function createBaseClientInfo_TvAppInfo_VoiceCapability() {
return { hasSoftMicSupport: void 0, hasHardMicSupport: void 0 };
}
__name(createBaseClientInfo_TvAppInfo_VoiceCapability, "createBaseClientInfo_TvAppInfo_VoiceCapability");
var ClientInfo_TvAppInfo_VoiceCapability = {
encode(message, writer = new BinaryWriter()) {
if (message.hasSoftMicSupport !== void 0) {
writer.uint32(8).bool(message.hasSoftMicSupport);
}
if (message.hasHardMicSupport !== void 0) {
writer.uint32(16).bool(message.hasHardMicSupport);
}
return writer;
},
decode(input, length) {
const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
const end = length === void 0 ? reader.len : reader.pos + length;
const message = createBaseClientInfo_TvAppInfo_VoiceCapability();
while (reader.pos < end) {
const tag = reader.uint32();
switch (tag >>> 3) {
case 1: {
if (tag !== 8) {
break;
}
message.hasSoftMicSupport = reader.bool();
continue;
}
case 2: {
if (tag !== 16) {
break;
}
message.hasHardMicSupport = reader.bool();
continue;
}
}
if ((tag & 7) === 4 || tag === 0) {
break;
}
reader.skip(tag & 7);
}
return message;
}
};
function createBaseClientInfo_UnpluggedAppInfo() {
return { enableFilterMode: void 0, iosNotificationPermission: void 0, forceEnableEpg3: void 0 };
}
__name(createBaseClientInfo_UnpluggedAppInfo, "createBaseClientInfo_UnpluggedAppInfo");
var ClientInfo_UnpluggedAppInfo = {
encode(message, writer = new BinaryWriter()) {
if (message.enableFilterMode !== void 0) {
writer.uint32(16).bool(message.enableFilterMode);
}
if (message.iosNotificationPermission !== void 0) {
writer.uint32(24).bool(message.iosNotificationPermission);
}
if (message.forceEnableEpg3 !== void 0) {
writer.uint32(56).bool(message.forceEnableEpg3);
}
return writer;
},
decode(input, length) {
const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
const end = length === void 0 ? reader.len : reader.pos + length;
const message = createBaseClientInfo_UnpluggedAppInfo();
while (reader.pos < end) {
const tag = reader.uint32();
switch (tag >>> 3) {
case 2: {
if (tag !== 16) {
break;
}
message.enableFilterMode = reader.bool();
continue;
}
case 3: {
if (tag !== 24) {
break;
}
message.iosNotificationPermission = reader.bool();
continue;
}
case 7: {
if (tag !== 56) {
break;
}
message.forceEnableEpg3 = reader.bool();
continue;
}
}
if ((tag & 7) === 4 || tag === 0) {
break;
}
reader.skip(tag & 7);
}
return message;
}
};
function createBaseClientInfo_LocationInfo() {
return {
locationInfoStatus: void 0,
ulrStatus: void 0,
latitudeE7: void 0,
longitudeE7: void 0,
horizontalAccuracyMeters: void 0,
locationFreshnessMs: void 0,
locationPermissionAuthorizationStatus: void 0,
locationOverrideToken: void 0,
forceLocationPlayabilityTokenRefresh: void 0
};
}
__name(createBaseClientInfo_LocationInfo, "createBaseClientInfo_LocationInfo");
var ClientInfo_LocationInfo = {
encode(message, writer = new BinaryWriter()) {
if (message.locationInfoStatus !== void 0) {
writer.uint32(8).int32(message.locationInfoStatus);
}
if (message.ulrStatus !== void 0) {
ClientInfo_LocationInfo_UrlStatus.encode(message.ulrStatus, writer.uint32(18).fork()).join();
}
if (message.latitudeE7 !== void 0) {
writer.uint32(26).string(message.latitudeE7);
}
if (message.longitudeE7 !== void 0) {
writer.uint32(34).string(message.longitudeE7);
}
if (message.horizontalAccuracyMeters !== void 0) {
writer.uint32(42).string(message.horizontalAccuracyMeters);
}
if (message.locationFreshnessMs !== void 0) {
writer.uint32(50).string(message.locationFreshnessMs);
}
if (message.locationPermissionAuthorizationStatus !== void 0) {
writer.uint32(56).int32(message.locationPermissionAuthorizationStatus);
}
if (message.locationOverrideToken !== void 0) {
writer.uint32(66).string(message.locationOverrideToken);
}
if (message.forceLocationPlayabilityTokenRefresh !== void 0) {
writer.uint32(72).bool(message.forceLocationPlayabilityTokenRefresh);
}
return writer;
},
decode(input, length) {
const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
const end = length === void 0 ? reader.len : reader.pos + length;
const message = createBaseClientInfo_LocationInfo();
while (reader.pos < end) {
const tag = reader.uint32();
switch (tag >>> 3) {
case 1: {
if (tag !== 8) {
break;
}
message.locationInfoStatus = reader.int32();
continue;
}
case 2: {
if (tag !== 18) {
break;
}
message.ulrStatus = ClientInfo_LocationInfo_UrlStatus.decode(reader, reader.uint32());
continue;
}
case 3: {
if (tag !== 26) {
break;
}
message.latitudeE7 = reader.string();
continue;
}
case 4: {
if (tag !== 34) {
break;
}
message.longitudeE7 = reader.string();
continue;
}
case 5: {
if (tag !== 42) {
break;
}
message.horizontalAccuracyMeters = reader.string();
continue;
}
case 6: {
if (tag !== 50) {
break;
}
message.locationFreshnessMs = reader.string();
continue;
}
case 7: {
if (tag !== 56) {
break;
}
message.locationPermissionAuthorizationStatus = reader.int32();
continue;
}
case 8: {
if (tag !== 66) {
break;
}
message.locationOverrideToken = reader.string();
continue;
}
case 9: {
if (tag !== 72) {
break;
}
message.forceLocationPlayabilityTokenRefresh = reader.bool();
continue;
}
}
if ((tag & 7) === 4 || tag === 0) {
break;
}
reader.skip(tag & 7);
}
return message;
}
};
function createBaseClientInfo_LocationInfo_UrlStatus() {
return {
reportingEnabledSetting: void 0,
historyEnabledSetting: void 0,
isAllowed: void 0,
isActive: void 0
};
}
__name(createBaseClientInfo_LocationInfo_UrlStatus, "createBaseClientInfo_LocationInfo_UrlStatus");
var ClientInfo_LocationInfo_UrlStatus = {
encode(message, writer = new BinaryWriter()) {
if (message.reportingEnabledSetting !== void 0) {
writer.uint32(8).int32(message.reportingEnabledSetting);
}
if (message.historyEnabledSetting !== void 0) {
writer.uint32(16).int32(message.historyEnabledSetting);
}
if (message.isAllowed !== void 0) {
writer.uint32(24).bool(message.isAllowed);
}
if (message.isActive !== void 0) {
writer.uint32(32).bool(message.isActive);
}
return writer;
},
decode(input, length) {
const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
const end = length === void 0 ? reader.len : reader.pos + length;
const message = createBaseClientInfo_LocationInfo_UrlStatus();
while (reader.pos < end) {
const tag = reader.uint32();
switch (tag >>> 3) {
case 1: {
if (tag !== 8) {
break;
}
message.reportingEnabledSetting = reader.int32();
continue;
}
case 2: {
if (tag !== 16) {
break;
}
message.historyEnabledSetting = reader.int32();
continue;
}
case 3: {
if (tag !== 24) {
break;
}
message.isAllowed = reader.bool();
continue;
}
case 4: {
if (tag !== 32) {
break;
}
message.isActive = reader.bool();
continue;
}
}
if ((tag & 7) === 4 || tag === 0) {
break;
}
reader.skip(tag & 7);
}
return message;
}
};
function createBaseClientInfo_HomeGroupInfo() {
return { isPartOfGroup: void 0, isGroup: void 0 };
}
__name(createBaseClientInfo_HomeGroupInfo, "createBaseClientInfo_HomeGroupInfo");
var ClientInfo_HomeGroupInfo = {
encode(message, writer = new BinaryWriter()) {
if (message.isPartOfGroup !== void 0) {
writer.uint32(8).bool(message.isPartOfGroup);
}
if (message.isGroup !== void 0) {
writer.uint32(24).bool(message.isGroup);
}
return writer;
},
decode(input, length) {
const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
const end = length === void 0 ? reader.len : reader.pos + length;
const message = createBaseClientInfo_HomeGroupInfo();
while (reader.pos < end) {
const tag = reader.uint32();
switch (tag >>> 3) {
case 1: {
if (tag !== 8) {
break;
}
message.isPartOfGroup = reader.bool();
continue;
}
case 3: {
if (tag !== 24) {
break;
}
message.isGroup = reader.bool();
continue;
}
}
if ((tag & 7) === 4 || tag === 0) {
break;
}
reader.skip(tag & 7);
}
return message;
}
};
function longToNumber(int64) {
const num = globalThis.Number(int64.toString());
if (num > globalThis.Number.MAX_SAFE_INTEGER) {
throw new globalThis.Error("Value is larger than Number.MAX_SAFE_INTEGER");
}
if (num < globalThis.Number.MIN_SAFE_INTEGER) {
throw new globalThis.Error("Value is smaller than Number.MIN_SAFE_INTEGER");
}
return num;
}
__name(longToNumber, "longToNumber");
// dist/protos/generated/youtube/api/pfiinnertube/attestation_response_data.js
function createBaseAttestationResponseData() {
return {
challenge: void 0,
webResponse: void 0,
androidResponse: void 0,
iosResponse: void 0,
error: void 0,
adblockReporting: void 0
};
}
__name(createBaseAttestationResponseData, "createBaseAttestationResponseData");
var AttestationResponseData = {
encode(message, writer = new BinaryWriter()) {
if (message.challenge !== void 0) {
writer.uint32(10).string(message.challenge);
}
if (message.webResponse !== void 0) {
writer.uint32(18).string(message.webResponse);
}
if (message.androidResponse !== void 0) {
writer.uint32(26).string(message.androidResponse);
}
if (message.iosResponse !== void 0) {
writer.uint32(34).bytes(message.iosResponse);
}
if (message.error !== void 0) {
writer.uint32(40).int32(message.error);
}
if (message.adblockReporting !== void 0) {
AttestationResponseData_AdblockReporting.encode(message.adblockReporting, writer.uint32(50).fork()).join();
}
return writer;
},
decode(input, length) {
const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
const end = length === void 0 ? reader.len : reader.pos + length;
const message = createBaseAttestationResponseData();
while (reader.pos < end) {
const tag = reader.uint32();
switch (tag >>> 3) {
case 1: {
if (tag !== 10) {
break;
}
message.challenge = reader.string();
continue;
}
case 2: {
if (tag !== 18) {
break;
}
message.webResponse = reader.string();
continue;
}
case 3: {
if (tag !== 26) {
break;
}
message.androidResponse = reader.string();
continue;
}
case 4: {
if (tag !== 34) {
break;
}
message.iosResponse = reader.bytes();
continue;
}
case 5: {
if (tag !== 40) {
break;
}
message.error = reader.int32();
continue;
}
case 6: {
if (tag !== 50) {
break;
}
message.adblockReporting = AttestationResponseData_AdblockReporting.decode(reader, reader.uint32());
continue;
}
}
if ((tag & 7) === 4 || tag === 0) {
break;
}
reader.skip(tag & 7);
}
return message;
}
};
function createBaseAttestationResponseData_AdblockReporting() {
return { reportingStatus: void 0, broadSpectrumDetectionResult: void 0 };
}
__name(createBaseAttestationResponseData_AdblockReporting, "createBaseAttestationResponseData_AdblockReporting");
var AttestationResponseData_AdblockReporting = {
encode(message, writer = new BinaryWriter()) {
if (message.reportingStatus !== void 0) {
writer.uint32(8).uint64(message.reportingStatus);
}
if (message.broadSpectrumDetectionResult !== void 0) {
writer.uint32(16).uint64(message.broadSpectrumDetectionResult);
}
return writer;
},
decode(input, length) {
const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
const end = length === void 0 ? reader.len : reader.pos + length;
const message = createBaseAttestationResponseData_AdblockReporting();
while (reader.pos < end) {
const tag = reader.uint32();
switch (tag >>> 3) {
case 1: {
if (tag !== 8) {
break;
}
message.reportingStatus = longToNumber2(reader.uint64());
continue;
}
case 2: {
if (tag !== 16) {
break;
}
message.broadSpectrumDetectionResult = longToNumber2(reader.uint64());
continue;
}
}
if ((tag & 7) === 4 || tag === 0) {
break;
}
reader.skip(tag & 7);
}
return message;
}
};
function longToNumber2(int64) {
const num = globalThis.Number(int64.toString());
if (num > globalThis.Number.MAX_SAFE_INTEGER) {
throw new globalThis.Error("Value is larger than Number.MAX_SAFE_INTEGER");
}
if (num < globalThis.Number.MIN_SAFE_INTEGER) {
throw new globalThis.Error("Value is smaller than Number.MIN_SAFE_INTEGER");
}
return num;
}
__name(longToNumber2, "longToNumber");
// dist/protos/generated/youtube/api/pfiinnertube/request_info.js
function createBaseRequestInfo() {
return {
thirdPartyDigest: void 0,
useSsl: void 0,
returnErrorDetail: void 0,
ifNoneMatch: void 0,
returnLogEntry: void 0,
isPrefetch: void 0,
internalExperimentFlags: [],
returnDebugData: void 0,
innertubez: void 0,
traceProto: void 0,
returnLogEntryJson: void 0,
sherlogUsername: void 0,
reauthRequestInfo: void 0,
sessionInfo: void 0,
returnLogEntryProto: void 0,
externalPrequestContext: void 0,
attestationResponseData: void 0,
eats: void 0,
requestQos: void 0
};
}
__name(createBaseRequestInfo, "createBaseRequestInfo");
var RequestInfo = {
encode(message, writer = new BinaryWriter()) {
if (message.thirdPartyDigest !== void 0) {
writer.uint32(50).string(message.thirdPartyDigest);
}
if (message.useSsl !== void 0) {
writer.uint32(56).bool(message.useSsl);
}
if (message.returnErrorDetail !== void 0) {
writer.uint32(72).bool(message.returnErrorDetail);
}
if (message.ifNoneMatch !== void 0) {
writer.uint32(98).string(message.ifNoneMatch);
}
if (message.returnLogEntry !== void 0) {
writer.uint32(104).bool(message.returnLogEntry);
}
if (message.isPrefetch !== void 0) {
writer.uint32(112).bool(message.isPrefetch);
}
for (const v of message.internalExperimentFlags) {
KeyValuePair.encode(v, writer.uint32(122).fork()).join();
}
if (message.returnDebugData !== void 0) {
writer.uint32(128).bool(message.returnDebugData);
}
if (message.innertubez !== void 0) {
writer.uint32(146).string(message.innertubez);
}
if (message.traceProto !== void 0) {
writer.uint32(184).bool(message.traceProto);
}
if (message.returnLogEntryJson !== void 0) {
writer.uint32(192).bool(message.returnLogEntryJson);
}
if (message.sherlogUsername !== void 0) {
writer.uint32(202).string(message.sherlogUsername);
}
if (message.reauthRequestInfo !== void 0) {
RequestInfo_ReauthRequestInfo.encode(message.reauthRequestInfo, writer.uint32(234).fork()).join();
}
if (message.sessionInfo !== void 0) {
RequestInfo_SessionInfo.encode(message.sessionInfo, writer.uint32(242).fork()).join();
}
if (message.returnLogEntryProto !== void 0) {
writer.uint32(248).bool(message.returnLogEntryProto);
}
if (message.externalPrequestContext !== void 0) {
writer.uint32(258).string(message.externalPrequestContext);
}
if (message.attestationResponseData !== void 0) {
AttestationResponseData.encode(message.attestationResponseData, writer.uint32(274).fork()).join();
}
if (message.eats !== void 0) {
writer.uint32(282).bytes(message.eats);
}
if (message.requestQos !== void 0) {
RequestInfo_RequestQoS.encode(message.requestQos, writer.uint32(290).fork()).join();
}
return writer;
},
decode(input, length) {
const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
const end = length === void 0 ? reader.len : reader.pos + length;
const message = createBaseRequestInfo();
while (reader.pos < end) {
const tag = reader.uint32();
switch (tag >>> 3) {
case 6: {
if (tag !== 50) {
break;
}
message.thirdPartyDigest = reader.string();
continue;
}
case 7: {
if (tag !== 56) {
break;
}
message.useSsl = reader.bool();
continue;
}
case 9: {
if (tag !== 72) {
break;
}
message.returnErrorDetail = reader.bool();
continue;
}
case 12: {
if (tag !== 98) {
break;
}
message.ifNoneMatch = reader.string();
continue;
}
case 13: {
if (tag !== 104) {
break;
}
message.returnLogEntry = reader.bool();
continue;
}
case 14: {
if (tag !== 112) {
break;
}
message.isPrefetch = reader.bool();
continue;
}
case 15: {
if (tag !== 122) {
break;
}
message.internalExperimentFlags.push(KeyValuePair.decode(reader, reader.uint32()));
continue;
}
case 16: {
if (tag !== 128) {
break;
}
message.returnDebugData = reader.bool();
continue;
}
case 18: {
if (tag !== 146) {
break;
}
message.innertubez = reader.string();
continue;
}
case 23: {
if (tag !== 184) {
break;
}
message.traceProto = reader.bool();
continue;
}
case 24: {
if (tag !== 192) {
break;
}
message.returnLogEntryJson = reader.bool();
continue;
}
case 25: {
if (tag !== 202) {
break;
}
message.sherlogUsername = reader.string();
continue;
}
case 29: {
if (tag !== 234) {
break;
}
message.reauthRequestInfo = RequestInfo_ReauthRequestInfo.decode(reader, reader.uint32());
continue;
}
case 30: {
if (tag !== 242) {
break;
}
message.sessionInfo = RequestInfo_SessionInfo.decode(reader, reader.uint32());
continue;
}
case 31: {
if (tag !== 248) {
break;
}
message.returnLogEntryProto = reader.bool();
continue;
}
case 32: {
if (tag !== 258) {
break;
}
message.externalPrequestContext = reader.string();
continue;
}
case 34: {
if (tag !== 274) {
break;
}
message.attestationResponseData = AttestationResponseData.decode(reader, reader.uint32());
continue;
}
case 35: {
if (tag !== 282) {
break;
}
message.eats = reader.bytes();
continue;
}
case 36: {
if (tag !== 290) {
break;
}
message.requestQos = RequestInfo_RequestQoS.decode(reader, reader.uint32());
continue;
}
}
if ((tag & 7) === 4 || tag === 0) {
break;
}
reader.skip(tag & 7);
}
return message;
}
};
function createBaseRequestInfo_RequestQoS() {
return { criticality: void 0 };
}
__name(createBaseRequestInfo_RequestQoS, "createBaseRequestInfo_RequestQoS");
var RequestInfo_RequestQoS = {
encode(message, writer = new BinaryWriter()) {
if (message.criticality !== void 0) {
writer.uint32(8).int32(message.criticality);
}
return writer;
},
decode(input, length) {
const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
const end = length === void 0 ? reader.len : reader.pos + length;
const message = createBaseRequestInfo_RequestQoS();
while (reader.pos < end) {
const tag = reader.uint32();
switch (tag >>> 3) {
case 1: {
if (tag !== 8) {
break;
}
message.criticality = reader.int32();
continue;
}
}
if ((tag & 7) === 4 || tag === 0) {
break;
}
reader.skip(tag & 7);
}
return message;
}
};
function createBaseRequestInfo_SessionInfo() {
return { token: void 0 };
}
__name(createBaseRequestInfo_SessionInfo, "createBaseRequestInfo_SessionInfo");
var RequestInfo_SessionInfo = {
encode(message, writer = new BinaryWriter()) {
if (message.token !== void 0) {
writer.uint32(10).string(message.token);
}
return writer;
},
decode(input, length) {
const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
const end = length === void 0 ? reader.len : reader.pos + length;
const message = createBaseRequestInfo_SessionInfo();
while (reader.pos < end) {
const tag = reader.uint32();
switch (tag >>> 3) {
case 1: {
if (tag !== 10) {
break;
}
message.token = reader.string();
continue;
}
}
if ((tag & 7) === 4 || tag === 0) {
break;
}
reader.skip(tag & 7);
}
return message;
}
};
function createBaseRequestInfo_ReauthRequestInfo() {
return { encodedReauthProofToken: void 0 };
}
__name(createBaseRequestInfo_ReauthRequestInfo, "createBaseRequestInfo_ReauthRequestInfo");
var RequestInfo_ReauthRequestInfo = {
encode(message, writer = new BinaryWriter()) {
if (message.encodedReauthProofToken !== void 0) {
writer.uint32(10).string(message.encodedReauthProofToken);
}
return writer;
},
decode(input, length) {
const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
const end = length === void 0 ? reader.len : reader.pos + length;
const message = createBaseRequestInfo_ReauthRequestInfo();
while (reader.pos < end) {
const tag = reader.uint32();
switch (tag >>> 3) {
case 1: {
if (tag !== 10) {
break;
}
message.encodedReauthProofToken = reader.string();
continue;
}
}
if ((tag & 7) === 4 || tag === 0) {
break;
}
reader.skip(tag & 7);
}
return message;
}
};
// dist/protos/generated/youtube/api/pfiinnertube/third_party_info.js
function createBaseThirdPartyInfo() {
return {
developerKey: void 0,
appName: void 0,
appPublisher: void 0,
embedUrl: void 0,
appVersion: void 0,
embeddedPlayerContext: void 0
};
}
__name(createBaseThirdPartyInfo, "createBaseThirdPartyInfo");
var ThirdPartyInfo = {
encode(message, writer = new BinaryWriter()) {
if (message.developerKey !== void 0) {
writer.uint32(10).string(message.developerKey);
}
if (message.appName !== void 0) {
writer.uint32(18).string(message.appName);
}
if (message.appPublisher !== void 0) {
writer.uint32(26).string(message.appPublisher);
}
if (message.embedUrl !== void 0) {
writer.uint32(34).string(message.embedUrl);
}
if (message.appVersion !== void 0) {
writer.uint32(50).string(message.appVersion);
}
if (message.embeddedPlayerContext !== void 0) {
ThirdPartyInfo_EmbeddedPlayerContext.encode(message.embeddedPlayerContext, writer.uint32(58).fork()).join();
}
return writer;
},
decode(input, length) {
const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
const end = length === void 0 ? reader.len : reader.pos + length;
const message = createBaseThirdPartyInfo();
while (reader.pos < end) {
const tag = reader.uint32();
switch (tag >>> 3) {
case 1: {
if (tag !== 10) {
break;
}
message.developerKey = reader.string();
continue;
}
case 2: {
if (tag !== 18) {
break;
}
message.appName = reader.string();
continue;
}
case 3: {
if (tag !== 26) {
break;
}
message.appPublisher = reader.string();
continue;
}
case 4: {
if (tag !== 34) {
break;
}
message.embedUrl = reader.string();
continue;
}
case 6: {
if (tag !== 50) {
break;
}
message.appVersion = reader.string();
continue;
}
case 7: {
if (tag !== 58) {
break;
}
message.embeddedPlayerContext = ThirdPartyInfo_EmbeddedPlayerContext.decode(reader, reader.uint32());
continue;
}
}
if ((tag & 7) === 4 || tag === 0) {
break;
}
reader.skip(tag & 7);
}
return message;
}
};
function createBaseThirdPartyInfo_EmbeddedPlayerContext() {
return { ancestorOrigins: void 0, embeddedPlayerEncryptedContext: void 0, ancestorOriginsSupported: void 0 };
}
__name(createBaseThirdPartyInfo_EmbeddedPlayerContext, "createBaseThirdPartyInfo_EmbeddedPlayerContext");
var ThirdPartyInfo_EmbeddedPlayerContext = {
encode(message, writer = new BinaryWriter()) {
if (message.ancestorOrigins !== void 0) {
writer.uint32(10).string(message.ancestorOrigins);
}
if (message.embeddedPlayerEncryptedContext !== void 0) {
writer.uint32(18).string(message.embeddedPlayerEncryptedContext);
}
if (message.ancestorOriginsSupported !== void 0) {
writer.uint32(24).bool(message.ancestorOriginsSupported);
}
return writer;
},
decode(input, length) {
const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
const end = length === void 0 ? reader.len : reader.pos + length;
const message = createBaseThirdPartyInfo_EmbeddedPlayerContext();
while (reader.pos < end) {
const tag = reader.uint32();
switch (tag >>> 3) {
case 1: {
if (tag !== 10) {
break;
}
message.ancestorOrigins = reader.string();
continue;
}
case 2: {
if (tag !== 18) {
break;
}
message.embeddedPlayerEncryptedContext = reader.string();
continue;
}
case 3: {
if (tag !== 24) {
break;
}
message.ancestorOriginsSupported = reader.bool();
continue;
}
}
if ((tag & 7) === 4 || tag === 0) {
break;
}
reader.skip(tag & 7);
}
return message;
}
};
// dist/protos/generated/youtube/api/pfiinnertube/user_info.js
function createBaseUserInfo() {
return {
onBehalfOfUser: void 0,
enableSafetyMode: void 0,
credentialTransferTokens: [],
delegatePurchases: void 0,
kidsParent: void 0,
isIncognito: void 0,
lockedSafetyMode: void 0,
delegationContext: void 0,
serializedDelegationContext: void 0
};
}
__name(createBaseUserInfo, "createBaseUserInfo");
var UserInfo = {
encode(message, writer = new BinaryWriter()) {
if (message.onBehalfOfUser !== void 0) {
writer.uint32(26).string(message.onBehalfOfUser);
}
if (message.enableSafetyMode !== void 0) {
writer.uint32(56).bool(message.enableSafetyMode);
}
for (const v of message.credentialTransferTokens) {
UserInfo_CredentialTransferToken.encode(v, writer.uint32(98).fork()).join();
}
if (message.delegatePurchases !== void 0) {
UserInfo_DelegatePurchases.encode(message.delegatePurchases, writer.uint32(106).fork()).join();
}
if (message.kidsParent !== void 0) {
UserInfo_KidsParent.encode(message.kidsParent, writer.uint32(114).fork()).join();
}
if (message.isIncognito !== void 0) {
writer.uint32(120).bool(message.isIncognito);
}
if (message.lockedSafetyMode !== void 0) {
writer.uint32(128).bool(message.lockedSafetyMode);
}
if (message.delegationContext !== void 0) {
UserInfo_DelegationContext.encode(message.delegationContext, writer.uint32(138).fork()).join();
}
if (message.serializedDelegationContext !== void 0) {
writer.uint32(146).string(message.serializedDelegationContext);
}
return writer;
},
decode(input, length) {
const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
const end = length === void 0 ? reader.len : reader.pos + length;
const message = createBaseUserInfo();
while (reader.pos < end) {
const tag = reader.uint32();
switch (tag >>> 3) {
case 3: {
if (tag !== 26) {
break;
}
message.onBehalfOfUser = reader.string();
continue;
}
case 7: {
if (tag !== 56) {
break;
}
message.enableSafetyMode = reader.bool();
continue;
}
case 12: {
if (tag !== 98) {
break;
}
message.credentialTransferTokens.push(UserInfo_CredentialTransferToken.decode(reader, reader.uint32()));
continue;
}
case 13: {
if (tag !== 106) {
break;
}
message.delegatePurchases = UserInfo_DelegatePurchases.decode(reader, reader.uint32());
continue;
}
case 14: {
if (tag !== 114) {
break;
}
message.kidsParent = UserInfo_KidsParent.decode(reader, reader.uint32());
continue;
}
case 15: {
if (tag !== 120) {
break;
}
message.isIncognito = reader.bool();
continue;
}
case 16: {
if (tag !== 128) {
break;
}
message.lockedSafetyMode = reader.bool();
continue;
}
case 17: {
if (tag !== 138) {
break;
}
message.delegationContext = UserInfo_DelegationContext.decode(reader, reader.uint32());
continue;
}
case 18: {
if (tag !== 146) {
break;
}
message.serializedDelegationContext = reader.string();
continue;
}
}
if ((tag & 7) === 4 || tag === 0) {
break;
}
reader.skip(tag & 7);
}
return message;
}
};
function createBaseUserInfo_KidsParent() {
return {};
}
__name(createBaseUserInfo_KidsParent, "createBaseUserInfo_KidsParent");
var UserInfo_KidsParent = {
encode(_, writer = new BinaryWriter()) {
return writer;
},
decode(input, length) {
const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
const end = length === void 0 ? reader.len : reader.pos + length;
const message = createBaseUserInfo_KidsParent();
while (reader.pos < end) {
const tag = reader.uint32();
switch (tag >>> 3) {
}
if ((tag & 7) === 4 || tag === 0) {
break;
}
reader.skip(tag & 7);
}
return message;
}
};
function createBaseUserInfo_DelegatePurchases() {
return {};
}
__name(createBaseUserInfo_DelegatePurchases, "createBaseUserInfo_DelegatePurchases");
var UserInfo_DelegatePurchases = {
encode(_, writer = new BinaryWriter()) {
return writer;
},
decode(input, length) {
const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
const end = length === void 0 ? reader.len : reader.pos + length;
const message = createBaseUserInfo_DelegatePurchases();
while (reader.pos < end) {
const tag = reader.uint32();
switch (tag >>> 3) {
}
if ((tag & 7) === 4 || tag === 0) {
break;
}
reader.skip(tag & 7);
}
return message;
}
};
function createBaseUserInfo_DelegationContext() {
return {};
}
__name(createBaseUserInfo_DelegationContext, "createBaseUserInfo_DelegationContext");
var UserInfo_DelegationContext = {
encode(_, writer = new BinaryWriter()) {
return writer;
},
decode(input, length) {
const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
const end = length === void 0 ? reader.len : reader.pos + length;
const message = createBaseUserInfo_DelegationContext();
while (reader.pos < end) {
const tag = reader.uint32();
switch (tag >>> 3) {
}
if ((tag & 7) === 4 || tag === 0) {
break;
}
reader.skip(tag & 7);
}
return message;
}
};
function createBaseUserInfo_CredentialTransferToken() {
return {};
}
__name(createBaseUserInfo_CredentialTransferToken, "createBaseUserInfo_CredentialTransferToken");
var UserInfo_CredentialTransferToken = {
encode(_, writer = new BinaryWriter()) {
return writer;
},
decode(input, length) {
const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
const end = length === void 0 ? reader.len : reader.pos + length;
const message = createBaseUserInfo_CredentialTransferToken();
while (reader.pos < end) {
const tag = reader.uint32();
switch (tag >>> 3) {
}
if ((tag & 7) === 4 || tag === 0) {
break;
}
reader.skip(tag & 7);
}
return message;
}
};
// dist/protos/generated/youtube/api/pfiinnertube/innertube_context.js
function createBaseInnerTubeContext() {
return {
client: void 0,
user: void 0,
capabilities: void 0,
request: void 0,
clickTracking: void 0,
thirdParty: void 0,
remoteClient: void 0,
adSignalsInfo: void 0,
experimentalData: void 0,
clientScreenNonce: void 0,
activePlayers: []
};
}
__name(createBaseInnerTubeContext, "createBaseInnerTubeContext");
var InnerTubeContext = {
encode(message, writer = new BinaryWriter()) {
if (message.client !== void 0) {
ClientInfo.encode(message.client, writer.uint32(10).fork()).join();
}
if (message.user !== void 0) {
UserInfo.encode(message.user, writer.uint32(26).fork()).join();
}
if (message.capabilities !== void 0) {
CapabilityInfo.encode(message.capabilities, writer.uint32(34).fork()).join();
}
if (message.request !== void 0) {
RequestInfo.encode(message.request, writer.uint32(42).fork()).join();
}
if (message.clickTracking !== void 0) {
InnerTubeContext_ClickTrackingInfo.encode(message.clickTracking, writer.uint32(50).fork()).join();
}
if (message.thirdParty !== void 0) {
ThirdPartyInfo.encode(message.thirdParty, writer.uint32(58).fork()).join();
}
if (message.remoteClient !== void 0) {
ClientInfo.encode(message.remoteClient, writer.uint32(66).fork()).join();
}
if (message.adSignalsInfo !== void 0) {
InnerTubeContext_AdSignalsInfo.encode(message.adSignalsInfo, writer.uint32(74).fork()).join();
}
if (message.experimentalData !== void 0) {
InnerTubeContext_ExperimentalData.encode(message.experimentalData, writer.uint32(82).fork()).join();
}
if (message.clientScreenNonce !== void 0) {
writer.uint32(90).string(message.clientScreenNonce);
}
for (const v of message.activePlayers) {
InnerTubeContext_ActivePlayerInfo.encode(v, writer.uint32(98).fork()).join();
}
return writer;
},
decode(input, length) {
const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
const end = length === void 0 ? reader.len : reader.pos + length;
const message = createBaseInnerTubeContext();
while (reader.pos < end) {
const tag = reader.uint32();
switch (tag >>> 3) {
case 1: {
if (tag !== 10) {
break;
}
message.client = ClientInfo.decode(reader, reader.uint32());
continue;
}
case 3: {
if (tag !== 26) {
break;
}
message.user = UserInfo.decode(reader, reader.uint32());
continue;
}
case 4: {
if (tag !== 34) {
break;
}
message.capabilities = CapabilityInfo.decode(reader, reader.uint32());
continue;
}
case 5: {
if (tag !== 42) {
break;
}
message.request = RequestInfo.decode(reader, reader.uint32());
continue;
}
case 6: {
if (tag !== 50) {
break;
}
message.clickTracking = InnerTubeContext_ClickTrackingInfo.decode(reader, reader.uint32());
continue;
}
case 7: {
if (tag !== 58) {
break;
}
message.thirdParty = ThirdPartyInfo.decode(reader, reader.uint32());
continue;
}
case 8: {
if (tag !== 66) {
break;
}
message.remoteClient = ClientInfo.decode(reader, reader.uint32());
continue;
}
case 9: {
if (tag !== 74) {
break;
}
message.adSignalsInfo = InnerTubeContext_AdSignalsInfo.decode(reader, reader.uint32());
continue;
}
case 10: {
if (tag !== 82) {
break;
}
message.experimentalData = InnerTubeContext_ExperimentalData.decode(reader, reader.uint32());
continue;
}
case 11: {
if (tag !== 90) {
break;
}
message.clientScreenNonce = reader.string();
continue;
}
case 12: {
if (tag !== 98) {
break;
}
message.activePlayers.push(InnerTubeContext_ActivePlayerInfo.decode(reader, reader.uint32()));
continue;
}
}
if ((tag & 7) === 4 || tag === 0) {
break;
}
reader.skip(tag & 7);
}
return message;
}
};
function createBaseInnerTubeContext_ExperimentalData() {
return { params: [] };
}
__name(createBaseInnerTubeContext_ExperimentalData, "createBaseInnerTubeContext_ExperimentalData");
var InnerTubeContext_ExperimentalData = {
encode(message, writer = new BinaryWriter()) {
for (const v of message.params) {
KeyValuePair.encode(v, writer.uint32(10).fork()).join();
}
return writer;
},
decode(input, length) {
const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
const end = length === void 0 ? reader.len : reader.pos + length;
const message = createBaseInnerTubeContext_ExperimentalData();
while (reader.pos < end) {
const tag = reader.uint32();
switch (tag >>> 3) {
case 1: {
if (tag !== 10) {
break;
}
message.params.push(KeyValuePair.decode(reader, reader.uint32()));
continue;
}
}
if ((tag & 7) === 4 || tag === 0) {
break;
}
reader.skip(tag & 7);
}
return message;
}
};
function createBaseInnerTubeContext_ActivePlayerInfo() {
return { playerContextParams: void 0 };
}
__name(createBaseInnerTubeContext_ActivePlayerInfo, "createBaseInnerTubeContext_ActivePlayerInfo");
var InnerTubeContext_ActivePlayerInfo = {
encode(message, writer = new BinaryWriter()) {
if (message.playerContextParams !== void 0) {
writer.uint32(10).bytes(message.playerContextParams);
}
return writer;
},
decode(input, length) {
const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
const end = length === void 0 ? reader.len : reader.pos + length;
const message = createBaseInnerTubeContext_ActivePlayerInfo();
while (reader.pos < end) {
const tag = reader.uint32();
switch (tag >>> 3) {
case 1: {
if (tag !== 10) {
break;
}
message.playerContextParams = reader.bytes();
continue;
}
}
if ((tag & 7) === 4 || tag === 0) {
break;
}
reader.skip(tag & 7);
}
return message;
}
};
function createBaseInnerTubeContext_ClickTrackingInfo() {
return { clickTrackingParams: void 0 };
}
__name(createBaseInnerTubeContext_ClickTrackingInfo, "createBaseInnerTubeContext_ClickTrackingInfo");
var InnerTubeContext_ClickTrackingInfo = {
encode(message, writer = new BinaryWriter()) {
if (message.clickTrackingParams !== void 0) {
writer.uint32(18).bytes(message.clickTrackingParams);
}
return writer;
},
decode(input, length) {
const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
const end = length === void 0 ? reader.len : reader.pos + length;
const message = createBaseInnerTubeContext_ClickTrackingInfo();
while (reader.pos < end) {
const tag = reader.uint32();
switch (tag >>> 3) {
case 2: {
if (tag !== 18) {
break;
}
message.clickTrackingParams = reader.bytes();
continue;
}
}
if ((tag & 7) === 4 || tag === 0) {
break;
}
reader.skip(tag & 7);
}
return message;
}
};
function createBaseInnerTubeContext_AdSignalsInfo() {
return {
params: [],
bid: void 0,
mutsuId: void 0,
consentBumpState: void 0,
advertisingId: void 0,
limitAdTracking: void 0,
attributionOsSupportedVersion: void 0
};
}
__name(createBaseInnerTubeContext_AdSignalsInfo, "createBaseInnerTubeContext_AdSignalsInfo");
var InnerTubeContext_AdSignalsInfo = {
encode(message, writer = new BinaryWriter()) {
for (const v of message.params) {
KeyValuePair.encode(v, writer.uint32(10).fork()).join();
}
if (message.bid !== void 0) {
writer.uint32(18).string(message.bid);
}
if (message.mutsuId !== void 0) {
writer.uint32(26).string(message.mutsuId);
}
if (message.consentBumpState !== void 0) {
writer.uint32(34).string(message.consentBumpState);
}
if (message.advertisingId !== void 0) {
writer.uint32(58).string(message.advertisingId);
}
if (message.limitAdTracking !== void 0) {
writer.uint32(72).bool(message.limitAdTracking);
}
if (message.attributionOsSupportedVersion !== void 0) {
writer.uint32(82).string(message.attributionOsSupportedVersion);
}
return writer;
},
decode(input, length) {
const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
const end = length === void 0 ? reader.len : reader.pos + length;
const message = createBaseInnerTubeContext_AdSignalsInfo();
while (reader.pos < end) {
const tag = reader.uint32();
switch (tag >>> 3) {
case 1: {
if (tag !== 10) {
break;
}
message.params.push(KeyValuePair.decode(reader, reader.uint32()));
continue;
}
case 2: {
if (tag !== 18) {
break;
}
message.bid = reader.string();
continue;
}
case 3: {
if (tag !== 26) {
break;
}
message.mutsuId = reader.string();
continue;
}
case 4: {
if (tag !== 34) {
break;
}
message.consentBumpState = reader.string();
continue;
}
case 7: {
if (tag !== 58) {
break;
}
message.advertisingId = reader.string();
continue;
}
case 9: {
if (tag !== 72) {
break;
}
message.limitAdTracking = reader.bool();
continue;
}
case 10: {
if (tag !== 82) {
break;
}
message.attributionOsSupportedVersion = reader.string();
continue;
}
}
if ((tag & 7) === 4 || tag === 0) {
break;
}
reader.skip(tag & 7);
}
return message;
}
};
// dist/protos/generated/youtube/api/pfiinnertube/metadata_update_request.js
function createBaseMetadataUpdateRequest() {
return {
context: void 0,
encryptedVideoId: void 0,
title: void 0,
description: void 0,
privacy: void 0,
tags: void 0,
category: void 0,
license: void 0,
ageRestriction: void 0,
videoStill: void 0,
madeForKids: void 0,
racy: void 0
};
}
__name(createBaseMetadataUpdateRequest, "createBaseMetadataUpdateRequest");
var MetadataUpdateRequest = {
encode(message, writer = new BinaryWriter()) {
if (message.context !== void 0) {
InnerTubeContext.encode(message.context, writer.uint32(10).fork()).join();
}
if (message.encryptedVideoId !== void 0) {
writer.uint32(18).string(message.encryptedVideoId);
}
if (message.title !== void 0) {
MetadataUpdateRequest_MdeTitleUpdateRequest.encode(message.title, writer.uint32(26).fork()).join();
}
if (message.description !== void 0) {
MetadataUpdateRequest_MdeDescriptionUpdateRequest.encode(message.description, writer.uint32(34).fork()).join();
}
if (message.privacy !== void 0) {
MetadataUpdateRequest_MdePrivacyUpdateRequest.encode(message.privacy, writer.uint32(42).fork()).join();
}
if (message.tags !== void 0) {
MetadataUpdateRequest_MdeTagsUpdateRequest.encode(message.tags, writer.uint32(50).fork()).join();
}
if (message.category !== void 0) {
MetadataUpdateRequest_MdeCategoryUpdateRequest.encode(message.category, writer.uint32(58).fork()).join();
}
if (message.license !== void 0) {
MetadataUpdateRequest_MdeLicenseUpdateRequest.encode(message.license, writer.uint32(66).fork()).join();
}
if (message.ageRestriction !== void 0) {
MetadataUpdateRequest_MdeAgeRestrictionUpdateRequest.encode(message.ageRestriction, writer.uint32(90).fork()).join();
}
if (message.videoStill !== void 0) {
MetadataUpdateRequest_MdeVideoStillRequestParams.encode(message.videoStill, writer.uint32(162).fork()).join();
}
if (message.madeForKids !== void 0) {
MetadataUpdateRequest_MdeMadeForKidsUpdateRequestParams.encode(message.madeForKids, writer.uint32(546).fork()).join();
}
if (message.racy !== void 0) {
MetadataUpdateRequest_MdeRacyRequestParams.encode(message.racy, writer.uint32(554).fork()).join();
}
return writer;
},
decode(input, length) {
const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
const end = length === void 0 ? reader.len : reader.pos + length;
const message = createBaseMetadataUpdateRequest();
while (reader.pos < end) {
const tag = reader.uint32();
switch (tag >>> 3) {
case 1: {
if (tag !== 10) {
break;
}
message.context = InnerTubeContext.decode(reader, reader.uint32());
continue;
}
case 2: {
if (tag !== 18) {
break;
}
message.encryptedVideoId = reader.string();
continue;
}
case 3: {
if (tag !== 26) {
break;
}
message.title = MetadataUpdateRequest_MdeTitleUpdateRequest.decode(reader, reader.uint32());
continue;
}
case 4: {
if (tag !== 34) {
break;
}
message.description = MetadataUpdateRequest_MdeDescriptionUpdateRequest.decode(reader, reader.uint32());
continue;
}
case 5: {
if (tag !== 42) {
break;
}
message.privacy = MetadataUpdateRequest_MdePrivacyUpdateRequest.decode(reader, reader.uint32());
continue;
}
case 6: {
if (tag !== 50) {
break;
}
message.tags = MetadataUpdateRequest_MdeTagsUpdateRequest.decode(reader, reader.uint32());
continue;
}
case 7: {
if (tag !== 58) {
break;
}
message.category = MetadataUpdateRequest_MdeCategoryUpdateRequest.decode(reader, reader.uint32());
continue;
}
case 8: {
if (tag !== 66) {
break;
}
message.license = MetadataUpdateRequest_MdeLicenseUpdateRequest.decode(reader, reader.uint32());
continue;
}
case 11: {
if (tag !== 90) {
break;
}
message.ageRestriction = MetadataUpdateRequest_MdeAgeRestrictionUpdateRequest.decode(reader, reader.uint32());
continue;
}
case 20: {
if (tag !== 162) {
break;
}
message.videoStill = MetadataUpdateRequest_MdeVideoStillRequestParams.decode(reader, reader.uint32());
continue;
}
case 68: {
if (tag !== 546) {
break;
}
message.madeForKids = MetadataUpdateRequest_MdeMadeForKidsUpdateRequestParams.decode(reader, reader.uint32());
continue;
}
case 69: {
if (tag !== 554) {
break;
}
message.racy = MetadataUpdateRequest_MdeRacyRequestParams.decode(reader, reader.uint32());
continue;
}
}
if ((tag & 7) === 4 || tag === 0) {
break;
}
reader.skip(tag & 7);
}
return message;
}
};
function createBaseMetadataUpdateRequest_MdeTitleUpdateRequest() {
return { newTitle: void 0 };
}
__name(createBaseMetadataUpdateRequest_MdeTitleUpdateRequest, "createBaseMetadataUpdateRequest_MdeTitleUpdateRequest");
var MetadataUpdateRequest_MdeTitleUpdateRequest = {
encode(message, writer = new BinaryWriter()) {
if (message.newTitle !== void 0) {
writer.uint32(10).string(message.newTitle);
}
return writer;
},
decode(input, length) {
const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
const end = length === void 0 ? reader.len : reader.pos + length;
const message = createBaseMetadataUpdateRequest_MdeTitleUpdateRequest();
while (reader.pos < end) {
const tag = reader.uint32();
switch (tag >>> 3) {
case 1: {
if (tag !== 10) {
break;
}
message.newTitle = reader.string();
continue;
}
}
if ((tag & 7) === 4 || tag === 0) {
break;
}
reader.skip(tag & 7);
}
return message;
}
};
function createBaseMetadataUpdateRequest_MdeDescriptionUpdateRequest() {
return { newDescription: void 0 };
}
__name(createBaseMetadataUpdateRequest_MdeDescriptionUpdateRequest, "createBaseMetadataUpdateRequest_MdeDescriptionUpdateRequest");
var MetadataUpdateRequest_MdeDescriptionUpdateRequest = {
encode(message, writer = new BinaryWriter()) {
if (message.newDescription !== void 0) {
writer.uint32(10).string(message.newDescription);
}
return writer;
},
decode(input, length) {
const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
const end = length === void 0 ? reader.len : reader.pos + length;
const message = createBaseMetadataUpdateRequest_MdeDescriptionUpdateRequest();
while (reader.pos < end) {
const tag = reader.uint32();
switch (tag >>> 3) {
case 1: {
if (tag !== 10) {
break;
}
message.newDescription = reader.string();
continue;
}
}
if ((tag & 7) === 4 || tag === 0) {
break;
}
reader.skip(tag & 7);
}
return message;
}
};
function createBaseMetadataUpdateRequest_MdePrivacyUpdateRequest() {
return { newPrivacy: void 0, clearPrivacyDraft: void 0 };
}
__name(createBaseMetadataUpdateRequest_MdePrivacyUpdateRequest, "createBaseMetadataUpdateRequest_MdePrivacyUpdateRequest");
var MetadataUpdateRequest_MdePrivacyUpdateRequest = {
encode(message, writer = new BinaryWriter()) {
if (message.newPrivacy !== void 0) {
writer.uint32(8).int32(message.newPrivacy);
}
if (message.clearPrivacyDraft !== void 0) {
writer.uint32(16).bool(message.clearPrivacyDraft);
}
return writer;
},
decode(input, length) {
const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
const end = length === void 0 ? reader.len : reader.pos + length;
const message = createBaseMetadataUpdateRequest_MdePrivacyUpdateRequest();
while (reader.pos < end) {
const tag = reader.uint32();
switch (tag >>> 3) {
case 1: {
if (tag !== 8) {
break;
}
message.newPrivacy = reader.int32();
continue;
}
case 2: {
if (tag !== 16) {
break;
}
message.clearPrivacyDraft = reader.bool();
continue;
}
}
if ((tag & 7) === 4 || tag === 0) {
break;
}
reader.skip(tag & 7);
}
return message;
}
};
function createBaseMetadataUpdateRequest_MdeTagsUpdateRequest() {
return { newTags: [] };
}
__name(createBaseMetadataUpdateRequest_MdeTagsUpdateRequest, "createBaseMetadataUpdateRequest_MdeTagsUpdateRequest");
var MetadataUpdateRequest_MdeTagsUpdateRequest = {
encode(message, writer = new BinaryWriter()) {
for (const v of message.newTags) {
writer.uint32(10).string(v);
}
return writer;
},
decode(input, length) {
const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
const end = length === void 0 ? reader.len : reader.pos + length;
const message = createBaseMetadataUpdateRequest_MdeTagsUpdateRequest();
while (reader.pos < end) {
const tag = reader.uint32();
switch (tag >>> 3) {
case 1: {
if (tag !== 10) {
break;
}
message.newTags.push(reader.string());
continue;
}
}
if ((tag & 7) === 4 || tag === 0) {
break;
}
reader.skip(tag & 7);
}
return message;
}
};
function createBaseMetadataUpdateRequest_MdeCategoryUpdateRequest() {
return { newCategoryId: void 0 };
}
__name(createBaseMetadataUpdateRequest_MdeCategoryUpdateRequest, "createBaseMetadataUpdateRequest_MdeCategoryUpdateRequest");
var MetadataUpdateRequest_MdeCategoryUpdateRequest = {
encode(message, writer = new BinaryWriter()) {
if (message.newCategoryId !== void 0) {
writer.uint32(8).int32(message.newCategoryId);
}
return writer;
},
decode(input, length) {
const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
const end = length === void 0 ? reader.len : reader.pos + length;
const message = createBaseMetadataUpdateRequest_MdeCategoryUpdateRequest();
while (reader.pos < end) {
const tag = reader.uint32();
switch (tag >>> 3) {
case 1: {
if (tag !== 8) {
break;
}
message.newCategoryId = reader.int32();
continue;
}
}
if ((tag & 7) === 4 || tag === 0) {
break;
}
reader.skip(tag & 7);
}
return message;
}
};
function createBaseMetadataUpdateRequest_MdeLicenseUpdateRequest() {
return { newLicenseId: void 0 };
}
__name(createBaseMetadataUpdateRequest_MdeLicenseUpdateRequest, "createBaseMetadataUpdateRequest_MdeLicenseUpdateRequest");
var MetadataUpdateRequest_MdeLicenseUpdateRequest = {
encode(message, writer = new BinaryWriter()) {
if (message.newLicenseId !== void 0) {
writer.uint32(10).string(message.newLicenseId);
}
return writer;
},
decode(input, length) {
const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
const end = length === void 0 ? reader.len : reader.pos + length;
const message = createBaseMetadataUpdateRequest_MdeLicenseUpdateRequest();
while (reader.pos < end) {
const tag = reader.uint32();
switch (tag >>> 3) {
case 1: {
if (tag !== 10) {
break;
}
message.newLicenseId = reader.string();
continue;
}
}
if ((tag & 7) === 4 || tag === 0) {
break;
}
reader.skip(tag & 7);
}
return message;
}
};
function createBaseMetadataUpdateRequest_MdeMadeForKidsUpdateRequestParams() {
return { operation: void 0, newMfk: void 0 };
}
__name(createBaseMetadataUpdateRequest_MdeMadeForKidsUpdateRequestParams, "createBaseMetadataUpdateRequest_MdeMadeForKidsUpdateRequestParams");
var MetadataUpdateRequest_MdeMadeForKidsUpdateRequestParams = {
encode(message, writer = new BinaryWriter()) {
if (message.operation !== void 0) {
writer.uint32(8).int32(message.operation);
}
if (message.newMfk !== void 0) {
writer.uint32(16).int32(message.newMfk);
}
return writer;
},
decode(input, length) {
const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
const end = length === void 0 ? reader.len : reader.pos + length;
const message = createBaseMetadataUpdateRequest_MdeMadeForKidsUpdateRequestParams();
while (reader.pos < end) {
const tag = reader.uint32();
switch (tag >>> 3) {
case 1: {
if (tag !== 8) {
break;
}
message.operation = reader.int32();
continue;
}
case 2: {
if (tag !== 16) {
break;
}
message.newMfk = reader.int32();
continue;
}
}
if ((tag & 7) === 4 || tag === 0) {
break;
}
reader.skip(tag & 7);
}
return message;
}
};
function createBaseMetadataUpdateRequest_MdeRacyRequestParams() {
return { operation: void 0, newRacy: void 0 };
}
__name(createBaseMetadataUpdateRequest_MdeRacyRequestParams, "createBaseMetadataUpdateRequest_MdeRacyRequestParams");
var MetadataUpdateRequest_MdeRacyRequestParams = {
encode(message, writer = new BinaryWriter()) {
if (message.operation !== void 0) {
writer.uint32(8).int32(message.operation);
}
if (message.newRacy !== void 0) {
writer.uint32(16).int32(message.newRacy);
}
return writer;
},
decode(input, length) {
const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
const end = length === void 0 ? reader.len : reader.pos + length;
const message = createBaseMetadataUpdateRequest_MdeRacyRequestParams();
while (reader.pos < end) {
const tag = reader.uint32();
switch (tag >>> 3) {
case 1: {
if (tag !== 8) {
break;
}
message.operation = reader.int32();
continue;
}
case 2: {
if (tag !== 16) {
break;
}
message.newRacy = reader.int32();
continue;
}
}
if ((tag & 7) === 4 || tag === 0) {
break;
}
reader.skip(tag & 7);
}
return message;
}
};
function createBaseMetadataUpdateRequest_MdeAgeRestrictionUpdateRequest() {
return { newIsAgeRestricted: void 0 };
}
__name(createBaseMetadataUpdateRequest_MdeAgeRestrictionUpdateRequest, "createBaseMetadataUpdateRequest_MdeAgeRestrictionUpdateRequest");
var MetadataUpdateRequest_MdeAgeRestrictionUpdateRequest = {
encode(message, writer = new BinaryWriter()) {
if (message.newIsAgeRestricted !== void 0) {
writer.uint32(8).bool(message.newIsAgeRestricted);
}
return writer;
},
decode(input, length) {
const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
const end = length === void 0 ? reader.len : reader.pos + length;
const message = createBaseMetadataUpdateRequest_MdeAgeRestrictionUpdateRequest();
while (reader.pos < end) {
const tag = reader.uint32();
switch (tag >>> 3) {
case 1: {
if (tag !== 8) {
break;
}
message.newIsAgeRestricted = reader.bool();
continue;
}
}
if ((tag & 7) === 4 || tag === 0) {
break;
}
reader.skip(tag & 7);
}
return message;
}
};
function createBaseMetadataUpdateRequest_MdeVideoStillRequestParams() {
return { operation: void 0, newStillId: void 0, image: void 0, testImage: void 0, experimentImage: [] };
}
__name(createBaseMetadataUpdateRequest_MdeVideoStillRequestParams, "createBaseMetadataUpdateRequest_MdeVideoStillRequestParams");
var MetadataUpdateRequest_MdeVideoStillRequestParams = {
encode(message, writer = new BinaryWriter()) {
if (message.operation !== void 0) {
writer.uint32(8).int32(message.operation);
}
if (message.newStillId !== void 0) {
writer.uint32(16).int32(message.newStillId);
}
if (message.image !== void 0) {
MetadataUpdateRequest_MdeVideoStillRequestParams_CustomThumbnailImage.encode(message.image, writer.uint32(26).fork()).join();
}
if (message.testImage !== void 0) {
MetadataUpdateRequest_MdeVideoStillRequestParams_CustomThumbnailImage.encode(message.testImage, writer.uint32(34).fork()).join();
}
for (const v of message.experimentImage) {
MetadataUpdateRequest_MdeVideoStillRequestParams_ThumbnailExperimentImageData.encode(v, writer.uint32(50).fork()).join();
}
return writer;
},
decode(input, length) {
const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
const end = length === void 0 ? reader.len : reader.pos + length;
const message = createBaseMetadataUpdateRequest_MdeVideoStillRequestParams();
while (reader.pos < end) {
const tag = reader.uint32();
switch (tag >>> 3) {
case 1: {
if (tag !== 8) {
break;
}
message.operation = reader.int32();
continue;
}
case 2: {
if (tag !== 16) {
break;
}
message.newStillId = reader.int32();
continue;
}
case 3: {
if (tag !== 26) {
break;
}
message.image = MetadataUpdateRequest_MdeVideoStillRequestParams_CustomThumbnailImage.decode(reader, reader.uint32());
continue;
}
case 4: {
if (tag !== 34) {
break;
}
message.testImage = MetadataUpdateRequest_MdeVideoStillRequestParams_CustomThumbnailImage.decode(reader, reader.uint32());
continue;
}
case 6: {
if (tag !== 50) {
break;
}
message.experimentImage.push(MetadataUpdateRequest_MdeVideoStillRequestParams_ThumbnailExperimentImageData.decode(reader, reader.uint32()));
continue;
}
}
if ((tag & 7) === 4 || tag === 0) {
break;
}
reader.skip(tag & 7);
}
return message;
}
};
function createBaseMetadataUpdateRequest_MdeVideoStillRequestParams_ThumbnailExperimentImageData() {
return { image: void 0 };
}
__name(createBaseMetadataUpdateRequest_MdeVideoStillRequestParams_ThumbnailExperimentImageData, "createBaseMetadataUpdateRequest_MdeVideoStillRequestParams_ThumbnailExperimentImageData");
var MetadataUpdateRequest_MdeVideoStillRequestParams_ThumbnailExperimentImageData = {
encode(message, writer = new BinaryWriter()) {
if (message.image !== void 0) {
MetadataUpdateRequest_MdeVideoStillRequestParams_CustomThumbnailImage.encode(message.image, writer.uint32(10).fork()).join();
}
return writer;
},
decode(input, length) {
const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
const end = length === void 0 ? reader.len : reader.pos + length;
const message = createBaseMetadataUpdateRequest_MdeVideoStillRequestParams_ThumbnailExperimentImageData();
while (reader.pos < end) {
const tag = reader.uint32();
switch (tag >>> 3) {
case 1: {
if (tag !== 10) {
break;
}
message.image = MetadataUpdateRequest_MdeVideoStillRequestParams_CustomThumbnailImage.decode(reader, reader.uint32());
continue;
}
}
if ((tag & 7) === 4 || tag === 0) {
break;
}
reader.skip(tag & 7);
}
return message;
}
};
function createBaseMetadataUpdateRequest_MdeVideoStillRequestParams_CustomThumbnailImage() {
return { rawBytes: void 0, dataUri: void 0, frameTimestampUs: void 0, isVertical: void 0 };
}
__name(createBaseMetadataUpdateRequest_MdeVideoStillRequestParams_CustomThumbnailImage, "createBaseMetadataUpdateRequest_MdeVideoStillRequestParams_CustomThumbnailImage");
var MetadataUpdateRequest_MdeVideoStillRequestParams_CustomThumbnailImage = {
encode(message, writer = new BinaryWriter()) {
if (message.rawBytes !== void 0) {
writer.uint32(10).bytes(message.rawBytes);
}
if (message.dataUri !== void 0) {
writer.uint32(18).string(message.dataUri);
}
if (message.frameTimestampUs !== void 0) {
writer.uint32(32).int64(message.frameTimestampUs);
}
if (message.isVertical !== void 0) {
writer.uint32(40).bool(message.isVertical);
}
return writer;
},
decode(input, length) {
const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
const end = length === void 0 ? reader.len : reader.pos + length;
const message = createBaseMetadataUpdateRequest_MdeVideoStillRequestParams_CustomThumbnailImage();
while (reader.pos < end) {
const tag = reader.uint32();
switch (tag >>> 3) {
case 1: {
if (tag !== 10) {
break;
}
message.rawBytes = reader.bytes();
continue;
}
case 2: {
if (tag !== 18) {
break;
}
message.dataUri = reader.string();
continue;
}
case 4: {
if (tag !== 32) {
break;
}
message.frameTimestampUs = longToNumber3(reader.int64());
continue;
}
case 5: {
if (tag !== 40) {
break;
}
message.isVertical = reader.bool();
continue;
}
}
if ((tag & 7) === 4 || tag === 0) {
break;
}
reader.skip(tag & 7);
}
return message;
}
};
function longToNumber3(int64) {
const num = globalThis.Number(int64.toString());
if (num > globalThis.Number.MAX_SAFE_INTEGER) {
throw new globalThis.Error("Value is larger than Number.MAX_SAFE_INTEGER");
}
if (num < globalThis.Number.MIN_SAFE_INTEGER) {
throw new globalThis.Error("Value is smaller than Number.MIN_SAFE_INTEGER");
}
return num;
}
__name(longToNumber3, "longToNumber");
// dist/src/core/clients/Studio.js
var _session5, _Studio_instances, getInitialUploadData_fn, uploadVideo_fn, setVideoMetadata_fn;
var _Studio = class _Studio {
constructor(session) {
__privateAdd(this, _Studio_instances);
__privateAdd(this, _session5);
__privateSet(this, _session5, session);
}
/**
* Updates the metadata of a video.
* @example
* ```ts
* const videoId = 'abcdefg';
* const thumbnail = fs.readFileSync('./my_awesome_thumbnail.jpg');
*
* const response = await yt.studio.updateVideoMetadata(videoId, {
* tags: [ 'astronomy', 'NASA', 'APOD' ],
* title: 'Artemis Mission',
* description: 'A nicely written description...',
* category: 27,
* license: 'creative_commons',
* thumbnail,
* // ...
* });
* ```
*/
async updateVideoMetadata(video_id, metadata) {
const session = __privateGet(this, _session5);
if (!session.logged_in)
throw new InnertubeError("You must be signed in to perform this operation.");
const payload = {
context: {
client: {
osName: "Android",
clientName: parseInt(Constants_exports.CLIENT_NAME_IDS.ANDROID),
clientVersion: Constants_exports.CLIENTS.ANDROID.VERSION,
androidSdkVersion: Constants_exports.CLIENTS.ANDROID.SDK_VERSION,
visitorData: session.context.client.visitorData,
osVersion: "13",
acceptLanguage: session.context.client.hl,
acceptRegion: session.context.client.gl,
deviceMake: "Google",
deviceModel: "sdk_gphone64_x86_64",
screenHeightPoints: 840,
screenWidthPoints: 432,
configInfo: {
appInstallData: session.context.client.configInfo?.appInstallData
},
timeZone: session.context.client.timeZone,
chipset: "qcom;taro"
},
activePlayers: []
},
encryptedVideoId: video_id
};
if (metadata.title)
payload.title = { newTitle: metadata.title };
if (metadata.description)
payload.description = { newDescription: metadata.description };
if (metadata.license)
payload.license = { newLicenseId: metadata.license };
if (metadata.tags)
payload.tags = { newTags: metadata.tags };
if (metadata.thumbnail) {
payload.videoStill = {
operation: 3,
image: {
rawBytes: metadata.thumbnail
},
experimentImage: []
};
}
if (Reflect.has(metadata, "category"))
payload.category = { newCategoryId: metadata.category };
if (Reflect.has(metadata, "privacy")) {
switch (metadata.privacy) {
case "PUBLIC":
payload.privacy = { newPrivacy: 1 };
break;
case "UNLISTED":
payload.privacy = { newPrivacy: 2 };
break;
case "PRIVATE":
payload.privacy = { newPrivacy: 3 };
break;
default:
throw new Error("Invalid privacy setting");
}
}
if (Reflect.has(metadata, "made_for_kids")) {
payload.madeForKids = {
operation: 1,
newMfk: metadata.made_for_kids ? 1 : 2
};
}
if (Reflect.has(metadata, "age_restricted")) {
payload.racy = {
operation: 1,
newRacy: metadata.age_restricted ? 1 : 2
};
}
const writer = MetadataUpdateRequest.encode(payload);
return await session.actions.execute("/video_manager/metadata_update", {
protobuf: true,
serialized_data: writer.finish()
});
}
/**
* Uploads a video to YouTube.
* @example
* ```ts
* const file = fs.readFileSync('./my_awesome_video.mp4');
* const response = await yt.studio.upload(file.buffer, { title: 'Wow!' });
* ```
*/
async upload(file, metadata = {}) {
if (!__privateGet(this, _session5).logged_in)
throw new InnertubeError("You must be signed in to perform this operation.");
const initial_data = await __privateMethod(this, _Studio_instances, getInitialUploadData_fn).call(this);
const upload_result = await __privateMethod(this, _Studio_instances, uploadVideo_fn).call(this, initial_data.upload_url, file);
if (upload_result.status !== "STATUS_SUCCESS")
throw new InnertubeError("Could not process video.");
return await __privateMethod(this, _Studio_instances, setVideoMetadata_fn).call(this, initial_data, upload_result, metadata);
}
};
_session5 = new WeakMap();
_Studio_instances = new WeakSet();
getInitialUploadData_fn = /* @__PURE__ */ __name(async function() {
const frontend_upload_id = `innertube_android:${Platform.shim.uuidv4()}:0:v=3,api=1,cf=3`;
const payload = {
frontendUploadId: frontend_upload_id,
deviceDisplayName: "Pixel 6 Pro",
fileId: `goog-edited-video://generated?videoFileUri=content://media/external/video/media/${Platform.shim.uuidv4()}`,
mp4MoovAtomRelocationStatus: "UNSUPPORTED",
transcodeResult: "DISABLED",
connectionType: "WIFI"
};
const response = await __privateGet(this, _session5).http.fetch("/upload/youtubei", {
baseURL: Constants_exports.URLS.YT_UPLOAD,
method: "POST",
headers: {
"Content-Type": "application/x-www-form-urlencoded",
"x-goog-upload-command": "start",
"x-goog-upload-protocol": "resumable"
},
body: JSON.stringify(payload)
});
if (!response.ok)
throw new InnertubeError("Could not get initial upload data");
return {
frontend_upload_id,
upload_id: response.headers.get("x-guploader-uploadid"),
upload_url: response.headers.get("x-goog-upload-url"),
scotty_resource_id: response.headers.get("x-goog-upload-header-scotty-resource-id"),
chunk_granularity: response.headers.get("x-goog-upload-chunk-granularity")
};
}, "#getInitialUploadData");
uploadVideo_fn = /* @__PURE__ */ __name(async function(upload_url, file) {
const response = await __privateGet(this, _session5).http.fetch_function(upload_url, {
method: "POST",
headers: {
"Content-Type": "application/x-www-form-urlencoded",
"x-goog-upload-command": "upload, finalize",
"x-goog-upload-file-name": `file-${Date.now()}`,
"x-goog-upload-offset": "0"
},
body: file
});
if (!response.ok)
throw new InnertubeError("Could not upload video");
return await response.json();
}, "#uploadVideo");
setVideoMetadata_fn = /* @__PURE__ */ __name(async function(initial_data, upload_result, metadata) {
return await __privateGet(this, _session5).actions.execute("/upload/createvideo", {
resourceId: {
scottyResourceId: {
id: upload_result.scottyResourceId
}
},
frontendUploadId: initial_data.frontend_upload_id,
initialMetadata: {
title: {
newTitle: metadata.title
},
description: {
newDescription: metadata.description,
shouldSegment: true
},
privacy: {
newPrivacy: metadata.privacy || "PRIVATE"
},
draftState: {
isDraft: !!metadata.is_draft
}
}
});
}, "#setVideoMetadata");
__name(_Studio, "Studio");
var Studio = _Studio;
// dist/src/core/managers/index.js
var managers_exports = {};
__export(managers_exports, {
AccountManager: () => AccountManager,
InteractionManager: () => InteractionManager,
PlaylistManager: () => PlaylistManager
});
// dist/src/core/managers/AccountManager.js
var _actions22;
var _AccountManager = class _AccountManager {
constructor(actions) {
__privateAdd(this, _actions22);
__privateSet(this, _actions22, actions);
}
async getInfo(all = false) {
if (!__privateGet(this, _actions22).session.logged_in)
throw new InnertubeError("You must be signed in to perform this operation.");
if (!all && !!__privateGet(this, _actions22).session.context.user.onBehalfOfUser) {
throw new InnertubeError('Boolean argument must be true when "on_behalf_of_user" is specified.');
}
if (all) {
const get_accounts_list_endpoint2 = new NavigationEndpoint({ getAccountsListInnertubeEndpoint: {
requestType: "ACCOUNTS_LIST_REQUEST_TYPE_CHANNEL_SWITCHER",
callCircumstance: "SWITCHING_USERS_FULL"
} });
const response2 = await get_accounts_list_endpoint2.call(__privateGet(this, _actions22), { client: "WEB", parse: true });
return response2.actions_memo?.getType(AccountItem) || [];
}
const get_accounts_list_endpoint = new NavigationEndpoint({ getAccountsListInnertubeEndpoint: {} });
const response = await get_accounts_list_endpoint.call(__privateGet(this, _actions22), { client: "TV" });
return new AccountInfo(response);
}
/**
* Gets YouTube settings.
*/
async getSettings() {
const browse_endpoint = new NavigationEndpoint({ browseEndpoint: { browseId: "SPaccount_overview" } });
const response = await browse_endpoint.call(__privateGet(this, _actions22));
return new Settings(__privateGet(this, _actions22), response);
}
};
_actions22 = new WeakMap();
__name(_AccountManager, "AccountManager");
var AccountManager = _AccountManager;
// dist/src/core/managers/PlaylistManager.js
var _actions23, _PlaylistManager_instances, getPlaylist_fn;
var _PlaylistManager = class _PlaylistManager {
constructor(actions) {
__privateAdd(this, _PlaylistManager_instances);
__privateAdd(this, _actions23);
__privateSet(this, _actions23, actions);
}
/**
* Creates a playlist.
* @param title - The title of the playlist.
* @param video_ids - An array of video IDs to add to the playlist.
*/
async create(title, video_ids) {
throwIfMissing({ title, video_ids });
if (!__privateGet(this, _actions23).session.logged_in)
throw new InnertubeError("You must be signed in to perform this operation.");
const create_playlist_endpoint = new NavigationEndpoint({
createPlaylistServiceEndpoint: {
title,
videoIds: video_ids
}
});
const response = await create_playlist_endpoint.call(__privateGet(this, _actions23));
return {
success: response.success,
status_code: response.status_code,
playlist_id: response.data.playlistId,
data: response.data
};
}
/**
* Deletes a given playlist.
* @param playlist_id - The playlist ID.
*/
async delete(playlist_id) {
throwIfMissing({ playlist_id });
if (!__privateGet(this, _actions23).session.logged_in)
throw new InnertubeError("You must be signed in to perform this operation.");
const delete_playlist_endpoint = new NavigationEndpoint({
deletePlaylistServiceEndpoint: {
sourcePlaylistId: playlist_id
}
});
const response = await delete_playlist_endpoint.call(__privateGet(this, _actions23));
return {
playlist_id,
success: response.success,
status_code: response.status_code,
data: response.data
};
}
/**
* Adds a given playlist to the library of a user.
* @param playlist_id - The playlist ID.
*/
async addToLibrary(playlist_id) {
throwIfMissing({ playlist_id });
if (!__privateGet(this, _actions23).session.logged_in)
throw new InnertubeError("You must be signed in to perform this operation.");
const like_playlist_endpoint = new NavigationEndpoint({
likeEndpoint: {
status: "LIKE",
target: playlist_id
}
});
return await like_playlist_endpoint.call(__privateGet(this, _actions23));
}
/**
* Remove a given playlist to the library of a user.
* @param playlist_id - The playlist ID.
*/
async removeFromLibrary(playlist_id) {
throwIfMissing({ playlist_id });
if (!__privateGet(this, _actions23).session.logged_in)
throw new InnertubeError("You must be signed in to perform this operation.");
const remove_like_playlist_endpoint = new NavigationEndpoint({
likeEndpoint: {
status: "INDIFFERENT",
target: playlist_id
}
});
return await remove_like_playlist_endpoint.call(__privateGet(this, _actions23));
}
/**
* Adds videos to a given playlist.
* @param playlist_id - The playlist ID.
* @param video_ids - An array of video IDs to add to the playlist.
*/
async addVideos(playlist_id, video_ids) {
throwIfMissing({ playlist_id, video_ids });
if (!__privateGet(this, _actions23).session.logged_in)
throw new InnertubeError("You must be signed in to perform this operation.");
const playlist_edit_endpoint = new NavigationEndpoint({
playlistEditEndpoint: {
playlistId: playlist_id,
actions: video_ids.map((id) => ({
action: "ACTION_ADD_VIDEO",
addedVideoId: id
}))
}
});
const response = await playlist_edit_endpoint.call(__privateGet(this, _actions23));
return {
playlist_id,
action_result: response.data.actions
// TODO: implement actions in the parser
};
}
/**
* Removes videos from a given playlist.
* @param playlist_id - The playlist ID.
* @param video_ids - An array of video IDs to remove from the playlist.
* @param use_set_video_ids - Option to remove videos using set video IDs.
*/
async removeVideos(playlist_id, video_ids, use_set_video_ids = false) {
throwIfMissing({ playlist_id, video_ids });
if (!__privateGet(this, _actions23).session.logged_in)
throw new InnertubeError("You must be signed in to perform this operation.");
const playlist = await __privateMethod(this, _PlaylistManager_instances, getPlaylist_fn).call(this, playlist_id);
if (!playlist.info.is_editable)
throw new InnertubeError("This playlist cannot be edited.", playlist_id);
const payload = { playlistId: playlist_id, actions: [] };
const getSetVideoIds = /* @__PURE__ */ __name(async (pl) => {
const key_id = use_set_video_ids ? "set_video_id" : "id";
const videos = pl.videos.filter((video) => video_ids.includes(video.key(key_id).string()));
videos.forEach((video) => payload.actions.push({
action: "ACTION_REMOVE_VIDEO",
setVideoId: video.key("set_video_id").string()
}));
if (payload.actions.length < video_ids.length) {
const next = await pl.getContinuation();
return getSetVideoIds(next);
}
}, "getSetVideoIds");
await getSetVideoIds(playlist);
if (!payload.actions.length)
throw new InnertubeError("Given video ids were not found in this playlist.", video_ids);
const playlist_edit_endpoint = new NavigationEndpoint({ playlistEditEndpoint: payload });
const response = await playlist_edit_endpoint.call(__privateGet(this, _actions23));
return {
playlist_id,
action_result: response.data.actions
// TODO: implement actions in the parser
};
}
/**
* Moves a video to a new position within a given playlist.
* @param playlist_id - The playlist ID.
* @param moved_video_id - The video ID to move.
* @param predecessor_video_id - The video ID to move the moved video before.
*/
async moveVideo(playlist_id, moved_video_id, predecessor_video_id) {
throwIfMissing({ playlist_id, moved_video_id, predecessor_video_id });
if (!__privateGet(this, _actions23).session.logged_in)
throw new InnertubeError("You must be signed in to perform this operation.");
const playlist = await __privateMethod(this, _PlaylistManager_instances, getPlaylist_fn).call(this, playlist_id);
if (!playlist.info.is_editable)
throw new InnertubeError("This playlist cannot be edited.", playlist_id);
const payload = { playlistId: playlist_id, actions: [] };
let set_video_id_0, set_video_id_1;
const getSetVideoIds = /* @__PURE__ */ __name(async (pl) => {
const video_0 = pl.videos.find((video) => moved_video_id === video.key("id").string());
const video_1 = pl.videos.find((video) => predecessor_video_id === video.key("id").string());
set_video_id_0 = set_video_id_0 || video_0?.key("set_video_id").string();
set_video_id_1 = set_video_id_1 || video_1?.key("set_video_id").string();
if (!set_video_id_0 || !set_video_id_1) {
const next = await pl.getContinuation();
return getSetVideoIds(next);
}
}, "getSetVideoIds");
await getSetVideoIds(playlist);
payload.actions.push({
action: "ACTION_MOVE_VIDEO_AFTER",
setVideoId: set_video_id_0,
movedSetVideoIdPredecessor: set_video_id_1
});
const playlist_edit_endpoint = new NavigationEndpoint({ playlistEditEndpoint: payload });
const response = await playlist_edit_endpoint.call(__privateGet(this, _actions23));
return {
playlist_id,
action_result: response.data.actions
// TODO: implement actions in the parser
};
}
/**
* Sets the name for the given playlist.
* @param playlist_id - The playlist ID.
* @param name - The name / title to use for the playlist.
*/
async setName(playlist_id, name) {
throwIfMissing({ playlist_id, name });
if (!__privateGet(this, _actions23).session.logged_in)
throw new InnertubeError("You must be signed in to perform this operation.");
const payload = { playlist_id, actions: [] };
payload.actions.push({
action: "ACTION_SET_PLAYLIST_NAME",
playlistName: name
});
const playlist_edit_endpoint = new NavigationEndpoint({ playlistEditEndpoint: payload });
const response = await playlist_edit_endpoint.call(__privateGet(this, _actions23));
return {
playlist_id,
action_result: response.data.actions
};
}
/**
* Sets the description for the given playlist.
* @param playlist_id - The playlist ID.
* @param description - The description to use for the playlist.
*/
async setDescription(playlist_id, description) {
throwIfMissing({ playlist_id, description });
if (!__privateGet(this, _actions23).session.logged_in)
throw new InnertubeError("You must be signed in to perform this operation.");
const payload = { playlistId: playlist_id, actions: [] };
payload.actions.push({
action: "ACTION_SET_PLAYLIST_DESCRIPTION",
playlistDescription: description
});
const playlist_edit_endpoint = new NavigationEndpoint({ playlistEditEndpoint: payload });
const response = await playlist_edit_endpoint.call(__privateGet(this, _actions23));
return {
playlist_id,
action_result: response.data.actions
};
}
};
_actions23 = new WeakMap();
_PlaylistManager_instances = new WeakSet();
getPlaylist_fn = /* @__PURE__ */ __name(async function(playlist_id) {
if (!playlist_id.startsWith("VL")) {
playlist_id = `VL${playlist_id}`;
}
const browse_endpoint = new NavigationEndpoint({ browseEndpoint: { browseId: playlist_id } });
const browse_response = await browse_endpoint.call(__privateGet(this, _actions23), { parse: true });
return new Playlist2(__privateGet(this, _actions23), browse_response, true);
}, "#getPlaylist");
__name(_PlaylistManager, "PlaylistManager");
var PlaylistManager = _PlaylistManager;
// dist/src/core/managers/InteractionManager.js
var _actions24;
var _InteractionManager = class _InteractionManager {
constructor(actions) {
__privateAdd(this, _actions24);
__privateSet(this, _actions24, actions);
}
/**
* Likes a given video.
* @param video_id - The video ID
*/
async like(video_id) {
throwIfMissing({ video_id });
if (!__privateGet(this, _actions24).session.logged_in)
throw new Error("You must be signed in to perform this operation.");
const like_endpoint = new NavigationEndpoint({
likeEndpoint: {
status: "LIKE",
target: video_id
}
});
return like_endpoint.call(__privateGet(this, _actions24), { client: "TV" });
}
/**
* Dislikes a given video.
* @param video_id - The video ID
*/
async dislike(video_id) {
throwIfMissing({ video_id });
if (!__privateGet(this, _actions24).session.logged_in)
throw new Error("You must be signed in to perform this operation.");
const dislike_endpoint = new NavigationEndpoint({
likeEndpoint: {
status: "DISLIKE",
target: video_id
}
});
return dislike_endpoint.call(__privateGet(this, _actions24), { client: "TV" });
}
/**
* Removes a like/dislike.
* @param video_id - The video ID
*/
async removeRating(video_id) {
throwIfMissing({ video_id });
if (!__privateGet(this, _actions24).session.logged_in)
throw new Error("You must be signed in to perform this operation.");
const remove_like_endpoint = new NavigationEndpoint({
likeEndpoint: {
status: "INDIFFERENT",
target: video_id
}
});
return remove_like_endpoint.call(__privateGet(this, _actions24), { client: "TV" });
}
/**
* Subscribes to the given channel.
* @param channel_id - The channel ID
*/
async subscribe(channel_id) {
throwIfMissing({ channel_id });
if (!__privateGet(this, _actions24).session.logged_in)
throw new Error("You must be signed in to perform this operation.");
const subscribe_endpoint = new NavigationEndpoint({
subscribeEndpoint: {
channelIds: [channel_id],
params: "EgIIAhgA"
}
});
return subscribe_endpoint.call(__privateGet(this, _actions24));
}
/**
* Unsubscribes from the given channel.
* @param channel_id - The channel ID
*/
async unsubscribe(channel_id) {
throwIfMissing({ channel_id });
if (!__privateGet(this, _actions24).session.logged_in)
throw new Error("You must be signed in to perform this operation.");
const unsubscribe_endpoint = new NavigationEndpoint({
unsubscribeEndpoint: {
channelIds: [channel_id],
params: "CgIIAhgA"
}
});
return unsubscribe_endpoint.call(__privateGet(this, _actions24));
}
/**
* Posts a comment on a given video.
* @param video_id - The video ID
* @param text - The comment text
*/
async comment(video_id, text) {
throwIfMissing({ video_id, text });
if (!__privateGet(this, _actions24).session.logged_in)
throw new Error("You must be signed in to perform this operation.");
const writer = CreateCommentParams.encode({
videoId: video_id,
params: {
index: 0
},
number: 7
});
const params = encodeURIComponent(u8ToBase64(writer.finish()));
const create_comment_endpoint = new NavigationEndpoint({
createCommentEndpoint: {
commentText: text,
createCommentParams: params
}
});
return create_comment_endpoint.call(__privateGet(this, _actions24));
}
/**
* Translates a given text using YouTube's comment translation feature.
* @param text - The text to translate
* @param target_language - an ISO language code
* @param args - optional arguments
*/
async translate(text, target_language, args = {}) {
throwIfMissing({ text, target_language });
const action = encodeCommentActionParams(22, { text, target_language, ...args });
const perform_comment_action_endpoint = new NavigationEndpoint({ performCommentActionEndpoint: { action } });
const response = await perform_comment_action_endpoint.call(__privateGet(this, _actions24));
const mutation = response.data.frameworkUpdates.entityBatchUpdate.mutations[0].payload.commentEntityPayload;
return {
success: response.success,
status_code: response.status_code,
translated_content: mutation.translatedContent.content,
data: response.data
};
}
/**
* Changes notification preferences for a given channel.
* Only works with channels you are subscribed to.
* @param channel_id - The channel ID.
* @param type - The notification type.
*/
async setNotificationPreferences(channel_id, type) {
throwIfMissing({ channel_id, type });
if (!__privateGet(this, _actions24).session.logged_in)
throw new Error("You must be signed in to perform this operation.");
const pref_types = {
PERSONALIZED: 1,
ALL: 2,
NONE: 3
};
if (!Object.keys(pref_types).includes(type.toUpperCase()))
throw new Error(`Invalid notification preference type: ${type}`);
const writer = NotificationPreferences.encode({
channelId: channel_id,
prefId: {
index: pref_types[type.toUpperCase()]
},
number0: 0,
number1: 4
});
const params = encodeURIComponent(u8ToBase64(writer.finish()));
const modify_channel_notification_preference_endpoint = new NavigationEndpoint({ modifyChannelNotificationPreferenceEndpoint: { params } });
return modify_channel_notification_preference_endpoint.call(__privateGet(this, _actions24));
}
};
_actions24 = new WeakMap();
__name(_InteractionManager, "InteractionManager");
var InteractionManager = _InteractionManager;
// dist/src/Innertube.js
var _session6;
var _Innertube = class _Innertube {
constructor(session) {
__privateAdd(this, _session6);
__privateSet(this, _session6, session);
}
static async create(config = {}) {
return new _Innertube(await Session.create(config));
}
async getInfo(target, options) {
throwIfMissing({ target });
const payload = {
videoId: target instanceof NavigationEndpoint ? target.payload?.videoId : target,
playlistId: target instanceof NavigationEndpoint ? target.payload?.playlistId : void 0,
playlistIndex: target instanceof NavigationEndpoint ? target.payload?.playlistIndex : void 0,
params: target instanceof NavigationEndpoint ? target.payload?.params : void 0,
racyCheckOk: true,
contentCheckOk: true
};
const watch_endpoint = new NavigationEndpoint({ watchEndpoint: payload });
const watch_next_endpoint = new NavigationEndpoint({ watchNextEndpoint: payload });
const session = __privateGet(this, _session6);
const extra_payload = {
playbackContext: {
contentPlaybackContext: {
vis: 0,
splay: false,
lactMilliseconds: "-1",
signatureTimestamp: session.player?.signature_timestamp
}
},
client: options?.client
};
if (options?.po_token) {
extra_payload.serviceIntegrityDimensions = {
poToken: options.po_token
};
} else if (session.po_token) {
extra_payload.serviceIntegrityDimensions = {
poToken: session.po_token
};
}
const watch_response = watch_endpoint.call(session.actions, extra_payload);
const watch_next_response = watch_next_endpoint.call(session.actions);
const response = await Promise.all([watch_response, watch_next_response]);
const cpn = generateRandomString(16);
return new VideoInfo(response, session.actions, cpn);
}
async getBasicInfo(video_id, options) {
throwIfMissing({ video_id });
const watch_endpoint = new NavigationEndpoint({
watchEndpoint: {
videoId: video_id,
racyCheckOk: true,
contentCheckOk: true
}
});
const session = __privateGet(this, _session6);
const extra_payload = {
playbackContext: {
contentPlaybackContext: {
vis: 0,
splay: false,
lactMilliseconds: "-1",
signatureTimestamp: session.player?.signature_timestamp
}
},
client: options?.client
};
if (options?.po_token) {
extra_payload.serviceIntegrityDimensions = {
poToken: options.po_token
};
} else if (session.po_token) {
extra_payload.serviceIntegrityDimensions = {
poToken: session.po_token
};
}
const watch_response = await watch_endpoint.call(session.actions, extra_payload);
const cpn = generateRandomString(16);
return new VideoInfo([watch_response], session.actions, cpn);
}
async getShortsVideoInfo(video_id, client) {
throwIfMissing({ video_id });
const reel_watch_endpoint = new NavigationEndpoint({
reelWatchEndpoint: {
disablePlayerResponse: false,
params: "CAUwAg%3D%3D",
videoId: video_id
}
});
const actions = __privateGet(this, _session6).actions;
const reel_watch_response = reel_watch_endpoint.call(actions, { client });
const writer = ReelSequence.encode({
shortId: video_id,
params: {
number: 5
},
feature2: 25,
feature3: 0
});
const params = encodeURIComponent(u8ToBase64(writer.finish()));
const sequence_response = actions.execute("/reel/reel_watch_sequence", { sequenceParams: params });
const response = await Promise.all([reel_watch_response, sequence_response]);
const cpn = generateRandomString(16);
return new ShortFormVideoInfo([response[0]], actions, cpn, response[1]);
}
async search(query, filters = {}) {
throwIfMissing({ query });
const search_filter = {};
search_filter.filters = {};
if (filters.prioritize) {
search_filter.prioritize = SearchFilter_Prioritize[filters.prioritize.toUpperCase()];
}
if (filters.upload_date) {
search_filter.filters.uploadDate = SearchFilter_Filters_UploadDate[filters.upload_date.toUpperCase()];
}
if (filters.type) {
search_filter.filters.type = SearchFilter_Filters_SearchType[filters.type.toUpperCase()];
}
if (filters.duration) {
search_filter.filters.duration = SearchFilter_Filters_Duration[filters.duration.toUpperCase()];
}
if (filters.features) {
for (const feature of filters.features) {
switch (feature) {
case "360":
search_filter.filters.features360 = true;
break;
case "3d":
search_filter.filters.features3d = true;
break;
case "4k":
search_filter.filters.features4k = true;
break;
case "creative_commons":
search_filter.filters.featuresCreativeCommons = true;
break;
case "hd":
search_filter.filters.featuresHd = true;
break;
case "hdr":
search_filter.filters.featuresHdr = true;
break;
case "live":
search_filter.filters.featuresLive = true;
break;
case "location":
search_filter.filters.featuresLocation = true;
break;
case "purchased":
search_filter.filters.featuresPurchased = true;
break;
case "subtitles":
search_filter.filters.featuresSubtitles = true;
break;
case "vr180":
search_filter.filters.featuresVr180 = true;
break;
default:
break;
}
}
}
const search_endpoint = new NavigationEndpoint({
searchEndpoint: {
query,
params: filters ? encodeURIComponent(u8ToBase64(SearchFilter.encode(search_filter).finish())) : void 0
}
});
const response = await search_endpoint.call(__privateGet(this, _session6).actions);
return new Search(this.actions, response);
}
async getSearchSuggestions(query, previous_query) {
const session = __privateGet(this, _session6);
const url = new URL(`${URLS.YT_SUGGESTIONS}/complete/search`);
url.searchParams.set("client", "youtube");
url.searchParams.set("gs_ri", "youtube");
url.searchParams.set("gs_id", "0");
url.searchParams.set("cp", "0");
url.searchParams.set("ds", "yt");
url.searchParams.set("sugexp", CLIENTS.WEB.SUGG_EXP_ID);
url.searchParams.set("hl", session.context.client.hl);
url.searchParams.set("gl", session.context.client.gl);
url.searchParams.set("q", query);
if (previous_query)
url.searchParams.set("pq", previous_query);
const response = await session.http.fetch_function(url, {
headers: {
"Cookie": session.cookie || ""
}
});
const text = await response.text();
const data = JSON.parse(text.replace("window.google.ac.h(", "").slice(0, -1));
return data[1].map((suggestion) => suggestion[0]);
}
async getComments(video_id, sort_by, comment_id) {
throwIfMissing({ video_id });
const SORT_OPTIONS = {
TOP_COMMENTS: 0,
NEWEST_FIRST: 1
};
const token = GetCommentsSectionParams.encode({
ctx: {
videoId: video_id
},
unkParam: 6,
params: {
opts: {
videoId: video_id,
sortBy: SORT_OPTIONS[sort_by || "TOP_COMMENTS"],
type: 2,
commentId: comment_id || ""
},
target: "comments-section"
}
});
const continuation = encodeURIComponent(u8ToBase64(token.finish()));
const continuation_command = new NavigationEndpoint({
continuationCommand: {
request: "CONTINUATION_REQUEST_TYPE_WATCH_NEXT",
token: continuation
}
});
const response = await continuation_command.call(__privateGet(this, _session6).actions);
return new Comments(this.actions, response.data);
}
async getHomeFeed() {
const browse_endpoint = new NavigationEndpoint({ browseEndpoint: { browseId: "FEwhat_to_watch" } });
const response = await browse_endpoint.call(__privateGet(this, _session6).actions);
return new HomeFeed(this.actions, response);
}
async getGuide() {
const response = await this.actions.execute("/guide");
return new Guide(response.data);
}
async getLibrary() {
const browse_endpoint = new NavigationEndpoint({ browseEndpoint: { browseId: "FElibrary" } });
const response = await browse_endpoint.call(__privateGet(this, _session6).actions);
return new Library(this.actions, response);
}
async getHistory() {
const browse_endpoint = new NavigationEndpoint({ browseEndpoint: { browseId: "FEhistory" } });
const response = await browse_endpoint.call(__privateGet(this, _session6).actions);
return new History(this.actions, response);
}
async getCourses() {
const browse_endpoint = new NavigationEndpoint({ browseEndpoint: { browseId: "FEcourses_destination" } });
const response = await browse_endpoint.call(__privateGet(this, _session6).actions, { parse: true });
return new Feed(this.actions, response);
}
async getSubscriptionsFeed() {
const browse_endpoint = new NavigationEndpoint({ browseEndpoint: { browseId: "FEsubscriptions" } });
const response = await browse_endpoint.call(__privateGet(this, _session6).actions, { parse: true });
return new Feed(this.actions, response);
}
async getChannelsFeed() {
const browse_endpoint = new NavigationEndpoint({ browseEndpoint: { browseId: "FEchannels" } });
const response = await browse_endpoint.call(__privateGet(this, _session6).actions, { parse: true });
return new Feed(this.actions, response);
}
async getChannel(id) {
throwIfMissing({ id });
const browse_endpoint = new NavigationEndpoint({ browseEndpoint: { browseId: id } });
let response = await browse_endpoint.call(__privateGet(this, _session6).actions, { parse: true });
if (response.on_response_received_actions?.[0]?.is(NavigateAction)) {
response = await response.on_response_received_actions[0].endpoint.call(__privateGet(this, _session6).actions, { parse: true });
}
return new Channel2(this.actions, response, true);
}
async getNotifications() {
const response = await this.actions.execute("/notification/get_notification_menu", { notificationsMenuRequestType: "NOTIFICATIONS_MENU_REQUEST_TYPE_INBOX" });
return new NotificationsMenu(this.actions, response);
}
async getUnseenNotificationsCount() {
const response = await this.actions.execute("/notification/get_unseen_count");
return response.data?.unseenCount || response.data?.actions?.[0].updateNotificationsUnseenCountAction?.unseenCount || 0;
}
/**
* Retrieves the user's playlists.
*/
async getPlaylists() {
const browse_endpoint = new NavigationEndpoint({ browseEndpoint: { browseId: "FEplaylist_aggregation" } });
const response = await browse_endpoint.call(__privateGet(this, _session6).actions, { parse: true });
return new Feed(this.actions, response);
}
async getPlaylist(id) {
throwIfMissing({ id });
if (!id.startsWith("VL")) {
id = `VL${id}`;
}
const browse_endpoint = new NavigationEndpoint({ browseEndpoint: { browseId: id } });
const response = await browse_endpoint.call(__privateGet(this, _session6).actions);
return new Playlist2(this.actions, response);
}
async getHashtag(hashtag) {
throwIfMissing({ hashtag });
const writer = Hashtag.encode({
params: {
hashtag,
type: 1
}
});
const params = encodeURIComponent(u8ToBase64(writer.finish()));
const browse_endpoint = new NavigationEndpoint({ browseEndpoint: { browseId: "FEhashtag", params } });
const response = await browse_endpoint.call(__privateGet(this, _session6).actions);
return new HashtagFeed(this.actions, response);
}
/**
* An alternative to {@link download}.
* Returns deciphered streaming data.
*
* If you wish to retrieve the video info too, have a look at {@link getBasicInfo} or {@link getInfo}.
* @param video_id - The video id.
* @param options - Format options.
*/
async getStreamingData(video_id, options = {}) {
const info2 = await this.getBasicInfo(video_id, options);
const format = info2.chooseFormat(options);
format.url = await format.decipher(__privateGet(this, _session6).player);
return format;
}
/**
* Downloads a given video. If all you need the direct download link, see {@link getStreamingData}.
* If you wish to retrieve the video info too, have a look at {@link getBasicInfo} or {@link getInfo}.
* @param video_id - The video id.
* @param options - Download options.
*/
async download(video_id, options) {
const info2 = await this.getBasicInfo(video_id, options);
return info2.download(options);
}
/**
* Resolves the given URL.
*/
async resolveURL(url) {
const response = await this.actions.execute("/navigation/resolve_url", { url, parse: true });
if (!response.endpoint)
throw new InnertubeError("Failed to resolve URL. Expected a NavigationEndpoint but got undefined", response);
return response.endpoint;
}
/**
* Gets a post page given a post id and the channel id
*/
async getPost(post_id, channel_id) {
throwIfMissing({ post_id, channel_id });
const writer = CommunityPostParams.encode({
f1: {
ucid1: channel_id,
postId: post_id,
ucid2: channel_id
}
});
const params = encodeURIComponent(u8ToBase64(writer.finish()).replace(/\+/g, "-").replace(/\//g, "_"));
const browse_endpoint = new NavigationEndpoint({ browseEndpoint: { browseId: "FEpost_detail", params } });
const response = await browse_endpoint.call(__privateGet(this, _session6).actions, { parse: true });
return new Feed(this.actions, response);
}
/**
* Gets the comments of a post.
*/
async getPostComments(post_id, channel_id, sort_by) {
throwIfMissing({ post_id, channel_id });
const SORT_OPTIONS = {
TOP_COMMENTS: 0,
NEWEST_FIRST: 1
};
const writer1 = CommunityPostCommentsParam.encode({
title: "posts",
commentDataContainer: {
title: "comments-section",
commentData: {
sortBy: SORT_OPTIONS[sort_by || "TOP_COMMENTS"],
f0: 2,
f1: 0,
channelId: channel_id,
postId: post_id
},
f0: 0
}
});
const writer2 = CommunityPostCommentsParamContainer.encode({
f0: {
location: "FEcomment_post_detail_page_web_top_level",
protoData: encodeURIComponent(u8ToBase64(writer1.finish()).replace(/\+/g, "-").replace(/\//g, "_"))
}
});
const continuation = encodeURIComponent(u8ToBase64(writer2.finish()));
const continuation_command = new NavigationEndpoint({
continuationCommand: {
request: "CONTINUATION_REQUEST_TYPE_BROWSE",
token: continuation
}
});
const response = await continuation_command.call(__privateGet(this, _session6).actions);
return new Comments(this.actions, response.data);
}
/**
* Fetches an attestation challenge.
*/
async getAttestationChallenge(engagement_type, ids) {
const payload = {
engagementType: engagement_type
};
if (ids)
payload.ids = ids;
return this.actions.execute("/att/get", { parse: true, ...payload });
}
call(endpoint, args) {
return endpoint.call(this.actions, args);
}
/**
* An interface for interacting with YouTube Music.
*/
get music() {
return new Music(__privateGet(this, _session6));
}
/**
* An interface for interacting with YouTube Studio.
*/
get studio() {
return new Studio(__privateGet(this, _session6));
}
/**
* An interface for interacting with YouTube Kids.
*/
get kids() {
return new Kids(__privateGet(this, _session6));
}
/**
* An interface for managing and retrieving account information.
*/
get account() {
return new AccountManager(__privateGet(this, _session6).actions);
}
/**
* An interface for managing playlists.
*/
get playlist() {
return new PlaylistManager(__privateGet(this, _session6).actions);
}
/**
* An interface for directly interacting with certain YouTube features.
*/
get interact() {
return new InteractionManager(__privateGet(this, _session6).actions);
}
/**
* An internal class used to dispatch requests.
*/
get actions() {
return __privateGet(this, _session6).actions;
}
/**
* The session used by this instance.
*/
get session() {
return __privateGet(this, _session6);
}
};
_session6 = new WeakMap();
__name(_Innertube, "Innertube");
var Innertube = _Innertube;
// dist/src/platform/lib.js
var lib_default = Innertube;
// dist/src/platform/cf-worker.js
var _persistent_directory, _persistent;
var _Cache = class _Cache {
constructor(persistent = false, persistent_directory) {
__privateAdd(this, _persistent_directory);
__privateAdd(this, _persistent);
__privateSet(this, _persistent_directory, persistent_directory || "");
__privateSet(this, _persistent, persistent);
}
get cache_dir() {
return __privateGet(this, _persistent) ? __privateGet(this, _persistent_directory) : "";
}
async get(key) {
const cache = await caches.open("yt-api");
const response = await cache.match(key);
if (!response)
return void 0;
return response.arrayBuffer();
}
async set(key, value) {
const cache = await caches.open("yt-api");
cache.put(key, new Response(value));
}
async remove(key) {
const cache = await caches.open("yt-api");
await cache.delete(key);
}
};
_persistent_directory = new WeakMap();
_persistent = new WeakMap();
__name(_Cache, "Cache");
var Cache = _Cache;
Platform.load({
runtime: "cf-worker",
server: true,
Cache,
sha1Hash,
uuidv4() {
return crypto.randomUUID();
},
eval: evaluate,
fetch: fetch.bind(globalThis),
Request,
Response,
Headers,
FormData,
File,
ReadableStream,
CustomEvent
});
var cf_worker_default = lib_default;
export {
Actions,
AppendContinuationItemsAction,
BinarySerializer_exports as BinarySerializer,
ClientType,
clients_exports as Clients,
Constants_exports as Constants,
Continuation,
ContinuationCommand2 as ContinuationCommand,
EventEmitterLike as EventEmitter,
FormatUtils_exports as FormatUtils,
generator_exports as Generator,
GridContinuation,
HTTPClient,
helpers_exports as Helpers,
Innertube,
ItemSectionContinuation,
JsAnalyzer,
JsExtractor,
helpers_exports2 as JsHelpers,
matchers_exports as JsMatchers,
LZW_exports as LZW,
LiveChatContinuation,
Log_exports as Log,
managers_exports as Managers,
misc_exports as Misc,
mixins_exports as Mixins,
MusicPlaylistShelfContinuation,
MusicShelfContinuation,
NavigateAction,
OAuth2,
parser_exports as Parser,
Platform,
Player,
PlaylistPanelContinuation,
ProtoUtils_exports as ProtoUtils,
ReloadContinuationItemsCommand,
SectionListContinuation,
Session,
ShowMiniplayerCommand,
UniversalCache,
Utils_exports as Utils,
youtube_exports as YT,
ytkids_exports as YTKids,
ytmusic_exports as YTMusic,
nodes_exports as YTNodes,
ytshorts_exports as YTShorts,
cf_worker_default as default
};
//# sourceMappingURL=cf-worker.js.map