UNPKG

wowup-lib-core

Version:
1,206 lines (1,138 loc) 114 kB
var $988mA$lodash = require("lodash"); var $988mA$uuid = require("uuid"); var $988mA$tscustomerror = require("ts-custom-error"); var $988mA$markdownit = require("markdown-it"); var $988mA$stringsimilarity = require("string-similarity"); function $parcel$exportWildcard(dest, source) { Object.keys(source).forEach(function(key) { if (key === 'default' || key === '__esModule' || Object.prototype.hasOwnProperty.call(dest, key)) { return; } Object.defineProperty(dest, key, { enumerable: true, get: function get() { return source[key]; } }); }); return dest; } function $parcel$export(e, n, v, s) { Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true}); } var $d505444d61c0b9b9$exports = {}; $parcel$export($d505444d61c0b9b9$exports, "AddonProvider", () => $d505444d61c0b9b9$export$94a1fd3bcee9529a); /* eslint-disable @typescript-eslint/no-unused-vars */ class $d505444d61c0b9b9$export$94a1fd3bcee9529a { getAllBatch(installations, addonIds) { return Promise.resolve({ errors: {}, installationResults: {} }); } getAll(installation, addonIds) { return Promise.resolve({ errors: [], searchResults: [] }); } getFeaturedAddons(installation, channelType) { return Promise.resolve([]); } shouldMigrate(addon) { return false; } searchByQuery(query, installation, channelType) { return Promise.resolve([]); } searchByUrl(addonUri, installation) { return Promise.resolve(undefined); } searchProtocol(protocol) { return Promise.resolve(undefined); } getCategory(category, installation) { return Promise.resolve([]); } getById(addonId, installation) { return Promise.resolve(undefined); } isValidAddonUri(addonUri) { return false; } isValidAddonId(addonId) { return false; } isValidProtocol(protocol) { return false; } scan(installation, addonChannelType, addonFolders) { return Promise.resolve(undefined); } getChangelog(installation, externalId, externalReleaseId) { return Promise.resolve(''); } async getDescription(installation, externalId, addon) { return Promise.resolve(''); } getAdPageParams() { return undefined; } getDownloadAuth() { return Promise.resolve(undefined); } constructor(){ this.name = 'Unknown'; this.enabled = false; this.forceIgnore = true; this.allowReinstall = false; this.allowChannelChange = false; this.allowEdit = false; this.allowViewAtSource = true; this.allowReScan = true; this.canShowChangelog = true; this.canBatchFetch = false; this.authRequired = false; this.adRequired = false; this.providerNote = ''; } } var $8c2094342e06e0ec$exports = {}; var $3bc810309d87ce1d$exports = {}; $parcel$export($3bc810309d87ce1d$exports, "WowUpAddonProvider", () => $3bc810309d87ce1d$export$ffcbd940f1cdeba3); const $af8d31735c159a26$export$e304de36686f57ab = 'WowUpHub'; const $af8d31735c159a26$export$b479ece230133092 = 'WowInterface'; const $af8d31735c159a26$export$d3c2b53bc8889c55 = 'TukUI'; var $bca446977c7d12f1$exports = {}; var $90f8b46f95f714d5$exports = {}; $parcel$export($90f8b46f95f714d5$exports, "ErrorContainer", () => $90f8b46f95f714d5$export$97bdf39f6b82bb0); class $90f8b46f95f714d5$export$97bdf39f6b82bb0 extends (0, $988mA$tscustomerror.CustomError) { constructor(innerError, message, warningType){ super(message); this.innerError = innerError; this.warningType = warningType; } } var $77fe2d115ecd2e32$exports = {}; $parcel$export($77fe2d115ecd2e32$exports, "GenericProviderError", () => $77fe2d115ecd2e32$export$b2f2a8bf3da76ab8); class $77fe2d115ecd2e32$export$b2f2a8bf3da76ab8 extends (0, $90f8b46f95f714d5$export$97bdf39f6b82bb0) { } var $30d4dd98b4843be1$exports = {}; $parcel$export($30d4dd98b4843be1$exports, "SourceRemovedAddonError", () => $30d4dd98b4843be1$export$76b02e36ee9dcc33); var $faefaad95e5fcca0$exports = {}; $parcel$export($faefaad95e5fcca0$exports, "AddonChannelType", () => $faefaad95e5fcca0$export$d045354f167da29); $parcel$export($faefaad95e5fcca0$exports, "AddonDependencyType", () => $faefaad95e5fcca0$export$fb18689ba4522794); $parcel$export($faefaad95e5fcca0$exports, "AddonWarningType", () => $faefaad95e5fcca0$export$8f1fa068c05f9b65); $parcel$export($faefaad95e5fcca0$exports, "AddonCategory", () => $faefaad95e5fcca0$export$fc24ddd65f8d3565); $parcel$export($faefaad95e5fcca0$exports, "WowClientType", () => $faefaad95e5fcca0$export$a56ef7ad1ec687bf); $parcel$export($faefaad95e5fcca0$exports, "WowClientGroup", () => $faefaad95e5fcca0$export$b4ac9946b7924ac7); $parcel$export($faefaad95e5fcca0$exports, "WowGameType", () => $faefaad95e5fcca0$export$b5eb10e2ed949d71); var $faefaad95e5fcca0$export$d045354f167da29 = /*#__PURE__*/ function(AddonChannelType) { AddonChannelType[AddonChannelType["Stable"] = 0] = "Stable"; AddonChannelType[AddonChannelType["Beta"] = 1] = "Beta"; AddonChannelType[AddonChannelType["Alpha"] = 2] = "Alpha"; return AddonChannelType; }({}); var $faefaad95e5fcca0$export$fb18689ba4522794 = /*#__PURE__*/ function(AddonDependencyType) { AddonDependencyType[AddonDependencyType["Embedded"] = 1] = "Embedded"; AddonDependencyType[AddonDependencyType["Required"] = 2] = "Required"; AddonDependencyType[AddonDependencyType["Optional"] = 3] = "Optional"; AddonDependencyType[AddonDependencyType["Other"] = 4] = "Other"; return AddonDependencyType; }({}); var $faefaad95e5fcca0$export$8f1fa068c05f9b65 = /*#__PURE__*/ function(AddonWarningType) { AddonWarningType["GameVersionTocMissing"] = "game-version-toc-missing"; AddonWarningType["MissingOnProvider"] = "missing-on-provider"; AddonWarningType["NoProviderFiles"] = "no-provider-files"; AddonWarningType["TocNameMismatch"] = "toc-name-mismatch"; return AddonWarningType; }({}); var $faefaad95e5fcca0$export$fc24ddd65f8d3565 = /*#__PURE__*/ function(AddonCategory) { AddonCategory[AddonCategory["Unknown"] = 0] = "Unknown"; AddonCategory[AddonCategory["AllAddons"] = 1] = "AllAddons"; AddonCategory[AddonCategory["Achievements"] = 2] = "Achievements"; AddonCategory[AddonCategory["ActionBars"] = 3] = "ActionBars"; AddonCategory[AddonCategory["AuctionEconomy"] = 4] = "AuctionEconomy"; AddonCategory[AddonCategory["BagsInventory"] = 5] = "BagsInventory"; AddonCategory[AddonCategory["BossEncounters"] = 6] = "BossEncounters"; AddonCategory[AddonCategory["BuffsDebuffs"] = 7] = "BuffsDebuffs"; AddonCategory[AddonCategory["Bundles"] = 8] = "Bundles"; AddonCategory[AddonCategory["ChatCommunication"] = 9] = "ChatCommunication"; AddonCategory[AddonCategory["Class"] = 10] = "Class"; AddonCategory[AddonCategory["Combat"] = 11] = "Combat"; AddonCategory[AddonCategory["Companions"] = 12] = "Companions"; AddonCategory[AddonCategory["DataExport"] = 13] = "DataExport"; AddonCategory[AddonCategory["DevelopmentTools"] = 14] = "DevelopmentTools"; AddonCategory[AddonCategory["Guild"] = 15] = "Guild"; AddonCategory[AddonCategory["Libraries"] = 16] = "Libraries"; AddonCategory[AddonCategory["Mail"] = 17] = "Mail"; AddonCategory[AddonCategory["MapMinimap"] = 18] = "MapMinimap"; AddonCategory[AddonCategory["Miscellaneous"] = 19] = "Miscellaneous"; AddonCategory[AddonCategory["Missions"] = 20] = "Missions"; AddonCategory[AddonCategory["Plugins"] = 21] = "Plugins"; AddonCategory[AddonCategory["Professions"] = 22] = "Professions"; AddonCategory[AddonCategory["PVP"] = 23] = "PVP"; AddonCategory[AddonCategory["QuestsLeveling"] = 24] = "QuestsLeveling"; AddonCategory[AddonCategory["Roleplay"] = 25] = "Roleplay"; AddonCategory[AddonCategory["Tooltips"] = 26] = "Tooltips"; AddonCategory[AddonCategory["UnitFrames"] = 27] = "UnitFrames"; return AddonCategory; }({}); var $faefaad95e5fcca0$export$a56ef7ad1ec687bf = /*#__PURE__*/ function(WowClientType) { WowClientType[WowClientType["Retail"] = 0] = "Retail"; WowClientType[WowClientType["Classic"] = 1] = "Classic"; WowClientType[WowClientType["RetailPtr"] = 2] = "RetailPtr"; WowClientType[WowClientType["ClassicPtr"] = 3] = "ClassicPtr"; WowClientType[WowClientType["Beta"] = 4] = "Beta"; WowClientType[WowClientType["ClassicBeta"] = 5] = "ClassicBeta"; WowClientType[WowClientType["ClassicEra"] = 6] = "ClassicEra"; WowClientType[WowClientType["ClassicEraPtr"] = 7] = "ClassicEraPtr"; WowClientType[WowClientType["RetailXPtr"] = 8] = "RetailXPtr"; WowClientType[WowClientType["None"] = 9] = "None"; return WowClientType; }({}); var $faefaad95e5fcca0$export$b4ac9946b7924ac7 = /*#__PURE__*/ function(WowClientGroup) { WowClientGroup[WowClientGroup["Retail"] = 0] = "Retail"; WowClientGroup[WowClientGroup["BurningCrusade"] = 1] = "BurningCrusade"; WowClientGroup[WowClientGroup["Classic"] = 2] = "Classic"; WowClientGroup[WowClientGroup["WOTLK"] = 3] = "WOTLK"; WowClientGroup[WowClientGroup["Cata"] = 4] = "Cata"; WowClientGroup[WowClientGroup["Mists"] = 5] = "Mists"; return WowClientGroup; }({}); var $faefaad95e5fcca0$export$b5eb10e2ed949d71 = /*#__PURE__*/ function(WowGameType) { WowGameType["Retail"] = "retail"; WowGameType["Classic"] = "classic"; WowGameType["BurningCrusade"] = "burningCrusade"; WowGameType["WOTLK"] = "wotlk"; WowGameType["Cata"] = "cata"; WowGameType["Mists"] = "mists"; return WowGameType; }({}); class $30d4dd98b4843be1$export$76b02e36ee9dcc33 extends (0, $77fe2d115ecd2e32$export$b2f2a8bf3da76ab8) { constructor(addonId, innerError){ super(innerError, '', (0, $faefaad95e5fcca0$export$8f1fa068c05f9b65).MissingOnProvider), this.addonId = addonId; } } $parcel$exportWildcard($bca446977c7d12f1$exports, $90f8b46f95f714d5$exports); $parcel$exportWildcard($bca446977c7d12f1$exports, $77fe2d115ecd2e32$exports); $parcel$exportWildcard($bca446977c7d12f1$exports, $30d4dd98b4843be1$exports); var $d7167569386d0d4c$exports = {}; var $e1c908100ed65354$exports = {}; $parcel$export($e1c908100ed65354$exports, "getGameVersionList", () => $e1c908100ed65354$export$692f1cc36daf4e6b); $parcel$export($e1c908100ed65354$exports, "getGameVersion", () => $e1c908100ed65354$export$6538dd8981ac38d0); function $e1c908100ed65354$export$692f1cc36daf4e6b(interfaceStrs) { return interfaceStrs.map((x)=>$e1c908100ed65354$export$6538dd8981ac38d0(x)); } function $e1c908100ed65354$export$6538dd8981ac38d0(interfaceStr) { if (typeof interfaceStr !== 'string' || interfaceStr.length === 0) return Array(3).fill('0').join('.'); if (interfaceStr.toString().indexOf('.') !== -1) return interfaceStr; // split the long interface into 3 chunks, major minor patch const chunks = [ interfaceStr.substring(0, interfaceStr.length - 4), interfaceStr.substring(interfaceStr.length - 4, interfaceStr.length - 2), interfaceStr.substring(interfaceStr.length - 2) ]; return chunks.map((c)=>parseInt(c, 10)).join('.'); } var $0d6cddfe4f838ada$exports = {}; $parcel$export($0d6cddfe4f838ada$exports, "convertBbcode", () => $0d6cddfe4f838ada$export$5219cb438f5def3); const $ddd5042797a4d3c0$export$a07804094c3ecf2d = '\n'; const $ddd5042797a4d3c0$export$f1c9dd0f5207dd5e = '\t'; const $ddd5042797a4d3c0$export$d66501df72047452 = '\f'; const $ddd5042797a4d3c0$export$db202ddc8be9136 = '\r'; const $ddd5042797a4d3c0$export$1c0a5d05eb3f6e18 = '='; const $ddd5042797a4d3c0$export$ec02bebb3d587457 = '"'; const $ddd5042797a4d3c0$export$27b7b95a5fde2b31 = ' '; const $ddd5042797a4d3c0$export$ca00c90a733986ad = '['; const $ddd5042797a4d3c0$export$1c9e21dfacb095e = ']'; const $ddd5042797a4d3c0$export$98238152dfccf046 = '/'; const $ddd5042797a4d3c0$export$80ffa1da6354d2a3 = '\\'; const $d69a264b7d00bcdd$export$acf5cbfef892896d = (el)=>typeof el === 'object' && !!el.tag; const $d69a264b7d00bcdd$export$ab3acb3c52feae8e = (el)=>typeof el === 'string'; const $d69a264b7d00bcdd$export$d12fbd4c03fafcb9 = (el)=>el === (0, $ddd5042797a4d3c0$export$a07804094c3ecf2d); const $d69a264b7d00bcdd$var$keysReduce = (obj, reduce, def)=>Object.keys(obj).reduce(reduce, def); const $d69a264b7d00bcdd$export$764444cc90432ec4 = (node)=>{ if ($d69a264b7d00bcdd$export$acf5cbfef892896d(node)) return node.content.reduce((count, contentNode)=>count + $d69a264b7d00bcdd$export$764444cc90432ec4(contentNode), 0); if ($d69a264b7d00bcdd$export$ab3acb3c52feae8e(node)) return node.length; return 0; }; /** * Appends value to Tag Node * @param {TagNode} node * @param value */ const $d69a264b7d00bcdd$export$8cf9602f2d674b24 = (node, value)=>{ node.content.push(value); }; /** * Replaces " to &qquot; * @param {String} value */ const $d69a264b7d00bcdd$export$5dd27816c66fb702 = (value)=>value.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;').replace(/'/g, '&#039;').replace(/(javascript|data|vbscript):/gi, '$1%3A'); /** * Acept name and value and return valid html5 attribute string * @param {String} name * @param {String} value * @return {string} */ const $d69a264b7d00bcdd$export$8b278404877d50e2 = (name, value)=>{ const type = typeof value; const types = { boolean: ()=>value ? `${name}` : '', number: ()=>`${name}="${value}"`, string: ()=>`${name}="${$d69a264b7d00bcdd$export$5dd27816c66fb702(value)}"`, object: ()=>`${name}="${$d69a264b7d00bcdd$export$5dd27816c66fb702(JSON.stringify(value))}"` }; return types[type] ? types[type]() : ''; }; /** * Transforms attrs to html params string * @param values */ const $d69a264b7d00bcdd$export$f12220bef2863039 = (values)=>{ // To avoid some malformed attributes if (values == null) return ''; return $d69a264b7d00bcdd$var$keysReduce(values, (arr, key)=>[ ...arr, $d69a264b7d00bcdd$export$8b278404877d50e2(key, values[key]) ], [ '' ]).join(' '); }; /** * Gets value from * @example * getUniqAttr({ 'foo': true, 'bar': bar' }) => 'bar' * @param attrs * @returns {string} */ const $d69a264b7d00bcdd$export$789d431171141ae4 = (attrs)=>$d69a264b7d00bcdd$var$keysReduce(attrs, (res, key)=>attrs[key] === key ? attrs[key] : null, null); const $5bc751c3cdc57441$var$getTagAttrs = (tag, params)=>{ const uniqAattr = (0, $d69a264b7d00bcdd$export$789d431171141ae4)(params); if (uniqAattr) { const tagAttr = (0, $d69a264b7d00bcdd$export$8b278404877d50e2)(tag, uniqAattr); const attrs = { ...params }; delete attrs[uniqAattr]; const attrsStr = (0, $d69a264b7d00bcdd$export$f12220bef2863039)(attrs); return `${tagAttr}${attrsStr}`; } return `${tag}${(0, $d69a264b7d00bcdd$export$f12220bef2863039)(params)}`; }; class $5bc751c3cdc57441$export$e9f1532f37a263c7 { constructor(tag, attrs, content){ this.tag = tag; this.attrs = attrs; this.content = Array.isArray(content) ? content : [ content ]; } attr(name, value) { if (typeof value !== 'undefined') this.attrs[name] = value; return this.attrs[name]; } append(value) { return (0, $d69a264b7d00bcdd$export$8cf9602f2d674b24)(this, value); } get length() { return (0, $d69a264b7d00bcdd$export$764444cc90432ec4)(this); } toTagStart({ openTag: openTag = (0, $ddd5042797a4d3c0$export$ca00c90a733986ad), closeTag: closeTag = (0, $ddd5042797a4d3c0$export$1c9e21dfacb095e) } = {}) { const tagAttrs = $5bc751c3cdc57441$var$getTagAttrs(this.tag, this.attrs); return `${openTag}${tagAttrs}${closeTag}`; } toTagEnd({ openTag: openTag = (0, $ddd5042797a4d3c0$export$ca00c90a733986ad), closeTag: closeTag = (0, $ddd5042797a4d3c0$export$1c9e21dfacb095e) } = {}) { return `${openTag}${0, $ddd5042797a4d3c0$export$98238152dfccf046}${this.tag}${closeTag}`; } toTagNode() { return new $5bc751c3cdc57441$export$e9f1532f37a263c7(this.tag.toLowerCase(), this.attrs, this.content); } toString({ openTag: openTag = (0, $ddd5042797a4d3c0$export$ca00c90a733986ad), closeTag: closeTag = (0, $ddd5042797a4d3c0$export$1c9e21dfacb095e) } = {}) { const isEmpty = this.content.length === 0; const content = this.content.reduce((r, node)=>r + node.toString({ openTag: openTag, closeTag: closeTag }), ''); const tagStart = this.toTagStart({ openTag: openTag, closeTag: closeTag }); if (isEmpty) return tagStart; return `${tagStart}${content}${this.toTagEnd({ openTag: openTag, closeTag: closeTag })}`; } } const $5bc751c3cdc57441$export$17618813e93d6bac = (tag, attrs = {}, content = [])=>new $5bc751c3cdc57441$export$e9f1532f37a263c7(tag, attrs, content); const $5bc751c3cdc57441$export$abf651b00b1d366d = (node, type)=>node.tag === type; // type, value, line, row, const $ecd72734d645606d$var$TOKEN_TYPE_ID = 'type'; // 0; const $ecd72734d645606d$var$TOKEN_VALUE_ID = 'value'; // 1; const $ecd72734d645606d$var$TOKEN_COLUMN_ID = 'row'; // 2; const $ecd72734d645606d$var$TOKEN_LINE_ID = 'line'; // 3; const $ecd72734d645606d$var$TOKEN_TYPE_WORD = 1; // 'word'; const $ecd72734d645606d$var$TOKEN_TYPE_TAG = 2; // 'tag'; const $ecd72734d645606d$var$TOKEN_TYPE_ATTR_NAME = 3; // 'attr-name'; const $ecd72734d645606d$var$TOKEN_TYPE_ATTR_VALUE = 4; // 'attr-value'; const $ecd72734d645606d$var$TOKEN_TYPE_SPACE = 5; // 'space'; const $ecd72734d645606d$var$TOKEN_TYPE_NEW_LINE = 6; // 'new-line'; /** * @param {Token} token * @returns {string} */ const $ecd72734d645606d$var$getTokenValue = (token)=>{ if (token && typeof token[$ecd72734d645606d$var$TOKEN_VALUE_ID] !== 'undefined') return token[$ecd72734d645606d$var$TOKEN_VALUE_ID]; return ''; }; /** * @param {Token}token * @returns {number} */ const $ecd72734d645606d$var$getTokenLine = (token)=>token && token[$ecd72734d645606d$var$TOKEN_LINE_ID] || 0; const $ecd72734d645606d$var$getTokenColumn = (token)=>token && token[$ecd72734d645606d$var$TOKEN_COLUMN_ID] || 0; /** * @param {Token} token * @returns {boolean} */ const $ecd72734d645606d$var$isTextToken = (token)=>{ if (token && typeof token[$ecd72734d645606d$var$TOKEN_TYPE_ID] !== 'undefined') return token[$ecd72734d645606d$var$TOKEN_TYPE_ID] === $ecd72734d645606d$var$TOKEN_TYPE_SPACE || token[$ecd72734d645606d$var$TOKEN_TYPE_ID] === $ecd72734d645606d$var$TOKEN_TYPE_NEW_LINE || token[$ecd72734d645606d$var$TOKEN_TYPE_ID] === $ecd72734d645606d$var$TOKEN_TYPE_WORD; return false; }; /** * @param {Token} token * @returns {boolean} */ const $ecd72734d645606d$var$isTagToken = (token)=>{ if (token && typeof token[$ecd72734d645606d$var$TOKEN_TYPE_ID] !== 'undefined') return token[$ecd72734d645606d$var$TOKEN_TYPE_ID] === $ecd72734d645606d$var$TOKEN_TYPE_TAG; return false; }; const $ecd72734d645606d$var$isTagEnd = (token)=>$ecd72734d645606d$var$getTokenValue(token).charCodeAt(0) === (0, $ddd5042797a4d3c0$export$98238152dfccf046).charCodeAt(0); const $ecd72734d645606d$var$isTagStart = (token)=>!$ecd72734d645606d$var$isTagEnd(token); const $ecd72734d645606d$var$isAttrNameToken = (token)=>{ if (token && typeof token[$ecd72734d645606d$var$TOKEN_TYPE_ID] !== 'undefined') return token[$ecd72734d645606d$var$TOKEN_TYPE_ID] === $ecd72734d645606d$var$TOKEN_TYPE_ATTR_NAME; return false; }; /** * @param {Token} token * @returns {boolean} */ const $ecd72734d645606d$var$isAttrValueToken = (token)=>{ if (token && typeof token[$ecd72734d645606d$var$TOKEN_TYPE_ID] !== 'undefined') return token[$ecd72734d645606d$var$TOKEN_TYPE_ID] === $ecd72734d645606d$var$TOKEN_TYPE_ATTR_VALUE; return false; }; const $ecd72734d645606d$var$getTagName = (token)=>{ const value = $ecd72734d645606d$var$getTokenValue(token); return $ecd72734d645606d$var$isTagEnd(token) ? value.slice(1) : value; }; const $ecd72734d645606d$var$convertTagToText = (token)=>{ let text = (0, $ddd5042797a4d3c0$export$ca00c90a733986ad); text += $ecd72734d645606d$var$getTokenValue(token); text += (0, $ddd5042797a4d3c0$export$1c9e21dfacb095e); return text; }; class $ecd72734d645606d$export$50792b0e93539fde { /** * @param {String} type * @param {String} value * @param line * @param row */ constructor(type, value, line, row){ this[$ecd72734d645606d$var$TOKEN_TYPE_ID] = Number(type); this[$ecd72734d645606d$var$TOKEN_VALUE_ID] = String(value); this[$ecd72734d645606d$var$TOKEN_LINE_ID] = Number(line); this[$ecd72734d645606d$var$TOKEN_COLUMN_ID] = Number(row); } isEmpty() { return isNaN(this[$ecd72734d645606d$var$TOKEN_TYPE_ID]); } isText() { return $ecd72734d645606d$var$isTextToken(this); } isTag() { return $ecd72734d645606d$var$isTagToken(this); } isAttrName() { return $ecd72734d645606d$var$isAttrNameToken(this); } isAttrValue() { return $ecd72734d645606d$var$isAttrValueToken(this); } isStart() { return $ecd72734d645606d$var$isTagStart(this); } isEnd() { return $ecd72734d645606d$var$isTagEnd(this); } getName() { return $ecd72734d645606d$var$getTagName(this); } getValue() { return $ecd72734d645606d$var$getTokenValue(this); } getLine() { return $ecd72734d645606d$var$getTokenLine(this); } getColumn() { return $ecd72734d645606d$var$getTokenColumn(this); } toString() { return $ecd72734d645606d$var$convertTagToText(this); } } const $ecd72734d645606d$export$7c51262a8e3622c5 = $ecd72734d645606d$var$TOKEN_TYPE_ID; const $ecd72734d645606d$export$b852257387b58445 = $ecd72734d645606d$var$TOKEN_VALUE_ID; const $ecd72734d645606d$export$8bfab114887fbd3f = $ecd72734d645606d$var$TOKEN_LINE_ID; const $ecd72734d645606d$export$e92d3fe80bd1d657 = $ecd72734d645606d$var$TOKEN_COLUMN_ID; const $ecd72734d645606d$export$8b4c01b7cd875b89 = $ecd72734d645606d$var$TOKEN_TYPE_WORD; const $ecd72734d645606d$export$d5f00fab9fda576b = $ecd72734d645606d$var$TOKEN_TYPE_TAG; const $ecd72734d645606d$export$af3a20cc8143022e = $ecd72734d645606d$var$TOKEN_TYPE_ATTR_NAME; const $ecd72734d645606d$export$2fc145e106e65582 = $ecd72734d645606d$var$TOKEN_TYPE_ATTR_VALUE; const $ecd72734d645606d$export$2cf6eaa8fcfe1d4d = $ecd72734d645606d$var$TOKEN_TYPE_SPACE; const $ecd72734d645606d$export$87d97767ed6e106 = $ecd72734d645606d$var$TOKEN_TYPE_NEW_LINE; function $8d178c2fe9a3df90$var$CharGrabber(source, options) { const cursor = { pos: 0, len: source.length }; const substrUntilChar = (char)=>{ const { pos: pos } = cursor; const idx = source.indexOf(char, pos); return idx >= 0 ? source.substring(pos, idx) : ''; }; const includes = (val)=>source.indexOf(val, cursor.pos) >= 0; const hasNext = ()=>cursor.len > cursor.pos; const isLast = ()=>cursor.pos === cursor.len; const skip = (num = 1, silent)=>{ cursor.pos += num; if (options && options.onSkip && !silent) options.onSkip(); }; const rest = ()=>source.substring(cursor.pos); const grabN = (num = 0)=>source.substring(cursor.pos, cursor.pos + num); const curr = ()=>source[cursor.pos]; const prev = ()=>{ const prevPos = cursor.pos - 1; return typeof source[prevPos] !== 'undefined' ? source[prevPos] : null; }; const next = ()=>{ const nextPos = cursor.pos + 1; return nextPos <= source.length - 1 ? source[nextPos] : null; }; const grabWhile = (cond, silent)=>{ let start = 0; if (hasNext()) { start = cursor.pos; while(hasNext() && cond(curr()))skip(1, silent); } return source.substring(start, cursor.pos); }; /** * @type {skip} */ this.skip = skip; /** * @returns {Boolean} */ this.hasNext = hasNext; /** * @returns {String} */ this.getCurr = curr; /** * @returns {String} */ this.getRest = rest; /** * @returns {String} */ this.getNext = next; /** * @returns {String} */ this.getPrev = prev; /** * @returns {Boolean} */ this.isLast = isLast; /** * @returns {Boolean} */ this.includes = includes; /** * @param {Function} cond * @param {Boolean} silent * @return {String} */ this.grabWhile = grabWhile; /** * @param {Number} num * @return {String} */ this.grabN = grabN; /** * Grabs rest of string until it find a char * @param {String} char * @return {String} */ this.substrUntilChar = substrUntilChar; } const $8d178c2fe9a3df90$export$70cbeeca25cb6f01 = (source, options)=>new $8d178c2fe9a3df90$var$CharGrabber(source, options); const $8d178c2fe9a3df90$export$74daeb15908b8515 = (str, charToRemove)=>{ while(str.charAt(0) === charToRemove)str = str.substring(1); while(str.charAt(str.length - 1) === charToRemove)str = str.substring(0, str.length - 1); return str; }; const $8d178c2fe9a3df90$export$f0199846ca09d4f9 = (str)=>str.replace((0, $ddd5042797a4d3c0$export$80ffa1da6354d2a3) + (0, $ddd5042797a4d3c0$export$ec02bebb3d587457), (0, $ddd5042797a4d3c0$export$ec02bebb3d587457)); function $8d178c2fe9a3df90$var$NodeList(values = []) { const nodes = values; const getLast = ()=>Array.isArray(nodes) && nodes.length > 0 && typeof nodes[nodes.length - 1] !== 'undefined' ? nodes[nodes.length - 1] : null; const flushLast = ()=>nodes.length ? nodes.pop() : false; const push = (value)=>nodes.push(value); const toArray = ()=>nodes; this.push = push; this.toArray = toArray; this.getLast = getLast; this.flushLast = flushLast; } const $8d178c2fe9a3df90$export$5897d8d7c7a3d871 = (values = [])=>new $8d178c2fe9a3df90$var$NodeList(values); // for cases <!-- --> const $ca2798f2f1ba5cca$var$EM = '!'; /** * Creates a Token entity class * @param {Number} type * @param {String} value * @param {Number} r line number * @param {Number} cl char number in line */ const $ca2798f2f1ba5cca$var$createToken = (type, value, r = 0, cl = 0)=>new (0, $ecd72734d645606d$export$50792b0e93539fde)(type, value, r, cl); /** * @typedef {Object} Lexer * @property {Function} tokenize * @property {Function} isTokenNested */ /** * @param {String} buffer * @param {Object} options * @param {Function} options.onToken * @param {String} options.openTag * @param {String} options.closeTag * @param {Boolean} options.enableEscapeTags * @return {Lexer} */ function $ca2798f2f1ba5cca$export$542413421c3f8a82(buffer, options = {}) { const STATE_WORD = 0; const STATE_TAG = 1; const STATE_TAG_ATTRS = 2; const TAG_STATE_NAME = 0; const TAG_STATE_ATTR = 1; const TAG_STATE_VALUE = 2; let row = 0; let col = 0; let tokenIndex = -1; let stateMode = STATE_WORD; let tagMode = TAG_STATE_NAME; let contextFreeTag = ''; const tokens = new Array(Math.floor(buffer.length)); const openTag = options.openTag || (0, $ddd5042797a4d3c0$export$ca00c90a733986ad); const closeTag = options.closeTag || (0, $ddd5042797a4d3c0$export$1c9e21dfacb095e); const escapeTags = !!options.enableEscapeTags; const contextFreeTags = options.contextFreeTags || []; const onToken = options.onToken || (()=>{}); const RESERVED_CHARS = [ closeTag, openTag, (0, $ddd5042797a4d3c0$export$ec02bebb3d587457), (0, $ddd5042797a4d3c0$export$80ffa1da6354d2a3), (0, $ddd5042797a4d3c0$export$27b7b95a5fde2b31), (0, $ddd5042797a4d3c0$export$f1c9dd0f5207dd5e), (0, $ddd5042797a4d3c0$export$1c0a5d05eb3f6e18), (0, $ddd5042797a4d3c0$export$a07804094c3ecf2d), $ca2798f2f1ba5cca$var$EM ]; const NOT_CHAR_TOKENS = [ openTag, (0, $ddd5042797a4d3c0$export$27b7b95a5fde2b31), (0, $ddd5042797a4d3c0$export$f1c9dd0f5207dd5e), (0, $ddd5042797a4d3c0$export$a07804094c3ecf2d) ]; const WHITESPACES = [ (0, $ddd5042797a4d3c0$export$27b7b95a5fde2b31), (0, $ddd5042797a4d3c0$export$f1c9dd0f5207dd5e) ]; const SPECIAL_CHARS = [ (0, $ddd5042797a4d3c0$export$1c0a5d05eb3f6e18), (0, $ddd5042797a4d3c0$export$27b7b95a5fde2b31), (0, $ddd5042797a4d3c0$export$f1c9dd0f5207dd5e) ]; const isCharReserved = (char)=>RESERVED_CHARS.indexOf(char) >= 0; const isNewLine = (char)=>char === (0, $ddd5042797a4d3c0$export$a07804094c3ecf2d); const isWhiteSpace = (char)=>WHITESPACES.indexOf(char) >= 0; const isCharToken = (char)=>NOT_CHAR_TOKENS.indexOf(char) === -1; const isSpecialChar = (char)=>SPECIAL_CHARS.indexOf(char) >= 0; const isEscapableChar = (char)=>char === openTag || char === closeTag || char === (0, $ddd5042797a4d3c0$export$80ffa1da6354d2a3); const isEscapeChar = (char)=>char === (0, $ddd5042797a4d3c0$export$80ffa1da6354d2a3); const onSkip = ()=>{ col++; }; const unq = (val)=>(0, $8d178c2fe9a3df90$export$f0199846ca09d4f9)((0, $8d178c2fe9a3df90$export$74daeb15908b8515)(val, (0, $ddd5042797a4d3c0$export$ec02bebb3d587457))); const checkContextFreeMode = (name, isClosingTag)=>{ if (contextFreeTag !== '' && isClosingTag) contextFreeTag = ''; if (contextFreeTag === '' && contextFreeTags.includes(name)) contextFreeTag = name; }; const chars = (0, $8d178c2fe9a3df90$export$70cbeeca25cb6f01)(buffer, { onSkip: onSkip }); /** * Emits newly created token to subscriber * @param {Number} type * @param {String} value */ function emitToken(type, value) { const token = $ca2798f2f1ba5cca$var$createToken(type, value, row, col); onToken(token); tokenIndex += 1; tokens[tokenIndex] = token; } function nextTagState(tagChars, isSingleValueTag) { if (tagMode === TAG_STATE_ATTR) { const validAttrName = (char)=>!(char === (0, $ddd5042797a4d3c0$export$1c0a5d05eb3f6e18) || isWhiteSpace(char)); const name = tagChars.grabWhile(validAttrName); const isEnd = tagChars.isLast(); const isValue = tagChars.getCurr() !== (0, $ddd5042797a4d3c0$export$1c0a5d05eb3f6e18); tagChars.skip(); if (isEnd || isValue) emitToken((0, $ecd72734d645606d$export$2fc145e106e65582), unq(name)); else emitToken((0, $ecd72734d645606d$export$af3a20cc8143022e), name); if (isEnd) return TAG_STATE_NAME; if (isValue) return TAG_STATE_ATTR; return TAG_STATE_VALUE; } if (tagMode === TAG_STATE_VALUE) { let stateSpecial = false; const validAttrValue = (char)=>{ // const isEQ = char === EQ; const isQM = char === (0, $ddd5042797a4d3c0$export$ec02bebb3d587457); const prevChar = tagChars.getPrev(); const nextChar = tagChars.getNext(); const isPrevSLASH = prevChar === (0, $ddd5042797a4d3c0$export$80ffa1da6354d2a3); const isNextEQ = nextChar === (0, $ddd5042797a4d3c0$export$1c0a5d05eb3f6e18); const isWS = isWhiteSpace(char); // const isPrevWS = isWhiteSpace(prevChar); const isNextWS = isWhiteSpace(nextChar); if (stateSpecial && isSpecialChar(char)) return true; if (isQM && !isPrevSLASH) { stateSpecial = !stateSpecial; if (!stateSpecial && !(isNextEQ || isNextWS)) return false; } if (!isSingleValueTag) return isWS === false; return true; }; const name = tagChars.grabWhile(validAttrValue); tagChars.skip(); emitToken((0, $ecd72734d645606d$export$2fc145e106e65582), unq(name)); if (tagChars.isLast()) return TAG_STATE_NAME; return TAG_STATE_ATTR; } const validName = (char)=>!(char === (0, $ddd5042797a4d3c0$export$1c0a5d05eb3f6e18) || isWhiteSpace(char) || tagChars.isLast()); const name = tagChars.grabWhile(validName); emitToken((0, $ecd72734d645606d$export$d5f00fab9fda576b), name); checkContextFreeMode(name); tagChars.skip(); // in cases when we has [url=someval]GET[/url] and we dont need to parse all if (isSingleValueTag) return TAG_STATE_VALUE; const hasEQ = tagChars.includes((0, $ddd5042797a4d3c0$export$1c0a5d05eb3f6e18)); return hasEQ ? TAG_STATE_ATTR : TAG_STATE_VALUE; } function stateTag() { const currChar = chars.getCurr(); const nextChar = chars.getNext(); chars.skip(); // detect case where we have '[My word [tag][/tag]' or we have '[My last line word' const substr = chars.substrUntilChar(closeTag); const hasInvalidChars = substr.length === 0 || substr.indexOf(openTag) >= 0; if (isCharReserved(nextChar) || hasInvalidChars || chars.isLast()) { emitToken((0, $ecd72734d645606d$export$8b4c01b7cd875b89), currChar); return STATE_WORD; } // [myTag ] const isNoAttrsInTag = substr.indexOf((0, $ddd5042797a4d3c0$export$1c0a5d05eb3f6e18)) === -1; // [/myTag] const isClosingTag = substr[0] === (0, $ddd5042797a4d3c0$export$98238152dfccf046); if (isNoAttrsInTag || isClosingTag) { const name = chars.grabWhile((char)=>char !== closeTag); chars.skip(); // skip closeTag emitToken((0, $ecd72734d645606d$export$d5f00fab9fda576b), name); checkContextFreeMode(name, isClosingTag); return STATE_WORD; } return STATE_TAG_ATTRS; } function stateAttrs() { const silent = true; const tagStr = chars.grabWhile((char)=>char !== closeTag, silent); const tagGrabber = (0, $8d178c2fe9a3df90$export$70cbeeca25cb6f01)(tagStr, { onSkip: onSkip }); const hasSpace = tagGrabber.includes((0, $ddd5042797a4d3c0$export$27b7b95a5fde2b31)); tagMode = TAG_STATE_NAME; while(tagGrabber.hasNext())tagMode = nextTagState(tagGrabber, !hasSpace); chars.skip(); // skip closeTag return STATE_WORD; } function stateWord() { if (isNewLine(chars.getCurr())) { emitToken((0, $ecd72734d645606d$export$87d97767ed6e106), chars.getCurr()); chars.skip(); col = 0; row++; return STATE_WORD; } if (isWhiteSpace(chars.getCurr())) { const word = chars.grabWhile(isWhiteSpace); emitToken((0, $ecd72734d645606d$export$2cf6eaa8fcfe1d4d), word); return STATE_WORD; } if (chars.getCurr() === openTag) { if (contextFreeTag) { const fullTagLen = openTag.length + (0, $ddd5042797a4d3c0$export$98238152dfccf046).length + contextFreeTag.length; const fullTagName = `${openTag}${(0, $ddd5042797a4d3c0$export$98238152dfccf046)}${contextFreeTag}`; const foundTag = chars.grabN(fullTagLen); const isEndContextFreeMode = foundTag === fullTagName; if (isEndContextFreeMode) return STATE_TAG; } else if (chars.includes(closeTag)) return STATE_TAG; emitToken((0, $ecd72734d645606d$export$8b4c01b7cd875b89), chars.getCurr()); chars.skip(); return STATE_WORD; } if (escapeTags) { if (isEscapeChar(chars.getCurr())) { const currChar = chars.getCurr(); const nextChar = chars.getNext(); chars.skip(); // skip the \ without emitting anything if (isEscapableChar(nextChar)) { chars.skip(); // skip past the [, ] or \ as well emitToken((0, $ecd72734d645606d$export$8b4c01b7cd875b89), nextChar); return STATE_WORD; } emitToken((0, $ecd72734d645606d$export$8b4c01b7cd875b89), currChar); return STATE_WORD; } const isChar = (char)=>isCharToken(char) && !isEscapeChar(char); const word = chars.grabWhile(isChar); emitToken((0, $ecd72734d645606d$export$8b4c01b7cd875b89), word); return STATE_WORD; } const word = chars.grabWhile(isCharToken); emitToken((0, $ecd72734d645606d$export$8b4c01b7cd875b89), word); return STATE_WORD; } function tokenize() { stateMode = STATE_WORD; while(chars.hasNext())switch(stateMode){ case STATE_TAG: stateMode = stateTag(); break; case STATE_TAG_ATTRS: stateMode = stateAttrs(); break; case STATE_WORD: default: stateMode = stateWord(); break; } tokens.length = tokenIndex + 1; return tokens; } function isTokenNested(token) { const value = openTag + (0, $ddd5042797a4d3c0$export$98238152dfccf046) + token.getValue(); // potential bottleneck return buffer.indexOf(value) > -1; } return { tokenize: tokenize, isTokenNested: isTokenNested }; } const $ca2798f2f1ba5cca$export$dc03caf4b5bfd0a0 = $ca2798f2f1ba5cca$var$createToken; /** * @public * @param {string} input * @param {Object} opts * @param {Function} opts.createTokenizer * @param {Array<string>} opts.onlyAllowTags * @param {Array<string>} opts.contextFreeTags * @param {Boolean} opts.enableEscapeTags * @param {string} opts.openTag * @param {string} opts.closeTag * @return {Array<string|TagNode>} */ const $b7d2fcb8d10105e2$export$98e6a39c04603d36 = (input, opts = {})=>{ const options = opts; const openTag = options.openTag || (0, $ddd5042797a4d3c0$export$ca00c90a733986ad); const closeTag = options.closeTag || (0, $ddd5042797a4d3c0$export$1c9e21dfacb095e); let tokenizer = null; /** * Result AST of nodes * @private * @type {NodeList} */ const nodes = (0, $8d178c2fe9a3df90$export$5897d8d7c7a3d871)(); /** * Temp buffer of nodes that's nested to another node * @private * @type {NodeList} */ const nestedNodes = (0, $8d178c2fe9a3df90$export$5897d8d7c7a3d871)(); /** * Temp buffer of nodes [tag..]...[/tag] * @private * @type {NodeList} */ const tagNodes = (0, $8d178c2fe9a3df90$export$5897d8d7c7a3d871)(); /** * Temp buffer of tag attributes * @private * @type {NodeList} */ const tagNodesAttrName = (0, $8d178c2fe9a3df90$export$5897d8d7c7a3d871)(); /** * Cache for nested tags checks * @type Set<string> */ const nestedTagsMap = new Set(); /** * @param {Token} token * @returns {boolean} */ const isTokenNested = (token)=>{ const value = token.getValue(); if (!nestedTagsMap.has(value) && tokenizer.isTokenNested && tokenizer.isTokenNested(token)) { nestedTagsMap.add(value); return true; } return nestedTagsMap.has(value); }; /** * @private * @param {string} tagName * @returns {boolean} */ const isTagNested = (tagName)=>Boolean(nestedTagsMap.has(tagName)); /** * @private * @param {string} value * @return {boolean} */ const isAllowedTag = (value)=>{ if (options.onlyAllowTags && options.onlyAllowTags.length) return options.onlyAllowTags.indexOf(value) >= 0; return true; }; /** * Flushes temp tag nodes and its attributes buffers * @private * @return {Array} */ const flushTagNodes = ()=>{ if (tagNodes.flushLast()) tagNodesAttrName.flushLast(); }; /** * @private * @return {Array} */ const getNodes = ()=>{ const lastNestedNode = nestedNodes.getLast(); if (lastNestedNode && Array.isArray(lastNestedNode.content)) return lastNestedNode.content; return nodes.toArray(); }; /** * @private * @param {string|TagNode} node * @param {boolean} isNested */ const appendNodeAsString = (node, isNested = true)=>{ const items = getNodes(); if (Array.isArray(items)) { items.push(node.toTagStart({ openTag: openTag, closeTag: closeTag })); if (node.content.length) { node.content.forEach((item)=>{ items.push(item); }); if (isNested) items.push(node.toTagEnd({ openTag: openTag, closeTag: closeTag })); } } }; /** * @private * @param {string|TagNode} node */ const appendNodes = (node)=>{ const items = getNodes(); if (Array.isArray(items)) { if ((0, $d69a264b7d00bcdd$export$acf5cbfef892896d)(node)) { if (isAllowedTag(node.tag)) items.push(node.toTagNode()); else appendNodeAsString(node); } else items.push(node); } }; /** * @private * @param {Token} token */ const handleTagStart = (token)=>{ flushTagNodes(); const tagNode = (0, $5bc751c3cdc57441$export$17618813e93d6bac)(token.getValue()); const isNested = isTokenNested(token); tagNodes.push(tagNode); if (isNested) nestedNodes.push(tagNode); else appendNodes(tagNode, token); }; /** * @private * @param {Token} token */ const handleTagEnd = (token)=>{ flushTagNodes(); const lastNestedNode = nestedNodes.flushLast(); if (lastNestedNode) appendNodes(lastNestedNode, token); else if (typeof options.onError === 'function') { const tag = token.getValue(); const line = token.getLine(); const column = token.getColumn(); options.onError({ message: `Inconsistent tag '${tag}' on line ${line} and column ${column}`, tagName: tag, lineNumber: line, columnNumber: column }); } }; /** * @private * @param {Token} token */ const handleTag = (token)=>{ // [tag] if (token.isStart()) handleTagStart(token); // [/tag] if (token.isEnd()) handleTagEnd(token); }; /** * @private * @param {Token} token */ const handleNode = (token)=>{ /** * @type {TagNode} */ const lastTagNode = tagNodes.getLast(); const tokenValue = token.getValue(); const isNested = isTagNested(token); if (lastTagNode) { if (token.isAttrName()) { tagNodesAttrName.push(tokenValue); lastTagNode.attr(tagNodesAttrName.getLast(), ''); } else if (token.isAttrValue()) { const attrName = tagNodesAttrName.getLast(); if (attrName) { lastTagNode.attr(attrName, tokenValue); tagNodesAttrName.flushLast(); } else lastTagNode.attr(tokenValue, tokenValue); } else if (token.isText()) { if (isNested) lastTagNode.append(tokenValue); else appendNodes(tokenValue); } else if (token.isTag()) // if tag is not allowed, just past it as is appendNodes(token.toString()); } else if (token.isText()) appendNodes(tokenValue); else if (token.isTag()) // if tag is not allowed, just past it as is appendNodes(token.toString()); }; /** * @private * @param {Token} token */ const onToken = (token)=>{ if (token.isTag()) handleTag(token); else handleNode(token); }; tokenizer = (opts.createTokenizer ? opts.createTokenizer : (0, $ca2798f2f1ba5cca$export$542413421c3f8a82))(input, { onToken: onToken, openTag: openTag, closeTag: closeTag, onlyAllowTags: options.onlyAllowTags, contextFreeTags: options.contextFreeTags, enableEscapeTags: options.enableEscapeTags }); tokenizer.tokenize(); // handles situations where we open tag, but forgot close them // for ex [q]test[/q][u]some[/u][q]some [u]some[/u] // forgot to close [/q] // so we need to flush nested content to nodes array const lastNestedNode = nestedNodes.flushLast(); if (lastNestedNode && isTagNested(lastNestedNode.tag)) appendNodeAsString(lastNestedNode, false); return nodes.toArray(); }; var $b7d2fcb8d10105e2$export$2e2bcd8739ae039 = $b7d2fcb8d10105e2$export$98e6a39c04603d36; const $a50b253e78482713$var$isObj = (value)=>typeof value === 'object'; const $a50b253e78482713$var$isBool = (value)=>typeof value === 'boolean'; function $a50b253e78482713$export$c1a059043cc9c119(t, cb) { const tree = t; if (Array.isArray(tree)) for(let idx = 0; idx < tree.length; idx++)tree[idx] = $a50b253e78482713$export$c1a059043cc9c119(cb(tree[idx]), cb); else if (tree && $a50b253e78482713$var$isObj(tree) && tree.content) $a50b253e78482713$export$c1a059043cc9c119(tree.content, cb); return tree; } function $a50b253e78482713$export$58b7571322dc50e1(expected, actual) { if (typeof expected !== typeof actual) return false; if (!$a50b253e78482713$var$isObj(expected) || expected === null) return expected === actual; if (Array.isArray(expected)) return expected.every((exp)=>[].some.call(actual, (act)=>$a50b253e78482713$export$58b7571322dc50e1(exp, act))); return Object.keys(expected).every((key)=>{ const ao = actual[key]; const eo = expected[key]; if ($a50b253e78482713$var$isObj(eo) && eo !== null && ao !== null) return $a50b253e78482713$export$58b7571322dc50e1(eo, ao); if ($a50b253e78482713$var$isBool(eo)) return eo !== (ao === null); return ao === eo; }); } function $a50b253e78482713$export$4659b591c19bdf3d(expression, cb) { return Array.isArray(expression) ? $a50b253e78482713$export$c1a059043cc9c119(this, (node)=>{ for(let idx = 0; idx < expression.length; idx++){ if ($a50b253e78482713$export$58b7571322dc50e1(expression[idx], node)) return cb(node); } return node; }) : $a50b253e78482713$export$c1a059043cc9c119(this, (node)=>$a50b253e78482713$export$58b7571322dc50e1(expression, node) ? cb(node) : node); } function $94a73a472a98a5c3$var$walk(cb) { return (0, $a50b253e78482713$export$c1a059043cc9c119)(this, cb); } function $94a73a472a98a5c3$export$2e2bcd8739ae039(plugs) { const plugins = typeof plugs === 'function' ? [ plugs ] : plugs || []; let options = { skipParse: false }; return { process (input, opts) { options = opts || {}; const parseFn = options.parser || (0, $b7d2fcb8d10105e2$export$98e6a39c04603d36); const renderFn = options.render; const data = options.data || null; if (typeof parseFn !== 'function') throw new Error('"parser" is not a function, please pass to "process(input, { parser })" right function'); let tree = options.skipParse ? input || [] : parseFn(input, options); // raw tree before modification with plugins const raw = tree; tree.messages = []; tree.options = options; tree.walk = $94a73a472a98a5c3$var$walk; tree.match = (0, $a50b253e78482713$export$4659b591c19bdf3d); plugins.forEach((plugin)=>{ tree = plugin(tree, { parse: parseFn, render: renderFn, iterate: $a50b253e78482713$export$c1a059043cc9c119, match: $a50b253e78482713$export$4659b591c19bdf3d, data: data }) || tree; }); return { get html () { if (typeof renderFn !== 'function') throw new Error('"render" function not defined, please pass to "process(input, { render })"'); return renderFn(tree, tree.options); }, tree: tree, raw: raw, messages: tree.messages }; } }; } const $ce77b5efbac02396$var$SELFCLOSE_END_TAG = '/>'; const $ce77b5efbac02396$var$CLOSE_START_TAG = '</'; const $ce77b5efbac02396$var$START_TAG = '<'; const $ce77b5efbac02396$var$END_TAG = '>'; const $ce77b5efbac02396$var$renderNode = (node, { stripTags: stripTags = false })=>{ if (!node) return ''; const type = typeof node; if (type === 'string' || type === 'number') return node; if (type === 'object') { if (stripTags === true) return $ce77b5efbac02396$var$renderNodes(node.content, { stripTags: stripTags }); if (node.content === null) return [ $ce77b5efbac02396$var$START_TAG, node.tag, (0, $d69a264b7d00bcdd$export$f12220bef2863039)(node.attrs), $ce77b5efbac02396$var$SELFCLOSE_END_TAG ].join(''); return [ $ce77b5efbac02396$var$START_TAG, node.tag, (0, $d69a264b7d00bcdd$export$f12220bef2863039)(node.attrs), $ce77b5efbac02396$var$END_TAG, $ce77b5efbac02396$var$renderNodes(node.content), $ce77b5efbac02396$var$CLOSE_START_TAG, node.tag, $ce77b5efbac02396$var$END_TAG ].join(''); } if (Array