wowup-lib-core
Version:
1,206 lines (1,138 loc) • 114 kB
JavaScript
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, '&').replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '"').replace(/'/g, ''').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